Sécurité et wallets · 7 min · démo interactive

Seed phrase : comment 12 mots créent ton wallet

Douze mots tirés d'une liste de 2048 contiennent assez de hasard pour produire toutes tes clés. Regarde chaque étape du calcul, avec une phrase jetable.

L’idée en une phrase

Une seed phrase est un très grand nombre aléatoire écrit en mots, et ce nombre suffit à recalculer toutes les clés de ton wallet.

Ton wallet ne garde pas tes fonds, et tes clés n'ont pas besoin d'être sauvegardées une à une. Un seul secret de 128 bits engendre, par un calcul déterministe, autant de clés privées que tu veux. Les mots ne sont qu'un format de sauvegarde : un humain recopie mieux « abandon about » qu'une suite de 32 caractères hexadécimaux.

La démo

Mode éducatif Ne jamais utiliser pour de vrais fonds. Tout s’exécute dans ton navigateur, rien n’est envoyé ni conservé.

Ne saisis jamais une vraie phrase Ni ici, ni sur aucun site. Cette démo n'a volontairement aucun champ pour coller une seed : elle génère une phrase jetable ou affiche la phrase de test publique. N'envoie jamais de fonds vers ces adresses.

Phrase de test publique du BIP-39. Tout le monde la connaît.

1. Entropie (128 bits, en hexadécimal)

00000000000000000000000000000000

2. Somme de contrôle (4 premiers bits du SHA-256 de l'entropie)

0011

3. Découpage en 12 groupes de 11 bits (surligné : la somme de contrôle)

N°MotIndex11 bits
1abandon000000000000
2abandon000000000000
3abandon000000000000
4abandon000000000000
5abandon000000000000
6abandon000000000000
7abandon000000000000
8abandon000000000000
9abandon000000000000
10abandon000000000000
11abandon000000000000
12about300000000011

Clique sur « Altérer un mot » pour tester la somme de contrôle.

4. Graine (PBKDF2-HMAC-SHA512, 2048 tours, 512 bits)

5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4

5. Dérivation BIP-32/44 et adresses Ethereum (EIP-55)

CheminAdresse
m/44'/60'/0'/0/00x9858EfFD232B4033E47d90003D41EC34EcaEda94
m/44'/60'/0'/0/10x6Fac4D18c912343BF86fa7049364Dd4E424Ab9C0
m/44'/60'/0'/0/20xb6716976A3ebe8D39aCEB04372f22Ff8e6802D7A
m/44'/60'/0'/0/30xF3f50213C1d2e255e4B2bAD430F8A38EEF8D718E
m/44'/60'/0'/0/40x51cA8ff9f1C0a99f88E86B8112eA3237F55374cA

Sans JavaScript, voici le cas de référence, celui des vecteurs de test officiels : 128 bits à zéro donnent onze fois « abandon » puis « about », car le SHA-256 de ces 16 octets commence par 37, soit la somme de contrôle 0011 et l'index 3. La première adresse Ethereum, au chemin m/44'/60'/0'/0/0, est 0x9858EfFD232B4033E47d90003D41EC34EcaEda94. Cette adresse est connue de tous : tout ce qui y arrive peut être pris par n'importe qui.

Intégrer cette démo

Copie ce code sur ton site, ton cours ou ton blog. La démo reste gratuite ; garde simplement le lien vers protocole.org.

Pourquoi ça compte

Ton téléphone tombe dans un lac. Le wallet qu'il contenait a disparu, mais tes fonds sont toujours sur la blockchain : il te suffit de saisir tes 12 mots dans n'importe quel wallet compatible, sur un autre appareil, pour retrouver les mêmes adresses. Aucun serveur n'a été consulté. Tout a été recalculé.

Le revers est immédiat. Quiconque lit ces 12 mots obtient exactement le même pouvoir que toi, sans mot de passe, sans alerte et sans recours. Aucune banque ne peut bloquer le virement. C'est pour cela que la seed phrase est la cible numéro un du phishing : un attaquant n'a pas besoin de casser la cryptographie s'il peut te convaincre de la taper quelque part.

Le code

Le même calcul, sans passer par la fonction qui fait tout. Change le dernier chiffre de l'entropie ou la valeur de compte, puis relance. Ce panneau tourne dans ton navigateur, mais n'y écris jamais une vraie phrase : pars toujours d'une entropie de test comme celle-ci.

Clique sur Lancer pour exécuter ce code dans ton navigateur.

Ce qui se passe vraiment

La démo déroule cinq étapes, toutes réelles. Clique sur « Générer une phrase de test » et suis-les dans l'ordre.

Du hasard aux mots

L'entropie est le point de départ : 128 bits tirés par le générateur cryptographique de ton navigateur. Tout le reste en découle. La démo y ajoute la somme de contrôle, les 4 premiers bits du SHA-256 de l'entropie. On obtient 132 bits, découpés en 12 groupes de 11 bits. Comme 211 vaut 2048, chaque groupe désigne un mot de la liste. Le dernier mot porte donc 7 bits d'entropie et 4 bits de contrôle, surlignés dans le tableau.

Cela explique deux choses souvent mal comprises. D'abord, 12 mots ne font pas 132 bits de secret, mais bien 128 : il existe 2128 phrases valides, soit environ 3,4 × 1038. Ensuite, le bouton « Altérer un mot » montre l'utilité du contrôle. Change un mot, et la phrase est refusée dans 15 cas sur 16. Dans le seizième, elle passe, et tu arrives sur un autre wallet, vide. Une phrase de 24 mots suit la même règle avec 256 bits d'entropie et 8 bits de contrôle.

Des mots à la graine

La graine ne vient pas de l'entropie mais du texte des mots. PBKDF2 applique 2048 fois HMAC-SHA512 à la phrase, avec comme sel le mot « mnemonic » suivi d'une éventuelle passphrase. Résultat : 512 bits. Ces 2048 tours ralentissent chaque essai d'un attaquant. Avec 128 bits d'entropie, ce ralentissement est un bonus : même à mille milliards d'essais par seconde, parcourir toutes les phrases prendrait de l'ordre de 1019 années.

De la graine aux adresses

La dérivation BIP-32 passe la graine dans HMAC-SHA512 : 256 bits forment la clé maîtresse, 256 autres le code de chaîne. Chaque enfant se calcule ensuite à partir de son parent et d'un index, ce qui forme un arbre. Le chemin BIP-44 m/44'/60'/0'/0/i se lit ainsi : norme 44, chaîne 60 (Ethereum), compte 0, branche 0, adresse numéro i. L'apostrophe signale une dérivation durcie : une clé publique étendue ne permet pas de calculer ces enfants.

L'adresse Ethereum vient de la clé publique : on prend les 20 derniers octets de son Keccak-256. Les majuscules ne sont pas décoratives. EIP-55 les fixe d'après un hash de l'adresse, ce qui détecte la plupart des fautes de frappe. Compare les cinq lignes du tableau : rien ne les relie visiblement, et pourtant une seule phrase les produit toutes.

La démo simplifie un seul point : elle n'affiche pas les clés privées, inutiles ici, et ne prévoit pas de passphrase. Les calculs, eux, sont ceux d'un wallet réel. Rien n'est écrit dans ton navigateur : chaque phrase générée reste en mémoire le temps de l'affichage et disparaît au rechargement.

Dans la vraie vie

Une seed phrase BIP-39 n'appartient à aucun wallet. C'est un standard : une phrase créée dans un logiciel compatible se restaure dans un autre, sur Bitcoin comme sur Ethereum, car chaque chaîne a sa propre branche de l'arbre. Une seule sauvegarde couvre donc plusieurs chaînes, ce qui est pratique et concentre le risque.

Si un wallet restauré semble vide, la phrase n'est pas forcément en cause. Certains logiciels incrémentent un autre niveau du chemin, et la même phrase mène alors à d'autres adresses. Le chemin de dérivation fait partie de ce qu'il faut noter avec ta sauvegarde si tu utilises un réglage inhabituel.

La sauvegarde se fait hors ligne, sur papier ou sur métal, dans un endroit protégé du feu et des regards. La passphrase BIP-39, parfois appelée 25e mot, ajoute un secret qui ne se note pas au même endroit, mais si tu l'oublies, l'accès est perdu. Un hardware wallet génère et garde la clé hors de portée de ton ordinateur, sans dispenser de protéger les mots.

Ce qui peut mal tourner

  • La taper sur un site. Aucun service légitime ne demande ta phrase : ni support, ni « vérification », ni « synchronisation ». Toute demande de ce genre est une tentative de vol, et une signature ne l'exige jamais.
  • La stocker en ligne. Photo synchronisée, note dans le cloud, e-mail à soi-même, gestionnaire de mots de passe compromis : une sauvegarde numérique hérite de toutes les failles du compte qui l'héberge.
  • Choisir ses mots soi-même. Un humain ne produit pas 128 bits de hasard. Une phrase composée à la main retombe sur le problème des brain wallets : des robots testent les combinaisons plausibles en continu.
  • Faire confiance à un mauvais générateur. Tout repose sur la qualité de l'entropie. En 2023, la faille « Milk Sad » a montré qu'un outil en ligne de commande, Libbitcoin Explorer, ne tirait en pratique que 32 bits de hasard : des wallets ont été vidés sans casser la moindre cryptographie.
  • Accepter une phrase déjà écrite. Un appareil livré avec une phrase pré-remplie, ou une carte « à activer » dans la boîte, est une arnaque : celui qui a imprimé la phrase attend tes dépôts.
  • Croire qu'une seed volée laisse du temps. Une fois la phrase exposée, déplace les fonds vers une nouvelle phrase. Changer le mot de passe de l'application ne sert à rien : il ne protège que le fichier local.

Teste-toi

1. Combien de bits de secret contient une phrase de 12 mots BIP-39 ?
2. Tu as noté un mot de travers et la phrase est acceptée. Que se passe-t-il ?
3. Un support te demande ta phrase pour débloquer ton compte. Que fais-tu ?