FairPlay 是 Apple 开发的一项专有 DRM 技术,用于保护 iOS、tvOS 和 macOS 生态系统中的视频内容。该系统使用安全隔区(Secure Enclave)和硬件加密来安全存储密钥,使流媒体服务能够以4K HDR 画质提供内容。根据 Apple Developer 文档(2025),FairPlay Streaming 支持所有搭载 A8 及更高版本芯片的 Apple 设备。
要点
FairPlay 是 Apple 创建并集成到 iOS、tvOS、iPadOS 和 macOS 操作系统中的 DRM 技术,用于保护音视频内容免遭未经授权的使用。它最初为 iTunes 和 iPod 开发,后来通过 FairPlay Streaming 协议发展成为一个完整的流媒体内容保护系统。
与其他 DRM 解决方案不同,FairPlay 完全集成到 Apple 设备的硬件架构中。解密密钥存储在与主操作系统隔离的安全协处理器安全隔区(Secure Enclave)中,即使越狱(jailbreak)也几乎不可能提取密钥。
FairPlay 的历史始于 2003 年的 iTunes Store,当时使用专有的 M4P 格式对 AAC 文件进行加密。2009 年,Apple 推出了FairPlay Streaming — 一种基于 HLS 的流式视频保护协议,后来成为 Apple TV 和 iOS 应用的标准配置。
从 iOS 10 和 tvOS 10 开始,Apple 通过AVFoundation 框架向第三方开发者开放了 FairPlay Streaming。如今,Netflix、Amazon Prime Video 和 Disney+ 都在使用 FairPlay 保护 Apple 设备上的内容,画质最高可达支持 Dolby Vision 的 4K HDR。
FairPlay 的工作原理基于三个阶段:内容打包、通过 CDN 分发和设备端解密。在打包阶段,视频使用 AES-128 或 AES-256 加密,加密密钥通过 Key Envelope 机制与特定设备绑定。
在请求内容时,播放器通过AVContentKeySession启动 FairPlay 会话,向内容提供商的许可证服务器发送请求。服务器验证访问权限,并返回用设备证书公钥加密的解密密钥。
客户端创建 AVContentKeySession 实例,并向其添加内容轨道。系统生成SPC(服务器播放上下文)请求,其中包含设备标识符和经 Apple 验证的应用证书。该请求通过 HTTPS 发送到许可证服务器。
许可证服务器验证 SPC,从其数据库中提取内容密钥,并用设备公钥加密,生成 CKC(内容密钥上下文)。CKC 返回给客户端,由 AVContentKeySession 使用安全隔区(Secure Enclave)的私钥进行解密。
let contentKeySession = AVContentKeySession(keySystem: .fairPlayStreaming)
contentKeySession.setDelegate(self, queue: .main)
let asset = AVURLAsset(url: streamURL)
asset.resourceLoader.setDelegate(self, queue: .main)
contentKeySession.addContentKeyRecipient(asset)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)
FairPlay 架构包含多个相互关联的组件:应用证书、Key Envelope、安全隔区(Secure Enclave)和内容解密模块。每个组件在从服务器到用户屏幕的保护链中都发挥着各自的作用。
| 组件 | 功能 | 运行位置 |
|---|---|---|
| 应用证书 | 在许可证服务器前识别应用 | 存储在应用包中 |
| SPC | 服务器播放上下文 — 许可证请求 | 由 AVContentKeySession 生成 |
| CKC | 内容密钥上下文 — 包含密钥的响应 | 由安全隔区(Secure Enclave)处理 |
| 安全隔区(Secure Enclave) | 密钥的硬件存储与解密 | SoC 硬件协处理器 |
| Key Envelope | 包含密钥和许可证元数据的容器 | 由许可证服务器生成 |
要使用 FairPlay,开发者需要通过 Apple Developer 计划从 Apple 获取FPS 证书。该证书包含非对称密钥对的公钥,其私钥部分由安全隔区(Secure Enclave)用于解密 CKC。
应用证书会添加到项目包中,并在构建时通过Xcode自动签名。首次播放受保护内容时,系统会验证证书的有效性并请求许可证。
安全隔区(Secure Enclave)是 Apple A 系列和 M 系列芯片上的专用协处理器,运行在隔离的 L4 操作系统上。它负责生成和存储私钥、解密 CKC,并将内容密钥传递给视频解密模块。
所有密码学操作都只在安全隔区(Secure Enclave)内部执行,密钥绝不会离开受保护区域。针对安全隔区(Secure Enclave)与主处理器之间数据总线的侧信道攻击会被硬件完整性监控所阻止。
FairPlay 的集成通过 AVFoundation 在 iOS 和 tvOS 应用中实现,需要实现 AVContentKeySessionDelegate 和 AVAssetResourceLoaderDelegate 协议。开发者需要处理四个关键事件:获取 SPC、发送到服务器、接收 CKC 以及传递给播放器。
func contentKeySession(
_ session: AVContentKeySession,
didProvide keyRequest: AVContentKeyRequest
) {
guard let identifier = keyRequest.identifier
else { return }
let spc: Data = keyRequest.makeStreamingContentKeyRequestData(
appCertificate: certificate,
contentIdentifier: identifier,
options: nil
)
licenseService.requestCKC(spc) { ckc in
keyRequest.processContentKeyResponse(
AVContentKeyResponse(fairPlayStreamingKeyResponseData: ckc)
)
}
}
在开始播放之前,需要从包中加载应用证书并准备内容标识符(通常是流 URL 或电影标识符)。证书必须在内容租期期限内有效,否则授权将以错误结束。
内容标识符在生成 SPC 的阶段传递给授权系统。许可证服务器使用该标识符查找相应的密钥和播放策略,包括时间和设备限制。
授权过程中可能会出现错误:证书过期、内容标识符错误、用户缺少访问权限。FairPlay 错误通过 contentKeySession:didFailWithError 代理返回,应通过向用户显示相应的界面来处理。
常见的错误代码包括缺少订阅时的FP_NO_ENTITLEMENT和网络问题时的 FP_REQUEST_TIMEOUT。建议为临时网络故障实现带指数退避的重试逻辑。
FairPlay Streaming 是一种基于 HLS 的流式视频保护协议,使用分段加密和限时密钥机制。内容提供商部署自己的许可证服务器,并与用户认证系统集成。
许可证服务器从客户端接收SPC 请求,从中提取设备和内容标识符,在后端验证用户权限,并生成 CKC 响应。内容密钥使用 FPS 证书中的设备公钥加密。
FairPlay 许可证可以包含时间限制(48 小时租期)、设备数量(最多 5 台授权设备)和播放画质(基础套餐限制为 1080p)。策略在服务器端设置并打包到 Key Envelope 中。
需要特别指出的是,FairPlay 策略在安全隔区(Secure Enclave)层面生效,无法通过操作系统层面的软件方法绕过。即使越狱,硬件保护也会阻止提取密钥或修改许可证参数。
| 参数 | FairPlay | Widevine | PlayReady |
|---|---|---|---|
| 生态系统 | Apple(iOS、tvOS、macOS) | Google(Android、Chrome) | Microsoft(Windows、Xbox) |
| 最高画质 | 4K HDR Dolby Vision | 4K UHD | 4K UHD |
| 硬件保护 | 安全隔区(Secure Enclave) | TEE | TPM + TEE |
| 开发者要求 | Apple FPS 证书 | 无需 | Microsoft 许可证 |
FairPlay Streaming 的支持取决于操作系统版本和设备类型。从 iOS 10 和 tvOS 10 开始,AVContentKeySession API 对所有应用开放,但通过安全隔区(Secure Enclave)的硬件加速仅对4K HDR 画质的内容必需。搭载 A8–A10 芯片的设备最高仅支持 1080p 分辨率。
在 iOS 14 中,Apple 增加了对多个 FairPlay 会话的支持,允许应用同时播放多个受保护流 — 例如,画中画使用不同的许可证。iOS 15 扩展了协议,支持后台刷新密钥,以支持长时间观看。
对于跨平台流媒体服务,FairPlay 与 Widevine 和 PlayReady 一起作为多 DRM 架构的一部分使用。许可证聚合商(如 Axinom 和 EZDRM)提供统一 API,将请求转换为 FairPlay 的 SPC 格式和 Widevine 的 MediaDrm 格式,从而简化所有平台的集成。
常见问题
FairPlay 是 Apple 内置于 iOS、tvOS 和 macOS 中的 DRM 技术,用于保护视频内容。它通过安全隔区(Secure Enclave)使用硬件加密,并通过 FairPlay Streaming 协议在 Apple 设备上安全传输解密密钥。
要获取 FPS 证书,需要在 Apple Developer 计划中注册,在 Certificates, Identifiers & Profiles 部分创建证书,并以 DER 格式下载。证书会添加到 Xcode 项目的包中,并在构建时签名。
不可以,FairPlay 在 Android 上不可用,因为它是 Apple 的专有技术,与 A 系列和 M 系列芯片上的安全隔区(Secure Enclave)硬件架构绑定。Android 设备使用 Google 的 Widevine DRM。
FairPlay 是 Apple DRM 技术的统称,而 FairPlay Streaming(FPS)是用于保护 HLS 流的具体协议。FPS 使用 FairPlay 机制加密视频分段,并通过 AVContentKeySession 管理许可证。
FairPlay 许可证可以设置限制,包括观看时间、最高视频画质(720p、1080p、4K)、设备数量和密钥有效期。所有策略都在安全隔区(Secure Enclave)中通过硬件执行,无法绕过。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。