2008-09-08 54 views
10

Bouncy Castle APIスレッドセーフですか?特に、Bouncy Castle APIスレッドセーフですか?

org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher 
org.bouncycastle.crypto.paddings.PKCS7Padding 
org.bouncycastle.crypto.engines.AESFastEngine 
org.bouncycastle.crypto.modes.CBCBlockCipher 

私のアプリで基本レベルの暗号化サポート用のシングルトンスプリングビーンを書く予定です。これはWebアプリケーションなので、一度に複数のスレッドがこのコンポーネントにアクセスする機会が増えます。だからここではトレッドの安全が不可欠です。

このような状況がBouncy Castleを使用して発生した場合は、お知らせください。

答えて

12

API /コードがスレッドセーフであるかどうかは実際問題ではありません。 CBC暗号化自体はスレッドセーフではありません。 - いくつかの用語

E(X) = Enctrypt message X 
D(X) = Dectrypt X. (Note that D(E(X)) = X) 
IV = Initialization vector. A random sequence to bootstrap the CBC algorithm 
CBC = Cipher block chaining. 

A本当に簡単CBCの実装は次のように見ることができます: P1、P2、P3 =プレーンテキストメッセージ

1. Generate an IV, just random bits. 
2. Calculate E(P1 xor IV) call this C1 
3. Calculate E(P2 xor C1) call this C2 
4. Calculate E(P3 xor C2) call this C3. 

あなたが見ることができるように、暗号化の結果P1、P2とP3(この順番で)は、P2、P1、P3(その順番で)の暗号化とは異なります。

したがって、CBCの実装では、順序が重要です。定義が重要なアルゴリズムは、定義上、スレッドセーフではありません。

暗号化オブジェクトを配信するシングルトンファクトリを作成できますが、スレッドセーフであるとは信じられません。

+0

はい、Tnilsson、あなたの推論は正しいです。私は弾力のある城のメーリングリストから次の投稿、http://www.bouncycastle.org/devmailarchive/msg04715.htmlを見つけました。完全にスレッドセーフではありません(atleast AESエンジン)。 – jatanp

0

J2MEバージョンはスレッドセーフではありません。

関連する問題