金融行业密钥基础知识1密钥管理SJL05金融数据加密机采用三级密钥管理方法(遵循ANSIX9.17标准),其密钥层次如下图:图1.1密钥层次1.1各种密钥在密钥层次中的作用1.1.1本地主密钥(LocalMasterKey)又称主机主密钥(MasterKey),主要用来保护它下一级的区域主密钥(ZoneMasterKey)(银行主密钥(BankMasterKey)、终端主密钥(TerminalMasterKey))。当区域主密钥需要导出或保存到加密机以外时,通常需要用本地主密钥(或衍生的密钥对)加密区域主密钥。这一点在RACAL系列的加密机中有最好的体现,在RACAL加密机中,区域主密钥都由主机主密钥加密存放于主机数据库中,加密机不保存区域主密钥。1.1.2区域主密钥主要有两种,一种是金卡中心与成员行之间的传输密钥(通常称本地主密钥区域主密钥钥数据密钥为银行主密钥),另一种是成员行主机与ATM或POS之间的传输密钥(通常称为终端主密钥)。它主要用来加密下一层次的数据密钥(如:PIK、MAK)。1.1.3数据加密密钥(DateEncryptKey)又称工作密钥(WorkingKey),是最终用于加密传输数据的密钥,其上层两种密钥可以称为密钥加密/交换密钥(KeyEncrypt/ExchangeKey,简称KEK)。数据密钥一般分为两种,一种是用来加密PIN的密钥称为PIK(PinKey),另一种是用来计算MAC的密钥称为MAK(MacKey)。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:LocalMasterKey,本地主密钥,又称为文件主密钥(MDS)、加密机主密钥、主机主密钥,在密钥体系中处于最上层,以明文存储在加密机中,加密保护存储在加密机外的其它密钥。LMK一般为双长度密钥,也有三倍长度密钥。2.2区域主密钥ZMK:ZoneMasterKey,区域主密钥,在RACAL加密机中,指主机与主机间的传输主密钥。在密钥体系中处于中间层,可以通过LMK加密后存储在主机数据库中,也可直接存储在加密机中,一般为双长度,也有单长度和三倍长度密钥。用于主机间动态分发工作密钥时对其进行加密保护BMK:BankMasterKey,银行主密钥,同ZMK,多用于金卡联网,在金卡联网中,有时POS和银行主机之间也使用BMK。MMK:MemberMasterKey,成员行主密钥,同ZMK。多用于金卡联网SMK:SharedMasterKey,共享主密钥,同ZMK.2.3数据加密密钥TMK:TerminalMasterKey,终端主密钥,在RACAL加密机中,指主机与终端ATM/POS间的传输主密钥,在密钥体系中处于中间层,可以通过LMK加密后存储在主机数据库中,也可直接存储在加密机中,现在一般为单长度,也有双长度和三倍长度。PIK:PInKey,PIN密钥,专用于加密保护PIN的工作密钥,在密钥体系中处于最下层,一般通过LMK和ZMK/TMK加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。在MDS中,当采用动态密钥时,PIK每12小时或每2500笔交易就必须更换一次(两个条件满足任何一个时更换)PEK:PinEncryptKey,PIN加密密钥,同PIK。ZPK:ZonePinKey,区域PIN密钥,PIK的一种,专指主机与主机间的PIK。TPK:TerminalPinKey,终端PIN密钥,PIK的一种,专指主机与终端间的PIK。MAK:MacKey,Mac密钥,专用于计算MAC的工作密钥,在密钥体系中处于最下层,一般通过LMK和ZMK/TMK加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。在MDS中,当采用动态密钥时,PIK每12小时或每2500笔交易就必须更换一次(两个条件满足任何一个时更换)ZAK:ZoneAuthenticateKey,区域认证密钥,MAK的一种,专指主机与主机间的MAK。TAK:TerminalAuthenticateKey,终端认证密钥,MAK的一种,专指主机与终端间的MAK。DEK:DataEncryptKey,数据加密密钥,专用于加密数据的密钥,在密钥体系中处于最下层,一般通过LMK和ZMK/TMK加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。在MDS中,当采用动态密钥时,PIK每12小时或每2500笔交易就必须更换一次(两个条件满足任何一个时更换)ZEK:ZoneEncryptKey,区域加密密钥,见DEK,专指主机与主机间的数据加密密钥。TEK:TerminalEncryptKey,终端加密密钥,见DEK,专指主机与终端间的数据加密密钥。CVK:CardVerificationKey,卡校验密钥,专用于校验卡真伪的工作密钥,在密钥体系中处于最下层,一般通过LMK加密后存储在数据库中,也有直接存储在加密机中,密钥由两个单长度密钥组成,分别称为CVKA和CVKB,合起来叫CVKpairs,CVK一般数据年更新一次。PVK:PinVerificationKey,PIN校验密钥,专指用于计算PVV的工作密钥,在密钥体系中处于最下层,一般通过LMK加密后存储在数据库中,也有直接存储在加密机中,密钥由两个单长度密钥组成,分别称为PVKA和PVKB,合起来叫PVKpairs,CVK一般数据年更新一次。PIN:PersonalIdentifyNumber,个人识别码,即卡密码,在ANSI9.8标准中,规定为同4-12位0-9的数字组成,在中国一般采用4位或6位PIN。PINBlock:PIN块,指将PIN按指定格式生成的64位数据。PVV:PinVerificationValue,PIN校验值,是指当采用ABA算法校验PIN时,用PVK对PIN、主帐号等信息加密生成的4位数字的校验值。PAN:PrivateAccountNumber,主帐号,即卡号或帐号。CVV:CardVerificationValue,卡校验值,是指用CVK对卡号、服务码、卡有效期进行加密生成的用来校验卡的合法性的3位数字的校验值。CVC:CardVerificationCode,卡校验码,同CVV,用于VISA。CVV1:CardVerifycationValue1,CVV的一种,与CVV2相比,计算参数中服务码不同。CVV2:CardVerifycationValue2,CVV的一种,与CVV1相比,计算参数中服务码不同。ICVV:ICardVerificationValue,VISA中用于IC卡的仿磁卡业务中,与CVV计算方法同,其服务代码为‘999’。MAC:MessageAuthenticationCode,消息认证码,用于鉴别数据真实性的加密结果,按要求MAC由32-64位数据(8-16个16进制字符)组成。TAC:TransactionAuthenticationCode,交易认证码,在IC卡中用于验证交易正确性。MK:MasterKey,主密钥,IC卡业务中的各级应用主密钥。2.4IC卡业务密钥SK:SessionKey,过程密钥/会话密钥,IC卡业务中用主密钥对过程数据(SessionData)进行3DES加密或其它方式处理得到的单长度或双长度密钥,用于计算MAC或加密数据。HSMK1:主密钥一,SJL05金卡版本的IC卡密钥区中,保留的加密机主密钥。HSMK2:主密钥二,SJL05金卡版本的IC卡密钥区中,用于存储或读取次主密钥时对其进行加密保护。SHSMK:次主密钥,SJL05金卡版本的IC卡密钥区中,对应存储IC卡业务的各级应用主密钥,也可用于存储IC卡传输主密钥。2.5密钥管理体系2.6涉及的国家(际)标准ANSIX3.92数据加密算法;ANSIX9.9信息鉴别;ANSIX9.8PIN的管理与安全;ANSIX9.17密钥管理;ANSIX9.19零售金融信息的鉴别;中国人民银行金融IC卡规范PBOC;VISA及MASTER对硬件加密机的相关需求。3算法介绍3.1简述金融数据加密机中主要用到的算法为对称算法,具体如下:1)DES算法2)3DES算法3)金融专用算法4)Double-one-way5)SecureCalculation(安全计算)6)密钥分散算法7)MAC算法8)TAC算法9)密钥校验值(CheckValue)在以下说明中,有如下简称:u8――unsignedchar3.2算法描述DES算法函数原型:voiddes_64by64(u8in[8],u8out[8],u8k[8],intop)3DES算法函数原型:voiddes_64by128(u8in[8],u8out[8],u8k[16],intop)voiddes_64by192(u8in[8],u8out[8],u8k[24],intop)voiddes_128by128(u8in[16],u8out[16],u8k[16],intop)voiddes_128by192(u8in[16],u8out[16],u8k[24],intop)voiddes_192by128(u8in[24],u8out[24],u8k[16],intop)voiddes_192by192(u8in[24],u8out[24],u8k[24],intop)计算过程:3DES算法中,如果使用双长度(16字节)密钥K=(