OVH Cloud OVH Cloud

Cryptage du traffic TCP/IP avec openssl

26 réponses
Avatar
skalli14
Bonjour à tous,
J'ai developpé un petit soft serveur/clients en C qui permet
d'echanger des fichiers et de s'envoyer des messages. 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. Celui que je compte utiliser est le 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. Cependant, il ne
garantie pas l'identité du destinataire et donc est sensible a MIM
attaque.
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 m'interesse beaucoups aussi.
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é
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 ?
-Est ce que je peux utiliser directement SSL sans ralentir le debit du
traffic ?
-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 ?
-Quelles sont les solutions pour garantir l'authentification avec DH ?

Merci pour vos suggestions .

10 réponses

1 2 3
Avatar
YBM
Pourquoi ne pas utiliser tout simplement ipsec avec racoon, ça
te chiffre tout IP (pas seulement TCP) ?
(il accepte les clés RSA openssl)
Avatar
skalli14
YBM wrote:
Pourquoi ne pas utiliser tout simplement ipsec avec racoon, ça
te chiffre tout IP (pas seulement TCP) ?
(il accepte les clés RSA openssl)


Je prefere utiliser l'api openssl pour crypter les messages. IPSEC est
une solution facile, mais cela ne me permettra pas de comprendre
comment marche vraiment le cryptage des données et surtout à quel
genre de problemes on est confronté quand on veut crypter un flux TCP.

Avatar
YBM
YBM wrote:

Pourquoi ne pas utiliser tout simplement ipsec avec racoon, ça
te chiffre tout IP (pas seulement TCP) ?
(il accepte les clés RSA openssl)



Je prefere utiliser l'api openssl pour crypter les messages. IPSEC est
une solution facile, mais cela ne me permettra pas de comprendre
comment marche vraiment le cryptage des données et surtout à quel
genre de problemes on est confronté quand on veut crypter un flux TCP.


Regarde alors plutôt comment fait ssh (il peut faire de la redirection
de port par données chiffrées)


Avatar
Cedric Blancher
Le Wed, 16 Mar 2005 01:19:27 -0800, skalli14 a écrit :
Je prefere utiliser l'api openssl pour crypter les messages. IPSEC est
une solution facile, mais cela ne me permettra pas de comprendre
comment marche vraiment le cryptage des données et surtout à quel
genre de problemes on est confronté quand on veut crypter un flux TCP.


Regarde du côté de stunnel :

http://www.stunnel.org/


--
BOFH excuse #258:

That's easy to fix, but I can't be bothered.

Avatar
Erwann ABALEA
Bonjour,

On Tue, 15 Mar 2005, msurf wrote:

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.


C'est bien.

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 m'interesse beaucoups aussi.


Tant qu'à faire, utiliser des méthodes éprouvées ne peut que rendre de
grands services...

-Quelle solution retenir ?


Tu as OpenSSL, tu as donc *tout* ce qu'il te faut pour faire du SSL...

-Est ce que je peux utiliser directement SSL sans ralentir le debit du
traffic ?


Tu auras un petit ralentissement à l'établissement de la session, et
ensuite ça dépendra de la puissance CPU de tes machines, de l'algorithme
négocié, etc. En pratique, çe ne devrait pas géner.

-Comment implémenter de l'AES pour crypter du TCP.


Mauvaise question.

-Est ce que c'est facile d'utiliser les libraires d'OpenSSL pour
réalier tout ca?


Oui. Des exemples sont fournis, et des manpages existent.

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
j'ai pour habitude de mettre le post auquel je réponds sous le
mien et non au dessus et ce n'est pas de l'impolitesse envers vous il
faudra bien que vous vous y habituez
-+- MP in Guide du Neuneu d'Usenet : Le mépris par l'exemple -+-

Avatar
skalli14
-Comment implémenter de l'AES pour crypter du TCP.


Mauvaise question.

Pourquoi mauvaise question ??

Une autre petite question, coment se proteger contre the man in the
middle ???

Avatar
Erwann ABALEA
On Wed, 16 Mar 2005 wrote:

-Comment implémenter de l'AES pour crypter du TCP.


Mauvaise question.

Pourquoi mauvaise question ??


Parce que tu ne choisis que des mots clés, sans te soucier du protocole
complet. C'est pas comme ça que tu feras quelque chose de fiable et
sécurisé. Ajouter un peu de crypto sur du TCP, c'est pas si simple que ça:
- (re)synchronisation
- transport ou génération de clés
- taille des messages (et padding adéquat)
- transmission d'informations off-band (suppose la création d'un canal
pour tes données et d'un autre pour des infos de contrôle)
- vérification de l'identité de l'hôte distant
- ...
et tout ça sans te gourer, sachant qu'une petite erreur peut réduire à
zéro la sécurité de ton bel ensemble... Risqué.

Une autre petite question, coment se proteger contre the man in the
middle ???


SSL/TLS.

C'est vraiment pas compliqué, SSL ou TLS permet *tout* ce que tu demandes,
et OpenSSL te permet de le mettre en oeuvre facilement. Je ne vois pas
pourquoi tu cherches à réinventer la roue, surtout en utilisant un outil
qui a déjà servi à fabriquer de belles roues bien rondes et
fonctionnelles.

Et si tu tiens absolument à faire de l'AES (pour quelle raison?), tu n'as
qu'à configurer ton application pour n'accepter que les ciphers qui
mettent en oeuvre de l'AES:

testbox[~] openssl ciphers | sed 's/:/n/g' | grep AES
DHE-RSA-AES256-SHA
DHE-DSS-AES256-SHA
AES256-SHA
DHE-RSA-AES128-SHA
DHE-DSS-AES128-SHA
AES128-SHA


--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
Fous moi la paix. Laisse moi m'occuper des abuseurs.
Tu ferais mieux de t'occuper d'eux et rediger des plaintes au lieu
d'envenimer les anonymes.
-+- Crétin in <http://neuneu.mine.nu> : Le vénéneuneu -+-


Avatar
Michel Arboi
On Thu Mar 17 2005 at 13:08, Erwann ABALEA wrote:

C'est vraiment pas compliqué, SSL ou TLS permet *tout* ce que tu demandes,
et OpenSSL te permet de le mettre en oeuvre facilement. Je ne vois pas
pourquoi tu cherches à réinventer la roue, surtout en utilisant un outil
qui a déjà servi à fabriquer de belles roues bien rondes et
fonctionnelles.


#mode troll on
Il y a déjà eu des failles dans OpenSSL, et je ne mettrais pas ma main
à couper qu'il n'en reste pas une pentachiée en attente de
publication.
OpenSSL est un infâme plat de nouilles, qui a l'avantage d'exister.
SSL/TLS et X509 étant ce qu'ils sont, je ne suis pas convaincu qu'on
puisse faire beaucoup plus simple.
Je disais encore du mal d'ASN1 hier soir; je radote, c'est l'âge.

Est-ce que quelqu'un a regardé le code de GnuTLS ?

--
http://arboi.da.ru
NASL2 reference manual http://michel.arboi.free.fr/nasl2ref/

Avatar
MichelB
"Michel Arboi" a écrit dans le message de news:

On Thu Mar 17 2005 at 13:08, Erwann ABALEA wrote:

#mode troll on
Il y a déjà eu des failles dans OpenSSL, et je ne mettrais pas ma main
à couper qu'il n'en reste pas une pentachiée en attente de
publication.
OpenSSL est un infâme plat de nouilles, qui a l'avantage d'exister.
SSL/TLS et X509 étant ce qu'ils sont, je ne suis pas convaincu qu'on
puisse faire beaucoup plus simple.
Quand tu fais "trool on" ça t'ennuierais de faire "trool off " et de nous

instruire des alternatives sérieuses, solides et incontestables en l'état
actuel???

Avatar
skalli14
Je commencais à perde espoir d'avoir des reponses interéssentes! La
j'suis sevi.

C'est vraiment pas compliqué, SSL ou TLS permet *tout* ce que tu
demandes,

et OpenSSL te permet de le mettre en oeuvre facilement.


Je ne demande que ca ! Mais est ce que ca ne va pas trop ralentir les
echanges tcp?
En + j'aimerai que mon programme soit portable sur plusieurs OS. J'ai
vu que l'implementaion de SSL avec OpenSSL implique l'utilisation des
threads, mais j'aimerai eviter cela. De plus, je me demande si je ne
serai obliger en utilisant OpenSSL, de linker dynamiquement avec les
librairies ou je pourrais inclure directement les libs qui vont me
servir dans mon code. Le but au fait est de pouvoir utiliser mon
programme sans que OpenSSL ne soit installer sur la machine.

Pour la réponse >SSL/TLS protège contre "the man in the middle
attack",
ce n'est pas tellement vrai, et d'ailleur c'est pour cela que la notion
d'autorité de certification a ete inventé. Sans un CA, on ne peut pas
vraiment se proteger contre cette attaque. Peut etre que je me
trompe....

Finalement, est ce que kk1 peut me conseiller un livre ou un lien qui
pourrais m'aider a implémenter SSL à partir d'OpenSSL pour crypter
mes paquets TCP.

Merci !!!

1 2 3