乌啦呀哈呀哈乌啦!

欢迎光临,这里是喵pass的个人博客,希望有能帮到你的地方

0%

对称与非对称加密

对称加密

对称加密是指加密和解密使用同一个密钥。加密方和解密方必须共享同一个秘密密钥。

  • 建立安全通道后,用于实际的数据传输。
  • 常见的算法有 AES、DES、3DES、Blowfish、ChaCha20。

优点:

  • 速度快,适合加密大量 HTTP 请求和响应内容。
  • 算法实现简单。

缺点:

  • 密钥分发困难:如何安全地把密钥传给对方。
  • 一旦密钥泄露,所有通信都被破解。

非对称加密

非对称加密使用一对密钥:公钥和私钥。公钥公开给所有人,私钥保存在自己手里,主要用于“身份验证”和“密钥交换”。
用公钥加密的数据只能用对应的私钥解密。用私钥签名的数据可以用对应的公钥验证。

  • 服务器把自己的公钥包含在证书中公开给客户端
  • 客户端用服务器公钥加密一个随机对称密钥
  • 服务器用自己的私钥解密,得到同一个对称密钥
  • 这一阶段常见的协议是 TLS 中的 RSA、ECC(椭圆曲线加密)、DH、ECDH 等

优点:

  • 解决了密钥分发问题,公钥可以公开发布。
  • 支持数字签名,保证身份与完整性。

缺点:

  • 计算速度比对称加密慢很多。
  • 只适合加密短数据或用于密钥交换。

HTTPS

HTTPS 是 HTTP 的安全版本,它在 HTTP 之上加了一层加密协议,常用的是 TLS(以前叫 SSL)。
HTTPS = HTTP + TLS -> 浏览器访问 https:// 时,实际上是在用 SSL/TLS 加密 HTTP 请求和响应。

服务器把它的公钥公开给客户端,通常通过证书发送给浏览器。
客户端用服务器的公钥来加密会话密钥或验证服务器签名。
服务器用自己的私钥来解密或签名。

HTTPS 常见场景:

  1. 客户端发起请求:浏览器访问 https://example.com
    • 服务器有一对长期密钥:公钥 + 私钥
  2. 客户端和服务器协商使用哪种加密算法,在 TLS 握手里,客户端和服务器协商的是一个“套件”,叫做 cipher suite,它通常包括几种算法:
    • Key Exchange(密钥交换算法),例如 RSA, ECDHE, DHE
    • Authentication(身份验证算法),通常是证书签名所用的算法,如 RSA, ECDSA
    • Bulk Encryption(对称加密算法),如 AES, ChaCha20
    • MAC/Hash(消息认证/哈希算法),如 SHA256, SHA384
  3. 服务器提供证书(里面有公钥):服务器发送自己的数字证书给浏览器
  4. 客户端验证证书:确认服务器身份可信
  5. 建立对称加密的会话密钥:浏览器使用服务器公钥加密一个随机对称密钥
    • 客户端生成一个临时的对称会话密钥 K
    • 客户端使用服务器的公钥保护这个会话密钥
  6. 用这个会话密钥加密后续数据:服务器解密出对称密钥,后续通信用对称加密进行
    • 服务器用自己的私钥解密,得到 K

TLS 和 RSA

TLS 是一个安全协议,用来保护网络通信。
RSA 是一种加密算法,可以用于密钥交换、加密和数字签名。

在 TLS 握手阶段,可以用 RSA 实现以下功能

  • 证书签名:服务器证书里常常包含 RSA 公钥,CA 会对证书签名。浏览器验证证书时,实际上是验证这个 RSA 公钥。
  • 身份验证:服务器用它对应的 RSA 私钥对握手数据签名,证明它是证书里的那台服务器。
  • 密钥交换:早期 TLS 版本里,客户端可以用服务器的 RSA 公钥加密一个随机的“预主密钥”,服务器用私钥解密,然后再生成对称会话密钥。

RSA 可以是密钥交换算法,也可以是身份验证算法

  • 证书中公钥算法
  • 客户端加密“会话密钥”给服务器
  • 服务器用私钥解密
    如果服务器证书使用 RSA,浏览器验证 CA 签名后,就信任该 RSA 公钥

密钥交换协议

现在大多数 TLS 连接不会直接用服务器公钥加密会话密钥,而是用“密钥交换协议”:

  • 例如 ECDHE / DHE
  • 客户端和服务器各自生成一个临时的公私钥对
  • 通过交换各自的临时公钥,计算出共同的会话密钥 K
  • 这些临时密钥不是长期身份密钥,连接结束就废弃

所以:

  • 服务器仍然有长期身份密钥对
  • 客户端通常不需要长期身份密钥对
  • 客户端确实会使用临时密钥材料来协商 K

CA 和证书

证书:绑定公钥与身份,并由 CA 签名证明其可信
CA:受信任第三方,负责签发与验证证书,保证客户端不会误信伪造服务器

证书是一个文件,它相当于“公钥的身份证明”,包含:

  • 持有者身份(如域名 example.com)
  • 持有者公钥
  • 证书颁发机构(CA)签名
  • 有效期、用途等信息

CA(证书颁发机构)是一个受信任的第三方机构:

  • 它负责验证申请者身份、签发证书
  • 浏览器和操作系统预装了大量受信任 CA 根证书

当浏览器收到服务器证书时,它会:

  1. 检查证书是否由受信任 CA 签发
  2. 检查证书是否针对当前域名
  3. 检查证书是否在有效期内
  4. 检查证书是否被撤销
    如果验证通过,浏览器就信任该服务器公钥是真的属于这个服务器
    这样客户端就能安全地用该公钥加密会话密钥,避免被中间人伪造

服务器证书通常不是直接由根 CA 签发,而是由中间 CA 签发
浏览器通过证书链一路验证到根 CA,只有链条完整、签名有效,才被认定为可信服务器