PBOC2.0安全体系范围
PB0C2.0整个安全体系包括PB0C2.0卡片安全以及PB0C2.0终端安全两大部分。无论是卡片安全还是终端安全都涉及密钥、证书以及算法等密码学基础。3.1.1安全机制3.1.1.1对称加密机制3.1.1.1.1加密解密
对数据的加密采用分组长度为8字节(64位)或16字节(128位)分组加密算法,可以是电子密码本(ECB)模式或密码块链接(CBC)模式。
用加密过程密钥KS对任意长度的报文MSG加密的步骤如下:
1.填充并分块。
——如果报文MSG的度不是分组长度的整数倍,在MSG的右端加上1个“80”字节,然后再在右端加上最少的“00”字节,使得结果报文的长度是分组长度的整数倍。
——如果报文MSG的长度是分组长度的整数倍,不对数据作填充。
被加密数据首先要被格式化为以下形式的数据块:
明文数据的长度,不包括填充字符。
明文数据
填充字符(按上述填充方式)。
然后MSG被拆分为8字节或16字节的块XI,X2,…,XK。
2.密文计算。
ECB模式
用加密过程密钥KS以ECB模式的分组加密算法将块XI,X2,…,XK加密为分组长度的块Yl,Y2,…,YK。
因此当i=1,2,…,K时分别计算:
Yi:=ALG(KS)[Xi]。
CBC模式
用加密过程密钥KS以CBC模式的分组加密算法将块XI,X2,…,XK加密.为分组长度的块Yl,Y2,…,YK。
108《中国金融集成电路(1C)卡规范》解读
因此当i =1,2,…,K时分别计算: Yi : = ALG (KS) [Xi ㊉ Yi -1],
Y0的初始值为
—对应8字节分组加密算法Y0 :=(“00”1 丨 “00” M“00”
“00” i 丨 “00” 1丨 “00” 11 “00” 丨 1“00”)
——对应16字节分组加密算法Y0 :=(“00”1 丨 “00” 1 1“00”
“00” M “00” 11 “00” 11 “00” 11 “00”1 1 “00” 1 1“00”
“00” 1 1 “00” 1丨 “00” 1丨 “00” 1 1“00” 1丨 “00”)
记为: Y : = (YI 11 Y2 1 1
...丨 1 YK)=ENC(KS) [MSG]。
解密过程如下:
密文解密 ECB模式
当i = 1,2,…,K时分别计算:
Xi : = ALG-1 (KS) [Yi ]
CBC模式
当i = 1, 2,…,K时分别计算:
Xi: = ALG-1 (KS) [Yi ] © Yi-1,
Y0的初始值为
对应8字节分组加密算法Y0:= (“00” I丨“00”丨丨“00” I I “00”丨 丨 “00” I I “00” I I “00” I I “00”)
对应16字节分组加密算法Y0:= ( “00”丨I “00” I I “00”丨丨“00” 丨丨 “00” I I “00” I I “00” II “00” 丨 I “00” I I “00” I I “00” 丨 I “00”丨丨“00”丨丨“00”丨丨“00”丨丨“00”)
为了得到原来的报文MSG,将块XI,X2,…,XK连接起来,如果使用了填 充(见上文),从最后一块XK中删除(“80”丨I “00” I I “00” 1 I…丨I “00”)字节串的结尾。
记为 MSG = DEC (KS) [Y]。
3.1.1.1.2报文鉴别码 规范中MAC的长度S为4字节。
MAC/TAC的产生使用以下单倍长DEA算法:
第一步:将一个8个字节长的初始值(Initial Vector)设定为十六进制的 “Ox 00 00 00 00 00 00 0000”。
第二步:将所有的输入数据按指定顺序串联成一个数据块。
第三步:将串联成的数据块分割为8字节长的数据块组,标识为Dl、D2
1)3、I4等。分割到最后,余下的字节组成一个长度小于等于8字节的最后一块数据块。
第四步:如果最后一个数据块长度为8字节,则在此数据块后附加一个8字节长的数据块,附加的数据块为:十六进制的“0x8000000000000000”。如果最后一个数据块长度小于8字节,则该数据块的最后填补一个值为|六进制
¨0x80”的字节。如果填补之后的数据块长度等于8字节,则跳至第五步。如果填补之后的数据块长度仍小于8字节,则在数据块后填补十六进制“0x00”的字节至数据块长度为8字节。
第五步:MAC的产生是通过上述方法产生的数据块组,由过程密钥进行加密运算TAC的产生是通过上述方法产生的数据块组,由DTK密钥左右8位字节进行异或运算的结果进行加密运算。MAC或TAC的算法见图3-1描述
第六步:最终值的左4字节为MAC或TAC
图3-1MAC和TAC的单倍长DEA密钥算法
计算一个s字节的MAC(4≤s≤8)是依照IO/IEC9797-1规范,采用BC模式的8了节分组加密算法。更准确地说,用MAC过程密钥KS对任意长
度的报文MSG计算MAC值S的步骤如下:
1. 填充并分块。
依据岱0 7816-4 (等价于130/1£€ 9797 -1中的模式2)对报文1^&进行填充,因此在MSG的右端强制加上1个“80”字节,然后再在右端加上最少的
“00”字节,使得结果报文的长度MSG:= (MSG I丨“80” I丨“00” I I
“00” I丨…丨丨“00”)是8字节的整数倍。
然后MSG被拆分为8字节的块XI, X2,…, XK。
2. MAC过程密钥。
MAC过程密钥KS既可以只包括最左端密钥块KS = KSL,也可以由最左端密钥块和最右端密钥块连接而成KS= (KSL I I KSR)。
3. 密文计算。
用MAC过程密钥的最左端块KSL, 以CBC模式的分组加密处理8字节块XI, X2,…, XK:
Hi : 二 ALG (KSL) [Xi ㊉ Hi-1] , 这 里 i = 1, 2,…, K。
H0 的初始值 H0 : = ( “00” I I “00” I I “00” I I “00” I I “00” I
I “00” 丨 I “00” 丨丨 “00,,)0
用以下的两种方法的^种计算8字节的块HK + 1。
依照 ISO/IEC 9797 - 1 算法 1: HK + 1 :二 HK。
依照 ISO/IEC 9797 - 1 算法 3 : HK + 1 :二 ALG ( KSL) [ALG-1 (KSR)
(HK) ] 。
MAC值S等于HK + 1的s个最高位字节。
3. 1.1. 1.3过程密钥分散MAC和数据加密过程密钥的产生如下所述(在本节中统称为“过程密钥A”和“过程密钥B”):
1. 单长度DES过程密钥。
第一步:卡片/发卡行决定是使用MAC密钥A和B还是数据加密密钥A和
B来进行所选择的算法处理(以后统称为“Key A”和“Key B”)。
第二步:将当前的ATC在其左边用十六进制数字“0”填充到8个字节,用Key A和Key B对该数据作3 - DES运算产生过程密钥A。
Z: = 3 -DES (Key) [ “00” I I “00” II “00” I I “00” I I “00” I
I “00” 丨 丨 ATC ]
2. 双长度DES过程密钥。
第一步:卡片/发卡行决定是使用MAC密钥A和B还是数据加密密钥A和B来进行所选择的算法处理。
图 3 - 2 单 长 度 过 程 密 钥 的 产 生
第二步:将当前的ATC在其左边用十六进制数字“0”填充到8个字节,用Key A和Key B对该数据作3 - DES运算产生过程密钥A。
将当前的ATC异或十六进制值FFFF后在其左边用十六进制数字“0”填充到8个字节,使用相同方法对该轉据作3 - DES运算得到过程密钥B。
ZL :二 “00” | 3-DES (Key) 1 1 ATC ] | [“00” 1 1 | “00” 1 | “00” 1 | 1 “00” 1 | 1 “00” |
ZR := “00” | 3-DES (Key) II (ATC㊉“ | [“00” 1 1 FFFF”)] | “00” 1 | “00” 1 | 1 “00” 1 | 1 “00” |
为了符合对DES密钥奇校验的要求,DES密钥每个字节的最低位应被设成能够保证密钥的8字节或1 6 字节的每一个都有奇数个非0位。
3 . 1 . 1 . 1 . 4子密钥分散
本节指定了一种利用一个1 6 字节的发卡行主密钥IMK分散得出用于密文生成、发卡行认证和安全报文的1C卡子密钥的方法。
这一方式以主账号(PAN)和主账号序列号(如果主账号序列号不存在,则用一个字节“〇〇”代替)的最右16个数字作为输人数据,以及16字节的发卡行主密钥IMK作为输入,生成16字节的1C卡子密钥MK作为输出:
1. 如果主账号和主账号序列号X的长度小于16个数字,X右对齐,在最左端填充十六进制的“〇”以获得8字节的Y。如果X的长度至少有16个数字,
那么Y由X的最右边的16个数字组成。
2. 计算2个8字节的数字。
基于8字节分组加密算法的计算方法:
ZL : 二 ALG ( IMK) [ Y]
以及
ZR : = ALG (IMK) [Y® ( “FF” I I “FF” I I “FF” I I “FF” I I
“FF” I I “FF” 丨 I “FF” I I “FF”)]
并定义
Z : = (ZL I I ZR)
基于16字节分组加密算法的计算方法
Z : = ALG (IMK) {Y I I [Y ㊉ (“FF” I 丨 “FF” I 丨 “FF” I I “FF”
II “FF” 丨丨 “FF” 丨丨 “FF” I I “FF”)]}
16字节的1C卡子密钥MK就等于Z,此外对于DES算法, Z的每个字节的
最低位应被设成能够保证MK的16字节的每一个都有奇数个非0位(为了符合
对DES密钥奇校验的要求)。
3. 1. 1.2 非对称加密机制
3. 1.1.2. 1数字签名方案
本节里描述了使用依照ISO/IEC 9796-2规范的HASH函数的给定报文恢复数字签名方案, 规范中的静态和动态数据认证都使用这一方案。数字签名方案使用下面两种算法
------个可逆的非对称算法, 由二个依赖于私钥SK的签名函数Sign (SK)[]和一个依赖于公钥PK的恢复函数Recover (PK)[]组成。 两个函数都将N字节的数字映射为N字节的数字, 并且对于任何N字节的数字X有以下特性:
Recover (PK) [ Sign (SK) [X] ] = X
------个哈希算法Hash [], 将任意长度的报文映射为一个20字节的哈希值。
3. 1.1. 2. 2数字签名产生
对由至少N -21字节长的由任意长数据L组成的报文MSG计算签名S的过程如下。
1. 计算报文M的20字节的HASH值H : = Hash [ MSG]。
2. 将MSG拆分成两部分MSG = (MSG1 I I MSG2),其中MSG1由MSG最左端(最高位)的N-22个字节组成, MSG2由MSG剩余的(最低位)的L-N + 22个字节组成。
3. 定义一个字节B : = “6A”。
4. 定义一个字节E : = “BC”。
5. 将N字节的块X定义为块B,MSG1、 H和E的连接, 因此X : = (B I I MSG1 I I H I I E)
6. 数字签名S被定义为N字节的数字
3 PB0C2. 0安全体系解析 111
S : = Sign (SK) [X]
3. 1. 1.2.3数字签名验证
相应的签名验证过程如下:
1. 检查数字签名S是否由N个字节组成。
2. 由数字签名S恢复得到N字节的数字X: X = Recover (PK) [S]
3. 将块X分割成X = (B I I MSG1 I I H I I E),这里: B为1字节
长, H为20字节长, E为1字节长。
MSG1由剩余的N-22个字节组成。
4. 检查字节B是否等于“6A”。
5. 检查字节E是否等于“BC”。
6. 计算 MSG = (MSG1 I I MSG2),并检查是否满足 H = Hash [MSG]。
当且仅当这些检查都正确时, 这条接收的报文被认为是真实的。
3. 1.1.3 认可的算法
3. 1. 1.3. 1对称加密算法
(一) DES算法
DES算法是以8字节(64位)分组为单位进行运算, 密钥长度为8字节。
该算法被允许用于安全报文传送'mac机制密文运算, 算法的详细过程在ISO
8731 -1、 ISO 8732、 ISO/IEC 10116 中定义。
3-DES加密是指使用双长度(16字节)密钥K= (KLI I KR)将8字节明文数据分组加密成密文数据分组, 如下所示:
Y = DES (KL) i DES -1 (KR) [DES (KL) (X)]}
解密的方式如下:
X = DES-1 (KL) {DES (KR) [DES-1 (KL) (Y)](
单倍DES仅允许用于使用ISO 9797 - 1中的算法3 (3DES用于最后一个分组)的MAC机制。
(二) SSF33 算法
SSF33算法是以16字节(128位)分组为单位进行运算, 密钥长度为16字节, 该算法也可以被用于安全报文传送和MAC机制密文运算。
表3-1 SSF33同DES的比较
比较项 | DES | 3 -DES | SSF33 |
密钥长度 | 8字节 | 16字节 | 16字节 |
分组长度 | 8字节 | 8字节 | 16字节 |
使用SSF33算法和基于3 - DES的对称加密机制使用相同长度的密钥, 能够 同原有的基于3-DES的密钥管理兼容, 其区别在于分组长度不同, 在加密, 计
算MAC和密钥分散时填充和计算方式不同, 但报文鉴别码和密钥分散输出结果
的长度同3 - DES算法保持一致。
3. 1. 1.3.2非对称加密算法
( 一) RSA算法
该可逆算法是经批准用于加密和生成数字签名的算法。 公钥指数的值只允
许是3和216 + 1。
( 二) SHA-1 算法
该算法在FIPS 1801中被标准化。 SHA-1对任意长度的报文的输入, 产生
一个20字节的哈希值。 本哈希算法的标志编码为16进制数“01”。