基础知识

系统架构设计笔记(85)—— 数字证书与密钥管理

2020-10-13  本文已影响0人  deniro

过去,人们总是依赖于对于加密算法和密钥的保密来增加保密的强度和效果。随着现代密码学的发展,大部分的加密算法都已经公开了。一些典型的算法(例如, DES 、 IDEA 、 RSA 等)更是成了国际标准,被广泛接纳。人们可以从多种途径来获取算法的细节,也已经有很多采用这些算法的软件 、 硬件设备可以利用。

因此,在现代密码系统中,算法本身的保密已经不重要了,对于数据的保密在很大程度上,甚至完全依赖于对密钥的保密。只要密钥能够保密,即使加密算法公开,甚至加密设备丢失,也不会对加密系统的坚固性和正常使用产生多大影响。相反,如果密钥丢失,则非法用户可以窃取机密数据,而合法用户却面对密文如读天书,无法提取有效的信息。与其如此,还不如不加密呢!因此,在密码系统中,如何高效地分配密钥 、 安全地管理密钥对于保证数据安全至关重要。

1 密钥分配中心

鉴于密钥的举足轻重的地位,密钥必须通过安全的通路进行分配。例如,可以派非常可靠的信使,以十分安全的方式,物理地携带密钥,人工送达需要进行通信的各方。这种方法虽然可靠,但是效率比较低,在过去信息技术不发达的时候用得比较多。而对于一个用户比较多 、 相互之间通信比较频繁的信息系统来说,则显然不适合采用这种人工方法,而必须采用计算机自动分配密钥。

一个方法是在一个信息系统中任意两个用户之间自己协商来选择不同的密钥。

显然,对于有 N 个用户的这种通信系统中,每个用户都要保存( N −1)个密钥,系统中总共要保存 N ∗( N −1)/2个密钥。在用户数量较少时,这样来分配密钥还是比较简单 、 易用的,但是一旦用户数量多起来,系统中要保存的密钥会急剧增多,让每个用户自己高效 、 安全地管理数量庞大的密钥实际上是不可能的。

有一种非常有效的密钥自动分配方案是密钥分配中心( Key Distribution Center ,密匙分配中心)技术。在 KDC 方案中,每一个用户都只保存自己的私钥 SK 和 KDC 的公钥 PK KDC ,而在通信时再经由 KDC 获得其他用户的公钥 PK 或者仅仅在某一次通信中可以使用的对称密钥加密算法的临时密钥 K。 假设有两个用户 A 、 B 都是 KDC 的注册用户,他们分别拥有私钥 SK A 和 SK B ,相应的公钥分别是 PK A 和 PK B 。

现在 A 想要与 B 进行会话,假如采用对称密钥加密算法来加密这次会话,那么密钥的分配过程如图 1 所示。

首先用户 A 向 KDC 发送用自己的私钥SKA 加密的请求SKA ( A , B ) ,说明自己想要与 B 进行会话。 KDC 收到这个请求后,根据某种算法生成一个可以供 A 、 B 双方进行秘密会话的对称密码算法的密钥 K ,然后向 A 返回一个应答P K ( K ,PKB ( A , K ))。

这个应答信息是用 A 的公钥PKA 加密的,当然只有用户 A 自己才能够正确解读,可以从中提取与 B 会话的密钥 K 。同时,该信息中还有一部分内容PKB ( A , K ),表明用户 A 欲与 B 进行会话,并且密钥是 K ,这是用 B 的公钥PKB 加密的。用户 A 把这一部分信息发送给 B , B 收到后从中解密出会话密钥。

至此,完成一次密钥的自动分配过程。此后, A 、 B 双方就可以利用密钥 K 进行加密通信了。

2 数字证书和公开密钥基础设施

公钥加密算法的密钥分配和对称密钥加密算法中密钥的分配要求有着很大的区别。在对称密钥加密体制中,要求将密钥从一方传送到另一方,并且保证只有通信的双方知道密钥,而不让其他任何一方知道密钥。

而在公钥加密体制中,则要求通信各方的私钥只有通信的一方知道,而其他任何一方都不能知道,同时每一方的公钥需要公开,其他任何一方都可以查看和提取。

在公钥加密体制中,私钥的分配相对容易,但是,公钥的发布和获取就需要采取合适的方法来进行,否则很容易留下安全漏洞。一种简单的发布公钥的方法是公开宣布。通信系统中的每一方都独自保管好自己的私钥,而把自己的公钥公开地公布给其他所有各方,以使其他人能够得到他的公钥,从而可以与他进行加密通信。这实现起来非常简单,似乎也没有什么问题。但是,却有一个致命的漏洞,就是任何一个非法入侵者也可以冒充是这个通信系统中的一方,向这个通信系统中公布一个冒充的公钥。此后系统中与该用户的通信实际上就是与该非法冒充者进行通信。

Z数字签名和公钥加密都是基于不对称加密技术,因此也存在这样的问题:如何保证公开密钥的持有者是真实的;大规模信息系统环境下公开密钥如何产生 、 分发和管理。要解决上述问题,就要用到数字证书和 PKI ( Public Key Infrastructure ,公开密钥基础设施)。

2.1 数字证书

数字证书提供了一个在公钥和拥有相应私钥的实体之间建立关系的机制。目前最常用的数字证书格式是由国际标准 ITU-TX.509v3 版本定义的。数字证书中采用公钥体制,即利用一对互相匹配的密钥进行加密 、 解密。每个用户自己保存私钥,用它进行解密和签名;同时设定一个公钥,并由本人公开,为一组用户所共享,用于加密和验证签名。数字证书是用户在系统中作为确认身份的证据。

在通信的各个环节中,参与通信的各方通过验证对方数字证书,从而确认对方身份的真实性和有效性,从而解决相互间的信任问题。数字证书的内容一般包括:唯一标识证书所有者的名称 、 唯一标识证书签发者的名称 、 证书所有者的公开密钥 、 证书签发者的数字签名 、 证书的有效期及证书的序列号等。

2.2 公开密钥基础设施

PKI 在信息系统中的作用就相当于作为公共设施在社会生活中的作用,其目标是向广大的信息系统用户和应用程序提供公开密钥的管理服务。 PKI 是指由数字证书 、 证书颁发机构( Certificate Authority , CA ),以及对电子交易 、 通信等所涉及的各方的合法性进行检查和验证的其他注册机构组成的一套系统。

为了使用户在不可靠的网络环境中获得真实可靠的公开密钥, PKI 引入公认可信的第三方;同时 PKI 中采用数字证书机制来避免在线查询集中存放的公开密钥产生的性能瓶颈。可信的第三方是 PKI 的核心部件,系统中任意两个实体之间都是通过公认可信的第三方建立安全联系的。数字证书中第三方的数字签名,使用户可以离线地确认一个公开密钥的真实性。

除了数字证书的有效期,证书撤销列表( Certificate Revocation List , CRL )是另一种数字证书有效期控制机制。当数字证书中认可的事实发生变化时,数字证书发布者必须使用某种机制来撤销以前发出 、 但现在失效的证书。证书发布者定期发布 CRL ,列出所有曾发布但当前已被撤销的证书号,证书的使用者依据 CRL 即可验证某证书是否已被撤销。

(1) PKI 的结构模型。

PKI 中有三类实体:管理实体 、 端实体和证书库。管理实体是 PKI 的核心,是 PKI 服务的提供者;端实体是 PKI 的用户,是 PKI 服务的使用者;证书库是一个分布式数据库,用于证书和 CRL 的存放和检索 。 CA 和注册机构( Registe Authority , RA )是两种管理实体 。 CA 是 PKI 框架中唯一能够发布和撤销证书的实体,维护证书的生命周期; RA 负责处理用户请求,在验证了请求的有效性后,代替用户向 CA 提交。 RA 可以单独实现,也可以合并在 CA 中实现。作为管理实体, CA 和 RA 以证书方式向端实体提供公开密钥的分发服务。持有者和验证者是两种端实体。持有者是证书的拥有者,是证书所声明的事实上的主体。持有者向管理实体申请并获得证书,也可以在需要时请求撤销或更新证书。持有者使用证书声明自己的身份,从而获得相应的权力。

验证者确认持有者所提供的证书的有效性和对方是否为该证书的真正拥有者,只有在成功鉴别之后才可与对方进行更进一步的交互。证书库可以用Web 、 FTP或目录等来实现。由于证书库中存取的对象是证书和 CRL ,其完整性由数字签名保证,因此对证书库的操作可在无特殊安全保护的通道上传输。不同的实体间通过 PKI 操作完成证书的请求 、 确认 、 发布 、 撤销 、 更新和获取等过程。 PKI 操作分成存取操作和管理操作两类。其中,存取操作包括管理实体或端实体,把证书和 CRL 存放到证书库 、 从证书库中读取证书和 CRL ;管理操作则是管理实体与端实体之间或管理实体与管理实体之间的交互,是为了完成证书的各项管理任务和建立证书链。

(2) PKI 层次模型。

PKI 框架可以分为三个层次。最低层是传输层,向上提供 PKI 报文的可靠传输,它可以是传输层协议或应用层协议。中间层是密码学服务层,向上提供加密 、 解密 、 数字签名 、 消息摘要等基本密码学服务,可由RSA 、 MD5等方法实现。最高层是证书服务层,使用前面两层提供的加密和传输服务,向用户提供证书的请求 、 签发 、 发布 、 撤销和更新等服务。 PKI 的三类实体对这三层服务的使用各不相同。证书库不需要特殊的安全交互措施,所以仅使用传输层服务来分发证书和 CRL ;管理实体和端实体使用证书服务层构造 PKI 证书,使用密码学服务层来鉴别和保护交互信息,使用传输层服务传送信息。

(3) X.509 数字证书。

ISO/ITU 、 ANSI 、 IETF等组织制定的 X.509 标准,对数字证书的格式进行了专门定义,该标准是为了保证使用数字证书的系统间的互操作性而制定的。理论上为一种应用创建的 X.509 证书可以用于其他任何符合 X.509 标准的应用。但实际上,不同的公司对 X.509 证书进行了不同的扩展,并不是所有的证书都彼此兼容。

X.509 证书具有如下一些突出的特点:
① 支持多种算法。 X.509 证书独立于算法, CA 可以根据需要选择证书的签名和摘要算法,以及端实体所拥有密钥对的类型。摘要算法有 MD2 、 MD5 和 SHA-1 ,证书签名算法有 RSA 和 DSA ,密钥对类型有 RSA 密钥 、 DSA 签名密钥 、 D-H 密钥交换密钥 、 KEA 密钥和EC DSA 密钥 。
② 支持多种命名机制。 X.509 证书除了使用 X.500 名字机制标识持证者和验证者,还支持 E-mail 地址 、 IP 地址 、 DNS 名和 URI 。
③ 可以限制证书(公开密钥)的用途。 CA 能够规定证书的使用范围,如签名 、 不可否认 、 密钥加密 、 数据加密 、 密钥协商 、 证书签发和 CRL 签发等 。
④ 定义证书遵循的策略。每个 CA 都定义了一定的安全策略,规范证书的操作过程。这些策略包括: CA 的命名空间 、 身份验证 、 撤销机制 、 法律责任和收费等 。
⑤ 控制信任关系的传递。建立 CA 体系,跨域认证,使得每个 CA 除负责本域的证书管理任务外,还要维护与其他 CA 间的信任关系。 X.509 证书定义若干字段用于控制信任关系的传递, CA 能够将自己管理域的安全策略体现在信任关系中。

可见, X.509 证书适用于大规模信息系统环境,它的灵活性和扩展性能够满足各种应用系统不同类型的安全要求。

X.509 有不同的版本,例如, X.509 v3是比较新的版本,它是在原有版本 X.509 v的基础上进行功能的扩充。每一版本都包含下列数据项:
① 版本号。用来区分 X.509 的不同版本号 。
② 序列号。由 CA 给每一个证书分配唯一的数字型编号,由同一 CA 发放的每个证书的序列号是唯一的 。
③ 签名算法识别符。用来指定 CA 签发证书时所使用的公开密钥算法和 HASH 算法,须向国际标准组织注册 。
④ 发行者名称。建立和签署证书的 CA 名称 。
⑤ 有效期。证书有效的时间包括两个日期:证书开始生效的日期 、 证书失效的日期和时间。在所指定的这两个时间之间有效 。
⑥ 主体名称。证书持有人的姓名 、 服务处所等信息 。
⑦ 主体的公开密钥信息。包括主体的公开密钥 、 使用这一公开密钥的算法的标识符及相应的参数。
⑧ 发行者唯一识别符。这一数据项是可选的,当 CA 名称重新用于其他实体时,则用这一识别符来唯一标识发行者 。
⑨ 主体唯一标识符。这一数据项也是可选的,当主体的名称重新用于其他实体时,则用这一识别符来唯一识别主体 。
⑩ 扩充域。其中包括一个或多个扩充的数据项 。
⑪ 签名。 CA 用自己的私钥对上述各数据项的散列值进行数字签名的结果。


上一篇下一篇

猜你喜欢

热点阅读