Blockchain/Nível II · Mecânica/2.1 Criptografia/Lição 5
Entropia e aleatoriedade
A fundação invisível: por que uma chave é tão forte quanto o ruído que a criou
MateriaisUm conjunto de dados (opcional, para observar a entropia física)Um notebook
Curiosidade
- O que distingue a verdadeira aleatoriedade da intuição humana?
- Como um erro de software em uma distribuição Linux expôs milhares de chaves a ataques de força bruta?
- Por que uma frase de doze palavras representa exatamente 128 bits de entropia mais um checksum?
Explorar
- A chave privada do Bitcoin é um número inteiro aleatório entre 1 e n-1, onde n é o grau do gerador da curva secp256k1. Esse intervalo contém aproximadamente 1,158 × 10^77 valores possíveis. Para alcançar 128 bits de segurança contra ataques de logaritmo discreto, a chave deve ser selecionada de forma uniforme dentro desse intervalo. Se o processo de seleção for previsível ou tendencioso, a entropia efetiva diminui, reduzindo o esforço necessário para um atacante a uma fração do máximo teórico.
- A entropia mede a incerteza em bits. Um mnemônico de doze palavras do BIP39 codifica 128 bits de aleatoriedade verdadeira, além de um checksum de quatro bits derivado do SHA-256. Uma frase de vinte e quatro palavras contém 256 bits. A última palavra serve em parte como detector de erros; palavras aleatórias raramente formam uma frase válida, pois o checksum falhará. Essa estrutura reduz os erros de transcrição silenciosa, desde que a entropia de origem seja genuína.
- A aleatoriedade gerada por humanos é notoriamente fraca. As frases que as pessoas escolhem possuem muito menos entropia do que parecem, pois elas preferem palavras, citações e padrões familiares. Os atacantes exploram isso realizando ataques de dicionário contra chaves derivadas de frases memoráveis, conhecidas como “carteiras cerebrais”. Vasek, Bonneau et al. (2016) documentaram como tais carteiras eram esvaziadas rotineiramente, muitas vezes logo após serem financiadas, pois os atacantes podiam testar listas enormes de frases prováveis.
- Falhas na implementação de software comprometeram repetidamente a geração de chaves. Uma alteração feita pelo Debian no OpenSSL (usado entre 2006 e 2008, divulgada em DSA-1571) deixou o ID do processo como quase a única fonte de variação, fazendo com que cada tipo e tamanho de chave tivesse apenas cerca de 32.768 chaves possíveis. Em agosto de 2013, uma falha no SecureRandom do Android fez com que alguns wallets de Bitcoin reutilizassem valores aleatórios para assinaturas, expondo chaves privadas e permitindo roubos. Esses incidentes demonstram que as fontes de entropia devem ser criptograficamente seguras e independentes do estado do sistema.
- O “Randstorm”, divulgado em 2023 pela Unciphered, revelou que as carteiras da era BitcoinJS (aproximadamente de 2011 a 2015) utilizavam geradores de aleatoriedade fracos, expondo os usuários a ataques de recuperação de chaves. As carteiras de hardware modernas coletam entropia de várias fontes internas durante a inicialização, exibindo a palavra mnemônica resultante uma de cada vez. Uma vez anotadas, essas palavras tornam-se a única autoridade sobre os fundos; perdê-las significa perda permanente do acesso.
- Uma boa entropia vem de geradores de números aleatórios criptográficos do sistema operacional (CSPRNGs), de geradores de números aleatórios em hardware ou de processos físicos como jogadas de dados (com ressalvas quanto a viéses). Os CSPRNGs misturam ruídos provenientes de eventos do sistema e sensores de hardware para produzir bits imprevisíveis. Se o resultado estiver entre 1 e n−1, ele se torna uma chave privada válida; caso contrário, o gerador tenta novamente com novos dados aleatórios. Esse ciclo garante uma distribuição uniforme em toda a ordem da curva.
Fatos-chave
- A chave privada do Bitcoin tem como objetivo 128 bits de segurança, exigindo uma seleção uniforme entre ~1,158 × 10^77 valores possíveis.
- Uma frase BIP39 de doze palavras codifica 128 bits de entropia mais um checksum de quatro bits; vinte e quatro palavras codificam 256 bits.
- O erro do OpenSSL no Debian (2006-2008, DSA-1571) reduziu o espaço de chaves para cerca de 32.768 possibilidades por tipo e tamanho de chave.
- Uma falha no SecureRandom do Android, divulgada em agosto de 2013, fez com que algumas carteiras reutilizassem nonces de assinatura, expondo as chaves ao roubo.
- ‘Randstorm’ (revelado em 2023) identificou uma aleatoriedade fraca em carteiras da web da era BitcoinJS, de aproximadamente 2011 a 2015.
- Chaves derivadas de frases memoráveis (“carteiras cerebrais”) eram rotineiramente encontradas e esvaziadas pelos atacantes.
Exercício nove, seis, três, um
9ReunirListe 9 fontes de aleatoriedade digital ou física. Indique o mecanismo (por exemplo, flutuação do relógio do sistema, ruído térmico) e quaisquer vulnerabilidades históricas conhecidas associadas a cada uma.
6AgruparAgrupe os 9 com base na qualidade de sua entropia em 6 categorias: CSPRNGs criptograficamente seguros, RNGs de hardware, processos físicos, gerados por humanos, implementações de software defeituosas ou outros.
3DestilarReduza os 6 a 3 critérios para avaliar se uma fonte de aleatoriedade é adequada para gerar uma chave privada do Bitcoin.
1CristalizarEscreva 1 frase sobre por que a distribuição uniforme em toda a ordem da curva n é inegociável para a segurança da chave.
Verificação de fatos
Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.
- Debian Security Advisory DSA-1571: openssl - insufficient randomness in key generation (2008)
- Bitcoin.org, 'Android Security Vulnerability' (11 August 2013)
- Unciphered, 'Randstorm: You Can't Patch a House of Cards' (2023)
- M. Vasek, J. Bonneau et al., 'The Bitcoin Brain Drain: Examining the Use and Abuse of Bitcoin Brain Wallets' (2016)
- M. Palatinus, P. Rusnak, A. Voisine & S. Bowe, 'BIP-0039: Mnemonic code for generating deterministic keys' (2013)