首页/网络/协议速查/对称加密:一把密钥加解密

对称加密:一把密钥加解密

发送方与接收方共享同一密钥:速度快、适合大数据量;难点在密钥分发与管理,TLS 用非对称握手来解决这个问题。

协议速查网络更新于 2026-10-13

对称加密是什么

对称加密用同一把密钥(或彼此可推导的密钥)完成加密与解密:速度快、适合大数据量,是真正保护数据流的算法。它的短板在密钥分发——怎么把密钥安全地给到对端;TLS 的做法是用非对称密钥交换协商出一把会话密钥,再交给对称算法加密记录层数据。代表算法是 AES 与 ChaCha20,DES/3DES 已淘汰。

基本信息

代表算法AES-128/256、ChaCha20-Poly1305
常见模式GCM/CCM 属 AEAD,加密与认证一步完成;CBC 需另配 HMAC
密钥长度128 位或 256 位(AES);ChaCha20 为 256 位
性能有 AES-NI 时可达数 GB/s
核心难题密钥的分发、存储与轮换

典型使用场景

  • TLS 记录层数据加密:握手用非对称,数据用对称
  • 磁盘与文件加密:LUKS、BitLocker、VeraCrypt
  • 备份与归档加密:上传前在客户端加密,云端只存密文
  • 数据库敏感字段加密:手机号、身份证号等落地加密
  • 隧道与 VPN 载荷加密:IPsec ESP、WireGuard

openssl 加解密演示

openssl 加解密演示
# 生成 32 字节随机密钥并收紧权限
openssl rand -out key.bin 32 && chmod 600 key.bin
# 用 AES-256-GCM 加密(GCM 必须显式给出 IV)
openssl enc -aes-256-gcm -K "$(xxd -p -c 64 key.bin)" -iv "$(openssl rand -hex 12)" -in plain.txt -out cipher.bin
# 解密时 IV 必须与加密时一致,需与密文一起保存
openssl enc -d -aes-256-gcm -K "$(xxd -p -c 64 key.bin)" -iv "$IV" -in cipher.bin -out plain.txt
# 生产建议:直接调用 libsodium / ring / 语言的 AEAD 接口,不要自行拼接

分组模式选择

模式特性建议
GCMAEAD,加密与认证一体,AES-NI 下极快默认首选
CCMAEAD,适合功耗受限设备IoT 与嵌入式
CBC只加密不认证,需另配 HMAC仅兼容旧系统
CTR流模式,无认证,nonce 复用即失效仅作组件使用
ECB相同明文块产生相同密文,泄露结构任何场景都不应使用
AEAD 的 nonce 在同一密钥下绝不能重复:GCM 重复 nonce 会让攻击者恢复认证密钥。随机 nonce 要评估碰撞概率,高吞吐场景更稳妥的做法是用计数器管理。
只加密不给完整性,等于把数据暴露在位翻转攻击下:CBC/CTR 裸用会遭受 padding oracle 类攻击,正确姿势是 AEAD 或先加密再对所有密文做 MAC。

易错点

  • 把密钥硬编码进代码或配置并提交到仓库,等于把数据公开:应使用 KMS、环境变量或权限 600 的密钥文件
  • ECB 模式会泄露明文结构(经典例子是加密后的企鹅图仍能看出轮廓),任何场景都不应使用
  • 只用一把永久密钥且从不轮换:一旦泄露影响全部历史数据,需按批次轮换并支持多密钥解密
  • 忽略 IV/nonce 管理:解密方拿不到 IV 就无法还原,而重复使用 IV 又会直接破坏 GCM 的安全性

数据来源与参考

  • NIST SP 800-38 系列(分组模式)
  • RFC 8446 §5

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌