Hash
更強的加密雜湊是否也意味著更擅長驗證完整性?
到目前為止我所知道的
**事實 1)**我知道所有加密雜湊函式都具有以下屬性
- 它們本質上是多對一的
- 它們產生固定大小的輸出
- 給定一個輸出
x
,找到原始消息是不可行m
的H(m) = x
**事實 2)**我知道某些加密雜湊函式“更強”,但計算起來比其他函式更“昂貴”——從某種意義上說,試圖克服它們(屬性 3)要困難得多,而且耗時/資源密集。
sha512(m)
比哪個更難破解,而後者又比sha256(m)
哪個更難破解sha224(m)
**事實 3)**我也知道某些加密雜湊函式在驗證消息完整性方面的性能比簡單的 CRC 校驗和更差。(根據以下stackexchange文章)
截斷為 32 位的加密散列很容易與只有一位或兩位不同的兩個輸入發生衝突,而 CRC 則不會。CRC 旨在可靠地檢測傳輸過程中通常發生的錯誤模式,因此它對這些類型的錯誤會做得更好,而對其他錯誤則更糟。短散列在所有輸入上表現最佳,因此在輸入上的表現比 CRC 更差 CRC 擅長處理。
我想知道的
**問題 1)**哪些常見的散列函式比 CRC 校驗和更差,哪些在驗證完整性方面比它們更好?(例如文件損壞/更改)。
**問題 2)**加密散列函式越強,驗證完整性是否越好?(例如
sha512
將能夠比 更好地檢測文件更改sha256
)。
1)所有常見的密碼散列函式都優於CRC,甚至MD5。這是因為它們旨在檢測惡意篡改,而 CRC 不是。MD5 仍然可以破解,但 CRC 可以很容易地被操縱。
- 雜湊函式抗碰撞性決定了它們在完整性驗證方面的“好”程度,因為有更多可能的唯一輸出,越大越好,但是在大多數情況下,即使是 64 位抗碰撞性也足以檢測到非惡意數據損壞,除非你正在處理大文件。SHA256 有 128 位的抗碰撞能力,這是很多,也就是 3400 億億億,比地球上所有人類所包含的原子還要多。像 SHA512 這樣的 512 位函式的抗碰撞性簡直是瘋了,幾乎與整個宇宙中的原子數量相匹配。