cryptaffinity: Improved documentation.

git-svn-id: https://websvn.glenux.net/svn/Upoc/cryptaffinity/trunk@1333 eaee96b3-f302-0410-b096-c6cfd47f7835
This commit is contained in:
glenux 2009-04-30 08:34:14 +00:00
parent 8522e371bf
commit 0bb367c9b4
2 changed files with 54 additions and 25 deletions

View file

@ -1,3 +1,4 @@
/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */ /* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */
p.code { border: 2px dashed rgb(153, 153, 153); p.code { border: 2px dashed rgb(153, 153, 153);
@ -9,6 +10,7 @@
font-family: monospace; font-family: monospace;
} }
@media screen {
div.page { border: 2px dashed rgb(153, 153, 153); div.page { border: 2px dashed rgb(153, 153, 153);
padding: 10px; padding: 10px;
top: 10px; top: 10px;
@ -25,6 +27,7 @@
body { background-color: rgb(51, 51, 51); body { background-color: rgb(51, 51, 51);
} }
}
span.code { border: 1px dashed rgb(153, 153, 153); span.code { border: 1px dashed rgb(153, 153, 153);
background-color: rgb(204, 204, 204); background-color: rgb(204, 204, 204);

View file

@ -1,6 +1,5 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="fr-fr"> <html lang="fr-fr"><head>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
@ -12,9 +11,8 @@
<title>MiniFTPc</title>
<meta content="Glenn ROLLAND" name="author"> <title>CryptAfinity</title><meta content="Glenn ROLLAND" name="author"></head>
</head>
<body style="direction: ltr;"> <body style="direction: ltr;">
@ -60,6 +58,12 @@ CryptAfinity</a></li>
</ol> </ol>
<li><a href="#5._Documentation">Documentation</a></li> <li><a href="#5._Documentation">Documentation</a></li>
<ol>
<li><a href="#5.1._Code">Code</a></li>
<li><a href="#5.2._Principe_du_d%E9codeur_Afine">D&eacute;codeur "Afine"</a></li>
<li><a href="#5.3._Principe_du_d%E9codeur_Vigen%E8re">D&eacute;codeur "Vigen&egrave;re"</a></li>
</ol>
</ol> </ol>
@ -96,7 +100,7 @@ Auteurs</h3>
<p>CryptAfinity a <p>CryptAfinity a
&eacute;t&eacute; enti&egrave;rement &eacute;t&eacute; enti&egrave;rement
r&eacute;alis&eacute; par Glenn ROLLAND &lt;<a href="mailto:glenux@fr.st">glenux@fr.st</a>&gt; r&eacute;alis&eacute; par Glenn ROLLAND &lt;<a href="mailto:glenux@fr.st">glenux@fr.st</a>&gt; et Roland LAUR&Egrave;S &lt;<a href="mailto:shamox@mac.com">shamox@mac.com</a>&gt;
&agrave; l'occasion de travaux pratiques du cours de syst&egrave;me du &agrave; l'occasion de travaux pratiques du cours de syst&egrave;me du
Master 2 Ing&eacute;nierie Informatique - Master 2 Ing&eacute;nierie Informatique -
Syst&egrave;mes, R&eacute;seaux et Internet.</p> Syst&egrave;mes, R&eacute;seaux et Internet.</p>
@ -308,13 +312,13 @@ texte chiffr&eacute;.</td>
<h2><a name="5._Documentation"></a>5. <h2><a name="5._Documentation"></a>5.
Documentation</h2> Documentation</h2>
<h3>5.1. Code</h3> <h3><a name="5.1._Code"></a>5.1. Code</h3>
<p>Vous pouvez trouver la documentation du code de CryptAfinity dans le <p>Vous pouvez trouver la documentation du code de CryptAfinity dans le
dossier <span class="code">doc/html</span> dossier <span class="code">doc/html</span>
de l'application, ou en suivant <a href="html/index.html">ce lien</a>.</p> de l'application, ou en suivant <a href="html/index.html">ce lien</a>.</p>
<h3>5.2. Principe du "d&eacute;codeur Afine"</h3> <h3><a name="5.2._Principe_du_d&eacute;codeur_Afine"></a>5.2. Principe du "d&eacute;codeur Afine"</h3>
<p>On g&eacute;n&egrave;re l'espace des&nbsp;clefs possibles pour l'alphabet donn&eacute; en entr&eacute;e:</p> <p>On g&eacute;n&egrave;re l'espace des&nbsp;clefs possibles pour l'alphabet donn&eacute; en entr&eacute;e:</p>
@ -400,31 +404,53 @@ for (kLIt = keyList.begin(); kLIt != keyList.end(); kLIt++){<br>
}</p> }</p>
<h3>5.3. Principe du "d&eacute;codeur Vigen&egrave;re"</h3> <h3><a name="5.3._Principe_du_d&eacute;codeur_Vigen&egrave;re"></a>5.3. Principe du "d&eacute;codeur Vigen&egrave;re"</h3>
<div style="text-align: justify;">
On commence par faire r&eacute;cup&eacute;rer les groupes de carat&egrave;res qui se r&eacute;p&egrave;tent dans le texte.<br> On commence par faire r&eacute;cup&eacute;rer les groupes de carat&egrave;res qui se r&eacute;p&egrave;tent dans le texte.<br>
<br> <br>
Une fois obtenue plusieurs groupes de lettres, on regarde la distance Une fois les groupes r&eacute;p&eacute;t&eacute;s de lettres de plus
s&eacute;parrant les deux premiers groupes (note d1) puis la distance grande longueur obtenus (dans l'ordre d&eacute;croissant en fonction de
entre les deux suivant (d2). Le PGCD de d1 et d2, doit donner un la longueur), on calcule la distance
s&eacute;parant les deux premiers groupes (note d1) puis la distance
entre les deux suivant (d2). <br>
On pose K = PGCD(d1, d2). Il est fortement probable que K soit un
multiple de la longueur de la clef. L'hypoth&egrave;se sous-jacente est multiple de la longueur de la clef. L'hypoth&egrave;se sous-jacente est
que ces groupes de lettres sont issue du chiffrement des m&ecirc;mes que ces groupes de lettres sont issue du chiffrement des m&ecirc;mes
bouts de mots avec les m&ecirc;mes bouts de la clef. Si le PGCD = 1 on bouts de mots avec les m&ecirc;mes bouts de la clef. Si le K = 1 on
peut raisonnablement supposer que ce n'est pas le cas.<br> peut raisonnablement supposer que ce n'est pas le cas, et qu'il n'y a pas de r&eacute;p&eacute;titions.<br>
<br> <br>
L'&eacute;tape suivante consiste &agrave; faire une analyse de L'&eacute;tape suivante consiste &agrave; faire une analyse de
fr&eacute;quence en d&eacute;coupant le texte en un nombre de colonne fr&eacute;quence en d&eacute;coupant le texte en K&nbsp;colonnes. On
correspondant au pgcd pr&eacute;c&eacute;demment calcul&eacute;. On classe ensuite les lettres apparaissant dans les colonnes en fonction
tire de cette analyse de fr&eacute;quence, un ordre de lettre par de leur nombre d'apparitions. <br>
importance. Puis en fonction de donn&eacute;es statistiques Dans un monde utopique, il suffirait de calculer la distance entre la
pr&eacute;alables correspondant au contexte connu &agrave; prioris du lettre apparaissant le plus souvent dans la colonne, et celle
texte clair que l'on veut d&eacute;crypter, on essaie de faire apparaissant le plus souvent dans le langage attendu pour le texte
correspondre les lettres les plus souvent vu dans le texte avec le clair (l'anglais en l'occurrence). <br>
mod&egrave;le de fr&eacute;quence.<br> Cependant il arrive fr&eacute;quemment que l'ordre de lettre soit
l&eacute;g&egrave;rement chang&eacute; par rapport au r&eacute;sultat
attendu. Dans le programme, on calcule donc pour chaque colonne les
distances entre les X lettres les plus fr&eacute;quentes dans la
colonne et la lettre la plus fr&eacute;quente dans le langage.<br>
On g&eacute;n&egrave;re ensuite un espace de X ^ K clefs a partir des
combinaisons de ces diff&eacute;rents d&eacute;calages obtenus sur
chaque colonne.<br>
<br> <br>
Ceci nous donne un ensemble de clef (r&eacute;duit &agrave; un ou pas), dans lequel se trouve normalement la bonne clef.<br> Enfin, on d&eacute;code ensuite le texte avec chacune des clef
g&eacute;n&eacute;r&eacute;es, et en fonction de donn&eacute;es
statistiques
relative &agrave; notre connaissance pr&eacute;alable du texte et d'une
petite marge d'erreur, on filtre les texte d&eacute;chiffr&eacute;s.<br>
(Exemple: les 9 lettres les plus fr&eacute;quentes repr&eacute;sentent 70% du texte, et on une marge de +/- 4%). <br>
En jouant sur la marge d'erreur, on laisse passer plus ou moins de
textes d&eacute;chiffr&eacute;s, parmi lesquels devrait se trouver le
texte clair attendu.<br>
</div>
</div> </div>
</body> </body></html>
</html>