KAT Erläuterungen

Die Tests und der Aufbau der Testdateien sind nicht in allen Fällen sofort zu durchschauen, daher erläutere ich Euch die Tests am Beispiel des SHA-1 KAT.

Die Testdateien liegen in Form einer „Response“ (=“Antwort“) Datei vor, wobei vielfach für ähnliche Verfahren eigene Dateien vorhanden sind (beispielsweise für den SHA-256 und SHA-512-Test).

Diese Dateien haben nach dem „Header“ (=“Kopf“) Zeilen mit Konstanten – entweder für die gesamte Datei oder für einen Block von Testdaten. Danach folgen die Datensätze, welche Zeile für Zeile aufgeführt sind. Schauen wir uns den Anfang der Datei „SHA1ShortMsg.rsp“ an:

Die Konstante in der Zeile [L = 20] gibt an, das der Ausgabewerte eine Länge von (hexadezimal) „x20“ = 32 Byte hat. Die folgenden Datensätze haben folgende Bedeutung: „Len“ = Länge der Eingabedaten in die Berechnung (in Bit !), d.h. „Len = 8“ bedeutet eine Länge von einem Byte. „Msg = 36“ ist der Eingabewert für unsere SHA-1 Berechnung (als Hex-String „x36“ zu lesen). Die letzte Zeile „MD = c1dfd96eea8cc2b62785275bca38ac261256e278“ ist die Ausgabe der SHA-1 Berechnung, ebenfalls als Hex-String.

Eine Besonderheit bilden Datensätze mit der Länge „0“, denn dort ist der Eingabewert nicht „x00“, sondern „“. In den Kat-Einlesedateien (hier „KAT_SHA1.java“) bilde ich das brutal durch eine Abfrage ab (im Sourcecode unten in den Zeilen 92 sowie 10-104).

Auf diese Weise werde zuerst alle Datensätze in List-String-Arrays eingelesen und dann vom Hauptprogramm „Run_Sha1_Kat.java“ ausgewertet. Die Auswertung geschieht in der Zeile 71 („String mdCalculated = bytesToHex(sha_1(hexStringToByteArray(KAT_SHA1.msg.get(i))));„), wobei die Eingabe-Hex-Strings in ein Byte Array umgewandelt und das Ergebnis später wieder in einen Hex-String verwandelt wird. Die „eigentliche“ SHA-1-Berechnung findet sich in den Zeilen 127 bis 137 (Methode „public static byte[] sha_1 (byte[] input)„).

Viele Testverfahren arbeiten zusätzlich mit einem „Monte Carlo“ genannten Test, der gesondert durchzuführen ist. Hierbei enthalten die Response-Dateien nicht die Ergebnisse einer einzelnen Berechnung, sondern die Zwischenschritte nach jeweils 1.000 Berechnungen. Sehr hilfreich ist es dafür, sich die Beschreibung zu den Tests anzuschauen, im Beispiel sind es die für die „Secure Hash“-Verfahren – ladet Euch die Datei „http://csrc.nist.gov/groups/STM/cavp/documents/shs/SHAVS.pdf“ herunter und schaut auf die Seiten 12-14:

Diese Routine habe ich in der KAT-Auswertungsdatei „Run_Sha1_Kat_MonteCarlo.java“ so umgesetzt:

Nachfolgend seht Ihr die KAT-Lesedatei (KAT_SHA1.java) sowie die Auswertungs-/Steuerdatei (Run_Sha1_Kat.java) – alle Dateien sowie die Ergebnis-/Result-Dateien findet Ihr im GitHub-Archiv https://github.com/java-crypto/Known_Answer_Tests.

Hauptprogramm:

Alle Quellcodes und die dazu gehörenden Testdateien zu den Known Answer Tests findet Ihr zum Download in meinem GitHub-Repository Known_Answer_Tests, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/Known_Answer_Tests. Alle Programme sind unter Java 11 lauffähig (vermutlich auch unter Java 8) und wurden mit intelliJ IDEA entwickelt, welches für dieses Programm aber nicht notwendig ist.

Noch ein Wort zum Thema „Lizenz“: Die von mir erstellten Beispiele stehen unter der „Unlicense“-Lizenz.

Letzte Bearbeitung: 17.05.2020