持卡人认证部分,EMV和PBOC是有区别的,EMV有脱机加密PIN认证,PBOC没有;PBOC有持卡人身份证件验证,但是EMV没有。
持卡人验证主要基于两个数据要素,AIP和CVM。
AIP已经讨论过很多次,现在主要看一下CVM。
一个CVM含有2个主要要素:
1.两个金额,X金额和Y金额。
2.持卡人验证方法条目(可能含有多个)
2部分又细化为下列三个部分
1.持卡人验证方法代码,即第9字节的bit7,用来表明持卡人验证失败后的操作。
2.持卡人验证方法类型,即第9字节的bit6--bit1,用来表明采用什么样的方法做持卡人验证。
1.持卡人验证方法条件,即第10字节的bit7,用来表明在什么情况下做持卡人验证。
这样看比较抽象,拿个实例来看一下:
- 8E 0C
- 00 00 00 00
- 00 00 00 00
- 5E 03
- 1F 00
这是一个标准的cvm列表,X金额为0,Y金额为0,后续每两个字节表示一个持卡人验证方法条目,5E的二进制位01 011110这表明如果持卡人验证失败则使用后续的CVM,CVM验证方法为签名,03表示“如果终端支持这个CVM”。
这样估计还是比较抽象,我用语言再描述一下。
首先5E的bit8 bit7为01,这表明如果这个cvm失败,那就要用到后面的1F 00作为持卡人验证方法。
再看5E的bit6到bit1,这个规范上说的很明确,现在的6个数字就是代表使用签名。
再看03,03的含义是“如果终端支持这个CVM”,这个怎么理解呢?终端有一个很重要的数据,终端性能,终端性能中明确指出了终端所支持的验证方法,所以03的意思就是如果终端支持持卡人签名验证,那么这个交易就使用签名作为验证方法。当持卡人验证条件为03时,内核对于终端性能的判断也是直接影响持卡人验证成功与失败的关键要素。
后面的1F00就不做分析了,分析方法同理。
程序分析完CVM列表后,再根据分析结果提示持卡人进行操作,然后就相当于持卡人认证已经完成。
最后再看看,脱机加密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才算成功.