银联规范的**体系
仔细看这张图,我花了好几个小时消化、自己画的这个**关系图……
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系统比一般操作系统更为坚固一个重要原因。)