AES-GCM KAT

Der AES-GCM KAT beinhaltet diverse Testdateien für den „Galois/Counter Mode“ („GCM“) Modus, nämlich „gcmEncryptExtIV.rsp“ und „gcmDecrypt.rsp“ und das Ganze in den Versionen 128, 192 und 256 Bit Schlüssellänge. Ihr erhaltet die Dateien über den Link https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmtestvectors.zip. Erläuterungen findet Ihr im PDF-Dokument https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmvs.pdf.

Zum besseren Verständnis des Testablaufes empfehle ich Euch, einen Blick in den Artikel KAT Erläuterungen hineinzuschauen. Weiterhin solltet Ihr vor den Tests die verfügbaren Block Cipher Algorithmen mit dem kleinen Programm in Block Cipher Algorithms ermitteln.

In diesem Beitrag zeige ich Euch nur die Ergebnisse der Tests an. Ich habe die „verbose“-Variable auf „false“ gesetzt.

Dieser Test hat gleich 2 Besonderheiten, auf die ich Euch aufmerksam mache. Zum einen unterstützt OpenJava 11 nicht alle Tag-Längen, nämlich nur 96-128 Bit Länge. Die Testdateien enthalten aber auch Datensätze für kleinere Tag-Längen und ich habe in den Zeilen 90-93 des Quellcodes eine entsprechende Abfrage eingebaut:

Die so ausgesonderten Tests habe ich in einer separaten Spalte des Ergebnisses ausgewiesen („unsupported“). Weiterhin enthalten die Datensätze für die Dekodierung teilweise bewusst gewählte, falsche Datensätze. In den Testdateien steht dann statt des erwarteten Plaintext-Wertes nur das Wort „FAIL“. Auch diese Fälle werte ich in der Ergebnis-Tabelle aus – es gibt dafür die separate Spalte „expected fails“. Unter diesen Prämissen wurden alle Tests von OpenJava 11 korrekt durchgeführt:

Im GutHub-Archiv habe ich zusätzlich einen GCM-KAT-Test bei Nutzung von Bouncy Castle als Security Provider bereitgestellt – hier werden anstandslos alle Testdatensätze (und damit auch die kürzeren Tag-Längen) durchgeführt:

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: 27.05.2020