作者:小马
尽管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才算成功.