Bitcoin/Clé privée

De WikiOpenTruc
Aller à : navigation, rechercher


  • avec la monnaie bitcoin, on ne trimbale pas de porte-monnaie. On trimbale des clés d'accès à des adresses (comptes).
  • une adresse de compte n'est rien sans la clé privée permettant d'y accéder. Sans la clé privée associée à une adresse, il est impossible de disposer des fonds disponibles sur l'adresse. Et si vous n'avez pas la clé privée d'une adresse, cela peut aussi signifier que quelqu'un d'autre possède cette clé privée. Donc, non seulement vous ne pouvez pas accéder aux fonds, mais un autre le peut.
  • détenir des bitcoins, c'est posséder des clés privées de compte publics. Ce sont les clés privées qui sont à la base. Une adresse bitcoin est fabriquée (de façon déterministe) à partir d'une clé privée.
  • il est parfaitement idiot (sauf pour de petites sommes) de stocker ses clés sur un site truc ou machin
    • le site peut être piraté, du dehors ou du dedans (complicités internes, voire le patron) ... et on est dépouillé. Les arnaques se comptent par dizaines et sont régulières.
    • pour des pirates, tant qu'à mener des attaques, autant attaquer des lieux où se trouvent des centaines de clés privées
    • il est plus sûr de stocker ses clés sur du matériel personnel, par exemple du matériel déconnecté d'internet
  • à chaque fois qu'une clé circule (sur un fil, dans l'ordi, ou via wifi) elle est potentiellement vulnérable
    • en conséquence, c'est la réduction du nombre de transmission(s) qui doit être visée
  • la clé publique et l'adresse bitcoin sont générées à partir de la clé privée
  • la clé publique sert (c'est sa seule utilité) à prouver qu'on est bien le propriétaire d'une adresse donnée.


Fabrication d'une clé privée

ex : 
4300d94bef2ee84bd9d0781398fd96daf98e419e403adc41957fb679dfa1facd
0123456789012345678901234567890123456789012345678901234567890123

Une clé privée bitcoin est un nombre codé sur 256 bits. (Un poil moins, mais on ne détaille pas ici).

256 bits = 64 x 4 bits = 64 chiffres hexadécimaux (2²⁵⁶=16⁶⁴) => 16⁶⁴ possibilités, 16⁶⁴ = 1.15⁷⁷

Tel quel, c'est une combinatoire assez immense pour y choisir sa clé sans qu'elle puisse être devinée.

C'est d'ailleurs infiniment plus spacieux que toutes les combinatoires pour les codes habituels, mots de passe et clés en bon acier.


Une clé privée sert :

  • à chiffrer des messages (en l'occurrence des transactions)
  • à générer une clé publique
  • à générer une adresse (n° de compte)

étant donné qu'une clé privée est un nombre codé sur 256 bits, il est assez naturel de penser à utiliser une fonction comme sha256() pour générer facilement des clés.

... C'est une bonne idée pour s'entraîner, mais ce n'est pas une bonne idée pour générer des vraies clés.



Fabrication d'une clé privée, les pièges à éviter

Problème : vu sa longueur, une clé privée bitcoin aléatoire est impossible à mémoriser de tête. Et donc certains utilisateurs ont naturellement l'idée de fabriquer des clés pas trop difficiles à mémoriser.

C'est là où il faut faire attention.

On dispose, par sécurité, d'un espace de base immense (1.15x10⁷⁷) pour le choix d'une clé.

Attention à ne pas réduire trop de facto cet espace de choix ! car il se prêtera alors éventuellement plus facilement à des tentatives d'explorations.

Si vous songez eg à prendre un mot du dictionnaire (eg dans un dico standard de 50.000 mots) avec un coup de sha256 par dessus; vous passez d'un espace 1.15x10⁷⁷ à 5x10⁴. C'est tout simplement 10⁷³ fois plus petit, et facilement explorable (et exploré) par ordinateur. Et oui, des gens ont eu l'idée (et ça n'a pas été long) de passer tout le dictionnaire à la moulinette sha256, et à défaut de disposer d'une fonction inverse de sha256, ils disposent donc de cette fonction inverse sur un espace de départ certes petit ... mais peut-être pertinent (car quelques naïfs l'ont utilisé).

La clé publique et l'adresse sont déduites de la clé privée (par d'autres fonctions de hash) :

  • Clé publique = f(clé privée) = clé privée * base point
  • Adresse = g(clé publique)
  • Adresse = g(f(clé privée)) = h(clé privée)

Ici aussi, des personnes ont appliqué la fonction h sur tout le dictionnaire, et si une adresse présente dans la blockchain a le malheur d'appartenir à l'espace 5x10⁴ du dictionnaire, il suffit de la comparer aux résultats stockés de h(dico) pour la cibler et retrouver instantanément la clé privée génératrice.