Glossaire / Transactions et frais
Signature numérique
Aussi appelé Signature, Signature ECDSA.
- Qu'est-ce qu'une signature numérique ?
- Une signature numérique est la preuve, produite avec une clé privée, que celui qui a autorisé une transaction bitcoin contrôlait la clé à laquelle ses bitcoins étaient verrouillés, et que les détails n'ont pas été modifiés.
Bitcoin ne se limite plus à ECDSA. Les bitcoins situés à des adresses commençant par 1, 3 ou bc1q se déverrouillent avec des signatures ECDSA de 71 ou 72 octets ; les bitcoins situés à des adresses bc1p utilisent des signatures Schnorr de 64 octets, actives depuis novembre 2021. Dans un cas comme dans l'autre, la signature prouve le contrôle d'une clé, et ne prouve jamais qui est la personne.
Comment cela fonctionne
Produire une signature demande trois ingrédients : une clé privée, un nombre aléatoire à usage unique appelé nonce, et une empreinte de la transaction tel que découpé par l'indicateur choisi pour cette entrée.
Le résultat est une paire de nombres calculés sur secp256k1, la courbe elliptique que le bitcoin utilise depuis sa première version. La vérification exécute la même arithmétique en sens inverse à l'aide de la clé publique, et un nœud l'effectue dans l'opcode de script OP_CHECKSIG. Rien n'est chiffré à aucune étape, et la signature ne révèle rien de la clé privée qui la sous-tend.
Les deux schémas en usage empaquettent cette paire différemment. Une signature ECDSA est enveloppée en DER, ce qui explique qu'elle fasse 71 ou 72 octets plutôt qu'une longueur fixe, et le dernier octet ne fait pas partie de la signature : c'est l'indicateur qui précise quelles parties de la transaction ont été couvertes. Une signature Schnorr au titre du BIP340 est un bloc plat de 64 octets sans enveloppe, et l'octet d'indicateur est entièrement omis lorsque la valeur par défaut s'applique, de sorte que 65 octets n'apparaissent que lorsqu'un signataire veut quelque chose d'inhabituel.
Le nonce est la partie qui tourne mal. Utilisez le même deux fois avec la même clé et la clé privée se laisse retrouver par de l'algèbre de collège, ce qui n'est pas une inquiétude théorique : le 11 août 2013, bitcoin.org a publié un avis sur une faille Android qui faisait générer des valeurs répétitives aux applications de portefeuille des téléphones touchés, et des bitcoins ont été volés en conséquence. Les portefeuilles dérivent désormais le nonce de façon déterministe à partir de la clé et du message, en suivant la RFC 6979 pour ECDSA et une règle équivalente dans le BIP340.
Où la voir
Chaque dépense que vous effectuez en contient au moins une. Sur un explorateur de blocs, c'est la longue chaîne hexadécimale dans le witness d'une entrée segwit ou dans le script de déverrouillage d'une entrée héritée, et le 01 final des signatures ECDSA est l'indicateur, pas une partie des mathématiques.
Les signatures servent aussi en dehors des transactions. Signer un simple message avec la clé derrière une adresse prouve que vous contrôlez cette adresse sans déplacer un satoshi, ce qui permet aux plateformes d'échange de vérifier une destination de retrait, de constituer les attestations de preuve de réserves, et à un vendeur sur une place de marché pair-à-pair de montrer qu'une adresse est bien la sienne. Le format d'origine ne fonctionnait que pour les adresses commençant par 1 ; le BIP322 généralise la signature de message à tous les types d'adresses utilisés aujourd'hui.
Cette distinction compte chaque fois que quelqu'un vous demande de signer quelque chose. Un message signé ne peut pas déplacer de bitcoins. Une signature sur une transaction peut tous les déplacer, et le seul moyen fiable de savoir laquelle on vous demande est de lire l'écran de votre portefeuille matériel plutôt que le site web.
Signature numérique vs empreinte de signature
L'empreinte de signature est l'entrée ; la signature est la sortie. Votre portefeuille construit d'abord une empreinte couvrant un sous-ensemble précis de la transaction, puis signe cette empreinte, de sorte que la signature ne dit absolument rien des parties que l'empreinte a laissées de côté. Ce n'est pas un détail technique. C'est toute la raison d'être des indicateurs sighash, et cela explique comment deux signatures sur une même transaction peuvent protéger des choses complètement différentes.