Hash

從 sha256 雜湊中刪除單個字節的後果是什麼?

  • January 4, 2020

我正在開發一個系統(乙太坊),儲存 32 字節比儲存 33 字節便宜得多。我想創建一個基於雜湊值儲存數據的表。

Sha256 將滿足此標準,因為它輸出 32 個字節。

但是,我還想包含一個“版本”字節,以防我將來需要更改雜湊算法。這將需要 33 個字節。

一個簡單的解決方案是簡單地去掉最後一個字節,只使用前 31 個字節進行查找。

  1. 這會以任何方式偏向雜湊嗎?
  2. 我的假設是這會將反轉散列所需的計算能力降低 1/256。那是對的嗎?
  3. 我的假設是這會將雜湊衝突的可能性增加 25600%。那是對的嗎?
  1. 這會以任何方式偏向雜湊嗎?

我們想要輸出位的雪崩標準,即任何輸入位的變化必須隨機影響一半的輸出位。雜湊函式的每一位都必須依賴於輸入位;刪除一位不會影響其他位。

  1. 我的假設是這會將反轉散列所需的計算能力降低 1/256。那是對的嗎?

首先,雜湊函式並不是真正可逆的,因為它們是壓縮函式,也就是說,它們從一個大的輸入空間映射到一個較短的空間。

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

如果我們要談論抗碰撞性,請參閱下一個答案。對於通用原像搜尋,是的;正如您所指出的,它將降低計算能力。

  1. 我的假設是這會使雜湊衝突的可能性增加 25600%。那是對的嗎?

碰撞阻力由通用生日攻擊來衡量,即 $ \sqrt {2^l} $ , $ l $ 是散列函式的輸出大小。SHA256 有 $ \sqrt {2^{256}} = 2^{128} $ 通用生日攻擊時間。

在您的情況下,我們將有 $ \sqrt {2^{256-8}} = 2^{124} $ 作為一般的生日攻擊時間。因此,我們有一個 $ 2^{4}= 16 $ 攻擊時間加快。

**TL;DR:**將散列截斷為 31 個字節是安全的(另請參閱此堆棧交換答案


**注1:**比特幣礦工達到 $ \approx 2^{92} $ 2019 年 8 月 6 日每年的 SHA-256 雜湊值。

注 2:FIPS180-4中定義的 SHA-224是通過截斷 SHA-256 雜湊值並使用不同的初始常數進行域分離計算得出的,因此該值與 SHA-256 值的前 28 個字節不同。

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