金融IC卡非接触式快速支付的先天缺陷与补救措施
1. 什么是脱机扣款失败交易
从客观现象来简单定义,脱机扣款失败交易是指持卡人在消费场所执行了一笔脱机消费交易,交易因某种原因未能成功,但持卡人所持卡片的余额被意外扣除。用通俗的话说,就是消费者花了钱却没有买到东西。
2. 导致脱机扣款失败交易的原因
根据《非接触式IC卡支付规范》,IC卡将交易金额从可用余额中扣除的操作是在受理终端读取卡片应用记录阶段的最后一条记录数据时发生的。也就是说,如果在读取卡片最后一条记录数据之前,发生交易失败,将不会造成卡片余额的减少,也就不会发生脱机扣款失败交易;如果在读取卡片最后一条记录之时或者之后发生交易失败,都将产生脱机扣款失败交易。知道了脱机扣款失败交易产生的时机,那么什么样的事件会在这个时机内发生并导致交易失败,从而产生脱机扣款失败交易呢?排除管理上的失误,技术处理的错误,假设收单行服务后台正常运行,终端程序正常运行,那么发生脱机扣款失败交易的原因主要有如下三种情况:
闪付
2.1 CA公钥缺失
根据《非接触式IC卡支付规范》,为了提高交易速度,在非接触式快速支付交易过程中,终端读完最后一条卡片记录后,将通知持卡人移走卡片,随后再执行脱机数据认证。在脱机数据认证过程中,如果终端发现卡片要求交易使用的CA公钥缺失,那么脱机数据认证就会不成功,导致交易失败,从而产生脱机扣款失败交易。造成CA公钥缺失的因素,主要有如下两种情况:
1. CA公钥未下载或者下载失败。
2. 下载到终端的公钥库未包含当前发生交易的IC卡所指定的CA公钥。
2.2 公钥证书过期
如果终端已经具备了交易过程中该IC卡所指定的CA公钥,那么在脱机数据认证过程中还需验证IC卡所指定的发卡行公钥证书以及IC卡公钥证书的有效期是否到期,如果发现两个公钥证书之一或者两个公钥证书的有效期都过期,那么脱机数据认证就会不成功,导致交易失败,从而产生脱机扣款失败交易。
对于公钥证书过期是不可避免的,当公钥证书即将过期之前,如果发卡行未能通知持卡人更换或更新卡片,或者持卡人在证书过期后未能及时更换或更新卡片,继续使用该卡片将产生脱机扣款失败交易。在全国拥有几千万甚至上亿持卡人的基础上,如果不通过技术手段解决,这种的风险的发生可以说是必然的,只是迟早问题。
2.3 发生“闪卡”事件
所谓“闪卡”是行业内的专业术语,它指得是这样一种突发事件,在非接触快速支付交易过程中,终端从开始读取卡片最后一条记录到完成读取最后一条记录过程中,如果发生任何意外导致该过程中断,并发生IC脱机余额扣款,这样的事件简称为“闪卡”事件。例如,终端读取最后一条记录需要10毫秒,前2毫秒,卡片完成脱机余额扣除交易金额的动作,后8毫秒,卡片将记录数据发送给终端,在此过程中如果发生意外中断了过程,便产生了“闪卡”事件。
3. 发生脱机扣款失败交易的概率
如果形成原因是因为CA公钥的缺失或者公钥证书过期,那么引起的脱机扣款失败交易的概率是百分之百。
如果形成原因是因为“闪卡”事件,从单笔非接触快速支付的流程上看,“闪卡”发生的时机是小概率的。按照目前国际上较为认可的标准,单笔非接触快速支付交易占用卡片的时间应该在500毫秒以内。然而终端读取一条卡片记录的时间通常在10毫秒以内,那么发生“闪卡”的窗口时间占整个非接触交易的时间的约为1/50,依照持卡人的习惯,随着交易时间的进行,越往后持卡人移开卡片的概率越大,那么读取最后一条记录时卡片被移开的概率应该大于1/50。如果排除消费者对读卡器蜂鸣器或者指示灯有足够清楚的认识的情况,那么这样一种概率是可怕的。
由于《非接触式IC卡支付规范》是专门为非接触式快速支付定制的规范,应用此类交易的场所,通常是对交易的时效性有较高的要求,单位时间内交易流通量也相对较大的场所。例如, 超市购物,公交地铁,排队购票场所等。统计全国的这类交易场所,保守估计每分钟发生上千笔交易,那么即使是“闪卡”这种小概率事件的概率被放大后也是惊人的。
4. 预防脱机扣款失败交易的补救措施
《非接触式IC卡支付规范》2013 版已经正式对外发布应用,并且在人行要求推广IC卡使用的大背景下,目前全国上下各大银行都已经发布或者准备发布符合《非接触式IC卡支付规范》的金融IC卡。据统计,社会上已经发现不少脱机扣款失败交易的案例,且失败的原因多数为CA公钥缺失和“闪卡”事件,然而公钥证书过期的原因还未出现,主要因为当前使用的公钥证书几乎都还在有效期内。
既然现象已经发生了,导致现象的原因也清楚了,那么就应该采取相应的措施来弥补规范的缺陷,根据不同的原因对症下药。否则利益受侵害的将是广大消费者。
4.1 预防CA公钥缺失引起的脱机扣款失败交易
如上文所述,CA公钥缺失的产生主要有如下两种原因,根据不同的原因采取不同的预防措施。
4.1.1 公钥未下载或在下载失败
针对这种情况,受理终端的应用程序应该具备应对措施,例如,终端发现公钥未下载或者下载失败的情况,应该拒绝执行非接触快速支付交易,或者通过参数设置,只允许非接触快速支付交易走联机渠道。如果应对措施处理得当,这种形成原因完全可以避免。
4.1.2 下载的公钥未包含发生交易的IC卡片所指定的公钥
由于受理终端对将要进行非接触快速支付的IC卡片是不可预知的,所以受理终端要在交易开始之前尽可能完全的下载储备该终端所能受理的非接触快速支付IC卡所用到CA公钥。这样也就要求收单银行的金融交易处理后台尽可能的统计该终端所能受理的IC卡所需要的CA公钥种类及其个数,并提供渠道将这些公钥下载到受理终端。这便对终端的公钥存储空间提出了更高的要求。
对于受理终端的应用程序方面,也可以通过自身的检查来决定是否继续或者拒绝交易。例如,终端在读取最后一条卡片记录之前,先检查一下卡片是否已经返回了CA公钥索引,如果已经返回了,终端根据这个公钥索引检索自身的公钥库是否已经储备了该公钥,如果未储备,直接拒绝交易,如果储备了则允许继续执行交易;如果此时卡片CA公钥索引未返回,那么说明该公钥索引正好在最后一条记录上。对于这种情况,终端的自检功能就不受用了。
不论是银行服务器的完善预备还是终端应用程序的自我检查,对于交易CA公钥缺失的状况,只能尽可能的减少其引起脱机扣款失败交易的几率,而无法完全避免。因为对于浩大开放的IC卡市场,永远不可能从管理层面上确保其万无一失。
4.2 预防公钥证书过期引起的脱机扣款失败交易
公钥证书过期无法预防,也就是说公钥证书过期那一天迟早都会到来。在技术层面上解决该问题,无非就是在终端读取卡片最后一条记录之前,检查公钥证书的有效期,并且公钥证书数据不能存放在卡片最后一条记录的情况下才能执行该检查。即便是这样,由于发卡行公钥证书与IC卡公钥证书都是经过RSA或者SM算法加密的,如果要验证其公钥证书的有效期,首先得对公钥证书密文数据执行解密操作才能执行验证动作,然而对于非接快速支付而言,RSA或者SM计算所消耗的时间代价是不可接受的。因此从技术层面解决公钥过期的问题将不可取或者说是得不偿失。因此预防公钥证书过期的入手点应该从管理层面上进行。
在公钥证书过期之前,发卡行有责任和义务通知持卡人升级或者更换卡片,也有必要采用一些管理措施来引导持卡人更换卡片,例如,在公钥证书过期之前的一年或者半年,不提供受理该IC卡的充值的服务,这样这张IC卡的余额很可能在较短的时间内因消费逐渐变少或者使用完全,那么该卡片就无法再执行脱机交易了,从而杜绝脱机扣款失败交易的发生。
同样,由公钥证书过期引起的脱机扣款失败交易也是无法完全避免的。技术上的缺失永远无法用管理来弥补,因为管理不可能面面俱到。
4.3 预防“闪卡”引起的脱机扣款失败交易
对于“闪卡”的补救措施与公钥证书过期的预防措施恰恰相反,管理层面对“闪卡”现象毫无抵抗力,只能在技术层面对其实施事后补救。
首先终端应用程序必须能够准确的判断“闪卡”现象的发生。终端在确定“闪卡”发生后,可通过再次的“模拟交易”并且不发生二次扣款来拯救该笔交易。所谓“模拟交易”是指非完整流程交易,即终端发现“闪卡”后,应用程序保存现有卡片和终端的交易数据,进入补救模式,提示持卡人再次出卡,应用程序完成卡片应用选择后,不执行GPO指令,直接读取卡片最后一条记录数据后提示持卡人移开卡片,然后继续执行脱机数据认证,如果认证成功即可保存交易流水,打印交易凭证,补救成功。这种情况下,卡片不会发生二次扣款,消费者也能获取到交易证,得到相应的商品和服务。为了防止恶意行为,应用程序在补救措施处理过程中需验证“闪卡”前后是同一张卡片,例如验证卡片的交易计数器是否与“闪卡”的交易计数器一致。
5. 规范中另一个更为“隐蔽”的问题
CA公钥缺失或者公钥证书过期引起的脱机扣款失败交易,根据规范的设计有可能转化为联机来授权交易。这种情况下,表象上最终交易批准了,消费者也消费成功了,多数消费者拎着东西就走了。但其中却发生了一件极其隐蔽的事情,那就是消费者事实上被扣了双倍的价钱才买到商品,因为联机交易是会扣除银行主账户的钱。这个问题的严重性在于它极其隐蔽,不容易被察觉,也很容易被忽视。很少有消费者会注意到脱机转联机的细节,也很少有消费者在消费完成后会同时去查看那卡片的余额和银行主账户的金额。如果金额数目不大,这问题在事后也基本无法被消费者发现。这种错误无形中侵犯了消费者的财产权益。
要解决这个问题也不难,只要终端判断当前这种情况发生,及时提醒持卡人查看卡片余额,而不是自主的转化为联机交易。然而这样是与规范相冲突的,因此及时修正规范是非常必要的。
6. 对于《非接触式IC卡支付规范》的更新建议与期待
如上文所述,规范设计上的缺陷给后期的维护带来巨大的工作量和不必要的运营成本。俗话说解铃还须系铃人,对于非接触式快速支付设计上的缺陷,最好的解决方法莫过于升级完善规范,设计出更安全更严密的交易模式。例如,在GPO处理时,是否可以明确规定卡片必须返回CA公钥索引,就可以解决公钥不存在的问题。为了规避“闪卡”导致的脱机扣款失败交易,是否可以考虑将卡片真实扣款标识位的置位放在下笔交易前执行,卡片在交易前判断上笔交易完成则置位,否则不置位。当然这样的设计可能有许多未知的限制条件,希望有更多更完善的设计在未来的版本上得以体现。(作者:福建联迪商用设备有限公司邱华良)