1. 密钥管理概述
现代密码体制要求密码算法是可以公开评估的,决定整个密码体制安全性的因素是密钥的保密性。也就是说,在密码系统的设计时,需要解决的核心问题是密钥管理问题,而非密码算法问题。
密钥是密码系统中的可变部分。密钥管理就是在授权各方之间实现密钥关系的建立和维护的一整套技术和程序,涉及密钥从产生到最终销毁的整个过程,包括密钥的生成、存储、分发与协商、使用、备份与恢复、更新、撤销和销毁等。
1.1 密钥管理的主要内容
(1)密钥生成和检验
密钥产生设备主要是密钥生成器,一般使用性能良好的发生器装置产生伪随机序列,以确保所产生密钥的随机性。
(2)密钥交换和协商
典型的密钥交换主要有两种形式:集中式交换方案和分布式交换方案。前者主要依靠网络中的“密钥管理中心”根据用户要求来分配密钥,后者则是根据网络中各主机相互间协商来生成共同密钥。生成的密钥通过手工方式或安全信道秘密传送。
(3)密钥保护和存储
对所有的密钥必须有强力有效的保护措施,提供密码服务的密钥装置要求绝对安全,密钥存储要保证密钥的机密性、认证性和完整性,而且要尽可能减少系统中驻留的密钥量。密钥在存储、交换、装入和传送过程中的核心是保密,其密钥信息流动应是密文形式。
(4)密钥更换和装入
任何密钥的使用都应遵循密钥的生存周期,绝不能超期使用,因为密钥使用时间越长,重复几率越大,外泄可能性越大,被破译的危险性就越大。此外,密钥一旦外泄,必须更换与撤消。密钥装人可通过键盘、密钥注入器、磁卡等介质以及智能卡、系统安全模块(具备密钥交换功能)等设备实现。密钥装入可分为主机主密钥装入、终端机主密钥装人二者均可由保密员或专用设备装入,一旦装入就不可再读取。
1.2 密钥管理的原则
(1)明确密钥管理的策略和机制:策略是密钥管理系统的高级指导,而机制是实现和执行策略的具体技术与方法。
(2)全面安全原则:必须在密钥的产生、存储、分发、 装入、使用、备份、更换和销毁等全过程中对密钥采取妥善的安全管理。
(3)最小权利原则:指只分配给用户进行某一事务处理所需的最小的密钥集合。
(4)责任分离原则:指一个密钥应当专职一种功能,不要让一个密钥兼任几种功能。
(5)密钥分级原则:指对于一个大的系统,所需要的密钥的种类和数量都很多,根据密钥的职责和重要性,把密钥划分为几个级别。
(6)密钥更换原则: 指密钥必须按时更换。否则,即使采用很强的密码算法,只要攻击者截获足够多的密文,密钥被破译的可能性就非常大。
(7)密钥应有足够的长度: 密码安全的一个必要条件密钥有足够的长度。
(8)密钥体制不同,密钥管理也不相同:传统密码体制与公开密钥密码体制是性质不同的两种密码,因此在密钥管理方面有很大的不同。
1.3 密钥管理的层次结构
按照密钥的生存周期、功能和保密级别,一般将密钥分为:会话密钥、密钥加密密钥和主密钥。
系统使用主密钥通过某种密码算法保护密钥密密钥,再使用密钥加密密钥通过密码算法保护会话密钥,会话密钥基于某种加解密算法来保护明文数据。在整个密钥层次体系中,各层密钥的使用由相应层次的密钥协议控制。
(1)会话密钥(Session Key)
会话密钥主要用于对两个通信终端用户的交换数据进行加密,也称数据加密密钥(Data Encrypting Key)。会话密钥的生存周期非常短,通常在会话建立初生成,在会话结束后销毁,主要用来对传输的数据进行保护。会话密钥大多数是临时的、动态生成的,可由通信双方协商得到,也可由密钥分配中心分配。
(2)密钥加密密钥(Key Encrypting Key)
密钥加密密钥主要用于对要传送的会话密钥进行加密,也称为二级密钥(SecondaryKey)、次主密钥或辅助密钥。密钥加密密钥的生存周期相对较长,由于它主要用来协商或传送会话密钥,一旦泄露可导致在其使用周期内的所有会话密钥泄露。
(3)主密钥(Master Key)
主密钥主要用于对密钥加密密钥或会话密钥的保护,使得这些密钥可以实现在线分发。主密钥对应于层次化密钥结构中的最高层次,它是由用户选定或由系统分配给用的、可在较长时间内由用户所专有的秘密密钥,在某种程度上,主密钥还起到标识用户的作用。它的生存周期最长,受到严格的保护。
2. 密钥的生命周期
密钥的生命周期是指密钥从产生到最终销毁的整个过程。在这个生命周期中,密钥处于4种不同的状态中:
- ①使用前状态:密钥不能用于正常的密码操作
- ②使用状态:密钥是可用的,并处于正常使用中
- ③使用后状态:密钥不再正常使用,但为了某种目的对其进行离线访问是可行的
- ④过期状态:密钥不再使用,所有的密钥记录已被删除
Menezes Orschot和 Vanstone提出的密钥生命周期图,包括用户登记、用户初始化、密钥生成、密钥安装、密钥登记、密钥使用、密钥更新、密钥备份、密钥恢复、密钥存档、密钥撤销、密钥的注销与销毁共12个阶段。
3. 密钥分发
通过密钥分发机制,通信双方中的一方或密钥分配中心选取一个秘密密钥,在不让其他人(除密钥分配中心)看到密钥的情况下,将其传送给通信双方中的另一方。为防止攻击者得到密钥,须时常更新密钥,密码系统的强度依赖于密钥分配技术。
按照是否需要第三方可信机构来分,秘密密钥分发分为无中心的密钥分发和有中心的密钥分发两种方式。
3.1 无中心的密钥分发
无中心的密钥分发方式不需要密钥分发中心的参与,用户直接将密钥传送给对方,参与各方需要事先共享系统参数或秘密密钥,或对方的公开密钥等。
(1)有密钥的密钥分发
通信方之间预先通过秘密渠道分配一个共享密钥,又称密钥加密密钥,或者知道对方的公钥。
密钥分发过程如下:
- A向B发出建立会话密钥的请求和一个一次性随机数N 1 N_1N1
- B用与A共享的主密钥对应答的消息加密,并发给A,应答消息中包括:B选取的会话密钥、B的身份,f ( N 1 ) f(N_1)f(N1)和另一个一次性随机数N 2 N_2N2
- A用新建立的会话密钥加密f ( N 2 ) f(N_2)f(N2)并发送给B
(2)无密钥的密钥分发
Shamir提出一个无密钥分发协议,设初始化参数为一个公开的大素数p pp,密钥分发过程如下:
- ①A随机选取一个小于p − 1 p-1p−1的秘密数a aa,然后选择随机密钥K ( 1 ≤ K ≤ p − 1 ) K(1 \le K \le p-1)K(1≤K≤p−1)作为与B通信的会话密钥,计算K a m o d p K^a \bmod pKamodp发送给B
- ②B接收到K a m o d p K^a \bmod pKamodp,随机选取一个小于p − 1 p-1p−1的秘密数b bb,计算( K a ) b m o d p (K^a)^b \bmod p(Ka)bmodp发送给A;
- ③A将接收到的值,进行a − 1 a^{-1}a−1次幂指数运算,得到K b m o d p K^b \bmod pKbmodp发送给B
- ④B将接收到的值,进行b − 1 b^{-1}b−1次幂指数运算,得到会话密钥K m o d p K \bmod pKmodp。
Shamir的无密钥分发协议没有提供身份认证,A和B都没有向对方证明自己的身份。假如攻击者C截取了A给B发送的消息,就可以冒充B与A通信。因而使用该协议时,需要有其他的配套协议提供身份认证。
3.2 有中心的密钥分发
如果所有用户都要求支持加密服务,则任意一对希望通信的用户都必须有一共享密钥。如果有n个用户,共需保存n ( n − 1 ) / 2 n(n-1)/2n(n−1)/2个密钥.随着用户增多,需要预分配的密钥数量将大大增加,每个用户需要管理的密钥数量也增多。
为了解决这一问题,引入密钥分发中心(KDC,Key Distribution Center)来对密钥的分发进行管理,每一用户必须和密钥分配中心有一个共享密钥,称为主密钥。通过主密钥分配给一对用户的密钥称为会话密钥,用于这一对用户之间的保密通信。通信完成后,会话密钥即被销毁。系统中的每个用户只需要保存与密钥分发中心之间的预分配密钥。
Needham-Schroeder 密钥分发协议
1978年,罗格·尼德哈姆(Roger Needham)和麦克·绍罗耶德(MiKe Schroeder)提出了Needham-Schroeder 密钥分发协议,该协议由中心生成秘密密钥。其设计思想影响深远,其中最著名的派生协议就是Kerberos密钥分发协议。
协议流程如下,其中C CC代表密钥分发中心,A AA和B BB为通信双方。
- ①A → C : I D A , I D B , N A A \to C:ID_A, ID_B,N_AA→C:IDA,IDB,NA
A AA向密钥分发中心C CC发送明文消息I D A , I D B , N A ID_A, ID_B,N_AIDA,IDB,NA - ②C → A : E − K A C ( I D B , N A , K A B , E − K B C ( I D A , K A B ) ) C \to A:E - K_{AC}(ID_B,N_A,K_{AB},E-K_{BC}(ID_A,K_{AB}))C→A:E−KAC(IDB,NA,KAB,E−KBC(IDA,KAB))
密钥分发中心C CC向A AA发送证书E − K B C ( I D A , K A B ) E-K_{BC}(ID_A,K_{AB})E−KBC(IDA,KAB),并由A AA把此证书转交给B BB。由于只有A AA拥有同密钥分发中心之间的密钥K A C K_{AC}KAC,因而只有A AA能够解密这条消息,从而防止有人冒充A AA向密钥分发中心提交请求所造成的风险。 - ③A → B : E − K B C ( I D A , K A B ) A \to B:E-K_{BC}(ID_A,K_{AB})A→B:E−KBC(IDA,KAB)
A AA向B BB转交证书E − K B C ( I D A , K A B ) E-K_{BC}(ID_A,K_{AB})E−KBC(IDA,KAB),由于只有B BB拥有K B C K_{BC}KBC,因而只有B BB能够解读这个证书以取得会话密钥K A B K_{AB}KAB。 - ④B → A : E − K A B ( N B ) B \to A:E-K_{AB}(N_B)B→A:E−KAB(NB)
B BB同A AA进行一次质询响应。 - ⑤A → B : E − K A B ( N B − 1 ) A \to B:E-K_{AB}(N_B-1)A→B:E−KAB(NB−1)
A AA响应B BB的请示,并将随机数N NN减1 11,表明A AA在线并且可以通信。
这个协议也存在漏洞:B BB无法判断他从密钥分发中心经由A AA收到的K A B K_{AB}KAB是否是新的。因而,一旦K A B K_{AB}KAB泄露,任何人都可以通过重发协议第③步来冒充A AA。
4. 密钥协商技术
密钥协商目的是通信双方在网络中通过交换信息来生成一个双方共享的会话密钥。典型的密钥协议是Diffie-Hellrman密钥交换协议,该协议是一个无身份认证要求的双方密钥协商方案,在这个协议基础上改进的端对端协议(Station-to-Station Pratocol)是一个更安全的密钥协商协议。
4.1 Diffie-Hellman密钥交换协议
Diffie-Hellman密钥交换协议由Diffie和M.Hellman在1976年提出的,可用于网络环境下通信双方安全地协商一个密钥。实现过程如下:
设p pp是一个大素数,g ∈ Z p g\in Z_pg∈Zp是模p pp的一个本原元,p pp和g gg公开,可为所有用户所共用。
- (1)A AA随机选取一个大数a ( 0 ≤ a ≤ p − 2 ) a(0 \le a \le p-2)a(0≤a≤p−2),计算g a m o d p g^a \bmod pgamodp传送给B BB
- (2)B BB随机选取一个大数b ( 0 ≤ b ≤ p − 2 ) b(0 \le b \le p-2)b(0≤b≤p−2),计算g b m o d p g^b \bmod pgbmodp传送给A AA
- (3)A AA计算k ≡ ( g b ) a m o d p k \equiv (g^b)^a \bmod pk≡(gb)amodp
- (4)B BB计算k ≡ ( g a ) b m o d p k \equiv (g^a)^b \bmod pk≡(ga)bmodp
通信双方A AA和B BB各自计算出共同的会话密钥k kk:k ≡ ( g b ) a m o d p ≡ ( g a ) b m o d p ≡ g a b m o d p k \equiv (g^b)^a \bmod p \equiv (g^a)^b \bmod p \equiv g^{ab} \bmod pk≡(gb)amodp≡(ga)bmodp≡gabmodp
双方Diffie-Hellman密钥交换协议很容易扩展到三人或更多人的密钥协商。然而随着人数增加,通信的轮数迅速增加,因此在现实通信中该方法不适合用于群密钥协商。
Diffie-Hellman密钥交换协议不包含通信双方的身份认证过程,处于通信双方A AA和B BB通信中间的攻击者能够截获并替换他们之间的密钥协商交互的消息,从而监听到他们的通信内容,这种攻击被称为中间人攻击。
4.2 端-端协议
为了克服中间人攻击,W.Diffie和P.C.Van Orschot等人于1992年提出DH密钥协商协议的改进协议-端-端协议(STS),该协议基于公钥基础设施引入了数字签名算法,在通信过程中对双方进行身份认证。
假定存在可信中心CA,其签名算法用S i g n SignSign表示,与之对应的签名验证算法用V e r VerVer表示。域中的每个用户可以事先向CA注册并申请一个公钥证书,
C ( A ) C(A)C(A)、C ( B ) C(B)C(B)分别表示用户A AA和B BB的证书,Sign^和Sign;分别表示利用A私钥和B私钥进行签名算法
简化的端-端协议描述如下:
设p pp是一个大素数,g ∈ Z g \in Zg∈Z是模p pp的一个本原元,p pp和g gg公开。
(1)A AA随机选取a aa,0 ≤ a ≤ p − 2 0 \le a \le p-20≤a≤p−2,计算g a ≡ g a m o d p g_a \equiv g^a \bmod pga≡gamodp传送给用户B BB。
(2)B BB随机选取b bb,0 ≤ b ≤ p − 2 0 \le b \le p-20≤b≤p−2,计算g b ≡ g b m o d p g_b \equiv g^b \bmod pgb≡gbmodp及S B = S i g n B ( g a , g b ) S_B=Sign_B(g_a,g_b)SB=SignB(ga,gb),将( C ( B ) , g b , S B ) (C(B),g_b,S_B)(C(B),gb,SB)传送给用户A AA。
(3)用户A AA先验证C ( B ) C(B)C(B)的有效性,然后验证B BB的签名S B S_BSB的有效性。确认S B S_BSB有效后,计算S A = S i g n A ( g a , g b ) S_A=Sign_A(g_a,g_b)SA=SignA(ga,gb),把( C ( A ) , S A ) (C(A),S_A)(C(A),SA)发给用户B BB,并计算K ≡ g b a m o d p K \equiv g^a_b \bmod pK≡gbamodp作为会话密钥。
(4)B BB同样先验证C ( A ) C(A)C(A)的有效性,然后验证A AA的签名S A S_ASA的有效性。确认S A S_ASA有效后,计算K ≡ g a b m o d p K \equiv g^b_a\bmod pK≡gabmodp作为会话密钥。
5. 密钥托管
密钥托管也称为托管加密,是指为公众和用户提供更好安全通信的同时,也允许授权者(包括政府保密部门、企业专门技术人员和特殊用户等)为了国家、集团的利益监听某些通信内容并能解密相关密文。密钥托管也叫“密钥恢复”,或者理解为“受信任的第三方”“数据恢复”和“特殊获取”等含义,对个人没有绝对的隐私和绝对不可跟踪的匿名性。
其实现手段是把已加密的数据和数据恢复密钥联系起来,数据恢复密钥不必是直接解密的密钥,但由它可得解密密钥。
5.1 密钥托管密码体制基本组成
密钥托管加密体制主要由3部分组成:
- 用户安全分量(USC,User Security Component):由硬件设备或软件程序构成,用于用户安全通信中的数据加密和解密,支持密钥托管功能和数据恢复功能。在传送秘密信息的同时传送数据恢复域(DRF,Data Recovery Field),可帮助授权机构采用应急解密措施介入通信。
- 密钥托管分量(KEC,Key Escrow Component):由密钥托管代理、数据恢复密钥、数据恢复业务和托管密钥防护4分组成,主要完成密钥托管代理操作、数据复密的存储和使用以及其他部分业务服务。
- 数据恢复分量(DRC,Data Recovery Component):由专用算法、协议和必要的设备组成,能够从密文、DRF、KEC所提供的托管密钥K恢复出明文。DRC 的功能包括实时解密、审查处理等。但是,只有在执行规定的合法数据恢复时才能使用 DRC。
用户安全分量USC使用密钥K s K_sKs加密明文信息,将数据恢复域DRF与密文时一起传送,数据恢复分量DRC使用包含在DRF中的信息及由KEC提供的信息恢复明文。
5.2 托管加密标准
为有效控制密码技术的使用,美国政府于1993年4月提出Clipper计划和密钥托管加密技术。密钥托管技术的实质是建议联邦政府和工业界使用新的具有密钥托管功能的联邦加密标准,即托管加密标准(EES,Escrowed Encryption Standard),又称Clipper建议。EES标准于1994年2月正式被美国政府公布采用。
EES标准的核心是一个称为Clipper的防窜扰芯片,是由美国国家安全局(NSA)主持开发的软硬件实现的密码部件,有两个主要特征:
- 一个密码算法。内部利用Skipjack的分组密码算法实现,密钥长度为80bit,明文和密文长度均为64bit,有ECB、CBC、OFB、CFB共4种工作模式。芯片的单元密钥(UK)由两个称之为Escrow的机构联合提供,用于加解密用户间通信的消息。
- 法律实施部门提供“后门恢复”保护的权限。即通过法律强制访问域(LEAF,Law Enforcement Access Field),在此控制域的范围内,有关部门可在法律的授权下,实现对用户通信的解密。