Blake2:通過 Config 截斷 512 位雜湊比 256 位更安全?
我需要使用 BLAKE2 在我的程式碼中計算 256 位雜湊。
我知道我可以將 BLAKE2 設置為為任何數據生成 256 位雜湊,但我很想知道什麼可以更安全、更快:
1-使用 Blake2Config 模組創建 256 位;或 2- 截斷正常的 512 位結果,得到最左邊的 32 個字節(256 位)。
第一次,我想獲得最左邊的 32 字節會比直接從 Blake 獲得 256 位更安全,而且不會那麼慢。
我錯了嗎?感謝您的任何評論。
您應該始終使用配置選項來選擇散列函式的輸出大小。
如果您需要標準輸出大小(例如 224、256、384、512 位),請使用推薦的參數集。
這主要適用於 SHA-3 等標準,如果您使用 SHA-3-256,您將獲得與“Keccak-256”、SHA-3-512/256 和 SHAKE128-256 不同的(更標準的輸出),它們都使用稱為“域分離”的東西(即將特定的字節序列附加到輸入以獲取不同的雜湊值)。
第一條語句的原因如下:
config 選項始終與 / 比手動截斷一樣好。在最壞的情況下(例如 SHAKE),它只是對無限長的密鑰流的簡單截斷,因此表現出與手動截斷相同的安全屬性。在最佳情況下(例如 Skein),所選輸出大小將影響輸出,即 Skein-256-256 將為消息提供完全不同的輸出 $ m $ 比 Skein-256-255 會。顯然,這更安全(通常速度不會變慢),因為它可以保證你 $ Trunc(H_{d}(m),t)\neq H_t(m) $ 這可能是一個理想的屬性(儘管很少需要)。
Blake2 對應於第二種情況(即摘要大小影響輸出)。請求的摘要大小與靜態常量和 MAC 密鑰(如果使用)一起用作初始內部連結值(在 IV 之後)。因此它對雜湊的影響與 IV 一樣多,這意味著對於相同的消息,Blake2b-32 將與 Blake2b-64 大不相同。這可以在RFC 7693第4 頁(變數名)和第 9 頁(雜湊大小的使用)中找到。