Passer au contenu principal

Qu'est-ce que BIP39 ?

Mis à jour aujourd’hui

La spécification BIP-39 décrit principalement l'algorithme et le processus de génération de portefeuilles déterministes basés sur des phrases mnémoniques (un ensemble de mots faciles à retenir).

La spécification se compose de deux parties principales :

  1. Comment générer la phrase mnémonique.

  2. Comment transformer la phrase mnémonique générée en une graine binaire.

Voici un aperçu de la manière de générer des portefeuilles déterministes en décrivant d'abord chacune de ces deux parties.

Génération d'une phrase mnémonique

Le processus algorithmique pour générer une phrase mnémonique est le suivant :

Le processus est le suivant :

  1. Créez une séquence aléatoire (entropie) de 128 à 256 bits (par pas de 32 bits)

  2. Effectuez un SHA256 sur la séquence aléatoire générée à l'étape précédente pour obtenir une valeur de hachage, et prenez les N premiers bits de la valeur de hachage (longueur de l'entropie / 32, par exemple, 128 bits, alors N = 4) comme somme de contrôle de la séquence aléatoire.

  3. Ajoutez la somme de contrôle à la fin de la séquence aléatoire générée à la première étape, de sorte que pour l'exemple de la figure, la séquence aléatoire avec la somme de contrôle soit de 128 + 4 = 132 bits.

  4. Séparez la séquence aléatoire de l'étape précédente par segments de 11 bits (division), de sorte que pour une séquence de 128 bits d'entropie, 12 segments soient générés (132 / 11 = 12).

  5. À ce stade, mappez chaque valeur contenant un segment de 11 bits à un dictionnaire prédéfini de 2048 mots.

  6. Le groupe final de mots générés dans l'ordre de la division est la phrase mnémonique.

Génération de la graine à partir des phrases mnémoniques

Après la génération de la phrase mnémonique, nous pouvons générer la graine en utilisant l'algorithme de génération de clés PBKDF2.

PBKDF2 nécessite deux paramètres : une phrase mnémonique et un sel (salt). L'objectif du sel est de rendre le déchiffrage plus difficile, et dans BIP-39, nous pouvons introduire une passphrase comme facteur de sécurité supplémentaire pour protéger les graines.

« PBKDF2 fait partie de la série des normes de cryptographie à clé publique (PKCS) de RSA Laboratories,
spécifiquement PKCS #5 v2.0, également publié sous forme de RFC 2898 de l'Internet Engineering Task Force. »

Suite à la génération de la phrase mnémonique ci-dessus, le diagramme suivant montre l'algorithme de génération de la graine.

  • Le premier paramètre de PBKDF2 est la phrase mnémonique générée ci-dessus.

  • Le second paramètre de PBKDF2 est le sel, qui se compose généralement d'une chaîne de caractères et d'une concaténation optionnelle de chaînes de chiffrement fournies par l'utilisateur.

  • PBKDF2 utilise l'algorithme HMAC-SHA512, qui utilise 2048 hachages pour produire une valeur de 512 bits comme graine.

Génération d'un portefeuille HD à partir d'une graine

La graine générée ci-dessus sera utilisée comme Graine Racine du portefeuille HD, et la Graine Racine de n'importe quel portefeuille HD peut recréer l'intégralité du portefeuille HD.

generate-hd-master-key.jpeg

L'entrée de la Graine Racine dans l'algorithme HMAC-SHA512 donne un hachage de 512 bits, dont les 256 bits de gauche sont utilisés comme Clé Privée Maître et les 256 bits de droite comme Code de Chaîne Maître. Ensuite, la Clé Publique Maître (264 bits) peut être générée à partir de la Clé Privée Maître m.

Comme vous pouvez le voir dans la figure ci-dessus, la clé HD est générée avec les paramètres suivants.

  • Clé Privée Parent ou Clé Publique Parent ; (les deux sont des clés ECDSA non compressées de 256 bits).

  • Code de Chaîne Parent de 256 bits.

  • Un entier d'index de 32 bits.

De plus, le processus ci-dessus est récursif et la Clé Privée Enfant dans le diagramme peut être utilisée comme Clé Privée Parent au niveau suivant.

En entrant (Clé Publique Parent, Code de Chaîne Parent, Numéro d'Index) dans l'algorithme HMAC-SHA512, nous pouvons générer ses sous-clés, et nous pouvons ajuster le Numéro d'Index pour générer plusieurs sous-clés au même niveau.

À propos de la clé étendue

Étant donné que cette fonction de dérivation de clé est unidirectionnelle, toutes les sous-clés ne peuvent pas être utilisées pour dériver leurs clés parent ou leurs clés sœurs au même niveau. Seule la clé parente et le code de chaîne parent (qui sont générés à partir de la clé et du code de chaîne du niveau Parent du Parent) peuvent être utilisés pour dériver toutes les sous-clés et tous les codes de chaîne enfants, et ensuite générer les clés publiques enfants et les adresses correspondantes pour signer les transactions.

La combinaison de la Clé et du Code de Chaîne est appelée clé étendue, et la clé étendue peut être utilisée pour générer toutes les branches à partir de là.

La clé fournie dans la clé étendue peut être une clé privée ou une clé publique, combinée au code de chaîne, elle est appelée Clé Privée Étendue et Clé Publique Étendue, et notée respectivement (k, c) et (K, c), où la clé publique K = point(k).

Nous pouvons dériver la clé publique étendue à partir de la clé privée étendue et non l'inverse. Ainsi, pour certains scénarios de transaction (par exemple, le commerce électronique), une nouvelle clé publique et une nouvelle adresse peuvent être générées pour chaque transaction afin de recevoir un paiement, tandis que la clé privée étendue peut être stockée dans un portefeuille papier ou un portefeuille matériel pour une signature sécurisée hors ligne des transactions. Comme nous pouvons le constater, la sécurité de la clé publique étendue est relativement élevée, et le diagramme suivant montre le mécanisme de transmission de la clé publique parente étendue pour dériver la clé privée enfant et générer la clé publique enfant :

Avez-vous trouvé la réponse à votre question ?