文件訊息鑑別 (Message Authentication)
本 章 內 容 8.1 前言 8.2 向雜湊函數 8.3 件訊息的完整性驗證 8.4 MD5單向雜湊函數 8.5 SHA單向雜湊函數 8.1 前言 8.2 向雜湊函數 8.3 件訊息的完整性驗證 8.4 MD5單向雜湊函數 8.5 SHA單向雜湊函數 8.6 文件訊息的來源驗證 8.7 訊息鑑別碼
8.1 前言 在網路上公開的傳送文件訊息(Document or Message)很容易遭到駭客攔截篡改、新增或刪除等攻擊。 需對文件訊息作完整性(Integrity)驗證。 利用單向雜湊函數(One-Way Hash Function, Secure Hash Function) : MD5, SHA 該文件訊息是否確實為某人所送過來的文件訊息,而非由他人假冒。 需驗證訊息的來源是否正確,亦可作完整性驗證。 利用 Message Authentication Code (MAC)
8.2 單向雜湊函數 ◎ 單向雜湊函數二個主要功能 (1) 將文件訊息打散及重組,使其不能再還 原為原始文件訊息。 (2) 將任意長度的文件訊息壓縮成固定長度 的訊息摘要(Message Digest, MD)。 ◎ 數學式子 MD=H(M) Example: H(M) = M 2 mod 2n-1 令n=5 ,H(M) = M 2 mod 31, H(M)介於 {0, …30} 令n=128 ,H(M) = M 2 mod 2128-1, H(M)介於 {0, …2128-2 } H(.):一單向雜湊函數 M :表一任意長度文件訊息
單向雜湊函數特性 MD=H(M) ◎ 單向雜湊函數三種特性 (1) 給定文件訊息M,可很容易算出其對應的訊息摘要MD 。 (2) 給定一訊息摘要MD,很難從MD去找到一個文件訊息M’,使H(M’)= MD。 (3) 給定一文件訊息M,很難再找到另一文件訊息M’,使H(M)=H(M’) , 避免碰撞的情況發生 (Collision-resistance) 。 對於訊息 M,在計算上是無法找出另一個訊息 M’ ≠ M,使得 H(M) = H(M’) 。 『弱雜湊函數』(Weak Hash Function) 若 H(M) = H(M’),則 M = M’,若 H(M)≠H(M’),則 M≠M’。 『強雜湊函數』(Strong Hash Function)
8.3 文件訊息的完整性驗證 ◎ 以單向雜湊函數做文件訊息的完整驗證,其驗證 方式如下: = H(M) = H(M) MD = MD’ 達到完整性 M 未被竄改 = H(M) = H(M) 缺乏訊息的來源作鑑別 將M做壓縮處理以降低資料傳輸與比較時間
比較與前章數位簽章的差異 SA=EdA(M) DeA(SA)=DeA (EdA(M)) E D M = DeA (EdA(M)) 達到完整性且訊息來源確認 M與 SA未被竄改
破解雜湊函數 破解雜湊函數的基本原理 偽造訊息M’,使其與原來訊息M的雜湊值相同 M’ ≠ M,使得 H(M) = H(M’) 碰撞的情況發生 (Collision-resistance) => 破壞完整性
8.4 MD5單向雜湊函數 MD5雜湊函數是麻省理工學院教授R.Rivest設計 源自於更早的MD4雜湊函數加以改良而成 RFC 1321標準文件不只提供MD5程式,也含有測試程式,容易瞭解 MD5演算法的輸入是一個不超過264個位元長度的訊息,而固定產生輸出為128位元的訊息雜湊值 MD5已被中國山東大學的王小雲教授等學者於2004年所破解 9
文件分割 將訊息分割成N個512位元的小區塊,Y0、Y1、...、YN-1,其總長度等於N × 512位元。將分割後的512位元訊息區塊,再分割為十六個32位元的字元,以M[0]、M[1]、...、M[15]來表示這16個32位元的字元。 (1) 文件分割 (2) M[0]… M[15] MD 10
初始化暫存器 Initial Vector, IV A: 01 23 45 67 B: 89 AB CD EF C: FE DC BA 98 Note: hexadecimal values A: 01 23 45 67 B: 89 AB CD EF C: FE DC BA 98 D: 76 54 32 10 11
MD5單向雜湊函數 添加位元及長度資訊 (L+X) mod 512=448 12
單一訊息區塊的運算過程
HMD5之每一回合運算過程
MD5的非線性計算方式及其真值表
MD5的T [i]參數值
8.5 安全雜湊演算法 安全雜湊演算法(Secure Hash Algorithm, SHA)是由 NIST及NSA於1993年所發展 SHA是以MD4雜湊函數為基礎 而其設計方式與MD4非常類似 在1995年公佈修訂版本 SHA-1 SHA-1也同時列為RFC 3174 RFC 3174內容與FIPS 180-1完全相同,但還加入C的實作程式碼 SHA-1會產生160位元的雜湊值
Secure Hash Algorithm (SHA-1) MD
安全雜湊演算法 NIST在2002年又對此標準修訂並公佈了FIPS 180-2,這定義了SHA的三個新版本: SHA-2 雜湊值長度為256、384、512的SHA-256、SHA-384 、SHA-512 2004年2月,發佈了一次FIPS PUB 180-2的變更通知,加入了一個額外的變種SHA-224,這是為了符合雙金鑰3DES所需的金鑰長度而定義。 這些新版的架構都相同,也使用如同SHA-1的模數算術和二進位邏輯運算 NIST在2005年表示將逐步淘汰SHA-1,並且將在2010年之前以其他的SHA作為正式標準
SHA-512處理過程
SHA家族 演算法 輸出雜湊值長度 (bits) 中繼雜湊值長度 (bits) 資料區塊長度 (bits) 最大輸入訊息長度 (bits) 一個Word長度 (bits) 迴圈次數 使用到的運算子 碰撞攻擊 SHA-0 160 512 264 − 1 32 80 +,and,or,xor,rotl 是 SHA-1 存在263的攻擊 SHA-256/224 256/224 256 64 +,and,or,xor,shr,rotr 尚未出現 SHA-512/384 512/384 1024 2128 − 1
OpenSSL進行SHA-256運算 假設將三位元組”abc”放於檔案”foo”,那麼可用下列指令來計算檔案”foo”的SHA-256雜湊函數值 openssl dgst –sha256 foo
8.6 文件訊息的來源驗證 單向雜湊函數雖然可用來作訊息的完整性驗證但實際運用上卻是行不通的。 問題在於沒有對訊息的來源作鑑別(Authentication)。
8.6.1 植基於對稱式密碼系統的文件訊息鑑別機制 × ◎ 對稱式密碼系統文件訊息鑑別機制的鑑別式如下: 若M很大傳輸與比較時間太長 (1)完整性驗證 M=M’ × =EK(M) =DK(C) =DK(EK(M))=M (2)訊息的來源作鑑別 張三李四用同一把K
8.6.2 植基於公開金鑰密碼系統的文件訊息鑑別機制 ◎ 以公開金鑰密碼系統來做數位簽章,其文件訊息 鑑別方式如下: =H(M) (1)完整性驗證 MD=MD’ =EPRa(H(M)) =DPUa(S) =DPUa(EPRa(H(M))) =H(M) E D =H(M) 公開金鑰密碼系統運算時間費時 (2)訊息的來源作鑑別 因用張三公鑰解簽章 代表張三用私鑰簽章
8.7 訊息鑑別碼 為改善前面方法需大量運算的缺點 文件訊息鑑別碼(Message Authentication Codes, MAC) 可用來驗證文件訊息是否為約定好通訊的雙方所傳送(訊息的來源作鑑別),並可驗證文件訊息在傳遞過程中是否遭到篡改(完整性驗證)。 利用對稱式密碼系統(8.7.1) 及金鑰相依單向雜湊函數(8.6.3 & 8.7.2)所構成的MAC 相較數位簽章 MAC缺少不可否認性 (1)完整性驗證 MAC=MAC’ (2)訊息的來源作鑑別
8.7.1 CBC-MAC ◎ CBC-MAC是一種用CBC區塊加密模式來實作文件訊 息鑑別的作法,只需將文件訊息用CBC模式來加密 即可。 (1)將所要傳遞文件訊息長度擴充為64位元的位數, 不足以0補上。 (2)將此擴充文件訊息依每64位元切割成一個區塊。 (3)先對第一個區塊作DES的加密,加密時需輸入一 56位元的祕密金鑰,所得到的64位元的密文,再 與下一個文件訊息區塊作互斥或(XOR)運算,然後 再用DES對其加密,以此類推。
CBC-MAC(RIPE-MAC1) MAC機制 MAC 3DES (RIPE-MAC3) AES MAC = ON =EK(BN⊕ON-1) =EK(BN⊕EK(BN-1⊕ON-2)) =EK(BN⊕EK(BN-1⊕EK(BN-2⊕… ⊕ EK(B2⊕ EK(B1))))) 3DES (RIPE-MAC3) AES
8.6.3 金鑰相依單向雜湊函數的訊息鑑別機制 為改善前面方法需大量運算的缺點,便有了植基於金鑰相依單向雜湊函數,此種機制又稱文件訊息鑑別碼(Message Authentication Codes, MAC) (1)完整性驗證 MAC=MAC’ (2)訊息的來源作鑑別 (1)MAC= H(K||M) =>不安全 (2)MAC= H(M||K)、MAC=H(K1||M||K2) (3)MAC=H(K || H(K||M))、MAC=H(K1 || H(K2||M))
8.7.2 單向雜湊函數MAC (HMAC) ◎ 這種MAC類型是利用一單向雜湊函數,配合一祕密金鑰所構成的文件訊息鑑別碼。 ◎ 串接方式可以是H(K||M),但不安全。較安全的串接方式是H(M||K)、H(K1||M||K2)、H(K || H(K||M))、H(K1 || H(K2||M))。 ◎ 此類的文件訊息鑑別碼機制也可讓使用者自行來 決定要採用何種單向雜湊函數,在實作上相當便利 也具有彈性。例如: MD5、SHA-1、RIPEMD-160、Whirlpool
以H(K||M)串接方式不安全 可任加一個區塊的文件訊息M’到原文件訊息的後面其驗證的結果都會正確。 以MD5單向雜湊函數演算法為例,若王五攔截到張三要傳給李四的文件訊息M及其訊息鑑別碼H(K||M),那麼王五根本不需要知道張三跟李四所協議的共同秘密金鑰K就可以任加一段訊息M'至原訊息後面,且有辦法得到正確的訊息鑑別碼H(K||M||M')。 利用攔截到的128位元訊息鑑別碼H(K||M)作為MD5中A、B、C、D四個暫存器的初始值。 將添加訊息M'分割成數個512位元的訊息區塊,再透過MD5演算法來做運算。 原來H(K||M)最後得到的128位元輸出結果就等於H(K||M||M’)。 SHA也有同樣的問題 31
單向雜湊函數MAC (HMAC) 利用雜湊函數建構MAC稱HMAC,也成為近年來的新趨勢: 因為雜湊函數通常較快 密碼雜湊函數的程式庫函式相當普遍 SHA之類的雜湊函數並非為MAC設計,且因這類的雜湊函數不依靠金鑰,因此不能直接用在MAC 任何以雜湊函數為基礎的MAC函數安全性,是由所採用的雜湊函數強度決定 HMAC已經被納入多項國際標準的規格 RFC 2104的內容就是HMAC HMAC也已經是NIST標準(FIPS 198) IP Security規格要求需以HMAC實作MAC SSL等網際網路協定也採用HMAC
單向雜湊函數MAC (HMAC) 架構 HMAC可以如下表示: HMACK(M)= HMAC(K,M) = H [(K+ ⊕ opad) || H [ (K+ ⊕ ipad) ||M)]] K+ = 在K的左邊附加0,使其長度為b位元 ipad = 將00110110(也就是16進位的36)重複b / 8次 opad = 將01011100(也就是16進位法的5C)重複b / 8次 M