 Nous allons commencer cette prochaine présentation, va regarder, qu'est-ce qui peut mal se passer quand on utilise des primitifs de cryptographie mais qu'on ne l'utilise pas tout à fait correctement et qu'est-ce qu'on peut faire pour éviter ça en faisant peut-être des preuves formelles. Donc pour vous en parler un peu plus, nous avons ici Florian et Lucas. Tonnerre d'applaudissements s'il vous plaît. Merci de vous être réveillé. C'est un véritable honneur pour nous de pouvoir donner cette présentation ici, surtout juste après DGB et Tania. Et avant de commencer je voudrais éclaircir quelques points ici qui ne seront pas forcément clairs dans cette présentation. La première c'est qu'on aime la sécurité qu'on peut prouver. Et l'autre c'est que Daniel Goldberg est un cryptographe excellent et ce talk ne devrait pas dire le contraire. Alors on va commencer par un peu de notre motivation ici, qu'est-ce qu'on veut faire ? On va parler des preuves de sécurité et on va montrer comment on peut les faire. Et ensuite on va parler de choses un peu bizarres qui peuvent se passer quand on commence à essayer de prouver des aspects de sécurité. Alors n'importe qui du premier amateur au cryptographe le plus expérimenté peut créer une crypto qu'il pourra casser lui-même, qu'il ne peut pas casser lui-même. C'est même pas dur. Cette citation de Bruce Snyder, on dit un peu plus sur pourquoi est-ce qu'on veut pouvoir prouver la sécurité. Juste parce que vous regardez à votre propre système et que vous trouvez pas de faille, ça ne veut pas dire qu'il n'y a pas de faille. Et une preuve mathématique rigoureuse peut résoudre ce problème. Mais c'est pas si simple. Il faut bien se rendre compte des limites des systèmes de preuves qu'on peut utiliser. Je suis sûr que vous connaissez cet exemple, ce mode de chiffrement par bloc. C'est un où vous prenez le texte en clair et vous le chiffrez chaque bloc un par un. Donc c'est sûr dans le sens où chaque bloc a l'air aléatoire par rapport au texte en clair. Mais à la fin, ce n'est pas forcément à ce que vous vouliez faire. Ce n'est pas forcément aussi sûr que ce que vous vouliez. Un exemple un peu plus compliqué, c'est le mode CBC, le chiffrement par bloc chainé. Là vous avez des blocs de texte chiffrés et des blocs de texte en clair. Dans l'étape de déchiffrement, vous prenez le texte chiffré d'un bloc et vous faites un XOR avec le bloc chiffré suivant et ça vous permet d'avoir le texte en clair. Pour l'explication un peu plus compliquée là-dessus, je vous invite à regarder la présentation par Hano du jour 1 sur TLS 1.3. Et on va pas rentrer dans l'état ici, mais avant que je commence à parler de ce qu'on appelle les oracles. Il faut que je commence par parler des oracles. Les oracles sont des façons d'avoir un département du protocole qui prend une entrée qui est vérifiable et qui vous donne une sortie qui est vérifiable aussi. Ça c'est typiquement fait pour faire des opérations que un des communicants ne peut pas forcément faire lui-même. Et si on introduit un oracle qui est un oracle de padding à ce mode CBC qui lui prend un texte chiffré et qui vous répond si le padding au début, les espaces qu'on est ajoutés au début ou à la fin sur le texte en clair est suffisant, c'est-à-dire est-ce que ça suffit par un octet à 1 ou 2 octets à 2 ou 3 octets à 3 par exemple. Juste avoir cette information c'est suffisant pour déchiffrer l'intégralité du texte parce que ça permet de tester un octet après l'autre et ça, ça permet de remonter toute la chaîne et récupérer tout le texte en clair. Donc pour comprendre la sécurité d'un système, il faut comprendre quel est le problème qu'on essaie de résoudre et qu'est-ce que c'est la définition de la sécurité qu'on veut avoir. Après, on peut faire cette analyse et prouver que le système est sûr. Malheureusement, on ne peut pas le prouver sans avoir des suppositions initiales. Par exemple, on va avoir le problème P&P. Si vous arrivez à résoudre ce problème, vous pouvez sûrement devenir très riche. Et si vous avez un texte chiffré par une méthode chiffrement quelconque et que vous avez une preuve qui dit que ça, c'est un chiffrement qui est sûr c'est-à-dire que quand quelque chose est chiffré, on ne peut pas savoir que ça a chiffré par exemple 0. Si vous prouvez ça sans aucune supposition, là vous aurez réussi à prouver la sécurité d'un problème qui est NP. C'est-à-dire que si vous avez la clé secrète, c'est facile. Vous pouvez juste déchiffrer, vous savez si c'est un 0 qui a été chiffré ou pas. Mais c'est difficile, très difficile de le faire sans la clé secrète. Et ça, c'est fait dans un monde où P&P sont différents. Si vous arrivez à prouver que P&P sont différents, ça vous rendra très riche. Mais vous ne pouvez pas forcément faire cette preuve d'un point de vue sécurité. Parce que déjà, on n'a pas cette preuve ici. Donc pour ça, il faut qu'on fasse quelques suppositions. Et Florian va maintenant vous parler de quelques-unes de ces suppositions. Bonjour tout le monde. Beaucoup d'entre vous doivent déjà connaître RS1. Envoie-ci une version simple raccourcie. Ça c'est que vous comprenez deux grands nombres premiers qu'on les multiplie, ce qui donne n. Et un autre exposant qui est à 3 dans cette zone. Et puis il y a un moyen plus compliqué pour la clé de la clé. Et puis vous avez ces valeurs. C'est aussi simple de prendre le texte de la clé privée. Et de prendre le pouvoir de l'E, en ce cas, 3. Et de faire ça modulo n. En cas que vous ne vous souvenez pas, si vous faites une exposition avec un remédiaire, vous vous trouvez un quotient et vous gardez le remédiaire. Et c'est ce que nous appelons modulo n. Donc, il y a presque tous les exemples que nous allons montrer. Nous allons avoir des modulos n. Et en ce cas, l'encryption, comme vous le voyez, n'est pas vraiment compliqué. Et comme vous pouvez voir, vous avez le pouvoir de la clé privée et la clé privée. Et pour des raisons que nous ne pourrions pas en parler, ça fonctionne pour vous donner de la clé privée. Et il y a ce concept que la clé privée est sécuritaire. Il y a souvent une fausse impression qui est que RSA, c'est sûr, si le problème de facturiser nombre est difficile, mais c'est pas vraiment vrai. En fait, on peut dire ça plus comme ça. Si c'est pas pratique, si vous donnez du texte chiffré et une clé qui n'est pas complètement aléatoire, c'est difficile d'extraire le texte en clair. On peut penser que ça, c'est la même chose de dire que RSA, c'est sûr si facturiser est sûr, mais en fait, c'est pas vraiment le cas. On peut se rendre compte que, juste parce que c'est difficile d'extraire le texte en clair à partir du texte chiffré, ça ne veut pas dire qu'il y a des attaques possibles. Par exemple, si on est capable d'extraire la moitié du texte en clair et que là, on s'en compte qu'il y a du texte ASCII on sait qu'on s'attend à avoir oui ou non en ASCII et que vous êtes capable de déchiffrer juste le premier octet vous allez être capable de supposer quels sont les autres octets qui sont manquants. Il y a aussi des problèmes de chainage. Par exemple, en RSA, si vous voulez chiffrer un petit nombre, vous prenez par exemple 23, prenez 23 puissance 3, à un modulo, un très grand nombre. 23 puissance 3, c'est toujours un nombre très petit plus petit que notre N ici. Et donc ici, vous avez juste la valeur en cube qui est disponible quasiment en clair et il suffit de faire une racine cubique de ça et vous obtenez le texte en clair. Alors, vous pouvez vous dire, non mais je ne vais pas chiffrer du texte en clair juste avec RSA directement. En fait, je vais utiliser un chiffrement hybride où je vais utiliser RSA pour négocier une clé symétrique et ensuite une clé symétrique pour chiffrer le texte parce que c'est beaucoup plus efficace de toute façon et de fait, c'est ce que vous feriez en vrai. Mais pensez-vous un peu, imaginons que vous utilisez des clés de 256 bits pour une version de AES par exemple et vous êtes un peu plus économe vous utilisez seulement 124 bits pour votre clé RSA non, non pas moi, 124 bits de RSA de 256, c'est plus petit que 124 et ça, ça veut dire qu'il faut vraiment faire attention parce que c'est un système déterministe si on connaît une clé publique vous pouvez juste chiffrer quelque chose avec ses clés publics et voir si le résultat correspond à la sortie. Donc la conclusion ici qu'il faut retenir c'est utiliser RSA c'est pas facile de faire ça de façon sécurisée. Il y a des versions de RSA qui existent qui sont plus compliquées et qui ont plus de propriété de sécurité mais par exemple, même pour aucune d'entre elles on dit souvent que si on chiffre que signer c'est la même chose que chiffrer avec la clé privée c'est une simplification qu'on entend souvent et c'est pas vrai, pour autant que je sache ce n'est jamais vrai pour aucune version de RSA ou quelque chose qui s'apparente à RSA. Alors, RSA c'est pas le seul système qui a des problèmes on peut regarder par exemple El Gamal qui est un très bon scènes chiffrement mais si on ne fait pas attention ici on peut assez facilement se retrouver à laisser fuir des octets un par un en clair et parfois un seul octet peut suffire à tout dire imaginer des votes oui ou non si je laisse fuir un seul octet de ma réponse on peut apprendre l'intégralité du vote par exemple alors il y a d'autres problèmes par exemple si on prend une entrée aléatoire à partir d'un ensemble assez large ça peut être difficile de deviner quelle était l'entrée à partir de la sortie mais si le set des entrées possibles et petits dans ce cas là c'est assez facile de deviner quelle était l'entrée non, on a souvent entendu des gens dire ça et peut-être qu'ils le savaient mais c'était pas forcément évident et les résultats en pratique c'est qu'on se retrouve avec beaucoup de vulnérabilité un peu partout alors un des problèmes qu'on a pu voir dans RSA c'est qu'il faut pour prouver la sécurité des RSA il faut d'abord une définition de qu'est-ce que ça veut dire la sécurité d'un système donc il y a une notion assez vieille qui n'est pas forcément idéale mais qui peut marcher comme début en tout cas c'est ce qu'on appelle la sécurité sémantique ce que vous voyez ici c'est dans le sens où c'est écrit en langage de tous les jours au lieu d'une formule mathématique compliquée mais ça permet de donner une idée assez simple de ce que c'est si vous avez une clé publique et un texte chiffré vous ne devriez pas être capable d'apprendre quoi que ce soit sur le texte chiffré sauf sa longueur si cette propriété est vraie pour un système de chiffrement on considère que ce système est sécurisé dans le sens où il fournit la sécurité sémantique le problème c'est que déjà c'est pas forcément facile de prouver ça pour des systèmes si on n'utilise pas de de suppositions et il y a une autre propriété qu'on appelle la propriété en CPL alors c'est une version un peu plus complexe de ça mais ça ça dit si je vous donne une clé publique et que vous êtes l'attaquant et que maintenant vous avez la possibilité de choisir 2 textes en clair qui peuvent être que vous voulez tant qu'ils ont la même longueur vous me donnez les deux j'en choisis un au hasard et je le chiffre avec la clé publique et je vous donne la version chiffrée vous ne devriez pas être capable de distinguer quel est le texte en clair qui a été chiffré mieux que en choisissant au pif au hasard bien sûr il y a une chance que vous soyez capable de deviner le bon ou il y a toujours une chance que vous puissiez deviner une clé privée au hasard mais ça c'est pas des modèles dont on s'inquiète si vous êtes capable de deviner quelque chose alors c'est assez compliqué de prouver que ces notions sont équivalentes mais on peut prouver que si vous avez prouvé NCPA vous avez prouvé la sécurité sémantique mais à nouveau la sécurité c'est juste un aspect de sécurité tout simplement suffisant pour ce que vous voulez on a parlé du mode CBC au départ ou quelqu'un était capable de déchiffrer l'intégralité du texte en disant un dracle de padding CBC fournit d'une sécurité sémantique c'est simplement que à cet arrêque de dracle padding ne fait pas partie de cette définition de sécurité sémantique et que du coup l'attaque est en dehors du modèle de sécurité qu'on a cherché à prouver un modèle de sécurité approprié pour le problème et on a des exemples dans lesquels ça peut se produire par exemple il y en a un qui est très célèbre dont on va pas reparler et ça c'est des attaques par canaux cachés si vous êtes capable d'apprendre la clé privée juste en regardant par exemple au trafic sur le réseau et en chronométrance trafic le chiffrement peut être aussi fort que vous voulez il va pas vous aider puisque l'attaquant peut être capable de trouver la clé donc c'est pour ça que implémenter de la cryptographie c'est très difficile parce qu'il faut prendre en compte tous ces problèmes de plus c'est pas parce qu'un système est sûr par lui-même ça va pas dire qu'il est sûr si on le combine avec d'autres systèmes et trouver une définition de la sécurité ça peut être un des problèmes plus difficiles en cryptographie il y a des cas où c'est facile de trouver une bonne définition de ce que ça veut dire de sécuriser le chiffrement donc regardons maintenant comment on peut faire des preuves de cette sécurité dans des cas comme ça on peut pas forcément faire des preuves qui n'ont pas de suppositions puisqu'on a ce problème du millénaire du PNP qu'ils en mettent du coup il faut qu'on fasse des suppositions et souvent on définit les problèmes sous forme de jeu dans lesquels on a un challenger un participant qui a une forme de défi par dont le prétraiteur donne un défi le défi va être une clé publique et un texte chiffré donnez-moi le texte en clair et ensuite on a une sorte de traducteur entre les deux et enfin on a notre attaquant qui cherche à compromettre le système et nous on veut prouver que le système est sûr donc par exemple si on veut parler de la sécurité NCPA d'un système de chiffrement là on va nous donner une forme de clé publique et il y a un jeu une forme de jeu de sécurité et maintenant l'interprète au milieu le traducteur doit être capable de traduire ce challenge qui a été donné par la personne qui a défini le challenge de façon à ce que l'attaquant sur ce système dont on veut pas la sécurité à ce que cet attaquant puisse attaquer ce système et le traducteur doit ensuite traduire le résultat de cet attaque sous une forme que le challengeur original pourra accepter comme quelque chose qui gagne le jeu et puisqu'on croit nous qu'il n'y a pas de façon possible de casser la sécurité et donc de réussir ce défi ou en tout cas que c'est pas faisable on devrait pas avoir de réponse venant du traducteur donc on va regarder les exemples et on va regarder d'abord un système de chiffrement qui s'appelle El Gamal qui pas comme RSA lui est sur directement dès qu'on le déploie mais pour certaines définitions de la sécurité donc on commence aussi par 2 grands nombreux premiers P et Q mais eux il doit avoir une propriété P doit être 2Q plus 1 donc c'est ce qu'on appelle des nombreux premiers sur on va pas aller dans les propriétés mathématiques de ces nombres ici mais il y a aussi quelque chose qu'on appelle le générateur et ici on va choisir 4 parce que ça marche toujours si vous choisissez un meilleur générateur ça peut être un cas comme j'ai mentionné au début où vous vous retrouvez avec des bits en clair qui sont divulgués donc là maintenant on va devoir faire des opérations avec sur les éléments où on multiplie l'élément de base et on le prend et on a aussi des exponents des d'explosations là-dedans et on va faire une exponentiation à puissance Q et ensuite modulo non, faire cette exponentiation on se fait faire modulo Q je ne rentre pas dans les détails mais si vous lisez le papier original et vous comprenez les propriétés mathématiques ça a du sens et il y a des critères qui vont définir si un nombre Q est sur ou pas, on ne va pas aller là-dedans non plus alors pour utiliser Algamal on parle du principe qu'on a P et Q ils n'ont même pas besoin d'être sûr, ils peuvent mettre standard d'ailleurs très souvent ils sont standard ils sont partagés et le générateur de clés maintenant va juste prendre un exponent aléatoire X et le prendre modulo Q et ça c'est la clé secrète ensuite Illoel va prendre le générateur chi chi puissance X donc ça c'est à nouveau modulo P et donc ce nombre sera pas absolument gigantesque et le résultat c'est la clé publique on peut voir ici que G ou chi G puissance X c'est un nombre très très long et que du coup c'est difficile de récupérer G puissance X à partir de G puissance X modulo P donc ça sanophonie nos propriétés de sécurité le chiffrement un peu plus compliqué mais c'est aussi faisable on choisit un autre nombre aléatoire R un entier et là on parle du coup d'un système d'attaque dans lequel on va chiffrer un texte en clair qu'on peut supposer et voir si ça correspond au texte au texte chiffré qu'on a donc on calcule on prend la clé publique G puissance X et on calcule ça puissance R et à cause de la façon dont marchent les expensations G puissance X puissance R c'est égal à G puissance des fois R et du coup on passe le module là-dessus et cette opération est stable sous le module O et ça ça nous permet de récupérer le texte chiffré on prend la deuxième partie du texte chiffré qui est G puissance XR xM on a juste à enlever G puissance XR pour ça on calcule G puissance R et on élève ça à la puissance X à cause des lois mathématiques G puissance R puissance X c'est G puissance Rx et si on met ça puissance moins 1 ça donne G puissance moins Rx G puissance Rx c'est G puissance Rx moins Rx G puissance 0 c'est 1 et donc il nous reste uniquement le texte en clair ici et vous avez une opération de déchiffrage c'est tout ce qu'il a à dire sur ce mod c'est pas compliqué en fait on utilise l'assumption de si on prend 3 exposants à l'autre part G puissance X Rx alors on va pas dire pourquoi c'est le cas on va juste supposer que ce système à base de puissance est sécurisé si cette supposition est vraie pour ça on va utiliser à nouveau notre système de jeu dont on a parlé tout à l'heure et voici le jeu complet alors au début on peut voir qu'on a notre challenger ddh qui passe à ces 3 nombres G puissance Y et G puissance Z à notre traducteur et le traducteur va nous retourner à une fonction qui permet de nous dire si cette est égale à X à droite on a donc le jeu traduit on en prend G puissance X qu'on donne à notre attaquant sur El Gamal notre attaquant va ensuite donner 2 textes en clair possible M0M1 le traducteur choisit 1 de ces textes au hasard donc il détermine un bithéliatoire et il choisit par exemple MB et il chiffre ce texte on prend ensuite le deuxième partie du triple qui a été passé au début donc G puissance Y et il utilise ça à la place de G to GX donc ça ça prend ça nous donne G puissance RX c'est à dire la deuxième partie du texte chiffré sauf pour la partie RX et ça ça donne globalement la structure d'un texte chiffré El Gamal et ensuite on laisse l'attaquant supposer le texte en clair qui a été choisi l'attaquant peut faire absolument ce qu'il veut tant que ça prend pas un temps à fin et à la fin l'attaquant va nous donner une position sur quel était le texte chiffré quel était le texte en clair qui a été chiffré et le traducteur peut ensuite retourner au résultat au challenger qui dit si l'attaquant a bien choisi ou non alors c'est peut-être pas évident maintenant pourquoi est-ce que ça c'est une preuve mais on peut regarder quelques cas disons que l'attaquant a réussi environ 0v5 plus epsilon probabilité de 0v5 plus epsilon donc un peu mieux qu'une chance sur 2 ça ça nous apprend que ici il y a ce qu'on appelle un avantage de l'adversaire epsilon et on va supposer ici qu'il est positif alors si X Y c'est égal à Z dans plus de 50% du temps alors ça c'est une simulation parfaite du jeu NCPA puisque la clé publique G puissance X est complètement aléatoire donc parfaitement impossible à distinguer de quelque chose de complètement aléatoire G puissance Y pareil G puissance Z par définition c'est G puissance X Y donc à nouveau une simulation parfaite et on a juste à prendre on reçoit juste la probabilité de succès de l'attaquant dans ce cas ici c'est pas un problème autrement dans le cas contraire G puissance Z il n'y a pas de corrélation avec G puissance X et G puissance Y et donc ce texte chiffré n'aura pas de corrélation avec l'un ou l'autre des textes en clair avec une probabilité forte donc il est uniquement possible d'avoir une chance de succès de 0v5 pour l'attaquant et puisque ces deux choses ont une chance sur deux de se protéger, on a juste à calculer la moyenne de ces deux valeurs et la moyenne sera 0v5 plus la moitié de epsilon donc si on a un attaquant contre la sécurité sémantique ou la sécurité Ncpa de LKMAL on peut, on la convertit maintenant en une attaque contre la supposition DdH et avec une chance de sécurité de 1 demi plus la moitié de epsilon n'est pas négligeable donc la diffusion de négligeable implique que la moitié des epsilon n'est pas négligeable non plus et si on suppose que l'attaquant est capable d'attaquer DdH avec un avantage non négligeable on peut conclure qu'il n'y a pas d'attaquant qu'il y a un epsilon non négligeable on peut conclure qu'il n'y a pas non plus d'attaquant avec un epsilon non négligeable contre Ncpa et contre du coup la sécurité sémantique puisque Ncpa fournit la sécurité sémantique de la preuve complète alors maintenant vous pouvez le dire mais qu'est-ce qu'on a appris là-dessus on a juste remplacé une supposition que notre sienne de chiffrement est sûre par une autre supposition qui est un peu bizarre alors déjà cette supposition est un petit peu moins complexe alors dans ce cas là la différence n'est pas très importante mais voilà à une image de l'ancienne version du uncheck TLS et comme vous pouvez le voir vous voyez probablement c'est plus difficile puisque c'est trop compliqué pour le faire tenir sur cette diapo et ça c'est justement ce que j'ai de dire ici ça vous permet cette propriété de transformer un système compliqué en un système plus petit plus simple et mieux compris avec des suppositions mieux comprises et on peut partager ces suppositions il y a beaucoup de systèmes de chiffrement qui peuvent être simplifiés avec la supposition ddh et de cette façon n'importe qui qui peut casser ce système peut simplement essayer de casser la supposition ddh et du coup tous ces systèmes sont cassés ou alors aucun autre ne l'est ça nous permet de concentrer un peu cette résistance si vous avez vu la présentation hier sur le chiffrement post quantique Tania et DJB on dit qu'un des problèmes avec les systèmes post quantiques de chiffrement c'est que c'était impossible de tous les vérifier puisqu'il y en avait trop ce genre de simplification permet de simplifier ces vérifications puisqu'il suffit de vérifier quelques suppositions initiales ça nous permet de vérifier beaucoup de systèmes de chiffrement ensemble ça nous évite aussi des problèmes d'interaction bizarre si on a beaucoup de suppositions dans cet exemple c'était pas le cas mais dans le monde réel on utilise plusieurs primitives et même si ces primitives sont sécurisés quand on les utilise par elles-mêmes si on les utilise communes avec d'autres c'est pas forcément le cas et du coup pour prouver que mon système est sécurisé il faut que je puisse prouver que les autres sont sécurisés et que leur combinaison est aussi sécurisée que le fait de les combiner n'a pas un tropie de problèmes ça a aussi énormément de valeur quand on analyse les systèmes alors on va revenir à nos problèmes de sécurité ici alors ce que vous avez vu ici c'est ce qu'on appelle des preuves basées sur le jeu vous avez vu le jeu donc c'est pour ça que ça s'appelle comme ça et ce genre de preuves est généralement plus facile à faire que les alternatives alors il y a des exceptions et bien souvent ces preuves sont moins intuitives ce qu'elles impliquent est moins intuitif par exemple je tenais les exemples de NCPA et de la sécurité sémantique on a souvent vu que souvent on pensait que la sécurité sémantique c'était plutôt simple à comprendre et que la NCPA c'était très technique et bien souvent ces preuves sur le jeu sont très techniques et bien souvent qu'est-ce qu'elles veulent dire précisément de plus plus les protocoles deviennent compliqués par exemple si vous voulez définir un système pour voter qui est cryptographiquement sûr ces genres de preuves ne deviennent pas forcément ne marchent pas forcément à cette échelle dans ce cas là il faut parfois utiliser des preuves un système qu'on appelle des preuves basées sur la simulation pour ces types de preuves on imagine une réalité dans laquelle on a quelqu'un qui est parfaitement sûr et on détermine qu'est-ce qu'on veut que chaque partie de la communication puisse savoir et on détermine l'idée que tout le monde est parfaitement sûr entre les parties et là on peut prouver que notre protocole c'est ce système complètement idéal ce genre de preuves a souvent des déficients un peu plus intuitifs mais c'est plus c'est plus facile de comprendre mais elles sont plus difficiles à exécuter c'est plus dur de produire ces preuves même si on les comprend plus facilement à la fin de plus étant donné que les systèmes qu'on va essayer de prouver avec des approches à la simulation sont souvent plus compliqués on va parfois trouver des artefacts de preuves on va avoir des choses dans la simulation des choses qu'on va remarquer sur notre système qui n'ont pas forcément d'impact utile par exemple on va se rendre compte que quelque part on va générer un texte chiffré pour une clé publique mais la clé privée n'a jamais été obtenue par personne ça ça peut sembler bizarre et parfois ça a réellement une utilité, c'est pas parce que quelque chose a l'air bizarre que c'est pas nécessaire mais parfois ça l'est et ça du coup ça peut être un des problèmes qu'on rend compte quand on fait des preuves sur la simulation alors au début j'ai mentionné RSA et j'ai dit qu'il y avait des versions de RSA et c'est vrai mais pour quelle marche il faut quelque chose un peu plus compliqué et pour ça il faut une autre partie, autre chose qui a besoin d'être sécurisé c'est nos fonctions de hachage les fonctions de hachage c'est des fonctions on peut leur donner une chaîne d'une longueur arbitraire et on peut obtenir un ensemble de bits qui a l'air aléatoire de taille fixe qui est dépendant des octets qui ont été donné en entrée alors je dis que ça a l'air aléatoire parce que la définition exacte et formelle de comment on va marcher une fonction de la hachage cryptographique c'est extrêmement compliqué et c'est très facile de se rater en créant en particulier parce qu'elles ont l'air si facile à créer mais ce qui est important ici c'est que la façon d'utiliser ces fonctions de hachage a beaucoup d'influence sur comment marche ces variantes de RSA et ça c'est parce que les preuves de la sécurité de RSA sont pas faciles à comprendre du tout si on veut modéliser une fonction de hachage dans nos preuves et qu'on veut se débarasser toutes ces propriétés étranges des fonctions de hachage, on utilise quelque chose qu'on appelle un oracle aléatoire qui en fait est ici ce nain qu'on peut voir ce nain habite dans une boîte et il a un dé et un livre et si quelqu'un vient à la boîte et veut avoir un H pour un message donné il le regarde dans son livre et il regarde s'il a déjà répondu à cette question si oui il répond de la même façon que la dernière fois sinon il lance le dé et ça lui donne une nouvelle valeur aléatoire qui est maintenant le H de ce message malheureusement personne n'a jamais réussi à trouver une boîte comme ça avec un NIN comme ça ce serait assez difficile à faire puisque à chaque fois que vous calcuteriez un H il faudrait aller voir ce nain et lui demander le H mais le problème le plus gros problème c'est que c'est même pas une abstraction valide ça et je vais vous montrer pourquoi c'est un problème imaginons qu'on a un système de chiffrement sécurisé et disons que H c'est une fonction de H ou un noracle aléatoire alors on peut simplement réutiliser notre algorithme de génération qui nous donne une paire de clés pour notre système de chiffrement et on peut réutiliser partiellement notre système de chiffrement et on le modifie de telle façon on vérifie est ce que le message est du code valide on parle pas ici d'attaque d'exclusion de code mais on regarde juste est ce que le message ici c'est du code valide si oui on prend cet entrée qu'on appelle X on essaye d'évaluer si c'est du code valide si le résultat du code est différent de ce que H nous dit alors on utilise notre système de chiffrement sécurisé mais si c'est la même chose on utilise notre clé secrète comme le le texte chiffré alors ça peut vous sembler très très bizarre et oui je confirme il faudrait pas faire ça dans un monde réel mais ici ce qu'on peut voir c'est que ce système est sécurisé si on utilise un noracle aléatoire mais insécurisé si on utilise une instantiation d'une fonction de hachage si on utilise un noracle aléatoire la probabilité que le nain obtienne la même sortie que le code qui a été donné cette probabilité est négligeable parce que c'est choisi aléatoirement mais pour une fonction de hachage réel vous pouvez simplement prendre le code de fonction de H et évidemment ça va s'exécuter de la même façon que la fonction de hachage puisque c'est le code de la même fonction et là on obtiendra la clé secrète dans le cybertexte donc l'oracle aléatoire nous permet de prouver des systèmes qui sont évidemment insécurisés les auteurs du premier papier qui parlaient de ça ont eu des phrases assez importantes qui disaient il faut que ça soit clair que cette méthodologie d'oracle aléatoire n'est pas suffisante et que c'est pas ça qui permet d'établir la sécurité ce qui s'est passé avec le modèle des oracle aléatoires ça nous fait penser à cette histoire biblique dans laquelle on illustre le process par lequel quelque chose de bien peut devenir une sorte de fétiche et qu'est ce qu'on doit faire dans ce cas là c'est pour ça que le serpent devait être détruit dans les den mais si vous essayez de concevoir la Bible en tant que cryptographe c'est peut-être pas vraiment ce que vous essayez de faire si vous essayez de citer la Bible pour parler les propres thématiques c'est peut-être pas une bonne idée donc bon ce qu'on s'est dit c'est si un des spécialistes les plus remarquables en cryptographie a essayé de limiter la confiance des gens dans l'idée de l'oracle aléatoire c'est même dans la communauté scientifique on sait pas vraiment quoi faire de ce modèle c'est pas énormément utilisé dans des preuves et il y a des systèmes qui ne peuvent être prouvé que avec ce système de oracle aléatoire donc ils ont l'air d'être sûr mais de toute évidence comme vous pouvez le voir l'oracle aléatoire permet aussi de prouver la sécurité de protocoles non sécurisés donc les gens essayent de se débarrasser pour ça ils ont inventé des systèmes de signature qui n'utilisent pas le modèle de l'oracle aléatoire mais quand on fait ça il y a des trucs un peu bizarres qu'on commence à se produire avec cette attaque de duplication de signature pendant la sélection des clés c'est une attaque qui permet de montrer l'insécurité de ce système à base signature et ça montre que la signature d'un message qui est unique on peut être capable de trouver une autre paire de clés qui permettra de valider cette même signature avec cette nouvelle paire de clés pour le même message et peut-être que ce n'est pas un problème pour votre utilisation particulière mais c'est quelque chose dont il faut être conscient si vous utilisez ce genre de signature les signatures de Bonnie and Boyan qui sont un autre système de signature et dans ce système les signatures sont beaucoup plus compliquées dans notre système simple on avait juste un groupe d'éléments dans le système plus compliqué si on en a deux et le deuxième est assez difficile à calculer et la probabilité qu'un programmeur puisse, enfin, se trompe pendant la plémentation est beaucoup plus élevée que dans le système et donc la question est est-ce que ça vaut le coup est-ce qu'on veut avoir des systèmes qui sont sécurisés sans utiliser des modèles dont les preuves sont pas établies ou ce qu'on va avoir des systèmes plus simples donc vous avez peut-être remarqué qu'on commence à rentrer un peu plus dans la beauté de la folie des preuves et pour avancer là-dedans on va vous donner un autre outil cryptographique qui s'appelle les systèmes d'engagement Commitment scheme en anglais ça, ça fonctionne cette façon on a une partie Alice qui a un message M et elle veut dire à Bob qu'elle sait qu'elle veut prouver à Bob qu'elle a choisi le message M mais elle ne veut pas dire le message à Bob par exemple un coffre elle écrit ce message sur un bout de papier elle le met dans le coffre elle donne le coffre à Bob et si on dit à Bob le code du coffre il peut l'ouvrir et lire le message dans ce système on a deux messages le premier c'est l'engagement le Commitment et ce message doit être un véritable engagement une fois que Alice a envoyé ce message elle ne doit plus être capable de le manipuler et ce message doit être caché c'est à dire que Bob doit pas être capable d'apprendre ce qui est le message à partir du Commitment plus tard Alice peut ouvrir ce Commitment c'est une opération qu'on appelle la révélation et à ce moment là elle peut envoyer le message M et un nombre aléatoire et ça se permet à Bob de vérifier que le Commitment était bien le message alors partons au principe qu'on a ce système et qu'il est sûr et construisons un protocole un peu plus compliqué imaginons qu'ils veulent tous les deux connaître savoir si le message qu'ils ont choisi et savoir si il est plus grand que le message que l'autre a choisi alors Alice s'engage sur M envoie l'engagement à Bob Bob s'engage sur un un autre message et envoie l'engagement sur Alice imprim et envoie avec lequel les deux gagnent le jeu du plus grand message mais qu'est-ce qui se passe si Alice n'interdit pas avec Bob qui est sympa mais à la place avec un attaquant Mallory qui agit comme ceci Mallory prend le Commitment C et le multiplie par le générateur que Alice a utilisé et quand Alice ouvre l'engagement Mallory peut simplement ouvrir ce message comme un engagement pour M plus 1 ça c'est pas ce qu'on veut avoir avec nos systèmes d'engagement donc pour qu'on prend des protocoles comme ça et qu'on les compose ensemble pour faire un protocole plus compliqué ça peut amener des protocoles qui ne sont pas sécurisés et ce qu'on veut avoir dans une déficient de sécurité c'est que la sécurité la définition de la sécurité doit pouvoir contenir toutes les propriétés imaginables et doit être sûre de façon indépendante du contexte dans lequel on utilise cette primitive vous voyez que ça ça utilise ici que par exemple ici utiliser des antivols pour les vélos c'est pas composable c'est même pas sécurisé d'ailleurs donc pour faire ça on utilise des preuves à base de simulation une variante un peu spéciale de ça qui s'appelle les modèles de composabilité universelle et tout comme Florian l'a parlé avant ici on a notre primitive et on a notre protocole et on prouve que notre environnement qui est tout ce qui n'est pas dans le protocole tous les autres ordinateurs, tous les autres protocoles de l'internet par exemple tout cet environnement est incapable de distinguer s'il interagit avec le monde réel ou avec notre monde idéal simulé alors ce n'est pas une fonctionnalité idéale c'est un peu mieux il est catholique donc il y a un peu de controverses ici ah non il fait confiance à Dieu et donc ici on a une terse partie en qui on a confiance et tout simplement on met notre confiance à Dieu, on lui donne le message cette autorité calcule quelque chose et donne le résultat au participant ça c'est un scénario idéal et dans le vrai scénario c'est nos participants qui exécutent le protocole mais on n'a pas juste ces participants on a aussi un adversaire qui peut par exemple écouter les messages manipuler peut-être les messages même interrompre un participant et il interagit avec l'environnement donc on peut penser par exemple que l'environnement et l'adversaire sont la même partie le même participant sont un des participants et ils veulent savoir s'ils sont dans le scénario réel ou dans le scénario idéal dans le scénario idéal on a ce qu'on appelle un simulateur et ce simulateur essaye de convaincre l'environnement qu'il est le vrai attaquant mais il interagit avec la fonction idéale qui ne va pas lui dire grand chose sur les messages que les participants lui ont donné et maintenant on peut dire que le système est sécurisé si pour tout adversaire il existe un simulateur tel que tout environnement et tous les environnements sont incapables de distinguer dans quel monde ils existent monde idéal au monde réel comment est-ce qu'une fonction idéale comme ça à quoi ça ressemble on va regarder les fonctionnalités par exemple pour ce commitment Alice peut mettre le message à l'intérieur de notre c'est-à-dire c'est partie de notre confiance et le message d'engagement est envoyé Alice peut faire notre révélation et ensuite Bob reçoit le message donc on va essayer de prouver ce message dans ce système de compilatabilité universelle dans l'environnement qui utilise un attaquant ça dit du coup ça envoie le le participant qui envoie le message à l'autre participant quand on lui dit de il réveille et le receveur qui n'est pas le vrai peut répondre avec le message dans un scénario idéal le simulateur est du bon côté puisqu'il veut confirmer il veut convaincre l'environnement que c'est le vrai scénario et il travaille en collaboration avec la partie corrompue avec l'attaquant l'environnement dit au participant d'utiliser l'engagement il essaye d'envoyer à la fonctionnalité idéale ici et la fonctionnalité idéale est confus puisqu'il n'y a pas définition de on lui dit on lui donne un engagement mais à la place il s'attend à avoir un message donc on peut essayer d'extraire le message à partir de cet engagement et ça c'est ce que le simulateur devrait faire mais ça casserait la définition de sécurité de notre système d'engagement donc il ne veut pas y avoir un système à base d'engagement qui réalise cette fonctionnalité idéale et ça c'est un problème puisqu'on pense qu'il y a des systèmes d'engagement sécurisés donc la solution la plus claire et la plus raisonnable ce serait d'introduire peut-être une forme de backdoor pardon je veux dire une chaîne de référence commune une chaîne de référence commune c'est une valeur aléatoire choisie par une distribution donnée elle est choisie honnêtement mais elle existe uniquement dans le monde réel donc partons du principe que notre chaîne de référence commune ici est une clé et qu'on a un générateur telle que la clé publique est choisie aléatoirement et que personne ne connaît la clé secrète donc Alice peut maintenant utiliser ce système d'engagement comme avant elle détermine un message 0 elle s'engage sur ce message avec la clé publique elle prouve avec de la cryptographie un peu magique que le message en C1 et C2 c'est le même message et ensuite elle utilise ça comme son engagement le simulateur maintenant peut simplement prendre cette chaîne de référence commune mais il peut pas l'apprendre d'une distribution aléatoire à la place il va l'apprendre à partir d'un algorithme de génération de clé normal et donc dans ce cas-là il connaît la clé secrète et donc il prend pas un nombre aléatoire mais à la place il les choisit de telle façon qu'il connaît X tel que j'épouse en 6 CH et maintenant il est capable d'extraire des bits du message à partir de l'engagement et il peut les mettre dans cette fonctionnalité idéale donc en utilisant cette backdoor je veux dire cette chaîne de référence commune ça nous permet de prouver la sécurité de ce système alors peut-être que quand la NSA nous a donné CDRBG ce n'était pas pour nous espionner c'était simplement un outil pour prouver l'extractabilité de ces scénarios mais peut-être que non alors comme on l'a dit ces chaînes de référence communes c'est globalement des backdoor c'est très dur de convaincre les gens qui sont gérés honnêtement les systèmes les plus sophistiqués dans lesquels on voit des gens utiliser des chaînes de référence communes c'est par exemple dans la cartographie CKH et dans ce cas-là il y a eu des efforts importants pour créer une chaîne de référence commune probablement gérés honnêtement mais bien sûr c'est impossible de distinguer et il faut mathématiquement que ce soit impossible de distinguer si c'est le cas ou non donc il y a un lien si vous regardez nos slides, vous regardez la vidéo sur ces propriétés-là c'est très intéressant dans d'autres scénarios vous pouvez peut-être vous en sortir en sortant des nombres de votre chapeau par exemple je ne veux pas utiliser d'autres choses que ces genres de nombres par exemple vous avez un système de commitment de Peterson dans lequel vous avez toujours besoin d'une forme de de plausibilité sur les nombres utilisant votre algorithme et pour ça ce qu'on peut faire à la place c'est qu'on prend les éléments de notre nombre g et on le hache avec cha3 par exemple et c'est plausible que ce genre d'approche soit sécurisé mais c'est une autre forme de chaîne de référence commune donc maintenant qu'on a dit ça il est temps de conclure premièrement et ça il faut dire dans toutes les présentations sur la cryptographie s'il vous plaît ne créez pas votre propre système cryptographique c'est très très probable que vous allez faire des erreurs il nous manque énormément de détails dans ces présentations et même si vous arrivez à implémenter un système d'une façon sécurisé pour quelques définitions de sécurité ça ne veut pas dire que votre définition de la sécurité c'est celle que vous voulez de plus la sécurité c'est difficile et si vous en faites s'il vous plaît s'il vous plaît utilisez des preuves et soyez conscient des limites de ce que vous avez prouvé aussi le modèle de l'oracle éleatoire c'est peut-être un système d'un cadre de preuves qui a des problèmes mais il y a des thèmes qui ont été prouvé grâce à ce système donc une heuristique comme celle-là c'est mieux que rien donc utilisez au moins ça et si vos preuves sont trop compliquées pour que d'autres gens puissent les lire elles ne sont pas forcément si utiles que ça ça c'est un gros problème avec les preuves générées par ordinateur c'est qu'elles sont souvent si compliquées que souvent personne ne les lit et que du coup on peut quand même avoir un argument qui dit qu'elles sont pas aussi convaincantes que ça peut-être moins convaincante que dès qu'ils utilisent un modèle d'oracle parce qu'elles ne sont pas on ne peut pas les comprendre et avec ça on va passer aux questions merci pour votre attention alors nous avons des micros dans la salle pour les questions et si vous écoutez la traduction en direct vous pouvez aussi poser vos questions sur ircacint35c3old première question de l'internet est-ce que vous pouvez élaborer un peu plus d'intenture pourquoi pardon j'ai pas compris la question la réponse alors les gens passent beaucoup de temps pour regarder ce problème en particulier et la confiance émerge du fait qu'on a regardé énormément des systèmes de chiffrement sans trouver d'attaque ça augmente la probabilité que ce système soit sécurisé c'est un autre argument qu'on peut faire qui est ce qu'on appelle les modèles de groupes génériques et ça c'est une notion formalisée d'un concept mathématique qu'on a utilisé ici alors je vous ai uniquement montré uniquement une définition très mathématique du système L-Gamal mais on peut aussi regarder ce système en pensant à la tuerie des groupes donc ça simplifie les choses mais ça demande un peu plus de connaissance préalable et ici vous pouvez voir comment est-ce que ça correspond à ce modèle générique de groupes donc en utilisant le modèle générique de groupes on peut voir qu'il n'y a pas d'attaque qui utilise la structure même du groupe pour être prouvé et donc ça c'est des attaques le fait qu'il n'y ait pas d'attaque est probablement dû au fait que Diffie-Hellman est sécurisé mais ça ne prouve pas que Diffie-Hellman est sécurisé par exemple la raison pour laquelle on veut utiliser des cours beléptiques c'est parce qu'on pense que c'est équivalent à ces notions de groupes génériques et si on utilise des groupes tellement gros avec des nombres au premier dedans c'est parce qu'il y a plus de structure dedans donc c'est un bon argument mais ce n'est pas un argument qui est parfait et bien sûr si on a des ordinateurs quantiques suffisamment puissants plus rien ne marche Hey, thanks for the talk Alors merci pour cette présentation ma question est est-ce que vous pensez que à faire une preuve en utilisant le modèle doracle c'est plus utile c'est utile pour pouvoir ensuite créer une preuve qui elle n'utiliserait pas un oracle aléatoire et est-ce que c'est quelque chose qui a été fait ou qui arrive alors oui souvent vous commencez par prouver votre système en utilisant le modèle et ensuite vous essayez d'enlever cet aspect mais bon on a vu les résultats très souvent il faut changer des choses dans votre protocole pour pouvoir supprimer le modèle de l'oracle aléatoire et ça ajoute de la complexité ça construit le système de façon plus compliquée et ça peut introduire des propriétés un peu étranges qu'est-ce qu'il y a sur le prochain slide alors ça c'est le slide bonus et on va parler des niveaux de sécurité si vous voulez parler de ça je crois qu'on a encore un petit peu de temps 4 minutes ah c'est suffisant alors on rencontre parfois l'idée qu'un certain niveau de sécurité peut être suffisant ou insuffisant et donc c'est pas si facile de penser comme ça parce qu'il y a des types de sécurité qui sont différents même pour la même définition très souvent le modèle de sécurité auquel les gens pensent c'est ce qu'on appelle la sécurité computationnelle globalement c'est que si je donne à l'attaquant une certaine quantité de capacité de calcul l'attaquant ne devrait pas être capable de brute-forcer la clé à partir de ça que les idées des clés de 128 bits ou de 50 bits ou de 1024 bits sont terminées l'idée c'est en partant d'un matériel réaliste combien d'énergie il faudrait pour pouvoir factoriser la clé et on part du principe que s'il faudrait supprimer de l'énergie pour faire bouillir les océans c'est probablement pas un problème il y a aussi des systèmes qui fournissent une sécurité dites statistiques et de toute façon c'est beaucoup mieux parce que dans ce cas là la question n'est pas combien de puissance de calcul l'adversaire a mais combien de chance il a et si on y pense de notre façon la puissance de calcul doit aussi prendre ça en compte si on a une chance sur mille de brute-forcer une clé en utilisant de puissance 128 opération il faut toujours factoriser cette chance de 1 sur mille donc la chance statistique les paramètres de la chance statistique peuvent être beaucoup plus petits et si on a 40 vides de sécurité statistique c'est pas super mais c'est pas aussi mauvais que ce que ça peut sembler enfin il y a la sécurité dites parfaite qui est même si l'attaquant a toutes les puissances de calcul du monde et toute la chance du monde et l'attaquant a une chance absolument parfaite il est toujours incapable de casser cette sécurité le système le plus populaire là dessus c'est ce qu'on appelle les one time pad qui dit que pour tout plein texte possible il y a une clé qui va chiffrer la clé privée qui va chiffrer le clair en texte chiffré donc c'est pas forcément très pratique mais c'est parfaitement sécurisé pas d'autres questions et bien dans ce cas tenir d'appellissement pour le cas et Florian s'il vous plaît