Безопасный ли API Bouncy Castle Thread? - PullRequest
11 голосов
/ 08 сентября 2008

Является ли API Bouncy Castle Безопасным для потоков? Особенно,

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

Я планирую написать в своем приложении одноэлементный компонент Spring для поддержки базового уровня криптографии. Поскольку это веб-приложение, существует большая вероятность того, что несколько потоков одновременно получат доступ к этому компоненту. Так что безопасность протектора здесь важна.

Пожалуйста, дайте мне знать, если вы сталкивались с такими ситуациями, используя Bouncy Castle.

Ответы [ 2 ]

13 голосов
/ 08 сентября 2008

Это действительно не имеет значения, если 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 голосов
/ 03 декабря 2010

Версия J2ME не является поточно-ориентированной.

...