2008-09-08 39 views
10

Ist Bouncy Castle API Gewinde sicher? Vor allem,Ist Bouncy Castle API Thread sicher?

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

Ich plane, ein Singleton Spring Bean für grundlegende Kryptografie-Unterstützung in meiner App zu schreiben. Da es sich um eine Webanwendung handelt, besteht eine größere Wahrscheinlichkeit, dass mehrere Threads gleichzeitig auf diese Komponente zugreifen. Deshalb ist die Trittsicherheit hier entscheidend.

Bitte lassen Sie mich wissen, wenn Sie solche Situationen mit Bouncy Castle begegnet sind.

Antwort

12

Es spielt keine Rolle, ob der API/Code Thread-sicher ist. Die CBC-Verschlüsselung an sich ist nicht Thread-sicher. Einige Terminologie -

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. 

Eine wirklich einfache CBC Umsetzung aussehen kann: P1, P2, P3 = Klartextmeldungen

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. 

Wie Sie sehen können, ist das Ergebnis der Verschlüsselung P1, P2 und P3 (in dieser Reihenfolge) unterscheidet sich von der Verschlüsselung von P2, P1 und P3 (in dieser Reihenfolge).

Also, in einer CBC-Implementierung ist Reihenfolge wichtig. Jeder Algorithmus, bei dem die Reihenfolge wichtig ist, kann per Definition nicht Thread-sicher sein.

Sie können eine Singleton Factory erstellen, die Verschlüsselungsobjekte bereitstellt, aber Sie können nicht davon ausgehen, dass sie Thread-sicher sind.

+0

Ja, Tnilsson, Ihre Argumentation ist richtig. Ich habe den folgenden Post http://www.bouncycastle.org/devmailarchive/msg04715.html aus der Mailingliste von Hüpfburg gefunden. Es ist nicht komplett Thread-sicher (zumindest AES-Engine). – jatanp

0

Die J2ME-Version ist nicht threadsicher.