2008-09-08 74 views
10

Bouncy Castle API線程安全嗎?特別是,充氣城堡API線程安全嗎?

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

我打算在我的應用程序中編寫一個單例Spring bean用於基本級加密支持。由於它是一個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. 

一個非常簡單的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實施中,訂單很重要。根據定義,任何順序很重要的算法都不可能是線程安全的。

你可以建立一個提供加密對象的Singleton工廠,但你不能相信它們是線程安全的。

+0

是的,蒂尼爾森,你的推理是對的。我從充氣城堡的郵件列表中找到了以下帖子,網址爲http://www.bouncycastle.org/devmailarchive/msg04715.html。它不完全是線程安全的(至少AES引擎)。 – jatanp 2008-09-08 11:37:14

0

J2ME版本不是線程安全的。