CRYPTOGRAPHIE C.D.P.
Chiffrage-Déchiffrage en Phase
Auteur: Philippe Lheureux
PROTECTIONS POUR LES CLONES DE CDP en 16x16
histoire de répondre aux trois attaques
visibles sur le site
http://perso.wanadoo.fr/antmonni/cdpsid
7 |
53 |
89 |
108 |
65 |
27 |
202 |
74 |
81 |
109 |
13 |
75 |
96 |
129 |
22 |
130 |
90 |
179 |
5 |
189 |
229 |
54 |
142 |
97 |
127 |
234 |
116 |
41 |
42 |
207 |
4 |
23 |
38 |
107 |
178 |
98 |
37 |
188 |
17 |
203 |
170 |
40 |
143 |
186 |
144 |
128 |
145 |
95 |
157 |
66 |
88 |
28 |
220 |
171 |
187 |
55 |
230 |
102 |
233 |
185 |
18 |
24 |
117 |
193 |
52 |
141 |
64 |
219 |
51 |
137 |
26 |
62 |
204 |
221 |
12 |
205 |
104 |
167 |
192 |
21 |
8 |
115 |
243 |
105 |
228 |
122 |
99 |
235 |
169 |
61 |
136 |
232 |
3 |
191 |
76 |
168 |
126 |
125 |
6 |
87 |
63 |
148 |
172 |
173 |
56 |
222 |
57 |
195 |
206 |
94 |
153 |
77 |
67 |
91 |
147 |
244 |
39 |
218 |
1 |
25 |
100 |
101 |
146 |
190 |
110 |
118 |
19 |
154 |
36 |
177 |
16 |
158 |
50 |
174 |
73 |
248 |
86 |
79 |
217 |
135 |
78 |
231 |
34 |
131 |
227 |
49 |
176 |
159 |
29 |
215 |
138 |
80 |
236 |
216 |
134 |
241 |
163 |
152 |
132 |
20 |
92 |
245 |
68 |
226 |
123 |
72 |
249 |
112 |
149 |
2 |
242 |
43 |
111 |
239 |
58 |
133 |
200 |
106 |
124 |
160 |
175 |
214 |
30 |
250 |
223 |
121 |
150 |
44 |
237 |
33 |
240 |
60 |
69 |
155 |
48 |
35 |
140 |
253 |
256 |
45 |
103 |
252 |
208 |
151 |
247 |
59 |
164 |
194 |
199 |
70 |
255 |
182 |
246 |
213 |
139 |
113 |
254 |
224 |
31 |
251 |
114 |
209 |
119 |
11 |
14 |
198 |
71 |
183 |
47 |
93 |
46 |
9 |
225 |
120 |
211 |
83 |
238 |
166 |
210 |
85 |
156 |
201 |
15 |
197 |
181 |
161 |
212 |
132 |
32 |
180 |
82 |
196 |
184 |
10 |
84 |
165 |
Exemple de grille CDP- Les numéros correspondent aux codes ASCII des caractères.
PROTECTION DE LA GRILLE (Empêche l'attaque PLT)
Afin d'éviter que quelqu'un puisse se faire passer pour vous en utilisant votre grille sur votre ordinateur ou sur une carte bancaire , il faut la rendre inutilisable en la chiffrant. Toutes les grilles doivent êtres stockées chiffrées .
Le principe de chiffrage est le suivant .
Il suffit de définir un code constitué de 5 numéros.
exemple : 47-15-07-98-27 (*) chacun des 5 numéros pouvant prendre une valeur entre 1 et 256
et de s'en servir comme un masque négatif par rapport à des codes ascii qui peuvent aller de 1 à 256.
Voici ce que cela donne pour la premiere ligne de la grille. Si la soustraction donne un nombre négatif , on le déduit de 256.
Exemple 7-47=-40 puis 256-40=216
La grille utilisable - Le Masque - La grille masquée
7 |
53 |
89 |
108 |
65 |
27 |
202 |
74 |
81 |
109 |
13 |
75 |
96 |
129 |
22 |
130 |
-47 |
-15 |
-07 |
-98 |
-27 |
-47 |
-15 |
-07 |
-98 |
-27 |
-47 |
-15 |
-07 |
-98 |
-27 |
-47 |
216 |
38 |
82 |
10 |
38 |
236 |
187 |
67 |
239 |
82 |
222 |
60 |
89 |
31 |
251 |
83 |
Vous pouvez remarquer la présence de 2 chiffres 82 dans le résultat chiffré. La grille ainsi obtenue n'est plus compatible avec CDP , elle ne peut donc pas être intérrogée correctement .
Pour reconstituer la grille il suffit de faire la démarche inverse. Cette fois ci , on ajoute le masque. Tout ce qui dépasse 256 repart de 0.
Exemple 216+47=263 puis 263-256=7
216 |
38 |
82 |
10 |
38 |
236 |
187 |
67 |
239 |
82 |
222 |
60 |
89 |
31 |
251 |
83 |
+47 |
+15 |
+07 |
+98 |
+27 |
+47 |
+15 |
+07 |
+98 |
+27 |
+47 |
+15 |
+07 |
+98 |
+27 |
+47 |
7 |
53 |
89 |
108 |
65 |
27 |
202 |
74 |
81 |
109 |
13 |
75 |
96 |
129 |
22 |
130 |
Etant donné qu'un même chiffre du code se répète toutes les 5 cases , un éventuel attaquant pourrait se servir de cette propriété pour réduire le nombre d'essais nécessaires à la reconstitution de la grille . Il faut donc mélanger les cases pour eviter de lui faciliter la tâche.
Pour ce faire , on utilise toujours le même code que celui qui a servi de masque mais on définit 10 permutations différentes
Permutation 0 échange colonnes impaires 1 avec 3 , 5 avec 7 etc ...
Permutation 1 échange lignes impaires 1 avec 3 , 5 avec 7 etc ...
Permutation 3 échange colonnes paires 2 avec 4 , 6 avec 8 etc ...
Permutation 4 échange lignes paires 2 avec 4 , 6 avec 8 etc ...
Permutation 5 échange demi table gauche avec demi table droite
Permutation 6 échange demi table haute avec demi table basse
Permutation 7 échange en croix A1-B2 C1-D2 E1-F2 etc ....
Permutation 8 échange en croix A2-B1 C2-D1 E2-F1 etc ...
Permutation 9 on tire une ligne de la case 1 a la case 256 et on échange symétriquement les valeurs au dessus et en dessous de la ligne.
Le code 47-15-07-98-27 correspond donc a l'action des permutations 4,7,1,5,0,7,9,8,2,7 sur la grille ! Le mélange des cases ainsi réalisé finira de protéger correctement la grille. Pour déchiffrer , il suffira de relire les permutations à l'envers .
PROTECTION CONTRE LES ATTAQUES A CLAIR CONNUS ET CHIFFRE SEUL
Il s'agit ici de proteger le chiffre produit par CDP quand on utilise des dizaines de milliers de fois la même grille. Il n'existe pour l'instant pas d'attaques connues si l'on utilise pour chaque caractère une grille différente.
Voici le résumé des deux principales attaques visibles sur le site CDPSID
Attaque du lutin ( clairs connus )
Cette attaque est basée sur la constatation que les deux premiers caractères du chiffré sont toujours situés sur la ligne ou sur la colonne du premier caractère du clair.
Attaque heureuse ( chiffrés seuls )
On prend une collection d'environ 50_000 chiffrés de CDPSID de longueur au moins 2, chiffrant des messages quelconques et distincts, et utilisant la même grille. On ne considère en fait que les 2 premiers octets des chiffrés....
Une faiblesse existe donc dans ce cas précis . Le fait de posseder des dizaines de milliers de premiers couples du chiffré permet de reconstituer la grille.
Pour y rémédier il suffit donc de faire en sorte que les deux premiers octets du chiffré ne puissent en aucun cas renseigner sur la grille. L'idée est la suivante :
On prend le chiffre produit par CDP pour chiffrer un message.
2i:y,Wd%GëO>ç"wR7[2rjxb.e#ré1vX&oS@#ùlw]qéçjpMJg_réi3ëO>è#XpHfm@x7QcxG'y&KxQP:&;x7bNb%n@v7)ruYC!é<1GAwaz.0?&1:?F]ù6v!rHGQRî5@!l88.+Iw\f0.(uP_$L{acpY&J0Hçb.H-ë>^aéPk=q?KV2EE+ldqë.aîgk&?TgdD]TS2êdScdu6i.9j7è8sv'U,H^=6éj,I[2"<T7,I{cTEoéF4K/6nO(J}+mCQ'_<e&{<CN11çU{(3<"ù\Q{p,àQg$*.Hb7}5c/^C.èënq=é0tWh8vCîw>I2y,9àRFGxb*5&/l8qèO_G0YqGv&$wVkDQ)1mkU*$wTmé->t(S1"YS"àRPo)=sxDbMtêy!Gé6FQ^^k<TuWwu&gH9èZyxCMNIUt
Afin d'éviter que 2i renseigne sur la grille nous allons nous servir de la grille pour modifier les lettres obtenues lors de ce premier chiffrage . L'idée est de se servir de la grille comme un masque et d'ajouter la valeur de ce masque au chiffre. Le masque de la grille est constitué de 256 numéros ( 7-53-89-108 jusqu'a 184-10-84-165 )
A la valeur de 2 je rajoute 7
A celle de i je rajoute 53
A celle de : je rajoute 89
A celle de y je rajoute 108
et ainsi de suite et si le chiffre est plus long que 256 , je repars au début de la grille.
Le masque étant les valeurs ASCII des caractères de la grille , seuls ceux qui ont la bonne grille ont le bon masque. Les caractères ainsi transformés par le masque ne renseignent plus l'attaquant sur la position des lettres dans la grille.
Pour déchiffrer , il suffit de faire l'opération inverse
On a le chiffre !
A partir de la grille on en déduit le masque et on en soustrait sa valeur du chiffre pour obtenir un chiffre traditionnel CDP parfaitement déchiffrable.
Certains pourraient penser qu'il est dangereux d'utiliser la grille comme masque car celui qui trouve le masque trouve la grille alors pour éviter toute attaque sur ce point nous allons modifier la position des caractères obtenus.
voici le chiffre après la premiere passe si dessus
?wO>k?'hWéUB56>ê?N{iwRè%'1A61D1vECZJ0EUNJdWaë,.3ëEO>#1pl5xcx4hm%A+A+jx+(bKLNtP.ùt8,'o)}R=AN)0Z?&#èMohV6*lB5>P*6EKbgîGMé(_wac',k}0Hb18ZXpën>\x^aùu@6êcqëç}JVr2lëE+Kj$îg4[,q{KD]JdlNQKîC,I9jXfQj'3Bxql9a6nKdéj*,c{zKS5EjU*42E+oé^>KLakJ}I"eJc%jL8GêN1t1çKugQ(5jR3gpé,6,Bî={=GqB,d87}MS=ç2E8v69Aw3#qMd,B,I2Jy,ëù9w$çRFséVb*'wl+8qèOxy0YQgs6%[)1mk4&à9o5(S)v*$$wPV7z^gEf0x_Ybetêyf-PXT.g^AmM7=u*t&m]èZyxC}gK#bU(^^k<TuWw
L'idée est de scinder le chiffre en tronçons de 256 caractères et de se servir de la grille pour changer la position des caractères.
Si la grille commence par 7-53-89-108 cela veut dire que le caractère 1 (?) se retrouve en position 7
le caractère 2 ( w) en position 53
le caractère 3 (O) en position 89
le caractère 4 (>) en position 108
et ainsi de suite jusqu'au caractère 256.
Si la partie finale comporte moins de 256 caractères , elle n'est pas chiffrée avec cette méthode.
Tous les couples seront ainsi completement modifiés et il faudra la bonne grille pour remettre les lettres a leurs place en effectuant la démarche inverse.
On prend le 7 eme caractère et on le remet en position 1
on prend le 53 eme caractère et on le remet en position 2
on prend le 89 eme caractère et on le remet en position 3
on prend le 108 eme caractère et on le remet en position 4 etc .... jusqu'a ce que les 256 caractères soient remis en place.
Je pense que cela devrait suffir amplement pour empecher toute tentative de cryptanalyse de milliers de chiffres produits par la même grille.
Qu'en pensez vous ?
VOIR LA PAGE DES CLONES DE CDP
RETOUR A LA PAGE SUR LA CRYPTOGRAPHIE C.D.P.