Pular para o conteúdo
ecdsa.com

RFC 6979 (ECDSA determinístico)

A especificação de 2013, de Thomas Pornin, que deriva o nonce k do DSA ou do ECDSA a partir da chave privada e do hash da mensagem com HMAC-DRBG, de modo que assinar não exige gerador de números aleatórios.
Também escrito comoRFC 6979deterministic ECDSAdeterministic DSA

O procedimento (§3.2) usa a chave privada e o hash reduzido módulo a ordem do grupo (int2octets(x) ‖ bits2octets(h1)) como semente do HMAC, executa as etapas de atualização do HMAC-DRBG e gera candidatos até que um caia em 1…q−1. A mesma chave e a mesma mensagem sempre geram o mesmo k e, portanto, a mesma assinatura, byte a byte. Os verificadores não conseguem perceber a diferença: a saída é uma assinatura ECDSA ou DSA comum.

O FIPS 186-5 aprova o método como “ECDSA determinístico” (§6.3.2, apêndice A.3.3). Ele elimina a falha por RNG ruim que está por trás do vazamento da chave do PlayStation 3 e das chaves de muitas carteiras, e torna os vetores de teste reproduzíveis: o apêndice A.2 da RFC 6979 traz vetores para o DSA, para as curvas P do NIST e para as curvas K e B.

A contrapartida é a exposição a falhas induzidas e a canais laterais: assinar a mesma mensagem duas vezes com uma falha induzida pode vazar a chave, por isso as variantes reforçadas (hedged) misturam aleatoriedade extra na mesma derivação (o §3.6 permite dados adicionais). Opções nas bibliotecas: no OpenSSL 3.2 e posteriores, -pkeyopt nonce-type:1; na biblioteca cryptography do Python, ec.ECDSA(hashes.SHA256(), deterministic_signing=True); a @noble/curves assina de forma determinística por padrão e oferece a opção extraEntropy para o modo hedged.

Padrões e referências

Todos os termos