PBOC/EMV之DDA(动态数据认证)
文章出处:http://www.nexussmartsolutions.com 作者: 人气: 发表时间:2012年05月27日
前一篇文章讲了SDA,DDA的步骤可以这样理解:先执行SDA,再执行DDA特有的步骤. 所以这篇文章主要讲这个特有的步骤.正是这个特有的步骤,使得DDA不仅具有SDA的功能(保证卡片上的数据在个人化后不会被修改),还可以防止卡片被复制伪造.
第一步,取IC公钥
在SDA阶段取得的发卡行公钥,在DDA时还有一个用途,就是恢复IC卡公钥. 可以用下面的公式表示:
发卡行公钥+IC卡公钥证书+RSA算法=IC卡公钥
IC卡公钥证书是终端在读数据阶段从卡里读出来的, 是一串密文数据,类似如下:
第二步,取签名的动态数据
终端首先发起内部认证命令给卡片, 命令的数据域是DDOL中指明的数据, DDOL是卡片在读数据阶段返回给终端的,告诉终端自己需要哪些终端数据来生成签名的动态数据. 举例如下:
要注意9F37(终端不可预知数)是DDOL的必备项.
卡片用终端送来的DDOL中的数据,加上自己产生的动态数据(比如ATC),用IC卡私钥(注意这个, 这个私钥放在安全存贮区域,是不可复制的)生成一个密文数据,这个数据叫做签名的动态应用数据. 然后卡片把这个数据通过内部认证返回给终端.
第三步,验证哈希值
用公式可表示如下:
IC卡公钥+动态签名的应用数据+RSA=数据A
数据A也包括两部分,一部分我把它叫A1,另一部分叫哈希结果A
终端用A1加上DDOL指定的数据,用指定的哈希算法计算一个哈希结果B.
A和B比较,如果相等,则DDA成功,否则失败.
前面一开始说到,DDA可以防止复制卡片, 从上面一系列的流程可以看出, 即使你复制一张卡,SDA可以通过(因为静态的数据都是一样的),但是由于IC卡私钥的安全性,动态签名的验证是肯定失败的.