PBOC/EMV之DDA(动态数据认证)

来源:互联网 发布:java金字塔图形的代码 编辑:程序博客网 时间:2024/05/22 00:43

出处:http://blog.csdn.net/pony_maggie/article/details/7429296


前一篇文章讲了SDA,DDA的步骤可以这样理解:先执行SDA,再执行DDA特有的步骤. 所以这篇文章主要讲这个特有的步骤.正是这个特有的步骤,使得DDA不仅具有SDA的功能(保证卡片上的数据在个人化后不会被修改),还可以防止卡片被复制伪造.

 

第一步,取IC公钥

 

在SDA阶段取得的发卡行公钥,在DDA时还有一个用途,就是恢复IC卡公钥. 可以用下面的公式表示:

发卡行公钥+IC卡公钥证书+RSA算法=IC卡公钥

 

IC卡公钥证书是终端在读数据阶段从卡里读出来的, 是一串密文数据,类似如下:

[plain] view plaincopy
  1. * Tag 9F46 ICC Public Key Certificate   
  2. * - Len 50   
  3. * - Value 79 DE 85 4F 1F 84 9E 8B 42 9D 72 6A 8B 93 F0 E9    
  4. *  83 06 B7 7F A8 78 67 26 B4 F6 25 6B ED 87 9F 2C    
  5. *  24 52 24 DD 93 1C A8 0D 44 D8 C6 A5 5E 6D A9 BB    
  6. *  E5 F3 E2 7F 65 98 28 E4 2D 27 A1 7C 33 49 88 83    
  7. *  34 D7 46 3C 0C 6E C7 BA 93 D6 27 65 44 FB BF C5    


 

第二步,取签名的动态数据

终端首先发起内部认证命令给卡片, 命令的数据域是DDOL中指明的数据, DDOL是卡片在读数据阶段返回给终端的,告诉终端自己需要哪些终端数据来生成签名的动态数据. 举例如下:

[plain] view plaincopy
  1. * Tag 9F49 Dynamic Data Authentication Data (DDOL)  
  2.   
  3. *   - Len   15  
  4.   
  5. *   - Value 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03   
  6.   
  7. *       9C 01 9F 37 04  


 

要注意9F37(终端不可预知数)是DDOL的必备项.

 

卡片用终端送来的DDOL中的数据,加上自己产生的动态数据(比如ATC),用IC卡私钥(注意这个, 这个私钥放在安全存贮区域,是不可复制的)生成一个密文数据,这个数据叫做签名的动态应用数据. 然后卡片把这个数据通过内部认证返回给终端.

 

第三步,验证哈希值

用公式可表示如下:

IC卡公钥+动态签名的应用数据+RSA=数据A

数据A也包括两部分,一部分我把它叫A1,另一部分叫哈希结果A

 

终端用A1加上DDOL指定的数据,用指定的哈希算法计算一个哈希结果B.

A和B比较,如果相等,则DDA成功,否则失败.

 

前面一开始说到,DDA可以防止复制卡片, 从上面一系列的流程可以看出, 即使你复制一张卡,SDA可以通过(因为静态的数据都是一样的),但是由于IC卡私钥的安全性,动态签名的验证是肯定失败的.


原创粉丝点击