Quelles sont les méthodes utilisées par les portefeuilles bitcoin pour générer des paires de clés?


Les portefeuilles bitcoin (‘bitcoin wallets’) contiennent une collection de paires de clés, chacune composée d’une clé privée et d’une clé publique. Les bitcoins sont enregistrés dans la chaîne de blocs bitcoin (le ‘bitcoin blockchain’) publique, sous la forme de résultats de transactions précédentes (‘unspent transaction outputs’; en abrégé: UTXO). Pour qu’un utilisateur puisse dépenser ses bitcoins ou, en d’autres termes, déverrouiller les résultats de transactions précédentes, l’utilisateur devra signer une transaction avec sa clé privée. En signant une transaction, l’utilisateur fournit la preuve qu’il possède les bitcoins (c.à.d. les résultats de transactions précédentes).

Récemment, je me suis posé à la question «Quelles méthodes sont utilisées par les portefeuilles bitcoin pour générer des paires de clés?». J’ai entamé une petite recherche à cet égard et voici la réponse à cette question: Il existe 2 principaux types de portefeuilles bitcoin, chacun utilisant une méthode différente pour générer des paires de clés: (1) les portefeuilles non déterministes et (2) les portefeuilles déterministes. L’implémentation la plus populaire du portefeuille de type déterministe est le portefeuille déterministe hiérarchique de type 2, également appelé portefeuille HD.

Quelle est la différence entre ces 2 types de portefeuilles et leurs méthodes de génération de paires de clés? Y a-t-il des inconvénients ou des avantages à l’une ou l’autre de ces méthodes particulières de génération de paires de clés? Examinons ensemble ci-dessous lesdites questions, ainsi que certaines questions pertinentes additionnelles.

1. Les 2 méthodes de génération de paires de clés

Les portefeuilles bitcoin contiennent une collection de paires de clés. Chaque paire de clés est composée d’une clé privée et – dérivée de celle-ci – d’une clé publique

La clé publique est calculée à partir de la clé privée, en appliquant une multiplication de courbe elliptique.

La clé publique est visible à tous et est utilisée pour:

(1) créer une adresse bitcoin, afin de pouvoir réceptionner des bitcoins de partis tiers; ainsi que

(2) de vérifier la validité de transactions émises depuis l’adresse bitcoin associée à la clé publique en question.

La clé privée est utilisée pour dépenser des bitcoins, plus précisément pour signer une transaction.

La signature numérique est un élément essentiel pour qu’un parti tiers (par exemple, un nœud complet (‘full node’) du réseau bitcoin) puisse vérifier la validité d’une transaction. Sans signature numérique, une transaction ne peut être validée, et part conséquence ne peut être propagée à travers le réseau bitcoin. Une clé privée est un chiffre binaire de 256 bits qui est généré de manière aléatoire (un «bit» est soit le chiffre 0, soit le chiffre 1).

2. Les portefeuilles non déterministes

Le premier type de portefeuilles sont les portefeuilles non déterministes de type 0, également appelés portefeuilles JBOK (JBOK signifie «Just a bunch of keys»).

Ce type de portefeuille génère de manière aléatoire une collection de clés privées, sans qu’il y ait une relation mathématique entre les clés privées générées.

Illustration d’un portefeuille non déterministe, contenant un ensemble de clés générées de manière aléatoire («k»).

Les portefeuilles non déterministes ne sont pas pratiques à utiliser. Chaque clé privée générée de manière aléatoire doit être sauvegardée individuellement, sinon vous risquez de perdre l’accès aux bitcoins qu’elles contrôlent dans le cas où vous perdriez l’accès à votre portefeuille. Cela peut rapidement devenir fastidieux lors de la génération de multiple clés privées.

Considérant qu’il est généralement conseillé d’utiliser une nouvelle adresse bitcoin pour chaque transaction, chaque transaction nécessitera une nouvelle paire de clés à partir de laquelle une nouvelle adresse peut être dérivée. Cela signifie donc que de multiples sauvegardes sont requis afin de se protéger de manière adéquate contre une perte éventuelle de paire de clés, c.à.d. une sauvegarde par paire de clé générée.

De plus, si vous décidez d’importer ou d’exporter un portefeuille non déterministe, il sera nécessaire d’importer ou d’exporter l’intégralité de la collection de paires de clés du portefeuille (à l’opposé d’une seule «graine» à partir de laquelle un portefeuille déterministe entier peut être recréé. Voir ci-dessous section « Portefeuilles déterministes »). Un exemple de portefeuille non déterministe est le portefeuille utilisé par le logiciel de référence Bitcoin Core. Veuillez noter que pour les raisons exposées ci-dessus, il est à ce jour déconseillé d’utiliser un portefeuille non déterministe, car de meilleures alternatives existent.

3. Les portefeuilles déterministes

Le deuxième type de portefeuille sont les portefeuilles déterministes, également appelés portefeuilles «ensemencés» (‘seeded’).

Les portefeuilles déterministes sont des portefeuilles qui génèrent des paires de clés à partir d’un seul point (dit « graine ») de départ. La graine de départ est un chiffre généré de manière aléatoire qui est combiné à certaines données supplémentaires (par exemple un code de chaîne, voir ci-dessous section «Portefeuilles déterministes hiérarchiques»).

La première clé privée est dérivée de la graine de départ. Ensuite, chaque nouvelle clé privée est dérivée de la clé privée précédente, à l’aide d’une fonction de hachage (‘hash function’) unidirectionnelle. Cela signifie qu’il est possible de recréer toute une séquence de paires de clés, sur la base d’une seule graine de départ unique. Il existe diverses implémentations de ce type de portefeuille, telles que (a) les portefeuilles déterministes séquentiels et (b) les portefeuilles déterministes hiérarchiques.

Illustration d’un portefeuille déterministe séquentiel.

L’utilisation de portefeuilles déterministes présente deux avantages majeurs par rapport à l’utilisation de portefeuilles non déterministes:

  • Étant donné que toutes les paires de clés d’un portefeuille déterministe sont dérivées d’une seule graine de départ, le portefeuille entier peut être recréé sur la base de cette graine. Cela signifie qu’une seule sauvegarde de la graine de départ au moment de la création du portefeuille est suffisante pour sauvegarder le portefeuille entier (à l’opposé des multiples sauvegardes individuelles requises pour chaque clé privée contenue dans un portefeuille non déterministe).
  • Le transfert de données entre des portefeuilles déterministes (par exemple, l’importation ou l’exportation d’un portefeuille entier) est simple à réaliser. Il suffit d’importer ou d’exporter la graine de départ dans le nouveau portefeuille afin de pouvoir recréer la séquence complète des paires de clés du portefeuille déterministe transféré.

4. Les portefeuilles déterministes hiérarchique

L’implémentation la plus courante des portefeuilles déterministes est ce que l’on appelle les portefeuilles déterministes hiérarchiques de type 2 (dits les portefeuilles « HD »).

Les portefeuilles HD sont des portefeuilles déterministes dans lesquels les paires de clés sont dérivées dans une arborescence, plutôt que de manière linéaire telle que les portefeuilles déterministes séquentiels.

Illustration d’un portefeuille déterministe HD.

Le portefeuille est créé à partir d’une seule graine de départ (c.à.d. un chiffre aléatoire de 128, 256 ou 512 bits) de la manière suivante:

Tout d’abord, une paire de clés principale (dite « parent ») est générée sur la base de la graine de départ. Les paires de clés enfants sont ensuite dérivées de la paire de clés parent, à l’aide d’une fonction de hachage (‘hash function’) unidirectionnelle, appelée ‘child key derivation’ (en abrégé: CKD).

Plus particulièrement, la fonction CKD s’applique à la combinaison de 3 éléments:

  1. la clé privée ou publique parent;
  2. le code de la chaîne parent (c’est-à-dire 256 bits, utilisé comme entropie dans la fonction CKD) ; et
  3. un numéro d’index (32 bits). En modifiant le numéro d’index, il est possible de créer des paires de clés enfant supplémentaires sur la base d’une seule paire de clés parent.

Le hachage résultant est ensuite divisé en 2 parties différentes:

  1. la moitié droite du résultat (‘output’) de hachage (256 bits) devient le code de chaîne pour la paire de clés enfants; et
  2. la moitié gauche du résultat (‘output’) de hachage (256 bits) et le numéro d’index sont ajoutés à la clé privée parent pour produire la clé privée enfant.
Illustration de la dérivation d’une clé enfant depuis une paire de clés parents, en appliquant la fonction CKD

Ce processus peut ensuite être répété au niveau des paires de clés enfant. Chaque paire de clés enfant peut à son tour devenir une paire de clés parent à partir de laquelle ses propres paires de clés enfant peuvent être générées. Ce processus peut être répété à l’infini. Le nombre de générations de paires de clés pouvant être générées à l’aide de cette méthode ne connaît pas de limite.

La structure du portefeuille déterministe HD est par exemple entièrement implémentée dans, entre autres, les portefeuilles bitcoin matériels de Trezor et le portefeuille bitcoin Electrum.

5. Avantages de l’utilisation de portefeuilles déterministes HD

L’utilisation des portefeuilles déterministes HD présente deux principaux avantages:

  1. La structure arborescente offre à l’utilisateur la possibilité d’attribuer un ou plusieurs objectifs organisationnels à une ou plusieurs branches particulières de la structure arborescente. On peut imaginer à cet égard qu’une branche particulière d’un portefeuille HD est utilisée dans le seul but de recevoir des paiements entrants dans une entreprise ou d’être dédiée à une branche particulière d’une entreprise.
  2. Dans les portefeuilles déterministes HD, il est possible de créer une branche de clés enfants publiques sans que l’utilisateur ait besoin d’accéder à l’une des clés privées parent correspondantes. Cette fonctionnalité limite l’exposition des clés privées, ce qui améliore la sécurité du portefeuille. C’est la raison pour laquelle les portefeuilles déterministes HD sont le plus utilisés.

En effet, il existe deux différentes méthodes pour dériver une clé publique enfant depuis une paire de clés parent:

  1. La méthode indirecte: Calculez d’abord la clé privée enfant en appliquant la fonction CKD sur la clé privée étendue (dite ‘xprv’, xprv = clé privée parent + code de chaîne parent). Une fois que la clé privée enfant a été calculée, vous pouvez ensuite extraire la clé publique enfant de la clé privée enfant (comme expliqué ici); et
  2. La méthode directe: Dérivez directement la clé publique enfant en appliquant la fonction CKD à la clé publique étendue (‘xpub’, où xpub = clé publique parent + code de chaîne parent). Cette deuxième méthode n’implique pas la clé privée parent.
Illustration de la dérivation d’une clé enfant depuis une clé publique étendue (dite ‘xpub‘)

Les clés publiques étendues (dites ‘xpub’) peuvent uniquement générer une branche de clés publiques enfants (à l’opposé de clés privées enfants). Cette fonctionnalité peut être utile pour générer des implémentations de portefeuilles très sécurisés composés uniquement de clés publiques. Telle fonctionnalité pourrait vous servir, dans le cas où vous souhaitez utiliser un portefeuille bitcoin permettant uniquement de (1) consulter vos soldes et (2) réceptionner des bitcoins, sans qu’il y ait possibilité d’accéder aux bitcoins en question (car les clés privées ne sont pas disponibles, c.à.d. qu’elles sont conservées dans un environnement séparé plus sécurisé).

Cette caractéristique particulière des portefeuilles HD est couramment utilisée par les portefeuilles matériels bitcoin, tels que les portefeuilles matériels Trezor. Les clés privées étendues sont sécurisées sur le périphérique du portefeuille matériel et seules les clés publiques étendues sont conservées sur un serveur en ligne. Le propriétaire du portefeuille matériel peut créer de nouvelles adresses dans l’interface de portefeuille en ligne et recevoir des paiements, sans avoir besoin d’accéder aux clés privées qui sont conservées hors ligne sur le périphérique. Pour dépenser des bitcoins, l’utilisateur devra signer la transaction avec ses clés privées sur le périphérique du portefeuille matériel. Les clés privées ne quittent jamais l’appareil, et ne sont donc jamais exposées au monde extérieur.

Conclusion

Il existe deux principaux types de portefeuilles bitcoin, chacun utilisant une méthode différente pour générer des paires de clés:

  1. les portefeuilles non déterministes; et
  2. les portefeuilles déterministes.

L’implémentation la plus populaire de portefeuilles bitcoin est le portefeuille déterministe hiérarchique de type 2, également appelé portefeuille « HD ».

Ce type de portefeuille est couramment utilisé par les fabricants de portefeuilles matériels, tels que les portefeuilles matériels de Trezor, en raison de la possibilité de créer un environnement en ligne sécurisé (c.à.d. un environnement dans lequel seul les clés publiques sont accessibles, et non les clés privées).

A cet égard, nous vous conseillons vivement d’utiliser un portefeuille matériel de Trezor pour la sauvegarde de votre bitcoins ou autre crypto-monnaie. Pour de plus amples informations à ce sujet, veuillez visiter ici.


Gardez vous vos crypto-monnaies sur une plateforme en ligne? Attention, dans ce cas vous n’êtes pas le véritable propriétaire de vos crypto-monnaies!

Vous risquez notamment de perdre le tout, sans aucun recours, en cas de de piratage de la plateforme en ligne ou de votre compte personnelle ou en cas de défaillance de la plateforme en ligne.

Il est dès lors impératif que chaque individu prenne possession des ses crypto-monnaies, en transférant ses crypto-monnaies hors ligne sur un portefeuille pour crypto-monnaies sécurisé auquel seul ledit individu a accès.

Ne perdez donc plus de temps et achetez à l’instant votre portefeuille pour crypto-monnaies de Trezor, le leader du marché de la sécurité de crypto-monnaies! Cliquez ce lien pour explorer les différents modèles de portefeuilles pour crypto-monnaies que nous vendons.

Les deux modèles de Trezor: Trezor One (gauche) – Trezor Model T (droite)

N’économisez pas sur la sécurité de vos crypto-monnaies!

Articles récents