Pular para o conteúdo
ecdsa.com

CSPRNG (gerador de números aleatórios seguro)

Um gerador de números aleatórios cuja saída não pode ser prevista nem distinguida da aleatoriedade verdadeira, mesmo por um atacante que viu saídas anteriores; é necessário para chaves, nonces, salts e tokens.
Também escrito comoCSPRNGrandom number generatorDRBGgetRandomValues/dev/urandom

Os sistemas operacionais oferecem um, com semente vinda da entropia do hardware: getrandom(2) e /dev/urandom no Linux, getentropy e arc4random no macOS e nos BSDs, BCryptGenRandom no Windows. As APIs das linguagens os encapsulam: crypto.getRandomValues() nos navegadores (no máximo 65.536 bytes por chamada), crypto.randomBytes no Node.js, o secrets do Python, o crypto/rand do Go e o SecureRandom do Java. Math.random(), o random do Python e outros geradores de uso geral semelhantes são previsíveis e nunca devem produzir segredos.

O NIST SP 800-90A Rev. 1 especifica os geradores determinísticos aprovados (Hash_DRBG, HMAC_DRBG e CTR_DRBG), o SP 800-90B, as fontes de entropia, e o SP 800-90C, como combiná-los; os módulos FIPS 140-3 devem usá-los. O Dual_EC_DRBG, já retirado, é o exemplo clássico de gerador com suspeita de backdoor.

A maioria das falhas reais de RNG tem a ver com a semente, e não com os algoritmos: dispositivos embarcados que geram chaves antes de haver entropia suficiente, máquinas virtuais clonadas que retomam a execução com o mesmo estado e processos criados com fork que compartilham um gerador. O ECDSA é especialmente sensível, porque um nonce previsível expõe a chave; nonces determinísticos ou hedged eliminam essa dependência.

Padrões e referências

Todos os termos