仔細看這張圖,我花了好幾個小時消化、自己畫的這個密鑰關係圖……
MAC
(報文鑑別碼 messang authentication code)
一種數據保護的算法方式,用來完成消息來源的正確性鑑別,防止數據被篡改或非法用戶竊入的數據。
將要傳輸的數據通過MAC計算,產生MAC碼跟在數據串後面,發送給設備。
設備接收到數據後,用相同的算法驗證下MAC是否正確。
先備知識:
DES(Data Encryption Standard 數據加密標準),密鑰長度56位。使用對稱密鑰加密法。
3DES使用3條64位的密鑰對數據進行三次加密。它以DES爲基本模塊,通過組合分組方法設計出分組加密算法。
3DES的MAC碼計算一般是把數據分段成8字節的來進行運算的,不足8字節的需要補齊。
加密過程:
首先用第一個數據塊和初始數據進行異或,然後用左8字節的密碼進行DES加密,
將結果和第二包數據異或,再用左8字節的密碼加密,直到最後一包數據,
然後在右8字節的密碼DES解密,然後再用左8字節的密碼進行DES加密得到8個字節的MAC碼。
詳細舉例:
a) 將欲發送給POS中心的消息中,從消息類型(MTI)到63域之間的部分構成MAC ELEMEMENT BLOCK (MAB).
b) 對MAB,按每8個字節做異或(不管信息中的字符格式),如果最後不滿8個字節,則添加“0X00”。
MAB = M1 M2 M3 M4
其中:
M1 = MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18
M2 = MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28
M3 = MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
M4 = MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48
按如下規則進行異或運算:
MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18
XOR) MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28
--------------------------------------------------------
TEMP BLOCK1 = TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
然後,進行下一步的運算:
TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
XOR) MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
-------------------------------------------------------
TEMP BLOCK2 = TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
再進行下一步的運算:
TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
XOR) MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48
-------------------------------------------------------
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38c) 將異或運算後的最後8個字節(RESULT BLOCK)轉換成16 個HEXDECIMAL:
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
= TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342 ||
TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382
d) 取前8 個字節用MAK加密:
ENC BLOCK1 = eMAK( TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342 )= EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18
e) 將加密後的結果與後8 個字節異或:
EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18XOR) TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382
-----------------------------------------------------------------
TEMP BLOCK = TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18
f) 用異或的結果TEMP BLOCK 再進行一次單倍長密鑰算法運算。
ENC BLOCK2 = eMAK(TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18)= EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28
g) 將運算後的結果(ENC BLOCK2)轉換成16 個HEXDECIMAL:
ENC BLOCK2 = EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28= EM211 EM212 EM221 EM222 EM231 EM232 EM241 EM242 ||
EM251 EM252 EM261 EM262 EM271 EM272 EM281 EM282
示例:
ENC RESULT= %H84, %H56, %HB1, %HCD, %H5A, %H3F, %H84, %H84
轉換成16 個HEXDECIMAL:
“8456B1CD5A3F8484”
h) 取前8個字節作爲MAC值。取”8456B1CD”爲MAC值。
PIN
舉例:
計算PIN算法,給出一個卡號,約定密鑰爲12位3,請計算PIN密文。要求算異或
例如:明文PIN爲: 123456,假設:磁卡上的PAN:1234 5678 9012 3456 78
截取下的PAN:6789 0123 4567
則用於PIN加密的PAN爲:0x00 0x00 0x67 0x89 0x01 0x23 0x45 0x67
PIN BLOCK爲:0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
異或:0x00 0x00 0x67 0x89 0x01 0x23 0x45 0x67
結果爲:0x06 0x12 0x53 0xDF 0xFE 0xDC 0xBA 0x98
MD5
MD5(Message-Digest Algorithm 5 信息摘要算法5) 即哈希算法,一種雜湊算法。非對稱加密算法。
作用:在用數字簽名軟件簽署私人密鑰前,任意長度的大容量信息被壓縮成一個定長的十六進制數字串
特點:
1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。2、容易計算:從原數據計算出MD5值很容易。
3、抗修改性:對原數據進行任何改動,所得到的MD5值都有很大區別。
4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即僞造數據)是非常困難的。
應用:
一致性驗證:
對一段Message產生信息摘要Message-Digest,以防止被篡改。
數字簽名:
對一段Message產生fingerprint,以防止被篡改。
(記錄傳輸數據的MD5值,如果數據被修改,MD5值將不匹配。將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。)
安全訪問認證:在Unix系統中用戶的密碼是以MD5經Hash運算後存儲在文件系統中。用戶登錄輸入密碼時,系統將其進行MD5 Hash運算,與保存在文件系統中的MD5值比較,確定密碼是否正確。如此,系統不需要密碼的明碼就可確定用戶登錄系統的合法性。
(正是因爲這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱爲"跑字典"的方法。有兩種方法得到字典,一種是日常蒐集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度爲8位字節(8 Bytes),同時密碼只能是字母和數字,共26+26+10=62個字節,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁盤陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用於Unix系統中,這也是爲什麼Unix系統比一般操作系統更爲堅固一個重要原因。)