淺析銀聯(lián)加密算法

很多人對銀聯(lián)卡的加密算法感興趣,畢竟分分鐘涉及的都是你的錢的安全。首先要認識一下cbc算法和ecb算法。cbc算法是鏈式的,慢,不可并行處理,但更安全,因為每一次加密都是依賴于上一次的結(jié)果,同時這也會導(dǎo)致一次錯將導(dǎo)致后面的全部錯誤。ecb算法是分塊運算的,可并行,效率高,但不夠安全,每一塊相同的數(shù)據(jù)經(jīng)加密后都是一樣的結(jié)果。對比了兩種算法之后,你應(yīng)該能猜到一般都會用相對更安全的做法。來看兩張圖:

淺析銀聯(lián)加密算法

淺析銀聯(lián)加密算法

 

銀聯(lián)的mac一般都是采用稱做ecb加密算法,但是請注意,銀聯(lián)的ecb算法其實就是cbc算法!是鏈式的,而且,據(jù)悉銀行都是采用銀聯(lián)標準算法,或者稍微有點變種而已,由此也可以看出銀聯(lián)標準ecb加密算法的重要性。

POS終端采用ECB的加密方式,簡述如下:a) 將欲發(fā)送給POS中心的消息中,從消息類型(MTI)到63域之間的部分構(gòu)成MAC ELEMEMENT BLOCK(MAB)。

b) M1為8個字節(jié)的0,對MAB,按每8個字節(jié)做異或(不管信息中的字符格式),如果最后不滿8個字節(jié),則添加“0X00”。示例 :M1=0000000000000000MAB = M2 M3 M4 其中:M1 = MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18M2 = MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28M3 = MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38M4 = MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48

按如下規(guī)則進行異或運算:
MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18XOR) MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28TEMP BLOCK1 = TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18

對BLOCK1用MAK加密:
ENC BLOCK1 = eMAK(TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18)= EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18

然后,進行下一步的運算:
EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18XOR) MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38TEMP BLOCK2 = TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28

對BLOCK2用MAK加密:
ENC BLOCK2 = eMAK(TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28)= EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28

再進行下一步的運算:
EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28XOR) MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38

對BLOCK用MAK加密:
ENC BLOCK = eMAK(TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38)= EN31 EN32 EN33 EN34 EN35 EN36 EN37 EN38

c) 將運算后的結(jié)果(ENC BLOCK)轉(zhuǎn)換成16 個HEXDECIMAL:
ENC RESULT = EN31 EN32 EN33 EN34 EN35 EN36 EN37 EN38= EM311 EM312 EM321 EM322 EM331 EM332 EM341 EM342 || EM351 EM352 EM361 EM362 EM371 EM372 EM381 EM382示例 :ENC RESULT= %H84, %H56, %HB1, %HCD, %H5A, %H3F, %H84, %H84 轉(zhuǎn)換成16 個HEXDECIMAL:“8456B1CD5A3F8484”作為MAC值取前8個字節(jié)作為mac:8456B1CD

例子:
3DES_Key=9BED988****80C3B245FE9EC58BFA8D2AIV=0000000000000000 // 初始向量,其作用是先與Input的前8字節(jié)做異或運算,得到的結(jié)果才被用于DES加密Input=F4F3E7B3566F662****50B491EA8D5CECB加密的結(jié)果=FE7B6C8A731****98EBAC2BA4899AACBC加密的結(jié)果=FE7B6C8A731****273F6368EAE9E98