非对称加密的原理及应用

引用来自wiki对于非对称加密的通俗介绍:在现实世界上可作比拟的例子是,一个传统保管箱,开门和关门都是使用同一条钥匙,这是对称加密;而一个公开的邮箱,投递口是任何人都可以寄信进去的,这可视为公钥;而只有信箱主人拥有钥匙可以打开信箱,这就视为私钥,这是非对称加密。RSA是使用最为广泛的非对称加密算法,而http到https的演进就依赖于RSA非对称加密算法。

HTTP到HTTPS的演进

HTTP

HTTP协议是基于传输层TCP协议的应用层协议,时至今日,它不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如HTML表单这样的信息。HTTP是一个client-server协议:请求通过一个实体被发出,实体也就是用户代理。大多数情况下,这个用户代理都是指浏览器,当然它也可能是任何东西,比如一个爬取网页生成维护搜索引擎索引的机器爬虫。每一个发送到服务器的请求,都会被服务器处理并返回一个消息,也就是response。HTTP是简单的、可扩展的、无状态的、有会话的、面向连接的传输协议。但是HTTP也存在以下问题:

  1. 通讯使用明文,可能被窃听。

  2. 无法证明报文的完整性,可能被篡改。

  3. 无法验证通讯方的身份,可能被欺骗。

HTTPS

HTTPS使用TLS/SSL作为传输层安全协议,拥有认证、保密和数据完整性功能。HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

TLS/SSL = 非对称加密(RSA) + 对称加密(AES) + 散列算法(SHA)。

  1. 解决内容可能被窃听的问题——非对称加密+对称加密。

  2. 解决报文可能遭篡改问题——数字签名。

  3. 解决通信方身份可能被伪装的问题——数字证书。

1.Client发起一个HTTPS(比如https://juejin.im/user/5a9a9cdcf265da238b7d771c)的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。

2.Server把事先配置好的公钥证书(public key certificate)返回给客户端。

3.Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。

4.Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。

5.Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。
6.Server使用对称密钥加密“明文内容A”,发送给Client。

7.Client使用对称密钥解密响应的密文,得到“明文内容A”。

8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。

RSA加密算法

为什么要使用公钥加密私钥解密?

  1. 密码学的假设是:一个合格的加密方案,敌手拿到明文c不能恢复明文m。如果颠倒过来,所有人都可以解密,那毫无意义。

  2. 为了满足密码标准,非对称加密的加密密钥尽可能更安全高效,而私钥尽可能保证安全,防止被破解,这就导致人们设计时公钥加解密比私钥加解密快。所以要用公钥进行加密,私钥进行解密。
    test1