Home

Cryptographie en Python

image

Contents

1. on voulait que d autres programmes crits dans d autres langages lisent ces cl s il faudrait d finir un format et des programmes d encodage et de d codage D sormais que les cl s sont l on peut programmer le serveur self server_key mykey Parties publique et priv e self client_ key client _ key Partie publique seulement le client est le seul connaitre la partie priv e de sa cl data self server server_key decrypt encrypted_ data self wfile write self server client_key encrypt response None 0 Comme toujours en cryptographie asym trique on chiffre avec une cl et on d chiffre avec une autre Ici le serveur connait la cl publique du client et chiffre donc la r ponse avant de l envoyer avec cette cl publique Le client lui a chiffr avec la cl publique du serveur ce qui fait que seul le serveur pourra d chiffre encrypted message server_key encrypt message None 0 Enfin voici les codes du serveur en ligne surhttp www bortzmeyer org files democrypto server py et du client enlignesurhttp www bortzmeyer org files democrypto client asymmetric cryp py Le mode d emploi est toujours le m me il faut juste s assurer que les cl s RSA g n r es plus t t sont bien disponibles dans le r pertoire courant noter que puisque n importe qui a pu obtenir la cl publique et chiffrer ce message ce protocole ne fournit pas d authentification on ne sait pas qui est en fac
2. Cryptographie en Python St phane Bortzmeyer lt stephane blog bortzmeyer org gt Premi re r daction de cet article le 27 juillet 2009 Derni re mise jour le 30 juillet 2009 http www bortzmeyer org python crypto html Quant on fait de la programmation r seau on a souvent besoin d utiliser de la cryptographie En ef fet par d faut les m chants qui sont situ s entre les deux machines qui communiquent peuvent couter tout le trafic et apprendre ainsi des secrets qu on aurait pr f r garder pour soi Un m chant actif peut dans certains cas faire encore pire en rempla ant tout ou partie des messages par un contenu de son choix Comment fait on de la cryptographie en Python D abord un avertissement il existe plusieurs solutions Pour des raisons de s curit il est recom mand d utiliser une biblioth que de haut niveau qui g re tous les d tails elle m me ce qui donne moins de travail au programmeur et surtout le dispense de faire une analyse de s curit de la partie lt cryptographie gt de son programme les pi ges possibles tant confin s dans la biblioth que Parmi les telles biblioth ques le programmeur Python peut essayer gpgme lt http www bortzmeyer org gpgme html gt dont le principal avantage est l interop rabilit avec les autres programmes utilisant la norme OpenPGP REC 4880 1 Ou bien M2crypto lt http chandlerproject org Projects MeTooCrypto gt b ti sur OpenSSL Ou encore Key
3. Czar lt http www keyczar org gt que je n ai pas encore essay Une liste d taill e de biblioth ques lt http vermeulen ca python cryptography html gt est disponible et elle n indique pas tout ce qui existe Mais ce court article est consacr une autre approche plus dangereuse qui n cessite de regarder plus en d tail comment a fonctionne mais qui permet de r aliser des services de cryptographie exacte ment comme on le d sire Je vais utiliser le Python Cryptography Toolkit lt https launchpad net pycrypto gt alias PyCrypto biblioth que tr s bien document e fichier pycrypt ps dans la distribu tion et qui fournit tous les services de base n cessaires pour b tir une solution de cryptographie La biblioth que figure d j dans la plupart des syst mes d exploitation par exemple sur Debian sous le nom de python crypto 1 Pour voir le RFC de num ro NNN http www ietf org rfc rfeNNN txt par exemple http www ietf org rfc rfc4880 txt 1 Je vais d velopper avec et sans cryptographie un client et un serveur pour un protocole trivial le serveur coute sur le port 4923 le client se connecte envoie un texte encod en UTF 8 de lon gueur quelconque et le serveur lui r pond par un texte donnant en anglais le nombre de caract res du message Commen ons sans la cryptographie utilisant SocketServer lt http docs python org library socketserver html gt voici le serveur en ligne s
4. e Dans l exemple pr c dent la cryptographie tait utilis e pour chiffrer ce qui pr servait la confi dentialit des communications mais n assurait pas l authentification RSA permet celle ci en signant les messages signature client_key sign message None 0 On transmet ensuite message et signature s par s par une cha ne de caract res d finie dans le protocole 2 outf write s s Sli message SEPARATOR signature Attention on signe avec sa propre cl priv e L autre partie peut alors v rifier cette signature avec la cl publique de son pair data signature _str signed data split SEPARATOR signature long signature_str if not self server client key verify data signature raise Exception Wrong signature in message http www bortzmeyer org python crypto html En modifiant d lib rement le message transmis par exemple en rempla ant message par message 1 ce qui en supprime la derni re lettre on peut v rifier que la signature choue bien On a donc la fois authentification seul le possesseur de la cl priv e a pu signer et contr le d int grit personne n a modifi le message en cours de route Ici j ai choisi de signer directement le message Cela marche mais la cryptographie asym trique tant en g n ral beaucoup plus lente que la cryptographie sym trique la m thode la plus courante pour signer est plut t de prendre un r sum cryptog
5. indications l adversaire CBC n a pas ce d faut mais dans cet exemple de programme tr s sommaire l tat du d codeur n tant pas r initialis chaque client CBC qui n cessite que les deux parties se souviennent de l tat n est pas utilisable Ce probl me est une excellente illustration des risques de s curit qu on court si on programme un bas niveau Avec des biblioth ques comme gpgme lt http www bortzmeyer org gpgme html gt tout ces risques auraient t g r s en dehors de l intervention du programmeur Autre pi ge AES n cessite des donn es dont la longueur soient des multiples de 16 il va donc falloir faire du remplissage avec des octets nuls qui ne peuvent pas tre pr sents en UTF 8 if len message 16 0 n 16 len message 16 for i in range 0 n message 0 http www bortzmeyer org python crypto html ou plus compact et qui plaira davantager aux Pythonistes merci ric Lebigot pour sa suggestion message 0 x len message 16 Apr s tous ces d tails voici le serveur en ligne surhttp www bortzmeyer org files democrypto server py etle client en ligne sur http www bortzmeyer org files democrypto client symmetric crypto py Le mode d emploi est exactement le m me que pr c demment On peut utiliser Wireshark pour v rifier que le message est bien chiffr La cryptographie sym trique marche elle est simple programmer
6. mais elle a des limites La prin cipale est que les deux parties doivent connaitre la cl on dit qu il y a un secret partag Comme le sait la sagesse populaire si deux personnes sont au courant ce n est plus un secret Je vais donc passer en cryptographie asym trique dite aussi tort lt cl publique gt En cryptogra phie asym trique chaque cl a deux parties une publique qu on peut distribuer ses correspondants sans crainte et une priv e qu on garde pour soi Je vais utiliser l algorithme RSA et faire d abord un programme qui g n re les cl s key RSA generate 512 pool get_bytes Deux points noter la taille de 512 bits pour la cl est bien trop faible compte tenu des possibilit s de cassage de cl s RSA par force brute Pour un vrai programme 1024 est probablement un minimum Et le second point est dans le param tre pool get_bytes Le Python Cryptography Toolkit n cessite que le programmeur fournisse lui m me un g n rateur al atoire pour fabriquer la cl Il n est pas vident de choisir un bon g n rateur al atoire le RFC 4086 donne de bonnes indications ce sujet La plupart des bogues affectant la s curit des syst mes cryptographique viennent du g n rateur al atoire comme la fameuse bogue Debian lt http wiki debian org SSLkeys gt due une modification imprudente d OpenSSL Pour ne pas trop faire souffrir le programmeur le Python Cryptography Toolkit four
7. nit un module Crypto Util randpool qui nous permet d avoir un g n rateur tout fait Encore faut il penser l uti liser encore un exemple des risques auxquels on s expose en programmant bas niveau pool randpool RandomPoo l Et la fonction pool get_ bytes fournit ce qu on veut Attention RandomP oo est loin d tre parfait lt http lists dlitz net pipermail pycrypto 2008q3 000000 htm1l gt et pourrait disparaitre des prochaines versions du Python Cryptography Tool kit Trouver un bon g n rateur al atoire n a jamais t facile Maintenant que tous ces points sont trait s voici le programme de g n ration des cl s en ligne sur http www bortzmeyer org files democrypto create rsa key py Il crit les cl s dans des fichiers le fichier full1 key contient les parties priv es et publiques d une cl il doit donc tre soigneusement prot g par exemple mode 400 sur Unix Le fichier public key ne contient que la partie publique et peut donc tre diffus largement On g n re donc deux cl s http www bortzmeyer org python crypto html python democrypto create rsa key py server Generating key for server python democrypto create rsa key py client Generating key for client Le programme en question stocke les cl s dans des fichiers sous forme d objets Python s rialis s avec le module pickle lt http docs python org library pickle htm1l gt Ce format est sp cifique Python si
8. raphique du message ce qui est une op ration relativement rapide puis de signer ce r sum Les grands protocoles de cryptographie comme TLS REC 5246 fonctionnent tous comme cela Voici donc pour terminer le serveur en ligne sur http www bortzmeyer org files democrypto server a py etle client en ligne sur http www bortzmeyer org files democrypto client authentified py avec signature Bon courage amusez vous bien avec la cryptographie et n oubliez pas les programmes pr sent s ici sont tr s simplistes sont livr s sans aucune garantie comportent des risques connus comme l utili sation d ECB et certainement d autres que je ne connais pas Un autre article sur ce sujet tr s clair et pratique est lt Python and cryptography with pycrypto lt http www laurentluce com p 280 gt gt Un exemple d un grand projet utilisant PyCrypto est lt Distributed Identity Management in the PGP Web of Trust lt http www seas upenn edu cse400 CSE400_2005_2006 Margolis paper pdf gt gt Merci Damien Wyart pour ses bonnes remarques http www bortzmeyer org python crypto html
9. ur http www bortzmeyer org files democrypto server plain py etleclient en ligne sur http www bortzmeyer org files democrypto client plain py Le mode d emploi est simple Lancement du serveur 2 python democrypto server plain py 2009 07 27 21 25 13 INFO Starting server Lancement du client on indique l adresse IP du serveur et le message tagada python client plain py 2a01 e35 8bd9 8bb0 21c 23ff fe00 6b7f tagada 2009 07 27 21 25 48 INFO Response was You sent 6 characters N importe qui sur le trajet entre les deux machines ou m me en dehors gr ce des techniques comme celle de Kapela amp Pilosov lt http www bortzmeyer org faille bgp 2008 htm1l gt pour vait couter notre message ultra secret tagada Il est donc urgent de prot ger la communication Je vais d abord utiliser la cryptographie sym trique o les deux parties le client et le serveur partagent la m me cl secr te Utilisant le Python Cryptography Toolkit et l algorithme de chiffrement AES on va chiffrer ainsi coder AES new KEY AES MODE ECB o outf write s coder encrypt message et d chiffrer ainsi self decoder AES new KEY AES MODE_ECB text self server decoder decrypt encrypted_text Le mode ECB utilis ici est moins s r que CBC galement disponible Il est moins s r car avec ECB un m me texte en clair est toujours encod dans le m me texte chiffr ce qui peut donner des

Download Pdf Manuals

image

Related Search

Related Contents

Symbol Technologies LS 2106 Scanner User Manual  criterios claves y estándares de calidad en la descontaminación de  AN221K04-v4 – AnadigmVortex Development Board  English version is only informative, technical specifications in  Micro-organismes EZ-FPC™  Nokia Lumia 800 16GB White    Yarvik Bluetooth Music Bridge  回収理由  Baumatic BCG905SS cooker  

Copyright © All rights reserved.
Failed to retrieve file