482 / 691CSPRNG

CSPRNG

Gerador de números pseudoaleatórios criptograficamente seguro

Um CSPRNG produz valores a partir de estado secreto para que conhecer alguns não permita prever outros na prática. A segurança também depende da entropia inicial, da recuperação do estado e do uso correto da interface.

Um CSPRNG é um gerador determinístico destinado à criptografia. Pseudoaleatório não significa fraco: importa a resistência a um adversário sob as hipóteses declaradas. Algoritmo, fonte de entropia e código consumidor devem ser avaliados separadamente.

RFC 4086 distingue sequências criptograficamente fortes de geradores comuns de simulação. Conhecer parte da saída não deve permitir adivinhar o resto. Testes estatísticos não bastam; uma seed previsível pode comprometer até uma saída aparentemente complexa. [RFC 4086 — Cryptographically strong sequences]

NIST SP 800-90A Rev. 1 especifica Hash_DRBG, HMAC_DRBG e CTR_DRBG. O rótulo CSPRNG não certifica qualquer implementação. É preciso identificar mecanismo, parâmetros e obtenção de entropia, não apenas o nome de uma função hash. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]

Backtracking resistance protege saídas anteriores após a exposição do estado atual. Prediction resistance trata das futuras; NIST SP 800-90A associa-a à incorporação eficaz de entropia nova. Uma propriedade não implica automaticamente a outra nem recuperação por mais uma chamada. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]

OpenSSL 3.5 documenta para RAND_bytes() e RAND_priv_bytes() 1 no sucesso, 0 em outra falha e -1 para método não suportado. A geração pode ser recusada quando a fonte de entropia falha. A aplicação deve verificar o resultado, não usar um buffer sem validação. [OpenSSL 3.5 — RAND_bytes return values and errors]

libsodium randombytes_buf_deterministic() produz a mesma sequência com a mesma seed, útil em testes. Restaurar uma máquina virtual de um snapshot pode repetir estado e saída. Reprodutibilidade em testes não garante segredos independentes entre cópias. [libsodium — Random data and deterministic testing]

libsodium randombytes_uniform() escolhe uniformemente abaixo de um limite superior sem o viés de um simples resto de divisão. Bons bytes de entrada não garantem mapeamento correto para o intervalo desejado. Chaves também devem respeitar as regras de seu algoritmo. [libsodium — Random data and deterministic testing]

RFC 8439 exige que um nonce não se repita com a mesma chave; aparência aleatória não prova unicidade. RFC 6979 descreve, por sua vez, a criação determinística do valor k da assinatura. CSPRNG não substitui universalmente as regras do protocolo. [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]

Registe versão da biblioteca, mecanismo, inicialização, erros e comportamento após restaurar ou clonar o estado. OpenSSL e libsodium documentam funções específicas, não a segurança de qualquer carteira. Uma boa geração também não impede vazamento posterior do backup. [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]

Para ter uma visão mais completa, leia este verbete junto com Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. Também há referências a este verbete em Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.

DOC · 001RFC 4086 — Cryptographically strong sequencesEspecificação ↗DOC · 002NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistanceEspecificação ↗DOC · 003OpenSSL 3.5 — RAND_bytes return values and errorsDocumentação ↗DOC · 004libsodium — Random data and deterministic testingDocumentação ↗DOC · 005RFC 8439 — Nonce uniquenessEspecificação ↗DOC · 006RFC 6979 — Deterministic signingEspecificação ↗
Fontes em primeiro lugar · Não é recomendação de investimento