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:
1 2 3 4 |
if (taglen < 96) { // unsupported by jce nrTestUnsupported[nrOfTest]++; } |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
AES GCM Known Answer Test (KAT) for information see: https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/CAVP-TESTING-BLOCK-CIPHER-MODES for tests see: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmvs.pdf get the testfiles: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmtestvectors.zip Test on 27.05.2020 10:13:58 with Java version: 11.0.6+8-b520.43 testing filename: kat/block_cipher/gcm/gcmEncryptExtIV128.rsp readLines: 66156 header lines: 3 nr of test vectors: 7875 testing the data ... Test results filename tests passed exp.failed failed unsupported kat/block_cipher/gcm/gcmEncryptExtIV128.rsp 7875 5625 0 0 2250 kat/block_cipher/gcm/gcmDecrypt128.rsp 7875 2738 2887 2887 2250 kat/block_cipher/gcm/gcmEncryptExtIV192.rsp 7875 5625 0 0 2250 kat/block_cipher/gcm/gcmDecrypt192.rsp 7875 2788 2837 2837 2250 kat/block_cipher/gcm/gcmEncryptExtIV256.rsp 7875 5625 0 0 2250 kat/block_cipher/gcm/gcmDecrypt256.rsp 7875 2845 2780 2780 2250 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 |
AES GCM BC Known Answer Test (KAT) ... Test on 27.05.2020 10:14:41 with Java version: 11.0.6+8-b520.43 BouncyCastle Version: BC version 1.65 ... Test results filename tests passed exp.failed failed unsupported kat/block_cipher/gcm/gcmEncryptExtIV128.rsp 7875 7875 0 0 0 kat/block_cipher/gcm/gcmDecrypt128.rsp 7875 3864 4011 4011 0 kat/block_cipher/gcm/gcmEncryptExtIV192.rsp 7875 7875 0 0 0 kat/block_cipher/gcm/gcmDecrypt192.rsp 7875 3897 3978 3978 0 kat/block_cipher/gcm/gcmEncryptExtIV256.rsp 7875 7875 0 0 0 kat/block_cipher/gcm/gcmDecrypt256.rsp 7875 3956 3919 3919 0 |
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