2024年4月26日发(作者:)
加密(或解密)。
转换PIN从PIK加密到TMK加密
<0
X
6E>
说明:用PIK解密PIN Block,用TMK加密后输出
消息格式:
输入域
命令
银行密钥索引号
终端密钥索引号
PIK密文
PIN密文
主帐号1
主帐号2
输出域
应答码
PIN
或
应答码
错误码
长度
1
2
2
8
8
8
8
长度
1
8
1
1
类型
H
H
H
H
H
H
H
类型
A
H
A
H
备注
0x6E
BMK加密的PIK
PIK加密的PIN Block
备注
“A”
用TMK加密后的PIN Block
“E”
0x 0C:非法银行主密钥索引号
0x 0D:非法终端主密钥索引号
0x05:没有终端主密钥
0x1C:无银行主密钥
SJL05处理过程:
1) 读出银行主密钥和终端主密钥
2) 用银行主密钥解密得到PIK明文,用PIK明文解密得到PIN明文
3) PIN与主帐号1和主帐号2异或
4) 用终端主密钥加密上一步的结果并输出
卫士通信息产业股份有限公司 /
- 85 -
生成用ZMK和RSA加密的随机密钥
<0
X
70>
说明:生成随机密钥,分别用ZMK和RSA公钥加密(无补位)后返回。
消息格式:
输入域
命令
银行索引号
模长
RSA公钥
输出域
应答码
KEY1
KEY2LEN
长度
1
2
2
N
长度
1
16
2
类型
H
H
H
H
类型
A
H
H
备注
0x70
区域主密钥索引号
RSA模长
位数等于模长
备注
“A”
用ZMK加密后的随机密钥
用RSA公钥加密后的随机密钥
长度
KEY2
或
应答码
错误码
N
1
1
H
A
H
用RSA公钥加密后的随机密钥
“E”
0x 0C:非法银行主密钥索引号
0x 02:无银行主密钥
SJL05处理过程:
1) 生成128位随机密钥DK;
2) 取出指定的区域主密钥ZMK,用ZMK对DK做3DES加密,
得到密文密钥C_DK1;
3) 用RSA公钥对DK做加密,得到密文密钥C_DK2;
4) 如果成功,返回C_DK1、C_DK2的长度及C_DK2。
卫士通信息产业股份有限公司 /
- 86 -
用输入密钥对数据加/解密<0
X
71>
说明:利用输入的16字节密钥对数据做3DES/DES的CBC或ECB加密
消息格式:
输入域
命令
银行索引号
密钥KEY
初始向量
加/解密标识
算法标识
长度
1
2
16
8
1
1
类型
H
H
H
H
H
H
备注
0x71
区域主密钥索引号
加/解数据的密钥密文
CBC加密的初始向量
1为加密,0为解密
第0位:ECB=0,CBC=1
第1位:3DES=0,DES=1
LEN
数据
输出域
应答码
LEN
DATA
2
N
长度
1
2
N
H
H
类型
A
H
H
处理数据的长度
N=LEN
备注
“A”
返回数据长度
输入数据补齐8的整数倍长度
后的加密结果
或
应答码
错误码
1
1
A
H
“E”
0x 0C:非法银行主密钥索引号
0x 59:输入的数据长度错误
0x 2C:非法银行主密钥
0x 10: 无效的算法模式
SJL05处理过程:
卫士通信息产业股份有限公司 /
- 87 -
1) 取出指定的区域主密钥ZMK;
2) 用ZMK对输入的密钥KEY做3DES解密,得到密钥明文PKEY;
3) 检查输入数据长度是否为8的倍数,不是,补0x00使之长度为
8的倍数;
4) 根据加/解密标识和算法标识,用PKEY对DATA做3DES/DES
的CBC/ECB加密或解密。
5) 如果成功,返回加密或解密的结果及其长度。
卫士通信息产业股份有限公司 /
- 88 -
用区域主密钥对数据加/解密<0
X
72>
说明:用指定的区域主密钥以输入数据做3DES/DES的ECB或CBC加/
解密
消息格式:
输入域
命令
区域主密钥索引
初始向量
加/解密标识
算法标识
长度
1
2
8
1
1
类型
H
H
H
H
H
备注
0x72
CBC加密的初始向量
1为加密,0为解密
第0位:ECB=0,CBC=1
第1位:3DES=0,DES=1
LEN
数据
输出域
应答码
LEN
DATA
2
N
长度
1
2
N
H
H
类型
A
H
H
处理数据的长度
N=LEN
备注
“A”
返回数据长度
输入数据补齐8的整数倍长度
后的加密结果
或
应答码
错误码
1
1
A
H
“E”
0x 0C:非法银行主密钥索引号
0x 59:输入的数据长度错误
0x 2C:非法银行主密钥
0x 10:无效的DES算法模式
SJL05处理过程
1) 取出指定的区域主密钥ZMK;
2) 检查送入数据长度是否为8的倍数,如果不是,补0x00;
3) 根据加/解密标识和算法标识,用ZMK对补齐后的数据进行
卫士通信息产业股份有限公司 /
- 89 -
DES/3DES 的CBC/ECB加密或解密;
4) 如果成功,返回加密或解密的结果及其长度。
卫士通信息产业股份有限公司 /
- 90 -
数据密钥转换<0
X
73>
说明:用私钥将公钥加密(无补位)的数据密钥解密,再重新用指定的区
域主密钥加密。
消息格式:
输入域
命令
银行索引号
RSA密钥索引
口令
LEN
数据
输出域
应答码
KEY
长度
1
2
2
8
2
N
长度
1
16
类型
H
H
H
A
H
H
类型
A
H
备注
0x73
区域主密钥索引号
RSA密钥索引
RSA密钥访问口令
处理数据的长度
N=LEN
备注
“A”
用指定区域主密钥加密的数据
密钥
或
应答码
错误码
1
1
A
H
“E”
0x 0C:非法银行主密钥索引号
0x 02:无银行主密钥
0x C2:数据长度错误
0xC1:非法的RSA索引号
0xCB:无RSA密钥
0xC4:RSA口令验证失败
SJL05处理过程:
1) 验证RSA访问口令;
2) 取出指定的RSA私钥,用私钥对数据进行解密,得到明文数据
密钥DK;
卫士通信息产业股份有限公司 /
- 91 -
3) 取出指定的区域主密钥ZMK;
4) 用ZMK对DK做3DES加密,得到密钥密钥密文C_DK;
5) 如果成功,返回密钥密文C_DK。
卫士通信息产业股份有限公司 /
- 92 -
转换工作密钥主密钥<0
X
74>
说明:将工作密钥从区域主密钥1加密转换到区域主密钥2加密。
消息格式:
输入域
命令
区域主密钥1索引
工作密钥
区域主密钥2索引
输出域
应答码
数据密钥
或
应答码
错误码
长度
1
2
16
2
长度
1
16
1
1
类型
H
H
H
H
类型
A
H
A
H
备注
0x74
转换前主密钥
密钥密文
转换后主密钥
备注
“A”
用区域主密钥二加密
“E”
0x0C:非法银行主密钥索引号
0x 02:无银行主密钥
SJL05处理过程:
1) 取出区域主密钥一ZMK1和区域主密钥二ZMK2;
2) 用ZMK1对输入工作密钥做3DES解密,得到密钥明文P_WK;
3) 用ZMK2对P_WK做3DES加密,得到密钥密文C_WK;
4) 如果成功,返回密钥密文C_WK。
卫士通信息产业股份有限公司 /
- 93 -
转换密钥<0
X
75>
说明:将PIK或MAK从TMK1加密转换为TMK2加密输出
消息格式:
输入域
命令
区域主密钥1索引号
区域主密钥2索引号
终端主密钥1
PIK密文
终端主密钥2
输出域
应答码
PIK
PIK
或
应答码
错误码
长度
1
2
2
8
8
8
长度
1
8
8
1
1
类型
H
H
H
H
H
H
类型
A
H
H
A
H
备注
0x77
用BMK1加密的TMK1
用TMK1加密的PIK
用BMK2加密的TMK2
备注
“A”
用TMK2加密和PIK
用BMK2加密的PIK
“E”
0x 0C:非法银行主密钥索引号
0x 02:无银行主密钥
SJL05处理过程:
1) 取出区域主密钥1和区域主密钥2
2) 解密输入密钥(TMK1,TMK2,PIK)得到相应的明文
3) 用TMK2明文和BMK2加密PIK,得到输出
卫士通信息产业股份有限公司 /
- 94 -
生成用ZMK和RSA加密的随机密钥<0
X
77>
说明:生成两个随机密钥,分别被ZMK和RSA公钥加密(有补位)后返
回。
消息格式:
输入域
命令
区域主密钥索引号
模长
RSA公钥
输出域
应答码
KEY1
KEY2LEN
长度
1
2
2
N
长度
1
16
2
类型
H
H
H
H
类型
A
H
H
备注
0x77
RSA模长
位数等于模长
备注
“A”
用ZMK加密后的随机密钥
用RSA公钥加密后的随机密钥
长度
KEY2
或
应答码
错误码
N
1
1
H
A
H
用RSA公钥加密后的随机密钥
“E”
0x 0C:非法银行主密钥索引号
0x 02:无银行主密钥
SJL05处理过程:
1) 生成128位随机密钥DK;
2) 取出指定的区域主密钥ZMK,用ZMK对DK做3DES加密,
得到密文密钥C_DK1;
3) 用RSA公钥对DK做加密(有补位),得到密文密钥C_DK2;
4) 如果成功,返回C_DK1、C_DK2的长度及C_DK2。
卫士通信息产业股份有限公司 /
- 95 -
数据密钥转换<0
X
78>
说明:用私钥将公钥加密(有补位)的数据密钥解密,再重新用指定的区
域主密钥加密。
消息格式:
输入域
命令
区域主密钥索引号
RSA密钥索引
口令
LEN
数据
输出域
应答码
KEY
长度
1
2
2
8
2
N
长度
1
16
类型
H
H
H
H
H
H
类型
A
H
备注
0x78
RSA密钥索引
RSA密钥访问口令
处理数据的长度
N=LEN
备注
“A”
用指定区域主密钥加密的数据
密钥
或
应答码
错误码
1
1
A
H
“E”
0x0C:非法银行主密钥索引号
0x02:无银行主密钥
0xC2:数据长度错误
0xC1:非法的RSA索引号
0xCB:无RSA密钥
0xC4: RSA口令验证失败
SJL05处理过程:
1) 验证RSA访问口令;
2) 取出指定的RSA私钥,用私钥对数据进行解密,得到明文数据
密钥DK;
3) 取出指定的区域主密钥ZMK;
卫士通信息产业股份有限公司 /
- 96 -
4) 用ZMK对DK做3DES加密,得到密钥密钥密文C_DK;
5) 如果成功,返回C_DK。
卫士通信息产业股份有限公司 /
- 97 -
验证和生成MAC<0
X
80>
说明:用输入密钥验证数据段1MAC,成功后再返回数据段2的MAC。
消息格式:
输入域
命令
MAC密钥
区域主密钥索引
MAC
数据段1长度
数据段1
分割符
数据段2长度
数据段2
输出域
应答码
MAC
或
应答码
错误码
长度
1
8
2
4
2
L1
1
2
L2
长度
1
8
1
1
类型
H
H
H
H
H
H
A
H
H
类型
A
H
A
H
备注
0x80
用区域主密钥加密
MAK加密密钥
需验证的数据段1MAC
验证MAC数据
‘;’
计算MAC数据
备注
“A”
数据段2的MAC
“E”
0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错
(第一个银行的MAK)
0x 2E:无效的MAC长度
0x 2D:MAC验证失败
0x 2 5:无效的MAC数据
SJL05处理过程:
1) 取出指定的区域主密钥ZMK,用ZMK对输入的MAC密钥做
3DES解密,得到密钥明文MAK;
卫士通信息产业股份有限公司 /
- 98 -
2) 用MAK计算数据一的MAC(遵循ANSI X.99标准,初始向量
为8字节0x00),比较计算结果与输入MAC,如果不一致,返
回出错代码EMAC_AUTH(0x2D);
3) 用MAK计算数据二的MAC(遵循ANSI X.99标准,初始向量为
8字节0x00),返回计算结果;
4) 如果成功,返回数据二的MAC。
卫士通信息产业股份有限公司 /
- 99 -
验证MAC<0
X
81>
说明:输入一个MAC和一串MAC数据。计算输入的数据的MAC并与输
入的MAC比较是否相等。
消息格式:
输入域
命令
MAK
区域主密钥索引
MAC
LEN
数据
输出域
应答码
或
应答码
错误码
长度
1
8
2
4
2
N
长度
1
1
1
类型
H
H
H
H
H
A
类型
A
A
H
备注
0x81
用于计算MAC
MAK的主密钥
输入MAC
计算MAC的数据的长度
计算MAC的数据,N=LEN
备注
“A”
“E”
0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29:MAC密钥奇偶校验错
(第一个银行的MAC)
0x 2E:无效的MAC长度
0x 2D:MAC验证失败
SJL05处理过程:
1) 取出指定的区域主密钥ZMK,用ZMK对MAK进行3DES解
密,得到MAK的明文密钥PMAK;
2) 判断PMAK的有效性;
3) 判断MAC数据长度是否为8的倍数,如果不够,用0x00补齐;
卫士通信息产业股份有限公司 /
- 100 -
4) 用PMAK对补齐后数据进行DES_CBC方式加密;
5) 比较最后一段加密结果的前四个字节和输入MAC,一致返回正
确,不一致返回出错代码0x2D。
卫士通信息产业股份有限公司 /
- 101 -
计算卡属性和密文数据的MAC
<0
X
82>
说明:计算卡属性和密文数据的MAC。
消息格式:
输入域
命令
MAK
区域主密钥索引
RED
LEN
数据
输出域
应答码
MAC
或
应答码
错误码
长度
1
8
2
4
2
N
长度
1
8
1
1
类型
H
H
H
H
H
A
类型
A
H
A
H
备注
0x82
用于计算MAC
MAK的主密钥索引号
卡属性
计算MAC的数据的长度
计算MAC的数据,N=LEN
备注
“A”
MAC
“E”
0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错
(第一个银行的MAK)
0x 2E: 无效的MAC长度
SJL05处理过程:
1) 取出指定的区域主密钥ZMK;
2) 用ZMK对MAK做DES解密,得到明文密钥PMAK;
3) 将RED放在MAC数据的前面,组成新的数据DATA;
4) 判断DATA长度是否为8的倍数,如果不是,用0x00补齐;
5) 用PMAK对补齐后的数据做DES CBC加密。
卫士通信息产业股份有限公司 /
- 102 -
6) 如果成功,返回最后一段的加密结果MAC。
卫士通信息产业股份有限公司 /
- 103 -
验证卡属性与数据串的MAC
<0
X
83>
说明:验证由卡属性与数据串的MAC。
消息格式:
输入域
命令
MAK
区域主密钥索引
MAC
RED
LEN
数据
输出域
应答码
MAC
或
应答码
错误码
长度
1
8
2
4
4
2
N
长度
1
8
1
1
类型
H
H
H
H
H
H
A
类型
A
H
A
H
备注
0x83
用于计算MAC
MAK的主密钥索引号
验证的MAC
卡属性
计算MAC的数据的长度
计算MAC的数据,N=LEN
备注
“A”
MAC
“E”
0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错
(第一个银行的MAK)
0x 2E:无效的MAC长度
0x 2D:MAC验证失败
SJL05处理过程:
1) 计算MAC(计算方法参见命令0x82);
2) 比较计算出的MAC与输入的MAC,如果一致,返回;否则,
卫士通信息产业股份有限公司 /
- 104 -
返回错误代码0x2D。
卫士通信息产业股份有限公司 /
- 105 -
2.46
请求产生MAC,并可选择地转换
PIN<0
X
84>
说明:用MAK产生一个MAC。同时当转换PIN标识为1时,可以转换一
个用ATK加密的PIN到PIK加密的PIN。
消息格式:
输入域
命令
区域主密钥索引
转换PIN标志
长度
1
2
1
类型
H
H
H
备注
0x84
MAK的主密钥索引号
0:只计算MAC
1:产生MAC和计算PIN
PIN 8 H PIN密文,ATK加密(标志为
1时才有)
校验码
PIK
MAK
LEN
数据
输出域
应答码
MAC
或
应答码
PIN
MAC
或
应答码
2
8
8
2
N
长度
1
8
1
8
8
1
H
H
H
H
A
类型
A
H
A
H
H
A
(标志为1时才有)
用它加密PIN
用于计算MAC
计算MAC的数据的长度
计算MAC的数据,N=LEN
备注
“A”
计算的MAC值
“A”
用PIK加密的PIN
计算的MAC值
“E”
卫士通信息产业股份有限公司 /
- 106 -
错误码 1 H 0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错
(第一个银行的MAK)
0x 2E:无效的MAC长度
0x 05:无终端主密钥
0x 2D:MAC验证错误
0x 19: PIK密钥奇偶校验错误
(第一个银行的PIK)
0x 2F:无效的加密PIN或MAC
标志
SJL05处理过程:
1) 取出指定的ZMK;
2) 用ZMK对MAK做3DES解密,得到密钥明文PMAK;
3) 验证PMAK有效性;
4) 检查MAC数据长度是否为8的倍数,如果不是,用0x00补齐;
5) 用PMAK对补齐后的数据进行DES CBC方式加密,得到最后
一段的加密结果为MAC;
6) 如果只计算MAC,返回MAC,结束任务;
7) 如果要进行PIN转换,取出ATK;
8) 用ZMK对PIK进行3DES解密,得到明文密钥P_PIK;
9) 验证P_PIK有效性;
10) 取出终端密钥ATK,用ATK对PIN做DES解密,得到PINR
明文P_PIN;
11) 验证P_PIN的有效性;
12) 用P_PIK对P_PIN做DES加密,得到PIN的密文C_PIN。
13) 如果正确,返回C_PIN和MAC。
卫士通信息产业股份有限公司 /
- 107 -
转换MAC<0
X
85>
说明:用解密后MAK1对数据计算MAC,并与输入的MAC进行比较,如
果一致,用解密后的MAK2计算MAC,并返回MAC结果。
消息格式:
输入域
命令
MAK1
区域主密钥1索引
MAK2
区域主密钥2索引
MAC
LEN
MAC数据
输出域
应答码
MAC
或
应答码
错误码
长度
1
8
2
8
2
4
2
N
长度
1
8
1
1
类型
H
H
H
H
H
H
H
H
类型
A
H
A
H
备注
0x85
转换前的MAK
MAK1的主密钥索引号
转换后的MAK
MAK2的主密钥索引号
用MAK1生成的MAC
计算MAC的数据长度
计算MAC的数据,N=LEN
备注
“A”
用MAK2计算的MAC
“E”
0C:非法银行主密钥索引号
2C:非法银行主密钥
29: MAK密钥奇偶校验错(第
一个银行的MAK)
2E:无效的MAC长度
2D:MAC验证失败
SJL05处理过程:
卫士通信息产业股份有限公司 /
- 108 -
1) 取出指定的区域主密钥ZMK1和ZMK2;
2) 用ZMK1对MAK1做3DES解密,得到明文密钥PMAK1;
3) 验证PMAK1有效性;
4) 检查DATA长度是否为8的倍数,如果不是,用0x00补齐;
5) 用PMAK1对补齐的数据做DES CBC加密;
6) 对比最后一段数据加密结果的前四个字节与输入的MAC;
7) 如果不一致,则返回出错代码0x2D;
8) 如果一致,则用ZMK2对MAK2做DES解密,得到明文密钥
PMAK2;
9) 验证PMAK2的有效性;
10) 用PMAK2对补齐的数据做DES CBC加密;
11) 如果成功,返回最后一段数据加密结果MAC。
卫士通信息产业股份有限公司 /
- 109 -
转换一个MAC和PIN<0
X
86>
说明:从银行一到银行二,转换一个MAC和PIN
消息格式:
输入域
命令
PIN密文
校验码
PIK1
MAK1
区域主密钥1索引
PIN2
MAK2
区域主密钥2索引
MAC
LEN1
MAC数据1
LEN2
MAC数据2
输出域
应答码
PIN
MAC
或
应答码
错误码
长度
1
8
2
8
8
2
8
8
2
4
2
N1
2
N2
长度
1
8
8
1
1
类型
H
H
H
H
H
H
H
H
H
H
H
H
H
H
类型
A
H
H
A
H
备注
0x86
用PIK1加密的PIN
校验码
用于解密PIN
输入MAC的密钥
MAK1的主密钥索引号
加密PIN的密钥
需要生成MAC的密钥
MAK2的主密钥索引号
要转换的MAC
MAC数据1的长度
MAC数据1,N1=LEN1
MAC数据2的长度
MAC数据2,N2=LEN2
备注
“A”
用PIK2加密的PIN
用MAK2计算的MAC
“E”
0x2C:非法银行主密钥
0x 19: PIK密钥奇偶校验错误
(第一个银行的PIK)
卫士通信息产业股份有限公司 /
- 110 -
0x18: PIK密钥奇偶校验错误
(第二个银行的PIK)
0x1D:PIN验证错误
0x 28:MAK密钥奇偶校验错
(第二个银行的MAK)
0x 29: MAK密钥奇偶校验错
(第一个银行的MAK)
0x 2D:MAC验证失败
0x 2E:无效的MAC长度
SJL05处理过程:
1) 取出指定的区域主密钥ZMK1和ZMK2;
2) 用ZMK1对MAK1做DES解密,得到明文密钥PMAK1,用
ZMK1对PIK1做DES解密,得到明文密钥P_PIK1;
3) 验证PMAK1和P_PIK1的有效性;
4) 用P_PIK1对PIN做DES解密,得到其明文P_PIN;
5) 验证P_PIN的有效性;
6) 检查MAC数据一长度是否为8的倍数,如果不是,用0x00补
齐;
7) 用PMAK1对补齐的数据做DES CBC加密,取最后一段数据
加密结果的前四字节为MAC1;
8) 比较MAC1与MAC,如果不一致,返回出错代码0x2D;
9) 用ZMK2对MAK2做DES解密,得到明文密钥PMAK2,用
ZMK2对PIK2做DES解密,得到明文密钥P_PIK2;
10) 验证PMAK2和P_PIK2的有效性;
11) 用P_PIK2对P_PIN做DES加密,得到PIN密文C_PIN;
12) 检查MAC数据二长度是否为8的倍数,如果不是,用0x00补
齐;
13) 用PMAK2对补齐的数据二做DES CBC加密,取最后一段加
卫士通信息产业股份有限公司 /
- 111 -
密结果为数据二的MAC2;
14) 如果成功,返回C_PIN和MAC2。
修改:1)验证码无效,即不将PIN的明文的后四位与验证码相比较;
2)对PIN的明文的第一位16进制数进行检查,若不为’0’,
则报PIN验证失败(1D)。
3)输入的MAC数据2的长度和输入的MAC数据2为新增的内容。
卫士通信息产业股份有限公司 /
- 112 -
请求验证MAC,可选择地验证PIN<0
X
87>
说明:用MAK验证一个MAC。同时当验证PIN标识为1时,可以验证一
个PIN。
消息格式:
输入域
命令
区域主密钥索引
转换PIN标志
长度
1
2
1
类型
H
H
H
备注
0x87
加密MAK的主密钥
0:只计算MAC
1:产生MAC和计算PIN
PIN1
校验码1
PIK1
PIN2
校验码2
PIK2
MAK
MAC
LEN
数据
输出域
应答码
MAC
或
应答码
错误码
8
2
8
8
2
8
8
4
2
N
长度
1
8
1
1
H
H
H
H
H
H
H
H
H
A
类型
A
H
A
H
PIN密文,PIK1加密
用它解密PIN1
PIN密文,PIK2加密
用它解密PIN2
用于计算MAC
将被验证的MAC
计算MAC的数据的长度
计算MAC的数据,N=LEN
备注
“A”
计算的MAC值
“E”
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错
(第一个银行的MAK)
卫士通信息产业股份有限公司 /
- 113 -
0x 2E:无效的MAC长度
0x 2D:MAC验证失败
0x 18: PIK密钥奇偶校验错误
(第二个银行的PIK)
0x 19: PIK密钥奇偶校验错误
(第一个银行的PIK)
0x 1D:PIN验证错误
SJL05处理过程:
1) 取出指定的区域主密钥ZMK;
2) 用ZMK对MAK进行3DES解密,得到明文密钥PMAK;
3) 验证PMAK的有效性;
4) 检查MAC数据长度是否为8的倍数,如果不是,用0x00补齐;
5) 用PMAK对补齐后的数据做DES CBC加密,比较最后一段数
据加密结果的前四字节与输入的MAC;
6) 如果不一致,返回出错代码0x2D;
7) 如果只计算MAC,返回MAC;
8) 如果需要验证PIN,继续下面处理;
9) 用ZMK对PIK1进行3DES解密,得到明文密钥P_PIK1;
10) ZMK对PIK2进行3DES解密,得到明文密钥P_PIK2;
11) 验证P_PIK1与P_PIK2的有效性;
12) 用P_PIK1对PIN1做DES解密,得到PIN1明文P_PIN1;
13) 用P_PIK2对PIN2做DES解密,得到PIN2明文P_PIN2;
14) 验证P_PIN1与P_PIN2的有效性;
15) 比较P_PIN1与P_PIN2,如果一致,返回MAC,否则,返回
PIN认证失败出错代码0x1D。
卫士通信息产业股份有限公司 /
- 114 -
产生随机密钥,用TMK加密后返回<0
X
88>
说明:生成8字节随机工作密钥,并用指定终端主密钥加密返回。
消息格式:
输入域
命令
终端主密钥索引
输出域
应答码
数据密钥
或
应答码
错误码
长度
1
2
长度
1
8
1
1
类型
H
H
类型
A
H
A
H
备注
0x88
加密工作密钥的主密钥
备注
“A”
用终端主密钥加密
“E”
0x 0C:非法银行主密钥索引号
0x 05:无终端主密钥
SJL05处理流程:
1) 取出指定终端主密钥TMK;
2) 生成8字节随机工作密钥DK;
3) 用TMK对DK做DES加密,得到密钥密文C_DK;
4) 如果成功,返回用终端主密钥加密的C_DK。
卫士通信息产业股份有限公司 /
- 115 -
生成弱MAC<0
X
89>
说明:用终端主密钥或输入密钥计算输入数据的弱MAC。
消息格式:
输入域
命令
密钥选择标志
终端主密钥索引
长度
1
1
2
类型
H
H
H
备注
0x89
0:输入密钥; 1:TMK
输入密钥的主密钥或计算
MAC的MAK
MAK
数据长度
MAC数据
输出域
应答码
MAC
或
应答码
错误码
8
2
L
长度
1
4
1
1
H
H
H
类型
A
H
A
H
可选。
MAC数据长度
L=数据长度
备注
“A”
返回MAC
“E”
0x0C:非法银行主密钥索引号
0x05:无终端主密钥
0x2E:无效的MAC长度
0x2F:无效的加密PIN或MAC
标志
SJL05处理过程:
1) 取指定的终端主密钥TMK;
2) 如果密钥标志字节为“0”,用TMK对输入数据密钥做DES解
密,得到MAK;如果密钥标志字节为“1”,MAK=TMK;
3) 用MAK对输入数据计算弱密钥(弱密钥计算方法见附录F),
卫士通信息产业股份有限公司 /
- 116 -
如果正确,返回计算结果MAC。
卫士通信息产业股份有限公司 /
- 117 -
用终端主密钥加密数据<0
X
8A>
说明:用终端主密钥加密输入的8字节数据。
消息格式:
输入域
命令
终端主密钥索引
数据
输出域
应答码
数据
或
应答码
错误码
长度
1
2
8
长度
1
8
1
1
类型
H
H
H
类型
A
H
A
H
备注
0x8A
待加密数据
备注
“A”
用TMK加密
“E”
0x0C:非法银行主密钥索引号
0x05:无终端主密钥
SJL05处理过程:
1) 取出指定终端主密钥TMK;
2) 用TMK对输入数据做3DES加密,得到数据密文C_DATA;
3) 如果正确,返回用TMK加密的C_DATA。
卫士通信息产业股份有限公司 /
- 118 -
用输入密钥对输入数据作加/解密<0
X
8B>
说明:用输入密钥根据标志对输入数据作DES CBC加密或解密。
消息格式:
输入域
命令
加/解密标志
终端主密钥索引
密钥
数据长度
数据
输出域
应答码
返回数据
或
应答码
错误码
长度
1
1
2
8
2
L
长度
1
L
1
1
类型
H
A
H
H
H
H
类型
A
H
A
H
备注
0x8B
‘0’:加密; ‘1’:解密
输入密钥主密钥
用终端主密钥加密
L=数据长度
备注
“A”
L=(输入数据长度+7)/8*8
“E”
0x0C:非法银行主密钥索引号
0x05:无终端主密钥
0x2E:无效的MAC长度
0x2F:无效的加密PIN或MAC
标志
SJL05处理过程:
1) 取出指定的终端主密钥TMK,用TMK对输入密钥做DES解密,
得到密钥明文P_DK;
2) 检查输入数据长度,如果长度不是8的倍数字节,在数据最后
补0x00至长度为8的倍数字节,得到数据DATA;
3) 根据加/解密钥标志,用P_DK对DATA做DES CBC加密或解
卫士通信息产业股份有限公司 /
- 119 -
密,如果正确,返回最后加/解密数据结果。
产生MAC<0
X
8C>
说明:用ANSI 9.19的方式,产生MAC。
消息格式:
输入域
命令
TMK主密钥索引
TMK密文
TMK标志
长度
1
2
16
1
类型
H
H
H
H
备注
0x8C
加密MAK的主密钥
用LMK保护的TMK密文
0-表示TMK已存储在加密机
中;
1-表示TMK密文方式传给加
密机
MAK密文
MAC初始向量
MAC数据长度
MAC数据
输出域
应答码
MAC
或
应答码
错误码
16
8
2
L
长度
1
8
1
1
H
H
H
类型
A
H
A
H
MAK的密文
MAC初始向量
L=MAC数据长度
备注
“A”
计算的MAC
“E”
0x 0D:非法终端主密钥索引号
0x 05:无终端主密钥
0x 27:无本地主密钥
0x10:无效的TMK标志
SJL05处理过程:
1) 如果TMK标志为0时,取出对应TMK索引号下的密钥;如果
卫士通信息产业股份有限公司 /
- 120 -
为1时,则先取出LMK,然后用LMK解密TMK密文;
2) 用TMK明文对MAK进行解密;
3) 采用ANSI 9.19方式产生MAC。
卫士通信息产业股份有限公司 /
- 121 -
校验MAC<0
X
8D>
说明:用ANSI 9.19的方式,校验MAC。
消息格式:
输入域
命令
TMK主密钥索引
TMK密文
TMK标志
长度
1
2
16
1
类型
H
H
H
H
备注
0x8D
加密MAK的主密钥
用LMK保护的TMK密文
0-表示TMK已存储在加密机
中;
1-表示TMK密文方式传给加
密机
MAK密文
MAC初始向量
校验MAC
MAC数据长度
MAC数据
输出域
应答码
或
应答码
错误码
16
8
8
2
L
长度
1
1
1
H
H
H
H
类型
A
A
H
MAK的密文
MAC初始向量
校验用的MAC
L=MAC数据长度
备注
“A”
“E”
0x 0D:非法终端主密钥索引号
0x 05:无终端主密钥
0x 27:无本地主密钥
0x10:无效的TMK标志
SJL05处理过程:
1) 如果TMK标志为0时,取出对应TMK索引号下的密钥;如果
为1时,则先取出LMK,然后用LMK解密TMK密文;
卫士通信息产业股份有限公司 /
- 122 -
2) 用TMK明文对MAK进行解密;
3) 采用ANSI 9.19方式校验MAC。
卫士通信息产业股份有限公司 /
- 123 -
请求产生一个商户MAC<0
X
90>
说明:输入一串MAC数据。计算输入的数据的MAC。
消息格式:
输入域
命令
MAK
附加信息
LEN
MAC数据
输出域
应答码
MAC
或
应答码
错误码
长度
1
16
8
2
N
长度
1
8
1
1
类型
H
H
H
H
H
类型
A
H
A
H
备注
0x90
用它产生PMK
计算MAC的数据长度
计算MAC的数据,N=LEN
备注
“A”
计算的MAC
“E”
0x27:无效的主机主密钥
0x26:MAK密钥奇偶校验错(第
三个银行的MAK)
0x2E:无效的MAC长度
SJL05处理过程:
1) 取出本地主密钥LMK;
2) 用LMK对MCK做3DES解密,得到明文密钥PMCK;
3) 验证PMCK的有效性;
4) 用PMCK对附加信息做3DES加密,得到MAC密钥MAK;
5) 检查MAC数据长度是否为8的倍数,如果不是,用0x00补齐;
6) 用MAK对补齐后的数据做DES CBC加密,返回最后一段数据
卫士通信息产业股份有限公司 /
- 124 -
加密结果为MAC。
卫士通信息产业股份有限公司 /
- 125 -
请求验证一个商户MAC<0
X
91>
说明:输入一个MAC和一串MAC数据,计算输入的数据的MAC并与
消息格式:
输入域
命令
MAK
附加信息
MAC
LEN
MAC数据
输出域
应答码
或
应答码
错误码
长度
1
16
8
4
2
N
长度
1
1
1
类型
H
H
H
H
H
H
类型
A
A
H
备注
0x91
用它产生PMK
用于验证的MAC
计算MAC的数据长度
计算MAC的数据,N=LEN
备注
“A”
“E”
0x27:无效的主机主密钥
0x26: MAK密钥奇偶校验错
(第三个银行的MAK)
0x2E:无效的MAC长度
0x2D:MAC验证失败
SJL05处理过程:
1) 计算MAC(参见0x90命令);
2) 比较计算出的MAC前四个字节与输入的MAC,如果一致,正
确返回,否则,返回MAC认证失败出错代码0x2D。
卫士通信息产业股份有限公司 /
- 126 -
输入的MAC比较是否相等。
用TMK计算
MAC<0
X
92>
说明:用解密后的TMK对附加信息加密,得到MAC密钥PMK,用PMK
对MAC数据作MAC。
消息格式:
输入域
命令
BTMK
附加信息
密钥索引
LEN
MAC数据
输出域
应答码
MAC
或
应答码
错误码
长度
1
8
8
2
2
N
长度
1
8
1
1
类型
H
H
H
H
H
H
类型
A
H
A
H
备注
0x92
用它产生TMK
次主密钥索引号
计算MAC的数据长度
计算MAC的数据,N=LEN
备注
“A”
计算出的MAC
“E”
0x0C:非法银行主密钥索引号
0x2E:无效的MAC长度
SJL05处理过程:
1) 取出指定的区域主密钥ZMK;
2) 用ZMK对bTMK做3DES解密,得到明文密钥TMK;
3) 用TMK对附加信息做DES加密,得到MAC密钥PMK;
4) 检查MAC数据长度是否为8的倍数,如果不是,用0x00补齐;
5) 用MAK对补齐后的数据做DES CBC加密,返回最后一段数据加
密结果为MAC。
卫士通信息产业股份有限公司 /
- 127 -
请求验证用TMK计算的MAC<0
X
93>
说明:输入一个MAC和一串MAC数据,计算输入的数据的MAC并与
消息格式:
输入域
命令
BTMK
附加信息
MAC
LEN
MAC数据
密钥索引
输出域
应答码
或
应答码
错误码
长度
1
8
8
4
2
N
2
长度
1
1
1
类型
H
H
H
H
H
H
H
类型
A
A
H
备注
0x93
用它产生TMK
用于验证的MAC
计算MAC的数据长度
计算MAC的数据,N=LEN
次主密钥的索引号
备注
“A”
“E”
0x0C:非法银行主密钥索引号
0x2E:无效的MAC长度
0x2D:MAC验证失败
SJL05处理过程:
1) 出指定的区域主密钥ZMK;
2) 用ZMK对bTMK做3DES解密,得到明文密钥TMK;
3) 用TMK对附加信息做DES加密,得到MAC密钥PMK;
4) 检查MAC数据长度是否为8的倍数,如果不是,用0x00
补齐;
5) 用MAK对补齐后的数据做DES CBC加密,得到MAC。
卫士通信息产业股份有限公司 /
- 128 -
输入的MAC比较是否相等。
6) 比较计算出的MAC前四个字节与输入的MAC,如果一致,
正确返回,否则,返回MAC认证失败出错代码0x2D。
卫士通信息产业股份有限公司 /
- 129 -
打印PIN<0
X
96>
说明:解密并打印PIN
消息格式:
输入域
命令
KEY
银行主密钥索引
PIN密文
主帐号
附加信息
输出域
应答码
或
应答码
错误码
长度
1
8
2
8
8
1
长度
1
1
1
类型
H
H
H
H
H
H
类型
A
A
H
备注
0x96
BMK加密的KEY密文
被PIK加密的PIN密文
备注
“A”
“E”
0x01:无本地主密钥
0x02:无银行主密钥
0x0c:无效的银行主密钥索引
0x34:打印未授权
0x35:解密PIN未授权
0x19:奇偶校验错
0x20:PIN错误
SJL05处理过程:
1)、PIN解密授权和串口打印授权
2)、取出BMK
卫士通信息产业股份有限公司 /
- 130 -
3)、用BMK解密得到PIK明文
4)、用PIK明文解密得到PIN Block明文
5)、解密得到的PIN Block与主帐号异或得到PIN
6)、PIN与输入的PIN比较
7)、打印PIN
卫士通信息产业股份有限公司 /
- 131 -
计算密钥的C
HECK
V
ALUE
<0
X
97>
说明:计算输入密钥的CheckValue。
消息格式:
输入域
命令
KEY
区域主密钥索引
输出域
应答码
CheckValue
或
应答码
错误码
SJL05处理过程:
1) 取出指定的区域主密钥ZMK;
2) 用ZMK对KEY做3DES解密,得到明文密钥PKEY;
3) 用PKEY对8字节的0x00做DES加密,加密结果即为其
CheckValue;
长度
1
8
2
长度
1
4
1
1
类型
H
H
H
类型
A
H
A
H
备注
0x97
ZMK加密的KEY密文
备注
“A”
KEY的CheckValue
“E”
0x02:无银行主密钥
4) 返回CheckValue。
卫士通信息产业股份有限公司 /
- 132 -
解密PIN<0
X
98>
说明:解密PIN并输出明文PIN
消息格式:
输入域
命令
PIK密文
区域主密钥索引
PIN密文
主帐号
输出域
应答码
PIN
或
应答码
错误码
长度
1
8
2
8
8
长度
1
8
1
1
类型
H
H
H
H
H
类型
A
H
A
H
备注
0x98
用BMK加密的PIK
用PIK加密的PIN
备注
“A”
明文PIN
“E”
0x02:无银行主密钥
0x0C:无效的银行主密钥索引
0x35:没有授权解PIN
0x19:奇偶校验错误
SJL05处理过程:
1) 读出BMK,并检查解密PIN授权
2) 用BMK解密得到PIK明文,用PIK明文解密得到PIN明文
3) PIN明文与主帐号异或得到PIN明文输出
卫士通信息产业股份有限公司 /
- 133 -
转换PIN从ATK到PIK<0
X
99>
说明:将PIN从ATK加密转换为PIK加密后输出
消息格式:
输入域
命令
区域主密钥索引
TMK密文
PIK1密文
PIK2密文
PIN密文
附加信息
输出域
应答码
PIN密文
或
应答码
错误码
长度
1
2
8
8
8
8
4
长度
1
8
1
1
类型
H
H
H
H
H
H
H
类型
A
H
A
H
备注
0x99
用BMK加密的TMK
用TMK加密的PIK
用BMK加密的PIK
用PIK1加密的PIN
备注
“A”
用PIK2加密的PIN
“E”
0x02:无银行主密钥
0x0C:无效的银行主密钥索引
0x20:非法的附加信息
0x19:奇偶校验错误
0x1E:无效的PIN
0x1F:无效的PIK
SJL05处理过程:
2) 读出BMK
3) 用BMK解密得到TMK明文
卫士通信息产业股份有限公司 /
- 134 -
4) 用TMK解密得到PIK1明文
5) 用BMK解密得到PIK2明文
6) 检验附加信息和PIK1是否有效
7) 用PIK1解密得到PIN明文
8) 用PIK2加密PIN明文得到输出
卫士通信息产业股份有限公司 /
- 135 -
转换任意长度的数据密钥<0
X
0401>
说明:将数据密钥从一个区域主密钥或本地主密钥或终端主密钥加密格式
转换到用其他区域主密钥或本地主密钥或终端主密钥加密的密文。
消息格式:
输入域
命令类型
命令
区域主密钥索引1
长度
1
1
2
类型
H
H
H
备注
0x04
0x01
0xFFFF:用LMK解密
0xF000-0xF063:终端主密钥,低
字节为密钥索引
0-999表示为区域主密钥索引
加密算法1 1 H 区域主密钥对数据密钥的加密算
法
0:64 BIT 3DES
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
数据密钥长度
数据密钥
1
N
H
H
8/16/24等,必须是8的整数倍
用区域主密钥索引1加密的数据
密钥
区域主密钥索引2 2 H 0xFFFF:用LMK解密
0xF000-0xF063:终端主密钥,低
字节为密钥索引
0-999表示为区域主密钥索引
加密算法2 1 H 区域主密钥对数据密钥的解密算
法
0:64 BIT 3DES
卫士通信息产业股份有限公司 /
- 136 -
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
输出域
应答码
数据密钥长度
数据密钥密文
长度
1
1
N
类型
A
H
H
备注
“A”
8/16/24等,必须是8的整数倍
用本地主密钥或区域主密钥加密
的数据密钥密文
或
应答码
错误码
SJL05处理过程:
1) 取出本地主密钥LMK1、数据密钥、加密算法1;
A) 如果加密算法1取0 ,用LMK1解密数据密钥(用3DES)
B) 如果加密算法1取1 ,用LMK1解密数据密钥(用两次3DES,类
似LMK对MMK的加解密)
C) 如果加密算法1取2 ,用LMK1解密数据密钥(用三次3DES,类
似LMK对MMK的加解密)
D) 如果加密算法1取其他,出错返回。
2) 取出本地主密钥LMK2、数据密钥明文、加密算法2;
A) 如果本地主密钥LMK2的索引号为-1 ,表示用LMK加密输出
B) 如果加密算法1取0 ,用LMK2加密数据密钥(用3DES)
C) 如果加密算法1取1 ,用LMK2加密数据密钥(用两次3DES,类
似LMK对MMK的加解密)
D) 如果加密算法1取2 ,用LMK2加密数据密钥(用三次3DES,每
次用LMK2对8个字节的数据密钥做3DES。
E) 如果加密算法1取其他,出错返回。
1
1
A
H
“E”
出错类型
卫士通信息产业股份有限公司 /
- 137 -
P
IN
B
LOCK
转换(任意长度PIK)<0
X
0402>
说明:PinBlock转换。
消息格式:
输入域
命令类型
命令
区域主密钥1索引
长度
1
1
2
类型 备注
H
H
H
0x04
0x02
与其他行的共享的区域主密
钥
加密算法1 1 H 区域主密钥对数据密钥的加
密算法
0:64 BIT 3DES
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
数据密钥1长度 1 H 8/16/24等,必须是8的整数
倍
区域PIK1 N
(8/16/24)
PinBlock1算法
PinBlock
主帐号1
区域主密钥2索引
1
8
8
2
H
H
H
H
H 用区域主密钥索引1加密的
数据密钥
见注解
区域PIK1加密
转换前主帐号
其他行的共享前置区域主密
钥
加密算法2 1 H 区域主密钥对数据密钥的加
密算法
0:64 BIT, 3DES
1:128 BIT,3DES
2:192 BIT,3DES
卫士通信息产业股份有限公司 /
- 138 -
其他保留
数据密钥2长度 1 H 8/16/24等,必须是8的整数
倍
区域PIK2 N H 用区域主密钥索引2加密的
数据密钥
PinBlock2算法
主帐号2
输出域
应答码
PinBlock
或
应答码
错误码
SJL05处理过程:
1) 取出指定的区域主密钥ZMK1和数据密钥、加密算法1;
2) 用ZMK1对区域PIK1用加密算法1指定的算法解密,得到密
钥明文P_ZPK1;
3) 用P_ZPK1 按PinBlock算法指定的算法对输入PinBlock做DES
解密,得到明文P_PinBlock;
4) 用P_PinBlock与主帐号1异或(方法见后面),得到明文P_PIN。
5) 用P_PIN与主帐号2按位异或,得到转换后PinBlock2;
6) 用ZMK2对数据密钥按加密算法2指定的算法做DES解密,得
到密钥明文P_ZPK2;
7) 用P_ZPK2对PinBlock2按PinBlock算法指定的算法做DES加
密,得到密文C_PinBlock;
8) 返回C_PinBlock.
1
8
长度
1
8
1
1
H
H
见注解
转换后主帐号
类型 备注
A
H
A
H
“A”
用区域PIK2加密
“E”
出错类型
卫士通信息产业股份有限公司 /
- 139 -
附 1 PIN与主帐号异或方法:
for (i = 2; i < 8; i++) {
PIN[i] ^= (lpKey->Acco2[i - 1] & 0x0f) << 4;
PIN[i] ^= (lpKey->Acco2[i] & 0xf0) >> 4;
}
附 2 PinBlock算法如下:
PIN算法
0,DES
1,3DES
2,192,3DES
做64BIT对64BIT的单DES
做128BIT对64BIT的3DES
取第一个64BIT对64BIT的PIN作单DES
取第二个64BIT对上次的结果作单DES-1
取第三个64BIT对上次的结果作单DES
其他 保留
卫士通信息产业股份有限公司 /
- 140 -
请求转换一个PIN从ATK
(任意长度)
到PIK
(任
意长度)
<0
X
0403>
说明:输入请求银行的PIK和用ATK加密的PIN,加密机将它们用ATK
解密后,(可选择的与主帐号异或),得到明文PIN,将ATM的PIN格式
转换成ANSIX9.8标准,(可选择的与主帐号异或),并用PIK加密输出。
消息格式:
输入域
命令类型
命令
ATM机类型
ATM密钥索引
ATM密钥长度
PIN
PinBlock解密算法
主帐号1
区域主密钥索引号
加密算法
长度
1
1
1
2
1
8
1
8
2
1
类型
H
H
H
H
H
H
H
H
H
H
备注
0x04
0x03
0x01,0x02,0x04,0x05
1到512
8/16/24等,必须是8的整数倍
ATM密钥加密的密文
见注解
与主帐号1异或得到明文
其他行的共享的区域主密钥
区域主密钥对数据密钥的加密
算法
0:64 BIT, 3DES
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
PIN数据密钥长度
PIN数据密钥
1
N
H
H
8/16/24等,必须是8的整数倍
用区域主密钥索引加密的数据
密钥
PinBlock加密算法
主帐号2
1
8
H
H
见注解
与主帐号2异或输出
- 141 -
卫士通信息产业股份有限公司 /
输出域
应答码
PIN
或
应答码
错误码
SJL05处理过程:
长度
1
8
1
1
类型
A
H
A
H
备注
“A”
用PIK加密后的PIN密文
“E”
出错类型
1) 取出指定的ATM终端密钥ATK,PIN密文,PIN BLOCK算法和主帐
号1,解出PIN的明文。要求加密机中ATK最长为192BIT:
A) 如果PIN BLOCK算法指定算法为0,就取ATK的前64BIT做单
DES解密;
B) 如果PIN BLOCK算法指定算法为1,就取ATK的前128BIT做3DES
解密;
C) 如果PIN BLOCK算法指定算法为2,就全取ATK的192BIT做3DES
解密;
D) 如果PIN BLOCK算法为其他,出错返回。
2) 根据ATM类型,验证PIN明文的有效性;
3) 取出本地主密钥LMK、数据密钥、加密算法,得到PIK明文P_PIK;
A) 如果加密算法取0 ,用LMK1解密数据密钥(用3DES)
B) 如果加密算法取1 ,用LMK1解密数据密钥(用两次3DES,类似
LMK对MMK的加解密)
C) 如果加密算法取2 ,用LMK1解密数据密钥(用三次3DES,类似
LMK对MMK的加解密)
D) 如果加密算法取其他报错,退出。
4) 根据ATM类型转换为标准的Pin格式;
5) 标准的Pin格式与主帐号2异或得到PinBlock;
卫士通信息产业股份有限公司 /
- 142 -
6) 用P_PIK对PinBlock进行DES加密,得到PinBlock的密文C_PinBlock;
A) 如果PIN BLOCK算法指定算法为0,就取P_PIK的前64BIT做单
DES解密;
B) 如果PIN BLOCK算法指定算法为1,就取P_PIK的前128BIT做
3DES解密,如果P_PIK只有64BIT,报错返回;
C) 如果PIN BLOCK算法指定算法为2,就取P_PIK的192BIT做3DES
解密,如果P_PIK只有64BIT,报错返回;
D) 如果PIN BLOCK算法为其他,出错返回。
7) 返回C_PinBlock。
注意:ATM机型号和PIN格式请参见下页附录。
卫士通信息产业股份有限公司 /
- 143 -
附录 ATM和POS机类型和PIN的格式
类型1---
PIN格式:
BYTE1--BYTE2
BYTE3--BYTE8
ASCII"0"
PIN
类型2---
PIN格式:
BYTE1 PIN的长度
6个PIN(每个PIN占4个BIT)
FILLER"FFFFFFFFFF"
BYTE2--BYTE4
BYTE5--BYTE8
类型3---BULL
PIN格式:
BYTE1 PIN的长度
6个PIN(每个PIN占4个BIT)
FILLER"FFFFFFFFFF"
BYTE2--BYTE4
BYTE5--BYTE8
按位加主账号
主帐号格式:
BYTE1--BYTE2
BYTE3--BYTE8
%H0000
12个主帐号
类型4---INTERBOLD和IBMATM机
PIN格式:
BYTE1--BYTE4/6
BYTE5/7--BYTE8
4/6个PIN(F9Ebcdic码表示)
FILLER"FF",FILLER可选择
类型5---NCRATM机
卫士通信息产业股份有限公司 /
- 144 -
PIN格式:
BYTE1--BYTE2 4个终端号
产生一个数据密钥(任意长奇校验)和校验码
<0
X
0404>
说明:产生一个随机数,并将它用所请求银行的区域主密钥加密后返回给
请求者。
消息格式:
输入域
命令类型
命令
区域主密钥索引号
加密算法
长度
1
1
2
1
类型
H
H
H
H
备注
0x04
0x04
其他行的共享的区域主密钥
区域主密钥对数据密钥的加密
算法
0:64 BIT, 3DES
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
数据密钥长度
输出域
应答码
数据密钥长度
数据密钥
数据密钥校验码
或
应答码
错误码
1
长度
1
1
N
8
1
1
H
类型
A
H
H
H
A
H
8/16/24等,必须是8的整数倍
备注
“A”
8/16/24等,必须是8的整数倍
用区域主密钥加密后数据密钥
数据密钥对全零加密的结果
“E”
出错类型
卫士通信息产业股份有限公司 /
- 145 -
SJL05处理过程:
1) 取出索引的区域主密钥ZMK,加密算法和数据密钥长度;
2) 产生指定位数的随机密钥DK;
3) 用区域主密钥ZMK对DK进行3DES加密:
a) 如果加密算法取0 ,用ZMK加密数据密钥(用3DES)
b) 如果加密算法取1 ,用ZMK加密数据密钥(用两次3DES,类似
LMK对MMK的加解密)
c) 如果加密算法取2 ,用ZMK加密数据密钥(用三次3DES,类似
LMK对MMK的加解密)
d) 如果加密算法取其他报错,退出。
4) 得到CKEY;
5) 用随机密钥DK对全零加密:
a) 如果加密算法取0 ,用数据密钥对全零做单DES
b) 如果加密算法取1 ,用数据密钥对全零做3DES
c) 如果加密算法取2 ,用数据密钥对全零做3DES
d) 如果加密算法取其他报错,退出。
6)
返回加密结果CKEY和校验码。
卫士通信息产业股份有限公司 /
- 146 -
用任意长数据密钥加密PIN
BLOCK
<0
X
0405>
说明:可计算PIN的密文和数据密钥的CheckValue。
消息格式:
输入域
命令类型
命令
区域主密钥索引号
加密算法
长度
1
1
2
1
类型
H
H
H
H
备注
0x04
0x05
其他行的共享的区域主密钥
区域主密钥对数据密钥的加密
算法
0:64 BIT, 3DES
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
数据密钥长度
数据密钥
1
N
H
H
8/16/24等,必须是8的整数倍
用区域主密钥索引加密的数据
密钥
数据
输出域
应答码
PIN 密文
或
应答码
错误码
8
长度
1
8
1
1
H
类型
A
H
A
H
PIN BLOCK
备注
“A”
PIN 密文
“E”
出错类型
卫士通信息产业股份有限公司 /
- 147 -
SJL05处理过程:
1) 取出本地主密钥ZMK索引、数据密钥、加密算法,得到数据密钥明文;
A) 如果加密算法取0 ,用ZMK解密数据密钥(用3DES)
B) 如果加密算法取1 ,用ZMK解密数据密钥(用两次3DES,类似
LMK对ZMK的加解密)
C) 如果加密算法取2 ,用ZMK解密数据密钥(用三次3DES,类似
LMK对ZMK的加解密)
D) 如果加密算法取其他报错,退出。
2) 用数据密钥对8字节的PIN BLOCK进行DES加密,加密结果即为其
PIN密文;
A) 如果加密算法算法指定算法为0,就取数据密钥的前64BIT做单
DES加密;
B) 如果加密算法算法指定算法为1,就取P_PIK的前128BIT做3DES
加密,如果P_PIK只有64BIT,报错返回;
C) 如果加密算法算法指定算法为2,就取P_PIK的192BIT做3DES
加密,如果P_PIK只有64BIT,报错返回;
D) 如果加密算法算法为其他,出错返回。
3) 返回PIN密文。
卫士通信息产业股份有限公司 /
- 148 -
P
IN
B
LOCK
转换(任意长度MMK及格式)
<0
X
0406>
说明:PinBlock转换。
消息格式:
报文域 类型 长
度
命令码
Index1
PIK1字节长度
PIK1密文
H
H
H
H
2
2
1
N
0x0406
转换前区域主密钥索引
值为8或16或24
N=8或16或24;
转换前区域主密钥加密密文
Index2
PIK2字节长度
PIK2密文
H
H
H
2
1
N
转换后区域主密钥索引
值为8或16或24;
N=8或16或24;
转换后区域主密钥加密密文
转换前H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1格式,1NP..PR...R
0x06:不带主帐号的ANSI9.8格式
转换后H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1格式,1NP..PR...R
0x06:不带主帐号的ANSI9.8格式
卫士通信息产业股份有限公司 /
- 149 -
备注
PINBLOCK格式
PINBLOCK格式
转换前H 8
PINBLOCK
转换前主帐号 A N N=12-19(仅当转换前PINBLOCK
格式为1或4,且转换前和转换后格
式不同时存在)
分隔符
转换后主帐号
A
A
1
N
“;”,仅当存在转换前主帐号时存在
N=12-19(仅当转换后PINBLOCK
格式为1或4,且转换前和转换后格
式不同时存在)
转换后用户补位A
码
分隔符 A 1
12 仅当转换后格式为2,且转换前和转
换后格式不同时存在。
“;”仅当存在转换后主帐号或补位
码时存在
报文域 类型 长
度
返回状态码 A 1 ‘A’:正确返回;
‘E’:处理出错。
以下域仅当返回状态码为‘E’时存在
出错代码 H 1 0x01:加密机没有本地主密钥
0x14: PINBLOCK格式无效
0x15:PIN长度无效
0x57:输入无效数据
0x58:输入数据长度不对
以下域仅当返回状态码为‘A’时存在
密文PINBLOCK
SJL05处理过程:
1) 取出指定的区域主密钥ZMK1和数据密钥PIK1;
H 8 指定格式的密文PINBLOCK
备注
卫士通信息产业股份有限公司 /
- 150 -
2) 用ZMK1对PIK1做3DES解密,得到明文密钥PPIK1;
3) 用PPIK1对输入PINBLOCK1做DES或3DES解密,得到明文
PINBLOCK;
4) 根据PINBLOK、转换前格式及相关PAN,计算明文PIN;
5) 根据PIN、转换后格式及相关PAN或用户补位码,得到转换后
PPINBLOCK2;
6) 取出指定的区域主密钥ZMK2和数据密钥PIK2;
7) 用ZMK2对PIK2做3DES解密,得到明文密钥PPIK2;
8) 用PPIK2对PPINBLOCK2做DES或3DES加密,得到密文
PINBLOCK2;
9) 返回PINBLOCK2。
附 1 PIN与主帐号异或方法:
for (i = 2; i < 8; i++) {
PIN[i] ^= (lpKey->Acco2[i - 1] & 0x0f) << 4;
PIN[i] ^= (lpKey->Acco2[i] & 0xf0) >> 4;
}
卫士通信息产业股份有限公司 /
- 151 -
P
IN
B
LOCK
转换<0
X
0407>
说明:PinBlock转换, 自动转换4位和6位密码格式。
消息格式:
报文域 类型 长
度
命令码
Index1
PIK1字节长度
PIK1密文
H
H
H
H
2
2
1
N
0x0407
转换前区域主密钥索引
值为8或16或24
N=8或16或24;
转换前区域主密钥加密密文
Index2
PIK2字节长度
PIK2密文
H
H
H
2
1
N
转换后区域主密钥索引
值为8或16或24;
N=8或16或24;
转换后区域主密钥加密密文
标志位 A 1 ‘0’:不对PINBLOCK作特殊处理
‘1’:对PINBLOCK作特殊处理
转换前H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1格式,1NP..PR...R
0x06:不带主帐号的ANSI9.8格式
0x07:工行格式PPPPPP)
转换后H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1格式,1NP..PR...R
卫士通信息产业股份有限公司 /
- 152 -
备注
PINBLOCK格式
PINBLOCK格式
0x06:不带主帐号的ANSI9.8格式
0x07:工行格式PPPPPP)
转换前H 8
PINBLOCK
转换前主帐号 A N N=12-19(仅当转换前PINBLOCK
格式为1或4,且转换前和转换后格
式不一样时存在)
分隔符
转换后主帐号
A
A
1
N
“;”,仅当存在转换前主帐号时存在
N=12-19(仅当转换后PINBLOCK
格式为1或4,且转换前和转换后格
式不同时存在)
转换后用户补位A
码
分隔符 A 1
9 仅当转换后格式为2,且转换前和转
换后格式不同时存在。
“;”仅当存在转换后主帐号或补位
码时存在
报文域 类型 长
度
返回状态码 A 1 ‘A’:正确返回;
‘E’:处理出错。
以下域仅当返回状态码为‘E’时存在
出错代码 H 1 0x01:加密机没有本地主密钥
0x14: PINBLOCK格式无效
0x15:PIN长度无效
0x6-9-7:输入无效数据
0x58:输入数据长度不对
以下域仅当返回状态码为‘A’时存在
密文PINBLOCK
H 8 指定格式的密文PINBLOCK
备注
卫士通信息产业股份有限公司 /
- 153 -
SJL05处理过程:
1) 取出指定的区域主密钥ZMK1和数据密钥PIK1;
2) 用ZMK1对PIK1做3DES解密,得到明文密钥PPIK1;
3) 用PPIK1对输入PINBLOCK1做DES或3DES解密,得到明文
PINBLOCK;
4) 根据标志位如果是‘0’则不进行特殊处理,如果是‘1’,且符
合6位转4位的条件,就去掉两个0。
5) 根据PINBLOK、转换前格式及相关PAN,计算明文PIN;
6) 根据PIN、转换后格式及相关PAN或用户补位码,得到转换后
PPINBLOCK2;
7) 取出指定的区域主密钥ZMK2和数据密钥PIK2;
8) 用ZMK2对PIK2做3DES解密,得到明文密钥PPIK2;
9) 用PPIK2对PPINBLOCK2做DES或3DES加密,得到密文
PINBLOCK2;
10) 返回PINBLOCK2。
卫士通信息产业股份有限公司 /
- 154 -
用任意长数据密钥解密PIN
BLOCK
<0
X
0408>
(推荐使用0
X
0422)
说明:计算PIN的明文和数据密钥的CheckValue。
消息格式:
输入域
命令类型
命令
区域主密钥索引号
加密算法
长度
1
1
2
1
类型
H
H
H
H
备注
0x04
0x08
其他行的共享的区域主密钥
区域主密钥对数据密钥的加密
算法
0:64 BIT, 3DES
1:128 BIT,3DES
2:192 BIT,3DES
其他保留
数据密钥长度
数据密钥
1
N
H
H
8/16/24等,必须是8的整数倍
用区域主密钥索引加密的数据
密钥
数据
输出域
应答码
PIN 密文
或
应答码
错误码
SJL05处理过程:
卫士通信息产业股份有限公司 /
- 155 -
8
长度
1
8
1
1
H
类型
A
H
A
H
密文PIN BLOCK
备注
“A”
PIN 明文
“E”
出错类型
1)取出本地主密钥ZMK索引、数据密钥、加密算法,得到数据密钥明文;
A)如果加密算法取0 ,用ZMK解密数据密钥(用3DES)
B)如果加密算法取1 ,用ZMK解密数据密钥(用两次3DES,类似LMK
对ZMK的加解密)
C)如果加密算法取2 ,用ZMK解密数据密钥(用三次3DES,类似LMK
对ZMK的加解密)
D)如果加密算法取其他报错,退出。
2)用数据密钥对8字节的PIN BLOCK进行DES解密,解密结果即为其PIN
明文;
A)如果加密算法算法指定算法为0,就取数据密钥的前64BIT做单DES
加密;
B)如果加密算法算法指定算法为1,就取P_PIK的前128BIT做3DES
加密,如果P_PIK只有64BIT,报错返回;
C)如果加密算法算法指定算法为2,就取P_PIK的192BIT做3DES加
密,如果P_PIK只有64BIT,报错返回;
D)如果加密算法算法为其他,出错返回。
E)返回PIN明文。
卫士通信息产业股份有限公司 /
- 156 -
请求产生MAC(变长MAK)<0
X
0410>
说明:请求产生一个MAC。
消息格式:
输入域
命令
传输主密钥类型
长度
2
1
类型
H
H
备注
0x0410
0x01:为区域主密钥;
0x02:为终端主密钥;
0x00:本地主密钥
传输主密钥索引 2 H 1-1000/100,主密钥类型为本地
主密钥时,此数据项存在但无
实际意义
MAK长度
MAC算法
1
1
H
H
8或16或24
0x01:ANSI9.9
0x02:ANSI9.19
0x03:XOR
MAK
初始向量
MAC数据长度
MAC数据
输出域
应答码
MAC码
或
应答码
错误码
n
8
2
N
长度
1
8
1
1
H
H
H
H
类型
A
H
A
H
MAK密钥
计算MAC的初使值
计算MAC的数据的字节长度
计算MAC的数据
备注
“A”
“E”
0x0C:非法银行主密钥索引号
0x2E:无效的MAC长度
SJL05处理过程:
卫士通信息产业股份有限公司 /
- 157 -
1) 根据传输主密钥类型和传输主密钥索引读取传输主密钥TMK;
2) 用TMK对MAK做DES_ECB解密,得到明文密钥PMAK;
3) 根据密钥长度和MAC算法标志,对MAC数据做指定算法的MAC
计算;
4) 返回计算结果。
注意:
当MAC算法为ANSI9.19时,必须使用16或24字节长度的密钥。
当MAC算法为XOR且密钥长度大于8字节时,最后一次加密算法采
用3DES算法。
卫士通信息产业股份有限公司 /
- 158 -
请求验证MAC(变长MAK)<0
X
0411>
说明:请求产生一个MAC。
消息格式:
输入域
命令
传输主密钥类型
长度
2
1
类型
H
H
备注
0x0411
0x01:为区域主密钥;
0x02:为终端主密钥;
0x00:为本地主密钥;
传输主密钥索引 2 H 1-1000/100,当主密钥类型为本地
主密钥时,此域存在但无实际意
义
MAK长度
MAC算法
1
1
H
H
8或16或24
0x01:ANSI9.9
0x02:ANSI9.19
0x03:XOR
MAK N H N=8或16或24,计算MAC的密
钥
初始向量
MAC码
MAC数据长度
MAC数据
输出域
应答码
MAC码
或
应答码
8
4
2
N
长度
1
8
1
H
H
H
H
类型
A
H
A
计算MAC的初始数据
验证的MAC
计算MAC的数据的字节长度
计算MAC的数据
备注
“A”
“E”
卫士通信息产业股份有限公司 /
- 159 -
错误码 1 H 0x0C:非法银行主密钥索引号
0x2E:无效的MAC长度
SJL05处理过程:
1) 根据传输主密钥类型和传输主密钥索引读取传输主密钥TMK;
2) 用TMK对MAK做DES_ECB解密,得到明文密钥PMAK;
3) 根据密钥长度和MAC算法标志,对MAC数据做指定算法的MAC计算;
4) 比较计算结果与输入MAC,如果一致,正确返回,否则返回MAC校验错。
注意:
当MAC算法为ANSI9.19时,必须使用16或24字节长度的密钥。
当MAC算法为XOR且密钥长度大于8字节时,最后一次加密算法采用3DES
算法。
卫士通信息产业股份有限公司 /
- 160 -
请求产生MAC,并可选转换PIN(密钥长度可变)
<0
X
0412>
说明:计算MAC,并可选择地进行PINBLOCK格式和密钥的转换,PIK和MAK
密钥长度均可变,MAC算法或变。
消息格式:
输入域
命令
转换PIN标志
长度
2
1
类型
H
H
备注
0x0412
0:只计算MAC
1:产生MAC和转换PIN
区域主密钥一索引 2 H MAK的主密钥索引号
0-999为区域主密钥索引;
0xF000-0xF063时低字节表示为
终端主密钥索引;
0xFFFF为本地主密钥索引;
MAK密钥长度 1 H MAK密钥的字节长度,8或16
或24
MAC算法 1 H 0x01:ANSI9.9
0x02:ANSI9.19
0x03:XOR
MAK
初始向量
MAC数据长度
MAC数据
8/16/24 H
8
2
N
H
H
A
用于计算MAC
计算MAC的初始向量
计算MAC的数据的长度
计算MAC的数据,N=LEN
以下域仅当转换PIN标志为1时存在
区域主密钥二索引 H 2 转换前区域主密钥索引
0-999为区域主密钥索引;
卫士通信息产业股份有限公司 /
- 161 -
0xF000-0xF063时低字节为终端
主密钥索引;
0xFFFF为本地主密钥索引;
PIK1字节长度
PIK1密文
H
H
1
N
值为8或16或24
N=8或16或24;
转换前区域主密钥加密密文
区域主密钥三索引 H 2 转换后区域主密钥索引
0-999为区域主密钥索引;
0xF000-0xF063时低字节为终端
主密钥索引;
0xFFFF为本地主密钥索引;
PIK2字节长度
PIK2密文
H
H
1
N
值为8或16或24;
N=8或16或24;
转换后区域主密钥加密密文
转换前PINBLOCK格式 H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1
1NP..PR...R
0x06:不带主帐号的ANSI9.8格
式
转换后PINBLOCK格式 H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
格式,
卫士通信息产业股份有限公司 /
- 162 -
0x05: ISO9564-1-1
1NP..PR...R
格式,
0x06:不带主帐号的ANSI9.8格
式
转换前PINBLOCK
转换前主帐号
H
A
8
N
N=12-19(仅当转换前
PINBLOCK格式为1或4,且转
换前和转换后格式不同时存在)
分隔符 A 1 “;”,仅当存在转换前主帐号时
存在
转换后主帐号 A N N=12-19(仅当转换后
PINBLOCK格式为1或4,且转
换前和转换后格式不同时存在)
转换后用户补位码 A 12 仅当转换后格式为2,且转换前
和转换后格式不同时存在。
分隔符 A 1 “;”仅当存在转换后主帐号或补
位码时存在
输出域
应答码
MAC
或
应答码
MAC
PIN
或
应答码
长度
1
8
1
8
8
1
类型
A
H
A
H
H
A
备注
“A”
计算的MAC值
“A”
计算的MAC值
用PIK加密的PIN
“E”
卫士通信息产业股份有限公司 /
- 163 -
错误码 1 H 0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错(第
一个银行的MAK)
0x 2E:无效的MAC长度
0x 05:无终端主密钥
0x 2D:MAC验证错误
0x 19: PIK密钥奇偶校验错误
(第一个银行的PIK)
0x 2F:无效的加密PIN或MAC
标志
SJL05处理过程:
1)
2)
根据区域主密钥索引一、MAK长度及输入密文MAK,计算明文MAK;
根据MAC算法、初始向量,用明文MAK对输入MAC数据做指定MAC
计算;
3) 如果需同时进行PINBLOCK转换,则继续以下步骤,否则返回MAC
值,加密机处理结束;
4)
5)
根据区域主密钥索引二、PIK1长度及输入密文PIK1,计算明文PIK1;
根据转换前PINBLOCK格式及相关数据,用明文PIK1解密后得到明文
PIN;
6)
7)
根据区域主密钥索引三、PIK2长度及输入密文PIK2,计算明文PIK2;
根据转换后PINBLOCK格式及相关数据,用明文PIK2加密后得到密文
PINBLOCK;
8)
返回加密结果和MAC数据。
卫士通信息产业股份有限公司 /
- 164 -
请求验证MAC,可选择地验证PIN<变长工作密钥,
任意类型PINBLOCK<0
X
0413>
说明:用MAK验证一个MAC。同时当验证PIN标识为1时,可以验证一个PIN,
MAK密钥和PIK密钥长度可变,MAC计算算法可变。
消息格式:
输入域
命令
转换PIN标志
长度
2
1
类型
H
H
备注
0x0413
0:只验证MAC
1:验证MAC和PIN
区域主密钥一索引 2 H MAK的主密钥索引
0-999为区域主密钥索引;
0xF000-0xF063时低字节为终端
主密钥索引;
0xFFFF为本地主密钥索引;
MAK密钥长度 1 H MAK密钥的字节长度,8或16
或24
MAC算法 1 H 0x01:ANSI9.9
0x02:ANSI9.19
0x03:XOR
MAK
初始向量
MAC
MAC数据长度
MAC数据
8/16/24 H
8
4
2
N
H
H
H
A
用于计算MAC
计算MAC的初始向量
验证的MAC码
计算MAC的数据的长度
计算MAC的数据,N=LEN
以下域仅当验证PIN标志为1时存在
区域主密钥二索引 H 2 转换前区域主密钥索引
0-999为区域主密钥索引;
0xF000-0xF063时低字节为终端
卫士通信息产业股份有限公司 /
- 165 -
主密钥索引;
0xFFFF为本地主密钥索引;
PIK1字节长度
PIK1密文
H
H
1
N
值为8或16或24
N=8或16或24;
加密输入PIN
区域主密钥三索引 H 2 转换前区域主密钥索引
0-999为区域主密钥索引;
0xF000-0xF063时低字节为终端
主密钥索引;
0xFFFF为本地主密钥索引;
PIK2字节长度
PIK2密文
H
H
1
N
值为8或16或24;
N=8或16或24;
加密验证PIN
输入PINBLOCK格式 H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1
1NP..PR...R
0x06:不带主帐号的ANSI9.8格
式
验证PINBLOCK格式 H 1 0x01:带主帐号的ANSI9.8格式
0x02: Docutel ATM;
0x03: Diebold and IBM ATM,;
0x04: Plus Network;
0x05: ISO9564-1-1
1NP..PR...R
0x06:不带主帐号的ANSI9.8格
格式,
格式,
卫士通信息产业股份有限公司 /
- 166 -
式
输入PINBLOCK
输入PIN主帐号
H
A
8
N
N=12-19(仅当输入PINBLOCK
格式为1或4时存在)
分隔符 A 1 “;”,仅当存在转换前主帐号时
存在
验证PINBlock
验证PIN主帐号
H
A
8
N
N=12-19(仅当验证PINBLOCK
格式为1或4时存在)
分隔符 A 1 “;”仅当存在转换后主帐号或补
位码时存在
输出域
应答码
或
应答码
错误码
长度
1
1
1
类型
A
A
H
备注
“A”
“E”
0x 0C:非法银行主密钥索引号
0x 2C:非法银行主密钥
0x 29: MAK密钥奇偶校验错(第
一个银行的MAK)
0x 2E:无效的MAC长度
0x 05:无终端主密钥
0x 2D:MAC验证错误
0x 19: PIK密钥奇偶校验错误
(第一个银行的PIK)
0x 2F:无效的加密PIN或MAC
标志
SJL05处理过程:
卫士通信息产业股份有限公司 /
- 167 -
1) 根据区域主密钥索引一、MAK长度及输入密文MAK,计算明文
MAK;
2) 根据MAC算法、初始向量,用明文MAK对输入MAC数据做指定
MAC计算;
3)
4)
5)
6)
比较计算结果与输入MAC是否一致,不一致则返回MAC验证错。
如果需同时进行PIN验证,则继续以下步骤,否则加密机处理结束;
根据区域主密钥索引二、PIK1长度及输入密文PIK1,计算明文PIK1;
根据输入PINBLOCK格式及相关数据,用明文PIK1解密后得到明
文PIN1;
7)
8)
根据区域主密钥索引三、PIK2长度及输入密文PIK2,计算明文PIK2;
根据验证PINBLOCK格式及相关数据,用明文PIK2解密后得到明
文PIN2;
9) 比较PIN1与PIN2,如果不一致,返回PIN验证错,否则加密机处
理结束正确返回。
卫士通信息产业股份有限公司 /
- 168 -
终端主密钥的生成<0
X
0420>
说明:根据指定的密钥长度生成新密钥,同时生成新密钥的 Check Value 。
消息格式:
输入域
命令
区域主密钥1索引号
区域主密钥2索引号
终端主密钥长度
长度
2
2
2
1
类型
H
H
H
H
备注
0x0420
0:64 BIT
1:128 BIT
2:192 BIT
备注
“A”
由区域主密钥1保护的密文
由区域主密钥2保护的密文
产生的密钥的校验值
“E”
0x02:没有指定的区域主密钥
0x0C:无效的主密钥索引
0x5D:输入长度错
输出域
应答码
终端主密钥密文1
终端主密钥密文2
CheckValue
或
应答码
错误码
长度
1
8/16/24
8/16/24
8
1
1
类型
A
H
H
H
A
H
SJL05处理过程:
1)生指定长度的随机数;
2)分别用区域主密钥1和区域主密钥2对产生的密钥进行加密;
3)生成产生的密钥的校验值;
4)返回数据。
卫士通信息产业股份有限公司 /
- 169 -
数据密钥的生成<0
X
0421>
说明:一次生成两个随机密钥,并分别用区域主密钥和终端主密钥进行加
密保护。
消息格式:
输入域
命令
区域主密钥1索引号
区域主密钥2索引号
数据密钥1长度
长度
2
2
2
1
类型
H
H
H
H
备注
0x0421
0:64 BIT
1:128 BIT
2:192 BIT
数据密钥2长度
1 H
0:64 BIT
1:128 BIT
2:192 BIT
终端主密钥长度
1 H
0:64 BIT
1:128 BIT
2:192 BIT
终端主密钥密文
输出域
应答码
数据密钥1的密文1
数据密钥1的密文2
CheckValue1
数据密钥2的密文1
数据密钥2的密文2
CheckValue2
或
应答码
8/16/2
4
长度
1
8/16/2
4
8/16/2
4
8
8/16/2
4
8/16/2
4
8
1
A
H
H
H
类型
A
H
H
由区域主密钥2保护的密钥密
文
备注
“A”
由区域主密钥1保护的数据密
钥1的密文
由终端主密钥保护的数据密钥
1的密文
数据密钥1的校验值
由区域主密钥1保护的数据密
钥1的密文
由终端主密钥保护的数据密钥
1的密文
数据密钥1的校验值
“E”
卫士通信息产业股份有限公司 /
- 170 -
错误码
1 H
0x02:没有指定的区域主密钥
0x0C:无效的主密钥索引
SJL05处理过程:
1) 产生两个指定长度的随机密钥;
2) 用区域主密钥2解密终端主密钥的密文;
3) 分别用区域主密钥1和终端主密钥对产生的密钥进行加密;
4) 生成产生的密钥的校验值;
5) 返回数据。
卫士通信息产业股份有限公司 /
- 171 -
解密PIN
<0
X
0422>
说明:变长密钥解密PIN,PINBlock格式应符合ANSI9.8。(需要设置“解
密PIN授权”);
消息格式:
输入域
命令
区域主密钥索引号
PINBlock密文
主帐号
PIK长度
长度
2
2
8
8
1
类型
H
H
H
H
H
备注
0x0422
由PIK保护的PINBlock密文
帐号
0x08:64 BIT
0x10:128 BIT
0x18:192 BIT
PIK密文
输出域
应答码
PINBlock明文
或
应答码
错误码
8/16/2
4
长度
1
8
1
1
类型
A
H
A
H
备注
“A”
不带主帐号的明文PINBlock
“E”
0x0C:无效的区域主密钥索引
SJL05处理过程:
1) 用区域主密钥解密PIK密文;
2) 用PIK解密PINBlock密文;
注意:编写时,应注意校验数据的有效性(即应对PINBlock和主帐号是否
有效进行校验)。
H
由区域主密钥保护的密钥密文
卫士通信息产业股份有限公司 /
- 172 -
生成C
HECK
V
ALUE
(变长密钥)<0
X
0423>
说明:变长密钥的CheckValue的计算。
消息格式:
输入域
命令
主密钥索引号
密钥长度
密钥密文
输出域
应答码
数据密钥的CheckValue
或
应答码
错误码
长度
2
2
1
8/16/2
4
长度
1
8
1
1
类型
A
H
A
H
备注
“A”
数据密钥的CheckValue
“E”
0x0C:无效的区域主密钥索引
SJL05处理过程:
3) 用区域主密钥解密PIK密文;
4) 用PIK解密PINBlock密文;
注意:编写时,应注意校验数据的有效性(即应对PINBlock和主帐号是否
有效进行校验)。
类型
H
H
H
H
备注
0x0423
数据密钥长度。(8/16/24)
被主密钥保护的数据密钥。
用输入密钥对输入数据作加/解密<0
X
0480>
说明:用输入密钥根据标志对输入数据作DES加密或解密。
用于通联公司pos系统对磁道数据的加解密。
消息格式:
输入域
命令
长度
2
类型
H
备注
0x0480
卫士通信息产业股份有限公司 /
- 173 -
加/解密标志
主密钥索引1
主密钥索引2
主密钥索引3
数据密钥1长度
数据密钥1
数据密钥2长度
数据密钥2
数据密钥3长度
数据密钥3
数据长度1
1
2
2
2
1
8
1
8
1
8
2
A
H
H
H
H
H
H
H
H
H
H
0:加密; 1:解密
主密钥1
主密钥2
主密钥3
8、16、24
用主密钥1加密
8、16、24
用主密钥2加密
8、16、24
用主密钥3加密
如果为解密,必须是8字节整
数备
数据1
数据长度2
L
2
H
H
L=数据长度
如果为解密,必须是8字节整
数备
数据2
数据长度3
L
2
H
H
L=数据长度
如果为解密,必须是8字节整
数备
数据3
输出域
应答码
数据长度1
数据1
数据长度2
数据2
数据长度3
数据3
或
L
长度
1
2
L
2
L
2
L
H
类型
A
H
H
H
H
H
H
L=数据长度
备注
“A”
L=(输入数据长度+7)/8*8
L=(输入数据长度+7)/8*8
L=(输入数据长度+7)/8*8
卫士通信息产业股份有限公司 /
- 174 -
应答码
错误码
1
1
A
H
“E”
0x0C:非法银行主密钥索引号
0x2f:非法加解密算法标志
0x32:密钥长度错
0x68:数据长度错
SJL05处理过程:
5) 取出指定的主密钥ZMK,用ZMK对输入密钥做3DES解密,
得到密钥明文P_DK;
6) 检查输入数据长度,加密:如果长度不是8的倍数字节,在数
据最后补0x00至长度为8的倍数字节,否则得到数据DATA;
解密:如果数据长度不是8的整数倍,则返回0x68,否则得到
数据DATA
7) 根据加/解密钥标志,用P_DK对DATA做DES(3des)
加密或解密,如果正确,返回最后加/解密数据结果。
用本地主密钥加密终端主密钥<0
X
0510>
说明:输入一个TMK明文,用本地主密钥加密后输出,并存放于主机系
统中。
消息格式:
输入域
命令类型
命令
算法
TMK
输出域
长度
1
1
1
8
长度
类型
H
H
H
H
类型
备注
0x05
0x10
0:DES,其他保留
终端主密钥明文
备注
卫士通信息产业股份有限公司 /
- 175 -
应答码
TMK密文
或
应答码
错误码
1
8?
1
1
A
H
A
H
“A”
用本地主密钥加密
“E”
0x01:无主机主密钥
0x10:无效的DES算法模式
SJL05处理过程:
1) 取出本地主密钥LMK;
2) 用LMK对TMK做3DES加密,得到密钥密文C_TMK;
3) 如果正确,返回C_TMK。
备注:TMK明文注入到ATM或POS终端后应及时销毁,主机中只保存
TMK的密文。
卫士通信息产业股份有限公司 /
- 176 -
产生成员行的数据密钥(用ZMK和LMK加密)
(<0
X
0511>
说明:加密机产生一个数据密钥,分别用成员行的ZMK和本地主密钥加
密后输出。
消息格式:
输入域
命令类型
命令
算法
ZMK索引
输出域
应答码
数据密钥密文1
数据密钥密文2
数据密钥校验值
或
应答码
错误码
长度
1
1
1
2
长度
1
8
8
8
1
1
类型
H
H
H
H
类型
A
H
H
H
A
H
备
0x05
0x11
0:DES,其他保留
成员行ZMK索引,网络字节序
备注
“A”
用成员行ZMK加密
用本地主密钥加密
数据密钥校验值
“E”
0x0C:非法银行主密钥索引号
0x01:无主机主密钥
0x02:无银行主密钥
0x0F:非法ATM类型
SJL05处理过程:
1) 取出本地主密钥LMK和指定的区域主密钥ZMK;
2) 随机生成8字节数据密钥DK;
3) 用ZMK对DK做3DES加密,得到密钥密文一C_DK1;
4) 用LMK对DK做3DES加密,得到密钥密文二C_DK2;
5) 如果正确,返回C_DK1和C_DK2。
卫士通信息产业股份有限公司 /
- 177 -
备注:此命令主要用于金卡中心向成员行分发PIK或MAK,并将PIK和
MAK的密文保存于主机中。
卫士通信息产业股份有限公司 /
- 178 -
产生终端数据密钥(用TMK和LMK加密)<0
X
0512>
说明:加密机产生一个数据密钥,分别用终端主密钥TMK和本地主密钥(LMK)
加密后输出。
消息格式:
输入域
命令类型
命令
算法
长度
1
1
1
类型
H
H
H
备注
0x05
0x12
0x00:TMK为单倍长,产生单倍
长密钥;
0x10:TMK为双倍长,产生单倍
长密钥;
0x11:TMK为双倍长,产生双倍
长的密钥
,其他保留
TMK
输出域
应答码
数据密钥密文1
数据密钥密文2
数据密钥校验值
或
应答码
错误码
8/16
长度
1
8/16
8/16
8/16
1
1
H
类型
A
H
H
H
A
H
用本地主密钥加密后的密文
备注
“A”
用TMK加密
用本地主密钥加密
数据密钥校验值
“E”
0x01:无主机主密钥
0x0F:非法ATM类型
SJL05处理过程:
1) 取出本地主密钥LMK;
2) 用LMK对输入的TMK解密,得到TMK明文P_TMK;
3) 根据算法标识,随机产生8(或16)字节数据密钥DK;
卫士通信息产业股份有限责任公司 / 第 179页
4) 用P_TMK对DK加密,得到密钥密文一C_DK1;
5) 用LMK对DK加密,得到密钥密文二C_DK2;
6) 如果正确,返回C_DK1和C_DK2。
卫士通信息产业股份有限责任公司 / 第 180页
转换成员行数据密钥(由ZMK转换为LMK加密)
<0
X
0520>
说明:将成员行ZMK加密的数据密钥转换为本地主密钥加密的数据密钥。
消息格式:
输入域
命令类型
命令
算法
成员行ZMK索引
数据密钥密文
输出域
应答码
数据密钥密文
校验值
或
应答码
错误码
长度
1
1
1
2
8
长度
1
8
8
1
1
类型
H
H
H
H
H
类型
A
H
H
A
H
备注
0x05
0x20
0:DES,其他保留
网络字节序
用ZMK加密后的密文
备注
“A”
用本地主密钥加密
checkvalue
“E”
0x0C:非法银行主密钥索引号
0x01:无主机主密钥
0x02:无银行主密钥
0x0F:非法ATM类型
SJL05处理过程:
1) 取本地主密钥LMK和指定的区域主密钥ZMK;
2) 用ZMK对数据密钥做3DES解密,得到密钥明文P_DK;
3) 用LMK对P_DK做3DES加密,得到密钥密文C_DK;
4) 如果正确,返回用本地主密钥加密的C_DK和校验值。
卫士通信息产业股份有限责任公司 / 第 181页
备注:此命令主要用于成员行接收到金卡中心分发的PIK或MAK后,将其转换
为LMK加密的密钥存放在主机中。对采用ZMK加密存放的,不需要进行转换。
卫士通信息产业股份有限责任公司 / 第 182页
转换成员行数据密钥二(由LMK转换为ZMK加密)
<0
X
0521>
说明:将本地主密钥加密的数据密钥转换为成员行ZMK加密的数据密钥。
消息格式:
输入域
命令类型
命令
算法
成员行ZMK索引
数据密钥密文
输出域
应答码
数据密钥密文
校验值
或
应答码
错误码
长度
1
1
1
2
8
长度
1
8
8
1
1
类型
H
H
H
H
H
类型
A
H
H
A
H
备注
0x05
0x21
0:DES,其他保留
网络字节序
用ZMK加密后的密文
备注
“A”
用成员行的ZMK加密
checkvalue
“E”
0x0C:非法银行主密钥索引号
0x01:无主机主密钥
0x02:无银行主密钥
0x0F:非法ATM类型
SJL05处理过程:
1) 取出本地主密钥LMK和指定的区域主密钥ZMK;
2) 用LMK对数据密钥做3DES解密,得到密钥明文P_DK;
3) 用ZMK对P_DK做3DES加密,得到密钥密文C_DK;
4) 如果正确,返回C_DK和校验值。
卫士通信息产业股份有限责任公司 / 第 183页
转换终端数据密钥(由TMK转换为LMK加密)
<0
X
0522>
说明:将被终端主密钥TMK加密的数据密钥转换为本地主密钥LMK加密的数
据密钥。
消息格式:
输入域
命令类型
命令
算法
终端主密钥
数据密钥
输出域
应答码
数据密钥密文
或
应答码
错误码
长度
1
1
1
8
8
长度
1
8
1
1
类型
H
H
H
H
H
类型
A
H
A
H
备注
0x05
0x22
0:DES,其他保留
被本地主密钥加密
被终端主密钥加密
备注
“A”
用本地主密钥加密
“E”
0x01:无主机主密钥
0x0F:非法ATM类型
SJL05处理过程:
1) 取出本地主密钥LMK;
2) 用LMK对终端主密钥密文做3DES解密,得到密钥明文P_TMK;
3) 用P_TMK对输入数据密钥做DES解密,得到密钥明文P_DK;
4) 用LMK对P_DK做3DES加密,得到密钥密文C_DK;
5) 如果正确,返回C_DK。
卫士通信息产业股份有限责任公司 / 第 184页


发布评论