Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7725977
  • 博文数量: 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 13:58:27

看这篇文章之前,建议了解非对称加密解密的工作原理.

 

SDA的意思是静态数据认证,首先如何理解这个静态。参与认证的都是静态的卡片数据,这些数据在卡片个人化后就不会在改变,比如卡号它的目的是确认存放在IC卡中的由应用文件定位器(AFL)和可选的静态数据认证标签列表所标识的,关键的静态数据的合法性,从而保证IC卡中的发卡行数据在个人化以后没有被非法篡改.

 

既然是认证,必然涉及算法,SDA(包括之后的DDA,CDA)用的是RSA算法,这是一种典型的以非对称加密为理论基础的算法.

 

废话不多讲详细的步骤如下:

 

第一步,

CA(认证中心)公钥+发卡行公钥证书+RSA算法 发卡行公钥

CA公钥可以手动下装到终端,也可以联机从后台下载具体的内容通常包括公钥模,模长度,公钥指数,指数长度以及有效期等信息这些信息牵扯到算法本身的用途,不细说.

 

发卡行公钥证书是签了名的发卡行公钥,是终端在读数据阶段从卡片中读出来的其实是一串密文数据比如下面这样:

  * Tag 90 Issuer Public Key Certificate  

  *- Len       80  

  *- Value         AA 7B 0B F4 AA E8 B7 C2 EC C4 85AC FA 57 77 0E   

  *                50BB 92 07 23 3E 42 78 65 47 17 E4 70 69 19 81   

  *                C187 F8 1F FC 3B 90 89 50 63 EF 98 C0 D8 6B 52   

  *                97B6 55 39 93 09 E6 69 9F EE 22 70 B0 F3 43 1B   

  *                5ABA D7 E5 16 26 19 26 C3 5B F6 BB FE FB 49 36   

  *                6EBE 96 DC 51 0E 9C BD 91 53 37 E8 18 8D 51 7D   

  *                15DC F9 02 98 C4 02 33 EE EA FD 5A 94 59 F5 D3   

  *                410E 6B 89 B4 4D F6 E8 18 FA 35 94 EF 93 55 34  

CA公钥从发卡行公钥证书中恢复发卡行公钥用的算法是RSA算法

第二步,

发卡行公钥+签名的静态应用数据+RSA算法 数据A

数据A主要包括两部分重要的数据一部分我把它叫做数据A1, 另外一部分叫哈希结果A.

 

第三步,

A1+终端在读数据阶段读到的需要参与认证的静态数据+Hash算法 哈希结果B

A1和终端在读数据阶段读到的需要参与认证的静态数据一起, 调用哈希算法,最终计算出一个哈希结果B. 数据阶段读到的需要参与认证的静态数据,是AFL中的字节4:该字节指明从第个记录开始的用于脱机数据认证的连续记录数.

AFL的结构如下:

字节1短文件标识符

字节2文件中要读取的第1个记录的记录号

字节3文件中要读取的最后一个记录的记录号

字节4从字节中的记录号开始,存放认证用静态数据记录的个数(值从到字节-字节+1的值)

举例:

*  Tag 94 ApplicationFile Locator (AFL)    

*  - Len   0C    

*  - Value 08 01 01 00 10 01 03 01 18 01 04 00  

每四字节为一部分, 10 01 03 01表示在SFI10的文件中0103这些记录中, 有一个记录是用于数据认证的.

 

第四步,

判断哈希结果A和哈希结果B是否相等,如果相等,SDA成功,否则SDA失败.

 

上述步骤其实省略了一些数据拼接以及数据起始字节的合法性判断等操作,但SDA的核心已非常明确.

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