fDDA是快速DDA认证,fDDA用于qPBOC,DDA用于PBOC,fDDA与DDA认证只有部分不同(关于区别本文有讲)
本文就使用公司交行工资卡跑一遍fDDA流程,
DDA(fDDA)的步骤可以这样理解:先执行 SDA大部分,再执行DDA(fDDA)特有的步骤
步骤1. 恢复IC卡公钥
在SDA 阶段取得的发卡行公钥,在DDA时还有一个用途,就是恢复IC卡公钥. 可以用下面的公式表示:
发卡行公钥+IC 卡公钥证书+RSA 算法=IC卡公钥
通过RSA算法,使用发卡行公钥解析IC卡公钥证书得出的IC卡公钥:
恢复数据头 | 6A |
证书格式 | 04 |
应用主账号 | 62226206200171XXXXXF(为了隐私最后几位用XX代替) |
证书失效日期 | 1224 |
证书序列号 | 100001 |
哈希算法标识 | 01 |
IC卡公钥算法标识 | 01 |
IC卡公钥长度 | 80 |
IC卡公钥指数长度 | 01 |
IC卡公钥或IC卡公钥的最左边字节 | F10B7CD3B0AA7002E70B1959E33210487A5251C39C8D3A88DD77FAAC129171E6DF61DD76809AA0F7459434D8771CA23217BCC5CDBF194E2995FAE5C031827FBDFEEC25E0BCA3AF04B9296A37820604B9A82F3AEB03BDE46F06FFED992FE35A615A2AFFF3C584696F45D3B231C34337532D9F956B528E2EBF2523E27838E9B67BBBBBBBBBBBBB |
哈希结果 | 350F02EC13781B64B6D7DFC4ED85CD00D09E515B |
恢复数据结尾 | BC |
HASH校验的方法:
将上表中第2个到第10个数据元(即从证书格式直到IC卡公钥或IC卡公钥的最左边字节)从左到右连接,再把IC卡公钥的余项(如果有)+IC卡公钥指数+需认证的静态数据(请参考SDA)+静态数据认证标签列表(如果存在),然后计算HASH结果与IC卡公钥中的HASH结果比对,由此可见动态数据验证同样使用静态数据部分做HASH校验,所以说DDA是包含了SDA
步骤2. 恢复动态应用数据和动态应用数据HASH校验
读记录读出签名的动态应用数据:
签名的动态应用数据9F4B | 6C145931F36CA978A6AA1A9D60E41C3DF9299F21BDBBA666F680DFA90F825C5B6F544C0089026294B38486D246AB7F9E4E5E965C507FA0B819E893F470EB1A4BDF9D9DBC8AAD6ADE38C8AA1ECB077B1724EF980864B56C2C567503936241D28C4A2DFCC8398481FEC1961C3704286731343C6885D0A44D8B0DC8F723F1A702F99F6C0200009F5D06000000001579 |
使用RSA工具恢复出动态应用数据
IC卡公钥+动态签名的应用数据+RSA=动态应用数据
恢复数据头 | 6A |
证书格式 | 05 |
哈希算法标识 | 01 |
IC卡动态数据长度 | 03 |
IC卡动态数据 | 020E19 |
填充字节 | BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB |
哈希结果 | 37D0C6EA6109B1CEB237AFAD7847A128F711C50D |
数据结尾 | BC |
动态应用数据HASH校验,
关于DDA的校验是:将上表第2个到第6个数据元(即从签名数据格式直到填充字节)从左到右连接,再把DDOL中指定的数据元加在后面。fDDA认证与DDA认证的区别就在于HASH校验的部分,终端动态数据元素不在DDOL中指定(因为qPBOC中并不存在DDOL数据元),终端动态数据应由表C.1指定的数据元素按顺序连接构成
所以最终的动态应用数据HASH校验输入值,
证书格式 | 05 |
哈希算法标识 | 01 |
IC卡动态数据长度 | 03 |
IC卡动态数据 | 020E19 |
填充字节 | BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB |
9F37不可预知数 | 5520BDA1 (GPO发给卡片的值) |
9F02 授权金额 | 000000000001 (GPO发给卡片的值) |
5F2A 交易货币代码 | 0156 (GPO发给卡片的值) |
9F69 卡片认证相关数据 | 013539FC85000002(读记录卡片返回的) |
得出的HASH结果与动态应用数据解析出的完全一致,至此fDDA成功