用一个新的密钥替换一个已经存在的密钥:新密钥可以有与被替换的密钥相同的或不同的密钥版本号,但是必须与被替换的密钥有相同的密钥标识符。

用新密钥替换多个已经存在的密钥:新密钥可以有与被替换的密钥相同的或不同的密钥版本(对于所有的新密钥是同样的),但是必须与被替换的密钥有相同的密钥标识符。

增加一个新的单密钥:新密钥有一个与其它已存在的密钥不同的密钥标识符/密钥版本号。

增加新的多密钥:新密钥有一个与其它已存在的密钥不同的密钥标识符/密钥版本号(对于所有的新密钥是同样的)。

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指令》的更多相关文章

  1. Java系列:JVM指令详解(下)(zz)

    九.自增减指令    20:iconst_1    21:istore_1    22:return 指令码      助记符                                     ...

  2. Java系列:JVM指令详解(上)(zz)

    一.未归类系列A 此系列暂未归类. 指令码    助记符                            说明    59:iastore    60:lload 6       //因为str ...

  3. 三菱Q系列PLC基本指令讲解

    1.数据传送指令MOV和MOVP,格式为 MOV    SRC1    DES1     表示条件接通,将SRC1的值传送到DES1寄存器中,带P的表示只在条件接通的上升沿指令执行一个扫描周期,不带P ...

  4. 迈向angularjs2系列(2):angular2指令详解

    一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...

  5. 汇编:jmp系列跳转指令总结

    助记方法: J:跳转C: 进位位置位N: 否S: 符号位置位o: 溢出位置位Z: 零标志位置位E: 等于P:奇偶位置位A: AboveB: BelowL: Less (Little的比较级)G: Gr ...

  6. Vue学习系列(三)——基本指令

    前言 在上一篇中,我们已经对组件有了更加进一步的认识,从组件的创建构造器到组件的组成,进而到组件的使用,.从组件的基本使用.组件属性,以及自定义事件实现父子通讯和巧妙运用插槽slot分发内容,进一步的 ...

  7. C语言系列之预处理指令、循环左移函数的使用(四)

    本章节将讲两个知识点 第一个知识点:常用的预处理指令 第二个知识点:循环左移右移函数 第一个知识点:预处理指令 一种预处理指令是#define,他把名字A定义为P0,当这个名字出现在源文件的任何地方时 ...

  8. 金融系列14《QPBOC交易流程》

    中国银行金融IC卡qPBOC交易时间(不含终端处理时间)要求:IC卡私钥长度1024位,交易时间 <= 500ms, 1152 <=600 ATR=3B8D800100814D220886 ...

  9. ED/EP系列7《指令速查表》

    命 令                                                             CLA                  INS             ...

随机推荐

  1. jQuery的deferred对象详解(二)

    Deferred对象是由$.Deferred构造的,$.Deferred被实现为简单的工厂模式. $.Deferred的实现 创建三个$.Callbacks对象,分别表示成功done,失败fail,处 ...

  2. Differential Geometry之第三章曲面的局部理论

    第三章.曲面的局部理论 1.曲面的概念 1.1.曲面的概念 1.2.切平面与法向 2.曲面的第一基本形式 3.曲面的第二基本形式 正定矩阵:一个n阶的实对称矩阵M是正定的的条件是当且仅当对于所有的非零 ...

  3. 用原生js模仿jquery

    阅读声明:本文档仅供学习,由于个人能力有限,文档中有错漏的地方还请指出,大家共同学习. 目前在学习怎么样写jquery,模仿阶段,有兴趣的同学可以和我一起学习,共同交流,在学习的路上希望有你做伴. 在 ...

  4. Android studio 安装和使用

    之前一直是使用eclipse+ADT+SDK进行Android的开发的,不愿意转到Android studio是因为熟悉了eclipse的开发环境,最近偶然使用了android studio,感觉比使 ...

  5. QA在网站建设中的作用

    在网站建设项目中,有一个团队负责产品测试并识别产品中的缺陷是很有意义的.问题在于,不应该只依赖这个团队来发现所有的缺陷,就像航空公司不能只依靠空乘人员确保飞机安全一样.这个观点的核心是一个简单的事实, ...

  6. swift 闭包简写实际参数名$0、$1等理解

    Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值. 如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对 ...

  7. 表情键盘及文字表情识别简单demo

    1.前言 了解了简单图文混排 (属性字符串的使用)及 正则表达式的部分知识,为了加深印象,写了个简单表情键盘demo 展示文字用的是 UITextView 由于时间匆忙,存在一些bug,以及不完善的地 ...

  8. Weex

    今天在群友发的那个掘金技术网站里头看到这个weex,感觉还不错 阿里负责的一个开源项目 源码地址: http://alibaba.github.io/weex/index.html 是用来做app的 ...

  9. 使用Struts2 验证框架,验证信息重复多次出现

    版权声明:本文为博主原创文章,未经博主允许不得转载. 问题描述:第一次提交表单.某个数据不符合规则,就会出现一条错误信息.再次提交,上次显示的错误信息不消失,又多出一条一模一样的错误信息.提交几次,就 ...

  10. UI1_HTTP下载

    // DataModel.h // UI1_HTTP下载 // // Created by zhangxueming on 15/7/17. // Copyright (c) 2015年 zhangx ...