欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    金融行业密钥基础知识资料.doc

    • 资源ID:822903       资源大小:1.29MB        全文页数:17页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    金融行业密钥基础知识资料.doc

    ''金融行业密钥基础知识金融行业密钥基础知识''1密钥管理密钥管理SJL05 金融数据加密机采用三级密钥管理方法(遵循ANSI X9.17 标准),其密钥层次如下图:图 1.1 密钥层次1.1 各种密钥在密钥层次中的作用各种密钥在密钥层次中的作用1.1.1 本地主密钥(本地主密钥(Local Master Key)又称主机主密钥( Master Key) ,主要用来保护它下一级的区域主密钥( Zone Master Key)(银行主密钥( Bank Master Key) 、终端主密钥( Terminal Master Key))。当区域主密钥需要导出或保存到加密机以外时,通常需要用本地主密钥(或衍生的密钥对)加密区域主密钥。这一点在RACAL 系列的加密机中有最好的体现,在RACAL 加密机中,区域主密钥都由主机主密钥加密存放于主机数据库中,加密机不保存区域主密钥。1.1.2 区域主密钥区域主密钥主要有两种,一种是金卡中心与成员行之间的传输密钥(通常称 ''为银行主密钥 ),另一种是成员行主机与ATM 或 POS 之间的传输密钥(通常称为终端主密钥)。它主要用来加密下一层次的数据密钥(如:PIK、MAK)。1.1.3 数据加密密钥(数据加密密钥(Date Encrypt Key)又称工作密钥( Working Key) ,是最终用于加密传输数据的密钥,其上层两种密钥可以称为密钥加密/交换密钥( Key Encrypt/Exchange Key,简称 KEK) 。数据密钥一般分为两种,一种是用来加密 PIN 的密钥称为 PIK(Pin Key) ,另一种是用来计算MAC的密钥称为 MAK(Mac Key) 。1.2 各种密钥的注入与分发各种密钥的注入与分发1.2.1 本地主密钥本地主密钥通常由各成员行(或下属机构)采用加密机前面板上的键盘或直接通过 IC 卡注入到加密机中,各成员行的本地主密钥各不相同。一般本地主密钥的注入都由成员行的三位高层领导注入,三人分别保存一部分密钥(密钥分量 Component) ,三部分密钥可以在加密机中以一定的算法(异或)合成为最终的本地主密钥(或通过衍生(Derive)生成密钥对) 。本地主密钥在注入加密机时通过IC 卡进行备份,当加密机密钥丢失时可用 IC 卡来恢复。1.2.2 区域主密钥(银行主密钥)区域主密钥(银行主密钥)一般由上级机构(金卡中心)产生并分发。上级机构(金卡中心)产生并保存下属机构(各成员行)的区域主密钥(银行主密钥),同时将密码分量的明文或IC 卡的形式将区域主密钥(银行主密钥)下发给下属机构(各成员行) 。下属机构(成员行)将密钥分量注入到加密机内,如果区域主密钥(银行主密钥)是保存到本机构的主机数据库中,''则将区域主密钥(银行主密钥)注入到加密机后,加密机显示本地主密钥加密的区域主密钥(银行主密钥)密文,由银行工作人员将其录入主机数据库。银行主密钥通常由两人注入,各自保存一部分。区域主密钥中的终端主密钥由各成员行自己注入到加密机中,同时下装到 ATM 和 POS 中,由于各成员行的 ATM 和 POS 数量都较大,一般是所有ATM 和 POS 共用一个终端主密钥或是一组 ATM 和 POS 共用一个终端主密钥。1.2.3 数据密钥数据密钥分为两种,一般不在加密机中保存。一种是金卡中心与成员行之间的数据密钥,一种是成员行主机与ATM 或 POS 之间的数据密钥。前一种数据密钥可以由金卡中心主动向下分发,也可以由成员行主动向上申请。数据密钥在传输过程中由金卡中心与成员行之间共享的银行主密钥加密,成员行接收到数据密钥后都需要验证其正确性后才会启用新的数据密钥。后一种数据密钥每天由ATM 或 POS 签到申请,由加密机随机产生,并由终端主密钥加密传送。金卡中心与成员行及其终端(ATM、POS)之间的密钥关系如下图:金卡中心HSM成员行HSM终端BMKTMKTMKBMK(PIK1)BMK(MAK1)BMK(PIK2)TMK(MAK2)TMK(DATA)PIK1、MAK1(DATA)PIK2、MAK2''图 6.2 金卡中心、成员行、终端之间密钥关系示意图 6.2 中各符号的含义如下:BMK:银行主密钥TMK:终端主密钥PIK1:金卡中心与成员行之间的PIKMAK1:金卡中心与成员行之间的MAKPIK2:成员行与终端 (ATM、POS)之间的 PIKMAK2:成员行与终端 (ATM、POS)之间的 MAKDATA:传输的数据(PIK1)BMK:被 BMK 加密的 PIK12术语解释术语解释2.1 本地主密钥本地主密钥LMK:Local Master Key,本地主密钥,又称为文件主密钥(MDS)、加密机主密钥、主机主密钥,在密钥体系中处于最上层,以明文存储在加密机中,加密保护存储在加密机外的其它密钥。LMK 一般为双长度密钥,也有三倍长度密钥。2.2 区域主密钥区域主密钥ZMK:Zone Master Key,区域主密钥,在 RACAL 加密机中,指主机与主机间的传输主密钥。在密钥体系中处于中间层,可以通过 LMK 加密后存储在主机数据库中,也可直接存储在加密机中,一般为双长度,也有单长度和三倍长度密钥。用于主机间动态分发工作密钥时对其进行加密保护BMK:Bank Master Key,银行主密钥,同 ZMK,多用于金卡联网,''在金卡联网中,有时 POS 和银行主机之间也使用 BMK。MMK:Member Master Key,成员行主密钥,同 ZMK。多用于金卡联网SMK:Shared Master Key,共享主密钥,同 ZMK.2.3 数据加密密钥数据加密密钥TMK:Terminal Master Key,终端主密钥,在 RACAL 加密机中,指主机与终端 ATM/POS 间的传输主密钥,在密钥体系中处于中间层,可以通过 LMK 加密后存储在主机数据库中,也可直接存储在加密机中,现在一般为单长度,也有双长度和三倍长度。PIK:PIn Key,PIN 密钥,专用于加密保护 PIN 的工作密钥,在密钥体系中处于最下层,一般通过 LMK 和 ZMK/TMK 加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。在 MDS 中,当采用动态密钥时,PIK 每 12 小时或每 2500 笔交易就必须更换一次(两个条件满足任何一个时更换)PEK:Pin Encrypt Key,PIN 加密密钥,同 PIK。ZPK:Zone Pin Key,区域 PIN 密钥,PIK 的一种,专指主机与主机间的 PIK。TPK:Terminal Pin Key,终端 PIN 密钥,PIK 的一种,专指主机与终端间的 PIK。MAK:Mac Key,Mac 密钥,专用于计算 MAC 的工作密钥,在密钥体系中处于最下层,一般通过 LMK 和 ZMK/TMK 加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。在 MDS 中,当采用动态密钥时,PIK 每 12 小时或每 2500 笔交易就必须更换一次(两个条件满足任何一个时更换)ZAK:Zone Authenticate Key,区域认证密钥,MAK 的一种,专指主机与主机间的 MAK。TAK:Terminal Authenticate Key,终端认证密钥,MAK 的一种,专指主机与终端间的 MAK。''DEK:Data Encrypt Key,数据加密密钥,专用于加密数据的密钥,在密钥体系中处于最下层,一般通过 LMK 和 ZMK/TMK 加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。在 MDS 中,当采用动态密钥时,PIK 每 12 小时或每 2500 笔交易就必须更换一次(两个条件满足任何一个时更换)ZEK:Zone Encrypt Key,区域加密密钥,见 DEK,专指主机与主机间的数据加密密钥。TEK:Terminal Encrypt Key,终端加密密钥,见 DEK,专指主机与终端间的数据加密密钥。CVK:Card Verification Key,卡校验密钥,专用于校验卡真伪的工作密钥,在密钥体系中处于最下层,一般通过 LMK 加密后存储在数据库中,也有直接存储在加密机中,密钥由两个单长度密钥组成,分别称为 CVKA和 CVKB,合起来叫 CVK pairs,CVK 一般数据年更新一次。PVK:Pin Verification Key,PIN 校验密钥,专指用于计算 PVV 的工作密钥,在密钥体系中处于最下层,一般通过 LMK 加密后存储在数据库中,也有直接存储在加密机中,密钥由两个单长度密钥组成,分别称为PVKA 和 PVKB,合起来叫 PVK pairs,CVK 一般数据年更新一次。PIN:Personal Identify Number,个人识别码,即卡密码,在 ANSI9.8标准中,规定为同 4-12 位 0-9 的数字组成,在中国一般采用 4 位或 6 位PIN。PINBlock:PIN 块,指将 PIN 按指定格式生成的 64 位数据。PVV:Pin Verification Value,PIN 校验值,是指当采用 ABA 算法校验 PIN 时,用 PVK 对 PIN、主帐号等信息加密生成的 4 位数字的校验值。PAN:Private Account Number,主帐号,即卡号或帐号。CVV:Card Verification Value,卡校验值,是指用 CVK 对卡号、服务码、卡有效期进行加密生成的用来校验卡的合法性的 3 位数字的校验值。CVC:Card Verification Code,卡校验码,同 CVV,用于 VISA。''CVV1:Card Verifycation Value 1,CVV 的一种,与 CVV2 相比,计算参数中服务码不同。CVV2:Card Verifycation Value 2, CVV 的一种,与 CVV1 相比,计算参数中服务码不同。ICVV:ICard Verification Value,VISA 中用于 IC 卡的仿磁卡业务中,与 CVV 计算方法同,其服务代码为999 。MAC:Message Authentication Code,消息认证码,用于鉴别数据真实性的加密结果,按要求 MAC 由 32-64 位数据 (8-16 个 16 进制字符)组成。TAC:Transaction Authentication Code,交易认证码,在 IC 卡中用于验证交易正确性。MK:Master Key,主密钥,IC 卡业务中的各级应用主密钥。2.4 IC 卡业务密钥卡业务密钥SK:Session Key,过程密钥/会话密钥,IC 卡业务中用主密钥对过程数据(Session Data)进行 3DES 加密或其它方式处理得到的单长度或双长度密钥,用于计算 MAC 或加密数据。HSMK1:主密钥一,SJL05 金卡版本的 IC 卡密钥区中,保留的加密机主密钥。HSMK2:主密钥二,SJL05 金卡版本的 IC 卡密钥区中,用于存储或读取次主密钥时对其进行加密保护。SHSMK:次主密钥,SJL05 金卡版本的 IC 卡密钥区中,对应存储 IC卡业务的各级应用主密钥,也可用于存储 IC 卡传输主密钥。''2.5 密钥管理体系密钥管理体系2.6 涉及的国家(际)标准涉及的国家(际)标准ANSI X3.92 数据加密算法;ANSI X9.9 信息鉴别;ANSI X9.8 PIN 的管理与安全;ANSI X9.17 密钥管理;ANSI X9.19 零售金融信息的鉴别;中国人民银行金融 IC 卡规范 PBOC;VISA 及 MASTER 对硬件加密机的相关需求。''3算法介绍算法介绍3.1 简述简述金融数据加密机中主要用到的算法为对称算法,具体如下:1) DES 算法2) 3DES 算法3) 金融专用算法4) Double-one-way5) Secure Calculation(安全计算)6) 密钥分散算法7) MAC 算法8) TAC 算法9) 密钥校验值(CheckValue)在以下说明中,有如下简称:u8 unsigned char 3.2 算法描述算法描述DES 算法算法函数原型:void des_64by64(u8 in8, u8 out8, u8 k8, int op)3DES 算法算法函数原型:void des_64by128(u8 in8, u8 out8, u8 k16, int op)void des_64by192(u8 in8, u8 out8, u8 k24, int op)void des_128by128(u8 in16, u8 out16, u8 k16, int op)void des_128by192(u8 in16, u8 out16, u8 k24, int op)''void des_192by128(u8 in24, u8 out24, u8 k16, int op)void des_192by192(u8 in24, u8 out24, u8 k24, int op)计算过程:3DES 算法中,如果使用双长度(16 字节)密钥 K(KL|KR) ,将 8 字节明文数据块加密成密文数据块,如下所示:Y DES(KL)DES-1(KR)DES(KLX)解密的方式如下:X DES-1 (KL)DES(KR) DES-1 (KLY)注意:DES 为加密, DES-1为解密金融专用算法金融专用算法函数原型:void sms_64by64(u8 in8, u8 out8, u8 k8, int op)void sms_128by128(u8 in16, u8 out16, u8 k16, int op)void sms_64by128(u8 in8, u8 out8, u8 k16, int op)Double-one-way函数原型:void double_one_way(u8 in8, u8 out8, u8 key16)Double-one-way 是计算临时密钥算法的一种,用于双字节的密钥分散单字节的临时密钥,过程如下:(设 MK 的左半部份为 LK,右半部分为 RK)1)用 LK 对输入数据解密2)用 RK 对第 1 步结果加密3)用 LK 对第 2 步结果解密4)第 3 步结果与输入数据异或''密钥分散算法密钥分散算法函数原型:void deduce_session_key(u8 in8, u8 out8, u8 k16)void deduce_sub_key(u8 *data, u8 dpk16, u8 mpk16, int times)void deduce_sub_key_single(u8 *data, u8 dpk8, u8 mpk8, int times)简称 Diversify,是指将一个双长度的密钥 MK,对分散数据进行处理,推导出一个双长度的密钥 DK。推导 DK 左半部分的方法是:1) 将分散数据的最右 16 个数字作为输入数据;2) 将 MK 作为加密密钥;3) 用 MK 对输入数据进行 3DES 运算;推导 DK 右半部分的方法是:1) 将分散数据的最右 16 个数字求反,作为输入数据;2) 将 MK 作为加密密钥;3) 用 MK 对输入数据进行 3DES 运算。Secure Calculation(安全计算)(安全计算)函数原型:void secure_calculate(u8 in24, u8 out8, u8 k8)Secure Calculation 是对数据运算的一种方法,当主密钥分散出子密钥,子密钥导出临时密钥后对输入的 24 字节数据运算的方法。过程如下:(设输入的 24 字节数据从左到右分为 Data1,Data2,Data3)1) 用 KEY 对 Data3 进行 DES 加密;2) 用第 1 步的运算结果做为 KEY 对 Data1 解密;3) 用第 2 步运算结果与 Data2 异或;4) 用第 3 步运算结果作为 KEY 对第 1 步的运算结果解密。''数据加密计算数据加密计算函数原型:int do_icard_des(u8 *in, u8 *out, int *iolen, u8 key8, int op)当明文数据需要加密时,它首先要被格式化为以下形式的数据块:明文数据的长度,不包括填充字符(LD)明文数据填充字符数据加密技术如下所述:1. 用 LD表示明文数据的长度,在明文数据前加上 LD产生新的数据块。2. 将第一步中生成的数据块分解成 8 字节数据块,标号为D1,D2,等等。最后一个数据块长度有可能不足 8。3. 如果最后(或唯一)的数据块长度等于 8 字节,转入第四步;如果不足 8 字节,在右边添十六进制数字'80'。如果长度已达 8 字节,转入第四步;否则,在其右边添加 1 字节 16 进制'0'直到长度达到 8 字节。4. 采用标准方法加密。5. 计算结束后,所有加密后的数据块按原顺序连接在一起。MAC 算法算法由于不同业务的需求,根据相应的规范,对于计算 MAC 的方式也有不同。1.计算磁条卡业务中 MAC 的方式。函数原型:int gen_mcard_mac(u8 *in, u8 out8, u8 ivec8, u8 k8, int len)int gen_mcard_mac_919(u8 *in, u8 out8, u8 ivec8, u8 k24, int len)''int gen_mcard_mac_xor(u8 *in, u8 out8, u8 k8, int len)int gen_mac_ext(u8 *in, u8 *out, u8 *key, int len)gen_mcard_mac 算法过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,则添加 0x00,直到 8 的倍数;2)用密钥对第一步的数据进行 Cbc 加密;3)取第二步运算结果的最后 8 字节作为 MAC。gen_mcard_mac_919 算法过程如下:(密钥必须为 192 位)1)检查 MAC 数据是否为 8 的整数倍。如果不是,则添加 0x00,直到 8 的倍数;2)用密钥的前 8 字节对第一步的数据进行 Cbc 加密;3)用密钥的中间 8 字节对第二步的运算结果的最后 8 字节进行 ecb解密;4)用密钥的后 8 字节对第三步的运算结果进行 ecb 加密,运算的结果作为 MAC。gen_mcard_mac_xor 算法过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,则添加 0x00,直到 8 的倍数;2)将第一步计算的数据按 8 字节分成若干段,每段依次异或,最终得到 8 字节的数据;3)用密钥对第二步的结果进行 ecb 加密,将结果作为 MAC。gen_mac_ext 算法过程如下:与 gen_mcard_mac_xor 算法过程一致。2.计算 IC 卡业务中 MAC 的方式''单倍长密钥int gen_icard_mac(u8 *in, u8 out8, u8 ivec8, u8 k8, int len)int gen_icard_mac_8(u8 *in, u8 out8, u8 ivec8, u8 k8, int len)gen_icard_mac 的计算过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,返回错误;2)用密钥对 MAC 数据采用 CBC 的方式加密;3)将运算结果的后 8 字节作为 MAC。gen_icard_mac_8 的计算过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,则添加 0x80,如果还不够 8 的倍数,则添加 0x00,并直到 8 的倍数为止;如果是8 的倍数,则添加一个 0x80,七个 0x00;2)用密钥对第一步的数据进行 Cbc 加密;3)取第二步运算结果的最后 8 字节作为 MAC。双倍长计算 MACint gen_icard_mac_16(u8 *in, u8 out8, u8 ivec8, u8 k16, int len)gen_icard_mac_16 的计算过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,则添加 0x80,如果还不够 8 的倍数,则添加 0x00,并直到 8 的倍数为止;如果是8 的倍数,则添加一个 0x80,七个 0x00;2)用密钥前 8 字节对第一步的数据进行 Cbc 加密;3)用密钥的后 8 字节对第二步的结果的后 8 字节进行 ecb 解密;4)用密钥的前 8 字节对第三步的结果进行 ecb 加密,并将结果作为MAC。''TAC 算法算法函数原型:int gen_icard_tac(u8 *in, u8 out8, u8 ivec8, u8 k16, int len)int gen_icard_tac_NP(u8 *in, u8 out8, u8 ivec8, u8 k16, int len)gen_icard_tac 的计算过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,则添加 0x80,如果还不够 8 的倍数,则添加 0x00,并直到 8 的倍数为止;如果是8 的倍数,则添加一个 0x80,七个 0x00;2)将密钥的前 8 字节与后 8 字节相互异或;3)用第二步的结果作为密钥对第一步的结果进行 cbc 加密;4)将第三步结果的后 8 字节作为 MAC。gen_icard_tac_NP 的计算过程如下:1)检查 MAC 数据是否为 8 的整数倍。如果不是,返回错误;2)将密钥的前 8 字节与后 8 字节相互异或;3)用第二步的结果作为密钥对第一步的结果进行 cbc 加密;4)将第三步结果的后 8 字节作为 MAC。密钥校验值(密钥校验值(CheckValue)void gen_check_value(u8 *in, u8 *out, u16 keylen)密钥的 CheckValue 指密钥对 8Byte 的”00”加密结果(可能只取几个字节)计算过程:1. 用密钥(*in)对 8 字节的全 0 加密;2.将加密机的结果作为校验值(CheckValue) 。''CVVCVN2 计算数据源计算数据源计算CVN2的数据源包括:主账号(PAN)卡失效期(格式为YYMM,无卡失效期的借记卡可采用0000)常数000(等同于计算CVN 时的数据元素-服务代码)示例 : 19 位PAN、4 位卡失效期和3 位长常数“000”组成26 个字符CVN2 数据源。双倍长计算双倍长计算 MAC计算CVN2时使用二个64位的验证密钥,KeyA和KeyB。计算步骤如下:(1)将数据源扩展成128位二进制数据(不足128位右补二进制0);(2) 将128位二进制数据分成两个64位的数据块。最左边的64位为Block1,最右边的64位为Block2;(3)使用KeyA对Block1进行加密;(4)将Block1的加密结果与Block2进行异或。使用KeyA对异或结果进行加密;(5)使用KeyB对加密结果进行解密;(6)使用KeyA对解密结果进行加密;(7)从左至右将加密结果中的数字(09)抽出,组成一组数字;(8)从左至右将加密结果中的字符(AF)抽出,减10后将余数组成一组数字,排列在步骤(7)的数字之后;(9)步骤(8)的左边第一组三位数即为CVN2值。

    注意事项

    本文(金融行业密钥基础知识资料.doc)为本站会员(一***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开