Aller au contenu
ecdsa.com

RFC 6979 (ECDSA déterministe)

La spécification de 2013 de Thomas Pornin qui dérive le nonce k de DSA ou d’ECDSA à partir de la clé privée et du condensat du message avec HMAC-DRBG, si bien que la signature ne nécessite aucun générateur de nombres aléatoires.
Autres graphiesRFC 6979deterministic ECDSAdeterministic DSA

La procédure (§3.2) prend comme graine de HMAC la clé privée et le condensat réduit modulo l’ordre du groupe (int2octets(x) ‖ bits2octets(h1)), exécute les étapes de mise à jour de HMAC-DRBG et tire des candidats jusqu’à ce que l’un d’eux tombe dans l’intervalle 1…q−1. La même clé et le même message donnent toujours le même k, et donc la même signature, octet pour octet. Les vérificateurs ne voient pas la différence : le résultat est une signature ECDSA ou DSA ordinaire.

La FIPS 186-5 approuve la méthode sous le nom « ECDSA déterministe » (§6.3.2, annexe A.3.3). Elle élimine la défaillance due à un mauvais générateur d’aléa, à l’origine de l’affaire de la PlayStation 3 et de nombreuses fuites de clés de portefeuilles, et rend les vecteurs de test reproductibles : l’annexe A.2 de la RFC 6979 fournit des vecteurs pour DSA, les courbes P du NIST et les courbes K et B.

La contrepartie est l’exposition aux fautes et aux canaux auxiliaires : signer deux fois le même message en provoquant une faute peut faire fuiter la clé ; les variantes hedged mêlent donc un aléa supplémentaire à la même dérivation (le §3.6 autorise des données additionnelles). Options des bibliothèques : OpenSSL 3.2 et versions ultérieures, -pkeyopt nonce-type:1 ; Python cryptography, ec.ECDSA(hashes.SHA256(), deterministic_signing=True) ; @noble/curves signe de façon déterministe par défaut, avec une option extraEntropy pour le mode hedged.

Normes et références

Tous les termes