2009-02-25 11 views
13

Nous avons besoin d'un développement Rijndael en Java.Prise en charge de Rijndael en Java

Des recommandations pour des articles, des bibliothèques, etc. qui pourraient nous aider?

Des pointeurs sur la maintenance du magasin de clés et comment stocker les clés en toute sécurité?

Edit:

Il devrait être open source. Essentiellement, il s'agit simplement de crypter/décrypter les données en utilisant Rijndael.

+0

Rijndael == AES – lImbus

Répondre

21

Java inclut AES hors de la boîte. Rijndael est AES. Vous n'avez pas besoin de bibliothèques externes. Vous avez juste besoin de quelque chose comme ceci:

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post 
byte[] iv = null ; //Ditto 
byte[] plaintext = null; //Whatever you want to encrypt/decrypt 
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
//You can use ENCRYPT_MODE or DECRYPT_MODE 
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv)); 
byte[] ciphertext = cipher.doFinal(plaintext); 

Et c'est tout, pour le chiffrement/décryptage. Si vous traitez de grandes quantités de données, il est préférable de lire des blocs de 16 octets et d'appeler update au lieu de doFinal (vous appelez simplement doFinal sur le dernier bloc).

+7

Rijndael n'est pas égal à AES, mais à la place est AES avec quelques restrictions - taille de bloc fixe de 128 bits, et certains modes de cryptage non pris en charge. Toute implémentation AES complète devrait être utilisable en tant que Rijndael. – Cheeso

+14

C'est exactement l'inverse, AES est un sous-ensemble de Rijndael –

+3

@ BrunoRohée est correct. AES est un sous-ensemble de Rijndael, vérifiez ceci http://stackoverflow.com/questions/748622/differences-between-rijndael-and-aes – tony9099

1

javax.crypto supporte AES: http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html

Comme pour le stockage de clé sécurisée, la méthode habituelle consiste à calculer une clé de chiffrement à partir de l'entrée d'utilisateur (une phrase de passe) en utilisant une fonction de hachage cryptographique, et en utilisant la clé dérivée de crypter le trousseau. Ou, si vous n'avez besoin que d'une seule clé, vous pouvez utiliser la clé dérivée elle-même. Toujours garder à l'esprit que la sécurité du système est directement liée à la force de la fonction de hachage utilisée.

Utilisez une fonction de hachage cryptographiquement sécurisée, avec un sel si possible, et hachez plus d'une fois (des centaines de fois, par exemple). Cela étant dit, la question est très vague.

+0

Il est également intéressant de noter que 'javax.crypto' utilise une version très optimisée d'AES et est assez rapide. – tony9099

5

Pour une excellente bibliothèque gratuite, je recommande fortement BouncyCastle. Il est activement maintenu, de haute qualité, et a une belle gamme d'exemples de code. Pour la documentation de référence, vous devrez compter plus sur le général JCE docs.

Je ne peux pas dire quelle bibliothèque nous utilisons pour répondre aux exigences de certification FIPS. Mais il existe des alternatives à CryptoJ qui sont beaucoup, beaucoup moins chères.

En général, je recommande de générer une nouvelle clé pour chaque message que vous chiffrez avec un chiffrement symétrique comme Rijndael, puis de chiffrer cette clé avec un algorithme asymétrique comme RSA. Ces clés privées peuvent être stockées dans un magasin de clés logiciel protégé par mot de passe comme PKCS # 12 ou JKS de Java ou, pour une meilleure sécurité, sur un jeton matériel "carte à puce" ou un autre module matériel cryptographique.

3

Comme ma société l'a récemment découvert, AES n'est pas tout à fait Rijndael. AES a la restriction que les clés DOIVENT être 128, 192 ou 256 bits - cependant, Rijndael permet aussi les clés 160 et 224.

Comme indiqué par erickson ci-dessus, BouncyCastle fournit un objet Rijndael qui prend en charge les longueurs de clé supplémentaires: 128/160/192/224/256 bits. Plus précisément, jetez un oeil à l'API légère. Gnu-crypto est une autre bibliothèque open source, mais elle ne fournit PAS de support pour les clés 160 et 224 bits. Donc, si vous recherchez spécifiquement le support complet de Rijndael, alors BouncyCastle est le seul que j'ai trouvé jusqu'à présent.

+1

Si vous avez besoin d'utiliser le java pour le développement androïde (bien que la question ne le mentionne pas, il vaut la peine de noter que Bounty Castle a maintenant un frère, qui donne plus de flexibilité sur android connu sous le nom Spongy Castle, qui est un dérivé. assez bien en fait) – tony9099

Questions connexes