Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7675803
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2012-12-26 14:08:02

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

 

第一步,IC公钥 

SDA阶段取得的发卡行公钥,DDA时还有一个用途,就是恢复IC卡公钥可以用下面的公式表示:发卡行公钥+IC卡公钥证书+RSA算法=IC卡公钥

 

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

* Tag 9F46 ICC Public Key Certificate   

* - Len 50   

* - Value 79 DE 85 4F 1F 84 9E 8B 42 9D 72 6A 8B 93 F0 E9    

*  83 06 B7 7F A8 78 67 26 B4 F6 25 6B ED 87 9F 2C    

*  24 52 24 DD 93 1C A8 0D 44 D8 C6 A5 5E 6D A9 BB    

*  E5 F3 E2 7F 65 98 28 E4 2D 27 A1 7C 33 49 88 83    

*  34 D7 46 3C 0C 6E C7 BA 93 D6 27 65 44 FB BF C5    

 

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

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

* Tag 9F49 Dynamic Data Authentication Data (DDOL)    

*   - Len   15    

*   - Value 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03     

*       9C 01 9F 37 04   

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

 

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

 

第三步,验证哈希值

用公式可表示:IC卡公钥+动态签名的应用数据+RSA=数据A

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

 

终端用A1加上DDOL指定的数据,用指定的哈希算法计算一个哈希结果BAB比较,如果相等,则DDA成功,否则失败.

 

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

阅读(3252) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~