Le chiffrage à clés publiques / privées expliqué aux non initiés

Jean-Baptiste Pleynet
5 min readJun 11, 2017

--

Pour bien comprendre le principe de fonctionnement de la majorité des blockchains, il est essentiel de comprendre le principe de chiffrage asymétrique, autrement appelé chiffrage par clé publique / privée.

Nous proposons donc ici un exemple simple à destination des non-initiés et surtout des non mathématiciens.

Fonction à sens unique

Une notion essentielle à comprendre est la suivante :

Fonction à sens unique (définition Wikipédia) : Une fonction à sens unique (ou one-way function en anglais) est une fonction qui peut être aisément calculée, mais qui est difficile à inverser — c’est-à-dire qu’étant donnée une image, il est difficile de lui trouver un antécédent.

Pour ce type de fonction, il n’existe qu’une seule façon de trouver la valeur qui permettra d’obtenir une valeur cible voulue : la force brute. Comme pour forcer un coffre-fort ou un mot de passe quelconque, elle consiste à tester des combinaisons au hasard en espérant tomber sur la bonne.

En fonction de la complexité du problème, la force brute peut très vite devenir irréalisable en pratique.

Prenons un exemple, qui n’est pas dans la définition mathématique d’une fonction à sens unique et qui n’est pas utilisé dans la pratique (exemple 100% pédagogique), mais qui permettra d’illustrer la situation : la fonction carré.

N’importe qui peut calculer à la main (ou avec une calculatrice élémentaire) le carré d’un nombre. C’est peut-être long et cela demandera de revérifier 2 fois, mais techniquement il est possible de poser la multiplication sur un papier et de calculer le carré de 1 234 ou 5 678.

Par contre, avec un papier et un stylo, très peu peuvent calculer la racine carrée d’un nombre. Ainsi, si je vous demande de quels nombres 1 522 756 et 32 239 684 sont le carré, à moins d’avoir réalisé de tête les opérations précédentes vous ne pourrez pas trouver la solution autrement qu’en calculant au hasard les carrés de nombres quelconques et en priant pour avoir de la chance (la force brute).

C’est la clé d’un système de chiffrage par clé publique / privée.

Le chiffrage asymétrique

Imaginons alors la situation suivante :

L’auteur de l’article est le seul à disposer du secret du calcul d’une racine carrée. Les autres ne disposent que de papiers et de stylos.

Je propose alors la chose suivante : à tous ceux qui souhaitent me transmettre de façon secrète une information chiffrée, mettez-la au carré et envoyez-la moi. Je peux même vous expliquer comment poser une multiplication si le souvenir était un peu trop lointain pour vous.

Voilà ma clé publique : tout le monde sait comment chiffrer son message pour me l’envoyer.

Notez que l’exemple se concentre sur les chiffres, mais on peut imaginer beaucoup de méthodes pour transformer une phrase en chiffres (numéro des lettres dans l’alphabet, etc.).

Imaginons qu’Alice souhaite m’envoyer « 1 234 ». Elle l’élève alors au carré (1 522 756). A partir de là, le message est chiffré. Il peut donc être communiqué publiquement. Alice peut alors me crier « 1 522 756 », puisque même si un tiers l’interceptait il ne serait pas capable d’en prendre la racine carrée.

Pour ma part, je dispose d’une clé privée (qui va avec ma clé publique), que je garde secrètement : la racine carrée.

Je fais donc RACINE(1 522 756) = 1 234, et moi seul aurai connaissance du contenu original du message.

Nous avons illustré là le principe du chiffrage par clé publique / privée, c’est-à-dire coder un message pour le rendre illisible autrement qu’à son destinataire (à noter que même l’auteur du message chiffré, dans l’exemple Alice, s’il oubliait ce qu’il a transmis, ne peut le décoder).

La signature de messages

Nous allons aborder une autre fonctionnalité qu’offre cette technique, et qui est la base des blockchains : la signature.

Je reprends le cours de mon exemple. Imaginons que je publie ce message :

« L’auteur de cet article n’est pas très marrant…

Signature : Ce message comporte 7² caractères »

La signature nous garantit ici deux choses :

1. Le message n’a pas été altéré. En effet, il fait bien 7² = 49 caractères

2. Le message a été envoyé par l’auteur lui-même, puisqu’il est le seul à pouvoir calculer RACINE(49) = 7

Bien sur cet exemple est simpliste (puisqu’il est simple de calculer par force brute que la racine de 49 est 7) mais illustre bien la mécanique : appliquer la clé privée sur un message, pour que tout le monde puisse utiliser la clé publique de l’émetteur pour vérifier l’intégrité du message et l’identité de celui qui l’a écrit.

En pratique naturellement les fonctions de chiffrage et déchiffrage sont beaucoup plus complexes, et sont souvent basées sur des nombres premiers. Ainsi, un nombre représente la clé privée et un second la clé publique. Mais la logique reste la même.

Quel rapport avec la blockchain ?

Dans une blockchain classique (type Bitcoins), chaque compte est représenté par deux numéros (autrement appelés adresse ou portefeuille (wallet en anglais)). L’une de ces adresses est publique et peut être communiquée au tout venant, l’autre est privée et doit impérativement être protégée. Ça vous rappelle quelque chose ?

Le passage d’ordre sur la blockchain est donc très simple : Si Bob veut envoyer 1 Bitcoin à Alice, il publie le message suivant : « Je soussigné adresse Bitcoin 1FGAftzSTztFSB8LMwsrdCKTyqGY6zr3sU (adresse de Bob) envoie 1 Bitcoin à l’adresse 1EGak5josSfscc3hRuhHW3Ug6qrHfTMq2K (adresse d’Alice). Signature : ….. ».

Ce message est signé par la clé privée de l’émetteur, et consiste en une transaction d’un compte vers un autre.

Il est alors aisé à tous les membres du réseau de vérifier que cette transaction est valide, puisque l’émetteur est bien le propriétaire du compte débité, et comme il est en pratique impossible de falsifier une signature, c’est la garantie que personne n’essaye de vider le compte d’un autre.

De plus, la blockchain est la concaténation (je fais ici volontairement abstraction du processus de minage) de toutes les opérations passées, depuis les origines de la blockchain. En d’autres termes, toutes les opérations depuis le début des temps sont disponibles pour tous les utilisateurs.

Il est donc aisé pour tout le monde de vérifier que Bob, d’adresse 1FGAftzSTztFSB8LMwsrdCKTyqGY6zr3sU, est bien en possession du Bitcoin qu’il cherche à céder à Alice.

Ainsi, dans la blockchain, le solde d’un compte est toujours déduit de l’historique intégral des opérations.

Par corollaire, tous les comptes de la blockchain (encore une fois, sur une blockchain type Bitcoins) sont publics. Il est possible (et c’est même la base du fonctionnement) de savoir quelles adresses possèdent combien, et avec quelles autres adresses elles ont commercé.

L’anonymat sur ce type de blockchain est donc relatif : nul ne sait qui possède quelle clé (ni même si elle n’a pas été perdue), mais si le lien est fait entre une personne et une ou plusieurs clés, les comptes sont alors directement accessibles. On parle donc plutôt de pseudonymisation que d’anonymat sur ce type de blockchain primitive.

Conclusion

On comprend là aussi l’intérêt que la clé privée reste privée : si un tiers pouvait s’en emparer, il pourrait immédiatement signer des opérations fallacieuses pour vider un compte.

Et si la clé venait à être perdue, toutes les sommes conservées sur le compte seraient perdues à jamais, étant donné qu’il est en pratique impossible de trouver une clé privée à partir d’une clé publique.

--

--

Jean-Baptiste Pleynet

Actuaire de formation, travaillant au service des assureurs vie du Luxembourg depuis 5 ans, et passionné de blockchains, il adore vulgariser cette technologie.