Encryption
是否可以執行 Hash(a) + ‘b’ -> Hash(a||b)
假設我們有(知道):
- 雜湊(A)
- A的長度
- A的字元類型($$ 0->9 $$,$$ a->z $$)
- A 是一個字元串
- 關於 B 的一切(原始字元串、長度等)
- 雜湊方法 SHA256
- 注:A的原值未知
有沒有辦法使用該資訊來創建 Hash(A||B)
$$ || is concatenate {“a” || “b” -> “ab” for example} $$
有沒有辦法使用該資訊來創建 Hash(A||B)
不它不是。但是,我們可以接近:我們可以計算 Hash(A||PadA||B),其中 PadA 是一個取決於 A 長度(但不取決於其內容)的字元串。這被稱為對 SHA256 的“長度擴展攻擊”。
嚴格來說,這取決於密碼的選擇:原則上,如果生成的雜湊包含引擎的整個內部狀態,那麼它是可能的,這樣您就可以將其作為起點載入。
(例如,可以附加 CRC;只需
hash(A)
在繼續計算之前載入為起始值hash(B)
。)然而,現代密碼旨在避免以允許您重新啟動引擎的方式披露引擎的內部狀態,並且沒有人會認為按照今天的標準,CRC 在密碼學上是安全的。