Article Index

5°) échange de clé de Diffie-Hellman

Alice et Bob ne ce connaisse pas, il communique sur un canal compromis que Eve écoute, ils veulent partager une clé
Alice prend un nombre p premier et aleatoire qu'elle envoie a Bob
Alice prend un nombre g générateur de ℤ/pℤ qu'elle envoie a Bob
Bob choisit un nombre b aléatoire dans ℤ/pℤ
Bob calcule B = pow(g, b)%p
Alice choisit un nombre a aléatoire dans ℤ/pℤ
Alice calcule A = pow(g, a)%p
A et B sont envoyerrespectivement à Bob et Alice
Alice calcule K = pow(B, a)%p
Bob calcule K' = pow(A, b)%p
theoreme: K = K'
preuve: K = B%p = pow(pow(g, b), a)%p = pow(g, a*b)%p = pow(pow(g, a), b) = pow(A, b)%p = K'
comment Eve peut-elle retrouver K ?
  • elle connait p, g, A, B
  • seul solution connue : logarithme discret
problème: n'y Alice n'y Bob ne choisit la clé

6°) crypto, clé publique (RSA, ElGranal)

idée: une clé secrète pour décrypter, une clé publique pour crypté (asymétrique)
plus besoin d'échange de clés: Alice met à disposition la clé publique à tout le monde
il faut que l'on ne puisse pas retrouver la clé secrète à partir de la clé publique

example du système El Granal

Alice choisit p,g avec g: gnérateur de ℤ/pℤ
  • elle choisit une clé secrete k<p< li="">
  • elle calcule K = pow(g,k)%p
  • la clé publique est p,g,K qui est envoyer à Bob
  • elle reçoit une messages crypter de Bob
  • elle calcule pow(T,k)%p = pow(pow(g,k),b) = pow(K,b)%p
  • elle calcule M/pow(k,b)%p = m, le message
Bob veut envoyer un message qu'il découpe en bloques representer par des entier dans ℤ/pℤ
chaque bloques en crypter et tranmit à Alice
  • choisit une clé temporaire b (différente à chaque bloques)
  • il calcule pow(g,b)%p = T
  • il calcule m*pow(K,b)%p = M
  • il envoie T et M

7°) signature electronique

  • Alice est la seul à pouvoir signer -> clé privée
  • tout le monde peut verifier -> clé publique
  • (clé privée / clé publique sont inversé)
  • Alice crypte M avec ça clé privée : S pour verifier la signature
  • Bob decrypte S avec la clé publique de Alice et compare le resultate avec M

8°) RC4

Générateur pseudo-aléatorie qui produit des nombre entre 0 et 255
Inventer par R.Rivest en 1987
En 1994, le fonctionement est dévoilé sur le groupe usenet 'cyberpunk' (ARC4)
remarque:
  • on ne sait pas craquer RC4 en pratique
  • on sait distinguer RC4 d'une vrai suite aléatoire
fonctionement de RC4: deux étapes (initialisation avec une clé de 256 octets / génération)
l'état interne du générateur est donnée par i, j entier et p[] contenant 256 octets (dans le désordre)
remarque: la taille de l'état est de 258 octets -> pow(256,258) états possibles
la période est borné par pow(256,258) ≃ 1 << 1700

initialisation

K: tableau de taille t<256 (seed)
P = {0, ..., 255}, j = 0
for i in 0..255 loop
j = j + P[i] + K[i%len]
swap(P[i], P[j])
end loop

génération

i = i+1
j = j + P[i]
swap(P[i], P[j])
return P[P[i] + P[j]];