Übersicht
JCE & Bouncy Castle
z
Java Cryptography Extension (JCE)
z
z
Tobias Zimmermann
z
[email protected]
Bouncy Castle Crypto API
z
z
z
z
z
Design
Anwendung
Design
Anwendung
Vergleich JCE & Bouncy Castle
Beispiele
Fragen
1
JCE (Java Cryptography Extension)
z
z
z
z
JCE Design
Was ist JCE?
z
2
Kryptografie Erweiterung für Java
Framework zum implemetieren von Kryptografie
Verbindung zwischen Applikation und Kryptografie
Provider
SunJCE
Provider
IAIK
Provider
…
JCE von Sun
z
z
z
z
Ab SDK 1.4 (jce.jar)
JCE Version 1.2.2
SunJCE Provider Version 1.4
Nur class-Files!
JCE
Applikation
3
4
1
JCE Design
JCE Design
Provider
z
SunJCE
z
z
z
z
z
z
Default Provider der JCE von Sun.
Sehr begrenzte Anzahl Algorithmen (USA).
Nur byte-code.
DES, Triple-DES, HMAC, …
z
z
z
IAIK
z
z
z
z
Für jede Art von Kryptografie eine FactoryKlasse (core-classes).
IAIK-Java Gruppe (TUG aus Östereich).
Sehr viele Algorithmen.
Nur byte-code.
RSA, AES, SHA-1, …
z
Cipher
KeyGenerator
…
Gewünschter Algorithmus und Provider wird
der Methode getInstance() als String
mitgegeben.
z
Cipher c = Cipher.getInstance(“DES“, “IAIK“);
5
JCE Anwendung
z
JCE Anwendung
Provider Laden
z
import iaik.security.provider.IAIK;
import javax.crypto.Cipher;
statisch im File java.security eintragen
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.4= iaik.security.provider.IAIK
z
6
dynamisch in der Applikation laden
Public static void main(String args[]){
Security.addProvider(new iaik.security.provider.IAIK());
…
}
7
public static void main(String args[]){
byte[] buffer_in;
byte[] buffer_out;
Security.addProvider(new IAIK());
Cipher c = Cipher.getInstance(“AES“, “IAIK“);
Key key = KeyGenerator.getInstance(“AES“, “IAIK“). generateKey();
c.init(Cipher.ENCRYPT_MODE, key);
… buffer_in füllen
buffer_out = c.doFinal(buffer_in);
… buffer_out speichern oder weiterverarbeiten
}
8
2
Bouncy Castle
Übersicht
z
Java Cryptography Extension (JCE)
z
z
z
z
z
z
Was ist Bouncy Castle?
z
Bouncy Castle Crypto API
z
z
z
Design
Anwendung
z
Design
Anwendung
z
z
Vergleich JCE & Bouncy Castle
Beispiele
Fragen
z
z
Von der Gruppe the Legion of the Bouncy Castle
aus Australien.
lighweight API für Java.
Provider für JCE.
clean room implementation von JCE 1.2.1.
Signiertes Jar-File des Provider.
open source!
9
10
BC Design
BC Anwendung
lightweight API
lightweight API
z
Für jede Art von Kryptografie ein eigenes
Interface.
z
z
z
z
Benötigte Klassen suchen
z
AsymmetricBlockCipher
Digest
…
z
z
z
AESEngine
SHA1Digest
…
Instanz dieser Klasse erstellen
BlockCipher aes = new AESEngine();
z
Anwenden
des.processBlock(buffer_in, 0, buffer_out, 0);
…
11
12
3
BC Anwendung
Übersicht
lightweight API
static final int KEYLENGTH = 7; //byte
z
public static void main(){
int blocksize;
byte[] buffer_in;
byte[] buffer_out;
byte[] key = SecureRandom.getSeed(KEYLENGTH);
BlockCipher des = new DESEngine();
des.init(true, new KeyParameter(key));
des.reset();
blocksize = des.getBlockSize();
buffer_in = new byte[blocksize];
buffer_out = new byte[blocksize];
... buffer_in füllen
des.processBlock(buffer_in, 0, buffer_out, 0);
... buffer_out speicher oder …?
}
z
z
z
z
z
z
z
z
z
z
z
z
Vergleich JCE & Bouncy Castle
Beispiele
Fragen
14
Vergleich JCE & BC
Geschwingdikeit
z
z
JCE (Sun und IAIK)
Bouncy Castle lightweight API
z
z
AES (Advanced Encryption Standard)
JCE von IAIK v3.03
Provider IAIK v3.03
BC lightweight API v1.18
[ms]
Kriterien
z
Design
Anwendung
13
Was wurde Verglichen
z
Design
Anwendung
Bouncy Castle Crypto API
z
Vergleich JCE & BC
z
Java Cryptography Extension (JCE)
key
init
enc.
dec.
total
Geschwindigkeit
Dokumentation
Bedienung
Vetrauenswürdigkeit
15
JCE
1611.6
111.0
85.1
156.2
1973.9
BC
325.6
33.0
129.3
108.0
604.8
16
4
Vergleich JCE & BC
Vergleich JCE & BC
Dokumentation
z
JCE
z
z
z
Bedienung
z
+
+
-
API der SDK mit ausführlicher Beschreibung.
Viel Dokumentation auf der Sun Homepage.
Bouncy Castle
z
z
z
JCE
API mit wenig Beschreibung.
Wenig Dokumentation auf der Homepage.
Wenige Beispiele.
z
Alle Klasse werden ähnlich behandelt
Gute Dokumentation.
Ganzes jar-File muss installiert werden.
Nur class-Files.
Bouncy Castle
+
+
-
source code.
Nur verwendete Klassen in der Applikation.
Man muss viele Klassen verstehen.
Schlechte Dokumentation.
17
Vergleich JCE & BC
Vergleich JCE & BC
Vertrauenswürdigkeit
z
z
z
Fazit
JCE
z
z
Kann Code nicht kontrollieren, weil keine open
source.
Einzige Sicherheit ist, dass der Provider signiert
sein muss.
z
Bouncy Castle
z
18
Der ganze Code ist als open source vorhanden.
19
Bouncy Castle ist etwas komplizierter, sollte
aber JCE vorgezogen werden.
Einzige Möglichkeit wäre noch, die JCE
Implementierung und den Provider von
Bouncy Castle zu verwenden.
20
5
Übersicht
z
Java Cryptography Extension (JCE)
z
z
z
z
z
z
z
Design
Anwendung
Java Cryptography Extension (JCE)
z
z
Bouncy Castle Crypto API
z
z
Übersicht
z
Design
Anwendung
Bouncy Castle Crypto API
z
z
Vergleich JCE & Bouncy Castle
Beispiele
Fragen
z
z
z
21
Design
Anwendung
Design
Anwendung
Vergleich JCE & Bouncy Castle
Beispiele
Fragen
22
Fragen?
Tobias Zimmermann
[email protected]
Homepages zum Thema:
http://www.bouncycastle.org
http://java.sun.com/products/jce
http://jce.iaik.tugraz.at
23
6