2009-02-25 9 views
13

私たちはJavaでいくつかのRijndael開発を行う必要があります。JavaでのRijndaelのサポート

私たちを助ける記事、図書館などの推奨事項はありますか?

キーストアのメンテナンスの指針とキーの安全な保管方法について教えてください。

編集:

オープンソースである必要があります。本質的に、それはRijndaelを使用したデータの標準的な暗号化/復号化です。 http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.htmlセキュアキーストレージとして

は、通常の方法は、暗号ハッシュ関数を使用して、ユーザ入力(パスフレーズ)から暗号鍵を導出し、へ導出鍵を使用することである。

+0

Rijndael == AES – lImbus

答えて

21

Javaには、そのままのAESが含まれています。 RijndaelはAESです。外部ライブラリは必要ありません。

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); 

これは暗号化/復号化のためのものです。大量のデータを処理している場合は、16バイトの倍数であるチャンクを読み込み、doFinalの代わりにupdateを呼び出すほうがよいでしょう(最後のブロックでdoFinalを呼び出すだけです)。

+7

RijndaelはAESと同じではなく、128ビットの固定ブロックサイズとサポートされていない暗号モードがいくつかの制限付きのAESです。すべてのAES実装がRijndaelとして使用可能である必要があります。 – Cheeso

+14

これはまさに逆ですが、AESはRijndaelのサブセットです –

+3

@BrunoRohéeは正しいです。 AESはRijndaelのサブセットです。これを確認してください。http://stackoverflow.com/questions/748622/differences-between-rijndael-and-aes – tony9099

1

javax.cryptoではAESをサポートしていキーチェーンを暗号化します。または、1つのキーだけが必要な場合は、派生キー自体を使用できます。

システムのセキュリティは、使用されるハッシュ関数の強さに直接関係していることに常に注意してください。可能であれば、暗号で安全なハッシュ関数を使用し、複数回ハッシュ(例えば、何百回も)をハッシュします。

言われているように、質問は非常に曖昧です。偉大な無料のライブラリの

+0

「javax.crypto」はAESの非常に最適化されたバージョンを使用しており、かなり高速です。 – tony9099

5

、私は非常にそれは積極的に、高品質を維持し、コード例の素敵なアレイを有しているBouncyCastle.をお勧めします。参考資料については、一般的な内容にもっと頼らざるを得ないでしょう。JCE docs.

FIPS認証要件を満たすために私たちが使用するライブラリは何も言えません。しかし、はるかに安いCryptoJに代わるものがあります。

一般に、私はRijndaelのような対称暗号で暗号化し、RSAのような非対称アルゴリズムでその鍵を暗号化するメッセージごとに新しい鍵を生成することをお勧めします。これらの秘密鍵は、PKCS#12やJavaの「JKS」などのパスワードで保護されたソフトウェアベースのキーストアに格納するか、セキュリティを強化するために「スマートカード」ハードウェアトークンやその他の暗号ハードウェアモジュールに格納できます。

3

私の会社が最近知ったように、AESはかなりRijndaelではありません。 AESには、キーは128,192、または256ビットでなければならないという制約がありますが、Rijndaelは160と224のキーも使用できます。

上記エリクソンによって示されるように、はBouncyCastleは、追加のキーの長さサポートするラインダールオブジェクト提供:128/160/192/224/256ビット。具体的には、軽量APIを見てください。

、GNU暗号は、別のオープンソースライブラリです - しかし、それはまた、160と224ビットの鍵のためのサポートを提供していません。

あなたは、特にフルラインダールのサポートを探しているのであれば、その後はBouncyCastleは、私がこれまでに見つけた唯一のものです。

+1

Java for android developementを使用する必要がある場合(ただし、質問にはそのことが記載されていませんが、Bounty Castleには今や兄弟がいることに注意してください)、Spongy Castleと呼ばれるアンドロイドには柔軟性があります。実際にはかなり良い) – tony9099

関連する問題