【问题标题】:Is Bouncy Castle API Thread Safe?Bouncy Castle API 线程安全吗?
【发布时间】:2008-09-08 11:04:13
【问题描述】:

Bouncy Castle 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 时遇到过此类情况,请告诉我。

【问题讨论】:

    标签: java cryptography bouncycastle


    【解决方案1】:

    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 实现中,顺序很重要。根据定义,任何顺序很重要的算法都不能是线程安全的。

    您可以创建一个传递加密对象的单例工厂,但您不能相信它们是线程安全的。

    【讨论】:

    【解决方案2】:

    J2ME 版本不是线程安全的。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2011-07-19
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多