金融行业密钥基础知识Word文档下载推荐.docx
- 文档编号:22613128
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:72.34KB
金融行业密钥基础知识Word文档下载推荐.docx
《金融行业密钥基础知识Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《金融行业密钥基础知识Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
一种是金卡中心与成员行之间的数据密钥,一种是成员行主机与ATM或POS之间的数据密钥。
前一种数据密钥可以由金卡中心主动向下分发,也可以由成员行主动向上申请。
数据密钥在传输过程中由金卡中心与成员行之间共享的银行主密钥加密,成员行接收到数据密钥后都需要验证其正确性后才会启用新的数据密钥。
后一种数据密钥每天由ATM或POS签到申请,由加密机随机产生,并由终端主密钥加密传送。
金卡中心与成员行及其终端(ATM、POS)之间的密钥关系如下图:
图6.2金卡中心、成员行、终端之间密钥关系示意
图6.2中各符号的含义如下:
BMK:
银行主密钥
TMK:
终端主密钥
PIK1:
金卡中心与成员行之间的PIK
MAK1:
金卡中心与成员行之间的MAK
PIK2:
成员行与终端(ATM、POS)之间的PIK
MAK2:
成员行与终端(ATM、POS)之间的MAK
DATA:
传输的数据
(PIK1)BMK:
被BMK加密的PIK1
2术语解释
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加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。
ZAK:
ZoneAuthenticateKey,区域认证密钥,MAK的一种,专指主机与主机间的MAK。
TAK:
TerminalAuthenticateKey,终端认证密钥,MAK的一种,专指主机与终端间的MAK。
DEK:
DataEncryptKey,数据加密密钥,专用于加密数据的密钥,在密钥体系中处于最下层,一般通过LMK和ZMK/TMK加密后存储在数据库中,也有直接存储在加密机中的,密钥长度有单长度、双倍长度和三倍长度。
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-way
5)SecureCalculation(安全计算)
6)密钥分散算法
7)MAC算法
8)TAC算法
9)密钥校验值(CheckValue)
在以下说明中,有如下简称:
u8――unsignedchar
3.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=(KL||KR),将8字节明文数据块加密成密文数据块,如下所示:
Y=DES(KL)[DES-1(KR)[DES(KL[X])]]
解密的方式如下:
X=DES-1(KL)[DES(KR)[DES-1(KL[Y])]]
注意:
DES为加密,DES-1为解密
金融专用算法
voidsms_64by64(u8in[8],u8out[8],u8k[8],intop)
voidsms_128by128(u8in[16],u8out[16],u8k[16],intop)
voidsms_64by128(u8in[8],u8out[8],u8k[16],intop)
Double-one-way
voiddouble_one_way(u8in[8],u8out[8],u8key[16])
Double-one-way是计算临时密钥算法的一种,用于双字节的密钥分散单字节的临时密钥,过程如下:
(设MK的左半部份为LK,右半部分为RK)
1)用LK对输入数据解密
2)用RK对第1步结果加密
3)用LK对第2步结果解密
4)第3步结果与输入数据异或
密钥分散算法
voiddeduce_session_key(u8in[8],u8out[8],u8k[16])
voiddeduce_sub_key(u8*data,u8dpk[16],u8mpk[16],inttimes)
voiddeduce_sub_key_single(u8*data,u8dpk[8],u8mpk[8],inttimes)
简称Diversify,是指将一个双长度的密钥MK,对分散数据进行处理,推导出一个双长度的密钥DK。
推导DK左半部分的方法是:
1)将分散数据的最右16个数字作为输入数据;
2)将MK作为加密密钥;
3)用MK对输入数据进行3DES运算;
推导DK右半部分的方法是:
1)将分散数据的最右16个数字求反,作为输入数据;
3)用MK对输入数据进行3DES运算。
SecureCalculation(安全计算)
voidsecure_calculate(u8in[24],u8out[8],u8k[8])
SecureCalculation是对数据运算的一种方法,当主密钥分散出子密钥,子密钥导出临时密钥后对输入的24字节数据运算的方法。
过程如下:
(设输入的24字节数据从左到右分为Data1,Data2,Data3)
1)用KEY对Data3进行DES加密;
2)用第1步的运算结果做为KEY对Data1解密;
3)用第2步运算结果与Data2异或;
4)用第3步运算结果作为KEY对第1步的运算结果解密。
数据加密计算
intdo_icard_des(u8*in,u8*out,int*iolen,u8key[8],intop)
当明文数据需要加密时,它首先要被格式化为以下形式的数据块:
——明文数据的长度,不包括填充字符(LD)
——明文数据
——填充字符
数据加密技术如下所述:
1.用LD表示明文数据的长度,在明文数据前加上LD产生新的数据块。
2.将第一步中生成的数据块分解成8字节数据块,标号为D1,D2,等等。
最后一个数据块长度有可能不足8。
3.如果最后(或唯一)的数据块长度等于8字节,转入第四步;
如果不足8字节,在右边添十六进制数字'
80'
。
如果长度已达8字节,转入第四步;
否则,在其右边添加1字节16进制'
0'
直到长度达到8字节。
4.采用标准方法加密。
5.计算结束后,所有加密后的数据块按原顺序连接在一起。
MAC算法
由于不同业务的需求,根据相应的规范,对于计算MAC的方式也有不同。
1.计算磁条卡业务中MAC的方式。
intgen_mcard_mac(u8*in,u8out[8],u8ivec[8],u8k[8],intlen)
intgen_mcard_mac_919(u8*in,u8out[8],u8ivec[8],u8k[24],intlen)
intgen_mcard_mac_xor(u8*in,u8out[8],u8k[8],intlen)
intgen_mac_ext(u8*in,u8*out,u8*key,intlen)
●gen_mcard_mac算法过程如下:
1)检查MAC数据是否为8的整数倍。
如果不是,则添加0x00,直到8的倍数;
2)用密钥对第一步的数据进行Cbc加密;
3)取第二步运算结果的最后8字节作为MAC。
●gen_mcard_mac_919算法过程如下:
(密钥必须为192位)
4)检查MAC数据是否为8的整数倍。
5)用密钥的前8字节对第一步的数据进行Cbc加密;
6)用密钥的中间8字节对第二步的运算结果的最后8字节进行ecb解密;
7)用密钥的后8字节对第三步的运算结果进行ecb加密,运算的结果作为MAC。
●gen_mcard_mac_xor算法过程如下:
8)检查MAC数据是否为8的整数倍。
9)将第一步计算的数据按8字节分成若干段,每段依次异或,最终得到8字节的数据;
10)用密钥对第二步的结果进行ecb加密,将结果作为MAC。
●gen_mac_ext算法过程如下:
与gen_mcard_mac_xor算法过程一致。
2.计算IC卡业务中MAC的方式
●单倍长密钥
intgen_icard_mac(u8*in,u8out[8],u8ivec[8],u8k[8],intlen)
intgen_icard_mac_8(u8*in,u8out[8],u8ivec[8],u8k[8],intlen)
gen_icard_mac的计算过程如下:
11)检查MAC数据是否为8的整数倍。
如果不是,返回错误;
12)用密钥对MAC数据采用CBC的方式加密;
13)将运算结果的后8字节作为MAC。
gen_icard_mac_8的计算过程如下:
如果不是,则添加0x80,如果还不够8的倍数,则添加0x00,并直到8的倍数为止;
如果是8的倍数,则添加一个0x80,七个0x00;
●双倍长计算MAC
intgen_icard_mac_16(u8*in,u8out[8],u8ivec[8],u8k[16],intlen)
gen_icard_mac_16的计算过程如下:
2)用密钥前8字节对第一步的数据进行Cbc加密;
3)用密钥的后8字节对第二步的结果的后8字节进行ecb解密;
4)用密钥的前8字节对第三步的结果进行ecb加密,并将结果作为MAC。
TAC算法
intgen_icard_tac(u8*in,u8out[8],u8ivec[8],u8k[16],intlen)
intgen_icard_tac_NP(u8*in,u8out[8],u8ivec[8],u8k[16],intlen)
gen_icard_tac的计算过程如下:
2)将密钥的前8字节与后8字节相互异或;
3)用第二步的结果作为密钥对第一步的结果进行cbc加密;
4)将第三步结果的后8字节作为MAC。
gen_icard_tac_NP的计算过程如下:
密钥校验值(CheckValue)
voidgen_check_value(u8*in,u8*out,u16keylen)
密钥的CheckValue指密钥对8Byte的”00”加密结果(可能只取几个字节)
1.用密钥(*in)对8字节的全0加密;
2.将加密机的结果作为校验值(CheckValue)。
CVV
●CVN2计算数据源
计算CVN2的数据源包括:
——主账号(PAN)
——卡失效期(格式为YYMM,无卡失效期的借记卡可采用0000)
——常数000(等同于计算CVN时的数据元素-服务代码)
示例:
19位PAN、4位卡失效期和3位长常数“000”组成26个字符CVN2数据源。
计算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)从左至右将加密结果中的数字(0-9)抽出,组成一组数字;
(8)从左至右将加密结果中的字符(A-F)抽出,减10后将余数组成一组数字,排列在步骤(7)的数字之后;
(9)步骤(8)的左边第一组三位数即为CVN2值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 金融 行业 密钥 基础知识