金融系列4《PUTKEY指令》
用一个新的密钥替换一个已经存在的密钥:新密钥可以有与被替换的密钥相同的或不同的密钥版本号,但是必须与被替换的密钥有相同的密钥标识符。
用新密钥替换多个已经存在的密钥:新密钥可以有与被替换的密钥相同的或不同的密钥版本(对于所有的新密钥是同样的),但是必须与被替换的密钥有相同的密钥标识符。
增加一个新的单密钥:新密钥有一个与其它已存在的密钥不同的密钥标识符/密钥版本号。
增加新的多密钥:新密钥有一个与其它已存在的密钥不同的密钥标识符/密钥版本号(对于所有的新密钥是同样的)。
1. KMC
金融支付系统环境主控密钥(KMC):预个人化时,使用这个KMC生成卡片级密钥(KENC、KMAC、KDEK),并将他们写到卡片的金融支付系统环境中。
KENC用来生成一个对话密钥SKUENC,利用该对话密钥可生成密文和以CBC模式加密机密数据。
KMAC用来生成一个对话密钥SKUMAC,利用该对话密钥可生成命令处理过程中所使用的C-MAC。
KDEK用来生成一个对话密钥SKUDEK,利用该对话密钥可在ECB模式下加密DES密钥或灵活的加密其它机密数据。
KMU常见的取值有两种:取自客户数据或取自加密机。
2. KEYDATA
密钥数据(KEYDATA)必须按下表格式设置,该数据由KMCID和芯片序号(CSN)组成。KMCID是个人化主密钥标识符,应由发卡行或个人化厂商提供。KMCID的长度为6个字节。CSN是IC卡片物理标识符最右边的4个字节。
|
字段 |
长度 |
格式 |
|
KMC(例如IIN/BIN,左对齐,用1111b/半字节填充)标识 |
6 |
BCD |
|
芯片序列号(CSN) |
4 |
二进制数 |
KEYDATA(密钥数据)是每个IC卡应用分区都可以访问的一个数据单元,KMC标识符是修改透支初始化(INITIALIZE UPDATE)命令响应数据的一部分,并给定位IC卡发行商的KMC提供了方便。在IC卡上必须存在‘个人化主密钥(KMC)’的版本号,这个主密钥用来为每个应用生成初始的个人化密钥(KENC、KMAC和KDEK)。
3. 离散
必须为每张IC卡生成一个加密分散密钥(KENC),并把它写入相应的应用中。这个密钥用来生成IC卡密文和验证主机密文。如果密文的安全等级要求存储数据(STORE DATA)命令的数据字段是加密的,这个分散密钥还用来在CBC模式下对该命令的数据字段进行解密。KENC是一个16 字节(112比特加奇偶校验位)的DES密钥。KENC密钥用以下方法推算:
KENC:= DES3(KMC)[ KEYDATA的6个最低有效字节||‘F0’||‘01’]|| DES3(KMC)[ KEYDATA的6个最低有效字节 ||‘0F’||‘01’]。
必须为每张IC卡生成一个校验码分散密钥(KMAC)并写入相应的IC卡。这个密钥用来校验外部认证(EXTERNAL AUTHENTICATE)命令使用的C-MAC。同时当存储数据(STORE DATA)命令的密文安全级要求命令中的数据采用MAC时,这个密钥也用来校验存储数据(STORE DATA)命令使用的C-MAC。KMAC是一个16字节(112比特加奇偶校验位)的DES密钥。KMAC应采用以下方法导出:
KMAC:= DES3(KMC)[ KEYDATA的6个最低有效字节||‘F0’||‘02’]|| DES3(KMC)[ KEYDATA的6个最低有效字节||‘0F’||‘02’]
必须为每张IC卡生成一个密钥加密分散密钥(KDEK)并将它写入相应的IC卡。这个密钥用来在ECB模式下对STORE DATA命令收到的机密数据进行解密。KDEK是一个16字节(112比特加奇偶校验位)的DES密钥。KDEK应采用以下方法导出:
KDEK:= DES3(KMC)[ KEYDATA 的6个最低有效字节 ||‘F0’||‘03’]|| DES3(KMC)[ KEYDATA 的6个最低有效字节||‘0F’||‘03’]
4. 指令
<span style="font-family:Microsoft YaHei;font-size:14px;">//主控分散产生分散密钥
KENC=KEYDATA+F001+KEYDATA+0F01
KMAC=KEYDATA+F002+KEYDATA+0F02
KDEK=KEYDATA+F003+KEYDATA+0F03 ECB_3DES_EN(KENC,KMC,Penc)
ECB_3DES_EN(KMAC,KMC,Pmac)
ECB_3DES_EN(KDEK,KMC,Pdek) ECB_3DES_EN(Penc,SPdek,EkeyEnc)
ECB_3DES_EN(Pmac,SPdek,EkeyMac)
ECB_3DES_EN(Pdek,SPdek,EkeyDek) //更新密钥
00A404000E315041592E5359532E4444463031
auth
80D8+KEYVERSION+814301+8010+EkeyEnc+03+DesVerify(KeyEnc)
+8010+EkeyMac+03+DesVerify(KeyMac)
+8010+EkeyDek+03+DesVerify(KeyDek)
</span>
文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/17579445
金融系列4《PUTKEY指令》的更多相关文章
- Java系列:JVM指令详解(下)(zz)
九.自增减指令 20:iconst_1 21:istore_1 22:return 指令码 助记符 ...
- Java系列:JVM指令详解(上)(zz)
一.未归类系列A 此系列暂未归类. 指令码 助记符 说明 59:iastore 60:lload 6 //因为str ...
- 三菱Q系列PLC基本指令讲解
1.数据传送指令MOV和MOVP,格式为 MOV SRC1 DES1 表示条件接通,将SRC1的值传送到DES1寄存器中,带P的表示只在条件接通的上升沿指令执行一个扫描周期,不带P ...
- 迈向angularjs2系列(2):angular2指令详解
一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...
- 汇编:jmp系列跳转指令总结
助记方法: J:跳转C: 进位位置位N: 否S: 符号位置位o: 溢出位置位Z: 零标志位置位E: 等于P:奇偶位置位A: AboveB: BelowL: Less (Little的比较级)G: Gr ...
- Vue学习系列(三)——基本指令
前言 在上一篇中,我们已经对组件有了更加进一步的认识,从组件的创建构造器到组件的组成,进而到组件的使用,.从组件的基本使用.组件属性,以及自定义事件实现父子通讯和巧妙运用插槽slot分发内容,进一步的 ...
- C语言系列之预处理指令、循环左移函数的使用(四)
本章节将讲两个知识点 第一个知识点:常用的预处理指令 第二个知识点:循环左移右移函数 第一个知识点:预处理指令 一种预处理指令是#define,他把名字A定义为P0,当这个名字出现在源文件的任何地方时 ...
- 金融系列14《QPBOC交易流程》
中国银行金融IC卡qPBOC交易时间(不含终端处理时间)要求:IC卡私钥长度1024位,交易时间 <= 500ms, 1152 <=600 ATR=3B8D800100814D220886 ...
- ED/EP系列7《指令速查表》
命 令 CLA INS ...
随机推荐
- jQuery的deferred对象详解(二)
Deferred对象是由$.Deferred构造的,$.Deferred被实现为简单的工厂模式. $.Deferred的实现 创建三个$.Callbacks对象,分别表示成功done,失败fail,处 ...
- Differential Geometry之第三章曲面的局部理论
第三章.曲面的局部理论 1.曲面的概念 1.1.曲面的概念 1.2.切平面与法向 2.曲面的第一基本形式 3.曲面的第二基本形式 正定矩阵:一个n阶的实对称矩阵M是正定的的条件是当且仅当对于所有的非零 ...
- 用原生js模仿jquery
阅读声明:本文档仅供学习,由于个人能力有限,文档中有错漏的地方还请指出,大家共同学习. 目前在学习怎么样写jquery,模仿阶段,有兴趣的同学可以和我一起学习,共同交流,在学习的路上希望有你做伴. 在 ...
- Android studio 安装和使用
之前一直是使用eclipse+ADT+SDK进行Android的开发的,不愿意转到Android studio是因为熟悉了eclipse的开发环境,最近偶然使用了android studio,感觉比使 ...
- QA在网站建设中的作用
在网站建设项目中,有一个团队负责产品测试并识别产品中的缺陷是很有意义的.问题在于,不应该只依赖这个团队来发现所有的缺陷,就像航空公司不能只依靠空乘人员确保飞机安全一样.这个观点的核心是一个简单的事实, ...
- swift 闭包简写实际参数名$0、$1等理解
Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值. 如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对 ...
- 表情键盘及文字表情识别简单demo
1.前言 了解了简单图文混排 (属性字符串的使用)及 正则表达式的部分知识,为了加深印象,写了个简单表情键盘demo 展示文字用的是 UITextView 由于时间匆忙,存在一些bug,以及不完善的地 ...
- Weex
今天在群友发的那个掘金技术网站里头看到这个weex,感觉还不错 阿里负责的一个开源项目 源码地址: http://alibaba.github.io/weex/index.html 是用来做app的 ...
- 使用Struts2 验证框架,验证信息重复多次出现
版权声明:本文为博主原创文章,未经博主允许不得转载. 问题描述:第一次提交表单.某个数据不符合规则,就会出现一条错误信息.再次提交,上次显示的错误信息不消失,又多出一条一模一样的错误信息.提交几次,就 ...
- UI1_HTTP下载
// DataModel.h // UI1_HTTP下载 // // Created by zhangxueming on 15/7/17. // Copyright (c) 2015年 zhangx ...