Hash

雜湊如何真正確保唯一性?

  • September 14, 2020

這似乎是不切實際和不必要的對話,但我覺得這是我需要澄清的事情。特別是,我剛剛在一家區塊鏈初創公司獲得了我的第一份開發人員工作。

因此,據說雜湊對於它看到的任何資訊都會生成相同的東西,而且它只是一種單向互動。

  1. 據我了解,雜湊只是長字母數字字元串。如果一個人一遍又一遍地計算所有文件、鍵、資訊、文件等的雜湊值——對於不同的資訊(將其應用於所有可能的上下文)再次出現相同的組合只是時間問題?考慮到大小和可能性,這可能是一個不切實際的測試,是的,但正是這一點使雜湊變得強大,實際上不可能重新創建一個雜湊,對於任何可預見的努力它都很好,或者是否有一些我遺漏的元素可以減少竟然把那極低的機率歸零?
  2. 是否有任何設計約束阻止非常強大的電腦從散列中反向計算原始數據?或者僅僅是因為設計如此復雜以至於夢想完成這項任務所需的如此大的電腦只是徒勞的?
  3. 是什麼阻止了黑客或惡意中間人破解創建此“散列”的軟體程序或庫,然後使用該庫創建他/她自己的散列或錯誤標記某些目標公司的散列,並用他/她自己指向他們的版本的文件?特別是因為許多應用程序、語言和開發人員獨立使用散列。無論哪個安全性最弱,我們可以用它來承擔其餘的?

任何資源也很感激。

簡單的答案是雜湊不能確保唯一性。從廣義上講,雜湊的行為類似於“確定性隨機數”——確定性是指對相同數據進行雜湊處理總是給出相同的答案;隨機的意思是散列的值基本上是不可預測的,而無需實際計算它。並且足夠不可預測的是,對於一個好的密碼散列,我們不知道有什麼方法可以找到具有特定散列的字元串,除了反複試驗。

特別是,密碼散列值足夠接近真正隨機的生日悖論。也就是說,如果有 $ k $  散列可以採用不同的值,並且它們的可能性都相同,您必須粗略地散列 $ \sqrt{k} $  在找到兩個具有相同雜湊值的機率大於一半之前的文件。因此,如果您使用的是 256 位雜湊,則需要查看 $ \sqrt{2^{256}}=2^{128}\approx 3\times 10^{38} $ 文件甚至有 50/50 的機會找到兩個具有相同雜湊值的文件。相比之下,地球上每納克質量大約有 200 個文件。

首先,一些定義;

  • **抗前映像:**給定雜湊值 $ h $ 找消息 $ m $ 這樣 $ h=Hash(m) $ . 考慮將密碼的雜湊值儲存在伺服器上。例如。攻擊者將嘗試找到您帳戶的有效密碼。
  • **第二抗前像:**給定消息 $ m_1 $ 應該在計算上不可行以找到另一條消息 $ m_2 $ 這樣 $ m_1 \neq m_2 $ 和 $ Hash(m_1)=Hash(m_2) $ . 偽造給定消息。
  • 碰撞阻力:如果很難找到雜湊到相同輸出的兩個輸入 $ a $ 和 $ b $ 這樣 $ H(a)= H(b) $ , $ a \neq b. $

0)雜湊如何真正確保唯一性?

正如大衛給出的答案,不,他們不能確保唯一性。要看到這一點,請考慮一個簡單的雜湊(模仿唯一的壓縮);

$$ H’:{0,1}^{20} \rightarrow {0,1}^{1} $$ $$ x \mapsto x \pmod 2 $$

根據定義;所有偶數都有 $ 0 $ 作為雜湊值和奇數有 $ 1 $ 作為雜湊值。

另一種看待這一點的方法是鴿巢原理。輸入大小大於散列大小,因此存在至少一個散列值包含多於一條消息。

所以,沒有唯一性。但是找到另一個碰撞,在計算上肯定是不可行的。

  1. a)據我所知,雜湊只是長字母數字字元串。

雜湊輸出是位,只是位。您如何代表或傳輸它們取決於開發人員。

  1. b)如果一個人一遍又一遍地計算所有文件、密鑰、資訊、文件等的雜湊值——這只是時間問題,直到不同的資訊再次出現相同的組合

您所說的稱為雜湊衝突。根據雜湊的定義,它是不可避免的,但找到一個必須在計算上是不可行的。但是,如果您的雜湊函式被認為是弱的或發生新的攻擊,您必須將其更改為MD5SHA-1

$$ H:{0,1}^* \rightarrow {0,1}^l $$

可以看出,對於 $ 2^l $ 可能的雜湊輸出有有限的(因為我們不能無限地處理)許多可能的輸入。SHA3​​-512 只有 $ l=512 $ 輸出位。如果消息空間只有 1024 位,那麼對於給定的雜湊值 $ h $ 有 $ 2^{1024}/2^{512} $ 可能的輸入值 $ h $ 作為雜湊值。

隨機選擇一個,你將擁有 $ 1/2^{512} $ 只要散列函式隨機執行,匹配散列的機率。在e-mule的 MD4 上有一個有趣的隨機雜湊衝突。

  1. c)考慮到大小和可能性,這可能是一個不切實際的測試,是的,但正是這一點使雜湊變得強大,實際上不可能重新創建一個雜湊,對於任何可預見的努力它都很好,或者是否有一些我錯過的元素甚至將極低的機率降低到零

在雜湊函式的設計中,要求找到一個前圖像、第二圖像和碰撞必須在計算上是不可行的。但是攻擊者找到一個的機會總是微不足道的,就像在 MD4 案例中一樣。

  1. 是否有任何設計約束阻止非常強大的電腦從散列中反向計算原始數據?或者僅僅是因為設計如此復雜,以至於夢想完成這項任務所需的如此大的電腦只是徒勞的練習?

雜湊函式在設計上不是作為排列的可逆函式。他們達到了2

  • 位依賴性:輸出的每一位都依賴於輸入的每一位。
  • 雪崩:輸入中的單個位變化必須改變 $ \approx $ 一半的位隨機。
  • 非線性:防止攻擊線性系統求解技術。

攻擊者必須找到原像或次要原像。強大的實體可以搜尋所有可能的輸入以匹配給定的雜湊。這些範例Rainbow tablehashcat可能沒有您想像的那麼強大,但它們處於計算的邊緣。

如果您以某種方式找到適用於雜湊值的圖像,則無法確定這是原始圖像,即原圖像。

如果您的強大實體是量子電腦,請不要擔心。 DJ伯恩斯坦

任何害怕量子雜湊衝突算法的人已經對非量子雜湊衝突算法有更多的恐懼。

量子電腦將雜湊衝突的複雜性從 $ 2^{b/2} $ 至 $ 2^{b/3} $ . 非量子電腦已經實現 $ 2^{b/3} $ 時間更短,Rho機器。1 , 2

  1. 是什麼阻止了黑客或惡意中間人破解創建此“散列”的軟體程序或庫,然後使用該庫創建他自己的散列或錯誤地標記某些目標公司的散列,並用他自己的指向他們的文件版本?特別是因為許多應用程序、語言和開發人員獨立使用散列。無論哪個安全性最弱,我們可以用它來承擔其餘的?

除了尋找碰撞的難度之外,別無他法。如果攻擊者以某種方式能夠找到碰撞,他們就可以執行它。最近,在 PDF 文件中identical-prefix collision attack執行SHA-1以創建惡意的有效 PDF。

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