Hash

知道未知秘密的有效加鹽散列,是否可以計算另一個有效散列?

  • May 3, 2013

$ H(s,r)=d $ 是一個散列秘密字元串的函式 $ s $ 加鹽 $ r $ , 並返回摘要 $ d $ . $ r $ 可以任意選擇,每個 $ r $ 返回一個不同的 $ d $ . 對於任何 $ d $ , $ r $ 從函式中得知 $ R(d)=r $ .

兩個都 $ H $ 和 $ R $ 不可逆,即不存在既不可逆功能 $ H’(d,r)=s $ 也不是相反的 $ R’(r)=d $ . 證明d是字元串的有效雜湊 $ s $ ,它被賦予了一個函式 $ V(d,s) ↦ {0,1} $ 輸出 $ 1 $ 除非 $ H(s,r)=d $ .

是否可以計算另一個有效的雜湊 $ d’ $ 對於一個未知的 $ s $ , 只知道 $ d $ (因此鹽 $ r $ )? 也就是能不能找到一個函式 $ G(d,r’)=d’ $ 這樣 $ V(d’,s)=1 $ 至少對於一些 $ r’≠ r $ 匹配 $ d’ $ ?

這是從理論上講的。

在實際方面,BCrypt 是 $ H $ . 如果知道未知秘密的有效摘要,我可以計算另一個有效摘要嗎?我聽說過一種稱為*“雜湊擴展攻擊”*的技術,但這涉及更改摘要的長度,對於 BCrypt 來說,這是固定的。從這個角度來看,BCrypt 是否容易受到攻擊?對於哪些(如果不是全部或沒有)加密散列算法可以具有像 G 這樣的函式?

在您問題的第一部分,您似乎在描述密碼雜湊方案。建構此類方案的常見(或至少通常推薦的)方式是基於消息認證碼(MAC)。

具體來說,讓 $ \operatorname{MAC}_K(m) $ 是帶有密鑰的消息驗證碼 $ K $ 和留言 $ m $ , 然後讓 $ H(s,r) = d = (r, c) $ , 在哪裡 $ c = \operatorname{MAC}_s(r) $ 和元組 $ (r, c) $ 以某種明確的方式編碼為字元串。

MAC 要求的標準安全屬性是在選擇明文攻擊下抵抗存在偽造:也就是說,即使允許攻擊者請求 $ \operatorname{MAC}_K(m) $ 對於任意多的消息 $ m $ (在計算可行性的一些合理範圍內),他們必須不能為他們沒有向持有者請求MAC 的任何消息偽造一個有效的 MAC(其機率遠高於僅僅通過隨機猜測)密鑰的 $ K $ .

很容易看出,與 $ H $ 如上定義,此安全屬性意味著攻擊者無法產生新值 $ r’ $ 和 $ d’ $ , 這樣 $ H(s,r’) = d’ $ , 不知道 $ s $ : 為此,他們必須製作一個 $ c’ = \operatorname{MAC}_s(r’) $ 對於一些 $ r’ $ 他們還不知道誰的 MAC,因此違反了 MAC 可以防止存在偽造的假設。

一般來說,我們不能證明任何給定的 MAC 在這個意義上是安全的(就像我們通常不能證明任何密碼原語的安全性一樣,除了一些瑣碎的,比如一次性密碼),但是有很多 MAC 函式具有經受了相當大的密碼分析關注,通常被認為是安全的。此外,在某些情況下,我們可以做的是將關於 MAC 安全性的假設簡化為關於其他密碼原語的安全性的假設,就像我們降低了 $ H $ 高於用於構造它的 MAC。

例如,使用安全散列函式實例化的HMAC可以被證明是安全 MAC(實際上是 PRF),前提是散列函式滿足一些技術假設。與密碼散列更相關的是,PBKDF2密鑰派生函式可以被證明可以抵抗存在偽造,前提是它使用安全 PRF(例如 HMAC)進行實例化。此外,由於scrypt密鑰派生函式使用 PBKDF2-HMAC-SHA256 進行初始和最終傳遞,我相信只要 SHA-256 散列函式滿足 HMAC 的安全假設,它也可以被證明是不可偽造的。

至於bcrypt,當然它的安全性也無法證明,AFAIK 也不能直接簡化為任何其他原語的安全性(當然,除了對 EksBlowfish 來說微不足道)。但是,(AFAIK)都沒有人反駁原始 bcrypt 論文中斷言的安全聲明。這些說法並沒有直接提到存在的不可偽造性,但據我一眼就可以看出,“ $ \epsilon $ 論文中斷言的-security”屬性確實有效地暗示了這一點。

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