資訊安全導論 淡江大學 資訊管理系 侯 永 昌 http://mail.im.tku.edu.tw/~ychou ftp://mail.im.tku.edu.tw/Prof_Hou
教科書:資訊與網路安全概論,黃明祥、林詠章著,Mc Graw Hill出版,普林斯頓總經銷
第八章 訊息鑑別
前言 在網路上公開的傳送文件或訊息很容易遭到駭客攔截篡改、新增或刪除等攻擊 需對文件訊息作完整性(Integrity)驗證 該文件訊息是否確實為某人所送過來的文件訊息,而非由他人假冒 需驗證訊息的來源是否正確
單向雜湊函數 單向雜湊函數兩個主要功能 將文件訊息打散及重組,使其不能再還原為原始文件訊息 將任意長度的文件訊息壓縮成固定長度的訊息摘要 MD=H(M),其中H(.)代表一個單向雜湊函數,M代表一任意長度之文件訊息,MD代表文件訊息之訊息摘要 例:MD=H(M)=M2 mod 31 H(5)=25, H(10)=7, H(100)=18,都介於0~30之間
單向雜湊函數的特性 單向雜湊函數三種特性 給定文件訊息M可很容易算出其對應的訊息摘要MD 給定一訊息摘要MD ,很難從MD去找到一個文件訊息M,使H(M)=MD 給定一文件訊息M,很難再找到另一文件訊息M’,使H(M)=H(M’) 前兩個特性滿足了單向的要求,第三個特性是希望避免碰撞的情況發生(Collision-resistance)
文件訊息的完整性驗證 以單向雜湊函數做文件訊息的完整驗證,其驗證方式如下: 首先,張三將要傳送給李四的文件訊息M,經單向雜湊函數運算後得到一訊息摘要MD,再將文件訊息M與訊息摘要MD一起送給李四 李四收到後先將文件訊息M用同樣的單向雜湊函數運算,假設得到一訊息摘要MD’,李四再比較MD’是否與收到的MD相同,若相同,則李四則可確認此文件之完整性 訊息M
MD5單向雜湊函數(一) MD5是由MIT教授Ron Rivest所發明,可以將任意長度的文件訊息資料,壓縮成長度固定為128位元的訊息摘要 添加位元:若輸入的文件訊息長度為L,必須先添加X個位元,使得(L+X) mod 512 = 448,而添加位元的第1位必須為1,其它都必須為0 加入長度訊息:將文件訊息的原始長度L表示成2進位表示法,取最後的64位元(如果太多捨棄左邊、太少左邊補0),加在上一步驟所產生地資料之後。此時整個訊息的長度變成512的整數倍
MD5單向雜湊函數(二) 文件的分割:將文件分割為N個512位元的訊息區塊(Y0, Y1, … YN-1),每一個區塊再分割為16個32位元的字元(M[0], M[1], … M[15])
MD5單向雜湊函數(三) 初始化MD暫存器:MD5的執行過程會用到A, B, C, D四個32位元暫存器,其初始值為 A ﹦01234567, B ﹦89ABCDEF C ﹦FEDCBA98, D ﹦7654321 MD5訊息區塊的運算過程: M[0], M[1], …, M[15] 訊息摘要
MD5單向雜湊函數(四) 單一訊息區塊的運算過程 A, B, C, D暫存器的值先複製到AA, BB, CC, DD中 每一個M[i]都要做四回合的運算 A, B, C, D暫存器的值先複製到AA, BB, CC, DD中 A B C D 供下一組512位元訊息區塊運算使用
MD5單向雜湊函數(五) g(.)代表F, G, H, I 四種基本函數 <<<S代表向左循環旋轉S個位元 r代表回合數,K介於0~15之間 若有進位則將進位捨棄
MD5單向雜湊函數(六) F, G, H, I 四種基本函數 B C D F(B, C, D) = (BC)(BD) G(B, C, D) = (BD)(CD) H(B, C, D) = BCD I(B, C, D) = C(BD) 1
MD5單向雜湊函數(七) 常數T[i]的產生公式:T[i] = 232 abs(sin(i))
MD5單向雜湊函數(八) 執行到第四回合的最後一個步驟時,A, B, C, D暫存器內的值要和先前複製到AA, BB, CC, DD的值相加,將結果再回存到A, B, C, D暫存器內,以供下一個512位元訊息區塊運算之用 輸出雜湊函數值:執行到最後一個訊息區塊YN-1,最後暫存器A, B, C, D內的值就是所得之128位元之訊息摘要 山東大學王小云教授在UC Santa Barbara的國際密碼學會議(Crypto2004)上成功地破解了MD5,使得世界通行密碼標準轟然倒塌
SHA單向雜湊函數(一) SHA是由美國國家標準局(National Institute of Standards and Technology, NIST)所提出,可以將任意長度的文件訊息資料,壓縮成長度固定為160位元的訊息摘要 以160位元為處理單位,使得SHA地處理效率比MD5為差 比MD5更能抵抗暴力攻擊(Brute-Force Attack) SHA對於文件訊息的前置處理,如添加位元,添加長度訊息都和MD5的方式是一樣的
SHA單向雜湊函數(二) 初始化暫存器:SHA的執行過程會用到A, B, C, D, E五個32位元暫存器,其初始值為 A = 67452301, B = EFCDAB89 C = 98BADCFE, D = 10325476 E = C3D2E1F0 SHA訊息區塊的運算過程:
SHA單向雜湊函數(三) <<<1表示將W向左循環旋轉1位元 SHA中W字元的產生過程
SHA單向雜湊函數(四) 單一訊息區塊的運算過程
SHA單向雜湊函數(五) SHA的回合運算過程 若有進位則將進位捨棄
SHA單向雜湊函數(六) F1, F2, F3, F4 四種基本函數 B C D F1(B, C, D) = (BC)(BD) (BC)(BD)(CD) F4(B, C, D) 1
文件訊息的來源驗證 單向雜湊函數雖然可用來作訊息的完整性驗證,但實際運用上卻是行不通的。問題在於沒有對訊息的來源作鑑別(Authentication) 你怎麼知道發送訊息給你的人真的是張三? 訊息M
祕密金鑰密碼系統的訊息鑑別機制 對稱式密碼系統文件訊息鑑別機制的鑑別式如下 當張三要送訊息M給李四,張三就用與李四先協議好的祕密金鑰K,來對訊息M作加密(如=Ek(M)) 張三將訊息M及密文C一同寄給李四,李四收到後就驗證Dk(C) = M?若Dk(C)與M相等,則李四就可確認此訊息為張三所送 C
公開金鑰密碼系統的訊息鑑別機制 以公開金鑰密碼系統來做文件訊息鑑別方式如下 要傳送訊息M給李四時,張三計算出該訊息的訊息摘要MD=H(M),接著再用私密金鑰(PRa)計算訊息摘要的數位簽章S=DPRa(MD),然後將文件訊息M與數位簽章一起送給李四 李四收到後,先計算出訊息M的訊息摘要MD=H(M),接著利用張三的公開金鑰(PKa)來驗證EPRa(S)=MD?若相等,則李四就可相信該訊息是正確的 訊息M S
金鑰相依單向雜湊函數的訊息鑑別機制 為改善前面兩種方法需大量運算的缺點,便有了植基於金鑰相依單向雜湊函數,此種機制又稱文件訊息鑑別碼(Message Authentication Code, MAC) 張三與李四先協議一把共同的祕密金鑰K,當張三要傳送一訊息M給李四時,張三會先利用K對此文件訊息M產生一文件訊息驗證碼MAC = H(K||M)。然後將M連同MAC一起送給李四 李四收到後會先將M及自己的祕密金鑰K,來算出MAC’=H(K||M),再與接收到的MAC進行比對,若相等則確信文件訊息在傳送過程中沒有遭到篡改
金鑰相依單向雜湊函數的訊息鑑別機制 訊息鑑別碼與數位簽章的比較: 可以做到文件訊息的完整性鑑別及文件訊息的來源鑑別,但是無法達到不可否任性 需要通訊雙方先協議出一把共同的祕密金鑰 運算效率較佳
利用祕密金鑰密碼系統及單向雜湊函數所構成的MAC
CBC-MAC CBC-MAC是一種用CBC區塊加密模式來實作文件訊息鑑別的作法,只需將文件訊息用CBC模式來加密即可 將所要傳遞文件訊息長度擴充為64位元的倍數,不足的部分以0補上 將此擴充的文件訊息依每64位元切割成一個區塊 先對第一個區塊作DES的加密,加密時需輸入一56位元的祕密金鑰,所得到64位元的密文,再與下一個文件訊息區塊作XOR運算,然後再用DES對其加密,以此類推
CBC-MAC MAC
單向雜湊函數MAC 這種MAC類型是利用一單向雜湊函數,配合一祕密金鑰所構成的文件訊息鑑別碼 此類的文件訊息鑑別碼機制也可讓使用者自行來決定要採用何種單向雜湊函數,在實作上相當便利也具有彈性 串接方式可以是H(K||M),但不安全。可任加一個區塊的文件訊息M’到原文件訊息的後面其驗證的結果都會正確 較安全的串接方式是H(M||K)、H(K1||M||K2)、H(K,H(K||M))、H(K1,H(K2||M))
以H(K||M)串接方式不安全 以MD5單向雜湊函數演算法為例,若王五攔截到張三要傳給李四的文件訊息M及其訊息鑑別碼H(K||M),那麼王五根本不需要知道張三跟李四所協議的共同秘密金鑰K,就可以任加一段訊息M’至原訊息後面,且有辦法得到正確的訊息鑑別碼H(K||M||M’) 利用攔截到的128位元訊息鑑別碼H(K||M)作為MD5中A、B、C、D四個暫存器的初始值 將添加訊息M’分割成數個512位元的訊息區塊,再透過MD5演算法來做運算 最後得到的128位元輸出結果就等於H(K||M||M’) SHA也有同樣的問題 這個例子舉的不好