Aller au contenu principal

bip39-explained

TARGET_LOCALE: fr


title: "Norme BIP-39 expliquée : comment fonctionnent les phrases mnémoniques" description: "Analyse approfondie de la norme BIP-39 pour les phrases mnémoniques. Découvrez les détails techniques de l’entropie, de la somme de contrôle, des listes de mots et de la dérivation de seed utilisées par les portefeuilles de cryptomonnaies." keywords: [BIP-39, mnémonique, phrase de seed, liste de mots, PBKDF2, entropie, norme des cryptomonnaies] sidebar_position: 3

Norme BIP-39 expliquée : comment fonctionnent les phrases mnémoniques

BIP-39 (Bitcoin Improvement Proposal 39) définit la norme de génération des phrases mnémoniques — les séquences familières de 12 ou 24 mots — qui encodent l’entropie utilisée pour dériver les clés de portefeuille de cryptomonnaies. Publiée en 2013 par Marek Palatinus, Pavol Rusnak, Aaron Voisine et Sean Bowe, BIP-39 est devenue la norme dominante pour la sauvegarde des portefeuilles sur pratiquement toutes les cryptomonnaies majeures.

Comprendre BIP-39 au niveau technique vous donne confiance dans la fiabilité de votre sauvegarde de phrase de seed et vous aide à évaluer les propriétés de sécurité des différentes implémentations de portefeuilles.

Vue d’ensemble de BIP-39

BIP-39 spécifie deux processus :

  1. Génération de la mnémonique — Conversion d’une entropie aléatoire en une séquence de mots lisibles par l’humain.
  2. Dérivation de la seed — Conversion des mots mnémoniques (plus une passphrase optionnelle) en une seed binaire de 512 bits pouvant être utilisée avec BIP-32 pour la génération hiérarchique déterministe de clés.

Ces deux processus sont volontairement séparés. La mnémonique est la représentation conviviale pour l’humain ; la seed est l’entrée cryptographique pour la dérivation des clés.

Étape 1 : génération de l’entropie

Le processus commence par un bloc de données aléatoires cryptographiquement sûres (entropie). BIP-39 prend en charge cinq tailles d’entropie :

Entropie (bits)Somme de contrôle (bits)Total (bits)Mots
128413212
160516515
192619818
224723121
256826424

En pratique, presque tous les portefeuilles utilisent soit 128 bits (12 mots), soit 256 bits (24 mots). Les autres tailles sont valides selon la spécification mais rarement implémentées.

La qualité de la source d’entropie est primordiale. Si le générateur de nombres aléatoires est biaisé, prévisible ou dispose d’une entropie insuffisante, la phrase de seed résultante peut être devinée par un attaquant. Consultez notre guide sur l’entropie et l’aléatoire pour un traitement détaillé de ce sujet.

Sources d’entropie

  • Générateurs matériels de nombres aléatoires (HRNG) — Utilisés par les portefeuilles matériels comme Ledger et Trezor. Ils échantillonnent des phénomènes physiques (bruit thermique, bruit de grenaille) pour produire un véritable aléa.
  • CSPRNG du système d’exploitation/dev/urandom sur Linux/macOS, CryptGenRandom sur Windows, ou crypto.getRandomValues() dans les navigateurs. Ce sont des générateurs pseudo-aléatoires cryptographiquement sûrs (CSPRNG) initialisés à partir de sources d’entropie matérielles.
  • Lancers de dés — Certains utilisateurs génèrent manuellement l’entropie avec des dés de qualité casino, en mappant les lancers vers du binaire ou des indices de mots. Cela supprime la confiance envers tout RNG logiciel ou matériel.

Étape 2 : calcul de la somme de contrôle

Une fois l’entropie générée, une somme de contrôle est ajoutée :

  1. Calculez le hash SHA-256 des octets d’entropie.
  2. Prenez les ENT / 32 premiers bits du hash (où ENT est la longueur d’entropie en bits).
  3. Ajoutez ces bits de somme de contrôle à l’entropie.

Pour une entropie de 256 bits, cela produit 8 bits de somme de contrôle, soit un total de 264 bits.

La somme de contrôle sert de mécanisme de détection d’erreurs : quand vous saisissez votre phrase de seed dans un portefeuille pour la récupération, le portefeuille recalcule la somme de contrôle. Si un mot est erroné ou si les mots sont dans le mauvais ordre, la somme de contrôle échoue et le portefeuille rejette la mnémonique. Cela protège contre les erreurs de transcription mais ne les corrige pas — cela détecte seulement qu’il y a un problème.

Implications de la somme de contrôle

Comme le dernier mot de la mnémonique encode des bits de somme de contrôle, tous les mots ne sont pas valides comme mot final pour une séquence donnée. Pour une mnémonique de 24 mots, le dernier mot encode 3 bits d’entropie et 8 bits de somme de contrôle, donc seuls 8 des 2 048 mots possibles sont valides pour n’importe quels 23 premiers mots. C’est pourquoi vous ne pouvez pas choisir librement le dernier mot.

Étape 3 : association aux mots

Les bits combinés entropie + somme de contrôle sont divisés en groupes de 11 bits. Chaque groupe de 11 bits représente un indice de 0 à 2 047, correspondant à un mot dans la liste de mots BIP-39.

264 bits / 11 bits par mot = 24 mots
132 bits / 11 bits par mot = 12 mots

La liste de mots anglaise

La liste de mots anglaise BIP-39 contient exactement 2 048 mots. La liste a été soigneusement conçue avec les propriétés suivantes :

  • Préfixes uniques de quatre lettres — Aucun mot ne partage les quatre premiers caractères avec un autre. Cela signifie que abandon peut être identifié sans ambiguïté par aban, ce qui est utile pour des sauvegardes métalliques compactes.
  • Vocabulaire courant — Les mots sont simples, largement connus en anglais. Pas de jargon, de noms propres ni de termes obscurs.
  • Évitement des mots similaires — Les mots facilement confondus (par exemple, "woman" et "women") sont exclus lorsque possible.
  • Longueur des caractères — Tous les mots comportent entre 3 et 8 caractères.

Listes de mots dans d’autres langues

BIP-39 définit des listes de mots en neuf langues :

LangueStatutNotes
AnglaisNorme de référenceSupport le plus répandu
JaponaisStandardiséUtilise le katakana ; les espaces sont idéographiques (U+3000)
CoréenStandardisé
EspagnolStandardisé
Chinois (simplifié)Standardisé
Chinois (traditionnel)Standardisé
FrançaisStandardisé
ItalienStandardisé
TchèqueStandardisé
PortugaisStandardisé

Note importante de compatibilité : Une mnémonique générée avec une liste de mots ne peut pas être restaurée avec une liste d’une autre langue. Les indices de mots diffèrent entre les langues. Notez toujours la langue utilisée lors de la création de votre sauvegarde.

Étape 4 : dérivation de la seed (PBKDF2)

La phrase mnémonique n’est pas utilisée directement comme clé cryptographique. À la place, elle subit un étirement de clé via PBKDF2-HMAC-SHA512 :

PBKDF2(
password = phrase mnémonique (mots joints par des espaces, normalisés en UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)

Cela produit une seed de 512 bits qui sert d’entrée à la dérivation hiérarchique déterministe de clés BIP-32.

Propriétés clés de PBKDF2 dans BIP-39

Étirement de clé — Les 2 048 itérations de PBKDF2 ajoutent un coût de calcul aux attaques par force brute. Même si 2 048 itérations est modeste selon les standards modernes de hachage de mots de passe, la sécurité principale vient de l’entropie de la mnémonique elle-même (128 ou 256 bits), et non du facteur d’étirement.

Prise en charge de la passphrase — Le salt inclut une passphrase optionnelle (le "25th word"). Si aucune passphrase n’est fournie, le salt est simplement la chaîne "mnemonic". Si une passphrase est fournie, le salt devient "mnemonic" + passphrase. Cela signifie que chaque passphrase différente produit une seed complètement différente — et donc un ensemble totalement différent de clés et d’adresses — à partir de la même mnémonique.

Aucune validation de passphrase — Contrairement à la somme de contrôle de la mnémonique, il n’y a pas de somme de contrôle sur la passphrase. Toute passphrase est valide. Saisir une passphrase incorrecte ne produit pas d’erreur ; cela génère silencieusement un portefeuille différent (vide). C’est une fonctionnalité de déni plausible, mais un risque pour les utilisateurs qui oublient leur passphrase.

Normalisation Unicode — La mnémonique et la passphrase sont normalisées en UTF-8 NFKD (Normalization Form Compatibility Decomposition) avant d’être passées à PBKDF2. Cela garantit une dérivation de seed cohérente entre les implémentations, quelle que soit la manière dont le système d’exploitation représente les caractères en interne.

Étape 5 : de la seed aux clés (BIP-32)

La seed de 512 bits issue de PBKDF2 est utilisée comme entrée de BIP-32 (Hierarchical Deterministic Wallets) :

  1. La seed passe dans HMAC-SHA512 avec la clé "Bitcoin seed".
  2. Les 256 bits de gauche deviennent la clé privée maître.
  3. Les 256 bits de droite deviennent le code de chaîne maître.
  4. Ensemble, ils forment la clé privée étendue maître (xprv).

À partir de là, les chemins de dérivation BIP-44 définissent une structure arborescente standardisée pour dériver des clés et des adresses spécifiques à chaque monnaie.

Exemple détaillé

Suivons BIP-39 avec un exemple simplifié utilisant 128 bits d’entropie (mnémonique de 12 mots) :

1. Générer 128 bits d’entropie

00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

(Ceci est une entropie tout-zéro — à titre d’illustration uniquement. Ne jamais utiliser en pratique.)

2. Calculer le hash SHA-256

SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb

3. Prendre les 4 premiers bits du hash comme somme de contrôle

Premier octet : 0x37 = 00110111. 4 premiers bits : 0011.

4. Ajouter la somme de contrôle à l’entropie

128 bits de zéros + 0011 = 132 bits au total.

5. Diviser en groupes de 11 bits

00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"

Résultat : abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

C’est le vecteur de test bien connu pour une entropie tout-zéro. Le dernier mot est "about" (et non "abandon") à cause des bits de somme de contrôle.

6. Dériver la seed avec PBKDF2

PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)

Cela produit une seed de 512 bits utilisée pour la dérivation BIP-32.

Outil SafeSeed

Utilisez le générateur de phrase de seed SafeSeed pour voir BIP-39 en action. Générez une phrase de seed et visualisez l’entropie, la somme de contrôle et l’association des mots en temps réel. Exécutez l’outil hors ligne pour une sécurité maximale.

Analyse de sécurité de BIP-39

Sécurité de l’entropie

Pour une mnémonique de 24 mots (256 bits d’entropie) :

  • L’espace de recherche est 2^256, soit environ 1.16 x 10^77 possibilités.
  • Même à un rythme de mille milliards (10^12) d’essais par seconde, une recherche exhaustive prendrait environ 3.67 x 10^57 ans — bien plus longtemps que l’âge de l’univers (1.38 x 10^10 ans).

Pour une mnémonique de 12 mots (128 bits d’entropie) :

  • L’espace de recherche est 2^128, soit environ 3.4 x 10^38 possibilités.
  • À mille milliards d’essais par seconde, une recherche exhaustive prendrait environ 10^19 ans.

Les deux sont irréalisables en calcul classique.

Considérations sur PBKDF2

PBKDF2 à 2 048 itérations ajoute un facteur constant aux attaques par force brute, mais ce n’est pas la barrière de sécurité principale. Certains chercheurs en sécurité notent que 2 048 itérations est faible par rapport à des fonctions modernes de dérivation de clés comme Argon2 ou bcrypt. Toutefois, comme l’entropie de la mnémonique (128 ou 256 bits) est le facteur dominant, cela reste une préoccupation mineure en pratique.

Limites de la somme de contrôle

La somme de contrôle détecte la plupart des erreurs de transcription mais :

  • Elle détecte les erreurs sans les corriger.
  • Pour les mnémoniques de 12 mots, il n’y a que 4 bits de somme de contrôle, ce qui signifie qu’environ 1 modification aléatoire sur 16 passera la somme de contrôle.
  • La somme de contrôle ne protège pas contre une réorganisation des mots qui produirait malgré tout une somme de contrôle valide.

Risques liés à la passphrase

La fonctionnalité de passphrase est puissante mais introduit des risques :

  • Si vous oubliez la passphrase, les fonds sont irrécupérables (aucun mécanisme de "reset").
  • La passphrase n’est pas validée — n’importe quelle chaîne produit un portefeuille valide.
  • Un attaquant qui obtient la mnémonique mais pas la passphrase doit forcer la passphrase, ce qui fournit une sécurité supplémentaire proportionnelle à l’entropie de la passphrase.

Critiques de BIP-39

BIP-39 n’est pas exempt de critiques dans la communauté de développement Bitcoin.

Absence de versionnage

BIP-39 n’inclut pas d’octet de version, ce qui signifie que le processus de dérivation est figé pour toujours. Si une amélioration future nécessite une fonction de dérivation différente ou des paramètres différents, cela ne peut pas être signalé dans le format mnémonique. C’est pourquoi certains portefeuilles (notamment Electrum) utilisent leur propre schéma mnémonique avec versionnage.

Couplage fort à la liste de mots

La mnémonique dépend de la liste de mots exacte. Si la liste de mots était un jour modifiée, les mnémoniques existantes ne pourraient plus être récupérées. Les listes de mots sont gelées depuis la standardisation, mais cette rigidité est considérée comme une limite de conception par certains.

Étirement de clé faible

Comme indiqué, 2 048 itérations de PBKDF2 sont considérées faibles selon les standards actuels. Bien que cela n’affecte pas matériellement la sécurité des mnémoniques à forte entropie, cela offre moins de protection pour des passphrases plus courtes ou choisies par l’utilisateur.

Alternative d’Electrum

Le portefeuille Electrum utilise son propre schéma mnémonique qui inclut le versionnage et ne dépend pas d’une liste de mots fixe. Les mnémoniques Electrum ne sont pas compatibles BIP-39. Cela signifie qu’une phrase de seed Electrum ne peut pas être restaurée dans un portefeuille BIP-39, et inversement. Sachez toujours quelle norme votre portefeuille utilise.

Implémentations BIP-39

BIP-39 est implémenté dans pratiquement tous les portefeuilles majeurs :

PortefeuilleBIP-39Nombre de motsNotes
LedgerYes24Matériel, secure element
TrezorYes12/24Prend aussi en charge SLIP-39 (Shamir)
ColdcardYes24Matériel Bitcoin uniquement
MetaMaskYes12Extension navigateur
Trust WalletYes12Mobile
ExodusYes12Bureau/mobile
ElectrumNo12Utilise son propre schéma
BlueWalletYes12/24Mobile orienté Bitcoin

Tests et vérification

Vecteurs de test officiels

La spécification BIP-39 inclut des vecteurs de test — des valeurs d’entropie connues avec leurs mots mnémoniques correspondants et les seeds dérivées. Ils servent à vérifier que les implémentations sont correctes.

Vous pouvez vérifier l’implémentation BIP-39 de votre portefeuille en la comparant aux vecteurs de test officiels publiés ici :

Vérifier votre phrase de seed

Pour vérifier que vous avez correctement noté votre phrase de seed :

  1. Générez la phrase de seed sur votre portefeuille matériel.
  2. Écrivez-la soigneusement.
  3. Réinitialisez le portefeuille matériel aux paramètres d’usine.
  4. Restaurez à partir de la phrase de seed que vous avez notée.
  5. Vérifiez que les mêmes adresses sont générées.
  6. Confirmez que le portefeuille peut signer des transactions.

Ce processus confirme à la fois que votre sauvegarde est correcte et que l’implémentation BIP-39 du portefeuille fonctionne comme prévu.

FAQ

Que signifie BIP-39 ?

BIP signifie Bitcoin Improvement Proposal. BIP-39 est la proposition numéro 39, qui définit la norme pour créer des représentations mnémoniques (lisibles par l’humain) de l’entropie cryptographique. Elle a été introduite en 2013 et adoptée par pratiquement tous les principaux portefeuilles de cryptomonnaies.

Toutes les phrases de seed de 12 mots sont-elles BIP-39 ?

Non. Certains portefeuilles (notamment Electrum) utilisent leur propre schéma mnémonique distinct de BIP-39. Même si les deux produisent des phrases de 12 mots à partir de listes de mots, l’encodage, les listes de mots et les processus de dérivation diffèrent. Une phrase BIP-39 ne peut pas être utilisée avec le schéma d’Electrum, et inversement. Vérifiez toujours la documentation de votre portefeuille.

Puis-je créer ma propre phrase de seed BIP-39 en choisissant des mots ?

Vous ne devriez pas. Même s’il est techniquement possible de sélectionner 23 mots et de calculer un 24e mot valide (pour satisfaire la somme de contrôle), la sélection humaine de mots ne produit pas une entropie suffisante. La sécurité de BIP-39 dépend du fait que les mots proviennent de données aléatoires de haute qualité, pas d’un choix humain. Laissez un CSPRNG générer l’entropie.

Pourquoi le mot "mnemonic" est-il utilisé comme salt PBKDF2 ?

La chaîne "mnemonic" est un salt fixe spécifié par BIP-39. Lorsqu’une passphrase est utilisée, elle est ajoutée à ce salt (par exemple, "mnemonicMyPassphrase"). L’utilisation d’un salt fixe connu garantit une dérivation de seed cohérente entre toutes les implémentations sans nécessiter d’informations supplémentaires au-delà de la mnémonique et de la passphrase optionnelle.

BIP-39 est-il utilisé uniquement pour Bitcoin ?

Non. BIP-39 est utilisé par pratiquement toutes les cryptomonnaies majeures, y compris Ethereum, Litecoin, Cardano, Solana et bien d’autres. Le processus de génération mnémonique et de dérivation de seed est identique ; seuls les chemins de dérivation de clés ultérieurs (définis par les types de coins BIP-44) diffèrent selon les chaînes.

Quelle est la différence entre BIP-39 et SLIP-39 ?

BIP-39 produit une mnémonique unique qui représente le secret complet. SLIP-39 (Satoshi Labs Improvement Proposal 39) implémente le partage de secret de Shamir, en divisant le secret en plusieurs parts (par exemple, 3-sur-5). N’importe quel nombre de parts atteignant le seuil permet de reconstruire le secret, mais un nombre inférieur de parts ne révèle aucune information. SLIP-39 utilise une liste de mots et un encodage différents de BIP-39.

Combien de mnémoniques BIP-39 valides existent ?

Pour les mnémoniques de 24 mots : 2^256 (environ 1.16 x 10^77). Pour les mnémoniques de 12 mots : 2^128 (environ 3.4 x 10^38). Ces nombres représentent l’espace d’entropie. La somme de contrôle contraint les combinaisons de mots mais ne réduit pas l’entropie — cela signifie simplement que toutes les séquences aléatoires de 24 mots BIP-39 ne forment pas une mnémonique valide.

Guides associés