DRM之Widevine学习入门
Posted 中国思想史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRM之Widevine学习入门相关的知识,希望对你有一定的参考价值。
微软和许多企业都鼓励用户、开发者使用 html5 的通信协议,标准化通信可以极大增加网络安全性。其中包括 W3C 的 Media Source Extensions (MSE)、 Encrypted Media Extensions (EME),MPEG的 MPEG-DASH 和CENC。随着内容提供商(如 Netflix、Adobe、CableLabs)从Flash、Silverlight 插件播放器过渡到统一的 HTML5 视频播放,各大浏览器公司(如 Google, Microsoft, Apple)也逐步抛弃了过时的媒体插件。
android设计了一个通用的DRM软件框架,不同的DRM解决方案可通过Plugin的方式集成到Android系统中。DRM Framework API模块通过Binder机制和DRMserver进程中的DRM Manager模块通信,DRM Framework API模块是Framework层暴露给App的接口,其中最主要的类是DrmManagerClient。DRM Manager加载并管理系统中所有的DRM插件。媒体播放时,DRM Manager需找到对应的DRM Plugin进行解密。
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安全级别:
安全级别 | 安全Bootloader | Widevine密钥配置 | 安全硬件或ARM Trust Zone | Widevine密钥箱和视频密钥处理 | 硬件视频路径 |
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都实行闭源。
以上是关于DRM之Widevine学习入门的主要内容,如果未能解决你的问题,请参考以下文章
如何在android webview中播放widevine drm内容
Exoplayer 2.0 上的 Widevine DRM 内容