Test-Vectors
我在哪裡可以找到密碼的測試向量?
在實現密碼和雜湊函式時,我經常遇到一個問題:在哪裡可以找到它的測試向量;這樣我就可以保證我的程序正常工作。查找測試案例通常是一項乏味的工作。
目前我正在嘗試為幾個密碼和散列函式收集測試向量;包括(但不限於):RC4、來自 eStream 的所有密碼、DES(如果可能的話,是循環的)、3DES、AES、……
為了避免找錯地方:我在哪裡可以找到密碼的測試向量?
為了搶先一步,我放置了測試案例
RC4
(如果我錯了,請糾正我):Key (255, 255, 0, 255) Keystream 23, 0, 135, 229, 197, 74, 253, 202, 72, 83, ... Key (0, 0, 0, 255, 127, 31) Keystream 40, 172, 142, 137, 101, 124, 164, 50, 0, 172, ...
有關的:
對於 NIST 批准的任何算法,您通常可以在密碼算法驗證程序 (CAVP)中找到測試向量- 例如附錄 B 中的 3DES和附錄 C 中的 AES。測試向量通常可以在文件的附錄之一或後面的部分中找到。
對於其他任何人,您應該首先查看標准文件,最好是 RFC - 例如RC4。如果標准文件不包含測試向量,那麼再看看公司或組織;他們通常會有一個帶有測試向量的單獨文件。一些標準,例如 PKCS 標準也可能被其他標準引用或複制,因此如果您在一個文件中找不到它,您可能需要查找副本。一般來說,密碼學競賽要求提案的送出者包含測試向量。
如果你不能以這種方式找到它,你將不得不依賴Google,或者這樣的論壇。或者您可以採用參考實現並針對它測試您的實現。如果這不可用,請嘗試從領先的實現中自己生成它們。
即使在這個時代,官方的測試載體也並不總是可用的。如果是,它們可能不完整,因為它們將涵蓋所有可能的程式碼路徑。永遠不要僅僅針對測試向量進行測試,並認為如果它們成功了,你的實現是合理的或安全的;提供良好的覆蓋率並記住測試您自己的極端情況。
Maarten 的回答完全正確,但我想添加一個非常方便的連結: