【ZeroRange WebRTC】WebRTC 加密安全总览:对称/非对称、数字签名、证书、SHA/HMAC、随机数
WebRTC 加密安全总览:对称/非对称、数字签名、证书、SHA/HMAC、随机数
本文从工程实战视角,系统总结这些密码学组件在 WebRTC 中的职责与协同:
- 对称加密(AES-GCM/ChaCha20-Poly1305)
- 非对称(RSA/ECDSA/Ed25519、ECDH/ECDHE)
- 数字签名(RSA-PSS/ECDSA/Ed25519)
- X.509 证书与指纹(a=fingerprint)
- 哈希(SHA-256/512/3)与 HMAC(TURN 临时凭证等)
- 安全随机数与熵源(密钥与 nonce)
并明确它们在“信令、握手、媒体、数据通道、穿透中继”各阶段的应用与最佳实践。
总体图:原语 → 构造 → 协议 → 应用
阶段映射:WebRTC 的“从协商到传输”
- 信令(WSS/HTTPS):
- 用短期令牌(JWT/STS/OIDC)做房间授权与身份(对称或非对称签名的令牌);确保信令加密与鉴权,防篡改与越权。
- 传递 SDP(含 a=fingerprint、ICE 参数、候选),为后续握手钉扎证书指纹。
- 握手(DTLS):
- 证书(X.509,自签或 CA) + 数字签名:认证身份,公开可验证。
- ECDHE 密钥协商:非对称构造共享秘密,随后派生对称会话密钥。
- 媒体(SRTP/SRTCP):
- 对称 AEAD:首选 AES-GCM 或 ChaCha20-Poly1305,提供保密与完整性。
- 控制反馈(RTCP):NACK/PLI/TWCC 等在加密/鉴别保护下传递。
- 数据通道(SCTP over DTLS):
- 握手层非对称(证书签名 + ECDHE);数据面对称(AEAD),支持可靠/不可靠、有序/无序。
- 中继与穿透(TURN):
- 企业网络下回退 TURN TLS/443;服务器证书与 SNI;媒体仍为 SRTP(对称)。
- TURN 临时凭证:用 HMAC 生成短期用户名/口令,避免静态凭证滥用(对称认证)。
关键组件与最佳实践
- 对称加密(数据面):
- 算法:AES-GCM(有硬件加速时优先)、ChaCha20-Poly1305(移动端或无硬件加速)。
- 注意:nonce 唯一(GCM 重复 nonce 为灾难性);使用 AAD 认证协议头部。
- 非对称(握手与签名):
- 算法:RSA-PSS(签名)、ECDSA(P-256)、Ed25519;密钥协商用 ECDH/ECDHE。
- 注意:避免 RSA v1.5;ECDSA 的随机数 k 不可泄露,建议 RFC 6979;按平台支持选择曲线/算法。
- 数字签名(不可否认):
- 职责:认证“谁发的”、保证完整性、不可否认;在 TLS/DTLS 握手验证中使用。
- 与 HMAC 区别:HMAC 为对称认证,不具公开可验证,不适合法律场景。
- X.509 证书与指纹:
- 字段:SAN(域名/IP)、KU/EKU(serverAuth)、有效期、撤销(OCSP/CRL)、链完整。
- 指纹:SDP 的 a=fingerprint(证书哈希)用于握手前钉扎,必须通过安全信令传递。
- 哈希与 HMAC:
- 哈希:SHA-256/512/3;用于指纹、摘要、完整性检测(不含认证)。
- HMAC:HMAC-SHA256;用于 TURN 临时凭证、API 请求签名,提供完整性与对称认证。
- 安全随机数与熵源:
- 来源:操作系统 CSPRNG(/dev/urandom、crypto.getRandomValues);禁止 Math.random。
- 用途:密钥、nonce、挑战值;确保不可预测与唯一性。
时序示意:从指纹到 SRTP
常见威胁与防护
- 指纹替换(MITM):信令不安全导致 SDP 的 a=fingerprint 被替换。
- 防护:强制 WSS/HTTPS + 鉴权;后端按房间/设备白名单校验指纹;证书轮转前下发新指纹。
- 非对称旧模式与弱套件:RSA v1.5、MD5/SHA-1、RC4。
- 防护:签名用 RSA-PSS/ECDSA/Ed25519;强制 TLS ≥ 1.2;优先 AEAD(AES-GCM/ChaCha20-Poly1305)。
- GCM/ChaCha20 nonce 重复:导致密钥材料泄露或可被恢复。
- 防护:严格的计数器或随机策略保证唯一;建立监控与审计。
- HMAC 不可否认:共享密钥场景无法公开证明具体发送者。
- 防护:在需要公开可验证的场景使用数字签名;HMAC 用于双方鉴别与临时凭证。
最小配置与清单
- 信令:WSS/HTTPS + 短期令牌(JWT/STS/OIDC);房间最小权限(join/publish/subscribe)。
- 握手:DTLS 证书 + 指纹钉扎;ECDHE;日志与失败报警。
- 媒体:SRTP AES-GCM(或 AES-CTR+HMAC);TWCC 拥塞控制;NACK/PLI/RTX/FEC/RED。
- 中继:TURN TLS/443;HMAC 临时凭证(10–30 分钟有效);证书与 SNI 配置正确。
- 随机:系统 CSPRNG;密钥/nonce 唯一与不可预测;定期轮转与审计。
参考与延伸
- IETF/NIST:AES-GCM、ChaCha20-Poly1305、HMAC、SHA-2/3、RSA-PSS、ECDSA/Ed25519、X.509、DTLS-SRTP。
- 工具与库:OpenSSL、libsodium、Node.js crypto、WebCrypto;TURN(coturn),Mermaid(示意图)。
- 实践指南:OWASP ASVS/TLS 最佳实践;KMS/ACM/ACME 证书与密钥管理。
总结:WebRTC 的安全骨架是“非对称握手 + 证书与签名 + 指纹 Pinning”,建立信任与共享秘密;数据面由“对称 AEAD”高效保护媒体与数据通道;哈希与 HMAC负责指纹与临时凭证;随机数提供不可预测性与唯一性。遵循这些原则并落实到信令、握手、媒体、穿透与运维的每一步,才能在复杂网络中实现稳定、低延迟、可审计的实时传输。
