Der Hashing-Algorithmus SHAKE ist eine Erweiterung des SHA3 Message Digest, den ich im Artikel SHA-3 KAT gestestet habe. Es handelt sich um einen „XOF“-Hash, was für „Extendable-Output Functions“ oder „Erweiterbare Ausgabe Funktionen steht“. Was bedeutet „erweiterbar“ nun für uns? Bei einer „normalen“ Hashberechnung erhalte ich ein Ergebnis mit einer festen Länge. So ist der Ausgabewert des SHA-256-Algorithmus stets ein 32 Byte großes Byte Array. Der SHAKE-Algorithmus gestattet es uns, in festgelegten Grenzen beliebig lange Hashwerte zu erhalten.
Eine Information vorneweg: in OpenJava 11 ist der SHAKE-Algorithmus nicht vorhanden, dafür benötigt Ihr eine externe Bibliothek wie Bouncy Castle.
Der SHAKE KAT beinhaltet diverse Testdateien für den Modus „Byte orientiert“, nämlich „ShortMsg.rsp“, „LongMsg.rsp“, „VariableOut.rsp“ und „Monte.rsp“ und das Ganze in den Versionen SHAKE128 und SHAKE256. Ihr erhaltet die Dateien über den Link https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/shakebytetestvectors.zip, Erläuterungen findet Ihr im PDF-Dokument https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha3vs.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 Secure Hash Algorithmen mit dem kleinen Programm in Secure Hash Algorithms ermitteln.
Die „Short-„, „LongMsg“ und „VariableOut“-Response-Dateien werden im Programm „Run_Shake_Kat.java“ bearbeitet und die Monte Carlo Varianten werden im Programm „Run_Shake_Kat_MonteCarlo.java“ getestet.
In diesem Beitrag zeige ich Euch nur die Ergebnisse der Tests an. Ich habe die „verbose“-Variable auf „false“ gesetzt.
Wie nicht anders zu erwarten wurden alle Tests von OpenJava 11 mit BouncyCastle korrekt durchgeführt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
SHAKE BC Family Known Answer Test (KAT) for information see: https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Secure-Hashing for tests see: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha3vs.pdf get the testfiles: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/shakebytetestvectors.zip Test on 18.05.2020 10:31:05 with Java version: 11.0.6+8-b520.43 BouncyCastle Version: BC version 1.65 testing filename: kat/shake/SHAKE128ShortMsg.rsp readLines: 1356 header lines: 5 nr of test vectors: 337 testing the data ... Test results filename tests passed failed kat/shake/SHAKE128ShortMsg.rsp 337 337 0 kat/shake/SHAKE128LongMsg.rsp 100 100 0 kat/shake/SHAKE256ShortMsg.rsp 273 273 0 kat/shake/SHAKE256LongMsg.rsp 100 100 0 kat/shake/SHAKE128VariableOut.rsp 1126 1126 0 kat/shake/SHAKE256VariableOut.rsp 1246 1246 0 |
Hier das Ergebnis der Monte Carlo Tests:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SHAKE BC Family Known Answer Test (KAT) Monte Carlo Mode for information see: https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Secure-Hashing for tests see: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha3vs.pdf get the testfiles: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/shakebytetestvectors.zip Test on 18.05.2020 10:32:57 with Java version: 11.0.6+8-b520.43 BouncyCastle Version: BC version 1.65 testing filename: kat/shake/SHAKE128Monte.rsp readLines: 411 header lines: 4 nr of test vectors: 100 testing the data ... Test results filename tests passed failed kat/shake/SHAKE128Monte.rsp 100 100 0 kat/shake/SHAKE256Monte.rsp 100 100 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: 18.05.2020