【问题标题】:Does WebRTC encrypts data from the offer SDP for the offerer and answer SDP for the answerer?WebRTC 是否为提供者加密来自提议 SDP 的数据并为回答者加密回答 SDP?
【发布时间】:2021-04-03 08:58:28
【问题描述】:

在 WebRTC 通话期间,提议者和应答者分别相互共享提议和应答 SDP。
我想对等点将使用来自其各自 SDP 的一些信息(如指纹等)来加密数据,以便其他对等点可以解密和使用媒体流。

是不是这样:offerer 在“offer SDP”中拥有那些加密-解密信息,而 answerer 在“answer SDP”中拥有这些信息?


这样做的目的是尝试Selective Forwarding Unit (SFU) 的可能实现,其中用户只上传一次流。现在他们的提议 SDP 与少量初始信令字节一起存储在服务器的某个位置。无论哪个对等方想要使用该流,都将共享相同的报价并且它应该可以工作,因为加密-解密密钥将是报价 SDP 的一部分。

这个问题与寻找可能的解决方案有关:
Is there any alternative approach to implement WebRTC SFU, to have only 1 upload stream?

【问题讨论】:

    标签: webrtc p2p sdp mediastream video-conferencing


    【解决方案1】:

    WebRTC 中的加密是使用 DTLS(或 DTLS-SRTP)完成的。这意味着加密密钥(用于两个方向)在对等点之间通过连接的前几个 UDP 数据包进行协商。

    此加密使用自签名证书,您可以在 SDP 的 a=fingerprint: 行中找到其指纹,并针对此进行验证。

    当将媒体包转发给另一个客户端时,SFU因此需要解密和重新加密。

    【讨论】:

    • 谢谢。假设 A 和 B 已连接。 A 正在共享媒体,而 B 处于静音状态。服务器存储 A 的前几千字节。现在 C 像 B 一样作为侦听器进入画面。我们首先向 C 发送 存储的 A 的字节。然后我们发送 A 正在进行的针对 B 的实时流字节。这可能吗?
    • 通常不是这样。当 C 加入时,SFU 向 A 请求一个关键帧,然后可以解码任何后续视频帧。
    • 我们的目的是避免从“A”多次上传,同时希望完全避免 SFU,其中会发生 1 级额外解密和重新加密。是的,我上面写的不是通常的事情。但我的问题是,理论上有可能吗?我们是否违反了任何 WebRTC 要求?
    【解决方案2】:

    所有 WebRTC 流量(媒体轨道、数据通道)都使用在 SDP 交换(提议/应答)期间协商的密钥进行身份验证和加密。交换是无懈可击的:如果攻击者能够接收到报价/答案交换的副本,他们将无法拦截 WebRTC 流量。另一方面,交换容易受到中间人攻击:如果攻击者能够修改提议/回答交换,他们可能能够窃听和欺骗媒体流量。

    因此,提议/答案交换不需要加密,但需要进行身份验证。执行交换的最常见方法是使用受 TLS 保护的通道(例如 https 或基于 TLS 的 WebSocket),但这并不一定要验证客户端。如果需要更高的安全性,则可以使用其他解决方案;例如,使用crypto.subtle API 使用共享密钥验证 SDP 是很容易的。

    【讨论】:

    • 抱歉,我无法从您的回答中获得有用的信息 :-)。 offerer是根据offer SDP还是answer SDP加密媒体数据?
    猜你喜欢
    • 2022-01-18
    • 2019-05-28
    • 2017-06-22
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多