2010-01-14 10 views
2

Cela semble raisonnablement trivial si vous utilisez le module ssl pour la communication TCP, mais comment la communication cryptée se ferait-elle via UDP?Chiffrement de paquet UDP

Le module ssl peut-il encore être utilisé? Si oui, quelles étapes doivent être effectuées pour que le client et le serveur soient dans une position où les données peuvent être envoyées comme d'habitude?

Répondre

4

DTLS est une dérivée TLS (alias SSL) conçue pour être utilisée sur des transports de datagramme, comme UDP.

OpenSSL supporte DTLS à partir de 0.9.8, en utilisant DTLSv1_METHOD au lieu de SSLv23_METHOD ou TLSv1_METHOD ou similaire.

+0

Cela ne semble pas prometteur, je suis en train de fouiller dans la documentation de pyOpenSSL pour l'instant et DTLSv1_METHOD n'est pas listé avec les méthodes SSLv23 et TLSv1. –

+0

Argh, vous avez raison. Le ChangeLog implique que les constantes DTLS ont été ajoutées, mais j'ai vérifié les sources maintenant et DTLSv1_METHOD n'est pas là. Il semble que ce pourrait être facile à ajouter, cependant. [modifier] https://bugs.launchpad.net/pyopenssl/+bug/454737 – ephemient

+0

L'implémentation DTLS d'OpenSSL telle qu'elle est actuellement semble assez peu fiable. J'ai créé sur le projet basé dessus et souffre des pertes inévitables des sessions DTLS. – ereOn

1

Vous pouvez utiliser pyCrypto ou ezPyCrypto pour crypter/décrypter manuellement les paquets.

+3

Comment? Faites-le individuellement par paquet? Énorme surcharge (en particulier compte tenu des limitations de taille du datagramme) avec le public et les clés incluses dans chaque paquet. Travailler à un niveau supérieur et diviser les résultats en plusieurs paquets? Non, UDP n'est pas fiable et la suppression/réorganisation va bousiller votre flux de décryptage. – ephemient

+0

Vous n'avez pas besoin d'envoyer des clés avec chaque paquet ... pourquoi ne pas envoyer la clé de pub à l'avance? –

+0

Oops, devrait juste être la clé ci-dessus. –