内容转自前辈的博客:https://my.oschina.net/u/3521704/blog/5497227
Google Widevine 及其工作原理
前言
Google Widevine 是一种常用的 DRM 解决方案,支持 Android 操作系统、多种智能电视、浏览器等。Widevine 还支持 MPEG-DASH、HLS、MSS 以及 CENC 和 CMAF,这种广泛的支持使它成为视频传输中非常受欢迎的 DRM 解决方案。
在本文中,我们将深入了解谷歌的 Widevine DRM 解决方案 —— 它是一种流行的 DRM 解决方案,在 Web 和移动生态系统中获得了广泛支持。
01/Widevine DRM
Widevine DRM 是谷歌旗下的 DRM 解决方案(谷歌于 2010 年收购了 Widevine)。
通过之前文章对 DRM 的了解,我们已经知道,大部分商业 DRM 解决方案有着严格的版权管理和内容加密解密系统。但它们无法处理用户身份验证,谷歌的 Widevine 也不例外。
在本文中,让我们一起来了解 Widevine 的组成部分以及它的工作原理。
02/Widevine 的历史和版本
我们先来了解 Widevine 的历史及其支持。Widevine 一共有两个版本,分别是 Classic 和 Modular。
Widevine Classic
Widevine Classic 仅在传统设备中支持,并且要求媒体被打包成专有的 .wvm 格式。它曾支持旧版本的 Android 系统(3.1~5.1)、传统智能电视、Google TV 等等,现在已不再使用。
Widevine Modular
Widevine Modular 是 Widevine 的当前版本,支持 MPEG-DASH、HLS 和 MSS 协议,同时支持 CMAF、CENC 和 HTML5 标准(如 EME 和 MSE)。
03/Widevine DRM 的构成
Widevine 主要由以下几部分构成:
1. CENC、CDM、EME 和 MSE
我们在《构建 DRM 系统的重要基石 ——EME、CDM、AES、CENC 和密钥》中已详细介绍了它们,本文就不再赘述了。
2. Widevine 许可证服务器
Widevine 提供一个许可证服务器,其中包含了安全加密和解密媒体所需的信息。它有两个主要工作:
打包器将媒体打包和加密后,信息被发送到许可证服务器,服务器利用这些信息来识别许可证密钥,并将密钥与电影对应。
在播放期间,许可证服务器负责验证播放器对许可证和加密密钥的请求,从密钥库(数据库)中获取解密密钥,并使用许可证和解密密钥对播放器(客户端)做出响应。打包器、许可证服务器和播放器之间的通信都经过加密并通过 HTTPS 发送。
3. Shaka 打包器
Widevine 提供了一个完全开源的 MPEG-DASH 打包软件 ——Shaka Packager,它:
将所有的视频文件转换成 fMP4 格式(这里指的是 ABR 技术)。
将每个文件分割成同等大小的切片。
使用从 Widevine 许可证服务器获取的信息,根据 CENC 加密每个文件。
创建一个 mpd 文件或者清单文件,其中包括描述 DASH 打包媒体的所有信息。你也可以插入 CENC pssh(Protection System Specific Header)识别使用的 DRM 系统。
下面是一个使用 Widevine DRM 的 mpd:
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="eb676abb-cb34-5e96-bbcf-616630f1a3da" xmlns:cenc="urn:mpeg:cenc:2013"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh xmlns:cenc="urn:mpeg:cenc:2013">AAAAW3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADsIARIQ62dqu8s0Xpa7z2FmMPGj2hoNd2lkZXZpbmVfdGVzdCIQZmtqM2xqYVNkZmFsa3IzaioCSEQyAA==</cenc:pssh>
</ContentProtection>
显然上面使用的是 CENC(通用加密)。你还可以看到 pssh 值和密钥 ID(KID)。当播放器向许可证服务器请求正确的电影许可证时,这些唯一信息十分重要。
4. OEMCrypto Module
OEMCrypto Module 使用来自播放器(以及许可证服务器)的信息解密内容。OEMCrypto Module 位于与设备硬件绑定的可信层(Trusted Layer)中。它使用加密的许可证信息来解密媒体,并将媒体发送到视频堆栈(一般情况下,解密后的视频会被立即解码以及渲染)。
04/Widevine DRM 工作原理
这一部分,我们将了解 Widevine 的工作原理。
- 第 1 步: 当用户按下 “播放” 时,第 1 步便开始了。应用从 CDN 中下载 mpd。在解析 mpd 之后,便很容易确定该视频是否使用 Widevine 加密视频。浏览器从内容中提取初始化数据(initData)并将其作为事件发送到播放器。
注意: 我们假设这时用户身份已经得到验证。由于 Widevine 没有该功能,所以由应用来处理。
-
第 2 步: 播放器无法解密内容,需要专业的解密软件的帮助。所以,它将初始化信息发送给 CDM(Content Decryption Module )。还记得 CDM 吗?我们曾在之前文章中详细讨论过。
-
第 3 步: CDM 接收到来自播放器的初始化信息,并创建 “许可证请求”,然后将其发送回给播放器。
-
第 4 步: 播放器接收到许可证请求后,将该请求通过代理发送给 Widevine 许可证服务器。许可证请求也已被加密,所以不会在传输过程中被访问或者破解。
-
第 5 步: 许可证服务器接收到播放器发送的请求,然后:
解密请求,提取初始化信息,并通过初始化信息找到其数据库中的许可证。
找到许可证后,将它加密,然后发送给播放器。
加密信息包括解密内容的密钥以及许可证信息(过期时间等)。
-
第 6 步: 播放器接收到许可证服务器发送的许可证,将它传递给 CDM(通过 EME)。信息既已被加密,播放器和其他软件都无法读取或者滥用信息。
-
第 7 步: 因为 CDM 不在设备的可信层中,它必须将信息传递给位于可信层中的 OEMCrypto Module。解密实际发生在 OEMCrypto Module 中。在一些实现中,解码也在 OEMCrypto Module 中。由浏览器对容器进行实际解析。
-
第 8 步: 一旦内容被解复用、解密或者解码,便会以视频切片的形式发送给屏幕,并不会存储在设备上。
下面是一张来自 Widevine 的流程图,说明了我们刚刚所讨论的内容。
05/Widevine 安全级别 ——L1、L2 和 L3
有趣的是,Widevine 还拥有三个安全级别 ——L1、L2 和 L3。
在我们学习安全级别之前,让我们先来了解 TEE(可信执行环境,Trusted Execution Environment)。维基百科这样定义 TEE:
主处理器的安全区域,能够确保加载代码和数据的私密性和完整性。
TEE 对于 DRM 而言至关重要,因为它极大提升了安全性,并为确保解密密钥和解密视频不被盗取和泄露发挥了关键作用。
理解这些之后,让我们来看下 Widevine 安全级别 L1、L2 和 L3 的区别。
- 安全级别 L1
L1 是 Widevine 中最高的安全级别,提供硬件级别的解密(比软件安全)。
内容解密、媒体解码以及渲染在 TEE 中完成。
如果你想从服务商那里获得高清内容视频服务,你的设备需要经过认证达到 L1 标准。
- 安全级别 L2
在 L2,只有媒体解密在 TEE 中执行。
解密视频被发送给应用,进行解码和渲染。
- 安全级别 L3
L3 最不安全,用于没有 TEE 的低端硬件。
加密在软件 - CDM(像是浏览器中的那些)中进行。
在 L3 安全级别的设备中,内容供应商阻止加密的高清视频播放。
06/商业规则
下方的数据片段说明可以插入 Widevine 的商业规则和许可证规则。它非常明确地解释了特定资产的租赁、播放、续订和许可期限。内容供应商可以使用它来创建复杂的规则以满足他们的商业模式。
{
"payload":"<license challenge>",
"content_id":"<content id>",
"provider":"<provider>",
"allowed_track_types":"<types>",
"content_key_specs":[
{
"track_type":"<track type 1>"
},
{
"track_type":"<track type 2>"
},
"..."
],
"policy_overrides":{
"can_play":"<can play>",
"can persist":"<can persist>",
"can_renew":"<can renew>",
"rental_duration_seconds":"<rental duration>",
"playback_duration_seconds":"<playback duration>",
"license_duration_seconds":"<license duration>",
"renewal_recovery_duration_seconds":"<renewal recovery duration>",
"renewal_server_url":"<renewal server url>",
"renewal_delay_seconds":"<renewal delay>",
"renewal_retry_interval_seconds":"<renewal retry interval>",
"renew_with_usage":"<renew with usage>"
}
}
哪里支持 Widevine?
Widevine Modular(或 Widevine)在多个平台上获得了支持,比如:
Android (4.4+)
Android TV
Amazon Fire TV
Chromecast
Smart TV
Chrome、Firefox、Edge 等浏览器
如果硬件厂商想要支持 Widevine,他们可以联系谷歌并签订合同以获得需要的支持(如 CDM、测试向量等)。
07/结 语
我希望现在你已经很好地理解了谷歌 Widevine DRM 的工作原理。网上有很多信息(源代码、播放器和 SDK)可以帮助你更加深入地了解 Widevine。
我们下次再见,保重!
致谢:
本文已获得作者 Krishna Rao Vijayanagar 授权翻译和发布,特此感谢。
原文链接:
https://ottverse.com/widevine-drm-hUow-does-it-work/