其他分享
首页 > 其他分享> > 流媒体加密-HLS视频加密

流媒体加密-HLS视频加密

作者:互联网

写在前面

本文只讨论应用于浏览器环境的流媒体协议的加密。

为什么要加密视频

为什么要加密?

付费观看视频的模式是很多平台的核心业务,如果视频被录制并非法传播,付费业务将受到严重威胁。因此对视频服务进行加密的技术变得尤为重要。

本文所指的视频加密是为了让要保护的视频不能轻易被下载,即使下载到了也是加密后的内容,其它人解开加密后的内容需要付出非常大的代价。

无法做到严格的让要保护的视频不被录制,原因在于你需要在客户端播放出视频的原内容,解密的流程在客户端的话不法分子就能模拟整个流程,最保守也能用屏幕录制软件录制到视频的原内容(可以通过加水印的方法缓解下)。

我们的目标是让他获取原内容的代价更大。

常见视频加密技术

视频加密技术分为两种:

一般结合这两种技术一起用,第1种技术很成熟也有很多教程就不再复述,本文主要介绍第2种加密技术。

流媒体加密技术原理

看视频分为两种,看点播和看录播。

要看点播可以通过下载完整个视频后再看,或者通过流媒体边下边看。 看直播只能通过流媒体看最新的画面。

加密整个视频的技术很简单,把视频看成一个文件采用加密文件的技术,这种技术太多就不介绍了。 加密流媒体的技术很少,也很难找到学习资料,本文主要介绍流媒体加密技术。

常见的应用与浏览器播放的流媒体传输协议有:

流媒体加密原理

可以看出一个规律这些流媒体传输协议都必须把视频流拆分成连续的小块之后再被传送,只不过分块的大小和视频容器的格式不一样而已。

流媒体加密技术的核心就在于对这每一小块视频分别使用对称加密算法,在服务端加密客户端解密,通过权限验证的用户才能拿到解密一小块视频的密钥。

为什么不用 HTTPS 加密

可能有人会问为什么不用 HTTPS 加密?

原因是 HTTPS 在网络传输层进行非对称加密,目的是为了防止中间人窃听劫持,任何人都可以和我们的服务器建立 HTTPS 链接获取到原数据。而视频加密的目的不是为了防止有中间人窃听我们的视频数据,而是要让视频数据本身被加密。

为什么选择对称加密

现代成熟的加密技术分为对称加密算法和公钥密码算法(非对称加密)。之所以选择对称加密是因为流媒体要求很强的实时性,数据量又很大。公钥密码算法的计算都比较复杂,效率较低,适合对少量数据进行加密。对称加密效率相对较高,所以流媒体加密首选对称加密。例如在 SSH 登入的时候会先通过公钥密码算法传输一个密钥,再用这个密钥用作对称加密算法的密钥,在数据传输过程中使用对称加密算法来提示数据传输效率。

4、HLS加密

HLS 是目前最成熟的支持流媒体加密的能应用在浏览器里的流媒体传输协议,HLS 原生支持加密,下面来详细介绍它。

在介绍如何加密 HLS 先了解下 HLS 相比于其它流媒体传输协议的优缺点。 优点在于:

缺点在于:

HLS 加密原理

HLS 由两部分构成,一个是 .m3u8 文件,一个是 .ts 视频文件(TS 是视频文件格式的一种)。整个过程是,浏览器会首先去请求 .m3u8 的索引文件,然后解析 m3u8,找出对应的 .ts 文件链接,并开始下载。

m3u8 文件是一个文本文件,在开启 HLS 加密时,内容大致如下:

#EXTM3U #EXT-X-VERSION:6#EXT-X-TARGETDURATION:10#EXT-X-MEDIA-SEQUENCE:26#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.do?k=1"#EXTINF:9.901, http://media.example.com/segment26.ts#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.do?k=2"#EXTINF:9.501, http://media.example.com/segment28.ts

这个文件描述了每个 TS 分片的 URL ,但这些分片都是加密后的内容,要还原出原内容需要从:

#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.do?k=1"

LinuxC++音视频开发视频免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【文章福利】:小编整理了一些相关的音视频开发学习资料(资料包括C/C++,Linux,FFmpeg  webRTC  rtmp  hls rtsp ffplay  srs 等),qun994289133免费分享,有需要的可以加群领取哦!~点击裙994289133加入领取资料

中解析出获取解密密钥的URL https://priv.example.com/key.do 和对称加密算法 AES-128 。 获取到密钥后再在客户端解密出原内容。 可以看出启用 HLS 加密后会多出更多的事情:

这会带来更多的网络请求和计算量,可能会对延迟和性能造成一定的不良影响。

HLS 加密实战

支持 HLS 的客户端都原生支持加密,所以要开启 HLS 加密你只需要修改你的服务端:

目前大多数云服务都支持 HLS 加密服务,如果你想直接搭建 HLS 加密服务可以使用 nginx-rtmp-module。

HLS 兼容方案

目前 HLS 存在兼容性问题:

flashls 和 hls.js 都支持 HLS 加密技术。

破解 HLS 加密

有加密就有破解,在明白 HLS 加密原理后,你想过如何去破解它吗?先定义下破解成功是指:获取到视频加密前的完整原文件。我想到的方法是:

似乎破解的难度也不会很复杂。

总结

目前流媒体加密技术还不成熟,除了 HLS 协议提供了方便成熟的方案外,其它协议的加密技术还不成熟。

RTMP 协议提供了一个变种版 RTMPE 可以加密流媒体,原理和 HLS 加密类似,但是我还找不到合适的服务端去支持 RTMPE 协议。

 

标签:视频,流媒体,加密,HLS,密钥,加密技术
来源: https://blog.csdn.net/m0_60259116/article/details/123601226