在学习 HTTP/2.0 和 HTTP/3.0 之前,得先学习一些密码学的基本知识。
# 基本知识
密码学的处理对象是数字和字符串。
散列是一种数据一旦转换为其他形式将永远无法恢复的加密技术。比如 哈希算法和MD5,MD5 严格意义上来说不能算是加密技术,因为它不能被解密出来。
加密分对称加密和非对称加密。
对称加密(AES、DES、3DES):加密和解密使用同一个密钥。对称加密只有一个密钥容易被拦截,不安全,但是加解密效率比非对称加密要高。
非对称加密(RSA、ECC):加密和解密使用不同的密钥。一把作为公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。由于私钥永远都在自己手里,所以很安全,只是效率相比对称加密要低一些。
在实际使用过程中,通常是两种一起使用的。
- 加解密过程
# 对称加密和⾮对称加密的区别和⽤处
# 对称加密
1. 密钥特性
使⽤相同的密钥进⾏加密和解密。
密钥分发问题:密钥必须在通信双⽅之间安全共享,这在安全通信中是⼀个挑战。
2. 加密速度
通常⽐⾮对称加密快,适合加密⼤量数据。
3. 常⻅算法
AES(⾼级加密标准)、DES(数据加密标准)、3DES(三重数据加密算法)等。
4. 应⽤场景
⽂件和数据库加密、安全通信协议(如 SSL/TLS 中的数据传输部分)。
# ⾮对称加密
1. 密钥特性
使⽤⼀对密钥:⼀个公钥(可公开)和⼀个私钥(必须保密)。
公钥⽤于加密,私钥⽤于解密,或者公钥⽤于验证私钥创建的数字签名。
2. 加密速度
由于计算复杂度⾼,⽐对称加密慢,通常不适合加密⼤量数据。
3. 常⻅算法
RSA(Rivest-Shamir-Adleman)、ECC(椭圆曲线密码学)、DH(DiffieHellman 密钥交换)。
4. 应⽤场景
密钥交换、数字签名、身份认证。
在实际应⽤中,对称加密和⾮对称加密常常结合使⽤,以利⽤各⾃的优势。例如,在 HTTPS 协议中:
使⽤⾮对称加密进⾏密钥交换,安全地共享对称加密的密钥。
之后使⽤对称加密来加密数据,因为它在处理⼤量数据时更⾼效。
这种结合使⽤的⽅法提供了⼀个既安全⼜⾼效的解决⽅案,确保了数据的安全性,同时保持了加密过程的效率。
# 密钥交换算法
Diffie-Hellman 算法是一种著名的密钥协商算法,这种算法可以使得信息交换的双方通过公开的非安全的网络协商生成安全的共享密钥。
(1)Alice 与 Bob 确定两个大素数 n 和 g,这两个数不用保密。
(2)Alice 选择另一个大随机数 x,并计算 A 如下:A = gx mod n。
(3)Alice 将 A 发给 Bob。
(4)Bob 选择另一个大随机数 y,并计算 B 如下:B = gy mod n。
(5)Bob 将 B 发给 Alice。
(6)计算秘密密钥 K1 如下:K1 = Bx mod n。
(7)计算秘密密钥 K2 如下:K2 = Ay mod n。
(8)如果 K1 =K 2,那么 Alice 和 Bob 就可以用其进行加解密。
在这整个过程中,两个素数是公开的,但是两个随机数是保密的,随机数的产生是最关键的地方。
# 证书签发机构(CA)
通过 CA 发放的证书完成密钥的交换,实际上是利用非对称加密算法完成数据加密密钥的安全交换,然后再利用数据加密密钥完成数据的安全交换。
数字证书是互联网通信中标识双方身份信息的数字文件,由 CA 签发。
CA(certification authority) 是数字证书的签发机构。作为权威机构,其审核申请者身份后签发数字证书,这样我们只需要校验数字证书即可确定对方的真实身份。
CA 的工作流程
(1)服务器 example.com 将从 CA 请求 TLS 证书,例如 Digicert。
(2)Digicert 将为 example.com 创建证书,证书将包含必要的数据,例如服务器名称,服务器的公钥等。
(3)Digicert 将创建数据(证书)的哈希值,并使用自己的私钥对其进行加密。
(4)浏览器和操作系统自带 Digicert 等权威机构的公钥。
(5)当浏览器收到签名证书时,它将使用公钥从签名生成哈希值,它还将使用证书中指定的散列算法生成数据(证书)的散列,如果两个哈希值匹配,则签名验证成功并且证书是可信的。
(6)现在浏览器可以使用证书中指定的 example.com 的公钥继续进行身份验证过程。
在这里,我们可以将 Digicert 称为 Root CA。
# 数字签名的原理
数字签名是⼀种⽤于验证数字信息完整性和来源真实性的技术,它在⽹络安全和电⼦交易中发挥着关键作⽤。
数字签名的原理主要基于⾮对称加密和哈希算法。
以下是数字签名的基本原理和步骤:
# 1. 创建哈希值
哈希算法:⾸先,对需要签名的数据(如电⼦⽂档、软件、电⼦消息)使⽤哈希算法⽣成⼀个哈希值(或摘要)。哈希算法是⼀种单向函数,能够将任意⻓度的数据转换成固定⻓度的值。
数据唯⼀性:哈希值是数据的唯⼀指纹,即使是微⼩的数据变化也会导致哈希值发⽣显著变化。
# 2. 加密哈希值
使⽤私钥加密:数据发送者⽤⾃⼰的私钥对哈希值进⾏加密。这个加密后的哈希值就是数字签名。
⾮对称加密:数字签名的创建过程基于⾮对称加密技术,发送者拥有唯⼀的私钥,⽽公钥是公开的。
# 3. 发送数据和签名
⼀起发送:数字签名和原始数据⼀起发送给接收者,或者签名被附加在数据上。
# 4. 验证签名
使⽤公钥解密:接收者使⽤发送者的公钥对数字签名进⾏解密。
⽣成哈希值:接收者对原始数据运⽤相同的哈希算法⽣成新的哈希值。
⽐对哈希值:接收者将解密得到的哈希值与新⽣成的哈希值进⾏⽐较。
# 5. 确认完整性和真实性
完整性:如果两个哈希值相同,表明数据在传输过程中未被篡改,保持了完整性。
真实性:如果签名有效(即⽤正确的公钥可以成功解密),则证明签名确实来⾃拥有相应私钥的发送者。
# 应⽤
电⼦⽂档:电⼦合同、电⼦邮件等。
软件分发:验证软件包的真实来源和完整性。
电⼦交易:保证交易的安全性和可信性。
数字签名的安全性依赖于私钥的保密性。只要私钥没有泄露,数字签名就能有效地确保数据的真实性和完整性。