高速公路ETC卡签之我见9-常见算法
来源:互联网 发布:战争雷霆手机查看数据 编辑:程序博客网 时间:2024/05/21 19:48
原地址:http://blog.csdn.net/Heidlyn/article/details/53668707
本部分主要介绍下高速公路ETC卡签所涉及的主要算法,包括子密钥推导、MAC计算以及过程密钥,具体如后描述。
1. 子密钥推导(密钥分散)
子密钥推导包括左半部分推导、右半部分推导以及合并三个环节。
左半部分的推导方法
推导双倍长 DPK左半部分的方法:
将应用序列号(分散系数)的最右16个数字作为输入数据
将MPK 作为加密密钥
用MPK 对输入数据进行Triple DES运算
右半部分的推导方法
推导双倍长DPK右半部分的方法:
将应用序列号(分散系数)的最右16个数字的求反作为输入数据
将MPK 作为加密密钥
用MPK 对输入数据进行TripleDES运算
合并
DPK = DPK_L || DPK_R
最终得到的DPK即为MPK的子密钥(分散结果)。
2. MAC计算
MAC,即报文鉴别码,按照如下的方式使用单重或三重DES加密方式产生MAC:
第一步:取8个字节的16进制数字‘0’或者 4字节随机数+4字节’0’(由业务类型确定)作为初始变量。
第二步:按照顺序将以下数据串联在一起形成数据块:
第三步:将该数据块分成8字节为单位的数据块,标号为D1、D2、D3和D4等。最后的数据块有可能是1-8个字节。
第四步:如果最后的数据块长度是8字节的话,则在其后加上16进制数字’80 00 00 00 00 00 00 00 ’,转到第五步。 如果最后的数据块长度不足8字节,则在其后加上16进制数字’80’,如果达到8字节长度,则转入第五步;否则在其后加入16进制数字’0’直到长度达到8字节。
第五步:对这些数据块使用相应的密钥进行加密。根据密钥的长度采用Single DES或Triple DES。
第六步:最终得到是从计算结果左侧取得的4字节长度的MAC(或TAC)。
用长度为16字节的密钥产生MAC
用长度为8字节的密钥产生MAC
3. 过程密钥产生
过程密钥是在交易过程中用可变数据产生的单倍长密钥。过程密钥产生后只能在某过程/交易中使用一次。
下图描述了 EP进行消费交易时产生过程密钥的机制。这方法也用于不同交易类型的过程密钥的产生,但输入的数据取决于不同的交易类型。
本部分主要介绍下高速公路ETC卡签所涉及的主要算法,包括子密钥推导、MAC计算以及过程密钥,具体如后描述。
1. 子密钥推导(密钥分散)
子密钥推导包括左半部分推导、右半部分推导以及合并三个环节。
左半部分的推导方法
推导双倍长 DPK左半部分的方法:
将应用序列号(分散系数)的最右16个数字作为输入数据
将MPK 作为加密密钥
用MPK 对输入数据进行Triple DES运算
右半部分的推导方法
推导双倍长DPK右半部分的方法:
将应用序列号(分散系数)的最右16个数字的求反作为输入数据
将MPK 作为加密密钥
用MPK 对输入数据进行TripleDES运算
合并
DPK = DPK_L || DPK_R
最终得到的DPK即为MPK的子密钥(分散结果)。
2. MAC计算
MAC,即报文鉴别码,按照如下的方式使用单重或三重DES加密方式产生MAC:
第一步:取8个字节的16进制数字‘0’或者 4字节随机数+4字节’0’(由业务类型确定)作为初始变量。
第二步:按照顺序将以下数据串联在一起形成数据块:
第三步:将该数据块分成8字节为单位的数据块,标号为D1、D2、D3和D4等。最后的数据块有可能是1-8个字节。
第四步:如果最后的数据块长度是8字节的话,则在其后加上16进制数字’80 00 00 00 00 00 00 00 ’,转到第五步。 如果最后的数据块长度不足8字节,则在其后加上16进制数字’80’,如果达到8字节长度,则转入第五步;否则在其后加入16进制数字’0’直到长度达到8字节。
第五步:对这些数据块使用相应的密钥进行加密。根据密钥的长度采用Single DES或Triple DES。
第六步:最终得到是从计算结果左侧取得的4字节长度的MAC(或TAC)。
用长度为16字节的密钥产生MAC
用长度为8字节的密钥产生MAC
3. 过程密钥产生
过程密钥是在交易过程中用可变数据产生的单倍长密钥。过程密钥产生后只能在某过程/交易中使用一次。
下图描述了 EP进行消费交易时产生过程密钥的机制。这方法也用于不同交易类型的过程密钥的产生,但输入的数据取决于不同的交易类型。
- 高速公路ETC卡签之我见9-常见算法
- 高速公路ETC卡签之我见9-常见算法
- 高速公路ETC卡签之我见7-用户卡发行
- 高速公路ETC卡签之我见7-用户卡发行
- 高速公路ETC卡签之我见1-概述
- 高速公路ETC卡签之我见2-卡片消费
- 高速公路ETC卡签之我见3-卡片圈存
- 高速公路ETC卡签之我见8-OBU发行
- 高速公路ETC卡签之我见1-概述
- 高速公路ETC卡签之我见2-卡片消费
- 高速公路ETC卡签之我见3-卡片圈存
- 高速公路ETC卡签之我见8-OBU发行
- 高速公路ETC卡签之我见4-卡签结构说明
- 高速公路ETC卡签之我见4-卡签结构说明
- 高速公路ETC卡签之我见5-国标密钥体系介绍
- 高速公路ETC卡签之我见6-省级密钥系统建设
- 高速公路ETC卡签之我见5-国标密钥体系介绍
- 高速公路ETC卡签之我见6-省级密钥系统建设
- JAVA环境配置
- 关于jenkins的poll SCM参数配置
- Linux 安装oracle客户端
- WISP模式
- JS apply和call的区别在哪里
- 高速公路ETC卡签之我见9-常见算法
- 从JDK源码角度看Long
- Vector与ArrayList区别
- 嵌入式开发-迅为iMX6开发板移植移动4G模块
- 进程和线程
- 使用Navicat在oracle上新建表空间、用户及权限赋予
- 数字图像处理基本知识
- PHP之serialize和unserialize的使用
- npm升级package.json依赖包