ECDSA
ECDSA (Elliptic Curve Digital Signature Algorithm) est l'algorithme de signature numérique historique de Bitcoin. Il permet de prouver la possession d'une clé privée sans la révéler. Il est combiné à secp256k1. Depuis Taproot, Bitcoin supporte également Schnorr, plus performant.
Présentation
ECDSA (Elliptic Curve Digital Signature Algorithm) est un schéma de signature numérique standardisé en 2000 par l'ANSI (X9.62) puis le NIST (FIPS 186-2). Il est utilisé partout : SSL/TLS, JWT, OpenPGP, et bien sûr Bitcoin. Son rôle est de prouver qu'un message a bien été produit par le détenteur d'une clé privée, sans jamais révéler cette clé. Bitcoin l'a adopté dès 2009 comme algorithme de signature obligatoire pour toutes les dépenses de fonds.
Comment ça fonctionne
ECDSA repose sur la difficulté du problème du logarithme discret sur une courbe elliptique. Une clé privée Bitcoin est un nombre aléatoire d de 256 bits. La clé publique correspondante est le point P = d × G, où G est un point générateur fixe de la courbe secp256k1.
Pour signer un message m :
- Hacher le message en
z = SHA-256(m). - Choisir un nonce aléatoire
k(cryptographiquement sûr). - Calculer le point
(x, y) = k × G, et définirr = x mod n. - Calculer
s = k^(-1) × (z + r × d) mod n. - La signature est le couple
(r, s).
Vérifier la signature ne nécessite que la clé publique P et le message.
Le danger du nonce k
Si le nonce k est mal généré, prévisible ou réutilisé, la clé privée peut être retrouvée trivialement. C'est la faille qui a permis le piratage de la PlayStation 3 par fail0verflow en 2010 : Sony utilisait toujours le même k. Bitcoin a connu plusieurs incidents historiques sur Android entre 2013 et 2014, lorsque le PRNG du système renvoyait parfois la même valeur. Depuis RFC 6979, la norme est de générer k de façon déterministe à partir de la clé privée et du message, ce qui élimine cette classe de bugs.
Caractéristiques propres à Bitcoin
| Caractéristique | Détail | |---|---| | Courbe | secp256k1 (256 bits) | | Taille signature | 70-72 octets (DER) | | Format | DER strictement encodé depuis BIP-66 (2015) | | Malléabilité | Mitigée par BIP-62 et SegWit |
Le « low-S » encoding (BIP-146) impose qu'entre les deux signatures équivalentes possibles, seule celle de plus petite valeur soit acceptée. Cela évite que deux signatures différentes mais valides existent pour une même transaction, un défaut historique exploité dans certaines attaques DoS.
Vers Schnorr
Taproot (activé en novembre 2021) a introduit le schéma Schnorr comme alternative à ECDSA. Avantages : signatures plus courtes (64 octets), agrégation (MuSig, FROST), preuves de sécurité plus propres. Mais ECDSA reste massivement utilisé car les adresses pré-Taproot ne peuvent pas être signées en Schnorr.
À retenir
ECDSA est l'algorithme de signature historique de Bitcoin, robuste mais ancien. Sa sécurité repose sur secp256k1 et sur la qualité du nonce. Schnorr le supplante progressivement, mais ECDSA continuera d'exister pendant longtemps pour préserver la compatibilité ascendante. Voir Schnorr et signature numérique.
Termes lies
- secp256k1secp256k1 est la courbe elliptique spécifique utilisée par Bitcoin. Elle est définie sur un corps fini de 256 bits et offre une excellente sécurité (~128 bits). Elle a été préférée à secp256r1 (NIST P-256) car ses paramètres ne sont pas générés par un acteur étatique. Toutes les clés Bitcoin vivent sur cette courbe.
- Schnorr (signature)Schnorr est un schéma de signature numérique introduit dans Bitcoin par le soft fork Taproot (2021). Il offre la linéarité, qui permet l'agrégation des signatures (MuSig). Plus simple, plus rapide et plus sûr que ECDSA. Il ouvre la voie à de nouveaux usages comme MuSig2, FROST et Tapscript.
- Signature numériqueUne signature numérique prouve mathématiquement qu'un message a été produit par le détenteur d'une clé privée, sans la révéler. Bitcoin utilise ECDSA (et Schnorr depuis Taproot). C'est la pièce maîtresse de la sécurité des transactions. Sans signature valide, un input ne peut pas être dépensé.
- Courbe elliptiqueUne courbe elliptique est une équation mathématique de la forme y² = x³ + ax + b. Bitcoin utilise la courbe secp256k1, choisie par Satoshi pour ses propriétés efficaces. Les opérations sur la courbe permettent de générer clés publiques et signatures. C'est le socle mathématique de la cryptographie de Bitcoin.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.