Aller au contenu principal
Cryptographie

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 :

  1. Hacher le message en z = SHA-256(m).
  2. Choisir un nonce aléatoire k (cryptographiquement sûr).
  3. Calculer le point (x, y) = k × G, et définir r = x mod n.
  4. Calculer s = k^(-1) × (z + r × d) mod n.
  5. 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

← Retour au glossaire complet

Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.