Aller au contenu
buybitcoinsmart

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.

À ne pas confondre avec

Questions fréquentes

Une clé publique peut-elle être reconvertie en clé privée ?

Par aucune méthode connue. Retrouver le multiplicateur à partir d'un point de courbe est le problème du logarithme discret, et les meilleures attaques publiées demandent environ 2 puissance 128 opérations, ce qu'aucun matériel actuel ou prévisible ne peut accomplir.

Pourquoi un xpub peut-il générer des adresses sans clé privée ?

Parce que la multiplication de points est distributive sur l'addition. Une étape de dérivation ajoute un ajustement à la clé privée, et le même ajustement peut être appliqué directement à la clé publique, de sorte qu'un serveur ne détenant qu'un xpub peut produire de nouvelles adresses.

À lire ensuite

Termes associés

Plus de termes : Référence pour développeurs

Lire cette page en anglais