Laisse quand même aux gens le temps de se connecter, lire et répondre avant de relancer...
En cryptographie, la solution souvent la meilleure est la suivante
1) crypter le message avec cryptage symétrique car très rapide
2) échanger la clef secrète via RSA très long mais pas grave car donnée à crypter très petite
L'algorithme de Diffie-Hellman peut-être, à mon avis, beaucoup plus approprié pour ton problème car il est assez rapide et son seul inconvénient est que les deux programmes doivent avoir au-moins un échange complet pour que l'algo soit déroulé en entier. Mais cet inconvénient te concerne pas puisque les programmes dialogueront en permanence. Et, contrairement à ce que tu dis, il est très facile à implémenter en C car son principe est très simple.
Les deux personnages A et B qui veulent échanger des données doivent établir une clef secrète et commune. L'algo sert juste à calculer la clef secrète et commune aux deux perso sans que la clef ne traverse le réseau.
Chacun des deux personnages se choisi un nombre perso secret appelé "S"
On a donc Sa et Sb les nombres choisis pas "A" et "B"
Les deux perso choisissent en commun deux nombres "M" et "P". Ils sont pas secret puisqu'ils doivent avoir les mêmes nombres donc les nombres seront communiqués via réseau et seront connus.
Ensuite, A calcule (M exp Sa) mod P. Ca donne un résultat Ra qui est transmis à B. B calcule alors (Ra exp Sb) mod P. Ca donne un autre résultat Kb
Puis B calcule (M exp Sb) mod P. Ca donne un résultat Rb qui est transmis à A. A calcule alors (Rb exp Sa) mod P. Ca donne un autre résultat Ka
Eh bien en final, Ka et Kb sont identique (K) et peuvent servir de clef de cryptage secrète. Et ni M, ni P, ni Ra ni Rb qui ont circulé ne permettent de trouver K sans Sa ou Sb qui restent secrets.
Cet algo a servi de base à RSA
Exemple: m=47, p=719, Sa=888, Sb=101
A calcule (47 exp 888) mod 719 => 60 et transmet 60 à B
B calcule (60 exp 101) mod 719 => 617
B calcule ensuite (47 exp 101) mod 719 => 342 et transmet 342 à A
A calcule (342 exp 888) mod 719 => 617
Le nombre 617 peut servir de clef de cryptage symétrique
Et pour calculer (47 exp 888) mod 719, comme c'est égal à (((47 exp 887) mod 719) * 47) mod 719, il te suffit de programmer une boucle de multiplication en calculant le modulo dans la boucle, ce qui te permet de ne pas avoir de nombres gigantesques.
Message édité par Sve@r le 09-03-2005 à 20:40:40