La Cryptographie et le Bitcoin

À ce jour, presque tout le monde a entendu parler de Bitcoin. En termes simples, Bitcoin est de l’argent liquide numérique – un système monétaire qui allie l’anonymat de l’argent liquide à la commodité, la liberté et la puissance d’Internet, vous permettant d’envoyer et de recevoir des fonds dans le monde entier sans dépendre d’une autorité centrale telle qu’une banque ou un gouvernement.

Le pouvoir de Bitcoin provient d’une invention appelée “blockchain”. Une blockchain est un grand livre distribué qui utilise la puissance combinée des ordinateurs qui y participent pour fonctionner, ce qui permet la décentralisation de l’autorité dans le réseau.

D’un point de vue technique, il existe de nombreux concepts intéressants qui constituent une chaîne de blocs – les bases de données distribuées et le consensus (ou, la gouvernance décentralisée) sont tous deux fascinants. Mais fondamentalement, la cryptographie est la pierre angulaire des systèmes de chaînes de blocs.

La cryptographie est l’étude des codes – écrire des codes, résoudre des codes et manipuler des codes. Oui, cela inclut le super réseau d’espionnage décodeur secret que vous aviez quand vous étiez enfant, et même le porc latin ! La cryptographie est une étude ancienne qui existe depuis des milliers d’années, le plus souvent sous forme de codes. On pense généralement que les chiffres ont été inventés comme méthode pour dissimuler les informations contenues dans un message à toute personne qui ne l’a pas reçu intentionnellement.

Cryptographie et ordinateurs

La cryptographie et les ordinateurs ont une relation de concurrence depuis les débuts de l’informatique numérique. Pendant la Seconde Guerre mondiale, le Royaume-Uni a beaucoup investi dans le décryptage des communications de l’Axe. Le déchiffrement devenant trop difficile à réaliser à la main, une race a commencé à développer une machine capable de déchiffrer les codes plus rapidement que n’importe quel humain. Cela a finalement conduit au développement de Colossus, le premier ordinateur numérique programmable.

Depuis lors, la guerre des ordinateurs et de la cryptographie n’a fait que s’intensifier. Dans ce que beaucoup décrivent comme une “course à l’armement”, de nombreux systèmes informatiques que nous considérons comme acquis reposent largement sur la cryptographie, tandis que l’invention d’ordinateurs plus puissants force des chiffrages auparavant à la pointe de la technologie à devenir obsolètes.

Sans la cryptographie, il serait impossible de chiffrer les données, d’assurer des communications sécurisées ou même de confirmer que vous naviguez sur un site sûr – oui, je vous regarde, petit vert-bloqué dans mon navigateur. Nous allons nous concentrer sur la cryptographie qui alimente quelques parties de Bitcoin, un système cryptographique révolutionnaire.

 

Qu’est-ce qu’une clé privée pour le Bitcoin ?

 

Si vous avez déjà utilisé des bitcoins, vous avez probablement entendu parler d’une clé privée. Les clés privées sont vitales pour le système Bitcoin. Elles constituent le mécanisme permettant de prouver la propriété des bitcoins. C’est ce qui permet à un utilisateur d’autoriser une transaction sur le réseau. Les clés privées existent sous de nombreuses formes en dehors des bitcoins et pour de nombreuses raisons, et la plupart des personnes qui les connaissent par expérience les considèrent comme un moyen d’envoyer des messages cryptés.

Pour chaque clé privée qui existe dans Bitcoin, il existe une relation 1:1 avec ce qu’on appelle une clé publique. Comme vous pouvez l’imaginer, une clé privée est destinée à rester privée et n’est partagée avec personne, en aucune circonstance. Une clé publique, en revanche, peut être partagée avec n’importe qui – il n’y a aucun danger à ce que je place ma clé publique sur mon site web, par exemple, ou à ce que je l’envoie par e-mail à un client pour qu’il reçoive un paiement pour une activité quelconque.

En ce sens, vous pouvez considérer les clés publiques et privées comme un nom d’utilisateur et un mot de passe – l’un vous permet de vous identifier, tandis que l’autre vous permet de prouver que vous êtes cette personne. Toutefois, contrairement à un mot de passe, une clé privée ne peut jamais être réinitialisée ou récupérée en cas de perte. Ainsi, une clé privée est une donnée extrêmement importante et doit être protégée, peut-être jusqu’à la paranoïa.

En raison de la garantie 1:1, les clés publiques et privées partagent une relation cryptographique qui les relie entre elles. Dans Bitcoin, les clés privées produisent une clé publique via un algorithme de signature numérique à courbe elliptique, ou ECDSA. Une clé privée qui est une entrée pour cet algorithme produira toujours sa clé publique correspondante. Cependant, la clé publique ne peut jamais être inversée pour produire sa clé privée correspondante en raison de la nature unilatérale de cet algorithme.

Une clé privée Bitcoin est généralement un nombre de 256 bits, qui peut être représenté de plusieurs façons.

Clé privée :
KxeNcRw8mBfyLrnnXQymQkogLjvmn6uJCmSWLRmZ6Mt3Hzfgo1mY

Adresse de dépôt :
1MnU3iyTeej69DKGGKo6vU3H3dKKZ9ZL6u

C’est beaucoup de clés !

La cryptographie des paires de clés publiques et privées est ce qui alimente le système d’adresses dans Bitcoin – la crypto équivalent à un compte courant. Une nouvelle adresse peut simplement être générée par programmation. Chaque fois qu’une nouvelle adresse est nécessaire, je peux utiliser l’interface de mon choix (peut-être un portefeuille Bitcoin) et en créer une.

Habituellement, lorsque je présente à quelqu’un un Bitcoin, sa question immédiate est “Et si quelqu’un devine ma clé privée ?”, à laquelle je réponds “Eh bien, c’est hautement, TRÈS improbable”.

Mais à quel point est-ce improbable ?

Eh bien, pour un cadre de référence, l’espace d’adressage total de Bitcoin est de 2^160. C’est tout ce qu’il y a :

1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976

Bonne chance pour visualiser cela. Pour aller encore plus loin, considérez qu’il y a environ 2^63 grains de sable sur Terre, ce qui inclut le sable des plages et des fonds marins. 2^63 * 2^63 = 2^126.

Cela signifie que pour chaque grain de sable sur Terre, vous pourriez créer une nouvelle Terre, puis compter tous les grains de sable de toutes ces Terres, sans même vous approcher ddu nombre d’adresses disponibles pour le Bitcoin.

Il est clair que dans ce cas, la cryptographie obtient la sécurité grâce à de très grands nombres. Je pourrais essayer de deviner des clés privées encore et encore, en utilisant tous les moyens connus de l’humanité (y compris les ordinateurs, bien sûr), pendant plusieurs millions d’années, et cela ne va tout simplement pas se produire.

C’est merveilleux car cela permet de créer toutes sortes d’applications en utilisant des bitcoins – par exemple, Decent a créé un prototype de plate-forme pour les organisations caritatives qui permet de faire des dons en utilisant des cryptocurrences. Il n’est pas nécessaire de limiter le nombre de campagnes qui pourraient être créées, ni de limiter le nombre d’adresses de dépôt qu’un utilisateur peut avoir, car le nombre d’adresses est pratiquement infini.

Est-il possible de deviner une clé Bitcoin?

Comme nous l’avons vu, la probabilité est tellement faible que l’on peut considérer cela comme impossible.

En conclusion, les paires de clés publiques et privées sont un outil fondamental de la cryptographie qui a de nombreuses utilisations. Dans le cas de Bitcoin, l’utilisation consiste à confirmer la propriété et à créer un grand nombre d’adresses disponibles pour l’utilisation.

N’oubliez pas qu’en raison du grand nombre de clés, on peut supposer sans risque que toute clé que je génère est la mienne et uniquement la mienne. Ainsi, le système Bitcoin ne nécessite aucune autre preuve de propriété. Sinon, dans d’autres systèmes, nous utiliserions traditionnellement notre identité comme preuve de propriété. Comme Bitcoin supprime cette exigence, les cryptomonnaies favorisent l’anonymat tout comme l’argent physique, mais peut-être dans une plus large mesure.

 

Portefeuilles hiérarchiques déterministes

 

Une grande puissance s’accompagne d’une grande responsabilité

Maintenant que nous avons couvert les paires de clés dans Bitcoin, nous pouvons couvrir la manière unique dont elles sont créées. Les clés privées nous donnent un contrôle total sur nos finances – c’est le but de Bitcoin. Cependant, à bien des égards, avoir le contrôle total est effrayant. Si une clé privée est perdue, les fonds qui lui sont associés disparaissent à jamais. Si quelqu’un vole une clé privée, il a un accès complet aux fonds et est théoriquement le nouveau propriétaire de ces fonds. Et il n’y a aucun recours en cas de perte ou de vol de la clé privée, ou de tout autre problème.

Cela représente une pression importante pour un utilisateur de Bitcoin. Bien sûr, un utilisateur pourrait faire ce qu’il fait avec n’importe quelle autre donnée de valeur, et créer une clé privée de sauvegarde. Cependant, les clés privées doivent être très étroitement surveillées. Les clés privées ne doivent jamais être sauvegardées sur un serveur en nuage ou transmises par une communication Internet quelconque.

Il est dangereux de les stocker sur un ordinateur ou un téléphone portable, car si un système est compromis par un voleur ou un agresseur, tous les fonds associés aux clés privées sur le système seraient gratuits.

Une clé privée pourrait être stockée dans un coffre-fort ignifuge et enterrée à 3 mètres sous terre dans une région sauvage éloignée, mais comme l’utilisation de Bitcoin génère des centaines ou des milliers de clés privées pour un seul utilisateur. Comment quelqu’un peut-il garder une trace de toutes ces clés ? Comment peut-on stocker quelque chose sans le stocker ?

C’est là qu’intervient le “portefeuille déterministe hiérarchique” ou “HD Wallet” pour sauver la situation.

Décomposons le HD Wallet mot par mot. Être “hiérarchique”, c’est être disposé dans un ordre ou un rang, ou être placé dans l’ordre. La séquence est très importante dans le système du HD Wallet. Le “déterminisme” est une façon fantaisiste de dire “cause et effet”. Il y aura toujours un résultat pour tout événement dans tout système.

Et un “portefeuille” est une interface pour l’utilisation des bitcoins qui vous permet d’accéder, d’envoyer et de recevoir des bitcoins. Parmi les porte-monnaie les plus connus, on peut citer l’électrum, le mycélium et le pain.

Ainsi, un portefeuille HD est un portefeuille Bitcoin qui génère une séquence de clés privées, où chaque clé privée est déterminée par la clé précédente ou “parent” dans la séquence. Ce système a été ajouté au Bitcoin BIP-32. Un BIP est une “proposition d’amélioration de Bitcoin” ou le format permettant d’apporter des modifications à Bitcoin.

Tout comme la relation entre une clé privée et une clé publique, la séquence de clé privée qui résulte de l’utilisation d’un portefeuille HD est définie par une relation unidirectionnelle entre les entrées et les sorties d’un algorithme. À un niveau élevé, les clés privées de Bitcoin sont générées à l’aide d’un “générateur de nombres pseudo-aléatoires”.

Les programmes étant si strictement définis et orientés vers les processus, il est très difficile de saisir le concept humain de “caractère aléatoire” dans un ordinateur. Ainsi, ces générateurs aléatoires nécessitent souvent un apport d’entropie appelé “graine”.

Celle-ci est parfois représentée par des mouvements de souris ou des pressions de touches aléatoires dans d’autres programmes, et une graine d’entropie plus grande ou “plus aléatoire” est nécessaire pour une génération “plus aléatoire”. Une bizarrerie des générateurs de nombres pseudo-aléatoires est le résultat d’une pensée algorithmique – le générateur suit une séquence d’étapes pour produire une sortie.

Ainsi, avec de nombreux algorithmes, il n’y a qu’une seule sortie pour une seule entrée. Avec la séquence HD, nous utilisons les sorties (clés privées) de la génération de nombres précédente comme entrées pour la nouvelle génération de nombres, et nous créons une “chaîne” de clés.

Dans le détail, ce processus est légèrement plus compliqué, mais pour la portée de cet article, cette définition des clés enchaînées est suffisante.

Pourquoi est-ce important ? Eh bien, considérez ce qui suit. Il est connu que dans une séquence de clés, chaque clé privée est générée sur la base d’une entrée, qui est une clé précédente. Cela signifie qu’en ayant simplement accès à la toute première clé d’une séquence, chaque clé suivante de la séquence peut être générée. En théorie, une “sauvegarde” de l’ensemble de la collection de clés est disponible en n’en mémorisant qu’une seule !

Améliorer l’amélioration

Le BIP-32 a défini un système de génération séquentielle de clés privées à utiliser dans les portefeuilles. De cette façon, les utilisateurs de Bitcoin peuvent se sentir assurés contre le vol ou la perte de données en stockant une seule clé “maître”. Cependant, il existe un dernier problème : il est difficile de se souvenir ne serait-ce que d’une seule clé privée. Elles sont longues et peu maniables. C’est un problème courant en informatique – ce qui est utile à un système informatique (grands nombres, ensembles de données et longues chaînes) est souvent très ennuyeux pour les êtres humains. Pour des raisons de commodité, les ingénieurs en logiciels passent souvent beaucoup de temps à créer des moyens de “résumer” les données informatiques dans un format plus confortable à digérer. Cela nous amène au BIP-39, qui introduit une phrase mnémonique de base dans le protocole de portefeuille HD.

Si vous regardez la base de code d’un portefeuille Bitcoin, vous trouverez probablement quelque part un fichier appelé “words.txt”, “wordlist.txt”, ou similaire. C’est la liste des mots utilisés pour générer la graine mnémonique d’un portefeuille HD. Elle contient 2048 mots et est disponible dans de nombreuses langues différentes.

Ce processus est assez simple. Lorsqu’un porte-monnaie électronique est créé, il génère une “entropie générée par l’ordinateur”. Cette entropie est convertie en une séquence de nombres entre 0 et 2047, et ces nombres sont utilisés comme indices pour prendre une séquence de 12 nombres de la liste de mots et les combiner pour former une phrase de départ.

bambou mineur dirt drop maman octobre thème alpha clump filter vessel douze

Une fois ce processus terminé, la phrase d’amorçage résultante est utilisée comme entrée d’amorçage pour le portefeuille HD, et toutes les clés privées que votre portefeuille génère peuvent être récupérées simplement en se souvenant de cette phrase.
D’autres grands chiffres

Lorsque j’ai appris l’existence du processus de clé mnémonique, j’ai eu peur qu’il soit moins sûr que Bitcoin lui-même. J’avais raison. Le nombre total de phrases de base qui peuvent être générées est de 2048^12, ou 2^132, ce qui est inférieur à l’espace d’adressage total de 2^160 et donc plus facile à utiliser en force brute. Cependant, 2^132 est encore un ensemble monumental (en fait, il est encore plus grand que le nombre total de particules de sable dont nous avons parlé plus tôt) et généralement assez sûr à utiliser.

Pour ceux qui sont intéressés, 2^132 ressemble à ceci :

5,444,517,870,735,015,415,413,993,718,908,291,383,296

Ce qui est vraiment précieux dans ce processus n’est pas si évident. Ce qui se passe réellement ici, c’est la conversion de données informatiques (dans ce cas, le caractère aléatoire) dans un format pratique et convivial. Cette phrase de base est non seulement mémorisable, mais aussi communicable (bonne chance pour dire à quelqu’un une clé privée au téléphone) et est donc beaucoup plus facile à utiliser pour une personne qu’une clé privée seule. Une fois de plus, la plupart du temps que les ingénieurs en logiciel passent à perfectionner les logiciels est l’abstraction de données conviviales pour l’ordinateur en données conviviales pour l’homme. Les ordinateurs et les personnes ont des forces et des faiblesses tout à fait opposées, et des systèmes comme celui-ci leur permettent d’interagir de manière ingénieuse.

En résumé, le système de portefeuille déterministe hiérarchique ou “portefeuille HD” a été ajouté à Bitcoin via les propositions d’amélioration de Bitcoin (BIP) 32 et 39. Le système permet aux utilisateurs de “stocker” l’ensemble de leur collection de clés privées en se souvenant d’une seule phrase d’amorce, qui peut être utilisée pour récupérer leurs clés privées en cas de perte.

Hashcash

L’antispam original

Hashcash a été inventé par Adam Back, un cryptographe, en 1997. Il a été inventé comme une méthode de dissuasion du spam par e-mail et de prévention des attaques DDoS (déni de service distribué). Hashcash protège les systèmes contre de telles attaques en agissant comme un goulot d’étranglement pour l’activité informatique, en utilisant un concept appelé preuve de travail (parfois appelé POW pour Proof Of Work dans le monde de la crypto).

Dans le domaine informatique, certaines activités sont dites “bon marché” ou “coûteuses” en fonction de la quantité de ressources nécessaires à leur réalisation. Le terme “haschash” est utilisé en conséquence, car il sert à rendre les processus informatiques bon marché plus coûteux en obligeant l’acteur à effectuer une quantité spécifique de calculs supplémentaires avant d’être autorisé à effectuer une action. Prenons par exemple le courrier électronique. Il est remarquablement bon marché pour un ordinateur moderne de traiter et d’envoyer du texte. C’est un problème pour les serveurs de courrier électronique des victimes potentielles, car même un ordinateur lent et simple est capable de surcharger la victime de messages. En forçant un expéditeur à effectuer un processus plus coûteux, il ne peut pas envoyer de spam au serveur. Par conséquent, le serveur peut supposer que l’expéditeur est bien intentionné.

Dans toutes les situations, le système Hashcash parvient à éliminer le goulot d’étranglement en ajustant le niveau de “difficulté” ou la puissance de traitement nécessaire pour mener à bien une transaction.

Pourquoi une telle difficulté ?

Comment le Hashcash est-il utilisé dans Bitcoin ? D’une certaine manière, le hachash est tout ce qui compte dans Bitcoin ! Lorsque vous entendez parler de blocs d’extraction, de traitement des transactions et d’envoi ou de réception de bitcoins, vous entendez en fait parler de Hashcash.

Pour mettre les choses en contexte, Bitcoin a été créé dans le but d’obtenir un bloc de 10 minutes. Cela signifie que le logiciel tente de permettre l’ajout d’un nouveau bloc (un ensemble de transactions) au réseau toutes les 10 minutes, ni plus ni moins. La limite de 10 minutes a été choisie afin de laisser suffisamment de temps à l’ensemble du réseau Bitcoin pour rester stable et synchrone.

Bataille des super-ordinateurs

Le temps de bloc de 10 minutes est protégé par Hashcash et sa difficulté d’ajustement. Bitcoin fonctionne parce que les participants au réseau (les mineurs) traitent les transactions et les regroupent en blocs. Pour que ces blocs soient valables et ajoutés à une chaîne de blocs, le processeur doit effectuer une quantité importante de travail de traitement (preuve de travail). Ce travail est prouvé à l’aide de Hashcash.

Lorsque Bitcoin a débuté, la concurrence sur le réseau minier était faible et il était très facile d’obtenir des récompenses en utilisant un matériel simple comme un ordinateur portable. Au fur et à mesure que la concurrence s’intensifiait, les mineurs ont commencé à acheter du matériel avancé (d’abord des cartes graphiques haut de gamme, puis des ASIC, qui sont du matériel spécialisé produit strictement pour l’exploitation minière) qui offrirait un avantage concurrentiel sur le reste du réseau. Cette course au matériel a donné naissance à un réseau mondial de mineurs utilisant du matériel très, très puissant pour rester compétitif. Heureusement, Hashcash et sa difficulté ajustable permettent à Bitcoin de survivre sans être plus ou moins “surchargé” par l’énorme puissance de traitement de son réseau.

Bitcoin est très résilient. Il se calibre lui-même au fil du temps, à mesure que le réseau dispose de plus ou moins de puissance, afin d’éviter que le temps de blocage ne s’éloigne. Pour chaque 2016 blocs ajoutés à la chaîne de blocs, un calibrage a lieu. Essentiellement, si le temps de bloc moyen évolue plus rapidement que 10 minutes, la difficulté est accrue. Si la durée moyenne des blocs est inférieure à 10 minutes, la difficulté est réduite. Cela permet au réseau de s’adapter à la concurrence minière.

Ainsi, Hashcash est une fonction cryptographique utilisée comme système de preuve de travail. Il a été inventé pour protéger les serveurs de courrier électronique et les sites web, mais a depuis été utilisé pour de nombreuses choses, et est devenu plus célèbre sous le nom d’algorithme minier Bitcoin. Avec une difficulté réglable, Hashcash permet à Bitcoin de s’adapter au fil du temps et de rester stable avec un réseau en pleine expansion.

En conclusion

La cryptographie est un art fascinant qui brouille les lignes entre les ordinateurs et la réalité. Dans la plupart des cas, les ordinateurs sont censés être parfaits : toutes les fonctionnalités peuvent être ramenées à “vrai” ou “faux” et l’ordinateur a toujours raison. La cryptographie introduit le concept d’informatique “suffisamment bonne”, en exploitant des nombres et des puissances de traitement énormes pour créer des systèmes “suffisamment bons” pour être sûrs et en interface avec le monde humain.

Bitcoin utilise la cryptographie partout, de son système d’adresses à son expérience utilisateur, en passant par l’exploitation minière. Nous espérons que vous comprenez maintenant que la cryptographie est vraiment l’élément vital d’une chaîne de blocs.

Si vous avez envie d’un examen plus approfondi de l’architecture réelle impliquée dans la blockchain, consultez ce guide !