Esgotamento de entropia e erros de chaves fracas
Estude o erro do RNG do Debian OpenSSL e outras falhas reais de aleatoriedade.
Esgotamento de entropia e erros de chaves fracas é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 3 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.
O que é a exaustão de entropia?
A exaustão de entropia ocorre quando um sistema não tem entrada imprevisível suficiente para inicializar seu CSPRNG. Isso acontece em dispositivos embarcados recém-inicializados, servidores virtualizados ou sistemas sem entrada do usuário. A saída do RNG se torna previsível.
O erro do OpenSSL no Debian (CVE-2008-0166)
Em 2006, um desenvolvedor do Debian removeu uma linha sinalizada pelo Valgrind: MD_Update(&m, buf, j). Essa linha era a fonte de entropia. O resultado: o OpenSSL no Debian era inicializado apenas com o PID (no máximo 32.768 valores). Todas as chaves geradas entre 2006 e 2008 pertencem a um conjunto de 32.768 possibilidades.
Impacto do erro do Debian
Chaves RSA, DSA e ECDSA, chaves de host do SSH, certificados TLS e chaves de VPN SSL gerados em sistemas Debian/Ubuntu entre 2006 e 2008 foram comprometidos. Sistemas afetados: Debian Etch, Debian Lenny, Ubuntu 7.04-8.04. Listas de bloqueio foram publicadas; certificados foram revogados.
Problema do RNG em máquinas virtuais
Máquinas virtuais podem ser clonadas com estado de disco idêntico. Se duas máquinas virtuais gerarem chaves a partir do mesmo estado do CSPRNG, produzirão as mesmas chaves. Atualmente, os hipervisores injetam entropia por meio de tabelas VirtIO RNG ou ACPI, mas máquinas virtuais mal configuradas ainda enfrentam esse risco durante a inicialização.
Sistemas embarcados e IoT
Dispositivos de IoT (roteadores, câmeras) frequentemente geram chaves SSH/TLS na primeira inicialização, antes de acumular entropia. Estudos descobriram milhões de dispositivos compartilhando alguns milhares de pares de chaves RSA, porque todos eram inicializados a partir do mesmo estado de inicialização com baixa entropia.
Ataque de GCD a chaves RSA
Lenstra e outros (2012) coletaram 11,7 milhões de certificados TLS e calcularam os GCDs de cada par. Encontraram 12.720 chaves RSA que compartilhavam um fator primo — o que significa que ambas as chaves poderiam ser completamente fatoradas. 0,2% de todas as chaves públicas estavam quebradas. A causa foi a entropia insuficiente na inicialização.
Reutilização de nonce em ECDSA
O ECDSA exige um nonce aleatório k exclusivo para cada assinatura. Se k for reutilizado (ou for fraco), a chave privada poderá ser recuperada imediatamente: d = (s1-s2)^{-1} * (z1-z2) * k / (r1-r2) mod n. O PS3 da Sony usava k=constant — todos os jogos poderiam ser assinados com a chave recuperada.
Erro da carteira de Bitcoin do Android (2013)
O Java SecureRandom no Android 4.x era inicializado com o horário do sistema em determinadas condições. Vários aplicativos de carteira de Bitcoin geraram assinaturas com o mesmo nonce k, expondo as chaves privadas. Milhões de dólares foram roubados. O Google corrigiu a implementação do SecureRandom.
Detecção de chaves fracas
Ferramentas: ssh-vulnkey (verifica a lista de bloqueio de chaves fracas do Debian), badkeys (verifica certificados TLS em busca de primos reconhecidamente fracos) e o algoritmo GCD-batch para auditoria em massa de chaves RSA. Os registros de Certificate Transparency permitem análises em escala populacional.
Medidas de proteção
Use getrandom(GRND_RANDOM) na primeira geração de chaves. Leia de /dev/urandom após aguardar a inicialização inicial (verifique se /proc/sys/kernel/random/entropy_avail > 128). Use um RNG de hardware (RDRAND) como entropia suplementar. Nunca gere chaves na primeira inicialização sem um atraso.
Persistência do arquivo de semente
Preserve o estado do CSPRNG entre reinicializações: salve 32 bytes de /dev/urandom em um arquivo de semente durante o desligamento; leia-os e reinsira-os durante a inicialização. Isso proporciona continuidade da entropia entre inicializações a frio. O Linux faz isso automaticamente; sistemas embarcados frequentemente não fazem.
Verificação rápida
Qual foi a causa principal do erro de entropia do OpenSSL no Debian?
Resumo
A exaustão de entropia causa chaves previsíveis. Quebras reais: OpenSSL no Debian (semente baseada apenas no PID), ataques de GCD contra dispositivos de IoT, reutilização de nonce em ECDSA no PS3 e carteira de Bitcoin do Android. Sempre inicialize a partir da entropia do OS; audite cuidadosamente a geração de chaves em sistemas embarcados. A seguir: geração segura de chaves, nonces e IVs.
Aprenda Cryptology Academy com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 67
- Aulas
- 261
Perguntas Frequentes
A aula “Esgotamento de entropia e erros de chaves fracas” é grátis?
Sim — o texto completo de “Esgotamento de entropia e erros de chaves fracas” é 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 “Esgotamento de entropia e erros de chaves fracas”?
Estude o erro do RNG do Debian OpenSSL e outras falhas reais de aleatoriedade. 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 3 de 4.
Quanto tempo leva a aula “Esgotamento de entropia e erros de chaves fracas”?
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
- Aleatoriedade verdadeira versus pseudoaleatoriedade
- PRNGs criptograficamente seguros
- Esgotamento de entropia e erros de chaves fracas
- Geração segura de chaves, nonces e IVs