ChaCha20 測試向量/範例在哪裡?
我在Salsa20 規範中看到整個文件都有測試範例,以幫助實現者確保每個功能都按設計工作。因此,如果所有測試都通過,整個算法將完美執行。如果沒有這些測試向量,就很難知道程式碼是按設計工作還是給出了不正確的輸出。測試驅動開發應該是開發密碼庫的黃金標準。
因此,當我閱讀改進後的 ChaCha20 規範時,我感到很驚訝,因為它沒有可供驗證的測試範例。我什至查看了ChaCha 網頁,但一無所獲。
儘管 ChaCha20 具有更好的擴散性並且據說更安全,但我認為自己使用 Salsa20 算法實際上更安全,因為我有程式碼/庫的參考測試向量來驗證,並且我會確定它已正確實現。相比之下,使用 ChaCha20 將是一個冒險的舉動。ChaCha20 的所有其他實施者(例如 OpenSSH)如何知道他們的實施是正確的?其他人如何能夠相信他們的實施是正確的?
我想知道 ChaCha20 測試範例在哪裡顯示了 ChaCha 四分之一輪和 ChaCha 矩陣的正確輸出?為什麼它們不在規範文件中?
RFC中有:https ://datatracker.ietf.org/doc/html/draft-agl-tls-chacha20poly1305-04#section-7
以下塊包含 ChaCha20 的測試向量。第一行包含 256 位密鑰,第二行包含 64 位隨機數,
最後一行包含生成的 ChaCha20 密鑰流的前綴。
KEY: 00000000000000000000000000000000000000000000000000000000 00000000
NONCE: 0000000000000000
KEYSTREAM: 76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc 8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11c c387b669b2ee6586
KEY: 00000000000000000000000000000000000000000000000000000000 00000001
NONCE: 0000000000000000
KEYSTREAM: 4540f05a9f1fb296d7736e7b208e3c96eb4fe1834688d2604f450952 ed432d41bbe2a0b6ea7566d2a5d1e7e20d42af2c53d792b1c43fea81 7e9ad275ae546963
KEY: 00000000000000000000000000000000000000000000000000000000 00000000
NONCE: 00000000000000001
KEYSTREAM: de9cba7bf3d69ef5e786dc63973f653a0b49e015adbff7134fcb7df1 37821031e85a050278a7084527214f73efc733e3fa5b5b
KEY: 00000000000000000000000000000000000000000000000000000000 00000000
NONCE: 0100000000000000
KEYSTREAM: ef3fdfd6c61578fbf5cf35bd3dd33b8009631634d21e42ac33960bd1 38e50d32111e4caf237ee53ca8ad6426194a88545ddc497a0b466e7d 6bbdb0041b2f586b
您可以在以下連結中找到“流密碼測試向量 ChaCha draft-strombergson-chacha-test-vectors-00”草案中的測試向量:https ://datatracker.ietf.org/doc/html/ Draft-strombergson-chacha-test-vectors-00 該文件連結了一個 github 儲存庫,您可以在其中找到所有向量https://github.com/secworks/chacha_testvectors/
另一個有趣的閱讀:http: //insanecoding.blogspot.fr/2014/06/avoid-incorrect-chacha20-implementations.html
您還可以在https://datatracker.ietf.org/doc/html的草案“用於 TLS 草案-agl-tls-chacha20poly1305-00 的基於 ChaCha20 和 Poly1305 的密碼套件”(第 7 節)中找到其他用於 ChaCha20 實現的測試向量/draft-agl-tls-chacha20poly1305-00。