D06 EC Kurve ED25519 Signatur mit einer Datei

In Beispiel D05 EC Signatur mit einer Datei habe ich Euch die Nutzung der JRE-Routinen gezeigt, um eine Signatur auf Basis von Elliptischen Kurven zu erzeugen.

Da es Gerüchte im Internet gibt, das die den Kurven zu Grunde liegenden Parameter von der amerikanischen NSA beeinflusst worden ist, haben sich Krypto Wissenschaftler auf die Suche nach alternativen Kurven gemacht. Das Team Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe, und Bo-Yin Yang fand die Kurve ED25519, welche seitdem Einzug in die Krypto-Welt gehalten hat.

Die aktuelle Java 8-Version enthält keine Implementierung der Kurve und Ihr benötigt eine Dritt-Bibliothek wie BouncyCastle oder EDDSA, um die Kurve nutzen zu können. Da BouncyCastle sicherlich die umfangreichste, damit aber auch die größte Krypto-Bibliothek ist, zeige ich Euch hier die Implementierung mit der Bibliothek EDDSA, welche Ihr unter diesem Link herunterladen könnt: http://central.maven.org/maven2/net/i2p/crypto/eddsa/0.3.0/eddsa-0.3.0.jar. Die EDDSA-Bibliothek ist gerade mal 62 Kilobyte groß, hingegen benötigt BouncyCastle rd. 4 Megabyte Platz. Noch ein Hinweis: erst die noch in der Entwicklung befindliche Version 12 von Java wird die Nutzung der Kurve ED25519 direkt unterstützen.

Bindet die Bibliothek in Eclipse analog zu BouncyCastle ein (beispielhaft gezeigt in http://javacrypto.bplaced.net/a06-einbindung-und-nutzung-von-bouncy-castle/).

Ganz wichtig ist es, sich den Einsatz des Public und des Private Keys in Erinnerung zu rufen, da an dieser Stelle immer wieder Fehler gemacht werden. Bei der asymmetrischen Signatur veröffentlicht der Absender seinen Public (öffentlichen) Schlüssel, z.B. auf seiner Webseite. Der Absender der Nachricht benutzt seinen Private Key für die Erzeugung der Signatur und sendet die Nachricht (ciphertext) zusammen mit der Signatur an den Empfänger. Der Empfänger prüft die Signatur mit dem Public Keys des Absenders.
Hier noch einmal die Kurzform: signieren mit dem Private Key des Absenders, prüfen der Signatur (Verifizierung) mit dem Public Key des Absenders.

Signatursteckbrief
Name des Verfahrens EC Kurve ED25519
Langname Elliptische Kurven Signatur mit Kurve ED25519
Art der Chiffre Kompletter Plaintext
Blocklänge (Byte)
Schlüssellänge (Byte/Bit) 48/384
Padding genutzt Nein
Sicherheit
Besonderes

Der Quellcode ist deutlich länger, dafür ist dieses Beispiel auch gleich in der Praxis einsetzbar, wenn der nachfolgende Sicherheitshinweis beachtet wird. Die erzeugten Schlüssel werden für eine spätere Benutzung in Form von Byte Arrays gespeichert und beim Einlesen mittels geeigneter Routinen wieder als Private und Public Key „regeneriert“. Die zu signierende Nachricht befindet sich in einer Datei und es wird nicht die komplette Nachricht zur Signaturerzeugung genutzt, sondern es wird ein Hashwert der Datei erzeugt und dieser Hashwert wird dann signiert – das verringert die Bearbeitungszeit bei den rechenintensiven Operationen. Die Signatur wird ebenfalls als Byte Array gespeichert und zur (späteren) Verifizierung beim Empfänger wieder eingelesen. Der Empfänger bildet ebenfalls den Hashwert der Nachrichten-Datei und überprüft den Hashwert mit dem Public Key anhand der Signatur.

Zum Test solltet Ihr eine einfache Textdatei mit dem Namen „d02_message.txt“ anlegen, welche Ihr z.B. hier herunterladen könnt. Im Beispiel B05 ist beschrieben, wo die Datei in Eclipse liegen sollte.

Bitte die nachfolgende Routine nicht für den Echteinsatz nutzen, da sie aus kryptographischer Sicht angreifbar ist !

Die Konsole informiert Euch wie folgt:

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 13.01.2019