证书-原理

    接着上篇 数字签名 无法解决 “伪造公钥”的问题。证书的出现正式解决此问题的。

    “证书 – 为公钥加上数字签名”

1. 证书

    要开车得先考驾照.驾照上面记有本人的照片、姓名、出生日期等个人信息.以及有效期、准驾车辆的类型等信息,并由公安局在上面盖章。我们只要看到驾照,就可以知道公安局认定此人具有驾驶车辆的资格。 --驾驶证就相当于 公安局给个人颁发的“证书”。

    公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority、Certifying Authority, CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书(certificate)。

    可能很多人都没听说过认证机构,认证机构就是能够认定 “公钥确实属于此人",并能够生成数字签名的个人或者组织。认证机构中有国际性组织和政府所设立的组织,也有通过提供认证服务来盈利的一般企业,此外个人也可以成立认证机构。

2. X.509

    X.509是一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN.1语法进行编码。

    在一份证书中,必须证明公钥及其所有者的姓名是一致的。对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式)

    一般来说,一个数字证书内容可能包括基本数据(版本、序列号) 、所签名对象信息( 签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA的数字签名,等等.

3. 证书规范

    前使用最广泛的标准为ITU和ISO联合制定的X.509的 v3版本规范 (RFC5280), 其中定义了如下证书信息域:

  • 版本号(Version Number):规范的版本号,目前为版本3,值为0x2;
  • 序列号(Serial Number):由CA护的为它所发的每个证书分配的一的列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书,最大不能过20个字节;
  • 签名算法(Signature Algorithm):数字签名所采用的算法,如:sha256-with-RSA-Encryption 或ccdsa-with-SHA2S6;
  • 颁发者(Issuer):发证书单位的标识信息,如 ” C=CN,ST=Beijing, L=Beijing,O=org.example.com,CN=ca.org。example.com ”;
  • 有效期(Validity): 证书的有效期很,包括起止时间。
  • 主体(Subject): 证书拥有者的标识信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing,CN=person.org.example.com”;
  • 主体的公钥信息(SubJect Public Key Info):所保护的公钥相关的信息:
  • 公钥算法 (Public Key Algorithm)公钥采用的算法;
  • 主体公钥(Subject Unique Identifier):公钥的内容。
  • 颁发者唯一号(Issuer Unique Identifier):代表颁发者的唯一信息,仅2、3版本支持,可选;
  • 主体唯一号(Subject Unique Identifier):代表拥有证书实体的唯一信息,仅2,3版本支持,可选:
  • 扩展(Extensions,可选)可选的一些扩展。中可能包括:
    • Subject Key Identifier:实体的秘钥标识符,区分实体的多对秘钥;
    • Basic Constraints:一指明是否属于CA;
    • Authority Key Identifier:证书颁发者的公钥标识符;
    • CRL Distribution Points: 撤销文件的颁发地址;
    • Key Usage:证书的用途或功能信息。

    此外,证书的颁发者还需要对证书内容利用自己的私钥添加签名, 以防止别人对证书的内容进行篡改。

4. 证书格式

    X.509规范中一般推荐使用PEM(Privacy Enhanced Mail)格式来存储证书相关的文件。证书文件的文件名后缀一般为 .crt.cer 。对应私钥文件的文件名后缀一般为 .key。证书请求文件的文件名后缀为 .csr 。有时候也统一用pem作为文件名后缀。

    PEM格式采用文本方式进行存储。一般包括首尾标记和内容块,内容块采用Base64进行编码。

    编码格式总结:

  • X.509 DER(Distinguished Encoding Rules)编码,后缀为:.der .cer .crt
  • X.509 BASE64编码(PEM格式),后缀为:.pem .cer .crt

5. 公钥基础设施(PKI)

    仅制定证书的规范还不足以支持公钥的实际运用,我们还需要很多其他的规范,例如证书应该由谁来颁发,如何颁发,私钥泄露时应该如何作废证书,计算机之间的数据交换应采用怎样的格式等。这一节我们将介绍能够使公钥的运用更加有效的公钥基础设施。

5.1 什么是公钥基础设施

    公钥基础设施(Public-Key Infrystructure)是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。公钥基础设施一般根据其英语缩写而简称为PKI。

    PKI只是一个总称,而并非指某一个单独的规范或规格。例如,RSA公司所制定的PKCS(Public-KeyCryptography Standards,公钥密码标准)系列规范也是PKI的一种,而互联网规格RFC(RequestforComments)中也有很多与PKI相关的文档。此外,X.509这样的规范也是PKI的一种。在开发PKI程序时所使用的由各个公司编写的API(Application Programming Interface, 应用程序编程接口)和规格设计书也可以算是PKI的相关规格。

    因此,根据具体所采用的规格,PKI也会有很多变种,这也是很多人难以整体理解PKI的原因之一。

    为了整体理解PKI,来简单总结一下PKI的基本组成要素(用户、认证机构、仓库)以及认证机构所负责的工作。

5.2 PKI的组成要素

    PKI的组成要素主要有以下三个:

  • 用户 — 使用PKI的人
  • 认证机构 — 颁发证书的人
  • 仓库 — 保存证书的数据库
    在这里插入图片描述    不过,由于PKI中用户的认证机构不仅限于“人”(也有可能是计算机),因此可以给他们起一个特殊的名字,叫作实体(entitiy)。实体就是进行证书和密钥相关处理的行为主体。

5.2.1 用户

    用户就是像Alice、Bob这样使用PW的人。用户包括两种:一种是希望使用KPI注册自己的公钥的人,另一种是希望使用已注册的公钥的人。我们来具体看一下这两种用户所要进行的操作。

  1. 注册公钥的用户所进行的操作
    • 生成密钥对(也可以由认证机构生成)
    • 在认证机构注册公钥
    • 向认证机构申请证书
    • 根据需要申请作废已注册的公钥
    • 解密接收到的密文
    • 对消息进行数字签名
  2. 使用已注册公钥的用户所进行的操作
    • 将消息加密后发送给接收者
    • 验证数字签名

5.2.2. 认证机构(CA)

    认证机构(Certification Authority,CA)是对证书进行管理的人。上面的图中我们给它起了一个名字叫作Trent。认证机构具体所进行的操作如下:

  • 生成密钥对(也可以由用户生成)
  • 在注册公钥时对本人身份进行认证
  • 生成并颁发证书
  • 作废证书

    认证机构的工作中,公钥注册和本人身份认证这一部分可以由注册机构(Registration Authority,RA) 来分担。这样一来,认证机构就可以将精力集中到颁发证书上,从而减轻了认证机构的负担。不过,引入注册机构也有弊端,比如说认证机构需要对注册机构本身进行认证,而且随着组成要素的增加,沟通过程也会变得复杂,容易遭受攻击的点也会增。

5.2.3. 仓库

    仓库(repository)是一个保存证书的数据库,PKI用户在需要的时候可以从中获取证书.它的作用有点像打电话时用的电话本。在本章开头的例子中,尽管没特别提到,但Alice获取Bob的证书时,就可以使用仓库。仓库也叫作证书目录。

5.3. 认证机构的工作

5.3.1. 生成密钥对

    生成密钥对有两种方式:一种是由PKI用户自行生成,一种是由认证机构来生成。在认证机构生成用户密钥对的情况下,认证机构需要将私钥发送给用户,这时就需要使用PKCS#12(Personal InformationExchange Syntax Standard)等规范。(根据本人经验一般都是用户自己生成的)

5.3.2. 注册证书

    在用户自行生成密钥对的情况下,用户会请求认证机构来生成证书。申请证书时所使用的规范是由PKCS#10(Certification Request Syntax Standard)定义的。

    认证机构根据其认证业务准则(Certification Practice Statement,CPS)对用户的身份进行认证,并生成证书。在生成证书时,需要使用认证机构的私钥来进行数字签名。生成的证书格式是由PKCS#6(Extended-Certificate Syntax Standard)和 X.509定义的。

5.3.3. 作废证书与CRL

    当用户的私钥丢失、被盗时,认证机构需要对证书进行作废(revoke)。此外,即便私钥安然无恙,有时候也需要作废证书,例如用户从公司离职导致其失去私钥的使用权限,或者是名称变更导致和证书中记载的内容不一致等情况。

    纸质证书只要撕毁就可以作废了,但这里的证书是数字信息,即便从仓库中删除也无法作废,因为用户会保存证书的副本,但认证机构又不能人侵用户的电脑将副本删除。

    要作废证书,认证机构需要制作一张证书作废清单(Certificate Revocation List),简称为CRL。

    CRL是认证机构宣布作废的证书一览表,具体来说,是一张已作废的证书序列号的清单,并由认证机构加上数字签名。证书序列号是认证机构在颁发证书时所赋予的编号,在证书中都会记载。

    PKI用户需要从认证机构获取最新的CRL,并查询自己要用于验证签名(或者是用于加密)的公钥证书是否已经作废这个步骤是非常重要的。

    假设我们手上有Bob的证书,该证书有合法的认证机构签名,而且也在有效期内,但仅凭这些还不能说明该证书一定是有效的,还需要查询认证机构最新的CRL,并确认该证书是否有效。一般来说,这个检查不是由用户自身来完成的,而是应该由处理该证书的软件来完成,但有很多软件并没有及时更新CRL。

5.4. 各种各样的PKI

    公钥基础设施(PKI)这个名字总会引起一些误解,比如说“面向公众的权威认证机构只有一个",或者“全世界的公钥最终都是由一个根CA来认证的",其实这些都是不正确的。认证机构只要对公钥进行数字签名就可以了,因此任何人都可以成为认证机构,实际上世界上已经有无数个认证机构了。

    国家、地方政府、医院、图书馆等公共组织和团体可以成立认证机构来实现PKI,公司也可以出于业务需要在内部实现PKI,甚至你和你的朋友也可以以实验为目的来构建PKI。

    在公司内部使用的情况下,认证机构的层级可以像上一节中一样和公司的组织层级一一对应,也可以不一一对应。例如,如果公司在东京、大阪、北海道和九州都成立了分公司,也可以采取各个分公司之间相互认证的结构。在认证机构的运营方面,可以购买用于构建PKI的软件产品由自己公司运营,也可以使用VeriSign等外部认证服务。具体要采取怎样的方式,取决于目的和规模,并没有一定之规。

    密码学探究到这 , 基本理论基本完了, 下篇就是最常见的SSL/TLS 了,他是综合了对称加密、单向散列函数、消息认证码、以及本篇的数字签名等技术的框架,比如常见的https等的应用。
探究的过程就像悬疑剧一样,环环相扣,保密的路上,兵来将挡,水来土掩,颇为有趣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章