Transcript
Ü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