Hash
綁定兩個雜湊的最佳方法
目前我有:
H1 = SHA256 H2 = SHA1
H1 和 H2 都有固定的長度。將 H1 和 H2 綁定到 H3 的最有效方法是什麼?目標是在其中一個洩漏時最大限度地保護。
例如:
H3 = H1+H2
H3 = SHA512(H1+H2)
H3 = ???
不需要保留長度。這應該立即計算,所以沒有 KDF。
謝謝你的幫助。
**編輯:**我打算用它作為密碼創建方案。H1 和 H2 不應更改。
如果 H1 變得已知,那麼如果您只是連接,那麼 H3 的第一部分就會變得已知,所以這不是一個好的選擇。
只要 H2 對攻擊者保密,一個簡單的 XOR 就可以工作。但是,如果攻擊者可以檢索到有關 H3 的資訊並且可以更改 H1,則攻擊者可以強制 H3 為某個值。但是 XOR 並沒有按照您的要求擴展雜湊值。
如果 H1 和 H2 一起散列,例如使用更大的輸出散列,那麼攻擊者所能做的就是嘗試更改 H1,直到 H3 中出現某種結構。如果您只依賴散列函式,這是最好的做法。
您聲明您不需要 KDF,因為您不處理密碼。然而,這不是一個好的論據;還有一些 KBKDF 從輸入密鑰材料派生輸出密鑰材料(並且不處理密碼)。
HKDF 是一個這樣做的 KDF:它接受輸入的密鑰材料,從 H1 和 H2 中提取熵到某個中間密鑰材料中,最後將密鑰材料擴展為請求的大小。所以創建H3最防火的方式是:
H3 = HKDF(enc(H1, H2), "H3", outsize)
. 或者,您還可以提供鹽或更改標籤 ("H3"
) 以創建不同的輸出值。是值 H1 和 H2 的編碼,如果H1 和 H2 的大小永遠不會改變enc
,則它可以只是串聯。HKDF 只依賴於 HMAC,而 HMAC 只依賴於一個安全的散列函式。所以即使不直接可用,一般也可以實現。
但只有 SHA-512 也可以。