分类: 嵌入式
2012-12-06 14:21:16
静态数据认证由终端使用一种基于公钥技术的数字签名方案来完成。发现在个人化以后对数据的未经授权的改动。
静态数据认证要求存在一个认证中心,这个认证中心具有高级别的安全性来签名发卡行公钥。每一台符合本规范的终端都必须为每一个它能识别的应用保存相应的认证中心的公钥。
数据和安全密钥之间的关系如图1所示。
图1 - 静态数据认证
认证过程中主要的三个步骤,即:
l 由终端恢复认证中心公钥。
l 由终端恢复发卡行公钥。
l 由终端验证签名的静态应用数据。
IC卡静态数据
所有静态数据认证需要的信息在表3中详细说明,并存放在IC卡中。如果静态数据认证标签列表存在,则它必须仅包含标识AIP用的标签‘82’。
标签 | 长度 | 值 | 格式 |
- | 5 | 注册的应用提供者标识 | b |
‘8F’ | 1 | 认证中心公钥索引 | b |
‘90’ | NCA | 发卡行公钥证书 | b |
‘92’ | NI – NCA +36 | 发卡行公钥的余项(如果有) | b |
‘9F32’ | 1或3 | 发卡行公钥指数 | b |
‘93’ | NI | 签名的静态应用数据 | b |
- | 变长 | 在本规范第三册的第II部分指明的需认证的静态数据(参见上文) | - |
表3 – 静态数据认证用到的数据对象
1.2 认证中心公钥的获取
终端读取认证中心公钥索引。使用这个索引和RID,终端必须确认并取得存放在终端的认证中心公钥的模、指数和与密钥相关的信息,以及相应的将使用的算法。如果终端没有存储与这个索引及RID相关联的密钥,那么静态数据认证失败。
1. 为了获得在表4中指明的恢复数据,使用认证中心公钥和相应的算法并将附录A2.1中指明的恢复函数应用到发卡行公钥证书上。如果恢复数据的结尾不等于‘BC’,那么静态数据认证失败。
字段名 | 长度 | 描述 | 格式 |
恢复数据头 | 1 | 十六进制,值为‘6A’ | b |
证书格式 | 1 | 十六进制,值为‘02’ | b |
发卡行标识 | 4 | 主帐号最左面的3-8个数字(在右边补上十六进制数‘F’) | cn 8 |
证书失效日期 | 2 | MMYY,在此日期后,这张证书无效 | n4 |
证书序列号 | 3 | 由认证中心分配给这张证书的,唯一的二进制数 | b |
哈什算法标识 | 1 | 标识用来在数字签名方案中产生哈什结果的哈什算法1 | b |
发卡行公钥算法标识 | 1 | 标识使用在发卡行公钥上的数字签名算法1 | b |
发卡行公钥长度 | 1 | 标识发卡行公钥的模的字节长度 | b |
发卡行公钥指数长度 | 1 | 标识发卡行公钥指数的字节长度 | b |
发卡行公钥或发卡行公钥的最左边字节 | NCA-36 | 如果NI≤NCA–36,这个字段包含了在右边补上了NCA–36–NI 个值为‘BB’的字节的整个发卡行公钥。 如果NI >NCA-36,这个字段包含了发卡行公钥最高位的NCA–36个字节2 | b |
哈什结果 | 20 | 发卡行公钥以及相关信息的哈什值 | b |
恢复数据结尾 | 1 | 十六进制,值为‘BC’ | b |
表4 - 从发卡行公钥证书恢复数据的格式
2. 检查恢复数据头。如果它不是‘6A’,那么静态数据认证失败。
3. 检查证书格式。如果它不是‘02’,那么静态数据认证失败。
4. 将表4中的第二个到第十个数据元素(即从证书格式直到发卡行公钥或发卡行公钥的最左边字节)从左到右连接,再把发卡行公钥的余项加在后面(如果有),最后是发卡行公钥指数。
5. 把指定的哈什算法(从哈什算法标识得到)应用到上一步的连接结果从而得到哈什结果。
6. 把上一步计算得到的哈什结果和恢复出的哈什结果相比较。如果它们不一样,那么静态数据认证失败。
7. 检验发卡行标识是否匹配主帐号最左面的3-8个数字(允许发卡行标识可能在其后补‘F’)。如果不一致,那么静态数据认证失败。
8. 检验证书失效日期中指定月的最后日期等于或迟于今天的日期。如果证书失效日期在今天的日期之前,那么证书已过期,静态数据认证失败。
9. 检验连接起来的RID、认证中心公钥索引、证书序列号是否有效。如果无效,那么静态数据认证失败。
10. 如果发卡行公钥算法标识无法被识别,那么静态数据认证失败。
11. 如果以上所有的检验都通过,连接发卡行公钥的最左边字节和发卡行公钥的余项(如果有)以得到发卡行公钥模,从而继续下一步签名静态应用数据的检验。
5.4 签名静态应用数据的检验
1. 如果签名静态应用数据的长度不等于发卡行公钥模的长度,那么静态数据认证失败。
2. 为了获得在表5中指明的恢复数据,使用发卡行公钥和相应的算法并将附录A2.1中指明的恢复函数应用到签名的静态应用数据上。如果恢复数据的结尾不等于‘BC’,那么静态数据认证失败。
字段名 | 长度 | 描述 | 格式 |
恢复数据头 | 1 | 十六进制,值为‘6A’ | b |
签名数据格式 | 1 | 十六进制,值为‘03’ | b |
哈什算法标识 | 1 | 标识用来在数字签名方案中产生哈什结果的哈什算法1 | b |
数据认证代码 | 2 | 发卡行分配的代码 | b |
填充字节 | NI–26 | 填充字节由NI–26个值为‘BB’的字节组成3 | b |
哈什结果 | 20 | 需认证的静态应用数据的哈什值 | b |
恢复数据结尾 | 1 | 十六进制,值为‘BC’ | b |
表5 - 从签名的静态应用数据恢复数据的格式
3. 检查恢复数据头。如果它不是‘6A’,那么静态数据认证失败。
4. 检查签名数据格式。如果它不是‘03’,那么静态数据认证失败。
5. 将表5中的第二个到第五个数据元素(即从签名数据格式直到填充字节)从左到右连接,再把本规范第三册的第II部分中指明的需认证的静态数据加在后面。如果静态数据认证标签列表存在,并且其包含非‘82’的标签,那么静态数据认证失败。
6. 把指定的哈什算法(从哈什算法标识得到)应用到上一步的连接结果从而得到哈什结果。
7. 把上一步计算得到的哈什结果和恢复出的哈什结果相比较。如果它们不一样,那么静态数据认证失败。
如果以上所有的步骤都成功,那么静态数据认证成功。在表5 中的恢复得到的数据认证代码应被存放在标签‘9F45’中。