pki详解

蓝亚之舟
蓝亚之舟
蓝亚之舟
57
文章
17
评论
2021年7月21日20:27:04
评论
8,3211 6581字阅读21分56秒

1、为什么需要pki

1.1 pki简介

PKI(Public Key Infrastructure,即公开密钥基础设施)是一种遵循既定标准的,采用密码技术为网上安全通信提供一整套安全服务基础平台,能够为所有网络应用提供信息加密和数字签名等密码服务及所必须的密钥与证书管理体系。也就是能够对公私钥对进行管理,支持身份验证、机密性、完整性以及不可否认性服务的具有普适性的信息安全基础设施。

它是因特网中节点通信的安全保障机制,HTTPS中的‘S’就来源于PKI。

1.2 pki的由来

想要讲清楚什么是pki,那么首先要知道,为什么需要pki,这个就要从通信加密开始说起。

下面通过一个案例一步步地来剖析这个问题:

    甲想将一份合同文件通过Internet发给远在国外的乙,此合同文件对双方非常重要,不能有丝毫差错,而且此文件绝对不能被其他人得知其内容。如何才能实现这个合同的安全发送?

问题1: 最自然的想法是,甲必须对文件加密才能保证不被其他人查看其内容,那么, 到底应该用什么加密技术,才能使合同传送既安全又快速呢?

可以采用一些成熟的对称加密算法,如 DES、3DES、RC5等对文件加密。对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用做解密密钥,这种方法在密码学中叫做对称加密算法。流程如下:

pki详解

问题2:如果黑客截获此文件,是否用同一算法就可以解密此文件呢?

不可以, 因为加密和解密均需要两个组件:加密算法和对称密钥, 加密算法需要用一个对称密钥来解密, 黑客并不知道此密钥。

问题3:既然黑客不知密钥,那么乙怎样才能安全地得到其密钥呢?用电话通知,电话可能被窃听,通过Internet发此密钥给乙,可能被黑客截获,怎么办?

方法是用非对称密钥算法加密对称密钥后进行传送。

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(Public Key)和私有密钥(Private Key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法 (公/私钥可由专门软件生成)。

甲乙双方先用相应软件创建各自的公私钥对,然后将各自的公钥通过Internet传送给对方,私钥自己保存。这样甲就可以用乙的公钥加密问题1中提到的对称加密算法中的对称密钥。即使黑客截获到此密钥,也会因为黑客不知乙的私钥,而解不开对称密钥,因此也解不开密文,只有乙才能解开密文。整个流程如下:

pki详解

问题4:既然甲可以用乙的公钥加密其对称密钥,为什么不直接用乙的公钥加密其文件呢?这样不仅简单,而且省去了用对称加密算法加密文件的步骤?

不可以这么做。因为非对称密码算法有两个缺点:

  • 加密速度慢,比对称加密算法慢10~100倍,因此只可用其加密小数据(如对称密钥)
  • 另外加密后会导致得到的密文变长。

现在一般指通信大都是指通过https协议进行网络通信,在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。

因此一般采用对称加密算法加密其文件,然后用非对称算法加密对称算法所用到的对称密钥。

问题5:如果黑客截获到密文,同样也截获到用公钥加密的对称密钥,由于黑客无乙的私钥,因此他解不开对称密钥,但如果他用对称加密算法加密一份假文件, 并用乙的公钥加密一份假文件的对称密钥,并发给乙,乙会以为收到的是甲发送的文件,会用其私钥解密假文件,并很高兴地阅读其内容,但却不知已经被替换。换句话说,乙并不知道这不是甲发给他的,怎么办?

答案是用数字签名证明其身份!

数字签名是通过散列算法(即哈希算法),如 MD5、SHA-1等算法从大块的数据中提取一个摘要。而从这个摘要中不能通过散列算法恢复出任何一点原文,即得到的摘要不会透露出任何最初明文的信息,但如果原信息受到任何改动,得到的摘要却肯定会有所不同。

因此甲可以对文件进行散列算法得到摘要,并用自己的私钥加密(因为非对称算法可逆,即用私钥可解开公钥加密的文件,反之亦然),这样即使黑客截获也无用。因为黑客不会从摘要内获得任何信息,但乙却不一样,他可用甲的公钥解密,得到其摘要(如果用甲的公钥能够解开此摘要,说明此摘要肯定是甲发的,因为只有甲的公钥才能解开用甲的私钥加密的信息,而甲的私钥只有甲自己知道),并对收到的文件(解密后的合同文件)也进行同样的散列算法,通过比较其摘要是否一样,就可得知此文件是否被篡改过(因为若摘要相同,则肯定信息未被改动,这是散列算法的特点)。具体流程如下:

pki详解

这样不仅解决了证明发送人身份的问题,同时还解决了文件是否被篡改问题。

问题6:通过对称加密算法加密其文件,再通过非对称算法加密其对称密钥,又通过散列算法证明其发送者身份和其信息的正确性,这样是否就万无一失了?

回答是否定的。问题在于乙并不能肯定他所用的所谓甲的公钥一定是甲的,解决办法是用数字证书来绑定公钥和公钥所属人。

    数字证书是一个经证书授权中心数字签名的包含公开密钥、拥有者信息以及公开密钥的文件,是网络通信中标识通信各方身份信息的一系列数据,它提供了一种在Internet上验证身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证,人们可以在交往中用它来识别对方的身份。

最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间、发证机关(证书授权中心)名称、该证书的序列号等信息。它是由一个权威机构——CA机构,又称为证书授权(Certificate Authority)中心发放的。CA机构作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书,CA是PKI 的核心,负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份。

因为数字证书是公开的,就像公开的电话簿一样,在实践中,发送者(即甲)会将一份自己的数字证书的拷贝连同密文、摘要等放在一起发送给接收者(即乙),而乙则通过验证证书上权威机构的签名来检查此证书的有效性(只需用那个可信的权威机构的公钥来验证该证书上的签名就可以了),如果证书检查一切正常,那么就可以相信包含在该证书中的公钥的确属于列在证书中的那个人(即甲)。

这里有几点要说一下:

  • 用户在申请数字证书的时候,不会提交私钥(只保留在自己手中),只提交公钥给CA。
  • 证书=公钥(甲/乙生成密码对中的公钥)+申请者与颁发者信息+签名(用CA机构生成的密码对的私钥进行签名);验证该证书是否正确,只需要用CA机构生成的公钥进行验签即可。
  • 数字证书的作用:只是解决了“其内部含有的公钥持有者是谁“的问题。

pki详解

问题7:至此似乎很安全了,但仍存在安全漏洞,例如:甲虽将合同文件发给乙,但甲拒不承认在签名所显示的那一时刻签署过此文件(数字签名就相当于书面合同的文字签名),并将此过错归咎于电脑,进而不履行合同,怎么办?

解决办法是采用可信的时钟服务(由权威机构提供),即由可信的时间源和文件的签名者对文件进行联合签名。

在书面合同中,文件签署的日期和签名一样均是十分重要的防止文件被伪造和篡改的关键性内容(例如合同中一般规定在文件签署之日起生效)。在电子文件中,由于用户桌面时间很容易改变(不准确或可人为改变),由该时间产生的时间戳不可信赖,因此需要一个第三方来提供时间戳服务(数字时间戳服务(DTS)是网上安全服务项目,由专门的机构提供)。此服务能提供电子文件发表时间的安全保护。

时间戳产生的过程为: 用户首先将需要加时间戳的文件用哈希编码加密形成摘要,然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。因此时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分:需加时间戳的文件的摘要,DTS收到文件的日期和时间, DTS的数字签名。

由于可信的时间源和文件的签名者对文件进行了联合签名,进而阻止了文档签名的那一方(即甲方)在时间上欺诈的可能性,因此具有不可否认性。

问题8:有了数字证书将公/私钥和身份绑定,又有权威机构提供时钟服务使其具有不可否认性,是不是就万无一失了?

不,仍然有问题。乙还是不能证明对方就是甲,因为完全有可能是别人盗用了甲的私钥(如别人趁甲不在使用甲的电脑),然后以甲的身份来和乙传送信息,这怎么解决呢? 解决办法是使用强口令、认证令牌、智能卡和生物特征等技术对使用私钥的用户进行认证,以确定其是私钥的合法使用者。

解决这个问题之前我们先来看看目前实现的基于PKI的认证通常是如何工作的。以浏览器或者其他登记申请证书的应用程序为例说明,在第一次生成密钥的时候会创建一个密钥存储,浏览器用户会被提示输入一个口令,该口令将被用于构造保护该密钥存储所需的加密密钥。如果密钥存储只有脆弱的口令保护或根本没有口令保护,那么任何一个能够访问该电脑浏览器的用户都可以访问那些私钥和证书。在这种场景下,又怎么可能信任用PKI创建的身份呢?正因为如此,一个强有力的PKI系统必须建立在对私钥拥有者进行强认证的基础之上,现在主要的认证技术有:强口令、认证令牌、智能卡和生物特征(如指纹,眼膜等认证)。

以认证令牌举例: 假设用户的私钥被保存在后台服务器的加密容器里,要访问私钥,用户必须先使用认证令牌认证(如用户输入账户名、令牌上显示的通行码和PIN等),如果认证成功,该用户的加密容器就下载到用户系统并解密。

1.3 pki到底是什么?

上面解决问题过程中说了半天,也没有提到pki,那么到底什么是pki呢?

pki是一种机制,或者说是解决问题的方案,其解决的问题就是如何保障网络通信中的信息安全和身份安全。

从广义上来说,只要能够提供公钥加密和数字签名服务的系统,都可以称之为PKI;当然,现在pki发展越来越细,元素也越来越多,比如必须要有数字证书、CA机构等等,但是本质不会变。

上面八个问题中涉及到的解决方案结合起来,本身就是一种pki机制。

1.4 pki到底解决了什么问题?

那么pki到底解决了什么问题?

其实从维基百科的介绍中可以了解到:PKI是一个公钥基础设施平台,其使用数字证书、密钥加密等措施来保障网络通信中的信息安全和身份安全。从我个人浅显的理解来说,PKI就是解决如何证明我是我、如何保证我传给A的东西其他人看不到只有A能看,而且A还能确信这是我发的。

从我个人角度来说,pki解决了:

(1)证明持有数字证书的用户真实性

首先,识别该数字证书是有效的,然后确定xxx是该数字证书的持有者。例如,在A、B认证过程中,A要先验证B的证书真实性:

    当A接收到B的证书时,先用CA公钥解开证书中B的数字签名(该签名是用CA的私钥加密而成),若通过验证签名,则说明B的证书是有效的。

其次,A将验证B的身份:

    B可以用数字签名的传送方式将自己的口令传送给A,A接收后,通过B的公钥来验证B的数字签名,如果B通过验证,则可以确定B的身份,允许访问。

(2)保证传输数据的完整性

该完整性是指保证数据在传输过程中完整,且不会被篡改。该项服务实现的最重要方法之一便是数字签名。数字签名在实体认证的同时,也保障了被签名数据的完整性,其支持保证主要是哈希算法(上面提到的消息摘要便是一种哈希算法)和签名算法

  • 哈希算法通过独特算法可将输入数据的微小变化放大N倍,导致输出数据大幅度变化;
  • 在签名过程中,将自己的私钥加密哈希值,将数据传输给接收方。假设敏感数据在传输、处理过程中被恶意修改,那么接收方收到的数据签名将会是不完整的,此时验证不通过,传输终止;反之,则通过。

(3)保证了数据的保密性/机密性

pki的数据保密性是指数据传输过中,不能被非授权者偷看,其依靠非对称加密机制实现。

    如上面的甲乙通信,甲获取对称密钥,使用对称密钥对传输数据进行加密;然后甲乙双方获取公私钥对,用乙的公钥加密对称密钥,将加密数据和加密后的对称密钥发送给乙;乙收到数据后,先用自己的私钥解密甲的对称密钥,在用对称密钥解密加密数据。

(4)保证了数据的有效性/不可否认性

数据的有效性是指数据不能被否认,通过数字签名实现。

    数据是你发的,不可否认。

一个有效的PKI系统必须是安全的和透明的,用户在获得加密和数字签名服务时,不需要详细地了解PKI是怎样管理证书和密钥的。

2、pki构成与流程

上文提到了,pki本质是制作、颁发数字证书的一种机制,那么它包含几部分,其制作颁发数字证书的流程是怎样的,下面来详细介绍一下。

2.1 pki构成要素

pki机制的所有要素(前三个是最主要的):

  • 数字证书(Digital Certificate):也就是上面说的网络版身份证,本质上是被存放在硬盘或者IC卡里面的一个电子文件,其文件格式由某种固定协议(比如X.509)规定;
  • 证书授权机构(Certificate Authority,CA):通常被称为CA中心,是负责管理并运营CA系统的机构,CA中心是专门负责颁发数字证书的系统;本质上就是一个网络应用程序。
  • 证书库:存储已签发的证书证书和公钥,以及相关证书目录,用户可由此获得所需的其他用户的证书及公钥;本质上就是一个文件系统。
  • 密钥备份及恢复系统:用于证书中密钥的备份和恢复。很多场合中,如果解密密钥丢失,将造成数据无法解密,文件无法恢复;为了应对这种情况,CA一般会对密钥进行备份。需要注意的是:为了保证签名密钥的唯一性,密钥备份和恢复至能针对解密密钥。
  • 证书撤销列表(Certificate Revocation List,CRL):列出哪些用户的证书已经被撤销,不再有效。由CA负责保存
  • pki应用接口:为外界各种应用提供接口,进行交互。

注意:数字证书仅仅是解决了“这个公钥的持有者到底是谁“的问题。

在浏览器上打开百度网站,我们可以看到其网址左边有一个小锁按钮,点击后就可以得到百度服务的相关证书信息:

pki详解

数字证书本身是有很多分类的,具体如下图所示:

pki详解

2.2 pki机制流程

pki详解

上述流程中,通信的两个人,首先确认对方的数字证书是可信的,那么就可以用对方的数字证书里面的公钥进行加密文件,然后进行可靠通信。

2.3 pki标准

随着pki的发展,pki产品越来越多,国内外很多标准化组织为pki的实施和应用指定了一系列有关标准。

常用标准如下:

  • X.509标准:它定义了公钥证书的基本结构。
  • PKCS标准:由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等一系列相关协议。
  • PKI应用标准

  1. SSL/TSL协议:被广泛用于Internet上的身份认证与web服务器和用户端浏览器之间的数据安全通信。SSL协议规定通信双方在建立连接时对通信双方进行身份验证,并且使用对称加密来保证通信的保密性,使用消息认证码来保证消息的完整性。
  2. IPsec协议:IP安全协议IPsec为网络层通信定义了一个安全框架和一组安全服务,协议的一些部分用到了PKI。IPSec可用于IPv4和IPv6,一般使用隧道模式。
  3. S/MIME协议:安全/多用途Internet邮件扩展协议,是一个用于发送安全报文的IETF标准,为电子信息应用增添了消息真实性、完整性和保密性服务。
  4. TSP协议:时间戳协议,通过时间戳TSA的服务来提供数据在特定时间存在的证据。

参考文献

继续阅读
蓝亚之舟
网络基本功

网关详解

1、什么是网关 首先要明白,网关(Gateway)本质上不是一个产品而是一个网络层的概念,网关(Gateway)就是一个网络连接到另一个网络的“关口”。 计算机本身不具备路由寻址能力,所以计算机要把所...

发表评论