F06 HKDF-256 mit einem Byte Array

Dieses Beispiel bringt Euch einen Sonderfall im Bereich der Kryptographie näher, nämlich die „Hash-based Key Deriving Function“ oder auf Deutsch: die Hash-basierte Ableitung von Schlüsseln, abgekürzt mit „HKDF“.

Die HKDF hat 2 Einsatzgebiete: zum einen kann ich aus einem vorhandenen Schlüssel mehrere Schlüssel ableiten, z.B. einen für die Verschlüsselung und einen anderen für die Nutzung eines HMACs.

Das zweite Einsatzgebiet besteht in der Erhöhung der Entropie bei „schlechten Passwörtern“. Die Entropie ist für mich schwer zu beschreiben, ich versuche es daher mit einem Beispiel: kann ich ein 8-stelliges Passwort nur über eine 10-Ziffern-Tastatur eingeben, „verschenke“ ich eine Menge Sicherheit, da jedes meiner 8 Zeichen nur 10 Zustände einnehmen kann (oder mathematisch gesehen 8 hoch 10 = 1.073.741.824 möglicher Passwörter) – eine geringe oder schlechte Entropie. Durch die HKDF-Funktion leite ich ein aus einem Passwort mit schlechter Entropie ein Passwort mit hoher Entropie ab – maximal möglich wären 8 hoch 256 möglicher Passwörter (= 1.552518e+231 Zustände).

Das nachfolgende Beispiel zeigt Euch die sehr einfache Implementierung einer HKDF-Methode, nur hat Java 8 leider keine HKDF-Funktion eingebaut. Im Netz existiert eine sehr gute Java-Bibliothek, welche die HKDF-Funktion bereitstellt. Das komplette Java-Archiv ist in diesem Github-Depot vorhanden: https://github.com/patrickfav/hkdf, ich empfehle Euch zur einfachen Nutzung den Download der fertigen JAR-Datei aus dem zentralen Maven-Verzeichnis: https://mvnrepository.com/artifact/at.favre.lib/hkdf [dort klickt Ihr die neueste Version und auf der Folgeseite findet Ihr in der Mitte den anklickbaren Link zur (recht kleinen) jar-Datei (http://central.maven.org/maven2/at/favre/lib/hkdf/1.0.1/hkdf-1.0.1.jar)].

Files jar (11 KB)

Bindet diese Datei analog zu BouncyCastle (siehe A06 Einbindung und Nutzung von Bouncy Castle) in Eclipse ein und das Beispiel funktioniert. Bitte beachtet, dass die Nutzung der Bibliothek unter der Apache 2-Lizenz möglich ist.

Die HKDF-Routine benötigt ein „Salt Byte“, das auch statisch gewählt werden kann. Ich habe mich in diesem Beispiel für ein 32 Byte Array komplett mit Hex00 gefüllt entschieden.

Hier nun der Quellcode:

Das findet Ihr anschließend in der Konsole:

Alle Quellcodes zu Hashes und MACs findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/F-Hashes-und-MACs. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

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

Letzte Aktualisierung: 21.01.2019