La Communication entre ordinateurs par paquets de données dans des réseaux et la sécurité lors de la transmission de données avec la méthode de cryptage RSA

(Lisa Gill et Constantin Coester)


Envoyer des paquets de données à l'internet:
Pour envoyer un fichier de données à travers l'internet, il faut souvent le diviser en petits paquets et les envoyer par de differents chemins. On le fait de cette facon, premièrement parce qu'un grand paquet occuperait la liaison totalement et deuxièmement, parce que des paquets moins grands sont moins affectés par des perturbations lors de la transmission. Le matériel d'un grand paquet serait détruit alors qu'une partie de petit paquets arriverait sans être l'objet de la dégradation du signal. Alors, les petits paquets prennent moins de place d'une liaison, c.v.d. qu'ils peuvent être envoyés beaucoup plus rapidement. Puis, si une liaison est perturbée, seulement une partie du message sera détruite ou perdue parce que les autres parties prennent peut-être de différents chemins qui ne seront probablement pas dégradés. En plus, on peut envoyer ces petits paquets plusieurs fois pour qu'ils arrivent.

Codage d'informations:

Mais toujours, il se pose le problème que les messages envoyés peuvent être captés par d' autres personnes auxquels les messages ne sont pas destinés. Alors, il faut les coder pour qu'on ne puisse pas les lire sans les avoir décodé par une clé secrète. Cela est une application de la CRYPTOGRAPHIE. En plus, il faut utiliser un système de codage qui est facile à utiliser pour l'envoyeur et qui rend facile le décodage au destinataire et difficile le déchiffrage pour les autres personnes. Une méthode de cryptographie favorisée s'appelle RSA. Le nom RSA rappelle les trois inventeurs, R. Rivest, A. Shamir et L. Adleman. C'est une méthode asymétrique, ça veut dire qu'on prend des clés differentes pour crypter et décrypter.  A cause de cela, le RSA est très sûr. Mais il faut quand même prendre des nombres clés assez grands. Si on utilise un code de plus de 1024 bits, la sécurité devrait être suffisante. Pour des messages dont la sécurité est d'une importance très grande, il faut au moins cette grandeur, car en août 1999,  un team de scientifiques a réussi à déchiffrer un code de 512 bits.
Maintenant, on va vous expliquer comment le RSA fonctionne :
Principalement,  le  RSA utilise un couple de clés - une clé publique et une clé privée. Le RSA est un algorithme de chiffrement asymétrique. D'abord, il faut trouver deux nombres premiers p et q suffisamment grands. On calcule le produit n de ces deux nombres: n = pq. Puis,  il faut choisir un nombre e qui est premier avec p et q. Phi(n) est (p-1) (q-1). Maintenant il faut calculer un d tel que: ed mod Phi(n) = 1. Jusqu'ici, nous avons défini p, q, n, e, d .
 
p et q des nombres premiers assez grands
produit de p et q
Phi(n) (p-1) (q-1)
e nombre premier qui est premier avec Phi(n)
d calculé par la formule : ed mod Phi(n) = 1

La clé publique est le couple [e , n]

La clé privée est le couple [d , n]
Les nombres d , p et q ne doivent pas être communiqués à personne.
Avec la clé publique, l'envoyeur est capable de crypter un nombre m en obtenant un  nombre c par la formule:

c = m^e mod n

Le capteur peut décrypter c en utilisant la clé privée par la formule:

m = c^d mod n

Tout le monde peut crypter avec la clé publique du correspondant mais seul ce correspondant peut lire le message crypté.

Exemple :

(En réalité, il faudrait prendre des nombres beaucoup plus grands à cause de la sécurité!)

La personne X choisit deux nombres premiers p et q :

p = 11 (nombre premier)                                                   n = 187 = (p * q)

                                                                         Alors :
q = 17 (nombre premier)                                                   Phi(n) = 160 = (p 1)(q 1)
 
Puis X choisit un nombre e qui est premier avec Phi(n), p. e. :
e = 7
Enfin il calcule d avec (ed mod Phi(n) = 1)  => ed = 161 ; Alors :
d = 23
clé publique de X : n = 187              e = 7
clé privée de X : d = 23
Y veut envoyer à X le nombre m = 18. Tout le monde sait que la clé publique de X est

e = 7 et n = 187. Pour crypter m, Y calcule alors, utilisant la formule c = m^e mod n :

18^7 mod 187

c = 612220032 mod 187

c = 171

Y envoie alors ce nombre crypté c = 171 à Y. Mais une autre personne Z peut capter ce nombre c. Il est extrèmement difficile de trouver le nombre d à partir de la clé publique. Heureusement, seulement X connaît la clé privé, d = 23, alors il est le seul à pouvoir décrypter avec la formule m = c^d mod n :

m = 171^23 mod 187

m = 18

Sur le plan des mathématiques, ils se posent quelques problèmes:

 Pour crypter et décrypter, il faut calculer une puissance et un modulo. La puissance génère des nombres très grands. Alors, il est impossible de la calculer par une calculette normale. Une solution est l'algorithme "repeated square and multiply algorithm".
S'il y a des nombres trop grands à essayer toutes les valeurs de d dans [(p-1)(q-1)], il y a la solution d'appliquer l'"Algorithme d'Euclide Etendu". Cet algorithme est utilisé très souvent dans des opérations mathématiques.