计算机网络——应用层 HTTPS 协议分析
概述
- HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,即安全的超文本传输协议
- HTTPS 通过在 HTTP 协议基础上加入 SSL/TLS 加密层,确保数据在客户端(如浏览器)与服务器之间传输时的机密性、完整性和身份认证。
- 同样也是基于 TCP 解封装。
- 使用端口号为
443
。
加密算法
加密算法历史(简要)
- 近代密码学的发展始于 20 世纪初电报和无线电的普及,在一战和二战期间,军事通信需求推动了密码技术的进步,如德国 Enigma 密码机和美军 纳瓦霍语密码 的应用,同时英国破译齐默尔曼电报等事件直接影响了战争走向,而 香农信息论 和 Kerckhoffs 原则 为密码学奠定了理论基础。
- 1976 年后,现代密码学迎来革命性发展,Diffie-Hellman 密钥交换和 RSA 算法 的提出开创了公钥密码学新时代,DES 和 AES 成为对称加密标准,ECC 椭圆曲线密码 以更短的密钥实现高强度安全,同时中国也贡献了 ZUC、SM4 等国际认可的密码算法。
- 进入 21 世纪,随着 MD5 等哈希函数被破解和量子计算的出现,密码学面临新的挑战,后量子密码学成为研究重点,各国加速推进密码算法自主化与标准化,密码学已从军事保密工具演变为支撑数字社会的核心技术,其发展始终与计算技术、数学理论和安全需求紧密交织,未来将继续在保障信息安全方面发挥关键作用。
对称加密算法
概述
- 对称加密算法(Symmetric Encryption)是一种加密技术,其核心特点是 加密和解密使用相同的密钥,常用的算法是
AES
、DES
。
[!tip]
这种算法速度快、效率高,适合加密大量数据,但密钥管理(如安全分发和存储)是其主要挑战。
算法运用
- 客户端用对称密钥(如 AES)加密 HTTP 请求(
明文 --> 密文
)。
- 服务器用相同密钥解密密文,处理请求后,再用该密钥加密响应。
主流对称加密算法汇总
算法 | 分组大小 / 密钥长度 | 特点 | 安全性与应用场景 |
---|---|---|---|
DES | 分组: 64 位, 密钥: 56 位 | 最早广泛使用,速度快,但密钥太短 | 不安全(易暴力破解) |
3DES (Triple DES) | 分组: 64 位, 密钥: 112/168 位 | DES 的三重加密,安全性增强 | 逐渐淘汰(效率低,仅兼容旧系统) |
AES | 分组: 128 位, 密钥: 128/192/256 位 | 现行国际标准,硬件加速支持(AES-NI),速度快 | 安全(TLS、VPN、磁盘加密) |
Blowfish | 分组: 64 位, 密钥: 32~448 位 | 密钥长度灵活,适合软件实现 | 安全但 64 位分组存在局限性 |
Twofish | 分组: 128 位, 密钥: 最大 256 位 | AES 竞赛候选算法,免费无专利 | 安全(未普及,用于 TrueCrypt 等) |
RC4 | 流加密 | 简单快速,曾用于早期 SSL/TLS | 已废弃(漏洞多,如 WEP 攻击) |
ChaCha20 | 流加密(基于 Salsa20 改进) | 抗侧信道攻击,移动端性能优于 AES | 安全(TLS 1.3、QUIC 协议) |
IDEA | 分组: 64 位, 密钥: 128 位 | 曾用于 PGP,专利限制多 | 安全但基本被 AES 取代 |
Camellia | 分组: 128 位, 密钥: 128/192/256 位 | 日本开发,性能与 AES 相当 | 安全(嵌入式设备、日本系统) |
哈希加密算法
概述
- 哈希函数是一种将任意长度的输入(消息)映射为固定长度输出(哈希值)的数学函数,具有 不可逆性、确定性和抗碰撞性等核心特性。
- 常用的哈希加密有 MD5,SHA256,CRC。
- 哈希算法又称杂凑算法、摘要算法。
算法运用
主流哈希加密算法汇总
算法 | 输出长度 | 特点 | 安全性 |
---|---|---|---|
MD5 | 128 位 (16 字节) | 速度快,曾用于文件校验、密码存储 | 已攻破(碰撞攻击易实现) |
SHA-1 | 160 位 (20 字节) | 比 MD5 更安全,曾用于 SSL、Git | 已攻破(谷歌 2017 年碰撞演示) |
SHA-256 | 256 位 (32 字节) | SHA-2 家族核心算法,比特币、TLS 标准 | 安全(当前推荐) |
SHA-512 | 512 位 (64 字节) | SHA-2 家族,适合 64 位系统 | 安全(资源消耗较高) |
SHA-3 | 224/256/384/512 位 | 基于 Keccak 的新标准,抗量子计算潜力 | 安全(未来主流) |
RIPEMD-160 | 160 位 (20 字节) | 欧洲开发,比特币地址生成辅助 | 未破解但已过时 |
BLAKE2 | 256/512 位 | 比 SHA-3 更快,被 Zcash、Argon2 采用 | 安全(现代应用首选) |
BLAKE3 | 可变(默认 256 位) | BLAKE2 升级版,速度提升 2 倍,支持并行计算 | 安全(2020 年发布) |
CRC32 | 32 位 | 用于网络校验、ZIP 文件,无密码学强度 | 仅校验(非加密哈希) |
HMAC | 依赖底层哈希(如 SHA256) | 基于密钥的哈希消息认证码,防篡改 | 安全(需配合安全哈希) |
非对称加密算法
概述
- 非对称加密(又称公钥加密)是一种使用一对密钥(公钥和私钥)进行加密和解密的算法。
- 公钥可公开分享,用于加密数据或验证签名;私钥必须保密,用于解密数据或生成签名。
- 公钥和私钥是数学安全的,已知公钥,不可能推导出私钥;已知私钥,也不可能推导出公钥。
算法运用
主流非对称加密算法汇总
算法 | 密钥长度 | 特点 | 安全性 (截至 2024) |
---|---|---|---|
RSA | 常见 2048 / 3072 / 4096 bit | 历史最悠久,应用最广(SSL、数字签名) | 安全(足够长密钥情况下),但慢 |
DSA | 1024 / 2048 / 3072 bit | 专用于数字签名,不加密数据 | 安全,但较少新项目采用 |
ElGamal | 可变 | 基于离散对数,主要用于加密和签名 | 安全,但密文长,效率低 |
ECC | 常见 256 / 384 / 521 bit | 相同安全级别密钥更短,效率高 | 安全,广泛推荐(例如 ECDSA, ECDH) |
ECDSA | 常见 256 / 384 / 521 bit | 基于椭圆曲线,用于签名 | 安全,高效 |
EdDSA | 256 bit | 现代签名算法,简单高效,抗侧信道攻击 | 安全,越来越普及 |
Diffie-Hellman | 可变 | 密钥交换协议,不直接用于加密数据 | 安全(大素数参数) |
ECDH | 常见 256 / 384 / 521 bit | 椭圆曲线密钥交换,高效安全 | 安全 |
协议分析
密钥分发
HTTPS 使用 RSA 公钥加密 AES 密码,服务器接收到加密后的 AES 密码,使用 RSA 私钥解密得到 AES 密码。
- 服务器发送公钥:服务器将自己的 RSA 公钥发送给客户端(实际通过数字证书传递,图中简化为直接发送)。
- 客户端生成会话密钥:客户端随机生成一个 AES 对称密钥(用于后续高效加密通信数据)。
- 客户端加密 AES 密钥:使用服务器的 RSA 公钥加密 AES 密钥,生成密文
{AES Key}_{pk}
,并发送给服务器。 - 服务器解密获取密钥:服务器用自己的 RSA 私钥解密
{AES Key}_{pk}
,得到原始的 AES 密钥。 - 双向确认密钥:客户端和服务器均持有相同的 AES 密钥,完成密钥协商。
- 通道加密就绪:双方约定后续所有通信数据均使用 AES 对称加密。
- 客户端发送加密请求:使用 AES 密钥加密应用数据(如 HTTP 请求),发送给服务器。
- 服务器返回加密响应:服务器用 AES 密钥解密请求,处理后再加密响应数据,返回给客户端。
- 循环通信:后续所有通信均重复上述加密/解密过程(图中以
loop
表示循环)。
HTTPS 防篡改
Chrome 预先内置了 RSA 公钥,并通过 AES 加密和哈希验证来确保数据完整性。
- Chrome 浏览器内置百度服务器的 RSA 公钥。
- Chrome 浏览器向百度服务器发起 HTTPS 请求(tieba.baidu.com)。
- 浏览器生成 AES 密码(示例:123456)。
- 使用 RSA 公钥加密 AES 密码,得到密文(示例:goosuih ihiUFgc)。
- 对 AES 密码进行 MD5 哈希,得到哈希密文(示例:ev81984vs)。
- 将加密后的密文和哈希密文一起发送给服务器。
- 服务器使用 RSA 私钥解密获取 AES 密码。
- 对解密后的 AES 密码进行 MD5 哈希,得到验证密文(示例:ev81984vs)。
- 对比收到的哈希密文和计算出的验证密文。
CA 证书颁发机构
CA 证书颁发机构相当于公证处,证实了服务器 RSA 公钥的安全性和有效性。
- 服务器生成 RSA 密钥对(包含公钥和私钥)。
- 服务器向 CA 机构提交公钥和身份验证信息(如域名所有权证明)。
CA 机构验证服务器身份真实性。
CA 机构使用 CA 自己的 RSA 私钥对服务器公钥进行 数字签名。
CA 机构颁发包含服务器公钥和 CA 签名的数字证书。
浏览器向服务器发起 HTTPS 连接请求。
服务器向浏览器返回数字证书(包含 CA 签名的服务器公钥)。
浏览器使用内置的 CA 公钥解密数字签名。
对比解密结果与证书中的服务器公钥。
验证证书的有效期、域名匹配等附加信息。
验证成功:
- 信任该服务器公钥
- 继续完成 TLS 握手流程
- 建立安全加密通道
验证失败:
- 显示 "不安全连接" 警告
- 阻止用户继续访问