EMV交易中的SDA/DDA/CDA——SDA部分

从16年8月重回POS行业以后,有重新和IC卡打上交道。这快4年下来,因为内核是不开源的,

很多细节其实都是懵懵懂懂的

今年4月中旬,有个客户需要我们提供一个不需要经EMV内核实现的读卡号程序,在完成第一版

程序以后,客户提出是否能再程序中实现ODA数据校验,然后有拿起了EMV book2进行研究,

最后把这个过程中的经验列到这里,也算了了一件心事。

 

1.SDA的计算

1.1.SDA 的GPO部分处理

SDA的计算过程是需要从GPO就开始的。

GPO会返回两个重要信息,AIP(tag82)和AFL(tag94)

其中,我们根据AIP来判断卡片是否支持SDA,另外,一般情况下 9F4A(SDA_TAG_LIST)的取值也是tag82(AIP)

所以我们需要保存好AIP的取值

然后,AFL中有个重要属性就是 SFI的第四字节,它指代的是到底有多少个记录需要参与到SDA运算,如下图

(EMV_v4.3_Book_3_Application_Specification_20120607062110791.pdf

10.2 Read Application Data

page 109)

加个中文的描述:

AFL的结构如下:

字节1:短文件标识符

字节2:文件中要读取的第1个记录的记录号

字节3:文件中要读取的最后一个记录的记录号

字节4:从字节中的记录号开始,存放认证用静态数据记录的个数(值从到字节-字节+1的值)

 

1.2.SDA 的读应用记录的处理

当前我们执行读应用记录时

需要执行两项工作 :

a)将应用记录的数据进行 tlv解析,保存起来

其中

tag90——ISSUER_PUBLIC_KEY_CERT

tag92——ISSUER_PUBLIC_KEY_REMAINDER

tag9f32—ISSUER_PUBLIC_KEY_EXP

以上三个tag都将用于Issuer公钥的还原

------------------------------------------------------------------------

tag93——SIGNED_STATIC_APP_DATA

将需要使用Issue公钥进行解密得到SDA的校验数据

 

------------------------------------------------------------------------

tag9F4A——SDA_TAG_LIST

将用于构建验证hash信息的数据

------------------------------------------------------------------------

 

b)如果在AFL中标识了该记录需要参与到脱机数据校验中时,需要按顺序重新组成tlv数据保存起来

此处需要说明,

note1:最终执行SDA校验时,是不能包含template 1(tag80) 和 template 2(tag77)的

并且,有比较特殊的testcase是需要过滤 交易记录中无用的 字节 00的

note2:在执行校验数据构建时是需要结合tag9F4A——SDA_TAG_LIST来拼组数据的

 

1.3.SDA校验流程

a.通过CA公钥还原Issuer公钥(其实就是执行一个RSA公钥解密)

b.根据 EMV book 2 --6.3Retrieval of Issuer Public Key

校验Issuer公钥有效性(其实就是将元素2到元素13加一起,然后做hash,原文如下

Concatenate from left to right the second to the tenth data elements in Table 13 (that is, Certificate Format through Issuer Public Key or Leftmost Digits of the Issuer Public Key), followed by the Issuer Public Key Remainder (if present), and finally the Issuer Public Key Exponent.)

c.使用Issuer公钥对 tag93——SIGNED_STATIC_APP_DATA数据进行公钥解密

得到

Table 3: Static Application Data to be Signed by Issuer(i.e., input to the hash algorithm)

d.执行SDA校验

将以下数据按顺序拼组

Hash Algorithm Indicator

Data Authentication Code

Pad Pattern

AFL中要求的文件记录中的数据TLV

AIP(tag9F4A有的情况下)

连接到一块,然后计算Hash

(AFL 中指定的数据接着 9F4A对应tag的数据)

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值