微软和许多企业都鼓励用户、开发者使用 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学习入门相关推荐

  1. 【AI参赛经验】深度学习入门指南:从零开始TinyMind汉字书法识别——by:Link

    各位人工智能爱好者,大家好! 由TinyMind发起的#第一届汉字书法识别挑战赛#正在火热进行中,比赛才开始3周,已有数只黑马冲进榜单.目前TOP54全部为90分以上!可谓竞争激烈,高手如林.不是比赛 ...

  2. 深度学习入门,一文讲解神经网络的构成、训练和算法

    小白深度学习入门系列 神经网络的构成.训练和算法 什么是神经网络 人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN),是一种 ...

  3. PyTorch深度学习入门与实战(案例视频精讲)

    作者:孙玉林,余本国 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-07-01 PyTorch深度学习入门与实战(案例视频精讲)

  4. PyTorch深度学习入门

    作者:曾芃壹 出版社:人民邮电出版社 品牌:iTuring 出版时间:2019-09-01 PyTorch深度学习入门

  5. 深度学习入门 基于Python的理论与实现

    作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现

  6. 干货|《深度学习入门之Pytorch》资料下载

    深度学习如今已经成为了科技领域中炙手可热的技术,而很多机器学习框架也成为了研究者和业界开发者的新宠,从早期的学术框架Caffe.Theano到如今的Pytorch.TensorFlow,但是当时间线来 ...

  7. 福利丨一门面向所有人的人工智能公开课:MIT 6.S191,深度学习入门

    对初学者来说,有没有易于上手,使用流行神经网络框架进行教学的深度学习课程?近日,麻省理工学院(MIT)正式开源了在线介绍性课程「MIT 6.S191:深度学习入门」.该课程包括一系列有关神经网络及其在 ...

  8. 深度学习入门指北——从硬件到软件

    作者:隔壁王大喵 近日,Rachel Thomas在fast.ai上发布了一篇博文<What you need to do deep learning>,他希望通过这篇文章回答一些深度学习 ...

  9. LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络

    Root 编译整理 量子位 出品 | 公众号 QbitAI 深度学习和人脑有什么关系?计算机是如何识别各种物体的?我们怎样构建人工大脑? 这是深度学习入门者绕不过的几个问题.很幸运,这里有位大牛很乐意 ...

  10. BP算法双向传_链式求导最缠绵(深度学习入门系列之八)

    摘要: 说到BP(Back Propagation)算法,人们通常强调的是反向传播,其实它是一个双向算法:正向传播输入信号,反向传播误差信息.接下来,你将看到的,可能是史上最为通俗易懂的BP图文讲解, ...

最新文章

  1. JS简单实现自定义右键菜单
  2. Ubuntu用apt-get安装报错:E: Could not get lock /var/lib/dpkg/lock-frontend - open (11:资源暂时不可用)
  3. Java程序员谈一谈-----java程序员成长之路
  4. linux for循环
  5. hive hql文档_大数据学习不能停,看看如何安装hive快800倍!共572.91M视频文档
  6. Lec 15 Projections onto subspaces
  7. Dubbo + Zookeeper入门初探(转载)
  8. Hadoop中Yarnrunner里面submit Job以及AM生成 至Job处理过程源码解析
  9. 网易网盘关停!云端2T的“资源包、小电影”谁来守护?
  10. 浮点数取绝对值的方法
  11. C#模拟IIS服务器(一)
  12. 原创超简单代码(1.18.50)
  13. 【Flutter】Dart 数据类型 数字类型 ( Dart 文件创建 | num 类型 | int 类型 | double 类型 | num 相关 API )
  14. 计算机邀请函操作,Word计算机二级MS office常考内容——用邮件合并技术制作邀请函...
  15. ARM核心板有哪些不同之处?
  16. iframe、frame、frameset那些事
  17. crontab shell 每5秒执行_shell之定时周期性执行脚本-crontab
  18. 如何使用支付宝支付接口
  19. 不同进制之间的转换的各种方法
  20. 尖叫吧!2015创新中国春季峰会 880元VIP门票免费送

热门文章

  1. curl安装的docker卸载
  2. java打印sscil码_SSCI期刊投稿指南库
  3. ubuntu下用VirtualBox安装Windows虚拟机
  4. LPC11XX驱动LCD1602程序
  5. yum install gcc 下载失败有可能是这个原因?
  6. 单片机原理及其应用试题(含答案)
  7. 《深入浅出WPF》——命令学习
  8. 《麦肯锡方法》第1章建立解决方案-思维导图
  9. 机器狗病毒样本 穿透冰和点还原卡
  10. LordPE 查看程序依赖项的好工具