Glossaire / Référence pour développeurs
Fonction point
- Qu'est-ce que la fonction point ?
- La fonction point transforme une clé privée en clé publique en multipliant le point générateur de secp256k1 par ce nombre, et c'est l'étape à sens unique sur laquelle repose chaque adresse bitcoin.
Spécifié dans BIP-32.
Le BIP32 donne un nom à l'opération, point(p), car la dérivation hiérarchique de clés y fait référence à presque chaque ligne. Multipliez le générateur fixe de la courbe par un secret de 256 bits et le résultat est un couple de coordonnées que vous pouvez publier sans risque ; retrouver le secret à partir de ce couple revient à résoudre un logarithme discret dans un espace de 78 chiffres. Votre portefeuille exécute la fonction une fois par adresse et n'a jamais à l'exécuter à l'envers.
Comment cela fonctionne
La fonction point est une multiplication sur courbe elliptique dont l'une des deux entrées est fixée pour toujours.
Bitcoin utilise la courbe secp256k1, définie par l'équation y au carré égale x au cube plus 7 sur un grand corps premier, et normalisée dans le document SEC 2 plutôt que par le NIST. La courbe est livrée avec un point générateur G que chaque implémentation code en dur, et avec un ordre de groupe n dont la valeur se situe juste sous 2 puissance 256. Une clé privée est n'importe quel entier de 1 jusqu'à n moins 1. La fonction ajoute G à lui-même ce nombre de fois à l'aide d'une échelle de doublement et d'addition, ce qui s'achève bien en dessous de la milliseconde plutôt qu'en un temps égal à l'âge de l'univers.
Le chemin inverse constitue toute l'hypothèse de sécurité. Étant donné le point obtenu, aucune méthode publiée ne retrouve le multiplicateur plus vite qu'environ la racine carrée de la taille du groupe, ce qui place le travail autour de 2 puissance 128 opérations. Rien de tout cela ne change si une adresse est réutilisée, publiée ou conservée pendant des décennies.
Une propriété rend possibles les portefeuilles hiérarchiques. La multiplication de points est distributive sur l'addition, donc le point de a plus b est égal au point de a ajouté au point de b. Ajoutez un ajustement à une clé privée et la clé publique correspondante se décale du point de cet ajustement, une valeur que n'importe qui peut calculer sans détenir la clé. La dérivation BIP32 non durcie repose sur cette identité, tout comme la clé de sortie Taproot, qui est une clé interne décalée par un engagement envers un arbre de scripts.
Où vous la voyez
La fonction point s'exécute chaque fois qu'un portefeuille vous montre une nouvelle adresse de réception.
C'est aussi pourquoi une clé publique étendue est utile en soi. Confiez un xpub à une boutique en ligne ou à un téléphone en lecture seule et cette machine peut générer une nouvelle adresse par paiement en ajustant une clé publique, sans qu'aucune clé privée n'y soit présente. Les portefeuilles matériels exploitent la même asymétrie de l'autre côté : le secret ne quitte jamais la puce et seul le point obtenu revient par le câble.
La propriété a un côté tranchant. Parce que la relation est additive et publique, une clé publique étendue combinée à une clé privée enfant non durcie divulguée permet à quiconque de retrouver la clé privée parente et avec elle toute la branche. C'est pourquoi la dérivation au niveau du compte est durcie, et pourquoi un xpub divulgué est un désastre pour la confidentialité plutôt qu'un vol immédiat.
Fonction point vs clé publique compressée
La fonction point produit un objet mathématique ; une clé publique compressée est une façon d'écrire cet objet. Un point est un couple de coordonnées, chacune de 32 octets. La forme compressée écarte la coordonnée y et conserve un préfixe d'un octet indiquant si elle était paire ou impaire, ce qui donne 33 octets. La forme non compressée énonce les deux coordonnées sur 65 octets. La forme x-only de Taproot conserve 32 octets et aucun préfixe. Chacune d'elles décrit le même point, et pourtant chaque encodage donne par hachage une adresse différente, c'est pourquoi importer une ancienne clé avec le mauvais indicateur de compression affiche un solde de zéro alors que les bitcoins restent intacts à l'autre adresse.