zoukankan      html  css  js  c++  java
  • 金融系列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

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    A. Vanya and Table
    B. Chris and Magic Square
    A. Bus to Udayland
    关于cout输出精度问题
    1087 1 10 100 1000
    1080 两个数的平方和
    CODE[VS] 1842 递归第一次
    CODE[VS] 1501 二叉树最大宽度和高度
    少年中国说
    CODE[VS] 1475 m进制转十进制
  • 原文地址:https://www.cnblogs.com/iplus/p/4467186.html
Copyright © 2011-2022 走看看