webrtc安全性 加密方式

媒体加密与通信安全

     有各种不同的做法会让实时通信软件暴露在安全隐患中。其中需要特别值得注意的是在信息传输的过程中截取未加密的媒体或者数据。这可以发生在浏览器到浏览器之间或者浏览器到服务器之间的通信过程中,第三方可以窃取到所有发送的数据。但是在数据加密之后,可以有效的组织窃听者获取通信流中的内容。只有拥有加密密钥的会话参与方才可以将通信数据流解码。加密功能在WebRTC中是强制要求的,所有内容,包括信令机制,都必须进行加密工作。所以,所有通过WebRTC发送出的媒体流都会通过标准化的知名的加密协议得到保护。由传输通道的类型决定加密协议;数据流使用数据报传输层安全协议(DTLS)进行加密,媒体流使用安全实时传输协议(SRTP)进行加密。

4.3.1 DTLS:数据报传输层安全协议

     WebRTC使用DTLS加密发送的信息,所有通过RTCDataChannel全都使用DTLS来确保安全性。DTLS是一个标准化的协议,已经内置在了所有支持WebRTC的浏览器中,并且始终在网页浏览器,电子邮件和VoIP平台上进行信息加密工作。该协议内置的特性意味着不需要再使用前进行任何设置。与其他加密协议一样,DTLS的目标是防止信息窃取。DTLS是基于面向流的TLS所建模的,TLS是一个使用非对称密码技术,数据和信息授权技术来提供全面加密技术的协议。TLS是实际的网页加密标准,TLS被设计用来给可靠的TCP传输机制提供服务,但不适用于使用UDP这种不可靠传输机制的VoIP应用。DTLS协议是从SSL衍生来的,所有数据都认为是与使用任何基于标准SSL连接中的数据一样安全。事实上,WebRTC数据可以通过任何基于标准SSL的连接来进行保护,使WebRTC可以在几乎任何服务器场景中提供端到端加密。参考文献[8]

4.3.1.1 TURN上的DTLS

     所有WebRTC通信的默认选项是在两个浏览器之间建立直接P2P通信,在设置阶段有信令服务器的帮助。在TURN通信过程中,媒体可能会出现质量降低以及延时增加的情况,但是允许“如果其他所有都失败了”这种情景迫使WebRTC应用在很差的环境下继续工作。我们必须考虑在TURN的替代通信结构上进行通信加密。我们知道,无论什么通信方法,被发送的数据都会在终端被加密。TURN服务器的目的是简单的在通话参与方之间进行WebRTC数据传输,以及只在获取路由目的的时候对WebRTC数据包中的UDP层进行解析。服务器不会为了路由数据包而解码应用数据层信息,所以我们可以确定它们不会(且不能)对DTLS加密产生影响。所以,加密保护不会因为WebRTC通信在TURN上传输就受损,并且服务器不能读懂或者更改对等端之间所传送的信息。

4.3.2 SRTP:安全实时传输协议

     基本的RTP不具备任何内置的安全机制,而这就导致了传输的数据没有任何保护。取而代之的是使用外在机制来给数据提供加密。事实上,使用未经加密的RTP是被WebRTC规范所明文禁止的。WebRTC使用SRTP来对媒体流进行加密,而不是DTLS。这是因为SRTP相比于DTLS,是更轻型的协议。规范要求任何WebRTC实现都要支持RTP/SAVPF。但是,实际的SRTP密钥交换最开始时使用DTLS-SRTP进行的,可以检测到任一MiTM攻击。

4.3.3 安全连接的建立

     在这一小节中让我们来探讨一下WebRTC应用建立一通新的通话的过程。在这个例子中,有两个会话参与方,Alice和Bob。在一方(Alice)打电话给另一方(Bob)的时候初始化通话进程,然后信令处理在双方之间交换相关的数据元。一旦初始ICE检查结束了,双方就会开始设立一个或多个安全通道。最开始,DTLS握手会发生在ICE所创立的所有通道上。对于这些数据通道而言,单独这一步作为简单的DTLS对于加密来说已经足够用了。但是对于媒体通道,需要进行其他的额外步骤。一旦DTLS握手结束后,密钥被“发出”并且作为媒体通道的密钥SRTP。在这一步,会话双方都知道他们可以使用这些密钥与对方分享安全的数据和/或媒体通道,并且这些通道是不为恶意的第三方所知晓的。参考文献[10]

4.3.4 DTLS-SRTP vs SDES

     为了在媒体传输会话中协商安全性参数,SRTP需要与密钥管理协议进行互动。此协议是未确定的,给任务提供多个可能的选择。其中两个选择分别为SDES和DTLS-SRTP。需要提醒的是,多媒体通信中涉及到的信令(SIP,HTTP)和媒体(RTP)可以单独地进行安全加密。

SDES

     对媒体流的SDP安全描述(SDP Security Description for Media Streams, SDES)是WebRTC之前所选择的方法。SDES中,被用来设立SRTP会话的安全性参数和密钥,以SDP属性的形式进行交换。因为SDP是在信令平面上进行传输的,如果不是额外再针对信令消息进行加密的话,那么窃听者还是可以获得密钥,从而窃取SDES加密的数据。换句话说,还需要再使用一个额外的加密协议来给信令平面进行加密。一种实现方法是使用TLS。但是,如果单独对信令和媒体进行加密,可能会使媒体用户与信令用户不同的情况发生(不保证一定会发生)。为了能够保证上述事情发生,还需要有密码捆绑。DTLS-SRTP就是可以提供这项保证的机制之一,但是SDES不能。至今还存在一个尚未解决的问题,就是大部分VoIP网络的RTP数据并没有安全保护。事实上,为了将花费削减到预算可接受程度,用户通常都会先向技术提供商提出砍掉加密功能的要求。当得到安全保证后,绝大多数使用SDES的部署,就像我们刚刚提到的那样,很大程度上的依赖于信令平面的安全性。

DTLS-SRTP

     另一方面,DTLS-SRTP在媒体平面上交换密钥,而不是信令平面。这项不同之处使SRTP媒体通道不需要像SDES一样,在SDP信息交换中不需要将私钥暴露出来。WebRTC规范指出WebRTC实现必须支持DTLS-SRTP来进行密钥管理。还有,DTLS-SRTP是默认方案,而且不允许使用其他的密钥管理方案。换句话说,其他的方案可能,也可能不会得到一点支持。如果一个请求或者“通话”被同时支持DTLS-SRTP和SDES的对等端接收,无论信令加密与否,都必须选择使用DTLS-SRTP。

https://webrtc.org.cn/webrtc-security/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/108174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin笔记(二):标准函数,静态方法,延迟初始化,密封类

1. 标准函数 Kotlin的标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数. 前面用到的let函数就算一个标准函数,它的主要作用就是配合?.操作符来进行辅助判空处理. 1.1 with函数 with函数接收两个参数&#xff…

Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记

中科大、西安交大、南开大学发表在ICCV2023的论文,作者里有李重仪老师和中科大的Jie Huang(ECCV2022的FEC CVPR2022的ENC和CVPR2023的ERL的一作)喔,看来可能是和Jie Huang同一个课题组的,而且同样代码是开源的&#xf…

快速排序、归并排序、基数排序

快速排序 算法思想 图 1-1 即确定一个基准值(一般为数组中间位置的元素,或者自定义),让待排序数组中所有比基准值小的元素放到基准值左边的位置,所有比基准值大的元素放到基准值右边的位置,这样一趟排序下…

iOS——Manager封装网络请求

在之前的项目里,我们都是把网络请求写在viewController的viewDidLoad,而实际中使用的时候并不能这么简单,对于不同的需要,我们需要有不同的网络请求。所以我们可以用单例模式创建一个全局的Manager类,用实例Manager来执…

设计模式~备忘录模式(memento)-22

目录  (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: 代码 备忘录模式(memento) 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对…

给课题组师弟师妹的开荒手册(终篇)

0 写在前面 终于,在结束收尾工作后敲下了开荒手册的终篇,自己三年研究生生活过的离理想中的完美还差很多,不过胜在完整,哈哈,小满胜万全嘛。希望以自己不太完美的经历为例,抛我的砖,引师弟师妹…

解决Dev C++编译或运行报错 Source file not compiled

最近在研究青少年编程,用到DevC,写了个程序点击编译并运行后,我得到了一个错误消息:Source file not compiled。网上查了一下:原因是bloodshed Dev C与Windows10或者11不兼容所以才会报:Source file not co…

模块电源(四):可调DC-DC

一、DC-DC典型应用 以DC-DC转换器SCT2432数据手册为例,典型应用电路如下图所示: 其中,输出电压为: , DC-DC转换器中, 反馈电压是指反馈回路中的信号电压,用于控制输出电压与设定电压之间的误差&…

使用 AWS DataSync 进行跨区域 AWS EFS 数据传输

如何跨区域EFS到EFS数据传输 部署 DataSync 代理 在可以访问源 EFS 和目标 EFS 的源区域中部署代理。转至AWS 代理 AMI 列表并按 AWS 区域选择您的 AMI。对于 us-west-1,单击 us-west-1 前面的启动实例。 启动实例 2. 选择您的实例类型。AWS 建议使用以下实例类型之…

EVT/DVT/PVT/MP是指在制造行业一个产品

EVT/DVT/PVT/MP是指在制造行业一个产品研发导入从试产到量产的不同阶段: EVT:Engineering Verification Test工程验证测试阶段 DVT:Design Verification Test设计验证测试 PVT:Production Verification Test 小批量生产验证测试…

for循环中循环一次提交一次 insert update 关闭事务 spring springboot mybatis

省流: 在方法上直接加如下注解: Transactional(propagation Propagation.NOT_SUPPORTED) public void t1(){//业务代码 } 正文: 在测试的时候,有时候会希望在for循环中,代码循环一次就提交一次事务。 方法一&#…

【计算机毕设选题推荐】网络在线考试系统SpringBoot+SSM+Vue

前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 网络在线考试系统 技术栈 SpringBootSSMVueMySQLMaven 文章目录 一、网络在线考试系统-环境…

从永远到永远-吉他和弦替代原理

吉他和弦替代原理 0.背景1.和弦分类1.主和弦2.属和弦3.属七和弦4.下属和弦5.副属和弦6.离调和弦 2.功能组化分依据1.划分依据及分组2.Ⅵm、Ⅲm级 3.替代1.传统的和弦链接与替代2.离调和弦替代3.属和弦替代1.降五级替代2.减七和弦替代3.重属和弦 999 参考资料 0.背景 1.和弦分类…

哈佛教授因果推断力作:《Causal Inference: What If 》pdf下载

因果推断是一项复杂的科学任务,它依赖于多个来源的三角互证和各种方法论方法的应用,是用于解释分析的强大建模工具,同时也是机器学习领域的热门研究方向之一。 今天我要给大家推荐的这本书,正是因果推断领域必读的入门秘籍&#…

windows环境下搭建redis5.x集群

下载windows版本redis5.x redis.windows.conf内容修改如下: # 端口 (注意:改为每个文件夹对应的端口,分别为6379、6380、6381、6382、6383、6384) port 6379 # 允许创建集群 appendonly yes cluster-enabled…

工控网络协议模糊测试:用peach对modbus协议进行模糊测试

0x00 背景 本人第一次在FB发帖,进入工控安全行业时间不算很长,可能对模糊测试见解出现偏差,请见谅。 在接触工控安全这一段时间内,对于挖掘工控设备的漏洞,必须对工控各种协议有一定的了解,然后对工控协议…

ros学习笔记(1)Mac本地安装虚拟机,安装Ros2环境

Ros与Linux的关系 Ros环境基于Linux系统内核 我们平时用的是Linux发行版,centos,ubuntu等等,机器人就用了ubunut 有时候我们经常会听到ubunue的版本,众多版本中,有一些是长期维护版TLS,有一些是短期维护…

面试算法26:重排链表

问题 给定一个链表,链表中节点的顺序是L0→L1→L2→…→Ln-1→Ln,请问如何重排链表使节点的顺序变成L0→Ln→L1→Ln-1→L2→Ln-2→…? 分析 首先把链表分成前后两半。在示例链表中,前半段链表包含1、2、3这3个节点&#xff0c…

分布式系统部署Redis

文章目录 一、单点问题二、主从模式概念配置主从结构查看主从节点断开从属关系拓扑结构主从复制原理replication复制offset偏移量 全量复制和部分复制全量复制部分复制 实时复制redis主节点无法重启 三、主从哨兵模式哨兵概念监控程序人工恢复自动恢复为什么是哨兵集合使用dock…

Stm32_标准库_15_串口蓝牙模块_手机与蓝牙模块通信_BUG修复

代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h" #include "Time.h" #include "Function.h" #include <stdio.h> #include <…