是否可以生成與 SHA-256 產生類似輸出的雜湊函式?
當給定相同的輸入時,是否可以創建一個生成與 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 $ 定義為:
- 計算一個確定性的臨時密鑰,比如說, $$ b = SHAKE256(m). $$
- 計算共享密鑰 $$ k = SHAKE128([b]P) = SHAKE128([ab]G). $$
- 計算密文 $$ c = k \oplus FirstBits_{128}(m). $$
- 計算摘要 $$ H(m) = FirstBits_{128}(SHA512(m)) ~||~ [b]G ~||~ c. $$
作為設計者,您可以通過以下方式利用後門:
- 讓$$ (h, [b]G, c) = H(m). $$
- 計算共享密鑰 $$ k = SHAKE128([a][b]G) = SHAKE128([ab]G). $$
- 計算密文 $$ FirstBits_{128}(m) = k \oplus c. $$
- 嘗試驗證 $ H(m) $ 通過重新計算。這將失敗,如果 $ H(m) $ 被修改(計算不正確)或者如果 $ m $ 長於 128 位。
請注意,此方案不提供長消息的完整性。也就是連設計師都分不清 $ H(m) $ 長久以來的秘密 $ m $ 從隨機字元串。