Google Widevine 及其工作原理

内容转自前辈的博客: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 和密钥》中已详细介绍了它们,本文就不再赘述了。

扫描二维码关注公众号,回复: 14599638 查看本文章

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/

猜你喜欢

转载自blog.csdn.net/weixin_45264425/article/details/129964594