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.