Hash

更改 SHA-512 的初始雜湊值/噸噸t

  • January 9, 2021

Fips 180-4在 5.3.6 下定義瞭如何計算 SHA512 的初始雜湊值/ $ t $ 對於給定的值 $ t $ .

有人可以解釋一下 t 實際上是如何影響程序的結果的(據我所知,它只是計算八個 64 位字 XOR 與a5a5a5a5a5a5a5a5)?此外,我不明白如何將新計算的初始雜湊值傳遞給雜湊函式,而不是 SHA-512 的預設值。

有人可以解釋如何使用java.security.MessageDigest類(或其他東西)在 Java 中做到這一點嗎?

有人可以解釋一下 t 實際上是如何影響程序的結果的(據我所知,它只是用“a5a5a5a5a5a5a5a5”計算八個 64 位字異或)?

那是不對的。

十六進制5A編碼都設置了 4 位中的兩位;a5轉換為1010 0101位。即一半的位被翻轉。這種異或值經常被使用(參見例如 HMAC)。

XOR 計算只是在 ASCII 值上為 SHA-512 計算創建內部"SHA-512/<t>"IV,其中 T 是用普通數字表示的數字。不可能使用 SHA-512 的黑盒實現,因為它不允許更改內部 IV。之後的 SHA-512/t 計算也是如此。

如何使用帶有特殊 IV 的 SHA-512 雜湊的結果可以在所引用文件的第 6.4 節中看到。基本上首先用 XOR 值初始化 SHA-512’。現在計算 的結果SHA-512'("SHA-512/<t\>")。這又被用作 SHA-512/t 的初始值。

請注意,SHA-512'("SHA-512/<t>")對於給定的 t,結果仍然是靜態的。SHA-512/224 和 SHA-512/256 的內部 IV 值實際上在 5.3.6.1 和 5.3.6.1 部分的文件中給出。SHA-384 使用另外定義的 IV,參見第 5.3.4 節。

此外,我不明白如何將新計算的初始雜湊值傳遞給雜湊函式,而不是 SHA512 的預設值。有人可以解釋如何使用java.security.MessageDigest類(或其他東西)在java中做到這一點嗎?

這是不可能的,因為 IV(初始 $ H^0_x $ 值)對於 SHA-512 是固定的。需要改用實現的程式碼。原則上,您可以使用 GPL 的 OpenJDK 原始碼,但由於 Oracle 的滑稽動作,這可能會給您帶來麻煩。

幸運的是,Bouncy Castle 已經實現了org.bouncycastle.crypto.digests.SHA512tDigest. 我不會將該類的實現——尤其是方法的實現tIvGenerate——作為良好編碼實踐的主要例子,但它確實實現了上述方案。

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