483 / 736PRNG

Deterministic RNG

Gerador determinístico de números pseudoaleatórios

O mesmo procedimento, estado inicial e entradas produzem o mesmo resultado. Num gerador determinístico, isso é uma característica, não um defeito. A segurança também depende de não ser possível prever a saída sem conhecer o material secreto inicial.

Um Deterministic RNG é um gerador de números pseudoaleatórios: calcula valores por um procedimento fixo, em vez de medir um novo fenômeno físico aleatório para cada um. Parte de uma entrada chamada seed e mantém um estado interno, os dados necessários para o próximo cálculo. Repetir todo o procedimento com as mesmas entradas reproduz os resultados, o que ajuda nos testes. Um gerador criptográfico seguro também precisa de um bom projeto e entropia suficiente: incerteza sobre a entrada do ponto de vista do atacante.

Imagine pausar um cálculo e salvar sua memória. Retomá-lo naquele ponto com as mesmas entradas seguintes pode reproduzir a continuação. NIST SP 800-90A descreve esses geradores como DRBG. Importam o algoritmo, as configurações e a ordem das solicitações. Acrescentar entropia nova, o chamado reseeding, muda o estado. Portanto, usar o mesmo seed não garante resultados iguais entre programas diferentes. [1]

Até um programa simples de simulação consegue produzir números que parecem aleatórios. Isso não basta para proteger uma carteira. RFC 4086 alerta que um atacante pode prever algumas dessas sequências mesmo quando passam em testes estatísticos. Um gerador criptograficamente forte deve continuar imprevisível na prática após parte da saída ser revelada. Importam o projeto, a qualidade e o sigilo do material inicial, não apenas a palavra “determinístico”. [2]

Ao investigar um erro, ajuda reproduzir exatamente a mesma situação. Por isso, a função randombytes_buf_deterministic() da libsodium retorna a mesma sequência para o mesmo seed. O desenvolvedor pode publicar o resultado esperado para outros conferirem. É justamente por isso que um seed de teste público não deve ser usado numa carteira real: qualquer pessoa poderia calcular o mesmo “segredo”. [3]

BIP32 usa uma repetibilidade semelhante para derivar chaves, mas não é o mesmo procedimento da geração de dados aleatórios de uso geral. Ele cria uma árvore de chaves a partir de um seed. O caminho de derivação escolhe o ramo utilizado. Com o mesmo seed e caminho, é possível recuperar as mesmas chaves. Outro endereço derivado não acrescenta, por si só, entropia nova e independente ao segredo original. [4]

Em BIP39, as palavras de recuperação, chamadas mnemonic, são apenas parte da entrada. PBKDF2 combina essas palavras com uma passphrase, um segredo adicional opcional, para calcular o seed da derivação posterior. Outra passphrase produz outro resultado mesmo com palavras iguais. Recuperar as mesmas chaves exige todas as entradas originais e o método de derivação correspondente. A coincidência das palavras, sozinha, não garante isso. [5]

Uma assinatura digital comprova que o titular da chave secreta correspondente autorizou uma transação. RFC 6979 descreve como calcular o valor auxiliar k da assinatura a partir dessa chave e da mensagem assinada. Essa etapa não precisa obter um valor aleatório novo a cada vez. A criação original da chave continua exigindo boa aleatoriedade. Um procedimento correto de assinatura não corrige uma chave que já podia ser adivinhada desde o início. [6]

Recuperar as mesmas chaves por BIP32 é desejável; repetir acidentalmente valores que deveriam ser novos não é. Um snapshot de máquina virtual salva o estado do computador, incluindo a memória. Como alerta a libsodium, restaurá-lo pode repetir também o estado e as saídas do gerador. Ao copiar um ambiente, não se pode presumir que cada cópia em execução automaticamente crie segredos independentes. [3] [4]

O desenvolvedor compara o resultado com um vetor de teste: uma entrada conhecida acompanhada da saída esperada. A correspondência mostra que o programa calcula aquele exemplo corretamente. Não comprova a qualidade da entropia obtida pelo dispositivo real. NIST SP 800-90A trata separadamente dos mecanismos e dos requisitos de suas entradas. Versão, configurações e reposição de entropia também importam; o rótulo Deterministic RNG não basta para demonstrar a segurança da carteira. [1]

Para ter uma visão mais completa, leia este verbete junto com CSPRNG, Random Number Generator, HD Wallet, Seed Generation. Também há referências a este verbete em CSPRNG, COLDCARD RNG Incident (2026).

DOC · 001NIST SP 800-90A Rev. 1 — State, inputs and reseedingEspecificação DOC · 002RFC 4086 — Pseudorandom sequences and unpredictabilityEspecificação DOC · 003libsodium — Deterministic output and VM snapshotsDocumentação DOC · 004BIP32 — Hierarchical deterministic key derivationEspecificação DOC · 005BIP39 — Mnemonic and passphrase to seedEspecificação DOC · 006RFC 6979 — Deterministic signing and initial key generationEspecificação
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento