Skip to content
Mysterie edited this page Sep 13, 2010 · 12 revisions

Streamster2-pyopenssl

Présentation du protocole TLS

Étant donné que le DTLS a été développé à partir du TLS, je vais en faire une brève présentation.

L’intérêt du TLS est qu’il est indépendant des protocoles dit applicatifs et se situe plus bas dans la pile TCP/IP.

[7 Couche applicative]

[5 Couche de session] (SSL,TLS,DTLS)
[4 Couche de transport] (TCP/UDP/SCTP)

[1 Couche physique]

En effet ces protocoles se situent sur la couche de session (5), C’est à dire juste au dessus de la couche de transport (TCP/UDP/SCTP) ce qui permet de chiffrer tous les protocoles applicatifs(7)
L’exemple le plus connu étant http → https.

Son fonctionnement:

- La communication débute par l’échange d’un duo de clef public/privé (dixit clef de session 1).
Cet échange de clef privé se fait par un chiffrement asymétrique (RSA).

- La communication client/serveur se fait par un chiffrement symétrique AES ou DES (qui est plus léger à réaliser qu’un chiffrement asymétrique). Il assurera la transmission des informations. Chaque paquet contient un code d’authentification CBC-MAC pour éviter les rejeux. (En gros pour décrypter le paquet 3 il faut le 2 et ainsi de suite.)

- La communication se termine par l’intervention de fonctions de hachage (SHA-1, MD5), pour s’assurer que les données ont été transmises sans être corrompues.

Le DTLS

Le DTLS est comme son nom l’indique le protocole TLS en mode datagramme (UDP). TLS utilisant Le CBC-MAC il faudra donc que chaques paquets se suivent les uns à la suite des autres pour pouvoir les décrypter et en cas de (perte/rejeux/changement de méthode de chiffrement) il est nécessaire de renvoyer les paquets perdus (garder en mémoire un certain nombre de paquet).

DTLS est très proche de TLS dans sont fonctionnement. Et la plupart des fonctions utilisées pour l’un pourront être réutilisés pour l’autre. Nagendra Modadugu qui a implémenté le DTLS dans le projet OpenSSL à ajouté à peu près 7000 lignes de codes. 60% d’entre elles proviennent directement d’OpenSSL.2

PyOpenSSL utilise des fonctions écrites en C pour créer ces packages. Donc le risque de faille/erreur dans l’implémentation et le temps de développement sont considérablement réduit. 3

Le projet Streamster2

D’après la RFC du DTLS le client et le serveur se mettent d’accord pour utiliser certaines fonctions de chiffrement. Hors comme notre communication se fera entre peer et de façon identique on pourra se mettre d’accord sur des fonctions de chiffrement à utiliser et à appliquer. Sachant qu’elles sont pour la plupart présentes dans OpenSSL. Pour éviter le changement de méthode de chiffrement pendant la communication.

Étant donné que l’anonymat de chaque peer est crucial, je pense que la gestion des certificats de type X.509 et autre AC ne seront pas nécessaire. Les clefs de session sont pour moi la meilleur solution.

Comme pour TOR, il y aura la possibilité de sniffer le noeud de sortie. On peut utiliser different noeud de sortie pendant les échanges mais cela complique ou rend impossible l’utilisation du CBC-MAC.

Autre

Pour mettre à jour les modules:
Dans le rep pyOpenSSL faire
.\pyOpenSSL\>"C:\Program Files\Python\python.exe" setup.py build_ext —with-openssl=“C:\Program Files\OpenSSL” install

Un exemple de client server.
.\pyOpenSSL\examples\>"C:\Program Files\Python\python.exe" mk_simple_certs.py
.\pyOpenSSL\examples\simple>"C:\Program Files\Python\python.exe" server.py 1337
.\pyOpenSSL\examples\simple>"C:\Program Files\Python\python.exe" client.py 127.0.0.1 1337

TODO: Erreur sur le serv

1 http://www.commentcamarche.net/contents/crypto/cledesession.php3

2 http://crypto.stanford.edu/~nagendra/papers/dtls.pdf

3 https://github.com/Mysterie/streamster2-pyopenssl/blob/master/pyOpenSSL/setup.py

Clone this wiki locally