信息安全-密码学(三)
第二篇文章,我们对签名验签、数字证书等相关知识进行介绍,数字证书可以有效保护接收方的公钥在传输过程中的安全性。但是,知道重要的是,可信第三方的公钥在传输给发送方的时候也可能会被中间人调包,进而会影响通信间的安全,为此,出现了公钥基础设施和证书链的概念。
一、公钥基础设施(PKI)
通过可信的第三方,由第三方创建数字证书。接收方就不再是直接将公钥发送给发送方,而是将包含公钥和自己个人信息的数字证书发送给发送方。发送方就可以通过第三方的公钥来验证收到的数字证书是否来自于真实的接收方(如果是则获取数字证书中接收方的公钥)。
问题是,可信第三方的公钥在传输给发送方的时候,第三方的公钥也可能会被中间人调包。
中间人可以调包可信第三方的公钥(用于验证数字证书),这样发送方就收到了中间人的用于验证数字签名的公钥,同时中间人再将自己的另外一把公钥和接收方的个人信息绑定并签上数字签名,发送方收到中间人伪造的数字证书后,用中间人用于验证数字签名的公钥对数字证书进行验证,发现数字证书通过了验证,发送方就会深信自己收到的是来自于接收方的公钥。
到这里,公钥被调包的问题还是没有解决。如果可信第三方传递的不是其公钥,而是包含其公钥的数字证书呢?但是这样仍然解决不了问题,为了验证第三方的身份,就需要一个可信第四方,由可信第四方给第三方签发证书,然而第四方的公钥又存在被调包的问题,这样就陷入了一个无限的身份信任循环中。
为了解决上述问题,便产生了PKI(PKI,Public Key Infrastructure)。PKI提供对公钥所有人身份进行验证和数字签名等服务,用来管理公钥和数字证书。PKI的主要组成和各自的职能如下所示:
·PKI用户:指证书申请人,可以是个人或组织
·注册机构(RA,Registration Authority):对证书申请者的身份进行确认,向CA提交证书申请请求
·证书签发机构(CA,Certificate Authority):CA是PKI的核心,承担着处理证书申请、创建和签发数字证书、更新证书等职责。
·数字证书存储库:用于存储已签发的数字证书及公钥。
·证书撤销清单(CRL,Certificate Revocation List):由于存在用户信息的变更、私钥泄密等问题,即使证书在有效期内也需要对证书进行撤销,需要通过发布CRL来声明哪些证书是无效的。
·在线证书状态协议(OCSP,Online Certificate Status Protocol):和CRL的功能相同,CRL需要先下载完整的证书撤销清单文件,再从中查找序列号来校验证书的吊销状态,OCSP通过发送证书信息查询请求,由OCSP响应返回该证书的吊销状态。OCSP的校验速度要比CRL快,但是必须要在联网的环境下。
CA数字证书的申请流程如下:
·用户创建公钥和私钥密钥对;
·用户提出证书签名请求(CSR,Certificate Signing Request),并提交自己的个人信息和公钥;
·RA对申请人的身份进行验证,申请人身份验证通过后,RA向CA请求签发证书;
·CA创建数字证书,并且当证书被撤销时,CA会更新CRL;
信息发送方在成功申请数字证书后发送给信息接收方,信息接收方需要对数字证书进行验证,主要包括验证证书的有效性、完整性和真实性:
(1)验证证书的有效性:证书是否在有效期内(数字证书中含有证书的有效期),证书有没有被撤销(通过CRL或者OCSP)
(2)证书的完整性和真实性:证书是否是由可信任的证书签发机构进行颁发(数字证书中含有颁发人的信息)、使用的加密算法是否安全且未被破解、核对证书使用者的信息以及证书有没有被篡改(通过证书链)。
二、证书链(Chain of Trust)
一般情况下,PKI证书分为三级证书,即根证书、中间证书、最终用户证书。根证书是信任链的起点,默认是完全可信的。根证书CA不会直接签发证书(即根证书),而是用根CA的私钥为中间CA签发中间证书,之后由中间CA进一步签发用户证书,这样做即使中间证书受到损害,根证书的安全性仍然会得到保障,并且该操作也可以增加签发证书的灵活性。
证书链的创建过程:
(1)根CA创建自己的公钥、私钥密钥对,并将自己的信息和公钥进行绑定,再用公钥对应的私钥进行数字签名,这就产生了根证书,由此可知根证书是由根CA自己的私钥进行自签名的。对根证书进行签名的私钥是整个证书链中最重要、最核心的信息,一旦泄露会导致整个信任链不再可信,所以根CA通常不会用自己的私钥为用户签发数字证书,而是签发中间CA是证书;
(2)拥有根证书的CA则为根CA,根CA使用自己的私钥为其他的CA(中间CA)签发证书(中间证书),再由中间CA使用自己的私钥为PKI用户签发证书,这样就形成了证书链。
证书链的验证流程:
(1)上级CA用自己的私钥对下级CA(或用户)的公钥和其他信息进行签名,将签名附在所有信息之后便生成了数字证书。
(2)在对下级证书进行检验时,使用上级证书中的公钥解密下级证书中的数字签名得到哈希值(H1),将其余信息进行相同的哈希计算后(数字证书中会标明使用的是什么签名算法)得到新的哈希值(H2),比较两个哈希值是否相同。证书链的验证流程如图1所示。
图1 证书链的验证流程
注:根证书如何确保能安全的交给客户端而不遭受到中间人攻击——根证书一般是预装在浏览器和操作系统中,在需要建立一个安全连接时,直接使用事先内置的根证书和公钥来验证服务端的证书。
上一篇: SOTIF预期功能安全系统需求如何分解到部件:从理论到实践
下一篇: 信息安全-密码学(二)