转载请注明出处
http://blog.csdn.net/albinzhiyu/article/details/40504075
作者:蒸只鱼
SDA认证过程中主要分三个步骤
1、获取终端恢复认证中心公钥;
读取应用数据流程读出AID和CA公钥索引:
* Tag 8F Certification Authority Public Key Index (ICC)
*
- Len
01
*
- Value
D0
//CA公钥索引:D0
* Tag 4F Application Identifier (AID)
*
- Len
07
*
- Value
A0 00 00 01 52 30 10
//可知对应RID:A0 00 00 01 52
根据CA下发的capk公钥文件获取到对应的————
CA公钥:
D05C2A09D09C9031366EC092BCAC67D4B1B4F88B10005E1FC45C1B483AE7EB86FF0E884A19C0595
A6C34F06386D776A21D620FC9F9C498ADCA00E66D129BCDD4789837B96DCC7F09DA94CCAC5AC7
CFC07F4600DF78E493DC1957DEBA3F4838A4B8BD4CEFE4E4C6119085E5BB21077341C568A21D65D
049D666807C39C401CDFEE7F7F99B8F9CB34A8841EA62E83E8D63
CA指数:
010001
2、由终端恢复发卡行公钥;
读取应用数据流程,读出发卡行公钥证书
* Tag 90 Issuer Public Key Certificate
*
- Len
90
*
- Value
08 3D 23 86 08 29 25 A0 A2 AA 1B 4B B3 F7 EF D4
*
79 8C DB 60 65 32 93 CC 40 6D C8 A2 BB 33 80 DD
*
D7 8D 86 68 5A 14 BA 6C F4 84 AD 4E 20 90 22 66
*
C4 87 F2 C6 15 4C 85 9B 31 A9 9A 15 2B 53 19 E3
*
F9 A0 B7 E8 D2 A8 18 E4 41 E0 E6 D3 82 3D 90 09
*
D1 AF 62 F5 94 CB 28 4A 90 A8 D7 17 44 17 19 3A
*
BF 90 76 59 9E 7A F8 EC 07 7E 81 ED 24 2D 21 2F
*
8C 4D 3E 20 8D E2 7A C8 26 EB BB EF 8F A1 80 14
*
FA 11 DA 83 35 F7 A6 6D 81 9D E3 D0 A1 1A 2E 32
上一步骤中获取到的CA公钥,从发卡行公钥证书,运用RSA算法,恢复出的发卡行公钥数据
6A
//恢复数据头
十六进制,值为‘6A’
02
//证书格式
十六进制,值为‘02’
360705FF
//发卡行标识 主账号最左面的3-8个数字(在右边补上十六进制数‘F’) 读出PAN:36 07 05 00 00 11 37,则发卡行标识匹配;否则认证失败;
1225
//证书失效日期 MMYY,在此日期后,这张证书无效;当前时间1014,证书未过期;否则失败;
000001
//证书序列号 由认证中心分配给这张证书的,唯一的二进制数
01
//哈希算法标识 标识用于在数字签名方案中产生哈希结果的哈希算法 01标识对应sha1
01
//发卡行公钥算法标识 标识使用在发卡行公钥上的数字签名算法
80
//发卡行公钥长度 标识发卡行公钥的模的字节长度 注意:该数据为16进制
01
//发卡行公钥指数长度 标识发卡行公钥指数的字节长度
//发卡行公钥或发卡行公钥的最左边字节
C00DEDF35C07AC126ED213890EB490A7A4C8B8785954BECF5837E8075A2BA29860CA6A8D94BF9D6C0D63E0C6D088FDED1FF47D0A28307AA3B31791DE1615BE1E3460B0A29CF69D6BEC5A4BB91C4BF3C68C2970300AB2E8E0F8673E9FEAA46C237ADF996636DFE29715CA637A
A505AAA08210F17D1023B51E3772497117985FE8//待验证的哈希结果 发卡行公钥以及相关信息的哈希值
BC
//恢复数据结尾
从证书格式直到发卡行公钥或发卡行公钥的最左边字节,从左到右连接,再把发卡行公钥的余项加在后面(如果有),最后是发卡行公钥指数。
读应用数据得到
发卡行公钥指数:
* Tag 9F32 Issuer Public Key Exponent
*
- Len
01
*
- Value
03
发卡行公钥余项:
* Tag 92 Issuer Public Key Remainder
*
- Len
14
*
- Value
95 BE 48 F2 C7 7F 93 C8 3F 9F C6 BF EB 72 30 01
*
F9 8E E7 23
则连接得到:发卡行公钥待哈希验证数据
02360705FF122500000101018001
C00DEDF35C07AC126ED213890EB490A7A4C8B8785954BECF5837E8075A2BA29860CA6A8D94BF9D6C0D63E0C6D088FDED1FF47D0A28307AA3B31791DE1615BE1E3460B0A29CF69D6BEC5A4BB91C4BF3C68C2970300AB2E8E0F8673E9FEAA46C237ADF996636DFE29715CA637A
95 BE 48 F2 C7 7F 93 C8 3F 9F C6 BF EB 72 30 01 F9 8E E7 23
03
得到哈希计算结果(与恢复出的哈希校验结果相同,则校验通过):
A5 05 AA A0 82 10 F1 7D 10 23 B5 1E 37 72 49 71 17 98 5F E8
得到的发卡行公钥 左项
C00DEDF35C07AC126ED213890EB490A7A4C8B8785954BECF5837E8075A2BA29860CA6A8D94BF9D6C0D63E0C6D088FDED1FF47D0A28307AA3B31791DE1615BE1E3460B0A29CF69D6BEC5A4BB91C4BF3C68C2970300AB2E8E0F8673E9FEAA46C237ADF996636DFE29715CA637A
发卡行公钥余数
95 BE 48 F2 C7 7F 93 C8 3F 9F C6 BF EB 72 30 01 F9 8E E7 23
拼接得到发卡行公钥C00DEDF35C07AC126ED213890EB490A7A4C8B8785954BECF5837E8075A2BA29860CA6A8D94BF9D6C0D63E0C6D088FDED1FF47D0A28307AA3B31791DE1615BE1E3460B0A29CF69D6BEC5A4BB91C4BF3C68C2970300AB2E8E0F8673E9FEAA46C237ADF996636DFE29715CA637A95BE48F2C77F93C83F9FC6BFEB723001F98EE723
3、由终端验证签名的静态应用数据
读取应用数据流程获取到签名的静态应用数据:
* Tag 93 Signed Application Data
*
- Len
80
*
- Value
AF C3 08 FC 8D 0D A0 C3 97 8A 34 55 28 96 01 CF
*
31 84 AB 54 E4 41 40 08 D9 47 8E F7 02 BE C0 52
*
03 D7 49 F5 2E FC 56 B5 B7 08 AE 97 71 8D A2 4A
*
2D 66 FB 22 6B 0D 78 AD 53 86 09 D0 94 07 9D C0
*
45 56 9B 33 8A 71 9D BC 30 71 E5 5D 1B 10 21 37
*
FA 23 97 68 53 5D 96 D5 49 29 77 38 0E EB B9 95
*
C3 98 C5 1F 1F 5A 9B 9B D2 2A DA 8D 7A C1 5C C1
*
18 D2 B3 DD 9D 54 49 B6 01 1E 8B 98 72 18 AE 86
使用上一步骤中获取到的发卡行公钥,运用RSA算法,恢复出数据
6A
//恢复数据头
03
//签名数据格式
01
//哈希算法标识
DAC5
//数据验证代码 由发卡行分配的代码
//填充字节 填充字节由NI–26个值为‘BB’的字节组成
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
7864FB95DEDA05529811826E147E89632CFB015D //需认证的静态应用数据的哈希值
BC
//恢复数据结尾
从签名数据格式直到填充字节从左到右连接;
0301DAC5
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
AFL列出交易需要读出的数据存放的短文件标识符、记录号、记录个数以及脱机数据认证需要的静态签名数据的存放位置。用于脱机数据认证的记录数据是标签为‘70’的TLV编码格式。
* Tag 94 Application File Locator (AFL)
*
- Len
0C
*
- Value
08 01 01 00 10 01 03 01 18 01 04 00
举例:
08 01 01 00
10 01 03 01 SFI:2
记录号起始:01 记录号结束:03 用于静态签名认证的数据记录号:01
18 01 04 00
获取到读记录数据如下:
* Read Record SFI 2 Record 1
T - 00 B2 01 14 4D
C - B2 70 4B 5A 07 36 07 05 00 00 11 37 5F 34 01 01
5F 25 03 08 07 01 5F 24 03 20 12 31 9F 07 02 FF
C0 8E 0A 00 00 00 00 00 00 00 00 04 00 9F 0E 05
00 10 00 00 00 9F 0F 05 F0 68 DC F8 00 9F 0D 05
D0 60 1C A8 00 5F 28 02 08 40 9F 4A 01 82 90 00
获取到需认证的静态签名数据:
5A 07 36 07 05 00 00 11 37 5F 34 01 01
5F 25 03 08 07 01 5F 24 03 20 12 31 9F 07 02 FF
C0 8E 0A 00 00 00 00 00 00 00 00 04 00 9F 0E 05
00 10 00 00 00 9F 0F 05 F0 68 DC F8 00 9F 0D 05
D0 60 1C A8 00 5F 28 02 08 40 9F 4A 01 82
如果静态数据认证标签列表存在,并且其包含非“82”的标签,那么静态数据认证失败:
读记录读取到存在标签列表
* Tag 9F4A Static Data Authentication Tag List
*
- Len
01
*
- Value
82
应用初始化GPO流程获取到AIP值
* Tag 82 Application Interchange Profile (AIP)
*
- Len
02
*
- Value
58 00
58 00
拼接得到需要哈希验证的数据:
0301DAC5BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
5A 07 36 07 05 00 00 11 37 5F 34 01 01
5F 25 03 08 07 01 5F 24 03 20 12 31 9F 07 02 FF
C0 8E 0A 00 00 00 00 00 00 00 00 04 00 9F 0E 05
00 10 00 00 00 9F 0F 05 F0 68 DC F8 00 9F 0D 05
D0 60 1C A8 00 5F 28 02 08 40 9F 4A 01 82
58 00
计算得到哈希结果(与恢复出来的结果一致):
78 64 FB 95 DE DA 05 52 98 11 82 6E 14 7E 89 63 2C FB 01 5D
如果以上所有的步骤都成功,那么SDA静态数据认证成功!!!