Sha-256

使單向函式更難反轉

  • December 2, 2017

假設對於加密協議,需要一個 32 字節到 32 字節的單向函式。建議是:

  1. $ \textrm{sha256}(x) $
  2. $ \textrm{hmac}(\textrm{sha256}, x, x) $
  3. $ \textrm{hmac}(\textrm{sha256}, x, f(x)) $ , 在哪裡 $ f $ 是一個 32 字節到 32 字節的函式,它的逆很容易計算,例如按字節逆(它的逆是它自己)。

#2和#3是否比#1(普通SHA-256)更難反轉?有沒有更難推翻的提議?

我理解,如果攻擊者可以訪問一個通用方法,使用該方法可以反轉任何 32 字節到 32 字節的函式,那麼 #1、#2 和 #3 同樣容易反轉,因此它們同樣安全的。

假設將來有人找到一種快速的方法來計算 32 字節輸入的 SHA-256 的逆,但是沒有其他快速通用的逆向方法可用。(攻擊者非常積極地反轉 SHA-256,因為這樣做可能會破壞許多加密協議。)這無助於找到 #2 或 #3 的逆,因為它們有一個外部 SHA-256 呼叫,其輸入是64 字節。

(2) 和 (3) 的反轉成本預計比 (1) 略高,無論分佈在 $ x $ 可能是,因為唯一已知的原像搜尋算法將它們視為要向前評估的黑盒,並通過猜測和檢查或多或少地搜尋(使用彩虹表或量子電腦進行優化)。

任何此類算法的預期成本是評估函式的成本乘以您必須評估它的預期次數。評估 (2) 和 (3) 的成本是相同的,但它們的成本大約是 (1) 成本的兩倍。您可以通過使用現代密碼散列(例如 scrypt 或 argon2)使事情變得更加昂貴。

**但是,**如果唯一可能的值 $ x $ 是字元串red並且blue機率相等,則成本差異可以忽略不計。對手有 50-50 的機會在一次嘗試中成功。

所以一個更重要的問題是:你是如何在你的應用程序中使用它的?它如何適應協議?您希望通過它實現哪些安全屬性?您希望對試圖破壞系統的對手施加什麼成本?

如果分佈在 $ x $ 具有 >=128 位的熵,或者如果實際上有兩個輸入,其中一個是具有 >=128 位熵的秘密,而另一個可能具有低熵,則沒有理由嘗試通過以下方式提高評估函式的成本迭代 SHA-256 或使用 scrypt 或 argon2。另一方面,如果您要儲存密碼散列,那麼您絕對應該使用為密碼散列設計的東西,這會增加面積*時間成本並以高並行度阻止攻擊者。

免責聲明:我不是專家。

我認為這是默默無聞的安全性。當您進行 x->y 大小相同的轉換時,理論上可能答案的“地址空間”是 $ 2^{256} $ 結果。

無論您將使用什麼,這都是相同的,因為底層轉換基於 SHA256,這意味著如果它“破解”,您的選項之間的唯一區別將是額外的步驟,這些步驟會掩蓋這一切的實際數學基礎。

簡而言之:我認為這並不重要。

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