加密与数字证书

加密与数字证书

非对称加密

非对称加密采用两个密钥(公钥和私钥)。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。公钥加密的数据只能私钥解密,同理,私钥签名的数据只能公钥验签。这里的签名、验签实际上也是加密、解密操作,因为与公钥加密的用途不同,所以叫做签名,具体可以看加密和签名的区别和联系 。非对称加密的典型算法有 RSA 算法。

缺点:非对称加密设计了较为复杂的数学算法来生成密钥,在实际通信过程中,计算的代价较高,效率太低。

对称加密

通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性。对称加密的密钥生成代价比公私钥对的生成代价低得多。常用的堆成加密算法有 AES,DES 等

对称加密和非对称加密的使用

虽然非对称加密的效率低,但实际中一般两者是相互配合使用。因为对称加密的保密性完全依赖于密钥的保密性。在双方通信之前,需要商量一个用于对称加密的密钥。我们知道网络通信的信道是不安全的,传输报文对任何人是可见的,密钥的交换肯定不能直接在网络信道中传输。因此,使用非对称加密,对对称加密的密钥进行加密,保护该密钥不在网络信道中被窃听。这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。

公钥传输时的安全隐患

上述传输过程中进行非对称加密时有一个前提,那就是要获得正确的公钥。设想一下的一个场景:

客户端 C 和服务器 S 想要使用 SSL/TLS 通信,C 要先知道 S 的公钥,而 S 公钥的唯一获取途径,就是把 S 公钥在网络信道中传输。要注意网络信道通信中有几个前提:

  1. 任何人都可以捕获通信包
  2. 通信包的保密性由发送者设计
  3. 保密算法设计方案默认为公开,而(解密)密钥默认是安全的

因此,假设 S 公钥不做加密,在信道中传输,那么很有可能存在一个攻击者 A,发送给 C 一个诈包,假装是 S 公钥。当 C 收获了 A 的公钥(却以为是 S 的公钥),C 后续就会使用 A 公钥对数据进行加密,并在公开信道传输,那么 A 将捕获这些加密包,用 A 的私钥解密,就截获了 C 本要给 S 发送的内容,而 C 和 S 二人全然不知。

也就是说发送公钥这一步没有做到防篡改防冒充。靠数字签名可以防篡改防冒充,但是数字签名需要接收者持有发送者的公钥才能实现,这就进入了死锁状态。

为了公钥传输的信赖性问题,第三方机构应运而生——证书颁发机构(CA,Certificate Authority)。

数字证书

CA 默认是受信任的第三方。CA 会将:证书的颁布机构、有效期、公钥、持有者(subject)等信息用 CA 的私钥进行签名。并且将签名结果和这些信息放在一起,这就叫做数字证书

这样,B 就可以去 CA 申请一个证书,然后将自己的证书发给 A,那么 A 如何验证这个证书确实是 B 的呢?当然是使用 CA 的公钥进行验签。A 收到 B 发过来的数字证书后,A 使用 CA 的公钥进行验证,验证通过即证明这确实是 B 证书,也就可以使用证书中包含的 B 的公钥,按照之前讨论的流程进行通信。

注意:CA 的公钥也是需要使用证书来分发的,所以 A 的电脑内必须存有 CA 的证书,证书里包含了 CA 的公钥。

证书

可以看到,证书包含了证书持有人的公钥和证书的签名。另外,证书颁发机构是有层级关系的,下级 CA 的证书是需要由上级 CA 签名的。换句话说一定存在根证书颁发机构,那么他们的证书是由谁签名的呢?答案是自签,自己给自己认证。为什么根证书可以自签?这是基于最基础的信任。
根证书不应该通过网络分发,因为通过网络分发的话,可能会被中间人攻击。一般根证书都通过操作系统或者浏览器分发,在操作系统中会内置很多根证书,但是最初的操作系统也不能通过网络分发,因为中间人可以修改操作系统中的根证书。所以要保证安全只能靠最原始的方法,当面交流。硬件厂商会和证书签发机构合作,在电脑、手机等设备出厂的时候在其操作系统中内置签发机构的根证书,再将这些设备分发出去,这样,这些设备的用户就可以安全地进行信息交换了。所以,安全性就依赖于这些设备在分发到消费者手中之前不会被恶意修改来保证了。

  • 什么情况下浏览器提醒证书不可信?
  1. 证书不是权威 CA 颁发。有些企业为了贪图便宜使用盗版的证书,没有经过 CA 认证。也就是无法使用浏览器内置 CA 公钥进行验证。
  2. 证书过期。证书里有一项就是有效期,一般就是一年或者两年的时间。如果证书过期,那么浏览器就会提示“证书不可信”
  3. 证书部署错误。可能是服务器证书部署出错,比如证书与域名不匹配,因为证书里有一项是持有人信息的。
posted @ 2022-04-03 12:22  のNice  阅读(248)  评论(0编辑  收藏  举报