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

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

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

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

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. MySQL双主配置

    MySQL双主配置 准备环境:服务器操作系统为RHEL6.4 x86_64,为最小化安装.主机A和主机B均关闭防火墙和SELINUX ,IP地址分别为192.168.131.129和192.168.1 ...

  2. Strom实现单词统计代码

    import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.HashM ...

  3. loadrunner协议的选择

    1. 任何高级协议的底层都是用Winsocket通信   2. 不管你系统中有多少个服务器,lr录制的始终是客户端与第一个服务器之间的通信内容, 客户端用IE访问的一般都选http协议(对于常见的,b ...

  4. php学习笔记5--php中的可变变量,可变函数及匿名函数

    可变变量指的是:将一个变量的值再次当做一个变量名从而得到另外一个变量的值.如:$name = 'dqrcsc';$myname = 'name'; //$myname的值碰巧是另一个变量的变量名ech ...

  5. 十三、Android学习笔记_Andorid控件样式汇总

    <!-- 设置activity为透明 --> <style name="translucent"> <item name="android: ...

  6. PB出现中文乱码

    在design>option>font把字体都设定为宋体 tools>system option>font 把字体都设定为宋体 然后重启PB即可

  7. Server.UrlEncode、HttpUtility.UrlDecode的区别

    Server.UrlEncode.HttpUtility.UrlDecode的区别 在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗? 测试: string file="文件上(传 ...

  8. OC5_@class关键字

    // // ClassB.h // OC5_@class关键字 // // Created by zhangxueming on 15/6/24. // Copyright (c) 2015年 zha ...

  9. Webservice发布出现 测试窗体只能用于来自本地计算机的请求

    今天发布了一个接口,一开始以为是.netframework版本的问题,从3.5降到2.0到服务器发布,发布后还是会出现 测试窗体只能用于来自本地计算机的请求 上网查找资料发现原来是 webconfig ...

  10. (转)IIS设置优化(需根据服务器性能,调整具体参数值)

    IIS7 优化-网站请求并发数>> /*调整IIS 7应用程序池队列长度*/队列长度 5000-20000(原来默认1000,最大65535,建议10000 ) /*调整IIS 7的app ...