2008-09-08 41 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版本不是线程安全的。