EMV规范(九)——持卡人验证(CVM)三

  上篇我说这篇要说说TLV格式,嗯嗯,怕是要食言了,我觉得还是要继续说说CVM才行。毕竟我刚刚又体会了一次,目前在过EFTPOS认证,然后规范里说得很清楚,请参考EMV Book 3的CVM部分。嗯嗯,由于我是半路接手的,连规范都没来得及看全,所以就没有仔细看别人写的CVM这部分代码就去测试了,嗯嗯,差点搞掉半条命😂

  前两篇主要讲的是CVM List规则和CVM Results(9F34)以及TVR(95)的设置,有了前两篇的基础,再来看本篇会容易理解多了。先上个EMV Book3中的图表 Figure 8: CVM Processing。这个表有5部分,有点儿复杂,我决定不跟书中的顺序来上图。

  一. 先理解下CVM Condition Rules Satisfied?  = 什么时候才算是满足CV Rule的条件(也就是第2个字节)呢?

  Terminal understands CVM Condition?  CVM Condition data available? CVM Condition satisfied?

很简单,首先要在EMV范围内,并且终端可识别:也就是EMV规范(七)那篇里的第二个图里有的,EMV规范目前也就是从'00'-'09'为可识别的且有效。而看条件是否满足:

'00': 肯定满足的;

'01': 要看交易类型是否为unattended cash,若是,则满足;

'02': 也看交易类型,不能是unattended cash,manual cash,也不能是 purchase with cashback,就满足条件啦;

'03': 看终端能力是否支持CVM,下面会详细说的。

'04': 交易类型是manual cash, 则满足;

'05': 交易类型是purchase with cashback, 则满足;

'06': Transaction Currency Code(tag '5F2A' ,来源应用设置进来的) = Application Currency Code(tag '9F42' ,来源卡片在读记录时返回的);且交易金额要小于X。请参考EMV规范(七)的金额X的介绍。

'07': Transaction Currency Code = Application Currency Code;且交易金额要大于X。

'08': Transaction Currency Code= Application Currency Code;且交易金额要小于Y。

'09': Transaction Currency Code= Application Currency Code;且交易金额要大于Y。

满足上诉所有条件则为CVM Condition Rules Satisfied?  Yes.

二. Combination CVMs

  看看什么是Combination CVMs。就是多个CV组合而成,当这些持卡人认证方式都成功,才算成功,有一个失败则算失败。Combination CVMs:在EMV规范(七)的第一个图中,有 '03' (脱机明文PIN+签名), '05'(脱机密文PIN+签名) 两种。

三. 持卡人认证流程,真的很复杂😂

 

  首先当ICC卡支持CVM,也就是卡片在应用初始化时由GPO命令返回的数据里会有个数据叫做AIP(全名:Application Interchange Profile, tag '82'),AIP中的第1个字节第5位为1表示卡片支持持卡人验证。AIP的每个字节的定义可以查看EMV规范(三)——应用初始化

  然后看CVM List(tag '8E')是否存在,且格式是否正确,请参考EMV规范(七)——持卡人验证(CVM)一

  Failed CVM Condition = 'Always'?也就是CV Rule的第二个字节是否为 '00'。若是则首先查看CVM是否为Fail CVM,也就是CV Rule的第一个字节是否为 '00'或者'40', 若是,则直接Set CVM Results to 'Failed',置TVR 'Cardholder verification not successful'为1(TVR 第3个字节第8位,参考 EMV规范(八)——持卡人验证(CVM)二)。

  Is CVM Code supported? 看终端能力(tag '9F33', 来源应用设置。第二个字节表示CVM Capability)。实际上终端能力这个tag在之前章节(指脱机数据认证那章)就很详细的说过的,这里只贴上有关CVM Capability的部分。

若终端能力第二个字节对应的位为1,表示终端支持该CVM。

从CVM的流程图中看到,当前CV Rule的 CVM Condition不是 'If terminal supports CVM'('03')时,若该持卡人验证方式失败,会去看当前的CV Rule Byte 1 bit 7是否为1,若是1,则查看下一个CV Rule;为0,则CVM失败。

所以这里有个特殊的'If terminal supports CVM'('03'),若CVM Condition是 'If terminal supports CVM'('03'),若CVM Code不被终端支持,则直接查看下一个CV Rule,不需要看当前的CV Rule Byte 1 bit 7是否为1。重点啊,我在这里被坑了好几次。

主流程中还有不明白的可以留言。

四. 说下主流程中提到的 Set CVM Results to "Failed' (See Y in Part 5 of flow),所以接下来贴上 Y in Part 5 of flow的流程图。

Was any CVM Condition satisfied?CVM for any satisfied CVM Condition was recognised and supported?

就是我最开始讲的CVM Condition Rules Satisfied部分,若这里是满足条件的,则CVM Result中第1和2个字节填的正是当前CV Rule的两个字节,第3个字节则是Failed ('01'); 否则直接填入 '3F0001'。

五. 主流程中提到的Perform CVM的第一个U in Part 3 -Online PIN,上图:

由以上流程图知道,EMV的Online PIN,需要要求输入密码,当密码键盘出故障或不存在时,会设置相应的TVR位;PIN entry bypass是指当不输入密码,直接按确认按钮。

六. V in Part 3 –Signature

七. W in Part 3 –No CVM Req’d

八. X in Part 4 –Offline PIN

Offline PIN也是相当复杂啊。好在非接是木有脱机PIN的。由于实在是复杂,所以决定另起一篇专门写Offline PIN。

九. Z in Part 5 –Combo. CVM

也就是第二条Combination CVMs。

 

总结下:CVM就是使用CVM List,根据终端能力进行持卡人验证,最终结果写入CVM Results和TVR以及TSI中。非接中也是由持卡人验证的,但是基本没有脱机PIN,至少我接触到的十来个非接规范都没有提到由脱机PIN验证。

下篇再见~

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值