加密和 PKI 基础知识


Microsoft Windows 2000 Server白皮书
2000年7月5日发布

摘要

本白皮书介绍了加密和公钥基本结构(PKI)的概念和使用 Microsoft Windows 2000 Server 操作系统中的证书服务的基础知识。如果您还不熟悉加密和公钥技术,先阅读本白皮书将有助于理解 Windows 2000 Web 站点上有关这些主题的其它技术白皮书。

引言

Microsoft Windows 2000 证书服务提供的集成的公钥基本结构(PKI)使电子商务能够在安全的环境中进行。本白皮书介绍了加密和 PKI 的概念。理解这些相关概念是理解证书服务功能的先决条件,证书服务是 Microsoft Windows 2000 Server 操作系统中的一个组件。

如果您不熟悉加密和公钥技术,请先阅读本白皮书,然后在“其它信息”部分列出的链接中查找以下相关的技术性更强的白皮书:

  • Windows 2000 证书服务
  • Windows 2000 PKI 部署和智能卡登录问题疑难解答
  • Microsoft Windows 2000 公钥基本结构
  • 公钥的互操作性

加密概念

加密是通过 Intranet、Extranet 和 Internet 进行安全的信息交换的基础。从业务的角度来看,通过加密实现的安全功能包括:身份验证,使收件人确信发件人就是他或她所声明的那个人;机密性,确保只有预期的收件人能够阅读邮件;以及完整性,确保邮件在传输过程中没有被更改。从技术的角度来看,加密是利用数学方法将邮件转换为不可读格式从而达到保护数据的目的的一门科学。

本节介绍下列加密概念:

  • 对称密钥加密:一个密钥
  • 公钥加密:两个密钥
  • 单向散列算法
  • 数字签名:结合使用公钥与散列
  • 密钥交换:结合使用对称密钥与公钥

前三个小节分别定义并说明对称密钥加密、公钥加密和散列算法。后两个小节说明组合使用 这些技术的方法-尤其是,将公钥算法与散列算法相结合以创建数字签名,以及将对称算法与公钥算法相结合使交换密(私)钥成为可能。

对称密钥加密:一个密钥

对称密钥加密,也叫做共享密钥加密或机密密钥加密,使用发件人和收件人共同拥有的单个密钥。这种密钥既用于加密,也用于解密,叫做机密密钥(也称为对称密钥会话密钥)。对称密钥加密是加密大量数据的一种行之有效的方法。.

对称密钥加密有许多种算法,但所有这些算法都有一个共同的目的-以可还原的方式将明文(未加密的数据)转换为暗文。暗文使用加密密钥编码,对于没有解密密钥的任何人来说它都是没有意义的。由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥。这就是它为什么也叫做机密密钥加密的原因。希望使用对称密钥加密通信的双方,在交换加密数据之前必须先安全地交换密钥。

衡量对称算法优劣的主要尺度是其密钥的长度。密钥越长,在找到解密数据所需的正确密钥之前必须测试的密钥数量就越多。需要测试的密钥越多,破解这种算法就越困难。有了好的加密算法和足够长的密钥,如果有人想在一段实际可行的时间内逆转转换过程,并从暗文中推导出明文,从计算的角度来讲,这种做法是行不通的。

公钥加密:两个密钥

公钥加密使用两个密钥-一个公钥一个私钥,这两个密钥在数学上是相关的。为了与对称密钥加密相对照,公钥加密有时也叫做不对称密钥加密。在公钥加密中,公钥可在通信双方之间公开传递,或在公用储备库中发布,但相关的私钥是保密的。只有使用私钥才能解密用公钥加密的数据。使用私钥加密的数据只能用公钥解密。在图 1 中,发件人拥有收件人的公钥,并用它加密了一封邮件,但只有收件人掌握解密该邮件的有关私钥。


如果您的浏览器不支持行内框,请单击此处查看独立的页面。

图 1 公钥加密要求使用一个公钥和一个私钥。

与对称密钥加密相似,公钥加密也有许多种算法。然而,对称密钥和公钥算法在设计上并无相似之处。您可以在程序内部使用一种对称算法替换另一种,而变化却不大,因为它们的工作方式是相同的。而另一方面,不同公钥算法的工作方式却完全不同,因此它们不可互换。

公钥算法是复杂的数学方程式,使用十分大的数字。公钥算法的主要局限在于,这种加密形式的速度相对较低。实际上,通常仅在关键时刻才使用公钥算法,如在实体之间交换对称密钥时,或者在签署一封邮件的散列时(散列是通过应用一种单向数学函数获得的一个定长结果,对于数据而言,叫做散列算法)。将公钥加密与其它加密形式(如对称密钥加密)结合使用,可以优化性能。公钥加密提供了一种有效的方法,可用来把为大量数据执行对称加密时使用的机密密钥发送给某人。也可以将公钥加密与散列算法结合使用以生成数字签名。

若要进一步了解关于将公钥加密与对称密钥加密或散列算法结合使用的信息,请参见下面两节:“数字签名: 结合使用公钥与散列算法”和“密钥交换:结合使用对称密钥与公钥”

将公钥加密用于数字签名

数字签名是邮件、文件或其它数字编码信息的发件人将他们的身份与信息绑定在一起(即为信息提供签名)的方法。对信息进行数字签名的过程,需要将信息与由发件人掌握的秘密信息一起转换为叫做签名的标记。数字签名用于公钥环境中,它通过验证发件人确实是他或她所声明的那个人,并确认收到的邮件与发送的邮件完全相同,来帮助确保电子商务交易的安全。

通常,数字签名用于以明文(如电子邮件)分发数据的情形。在这种情况下,当邮件本身的敏感性可能无法保证加密的安全性时,确保数据处于其原始格式且并非由假冒者发送,是非常重要的。

要了解如何结合使用公钥与散列算法来创建数字签名,请参见下面的“数字签名: 结合使用公钥与散列算法”一节

常用公钥算法

下面是三种最常用的公钥算法:

  • RSA-适用于数字签名和密钥交换。Rivest-Shamir-Adleman (RSA) 加密算法是目前应用最广泛的公钥加密算法,特别适用于通过 Internet 传送的数据。这种算法以它的三位发明者的名字命名:Ron Rivest、Adi Shamir 和 Leonard Adleman。RSA 算法的安全性基于分解大数字时的困难(就计算机处理能力和处理时间而言)。在常用的公钥算法中,RSA 与众不同,它能够进行数字签名和密钥交换运算。Microsoft Base Cryptographic Service Provider (Microsoft Base CSP1) 支持 RSA 加密算法,并且 Microsoft Enhanced Cryptographic Service Provider (Microsoft Enhanced CSP2) 已经内置到包括 Microsoft Internet Explorer 在内的许多软件产品中。
  • DSA-仅适用于数字签名。数字签名算法 (Digital Signature Algorithm, DSA) 由美国国家安全署 (United States National Security Agency, NSA) 发明,已经由美国国家标准与技术协会 (National Institute of Standards and Technology, NIST) 收录到联邦信息处理标准 (Federal Information Processing Standard, FIPS) 之中,作为数字签名的标准。DSA 算法的安全性源自计算离散算法的困难。这种算法仅用于数字签名运算(不适用于数据加密)。Microsoft CSP 支持 DSA 算法。
  • Diffie-Hellman-仅适用于密钥交换。 Diffie-Hellman 是发明的第一个公钥算法,以其发明者 Whitfield Diffie 和 Martin Hellman 的名字命名。Diffie-Hellman 算法的安全性源自在一个有限字段中计算离散算法的困难。Diffie-Hellman 算法仅用于密钥交换。Microsoft Base DSS 3 和 Diffie-Hellman CSP 都支持 Diffie-Hellman 算法。

单向散列算法

散列-也称为散列值消息摘要,是一种与基于密钥(对称密钥或公钥)的加密不同的数据转换类型。散列就是通过把一个叫做散列算法的单向数学函数应用于数据,将任意长度的一块数据转换为一个定长的、不可逆转的数字。所产生的散列值的长度应足够长,因此使找到两块具有相同散列值的数据的机会很少。发件人生成邮件的散列值并加密它,然后将它与邮件本身一起发送。而收件人同时解密邮件和散列值,并由接收到的邮件产生另外一个散列值,然后将两个散列值进行比较。如果两者相同,邮件极有可能在传输期间没有发生任何改变。

常用的单向散列函数

下面是两个最常用的散列函数:

  • MD5 MD5 是由 Ron Rivest 设计的可产生一个 128 位的散列值的散列算法。MD5 设计经过优化以用于 Intel 处理器。这种算法的基本原理已经泄露,这就是为什么它不太受欢迎的原因。
  • SHA-1与 DSA 公钥算法相似,安全散列算法 1(SHA-1)也是由 NSA 设计的,并由 NIST 将其收录到 FIPS 中,作为散列数据的标准。它可产生一个 160 位的散列值。SHA-1 是流行的用于创建数字签名的单向散列算法。

数字签名:结合使用公钥与散列算法

可以结合使用公钥技术与散列算法来创建数字签名。数字签名可用作数据完整性检查并提供拥有私钥的凭据。

签署和验证数据(由启用 PKI 的应用程序如 Microsoft Outlook 完成)的步骤如下:

  • 发件人将一种散列算法应用于数据,并生成一个散列值。
  • 发件人使用私钥将散列值转换为数字签名。
  • 然后,发件人将数据、签名及发件人的证书发给收件人。
  • 收件人将该散列算法应用于接收到的数据,并生成一个散列值。
  • 收件人使用发件人的公钥和新生成的散列值验证签名。

对用户而言这一过程是透明的。

散列算法处理数据的速度比公钥算法快得多。散列数据还缩短了要签名的数据的长度,因而加快了签名过程。当创建或验证签名时,公钥算法必须且只需转换散列值(128 或 160 位的数据)。创建签名和验证签名的详细步骤取决于所采用的公钥算法。

密钥交换:结合使用对称密钥与公钥

对称密钥算法非常适合于快速并安全地加密数据。但其缺点是,发件人和收件人必须在交换数据之前先交换机密密钥。结合使用加密数据的对称密钥算法与交换机密密钥的公钥算法可产生一种既快速又灵活的解决方案。

基于公钥的密钥交换步骤如下:

  • 发件人获得收件人的公钥。
  • 发件人创建一个随机机密密钥(在对称密钥加密中使用的单个密钥)。在 Windows 2000 中,CryptoAPI4 可用于创建机密密钥。(有关 CryptoAPI 的详细信息,请参见下面的“证书链验证”一节。)
  • 发件人使用机密密钥和对称密钥算法将明文数据转换为暗文数据。
  • 发件人使用收件人的公钥将机密密钥转换为暗文机密密钥。
  • 发件人将暗文数据和暗文机密密钥一起发给收件人。
  • 收件人使用其私钥将暗文机密密钥转换为明文。
  • 收件人使用明文机密密钥将暗文数据转换为明文数据。

同样,这些步骤是由启用 PKI 的应用程序(如 Microsoft Outlook)来完成的,并且对用户来说是透明的。

公钥基本结构的概念

术语公钥基本结构(PKI)用于描述管制或操纵证书与公钥及私钥的策略、标准和软件。实际上,PKI 是指由数字证书、证书颁发机构 (CA) 以及对电子交易所涉及各方的合法性进行检查和验证的其它注册机构组成的一套系统。PKI 的有关标准仍处于不断发展之中,即使这些标准已被作为电子商务的要素而广泛实施。

本节帮助您理解什么是 PKI 以及创建 PKI 需要哪些服务。这些 PKI 概念将在下面几个小节中讨论:

  • 证书
  • 证书颁发机构 (CA)
  • 不可更改的 CA 层次结构
  • 注册
  • 证书登记
  • 证书吊销
  • 证书链验证

有关公钥基本结构如何与 Windows 2000 集成的信息,请参见“其它信息”部分列出的到“Windows 2000 Certificate Services”白皮书的链接。

证书

公钥证书,通常简称为证书,用于在 Internet、Extranet 和 Intranet 上进行身份验证并确保数据交换的安全。证书的颁发者和签署者就是众所周知的证书颁发机构 (CA),将在下一节中介绍。颁发证书的实体是证书的主体

公钥证书是以数字方式签名的声明,它将公钥的值与持有相应私钥的主体(个人、设备和服务)的身份绑定在一起。通过在证书上签名,CA 可以核实与证书上公钥相应的私钥为证书所指定的主体所拥有。

可以为各种目的颁发证书,如 Web 用户身份验证、Web 服务器身份验证、使用安全/多用途 Internet 邮件扩充协议 (Secure/Multipurpose Internet Mail Extensions, S/MIME) 的安全电子邮件、IP 安全性 (IP Security)、安全套接字协议层/事务层安全性 (Secure Sockets Layer/Transaction Layer Security, SSL/TLS) 和代码签名。如果在一个组织内部使用 Windows 2000 企业证书颁发机构(在“Windows 2000 Certificate Services”白皮书中说明),证书可用于登录到 Windows 2000 域。证书还可以由一个 CA 颁发给另一个 CA,以建立证书层次结构。

可以通过多个名称来识别主体,如用户主要名称(用于最终用户证书)、目录名、电子邮件名称和 DNS 域名等。证书还应包含下列信息:

  • 证书的有效期。
  • 证书的序列号,CA 应保证该序列号是唯一的。
  • CA 的名称以及用于签署该证书的密钥。
  • CA 所遵循的用来确定证书主体身份的策略的标识符(稍后将详细介绍 CA 策略)。
  • 在证书中标识的密钥对(公钥及相关的私钥)的用法。
  • 证书吊销列表 (CRL) 的位置,这是一个由 CA 维护并发布的列出已被吊销的证书的文档。为确保其完整性,CRL 是用 CA 的私钥签署的。

证书提供了一个在公钥和拥有相应私钥的实体之间建立关系的机制。目前最常用的证书格式通过 ITU-T X.509 版本 3 (X.509v3) 国际标准定义。RFC 2459 是 X.509v3 的一个配置文件,进一步阐明了 X.509v3 中定义的字段。Windows 2000 PKI 采用 X.509v3 标准。Windows 证书是按照 RFC 2459 中的说明编程的,但仍然叫做 X.509v3 证书。(有关 ITU-T X.509 的详细信息,请参见“Windows 2000 证书服务”白皮书。)

ITU-T X.509 并非证书的唯一格式。例如,Pretty Good Privacy (PGP) 安全电子邮件依赖 PGP 所独有的一种证书。

证书颁发机构

证书颁发机构 (CA) 是一个向个人、计算机或任何其它申请实体颁发证书的可信实体。CA 受理证书申请,根据该 CA 的策略验证申请人的信息,然后使用它的私钥把其数字签名应用于证书。然后,CA 将该证书颁发给该证书的主体,作为 PKI 内部的安全凭据。由于不同的 CA 使用不同的方法验证公钥与主体之间的绑定,在选择信任该颁发机构之前,理解该 CA 的策略是非常重要的(稍后解释)。

CA 可以是远程的第三方机构,如 VeriSign。作为选择,也可以是您创建的供您所在组织使用的 CA,例如,通过安装 Windows 2000 证书服务即可创建一个 CA。每个 CA 对证书申请人可能有完全不同的身份凭据要求,如 Windows 2000 域帐户、职员标记、驾驶执照、公证请求或实际住址。

CA 策略

CA 根据也已确立的一套标准向申请人颁发证书。CA 在受理证书请求(以及颁发证书、吊销证书和发布 CRL)时所采用的一套标准被称为 CA 策略。通常,CA 以一种叫做证书惯例声明 (Certification Practice Statement, CPS) 的文档发布其策略。

不应将 CA 策略与 Windows 2000 的术语“组策略”相混淆,后者通常与域帐户和应用程序部署服务(如 IntelliMirror)相关联。(关于 Windows 2000 中的 CA 策略以及组策略在 Windows 2000 PKI 中所扮演的角色的信息,请分别参见“Windows 2000 证书服务”白皮书中“Windows 2000 CA 策略”和“CA 证书分发”部分。)

证书颁发机构的类型

CA 的类型5包括以下三种:

  • 自签名 CA在自签名 CA 中,证书中的公钥和用于验证证书的密钥是相同的。一些自签名 CA 是根 CA(参见第三项)。
  • 从属 CA在从属 CA 中,证书中的公钥和用于核实证书的密钥是不同的。一个 CA 向另一个 CA 颁发证书的过程叫做交叉认证
  • CA根 CA 是一种特殊的 CA,它受到客户无条件地信任,位于证书层次结构的最高层。所有证书链均终止于根 CA。根颁发机构必须对它自己的证书签名,因为在证书层次结构中再也没有更高的认证机构了。

    所有自签名 CA 都是根 CA,因为到自签名 CA 时证书链就终止了。

    Windows 2000 只能指定一个自签名 CA 为根 CA。将一个 CA 指定为根 CA 的决策由个人在企业级或本地做出。

不可更改的 CA 层次结构

管理员可以创建 CA 的层次结构,从根 CA 证书开始,然后添加中级 CA,每一个 CA 都可以为其从属 CA 颁发证书。当 CA 向最终实体(用户)颁发证书时,证书链就终止了。

根 CA 证书的分发费用最高,因为如果您开始改变根证书,就必须重建整个 PKI。如果根证书改变了,就必须吊销组织内所有客户端的旧的根证书,并添加新的根证书。另外,必须重新颁发由根 CA 颁发的、再由从属 CA 颁发给最终实体的所有证书。因此,在部署 CA 层次结构时,使用少量的长寿命根 CA 可提供最经济的解决方案。根 CA 非常重要-因为它们被无条件地信任,因为它们是证书链的顶点-因此,在分发证书时要有一个圈外的身份验证。也就是说,由于根 CA 是自签名的,所以必须有人来证明根证书是真品。

因为最终实体要比 CA 多得多,所以向最终实体颁发证书的 CA 使用私钥在大量的数据上签名。用来对数据签名的密钥使用得越频繁,加密数据受到攻击的可能性就越大。因此,为了保持安全,向最终实体颁发证书的联机 CA 必须经常更换其签名密钥。

向最终实体颁发证书的 CA 具有的吊销证书列表,要比中级或根 CA 的列表大得多(这些 CA 仅向其它 CA,更多的是从属 CA 颁发证书)。其部分原因是因为最终实体要比 CA 证书多得多。另外,

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3199


你可能感兴趣的:(PKI)