在理解了对称与非对称加密算法后,我们发现不管是哪一种加密算法,都存在一定的局限性,尤其是在对密钥进行分发的时候。如何能够实现高效和安全的密钥分发呢,常见的一种解决方案是在系统中添加一个KDC(Key Distribution Center)。
密钥分配的常见方式
- 人工分配
- 工通过物理的方式,将密钥分配给用户。这种方式常见于企业内部专用网络中(与互联网络隔绝),比如密钥数据,Ukey等。
- 网络分配
- 采用KDC自动分配密钥,在网络中配置KDC,通过KDC获取一次性的会话密钥来保证会话安全,同时KDC的密钥分配手段比较灵活。
对称加密算法的密钥分配
KDC密钥分配中心是为了解决对称密钥加密算法体系,在密钥分配上的安全与效率问题。每一用户KDC密钥分配中心有一个共享密钥,称为主密钥。通过主密钥分配给一对用户的密钥称为会话密钥,用于这一对用户之间的保密通信。通信完成后,会话密钥即被销毁。
![](https://file.drxcloud.club:8280/pic/krb/kdc.png)
- 假设系统中存在KDC,用户A想与B进行安全通讯,则典型的通讯模型如下:
- A向KDC发出会话密钥请求。表示请求的消息由两个数据项组成:①是A和B的身份;②是这次业务的唯一识别符 N1 。称 N1为一次性随机数,可以是时间戳、计数器或随机数。每次请求所用的 N1都应不同,且为防止假冒,应使敌手对 N1 难以猜测。因此用随机数作为这个识别符最为合适。
- KDC为A的请求发出应答。应答是由KA加密的消息,因此只有A才能成功地对这一消息解密,并且A可相信这一消息的确是由 KDC发出的。消息中包括 A 希望得到的两项:
- 一次性会话密钥 Ks
- A在(1)中发出的请求,包括一次性随机数N1,目的是使 A 将收到的应答与发出的请求相比较,看是否匹配。
- 因此A能验证自己发出的请求在被KDC收到之前,未被他人篡改。而且A还能根据一次性随机数相信自己收到的应答不是重放的过去的应答。
- 此外,消息中还有B希望得到的两项:
- 一次性会话密钥 KS
- A的身份(例如 A 的网络地址)IDA
- 这两项由 KB 加密,将由 A 转发给 B,以建立 A、B之间的连接并用于向 B证明 A 的身份。
- A存储会话密钥,并向B转发 EKB[ KS ‖ IDA ]。因为转发的是由 KB 加密后的密文,只有B可以解开。B 收到后,可得会话密钥 KS,并从IDA 可知另一方是A,而且还从EKB知道 KS 的确来自 KDC(只有KDC中存在B的主密钥)。这一步完成后,会话密钥就安全地分配给了 A、B。
- B用会话密钥 KS 加密另一个一次性随机数N2,并将加密结果发送给 A。
- A 以F(N2)作为对 B的应答,其中F是对N2 进行某种变换的函数(例如加1),并将应答用会话密钥加密后发送给 B。
- 注意:在第(3)步就已完成密钥分配,第(4)、(5)两步结合第(3)步执行的是认证功能。
KDC是一种概念,代表密钥分发中心(Key Distribution Center)。是在计算机网络中进行身份验证和授权的安全处理方法。KDC属于Kerberos身份验证协议的一部分,后者负责生成、管理和分发加密密钥。
Kerberos身份验证
Kerberos一词来源于希腊神话,意为“三个头的狗”,也是地狱之门的守护者。从结构上看,其包含两个关键服务,分别是认证服务AS、票据服务TGS,用户在访问服务器前,需要先通过AS服务的认证,才能获得票据,最后依赖票据去访问所需的服务和应用。
在Microsoft Active Directory中,也支持使用krb5以实现对网络资源的安全访问控制。
官方说明文档:http://web.mit.edu/kerberos/krb5-current/doc/
如何实现krb5用于SSH身份认证:https://www.drxcloud.club/461.html
非对称密钥密钥分配
非对称加密算法,包括公钥和私钥,其中公钥的分配有以下几种方式:
- 公开发布
- 在在网络中广播,或者组播自己的公钥。任何人都可以自由的获取公钥。这种方式的安全性不高,极容易被中间人攻击。
- 公用目录表
- 公用目录表指建立一个公用的公钥动态目录表,目录表的建立、维护以及公钥的分布 由某个可信的实体或组织承担,称这个实体或组织为公用目录的管理员。这种方式的安全程度完全取决于管理者的管理方法。
- 公钥管理机构
- 这种分配公开钥时也有缺点,由于每一用户要想和他人联系都需求助于管理机构,所以管理机构有可能成为系统的瓶颈,而且由管理机构维护的公钥目录表也易被敌手窜扰。常用来实现该方法的软件系统有Microsoft Active Directory Certificate Services、OpenSSL、Java Keytool、EJBCA等。
- 公钥证书
- 公钥证书即CA证书,前文中提到,CA证书是用私钥加密,公钥解密。公钥证书由证书管理机构(CertificateAuthority,CA)为用户建立,其中的数据项有与该用户的秘密钥相匹配的公开钥及用户的身份和时间戳等,所有的数据项经 CA 用自己的秘密钥签字后就形成证书。证书管理机构一般由高度可信组织机构建立,比如金融机构、政府机关等。
公钥加密分配单钥密码体制的密钥
这个标题乍一看确实难以理解,但其实梳理一下提到的几点,就可以知道这个概念是基于非对称秘钥建立的安全通讯信道,而重新分配一个对称秘钥算法的秘钥。比如基于TCP协议,采用RSA加密算法建立链接,并使用AES算法进行通讯。
公钥加密 | 就是指非对称加密算法,比如RSA算法 |
分配 | 指基于该算法的通讯信道建立后,进行分发秘钥 |
单钥密码体制 | 单钥就是指对称加密算法,比如AES算法 |
的秘钥 | 产生的AES算法密钥 |
![](https://file.drxcloud.club:8280/pic/krb/rsa1.png)
公开钥分配完成后,用户就可用公钥加密体制进行保密通信了。然而由于公钥加密的速度过慢,以此进行保密通信不太合适,但用于分配单钥密码体制的密钥却非常合适。 所以什么是公钥加密分配单钥密码体制的密钥?
这个密钥其实就是类似Kerberos中的会话密钥。是嵌套在非对称加密算法中的密钥。假设AB已经知道对方的公钥,下面是一个典型的保密通讯模型:
- A使用B的公钥加密一组数据,包括A自己的【身份标识,和一个随机数】,这个随机数代表这次会话的序号,也可以是其他用来唯一标识这次会话的定义。
- B收到这个包以后,产生一个新的随机数,该随机数的定义与步骤1中一致,随后将接收到的【A发送的随机数、自己产生的随机数】用A的公钥加密后发给A。
- A使用B的公钥加密【B产生的新随机数】,发送给B,使B确定对方是A。
- A选择一个会话密钥,先使用自己的私钥加密这个密钥,然后在对结果使用B的公钥加密。
- B收到以后,先使用自己的私钥解开,再使用A的公钥解开获得会话密钥。
参考资料:
【1】现代密码学(第五版)密钥分配与密钥管理.pdf
【2】计算机网络 https://www.bilibili.com/video/BV1XW4y1s77Y/
【3】系统架构设计师教程