Vous êtes sur la page 1sur 4

Initiation à la cryptographie

Correction TD de cryptographie no 2
—Télécom Nancy 2A TRS—

1 LFSR

x Exercice 1. LFSR

On considère le LFSR dont le polynôme de rétroaction est z 6 + z 3 + 1 (c’est un polynôme


irréductible).
(i) (i)
1. Quelle est la matrice permettant de passer de l’état interne (x0 , . . . , x5 ) à l’état interne
(i+1) (i+1)
suivant (x0 , . . . , x5 ).
2. Faire le dessin du LFSR en indiquant les fils de la rétroaction. Écrire les équations de
récurrence.
3. À partir d’un état interne non nul, calculer les états internes suivants. Quelle est la période
de ce LFSR ? Est-ce optimal ?
4. On suppose que lors de six itérations successives numérotées N à N + 5, les bits produits par
le LFSR sont, dans l’ordre : 0, 1, 0, 1, 0, 1. Quel est l’état interne avant l’étape N ? Quels sont
les bits suivants ?
5. Mêmes questions avec z 5 + z 3 + z 2 + z + 1. Comment peut on s’assurer rapidement, dans le
cas de ce polynôme, que la période est nécessairement maximale ?

!
Correction :
1. La matrice est :  
0 1 0 0 0 0
0 0 1 0 0 0
 
1 0 0 1 0 0
 
0 0 0 0 1 0
 
0 0 0 0 0 1
1 0 0 0 0 0
2. On a le dessin suivant :
x0 x1 x2 x3 x4 x5
0 1 0 1 1 1 ki

L’état interne à l’étape i + 1 découle de l’état interne à l’étape i :


(i+1) (i) (i+1) (i) (i)
xk+1 = xk , x0 = x5 ⊕ x2 .
décalage dont le bit d’entré est calculé à partir de son état précédent.
3. Partons de 0010000. Les états successifs sont :
Numéro d’étape État interne bit produit
0 001000 0
1 100100 0
2 010010 0
3 001001 1
4 000100 0
5 000010 0
6 000001 1
7 100000 0
8 010000 0
9 001000 0 (identique à l’étape 0)

1
La période est donc de 9. C’est un diviseur strict de 63 = 26 − 1, qui est le maximum possible pour un
polynôme de rétroaction de degré 6. Donc ce polynôme n’est pas optimal (il n’est pas primitif : l’ordre
de x n’est pas 63 dans F2 [z]/(z 6 + z 3 + 1)).
(N ) (N +1) (N )
4. On a kN = x5 = 0, kN +1 = x5 = x4 = 1, etc. D’où l’état interne à l’étape N : 101010.
5. En degré 5, l’ordre de x est un diviseur de 25 − 1 = 31. Comme ce nombre est premier, et que x est
différent de 1 bien évidemment, l’ordre est nécessairement égal à 31.
!

2 Arithmétique modulaire et génération aléatoire

x Exercice 2. Inversion du PRNG proposé dans POSIX

La norme UNIX appelée POSIX.1-2001 propose une implémentation simple et peu ambitieuse
de la fonction standard rand(), qui doit être fournie par la bibliothèque standard du langage
C. Cette proposition n’est pas normative : elle constitue juste une suggestion, à destination des
implémenteurs :
static unsigned long interne = 1;

/* RAND_MAX assumed to be 32767 */


int rand(void) {
interne = interne * 1103515245 + 12345;
return((unsigned)(interne/65536) % 32768);
}

void srand(unsigned long graine) {


interne = graine;
}
Nous proposons de montrer que ce type d’implémentation n’est pas convenable pour l’utilisation
cryptographique, car il est possible de prédire les résultats produits.
1. Montrer que pour deux valeurs interne in interne0 qui diffèrent d’un multiple de 231 , les
valeurs produites par rand sont identiques. Que dire des états internes suivants ? Le fonction-
nement de ce générateur aléatoire est-il sensible au fait que unsigned long soit une valeur de
32 ou 64 bits ?
2. On considère une valeur k0 produite par rand(). On appelle i1 la valeur de l’état interne après
cet appel. Quelle information partielle sur i1 peut-on écrire à l’aide de k0 ?
3. On appelle x0 la partie inconnue de l’état interne i1 . Combien y a-t-il de valeurs possibles
pour x0 ? Est-il coûteux de toutes les tester ? Comment confirme-t-on que cette valeur testée
est la bonne ?
Si on étend ce concept du PRNG linéaire congruentiel à un état interne de n bits, avec n tel que
l’énumération des états internes possibles est impossible, alors d’autres attaques, de complexité
polynomiale en n, peuvent être utilisées. Elles sont cependant plus complexes à mettre en œuvre.

!
Correction :
1. La valeur de l’état interne peut être considérée modulo 231 sans que ça fasse une différence.
2. On peut écrire i1 = 216 k0 + x0 .
3. Il y a 216 valeurs possibles. Les énumérer n’est pas cher. En comparant à uen poignée de valeurs
retournées par rand(), on peut confirmer qu’on a deviné juste.
Si on étend à n bits, le coût de l’énumération est quand même en 2n/2 . En vérité on peut faire beaucoup
mieux en utilisant des outils de cryptanalyse tels les fractions continues ou la réduction de réseaux.
!

2
x Exercice 3. Calcul Mental

Calculer sans l’aide de la calculatrice les expressions suivantes : 2256 mod 128 ; 529436
mod 66 ; 10234096 mod 210 ; 47059 mod 1009 (Indication : 1009 est premier.) ; 96125 mod 127 ; 10146
mod 219.

!
Correction :
1. 2256 mod 128 = 2249 · 128 mod 128 = 0
2. 529436 mod 66 = (529 mod 66)436 = 1436 = 1
3. 10234096 mod 210 = (−1)4096 mod 210 = 1
4. 7059 = 1008×7+3. Par le petit théorème de Fermat : 41008 mod 1009 = 1. Ainsi 47059 mod 1009 = 43
mod 1009 = 64.
5. 96125 mod 127 est l’inverse de 96 modulo 127 (petit théorème de Fermat). D’autre part on a 96 = 3×25 .
On a 3 × 42 ≡ −1, et 2 × 26 ≡ 1. Donc

(3 × 25 )−1 ≡ (−42) × (26 )5 ≡ (−42) × 230 .

D”autre part 27 ≡ 1. Donc 230 ≡ 228 × 4 ≡ 4. On obtient

96−1 ≡ −4 × 42 ≡ −168 ≡ −41 = 86.

6. On a 219 = 3 × 73. D’après le théorème des restes chinois, il y a un isomorphisme entre Z/pqZ et
Z/pZ × Z/qZ. On calcule donc 10146 ≡ 1 mod 3, et 10146 ≡ 102×72+2 ≡ 100 mod 73. Dès lors, la
solution x vérifie x ≡ 1 mod 3, et x ≡ 100 mod 73. Donc x ≡ 100 mod 219 convient.
!

3 Clé secrète

 x Exercice 4. Authentification de type défi–réponse

Il existe des protocoles permettant d’authentifier une entité A auprès d’une entité B. Cela
présuppose donc que A sache effectivement que l’entité vérificatrice est bien B, et pas un attaquant
C qui se fait passer pour B. Or lors de la plupart des connexions, rien ne l’en assure. Il faudrait
alors que B s’authentifie également auprès de A. C’est ce qu’on appelle l’authentification mutuelle.
L’idée générale est alors de reprendre les protocoles qui existent pour l’authentification d’une
entité et de l’appliquer de manière symétrique pour authentifier B auprès de A. Nous allons voir
sur deux exemples qu’il est tout de même nécessaire de prévoir quelques ajustements.
1. Expliquer pourquoi il n’est pas possible de faire de l’authentification mutuelle par mot de
passe.
2. Suggérer alors une attaque qui permet de récupérer un mot de passe UNIX. Énumérez d’autres
situations dans lesquelles une interception de mot de passe est possible en l’absence d’authen-
tification du serveur.
On cherche maintenant à utiliser une authentification de type défi–réponse utilisant un système
à clé secrète. Considérons le protocole suivant qui utilise un chiffrement à clé secrète. A et B
partagent au préalable une clé secrète K.
(i) A tire une valeur aléatoire rA et l’envoie à B ;
(ii) B tire une valeur aléatoire rB et calcule β = EK (rA , rB ). B envoie β à A ;

3
(iii) A calcule DK (β). S’il n’y a pas eu d’attaque, il retrouve rA : B s’est authentifié.
Il prend connaissance de rB . Il envoie rB à B : A s’est authentifié.
3. Trouver une attaque de ce protocole par rejeu. On donne les éléments de départ de l’approche.
Le participant A est honnête, et l’attaquant C (malhonnête !) se fait passer pour B. C va,
parallèlement à la tentative d’authentification mutuelle émanant de A (vers B, pense-t-il)
appelée  session 1 , initier une session d’authentification vers A (en faisant croire qu’elle
émane de B), qu’on appellera  session 2 . Les messages de ces deux sessions s’entrelacent.
Les premières étapes sont (exactement dans cet ordre) :
— (session 1) : A envoie rA à C.
— (session 2) : C envoie rA à A.
Compléter, et expliquer d’où provient le problème.
4. Suggérer une amélioration.

!
Correction :
1. Il n’est pas possible de faire de l’authentification mutuelle par mot de passe tout simplement parce
qu’on ne peut donner un mot de passe qu’à une entité de confiance (on doit être sûr de qui elle est) ce
qui n’est évidemment pas le cas si on a besoin d’authentification mutuelle.-
2. Le faux écran de login sous toutes ses formes. . .
Il est possible si un serveur DNS est compromis qu’un nom renvoie à une adresse IP différente. Un
utilisateur non averti peut donc penser communiquer avec le véritable serveur.
3. Il suffit que l’attaquant C lance en parallèle une autre session d’authentification mutuelle vers A en
rejouant immédiatement les aléas envoyés et en entrelaçant correctement les envois de manière à faire
calculer à A les valeurs des réponses. Cela donne :
1 A tire une valeur aléatoire rA et l’envoie à
C qui se fait passer pour B ;
1bis C rejoue immédiatement la valeur rA en
lançant en parallèle une autre session d’au-
thentification ;
0
2bis A tire une valeur aléatoire rA et calcule α =
0
EK (rA , rA ). A envoie α à C ;
2 C renvoie alors α (qu’il ne peut pas
déchiffrer) à A ;
3 A calcule DK (α). Il retrouve rA : C s’est
0
authentifié. Il prend connaissance de rA . Il
0
envoie rA à C ;
0
3bis C renvoie rA à A.
4. Le problème provient du fait que les messages ne sont pas personnalisés et que les procédés sont
symétriques. Afin d’introduire de la dissymétrie dans un procédé à clé secrète, il faut utiliser des MAC.
On aménage alors le protocole précédent en concaténant les identités aux valeurs aléatoires tirées par
chaque partie avant de calculer le MAC.
!