Signatures binaires, monnaie électronique
À long terme, nous pensons que l’une des utilisations majeures de la cryptographie sera liée à l’argent virtuel, ou monnaie binaire ; vu sous un autre angle, cela signifie que les signatures numériques, et donc les chèques électroniques, soient rendus possibles.
À première vue, cela semble impossible. Pour produire des documents comme des chèques, il faut prouver son identité par une signature. Nous pourrions transférer ce système sur le Web en scannant une image de la signature d’une personne et en envoyant cette image pour valider ses documents. Cependant, toute la sécurité qui était attachée à la signature sur le papier s’est maintenant évaporée. Un faussaire n’a qu’à copier le motif binaire qui constitue l’image, le stocker et le joindre à tous ses achats pour faire ses courses gratuitement.
Produire un signature numérique consiste à réaliser une action sur les données fournies par l’autre partie, action que vous seul pouvez faire, et à prouver ainsi que vous êtes celui que vous prétendez être. Nous étudierons les formes que peut prendre cette action :
Le chiffrement par clé publique (PK) est assez bien connu désormais ; nous n’aborderons donc ici que les points essentiels. On dispose de deux clés : une clé publique qui sert à chiffrer les messages et une clé privée qui déchiffre les messages chiffrés par la clé publique (et vice-versa). À la différence du chiffrement et du déchiffrement traditionnels, vous pouvez chiffrer soit votre clé privée soit votre clé publique et la déchiffrer avec l’autre.
Vous donnez la clé publique à ceux qui vous en font la demande et conservez votre clé privée secrète. Comme les clés qui chiffrent et déchiffrent ne sont pas les mêmes, ce système est également appelé chiffrement par clés asymétrique.
L’« action » que nous mentionnions plus haut, qui prouve que vous êtes celui que vous prétendez être, serait donc de chiffrer un morceau de texte avec votre clé privée. Toute personne possédant votre clé publique peut alors tenter de le déchiffrer : s’il réussit, il sait que le texte vient bien de vous.
Appliquons, par exemple, cette technique à une simple affaire de cœur. Vous vous êtes inscrit dans un forum de discussion pour célibataires, où les personnes décrivent leurs attirances et leur espoir de rencontrer des personnes ayant des désirs romantiques identiques. La personne qui vous attire publie sa clé publique en bas du message décrivant ses attirances. Vous répondez :
Je suis (mettre ici une description flatteuse). Rencontrons-nous derrière
la benne à ordures à 00h30. Je me languis déjà ... etc.
Vous chiffrez ce message avec la clé publique de votre énamouré(e) et vous l’envoyez. Toute personne qui le verra passer, ou le trouvera sur l’ordinateur à l’autre bout, ne pourra pas le déchiffrer et ne pourra donc connaître l’heure de votre bonheur. Par contre, seul votre unique amour pourra le déchiffrer et, à son tour, répondre par un message chiffré :
Oh oui, oui, mille fois oui !
en utilisant sa clé privée. Si vous pouvez le déchiffrer avec sa clé publique, vous pouvez être sûr qu’il émane de la bonne personne et non d’une bande de plaisantins qui projettent de vous rejoindre à l’heure H pour faire des remarques désobligeantes.
Cependant, toute personne ayant trouvé la clé publique à utiliser pourrait également déchiffrer la réponse : votre unique amour pourrait alors chiffrer sa réponse avec sa clé privée (pour prouver que c’est bien elle ou lui qui l’a envoyée), puis la chiffrer à nouveau avec votre clé publique pour empêcher quiconque de la lire, sauf vous. Vous devrez alors la déchiffrer deux fois pour constater que tout va pour le mieux.
Les modules de chiffrement et de déchiffrement ont une propriété simple mais cruciale : même si vous possédez la clé qui a servi à chiffrer, vous ne pouvez en déduire celle qui déchiffrera (en fait, vous pourriez, mais après plusieurs années de calcul). En effet, le chiffrement est effectué en utilisant un grand nombre (la clé) et le déchiffrement dépend de la connaissance de ses facteurs premiers, qui sont très difficiles à trouver.
La force du chiffrement par clé publique dépend de la longueur de la clé car elle influence le temps requis pour calculer les facteurs premiers. Les sales types (voir la deuxième note de bas de page du chapitre 1) et, pour d’autres raisons, le gouvernement américain aimeraient bien que les gens utilisent une clé courte pour pouvoir déchiffrer tous les messages qu’ils veulent. Ceux qui pensent que ce n’est pas souhaitable utilisent une clé longue pour éviter que leurs messages ne soient découverts. Les seules limites pratiques sont que plus la clé est longue, plus il faudra de temps pour la construire et pour la vérifier.
En 1994, un groupe de 600 volontaires répartis sur l’Internet ont tenté de casser une clé afin de vérifier la sécurité fournie par ce type de chiffrement. Cette expérience demanda 8 mois de calculs sur 1600 ordinateurs pour factoriser un nombre de 429 bits (voir PGP: Pretty Good Privacy, de Simson Garfinkel, publié par O’Reilly en 1994). En gros, le temps de factorisation d’un nombre double à chaque fois que sa taille augmente de 10 bits : il faudrait donc un peu moins d’un million de millions de millions d’années pour que la même équipe factorise une clé de 1024 bits.
En 2000, les choses ont progressé : une équipe suédoise a gagné un prix de 10000 dollars offert par Simm Singh, l’auteur de The Code Book (Anchor Books, 2000), pour avoir réussi à lire un message chiffré par une clé de 512 bits. Pour ce faire, il a fallu 70 ans de temps machine.
Cependant, une avancée décisive dans le calcul de la factorisation pourrait changer la donne du jour au lendemain. De plus, les spécialistes des ordinateurs quantiques prétendent que ces machines (uniquement à l’état de concept, pour l’instant) fonctionneront tellement plus vite qu’il faudra moins d’une centaine d’années pour casser les clés de 1024 bits.
Nous devons nous rappeler qu’une sécurité complète (que ce soit pour le chiffrement, les missiles anti-missiles, les châteaux, les forteresses, etc.) est une mission impossible. Le mieux que l’on puisse faire est de ralentir suffisamment l’attaquant pour le dissuader, le faire changer d’avis, pour qu’il soit pris ou qu’il meurt de vieillesse avant d’avoir réussi son coup.
La méthode de chiffrement par clé publique met fin aux quêtes de plusieurs Graal de la communauté du chiffrement :
- Elle est (pour autant qu’on le sache) incassable par les attaques connues.
- Elle est portable ; 128 octets suffisent pour la clé publique, qui peut être bien plus courte.
- Tout le monde peut chiffrer, mais seul le possesseur de la clé privée peut déchiffrer. Inversement, si une clé publique réussit à déchiffrer un message chiffré par une clé privée, cela prouve l’identité de la personne qui a signé ce message.
Les inventeurs du chiffrement par clé publique ont dû penser que c’était Noël lorsqu’ils ont trouvé tout cela. Le moyen classique pour déchiffrer les codes consiste à rassembler suffisamment de messages (ce qui, en soi, est difficile voire impossible si l’utilisateur envoie trop peu de messages) et, à partir des régularités du texte sous-jacent, remonter à la clé de chiffrement. C’est de cette façon, et avec beaucoup d’aide, que les alliés cassèrent les codes d’Enigma employés par les Allemands au cours de la seconde guerre mondiale. Il faut souligner que la méthode de chiffrement par clé publique est cassable sans aucun trafic : il suffit de calculer les facteurs premiers de la clé publique. En cela, elle est unique mais, comme nous l’avons déjà évoqué, cette opération n’est pas simple.
Avec ces deux nombres, les clés publique et privée, les deux modules sont interchangeables : tout en fonctionnant comme vous vous y attendez, vous pouvez également déchiffrer un texte clair avec le module de déchiffrement et le chiffrer avec le module de chiffrement pour retrouver le texte clair.
Vous pouvez maintenant chiffrer un message avec votre clé privée avant de l’envoyer à quiconque possède votre clé publique. S’il arrive à le déchiffrer en un texte lisible, cela prouve que vous en êtes l’auteur : c’est une signature électronique infalsifiable.
Ce mécanisme intéressant est évidemment utile pour les transactions financières sur le Web. Si vous avez ouvert un compte American Express, par exemple, vous pouvez acheter un exemplaire de cet excellent livre auprès de l’éditeur en envoyant à Amex un message chiffré leur demandant de débiter votre compte et de créditer celui d’O’Reilly. Amex peut effectuer cette opération en toute sécurité car vous êtes la seule personne qui a pu envoyer ce message (en supposant que vous êtes n’êtes pas inconscient et que vous n’avez pas divulgué votre clé privée). Le commerce électronique est, évidemment, beaucoup plus compliqué mais, pour l’essentiel, cela se passe de cette façon.
L’une des difficultés réside dans le fait que le chiffrement par clé publique est très lent, car il effectue des calculs sur de très grands nombres. Nos amoureux transis, que nous avons présenté plus haut, auraient pu chiffrer l’intégralité de leurs message avec cette méthode mais ils se seraient sûrement lassés avant et se seraient mariés chacun de leur côté. En pratique, les messages sont chiffrés à l’aide d’un système rapide mais ancien, reposant sur une seule clé secrète échangée entre les deux parties par PK : comme cette clé est courte (généralement 128 bits ou 16 octets), cet échange s’effectue rapidement. Cette clé est ensuite utilisée pour chiffrer et déchiffrer le message avec un autre algorithme : IDEA ( Data Encryption Algorithm ) ou DES ( Data Encryption Standard ). Ainsi, par exemple, le paquetage PGP ( Pretty Good Privacy ) crée une clé et la transmet par PK, puis utilise IDEA pour chiffrer et déchiffrer le véritable message.
Il existe des techniques pour rendre ce type de chiffrement aussi inviolable que celui utilisant les clés publiques : la seule façon d’attaquer un bon système est d’essayer toutes les clés possibles, chacune à leur tour, mais la clé n’a pas besoin d’être très longue pour rendre ce traitement si long qu’il devient impossible en pratique. Pour, par exemple, essayer toutes les possibilités pour une clé de 128 bits à raison d’un essai par millionnième de seconde, cela prendrait 1025 années pour trouver la bonne. Ce n’est que 1015 fois l’âge de l’Univers, mais c’est quand même assez long.