Annexe A
Annexes
- Annexe 4.1
La stéganographie
Exemple
Considérons l'image suivante :
000
|
000
|
000
|
000
|
000
|
001
|
001
|
000
|
001
|
111
|
111
|
111
|
Chaque entrée de ce tableau représente un pixel
couleur, nous avons donc une toute petite image 2*2. Chaque triplet de bits (0
ou 1) code la quantité de l'une des trois couleurs primaires du pixel
(une image couleur aura dans presque tous les cas des groupes de 8 bits,
octets, mais on n'utilise que 3 bits pour clarifier l'exemple). Le bit le plus
à droite de chaque triplet est le fameux bit de poids faible LSB. Si on
souhaite cacher le message 111 111 101 111, l'image est modifiée de la
façon suivante : le bit de poids faible du ie octet est mis à la
valeur du ie bit du message; ici on obtient :
001
|
001
|
001
|
001
|
001
|
001
|
001
|
000
|
001
|
111
|
111
|
111
|
- Annexe 4.2
IDEA (International Data Encryption Algorithm) :
L'algorithme est basé sur le mélange
d'opérations de différents groupes algébriques. Il y a
trois groupes algébriques dont les opérations sont
mélangées, et toutes ces opérations sont facilement
réalisables à la fois en logiciel et en matériel :
· OU exclusif,
· addition modulo 216,
· multiplication modulo 216+1.
Toutes ces opérations manipulent des sous-blocs de 16
bits. Cet algorithme est ainsi efficace même sur des processeurs 16
bits.
Le bloc de données de 64 bits est divisé en 4
sous-blocs de 16 bits : X1, X2, X3 et X4. Ces quatre sous-blocs deviennent les
entrées de la première ronde de l'algorithme. Il y a huit rondes
au total. À chaque ronde, les 4 sous-blocs sont combinés par OU
exclusif, additionnés, multipliés entre eux et avec 6 sous-blocs
de 16 bits dérivés de la clé. Entre chaque ronde, le
deuxième et le troisième sous-bloc sont échangés.
Enfin, les quatre sous-blocs sont combinés avec les quatre sous-clefs
dans une transformation finale.
A chaque ronde, la séquence d'évènements est
la suivante :
1. multiplier X1 et la première sous-clef;
2. additionner X2 et la deuxième sous-clef;
3. additionner X3 et la troisième sous-clef;
4. multiplier X4 et la quatrième sous-clef;
5. combiner par OU exclusif les résultats des
étapes (1) et (3);
6. combiner par OU exclusif les résultats des
étapes (2) et (4);
7. multiplier le résultat de l'étape (5) avec la
cinquième sous-clef;
8. additionner les résultats des étapes (6) et
(7);
9. multiplier le résultat de l'étape (8) par la
sixième sous-clef;
10. additionner les résultats des étapes (7) et
(9);
11. combiner par OU exclusif les résultats des
étapes (1) et (9);
12. combiner par OU exclusif les résultats des
étapes (3) et (9);
13. combiner par OU exclusif les résultats des
étapes (2) et (10);
14. combiner par OU exclusif les résultats des
étapes (4) et (10);
La sortie de la ronde est constituée des 4 sous-blocs
produits par les étapes (11), (13), (12) et (14). Changez les deux blocs
intérieurs (sauf lors du dernier rond) et cela donne l'entrée de
la ronde suivante.
Après la huitième ronde, il y a une transformation
finale :
1. multiplier X1 et la première sous-clef;
2. multiplier X2 et la deuxième sous-clef;
3. multiplier X3 et la troisième sous-clef;
4. multiplier X4 et la quatrième sous-clef;
Enfin les 4 sous-blocs sont réassemblés pour former
le texte chiffré.
- Annexe 4.3
RSA (Rivest, Shamir et Adleman) Exemple :
Commençons par créer notre paire de clés
:
Prenons 2 nombres premiers au hasard: p = 29, q = 37
On calcule n = pq = 29 * 37 = 1073
On doit choisir e au hasard tel que e n'ai aucun facteur en
commun avec (p-1)(q-1) : (p-1)(q-1) = (29-1)(37-1) = 1008
On prend e = 71
On choisit d tel que 71*d mod 1008 = 1
On trouve d = 1079
On a maintenant nos clés:
· La clé publique est (e,n) = (71,1073) (=clé
d'encryptage)
· La clé privée est (d,n) = (1079,1073)
(=clé de décryptage)
On va encrypter le message 'HELLO'. On va prendre le code ASCII
de chaque caractère et on les met bout à bout :
Ensuite, il faut découper le message en blocs qui
comportent moins de chiffres que n. n comporte 4 chiffres, on va donc
découper notre message en blocs de 3 chiffres :
Ensuite on encrypte chacun de ces blocs :
726^71 mod 1073 = 436 976^71 mod 1073 = 822 767^71 mod 1073 =
825 900^71 mod 1073 = 552 Le message encrypté est 436 822 825 552. On
peut le décrypter avec d :
436^ 1079 mod 1073 = 726 822^ 1079 mod 1073 = 976 825^ 1079
mod 1073 = 767 552^ 1079 mod 1073 = 900 C'est à dire la suite de chiffre
726976767900.
On retrouve notre message en clair 72 69 76 76 79 : 'HELLO'.
- Annexe 4.4
MD5 (Message Digest version 5) Notations :
Les registres sont A,B,C,D. Le bloc de 512 bits est scindé
en 16 mots de 32 bits, et stockés dans M[0],...,M[15].
On définit une table T[i] de 64 éléments,
à partir de la fonction sinus. T[i] vaut la partié entière
de 4294967296 * abs(sin(i)).
X <<< s est la rotation à gauche de X par s
bits.
Une étape de calcul:
Pour j = 0 à 15 faire
Initialiser X[j] à M[j].
Fin pour.
/* Sauvegarde des registres */
AA=A BB=B CC=C DD=D
/* Premier tour. */
/* Soit [abcd k s i] notant l'opération
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* On fait les 16 opérations. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7
5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB
10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] /*
Deuxième tour. */
/* Soit [abcd k s i] l'opération
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* On fait les 16 opérations. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC
14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14
31] [BCDA 12 20 32] /* Etape 3. */
/* Soit [abcd k s t] l'opération
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<<s). */
/* On fait les 16 opérations. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41]
[DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46]
[CDAB 15 16 47] [BCDA 2 23 48] /* Etape 4. */
/* Soit [abcd k s t] l'opération
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<<s). */
/* On fait les 16 opérations. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57]
[DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62]
[CDAB 2 15 63] [BCDA 9 21 64] /* On réécrit dans les registres
!*/
A=A+AA
B=B+BB
C=C+CC
D=D+DD
|