一,什么是PBOC2.0
2005年3月13日,人民银行发布第55号文,正式颁发了《中国金融集成电路(IC)卡规范》(简称PBOC2.0)。该规范补充完善电子钱包/存折应用;增加借/贷记应用;增加非接触式IC卡物理特性标准;增加电子钱包扩展应用指南、借/贷记应用个人化指南等内容。
二,什么是脱机认证?
PBOC数据认证方面,有两个大的分类:脱机认证和联机认证。顾名思义,脱机认证是在认证过程中无需在线连接后台,只是终端和IC卡两者结合即可完成数据的认证工作;而联机认证,则在认证过程中,需要联机连接后台,获取认证方面的相关密钥或者证书等才能完成整个认证过程。
举个简单的脱机认证的例子,比如饭堂的饭卡,我们去饭堂吃饭的时候,经常是把钱先充值我们的一张IC卡(有可能是磁条卡),然后打饭买单的时候,只需要用卡在POS机上“滴”一下即可,如果你仔细看,会发现饭堂的POS机其实只是插电源线,而没有另外的线路连接到其他设备(当然,也有可能是有些POS是有连线的),当我们知道,当我们用卡在POS机上“滴”的时候,其实终端(这里是POS)是完成了对卡相关的认证工作的,只是里面认证需要依赖的密钥,证书等是提前下发到POS机而已。
三,为什么要在中国金融IC卡借记/贷记应用中采用脱机数据认证?
脱机数据认证是PBOC2.0中的重要部分,是验证金融IC卡的有效手段。未来,消费者在使用符合PBOC2.0要求的金融IC卡进行持卡消费的时候,布置在商家的POS系统会与IC卡交互完成脱机数据认证工作,判断该卡是否被恶意篡改过或非法复制。
在PBOC2.0中定义了两种脱机数据认证的方式,即静态数据认证和动态数据认证。
1,静态数据认证(简称SDA),由终端验证IC卡中的数字签名来完成。其目的是确认存放在IC卡中关键的静态数据的合法性,以及可以发现在卡片个人化以后,对卡内的发卡行数据未经授权的改动,不仅能有效地检测IC卡内关键静态数据的真实性。
2,动态数据认证(简称DDA)。在动态数据认证过程中,终端验证卡片上的静态数据以及卡片产生的交易相关信息的签名,DDA能确认卡片上的发卡行应用数据自卡片个人化后没有被非法篡改。DDA还能确认卡片的真实性,防止卡片的非法复制。DDA可以是标准动态数据认证或复合动态数据认证/应用密文生成(CDA)。--具体请看笔者接下来的总结。
四,什么是静态数据认证?
从上面可以看出,要完成脱机认证,有一个前提条件,那就是认证依赖的密钥,证书等需要提前下发到对应的终端存储起来,使得在IC卡进行通信的时候,终端无需再连接后台系统了,故名为脱机。
在PBOC中,脱机认证主要有三种方式:SDA(静态数据认证),DDA(动态数据认证),CDA(复合动态数据认证)。
而联机认证主要有:ARQC,ARPC
所谓静态数据认证,首先是如何理解静态的概念呢?参与认证的都是卡片的静态数据,所谓静态数据,即这些数据在卡制定后是不会改变的,如卡号,卡的有效期,卡的应用限制等,静态数据认证的目的就是确认存放在IC卡中的有应用文件定位器(AFL)和可选的静态数据认证标签列表所标识的,验证关键的静态数据的合法性,从而保证IC卡中的发卡行数据在个人化以后没有被非法篡改。
五,静态数据认证的目的和局限性
目的:主要用于终端验证卡上的重要静态应用数据(如卡号)是否被非法修改。
为了便于理解静态数据认证的目的,举个现实的例子:磁条卡的结构比较简单,只有123磁道,信息的格式也比较少,因此很容易被修改,犯罪分子有可能通过相关的写卡设备修改卡里面的相关信息。
而静态认证数据就是为了发现这种非法的修改,没有经过发卡行授权的修改等,但从这里分析我们可以看到静态数据认证的一个局限:即如果犯罪分子把你的卡复制了,但不修改里面的数据,这样单独用静态数据认证是否无法发现是复制的卡还是正在的发卡行发行的卡,而这个卡伪造的识别就是接下来要介绍的动态数据认证要解决的问题。
六,静态数据认证的基础知识
要充分理解静态数据认证的原理(包括接下来的动态数据认证),需要对加解密,数字签名,对称加密和非对称加密,RSA等有较好的理解,这里可以参考笔者的blog:
http://blog.csdn.net/tenfyguo/article/details/40922813-安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS
七,静态数据认证的实现原理
来自PBOC规范上的说明:终端使用卡片上的发卡行公钥(Tenfy标注:卡片上的重要应用数据的写入都是用发卡行私钥进行签名过的,若修改,则用卡片上的发卡行公钥解出来跟实际卡读出的不匹配,但问题是卡片上的发卡行公钥可能也被伪造,因此,卡片上的发卡行公钥是从发卡行公钥证书读取的,且证书是有CA中心的数字签名的)验证卡片的静态数据,同时卡片上还包括了发卡行公钥证书和数字签名,数字签名中包括一个用发卡行私钥加密用重要应用数据计算得到的哈希值。
如果用实际数据产生的哈希值和从卡中恢复出的哈希值相匹配,则证实了数据并未被修改。
从规范的说明中可以看到,要实现静态数据认证,对几个主体需要拥有的密钥或者证书是有要求的:
1, 终端:
终端,你也可以认为是收单行,需要拥有CA公钥,终端只有拥有CA公钥才能利用CA公钥验证从IC中读取到的发卡行数字证书的合法性(即用CA私钥进行签名的),验证了发卡行数字证书的合法性,才能使用证书里面的发卡行公钥。
2, IC卡:
IC卡需要写入:
发卡行数字证书(经过CA签名的发卡行公钥),用发卡行私钥进行签名的静态数据
摘要(即数字签名),以及卡片的静态数据。
3, 发卡行:
发卡行需要拥有发卡行私钥,用于对发卡行生成的静态数据进行签名。
那么具体的认证过程是如何的呢?这里分成两个阶段,第一个阶段完成相关公钥和制卡的植入等前期工作;第二阶段是交易阶段的脱机认证过程。
第一阶段的过程如下:
1,发卡行的密钥管理系统产生发卡行公/私钥对PI和SI,并将公钥PI传输给根CA(目的是要跟CA对该公钥进行数字签名)。
2,根CA用自己的私钥SCA对发卡行公钥PI进行数字签名,产生发卡行数字证书,连同根CA公钥信息返回给发卡行密钥管理系统。
3,发卡行密钥管理系统用发卡行私钥SI对卡片静态数据进行数字签名,将签名结果和发卡行证书传送至发卡系统;
4,发卡系统在个人化时将发卡行数字证书和数字签名写入每一张卡片中;
5,根CA将其公钥PCA,经收单行传送至终端管理系统;
6,收单行终端管理系统把根CA公钥PCA通过远程下载到终端;
第二阶段的过程如下:
IC卡进行脱机交易的静态数据认证,受理终端完成如下的过程:
1,终端从卡片中读取出发卡行数字证书以及数字签名,使用终端上的CA公钥PCA恢复出发卡行公钥PI,(即用CA公钥PCA验证发卡行数字证书的合法性,从而证明证书上的发卡行公钥确实是CA签名的合法公钥,为接下来使用该发卡行公钥进行验证IC卡的数字签名准备了基础)
即CA公钥(终端自己存储)+ 发卡行数字证书(终端从IC卡读取)+ RSA算法 = 发卡行公钥
说明:终端用存储在终端或者在线下下载的CA公钥利用RSA算法从发卡行数字证书中恢复发卡行行公钥,并且利用该公钥验证从卡上读取的静态数据和对应的数字签名是否一致。
2,终端使用恢复的发卡行公钥PI解密卡片的签名数据(一般是对原始数据+原始数据的hash进行签名)
即发卡行公钥(通过第一步步骤恢复得到)+签名的静态应用数据+RSA算法=数据A
注:数据A主要包含两个部分:一部分叫数据A1,另外一部分叫hash结果A
3,终端将解密结果与卡片静态数据进行比对,保存对比结果,并将验证结果返回给卡片。
A1和终端在读取数据阶段读到的需要参与认证的静态数据一起,调用Hash算法,算出一个哈希结果B,即
A1+终端在读数据阶段读到的需要参与认证的静态数据+hash算法=hash结果B
然后比较hash结果A和B是否匹配即可。