Maintenant que nous avons vu quelques exemples de chiffres historiques, tous gravement défectueux, nous allons passer à des chiffres bien mieux faits. Avant je veux définir plus précisément ce qu'est un chiffre. D'abord, rappelez- vous qu'un chiffre est fait de deux algorithmes: un algorithme de cryptage et un algorithme de décryptage. Mais un chiffre est défini sur un triplet: l'ensemble de toutes les clefs possibles, que je vais noter K, que j'appellerai aussi l'espace des clefs; l'ensemble de tous les messages possibles, et l'ensemble de tous les textes chiffrés possibles. Donc ce triplet est l'espace de definition du chiffre. Le chiffre lui-meme est une paire d'algorithmes "efficaces", E et D. E est l'algorithme de chiffrage; D est l'algorithme de déchiffrage. E prend des clefs et des messages, et produit des textes chiffrés. ///// D prend des clefs et des textes en chiffre, et produit des messages. Et tout ce qu'il faut, c'est que ces algorithmes soient consistents (/constants): qu'ils satisfassent ce qu'on appelle la propriete de correction. Pour tout message dans l'espace des messages, et toute clef dans l'espace des clefs, il faut que si je chiffre le message avec la clef K et je dechiffre ensuite avec K, je retrouve le message d'origine. Cette equation la est ce qu'on appelle l'equation de consistance (/constance) et tout chiffre doit la satisfaire pour etre un chiffre, sinon le dechiffrage est impossible. Une chose a souligner est que j'ai place le mot "efficace" entre guillemets. La raison en est qu'"efficace" a des senses differents selon ta perspective. Si tu aimes la theorie, l'efficacite veut dire que ca s'execute en un temps d'ordre polynomial. Les algorithmes E et D prennent un temps d'ordre polynomial a operer sur leurs donnees. Si tu es plus pratique, l'efficacite veut dire que ca dure un temps assez court. Par exemple, un algorithme E prendrait moins d'une minute pour chiffrer 1 gigabyte d'information. D'une facon ou d'une autre, le mot "efficace" capture la notion de duree et tu peux l'interpreter dans ta tete comme tu le veux. Je vais continuer a parler d'efficacite et a mettre le mot entre guillemets, et comme je l'ai dit si tu es plus theorique penses "duree polynomiale", sinon penses contraintes temporelles concretes. Un autre commentaire que je veut faire est que l'algorithme E est souvent un algorithme aleatoire. Ca veut dire que pendant que tu cryptes un message, l'algorithme E va generer des bits au hasard, et va utiliser ces bits pour chiffrer le message. Par contre, l'agorithme de dechiffrement est toujours deterministe. C'est a dire que la clef et le texte chiffre sont toujours les memes. Ils ne dependent pas du hasard d'un algorithme. Bon, maintenant que nous comprenons mieux ce qu'est un chiffre, je veux te montrer un premier exemple de chiffre sur ("secure"). Ca s'appelle le "one time pad" (la feuille a 1 utilisation). Vernam l'a cree au debut du vingtieme siecle. Avant d'expliquer de qu'est ce chiffre, decrivons le avec la terminologie que nous venons d'apprendre. L'espace des messages du chiffre de Vernam est le meme que l'espace des textes chiffres, et c'est tout simplement l'ensemble des strings (/sequences) binaires longues de n-bits. C'est a dire toutes les sequences de bits, de 0 et de 1. L'espace des clefs est le meme que l'espace des messages, qui est encore l'ensemble de toutes les sequences binaires. Une clef dans le "onetime pad" est une longue sequence binaire aleatoire, aussi longue que le message a chiffrer. Bon, maintenant que nous avons precise l'univers de definition du chiffre, decrivons comment le chiffre fonctionne. C'est tres simple. Essentiellement, le texte chiffre qui resulte du cryptage du message est simplement k XOR m. Voyons en un exemple. Souviens-toi que XOR, ce signe d'addition entoure d'un cercle, veut dire une addition modulo 2. Donc je prends un message, disons 0110111. Et je prends une clef, disons 1011001. Quand je chiffre le message avec la clef, je compute le XOR des deux sequences de bits. Autrement dit, j'additionne les deux, modulo 2, bit par bit. La, le resultat c'est 101110. C'est le texte chiffre. Comment le decrypter? Faisons un chose semblable. Pour decrypter un texte chiffre en utilisant une clef, je XOR la clef et le texte chiffre. Et tout ce qu'il faut verifier c'est que ca satisfasse la regle de consistance. Je vais le refaire doucement une fois encore et ensuite je vais le prendre pour aquis. Donc je doit m'assurer que si je decrypte un texte chiffre, qui avait ete encrypte avec une certaine clef, j'ai bien interrest a ce que le resultat soit le message d'origine, m. Voyons ce qui se passe. Je prends le message chiffre, qui resultait de k XOR m par definition. Quelle en est le dechiffrage? C'est k XOR (k XOR m). Et comme l'addition modulo 2 est associative, c'est equivallent a (k XOR k) XOR m, qui peut etre simplifie. (k XOR k) = 0, et zero XOR m est simplement m. Bon, ceci demontre que le ontime pad est bien un chiffre, mais ca ne nous dit rien de sa surete. Nous allons parler de la surete (/securite) de ce chiffre dans un instant. D'abord, je vais te poser une question, juste pour s'assurer que tu suis bien. Suppose un message m et le chiffrage de m via une clef "ontime pad" k. Tout ce que tu as est le message et son texte chiffre. Ma questions est celle-ci: peux-tu deduire la clef qui a servit a la creation de c a partir de m? J'espere que tu t'ai rendu compte que, etant donne le message et le texte chiffre, il est tres facile de recouvrire la clef. Plus precisement, la clef est m XOR c. Si ceci n'est pas immediatement evident, nous verrons plus tard pourquoi ceci est le cas. Le onetime pad est assez genial du point de vue de sa performance. Tout ce que tu fait c'est une XOR de la clef sur le message, et donc c'est super rapide. Mais chiffrer et dechiffrer des messages tres longs devient difficile en pratique. La raison que c'est difficile est que la clef est essentiellement aussi longue que le message. Donc si Alice et Bob veulent se parler en toute securite, avant qu'Alice ne puisse envoyer un message a Bob, elle doit d'abord transmettre a Bob une clef qui est aussi longue que le message lui-meme. Et bien sur, si elle a un moyen sur d'envoyer cette clef a Bob, pourquoi ne pas s'en servire pour transmettre le message lui-meme. Donc le fait que la clef est aussi longue que le message est problematique et rend le one-time pad tres difficile a utiliser en pratique. Bien sur, nous verrons plus tard que l'idee qui soutent le onetime pad est tres utile, Pour l'instant, regardons de plus pres sa securite. La question qui saute aux yeux est, pourquoi le chiffre "onetime pad" est-il sur? Pourquoi est-ce un bon chiffre? Afin de repondre a cette question, la premiere question a poser est, qu'est que ca veut dire qu'un chiffre est sur? Qu'est ce qui le rend sur? Bien, alors pour etudier la securite des chiffres, parlons d'abord de la theorie de l'information. La premiere personne a etudier la securite des chiffres de facon rigoureuse est le fameux Claude Shannon, pere de la theorie de l'information. Il publia un fameux papier en 1949 ou il analysa la securite du onetime pad. L'idee derriere la definition de securite que nous donna Shannon est que si tout ce que tu vois est le texte chiffre, tu ne devrais rien savoir du message d'origine. Autrement dit, le texte chiffre ne devrait rien reveler du message d'origine. Et tu vois maintenant pourquoi il a fallut attendre l'invention de la theorie de l'information pour avoir cette notion, parce que Shannon a du qui explique formellement ce qu'une information sur le message d'origine veut dire. C'est la la contribution de Shanon. Laisses-moi te montrer la definition de Shanon. Je vais l'ecrire lentement. Ce qu'a dit Shanon, c'est, suppose que nous avons un chiffre E, D qui est definit dans l'espace K, M, C. Donc K, M, C definissent les espaces de la clef, du message et du texte chiffre. On dit que le chiffre est parfaitement sur si la condition suivante est verifiee. Pour toute paire de messages m0 et m1 dans l'espace des messages... pour toute paire de messages -- la seule exigence est que ces messages aient la meme longueur, nous verrons pourquoi dans une minute -- et pour tout texte chiffre dans l'espace des textes chiffres, (okay?) donc pour toute paire de messages et tout texte chiffre, il faut que, si je demance quelle est la probabilite que le resultat du chiffrage de m0 par k soit c? Quelle chance y a-t'il que, si je choisi une clef au hasard, et que je chiffre m0, j'obtienne c? Cette probabilite doit etre la meme que si j'avais chiffre m1. Okay, bon, la probabilite de chiffrer m1 et d'obtenir c est exactement la meme que la probabilite de chiffrer m0 et d'obtenir c. Et comme je l'ai dit auparavant, la clef est choisie au hasard dans un espace (de clefs) a distribution uniforme. Donc k est uniforme (a une probabilite uniforme d'etre choisie) dans K. J'utiliserais souvent la notation K, fleche avec un petit r au dessus pour indiquer le fait que k est une variable aleatoire qui est echantillonnee de facon uniforme dans l'espace K. Bon, voici le coeur de la definition de Shannon. Reflechissons a ce que cette definition dit essentiellement. Que ce que ca veut dire que ces deux probabilites sont les memes? Et bien, ce que ca nous dit, c'est que si je suis un attaquant et que j'intercepte un texte chiffre c, la probabilite que de c soit le cryptage de m0 est exactement la meme que la probabilite que c'est le cryptage de m1. Parceque ces probabilites sont egales. Donc si j'ai seulement le texte chiffre c, et rien de plus, je n'ai aucune idee de si le texte chiffre vient de m0 ou de m1, parceque, encore, la probabilite d'obtenir c est egale que ce soit m0 ou m1 qui ait ete encrypte. Alors la, la definition est donnee a nouveau. Et je veux juste ecrire ces proprietes une fois encore plus precisement. Alors refaisons le. Ce que cette definition veux dire, c'est que si je recoit un certain texte chiffre, je ne peux pas dire d'ou il vient. Je ne peux pas dire si le message qui en est l'original etait m0 ou m1. Et en fait cette propriete est vraie de tous les messages, pour tout m0, pour tout m1. Non seulement je ne peux pas dire si c vient de m0 ou de m1, je ne peux pas dire s'il vient de m2, m3, m4 ou m5 parceque tous ont la meme probabilite de produire c. Donc ce que je veux dire vraiment c'est que si tu encryptes des messages sur un onetime pad alors meme l'adversaire le plus formidable, quelque soit son intelligence, l'adversaire le plus puissant ne poura rien apprendre du message d'origine a partir du texte chiffre. Dit d'une autre maniere, ce que ca prouve c'est qu'aucune attaque fondee seulement sur le texte chiffre ne pourra venir a bout d'un chiffre qui est parfaitement secret. Maintenant, une attaque sur le chiffre n'est pas la seule attaque possible. Et en fait, d'autres attaques sont plausibles. Bon. Maintenant que nous comprenons le secret parfait, la prochaine question est celle-ci: pouvons-nous construire des chiffres qui sont parfaitement secrets? Et il ne faut pas chercher loin, parceque la ontime pad est parfaitement secrete. Alors je veux prouver cela, est c'est le premier resultat qu'a obtenu Shannon, c'est une preuve tres simple alors allons-y et voyons comment ca se fait. Nous avons besoin d'interpreter ce que veut dire cette probabilite Pr[E(k,m0)=c? est zero. Alors ce n;est pas vraiment difficile a voir que pour tout message et pour tout texte chiffre la probabilite que le cryptage de m via la clef k la probabilite que cela soit egal a c, la probabilite d'un choix au hasard de clef, est, par definition, le nombre de clefs ( le nb de k appartenant a K) tel que, si je chiffre m avec k, j'obtient c. Donc je compte literalement le nombre de clefs comme ca et je divise par le nombre total de clefs dans l'espace K. C'est bon? C'est ce que ca veut dire que si je choisi une clef au hasard, elle projette m sur c. Bien. Donc a la base, ce nombre de clefs qui projettent m sur c, divise par le nombre total de clefs. C'est sa probabilite. Maintenant suppose que nous avons un chiffre tel que pour tout message et tout texte chiffre, il se trouve que si je regarde ce nombre, le nombre de k dans K tels que E(m,k)=c, ou le nombre de clefs qui projettent m sur c, suppose que ce nombre soit constant. Je postule qu'il se trouve etre 2, 3, ou 10 ou 15. Il se trouve simplement etre une constante. Si c'est le cas, alors par definition, pour tout m0 et m1 et pour tout c, cette probabilite doit etre la meme parce que le denominateur est le meme, le numerateur est le meme, c'est juste une constante, et donc la probabilite est toujours la meme pour tout m et tout c. Alors si cette propriete est vraie, le chiffre doit avoir une surete parfaite (/un secret parfait). Bon, alors voyons ce qu'on peut dire au suject de cette quantite pour le onetime pad. Alors une question pour toi: Si j'ai un message chiffre, combien de onetime pads y a t-il qui projettent m sur c? Autrement dit, combien de clefs y a-t-il telles que m XOR k produise c? Alors j'espere que tu a repondu "1". Voyons pourquoi c'est le cas. Pour le onetime pad, si on a que E(k,m)=c, ca implique par definition que k XOR m = c. Cela implique que k = m XOR c. Je "XOR" les deux cotes par "m" et j'obtiens que k doit etre egal a m XOR C. Bien? Alors ce que ce veut dire, c'est que pour le onetime pad, en fait, le nombre de clefs dans K tels que E(k,m)=c tout simplement 1. Et cela est vrai pour tout message et tout texte chiffre. Alors, encore, comme on l'a dit avant, cela signifie que le onetime pad est parfaitement secret. Et cela complete la preuve de ce lemme trivial, tres, tres simple. Maintenant la chose marrante est que meme si ce lemme est simple a prouver il demontre quelque chose de tres puissant. Il nous dit au fond que pour un onetime pad, il n'est pas possible d;attaquer seulement le texte chiffre. Alors au contraire du chiffre de substitution, ou du chiffre de Vigenere, ou des machines a cran, qui pouvaient toutes etre cassees par une analyse du texte chiffre, nous venons de prouver que pour le onetime pad cela serait impossible. Etant donne le texte chiffre, tu n'apprends rien du message d'origine. Cependant, comme on l'a vu, cela n'est pas la fin de l'histoire. Je veux dire, est-ce qu'on a fini? On pourrait avoir deja fini la classe, parcequ'on a une methode pour chiffrer de facon a ce qu'un attaquant ne peut rien recouvrir du message. On peut tout aussi bien finir le cour maintenent. Mais en fait, comme nous allons voir, il y a d'autres attaques qui sont possibles. Et, en fait, ce ontime pad n'est pas un chiffre tellement sur. Il y aa d'autres attaques et nous allons les etudier bientot. Okay? Je souligne encore: le fait qu'il a un secret parfait ne veut pas dire que le onetime pad est un chiffre sur. Bien. Mais comme on l'a dit le probleme avec le onetime pad est que la clef secrete est vraiment longue. Si tu as une maniere de communiquer cette clef secrete a ta contrepartie, tu peux tout aussi bien te servir de cette meme methode pour communiquer le message a ta contrepartie et tu n'aurras alors pas besoin d'un chiffre pour commencer. C'est bon? Donc le probleme encore une fois est que le onetime pad a des clefs tres longues. La question evidente est y a-t-il d'autres chiffres qui ont un secret parfait et ont peut-etre des clefs bien plus courtes? Et bien, le mauvaise nouvelle est que Shannon, apres avoir prouve que le onetime pad est parfaitement secret, prouva un autre theoreme qui dit que si un chiffre est parfaitement secret, le nombre de clefs dans le chiffre doit etre exactement le nombre de messages que le chiffre peut supporter. Bon, alors en particulier, ce que ca veut dire c'est que si j'ai un secret parfait, alors necessairement le nombre de clef, ou plutot la longueur de ma clef, doit etre plus grande que la longueur du message. Alors en fait, puisque le onetime pad nous satisfait avec l'egalite (de longueur), le onetime pad est optimal. Il est parfaitement secret. Alors a la base, ce que ca demontre, c'est que c'est une notion interessante. Le onetime pad est un chiffre interessant. Mais en fait, en realite, c'est tres difficile a utiliser. Il est difficile de s'en servire en pratique, a cause de ses longues clefs. Et cette notion de secret parfait, meme si elle est interessante, nous dit que des chiffres pratiques ne seront pas vraiment surs. Et nous verrons cela, mais comme je l'ai dit, l'idea deriere le onetime pad est tres bonne. Et nous allons voir, en cours, comment en faire un systeme pratique.