文章目录
- 简介
- 加密原理
- 对称加密
- 常用的对称加密算法:
- 简单解析DES
- 非对称加密
- 常用的非对称加密算法:
- 简单解析RSA算法
- 公钥和私钥的制作:
- 加密和解密过程:
- 加密过程
- 数字证书
- 摘要算法
- 解析一下MD5算法
简介
HTTPS 使用了 SSL (Secure Sockets Layer) 和 TLS (Transport Layer Security) 这两种协议来实现安全通信。TLS 是 SSL 的后续版本,两者在基本原理上相似。
加密原理
TLS 和 SSL 使用了两种主要的加密机制:对称加密和非对称加密(混合加密),同时也使用了摘要算法和数字证书来保证数据的完整性和身份认证。
对称加密
对称加密又称单密钥加密,整个加密过程中只使用一个密钥。所谓对称其实就是使用一把密钥加密,并使用同一把密钥进行解密。
常用的对称加密算法:
DES、3DES、AES、TDEA、Blowfish、RC2、RC4 和 RC5
简单解析DES
DES算法的基本思想是通过多次迭代运算和置换,将输入的64位明文数据加密成64位的密文数据。
DES算法的加密过程可以分为以下步骤:
密钥的生成:从用户提供的密钥中,通过一系列置换和替换操作生成16个48位的子密钥,用于后续的加密操作。
初始置换(IP):将64位的明文数据进行初始置换,得到L0和R0两个32位的数据块。
16次迭代运算:将L0和R0交替作为输入,进行16次迭代运算,每次迭代都包括以下步骤:
1)将Ri-1进行扩展置换,扩展为48位的数据块。
2)将扩展后的48位数据块与子密钥Ki进行异或运算,得到一个48位的中间结果。
3)将异或后的中间结果分为8个6位的数据块,通过8个S盒进行代替置换,得到一个32位的中间结果。
4)将32位的中间结果进行置换,得到一个32位的数据块。
5)将Li-1与上一步的Ri-1相加(模2加),得到Ri。
6)将Ri-1与上一步的Li-1相加(模2加),得到Li。
逆置换(IP-1):将最后一次迭代运算得到的L16和R16合并,进行逆置换,得到最终的64位密文数据。
DES算法的解密过程与加密过程基本相同,只是使用的子密钥是加密过程中生成的子密钥的逆序。因此,DES算法是一种可逆加密算法。但由于DES算法的密钥长度较短,易受到暴力破解攻击
非对称加密
在加密过程中,使用密钥对(分别是私钥和公钥。公钥可以对外发布,人人可见。而私钥则自己保管,不外泄)中的一个密钥进行加密,另一个密钥进行解密。比如用公钥加密,那么用私钥解密;用私钥加密,就用公钥来解密。
常用的非对称加密算法:
RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等
问题:为什么私钥可以解密被公钥加密的数据?
答:欧拉函数、欧拉定理、互为质数。
简单解析RSA算法
RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:
公钥和私钥的制作:
加密和解密过程:
加密过程
TLS 和 SSL 的加密过程可以分为三个阶段:握手阶段、密钥交换阶段和数据传输阶段。
(1)握手阶段
选择加密算法、服务器给客户端传递公钥、客户端给服务器传递对称加密的密钥
1、客户端向服务器发送一个连接请求,请求中包含了客户端支持的加密算法和其他信息。
2、服务器会回复一个消息,其中包含了服务器的证书和公钥,以及服务器支持的加密算法和其他信息。
3、客户端使用服务器的公钥来验证证书的有效性,并选择一个加密算法,生成一个随机数作为对称加密密 钥,并使用服务器的公钥来加密这个密钥并发送给服务器。
(2)密钥交换阶段
服务器获取到对称加密的密钥
在密钥交换阶段,服务器使用私钥来解密客户端发送的密钥,并使用该密钥来生成会话密钥,即对称加密密钥。服务器和客户端都持有该对称加密密钥,并用它来加密和解密后续的通信数据。
(3)数据传输阶段
在数据传输阶段,服务器和客户端使用对称加密密钥来加密和解密通信数据。通信数据使用摘要算法计算摘要值,以保证数据的完整性。
数字证书
数字证书是一种由权威机构颁发的电子文档,用于证明证书中公钥对应的私钥是属于服务器的。在 TLS 的加密过程中,客户端需要验证服务器的身份,这就需要使用数字证书。
服务器会将自己的数字证书发送给客户端,客户端会使用内置的证书信任列表来验证证书的有效性,如果验证通过,则可以安全地建立连接。
摘要算法
摘要算法是一种用于保证数据完整性的算法。在 TLS 的加密过程中,数字证书的验证以及数据传输的完整性都需要使用摘要算法。常用的摘要算法包括 MD5、SHA-1、SHA-256 等,其中 SHA-256 是最常用的。
摘要算法会将输入的数据转换为一个唯一的固定长度的值,这个值通常称为摘要或哈希值。摘要值可以用于检测数据是否被篡改过。在 TLS 的加密过程中,服务器会将摘要值发送给客户端,客户端会使用同样的摘要算法来计算接收到的数据的摘要值,并将其与服务器发送的摘要值进行比较,从而确定数据是否被篡改过。
解析一下MD5算法
MD5 是一种单向哈希函数,它将任意长度的输入数据转换成一个固定长度的输出(通常是 128 位),该输出值称为哈希值或摘要值。MD5 的主要作用是用于验证数据的完整性,因为只要数据稍微有一点改动,其生成的摘要值就会完全不同。
MD5 的加密过程可以简述为以下几步:
1、初始化
MD5 算法在开始之前需要进行初始化。初始化过程中,算法会预处理一些常量和初始向量,以及初始化哈希缓存区。
2、数据填充
在填充数据之前,需要将原始数据进行一些处理。MD5 算法会将输入数据按照 512 位进行分组,并在每个分组末尾填充一些位,以确保每个分组的长度都是 512 位。
3、数据处理
在数据填充之后,MD5 算法会对每个分组进行处理。处理过程中,算法会使用一些基本的位运算、逻辑运算、算术运算和置换运算,对每个分组进行迭代处理。处理过程中,算法会使用一个 128 位的缓存区来保存中间结果,最终得到一个 128 位的哈希值。
4、输出
处理完成后,MD5 算法会将生成的哈希值输出。
MD5 算法已经被证明不够安全,因为它容易被碰撞攻击。因此,现在已经有更安全的哈希算法可以代替 MD5,例如 SHA-256 和 SHA-3 等。
- 碰撞攻击:碰撞攻击是指在MD5算法中构造出两个不同的输入明文,但它们的哈希值相同的情况。这意味着攻击者可以通过构造这样的输入明文,使其经过MD5算法后得到和正常明文相同的哈希值,从而欺骗系统进行身份验证等操作。
- 彩虹表攻击:彩虹表攻击是一种基于预先计算哈希值的攻击方式。攻击者事先计算出一张包含大量明文和哈希值对应关系的表,这个表称为彩虹表。然后攻击者在实际攻击中,只需要对被攻击的哈希值进行查询即可快速找到对应的明文。这种攻击方式虽然需要大量的计算资源和时间来预先构建彩虹表,但在实际攻击中却能够迅速破解MD5加密的密码等敏感信息。