PBOC/EMV之持卡人验证

转载请注明出处

作者:小马

 

尽管PBOC基本是中文版的EMV, 但还是需要根据国情做一些适当的差异化处理. 这一点在持卡人认证方面有很明显的体现.EMV支持脱机密文PIN,PBOC不支持. 但PBOC支持身份证件验证,EMV不支持. 身份证件验证是根据国情增加的,谁让咱们国家证多呀.

 

持卡人认证并不是必备的EMV流程, 终端是否应该执行持卡人认证, 决定因素在两点. 一是AIP表明是否支持, 二是在读数据阶段,卡片是否返回CVM list.

 

PBOC 支持的CVM如下:

脱机明文PIN验证; 

联机PIN验证; 

签名; 

CVM失败; 

无需CVM; 

签名与脱机明文PIN验证组合; 

身份证件验证。 


 

EMV 支持的CVM如下:

脱机明文PIN验证; 

联机PIN验证; 

签名; 

CVM失败; 

无需CVM; 

签名与脱机明文PIN验证组合; 

脱机密文PIN验证。


 

持卡人认证在EMV中叫CVM(cardholder verification method), 在一笔交易中,CVM可以有多个, 所以就有了CVM List的概念.

 

一个CVM包括以下几项内容:

金额X

金额Y

CVM 代码 指出如果这个CVM 失败,是执行下一CVM 还是认为CVM 失败

CVM 类型 (就是上面列出的那些方法)

CVM 条件 表示在什么条件是才用该方法,有以下几个:

 

0 总是执行

1 如果是现金或返现交易

2 如果不是现金或返现交易

3 如果终端支持此CVM

4 如果交易金额小于金额X

5 如果交易金额大于金额X

6 如果交易金额小于金额Y

7 如果交易金额大于金额Y


 

说着太抽象,举个例子:

* Tag 8E Cardholder Verification Method (CVM) List

*- Len       0A

*- Value    00 00 00 00 00 00 00 00 04 00 


CVM list的tag是8E, 长度是10个字节. 前四个字节是金额X, 再往后四个字节是金额Y,

04 同时表示如果此CVM失败,则持卡人验证失败,而且验证方法为脱机加密PIN.

最后一个字节00表示”总是”,即这个方法是总是要执行的.

 

当然CVM list的长度并不局限于10个字节, 它的长度准备的应该表示为8+2*n(n为正整数). 终端应该按照顺序读取CVM list,并使用满足条件的第一个方法,如果某个方法不可用,应继续遍历其它方法, 如果所有方法都不可用,则持卡人验证失败.

 

 在所有的持卡人验证方法中, 脱机加密PIN应该是最复杂的一个, 这里详细介绍一下它的原理及流程.

 

脱机加密PIN,简单来说, 原理如下:

终端从卡片中获取PIN加密公钥证书(可在read data阶段读取),从证书中恢复PIN加密公钥. 当用户输完PIN时, 终端用此公钥加密该PIN,然后能过指令把加密数据传给卡片,卡片收到数据后,先用存在自身的PIN加密私钥解密,然后再验证该PIN的正确性.

 

详细的步骤如下:

1 终端把用户输入的明文PIN按照一定的格式补位对齐, 然后用get challenge命令从卡片中取一个8字节的随机数.



2 终端自己产生一组长度为N-17的随机数(N为PIN加密公钥的长度), 然后把补位后的PIN,卡片中取的随机数以及终端产生的随机数拼接在一起, 与PIN加密公钥做RSA运算. 



3 把上一步运算的结果通过verify命令发给IC卡.



4 卡片用PIN加密私钥解密数据, 首先检查解出来的8字节随机数是否与自己产生的一致,然后卡片检查恢复的数据头字节是否有效, 最后一步是验证PIN是否合法. 只有所有的条件都满足,脱机加密PIN才算成功.


 

阅读更多

更多精彩内容