Hash
散列中術語“不可逆”的含義
我在 StackOverflow 上與 Jon Skeet 進行了一次有趣的討論。他指出雜湊是不可逆的,但他將其擴展到非加密雜湊。雜湊函式具有特定的輸出大小,而該函式可以處理任何大小的消息。因此,如果您從這個角度爭論,散列總是不可逆的,因為有許多消息具有相同的散列。
但是我想知道這是否是“不可逆”的正確定義。在密碼學中,不可逆是否意味著我們無法確定性地建立正確的消息,還是意味著除了將其與已知消息/雜湊對進行比較之外,我們無法找到有關該消息的任何資訊?
在密碼學中,散列通常用作原始消息的佔位符;通過使用雜湊,我們有效地使用了原始消息。例如,在對長消息進行簽名時,我們對長消息進行雜湊處理,然後在雜湊上執行簽名算法;如果我們假設簽名算法很強大(因此只有生成該雜湊的消息才會生效),並且我們假設很難找到第二條生成相同雜湊的消息(因此它必須是那個原始消息已簽名),那麼整個系統是強大的。
因此,在談論雜湊函式時,我們通常不會考慮“資訊洩漏”;也就是說,我們通常不擔心檢查雜湊輸出是否會洩漏有關原始消息的資訊。相反,我們擔心很難找到生成該雜湊的消息(原像抗性、第二原像抗性或抗碰撞性),因為這與我們通常需要的散列函式的安全假設直接相關。
也就是說,如果有人發現(例如)SHA3 中的洩漏,例如,通過檢查雜湊,我們可以確定消息的長度,嗯,那將是非常令人擔憂的(我們可能會開始棄用 SHA3 ); 我們有時想把我們的雜湊函式當作一個隨機預言機,這表明它不像一個隨機預言機
$$ 1 $$. 然而,這種洩漏的可能性似乎不大。 $$ 1 $$:是的,我知道長度擴展攻擊表明 SHA-2 不像隨機預言機;這很好理解,我們只是避免以適用特定攻擊的方式使用 SHA-2。