紧接上文,本篇简述mac值的计算以及PIN(个人工作秘钥)的加密以及转加密。
信息:就用上文算出来的PIN和PAK
PIN秘钥明文 B42C67015B2FA5B85135D170A2ECC4E5
PAK秘钥明文 7C8B366BD1C56183655F8D3529A2117B
3.MAC密钥的计算(国密和国际)
数据
0200602406C020C09B11196235010131
70200003203100000001352711071000
000012376235010131702000032D2711
22096697800000313130303434303039
34313133303635393939383935363135
36303030303030303024000000000000
0001459F2608636A8F3E1537C3669F27
01809F101307020103A0A002010A0100
0000000061ABC57A9F3704B22E4C139F
36020ACA950500800460009A03200715
9C01319F02060000000000005F2A0201
5682027C009F1A0201569F0306000000
0000009F3303E0F9C89F34030203009F
3501228408A0000003330101019F0902
00009F4104000000929F1E0831313030
343430300024303034534D3031364445
34324633333831414646443132410013
01000001000600
PAK秘钥明文 7C8B366BD1C56183655F8D3529A2117B
银联ECB模式计算mac
计算过程
MAC: 银联ECB-MAC SM4算法
密钥 长度16(0x10)字节
7C 8B 36 6B D1 C5 61 83 65 5F 8D 35 29 A2 11 7B
初始向量 全部0x00
数据 长度279(0x117)字节
02 00 60 24 06 C0 20 C0 9B 11 19 62 35 01 01 31
70 20 00 03 20 31 00 00 00 01 35 27 11 07 10 00
00 00 12 37 62 35 01 01 31 70 20 00 03 2D 27 11
22 09 66 97 80 00 00 31 31 30 30 34 34 30 30 39
34 31 31 33 30 36 35 39 39 39 38 39 35 36 31 35
36 30 30 30 30 30 30 30 30 24 00 00 00 00 00 00
00 01 45 9F 26 08 63 6A 8F 3E 15 37 C3 66 9F 27
01 80 9F 10 13 07 02 01 03 A0 A0 02 01 0A 01 00
00 00 00 00 61 AB C5 7A 9F 37 04 B2 2E 4C 13 9F
36 02 0A CA 95 05 00 80 04 60 00 9A 03 20 07 15
9C 01 31 9F 02 06 00 00 00 00 00 00 5F 2A 02 01
56 82 02 7C 00 9F 1A 02 01 56 9F 03 06 00 00 00
00 00 00 9F 33 03 E0 F9 C8 9F 34 03 02 03 00 9F
35 01 22 84 08 A0 00 00 03 33 01 01 01 9F 09 02
00 00 9F 41 04 00 00 00 92 9F 1E 08 31 31 30 30
34 34 30 30 00 24 30 30 34 53 4D 30 31 36 44 45
34 32 46 33 33 38 31 41 46 46 44 31 32 41 00 13
01 00 00 01 00 06 00
结果 长度16(0x10)字节
39 41 34 36 37 39 41 34 32 38 30 34 34 37 39 43计算过程
数据长度不为16的倍数,补位9个0x00,得到0200602406C020C09B1119623501013170200003203100000001352711071000000012376235010131702000032D27112209669780000031313030343430303934313133303635393939383935363135363030303030303030240000000000000001459F2608636A8F3E1537C3669F2701809F101307020103A0A002010A01000000000061ABC57A9F3704B22E4C139F36020ACA950500800460009A032007159C01319F02060000000000005F2A02015682027C009F1A0201569F03060000000000009F3303E0F9C89F34030203009F3501228408A0000003330101019F090200009F4104000000929F1E0831313030343430300024303034534D3031364445343246333338314146464431324100130100000100060000000000000000000000000000000000000000000000000000异或0200602406C020C09B11196235010131得到0200602406C020C09B11196235010131
0200602406C020C09B11196235010131异或70200003203100000001352711071000得到7220602726F120C09B102C4524061131
7220602726F120C09B102C4524061131异或000012376235010131702000032D2711得到7220721044C421C1AA600C45272B3620
7220721044C421C1AA600C45272B3620异或22096697800000313130303434303039得到50291487C4C421F09B503C71131B0619
50291487C4C421F09B503C71131B0619异或34313133303635393939383935363135得到641825B4F4F214C9A2690448262D372C
641825B4F4F214C9A2690448262D372C异或36303030303030303024000000000000得到52281584C4C224F9924D0448262D372C
52281584C4C224F9924D0448262D372C异或0001459F2608636A8F3E1537C3669F27得到5229501BE2CA47931D73117FE54BA80B
5229501BE2CA47931D73117FE54BA80B异或01809F101307020103A0A002010A0100得到53A9CF0BF1CD45921ED3B17DE441A90B
53A9CF0BF1CD45921ED3B17DE441A90B异或0000000061ABC57A9F3704B22E4C139F得到53A9CF0B906680E881E4B5CFCA0DBA94
53A9CF0B906680E881E4B5CFCA0DBA94异或36020ACA950500800460009A03200715得到65ABC5C1056380688584B555C92DBD81
65ABC5C1056380688584B555C92DBD81异或9C01319F02060000000000005F2A0201得到F9AAF45E076580688584B5559607BF80
F9AAF45E076580688584B5559607BF80异或5682027C009F1A0201569F0306000000得到AF28F62207FA9A6A84D22A569007BF80
AF28F62207FA9A6A84D22A569007BF80异或0000009F3303E0F9C89F34030203009F得到AF28F6BD34F97A934C4D1E559204BF1F
AF28F6BD34F97A934C4D1E559204BF1F异或3501228408A0000003330101019F0902得到9A29D4393C597A934F7E1F54939BB61D
9A29D4393C597A934F7E1F54939BB61D异或00009F4104000000929F1E0831313030得到9A294B7838597A93DDE1015CA2AA862D
9A294B7838597A93DDE1015CA2AA862D异或343430300024303034534D3031364445得到AE1D7B48387D4AA3E9B24C6C939CC268
AE1D7B48387D4AA3E9B24C6C939CC268异或34324633333831414646443132410013得到9A2F3D7B0B457BE2AFF4085DA1DDC27B
9A2F3D7B0B457BE2AFF4085DA1DDC27B异或01000001000600000000000000000000得到9B2F3D7A0B437BE2AFF4085DA1DDC27B9B2F3D7A0B437BE2AFF4085DA1DDC27B
转成ASCII 得到
39423246334437413042343337424532
41464634303835444131444443323742用7C8B366BD1C56183655F8D3529A2117B对前16字节39423246334437413042343337424532进行SM4加密
得到 50AD321EA18591191A515BD4E7BC009950AD321EA18591191A515BD4E7BC0099异或后16字节41464634303835444131444443323742
得到 11EB742A91BDA45D5B601F90A48E37DB用7C8B366BD1C56183655F8D3529A2117B对11EB742A91BDA45D5B601F90A48E37DB进行SM4加密得到9A4679A42804479C8EDCA1680A95C377
9A4679A42804479C8EDCA1680A95C377转成ASCII得到3941343637394134323830343437394338454443413136383041393543333737取前16字节作为MAC:39413436373941343238303434373943
简述一下ecb模式的计算过程
1.数据(要计算mac值的数据)不足32位长度的进行补0
2.mac数据按32位一组进行分组
3.每组进行异或,最后得出一个32位的值
4.32位的值分组,前16位和后16位
5.前16位转成ASCII之后和PAK进行SM4加密
6.加密后的值与后16位进行异或
7.异或后的值和PAK进行SM4加密
8.结果就是mac校验值,也可转成ASCII
用ANSI X99/X.919算
用ANSI X99/X.919
1.将数据分组异或后的值
39423246334437413042343337424532
41464634303835444131444443323742
2.32位的值分组,前16位和后16位
3.前16位转成ASCII之后和PAK进行SM4加密
4.加密后的值与后16位进行异或
5.异或后的值和PAK进行SM4加密
6.结果就是mac校验值,也可转成ASCII
MAC: X99/X9.19 SM4算法
密钥 长度16(0x10)字节
7C 8B 36 6B D1 C5 61 83 65 5F 8D 35 29 A2 11 7B
初始向量 全部0x00
数据 长度32(0x20)字节
39 42 32 46 33 44 37 41 30 42 34 33 37 42 45 32
41 46 46 34 30 38 35 44 41 31 44 44 43 32 37 42
结果 长度16(0x10)字节
9A 46 79 A4 28 04 47 9C 8E DC A1 68 0A 95 C3 77计算过程
数据长度为16的倍数,无需补位
00000000000000000000000000000000异或39423246334437413042343337424532
得到 39423246334437413042343337424532用7C8B366BD1C56183655F8D3529A2117B对39423246334437413042343337424532进行SM4加密
得到 50AD321EA18591191A515BD4E7BC009950AD321EA18591191A515BD4E7BC0099异或41464634303835444131444443323742
得到 11EB742A91BDA45D5B601F90A48E37DB用7C8B366BD1C56183655F8D3529A2117B对11EB742A91BDA45D5B601F90A48E37DB进行SM4加密
得到 9A4679A42804479C8EDCA1680A95C377
用ANSI X99/X.919模式
也是分组,但是步骤与ecb有所区别
先取32位数据进行异或,然后加密
再取后一组数据异或,然后加密
加密到最后
4.PIN的加密以及转加密
PIN(个人标识码)的加密和解密涉及
卡号、密码、PIN
最后得到的PIN密文称为PIN BLOCK
主账号的取法分两种:
根据《销售点终端(pos)应用规范-2013》
- 手输卡号
如为手输卡号,从所输卡号(2域)右边数第二位开始,向左取12位,作为参与PIN加、解密的PAN。 - 刷卡方式
如为刷卡方式,从磁道2(35域)分隔符‘=’左边第二位开始,向左取12个字符,作为参与PIN加密的PAN;如只有磁道3(36域),则从磁道3分隔符‘=’左边第二位开始,向左取12个字符,作为参与PIN加、解密的PAN
信息
Pin密钥 B42C67015B2FA5B85135D170A2ECC4E5
卡号 6235010131702000032
密码明文 111111
PINBLOCK: SM4算法
中间数据:
00 00 00 00 00 00 00 00 00 00 01 31 70 20 00 03
06 11 11 11 FF FF FF FF FF FF FF FF FF FF FF FF
PINBLOCK:
06 11 11 11 FF FF FF FF FF FF FE CE 8F DF FF FC帐号信息 一般为卡的末尾第二位开始,向左取12位
PIN格式 应符合ANSI X9.8 Format(带主账号信息)
第1字节 为PIN长度
之后7字节为 4-12位的PIN(每个字符占4个BIT,不足右补F)
将得到的PIN BLOCK块用PIN密钥进行加密
注意:
一般地方说的转加密是,用密钥(密钥1)解出pin block
然后用新的密钥(密钥2)进行加密pin block,再向后传递。