什麼是雜湊函數

從任意長度的資料計算出固定長度之值(雜湊值)的函數。密碼學中使用的雜湊函數(如SHA-256)設計成實際上既無法由雜湊值求出原始資料,也無法找到雜湊值相同的兩筆資料,用於偵測竄改、數位簽章與密碼的儲存。

日文名稱: ハッシュ関数

「雜湊函數」出現在3領域的8道練習題中(資訊安全基礎, 資料結構與演算法, 量子電腦硬體等)。

這個名詞所屬的領域: 資訊安全基礎

密碼學雜湊函數必須具備的性質

密碼學中使用的雜湊函數必須具備三種性質。抗原像性(單向性)是指難以找到能產生指定雜湊值的輸入。抗第二原像性是指給定一個輸入時,難以找到雜湊值相同的另一個輸入。抗碰撞性是指難以找到任意兩個雜湊值相同的不同輸入。此外還具有輸入只要改變1位元,輸出就有大約一半的位元改變的性質(雪崩效應)。

輸出長度與安全性

對於輸出為n位元的理想雜湊函數,以暴力法找出原像約需 2^n 次計算,但由於生日悖論,約 2^(n/2) 次就很可能找到碰撞。因此SHA-256抵抗碰撞的強度被視為約相當於128位元。MD5與SHA-1已被發現能以遠少於暴力法的計算量製造碰撞,因此不應用於數位簽章等需要安全性的用途。

主要用途

雜湊值可以當作資料的「指紋」。把下載檔案的雜湊值與官方公布的值比對,就能知道檔案是否損壞或遭調包(前提是官方的值本身是經由可信的管道取得)。在數位簽章中,是對長文件的雜湊值簽署,而非文件本身。儲存密碼時,要加上鹽值,並使用bcrypt或Argon2這類刻意讓計算變重的方式。結合金鑰的HMAC則作為訊息鑑別碼,用來偵測竄改。

練習雜湊函數的題目

密碼學中使用的雜湊函數(密碼學雜湊函數)的性質,正確的是哪一項?

  1. A只要使用私密金鑰,就能從雜湊值還原原始資料
  2. B雜湊值會隨輸入的長度成比例變長
  3. C輸入相同時一定得到相同的雜湊值,輸入即使只差1位元,雜湊值也會發生無法預測的巨大變化
查看答案與解析

正確答案:C. 輸入相同時一定得到相同的雜湊值,輸入即使只差1位元,雜湊值也會發生無法預測的巨大變化

雜湊函數是從任意長度的資料計算出固定長度之值(雜湊值、摘要)的函數。例如SHA-256不論輸入長度為何,都輸出256位元的值。相同輸入一定得到相同的值,輸入只要稍有不同,輸出就會發生無法預測的巨大變化。密碼學使用的雜湊函數還須具備:實際上無法由雜湊值求出原始輸入(單向性、抗原像性),以及難以找到雜湊值相同的兩個不同輸入(抗碰撞性)。雜湊函數是不使用金鑰的計算,並非加密,因此也無法解密還原。它用於偵測竄改、數位簽章、密碼的儲存等。

對於輸出為256位元的理想雜湊函數,以暴力法攻擊時所需計算次數的大致數量,在「找出能產生指定雜湊值的輸入(原像攻擊)」與「找出任意兩個雜湊值相同的不同輸入(碰撞攻擊)」兩種情況下,正確的組合是哪一項?

  1. A原像攻擊約2^256次,碰撞攻擊約2^128次
  2. B原像攻擊約2^128次,碰撞攻擊約2^256次
  3. C原像攻擊與碰撞攻擊都約2^256次
查看答案與解析

正確答案:A. 原像攻擊約2^256次,碰撞攻擊約2^128次

輸出為n位元的理想雜湊函數共有 2^n 種雜湊值,每嘗試一個輸入,與指定雜湊值一致的機率為 1/2^n。因此原像攻擊約需 2^n 次計算,n = 256 時約為2^256次。另一方面,碰撞攻擊中任何兩個輸入一致都可以,因此嘗試k個輸入時,可比較的組合增加到約 k^2/2 種。當 k^2/2 接近 2^n,也就是k約為 2^(n/2) 時,就很可能找到碰撞,n = 256 時約為2^128次。這與「23人中有兩人同一天生日的機率超過50%」的生日悖論是同樣的想法,稱為生日攻擊。因此雜湊函數抵抗碰撞的強度估計為輸出位元數的一半,若要求相當於128位元的強度,就需要256位元的輸出。

常見問題

雜湊函數與加密有什麼不同?

加密是使用金鑰、可以還原(解密)的轉換;雜湊函數則不使用金鑰,是無法還原的單向計算。因此雜湊值不是用來保密,而是用來確認資料是否相同。

SHA-256的雜湊值有幾位元?

不論輸入長度為何,都是256位元(以十六進位表示為64個字元)。無論是1個字元的資料或大型檔案,都會得到相同長度的值。

解析中的「雜湊函數」

出現「雜湊函數」的題目(8題)

  1. 密碼學中使用的雜湊函數(密碼學雜湊函數)的性質,正確的是哪一項?
  2. 對於輸出為256位元的理想雜湊函數,以暴力法攻擊時所需計算次數的大致數量,在「找出能產生指定雜湊值的輸入(原像攻擊)」與「找出任意兩個雜湊值相同的不同輸入(碰撞攻擊)」兩種情況下,正確的組合是哪一項?
  3. 儲存密碼時,建議不要直接使用SHA-256這類快速的雜湊函數,而是使用bcrypt或Argon2這類刻意設計成需要較長計算時間的方式。理由是什麼?
  4. 在大小為7(位置0~6)的雜湊表中,以雜湊函數 h(k) = k mod 7 依序存放鍵10、17、24、3。發生碰撞時,使用把位置逐一往後移(6的下一個是0)來尋找空位置的線性探測法。鍵3會存放在哪個位置?
  5. 關於後量子密碼(PQC),下列敘述何者正確?
  6. 網路服務儲存使用者密碼時,先在密碼加上每位使用者各不相同的隨機值(鹽值),再計算雜湊值並儲存。使用鹽值的主要目的是什麼?
  7. 比較訊息鑑別碼(MAC)與數位簽章的說明,正確的是哪一項?
  8. 關於雜湊表中碰撞(collision)的說明,下列何者正確?

半導體、電子電路與資訊計算工具

相關名詞

數位簽章 鹽值 雜湊表 GPU 取餘運算 後量子密碼 Shor 演算法 訊息鑑別碼 公開金鑰加密 多因素驗證

前往名詞解釋列表