IUP3 - Module M64/RISC - TD : Gordon I Attaque des générateurs

publicité
IUP3 - Module M64/RISC - TD : Gordon
I
Attaque des générateurs congruentiels linéaires
Un générateur congruentiel linéaire est une suite de la forme
(
X0
Xn+1 ≡ aXn + c [m]
pour X0 , a, c, m quelconques. Le générateur est dit multiplicatif si c = 0.
1. Si m est premier, quelle est la période maximale d’un MLCG ? En particulier, FishmanMoore ont étudié en 1986 les générateurs modulo 231 − 1 = 950706376 et ont déterminé
que celui pour a = 2147483647 est de période maximale et présente de bonnes propriétés
statistiques. Que pouvez-vous dire de 2147483647 ?
2. Pour m = pe avec p premier impair, quelle est la période maximale d’un MLCG ?
Enfin, il est possible de démontrer (cf. [Knuth, TAOCP, vol.2]) que si λ(m) est la
période maximale d’un MLCG modulo m, alors λ(2e ) = 2e−2 pour e > 2 et que λ(m) =
ppcm(λ(pe11 ) . . . λ(pekk )) si m = pe11 . . . pekk avec p1 . . . pk premiers distincts.
3. En supposant que m est connu, comment récupérer a et c dans un LCG ?
4. Maintenant m est inconnu et l’on supposera tout d’abord que c = 0. Comment casser
le MLCG ? Indication : on pourra étudier xn+1 − xn . Que se passe-t-il si c 6= 0 ?
II
Nombres premiers robustes
Afin de resister aux factorisations diverses, les nombres premiers utilisés pour fabriquer le
modulo de RSA doivent vérifier un certain nombre de propriétés :
• Pour résister à la factorisation par courbes elliptiques, p et q doivent être de tailles
similaires et suffisamment grands. Par exemple, pour travailler sur 1024 bits ils devraient
tous les deux être de taille environ 512 bits.
• Pour résister à la factorisation par racines carrées de Fermat, p−q doit être relativement
grand.
• Pour résister aux algorithmes p − 1 et p + 1 de Pollard, ainsi que pour résister à une
attaque cyclique, p et q doivent être des nombres premiers robustes (strong primes),
c’est à dire qu’ils doivent chacun vérifier :
– p − 1 possède un grand facteur, noté r.
– p + 1 possède un grand facteur.
– r − 1 possède un grand facteur.
Ainsi, l’algorithme de Gordon ci-dessous, permet de générer des nombres premiers robustes :
Algorithme de Gordon
1. Générer deux nombres premiers s et t de b bits.
2. Chercher r premier de la forme 2kt + 1.
3. Calculer m = (2sr−2 mod r)s − 1.
4. Retourner p le plus petit premier de la forme m + 2hrs.
1. Montrer que la sortie de l’algorithme de Gordon est un nombre premier robuste.
2. En servant de la section précédente, écrire une procédure fournissant un nombre premier
robuste. De quelle autre routine avez-vous besoin ? Qu’en déduisez-vous sur les nombres
premiers générés ?
1
III
III.A)
GPA cryptographiquement sûrs
RSA
Soient n et e le modulo et l’exposant d’un code RSA. Soit k = O([loglogn] + 1) un entier.
Alors, connaissant c = xe mod n, découvrir les k premiers bits de x est aussi difficile que de
découvrir la clef secrète associée à n et e.
1. En utilisant les procédures précédentes, en déduire une procédure prenant k en entrée
et générant une suite de bits aléatoire et cryptographiquement sûre.
III.B)
Blum-Blum-Shub
Un autre générateur sûr est celui de Blum, Blum et Shub : en prenant p et q premiers assez
grands congrus à 3 modulo 4 et en posant x0 le carré d’un entier aléatoire modulo n = pq,
il calcule la suite des xi+1 ≡ x2i [n]. Or, casser la suite du bit de poid faible de xi est aussi
difficile que casser la factorisation.
1. Écrire une procédure générant une suite de bits aléatoires avec le générateur BBS.
2. Comment peut-on utiliser ce générateur pour fabriquer une procédure de cryptage à clef
publique d’un message supposé traduit en binaire (n seul étant public) ?
3. Quel entier faut-il reconstruire pour décrypter ?
p+1
4. Vérifier que si p ≡ 3[4] et si x est un carré modulo p alors y ≡ x 4 [p] est une racine
carrée de x. En déduire une méthode de décryptage du système de Blum-Golwasser à
l’aide de l’algorithme d’Euclide étendu et du théorème des restes chinois.
2
Téléchargement