Hash

HMAC 的最佳雜湊是什麼?

  • May 28, 2021

很長的問題,但我開始忽略所有 HASH 算法。

我知道 SHAKE128 和 256 是 SHA-3 標準的一部分,但是 SHA3 標準正式發布了嗎?我只能找到該出版物的草稿,這是否意味著它不是官方的,因此不能證明是安全的?

我還沒有找到合適的 SHAKE128 或 256 c 實現,這就是為什麼我想知道是否應該使用它們,因為如果它們很好,我認為它們會有很多範常式式碼。

我知道 SHA-1 具有接近實用的理論攻擊,顯然 MD5 已損壞,這就是我想遠離這些攻擊的原因。

然後 SHA-2 仍然存在,但 SHA-2 包含 sha 224、256、386 和 512。我已經在我的測試設備上測試了這些(以及漩渦和 Tiger),這是速度:

HMAC        bytes   speed μs
Sha1        64      746
           128     857
Sha224      64      918
           128     1066
Sha256      64      918
           128     1066
Sha384      64      2395
           128     2840
Sha512      64      2400
           128     2840
Sha512_224  64      2390
           128     2835
Sha512_356  64      2390
           128     2835
MD5         64      308
           128     345
Whirlpool   64      5630
           128     6420
Tiger       64      832
           128     952

所以 MD5 最快,其次是 SHA-1,但我想避開那些。現在 Tiger 排名第三,緊隨其後的是 SHA 224 和 256。

我知道擁有不安全的 HASH 並不一定意味著您的 HMAC 不安全,但即使沒有人擁有鑰匙,我仍然會鎖車。

所以問題是:什麼是最好的散列,顯然它需要相對較快,而且按照我的標準,sha-512 並不快(足夠)。

我知道 SHAKE128 和 256 是 SHA-3 標準的一部分,但是 SHA3 標準正式發布了嗎?我只能找到該出版物的草稿,這是否意味著它不是官方的,因此不能證明是安全的?

不,SHA-3 尚未獲得正式批准。另一方面,“未證明是安全的”是什麼意思?你真的認為 NIST 只批准“經過驗證”的東西嗎?在實踐中,我們只有少數東西是“經過驗證的”(OTP,安全共享);雖然 NIST 肯定會嘗試審查他們在批准名單上的內容,但他們沒有證據。

無論如何,從您的問題來看,您似乎對速度感興趣。現在,SHA-3 在軟體上實際上比 SHA-2 慢(SHA-3 擅長的是如果你可以用硬體門來實現它);因此,這對您來說似乎是錯誤的方向。

什麼是最好的散列,顯然它需要相對較快,按照我的標準,sha-512 並不快

好吧,在我開始之前,我想指出您的 HMAC 實現可能會得到改進。

如您所知,在 HMAC 中,我們使用密鑰生成 IPAD 和 OPAD;然後我們計算 $ a = Hash(IPAD | Message) $ ,然後計算 $ b = Hash(OPAD | a) $ , 和 $ b $ 是 HMAC 的結果。

現在,IPAD 和 OPAD 的大小正好是散列函式的 1 個 Merkle-Damgaard 塊;因此您可以做的一件事是您可以計算初始雜湊壓縮函式評估 $ Compress(IV, IPAD) $ 並儲存該中間狀態;同樣,您可以計算初始雜湊壓縮函式評估 $ Compress(IV, OPAD) $ 並儲存它。

然後,計算 $ a = Hash(IPAD | Message) $ ,您可以為此恢復初始狀態,並僅計算消息的雜湊值(僅使用預先計算的評估作為 IV,並調整最終填充以考慮更長的消息);同樣,您可以在計算時使用相同的技巧 $ Hash(OPAD | a) $ .

這允許您使用比樸素方法少兩次的雜湊壓縮操作來計算 HMAC。現在,如果您只計算一次密鑰的 HMAC,或者如果您正在計算大量消息的 HMAC,這並沒有太大幫助。但是,如果您正在通過大量微小消息計算 HMAC,這將有很大幫助。

我懷疑您沒有使用此優化,因為如果您使用了,64 字節消息和 128 字節消息之間的時間差異會大得多。

實現這一點可能需要將 SHA256 上的 64 字節消息的 HMAC 時間縮短 40%(3 個雜湊壓縮操作而不是 5 個)。

現在,至於“最佳雜湊”;好吧,如果您想堅持 NIST 批准的操作,最快的替代方案是 HMAC-SHA1(仍然是 FIPS 批准的);如果您不在乎,那麼您擁有的最好的是 HMAC-SHA256。

引用自:https://crypto.stackexchange.com/questions/24595