注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著
第9章 密钥管理
著名的Kerckhoffs原则指出:密码系统的安全仅取决于对用户密钥的保护。密钥管理作为提供数据机密性、完整性、可认证性和可鉴别性等安全技术的基础,涵盖了密钥的设置、产生、分配、存储、装入、使用、备份、恢复、提取、更新、撤销、销毁以及保护等一系列内容和过程。
9.1 密钥管理的生命周期
密钥管理覆盖了密钥的整个生命周期,大致分为12个阶段(图9-1):

1. 用户登记
一个实体成为安全域的授权成员,包括初始密钥材料(如共享口令或PIN码)的获取、创建或交换。
2. 系统和用户初始化
系统初始化包括搭建和配置安全操作环境;用户初始化包括软件和硬件的安装及初始密钥材料的安装。
3. 密钥材料安装
将密钥材料配置到实体的软件或硬件中。技术包括手工输入口令、磁盘交换、ROM设备、智能卡等。
4. 密钥生成
按照预定规则,采用可行措施产生符合应用目标或算法属性要求的伪随机有效密钥。
5. 密钥登记
将密钥材料与相关实体的信息和属性捆绑(如身份、认证信息等),并通过公开目录等方式供其他实体访问。
6. 密钥使用
密钥在其有效期内可用于加密、解密、认证等操作。需注意不同密钥用于不同场合,必要时提前更新或终止。
7. 密钥材料备份
将密钥副本备份到独立、安全的存储媒体上,以便恢复时使用。
8. 密钥存档
对过期或提前撤销的密钥进行较长时间的离线保存,以备特殊情况(如仲裁、过去签名验证)时检索。
9. 密钥更新
当前密钥有效期即将结束时,用新密钥取代,需重新安装、登记、备份和发布。
10. 密钥恢复
从备份或存档的密钥材料中检索并重新构造出密钥(如设备损坏或口令遗忘时)。
11. 密钥撤销
在密钥正常生命周期结束前提前作废(如密钥泄露或相关人员变动)。需通过公告通知所有相关实体。
12. 密钥销毁
将不再需要的密钥材料从正式记录中清除,销毁所有备份,安全清除存储媒体,使密钥无法恢复。
密钥状态分类:
-
预运行状态:尚不能用于正常密码操作
-
运行中状态:可用且处于正常使用中
-
后运行状态:不再用于正常用途,但可能需要离线访问
-
过期状态:任何情况下不再使用,相关记录已销毁
9.2 单钥体制的密钥管理
9.2.1 密钥的分类
从密钥管理角度一般将密钥分为以下四类:
| 密钥类型 | 说明 | 有效期 |
|---|---|---|
| 初始密钥 | 由用户选定或系统分配,用于自动控制密钥生成器 | 较长 |
| 会话密钥 | 一次通信中真正使用的数据加密密钥 | 短期(一次会话) |
| 密钥加密密钥 | 用于加密传输中的会话密钥等其他密钥 | 长期或暂时 |
| 主密钥 | 对密钥加密密钥进行保护,层次最高,通常手工分配 | 较长 |
分层密钥结构的优点:每个密钥使用次数不多,同一密钥产生的密文量有限,有利于系统安全。
9.2.2 密钥分配的基本方法
单钥体制密钥分配的四种基本方法:
-
手工方式:一方选取密钥后手工发送给另一方
-
可信第三方手工分配:由可信第三方选取密钥后手工发送给双方
-
加密传输:用已共享的密钥加密新密钥,通过网络发送
-
KDC分配:通过密钥分配中心(KDC)利用各自的主密钥分配会话密钥
KDC分配流程(图9-2):

-
A向KDC发送请求(包含A、B身份标识和唯一性标识符N₁)
-
KDC用A的主密钥KA加密应答消息(包含会话密钥KsKs和用B的主密钥加密的包EKBKs,IDA)
-
A解密获得Ks,重新选择会话密钥K,用Ks加密后连同EKBKs,IDA发送给B
-
B解密获得K ,验证后返回确认,密钥分配完成
9.2.3 层次式密钥控制
当网络规模很大时,可划分多个安全域,每个域设置一个KDC,形成层次结构(图9-3)。同一域内用户由本地KDC分配密钥;不同域用户通过共同的上级KDC协作分配。

9.2.4 分布式密钥控制
无需KDC,但要求通信双方事先共享一个主密钥(图9-4):

-
A向B发送请求(含一次性随机数N₁)
-
B选择会话密钥K,用主密钥加密后回送(含IDB,N₁,N₂)
-
A解密验证后,用会话密钥加密N₂+1回送B
优点:无KDC瓶颈;缺点:需要预先共享主密钥,不适合大规模网络。
9.3 公钥体制的密钥管理
9.3.1 公开密钥的分发
1. 公开发布
用户将自己的公钥直接发送或广播。缺点:公钥真实性和完整性难以保证,易被假冒。
2. 使用公钥目录分发
建立公开、动态、可在线访问的公钥数据库,由可信机构(公钥目录管理员)维护。缺点:公钥目录可能成为性能瓶颈和攻击目标。
3. 在线安全分发
用户向公钥管理机构请求其他用户公钥,管理机构用私钥签名后回复,请求者用管理机构公钥验证。缺点:管理机构必须在线,可能成为瓶颈。
4. 使用公钥证书分发(最佳方案)
由证书管理机构(CA)为用户创建并颁发公钥证书,证书包含用户名、公钥、有效期、CA签名等。用户通过交换证书实现公钥分发,离线验证签名即可确认公钥真实性。优点:CA压力小,可靠性高,效率高。
9.3.2 用公钥加密分配单钥体制的会话密钥
虽然利用公钥证书能够在通信各方之间方便地交换密钥,但由于公钥加密的速度远比单钥加密慢,通信各方通常不直接采用公钥体制进行保密通信。但是,将公钥体制用于分配单钥体制的会话密钥却是非常合适的。
图9-5描述了如何利用公钥加密分配单钥体制的会话密钥。图中,PKXPKX和SKXSKX分别表示用户X的公钥和私钥,CERTXCERTX代表用户X的公钥证书。这个过程具有保密性和认证性,因此既能防止被动攻击,又能抵抗主动攻击。
图9-5 用公钥加密分配单钥体制的会话密钥

协议步骤
(1) 用户A发起请求
A→B:ESKA IDA∥N₁ ∥CERTA
用户A将自己的身份IDA和一个一次性随机数N₁用自己的私钥SKA加密,并附上自己的公钥证书CERTA一起发送给用户B。这里的私钥加密不是为了保密,而是为了让对方能够更好地验证自己的公钥证书,同时还可以抵抗对消息的篡改。
(2) 用户B响应
B→A:ESKB EPKA\[Ks∥IDB∥N₁∥N₂ ]∥CERTB
用户B验证收到的消息,并从中提取对方的公钥PKA和一次性随机数N₁,然后选取一个会话密钥Ks和一个新的一次性随机数N₂,将Ks与自己的身份IDB以及N₁和N₂一起先用对方的公钥PKA加密,再用自己的私钥SKB签名,并附上自己的公钥证书回送给用户A。这个消息实现了保密与认证的结合,A收到消息后可以从中获得一个机密的会话密钥Ks,同时确信这个会话密钥一定来自B。
(3) 用户A确认
A→B:EKsN₂+1
A验证收到的消息,并解密出会话密钥Ks和一次性随机数N₂,然后对N2做一个简单变换(例如加1),再将变换的结果用Ks加密发送给用户B。若B能从所收到的消息中解密出N₂+1,则可相信A已经与其共享了会话密钥Ks,会话密钥的分配工作结束。
协议分析
该协议具有以下安全特性:
| 特性 | 实现方式 |
|---|---|
| 保密性 | 会话密钥Ks用对方的公钥PKA加密,只有A能解密 |
| 认证性 | 消息用发送方的私钥签名,接收方可用其公钥验证 |
| 抗重放攻击 | 使用一次性随机数N₁,N₂保证消息新鲜性 |
| 抗中间人攻击 | 公钥证书CERT保证公钥的真实性 |
9.3.3 Diffie-Hellman密钥交换与中间人攻击
W. Diffie与M. Hellman于1976年提出了Diffie-Hellman密钥交换算法。该算法能用来在两个用户之间安全地交换密钥材料,从而使双方得到一个共享的会话密钥,但该算法只能用于交换密钥,不能用于加/解密。
Diffie-Hellman密钥交换的安全性基于求解有限域上离散对数的困难性。
协议步骤
首先,双方需要约定一个大素数p和它的一个本原根g,然后整个密钥交换的过程分两步完成:
-
交换公开值:双方(记为A和B)分别挑选一个保密的随机整数XA和XB,并分别计算
YA=g^XA mod p,YB=g^XB mod p
然后互相交换,即A将YA发送给B,而B将YB发送给A。其中,YA和YB分别相当于A和B的公开密钥(但却不能用于真正的消息加密)。
-
计算共享密钥:A和B分别计算
K=YB^XA mod p,K=YA^XB mod p
得到双方共享的密钥K。这是因为:
YB^XA=(g^XB)^XA=g^(XAXB)=(g^XA)^XB=YA^XB
由于XA和XB是保密的,攻击者最多能够得到p、g、YA和YB。如果攻击者希望得到K,那么至少需要计算出XA和XB中的一个,这意味着需要求解离散对数,这在计算上是不可行的。

中间人攻击
虽然Diffie-Hellman密钥交换简单易行,但它很容易遭受中间人攻击(Man-In-the-Middle Attack),具体方法如下:
-
在A将本人的公开密钥YA=g^XA mod p发送给B的过程中,中间人MIM(攻击者)截取YA,并用自己的公开密钥YM=g^XM mod p取代YA,发送给B。
-
在B将本人的公开密钥YB=g^XB mod p发送给A的过程中,中间人MIM截取YB,并用自己的公开密钥YM=g^XM mod p取代YB,发送给A。
-
A、B、MIM分别计算会话密钥:
-
A与MIM共享会话密钥K1=YM^XA=g^(XAXM) mod p
-
B与MIM共享会话密钥K2=YM^XB=g^XBXM mod p
一般情况下K1≠K2,但A与B对此一无所知。
-
-
接下来,在A与B通信过程中,A用K1加密发送给B的消息,B用K2加密发送给A的消息。中间人MIM截取来自A的消息用K1解密,再用K2重新加密后发送给B;对于来自B的消息则先用K2解密,然后用K1加密后发送给A。这样,中间人MIM就可以轻易监视A与B的通信,甚至还能够在其中实施篡改、伪造或假冒攻击。
防御方法
在Diffie-Hellman密钥交换中,中间人攻击之所以能够得逞,是因为密钥交换者A和B交换的消息未被认证保护。只需让A和B分别对他们发送的消息施加数字签名,并在协议的每一步进行签名验证,那么中间人将不会有任何机会。
改进的Diffie-Hellman密钥交换方案(使用数字签名):
假定A和B互相拥有对方的公钥证书,那么他们可以按照如下步骤安全地生成一个共享会话密钥:
-
A选取一个随机数XA,计算YA=g^XA mod p并将其发送给B。
-
B收到YA之后,也选取一个随机数XB,计算YB=g^XB mod p并根据Diffie-Hellman协议计算出共享会话密钥K=g^(XAXB) mod p。然后,B对YA、YB签名,再用计算出的会话密钥K对签名加密,最后把它与YB一起发送给A,即B发送给A的消息为:
YB,EK(SIGB(YA,YB))
-
A收到消息后,也根据Diffie-Hellman协议计算出共享会话密钥KK,然后用KK解密收到的消息EK(SIGB(YA,YB)),并验证B的数字签名SIGB(YA,YB)。如果签名通过验证,那么A再用自己的私钥对YA、YB签名,并将签名结果用共享密钥K加密后送回给B:
EK(SIGA(YA,YB))
-
B用会话密钥K解密收到的消息,并验证A的数字签名。如果签名通过验证,那么A和B获得了共享的会话密钥K,并且在这个过程中攻击者没有任何渗透机会,因此K是安全的。
注:以上内容的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!