分类: 嵌入式
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:该字节指明从第1 个记录开始的用于脱机数据认证的连续记录数.
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表示在SFI为10的文件中, 在01到03这些记录中, 有一个记录是用于数据认证的.
第四步,
判断哈希结果A和哈希结果B是否相等,如果相等,SDA成功,否则SDA失败.
上述步骤其实省略了一些数据拼接以及数据起始字节的合法性判断等操作,但SDA的核心已非常明确.