a est inversible dans Z/nZ a et n sont premiers entre eux pgcd( a, n

publicité
DETERMINER L’EXISTENCE D’UN
a est inversible dans Z/nZ
INVERSIBLE DANS Z/nZ
Ù a et n sont premiers entre eux
Ù il existe b tel que a × b = 1 [n]
Ù pgcd(a, n) = 1
Calcul du pgcd : le dernier reste non nul de la division de a par n est le pgcd (a, n)
pgcd (18, 35)
35 = 18 + 17
18 = 17 + 1
17 = 17 + 0
⇒ 18 admet donc un inversible dans [35]
pgcd (21, 32)
32 = 22 + 10
22 = 10 × 2 + 2
20 = 2 × 10 + 0
⇒ 22 n’admet donc pas d’inversible dans [32]
pgcd(47, 53) 53 = 47 × 1 + 6
47 = 6 × 7 + 5
6= 5+1
⇒ 47 admet donc un inversible dans [53]
pgcd (22, 32)
CALCULER
32 = 21 + 11
21 = 11 + 10
11 = 10 + 1
⇒ 21 admet donc un inversible dans [32]
UN INVERSIBLE DANS Z/nZ
*
Théorème de Bezout : ∀ a, b ∈ N , pgcd (a, b) = 1 Ù ∃ u,v ∈ Z / au + bv = 1
Algorithme d’Euclide étendu : permet de calculer les coefficients de Bezout
- On effectue la division de a par n jusqu’à avoir un reste égal à 1 (Euclide)
- On remonte à l’envers les égalités pour obtenir le coefficient cherché
1 - Calcul de l’inverse de 18 [35]
D’après le théorème de Bezout, on a : 18u + 35v = 1 où u : inverse de 18 [35]
35 = 18 + 17 (1) On remonte les égalités
d’après (2)
18 = 17 + 1 (2) 1 = 18 – 17
1 = 18 – (35 – 18)
d’après (1)
1 = 18 – 35 + 18 = -35 + 2 × 18
⇒ donc u = 2, donc l’inverse de 18 [35] est 2
Vérification
18 × 2 [35]
= 36
=1
[35]
[35]
2 - Calcul de l’inverse de 21 [32]
21u + 32v = 1 (D’après Bezout)
On remonte les égalités
32 = 21 + 11
1 = 11 – 10
21 = 11 + 10
1 = 11 – (21 – 11) = 2 × 11 – 21
11 = 10 + 1
1 = 2 × (32 – 21) – 21 = 32 × 2 – 3 × 21
⇒ donc u = -3, donc l’inverse de 21 [32] est -3
Vérification
21 × -3 [32]
= -63
[32]
= -63 + 2 × 32 [32]
=1
[32]
3 - Calcul de l’inverse de 11 [7]
11u + 7v = 1 (D’après Bezout)
11 = 7 + 4
7 =4+3
4 =3+1
On remonte les égalités
1=4–3
1 = 4 – (7 – 4) = 4 – 7 + 4 = 2 × 4 – 7
1 = 2 × (11 – 7) – 7
1 = 2 × 11 + 2 × (-7) – 7
1 = 2 × 11 – 3 × 7
⇒ donc u = 2, donc l’inverse de 11 [7] est 2
Vérification
11 × 2 [7]
= 22
=7×3+1
=1
[7]
[7]
[7]
THEOREME
DES
RESTES CHINOIS (CRT)
• Si pgcd(p, q) = 1 , Z/pqZ = Z/pZ × Z/qZ
• Si pgcd(p, q) = 1 , ∀ α, β ∈ Z, ∃! x, 0 ≤ x < p.q
(∃u,v ∈ Z / pu + vq = 1 d’après Bezout)
/
x mod p = α mod p
x mod q = β mod q
x = αvq + βpu + λp.q (λ ∈ Z ) Ù x = αvq + βpu mod(p.q)
Quels sont les entiers x tels que x = 4 mod 47 et x = 12 mod 53 ?
pgcd(47, 53) 53 = 47 × 1 + 6
47 = 6 × 7 + 5
6= 5+1
Sujet du 06/06/2003 Ex. 7
⇒ pgcd(47, 53) = 1 donc 47 et 53 sont premiers entre eux
D’après le théorème des restes chinois, on a :
⇒ Z/47 × 53Z = Z/47Z × Z/53Z
⇒ x = αvq + βpu mod(p.q)
x = 4 × 53v + 12 × 47u mod 2491
Euclide
Euclide étendu
53 = 47 × 1 + 6
47 = 6 × 7 + 5
6= 5×1+1
1=6–5
= 6 – (47 – 6 × 7)
= 6 – 47 + 6 × 7
= 6 × 8 – 47
= 8 × (53 – 47) – 47
= 8 × 53 – 47 × 8 – 47
= 8 × 53 + 47 × (-9)
⇒ u = 8 et v = -9
⇒ 53u + 47v = 1 (Bezout)
SQUARE
AND
⇒ x = 4 × 53v + 12 × 47u [2491]
x = 4 × 53 × (-9) × 47 × 8 [2491]
x = 1696 – 5076
[2491]
x = -3380
[2491]
x = 1602
[2491]
Vérification
1602 mod 47 = 4
1602 mod 53 = 12
MULTIPLY
Méthode du Square and Multiply
- On écrit l’exposant en binaire
- A chaque ligne on ajoute 1 bit à l’exposant en partant de celui de gauche
- Si le bit de gauche est égal à 1, le résultat de la ligne précédent étant B
ƒ Alors Axxx1 mod Y = (B2 mod Y) × (A mod Y)
ƒ Sinon Axxx0 mod Y = B² mod Y
- On s’arrête lorsque tous les bits sont consommés.
Calcul de 7213 mod 10
(213)10 = (11010101)2
71
711
7110
71101
711010
7110101
71101010
711010101
mod 10 = 7
mod 10 = (72 mod 10) × 7 mod 10 = 63 mod 10
mod 10 = 32 mod 10
mod 10 = 92 mod 10 × 7 mod 10 = 7 mod 10
mod 10 = 72 mod 10 = 49 mod 10
mod 10 = 92 mod 10 × 7 mod 10 = 7 mod 10
mod 10 = 72 mod 10 = 49 mod 10
mod 10 = 92 mod 10 × 7 mod 10 = 7 mod 10
⇒ 7213 mod 10 = 7
=3
=9
=7
=9
=7
=9
=7
TESTER
SI UN NOMBRE EST PREMIER
2 Méthodes :
- Pour un nombre n, on essaye toutes les divisions par D, allant entre 1 et √n + 1, si aucune division
ne tombe juste, on peut affirmer que n est premier
- n est premier ⇒ ∀x premier avec n (non multiple de n), xn-1 = 1 mod n (Test de Fermat,
probabiliste)
CALCUL
DE
ϕ(n)
L’indicateur d’Euler ϕ(n) représente :
- le nombre de nombre premier avec n entre 1 et n
- le nombre d’éléments inversibles dans Z/nZ
Si p est premier alors
Sinon
ϕ(p) = p – 1
ϕ(p) = ϕ(n) × ϕ(m) = ϕ(nm) = (n – 1) × (m – 1)
p = n × m (n et m étant premier entre eux)
ϕ(13) = 13 – 1 = 12
ϕ(10) = ϕ(5) × ϕ(2) = 4 × 1 = 4
CALCUL
DE
gx mod p
Méthode :
- Si le calcul de (p-1)2 est facile et que x est facilement convertible en binaire, on peut appliquer
directement la méthode Square and Multiply.
- Sinon on simplifie :
ƒ g par g mod p
ƒ x par x mod ϕ(p)
- On termine éventuellement les calculs par un Square and Multiply
Exemple 1 : 789579562 mod 10
Sujet du 06/06/2003 Ex. 8
10 = 5 × 2 (5 et 2 étant premiers)
⇒ ϕ(10) = (5 – 1) × (2 – 1) = 4
78957 = 7
956 = 2
[10]
[ϕ(10)]
⇒ 789579562 = 72 [10] = 9 [10]
Exemple 2 : 358247 mod 13
13 est un nombre premier
⇒ ϕ(13) = 12
358
247
= 27 × 13 + 7 [13]
=7
[13]
=7
[ϕ(13)]
358247 = 77 [13]
⇒ 358247 mod 13 = 6
Square and Multiply
(7)10 = (111)2
71
711
7111
mod 13 = 7
mod 13 = 72 mod 13 × 7 mod 13 = 10 mod 13 × 7 mod 13 = 5
mod 13 = 52 mod 13 × 7 mod 13 = 12 mod 13 × 7 mod 13 = 6
ONE TIME PAD (« MASQUE JETABLE »)
Imaginons que nous ayons un message de n octets. Pour l'encrypter:
- Créer une suite S (même taille que n) d'octets aléatoires (S est appelé pad ou masque).
- Appliquer ce masque octet par octet au message (généralement avec une opération logique XOR)
Pour le décrypter, il suffit de ré appliquer le même masque. 2 XOR successifs s'annulent. Ainsi, si vous
ne connaissez pas le masque S, le message EDRJVQUIKEGDNCTUIO peut très bien se décrypter en :
Ma réponse est oui ou Ma réponse est non ou Le lavabo est bleu.
Tout dépend de S ! Si vous n'avez pas S, vous pouvez toujours essayer de décrypter le message : il peut
vouloir dire n'importe quoi ! Quelle que soit votre puissance de calcul, vous ne pourrez jamais décrypter
le message.
Pièges à éviter :
-
Les octets du masque doivent être réellement aléatoires. Si vous les créées à partir d'un programme,
ils ne sont pas aléatoires ! Il devient possible de deviner la suite d'octets du masque.
-
Le masque ne doit jamais servir plusieurs fois, sinon il devient possible de décrypter les messages
suivants. Il faut sans cesse créer un nouveau masque pour encrypter de nouvelles données.
-
Le masque doit être de la taille des données à encrypter. Pas toujours pratique à manipuler.
-
Enfin, pour que votre correspondant puisse décrypter, vous devez aussi lui envoyer le masque ! Et
vous devez le faire par un moyen parfaitement sûr.
Faiblesse du One Time Pad
La faiblesse au niveau sécurité du One Time Pad est sa vulnérabilité aux cryptanalyses partielles. En effet
la connaissance d’un bit de clair fournit immédiatement un bit de clé. Il n’est donc pas résistant aux
attaques à clair connu et encore moins aux attaques à clair choisi.
Les attaques en clair
Attaque à clair connu : le cryptanalyste dispose d’un (ou plusieurs) texte en clair et le (ou les)
cryptogramme(s) correspondant(s).
Attaque à clair choisi : il dispose d’un (ou plusieurs) texte en clair de son choix et le (ou les)
cryptogramme(s) correspondant(s).
LE
PROBLEME DE LA GENERATION DE NOMBRES ALEATOIRES
Il est impossible de créer des nombres aléatoires avec un programme. On peut au mieux créer des
nombres pseudo aléatoires. La plupart des générateurs de nombres aléatoires sont assez mauvais :
- on retrouve rapidement les mêmes suites de valeurs au bout d'un certain temps.
- certaines valeurs sortent plus que d'autres.
- avec certains générateurs, on peut trouver toute la suite de nombres simplement en connaissant
deux valeurs successives !
Quand on a besoin de nombres réellement aléatoires (pour le One Time Pad), tels que ceux créés avec des
phénomènes physiques impossibles à prévoir :
- écoulement de fluides (lava-lamps, particules dans un liquide en circulation, vent et tourbillons)
- bruit blanc généré par un pont de diodes
- émission de particules issues de la décomposition de matière radioactive
Ce n'est pas à la portée de tout le monde. Il faut un dispositif physique, et non pas seulement logiciel.
Certains ont inventé des systèmes ingénieux avec une Webcam qui filme des lava-lamps. Comme ces
écoulements de fluide et la convection les rendent impossible à prévoir à long terme, ils font un bon
générateur de nombres aléatoires. Il suffit de filmer l'image et d'utiliser la valeur des pixels pour générer
des nombres aléatoires.
DIFFIE-HELLMANN :
LA CRYPTOGRAPHIE A CLE PUBLIQUE
Depuis les origines de la cryptographie, et jusqu'à récemment, tous les procédés étaient basés sur une
même notion fondamentale: chaque correspondant était en possession d'une clef secrète, qu'il utilisait
pour chiffrer et déchiffrer. Cela a un inconvénient majeur : comment communiquer la clef au
correspondant ? Il faut pour cela utiliser un canal sûr, par exemple une valise diplomatique. De toute
manière, il faut un contact préalable avec la personne qui devra (dé)chiffrer nos messages.
Le milieu des années 70 a vu l'avènement d'une nouvelle méthode de cryptage : le système à clefs
publiques. L'idée de ce système a été proposée en 1976 par Diffie et Hellman, qui ont proposé une
méthode totalement nouvelle: une clef pour chiffrer et une autre pour déchiffrer.
Bien entendu, il existe un lien mathématique entre ces deux clefs, mais ce lien est constitué par ce que les
deux inventeurs appellent une « fonction trappe à sens unique ». Cette fonction permet de calculer
aisément la clef de chiffrement en connaissant la clef de déchiffrement. En revanche, l'opération inverse
est pratiquement impossible.
L'intérêt de ce système est considérable. En effet, toute personne ou toute entreprise disposant de moyens
informatiques peut élaborer sa clef de déchiffrement - qu'elle garde secrète pour son usage exclusif - puis
en déduire la clef de chiffrement correspondante. Tous les utilisateurs de ce système agissant de même,
les clefs de chiffrement peuvent ensuite être groupées dans une sorte d'annuaire mis à la disposition du
public. Ainsi deux correspondants peuvent-ils communiquer secrètement sans aucun contact préalable.
1ère étape
Alice
Bob
Echange de deux valeurs publiques, Y et P.
Nous prendrons dans notre exemple Y=7 et P=11. Ces valeurs peuvent être
transmises sur un réseau non sur.
(gx mod P = Y mod P / P est premier et Y < P)
2ème
étape
Choix d’un nombre A, gardé secret.
(A=3).
3ème
étape
Alice applique à A la fonction à sens
unique, soit :
YA[P] ⇔ 73[11] = 343[11] =2
4ème
étape
Alice appelle ce dernier résultat a (soit
a=2), et l’envoie à Bob.
Alice calcule maintenant :
⇔ 43[11] = 64[11] = 9
⇔ clé = 9
Choix d’un nombre, B, gardé
secret. (B=6).
Bob applique à B la fonction à
sens unique, soit :
YB[P] ⇔ 76[11] = 343[11] = 4
Bob appelle ce dernier résultat b
(soit b=4), et l’envoie à Alice.
Bob calcule maintenant :
aB[P] ⇔ 26[11] = 64[11] = 9
⇔ clé = 9
Eve
Eve peut intercepter les
valeurs de Y et de P, et on
admet qu’elle les connaît.
Eve peut aussi choisir son
nombre secret C, également
gardé secret (C=9).
Eve peut aussi faire ce que
font les deux autres applique
à C la fonction à sens
unique, soit :
YC[P]
9
⇔ 7 [11] = 40 353 607[11]
=8
Eve peut encore intercepter a
et b, et on suppose qu’elle
connaît donc a et b.
Eve peut aussi calculer :
aC[P] et bC[P]
3
⇔ 4 [11] = 64[11] =9 et
43[11] = 64[11] =9
⇔ clé1 = 3 et clé2 = 6
5ème
étape
bA[P]
6ème
étape
Bob et Alice ont la même clé et peuvent donc communiquer, alors que Eve qui a deux clés dont aucune n’est
la bonne…ne peut rien faire !
Téléchargement