Apple FairPlay DRM及其工作原理

Posted LiveVideoStack_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apple FairPlay DRM及其工作原理相关的知识,希望对你有一定的参考价值。

翻译、编辑:Alex

技术审校:刘姗

本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

▲扫描图中二维码了解音视频技术大会更多信息__▲

Easy-Tech #020# —— Apple FairPlay

在本篇文章中,我们将了解Apple推出的FairPlay DRM解决方案(主要用于在ios、tvOS和macOS设备上安全分发内容)。让我们一起来看下FairPlay DRM的重要构成、基本工作流和一些有趣的功能。

什么是Apple FairPlay?

FairPlay是Apple公司的DRM解决方案,它使用HLS协议安全地传输流媒体。iOS, tvOS和macOS原生支持FairPlay DRM。

Apple的FairPlay DRM向内容提供商提供技术和指导,包括:

  1. 对内容编码

  2. 安全地存储密钥和对应的密钥ID

  3. 使用播放器端的技术,安全地与播放器交换密钥,以及请求DRM密钥、解密视频、解码以及显示内容。

在本篇文章中,我们将聚焦FairPlay DRM,以下是我们将要了解的内容。

  1. FairPlay支持的算法

  2. FairPlay的重要构成

  3. FairPlay的工作原理

FairPlay DRM的重要构成

在深入了解FairPlay以前,让我们先看看在FairPlay DRM讨论中反复提到的主要模块。

1. HLS打包器

在加密视频之前,必须先使用HLS协议打包视频。HLS是Apple公司开发的流媒体协议,用于ABR转码技术,并且支持MPEG-TS(ts)或者分段mp4(fmp4)容器格式的文件存储。

2. 使用SAMPLE-AES和AES-128加密

在打包后,必须使用AES-128 CBC模式加密内容(CBC代表Cipher Block Chaining,即密文分组链接)。

CBC模式通过上一个分组加密输出影响当前分组。

  • 使用初始化向量(Initialization Vector或IV),可以确保即使同一明文(输入)用同一密钥被独立加密数次,也能生成不同的密文(加密过程中的输出)。

  • IV是随机的,这样可以阻止黑客通过观察密文,识别重复模式并获取密钥。

通过Apple FairPlay,你可以使用SAMPLE-AES或AES-128加密视频。

在我们了解SAMPLE-AES和AES-128的区别之前,请记住这两种技术都使用了AES-128(请阅读构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥)加密,只是应用在视频上的方式不同。让我们看看它们是如何实现的。

2.1. SAMPLE-AES

在SAMPLE-AES技术中,你无需加密整个视频,只需使用AES-128的CBC模式加密音频数据包和视频帧的sample,这样一来,就可以节省加密和解密过程中的功耗(尤其在视频分辨率增加的情况下)。

比如,FairPlay协议规定,在H.264/AVC码流中,如果NAL单元类型是1或5,那么NAL就会被加密;其他情况则不会被加密。

为什么?因为单元类型为1和5的时候,NAL包含了非IDR和IDR帧信息。在视频编解码器的码流中,IDR帧代表了新的视频切片的开始。没有IDR帧,其他帧就无法被解码(直到下一个IDR或者I帧到达)。

这说明了SAMPLE-AES的目标是加密一小部分有价值的音视频内容,以节省处理资源和电池电量。

想要了解更多细节,请参考Apple的_MPEG-2 Stream Encryption Format for HTTP Live Streaming_规范:https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Intro/Intro.html#//apple_ref/doc/uid/TP40012862-CH5-SW1

下面是m3u8播放清单中SAMPLE-AES的表示方式:

  • EXT-X-KEY显示:SAMPLE-AES

  • 后接内容密钥(Content Key)的URI

  • IV(初始化向量)和密钥一起使用

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:9.96,
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="https://dummyurl/test.key",IV=0x73fbe3277bdf0bfc5217125bde4ca589
test_0.ts
#EXTINF:10,
test_1.ts
#EXTINF:10,

注意: 给不了解m3u8的朋友科普一下,m3u8用于HLS视频流,描述了可用码率-分辨率组合数量、视频切片数量、每个切片长度以及切片播放顺序、加密细节、广告插入点等。请查看

https://datatracker.ietf.org/doc/html/rfc8216 了解更多细节。

2.2. AES-128

在AES-128技术中,切片(包括音频和视频)通过AES-128、CBC模式和PKCS7填充(Public-Key Cryptography Standards,公钥密码标准)完全加密。通过IV或者媒体序列号(代替IV),CBC在每个切片边界处重新启动。

下面是AES-128在m3u8文件中的表示方式:

  • EXT-X-KEY显示:AES-128

  • 后接内容密钥的URI

  • IV(初始化向量)和密钥一起使用

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:9.96,
#EXT-X-KEY:METHOD=AES-128,URI="https://dummyurl/test.key",IV=0x73fbe3277bdf0bfc5217125bde4ca589
test_0.ts
#EXTINF:10,
test_1.ts
#EXTINF:10,

3. 客户端应用

客户端应用是指用来在Apple操作系统(比如iOS、tvOS和macOS)上播放视频的应用或者播放器。

  • 它负责向许可证服务器发送请求信息以获取解密密钥。

  • 内容服务提供商可以使用Apple的示例代码开发自己的FairPlay客户端应用或者使用由DRM解决方案供应商提供FairPlay SDK。

4. AVFoundation

AVFoundation的最佳定义来自Apple:

AVFoundation是一个全功能框架,用于处理iOS、macOS、watchOS和tvOS上基于时间的音视频媒体。通过AVFoundation,你可以轻松播放、创建和编辑QuickTime电影以及MPEG-4文件、播放HLS视频流并为你的App构建强大的媒体功能。

5. App Delegate

App Delegate是应用的根对象,充当应用程序的“控制器”。当其连接的对象达到某种状态或者发生某个事件时,App Delegate会获得通知。在FairPlay中,App Delegate负责播放器、AVFoundation框架和密钥服务器之间的协调和通信。

6. 密钥服务器和密钥安全模块

  • 密钥服务器管理用于加密和解密FairPlay所保护内容的密钥。

  • 密钥安全模块(Key Security Module,KSM):

  1. 接收和解密来自播放器的许可证请求。来自播放器的请求被称为SPC(Server Playback Context,服务器播放上下文)。

  2. 将内容密钥(由密钥服务器返回)装入CKC(Content Key Context,内容密钥上下文)信息中,发送回给播放器。

  • Apple允许你使用它们的示例参考代码实现自己的KSM

  • Apple同时提供测试向量来测试KSM实现。你可以使用这些测试向量检查你的KSM实现是否能够:

  1. 妥善处理到来的SPC信息,然后

  2. 将其正确格式化并返回给播放器有效的CKC信息。

FairPlay DRM工作原理

让我们来看下Fairplay的重要组成部分如何相互交互,从而实现FairPlay加密内容的播放。

第1步: 用户打开内容提供商的App,然后按下“播放键”,开始观看某部电影。

第2步: 应用通知AVFoundation它需要播放视频,并向HLS视频流提供m3u8播放列表的详细信息。

第3步: AVFoundation下载并解析m3u8文件。

第4步: AVFoundation在m3u8中搜索#EXT-X-KEY,以检查视频是否被加密。如果内容已被加密,AVFoundation将向AVFoundation App Delegate请求内容密钥并解密内容。

第5步: 作为回应,App Delegate向AVFoundation框架请求生成SPC信息。

第6步: 收到来自AVFoundation的SPC后,App Delegate将其发送给密钥服务器。

  • 密钥服务器中的KSM打开SPC

  • 密钥服务器使用SPC中的信息查找内容密钥

  • 发送内容密钥至KSM,KSM将其放入CKC(内容密钥上下文)中

第7步: KSM向AVFoundation App Delegate发送CKC。App Delegate将CKC推送至AVFoundation中。

第8步: AVFoundation使用CKC中的内容密钥解密、解码,然后向用户安全地播放内容。

以上就是FairPlay DRM的基本工作流程。接下来,我们一起来了解FairPlay中几个有趣的功能。

获取加密密钥的AVContentKeySession

AVContentKeySession是AVFoundation中处理解密密钥的工具,于WWDC 2017宣布推出。它提供了对内容密钥加载和生命周期的更多控制,目标是将密钥加载与媒体播放生命周期解耦。

为什么AVContentKeySession如此重要?

在基本的FairPlay工作流中,播放开始后才加载内容密钥。在用户体验方面,这意味着用户需要等待SPC-CKC工作流完成之后才开始播放视频。这种等待增加了“首屏延迟(Startup Delay)”和 “延迟(Latency)”,对终端用户很不友好。

然而,使用AVContentKeySession,,应用程序就可以在用户按下播放键之前请求内容密钥(被称为“密钥预加载”)。

通过预加载密钥,内容提供商可以减少首屏延迟(延迟)并提升用户体验。

视频租赁的双到期时间窗口

Apple FairPlay还拥有“双到期时间窗口(Dual Expiry Windows)”,这一功能可以和持久密钥(Persistent Key)结合使用实现离线播放。持久密钥是指密钥可以:

  • 安全地存储在设备上。

  • 在预定义时间段播放租赁内容,而无需联系许可证服务器(离线播放)。

在租赁商业模式中,需要这样定义两个到期窗口:

  • 第一个窗口: 当用户租借电影时,电影可以在30天的时间窗口内观看(举例)。

  • 第二个窗口: 用户一按下播放键,电影必须在48小时内观看。第二个时间窗口到期后,30天的时间窗口也会到期。

为了说明这种租赁模式,FairPlay推出了“双到期时间窗口”这一功能,其中:

  • 来自许可证服务器中的第一个密钥确立了更长的租赁期(存储期)。

  • 第二个密钥在用户开始播放视频时获得,它取代了第一个密钥(播放期)。当超过第二个密钥的过期窗口,用户就无法访问或者播放视频内容了。

  • 假设用户在租赁电影后,从来没有观看过。在这种情况下,电影的第一个密钥成为系统上的唯一密钥,超过有效期后它会自动失效。

哪些平台支持FairPlay?

以下平台都支持FairPlay:

  • 使用EME(加密媒体扩展,Encrypted Media Extensions)的Safari浏览器

  • iOS设备

  • Apple TV

  • Airplay(Apple的无线内容传输协议)

结语

我希望本篇对FairPlay的介绍能够对你有帮助。Apple开发者网页(https://developer.apple.com/)上有大量信息(开发指南和示例代码等)可以帮助你实现FairPlay DRM。

我们很快就会再见,保重!

致谢:

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:

https://ottverse.com/apple-fairplay-drm-how-does-it-work/

延伸阅读:

构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥

中学生也能看懂的DRM

Google Widevine及其工作原理


以上是关于Apple FairPlay DRM及其工作原理的主要内容,如果未能解决你的问题,请参考以下文章

Azure 媒体服务 Fairplay V3 DRM 内容密钥策略

Fairplay DRM与混淆实现的研究

macOS 应用中的 Apple Fairplay 播放

Google Widevine及其工作原理

使用“纯”Java 播放 DRM 加密视频流

我们自己设置 DRM 许可证服务器是不是可行