PKI加密体系加密过程及原理

文章目录


前言

本文依据自己的工作经验总结,参考相关文献文档简述PKI加密体系的加密过程及原理。

一、基本相关概念

注:PKI全称公钥基础设施,主要用于保障数据传输交换过程诸如完整性、保密性等安全需求。在进行PKI加密体系学习前,我们需要先了解几个关键的名词。


1.信息安全CIA三要素

一般而言,我们讲的信息安全三要素是指:保密性、完整性、可用性。这并不是说信息安全只有这三个点,其实还有诸如:有效性、真实性、不可抵赖性等等(当然这些特性其实从某种角度而言可以归纳进入三要素之中,可看作是更细分的特性)。而这些就是信息安全需要保障的。PKI体系主要偏向保障了数据的保密性、完整性、不可抵赖性和真实性等。

通常我们对网络安全、信息安全、数据安全等称呼的认知都是认为他们是相同的,其实他们之间是存在范围上或者层级上的不一样的,当然他们需要保障的特性是具有相通性的,这里我们不做说明,后面的描述我将统一采用数据安全来的描述方式。


2.密码学基本相关概念

密钥

密钥就是“钥匙”。是加解密过程使用的钥匙,可以理解为锁门关门所使用的“钥匙”,从功能上讲这是相似的。数学上这是一个解开函数的已知量,例如:x+5=y,这里这个“5”就是密钥。加密过程就是知道x计算出y,解密就是知道y反推出x。需要特别指出的是,实际上加密与解密的密钥可以是相同的也可以是不同的,即知道加密的密钥与加密后的密文是不一定能计算出原文的(知道y与5计算不出x),至于原理,那就是数学的魅力了。

这里的举例只是便于理解,实际过程使用的数学函数是不会这么简单的,例如AES使用的核心数学原理是伽罗瓦域,RSA的核心数学原理大素数的难分解性,欧拉定理等,我国的SM2就利用了椭圆曲线算法。


加/解密算法

对称加密
简单的说,对称加密就是加密与解密使用同一个密钥。
非对称加密
与对称加密相对应的,非对称加密就是加密与解密使用两个完全不同无关联不能相互推导且相互之间唯一的一对密钥。也就是说这种加密算法是会产生两个密钥的(通常称之为一对密钥),这一对密钥中的两个密钥(通常称之为公钥与私钥)相互之间不同,除加解密之外无其他关联,无法相互推导而出,能且只能相互加解密(公钥加密的只有对应的私钥能够解密,私钥加密的只有对应公钥能够解密,公钥只能解密对应私钥加密的数据,私钥只能解密对应公钥加密的数据)

关于这一对公私钥,谁是公钥谁是私钥,是没有标准要求的,只有一个区分:对外公开的就是公钥,不对外公开的,自己要完美保密的就是私钥。是的没有看错,通常情况下公钥是需要且必要对外公开的,具体的我们后文会有提及。


不可逆(单向)加密(散列函数hash、消息摘要、杂凑函数)
这一类加密算法是比较特殊,但其实应用比较广泛的加密算法。其特点是,一旦加密无法解密,密文唯一(即不同字符的数据原文加密后的密文是不同的,不会出现一致的密文),通常密文长度固定(不管原文长度如何,加密后都是统一固定长度)。与前面两种加密不同的是这种加密实现的主要保障目的是完整性、不可抵赖性。

加/解密算法按照不同维度会有多种分类方式,每种分类又会有多种不同的类型,例如按照加密方式可分为流加密算法、分组加密算法....按照用途又可以分为密钥协商算法、加密算法等等。这里我们不做详细说明,感兴趣的可以自行百度作为了解。 密码学的历史是比较悠久的,整个学科也很复杂,从早期的古典密码(核心理论是替代和置换,如经典的凯撒密码),到现在普谝使用的PKI体系。形成了一个较为庞大的学科体系,感兴趣的可以自行百度作为了解,这里我们只针对PKI关联紧密的做一些简单的说明。 这里提一个目前公用的密码学中的原则:柯克霍夫原则(Kerckhoffs's principle)即柯克霍夫这个人提出的理论。他认为“即使密码系统的任何细节已为人悉知,只要密匙未泄漏,它也应是安全的。”基于这个原则,算法是可以公开的,并且部分人认为应该公开,让所有人去攻击,这样都无法攻破的算法才是安全的算法,我们只需要保证每次使用的密钥的安全保密即可。

3.数字签名/数字证书

数字签名:与物理世界签名的作用本质上是一样的,只不过签名方式不通。数字签名就是一串字符串,通常是对数据(已知数据)用私钥加密,因为私钥只有发送者自己知道,且其解密方式有且只有用对应的公钥解解密,所以能够判定该加密数据是发送者发送的,就产生了“签名”的效果。
数字证书:数字证书则是为证明数字签名的真实有效不可抵赖而产生的。在上述的数字签名过程中有一个逻辑上的问题:我们要验证签名的真实性需要用发送者签名时使用的私钥其对应的公钥来解密,查看能否解密,解密后数据正确与否,以此来判断;然而公钥是公开的,我们无法验证我们拿到的公钥就一定是正确的;且发送者也可以随时抵赖说我们使用的公钥并不是他们的公钥(因为私钥是绝对保密的,我们无法证明)。这个时候就需要权威机构发布证明文件(类似于派出所发放身份证),这个文件就是数字证书。

数字证书本身也是会有签名证明该证书是该权威机构发放的(防伪造),验证使用的公钥也是可以造机构公网拿到的。当然,我们可以说拿到的数字证书的也不一定是可信的,验证数字证书用的公钥也不一定是可信的(简单的说就是这个机构也不是一定可信的),它和数字签名一样存在逻辑问题。数字证书的可信度是需要建立在“你总是需要信任一个人”的理论上面的,这就像如果你不信任法院、*局等机构,那么一切都是徒劳的,是无法做到完全可信的。当然拿到的验证证书使用的公钥需要保证正确,这就像生活中总有骗子冒充执法人员诈骗一样,这就只能自己睁大眼了,一定需要从官方获取并得到准确认证。


4.CA/RA机构

CA(证书机构):
就是上文提到的审核、发放、撤销、管理数字证书的机构,“*局”的存在。证书机构CA是PKI的信任基础,它管理公钥的整个生命周期,其作用包括:发放证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书。
RA(注册机构):
可以理解为CA的下级机构(“派出所”)。注册机构RA提供用户和CA之间的一个接口,它获取并认证用户的身份,向CA提出证书请求。它主要完成收集用户信息和确认用户身份的功能。这里指的用户,是指将要向认证中心(即CA)申请数字证书的客户,可以是个人,也可以是集团或团体、某*机构等。注册管理一般由一个独立的注册机构(即RA)来承担。它接受用户的注册申请,审查用户的申请资格,并决定是否同意CA给其签发数字证书。注册机构并不给用户签发证书,而只是对用户进行资格审查。当然,对于一个规模较小的PKI应用系统来说,可把注册管理的职能由CA来完成,而不设立独立运行的RA。但这并不是取消了RA的相关功能,而是将其作为CA的一项功能而已。PKI国际标准推荐由一个独立的RA来完成注册管理的任务,可以增强应用系统的安全。

二、PKI体系

出于方便理解的目的,以下采用由浅入深,层层加码的方式说明整个PKI体系(由最初的加密传输到最后的整个体系)。

1.第一层级:数据加密与密钥保密(加密传输,保证数据的保密性)

要保证数据传输得保密性,最直接简单有效的方式就是对传输数据进行加密。无论采用什么加密算法,只要能够最大化得保证只有通信双方可读,就算是完成了任务。这里我们主要使用对称与非对称加密两种方式,事实上这两种方式只要运用合理基本上都可以完成这个工作。在这里我们首先以对称加密举例。如图:
PKI加密体系加密过程及原理
这个过程相对简单,只需要双方用约定好的算法与密钥加解密即可完成加密传输的工作,在能保证密钥不泄露得情况下,数据得保密性也是能够得到一定的保障得;但是不难看出,这个过程中存在着一个致命得问题:密钥的保密问题。在对称加密的方式下,这个问题是无法完全解决的,只要有传输就有截取的风险。要降低这个风险,方法其实有很多,在这里我们只谈PKI体系的方法。如图:
PKI加密体系加密过程及原理
从上图中不难看出,我们利用了非对称加密的特性来解决密钥传输容易被截取的风险。在这个过程中,除了双方各自的私钥以外,其他的加密过程都是可以公开的,但是没有私钥就无法获取数据内容。私钥也不用做任何的传输(如果可以,保存在脑子里都行),降低或者避免了截取的风险。这个过程做一下文字描述:A需要给B发送消息时,使用B的公钥加密,然后通过网络传输,整个密文只有B能够用自己的私钥解开,其他人都不行,包括A。B需要给A发送消息同理。这个过程中需要双方共同约定使用的算法,并各自生成一对公私钥。
上述的加密体系过程,我们基本解决了保密的问题,但是这样的传输依然存在问题。例如:虽然第三方(黑客)无法解密我们的数据,但是可以更改,删除。由于这个过程中的公钥是公开的,所以黑客截取数据后虽然无法打开,但它可以选择修改密文,甚至直接替换一段新的用公钥加密的数据,在发送放行,作为接收方,是没有办法进行区分的。于是我们就需要进阶第二层级。

从上述的内容,我们可以感知到似乎非对称加密更为保险,因为密钥的安全性更高。单从算法的安全性而言,对称与非对称都是可以达到安全目的与标准的,非对称的优势在于密钥的安全性。但是实际中我们依然大量的在使用对称加密。原因在于非对称加解密耗时长、速度慢,占用资源多,只适合对少量数据进行加密,而这些刚好是对称加密的优势所在。所以实际上这个体系我们通常是对称与非对称同时使用。即:大量数据的传输利用对称加密,然后使用非对称加密的方式传输对称加密的密钥,当然,如果是小数据的传输也可以直接使用非对称加密方式。


2.第二层级:单向加密数据,保证数据的完整性(消息认证码)

在前面的加密过程中我们基本解决了数据保密问题,但是那无法保证数据完整性(正确性),即无法确保数据没有被篡改。当然,只要传输过程存在,被截取的风险就存在,也就存在被修改的风险,这个数据安全传输通道的问题,加密无法解决;但是加密可以曲线救国,既然无法避免被截取篡改的风险,那我们换个角度,只要接收方能够分辨识别出来收到的消息有没有篡改,我们就能避免被假消息干扰了。实现分辨收到的数据有没有被篡改就需要利用单向加密的特性:唯一存在、不可逆。
我们知道单向加密是不可逆的,而且加密密文是唯一的(理论上,至于为什么说理论上,我们在结尾的时候再提到。)即:任何差异的明文加密后的密文是不会重复的,且无法从密文反推出明文。利用这个特点,我们就能有效的分辨出收到的密文数据是否被修改过了。来说说过程:首先,我们用前面的步骤将数据加密成为密文,然后,我们再将密文进行单向加密得到一个摘要,再将密文与摘要同时发送给接收方。接收方接收数据后,先不做密文数据的解密,而是拿出密文数据用同样的单向加密方式对密文数据加密,也得到一个摘要,将这个摘要与接收到的摘要对比,一致即表示密文数据未被修改,可进行解密读取数据,不一致则标识密文数据存在异常,我们就不再做解密了,因为这个数据信息可能是错误的,被篡改的。

hash过程并不一定要密文hash,也可以采用明文hash,对应的解密时就是先解密出明文后在对明文hash然后对比。


如下图(图中单向加密以hash为例描述):
PKI加密体系加密过程及原理
到此,我们算是解决了完整性的问题,但是解决完整性的这个过程还是存在一个问题,我们需要在优化一下。我们使用的单向加密的算法一般而言不是只有通信双方可知的,也就是说,通信双方可以hash校验,黑客也可以把hash值都替换掉改成他所修改的数据的对应hash值,这样我们就无法校验了。当然我们可以选择锉刀算法保密,但这就又增加了风险(需要保密的内容越多风险越大),我们需要尽量做到保密的内容最小化,但信息数据依然安全。所以,这个hash对比摘要的过程我们还需要利用单向加密的唯一性特点做一点优化,以达到不需要保密单向加密的算法也可保证完整性的目的。这个方法就是:“加盐”——产生消息认证码(MAC)
所谓“加盐”就是我们每一次使用算法生产摘要的时候,都在加密前的字段里固定加入一段数据,但这段字符串不参与传输,接收方验证的时候也同样加入该数据得到摘要用于校验。而这个固定数据我们常称之为key(与密钥相同的英文称呼)。在这种方式之下得到的这个验证摘要就叫做消息认证码(MAC)。一般情况下这个key是不丢失或泄露,那么这个消息验证码就是安全有效的。但是这里和对称加密一样存在一个key如何传输给对方的问题,然而这里我们不能在同样使用非对称算法解决了,因为在这里我们不仅是要保证key不被知道,还要保证key是正确的完整的,否则之后的所有校验就都是形同虚设了。于是我们就进阶第三层级。

消息认证码的过程其实已经有了一定的身份认证的功能效果了,因为key是只有双方知道的,所以验证能成功就可以证明消息是对方发送了。当然这个身份认证还不够完善,比如他还存在key的传输问题、发送方可以抵赖、发送方没法防范接收方栽赃等问题。


3.数字签名:消息认证与身份认证

要解决身份验证的问题,我们就需要一个标签。就像生活中的指纹、字迹等一样。这个标签需要唯一且无法被模仿伪造。回想前面的整个加密传输过程,满足这个条件的有一个——对称加密的私钥:唯一不重复,且除了发送方不会被其他人知道(虽然严格的说也存在保存不善的可能)。数字签名就是利用这个特性。
在上述第二步的时候,我们hash后,就准备了直接传输。在这里,我们缓一缓再做个数字签名。
数数字签名往往在说有加密的措施完成之后进行。我们将第二步中想要进行加盐操作生成MAC消息认证码的操作换一下。将密文+未加盐摘要拿出来,对摘要用发送方私钥加密(或者对要发送的密文+摘要私钥加密),然后发送。这样接收方收到消息后,先用发送方公钥解密。拿到摘要加密文,这个过程可以确认发送人不可伪造且摘要消息未被修改(若是整体就验证了整体未被修改),然后就重复之前的验证,到此为止PKI过程中的整个加密传输过程完整了起来。
加密保证传输过程信息的不泄露、对称加密解决了密钥的保密安全、单向加密(hash等)保证了验证消息的完整、数字签名验证了消息的可靠性
到此为止,从加密传输的过程中讲我们可以认为安全了。但是来了,整个过程中我们都在谈论技术、流程、工具的安全、保证、验证,忽略了一个重要因素——人。人才是最不可控的因素。就像前面提到的私钥我们说理论上不会被人知道,理论上也存在泄露可能,这都是因为人。记在脑子里都说不定啥时候说梦话泄露。甚至还会出现矢口否认,你拿到的公钥不是我的公钥,或者就真的被骗了拿到了一个错误的公钥,或者就故意拿个错的公钥栽赃,所以我们需要一个保证来对此负责,或者说及时止损,一旦发现可能泄露,停止信任。产生的影响也需要有人负责,这个时候就需要一个公正机构了。这个机构就是CA/RA,产生的认证物品就是:数字证书

4.数字证书:身份认证——不可抵赖性

数字证书本身类似于*局发放的身份证:认证“我就是我”,以*局的公信力、权威为保证、监督。
数字简单来讲就是一个小的文件,这个文件中通常包含认证方的信息(“*局”CA/RA)、被认证人的信息及有限期限、以上所有内容的核实方式。
在通信双方通信时附上改证书作为校验就到达了解决“人”的不可控问题,或者说得到了一个保证以及明确的分责标准。

数字证书的标准现在通常使用X.509,其包含的内容如下:
PKI加密体系加密过程及原理
版本
识别用于该证书的 X.509 标准的版本,这可以影响证书中所能指定的信息。迄今为止,已定义的版本有三个。
序列号
发放证书的实体有责任为证书指定序列号,以使其区别于该实体发放的其它证书。此信息用途很多。例如,如果某一证书被撤消,其序列号将放到证书撤消清单 (CRL) 中。
签名算法标识符
用于识别 CA 签写证书时所用的算法。
签发人机构
签写证书的实体的 X.500 名称。它通常为一个 CA。 使用该证书意味着信任签写该证书的实体(注意:有些情况下(例如根或顶层 CA 证书),签发人会签写自己的证书)。
有效期
每个证书均只能在一个有限的时间段内有效。该有效期以起始日期和时间及终止日期和时间表示,可以短至几秒或长至一世纪。所选有效期取决于许多因素,例如用于签写证书的私钥的使用频率及愿为证书支付的金钱等。它是在没有危及相关私钥的条件下,实体可以依赖公钥值的预计时间。
主体名
证书可以识别其公钥的实体名。此名称使用 X.500 标准,因此在Internet中应是唯一的。它是实体的特征名 (DN),例如:CN=Java Duke,OU=Java Software Division,O=Sun Microsystems Inc,C=US(这些指主体的通用名、组织单位、组织和国家)。
主体公钥信息
这是被命名实体的公钥,同时包括指定该密钥所属公钥密码系统的算法标识符及所有相关的密钥参数。
签名值
证书签发机构对证书的签名。


总结

PKI整体思路:首先利用加密(对称/非对称)保证数据信息的保密性,同时利用非对称的加密手段确保密钥的安全保密,增强数据信息的保密性>>然后利用单向加密保证数据的完整性,同时利用非对称的加密手段增强完整性的保证(哈希加盐),也提供身份验证(数字签名)的能力>>最后通过权威机构(RA/CA)发布数字证书提供完整的身份认证以及不可抵赖性。这样就形成了一个完整的数据信息安全保证与通信双方可信赖的完整链条。
值得注意的是:
1、保密是相对的:总会有被破解的时候,破解成本与所获利益是成反比的;数据信息也是有保密时效性的。
2、数据信息的保密过程中需要保密的环节及信息越多,泄露的风险越大。
3、PKI体系需要基于信任,权威结构的公信力。
4、PKI只是解决数据通信的安全,数据存储的安全是另外的领域。
5、任何的技术和流程都存在泄露风险;人,是最不确定、不可控的因素。

上一篇:PKI及SSL协议分析


下一篇:三、(1)PKI及SSL协议分析