Si Bitcoin est utile comme moyen de paiement, il n’en reste pas, d’un point de vue informatique, un moyen de transmettre des informations via Internet, sauf qu’au lieu d’utiliser des e-mails ou une messagerie instantanée, Bitcoin utilise des transactions. Ces transactions contiennent la majorité du temps des bitcoins, mais la puissance de la technologie Bitcoin permet de donner n’importe quel contenu à ces transactions. Les clés privées jouent un rôle central dans la transmission de ces messages.
Pour schématiser le problème de la cryptographie des clés, on peut se représenter le problème avec les sempiternels Alice et Bob qui veulent s’envoyer de l’argent. Si Alice veut faire transiter une somme en bitcoins à Bob, elle fait face à deux problèmes : 1) elle doit pouvoir s’identifier elle-même et identifier Bob durant la transaction sans passer par un tiers d’autorité comme une banque ou un serveur web, car tout point de contrôle est sujet au larcin de données et à l’échec de sa tâche, et Bitcoin a justement pour but d’éliminer cela ; 2) Alice doit empêcher quiconque de modifier sa transaction et de la signer indûment en son nom.
À cette fin, Bitcoin utilise le système des clés publiques et clés privées. Un clé publique permet d’identifier un envoyeur et un receveur, et peut être divulguée à des tiers ; la clé privée s’utilise conjointement avec la clé publique pour créer une signature inimitable. La clé privée doit impérativement être tenue secrète. Les clés privée et publiques sont liées entre elle par un algorithme de signature spécifique.
Comment ça marche ?
Reprenons Alice et Bob. Alice veut envoyer des bitcoins – ou des satoshis, si l’on veut être réaliste – à Bob. Alice va générer d’abord une clé publique à partir de sa clé privée au moyen de l’algorithme de signature mentionné plus haut. Alice envoie sa clé publique à Bob, tout en ne divulguant pas sa clé privée. Alice « signe » la transaction en la faisant passer, avec sa clé privée aussi, à travers l’algorithme de transaction. L’algorithme renvoie une signature. Alice attache cette signature à sa transaction et les envoie à Bob. Bob fait à son tour passer la transaction, la signature et la clé publique d’Alice à travers son propre algorithme de signature. Si la transaction est authentique, l’algorithme la confirmera.
Pour les besoins de l’explication, nous disons qu’Alice et Bob font passer les divers éléments à travers l’algorithme de signature, mais il est évident qu’ils ne sont pas eux-mêmes en possession du contrôle des procédures mathématiques derrière les transactions. En vérité, leur wallet respectif s’occupe d’effectuer lesdites tâches. Dans la réalité, lorsqu’Alice envoie des satoshis à Bob, tout ce qu’elle a à faire peut se résumer à générer un QR code sur l’application de wallet de son smartphone ; Bob scannera, avec son application de wallet le QR code sur smartphone, et son wallet recevra alors les fonds envoyés. Ce que nous avons décrit plus haut décrit ce qui se passe derrière l’interface.
C’est quoi une clé privée ?
Oui au fait, c’est quoi ? Juste un nombre. Exactement, un nombre entier relatif entre 1 et 1077. L’important est qu’il y ait assez de possibilité d’assemblages pour qu’il soit virtuellement impossible de retrouver une clé privée par un calcul de toutes les possibilités. Car, admettons que vous puissiez calculer 1 billion (1000 milliards) de combinaisons différentes par seconde, cela vous prendrait 1 million de fois l’âge de l’Univers pour les compter toutes. Et cela demanderait à votre ordinateur plus d’énergie que l’énergie totale du Soleil cumulée sur 32 ans. Bonne chance.
Comme il serait absurde d’écrire le nombre d’une clé privée en entier, un système de transcription a été créé à cette fin, appelé le WIF, pour Wallet Import Format, qui commence par le nombre 5 et contient une série de lettres et de chiffres. Comme ces clés doivent rester privées, elle sont parfois cryptées de sorte à avoir l’apparence d’une clé privée au format WIF, mais qui commence, par exemple, par le chiffre 6. Décoder la clé privée exige un mot de passe défini à l’avance sur votre programme de Bitcoin.
Les clés privées empêchent les contrefaçons
Pour que Bitcoin fonctionne comme de juste, le système requiert que chaque transaction ait une signature (digitale). Cette signature est un nombre, comme la clé privée. Les programmes de wallet génèrent une signature à partir de la transaction et de la clé privée adéquate : la signature est donc à unique pour chaque transaction.
Il est pratiquement impossible de contrefaire la signature d’une transaction, car elle dépend de la clé privée de l’envoyeur. Qui plus est, la manière dont les signatures changent est imprévisible. Les signatures changent en fonction des changements dans la transaction par rapport à la clé privée. Un processus mathématique fort complexe et une cryptographique imprenable en raison de la clé privée qui reste secrète.
À moins que…
Clé privée divulguée = perte de fonds assurée
Quiconque possède une clé privée peut créer une transaction acceptée par le réseau Bitcoin. Une transaction est acceptée par le réseau si elle a une signature valide. Ces deux choses signifient que quiconque a accès à votre clé privée peut vous dérober vos fonds en se les envoyant sur son propre wallet. Autrement dit, lorsque vous générez votre clé privée, évitez absolument de la faire passer par un support amovible comme une clé USB ou par Internet.
Le mieux est de recopier manuellement votre clé privée et de placer cette information dans un endroit sûr, par exemple un coffre. Si vous utilisez une application de wallet (par exemple sur votre smartphone), cette dernière va stocker les clés privées dans un dossier spécial sur le disque dur de votre appareil. Un malware spécifique peut facilement trouver ce dossier et voler vos clés.
Les wallets offrent ainsi la possibilité de crypter le dossier en question au moyen d’un mot de passe. Il faut alors s’assurer que ce mot de passe et le cryptage soient robustes. Vous pouvez également faire des sauvegardes de votre wallet (des backups), mais ne les stockez pas sur un cloud, comme la Dropbox par exemple, car vous n’êtes pas réellement en mesure de contrôler qui peut consulter vos dossiers Dropbox (n’oubliez pas que le cloud Dropbox appartient à la société Dropbox et que celle-ci a un certain droit de regard sur ce qu’elle héberge…).
Si vous souhaitez posséder des bitcoins comme une valeur refuge et ne comptez ainsi pas les dépenser régulièrement, le mieux est de conserver votre clé privée sur un appareil non-connecté à Internet ou alors sur une feuille de papier, que vous entreposerez dans un coffre dans une banque ou tout autre endroit hautement sécurité. Vous pourrez ainsi supprimer votre application de wallet en tout sécurité, afin de supprimer le dossier contenant vos clés privées sur votre appareil.
Les clés privées génèrent les adresses
Une clé publique est dérivée de la clé privée, qui est elle-même soumise à une série d’opérations mathématiques connues sous l’appellation Elliptic Curve Cryptography, ou ECC. Si une clé privée est un nombre entier relatif, une clé publique est une coordonnée composée de deux nombres entiers relatifs. Bien souvent, la coordonnée sur l’axe-y est ajoutée à celle de l’axe-x pour créer une seule valeur, plus facile à lire pour les ordinateurs.
Ce qui est très intéressant d’un point de vue cryptographique est que la relation entre les clés privées et les clés publiques est unidirectionnelle : passer d’une clé privée à une clé publique est chose aisée, mais il est impossible de passer d’une clé publique à une clé privée. Cette caractéristique est un enjeu vital dans la sécurité des transactions Bitcoin.
Voir aussi : Qu’est-ce qu’une adresse Bitcoin ?
Comment une clé privée peut-elle être volée ?
Désormais, les programmes de wallet génèrent pour vous la clé privée, de sorte à ce que vous n’ayez pas à devoir la trouver vous-même. Néanmoins, certaines clés sont plus vulnérables que d’autres. Par exemple, une clé privée dont le nombre serait simple « 1 » est une clé privée valide, avec une adresse correspondante, et qui par ailleurs, est utilisée encore à ce jour.
Un pirate informatique malin et qui a du temps entre les mains peut donc serait de répertorier toutes les clés privées simple à mémoriser (comme 1, ou 11, ou 111, ou 1111, etc.), en générer les adresses correspondantes, et vérifier quand une de ces adresses reçoit des fonds de sorte à les rediriger vers soi. Il pourrait aussi profiter d’un générateur de clés privées peu efficace, qui générerait par exemple des clés privées dont les nombres entiers relatifs seraient tous plus ou moins proches les un des autres.
Une des manières de contourner ce risque est d’avoir à disposition des brain wallets, qui convertissent des phrases en une série de chiffres et de lettres. la majorité des wallets contemporains utilisent cette méthode = la clé privée est exprimée en une série de 12 mots aléatoires. Le danger reste qu’un hacker pourrait répertorier tous les mots utilisés par tel ou tel wallet et essayer toutes les combinaisons. Cela prendrait certes un temps fou, mais il y a moins de mots dans la langue anglaise qu’il y a de nombres entre 1 et 1077.
Ces cas de figure restent à ce jour peu probables.
Le cas des paper wallets
Un paper wallet est une feuille de papier sur laquelle est imprimée la clé privée. La plupart des applications de wallet peuvent sweeper, c’est-à-dire créer une nouvelle transaction qui « vide » l’adresse liée à la clé privée imprimée sur le paper wallet. Le fait de sweeper ne garantit toutefois pas de vide entièrement un paper wallet. À ce sujet : Que sont les adresses de change et comment y accéder ?
Voir aussi : Qu’est-ce qu’un « wallet »?