计算机网络:对称加密和非对称加密有什么区别?

#计算机网络#操作系统#面试八股

计算机网络:对称加密和非对称加密有什么区别?

结论:对称加密的加解密用同一把密钥,速度快,适合大数据量;非对称加密用公钥/私钥一对,速度慢, 但解决了"密钥怎么安全送到对方手里"和"如何证明身份"两个问题。 HTTPS 的实践是混合加密:用非对称(更准确说是 ECDHE 密钥交换)协商出对称密钥,再用对称密钥加密业务数据。

1. 对比

维度对称加密非对称加密
密钥一把,双方共享一对:公钥公开,私钥自持
速度快,AES-NI 可达 GB/s 级慢,RSA 私钥运算毫秒级
密钥分发难,必须走安全信道公钥可公开分发
主要用途批量数据加密密钥协商、数字签名、证书
典型算法AES-GCM、ChaCha20-Poly1305、SM4RSA-OAEP、ECDHE、Ed25519、SM2
密钥长度128 / 256 位RSA 2048 / 3072 位,ECC 256 位
能否签名不能,MAC 只证明持有密钥能,私钥签名、公钥验签

"密钥短所以不安全"是常见误解:AES-128 的安全强度大致相当于 RSA-3072,两者衡量的对象不同。

2. 混合加密怎么配合

客户端                                     服务端
  |  1. 生成临时密钥对 (ecdh_priv_c, ecdh_pub_c)
  |-- ClientHello + ecdh_pub_c -------------->|
  |                                           |  2. 生成临时密钥对 (ecdh_priv_s, ecdh_pub_s)
  |<-- ServerHello + ecdh_pub_s + 证书 --------|
  |  3. shared = ECDH(priv, peer_pub),双方算出同一个值
  |  4. k = HKDF(shared, 双方随机数)
  |<====== 之后用 k 做 AES-GCM / ChaCha20 =====>|

为什么不让非对称直接加密全部数据?一是慢一个数量级以上;二是 RSA 能加密的明文长度受模长限制, 2048 位密钥配上 OAEP-SHA256 填充,一次大约只能装 190 字节,一个页面根本塞不下。

3. 用 openssl 亲手做一遍

# 生成 RSA 密钥对与自签证书(演示用,生产应交由 CA 签发)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out rsa.key
openssl req -new -x509 -key rsa.key -days 365 -subj "/CN=demo.local" -out rsa.crt
openssl pkey -in rsa.key -pubout -out rsa.pub

# 对称加密:口令派生密钥,加盐并迭代,避免弱口令被暴力破解
openssl enc -aes-256-cbc -pbkdf2 -iter 200000 -salt \
  -in plain.txt -out plain.enc -pass pass:demo-secret
openssl enc -d -aes-256-cbc -pbkdf2 -iter 200000 \
  -in plain.enc -out plain.out -pass pass:demo-secret

# 数字签名:私钥签名,公钥验签,验的是"内容没改 + 确实是我签的"
openssl dgst -sha256 -sign rsa.key -out msg.sig msg.txt
openssl dgst -sha256 -verify rsa.pub -signature msg.sig msg.txt

注意 openssl enc 不支持 GCM 这类 AEAD 模式,会直接报错;生产中应使用 EVP 接口或语言标准库里的 AES-GCM。 CBC 还要求 IV 随机且不可复用,否则相同明文前缀会暴露成相同密文前缀。

4. 常见追问

Q:非对称为什么慢? RSA 是模幂运算、ECC 是标量乘法,都是大数运算,指令级并行和硬件加速远不如 AES 的查表与流水线; 而且每次只能处理一小块数据。同一台机器上 AES-GCM 吞吐可达 GB/s,RSA-2048 私钥运算每秒只有几千次。

Q:RSA 密钥交换和 ECDHE 有什么区别? RSA 密钥交换里,会话密钥由客户端用服务端证书的公钥加密后发出,一旦私钥泄露,历史流量可被解密。 ECDHE 双方各出临时密钥,用完即弃,私钥泄露也解不开旧流量,所以现代 TLS 一律优先 ECDHE。

Q:数字签名和加密是一回事吗? 不是。加密解决"别人看不到",签名解决"别人改不了、赖不掉"。 签名是对摘要做私钥运算,验签是用公钥还原摘要再比对;公钥本就公开,所以签名不提供保密性。

Q:为什么不能用 ECB 模式? ECB 对每个 16 字节块独立加密,相同明文块产生相同密文块,会暴露图片轮廓、重复字段等结构信息。 工程上直接用 AEAD(GCM / ChaCha20-Poly1305),一次搞定加密与完整性。

Q:海量文件怎么管理密钥? 信封加密(envelope encryption):为每个对象生成数据密钥(DEK),用 DEK 加密文件, 再用 KMS 里的主密钥(KEK)加密 DEK 并随文件保存。轮换主密钥只需重加密 DEK,不必重加密全部数据。

小结

对称加密赢在速度,非对称加密赢在"不必先共享秘密"。 协议设计里两者不是二选一,而是分工:非对称负责协商与身份,对称负责搬运数据。 判断一道题答得好不好,就看有没有说清"为什么需要两把钥匙,为什么最后又回到一把钥匙"。

笔记加载中…