Comment stocker sa seed Bitcoin

Avant de rentrer dans le vif du sujet, il faut se remémorer le fonctionnement d’un wallet classique ainsi que l’importance de la clé privée, par exemple en lisant le 2ème article du Kalendrier de l’Avent 😉

Seed and trees…

Avant de parler concrètement de la seed en elle même, introduisons un type de Wallet dont nous n’avons pas encore parlé ici : Les HD (Hierarchical deterministic) wallets. Ce type de wallet répond à un problème simple : dans un wallet, on a une paire de clé qui est créée (publique et privée), le problème est qu’à chaque fois que l’on veut se servir d’une nouvelle adresse publique (par soucis de confidentialité par exemple), on doit faire une sauvegarde de l’ancien portefeuille pour conserver nos fonds ET une sauvegarde du nouveau wallet. Ca devient alors de plus en plus compliqués de tracer nos sauvegardes et les wallets associés. Pour remédier à cela, un certain Gregory Maxwell a proposé un nouveau type de wallet durant le soft fork BIP 0032 (un BIP est une proposition d’amélioration de Bitcoin, ou Bitcoin Improvement Proposal dans la langue de Shakespeare). Le HD wallet permet à partir d’une seed (littérelement “graine”) d’accéder à toutes ses clés privées et donc tous ses wallets. La seed n’est donc rien d’autre qu’une clé privée mère permettant d’accéder à des clés privées filles. Cette clé privée se présente sous la forme d’une suite de 12 ou 24 mots. Notons au passage qu’il est à peu près aussi impossible de la trouver “par hasard” que pour une clé privée “classique”, puisqu’il y a environ 2048^12 possibilités.

Un peu de maths

Pour la suite de cet article nous nous baserons sur le soft fork BIP0039 qui a posé une norme de création qui est aujourd’hui la plus utilisée dans les HD wallets.

Tout d’abord, on commence par générer un nombre aléatoire basé entre 128 et 256 bits (un bit est une unité de valeur ne pouvant prendre la valeur 1 ou 0). Ce nombre doit également être un multiple de 32 bits. On va ensuite “hasher” (transformer de manière asymétrique) ce nombre avec l’algorithme SHA 256 et prendre les 4 derniers bits du hash, de sorte à avoir un nombre sur 132 bits. Une fois que l’on a ce nombre bien compliqué, on le divise en 12 valeurs de 11 bits représentant chacun une valeur entre 0 et 2047.

Maintenant, un peu de littérature puisque l’on va assigner chacune de ces valeurs à un mot anglais provenant d’un dictionnaire bien spécifique où :

  • les mots ne se ressemblent pas, limitant le risque d’erreur à la recopie,
  • le mot identifiable à partir des quatre premières lettres qui le composent

Par exemple, les mots witch collapse practice feed shame open despair creek road again ice least forment une seed. On notera d’ailleurs que l’ordre des mots importe ! Cela constitue le noeud maître.

Après cela, on peut ajouter une phrase secrète (ça fait une authentification à 2 facteurs, ça peut être simplement être un code PIN ou alors un mot de passe très complexe) au mnémonique et appliquer l’algorithme PBKDF2 pour obtenir une clé de 512 bits. Enfin, on va se servir de ce nouveau nombre et de la fonction CKD pour générer un nombre infini de clés privées et donc de wallets différents. Si on modifie, la phrase secrète, le nombre qui en découle est différent et donc on peut lier plusieurs wallets à une même suite de mots + une phrase secrète.

Source : Bitcoin.fr

Pour résumer : la graine, c’est la suite de 12 mots transformé en un nombre de 132 bits. Ensuite, la clé maître, c’est ce nombre combiné à la phrase secrète basé sur 512 bits. Enfin selon la phrase secrète rentrée, on obtient une clé privée distincte. (On ne peut pas remonter à partir de la clé privée au nombre de départ).

ATTENTION ! La phrase secrète est facultative et s’applique dans le cas où par exemple une entreprise un wallet et que chaque personne possède sa phrase secrète pour avoir accès à ses adresses. On comprend donc qu’à partir de la graine on peut récupérer tous nos wallets.

Où la stocker ?

La seed (+ notre phrase secrète) est donc encore plus importante que notre clé privée puisqu’elle nous sert de backup (sauvegarde) de nos clés privées. Il faut donc la garder précieusement. La technique la plus simple et la plus répandue consiste à noter cette suite de mot sur un papier que l’on range dans un endroit sûr. Il est a contrario très peu recommandé de prendre une simple capture d’écran de cette suite puisqu’elle sera stockée sur un dispositif connecté (téléphone, pc,…) et vulnérable à des attaques. De plus, s’il tombe en panne, on perd notre sésame.

Par exemple dans les boîtes de Ledger (hardware/cold wallets), il est fourni une petite feuille cartonnée pour noter nos 24 mots. Cependant, un bout de papier peut facilement s’égarer, et en cas d’incendie vos bitcoins peuvent partir en fumée avec votre maison …

Une entreprise du nom de Cryptosteel fabrique des pièces de métal. Un peu comme au scrabble, on assemble des carrés métalliques représentant chacun un caractère, jusqu’à former les 12 mots dans notre cryptosteel. Leurs dispositifs sont fireproof, waterproof, et presque incassables. Cryptosteel a su gagner une réputation puisqu’ils sont recommandés par Ledger et Trezor, 2 leaders des hardware wallets. Mais cette sécurité à un prix d’environ 100 euros.

Un autre moyen est de stocker cette seed chez quelqu’un à qui on a confiance (coffre en Banque, un membre de notre famille, un très très très bon ami). Cela peut paraître anodin mais il convient également d’éviter de noter vos mots sur un papier exposé à une webcam (on n’est jamais trop prudent). Donc pas de panique si votre hardware wallet tombe en panne et que vous n’avez écoutez nos conseils précédents : il suffira simplement de re-rentrer les 12 mots générés lors de la création du wallet (et votre phrase secrète si vous en avez une) pour tout récupérer.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.