Bouncy jdk 1.51 Serpent KAT 測試與 Nessie 向量
讓 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
為什麼不同的預期輸出?
與 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