La cryptographie est la science qui consiste à appliquer des fonctions mathématiques pour garantir la sécurité des données.
De nombreux films et émissions de télévision populaires suggèrent aux gens que tant qu'il existe des pirates informatiques suffisamment puissants, n'importe quel système peut être piraté. Ce type de « piratage hollywoodien » n'est pas un scénario réel : les pirates doivent trouver des vulnérabilités exposées dans le système, telles que des salles de serveurs déverrouillées, des mots de passe faciles à deviner, des ports réseau non protégés ou des « portes dérobées » installées en interne, atteignant ainsi accès non autorisé.
Bien qu'il soit vrai que nous ne pouvons jamais garantir qu'un système est exempt de toute vulnérabilité - après tout, les systèmes sont construits par des humains imparfaits, l'idée selon laquelle « n'importe quel système peut être brisé » est fausse. Depuis le début des années 1990, nous sommes totalement à l’abri des pirates informatiques utilisant la cryptographie. Cependant, l’application de cette technologie laisse parfois la possibilité aux pirates informatiques de l’exploiter.
La cryptographie elle-même ne peut pas être piratée pour générer de fausses signatures numériques (la définition sera donnée sous peu), tout comme les mathématiques ne peuvent pas être piratées pour faire 2+2=5 - bien que la cryptographie et les mathématiques puissent toutes être utilisées de manière incorrecte. Si un système utilisant la cryptographie est défectueux, cela peut uniquement être dû au fait que le concepteur a mal appliqué la cryptographie. Ce n'est pas parce que la cryptographie ne fonctionne pas, ou parce que quelqu'un a "cassé" la cryptographie - ce n'est pas une erreur mathématique lorsque votre banque gère mal votre compte ou que votre mère infecte son ordinateur en téléchargeant une pièce jointe inconnue. Les virus ne sont pas les mêmes qu'un courrier électronique. insectes. Il s’agit d’une fonctionnalité importante car Bitcoin est une application de cryptographie très simple.
La cryptographie n’est pas une nouvelle technologie non testée. Toutes les techniques cryptographiques utilisées par Bitcoin sont utilisées depuis l’aube d’Internet et constituent des éléments importants de nombreux protocoles Internet courants utilisés quotidiennement. Les informaticiens considèrent la cryptographie comme fiable et nécessaire, tout comme la NASA considère la science aérospatiale comme fiable et nécessaire.
Les paires de clés publiques et privées : la pierre angulaire de la cryptographie
Les paires de clés publiques et privées sont la pierre angulaire de la cryptographie utilisée dans la blockchain. Une paire de clés publique-privée contient deux parties : la clé privée et la clé publique. Ces deux clés ne sont en réalité rien de plus que de grands entiers avec une relation mathématique spécifique qui sont utilisés à la place des mots de passe et des noms d'utilisateur.
Vous disposerez d'une clé publique, tout comme votre nom ou nom d'utilisateur : dans la plupart des cas, vous pourrez partager votre clé publique avec n'importe quel demandeur, et ceux qui la possèdent pourront l'utiliser pour vous citer ou vous contacter. Cela est lié à votre réputation (ou à votre historique de transactions en Bitcoin), vous pouvez donc disposer de plusieurs clés publiques (et donc de plusieurs paires de clés publique-privée) à des fins différentes. La clé publique peut être utilisée pour référencer ou consulter un compte, mais à elle seule, elle ne peut rien faire avec le compte.
La clé privée doit être comme un mot de passe : elle ne doit être partagée avec personne, elle sert à vérifier certaines actions, comme l'envoi de BTC (Bitcoin).
Mais il existe une différence importante entre une clé privée et un mot de passe. Pour utiliser un mot de passe, vous devez l'envoyer à une personne ou à un serveur afin qu'il puisse être vérifié. Vous devez être sûr que le mot de passe sera traité de manière responsable après son envoi. En revanche, une clé privée peut être utilisée pour prouver son identité sans la transmettre à personne. Le seul endroit où il a été stocké ou utilisé directement est sur votre appareil local.
Ceci est important car si vous pouvez vous authentifier sans envoyer vos informations secrètes à qui que ce soit, vous avez la garantie d'avoir un contrôle total sur leur sécurité - vous êtes moins vulnérable à l'impact des autres systèmes sur les failles de sécurité. C’est un élément important de ce qui rend Bitcoin inébranlable. Bitcoin lui-même ne stocke pas les mots de passe ou les clés privées qui pourraient être divulgués à des attaquants, mais les utilisateurs peuvent toujours vérifier les transactions.
Mais si vous n’envoyez jamais votre clé privée à qui que ce soit, comment utilisez-vous votre clé privée pour vérifier les transactions ? La réponse tient à la relation mathématique entre les clés privées et publiques : les signatures numériques.
Signatures numériques
Il existe de nombreuses techniques différentes pour générer et vérifier des signatures numériques, et les mathématiques qui sous-tendent leur fonctionnement dépassent largement la portée de cet article. Pour ceux qui ne sont pas familiers avec la cryptographie, le processus décrit ici peut paraître incroyable au premier abord. Je me souviens très bien d’avoir ressenti cela lorsque j’ai commencé à étudier Bitcoin il y a quatre ans.
Je vais maintenant mentionner brièvement à nouveau que ces techniques sont utilisées dans de nombreux protocoles Internet courants et font partie intégrante de la science de l'information.
Imaginez que deux personnes, Alice et Bob, aient échangé des clés publiques en privé. Alice veut envoyer un message à Bob, mais Bob est une personne très méfiante et ne croit pas que le message vienne réellement d'Alice à moins qu'il ne puisse le prouver mathématiquement et de manière concluante. Pour faciliter la preuve, ils ont accepté d'utiliser des signatures numériques.
Pour générer une signature, Alice utilise un algorithme de génération de signature dans son ordinateur, qui prend en entrée sa clé privée et le message complet, générant ainsi une signature numérique. Elle envoie ensuite cette combinaison message/signature à Bob – mais surtout, elle n'envoie pas sa clé privée.
Lorsque Bob reçoit le message et la signature, il peut invoquer un algorithme complémentaire de vérification de signature. L'algorithme prend en entrée un message et une signature pour déterminer la clé publique à partir de la paire de clés publique-privée utilisée par Alice pour générer la signature. Lorsque Bob voit que son algorithme génère la clé publique d'Alice, il a prouvé mathématiquement que la signature a bien été générée à l'aide de la paire de clés publique-privée d'Alice, même s'il ne connaît pas et ne peut pas calculer la clé privée dans la paire de clés publique-privée d'Alice. .
Plus succinctement, ce processus de signature numérique permet à Bob de vérifier que le message n'a pas été créé ou modifié par un tiers, mais doit avoir été généré à l'aide de la clé privée d'Alice, sans avoir à (ou pouvoir) Connaissez sa clé privée. Tout ce dont il a besoin est la combinaison message/signature et sa clé publique.
Intuitivement, cela peut sembler invraisemblable et vous pourriez avoir l'impression qu'il y a un malentendu quelque part. Si la clé privée et la clé publique d'Alice sont étroitement liées et qu'Alice utilise sa clé privée pour générer la signature que Bob reçoit, alors pourquoi ne peut-il dériver que sa clé publique mais pas sa clé privée ? Comprendre la réponse à cette question nécessite une compréhension des mathématiques plus profonde que celle de la plupart des gens et dépasse largement la portée de ce livre.
Malgré cela, cette technologie est utilisée quotidiennement et est considérée comme solide au sein de la communauté de la cryptographie. Lorsque vous visitez un site Internet dont l'adresse commence par https, le « s » indique que le site Internet s'est authentifié à l'aide d'une signature numérique. Votre ordinateur utilise un algorithme de vérification de signature, comme Bob dans l'exemple ci-dessus, pour vérifier que le site Web provient réellement de la bonne paire de clés publique-privée. Les signatures numériques garantissent que toute interaction ultérieure entre vous et le site Web est cryptée et authentifiée. Si la vérification échoue, le navigateur vous avertira et marquera le site comme dangereux.
Un entier suffisamment grand
Avant cela, j'ai brièvement mentionné que les clés privées et publiques fonctionnent comme les noms d'utilisateur et les mots de passe, mais en réalité elles ont juste une relation mathématique particulière entre les grands entiers. Compte tenu de cela, on me pose souvent la question suivante :
« Pourriez-vous utiliser un ordinateur pour deviner ou calculer un tas de nombres et essayer de les utiliser comme clé privée ? Pourraient-ils éventuellement atteindre une cible publique ou privée ? "En fait, dans le cas du Bitcoin, cela permettrait à un attaquant de voler une partie des Bitcoins détenus par la paire de clés publique-privée."
C’est une bonne question, mais cela n’arrivera pas. Comme mentionné précédemment, il existe plusieurs adresses Bitcoin qui contiennent des millions de dollars de BTC, mais elles n'ont pas été déplacées depuis des années - même s'il suffit pour les voler d'avoir la bonne clé privée - qui est le bon grand entier ! Si vous pouvez deviner les clés privées de ces adresses, vous pouvez alors envoyer de l’argent à n’importe qui. Contrairement aux mots de passe, vous pouvez vérifier les clés privées localement sur votre ordinateur, et aucun serveur ne limite le nombre ou la fréquence de vos tentatives.
Alors pourquoi personne n’a encore volé l’argent ? La réponse réside dans la taille presque ridicule des nombres utilisés comme clés privées. Ils sont assez grands.
Nous commençons par une simple expérience de pensée. Imaginez que votre clé privée soit suffisamment grande pour que tous les ordinateurs du monde travaillant ensemble mettent 24 heures à la deviner. Si vous ajoutez un seul chiffre à votre clé privée, l’ordinateur aura besoin de dix fois plus d’effort de calcul, ce qui signifie que cela prendra dix jours au lieu d’un. L'ajout de six chiffres porterait cette durée à 27 000 ans.
Dans tous les cas, la puissance de calcul requise pour créer des nombres aléatoires afin de générer une clé privée est insignifiante. Générer des signatures à l'aide de clés privées et vérifier ces signatures à l'aide de clés publiques est également simple sur le plan informatique. Mais la quantité de travail nécessaire pour deviner la clé privée augmente de façon exponentielle avec chaque numéro supplémentaire ajouté. Pour rendre une clé privée « immunisée » contre la force brute, il nous suffit d’ajouter suffisamment de nombres – il nous suffit de les rendre suffisamment grands.
Quelle est sa taille ? La clé privée utilisée dans Bitcoin est un entier de 256 bits, ce qui équivaut à un nombre d'une longueur de 76 bits. La taille de ce nombre est incroyable. La plupart des explications suivantes proviennent du livre "Applied Cryptography" de Bruce Schneier, qui fournit une explication intuitive des entiers suffisamment grands.
Tout d'abord, vous devez comprendre qu'une conclusion spécifique de la deuxième loi de la thermodynamique est l'énergie minimale requise pour modifier l'existence d'un seul bit binaire d'information (changer de 1 à 0 ou vice versa). Cela signifie que quel que soit le matériel utilisé, tout processus de calcul nécessite une énergie minimale pour être exécuté.
Imaginez maintenant que vous puissiez exploiter toute l'énergie produite par le soleil pour alimenter un ordinateur spécialement conçu dont le travail consiste à calculer ou à deviner la clé privée pour trouver une paire de clés publique-privée (qui peut contrôler BTC ).
En utilisant un peu de mathématiques et de thermodynamique, vous découvrirez qu'un ordinateur très efficace, doté de la puissance nécessaire pour calculer la production d'énergie solaire pendant une année entière, peut calculer 2 178 valeurs. Si nous divisons cette valeur par le nombre de clés privées possibles, qui est 2 256, nous constatons que cet ordinateur hypothétique doté de la puissance de calcul de la production d'énergie annuelle du soleil ne peut deviner ou calculer que 0,00000000000000000000003 % du nombre total de clés privées possibles.
De plus, il ne s'agit que d'un décompte et n'inclut pas la tâche plus complexe consistant à vérifier réellement chaque clé privée pour vérifier qu'elle correspond à la bonne clé publique. Ainsi, cet ordinateur pourrait manquer la bonne clé privée 0,0000000000000000000003 % du temps au cours d'une année sans même s'en rendre compte.
Ces chiffres n'ont rien à voir avec la technologie de l'appareil ; ce sont les valeurs maximales possibles basées sur les lois de la thermodynamique établies depuis les années 1930. Ces chiffres signifient qu’une attaque par force brute sur une clé de 256 bits (celle utilisée par Bitcoin) serait irréalisable à moins que l’ordinateur ne soit construit à partir de quelque chose d’autre que de la matière et occupe autre chose que de l’espace.
C'est la puissance d'entiers suffisamment grands. Quelle que soit la puissance d'un pirate informatique, à moins qu'il ne puisse utiliser la puissance de 3 × 1 023 soleils pour calculer une année, ou la puissance d'un soleil pour calculer 3 × 1 023 années, son ordinateur ne peut même pas finir de compter toutes les clés privées, et encore moins Testez-les ou utilisez-les d’une autre manière.