Contexte du projet
De nos jours, le chiffrement est partout afin de sécuriser les communications. On utilise HTTPS pour naviguer sur Internet en sécurité et on utilise des VPN pour chiffrer le trafic. Il est aussi fréquent de trouver du chiffrement sur les disques durs de nos ordinateurs, comme BitLocker sur Windows et Luks sur Linux. En bref, on utilise du chiffrement partout pour protéger nos données sensibles. J’ai donc développé un petit programme de chiffrement en Python pour chiffrer des fichiers sensibles en utilisant une clé de chiffrement.
J’ai développé une première version qui pouvait chiffrer des fichiers de petite taille, comme des fichiers texte ou des images de petite taille. Cette V1 était bien trop lente pour chiffrer des fichiers plus volumineux, tel que des fichiers vidéo ou des images plus haute résolution. Sa lenteur posait aussi problème lorsqu’il fallait chiffrer plusieurs fichiers, car même en implémentant la librairie multiprocessing dans le code, il restait extrêmement lent. Pour référence, j’utilisais un dataset contenant 500Mo d’images, et cette version de ZeCrypt prenait au total une dizaine de minutes pour traiter les centaines de fichiers d’images de mon dataset de référence. Beaucoup trop lent.

En mettant ce problème de côté, j’ai pris la décision de modifier mon implémentation des clés de chiffrement. Pour cela, j’ai ajouté une fonctionnalité permettant d’utiliser un fichier comme clé de chiffrement. Cela permet de stocker des clés de chiffrement plus longues. Avec cette mise à jour, j’ai mis en ligne un fichier pour générer des fichiers clés aléatoires (keygen.py). Rien de bien compliqué ici, il s’agit juste d’un simple générateur de clé aléatoire.
ZeCrypt V3 : un besoin de rapidité
En novembre 2023, il était temps de changer le code pour rendre le processus de chiffrement et de déchiffrement plus rapide. 10 minutes pour traiter un demi gigaoctet de données était trop long, surtout que pendant ce temps là, ZeCrypt prenait l’entièreté de la puissance de calcul de mon ordinateur pour traiter les fichiers. J’ai donc pris la décision de modifier mon algorithme de chiffrement et de créer une V3 du programme.
ZeCrypt V3 utilise principalement l’opérateur XOR pour chiffrer un fichier en utilisant un fichier clé. Ce nouvel algorithme est bien plus rapide que l’algorithme d’origine : environ 5 fois plus rapide. Impressionné par la vitesse de la version 3, j’ai effectué des tests de vitesse sur le même dataset de référence (qui fait, je le rappelle, environ 500Mo) et sur mon nouvel ordinateur, bien plus puissant que le PC de bureau que j’utilisais pour le jeu. Sur une machine équipée d’un processeur Intel i9-13900H et de 16Go de RAM, ZeCrypt V1 pouvait chiffrer et déchiffrer les images en 42 secondes (au lieu de 10 minutes sur mon autre PC), et ZeCrypt V3 pouvait traiter le même dataset en seulement 8 secondes en moyenne. Un résultat impressionnant !

Le futur du projet ZeCrypt
Je considère la version CLI de ZeCrypt comme terminée, en ce qui concerne l’algorithme. Après plus d’un an d’utilisation, je n’ai que rarement rencontré des problèmes avec ce programme de chiffrement (qui étaient principalement causés par une erreur humaine). Je l’utilise aujourd’hui pour mes backups dans le cloud et pour mes données sensibles, et même si le programme est assez complet, il reste toujours des mises à jour à faire sur le programme. J’envisage tout d’abord d’implémenter la librairie native argparse pour remplacer mon système d’entrée utilisateur un peu chaotique.