kryptografie mit Bouncy Castle

Add to Favourites
Post to:
Comments
Presentation Transcript Presentation Transcript

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

Want to learn?

Sign up and browse through relevant courses.

Name:
Your Email:
Password:
Country:
Contact no:


Area code Number
Subjects you are interested in:
Word verification: (Enter the text as in image)


Sign Up Already a member? Sign In
I agree to WizIQ's User Agreement & Privacy Policy
2 Members Recommend

Your Facebook Friends on WizIQ

Give live classes, create & sell online courses

Try it free Plans & Pricing

Connect