翻译、编辑:Alex
技术审校:刘姗
本文来自OTTVerse,作者为Krishna Rao Vijayanagar。
▲扫描图中二维码了解音视频技术大会更多信息▲
Easy-Tech#018#——Widevine DRM
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/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。