FairPlayは、iOS、tvOS、macOSエコシステムで動画コンテンツを保護するためにAppleが開発した独自DRM技術です。このシステムは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に保管されます。これはメインOSから分離された保護されたコプロセッサーであり、ジェイルブレイクしてもキーの抽出を事実上不可能にしています。
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+がDolby Vision付98K HDR解像度でAppleデバイス上のコンテンツ保護にFairPlayを使用しています。
FairPlayの仕組みは3つのフェーズから成ります:コンテンツのパッケージ化、CDNを通じた配信、デバイス上での暗号解出し。パッケージ化フェーズでは、動画はAES-128またはAES-256を使用して暗号化され、暗号化キーはKey Envelope機構を通じて特定のデバイスに結び付けられます。
コンテンツをリクエストすると、プレーヤーくAVContentKeySessionを通じてFairPlayセッションを開始し、コンテンツプロバイダーのライセンスサーバーにリクエストを送信します。サーバーはアクセス権を検証し、デバイス証明書の公開鍵で暗号化された暗号解出キーを返します。
クライアントはAVContentKeySessionのインスタンスを作成し、コンテンツトラックを追加します。システムはデバイス識別子とAppleが署名したアプリケーション証明書を含むSPC(Server Playback Context)リクエストを生成します。このリクエストはHTTPSを通じてライセンスサーバーに送信されます。
ライセンスサーバーはSPCを検証し、データベースからコンテンツキーを取得し、デバイスの公開鍵で暗号化してCKC(Content Key Context)を形成します。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 | Server Playback Context — ライセンスリクエスト | AVContentKeySessionにより生成 |
| CKC | Content Key Context — キーを含む応答 | Secure Enclaveで処理 |
| Secure Enclave | ハードウェアキー保管と暗号解出 | SoC上のハードウェアコプロセッサー |
| Key Envelope | ライセンスメタデータ付きキーコンテナ | ライセンスサーバーにより生成 |
FairPlayを使用するには、開発者はApple Developerプログラムを通じてAppleからFPS証明書を取得する必要があります。証明書には非対称ペアの公開鍵が含まれ、秘密鍵部分はSecure EnclaveがCKCを暗号解出するために使用されます。
アプリケーション証明書はプロジェクトバンドルに追加され、Xcodeによりビルド時に自動的に署名されます。保護されたコンテンツを初めて再生すると、システムが証明書の有効性を確認し、ライセンスをリクエストします。
Secure Enclaveは、アプルAシリーズおよびMシリーズチップ上の専用コプロセッサーであり、完全にアイソレートされたL4 OS上で動作します。秘密鍵の生成と保管、CKCの暗号解出、動画暗号解出モジュールへのコンテンツキーの渡しを担当します。
すべての暗号操作はSecure Enclave内で実行され、キーが保護領域を外に出ることはありません。Secure Enclaveと主プロセッサー間のデータバスへのサイドチャネル攻撃は、ハードウェア整合性モニタリングによってブロックされます。
FairPlayの統合はAVFoundationを通じて行い、AVContentKeySessionDelegateおよびAVAssetResourceLoaderDelegateプロトコルの実装が必要です。開発者は4つの主なイベントを処理する必要があります: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または映画ID)を準備する必要があります。証明書はコンテンツ貸与期間中有効である必要があります。そうでないと、ライセンスは失敗します。
コンテンツ識別子はSPC形成フェーズでライセンシングシステムに渡されます。ライセンスサーバーはこの識別子を使用して対応するキーと再生ポリシーを検索します。これには時間制限やデバイス制限が含まれます。
ライセンス処理中にエラーが発生する可能性があります:証明書の期限切れ、無効なコンテンツ識別子、ユーザーにアクセス権がないなど。FairPlayエラーはcontentKeySession:didFailWithErrorデリゲートを通じて返され、適切なUIを表示して処理する必要があります。
主なエラーコードには、サブスクリプションがない場合のFP_NO_ENTITLEMENTやネットワーク問題のFP_REQUEST_TIMEOUTがあります。一時的なネットワーク障害に対しては、指数的な待ち時間を伴う再トライアルロジックの実装が推奨されます。
FairPlay Streamingは、セグメント暗号化と有効期限定のキー機構を使用するHLSベースのストリーミング動画保護プロトコルです。コンテンツプロバイダーは独自のライセンスサーバーを展開し、ユーザー認証システムと統合します。
ライセンスサーバーはクライアントからSPCリクエストを受け取り、デバイスとコンテンツの識別子を抽出し、バックエンドでユーザーの権限を確認し、CKC応答を生成します。コンテンツキーはFPS証明書からのデバイスの公開鍵で暗号化されます。
FairPlayライセンスには時間制限(48時間の貸与)、デバイス制限(最大5デバイス)、再生品質制限(ベーシックプランでは1080pまで)を含めることができます。ポリシーはサーバー側で設定され、Key Envelopeにパッケージ化されます。
FairPlayポリシーはSecure Enclaveレベルで適用され、OSレベルのソフトウェア方法では回避できません。ジェイルブレイクしても、ハードウェア保護によりキーの抽出やライセンスパラメーターの変更を防げます。
| パラメータ | 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のサポートは、OSバージョンとデバイスタイプに依存します。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など)は、リクエストをFairPlay用SPCフォーマットやWidevine用MediaDrmフォーマットに変換する統一APIを提供し、すべてのプラットフォームでの統合を簡素化します。
よくある質問
FairPlayは、動画コンテンツを保護するために、AppleがiOS、tvOS、macOSに組み込んだDRM技術です。Appleデバイス上で暗号解出キーを安全に転送するために、Secure EnclaveとFairPlay Streamingプロトコルを通じたハードウェア暗号化を使用します。
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アプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。