Salut à tous,
[Message mis à jour 19/11/11]
Je suis actuellement sur un projet de stéganographie (art de dissimuler un message secret dans "quelque chose" (fichier, phrase, etc.) d'apparence banal). Il s'agit de faire une bibliothèque C++, Stego++, qui permette à tout développeur, même connaissant peu la stéganographie, de développer une application de stéganographie, ou de l'utiliser dans son travail. Elle sera sous licence LGPL3 et multi-plateforme (au moins Mac OS X, Windows, GNU/Linux et BSD).
L'idée est de faire suivre cela par une commande Unix utilisant Stego++, puis par une appli avec GUI, mais le coeur du projet est la bibliothèque.
Je n'ai rencontré que très peu de bibliothèque de stéganographie, et je pense qu'il s'agira de
la première en fait qui soit complète (et pas centrée sur un format ou algo donné) et libre.
Mes principaux objectifs pour Stego++ :
1)
modulaire. De nombreuses méthodes de stego, même très différentes et sur des media très divers (texte, image, video, paquet TCP, système de fichier, etc.) pourront être implémentées sous forme de modules.
2)
"secure". Les modules de stego devront répondre à des critères précis et chiffrés en matière de résistance aux attaques stéganalystiques.
3)
simple. Un développeur ne connaissant rien en crypto ni en stego doit pouvoir lire la documentation de l'API et pouvoir après une demi-journée coder ce qu'il veut en quelques dizaines de lignes. L'API doit être aussi petite que possible, même si ce but rentrera nécessairement en conflit avec mon désir d'intégrer plusieurs fonctions comme l'authentification, compression, etc.
Je suis en pleine recherche (lecture de
beaucoup de travaux de recherches (j'en suis déjà à mon quatrième gros bouquin technique), de codes sources (au moins 150 logiciels à lire en diagonal), etc.) pour essayer d'avoir quelque chose de sérieux.
Une fois le coeur de la biblio pensée et codée, je vous invite de tout coeur à collaborer !
- code commenté avec Doxygen
- deux documentations, une pour l'API publique, une pour les contributeurs
- utilisera Sourceforge ou quelque chose de similaire
- une documentation supplémentaire vous expliquant les principes de bases de la stégo
Pourquoi participer ? Parce que si jamais vous vous intéressez un peu à la crypto, vous serez passionnés par la stégo. De même que la crypto avant les années 70, la stégo reste un outil spécialisé pour agences gouvernementales (NSA, etc.) et groupes terroristes. De même que la crypto ou la robotique par le passé, son utilisation par les entreprises et le citoyen lambda me semblent encore sous-estimée, et il y a un grand essor à venir (et ce serait cool que le mouvement du libre en fasse partie).
Je sais que beaucoup d'entre vous sont par ailleurs préoccupés par la mise à mal croissante de l'anonymat et de la liberté sur Internet. Je pense qu'il est possible de défier ces mesures par des logiciels de crypto et de stégo. En tant que développeurs, il est même de notre devoir de développer de tels logiciels pour que le citoyen lambda puisse continuer à utiliser les nouvelles technologies comme des merveilles pour nos libertés (de communication, d'apprentissage, etc.), et non devenir de simples consommateurs apathiques. Et je pense que, de même que la crypto aujourd'hui est aux premières lignes de ce combat (Tor, contournement du Great Chinese Firewall, monnaie cryptographique, etc.), la stégo le sera bientôt. (cf le mouvement
cypherpunk)
Il y a également plusieurs usages créatifs de la stégo possible : par exemple, je compte intégrer un procédé de watermarking de code GPL, permettant la détection rapide de code propriétaire utilisant du code GPL sans permission.
Le projet me prend du temps et la phase implémentation ne sera qu'en dernier et sera courte, pour l'instant j'en suis à la phase apprentissage de bibliothèque/recherches sur la stego/penser à l'interface.
Les technos pour l'instant sont :
- General : C++ / Boost
- Chiffrement : Crypto++ (j'hésite encore avec openssl)
- Compression : libzpaq
- Versioning : Git
- Documentation : Doxygen
- Build : CMake
- Manipulation d'images : pas encore décidé
- Internationalisation : gettext (traductions anglais et chinois prévues)