非常多人對銀聯卡的加密演算法感興趣,畢竟分分鐘涉及的都是你的錢的安全,但網上非常少人卻講銀聯標準加密演算法。遂寫一遍當做是自己的學習筆記。偶爾忘了能夠翻翻,同一時候希望能夠幫助到其它人。
首先要認識一下cbc演算法和ecb演算法。cbc演算法是鏈式的。慢。不可並行處理,但更安全,由於每一次加密都是依賴於上一次的結果,同一時候這也會導致一次錯將導致後面的所有錯誤。
ecb演算法是分塊運算的,可並行。效率高,但不夠安全,每一塊同樣的資料經加密後都是一樣的結果。
對照了兩種演算法之後。你應該能猜到一般都會用相對更安全的做法。
來看兩張圖:
銀聯的mac一般都是採用稱做ecb加密演算法,可是請注意。銀聯的ecb演算法事實上就是cbc演算法!是鏈式的。並且,據我所知的銀行都是採用銀聯標準演算法,或者略微有點變種而已,由此也能夠看出銀聯標準ecb加密演算法的重要性。
pos終端採用ecb的加密方式,簡述例如以下:
a) 將欲傳送給pos中心的訊息中,從訊息型別(mti)到63域之間的部分構成mac elemement block
(mab)。
b) m1為8個位元組的0,對mab。按每8個位元組做異或(無論資訊中的字元格式)。假設最後不滿8個位元組,則加入「0x00」。
演示樣例 :
m1=0000000000000000
mab = 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
對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 en18
xor) ms31 ms32 ms33 ms34 ms35 ms36 ms37 ms38
——————————————————————————————————temp 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 en28
xor) ms41 ms42 ms43 ms44 ms45 ms46 ms47 ms48
————————————————————————————————————result 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) 將運算後的結果(enc block)轉換成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 轉換成16 個hexdecimal:
「8456b1cd5a3f8484」作為mac值
取前8個位元組作為mac:8456b1cd
樣例:
3des_key=9bed98891580c3b245fe9ec58bfa8d2a
iv=0000000000000000 // 初始向量。其作用是先與input的前8位元組做異或運算,得到的結果才被用於des加密
input=f4f3e7b3566f6622098750b491ea8d5c
ecb加密的結果=fe7b6c8a73167964798ebac2ba4899aa
cbc加密的結果=fe7b6c8a731679649273f6368eae9e98
對稱加密演算法 DES加密演算法
一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...
gentry同態加密演算法 同態加密演算法
本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...
對稱加密演算法 非對稱加密演算法
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...