Hash

是否可以生成與 SHA-256 產生類似輸出的雜湊函式?

  • January 3, 2021

當給定相同的輸入時,是否可以創建一個生成與 SHA-256 相關的雜湊函式?

換句話說,給定一個固定的輸入 X:

SHA-256(X)=A
SHA-256'(X)=B

他的輸出 A 和 B 是相似的或相關的。

我正在考慮對 SHA-256 函式的一些部分進行改造,而不會過多地改變底層結構。有人可以就是否有可能提供更多見解或建議嗎?


編輯:我正在考慮使用允許原像攻擊的*內置“後門”創建一個雜湊函式。有點創建 SHA-256 的易碎版本。

我正在考慮創建一個雜湊函式,它產生與 SHA256 相似/相關的輸出,但具有允許原像攻擊的內置“後門”。有點創建 SHA-256 的“易碎”版本。

這對於任意大小的消息和未加密的散列函式是不可能的

假設您創建了一個雜湊函式,使得 $ h(m) \approx SHA256(m) $ . 這種相似性在問題中沒有定義,但是,我們可以認為它是一種排列,或者小的編輯距離,或者是相關的。假設可以比 SHA256 的原像攻擊更快地找到相似性。

現在假設 $ h() $ 是一個弱散列函式,您可以輕鬆找到原圖。現在;

  • 拿 $ z = SHA256(m) $
  • 使用相似性找到所有可能的候選者(來自前突變、小編輯、相關性或..)$$ z_i \in { a;|; a \text{ similar to } z} $$
  • 找到每個的前圖像 $ z_i $ ;$$ m_i = \operatorname{pre-image-h}(z_i) $$
  • 選擇所有 $ m_i $ 在 SHA256 上看到其中之一是原像$$ z \stackrel{?}{=} \operatorname{SHA256}(m_i). $$

也就是SHA256原像的破解。沒想到!。

對於後門短消息或例如它們的前綴,您可以選擇一些確定性的公鑰加密方案 $ PK $ 使用短密文(不確定這裡是否有合適的密文),生成密鑰對 $ (Pub,Priv) $ 並將雜湊定義為

$$ H(m) = FirstBits_{128}(SHA256(m)) ~||~ Pub.Encrypt(FirstBits_t(m)). $$

$ H $ 將與 SHA256“相似”,因為前 128 位是相同的。並且,擁有私鑰,您可以進行原像攻擊: $ (h~||~c) = H(m) $ , 你可以恢復 $ FirstBits_t(m) = Priv.decrypt(c) $ . 這將恢復完整的短消息或其前綴。在後一種情況下,您將不會獲得原像 $ H $ 但只有一些關於輸入的資訊。

當然可以調整參數,但這個想法應該可行。我不知道這種短公鑰系統是否存在,但至少它可以適用於更大的散列。

SHA512 的可能設計:

免責聲明:我不確定這是進行公鑰加密的好方法

我們將使用curve25519和流密碼(例如計數器模式下的AES 或簡單的一次性填充)。讓 $ G $ 成為該組的生成器。雜湊設計器生成私鑰 $ a \in \mathbb{Z}_{256} $ (需要進行一些後期處理,請參見曲線頁面)併計算公鑰 $ P=[a]G $ 大小為 256 位。然後,一條消息的雜湊函式 $ m $ 定義為:

  1. 計算一個確定性的臨時密鑰,比如說, $$ b = SHAKE256(m). $$
  2. 計算共享密鑰 $$ k = SHAKE128([b]P) = SHAKE128([ab]G). $$
  3. 計算密文 $$ c = k \oplus FirstBits_{128}(m). $$
  4. 計算摘要 $$ H(m) = FirstBits_{128}(SHA512(m)) ~||~ [b]G ~||~ c. $$

作為設計者,您可以通過以下方式利用後門:

  1. 讓$$ (h, [b]G, c) = H(m). $$
  2. 計算共享密鑰 $$ k = SHAKE128([a][b]G) = SHAKE128([ab]G). $$
  3. 計算密文 $$ FirstBits_{128}(m) = k \oplus c. $$
  4. 嘗試驗證 $ H(m) $ 通過重新計算。這將失敗,如果 $ H(m) $ 被修改(計算不正確)或者如果 $ m $ 長於 128 位。

請注意,此方案不提供長消息的完整性。也就是連設計師都分不清 $ H(m) $ 長久以來的秘密 $ m $ 從隨機字元串。

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