動画DRM/暗号化ストリーミング基礎
有料/限定配信では暗号化が必須です。HLS/DASH の CENC と SAMPLE-AES、Widevine/FairPlay の最小構成を押さえれば多くの要件は満たせます。本稿は「何から始め、どこで落ちるか」を実務視点で体系化します。
要点(TL;DR)
- まず非DRMでABR/低遅延を固める — 根本の切替破綻を先に潰す。
理由: 問題切り分けが容易になり、DRM起因の障害だけを観測できる。 - マルチDRMは端末判別で分岐 — Safari=FairPlay、Chrome/Android=Widevine。
失敗時: initData/MIME/CORS不一致でライセンス要求が落ちる。 - 鍵管理はKMSと監査ログ — KID/Keyの生成・配布を追跡可能に。
リスク: 鍵漏洩は回収不能。短い有効期限/ローテを前提に。 - 評価はTTS/切替失敗/完走率 — 体感劣化が小さいかで採否を決める。
関連: 動画メトリクス。
1. 脅威モデルと要件定義
- 想定対策: スクリーンリッピング抑止ではなく「平文配布の阻止」「鍵漏洩の抑止」「アクセス制御」の三本柱に集中。
- 権利要件: 視聴期間/地域/端末上限/画質制限(SDのみ等)/ダウンロード可否。
- 可用性: ライセンス遅延のSLO(例: p95 300ms)、フェイルオーバー、レート制限。
2. 鍵とライセンスの流れ
- Key/IV発行: KMS/DRMベンダーでKID/Keyを生成・保管(監査ログ必須)。
- パッケージ: HLSはSAMPLE-AES/またはFairPlay仕様、DASHはCENC(fMP4, pssh)で暗号化。
- 再生: プレイヤーがEMEでCDMにinitDataを渡し、ライセンスサーバから鍵素材を安全に取得。
補足: 署名URLでセグメントとライセンスAPI両方を保護し、ID連携/セッション検証でアクセス制御を徹底します。
実装例(EME: Widevine/FairPlay)
EMEの初期化 → encrypted イベント → ライセンス取得 → session.update の順。Safariは FairPlay、Chrome/Android は Widevine を使用します。
HLS(FairPlay) の #EXT-X-KEY
SAMPLE-AES と skd:// のキー配布を組み合わせ、証明書/cert と ASK の整合性を確認します。
3. HLS/DASH 実装の勘所
4. 互換性と制限(L1/L3, CBCS/CENC)
- L1 vs L3: 端末のセキュアデコーダ有無でレベルが変化。L3限定端末では解像度/ビットレート上限を個別設定。
- CBCS vs CENC: FairPlayはCBCS優先、WidevineはCENC/CBCS両対応。パッケージャで両立設定を確認。
- 字幕/音声: 必要に応じて暗号化。アクセシビリティ要件(クローズドキャプション)とのバランスを検討。
- LL-HLS: パート暗号化時のライセンス遅延吸収を設計(先行リクエスト/短いGOP)。
5. テスト戦略とSLO
まずは非DRMのクリア配信で ABR/低遅延/初期体験を固め、次にDRMつきを同条件で比較します。差分は「ライセンス遅延」「復号失敗」「切替破綻」に分類。
- 計測: 再生開始TTFB/TTS、切替回数、切替失敗率、再生停止理由、完走率。
- ネットワーク: H/2/H/3、先読み、CDN TTL/キャッシュ、コールド/ウォーム計測。
- SLO: p95ライセンス応答300ms、切替失敗<1%、完走率+1〜2pt劣化以内など。
6. 運用: 鍵ローテーション/可観測性/障害対応
- ローテ: コンテンツ/時間単位でKIDを更新。旧鍵のグレース期間を確保。
- 監査: 生成/配布/失敗ログを相関IDでトレース。PIIの取り扱いに注意。
- 障害: KSM片系障害時のフェイルオーバー、レート制限超過時のバックオフ。
公開前チェック
- 端末ごとのDRM分岐(Safari/FairPlay, Chrome/Widevine)が機能。
- initDataタイプ/MIME/CORS/HTTPS/Service Workerスコープが一致。
- ライセンス応答p95 ≤ 300ms、失敗率<1% を満たす。
- KID/Keyローテのメタ更新とキャッシュ無効化が動作。
まとめ
DRMは“最後に重ねる層”。エンコード・ABR・低遅延を先に最適化し、ポスター/LQIPで初期体験を守った上で暗号化を導入しましょう。
FAQ(よくある質問)
1DRM設計の最小構成は?
共通KMSでKID/Key生成 → パッケージャでHLS(SAMPLE-AES)/DASH(CENC)作成 → 端末ごとにFairPlay/Widevineのライセンスエンドポイントを案内、が最小構成です。
ABRラダーやキー間隔、セグメント境界は先に最適化し、最後にDRMを重ねると切替破綻が減ります。
2KID/Keyのローテーション頻度
イベント/番組単位、または一定期間(日/週)など。ローテーション毎にメタデータの同期とキャッシュ無効化が発生するため、キャッシュ戦略と合わせて設計します。
3Safariで再生できない(FairPlay)
skd://のライセンスURL組成、cert/askの不一致、MIME、CORS、HTTPS、Service Workerスコープ、HLSタグ(#EXT-X-KEY)の位置などを確認します。iOSのバージョン差分検証も必須です。
4セキュリティとログのバランス
可観測性のための一意トークン/セッションIDはPIIを含めず、署名URL/クッキーで保護します。エラー種別(初期化/ライセンス/復号/ネットワーク)を分離してSLOを立てます。