Sha-256

SHA-256 反轉等長字元串

  • September 5, 2015

我已經閱讀了大量關於 SHA-256 的內容,我發現 SHA-256 是不可逆的,因為輸入散列字元串的數據多於散列字元串包含的數據。但是,如果輸入的數據與輸出字元串大小相等,則輸入 64 個字元的字元串,輸出 64 個字元的字元串。是否可以將散列數據反轉回原始字元串?

SHA256 給出 256 位,即 32 個字節,而不是 64 個“字元”(請使用明確定義的位和字節)。用十六進製表示時,需要從 0-9a-f 的 64 個字元,但雜湊的長度是 256 位。

是的,您可以反轉雜湊。不幸的是,一個簡單的查找表太大而無法儲存,但你仍然可以在沒有記憶的情況下進行暴力破解。這將平均帶你 $ 2^{255} $ 嘗試(很多)。

有一些論文,比如“Bicliques for Preimages: Attacks on Skein-512 and the SHA-2 family”,討論了對 SHA-2 家族的原像抗性攻擊,但據我所知,它們都是學術休息(這意味著它們不能真正被有效地利用。

SHA-256 - 或任何加密安全散列 - 依賴於散列的內部構造來具有單向屬性。*對於任何類型和大小的 input ,*都會保持這種單向屬性。

但是,如果輸入域足夠小,那麼它可能能夠暴力破解雜湊值。由於 SHA-256 沒有鍵控,任何人都可以執行計算。因此,攻擊者所要做的就是將候選消息的散列輸出與原始消息的散列進行比較。

現在您已經指定了一個 64 個字元的輸入和輸出域。我將在這裡假設十六進制。這意味著 32 字節或 256 位的輸入/輸出。所以你會有 $ 2^{256} $ 如果您必須嘗試所有這些值,請嘗試這些值。您當然可以更早地找到雜湊,因此平均而言,您必須嘗試 $ 2^{256} / 2 = 2^{255} $ 價值觀。這被認為是不可行的。

如果您有多個值要測試,那麼如果您考慮以上任何內容,您會“更早”找到匹配的候選者 $ 2^{128} $ “更早”,因為它仍然完全不可行。


所以回答“是否有可能將散列數據反轉回原始字元串?” 沒有”。然而,這個答案確實假設每個可能的字節(或十六進製字元)都是同樣可能的。如果輸入域小得多,則可以使用上述方法對其進行暴力破解。

以上假設 SHA-256 在任何非學術意義上都沒有被破壞。

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