Serpent

Bouncy jdk 1.51 Serpent KAT 測試與 Nessie 向量

  • November 23, 2015

讓 Nessie 向量與 Bouncy Castle SerpentEngine 一起工作時遇到了一點麻煩。Nessie 向量是否需要模式或一些預處理?Nessie Serpent 128, set 1, vector 0 讀取:

鍵=80000000000000000000000000000000

平原=00000000000000000000000000000000

密碼=264E5481EFF42A4606ABDA06C0BFDA3D

http://www.cs.technion.ac.il/~biham/Reports/Serpent/Serpent-128-128.verified.test-vectors

Bouncy Castle SerpentTest.js,向量 10 讀取:

鍵=80000000000000000000000000000000

平原=00000000000000000000000000000000

密碼=49afbfad9d5a34052cd8ffa5986bd2dd

http://grepcode.com/file/repo1.maven.org/maven2/org.bouncycastle/bcprov-ext-jdk15on/1.51/org/bouncycastle/crypto/test/SerpentTest.java#SerpentTest.0tests

為什麼不同的預期輸出?

與 NESSIE 測試向量相比,Bouncy Castle 似乎對輸入和輸出使用了相反的字節順序。

為了在 Bouncy Castle 中複製 NESSIE 向量,需要在字節級別翻轉所有輸入和輸出的順序,因此從符合 NESSIE 的實現(Set 1,Vector 120)給出以下結果:

key =    00000000000000000000000000000080
plain =  00000000000000000000000000000000
cipher = DDD26B98A5FFD82C05345A9DADBFAF49

請注意,第一個密鑰字節現在位於最終位置,反轉時的密文與 BC 向量 10 匹配。此外,如果我們執行蒙地卡羅測試,結果應該相似:

Serpent Encryption, ECB Mode, 128-bit key

COUNT =      0
KEY =        d692af3ea36f5ef30de8c5eb79a8fb31
PLAINTEXT =  14f63ff537a39296008945f7125ea070
CIPHERTEXT = 2d74412f3d89016083c93b4d0fa553fc

這些結果以反向字節順序匹配向量 14,使用 100 塊循環測試,BC 測試似乎不像其他蒙地卡羅測試實現(例如 NIST CAVP)那樣執行外鍵循環。CAVP MCT 執行 100 個外部密鑰循環和 1000 個內部塊循環,用於測試 AES 實現。如果繼續,關鍵循環中的下一次迭代將如下所示:

COUNT =      1
KEY =        fbe6ee119ee65f938e21fea6760da8cd
PLAINTEXT =  2d74412f3d89016083c93b4d0fa553fc
CIPHERTEXT = 4597017beb21a4c6c75acb85ac4645f7

引用自:https://crypto.stackexchange.com/questions/20306