Ü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