HTTPS下的加密机制

本文参考:

  1. Syndicate的博客:https://laihaodong.cn/2324.html
  2. 图解http
  3. 计算机网络
  4. 简一商业的博客

近代常用的加密算法中,加密算法是公开的,而秘钥是保密的,我们首先了解对称加密算法和非对称加密算法。

一、对称加密算法

对称加密算法,也被称为对称密钥加密。“对称”在这里的意思是,加密和解密使用同一个密钥。

在对称加密体系中,原文通过对称密钥被加密成密文,而密文可以使用相同的对称密钥解密成原文

对于通信的双方,这个秘钥不应该被通信双方以外的人得到。

1.对称加密的面临的问题

进一步的问题,这个秘钥应该如何被安全的移交?

因为在互联网上转发秘钥的时候,如果通信被监听,则秘钥可能落入他手,同时秘钥安全的保管也是个问题。

而非对称加密算法很好的解决了对称加密这一困难,接下来进一步了解非对称加密算法。

二、非对称加密算法

非对称密钥加密又称公开密钥加密,这类算法使用一对密钥,一个用于加密,即公钥,通常可以公开的在网上传播,另一个用于解密,即私钥,一般被所有者私密保存。

公钥和秘钥都可以用来加密和解密,只是把对外公开的称为公钥,自己保存的称为秘钥。

公开秘钥加密有两个作用,RSA加密数字签名

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。如果能较快的对一个非常大的整数进行因式分解,就有可能破解。就目前数学和计算机技术来说,不太可能实现。

1.RSA加密

RSA加密是公钥加密,私钥解密。

发送方利用对方公开的秘钥对密文进行加密,发送过去后接收方利用自己保存的秘钥解密。

换言之,如果你想把某个消息秘密的发给某人,那你就可以用他的公钥加密,不必担心消息被篡改窃听,因为只有持有秘钥的对方才能把密文转换成明文。

2.数字签名

数字签名是私钥加密,公钥解密的过程。

我们的目的不再是保密了,而是认证,所以加密解密也得换个名字,在这里私钥被用来签名,公钥被用来验证

数字签名的两个作用,1.证明这消息是你发的。2.证明这消息内容确实是完整的,也就是没有经过任何形式的篡改。

具体来讲,如果接受方(B)收到了用发送方(A)的私钥加密(签名)的消息,则肯定可以用 A 的公钥将其解密(验证)。如果验证成功,这就说明了这条消息肯定是从 A 发过来的,因为只有 A 有对应的私钥,所以不可能有其他人能加密出一个可以用 A 的公钥解密的密文。所以,这里的认证的含义就是这样,一方对数据签了一个只有自己能签的名,另一方用对应的密钥验证这个签名的归属。

即使攻击者 C 在中途截获了密文,并用 A 的公钥解开了签名,但其也无法做成任何事,因为就算其将原文的内容做了修改,但他也无法使用 A 的私钥再次将原文签名。

(1)消息摘要

上面说的数字签名还有个小问题,其还是没有解决非对称加密速度慢的问题,因为如果你对大段的原文进行数字签名的话,还是需要耗费很多时间。所以在现实中我们常常不直接对原文进行数字签名,而是对原文的消息摘要进行数字签名。

消息摘要(Message Digest),顾名思义被用来表示一段消息的摘要信息,也常被称作是消息的指纹。这就类似与计算机网络中常见的的循环冗余校验(CRC),其主要目的就是验证一段消息是否被篡改了,因为如果消息被篡改,则此段消息的摘要一定会发生变化,接收方收到消息后再算一次摘要就会发现和发送方计算的摘要不同,由此判断消息已被篡改。

而攻击者很难将消息篡改后还能计算出同样的摘要,这是消息摘要算法的任务。

消息摘要算法有:

a.MD5
b.SHA
c.SHA2
d.(H)MAC
(2)RSA数字签名过程

假设发送方(A)要向接收方(B)发一个消息 M ,并对消息 M 计算数字签名(DS)。

  1. 发送方 A 使用一个消息摘要算法例如 SHA-1 对消息 M 计算消息摘要(MD1)。
  2. 发送方 A 用 RSA 数字签名的私钥加密(签名)这个消息摘要,输出 A 的数字签名(DS)。
  3. 发送方 A 将消息 M 和数字签名 DS 一起发送给接收方 B。
  4. 接收方 B 收到后使用相同的消息摘要算法对消息 M 计算消息摘要,得到消息摘要 MD2 。
  5. 接收方 B 使用发送方 A 的 RSA 数字签名的公钥解密(验证)数字签名 DS ,得到消息摘要 MD1 。
  6. 最后只需要对比 MD1 和 MD2 即可。如果 MD1 = MD2 ,则可以表明消息 M 未经篡改且一定来自 A 。

2 .非对称加密面临的问题

如何获取通信一方的公钥,如果通过网络传输,那么公钥可能被攻击者篡改,攻击者如果发送给你他的公钥,这就是中间人攻击。为了解决这样的困境,我们要进一步去了解公钥基础设施

三、公钥基础设施

为了解决非对称加密传输公钥被篡改的困境,可以使用由数字证书机构和其相关机关颁发的公开秘钥证书。

1.数字证书认证机构的业务流程

现在来说一说 CA 到底是怎么生成数字证书的吧。

(1)第一步是密钥生成,假设我想向 CA 申请一个数字证书,那么当然要先把自己的私钥-公钥对生成好。

(2)第二步是注册,我需要把我的公钥和有关我自己的各种信息发送给 CA 。证书请求的格式已经标准化,称为证书签名请求。

(3)第三步是验证,CA 收到信息后当然要验证我的信息,以保证这些信息可以接受。例如用户是一个组织,CA 可能会检查营业记录、历史文件和信用证明等。如果是个人用户,只需要一些简单的验证即可,例如电子邮箱、电话号码等。然后 CA 还要验证的是,我确实有发送过去的公钥对应的私钥,也就是验证那个公钥的有效性。这一步称为私钥的拥有证明。具体怎么做呢,有很多办法。例如可以要求用户再发送一份被其签名的证书签名请求,这样 CA 可以尝试用公钥来验证这份被签名的请求,如果验证成功则说明用户确实有对应的私钥。或者 CA 可以用公钥直接把申请好的证书加密,然后发送给用户,这样用户只有确实有私钥才能解开这个证书。

(4)第四步是证书生成,CA 验证完成后用程序生成 X. 509 标准的证书,并将证书发给用户,然后在自己的数据库中存储一份副本。

2.数字证书具体内容

字段描述
版本(Version)标识本数字证书使用的 X. 509 协议版本
证书序号(Certificate Serial Number)CA 为这个数字证书产生的唯一标识
签名算法标识符(Signature Algorithm Identifier)标识 CA 签名本数字证书时使用的算法
签发者名(Issuer Name)标识生成并签发本数字证书的 CA 名
有效期(Validity)包含数字证书的生效时间和过期时间
主体名(Subject Name)标识本数字证书签发给的实体的名字
主体公钥信息(Subject Public Key Information)包含主体的公钥以及相关的算法

3.数字证书的应用

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:一,认证服务器的公开密钥的是真实有效的数字证书认证机构。二,服务器的公开密钥是值得信赖的。
此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。

对称密钥加密(Symmetric Key Cryptography)

非对称密钥加密(Asymmetric Key Cryptography)

公开密钥加密(Public Key Cryptography)

认证(certificate)

指纹(fingerprint)

消息摘要(Message Digest)

公钥加密标准(Public Key Cryptography Standards, PKCS)

Last modification:January 20th, 2021 at 10:11 pm
如果觉得我的文章对你有用,请随意赞赏