<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media = "http://search.yahoo.com/mrss/" version="2.0">
  <channel>
    <title>Bases de cryptographie on Limawi Blog</title>
    <link>https://blog.limawi.io/fr-fr/series/bases-de-cryptographie/</link>
    <image>
      <url>https://blog.limawi.io/logo.png</url>
      <title>Bases de cryptographie on Limawi Blog</title>
      <link>https://blog.limawi.io/fr-fr/series/bases-de-cryptographie/</link>
    </image>
    <description>Du cloud, du devops et des outils pour tout ça.</description>
    <language>fr-fr</language>
    <lastBuildDate>Thu, 14 Mar 2019 14:17:48 +0000</lastBuildDate><atom:link href="https://blog.limawi.io/fr-fr/series/bases-de-cryptographie/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Un exemple de Brute force</title>
      <link>https://blog.limawi.io/fr-fr/posts/un-exemple-de-brute-force/</link>
      <pubDate>Thu, 14 Mar 2019 14:17:48 +0000</pubDate>
      <guid>https://blog.limawi.io/fr-fr/posts/un-exemple-de-brute-force/</guid>
      <description>Voici un modèle d&#39;attaque par force brute. Vous pouvez voir son évolution sur Twitter.</description>
      <content:encoded><![CDATA[<p>Le modèle utilisé dans les tweets disponibles ici est le 
<a href="https://twitter.com/search?q=%40Kookati_fr%20AND%20%23Bruteforce&amp;src=typed_query" target="_blank">suivant</a>.</p>
<h2 id="les-algorithmes-testés">Les algorithmes testés</h2>
<h3 id="aes-256">AES-256</h3>
<p>C’est le standard actuel pour la cryptographie symétrique. AES est l’acronyme de « Advanced Encryption Standard ».
Il existe sous 3 variantes, 128, 192 et 256 bits.</p>
<p>Le nombre de combinaisons à tester est donc de</p>
<p>$$
2^{256}
$$</p>
<p>Si vous faites un petit calcul, vous comprenez que la barre de progression restera proche de 0 pendant un certain temps (si on peut qualifier ce temps comme ça).</p>
<h3 id="un-algorithme-sur-mesure">Un algorithme sur mesure</h3>
<p>Le deuxième algorithme est un algorithme imaginaire qui fait 93 bits. C’est la bonne longueur pour voir une progression significative de l’attaque.</p>
<p>Le nombre de combinaisons à tester est donc de</p>
<p>$$
2^{93}
$$</p>
<p>Cet algorithme permet de voir la barre de progression évoluer et arriver à son terme dans un délai raisonnable.</p>
<h2 id="la-puissance-de-calcul-employée">La puissance de calcul employée</h2>
<p>Les premiers 27 supercalculateurs du monde de novembre 2018, tirés du top500.</p>
<p>Pourquoi 27 ? Parce que le 28 et 29ème sont étrangement similaires et je n’ai pour l’instant pas la réponse
sur le fait de savoir si c’est une erreur ou si ils existent réellement en 2 copies conformes. 
<a href="https://twitter.com/Limawi_en/status/1105768032239054848" target="_blank">J’espère une réponse</a>.</p>
<p>Cela fait une puissance de calcul de</p>
<p>$$
1.001246 \times 10^{18} \text{ flops}
$$</p>
<p>(un peu plus d’un exaflop).</p>
<h2 id="lattaque-menée">L’attaque menée</h2>
<p>L’attaque est une brute force pure. Il n’y a pas de tentatives de réductions, de canaux auxiliaires, etc.…</p>
<p>On essaie toutes les combinaisons. Simplement, stupidement.</p>
<p>On considère que c’est un succès quand 50 % des tests sont effectués (50 % de la barre de chargement).</p>
<h2 id="le-point-de-départ">Le point de départ</h2>
<p>L’attaque a commencé le premier janvier 2019 à 00:00 UTC (timestamp UNIX : 1546300800).</p>
<p>Sources :</p>
<ul>
<li>
<a href="https://www.top500.org/" target="_blank">https://www.top500.org/</a></li>
<li>
<a href="https://www.top500.org/lists/2018/11/" target="_blank">https://www.top500.org/lists/2018/11/</a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Le masque jetable</title>
      <link>https://blog.limawi.io/fr-fr/posts/le-masque-jetable/</link>
      <pubDate>Tue, 22 Jan 2019 18:00:25 +0000</pubDate>
      <guid>https://blog.limawi.io/fr-fr/posts/le-masque-jetable/</guid>
      <description>Ce chiffrement est théoriquement impossible à casser. Il est, par contre, essentiellement théorique car il reste très complexe à réaliser.</description>
      <content:encoded><![CDATA[<h2 id="un-peu-dhistoire">Un peu d’histoire</h2>
<p>Le masque jetable est un chiffrement qui a été inventé par Gilbert Vernam, un ingénieur américain de AT&amp;T Bell Labs, en 1917.</p>
<div class="col-md-12">
<video controls  preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-1-la-perfection-ou-le-masque-jetable/videos/cryptotrucs-episode-1-la-perfection-ou-le-masque-jetable.png" playsinline
class="html-video ratio ratio-16x9"><source src="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-1-la-perfection-ou-le-masque-jetable/videos/cryptotrucs-episode-1-la-perfection-ou-le-masque-jetable.webm" type="video/webm">
    <track label="Français" kind="captions" srclang="fr-fr" src="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-1-la-perfection-ou-le-masque-jetable/videos/cryptotrucs-episode-1-la-perfection-ou-le-masque-jetable.vtt" default>
</video>
</div>
<p>Le nom « <em>masque jetable</em> » est la transcription française du terme originel américain « <em>One time Pad</em> » (OTP), la traduction mot à mot étant « <em>tampon à usage unique</em> » (pas de jeu de mots pourris, s’il vous plaît).</p>
<p>Il est basé sur une technique de chiffrement beaucoup plus ancienne appelée « 
<a href="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/">le chiffre de Vigenère</a> ».</p>
<p>Le masque jetable a encore été perfectionné par le général américain Joseph Mauborgne, qui inclut le caractère aléatoire de la clé de chiffrement.</p>
<p>Il consiste à chiffrer un message avec une clé en additionnant la clé au message, élément par élément.
La clé ne doit être utilisée qu’une seule fois (d’où le jetable).
Pour déchiffrer, on soustrait la clé au message.</p>
<p>Bon, l’histoire c’est bien mais dans les faits, comment ça marche ?</p>
<h2 id="fonctionnement">Fonctionnement</h2>
<p>Pour pouvoir comprendre le masque jetable il faut déjà maîtriser (ou du moins comprendre) 
<a href="https://blog.limawi.io/fr-fr/posts/la-congruence-le-modulo/">la congruence</a> (ou modulo).</p>
<h3 id="la-base">La base</h3>
<p>On va commencer en utilisant des textes non aléatoires pour les clés. Attention, c’est juste histoire de démarrer doucement parce que là on est 0 au niveau sécurité.</p>
<p>On va prendre un texte de Bigflo&amp;Oli comme message que l’on veut chiffrer et un texte de Georges Brassens comme clé.</p>
<p>Le message est tiré de « Alors alors » :</p>
<p>« Alors alors, On devait faire le tour de la Terre »</p>
<p>La clé est tirée de « Bancs publics » :</p>
<p>« Les gens qui voient de travers pensent que les bancs verts »</p>
<p>Vous avez le modulo en tête ? Bon, on va commencer par affecter un nombre à chaque lettre de notre alphabet :</p>
<pre><code>A=0, B=1, C=2, D=3, E=4, F=5, G=6, H=7, I=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25
</code></pre>
<p>Donc, pour notre alphabet de 26 lettres on a les 26 premiers chiffres.</p>
<h3 id="chiffrement">Chiffrement</h3>
<p>Pour chiffrer, c’est simple, on additionne les lettres face à face.
« Additionner des lettres, mais t’es perché ? » me direz vous, mais c’est pour ça qu’on leur a donné un équivalent en nombre, faut suivre un peu.
Comme on n’a pas affecté de valeur à la virgule, on va l’enlever.</p>
<p>Allez, c’est parti :</p>
<pre><code>« Alors alors On devait faire le tour de la Terre »

+

« Les gens qui voient de travers pensent que les bancs verts »
</code></pre>
<p>Le « A » de « Alors » + le « L » de « Les » = A + L = 0 + 11 = 11 = L</p>
<p>Ensuite le « l » + le « e » = l + e = 11 + 4 = 15 = p</p>
<p>Donc, petit à petit :</p>
<pre><code>« Alors alors On devait faire le tour de la Terre »

+ + +

« Les gens qui voient de travers pensent que les bancs verts »

= = =

0 11 14

+ + +

11 4 18

= = =

11 15 32

= = =

L p ?
</code></pre>
<p>Effectivement pour l’addition de « o » et « s », on trouve 14 + 18 = 32 et là on a un soucis, on a pas de lettre avec une valeur de 32.</p>
<p>Mais, rappelez vous, la congruence (le modulo, tout ça, tout ça).</p>
<p>Vu qu’on a que 26 lettres, on va utiliser un modulo 26, histoire de rester dans ces valeurs.</p>
<p>Un petit coup de modulo 26 sur 32, ça fait</p>
<p>$$
32 \pmod{26} \equiv 32 -26 \pmod{26} \equiv 6 \pmod{26}
$$</p>
<p>Et 6, on a, c’est la lettre G.</p>
<p>Du coup, on peut finir notre calcul :</p>
<pre><code>« Alors alors On devait faire le tour de la Terre »

+ + + ...

« Les gens qui voient de travers pensent que les bancs verts »

= = =

0 11 14

+ + +

11 4 18

= = =

11 15 32 mod(26)≡ 6 mod(26)

= = =

L p g …
</code></pre>
<p>Au final :</p>
<pre><code>« Alors alors On devait faire le tour de la Terre »

+

« Les gens qui voient de travers pensent que les bancs verts »

=

« Lpgxw ndela Jb liitlx yrimi cw ishj hr eq Nicvw »
</code></pre>
<p>On a notre message chiffré.</p>
<h3 id="déchiffrement">Déchiffrement</h3>
<p>Du coup, pour déchiffrer, on fait le contraire, on soustrait la clé au message chiffré.</p>
<p>On a le message chiffré « Lpgxw ndela Jb liitlx yrimi cw ishj hr eq Nicvw » et la clé « Les gens qui voient de travers pensent que les bancs verts ».</p>
<p>Donc :</p>
<pre><code>« Lpgxw ndela Jb liitlx yrimi cw ishj hr eq Nicvw »

- - -

« Les gens qui voient de travers pensent que les bancs verts »

= = =

11 15 6

- - -

11 4 18

= = =

0 11 -12

= = =

A l ?
</code></pre>
<p>Donc, même problème qu’au chiffrement, on a pas de lettre qui corresponde à -12.</p>
<p>On applique le modulo 26 :</p>
<p>$$
-12 \pmod{26} \equiv -12 + 26 \pmod{26} \equiv 14 \pmod{26} \equiv o
$$</p>
<p>On continue le calcul et on retrouve :</p>
<pre><code>« Lpgxw ndela Jb liitlx yrimi cw ishj hr eq Nicvw »

- - - ...

« Les gens qui voient de travers pensent que les bancs verts »

=

« Alors alors On devait faire le tour de la Terre »
</code></pre>
<h3 id="mauborgne-est-dans-la-place">Mauborgne est dans la place</h3>
<p>Bon, ça c’est bien joli, mais c’est pas très sûr. Pour renforcer la sécurité on va écouter le général Mauborgne et utiliser une clé aléatoire (ou du moins plus aléatoire).</p>
<p>Après avoir mis un générateur pseudo-aléatoire (oui, je sais, un terme incompréhensible, on y reviendra dans un article futur) dans mon ordinateur,
roulé ma tête sur le clavier et fait marcher le chat dessus pour générer de l’entropie (oui, un autre terme incompréhensible), j’obtiens la clé suivante :</p>
<pre><code>« snchfzrhqjlnveivpyonrkudrpqtpxptfwrildof »
</code></pre>
<p>On va chiffrer le message suivant, toujours de Bigflo&amp;Oli, extrait de « Dommage » :</p>
<p>« Il croisait cette même fille, avec son doux parfum »</p>
<h3 id="chiffrement-1">Chiffrement</h3>
<p>Et c’est reparti :</p>
<pre><code>« Il croisait cette même fille, avec son doux parfum »

+ +

« snchfzrhqjlnveivpyonrkudrpqtpxptfwrildof »

= =

8 11

+ +

18 13

≡ =

0 mod(26) 24

=

a y …
</code></pre>
<p>On arrive au message chiffré suivant :</p>
<pre><code>« Il croisait cette même fille, avec son doux parfum »

+

« snchfzrhqjlnveivpyonrkudrpqtpxptfwrildof »

=

« ayeythjhycnroxmhtksszvfhrkuvhlcwtqoxlutze »
</code></pre>
<h3 id="déchiffrement-1">Déchiffrement</h3>
<p>Je crois qu’à ce stade vous avez compris. Un petit exemple alors.</p>
<p>Toujours avec notre modulo(26), déchiffrez ce message :</p>
<pre><code>« irszlg k wiu ladw »
</code></pre>
<p>avec la clé :</p>
<pre><code>« xjgzpyisqbjmplcxhwfpijqrstghighnhylshqza »
</code></pre>
<p>Et tweetez, postez le résultat.</p>
<h3 id="le-che-level">Le Che level</h3>
<p>Bon, jusqu’à présent on était dans le mignon, maintenant on attaque le dur.</p>
<p>Che Guevara et Fidel Castro communiquaient avec une technique de cryptographie basée sur le masque jetable.
Cependant, il y avait une petite complexité supplémentaire.</p>
<p>Ils n’utilisaient pas une suite de nombres comme nous l’avons fait, mais ils avaient affecté des nombres arbitrairement aux lettres de l’alphabet.</p>
<p>Voici leur substitution :</p>
<pre><code>A=6, B=38, C=32, D=4, E=8, F=30, G=36, H=34, I=39, J=31, K=78, L=72, M=70, N=76, O=9, P=79, Q=71, R=58, S=2, T=0, U=52, V=50, W=56, X=54, Y=1, Z=59
</code></pre>
<p>Vous allez me dire « mais comment on fait une congruence avec ça ? », attendez un peu, ça vient.</p>
<p>En fait, ils ne transmettaient pas des lettres mais des chiffres et la clé était elle-même composée de chiffres. Ils utilisaient le modulo le plus connu (celui qu’on utilise sans savoir), le modulo 10.</p>
<p>Alors, comment faisaient-ils ? On va prendre un exemple.</p>
<h3 id="chiffrement-2">Chiffrement</h3>
<p>On veut chiffrer le message suivant :</p>
<p>« J’aime pas les framboises » (c’est un exemple, moi j’aime bien les framboises)</p>
<p>On remplace les lettres pas leur nombres :</p>
<p>« J A I M E P A S L E S F R A M B O I S E S » devient « 31 6 39 70 8 79 6 2 72 8 2 30 58 6 70 38 9 39 2 8 2 »</p>
<p>On va chiffrer ce message avec la clé :</p>
<pre><code>« 4317892093088287991744997181628757157172 »
</code></pre>
<p>Pour ça, on additionne les chiffres face à face et on applique le modulo 10. Pour se faciliter la tâche, ils regroupaient d’abord les chiffres par paquet de 5.</p>
<p>Donc, le message :</p>
<pre><code>« 31 6 39 70 8 79 6 2 72 8 2 30 58 6 70 38 9 39 2 8 2 »
</code></pre>
<p>devient :</p>
<pre><code>« 31639 70879 62728 23058 67038 93928 2 »
</code></pre>
<p>On additionne avec le modulo 10 :</p>
<pre><code>« 31639 70879 62728 23058 67038 93928 2 »

+

« 43178 92093 08828 79917 44997 18162 87571 57172 »

=

747 (7+3 ≡ 10 mod(10) ≡ 0) …

=

74707 62862 60546 92965 01925 01080 0
</code></pre>
<p>Le message chiffré est donc :</p>
<pre><code>« 74707 62862 60546 92965 01925 01080 0 »
</code></pre>
<h3 id="déchiffrement-2">Déchiffrement</h3>
<p>On soustrait la clé au message avec le modulo 10 :</p>
<pre><code>« 74707 62862 60546 92965 01925 01080 0 »

-

« 43178 92093 08828 79917 44997 18162 87571 57172 »

=

« 31639 70879 62728 23058 67038 93928 2 »
</code></pre>
<p>Et ensuite, on transforme les nombres dans leur lettre respective.
Et là, vous vous dites « Mais comment ils peuvent faire la différence entre la lettre de valeur 2 et la lettre de valeur 23 ?
Comment ils peuvent savoir si c’est un nombre à 2 chiffres ou à 1 ? ».</p>
<p>Très simple, le chiffre utilisé pour les nombres à 1 chiffre n’est pas utilisé pour démarrer un nombre à 2 chiffres.</p>
<p>En fait, si on tombe sur 3, 7 ou 5, on sait que c’est un nombre à 2 chiffres et donc qu’il faut regrouper le chiffre suivant avec lui.</p>
<p>Dans notre cas, on commence avec un 3, donc on sait qu’on a un nombre à 2 chiffres, on colle le 1 au 3.</p>
<pre><code>« 31 639 70879 62728 23058 67038 93928 2 »
</code></pre>
<p>Ensuite, le 6 n’est pas dans (3,7,5), donc c’est un nombre à un seul chiffre :</p>
<pre><code>« 31 6 39 70879 62728 23058 67038 93928 2 »
</code></pre>
<p>Et ainsi de suite :</p>
<pre><code>« 31 6 39 70 8 79 6 2 72 8 2 30 58 6 70 38 9 39 2 8 2 »
</code></pre>
<p>On remplace enfin les nombres par leurs lettres :</p>
<pre><code>« J A I M E P A S L E S F R A M B O I S E S »
</code></pre>
<p>Voilà !</p>
<h2 id="la-perfection-du-chiffrement">La perfection du chiffrement</h2>
<p>Claude Shannon (encore du « <em>name dropping</em> » mais celui-là c’est le vaisseau amiral des cryptographes) prouve mathématiquement
que le masque jetable est considéré cryptographiquement sûr, ou inconditionnellement sûr, durant la Seconde guerre mondiale.
C’est à dire que le système ne peut pas être percé même si l’adversaire a des moyens illimités ou un temps illimité, tant qu’il ne connaît pas la clé secrète.</p>
<p>Claude Shannon prouve que le masque jetable est « à secret parfait », c’est à dire que si on a un texte chiffré par le masque jetable sous les yeux,
il n’y a absolument aucun moyen de deviner quoi que ce soit sur le texte d’origine.</p>
<p>Cela veut dire qu’il est aussi résistant à une attaque par force brute.
Si vous essayez toutes les clés de l’univers vous tomberez sur tout les messages de l’univers donc vous n’aurez aucun moyen de savoir lequel est le bon.</p>
<p>Je ne vais pas vous refaire les démonstrations mathématiques ici. Cet article a un but de large diffusion facilement accessible.</p>
<p>Mais pour réaliser cette perfection, il y a quelques problèmes.</p>
<h2 id="les-difficultés">Les difficultés</h2>
<p>Les difficultés à surmonter pour réaliser un parfait masque jetable sont les suivantes :</p>
<h3 id="la-taille-et-la-quantité-des-clés">La taille et la quantité des clés</h3>
<p>Pour chaque échange il faut une nouvelle clé. Pour chaque échange, c’est à dire, chaque personne avec qui vous échangez et chaque texte que vous lui envoyez.</p>
<p>Donc, vous échangez 2 messages avec 2 personnes, ça fait 4 clés. 3 messages avec 3 personnes, 9 clés&hellip;</p>
<p>De plus, la clé doit être plus longue que le message.</p>
<p>Car si elle est plus courte et qu’on la répète pour finir le chiffrement,
on augmente la probabilité d’apparition de certaines lettres et on peut voir des motifs apparaître donnant des indices sur le message.
Ce problème est semblable à la nécessité de l’aléatoire pour créer les clés.</p>
<p>Cela pose des problèmes de stockage des clés de façon sécurisée, le masque s’effondrant si la clé est récupérée par l’adversaire.</p>
<h3 id="laspect-aléatoire-des-clés">L’aspect aléatoire des clés</h3>
<p>En français, la lettre « e » est la lettre la plus couramment utilisée, puis c’est « a », puis « s »…</p>
<p>Et des motifs comme « le », « les » sont fréquents. La clé, en se répétant, augmente les probabilités de chiffrer de la même façon des mêmes motifs.</p>
<p>L’attaquant peut repérer ces motifs et parvenir à en déduire le moment où la clé est répétée.</p>
<p>Petit à petit, il peut recomposer la clé ou même faire sans.</p>
<p>Un exemple :</p>
<p>Imaginons la clé « Wesh », l’attaquant ne la connaît pas mais a trouvé que sa longueur était de 4 en analysant les fréquences de motifs récurrents.</p>
<p>Il peut découper ce texte chiffré en groupes de 4 lettres : « Uedl lsll ysfk wqfl myaz kvlp newu zsmj a » et soustraire les groupes entre eux :</p>
<pre><code>Uedl - lsll = X ? + « Wesh » - (Y ? + « Wesh ») = X ? - Y ? + « Wesh » - « Wesh »

= X ? - Y ?
</code></pre>
<p>La clé a disparu et on a deux textes qui ne sont plus aléatoires soustraits l’un à l’autre.
On analyse la fréquence d’apparition des lettres et on forme des hypothèses.
Les lettres, issues de la soustraction, les plus fréquentes ont des probabilités plus élevées d’avoir un « e » dans l’une de leurs lettres de base, etc.</p>
<p>Étape par étape, en multipliant les hypothèses, on réduit les possibilités et on peut parvenir à trouver la clé ou déchiffrer des messages sans elle.</p>
<p>En conclusion, si vous faites une analyse des fréquences en faisant tourner votre ordinateur pendant trois jours, vous obtiendrez le message suivant :</p>
<p>« Y&rsquo;a le pote condamné qui sortira en douce », toujours Bigflo&amp;Oli, extrait de « Comme d’hab »</p>
<p>Cela vous semble obscur, incompréhensible. Pas de panique, un prochain article éclaircira tout ça avec des exemples.</p>
<p>Donc, pour faire en sorte que chaque lettre ait la même probabilité d’apparaître il faut des clés générées aléatoirement.
Mais ça, c’est très compliqué à faire. On sait faire du pseudo-aléatoire mais comme son nom l’indique ce n’est pas complètement aléatoire,
les probabilités d’apparition des lettres ne sont pas exactement les mêmes.</p>
<h3 id="la-transmission-des-clés">La transmission des clés</h3>
<p>La transmission des clés n’est pas un problème pour de toutes petites clés (un article expliquera bientôt comment).</p>
<p>Mais cela devient très compliqué dés lors que les clés doivent dépasser une certaine taille
(la taille minimale est à l’heure actuelle de 4096 bits voire dans certains cas de fou fou 8192 bits, c’est à dire 1024 octets, 1ko pour les informaticiens).</p>
<p>Donc, souvent, les clés sont échangées physiquement à l’avance.
Ce n’est pas pratique et devient très compliqué pour envoyer beaucoup de messages à beaucoup d’interlocuteurs.</p>
<h3 id="lunicité-dusage">L’unicité d’usage</h3>
<p>On en revient au même problème que pour la taille des clés et l’aspect aléatoire des clés.</p>
<p>Si on réutilise une clé, on perd l’aspect aléatoire et le message chiffré est de nouveau sensible à une analyse des fréquences.</p>
<p>Le problème est plus grave encore car l’unicité d’usage suppose la destruction de la clé après utilisation
et il n’existe pas de moyen facile pour s’assurer que vos interlocuteurs ne gardent pas les clés
dans un coin au risque de se les faire voler plus tard (dans 5 ans, 10 ans…) ou ne les réutilisent pas pour d’autres messages de leur côté.</p>
<h3 id="lempoisonnement-du-message">L’empoisonnement du message</h3>
<p>Le dernier soucis possible est l’empoisonnement des clés mais cela peut être réglé assez facilement (du moins temporairement) en informatique.</p>
<p>Comme le masque jetable est insensible à la force brute (toutes les clés de l’univers donnant tous les messages de l’univers),
un attaquant peut s’amuser à modifier le message chiffré pour lui donner un sens différent.</p>
<p>Il peut aussi modifier la clé sans forcément la connaître et ainsi modifier le message en clair.</p>
<p>Exemple :</p>
<p>Reprenons notre fameux message :</p>
<pre><code>« J’aime pas les framboises »
</code></pre>
<p>que l’on chiffre avec la clé :</p>
<pre><code>« nzhtjplgpggsefirksxohsbyhkazsb »
</code></pre>
<p>en modulo 26 (donc sans l’apostrophe), on obtient :</p>
<pre><code>« N zrry rrg yef eytvqzohky »
</code></pre>
<p>L’attaquant ne connaît que ce message secret mais il peut modifier la clé de chiffrement. Il remplace donc la clé par :</p>
<pre><code>« ezjfuqjcltbmtcvihgdtgefirksxohsbyhkazsb »
</code></pre>
<p>Et ça donne le message clair suivant :</p>
<pre><code>« Jaimebienlesfraisiers »
</code></pre>
<p>Donc, pas du tout le message original.</p>
<p>Pour éviter ça, en informatique, on peut signer et faire un hachage du message et des clés
et donc un utilisateur peut vérifier que le message qu’il reçoit est bien conçu par la bonne clé et que la clé qu’il utilise est toujours la bonne.</p>
<p>Nous reviendrons sur le fonctionnement d’une signature et d’un hachage dans de prochains articles.</p>
<p>Je crois qu’on a déjà largement dépassé les 2000 mots. On va s’arrêter là.</p>]]></content:encoded>
    </item>
    <item>
      <title>Le chiffre de Vigenère</title>
      <link>https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/</link>
      <pubDate>Tue, 15 Jan 2019 18:00:10 +0000</pubDate>
      <guid>https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/</guid>
      <description>Le chiffre de Vigenère est une évolution du chiffre de César introduisant la notion de clé.</description>
      <content:encoded><![CDATA[<p>Pour l&rsquo;énigme de l&rsquo;épisode 3 de Cryptotrucs, allez en bas d&rsquo;article.</p>
<h2 id="un-peu-dhistoire">Un peu d’histoire</h2>
<p>Contrairement à ce que suggère son appellation le chiffre de Vigenère semble avoir été conçu par Giovan Battista Bellaso, un cryptographe italien du 16ème siècle.</p>
<p>Malgré tout, c’est le chiffre de Vigenère qui restera et non celui de Bellaso.</p>
<p>Blaise de Vigenère présente son chiffrement 20 ans après Bellaso avec des évolutions par rapport à celui-ci.</p>
<p>On nomme cette méthode de chiffrement Vigenère à partir du 19ème siècle sans se soucier de Bellaso. De plus Bellaso a été rapidement oublié au profit de Porta.</p>
<p>Plein de noms. Ah, l’histoire !</p>
<p>Bien sûr, ce chiffre n’est pas sûr et a été cassé dès le 19ème siècle.</p>
<div class="col-md-12">
<video controls  preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar.png" playsinline
class="html-video ratio ratio-16x9"><source src="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar.webm" type="video/webm">
    <track label="Français" kind="captions" srclang="fr-fr" src="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar.vtt" default>
</video>
</div>
<h2 id="la-clé-à-la-place-du-décalage">La clé à la place du décalage</h2>
<p>Le chiffre de Vigenère introduit une grande innovation par rapport au 
<a href="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/">chiffre de César</a> : la notion de clé.</p>
<p>Cette différence place ce chiffrement comme polyalphabétique et non plus monoalphabétique.
On n’a plus « une lettre en clair donne une, et seulement une, lettre chiffrée » mais on peut avoir une lettre en clair
qui donne deux lettres chiffrées différentes et une lettre chiffrée qui peut venir de deux lettres en clair différentes.</p>
<p>On utilise donc plusieurs alphabets de substitution (différents décalages de lettres dans un même message) contrairement au chiffre de César. D’où le mot « polyalphabétique ».</p>
<p>Les règles de substitution (comment on passe d’un alphabet à l’autre) sont données par les lettres de la clé et une table de substitution.</p>
<p>Vous n’avez pas tout compris ? On va illustrer ça par des exemples dans les chapitres suivants, ne vous inquiétez pas.</p>
<p>De plus, un autre article reviendra sur la classification des chiffrements.</p>
<h2 id="le-chiffre-lui-même">Le chiffre lui-même</h2>
<p>On entre donc dans le vif du sujet. Il y a deux façons de se représenter le chiffre de Vigenère le plus classique (avec les variantes, c’est une autre histoire).</p>
<h3 id="représentation-par-table">Représentation par table</h3>
<p>Pour la représentation par table, on a besoin d’une table (oui, oui), ou plutôt d’un tableau de substitution. Le voici :</p>

<figure class="figure text-center">
  <img src="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/images/table-de-vigenere.png" class="figure-img img-fluid rounded" alt="En colonnes le message en clair, en lignes la clé">
  <figcaption class="figure-caption"><p>Table de Vigenère</p>
    <small>En colonnes le message en clair, en lignes la clé</small>
  </figcaption>
</figure>

<p>Ça vous semble touffu mais ça ne l’est pas tant que ça.
Si vous regardez les lignes de la table, vous voyez l’alphabet latin avec un décalage d’une lettre par ligne.
De même, si vous regardez les colonnes.</p>
<p>Le chiffre consiste à prendre la lettre à l’intersection de la lettre du message en clair (les colonnes) et la lettre de la clé (les lignes).
Cette lettre à l’intersection est celle du message chiffré.</p>
<p>Exemple :</p>
<h4 id="chiffrement">Chiffrement</h4>
<p>Prenons le message : « J&rsquo;ai plaqué mon chêne » (extrait de « Auprès de mon arbre » de Georges Brassens)</p>
<p>Et la clé : « Una mattina » (extrait de « Bella Ciao »)</p>
<p>On regarde l’intersection de chaque lettre :</p>
<p>La colonne « J » et la ligne « U » donnent « D »,</p>
<p>la colonne « a » (on oublie l’apostrophe pour l’instant) et la ligne « n » donnent « n »,</p>
<p>la colonne « i » et la ligne « a » donnent « i »,</p>
<p>etc.</p>
<p>Si le message dépasse la clé en longueur, on répète la clé. On considère le « ê » et le « é » comme un « e ».</p>
<p>On obtient donc :</p>
<p>« D ni bltjcr mia ctegx »</p>
<h4 id="déchiffrement">Déchiffrement</h4>
<p>Pour le déchiffrement, on regarde pour chaque ligne, correspondant à la lettre de la clé,
où se situe la lettre du message chiffré et on prend la lettre en haut de la colonne correspondante qui est celle du message en clair.</p>
<p>Donc, en reprenant la clé : « Una mattina »</p>
<p>Et le message chiffré : « D ni bltjcr mia ctegx »</p>
<p>Dans la ligne « U », la lettre « D » est à la dixième position, donc la colonne « J »,</p>
<p>dans la ligne « n », la lettre « n » correspond à la première position, la colonne « a »,</p>
<p>etc.</p>
<p>On retrouve donc :</p>
<p>« J ai plaque mon chene »</p>
<h3 id="représentation-par-congruence">Représentation par congruence</h3>
<p>La deuxième représentation est la représentation mathématique, la congruence. Si ce mot ne vous dit rien, regardez 
<a href="https://blog.limawi.io/fr-fr/posts/la-congruence-le-modulo/">cet article</a>.</p>
<p>Pour utiliser la congruence, on va substituer les lettres par des chiffres. On utilise la règle suivante :</p>
<pre><code>A=0, B=1, C=2, D=3, E=4, F=5, G=6, H=7, I=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25
</code></pre>
<p>Et pour chiffrer, on additionne la clé au message. Pour déchiffrer, on soustrait la clé du message.</p>
<p>Exemple :</p>
<h4 id="chiffrement-1">Chiffrement</h4>
<p>On reprend notre message : « J’ai plaqué mon chêne »</p>
<p>Et notre clé : « Una mattina »</p>
<p>On va aligner le message et la clé (en enlevant l’apostrophe et les accents) et répéter la clé pour couvrir tout le message :</p>
<pre><code>« J ai plaque mon chene »

+

« Una mattina Una matti »

=

9

+

20

=

29
</code></pre>
<p>On n’a pas de lettre de valeur 29 (le maximum c’est 25), donc on utilise la congruence. On considère un <em>modulo</em> 26 (de 0 à 25, 26 nombres).</p>
<p>Donc,</p>
<p>$$
29 \equiv 29-26 \pmod{26} \equiv 3 \pmod{26} = D
$$</p>
<p>On peut continuer nos calculs :</p>
<pre><code>« J ai plaque mon chene »

+

« Una mattina Una matti »

=

9

+

20

=

29

≡

3 mod(26)

=

D
</code></pre>
<p>Et ainsi de suite. On retrouve le message chiffré : « D ni bltjcr mia ctegx »</p>
<h4 id="déchiffrement-1">Déchiffrement</h4>
<p>Pour déchiffrer, on soustrait la clé au message chiffré. On utilise toujours la congruence, bien sûr.</p>
<pre><code>« D ni bltjcr mia ctegx »

-

« Una mattina Una matti »

=

3

-

20

=

-17

≡

-17+26 mod(26)

≡

9 mod(26)

=

J
</code></pre>
<p>Et, de niveau, étape par étape, on retombe sur :</p>
<p>« J ai plaque mon chene »</p>
<h2 id="variantes">Variantes</h2>
<p>Le chiffre de Vigenère a connu de multiples variations. En voici quelques unes :</p>
<h3 id="le-précurseur-bellaso">Le précurseur Bellaso</h3>
<p>Avant Vigenère, il y avait eu Bellaso.
Mais le pauvre homme s’est fait piqué la vedette par un autre italien, plus connu à son époque, Giovanni Della Porta, puis par Vigenère.
Bref, du coup on parle du chiffre de Porta/Bellaso.</p>
<p>Pour ce chiffre, il faut une table que voici :</p>
<table>
<thead>
<tr>
<th>Clé</th>
<th>Substitution</th>
</tr>
</thead>
<tbody>
<tr>
<td>AB</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>N O P Q R S T U V W X Y Z</td>
</tr>
<tr>
<td>CD</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>Z N O P Q R S T U V W X Y</td>
</tr>
<tr>
<td>EF</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>Y Z N O P Q R S T U V W X</td>
</tr>
<tr>
<td>GH</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>X Y Z N O P Q R S T U V W</td>
</tr>
<tr>
<td>IJ</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>W X Y Z N O P Q R S T U V</td>
</tr>
<tr>
<td>KL</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>V W X Y Z N O P Q R S T U</td>
</tr>
<tr>
<td>MN</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>U V W X Y Z N O P Q R S T</td>
</tr>
<tr>
<td>OP</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>T U V W X Y Z N O P Q R S</td>
</tr>
<tr>
<td>QR</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>S T U V W X Y Z N O P Q R</td>
</tr>
<tr>
<td>ST</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>R S T U V W X Y Z N O P Q</td>
</tr>
<tr>
<td>UV</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>Q R S T U V W X Y Z N O P</td>
</tr>
<tr>
<td>WX</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>P Q R S T U V W X Y Z N O</td>
</tr>
<tr>
<td>YZ</td>
<td>A B C D E F G H I J K L M</td>
</tr>
<tr>
<td></td>
<td>O P Q R S T U V W X Y Z N</td>
</tr>
</tbody>
</table>
<p>Dans la colonne de gauche se trouve la lettre de la clé, et dans la colonne de droite se trouve la substitution.</p>
<p>Un petit exemple pour vous montrer comment ça fonctionne :</p>
<h4 id="chiffrement-2">Chiffrement</h4>
<p>Prenons le message suivant : « Trois Anneaux pour les Rois Elfes » (extrait du « Seigneur des anneaux » de Tolkien)</p>
<p>Avec la clé suivante : « La République Galactique » (extrait de « Starwars » de Lucas)</p>
<p>La première lettre de la clé est « L ».</p>
<p>On cherche dans la première colonne et cette lettre (« L »)est dans la sixième ligne avec « K ».</p>
<p>La première lettre du message est « T ». On cherche donc la lettre « T » dans la deuxième colonne à la sixième ligne.</p>
<p>On voit que « T » se trouve en dessous de « L » (dans les deux lignes présentes dans chaque ligne de la deuxième colonne), donc la lettre chiffrée est « L ».</p>
<p>On passe à la deuxième lettre de la clé (pour être sûr que vous suivez). C’est la lettre « a ».</p>
<p>Elle se situe à la première ligne dans la première colonne. La deuxième lettre du message en clair est « r ».</p>
<p>Dans la deuxième colonne de la première ligne, « r » est en dessous de « e », donc la lettre chiffrée est « e ».</p>
<p>Ensuite :</p>
<p>« R » : 9ème ligne : « o » devient « j »,</p>
<p>« e » : 3ème ligne : « i » devient « t » (« i » est au dessus de « t »),</p>
<p>etc.</p>
<p>Le message chiffré est donc :</p>
<p>« Lejtm qafnsem fbme xvb ijyh zyxpm »</p>
<h4 id="déchiffrement-2">Déchiffrement</h4>
<p>Vous reprenez la clé, vous retrouvez la ligne et faites la correspondance. Donc :</p>
<p>Avec la clé : « La République Galactique »</p>
<p>Et le message chiffré : « Lejtm qafnsem fbme xvb ijyh zyxpm »</p>
<p>« L » : 6ème ligne : « L » devient « T »,</p>
<p>« a » : première ligne : « e » devient « r »,</p>
<p>etc.</p>
<p>On retombe sur le message : « Trois Anneaux pour les Rois Elfes »</p>
<h3 id="beaufort">Beaufort</h3>
<p>On passe rapidement sur cette variante et la suivante. La seule différence avec Vigenère est qu’au lieu d’additionner la clé au message pour chiffrer, on soustrait le message à la clé.</p>
<p>Donc pour déchiffrer, on soustrait le message chiffré à la clé :</p>
<p>Clé – Message = Chiffré =&gt; Message = Clé – Chiffré</p>
<p>Bien sûr, c’est selon la représentation par congruence.</p>
<div class="col-md-4 offset-md-4">
<video controls title="Le chiffre de Beaufort" preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/videos/story-chiffre-de-beaufort.png" playsinline
class="html-video ratio ratio-9x16"><source src="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/videos/story-chiffre-de-beaufort.webm" type="video/webm">
</video>
<p class="text-center" >Le chiffre de Beaufort</p>
<p class="text-center" ><small>Une variante du chiffre de Vigenère</small></p>
</div>
<h3 id="variante-allemande-de-beaufort">Variante allemande de Beaufort</h3>
<p>Pour cette variante, c’est le contraire. On soustrait la clé au message pour chiffrer.</p>
<p>Et pour déchiffrer, on additionne le message chiffré à la clé :</p>
<p>Message – Clé = Chiffré =&gt; Message = Clé + Chiffré</p>
<div class="col-md-4 offset-md-4">
<video controls title="La variante allemande du chiffre de Beaufort" preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/videos/story-variante-allemande-du-chiffre-de-beaufort.png" playsinline
class="html-video ratio ratio-9x16"><source src="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-vigenere/videos/story-variante-allemande-du-chiffre-de-beaufort.webm" type="video/webm">
</video>
<p class="text-center" >La variante allemande du chiffre de Beaufort</p>
<p class="text-center" ><small>une variante de la variante du chiffre de Vigenère</small></p>
</div>
<h3 id="alphabet-désordonné">Alphabet désordonné</h3>
<p>On peut s’amuser à mettre les lettres de l’alphabet dans le désordre. Si les deux correspondants ont bien la même table, le système fonctionne.</p>
<p>Bien sûr, il faut qu’il n’y ait qu’une seule fois chaque lettre par colonne et par ligne.</p>
<p>Il faut aussi que toutes les lettres soient présentes dans toutes les colonnes et toutes les lignes.</p>
<p>Par exemple, on peut considérer ces valeurs :</p>
<pre><code>C=0, E=1, A=2, Z=3, B=4, D=5, F=6, G=7, H=8, I=9, J=10, K=11, L=12, M=13, N=14, O=15, P=16, Q=17, R=18, S=19, U=20, T=21, V=22, W=23, X=24, Y=25
</code></pre>
<h3 id="alphabet-agrandi-ou-différent">Alphabet agrandi ou différent</h3>
<p>On a travaillé sur un alphabet latin de 26 lettres mais rien n’interdit de l’agrandir pour inclure des signes supplémentaires voire d’utiliser un autre alphabet.</p>
<p>Par exemple :</p>
<pre><code>A=0, B=1, C=2, D=3, E=4, F=5, G=6, H=7, I=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25,!=26,?=27
</code></pre>
<p>Dans ce cas, on a un <em>modulo</em> 28 et non 26.</p>
<h3 id="variantes-de-bellaso">Variantes de Bellaso</h3>
<p>On a utilisé la table originale de Bellaso mais rien n’interdit de la transformer.</p>
<p>On peut très bien avoir trois lettres dans la première colonne au lieu de deux et réduire le nombre de lignes en conséquence.</p>
<p>Ou avoir un nombre de lettres différentes par ligne.</p>
<p>Ou changer les substitutions d’alphabet dans la deuxième colonne.</p>
<p>La seule chose que cette table impose est que le nombre de lettres/signes de votre alphabet soit pair pour que chaque signe ait une correspondance dans la deuxième colonne.</p>
<h2 id="faiblesses">Faiblesses</h2>
<h3 id="attaque-par-analyse-de-fréquences">Attaque par analyse de fréquences</h3>
<p>Comme rappelé au préambule historique, ce chiffre, ainsi que ses variantes, a été cassé au 19ème siècle.</p>
<p>Il souffre de la même faiblesse, même s’il est beaucoup plus résistant, que le chiffre de César.</p>
<p>Les langues n’utilisent pas les mêmes lettres avec les mêmes fréquences. Par exemple, en français, la lettre « e » est beaucoup plus utilisée que les autres.</p>
<p>Un attaquant peut se servir de cette différence de fréquences pour deviner le message ou la clé.</p>
<p>Mais contrairement au chiffre de César, il y a une étape préalable.</p>
<p>L’attaquant doit, d’abord, chercher à deviner la longueur de la clé. Cela lui permet de définir des segments de longueur égale dans le message chiffré.</p>
<p>Pour ça, il recherche des motifs dans le message chiffré. C’est à dire des groupes de trois lettres ou plus qui sont présents de manière régulière dans le message chiffré.</p>
<p>En effet, les langues ont aussi des motifs qui reviennent souvent : « les » apparaît souvent en français, par exemple.</p>
<p>La probabilité est plus forte que le même bout de la clé tombe sur un même motif du message en clair et donc chiffre de la même façon, qu’un simple phénomène aléatoire.</p>
<p>En repérant ces motifs, l’attaquant estime donc la taille de la clé et peut segmenter le message chiffré.</p>
<p>Chaque lettre du message en clair, dans le segment, étant chiffré par la même lettre de la clé, on peut revenir à l’étude de fréquences des lettres.</p>
<p>Cela vous semble obscur, incompréhensible. Pas de panique, un prochain article éclaircira tout ça avec des exemples.</p>
<p>Le chiffre de Vigenère est à mi-chemin entre le chiffre de César, dont il tire la règle de substitution, et le masque jetable, qui est l’algorithme parfait, qui n’apparaîtra qu’au début du 20ème siècle.</p>
<h2 id="énigme-de-cryptotrucs">Énigme de Cryptotrucs</h2>
<p>Le Carré de Polybe est 6x6.</p>
<p>La clé est : « les framboises savent »</p>
<p>Le message chiffré est : « 12 11 11 12 33 12 42 16 42 24 11 11 23 31 16 44 26 12 32 15 23 43 44 12 31 31 12 »</p>]]></content:encoded>
    </item>
    <item>
      <title>Le chiffre de César</title>
      <link>https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/</link>
      <pubDate>Tue, 08 Jan 2019 13:00:27 +0000</pubDate>
      <guid>https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/</guid>
      <description>Un des plus vieux chiffrements de l&#39;histoire. Il est incorrectement attribué à César et il reste très mauvais.</description>
      <content:encoded><![CDATA[<h2 id="un-peu-dhistoire">Un peu d’histoire</h2>
<p>Le chiffre de César, comme son nom ne l’indique pas, était déjà, semble-t-il, utilisé par les Spartiates, donc bien avant Jules César.</p>
<p>C’est une variation du chiffrement par décalage qui est un chiffrement par substitution. Des mots compliqués pour des concepts simples, vous verrez.</p>
<p>Auguste utilisait une autre variante du chiffre de César.</p>
<p>Il est très possible qu’il ait inspiré le chiffre de Vigenère.</p>
<div class="col-md-12">
<video controls  preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar.png" playsinline
class="html-video ratio ratio-16x9"><source src="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar.webm" type="video/webm">
    <track label="Français" kind="captions" srclang="fr-fr" src="https://blog.limawi.io/fr-fr/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar/videos/cryptotrucs-episode-2-l-histoire-ou-le-chiffre-de-cesar.vtt" default>
</video>
</div>
<h2 id="la-grosse-image-la-substitution">La grosse image : la substitution</h2>
<p>On va commencer par la notion la plus large. Le chiffrement par substitution consiste à remplacer une lettre par une autre. Tout simplement.</p>
<p>Cette technique est la plus répandue dans l’histoire et elle est différente de la permutation qui consiste à changer l’ordre des lettres dans un texte.</p>
<p>Les algorithmes modernes utilisent les deux méthodes à la fois car, seule, la substitution n’est pas cryptographiquement très sûre (sauf le cas très particulier du masque jetable).</p>
<h2 id="la-moyenne-image-le-décalage">La moyenne image : le décalage</h2>
<p>Dans les méthodes de chiffrement par substitution, la plus simple est la méthode par décalage.</p>
<p>C’est une méthode de chiffrement monoalphabétique (encore un mot compliqué pour une notion simple).
C’est à dire qu’une lettre est associée (lors du chiffrement/déchiffrement) à une autre et uniquement à cette autre.
Deux lettres différentes ne peuvent pas aboutir à une même lettre après chiffrement/déchiffrement et, de même, une lettre ne peut pas donner deux lettres différentes après chiffrement/déchiffrement.</p>
<p>Pour les mathématiciens, c’est une relation bijective.</p>
<p>La méthode par décalage consiste donc à décaler une lettre dans l’alphabet.</p>
<h2 id="la-petite-image-le-chiffre-de-césar">La petite image : le chiffre de César</h2>
<p>Le chiffre de César désigne, à l’heure actuelle, toutes ces méthodes de chiffrement par décalage mais, plus précisément, le décalage par 3.</p>
<p>Prenons l’alphabet latin, celui utilisé par César (même s’il semble qu’il préférait l’alphabet grec pour ses messages secrets) et affectons des valeurs aux lettres.</p>
<pre><code>A=0, B=1, C=2, D=3, E=4, F=5, G=6, H=7, I=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25
</code></pre>
<p>On leur applique un décalage de 3.</p>
<pre><code>A=0+3=3=D

B=1+3=4=E

…
</code></pre>
<p>Par contre, vous voyez que si on fait :</p>
<pre><code>X=23+3=26
</code></pre>
<p>et on ne sait pas ce que c’est la lettre 26, sauf si on utilise la congruence. Si ce mot vous est inconnu, lisez 
<a href="https://blog.limawi.io/fr-fr/posts/la-congruence-le-modulo/">cet article</a>.</p>
<p>On va considérer que l’alphabet latin est en <em>modulo</em> 26. Donc, si on reprend le calcul :</p>
<pre><code>X=23+3=26 ≡ 26-26 *mod*(26) ≡ 0 *mod*(26) ≡ A
</code></pre>
<p>Donc, dans le chiffre de César, A devient D, B devient E, X devient A, Y devient B, Z devient C…</p>
<p>On a décalé les lettres de 3 crans.</p>
<p>Un exemple :</p>
<p>Considérons le message : « CAVE CANEM » (« Attention au chien », en latin)</p>
<p>On applique le chiffre de César :</p>
<pre><code>« C A V E C A N E M »

=

2 0 21 4 2 0 13 4 12

+3

=

5 3 24 7 5 3 16 7 15

=

« F D Y H F D Q H P »
</code></pre>
<p>Voilà votre message chiffré. Et pour le déchiffrer on fait le contraire, on soustrait 3 aux lettres du message chiffré.</p>
<p>C’est simple, n’est ce pas. Et vous comprenez qu’on en est au degré 0 de la cryptographie.</p>
<p>Mais pour l’époque, ça paraissait suffisant.</p>
<h2 id="les-variantes">Les variantes</h2>
<p>Bien sûr, on a développé des variantes de ce chiffrement durant l’histoire.</p>
<h3 id="rot13">ROT13</h3>
<p>Cette variante consiste à faire un décalage de 13 lettres et non de 3. « ROT » est le raccourci de rotation, car un décalage avec un <em>modulo</em> peut être analysé comme une rotation.</p>
<p>Ce décalage est particulier car il est symétrique pour un alphabet de 26 lettres (13 étant la moitié de 26).
C’est à dire que si on chiffre deux fois un message avec ce décalage on retrouve le message en clair.</p>
<p>Exemple :</p>
<p>Premier chiffrement :</p>
<pre><code>« C A V E C A N E M »

=

2 0 21 4 2 0 13 4 12

+13

=

15 13 34-26 17 15 13 26-26 17 25

=

15 13 8 17 15 13 0 17 25

=

« P N I R P N A R Z »
</code></pre>
<p>Deuxième chiffrement :</p>
<pre><code>« P N I R P N A R Z »

=

15 13 8 17 15 13 0 17 25

+13

=

28-26 26-26 21 30-26 28-26 26-26 13 30-26 38-26

=

2 0 21 4 2 0 13 4 12

=

« C A V E C A N E M »
</code></pre>
<p>Tadaa, on retrouve « Cave Canem ».</p>
<div class="col-md-4 offset-md-4">
<video controls title="ROT13" preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/videos/story-rot13.png" playsinline
class="html-video ratio ratio-9x16"><source src="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/videos/story-rot13.webm" type="video/webm">
</video>
<p class="text-center" >ROT13</p>
<p class="text-center" ><small>Un chiffrement antique !</small></p>
</div>
<h3 id="auguste">Auguste</h3>
<p>J’ai dit plus haut que le chiffre de César était nul. Attendez de voir celui-là. Oubliez les <em>modulo</em>, c’est trop compliqué, et compter jusqu’à 3 c’est aussi trop compliqué, comptez jusqu’à 1, c’est très bien.</p>
<p>Auguste (le neveu de César, donc) utilisait un chiffrement par décalage de 1. Oui, vous avez bien lu, de 1. Ah et puis « z » on en fait quoi ? Rappelez-vous, pas de congruence. Donc « z » devient « aa », oui, deux « a ».</p>
<p>Dois-je vraiment vous faire un exemple ?</p>
<div class="col-md-4 offset-md-4">
<video controls title="Le chiffre d&#39;Auguste" preload="auto" width="100%" 
   poster="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/videos/story-le-chiffre-d-auguste.png" playsinline
class="html-video ratio ratio-9x16"><source src="https://blog.limawi.io/fr-fr/posts/le-chiffre-de-cesar/videos/story-le-chiffre-d-auguste.webm" type="video/webm">
</video>
<p class="text-center" >Le chiffre d&#39;Auguste</p>
<p class="text-center" ><small>Un autre chiffrement antique !</small></p>
</div>
<h3 id="avocat-cassis-cassette-k9">Avocat, Cassis, Cassette, K9</h3>
<p>Il y a, bien sûr, des chiffrements provenant de jeux de mots, inventés pour les jeux pour enfants.</p>
<p>Avocat est « <em>A vaut K</em> » donc un décalage de 10.</p>
<p>Cassis est « <em>K 6</em> », un décalage de 4 en arrière (ou 22 en avant).</p>
<p>Cassette est « <em>K 7</em> », un décalage de 3 en arrière (23 en avant).</p>
<p>K9 est prononcé en anglais et est une référence au chien robot de Dr Who (et c’est aussi une très bonne app mail pour Android…).
C’est un jeu de mots avec le mot « <em>canine</em> » bien sûr. C’est un décalage de 1 en arrière (25 en avant).</p>
<h3 id="extension-de-lalphabet">Extension de l’alphabet</h3>
<p>On peut, bien sûr, utiliser un autre alphabet que l’alphabet latin, voire prendre un ordre arbitraire de signes. Tout ce qu’il faut c’est que les signes soient ordonnés.</p>
<p>Exemple :</p>
<p>Prenons cet alphabet fictif :</p>
<pre><code>« : ; ! , t 2 5 »
</code></pre>
<p>Si on applique un incrément de 3, on a :</p>
<pre><code>« , t 2 5 : ; ! »
</code></pre>
<h2 id="la-nullité-du-truc">La nullité du truc</h2>
<p>Vous avez compris, maintenant, comme ce système était nul. Voyons deux méthodes pour casser un chiffrement fait avec cette technique.</p>
<h3 id="cassage-par-fréquences">Cassage par fréquences</h3>
<p>Chaque langue a des lettres plus fréquentes que les autres. Par exemple, en français « e » est (de loin) la lettre la plus fréquente.
Il suffit donc à un attaquant d’analyser la fréquence des signes dans le message.
Si le message chiffré contient beaucoup de « g » et que les interlocuteurs sont français alors l’attaquant peut faire l’hypothèse d’un décalage de 2 et retrouver facilement le texte original.</p>
<h3 id="cassage-par-force-brute">Cassage par force brute</h3>
<p>Pour un alphabet de 26 lettres, il y a 26 combinaisons possibles. Ce n’est franchement pas compliqué de tester toutes les combinaisons.</p>
<p>Tester toutes les combinaisons, cela s’appelle une attaque par force brute.
C’est le plus bête (le plus brut), on teste toutes les combinaisons.
Mais c’est aussi l’attaque qui demande le plus de ressources, vu qu’on teste tout.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
