外围渠道加密我行客帐号密码, 必须由分行加密机产生一个密钥给这个渠道用来加密密码为密文. 再通过分行加密机的转加密交易对渠道密钥加密的密文转加密为行内密钥加密的密文然后通过渠道交易上送主机校验密码的正确性. 具体有两种方式,如下:
- 产生渠道和加密机的区域密钥, 实现渠道和加密机动态密钥更新。
首先, 由加密产生这个渠道的区域密钥ZMK, 可以是双倍长或者单倍长密钥,如果是双倍长密钥加密算法是3DES ,单倍长密钥使用DES。 具体由分行应用确定.用来加密此渠道密钥的密钥。 可以通过加密机的操作键盘由加密产生一个随机的合法密钥明文. 接着, 由加密机对此密钥明文进行加密. 把得到的区域密钥的密文 value和密钥校验值checkvalue 维护到密钥库中, 同时为此渠道分配渠道应用代码,按照密钥名称规则, 例如
分配此渠道的应用代码是 55
此渠道交易是通过分行号是 325 的ics 上送主机 同时也可以为此渠道密钥分配一个ID号为 1234567
密钥名称是: 55.325-1234567.zmk
接着, 把加密机产生的随机明文密钥值,给外围渠道系统.,加密保存此密钥。交易时外围渠道系统通过加密系统申请工作密钥(zpk)交易来申请真正用来加密客户密码的密钥(55.325-1234567.zpk),但是工作密钥是由他们之间的区域密钥(55.325-1234567.zmk)加密的。加密时把申请到工作密钥密文先用区域密钥(zmk)解密,然后再用DES 和 zpk 对客户密码pin 加密得到用工作密钥加密的密码的密文(pinblock)。 最后,把得到的密码密文送加密系统进行转加密,可以通过加密系统的转加密交易,把得到的转加密的pin_block 送主机校验密码,补足20位,在密码密文后面加3000。 综上所述,此方案通过约定外围系统和加密系统之间的区域主密钥zmk 。然后动态的从加密系统申请工作密钥zpk 。由外围系统通过zpk 对密码pin进行加密。此方案要求对区域密钥要加密存储,达到尽可能的安全。
zmk
zpk 由zmk pin_block 由 zpk 加密传输
加密传输
zmk
2, 约定固定工作密钥zpk
首先, 由加密机操作键盘产生一个随机的合法明文工作密钥zpk或者由人工编写16位或者32位数字0~9字母A~F ,如果是32位长密钥加密算法是3DES ,16位长密钥使用DES。 具体由分行应用确定。把得到的或者编写的工作密钥zpk 的明文输入加密机对其加密得到工作密钥zpk 的密文,维护到加密系统的密钥库中(详见《密钥库操作手册》),同时为此渠道分配渠道应用代码,按照密钥名称规则, 例如
分配此渠道的应用代码是 55
此渠道交易是通过分行号是 325 的ics 上送主机
同时也可以为此渠道密钥分配一个ID号为 1234567
密钥名称是: 55.325-1234567.zpk
接着,把得到的或者编写的工作密钥明文给外围系统,外围系统把此密钥加密保存在本地,交易时由算法DES /3DES 和工作密钥zpk 对客户密码pin 进行加密得到密码的密文 pin_block 。把得到的密码密文 pin_block 送加密系统进行转加密,把得到的转加密的密码密文 pin_block 后面加“3000” 补足20位上送主机校验密码。
综上所述, 此方案通过约定外围应用系统和加密系统之间的固定工作密钥zpk ,实现对密码的加密和转加密。
zpk
pin_block 由 zpk 加密传输
zpk
加密系统接口:
- MAC验证 Mac_verify 请求报文:数据包长度(2)+应用代码(2)+ 请求标示(1位,填“1”)+渠道代码(2)+MAC算法标准(2)+分行号(3)+ID(7)+MAC域的长度(2)+ MAC值(16)+数据串长度(4)+数据串(256) [数据包长度] 域 说明: 例如: int nbytes 实际报文长度 char cs_nob[2] 数据报文的头两位是数据包长度 cs_nob[0] = nbytes / 256 cs_nob[1] = nbytes % 256 应用码:本应用代码 31 说明: 所有域为定长报文
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 应用代码 例如 :31 Flag 1 请求标示:“1” Channel_code 2 70 : 银联
Mac_falg 2 10 : 银联1.0 (标准算法) 20 : 银联2.0 Bank_no 3 325/999 Index 7 Mac_length 2 MAC值的长度 Mac_value 32 用于验证的MAC值 Data_value_length 4 用于计算MAC数据长度 Date_value 256 用于计算MAC的数据
响应报文:应用代码(2)+ 响应标示(1位,填0”)+错误码(2)
- 产生MAC Mac_generate 请求报文:数据包长度(2)+本应用的应用代码(2)+ 请求标示(1位,填“1”)+渠道代码(2)+MAC算法标准(2)+分行号(3)+密钥索引(7)+密钥标志(1)+数据长度(4)+数据串(256)
数据报文长度要求: 例如: int nbytes 是实际报文长度 char cs_nob[2] 数据报文的头两位是数据包长度 cs_nob[0] = nbytes / 256 cs_nob[1] = nbytes % 256 应用码:32
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 应用代码 32 Flag 1 请求标示:“1” Channel_code 2 70:银联 MAC_flag 2 10 银联1.0 (标准算法) 20 银联2.0 Bank_no 3 325/999 Index 7 MacKey_flag 1 密钥标志: 0:使用已有MAC KEY; 1:使用更新密钥PINKEY来生成MAC值 2:使用更新密钥MACKEY来生成MAC值 Data_length 4 用于生成MAC的数据长度 Data_value 256 数据
响应报文:应用代码(2)+ 响应标示(1位,填‘0”)+错误码(2)+ MAC 数据长度(2) + MAC 值
- KEY 更新 Generate_key 功能:联机更新密钥到SSB。
请求报文:数据包长度(2)+应用代码(2)+请求标示(1位,填“1”)+渠道代码(2) +交易码(2)+MAC标准(2)+分行号(3)+密钥ID(7)+ 密钥密文长度(2)+ 密钥密文值(32)+密钥校验值长度(2)+ 密钥校验值(16)+MAC域的长度(2)+用于验证的MAC值(16)+用于生成MAC的数据长度(4)+用于生成MAC的数据(256) 数据报文长度要求: 例如: int nbytes 是实际报文长度 char cs_nob[2] 数据报文的头两位是数据包长度 cs_nob[0] = nbytes / 256 cs_nob[1] = nbytes % 256 应用码:33 交易码:01――更新的是Pinkey 02――更新的是Mackey
字段 长度 说明 Cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 33 Falg 1 请求标示:“1” Channel_code 2 70: 银联
Key_falg 2 01――更新的是Pinkey 02――更新的是Mackey MAC_falg 2 10 银联1.0 (标准算法) 20 银联2.0 Check_mac_flag 1 0 -- 不校验mac 值 1 -- 校验mac 值 Bank_no 3 325/999 index 7 例如:1234567 Key_block_length 2 Key_block 32 不足补空格 Key_checkvalue_length 2 Key_checkvalue 16 MAC_value_length 2 Mac 值的长度 MAC_value 32 Mac 值 MAC_data_length 4 计算mac 值的数据长度 MAC_data 256 计算mac 值的数据
响应报文:应用代码(2)+ 响应标示(1位,填0”)+错误码(2)
- 转加密(硬件加密) Translate_pin 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+分行号(3)+S_ID(7)+T_ID(7)+源应用代码(2)+目的应用代码(2)+源账号长度(2)+源账号(30) +目的账号长度(2)+目的账号(30)++密文长度(2)+密文值(16) 数据报文长度要求: 例如: int nbytes 是实际报文长度 char cs_nob[2] 数据报文的头两位是数据包长度 cs_nob[0] = nbytes / 256 cs_nob[1] = nbytes % 256 字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 34 Flag 1 请求标示:“1” S_Bank_no 3 例如:325 苏州/999 源分行号 T_Bank_no 3 目的分行号 Source_app 2 源渠道代码 S_key_index 7 源索引 例如:1234567 Target_app 2 目的渠道代码 T_key_index 7 目的索引例如:0234568 Source_acct_length 2 源帐号长度 Source_acct 30 源账号(左靠) Target_acct_length 2 目的账号长度 Target_acct 30 目的账号(左靠) Pinblock_length 2 源密文长度 Source_ Pin_block 16 源密文
响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+密文长度(2)+密文值(16) 5. 申请 KEY apply_work_key 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+渠道标识 (2)+分行号(3)+ index(7)+ key 类型 (2)+key_length
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 35 Flag 1 请求标示:“1” Channel_code 2 例如: 70 银联 Bank_no 3 例如: 325 苏州/999 key_index 7 索引 例如:1234567 Key_type 1 0 : zpk PIN key or 1 : zak MAC key or 2 :zek Key_length 2 16: byt or 32 :byt 响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+密文长度(2)+密文值 + 密钥校验值长度(2) + checkvalue
6、 申请 POS ZMK apply_zmk_key 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+渠道标识 (2)+分行号(3)+ index(7)+POS_index_length+POS_index+ key 类型 (2)+Key_length
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 36 Flag 1 请求标示:“1” Channel_code 2 例如: 70 银联 Bank_no 3 例如: 325 苏州/999 key_index 7 索引 例如:1234567 POS_ID_length 2 POS_ID Key_type 1 2 ZMK Key_length 2 16: byt or 32 :byt 响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+密文长度(2)+密文值 + 密钥校验值长度(2) + checkvalue
数据域说明:
所有的数据域统一靠左,不足位数的用空格补足。 如果数据域不是必须数据域请用空格补足位数。数据域的类型统一是char 型。
7、 数据加解密 JTYH_DecryptAndEncryptData 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+渠道标识 (2)+分行号(3)+ index(7)+数据密文长度 (4)+数据密文
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 45 Flag 1 请求标示:“1” Channel_code 2 渠道号 例如: 70 银联 Bank_no 3 分行号 例如: 325 苏州/999 key_index 7 柜员号 例如:1234567 encOrDec_Flag 1 加解密标识。0:加密;1:解密 data_length 4 数据密文长度(16整数倍) data n 数据密文 响应报文:应用代码(2)+响应标示(1位,填0”)+错误码(2)+数据明文长度(4)+明文值 注:数据加密由外部应用进行填充,填充后为16的整数倍
8、电子保管箱重置、修改、验证密码 ElecDropBoxOperator (1)重置密码: 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+服务标识 (1位,填“1”)+应用类型(1)+ PIN密文(16)+源账号长度(2)+目的账号长度(2)+ zpk密钥名称长度 (2)+ pvk密钥名称长度 (2)+源账号+目的账号+zpk名称+pvk名称
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码:37 Flag 1 请求标示:“1” Service_flag 1 服务标示:“1” App_type 1 应用类型,标志应用系统的类型 Pin_block 16 PIN密文,ZPK使用源帐号加密的PIN密文(ACC1) Bank_src_no 2 源帐号长度 Bank_dest_no 2 目的帐号长度 Zpk_name_len 2 ZPK名称长度 Pvk_name_len 2 PVK名称长度 Data 数据串,源帐号+目的帐号+ZPK名称+PVK名称
响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+ 服务标识(1) + 密码偏移量(6)
字段 长度 说明 App_code 2 本应用的应用代码:37 Flag 1 请求标示:“0” Err_code 2 00:成功 Service_flag 1 服务标示:“1” Pin_offset 6 密码偏移量
(2)修改密码 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+服务标识 (1位,填“2”)+应用类型(1)+ 旧PIN密文(16)+ 新PIN密文(16)+源账号长度(2)+目的账号长度(2)+ zpk密钥名称长度 (2)+ pvk密钥名称长度 (2)+源账号+目的账号+zpk名称+pvk名称
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码:37 Flag 1 请求标示:“1” Service_flag 1 服务标示:“2” App_type 1 应用类型,标志应用系统的类型 Pin_block_old 16 旧PIN密文 Pin_block_new 16 新PIN密文 Pin_offset_old 6 ZPK使用目的帐号机密的PIN密文 Bank_src_no 2 源帐号长度 Bank_dest_no 2 目的帐号长度 Zpk_name_len 2 ZPK名称长度 Pvk_name_len 2 PVK名称长度 Data 数据串,源帐号+目的帐号+ZPK名称+PVK名称
响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+ 服务标识(1) + 密码偏移量(6)
字段 长度 说明 App_code 2 本应用的应用代码:37 Flag 1 请求标示:“0” Err_code 2 00:成功 Service_flag 1 服务标示:“2” Pin_offset_new 6 使用目的帐号产生的PINOffset(New_PIN)
(3)验证密码 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”)+服务标识 (1位,填“3”)+应用类型(1)+ PIN密文(16)+密码偏移量(6)+源账号长度(2)+目的账号长度(2)+ zpk密钥名称长度 (2)+ pvk密钥名称长度 (2)+源账号+目的账号+zpk名称+pvk名称
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码:37 Flag 1 请求标示:“1” Service_flag 1 服务标示:“3” App_type 1 应用类型,标志应用系统的类型 Pin_block 16 PIN密文,ZPK使用源帐号加密的PIN密文(ACC1) Pin_offset 6 密码偏移量 Bank_src_no 2 源帐号长度 Bank_dest_no 2 目的帐号长度 Zpk_name_len 2 ZPK名称长度 Pvk_name_len 2 PVK名称长度 Data 数据串,源帐号+目的帐号+ZPK名称+PVK名称
响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+ 服务标识(1)
字段 长度 说明 App_code 2 本应用的应用代码:37 Flag 1 请求标示:“0” Err_code 2 00:成功 Service_flag 1 服务标示:“3”
9、PINPAD下载主密钥 ApplyMasterKey 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”) +分行号(3)
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 20 Flag 1 请求标示:“1” Bank_no 3 例如: 325 苏州/999
响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+密钥长度(2)+密文值(10 * 密钥长度)
字段 长度 说明 App_code 2 本应用的应用代码:20 Flag 1 请求标示:“0” Err_code 2 00:成功 Key_len 2 密钥长度 Key_values 10 * Key_len 10把密钥密文值
10、PINPAD下载工作密钥 ApplyWorkKey 请求报文:数据包长度(2)+本应用的应用代码(2)+请求标示(1位,填“1”) +分行号(3)+ 柜员号(7)
字段 长度 说明 cs_nob 2 数据包长度(不包括本身) App_code 2 本应用的应用代码 21 Flag 1 请求标示:“1” Bank_no 3 例如: 325 苏州/999 key_index 7 柜员号 例如:1234567
响应报文:应用代码(2)++响应标示(1位,填0”)+错误码(2)+ 密钥密文值
字段 长度 说明 App_code 2 本应用的应用代码:20 Flag 1 请求标示:“0” Err_code 2 00:成功 Key_values 10把密钥密文值
二.操作手册 1.程序更新 2.密钥操作说明
动态密钥,产生明文ZMK密钥 <1>在加密面板上面选择加密机(卫士通加密机)产生随机明文密钥。 可以选择单倍,双倍,三倍长的密钥。产生个数2个。 <2>合成密钥,把产生的密钥明文在加密机合成。选择,其他密钥,密钥类型: 000 ,分量个数: 2 。 把产生的2个明文密钥分别输入,得到密钥的密文和校验值。 <3>增加密钥到密钥库。为此应用分配应用代码50~59 之间任意数字。 那么密钥名称就是:5X.XXX.zmk ,例如 以苏州分行为例: 50.325.zmk。 sspadm 用户进入: 执行 mngDesKeyDB edit Command>50.325.zmk 50.325.zmk not exists! 如果是单倍长的密钥这里输入”64” , 如果是双倍长的输入”128”. Command>length UnionInput Des Key Length:(64/128/192/quit)64 Command>type UnionInput Key Type,quit to exit zmk
Command>insert [fullName] [50.325.zmk] [cryptogram] [] [checkValue] [] [activeDate] [20061026] [maxUseTimes] [1000000000] [useTimes] [9] [maxEffectiveDays] [3650] [lastUpdateTime] [1161852990] [oldVerEffective] [1] [oldValue] [] [oldCheckValue] [] [windowBetweenKeyVer] [600] [container] [00] this is a 64 bits des key. this is a ZMK! Are you sure to add this des key?(Y/N)y UnionInsertDesKeyIntoKeyDB [50.325.zmk] OK!
完成上述操作,密钥值是空的需要把加密机合成的密钥值维护给此密钥。 Command>value UnionInput 64 Bits DesKey,quit to exit ++++++++++++++++ 07749E49C9E3128F ――――> 此处值为加密机合成返回的密钥值
Command>checkvalue UnionInput the checkvalue ++++++++++++++++ 07749E49C9E3128F ―――――> 此处值为加密机合成返回的密钥的校验值checkvalue 值一般只需要8位就可以了
Command>updatevalue [fullName] [50.325.zmk] [cryptogram] [07749E49C9E3128F] [checkValue] [07749E49C9E3128F] [activeDate] [20061026] [maxUseTimes] [1000000000] [useTimes] [0] [maxEffectiveDays] [3650] [lastUpdateTime] [1161918065] [oldVerEffective] [1] [oldValue] [] [oldCheckValue] [] [windowBetweenKeyVer] [600] [container] [ ] this is a 64 bits des key. this is a ZMK! Are you sure to update value of this des key?(Y/N)y UnionUpdateDesKeyValueInKeyDB [50.325.zmk] OK!
接着,增加对应的 zpk (50.325.zpk),此值是应用系统通过申请KEY的交易申请由加密机随机产生的。
Command>50.325.zpk 50.325.zpk not exists! Command>type UnionInput Key Type,quit to exit zpk Command>length UnionInput Des Key Length:(64/128/192/quit)64 Command>insert [fullName] [50.325.zpk] [cryptogram] [] [checkValue] [] [activeDate] [20061026] [maxUseTimes] [1000000000] [useTimes] [9] [maxEffectiveDays] [3650] [lastUpdateTime] [1161852990] [oldVerEffective] [1] [oldValue] [] [oldCheckValue] [] [windowBetweenKeyVer] [600] [container] [00] this is a 64 bits des key. this is a ZPK! Are you sure to add this des key?(Y/N)y UnionInsertDesKeyIntoKeyDB [50.325.zpk] OK!
<4> 应用渠道密钥保存。 应用渠道保存加密机随机产生的2个密钥明文值。首先,申请此渠道的工作密钥zpk 从分行SSB系统。SSB返回工作密钥密文,此密文是用渠道保存的明文密钥用DES算法加密的。具体渠道解密此工作密钥步凑如下:
例如: 2个明文密钥是:
第一分量:1234567890ABCDEF
第二分量:ABCDEF1234567890
那么此密钥的真实密钥值为 两个密钥的异或的值 A , A : B9F9B96AA4FDB57F ---- 此值用来解密渠道申请工作密钥的密文值 渠道申请的工作密钥zpk 密文为 B: ACCC29AE5064F4AD
那么用 A=B9F9B96AA4FDB57F 算法是标准DES算法解密zpk 的密文 B=ACCC29AE5064F4AD 得到的结果是C : 1234567890111111 应用渠道加密保存此结果C ,交易时用 C 加密客户的密码 pin :123456 和帐号异或的结果(遵循ANSIX 9.8)得到密码密文 D:pin_block .如下: 带主帐号的ANSIX 9.8 如下: PIN 明文:123456 磁卡上PAN:1234 5678 9012 3456 截取下的PAN:4567 8901 2345 则用于PIN 加密的主账号为:0x00 0x00 0x45 0x67 0x89 0x01 0x23 0x45 则PIN PAN BLOCK 为:0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF 异或:0x00 0x00 0x45 0x67 0x89 0x01 0x23 0x45 结果为:0x06 0x12 0x71 0x31 0x76 0xFE 0xDC 0xBA 5> 通过 SSB系统的转加密的接口交易,得到加密机加密的pin_block 结果送核心主机验证密码, 注意: 送主机时后面补3000 补足20上送核心。 固定密钥,产生明文ZPK <1>在加密面板上面选择加密机(卫士通加密机)产生随机明文密钥。 可以选择单倍,双倍,三倍长的密钥。产生个数2个。 <2>合成密钥,把产生的密钥明文在加密机合成。选择,其他密钥,密钥类型: 001 ,分量个数: 2 。 把产生的2个明文密钥分别输入,得到密钥的密文和校验值。 <3>增加密钥到密钥库。为此应用分配应用代码50~59 之间任意数字。 那么密钥名称就是:5X.XXX.zpk ,例如 以苏州分行为例: 50.325.zpk。 sspadm 用户进入: 执行 mngDesKeyDB edit Command>50.325.zpk 50.325.zpk not exists! 如果是单倍长的密钥这里输入”64” , 如果是双倍长的输入”128”. Command>length UnionInput Des Key Length:(64/128/192/quit)64 Command>type UnionInput Key Type,quit to exit zpk
Command>insert [fullName] [50.325.zpk] [cryptogram] [] [checkValue] [] [activeDate] [20061026] [maxUseTimes] [1000000000] [useTimes] [9] [maxEffectiveDays] [3650] [lastUpdateTime] [1161852990] [oldVerEffective] [1] [oldValue] [] [oldCheckValue] [] [windowBetweenKeyVer] [600] [container] [00] this is a 64 bits des key. this is a ZPK! Are you sure to add this des key?(Y/N)y UnionInsertDesKeyIntoKeyDB [50.325.zpk] OK!
完成上述操作,密钥值是空的需要把加密机合成的密钥值维护给此密钥。 Command>value UnionInput 64 Bits DesKey,quit to exit ++++++++++++++++ 07749E49C9E3128F ――――> 此处值为加密机合成返回的密钥值
Command>checkvalue UnionInput the checkvalue ++++++++++++++++ 07749E49C9E3128F ――――> 此处值为加密机合成返回的密钥的校验值checkvalue 值一般只需要6位就可以了 Command>updatevalue [fullName] [50.325.zpk] [cryptogram] [07749E49C9E3128F] [checkValue] [07749E49C9E3128F] [activeDate] [20061026] [maxUseTimes] [1000000000] [useTimes] [0] [maxEffectiveDays] [3650] [lastUpdateTime] [1161918065] [oldVerEffective] [1] [oldValue] [] [oldCheckValue] [] [windowBetweenKeyVer] [600] [container] [ ] this is a 64 bits des key. this is a ZPK! Are you sure to update value of this des key?(Y/N)y UnionUpdateDesKeyValueInKeyDB [50.325.zmk] OK!
***这里是不需要对应的 50.325.zmk 的密钥。
<4> 应用渠道密钥保存。 应用渠道保存加密机随机产生的2个密钥明文值。
例如: 2个明文密钥是:
第一分量:1234567890ABCDEF
第二分量:ABCDEF1234567890
那么此密钥的真实密钥值为 两个密钥的异或的值 A 。
A = B9F9B96AA4FDB57F ---- 此值用来加密渠道交易客户帐号密码
应用渠道加密保存此结果A ,交易时用 A 加密客户的密码 pin :123456 和帐号异或的结果(遵循ANSIX 9.8)得到密码密文 B:pin_block .如下:
带主帐号的ANSIX 9.8 如下:
PIN 明文:123456
磁卡上PAN:1234 5678 9012 3456
截取下的PAN:4567 8901 2345
则用于PIN 加密的主账号为:0x00 0x00 0x45 0x67 0x89 0x01 0x23 0x45
则PIN PAN BLOCK 为:0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
异或:0x00 0x00 0x45 0x67 0x89 0x01 0x23 0x45
结果为:0x06 0x12 0x71 0x31 0x76 0xFE 0xDC 0xBA
5> 通过 SSB系统的转加密的接口交易,得到加密机加密的pin_block 结果送核心主机验证密码,
注意: 送主机时后面补3000 补足20上送核心。