0Pricing
Cryptology Academy · Aula

PRNGs criptograficamente seguros

Explore /dev/urandom, ChaCha20-CSPRNG e Fortuna.

PRNGs criptograficamente seguros é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.

Recapitulação dos requisitos de CSPRNG

Um CSPRNG deve satisfazer: (1) imprevisibilidade do próximo bit — mesmo conhecendo todos os bits anteriores, o próximo bit não pode ser previsto com probabilidade > 1/2 + desprezível; (2) resistência à extensão após comprometimento do estado — conhecer o estado atual não revela nada sobre a saída passada.

/dev/urandom e getrandom()

O Linux /dev/urandom usa um CSPRNG inicializado a partir do reservatório de entropia. Após a inicialização inicial (128 bits de entropia), é seguro usá-lo mesmo quando o reservatório está "vazio" — o CSPRNG mantém seu próprio estado interno. getrandom() é o equivalente moderno à chamada de sistema.

CSPRNG baseado em ChaCha20

O kernel do Linux 5.17+ substituiu seu CSPRNG por um projeto baseado em ChaCha20. ChaCha20 é rápido (não requer aceleração de hardware), oferece segurança de 256 bits e tem uma prova de segurança bem estabelecida. O nonce é o contador; a chave vem do reservatório de entropia.

Fortuna

Fortuna (Ferguson e Schneier, 2003) é um projeto de CSPRNG que mantém 32 reservatórios de entropia e acumula entropia continuamente. O gerador recebe uma nova semente dos reservatórios à medida que eles se enchem. É resistente a ataques de redefinição do RNG e de comprometimento parcial do estado.

Backdoor do DUAL_EC_DRBG

O NIST SP 800-90A originalmente incluía o DUAL_EC_DRBG, baseado em curvas elípticas. Documentos de Snowden revelaram que a NSA inseriu uma porta dos fundos: os pontos EC foram escolhidos de modo que a NSA pudesse prever a saída a partir de qualquer semente. Nunca use DUAL_EC_DRBG. O NIST o removeu em 2014.

CTR_DRBG

O CTR_DRBG (NIST SP 800-90A) usa AES no modo contador como CSPRNG. Semente = chave de 256 bits + nonce de 128 bits. Cada chamada avança o contador. É amplamente implementado no OpenSSL, no BoringSSL e no BCrypt do Windows. Há aceleração de hardware em CPUs com AES-NI.

HASH_DRBG e HMAC_DRBG

O HASH_DRBG usa uma função de hash (SHA-256) iterativamente com um valor de semente. O HMAC_DRBG usa HMAC para realizar a mistura. O HMAC_DRBG é mais simples de implementar corretamente e é usado em muitos sistemas embarcados (mbedTLS, WolfSSL).

Resemeadura e injeção de entropia

Até mesmo os CSPRNGs precisam ser re-semeados periodicamente. O CTR_DRBG tem um intervalo de re-semeadura de 2^48 solicitações. O Fortuna recebe novas sementes de seus reservatórios de entropia. Re-semeadura manual: adicione entropia nova (bytes obtidos com getrandom) ao estado do CSPRNG na inicialização e após fork().

O problema do fork

Quando um processo executa um fork, o processo pai e o processo filho herdam o mesmo estado do CSPRNG — eles produzirão uma saída idêntica. Correção: chame getrandom() para re-semear imediatamente após fork(). O OpenSSL faz isso automaticamente por meio de pthread_atfork() nas versões recentes.

CSPRNG na prática: Python

import secrets key = secrets.token_bytes(32) # chave de 256 bits nonce = secrets.token_bytes(12) # nonce de 96 bits para AES-GCM pin = secrets.randbelow(10**6) # PIN de 6 dígitos # Nunca use o módulo random para criptografia

Criptografia no navegador

window.crypto.getRandomValues(typedArray) é o CSPRNG do navegador. Ele chama a fonte de entropia do OS. É usado pela API WebCrypto para a geração de chaves. Nunca use Math.random() para segurança — ele é um PRNG não criptográfico inicializado a partir do horário do sistema.

Verificação rápida

Qual módulo do Python você deve usar para gerar bytes aleatórios criptográficos?

Resumo

CSPRNGs como ChaCha20, CTR_DRBG e Fortuna geram saídas imprevisíveis a partir de sementes de entropia. Evite DUAL_EC_DRBG, random.random() e Math.random(). Use secrets (Python) ou window.crypto (navegador). A seguir: falhas de entropia no mundo real.

Perguntas Frequentes

A aula “PRNGs criptograficamente seguros” é grátis?

Sim — o texto completo de “PRNGs criptograficamente seguros” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.

O que vou aprender em “PRNGs criptograficamente seguros”?

Explore /dev/urandom, ChaCha20-CSPRNG e Fortuna. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cryptology Academy?

Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “PRNGs criptograficamente seguros”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cryptology Academy?

Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Aleatoriedade verdadeira versus pseudoaleatoriedade
  2. PRNGs criptograficamente seguros
  3. Esgotamento de entropia e erros de chaves fracas
  4. Geração segura de chaves, nonces e IVs
← Voltar para Cryptology Academy