Argon2 的 Blake2b 與普通的 Blake2b 有何不同?
這篇文章說 Argon2 的 Blake2b 是縮小版, Argon2 的規格也同意這一點,因為它聲明它只使用 2 輪 Blake2b。
但是,另一方面,
15
Argon2 的規範頁面指出它修改了 Blake2b 以添加 32 位乘法以增加延遲(我猜他們的意思是需要等待額外的 CPU 週期?)。我的問題是:
- 如果 Argon2 想讓 Blake2b 更難,為什麼要把它的 12 輪減少到只有 2 輪?
- 還有其他我沒有在這裡提到的區別嗎?
- 與比方說的標準 Blake2b 相比,這些差異在哪些方面影響 Argon2 的 Blake2b 的安全性
libsodium
?我的想法
我認為 Argon2 使用散列函式 (Blake2b) 填充記憶體墊並不是最佳選擇。因為填充記憶體不涉及壓縮;1024 字節輸入變成另一個 1024 字節輸出。沒有發生壓縮,因此完全不需要嘗試保持最大輸入熵同時壓縮到更少字節的雜湊函式的所有激進輪次。
我認為這就是為什麼 Argon2 繼續創建自己的 Blake2b 簡化變體,只有 2 輪而不是 12 輪:因為很明顯不需要散列。
通過有效地修改 Blake2b,Argon2 創建了一種對稱分組密碼的變體,他們也繼續使用它(固定輸入變為相同大小的固定輸出)。
我認為比 Argon2 更好的方法是,與其從散列函式中重新發明對稱分組密碼(通過修改 Blake2b),不如減少追逐並使用現有的對稱密碼,如 ChaCha20。
使用像 ChaCha20 這樣的對稱密碼將與 Argon2 重新發明的對稱密碼(簡化的 Blake2b)一樣快,即使它是 20 輪 ChaCha20。根據我的測試,ChaCha20 在做同樣的工作時只比 Argon2 慢一點。加上其他好處:利用現有庫和更多已經使用現有密碼的密碼分析研究。
當您說在這種情況下不需要壓縮並且對稱分組密碼也可以用於此目的時,您是正確的。在選擇 Blake2b 時可能有幾個考慮因素。
- 簡化版本用於盡可能快地填充一個大向量,然後訪問該向量以使該方案難以記憶。這背後的想法可能不僅是為了快速填充一個向量,而且記憶硬度可以獨立於時間硬度來設置。這意味著算法應該很快。因此減少了輪數。
- 該算法在定制硬體(例如 ASIC)上的執行速度不應比在典型使用者設備上快得多。這意味著,不僅純粹的性能至關重要,而且不同硬體之間的性能差異也很重要。Blake2b 專門針對典型使用者設備進行了優化。
- 該算法不應該容易受到記憶體定時攻擊。因此,首選 ARX 設計。
ChaCha20 原則上也符合這些標準,可能 Blake2b 僅在第 2 點表現優於 ChaCha20 的簡化形式。也許這也起到了作用,當時雜湊函式由於剛剛完成的 SHA-3 競爭而受到更多關注,因此 Blake2b 等新的雜湊算法比新的分組密碼得到了更好的研究。
表明 Blake2b 適合此應用:除了 Argon2,Catena 團隊還為相同目的開發了一種(不同的)簡化形式的 Blake2b。
並且表明您對分組密碼的假設也是正確的:相比之下,2010 年開發的 Scrypt 方案使用了 ChaCha20 的前身 Salsa20 的簡化形式。