FairPlay — 这是什么,Apple 的 DRM 及其工作原理

作者: IT Sectr 发布日期: 2026-05-24 阅读时间: 8 分钟

FairPlay 是 Apple 开发的一项专有 DRM 技术,用于保护 iOS、tvOS 和 macOS 生态系统中的视频内容。该系统使用安全隔区(Secure Enclave)和硬件加密来安全存储密钥,使流媒体服务能够以4K HDR 画质提供内容。根据 Apple Developer 文档(2025),FairPlay Streaming 支持所有搭载 A8 及更高版本芯片的 Apple 设备。

要点

  • FairPlay — Apple 的 DRM 解决方案,用于保护 iOS、tvOS 和 macOS 应用中的视频。
  • 安全隔区(Secure Enclave) 在芯片层面提供解密密钥的硬件存储。
  • FairPlay Streaming(FPS)— 用于实时保护 HLS 流的协议。
  • SCM(服务器证书模块)— 验证许可证服务器真实性的模块。
  • 集成 需要在 Apple Developer 计划中注册并获取 FPS 证书。

什么是 FairPlay?

FairPlay 是 Apple 创建并集成到 iOS、tvOS、iPadOS 和 macOS 操作系统中的 DRM 技术,用于保护音视频内容免遭未经授权的使用。它最初为 iTunes 和 iPod 开发,后来通过 FairPlay Streaming 协议发展成为一个完整的流媒体内容保护系统。

与其他 DRM 解决方案不同,FairPlay 完全集成到 Apple 设备的硬件架构中。解密密钥存储在与主操作系统隔离的安全协处理器安全隔区(Secure Enclave)中,即使越狱(jailbreak)也几乎不可能提取密钥。

FairPlay 的发展历程

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 DRM 如何工作?

FairPlay 的工作原理基于三个阶段:内容打包、通过 CDN 分发和设备端解密。在打包阶段,视频使用 AES-128 或 AES-256 加密,加密密钥通过 Key Envelope 机制与特定设备绑定。

在请求内容时,播放器通过AVContentKeySession启动 FairPlay 会话,向内容提供商的许可证服务器发送请求。服务器验证访问权限,并返回用设备证书公钥加密的解密密钥。

获取许可证的流程

客户端创建 AVContentKeySession 实例,并向其添加内容轨道。系统生成SPC(服务器播放上下文)请求,其中包含设备标识符和经 Apple 验证的应用证书。该请求通过 HTTPS 发送到许可证服务器。

许可证服务器验证 SPC,从其数据库中提取内容密钥,并用设备公钥加密,生成 CKC(内容密钥上下文)。CKC 返回给客户端,由 AVContentKeySession 使用安全隔区(Secure Enclave)的私钥进行解密。

FairPlay Streaming 工作原理示意图

swift
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 的关键组件

FairPlay 架构包含多个相互关联的组件:应用证书、Key Envelope、安全隔区(Secure Enclave)和内容解密模块。每个组件在从服务器到用户屏幕的保护链中都发挥着各自的作用。

组件功能运行位置
应用证书在许可证服务器前识别应用存储在应用包中
SPC服务器播放上下文 — 许可证请求由 AVContentKeySession 生成
CKC内容密钥上下文 — 包含密钥的响应由安全隔区(Secure Enclave)处理
安全隔区(Secure Enclave)密钥的硬件存储与解密SoC 硬件协处理器
Key Envelope包含密钥和许可证元数据的容器由许可证服务器生成

FairPlay 应用证书

要使用 FairPlay,开发者需要通过 Apple Developer 计划从 Apple 获取FPS 证书。该证书包含非对称密钥对的公钥,其私钥部分由安全隔区(Secure Enclave)用于解密 CKC。

应用证书会添加到项目包中,并在构建时通过Xcode自动签名。首次播放受保护内容时,系统会验证证书的有效性并请求许可证。

安全隔区(Secure Enclave)与硬件保护

安全隔区(Secure Enclave)是 Apple A 系列和 M 系列芯片上的专用协处理器,运行在隔离的 L4 操作系统上。它负责生成和存储私钥、解密 CKC,并将内容密钥传递给视频解密模块。

所有密码学操作都只在安全隔区(Secure Enclave)内部执行,密钥绝不会离开受保护区域。针对安全隔区(Secure Enclave)与主处理器之间数据总线的侧信道攻击会被硬件完整性监控所阻止。

在 iOS 和 tvOS 中集成 FairPlay

FairPlay 的集成通过 AVFoundation 在 iOS 和 tvOS 应用中实现,需要实现 AVContentKeySessionDelegate 和 AVAssetResourceLoaderDelegate 协议。开发者需要处理四个关键事件:获取 SPC、发送到服务器、接收 CKC 以及传递给播放器。

实现 AVContentKeySession 代理

swift
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 与授权

FairPlay Streaming 是一种基于 HLS 的流式视频保护协议,使用分段加密和限时密钥机制。内容提供商部署自己的许可证服务器,并与用户认证系统集成。

许可证服务器从客户端接收SPC 请求,从中提取设备和内容标识符,在后端验证用户权限,并生成 CKC 响应。内容密钥使用 FPS 证书中的设备公钥加密。

FairPlay 授权策略

FairPlay 许可证可以包含时间限制(48 小时租期)、设备数量(最多 5 台授权设备)和播放画质(基础套餐限制为 1080p)。策略在服务器端设置并打包到 Key Envelope 中。

需要特别指出的是,FairPlay 策略在安全隔区(Secure Enclave)层面生效,无法通过操作系统层面的软件方法绕过。即使越狱,硬件保护也会阻止提取密钥或修改许可证参数。

FairPlay 与其他 DRM 的比较

参数FairPlayWidevinePlayReady
生态系统Apple(iOS、tvOS、macOS)Google(Android、Chrome)Microsoft(Windows、Xbox)
最高画质4K HDR Dolby Vision4K UHD4K UHD
硬件保护安全隔区(Secure Enclave)TEETPM + TEE
开发者要求Apple FPS 证书无需Microsoft 许可证

FairPlay 在不同 iOS 版本上的工作特点

FairPlay Streaming 的支持取决于操作系统版本和设备类型。从 iOS 10 和 tvOS 10 开始,AVContentKeySession API 对所有应用开放,但通过安全隔区(Secure Enclave)的硬件加速仅对4K HDR 画质的内容必需。搭载 A8–A10 芯片的设备最高仅支持 1080p 分辨率。

在 iOS 14 中,Apple 增加了对多个 FairPlay 会话的支持,允许应用同时播放多个受保护流 — 例如,画中画使用不同的许可证。iOS 15 扩展了协议,支持后台刷新密钥,以支持长时间观看。

多 DRM 架构中的 FairPlay

对于跨平台流媒体服务,FairPlay 与 Widevine 和 PlayReady 一起作为多 DRM 架构的一部分使用。许可证聚合商(如 Axinom 和 EZDRM)提供统一 API,将请求转换为 FairPlay 的 SPC 格式和 Widevine 的 MediaDrm 格式,从而简化所有平台的集成。

常见问题

iOS 中的 FairPlay DRM 是什么?

FairPlay 是 Apple 内置于 iOS、tvOS 和 macOS 中的 DRM 技术,用于保护视频内容。它通过安全隔区(Secure Enclave)使用硬件加密,并通过 FairPlay Streaming 协议在 Apple 设备上安全传输解密密钥。

如何获取 FairPlay Streaming 证书?

要获取 FPS 证书,需要在 Apple Developer 计划中注册,在 Certificates, Identifiers & Profiles 部分创建证书,并以 DER 格式下载。证书会添加到 Xcode 项目的包中,并在构建时签名。

可以在 Android 上使用 FairPlay 吗?

不可以,FairPlay 在 Android 上不可用,因为它是 Apple 的专有技术,与 A 系列和 M 系列芯片上的安全隔区(Secure Enclave)硬件架构绑定。Android 设备使用 Google 的 Widevine DRM。

FairPlay 与 FairPlay Streaming 有什么区别?

FairPlay 是 Apple DRM 技术的统称,而 FairPlay Streaming(FPS)是用于保护 HLS 流的具体协议。FPS 使用 FairPlay 机制加密视频分段,并通过 AVContentKeySession 管理许可证。

FairPlay 许可证有哪些限制?

FairPlay 许可证可以设置限制,包括观看时间、最高视频画质(720p、1080p、4K)、设备数量和密钥有效期。所有策略都在安全隔区(Secure Enclave)中通过硬件执行,无法绕过。

总结

  • FairPlay — Apple 的专有 DRM,通过安全隔区(Secure Enclave)提供硬件保护,并通过 FairPlay Streaming 协议保护 HLS。
  • SPC 和 CKC — 协议的关键消息:来自客户端的许可证请求和来自服务器的包含密钥的响应。
  • FPS 证书 对开发者是必需的,可通过 Apple Developer 计划获取。
  • 集成 通过 AVFoundation 中的 AVContentKeySession 和 AVAssetResourceLoaderDelegate 实现。
  • 安全隔区(Secure Enclave) 在硬件层面提供密钥的隔离存储和处理。
  • 许可证的限制包括时间范围、画质和设备数量。
  • 跨平台流媒体应用需要采用 FairPlay、Widevine 和 PlayReady 相结合的多 DRM 方案

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读