Jasypt, Bouncy Castle, Hibernate et Spring: Simplifier la cryptographie en java

Jasypt: did you know?
jasypt-small.png

C'est une API java, open source, qui simplifie grandement le chiffrement et l'anonymisation (hachage).
Jasypt : Java Simplified Encryption: le chiffrement simplifié en java.
Plus d'informations sur le site Jasypt.

Ce qui est intéressant c'est la facilité avec laquelle nous pouvons intégrer les frameworks: Hibernate3, Spring3, Bouncy Castle et Jasypt pour réaliser de manière
totalement transparente le cryptage ou l'anonymisation des (ou de certains) champs de la base de données.

Transparente, c'est à dire?

Justement la suite de ce billet démontre que le code métier ne sera pas impacté ni modifié.
Il suffit de configurer Spring et d'annoter (ou l'équivalent en xml) les entités persistantes avec les annotations d'Hibernate.
Q. C'est tout?
R. Oui, Heu... Peut-être également déclarer de nouveaux types pour Hibernate avec de nouvelles annotations.

Signalons que Jasypt suit les normes Oracle JCA / JCE pour la cryptographie uni-directionnelle (digest) ou bi-directionnelle.
Jasypt s'intègre parfaitement à Spring 2 & 3. Il est même conçu pour s'intégrer de façon thread-safe.
Jasypt est ouvert à tout fournisseur (provider) de JCE, par exemple Bouncy Castle.

Jasypt offre la possibilité de crypter les champs persistants avec Hibernate3 & 4.
L'objet de la démo ci-dessous est d'illustrer ce dernier point.
Pour cela, elle utilise Bouncy Castle Provider pour chiffrer les champs persistants avec notre ORM préféré Hibernate.
Enfin, Jasypt fournit une console qui permet de faciliter les phases de tests/recettes en modifiant directement les données dans la base

Passons au concret. L'environnement est BD Informix (ou toute autre), Spring3, Hibernate3, Bouncy Castle, Eclipse STS, Java6, Maven2. (Rien que çela...!)
Noter que notre thème est proche de celui traité dans mon billet sur filtre et cryptage.

Sécurité des données ? Elémentaire mon cher Java !

Lors de l'introduction de la gestion de la sécurité en Java, les solutions se déclinaient sous forme d'extensions aux noms plus ou moins sympathique comme JAAS, JSSE et JCE, qu'il fallait venir rajouter dans ses applications. Et encore, suivant les régions, toutes n'étaient malheureusement pas disponibles.

Heureusement ce n'est plus que de l'histoire ancienne car désormais, Java propose en standard tous les outils qu'il vous faut pour sécuriser facilement vos données. Intéressons nous en particulier à deux aspects : La génération d'empreinte de fichier et le chiffrement de ces derniers.