DRM之Widevine学习入门

中国的网络视频行业高速增长,收入已突破千亿元。然而网络盗版猖獗,造成的损失已超过正版收入的一半,版权保护的重要性与日俱增。

现有方案的问题

解决盗版问题的一般思路是对视频加密,仅允许授权用户解密播放视频。常见的视频加密方案有以下两类:

  • 自研加解密方案:业务自行研发的非通用加解密方案(如调换部分帧的位置)。
  • 通用 AES 加解密方案:使用 Dash 的 ClearKey 或 HLS 的普通 AES 加密。

这两种类型方案都有各自的问题与缺陷。

方案类型问题与缺陷
自研加解密方案
  • 自研加解密方案开发难度大
  • 自定义加解密算法安全性难以保证
  • 难以在浏览器、OTT 等通用平台播放
  • 解码内容有被转录风险
  • 无权发布知名版权方(好莱坞、迪士尼等)的内容
通用 AES 加解密方案
  • 密钥明文暴露易遭窃取
  • 获取密钥地址易遭篡改
  • 无法指定密钥有效期

商业级 DRM

商业级 DRM 是一类利用 License 实现高安全级别的版权保护系统。终端播放视频时,必须先获取 License(License 中包含了解密密钥、密钥有效期及终端信息等),然后使用 License 中的密钥解密播放视频。

使用商业级 DRM 保护视频,有以下优势:

  • 视频内容加密:采用 CENC 对内容加密,播放需要密钥解密。
  • 密钥不可见:密钥本身被加密,仅 OS 中的解密模块能读取密钥。
  • License 终端绑定:License 仅对单个终端有效,其他终端无法使用。
  • License 支持过期:支持指定 License 的有效期。
  • 解码过程安全:支持硬件级(TEE)解密和解码。
  • 知名版权方认证:好莱坞、迪士尼认证。

目前主流的 DRM 系统有 Widevine 和 FairPlay 两种:

DRM 类型适用文件格式适用播放环境
WidevineDashAndriod 播放器、Chrome 和 Firefox 浏览器
FairPlayHLSiOS 播放器以及 Safari 浏览器

  1. App 后台 上传视频(服务端 API 或控制台),同时指定上传后执行带有 视频加密 任务的任务流。
  2. 视频处理模块执行视频加密任务,加密后的内容写入到 COS 存储,通知 App 后台视频加密任务完成。
  3. App 终端向 App 后台请求要播放的视频,后台对终端用户进行鉴权(如是否付费),鉴权通过后派发视频对应的 Token 作为授权播放的凭证。
  4. 播放器下载从点播 CDN 下载加密的视频内容。
  5. 播放器向点播请求 License,点播对 Token 鉴权,通过后派发 License,播放器使用 License 解密播放视频内容。

用户鉴权与播放授权

App 后台获取到视频上传和加密完成的通知后,即可在 App 的视频列表中加入该视频。当 App 终端请求播放这个视频时,后台需要对终端做如下校验:

  • 播放请求是否来自于 App 的合法用户。
  • 该用户是否已付费观看该视频。

校验通过后,App 后台对用户进行授权,即向终端返回 Token(计算方式参见 Token 生成)。终端播放对应 FileId 的视频时,超级播放器 SDK 使用 Token 获取到解密视频需要的 License,完成对视频的解密播放。

播放 DRM 加密的视频

数字版权管理解决方案(Digital Rights Management,DRM),通过技术手段加密内容,用来控制带版权作品的使用、更改和分发,保护带版权内容的安全。适用于音乐、电影等带版权的多媒体内容。

Android 播放器可以播放两种方式加密的输出:

  1. 基于 Widevine 加密的 Dash 格式
  2. 基于 SimpleAES 加密的 HLS 格式

关于 DRM 的更多详情,您可以参考 如何对内容做版权保护 方案文档。

Android中的DRM软件架构:

Widevine是google推出的一种DRM,支持从google指定的服务器上,下载经google加密的版权文件,如视频、应用等。

Widevine DRM解决方案结合以下行业标准,提供强大的多平台内容保护:

基于HTTP的动态自适应流技术(DASH) 
DASH采用标准HTTP 协议,厂商可在现有网络基础设施(网络服务器、内容分发网络、防火墙等)上方便的实施DASH技术。

DASH为不同DRM系统构建了一个简单有效的系统,以共享密钥,密钥标识符,加密算法,参数和信令,以及将专有数据存储在保护系统特定报头(PSSH)中的位置,但将DRM具体实现留给了系统自身。它为ECM中的每个DRM存储此信息 - 这使得每个DRM能够将其自己的健壮性规则,安全性实施和密钥交换系统应用于相同内容文件的加密内容。通用加密解决方案CENC允许内容提供商每个容器/编解码器加密和打包一次内容,并将其与各种密钥系统,CDM和客户端一起使用:即任何支持公共加密的CDM。例如,使用Playready打包的视频可以使用Widevine CDM在浏览器中播放,从Widevine许可服务器获取密钥。

加密媒体扩展(Encrypted Media Extensions,EME)是 W3C 提出的一种规范,用于在 Web 浏览器和 DRM 代理软件之间提供通信通道。EME提供了一个API,使Web应用程序能够与内容保护系统进行交互,以允许播放加密的音频和视频。EME旨在使相同的应用程序和加密文件能够在任何浏览器中使用,而不管底层保护系统如何。前者是通过标准化的API和流程实现的,而后者是通过公共加密的概念实现的。

媒体源扩展(Media Source Extensions, MSE)是一项 W3C 规范,扩展了HTMLMediaElement,支持HTML5视频和音频,允许 JavaScript 生成媒体流以支持回放。这可以用于自适应流(adaptive streaming)及随时间变化的视频直播流(live streaming)等应用场景。

内容解密模块(Content Decryption Module, CDM)

CENC 声明了一套标准的加密和密钥映射方法,它可用于在多个 DRM 系统上解密相同的内容,只需要提供相同的密钥即可。DRM 提供商(例如,EME 可用于 Edge 平台上的 Playready 和 Chrome 平台上的 Widewine)拥有一套通用的 API,这些 API 能够从 DRM 授权模块读取视频内容加密密钥用于解密。在浏览器内部,基于视频内容的元信息,EME 可以通过识别它使用了哪个 DRM 系统加密,并调用相应的解密模块(Content Decryption Module, CDM)解密 CENC 加密过的内容。解密模块 CDM 则会去处理内容授权相关的工作,获得密钥并解密视频内容。CENC 没有规定授权的发放、授权的格式、授权的存储、以及使用规则和权限的映射关系等细节,这些细节的处理都由 DRM 提供商负责。

Widevine Classic是Google专有的DRM方案,用于直播,点播和下载内容。 它要求内容以Google自己的特定格式打包,Widevine Classic已被Widevine Modular取代。与Widevine Classic一起使用的视频内容格式为:Widevine(.WVM)。Widevine Modular支持MPEG-DASH,CMAF,HLS和Smooth Streaming ABR视频格式,以及公共加密(CENC)等开放标准。
Widevine 测试APK:WidevineSamplePlayer.apk 测试Widevine Classic,ExoPlayerDemo.apk 测试Widevine Modular

Widevine安全级别

安全级别安全BootloaderWidevine密钥配置安全硬件或ARM Trust ZoneWidevine密钥箱和视频密钥处理硬件视频路径
1级工厂提供Widevine Keys密钥永远不会暴露给主机CPU硬件保护的视频路径
2级工厂提供Widevine Keys密钥永远不会暴露给主机CPU硬件保护的视频路径
3级是*现场提供Widevine Keys没有清除暴露给主机CPU的密钥清晰的视频流传送到视频解码器

手机厂商可以通过Google的授权以获取Widevine DRM对应的软件包从而将Widevine DRM集成到自己的产品中。

Widevine DRM代码结构大体可分为三部分:

1、Android中的基本框架。包括WVMExtractor等。这部分代码在AOSP(Android 开放源代码项目)中可以看到。主要功能实现封装在Widevine专利代码包。

2、Widevine专利代码包。需要得到Google授权才能得到。该包提供了很多Widevine专用库用于完成Widevine DRM权限检查、解密。它还提供了一些简单App用于测试。

3、手机厂商自身的安全认证。Widevine支持在硬件层与厂商的安全机制绑定,在boot等底层中加入自主研发的安全机制,只有通过可信赖的bootloader才能使用具有正常权限的手机软件,并支持Widevine机制。

Android系统中的Widevine Crypto插件:

安全加密技术概念拓展:

ARM TrustZone® 技术是系统范围的安全方法,此系统方法意味着可以保护安全内存、加密块、键盘和屏幕等外设,从而可确保它们免遭软件攻击。处理器架构上,TrustZone将每个物理核虚拟为两个核,一个非安全核(Non-secure Core, NS Core)安全核(Secure Core)。两个虚拟的核以基于时间片的方式运行,根据需要实时占用物理核,并通过Monitor Mode在安全世界和非安全世界之间切换,Trustzone下的Monitor Mode实现了同一CPU上两个操作系统间的切换。逻辑上,安全世界中,安全系统的OS提供统一的服务,针对不同的安全需求加载不同的安全应用TA(Trusted Application)。

系统上电复位后,先从安全世界开始执行。安全世界会对非安全世界的bootloader进行验证,确保非安全世界执行的代码经过授权而没有被篡改过。然后非安全世界的bootloader会加载非安全世界的OS,完成整个系统的启动。在非安全系统的bootloader加载OS时,仍然需要安全世界对OS的代码进行验证,确保没有被篡改。基于安全考虑,各家TrustZone都实行闭源。

来源: 互联网搜集整理