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:
parent
8522e371bf
commit
0bb367c9b4
2 changed files with 54 additions and 25 deletions
|
@ -1,3 +1,4 @@
|
|||
|
||||
/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */
|
||||
|
||||
p.code { border: 2px dashed rgb(153, 153, 153);
|
||||
|
@ -9,6 +10,7 @@
|
|||
font-family: monospace;
|
||||
}
|
||||
|
||||
@media screen {
|
||||
div.page { border: 2px dashed rgb(153, 153, 153);
|
||||
padding: 10px;
|
||||
top: 10px;
|
||||
|
@ -25,6 +27,7 @@
|
|||
|
||||
body { background-color: rgb(51, 51, 51);
|
||||
}
|
||||
}
|
||||
|
||||
span.code { border: 1px dashed rgb(153, 153, 153);
|
||||
background-color: rgb(204, 204, 204);
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html lang="fr-fr">
|
||||
<head>
|
||||
<html lang="fr-fr"><head>
|
||||
|
||||
|
||||
<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">
|
||||
</head>
|
||||
|
||||
<title>CryptAfinity</title><meta content="Glenn ROLLAND" name="author"></head>
|
||||
|
||||
<body style="direction: ltr;">
|
||||
|
||||
|
@ -60,6 +58,12 @@ CryptAfinity</a></li>
|
|||
</ol>
|
||||
|
||||
<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écodeur "Afine"</a></li>
|
||||
<li><a href="#5.3._Principe_du_d%E9codeur_Vigen%E8re">Décodeur "Vigenère"</a></li>
|
||||
</ol>
|
||||
|
||||
|
||||
</ol>
|
||||
|
||||
|
@ -96,7 +100,7 @@ Auteurs</h3>
|
|||
|
||||
<p>CryptAfinity a
|
||||
été entièrement
|
||||
réalisé par Glenn ROLLAND <<a href="mailto:glenux@fr.st">glenux@fr.st</a>>
|
||||
réalisé par Glenn ROLLAND <<a href="mailto:glenux@fr.st">glenux@fr.st</a>> et Roland LAURÈS <<a href="mailto:shamox@mac.com">shamox@mac.com</a>>
|
||||
à l'occasion de travaux pratiques du cours de système du
|
||||
Master 2 Ingénierie Informatique -
|
||||
Systèmes, Réseaux et Internet.</p>
|
||||
|
@ -308,13 +312,13 @@ texte chiffré.</td>
|
|||
<h2><a name="5._Documentation"></a>5.
|
||||
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
|
||||
dossier <span class="code">doc/html</span>
|
||||
de l'application, ou en suivant <a href="html/index.html">ce lien</a>.</p>
|
||||
|
||||
<h3>5.2. Principe du "décodeur Afine"</h3>
|
||||
<h3><a name="5.2._Principe_du_décodeur_Afine"></a>5.2. Principe du "décodeur Afine"</h3>
|
||||
|
||||
<p>On génère l'espace des clefs possibles pour l'alphabet donné en entrée:</p>
|
||||
|
||||
|
@ -400,31 +404,53 @@ for (kLIt = keyList.begin(); kLIt != keyList.end(); kLIt++){<br>
|
|||
}</p>
|
||||
|
||||
|
||||
<h3>5.3. Principe du "décodeur Vigenère"</h3>
|
||||
<h3><a name="5.3._Principe_du_décodeur_Vigenère"></a>5.3. Principe du "décodeur Vigenère"</h3>
|
||||
<div style="text-align: justify;">
|
||||
On commence par faire récupérer les groupes de caratères qui se répètent dans le texte.<br>
|
||||
|
||||
<br>
|
||||
Une fois obtenue plusieurs groupes de lettres, on regarde la distance
|
||||
séparrant les deux premiers groupes (note d1) puis la distance
|
||||
entre les deux suivant (d2). Le PGCD de d1 et d2, doit donner un
|
||||
Une fois les groupes répétés de lettres de plus
|
||||
grande longueur obtenus (dans l'ordre décroissant en fonction de
|
||||
la longueur), on calcule la distance
|
||||
sé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èse sous-jacente est
|
||||
que ces groupes de lettres sont issue du chiffrement des mêmes
|
||||
bouts de mots avec les mêmes bouts de la clef. Si le PGCD = 1 on
|
||||
peut raisonnablement supposer que ce n'est pas le cas.<br>
|
||||
bouts de mots avec les mêmes bouts de la clef. Si le K = 1 on
|
||||
peut raisonnablement supposer que ce n'est pas le cas, et qu'il n'y a pas de répétitions.<br>
|
||||
|
||||
<br>
|
||||
L'étape suivante consiste à faire une analyse de
|
||||
fréquence en découpant le texte en un nombre de colonne
|
||||
correspondant au pgcd précédemment calculé. On
|
||||
tire de cette analyse de fréquence, un ordre de lettre par
|
||||
importance. Puis en fonction de données statistiques
|
||||
préalables correspondant au contexte connu à prioris du
|
||||
texte clair que l'on veut décrypter, on essaie de faire
|
||||
correspondre les lettres les plus souvent vu dans le texte avec le
|
||||
modèle de fréquence.<br>
|
||||
fréquence en découpant le texte en K colonnes. On
|
||||
classe ensuite les lettres apparaissant dans les colonnes en fonction
|
||||
de leur nombre d'apparitions. <br>
|
||||
Dans un monde utopique, il suffirait de calculer la distance entre la
|
||||
lettre apparaissant le plus souvent dans la colonne, et celle
|
||||
apparaissant le plus souvent dans le langage attendu pour le texte
|
||||
clair (l'anglais en l'occurrence). <br>
|
||||
Cependant il arrive fréquemment que l'ordre de lettre soit
|
||||
légèrement changé par rapport au résultat
|
||||
attendu. Dans le programme, on calcule donc pour chaque colonne les
|
||||
distances entre les X lettres les plus fréquentes dans la
|
||||
colonne et la lettre la plus fréquente dans le langage.<br>
|
||||
On génère ensuite un espace de X ^ K clefs a partir des
|
||||
combinaisons de ces différents décalages obtenus sur
|
||||
chaque colonne.<br>
|
||||
<br>
|
||||
Ceci nous donne un ensemble de clef (réduit à un ou pas), dans lequel se trouve normalement la bonne clef.<br>
|
||||
Enfin, on décode ensuite le texte avec chacune des clef
|
||||
générées, et en fonction de données
|
||||
statistiques
|
||||
relative à notre connaissance préalable du texte et d'une
|
||||
petite marge d'erreur, on filtre les texte déchiffrés.<br>
|
||||
(Exemple: les 9 lettres les plus fréquentes repré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échiffrés, parmi lesquels devrait se trouver le
|
||||
texte clair attendu.<br>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</body></html>
|
||||
|
|
Loading…
Reference in a new issue