Hash

如果攻擊者不知道秘密 S,而攻擊者知道常數 K 和 SHA3(K + SHA3(S)),那麼 S 是否可發現?

  • January 5, 2022

我試圖了解S對攻擊者的安全性。假設他們擁有巨大的雜湊能力,就像他們擁有加密貨幣挖礦設備一樣。

換句話說,攻擊者一定無法找出秘密S

  • S =“我的秘密片語”

但是攻擊者對兩者都有充分的了解:

  • 常數K = “一個眾所周知的常數”
  • KS的組合雜湊= SHA3(K + SHA3(S))= 9cc2679d4eb37c26cb82db4fdec8ac3787b3eff6efd18ec839397798a9ed402f
  • 先來看 $ \operatorname{SHA3}(S) $

$ \operatorname{SHA3} $ 是為原像、次級原像和抗碰撞而建構的加密散列函式。如果你使用 $ \operatorname{SHA3}-512 $ 那麼您將獲得 512 位的第一和第二前像抗性和 256 位的抗碰撞性。

在您的情況下,原像抗性很重要,找到原像的成功是一個微不足道的事件。平均而言,攻擊者需要嘗試 $ 2^{512} $ 不同的輸入來尋找原像。

這裡唯一有問題的情況是秘密的大小。如果密鑰小於 512 位,則前映像安全性不是 512 位,而是 $ = \min{512,bitLen(secret)} $ 因為攻擊者只需要搜尋這個空間。因此,保持秘密至少大於 256位以實現至少 256 位的安全性。

  • $ h = \operatorname{SHA3}(K + \operatorname{SHA3}(S)) $

附件獲得 $ K $ 和 $ h $ . 如上所述,這一次具有完整的前映像(512 位)抵抗將阻止攻擊者獲得 $ SHA3(S) $ 卻獨自訪問 $ S $ . 但是,他們仍然可以搜尋 $ S $ 所以,我們有 $ \min{512,bitLen(secret)} $ 安全。很好的秘密尺寸 $ S $ 再次是必需的。

哪怕是單 $ \operatorname{SHA3} $ 通話就夠了,雙 $ \operatorname{SHA3} $ 使用良好的密鑰(秘密)大小來呼叫是過大的。

您的構造類似於使用雙散列的 HMAC,因為 MD 散列函式容易受到長度擴展攻擊。另一方面,SHA3 像 BLAKE2 一樣對此有抵抗力。

已經有來自 SHA3 的 MAC 構造,稱為 KMAC,簡單來說,這要歸功於對長度擴展攻擊的抵抗力

$$ \operatorname{KMAC}(key,m) = \operatorname{SHA3}( key\mathbin|m) $$

用你的符號

$$ \operatorname{KMAC}(S,K) = \operatorname{SHA3}( S\mathbin|K) $$

這是一個安全的 MAC,不會以任何方式向攻擊者洩露密鑰。您可以簡單地使用 KMAC 通過良好的密鑰大小來實現您想要的!

‡有些人可能會爭辯說 128 位安全性就足夠了。然而,像加密量子電腦這樣的未來發展對 128 位散列函式原像構成威脅,作為多目標攻擊的對策,人們也應該使用至少 256 位的安全性。

我試圖了解 S 對攻擊者的安全性。

要攻擊單個實例(具有特定 K 值),攻擊者唯一可用的攻擊是在 $ S $ ; 計算 $ SHA3(K+SHA3(S)) $ 對於每一個,並檢查目標值是否恰好出現。這可以通過觀察這個標籤很容易看出是 $ SHA3(S) $ - 我們相信 SHA3 具有抗原像性。

現在,如果攻擊者有大量標籤(都具有相同的 K),他可以並行攻擊它們 - 通過將計算值與所有目標標籤進行比較,或者(如果他沒有所有可用的標籤立即)建立一個彩虹桌。然而,這兩種方法都不會減少攻擊特定標籤所花費的時間。

因此,要回答您的問題:S 的安全性取決於它的不可猜測性。如果它是單個片語,例如“我的秘密片語”,那麼這可能是攻擊者早期嘗試的值之一,因此他會很快找到它。另一方面,如果秘密片語是,比如 CNjlOQn,FXyEPAxNSYz/0VAP0Gxd,osl4zQlXQNqE7K5gPjiwld3n1f$rcmh,那麼攻擊者不會碰巧嘗試該值似乎是一個相當安全的賭注。

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