在 WebRTC 中更改密码

Change cipher in WebRTC

我正在 WebRTC(基于 browser/JavaScript)上进行研究和试点项目,现在我正在研究它的安全实施。

我了解(请指正)DTLS-SRTC 实现了加密机制,我只能找到对 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.

的引用

我还认为中间的任何 STUN/TURN 服务器都没有参与加密机制,因此有效负载将原封不动地通过 TURN 服务器。

这让我问是否可以在 browser/JavaScript 解决方案中为 WebRTC 设置和选择可用密码和密钥长度列表...或者如果 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是唯一的.

如果可以设置 cypher/key 长度,能否请您在 JavaScript 中就如何设置提出建议,或者指出一些具体的文档来实现这一点?

首先我想回答你的直接问题,关于没有明确询问的事情的注释。

您说得对,TURN 没有为 WebRTC 会话提供安全性。当使用 TURN 服务器时,数据在通过 TURN 服务器时已经加密。 TURN 服务器无法修改或检查流经它的数据。

您无法通过 Javascript 控制 CipherSuites。今天没有 API。

浏览器提供多种 DTLS 和 SRTP CipherSuites。这是 FireFox 98 使用的列表。

 Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
 Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
 Cipher Suite: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca9)
 Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)
 Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
 Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
 Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
 Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)

这些是 SRTP CipherSuites

SRTP Protection Profile: SRTP_AEAD_AES_128_GCM (0x0007)
SRTP Protection Profile: SRTP_AEAD_AES_256_GCM (0x0008)
SRTP Protection Profile: SRTP_AES128_CM_HMAC_SHA1_80 (0x0001)
SRTP Protection Profile: SRTP_AES128_CM_HMAC_SHA1_32 (0x0002)

WebRTC 使用两个 CipherSuite。一种用于 DTLS,另一种用于 SRTP。 DTLS 用于数据通道消息,SRTP 用于媒体。

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是 TLS CipherSuite(不是 SRTP CipherSuite)。

您可以控制 CipherSuite 的唯一方法是 运行 一个不在浏览器中的 WebRTC 实现。您选择的 WebRTC server/client 可以提供 API 来更改这些。

WebRTC for the Curious#Securing 也可能有帮助。它更深入地触及了这个答案中的要点。