当前位置: 首页 > news >正文

【ZeroRange WebRTC】对称加密 vs 非对称加密(从原理到实践)

对称加密 vs 非对称加密(从原理到实践,图文并貌)

本文系统讲解对称加密与非对称加密的原理、差异与协同用法,覆盖常见算法(AES-GCM、ChaCha20-Poly1305、RSA-OAEP/RSA-PSS、ECDSA/Ed25519、ECDH/ECDHE)、随机数与密钥管理、协议与工程落地(TLS/DTLS、信封加密)。


概览:两类加密的核心区别

  • 对称加密(Symmetric):同一把“密钥”加密与解密;速度快、适合大数据;密钥分发是难点。
  • 非对称加密(Asymmetric):使用“公钥/私钥”对;公钥加密或验签,私钥解密或签名;适合密钥协商与身份认证。
非对称加密
加密/验签
公钥
私钥
解密/签名
明文/哈希
密文/签名
明文/验证结果
对称加密
加密
同一密钥
明文
密文
解密
明文

对称加密详解(AES/ChaCha20)

  • 模式与安全性:
    • AES-CBC:需随机 IV;不含完整性,容易受填充攻击;不推荐单独使用。
    • AES-CTR:流模式,需唯一 nonce;不含完整性;慎用。
    • AES-GCM(AEAD):同时提供保密与完整性(加密+鉴别),需唯一 nonce;现代首选。
    • ChaCha20-Poly1305(AEAD):移动端或无 AES 硬件加速时优先。
  • 随机数与nonce/IV:
    • GCM/ChaCha20 需保证 nonce 唯一;重复会破坏安全性(GCM 会泄露密钥相关信息)。
  • 认证数据(AAD):
    • 可对“协议头部”等不加密但需鉴别的数据进行认证,提升整体完整性。

示例(Node.js AES-GCM):

import crypto from 'crypto';
function aesGcmEncrypt(key, plaintext, aad) {const iv = crypto.randomBytes(12); // 96-bit nonceconst cipher = crypto.createCipheriv('aes-256-gcm', key, iv);if (aad) cipher.setAAD(aad);const enc = Buffer.concat([cipher.update(plaintext), cipher.final()]);const tag = cipher.getAuthTag();return { iv, enc, tag };
}
function aesGcmDecrypt(key, {iv, enc, tag}, aad) {const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);if (aad) decipher.setAAD(aad);decipher.setAuthTag(tag);return Buffer.concat([decipher.update(enc), decipher.final()]);
}

非对称加密详解(RSA/ECC/Ed25519)

  • 功能划分:
    • 加密/密钥协商:RSA-OAEP(加密)、ECDH/ECDHE(协商共享秘密)。
    • 签名/验证:RSA-PSS、ECDSA(P-256/SECP256R1)、Ed25519(EdDSA)。
  • 安全建议:
    • RSA 使用 OAEP(加密)与 PSS(签名);避免 PKCS#1 v1.5 的旧模式。
    • ECDSA 需确保随机数 k 不泄露,建议 RFC 6979(确定性签名);Ed25519 简洁高效,平台支持需确认。
  • 密钥长度与曲线:
    • RSA ≥ 2048(建议 3072);ECC 常用 P-256;Ed25519 固定参数。

OpenSSL 示例(RSA-OAEP & RSA-PSS):

# 生成 RSA 私钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out rsa.key
# 派生公钥
openssl pkey -in rsa.key -pubout -out rsa.pub
# OAEP 加密/解密(示意)
# 加密
openssl pkeyutl -encrypt -inkey rsa.pub -pubin -in msg.bin -out msg.enc -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
# 解密
openssl pkeyutl -decrypt -inkey rsa.key -in msg.enc -out msg.dec -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
# PSS 签名/验证
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign rsa.key -out msg.sig msg.bin
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -verify rsa.pub -signature msg.sig msg.bin

两者如何协同:混合加密与握手协议

  • 混合加密(Envelope Encryption):
    • 用随机生成的“会话密钥”进行对称加密(快速处理大数据)。
    • 用接收方的“公钥”非对称加密会话密钥(解决密钥分发)。
  • TLS/DTLS(握手 + 数据):
    • 握手:使用 ECDHE 协商共享秘密、用证书(RSA/ECDSA/Ed25519)签名认证身份。
    • 数据:派生对称密钥,用 AEAD(如 AES-GCM/ChaCha20-Poly1305)加密与鉴别应用数据。
ClientServerClientHello (支持套件, 随机数)ServerHello + Certificate (公钥+签名)ServerKeyExchange (ECDHE)ClientKeyExchange (ECDHE)Finished (MAC/验证)Finished派生对称密钥 → AEAD 加密应用数据ClientServer

场景选型与对照

  • 大文件/高吞吐数据:对称加密(AES-GCM/ChaCha20-Poly1305)。
  • 公开验证的身份与不可否认:数字签名(RSA-PSS/ECDSA/Ed25519)。
  • 密钥分发与协商:非对称加密或 ECDH/ECDHE;随后用对称加密保护数据。
  • WebRTC/媒体传输:
    • 握手:DTLS(证书签名 + 指纹钉扎)→ 派生 SRTP 密钥。
    • 数据:SRTP(AES-GCM 或 AES-CTR + HMAC),提供保密与完整性。

在 WebRTC 中的应用(细化)

握手层:非对称 + 证书指纹钉扎

  • DTLS 握手使用证书(自签或 CA 证书)进行身份认证,使用 ECDHE 协商共享秘密(非对称)。
  • 双方在 SDP 中交换 a=fingerprint(证书哈希),在握手前“钉扎”对端证书,防止中间人替换。
  • 握手完成后派生出对称会话密钥,用于数据面加密(SRTP/SRTCP)。
Peer APeer B信令(WSS)Offer (含 a=fingerprint)转发 OfferAnswer (含 a=fingerprint)转发 Answer指纹钉扎后进行 DTLS 握手(证书+签名,ECDHE 协商)DTLS 完成,派生对称 SRTP 密钥媒体进入 SRTP 加密传输Peer APeer B信令(WSS)

媒体层:对称 AEAD 加密与完整性

  • SRTP 加密:
    • 首选 AES-GCM(AEAD):同时提供保密与完整性;严格保证 nonce 唯一。
    • 兼容模式 AES-CTR + HMAC:保密(CTR)+ 完整性(HMAC);注意密钥与计数管理。
  • SRTCP 控制:统计、NACK/PLI/TWCC 等反馈在加密/鉴别保护下传递。

数据通道:SCTP over DTLS(对称保护)

  • 数据通道通过 DTLS 会话承载 SCTP:
    • 握手层非对称(证书签名与 ECDHE);数据面对称(AEAD)。
    • 支持可靠/不可靠、有序/无序;用于云台控制、信令辅助与业务数据。

TURN 与网络穿透:TLS/443 与 HMAC 临时凭证

  • 企业网络常封 UDP,WebRTC 回退至 TURN TLS/443
    • 与 TURN 的 TLS 建链使用证书与 SNI(非对称握手),媒体仍是 SRTP(对称)。
  • TURN 凭证:使用 HMAC 生成短期用户名/口令(对称认证),避免静态凭证滥用。

选型与性能权衡

  • 握手层非对称(ECDHE+签名)成本较高,仅用于短期协商;数据面对称(AEAD)高效保护大流量媒体。
  • 非对称适合身份与密钥分发;对称适合持续加密与完整性保护;两者协同是现代实时传输的常态。

常见问题与建议

  • 指纹被替换(MITM):信令必须 WSS/HTTPS 且鉴权;后端按房间/设备白名单校验指纹。
  • GCM/ChaCha20 nonce 重复:务必通过计数器或随机策略保证唯一性,避免灾难性泄露。
  • RSA v1.5 与 CBC 无 MAC:避免旧模式;优先使用 RSA-PSS 与 AEAD(AES-GCM/ChaCha20-Poly1305)。
  • 证书轮转:提前下发新指纹并灰度切换;保持日志与审计以支撑事后追溯。

常见陷阱与最佳实践

  • 对称加密:
    • 切勿重复使用 GCM/ChaCha20 nonce;避免 CBC 无 MAC;用 AEAD(AES-GCM/ChaCha20-Poly1305)。
  • 非对称加密:
    • 避免 RSA v1.5;签名用 PSS;确保 ECDSA 随机数安全(或 RFC 6979)。
  • 随机数与熵源:
    • 使用系统 CSPRNG(crypto.getRandomValues、/dev/urandom);禁止 Math.random 生成密钥或 nonce。
  • 密钥管理:
    • KMS/HSM/Secrets Manager 管理密钥;定期轮转与吊销;限制权限与审计。
  • 证书与指纹:
    • SAN/EKU 配置正确;证书自动续期与撤销;指纹(SHA-256)在应用层钉扎与校验。

速查表(简版)

  • 对称:
    • 代表算法:AES-GCM、ChaCha20-Poly1305
    • 优点:快、适合大数据;缺点:密钥分发困难
  • 非对称:
    • 代表算法:RSA-OAEP/RSA-PSS、ECDSA、Ed25519、ECDH/ECDHE
    • 优点:公开验证/密钥协商;缺点:慢、适合小数据或握手
  • 协同:
    • 握手用非对称,数据用对称;必要时信封加密

参考与延伸阅读

  • IETF/NIST:AES-GCM、ChaCha20-Poly1305、RSA-PSS、ECDSA/Ed25519、ECDH/ECDHE
  • 工具与库:OpenSSL、BoringSSL、libsodium、Node.js crypto、WebCrypto
  • 实践指南:OWASP ASVS、TLS 配置最佳实践、PKI 证书管理

总结:对称加密解决“高效保密”,非对称加密解决“身份与密钥分发”。现代系统将两者协同:用非对称握手与签名建立信任与共享秘密,再以 AEAD 的对称加密保护数据面,从而在性能与安全上取得平衡。

http://www.dtcms.com/a/594462.html

相关文章:

  • 网站建设逻辑长沙网络营销群
  • 你们交学费做网站局机关门户网站建设自查报告范文
  • 腾讯企点网页版山东网站排名优化公司
  • 网站地图有什么作用陕西seo顾问服务
  • openai 的 codex
  • 国内网如何看国外网站南阳河南网站建设价格
  • 电脑有连接网络,但浏览器网页无法打开
  • 专门做招商的网站东台网站建设
  • 网站便民服务平台怎么做wordpress优化cookie
  • 从BI深耕到AI洞察的渐进式增长实践
  • 建设银行网站转账计算机网站开发书籍
  • 茶叶公司网站源码jsp网站开发的使用表格
  • 重庆在建项目查询windows优化大师值得买吗
  • 做别人一样的网站模板网站开发的评论界面怎么写
  • 备案 网站名称 重复宾馆网站模板
  • 音乐网站怎么建设icp
  • 从局部性原理到一致性模型:深入剖析缓存设计的核心权衡
  • 自己动手写深度学习框架(数值法计算梯度)
  • Linux上的curl和telnet
  • 网络科技有限公司网站建设wordpress手机分享插件
  • 河北建设厅注册中心网站首页百科类网站建设
  • 医院网站建设公司价格外贸网站增加外链方法
  • 网站认证是什么意思萝岗哪家网站建设好
  • 感悟生命:《藏在罐子里的爱》
  • Raylib 事件
  • mvc做网站前台代码景德镇做网站
  • 做纱线的网站个人建网站步骤
  • 六爻观测基础(二)——五行
  • 天山网站企业信息系统案例
  • 在vue3中实现无限向上滚动效果插件