Kryptografie mit Bouncy Castle : Kryptografie mit Bouncy Castle Zübeyde Kale-Caglar
Matr.Nr.216771
Übersicht : 15.12.2008 Zübeyde Kale-Caglar 2 Übersicht Kryptologie
Prinzipien des Kryptosystems
Bouncy Castle
Bouncy Castle Versuchsführung
JCE
Vergleich JCE und Bouncy Castle
Kryptologie : 15.12.2008 Zübeyde Kale-Caglar 3 Kryptologie Lehre von der Erfindung,
Untersuchung
und Anwendung kryptographischer
Verfahren.
Ein Algorithmus, Verfahren oder Code
die eine komplizierte Vorschrift zur
Durchführung von Ver- und
Entschlüsselung steuert.
Kryptologie : 15.12.2008 Zübeyde Kale-Caglar 4 Kryptologie Informationssicherheit durch Verschlüsselungsverfahren
Methoden des Analysierens und Brechens kryptografischer Verfahren
Kryptoanalyse
(Analyse von kryptografischen Verfahren)
Kryptografie
(Verschlüsselungssystem)
Kryptografie : 15.12.2008 Zübeyde Kale-Caglar 5 Kryptografie Umwandlung von einem Klartext
ins Geheimtext (Verschlüsselung)
Umgekehrt ein Geheimtext in einem Klartext (Entschlüsselung).
Der Schlüssel kontrolliert die Ver- und Entschlüsselung.
Frage?? : 15.12.2008 Zübeyde Kale-Caglar 6 Frage??
Kryptosystem : 15.12.2008 Zübeyde Kale-Caglar 7 Kryptosystem Ziel:
Schutz vor unbefugten Zugriff
Erreichbarkeit nach Vertraulichkeit
Schutz vor Manipulation
Anonymität
Kryptosystem : 15.12.2008 Zübeyde Kale-Caglar 8 Kryptosystem Symmetrisches System:
Für die Ver- und Entschlüsselung gilt der gleiche Schlüssel
„öffentlicher Schlüssel“ .
Sender und Empfänger müssen zuerst eine Schlüsselvereinbarung treffen.
Schlüssel geheim halten
Es besteht aus 3 Algorithmen:
Gen(t) – erzeugt den geheimen Schlüssel
Enc(k, M) – verschlüsselt Nachricht M zu Chiffre C unter Benutzung von k.
Dec(k, C) – entschlüsselt Chiffre C zu Nachricht M unter Benutzung von k.
Verschlüsselungsalgorithmen:
DES und IDEA
Kryptosystem : 15.12.2008 Zübeyde Kale-Caglar 9 Kryptosystem Symmetrisches Kryptosystem:
Kryptosystem : 15.12.2008 Zübeyde Kale-Caglar 10 Kryptosystem Asymmetrisches System:
Schlüsselpaar wird für Ver- und Entschlüsselung genutzt.
Parteien müssen über ein Schlüsselpaar kommunizieren
Schlüsselpaar besteht aus privaten Schlüssel und aus einem öffentlichen Schlüssel
Besitzt 3 Algorithmen:
Gen(t) – erzeugt ein Schlüsselpaar (sk, pk) nach Eingabe des Sicherheitsparameters t.
Enc(pk, M)
Dec(sk, C) BILD
Kryptosystem : 15.12.2008 Zübeyde Kale-Caglar 11 Kryptosystem Asymmetrisches Kryptosystem:
Frage??? : 15.12.2008 Zübeyde Kale-Caglar 12 Frage???
RSA : 15.12.2008 Zübeyde Kale-Caglar 13 RSA Den Namen hat das Verfahren von Ronald Rivest, Adi Shamir und Leonard Adleman
1977 wurde es entwickelt
Schlüsselpaar (public und -private key) wird über Primzahlen gebildet.
Schlüsselerzeugung wird durch Primzahlenrechnung berechnet
n= p * q
RSA/ Beispiel für die Schlüsselerzeugung: : 15.12.2008 Zübeyde Kale-Caglar 14 RSA/ Beispiel für die Schlüsselerzeugung: Primzahlen gewählt, 11 und 17
11 *17= 187 (N=187)
Berechne die eulersche Phi-Funktion phi(n) = (p – 1)(q – 1)phi(n) = (11 – 1)(17 – 1) = 160
Berechne phi(n) + 1phi(n) + 1 = 160 + 1 = 161
Der Wert e wird ausgewählt, wobei d ein Teiler aus phi(z)+1 sein muss. Der zweite Teiler aus phi(n)+1 ist d.
Es muss gelten: d*e=phi(z)+1 . Unzulässige Werte von d und e (z.B. d=e) werden als unsicher abgelehnt.da 161 = 7 x 23 (Faktorisierung)
sind 7 und 23 geeignete Kandidaten für e und d (ja)
Wir wählen e = 7 für den public key und d = 23 für den private key
Der Wert e wird zusammen mit n als öffentlicher Schlüssel definiert, der Wert d als privater Schlüssel. Der öffentliche Schlüssel, mit dem verschlüsselt wird, kann nun allgemein bekannt gemacht werden. Der private Schlüssel, muss geheim gehalten werden.
der ganze public key besteht also aus zwei Zahlen, nämlich( e; n), hier also (7; 187)der ganze private key besteht dann dem entsprechend aus den Zahlen (d; n), hier also (23; 187)
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 15 Bouncy Castle Implementierungsverfahren
Beschäftigt mit Verschlüsselungsverfahren
Eine Java- Klassenbibliothek mit Open-Source-Community
Kryptografie API für Java
Implementierung von Klassen und Quellcode
API aus der Gruppe:
The Legion of the Bouncy Castle
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 16 Bouncy Castle Bouncy Castle APIs enthalten folgendes:
• Komplette, unabhängige Kryptografie API (lightweight API) für Java.
• Provider für JCE und JCA.
• clean room implementation von JCE 1.2.1.
• Signiertes Jar-File des Providers.
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 17 Bouncy Castle Vorteile:
Mehr und neuere Verschlüsselungsverfahren
Bouncy Castle kann also sowohl als eigene, von JCE unabhängige API verwendet oder aber auch als Provider in die JCE eingesetzt werden.
läuft auf allen Java
Open Source
Jeder Klasse, die man braucht wird implementiert
www.bonucycastle.org
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 18 Bouncy Castle Design:
lightweight Kryptografie API hat für jede Gruppe ein eigenes Interface.
Implementiert wird dann jeder Algorithmus in einer eigenen Klasse,
die das dazugehörige Interface Implementiert über dies die Klasse dann auch angesprochen und verwendet wird
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 19 Bouncy Castle Kryptografie Gruppe Interface:
z. B: Blockcipher Klasse:
IDEAEngine Klasse:
AESEngine
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 20 Bouncy Castle Interface:
AsymmetricBlockCipher
AsymmetricCipherKeyPairGenerator
BasicAgreement
CipherParameters
Digest Interface
DAS
Mac Interface
StreamCipher
Wraper
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 21 Bouncy Castle Anwendung:
Benötigte Klassen suchen
AESEngine, SHA1Digest
Instanz dieser Klasse erstellen
BlockCipher aes = new AESEngine();
Anwenden
des.processBlock
(buffer_in, 0, buffer_out, 0);
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 22 Bouncy Castle Installation
Voraussetzung:
Java-Entwicklungsumgebung von Eclipse
Benötigte Dateien:
Den JCE-Provider der "Bouncy Castle Crypto APIs":
bcprov-jdk14-123.jar von
http://www.bouncycastle.org/latest_releases.html und
"Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 1.4.2": jce_policy-1_4_2.zip von
http://java.sun.com/j2se/1.4.2/download.html
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 23 Bouncy Castle Anweisungen:
Erstellung eines Umgebungsvariable $JAVA_HOME , dort wird das Java
Installationsverzeichnis gespeichert.
Die Datei bcprov-jdk14-120.jar in das Verzeichnis $JAVA_HOME/jre/lib/ext kopieren
In das Verzeichnis $JAVA_HOME/jre/lib/security wechseln. und dort die Datei jce_policy-1_4_2.zip auspacken.
Die Datei $JAVA_HOME/jre/lib/security/java.security editiren.
Ergänzung den Abschnitt „ Security Provider“ security.provider. n=…um 1 erhöhen
Zeilen einfügen: security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 24 Bouncy Castle Anwendungsbeispiel:
import java . s e c u r i t y . SecureRandom; \ \
import org . bouncycastle . crypto . BlockCipher ; \ \
import org . bouncycastle . crypto . engines . DESedeEngine ; \ \
import org . bouncycastle . crypto . paddings . PaddedBufferedBlockCipher ; \ \
import org . bouncycastle . crypto . params . KeyParameter ;
s t a t i c f i n a l i n t KEYLENGTH = 7 ;
publ i c s t a t i c void main ( )
{
i n t b l o c k s i z e ;
byte [ ] buffer_in ;
byte [ ] buffer_out ;
byte [ ] key = SecureRandom . getSeed (KEYLENGTH) ;
BlockCipher des = new DESedeEngine ( ) ;
des . i n i t ( true , new KeyParameter ( key ) ) ; / / true -> encryption ,
des . r e s e t ( ) ;
b l o c k s i z e = des . g e t Bl o ckSi z e ( ) ;
buffer_in = new byte [ b l o c k s i z e ] ;
buffer_out = new byte [ b l o c k s i z e ] ;
. . . / / f i l l up the buffer_in
des . processBytes ( buffer_in , 0 , b l o c k s i z e , buffer_out , 0 ) ;
. . . / / s t o r e buffer_out
}
Frage??? : 15.12.2008 Zübeyde Kale-Caglar 25 Frage???
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 26 Kryptografie mit Bouncy Castle Verschlüsselungsverfahren:
Hashfunktionen
Digitale Signaturen
MAC
Symmetrischer System
Asymmetrischer System
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 27 Kryptografie mit Bouncy Castle Symmetrische Verschlüsselung
Alle Klassen implementieren das Interface BlockCipher aus dem Paket org.bouncycastle.crypto.
Klassen, wie z. B. AESEngine, DESEngine, IDEAEngine
Instanz der Klasse mit dem jeweiligen Konstruktor (z. B. AESEngine _engine = new AESEngine())
Funktion init(boolean, CipherParameters)
Boolesche Variable an, ob man verschlüsseln (true) oder entschlüsseln (false)
Interface CipherParameters beschreibt das die notwendigen Schlüsselparameter
Für die symmetrischen Chiffren ist die Klasse KeyParameter bedeutend, die dieses Interface implementiert und mit Funktion getKey() zugegriffen werden.
Erzeugung von Bitlänge geschieht mit der Klasse KeyGenerationParameters und ein Objekt der Klasse SecureRandom aus dem Paket java.security
Klasse SecureRandom wird intern benutzt, um sichere Zufallszahlen zu generieren.
Bildung der CipherKeyGenerator mit dem vorhandenen Objekt der Klasse KeyGenerationParameters
Die Funktion generateKey() von CipherKeyGenerator wird dann benutzt, um die Bytes des Schlüssels zu erzeugen.
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 28 Kryptografie mit Bouncy Castle Asymmetrische Verschlüsselung
Interface AsymmetricBlockCipher aus dem Paket org.bouncycastle.crypto.
Implementation gleichnamige Algorithmen, wie z. B. ElGamalEngine, RSA-Engine
Erzeugung mit dem jeweiligen Konstruktor, mit der Funkion init(boolean, CipherParameters)
Die boolesche Variable an, ob man verschlüsseln (true) oder entschlüsseln (false).
Jeder asymmetrische Verschlüsselungsalgorithmus hat eine eigene Klasse, die die Klasse AsymmetricKeyParameter beerbt, wie z.B. ElGamalKeyParameters oder RSAKeyParameters aus dem gleichen Paket. Von diesen Klassen werden die private und öffentliche Parameterklassen abgeleitet, wie z.B. ElGamalPrivateKeyParameters und ElGamalPublicKeyParameters.
Bildung des Schlüsselpaars mit einer Instanz des entsprechenden Generators aus dem Paket initialisieren
(z.B. ElGamalKeyGenerationParameters oder RSAKeyGenerationParameters).
Schlüssellänge, SecureRandom und dem öffentlichen Exponenten als BigInteger initialisieren
Das Schlüsselpaar als Objekt der Klasse AsymmetricCipherKeyPair mit dem Aufruf der Funktion generateKeyPair() erzeugen.
Objekt verfügt über zwei Funktionen: getPrivate() und getPublic() (Instanz des Interfaces CipherParameters) zugegriffen werden kann.
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 29 Kryptografie mit Bouncy Castle Hashfunktion
Klassen implementieren das Interface Digest aus dem Paket org.bouncycastle.crypto und sind im Paket org.bouncycastle.crypto.digests untergebracht,
wie z. B. SHA1Digest, MD5Digest, RIPEMD128Digest usw. Um die Hashfunktion zu benutzen
Objekt erzeugen (z.B. SHA1Digest digest = new SHA1Digest()).
Die Funktion getDigestSize() liefert die Größe des produzierten Fingerabdrucks.
Funktion update() können dem Digest neue Eingabebytes hinzugefügt werden, und das solange bis die Funktion doFinal() aufgerufen wird, die das Ausgabefeld mit den Bytes des Fingerabdrucks füllt.
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 30 Kryptografie mit Bouncy Castle MAC (Message Authentication Codes)
Alle MACs befinden sich im Paket org.bouncycastle.crypto.macs, wie z.B. HMac und implementieren das Interface Mac aus dem Paket org.bouncycastle.crypto. Je nach verwendetem MAC ändern sich die Parameter des jeweiligen Konstruktors. Z. B. beim HMac wird eine Hashfunktion, also eine Instanz des Interfaces Digest übergeben. Anders als bei Hashfunktionen muss die Instanz von Mac nach der Erzeugung mit einem Schlüsselparameter (Instanz der Klasse CipherParameters) initialisiert werden. Der Schlüssel dafür kann genauso wie in Abschnitt 2.1 beschrieben erzeugt werden. Die Funktion getMacSize() liefert die Größe des produzierten Fingerabdrucks (MACs). Damit kann, wie bei Hashfunktionen das Ausgabefeld initialisiert werden. Ähnlich sind die Funktionen update() und doFinal() zu benutzen.
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 31 Kryptografie mit Bouncy Castle Digitale Signaturen
Bouncy Castle enthält verschiedene Verfahren zur Erzeugung von digitalen Signaturen. Zum einen gibt es Klassen die das Interface Signer aus dem Paket org.bouncycastle.crypto implementieren, wie z.B. PSSSigner. Das sind Signaturverfahren, die auf verschiedenen standardisierten Public-Key-Verfahren basieren, wie z.B. RSA-Signaturverfahren. Zum anderen gibt es Klassen die das Interface DSA aus demselben Paket implementieren, wie z. B. DSASigner oder ECDSASigner. Diese Implementierungen befolgen den standardisierten Digital Signature Algorithm.
2.5.1 Digitale Signatur mit Signer
Die Konstruktoren der Klassen, die das Interface Signer implementieren, enthalten unter
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 32 Kryptografie mit Bouncy Castle Versuchsdurchführung
Öffnung der Klasse : SymmetricCipher.java
Funktion: getBlockCipher für die symmetrischen Chiffren IDEA und DES
Erzeugung der Symmetrischen Schlüssel mit void main (String[] args) Methode
Zeitmessung durch die Funktion generateSymmetricKey
Übergabewert = Schlüssellänge/ „key“ erhalten
Verschlüsselung der Nachricht mit der Variable „inbytes“
Chiffre Schlüssellänge (Bits) Schlüsselerzeugungs- zeit (ms) Verschlüsselungs-zeit (ms) Entschlüsselungs-zeit (ms)
DES 64
IDEA 128
AES 128
DESede 192
AES 192
AES 256
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 33 Kryptografie mit Bouncy Castle Versuchsaufbau:
1. Auf jedem Rechner ist die Java-Entwicklungsumgebung von Eclipse (Version 3.2) und die Java Developement Kit (Version 1.5.0) installiert, sowie das Eclipse-Projekt cryptobc im Workspace /home/praktikum/workspace/cryptobc angelegt. Das Projekt besteht aus sieben Java-Klassen: AsymmetricCipher.java, DigitalSignatures1.java, DigitalSignatures2.java, HashFunctions.java, MACs.java, SymmetricCiphers.java und Utility.java. An das Projekt ist die Klassenbibliothek von Bouncy Castle bcprov-jdk15-134.jar angebunden.
Kryptografie mit Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 34 Kryptografie mit Bouncy Castle Durchführung
Schritt 1:
Starten Sie die Java-Entwicklungsumgebung von Eclipse (~> eclipse-3.2) und öffnen Sie das Java-Projekt cryptobc. Die nächsten Schritte beziehen sich auf die Arbeit in dieser Entwicklungsumgebung.
Öffnen Sie die Klasse Utility.java. Versuchen Sie anhand der Kommentare in der Datei zu verstehen, was die einzelnen Methoden machen. Schreiben Sie es auf.
Bouncy Castle : 15.12.2008 Zübeyde Kale-Caglar 35 Bouncy Castle Durchführung des Versuchs
JCE : 15.12.2008 Zübeyde Kale-Caglar 36 JCE Die Java Cryptography Extension ist wie der Namen schon sagt, eine Kryptograe-
Erweiterung für Java. JCE ist ein Paket von Klassen, die ein framework und einige
Implementationen für Verschlüsselungen, das Generieren von Schlüsseln und die
Authentikation bieten. JCE soll das Erstellen von Applikationen, die Kryptograe
einsetzen vereinfachen. Zum Verschlüsseln beinhaltet JCE verschiedene Algorithmen
für symmetrische, asymmetrische, Block und Stream Verschlüsselung.
Die JCE ist seit der Version 1.4 in der SDK von Sun mit enthalten. Sie ist jedoch
nicht im runtime Jar-File (rt.jar), sondern in einem separaten Jar-File (jce.jar) und
muss darum dem Compiler separat angegeben werden. Die aktuelle Version1 ist JCE
1.2.2. Als default Provider liefert Sun den SunJCE mit. Weil die Firma Sun ihren
Sitz in den USA hat und da die Exportbestimmungen2 für Kryptograe sehr streng
sind, bietet der SunJCE-Provider nur eine sehr beschränkte Zahl von Algorythmen
an. Ebenfalls zu erwähnen ist, dass sowohl die JCE als auch der Provider SunJCE
nur als byte-code und nicht als source-code angeboten werden. Weil man aber
bekanntlich in der Krytograe soweit als möglich mit open source arbeiten sollte,
ist die Kryptograe-Erweiterung von Sun nicht gerade die ideale Wahl, denn man
muss sich voll auf die Programmierer verlassen, die JCE und den Provider implementiert
haben. Die einzige Sicherheit besteht darin, dass das Jar-File signiert sein
muss.
1In der SDK j2sdk1.4.1_02
2Exportbestimmungen der USA für Kryptograe: http://www.bxa.doc.gov/Encryption/Default
Slide 37 : 15.12.2008 Zübeyde Kale-Caglar 37 Vergleich JCE & BC
?? Was wurde Verglichen
?? JCE (Sun und IAIK)
?? Bouncy Castle lightweight API
?? Kriterien
?? Geschwindigkeit
?? Dokumentation
?? Bedienung
?? Vetrauenswürdigkeit
Vergleich JCE & BC : 15.12.2008 Zübeyde Kale-Caglar 38 Vergleich JCE & BC