PBOC/EMV之脱机明文PIN和脱机密文PIN
1. EMV与PBOC在脱机PIN的区别:
EMV和PBOC都支持脱机明文PIN和联机密文PIN。区别在于EMV还支持脱机密文PIN,而在PBOC中,EMV标识支持脱机密文PIN的位置都成了保留位。
图1. PBOC中CVM的字节9位6-1
图2. EMV中CVM的字节9位6-1
2. 脱机明文PIN的验证
当终端获取到卡片的CVM表明卡片可以通过脱机明文验证,而且终端也支持此方式。则终端输入个人密码,然后通过verify指令验证个人密码。
因为PBOC和EMV都支持脱机明文的验证,所以这块是一样的,可以对比下图:
图3. PBOC的验证指令描述
图4. EMV的验证指令描述
数据块,图5,图6 两者是一致的:
图5. EMV的脱机明文PIN组包方式
图6. PBOC的脱机明文PIN组包方式
卡片在收到verify指令后,会检查data域,判断里面的控制域是否为0010(二进制),便于确定后面的数据格式。
3. 脱机密文PIN的验证
这点,PBOC是不支持的。从卡片返回的CVM可以得知卡片是否支持,如果终端根据CVM结合自身能力可以进行脱机密文PIN的验证,则执行以下步骤:
a).获取卡片随机数8个字节;
b).终端产生随机数,随机数的长度为:卡片公钥模长度减17(发给卡片的verify命令中data域需要与IC卡模长度一样,减17的原因是要其余数据已经用了17位);
c). 然后根据下面的表组包:(PINBlock的组包方式与明文PIN一致)
图7. 脱机密文PIN的组包用于加密
d). 经过组包后,得到的数据与IC卡公钥模长度一致,这个时候使用IC卡公钥对得到的数据包进行加密,加密后,填入verify指令发送给卡片。
卡片收到脱机密文的验证指令后,会恢复data域数据,检查data header是否为0X7F.
至此,脱机密文的验证已经结束,里面比较复杂的一块,应该是IC卡公钥的获取以及使用公钥进行加密的过程。