Voici une petite librairie qui effectue l'encryption / décryption de données en utilisant les algorithmes RSA (asymétrique ; avec clef publique et clef privée) et Blowfish (symétrique). Cette petite librairie se base sur une version récente de OpenSSL. Elle devrait pouvoir être compilée pour linux, Windows ou Mac OS (testée uniquement sous linux pour l'instant).
Mise à jour : version 0.4 licence explicite, améliorations du pipeline, amélioration du build sous Windows (non testé), correction d'un bug dans certaines version de la fonction sha256(), test supplémentaires sur les pipeline, ajout d'un changelog.
Mise à jour : version 0.3 changement de système de build (cmake) + pipeline + adapteurs pour les encodeurs et les cryptographes + tests unitaires
Mise à jour : version 0.2 SHA256 + encoders dans leur propre librairie
Mise à jour : version 0.1 (la précédente version n'avait pas de numéro).
Présentation
Généralement, lorsqu'on souhaite crypter des communications réseau, on instaure un protocole qui ressemble à
client : je t'envoie ma clef publique RSA
serveur : ok ; je génère une clef blowsfish et je la crypte en utilisant ta clef publique, et je te renvoie le résultat
client : je décrypte le message ; j'ai la clef blowfish. A partir de maintenant, je crypte tout avec cette clef.
On peut utiliser le cryptage privé RSA (crypter avec la clef privée, décrypter avec la clef publique) pour implémenter une mécanisme de signature des données envoyées par le serveur (ce qui nécessite que le client connaissance par avance la clef publique du serveur ; on peut mettre celle-ci dans le programme client directement). De cette façon, on peut réduire les attaques du type
man in the middle, même si ce n'est pas encore parfait.
blowfish est un des algorithmes de cipher (encryption / décryption) les plus rapides, mais il est symétrique (la même clef sert aux deux opérations). Du coup, si on souhaite l'utiliser pour les communications, il faut trouver un moyen sécurisé d'envoyer la clef aux deux parties. D'où l'idée d'utiliser RSA pour le transport de la clef : l'algorithme est adapté à l'encryption de blocs de petite taille (par exemple, la taille d'une clef) mais il est lent. De plus, gérer des blocs de grande taille avec RSA est une fort mauvaise idée (il n'est pas fait pour ça).
Licence
La licence d'utilisation est une licence libre. Le texte de la licence sera ajouté à la prochaine révision. le code de encoder::base64 est basé sur celui de René Nyffenegger.
Version 0.3
Pour construire la librairie, vous devez avoir cmake installé sur votre machine. Je n'ai pas encore fait les tests de compilation avec MSVC++ (si un problème se pose, il sera corrigé dans la prochaine version).
- cd ekogen-0.3 && mkdir build
- cmake ..
- make && make test
Un petit framework simple de tests unitaire a été ajouté dans cette version (test/utest.h). Vous pouvez trouver des exemples d'utilisation dans le répertoire test/. Les groupes de fonctionnalités suivants sont testés :
- la partie sécurité (dans security.cpp), y compris sha256, avec les 40 premiers vecteurs courts ; quand j'aurais le temps, j'ajouterais l'ensemble des tests nécessaires à la validation de sha256.
- la partie encodeurs, dans encoder.cpp
- la partie pipeline : les pipelines permettent d'enchainer des fonctions unaires, avec une syntaxe relativement simple (voir pipeline.cpp)
- la partie functional, de peu d'intérêt pour vous, utilisée par les pipeline