一、 密钥体系的要求
1. 保证交易信息的安全
保证联线终端在通过共享前置机向各行的银行卡主机发送请求和接收响应时,报文的组成部分不能被增加或删除,报文的内容不能被修改,加密的信息(如持卡人输入的密码)不能被破译。
2. 不降低各行原有的安全程度
当有多个安全程度不等的银行参加共享时,要使得联线终端和共享前置机的安全程度不低于原来对于安全要求最高的银行系统的安全程度,而对于安全要求较低的银行,只能在共享前置机与原主机系统交换信息的时候将安全程度降低到主机系统需要的水平。
3. 实现密钥的隔离
谁负责哪一段通信,谁就掌握哪一段的密钥,各参与共享的银行都不掌握他行的密钥。
4. 有足够的灵活性
当增加联线终端、共享前置机甚至增加银行时,要对原有密钥的影响尽量小,最好能实现除了需要新设置的密钥外,其余的密钥可以正常工作。
5. 兼顾交易的安全性和记录的安全性
考虑到多行共享的特殊性,除了要保证信息传递时交易的安全性外,还应该对于关键的记录采取技术措施,如果对这些关键的纪录进行了插入、修改和删除,可以进行验证。
6. 尽量简洁和清晰
7. 在经济和技术上可行
要符合国家对于加密产品的要求,与目前银行的联线终端采用的加密设备或者部件兼容。
8. 具有较好的可扩展性
由于目前DES算法的安全性正在日益受到挑战,我们国家也在研制自己的金融加密算法,一旦要求改变算法,密钥体系应该具有比较好的适应性。
二、 密钥体系若干概念
1. 有关共享前置机系统的几个概念
(1) 共享前置系统(Shared Prepositive System,简称SPS)
由共享前置机和硬件加密机及在其上运行的相应软件构成的系统,每一个参加共享的银行,必须配备一套SPS。在SPS中,处理有关加解密的部分定义为SPS的加解密子系统,简称SPS-EDSS(SPS-Encrypting and Decrypting Sub-System )。
(2) 共享前置机(Shared Prepositive Computer,简称SPC)
SPC是SPS的核心部分,主要完成: ①接收联线终端的请求信息并响应;②向他行SPS发送信息并等待响应;③向本行主机发送信息并等待响应;④向HSM发送信息并等待响应。
(3) 联线终端设备(Shared Online Terminal,简称SOTerm)
通过联线向远程主机系统发送请求信息,等待主机的响应信息,并依据主机的响应信息而动作的设备。
(4) 硬件加密机(Hardware Security Machine,简称HSM)
用来安全地存储密钥,进行安全运算和用硬噪声源生成非弱密钥的设备,可以通过通信接口与计算机等设备进行通信。
2. 有关加密和密钥体系的几个概念
(1) 数据的态
在SPS-EDSS中,除主密钥永远处于明文态外,任何数据在任一时刻,或处于明文态,或处于密文态。在下文中,对于处于明文态的数据,以其名称表示; 对处于密文态的数据,以一对竖线“||”括起来的名称表示。
密钥本身在SPS-EDSS中也是数据,例如,银行终端密钥BTK的明文为“BTK”,其密文为“|BTK|”。
(2) 密钥
一个二进制串,参加加密、解密或MAC(MAB)运算。
(3) 算法
在SPS-EDSS中,涉及的主要算法为对称密钥算法,目前典型的算法为DES算法,如果中国人民银行在全国推行使用专用算法,SPS-EDSS可以改用专用算法。
(4) 加密运算
加密运算是指采用一种算法,以一个符合要求(比如位数)的数据为密钥,对一个数据的明文进行计算以得到其密文的过程。以key为密钥对data进行加密运算,可将这一过程标记为:
|data|=E(key, data, algorithm)
其中algorithm为算法,加密与对应的解密算法必须一致。
(5) 解密运算
解密运算是指加密运算的逆运算,即对一个数据的密文进行计算以得到其明文的过程。以key为密钥对|data|进行解密运算,则可将这一过程标记为:
data=D(key, |data|, algorithm)
(6) MAC运算
MAC运算是采用一种算法,以一个符合要求(比如位数)的数据为密钥,对数据进行计算以得到其MAC值的过程。以key为密钥对data进行加密运算,则可将这一过程标记为:
MAC Value=GenerateMAC(key, data, algorithm)
另外,校验MAC是MAC运算的一种,校验MAC是指以一个符合要求(比如位数)的数据为密钥,对一个数据进行计算以得到其MAC值,并与数据原来的MAC值进行比较以确定数据是否精确地与原来计算的MAC值一致的过程。以key为密钥,校验data的MAC值是否正确,则可将这一过程标记为:
ret=VerifyMAC(key,data, MAC Value, algorithm)
其中假定当校验的结果一致时,ret为0; 而当校验的结果不一致时,ret为非0。
(7)MAB运算
MAB运算是采用一种算法,以一个符合要求(比如位数)的数据为密钥,以给定的4个Byte数据为首次运算的初始向量,对数据进行计算以得到其MAB值的过程,在后续运算中,以上次MAB值为本次运算的初始向量。以key为密钥对data进行加密运算,以IV为初始向量,则可将这一过程标记为:
MAB Value=GenerateMAB(key, data, IV, algorithm)
当需要对MAB的结果进行校验时,需要重新计算原data的MAB值,并对两次计算的MAB进行比较判定。
MAB可同时用来保证记录的集合和一个记录内部字段的完整性与可靠性。
(8)密钥向量
密钥向量是指有限个密钥,在安全运算的过程中,每次有一个且仅有一个密钥参加运算,不论哪一个密钥参加运算,均处于完全相同的角色。密钥向量用方括号来标记。当标识密钥向量时,标识为:
[key]n
表示密钥向量key共有n维。当标识密钥向量中的一个具体元素时,标识为:
[key]i
其中i表示密钥向量key中的第i维。
密钥向量的每一维都只能是单个密钥。
(9)密钥集合
密钥集合是指有限个密钥,在安全运算的过程中,针对每一个运算的实例,如对应不同的SPC或不同的SOTerm,有一个密钥参加运算,参加运算的密钥在运算中均处于完全相同的角色。密钥集合用花括号来标记。当标识密钥集合整体时,标识为:
{key}m
表示密钥集合key由m个元素组成。当标识密钥集合中的一个具体元素时,标识为:
{key}j
其中j表示密钥集合key中的某一个元素。
密钥集合的每一元素可以是单个密钥,也可以是密钥向量。当密钥集合的元素为密钥向量时,其全部的元素均应是密钥向量,且维数必须相同。

图1 SPE-EDSS密钥体系结构分
三、 密钥体系结构
1. 总体结构和主密钥
在SPS-EDSS中涉及到的全部密钥,构成了SPS的密钥体系,如图1所示。其各个密钥的存储位置和对应关系如图2所示。由图可见,密钥体系为单根的树形拓扑结构,MK为加密机的主密钥(根),如果采用硬件加密机许可,可以输入一个向量(nMK个),但是在每一个时刻,仅有一个发挥作用。如果认为各个主密钥的明文和密文的安全程度是完全一致的,也可以仅采用一个MK,图2就是按一个MK考虑的。MK的明文存储在HSM中。
在密钥体系的第二层,由MK保护着BMK、SMK、TMK三个密钥分枝,分别保护着三个不同的数据通道,而且这三者之间是相互隔离的,即攻破了密钥体系的任何一枝,都对攻击其他分枝没有任何帮助,同时也不降低其他分枝的安全性。BMK、SMK、TMK的明文也都存储在HSM中。
2. 共享前置机与银行主机之间的密钥
第一条数据通道是SPC与银行卡主机之间的通道,由银行主密钥BMK进行保护,由于每套 SPC只与一个银行卡主机相关,故BMK可以一次设置多个定期更换,但是同时工作的只能有一个。
BMK保护着银行终端主密钥BTK,BTK由银行卡主机系统生成,最简单的情况是在某一个区域内全部的SOTerm(可能主要为POS)只有一个,最复杂的情况是每一台SOTerm有多个,可以定期轮换使用。因此,在SPS-EDSS中,必须按照最复杂的情况进行处理,当某些银行对于密钥管理比较简单时,可以取值mBTK=1和nBTK=1。
但是,即使目前所有参加共享的银行都采用最简单的情况,也不建议将BMK与BTK合一,否则,将来则极难进行扩展。BTK在SPS上将密文存储在SPC中,每次使用时送入HSM使BMK还原为明文。在银行卡主机上如何存放,取决于原来系统的设计。BTK属于第三层密钥。
BTK保护着两个工作密钥——银行终端PIN密钥BTPinK和银行终端MAC密钥BTMacK,BTPinK和BTMacK由银行卡主机系统生成,最简单的情况是两者合二为一,甚至可能与BTK合并,即在POS中只有一个密钥。最复杂的情况是在每台POS的每次交易时都要更换密钥,或者每次更换一组密钥,然后按照序号使用,每个密钥只使用有限的次数,例如可以每批交换一组密钥。因此,对于BTPinK和BTMacK处理的原则与BTK相同,即按照最复杂的情况进行设计。BTPinK和BTMacK在SPS上将密文存储在SPC中,每次使用时送入HSM,使BTK还原为明文。在银行卡主机上如何存放,取决于原来系统的设计。BTPinK和BTMacK属于第四层密钥。
3. 共享前置机之间和内部使用的密钥
第二条数据通道是SPC之间的通道,由共享主密钥SMK进行保护,考虑到在共享的环境中要做到各共享行对等,故各个SPC两两之间有自己的主密钥,并由参加共享的双方共同管理。SMK设计成(共享的行数-1)个同时工作,且在每两个行之间每次可以设置多个,定期更换。如果HSM在硬件上存在限制,也可以每次只设置一个,这时系统的安全性并不受到影响,但是如果决定更换SMK,则必须进行人工输入。
SMK保护着四个密钥,根据用途的不同分为两组。一组是报文密钥组,包括共享PIN密钥SPinK和共享MAC密钥SMacK,这两个密钥由HSM自动生成,mSPinK=mSMacK=(共享的行数-1),在每次交易或者每批SPC互相签到时更换,也可以一次生成一组,数量为nSPinK= nSMacK,在交易时轮换使用。这一组密钥在任何具有报文交换功能的系统中都必须具备。另一组密钥是记录密钥组,包括共享RecMab密钥SRecMabK和共享RecMac密钥SRecMacK,其中SRecMabK用来对流水类的记录进行MAB运算,这里的流水类记录,必须具备一旦记录就不能更改的特点;SRecMacK用来对前后记录没有顺序关系的记录进行MAC运算,例如操作员和重要操作记录的有关表,可以保证记录本身不被篡改。目前记录密钥还很少应用,一方面是由于使用记录密钥要增加一些系统开销,另一方面是大部分系统全部是属于一个银行的,不像多银行共享的情况,在出现单边账的情况下,需要从其他银行取得交易的原始数据。尽管这四个密钥是由SMK保护,但是严格地说,它们应该属于第四层密钥。
4.共享前置机与SOTerm之间和SOTerm自己使用的密钥
第三条数据通道是SPC与SOTerm之间的通道,由终端主密钥TMK进行保护。每一台SOTerm都有自己的终端主密钥TK,即mTK=SOTerm的台数,这样,即使成功地由一台SOTerm的密文得到了明文,也不涉及到其他SOTerm的安全。TK由HSM产生后下载到SOTerm中,考虑到应用的方便,在SOTerm的密码键盘或者其他的密钥管理器件的容量足够大的情况下,可以一次装一组TK(其个数为nTK),通过人工或者联线命令确定当前的活动TK。为了下装POS的方便,可以采取足够安全度的机制传递TK,例如可以采取下列步骤:①将由HSM产生的TK的明文先下装到一个带有硬件加密模块的便携计算机中; ②如果便携机的硬件加密模块具有足够的、安全的存储能力,则将TK的明文存放在便携机的硬件加密模块中,否则,将密钥的明文经过便携机的硬件加密模块的加密,将密文存储在便携机的硬盘上; ③将该计算机携带到SOTerm的安装现场,再将TK由便携机传递到SOTerm中。总之,TK一定要通过人工的方式进行传递。
TK保护的密钥也分为两组,一组是报文工作密钥,包括终端PIN密钥TpinK和终端MAC密钥TmacK,分别用于保护持卡人输入的PIN和产生报文的MAC。考虑到应用的安全,这两个密钥由HSM产生,并应按一次一密的方式工作,就是说,在每一次报文的返回信息中,将带有下一次使用的密钥,因此,不需要考虑一次下载多个密钥的情况。从目前的国内金融交易实际情况看,就是一批交换一次密钥,也可以保证足够的安全性。TK保护的另一组密钥为终端打单MAC密钥TPrtMacK。这个密钥是考虑到在大量采用联线终端后,即使在商户放置了压卡机,由于需要压单的情况很少,而且压印的单据与打印的单据又不同,因此很难在需要办理手工业务的情况下保证业务需要,而且随着特约商户的增加,同时维护一套联线的设备和一套手工设备需要很大的成本。目前一些商业银行已经采取了SOTerm(POS)打单的方法,通过压卡,可以使凸印的卡面信息反映到交易的单据上,此时交易的媒介是卡面的凸字,可以说明卡片确实到了交易的现场。而如果采用SOTerm(POS)直接打单,不能说明卡号是手工输入的还是通过刷卡获得的,考虑到POS机现有的能力,我们在POS上增加了TPrtMacK,要求采用SOTerm进行打单时必须刷卡,将读入卡片的二磁道的信息加上SOTerm的编号等,以此密钥进行MAC运算后将运算的结果打印在交易单据上,如果日后此笔交易发生纠纷,可以通过对MAC的核验来证明卡片确实已经在单据标明的SOTerm上打印了交易的单据,来实现不低于压卡的交易安全度。
综上所述,由于TPrtMacK使用的频率并不高,而且一定要有良好的跟踪记录机制,以保证在必要的情况下可以核验MAC,所以实际上TPrtMacK可以是完全静态的,即随TK一同注入到SOTerm中。如果SOTerm存放密钥明文的区域足够大(大于需要存放的TK的个数),可以直接将TPrtMacK的明文与TK的明文一并存放,这样,TPrtMacK就不是由TK保护,而是由保护TK的硬件进行保护了。

图2 SPS-DESS密钥存储位置和对应关系图 |