Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3009 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Cryptage du traffic TCP/IP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Cryptage du traffic TCP/IP

n°1006911
brethold
Posté le 09-03-2005 à 15:02:50  profilanswer
 

Bonjour à tous,
J'ai developpé un petit soft serveur/clients en C qui permet d'echanger des fichiers et de s'envoyer des messages. (C'est pas pour faire de la concurence à MSN lol ... ). Tous les clients passent par le serveur pour communiquer.
Maintenant, je recherche des solutions pour crypter toutes les communications TCP entre les clients et le serveur. Je developpe sous Linux debian, j'ai bien sur installé OpenSSL et je compte utiliser ses libraires pour crypter les données.
 Je sais qu'il existe plusieurs types de cryptages pour chiffrer les communications TCP. Soit en utilisant un cryptage symétrique (AES), mais à ce moment là je sais pas du tout comment faire pour échanger la clé secrète de session.  
J'ai vu que Diffie-Hellman pouvait etre une solution mais apparemant trés difficile à programmer en C ou meme d'implémenter à partir d'OpenSSL.
Il existe aussi une autre solution pour échanger la clé secrètre, c'est celle qu'utilise SSL. On crypte alors la clé secrète avec du RSA pour la transmettre. Cette solution aussi m'interesse beaucoups.
J'ai aussi pensé à utiliser une architecture PKI. Le serveur qui relie les clients serai alors le CA ( authorite de certification ). Au moment de la connexion, le serveur transmet son certificat auto-signé par lui meme au client, le certificat contient la clé publique du serveur. Cette clé permettra de transemttre la clé symétrique de session. Je demande donc aux conaisseurs de cryptographie de me donner quelques conseils:
-Quelle solution retenir ?
-Comment implémenter de l'AES pour crypter du TCP.
-Est ce que c'est facile d'utiliser les libraires d'OpenSSL pour réalier tout ca?
-Connaisez vous des livres ou des liens ou je peux trouver quelque chose de similaire ?
-Que sera l'impact sur les performances des échanges entres clients/serveur ?
 
Merci pour vos suggestions .

mood
Publicité
Posté le 09-03-2005 à 15:02:50  profilanswer
 

n°1006996
brethold
Posté le 09-03-2005 à 16:18:52  profilanswer
 

je relance :)

n°1007270
Sve@r
Posté le 09-03-2005 à 20:39:14  profilanswer
 


 
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
n°1007588
fafounet
Posté le 09-03-2005 à 23:51:09  profilanswer
 
n°1007799
brethold
Posté le 10-03-2005 à 10:30:41  profilanswer
 

Merci Sve@r pour ta réponse. Pour l'instant j'étudie les différentes manières de faire. Je compte implémenter mon cryptage symétrique à partir des libraires OpenSSL. Mais j'sais toujours pas si c'est facile de crypter un flux TCP avec les libraires OPENSSL. Puis j'aurai bien voulu avoir une réponse sur la solution PKI ou le serveur delivre un certificat aux clients...
Si vous avez des url intéressentes j'suis prenneur

n°1008169
brethold
Posté le 10-03-2005 à 13:41:54  profilanswer
 

hop hop


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Cryptage du traffic TCP/IP

 

Sujets relatifs
Numero Trame TCPcryptage et decryptage
Retrouver un algorithme de cryptage...probleme de cryptage d'une variable...
cryptage en CPPBesoin d'aide pour MODBUS TCP
Composants Indy et ports UDP/TCP[Bash UNIX] Cryptage de mot de passe
Envoi de fichiers en TCPpb client avec socket tcp en caml
Plus de sujets relatifs à : [C] Cryptage du traffic TCP/IP


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)