Bitcoin/Clé privée

De WikiOpenTruc
< Bitcoin
Révision datée du 19 mai 2018 à 18:15 par Cornélius (discussion | contributions) (Page créée avec « <pre> ex : 4300d94bef2ee84bd9d0781398fd96daf98e419e403adc41957fb679dfa1facd 0123456789012345678901234567890123456789012345678901234567890123 </pre> 256 bits = 64 chiffr... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
ex : 
4300d94bef2ee84bd9d0781398fd96daf98e419e403adc41957fb679dfa1facd
0123456789012345678901234567890123456789012345678901234567890123

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

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

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)


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 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.