Widevineとは:DRMとセキュリティレベルの解説

著者: IT Sectr 公開日: 2026-05-24 読了時間: 8 分

Widevineは、モバイルデバイス、Smart TV、ウェブプラットフォームでのビデオコンテンツを不正コピーから保護するためにGoogleが開発したDRM技術です。コンテンツの暗号化は、世界中の40億台のデバイスでサポートされているCDMモジュールを介して実行されます。Widevine技術は、Android、iOS、Chrome、Smart TVとの互換性を保証し、ストリーミングサービスが任意のプラットフォームでプレミアムコンテンツを保護できるようにします。

主要ポイント

  • Widevine — モバイルアプリケーションとウェブでビデオを保護するためのGoogleのDRMソリューション。
  • 3つのセキュリティレベル:L1(ハードウェア暗号化)、L2(ソフトウェア)、L3(クラウドのみで安全)。
  • CDM — Content Decryption Module、コンテンツを復号するための主要コンポーネント。
  • ライセンスは、デコード用の鍵を発行するGoogleライセンスサーバーを通じて管理されます。
  • EME(Encrypted Media Extensions)との互換性により、任意のブラウザで動作可能。

Widevineとは?

Widevineは、Googleが2010年に買収したプロプライエタリなDRM技術であり、Androidエコシステムにおけるビデオコンテンツ保護のデファクトスタンダードとなっています。Netflix、Amazon Prime Video、Disney+、Huluなどの主要ストリーミングサービスが、コンテンツの不正コピーや配信を防ぐために使用しています。

Widevineは、安全なライセンスチャネルを通じて許可されたデバイスにのみ送信されるコンテンツ鍵を使用したAES-128 CBC暗号化をサポートしています。システムは、サーバーでの暗号化からユーザーのデバイスでの復号まで、エンドツーエンドの保護を提供します。

Widevineの歴史と発展

Widevine Technologiesは1999年に設立され、当初はケーブルテレビプラットフォーム向けのコンテンツ保護ソリューションを開発していました。2010年にGoogleに買収された後、この技術はモバイルプラットフォームに適応され、Android OSにバージョン4.4 KitKatから統合されました。2015年以降、WidevineはGoogle Mobile Services認証の必須コンポーネントとなっています。

2018年、GoogleはWidevine Modular DRMを発表し、デバイスメーカーがOSコードを変更せずにハードウェアで異なる保護レベルを実装できるようにしました。現在、Widevine Modularは40億台以上のデバイスでサポートされており、Androidの主要なDRMメカニズムとなっています。

Widevineのアーキテクチャ

Widevineのアーキテクチャは、Content Decryption Module(CDM)、ライセンスサーバー、コンテンツ暗号化ツールの3つの主要コンポーネントで構成されています。CDMはクライアント側で復号を実行し、安全な鍵保存のためにハードウェアのTrusted Execution Environment(TEE)と連携します。

Googleライセンスサーバーは、コンテンツプロバイダーのポリシーに基づいて鍵の発行を管理します。これらのポリシーは、時間、デバイス数、再生品質に関する制限を定義します。暗号化ツールはプロバイダー側でコンテンツを準備し、CENC暗号化を使用してMPEG-DASHまたはHLS形式にパッケージ化します。

Widevine DRMの仕組み

保護プロセスは、メディアファイルがプロバイダーのサーバーでコンテンツ鍵を使用して暗号化されるコンテンツパッケージング段階から始まります。暗号化されたストリームはCDNを介してユーザーのデバイスに送信され、CDMがライセンスサーバーにライセンスを要求します。

ライセンスサーバーはデバイスの信頼性とコンテンツへのアクセス権を検証します。チェックに成功すると、サーバーはCDMが復号に使用する鍵付きライセンスを発行します。ライセンスには、視聴時間や解像度に関する制限が含まれる場合があります。

ライセンス交換プロトコル

Widevineでのライセンス交換は、ブラウザのEME(Encrypted Media Extensions)プロトコルまたはモバイルプラットフォームのSDKを介して実装されます。ライセンス要求はCDMによって生成され、HTTPSを介してライセンスサーバーに送信され、転送中の鍵の傍受から保護します。

サーバーは要求を処理し、暗号化されたライセンスを返します。このライセンスはデバイスのCDMのみが復号できます。特定のデバイスへの鍵のハードウェアバインディングにより、他のプラットフォームへの転送が防止されます。

暗号化標準のサポート

Widevineは、ISO/IEC 23001-7で定義されたCommon Encryption(CENC)標準を使用し、MPEG-DASHおよびHLS形式との互換性を保証します。メディアストリームの保護には、CTRまたはCBCモードのAES-128暗号化が使用されます。

鍵の導出にはHKDF(HMAC-based Key Derivation Function)が使用され、コンテンツの各セグメントに一意の鍵を生成できます。WidevineのHLSサポートはModularバージョン2.0で追加され、Appleプラットフォームとの互換性が拡大されました。

Androidでのライセンス要求の例

kotlin
@Throws
fun requestLicense(): ByteArray {
    val drmSessionManager = mediaDrm.createSession(
        sessionId,
        List("keyRequestType", "init")
    )
    val request = mediaDrm.getKeyRequest(
        sessionId,
        schemeData.get("mimeType"),
        KeyType.STREAMING,
        mutableMapOf()
    )
    return licenseService.acquire(request.data)
}

Widevineのセキュリティレベル:L1、L2、L3

Widevineは、暗号化操作の実行方法とコンテンツの処理方法が異なる3つのセキュリティレベルを定義しています。レベルL1は最大の保護を提供し、L3は最小、L2は中間の位置にあります。

レベル保護タイプデバイスの要件最大解像度
L1ハードウェアSoCレベルのTEE4K Ultra HD
L2ハイブリッド鍵用TEE、ビデオ用ソフトウェア1080p
L3ソフトウェアソフトウェアCDMのみ720p

レベルL1 — ハードウェア暗号化

レベルL1は、すべての暗号化操作が実行されるハードウェアレベルのTrusted Execution Environment(TEE)を必要とします。コンテンツ鍵がTEEから出ることはなく、メインOSが侵害された場合でも抽出を防ぎます。

L1認証を受けたデバイスは、ユーザープロセスからのアクセスなしに、復号されたビデオストリームが保護されたビデオ出力に直接送信されるため、4K品質およびHDRでコンテンツを再生できます。

レベルL3 — ソフトウェア暗号化

レベルL3は、通常のユーザースペース内でソフトウェアによるすべての暗号化操作を実行します。これは最も安全性の低いモードであり、デバイスのRAMから鍵が抽出される可能性があります。

Widevine L3は再生品質を720pに制限するため、低スペックデバイスやハードウェア保護のないデスクトップブラウザでの視聴に適しています。

デバイスでのセキュリティレベルの確認

kotlin
fun getSecurityLevel(): String {
    val mediaDrm = MediaDrm(UUID.fromString(
        "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
    ))
    val level = mediaDrm.getPropertyString(
        "securityLevel"
    )
    return level.ifEmpty { "L3" }
}

モバイルアプリケーションへのWidevine統合

モバイルアプリケーションへのWidevine統合は、標準のMediaDrm(Android)およびAVContentKeySession(iOS)APIを介して実行されます。ほとんどの場合、開発者はDRMを直接操作する必要はありません — ExoPlayerやAVPlayerなどのプレーヤーライブラリが自動的にライセンス処理を行います。

Androidでの統合

Androidでは、WidevineはCDMへの直接アクセスを提供するMediaDrmクラスを介して統合されます。ストリーミングアプリケーションでは、ライセンス要求を自動的に管理するDrmSessionManagerモジュールとともにExoPlayerを使用することをお勧めします。

プレーヤーを初期化する際には、WidevineスキームUUID(`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`)とコンテンツプロバイダーが提供するライセンスサーバーURLを指定する必要があります。ExoPlayerはライセンスの要求と更新サイクルを自動的に処理します。

WidevineのExoPlayer設定

kotlin
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
    .setUri(Uri.parse(streamUrl))
    .setDrmKeyRequestUrl(drmLicenseUrl)
    .setDrmKeyRequestHeaders(
        mapOf("Authorization" to token)
    )
    .build()

val exoPlayer = ExoPlayer.Builder(context)
    .build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()

ウェブプレーヤーとの統合

ウェブプラットフォームでは、WidevineはMedia Source Extensions(MSE)およびEncrypted Media Extensions(EME)を介して動作します。ChromiumベースのブラウザにはWidevine CDMが組み込まれており、開発者は正しい設定でEMEセッションを初期化するだけで済みます。

ブラウザでWidevineを使用するには、keySystemタイプ `com.widevine.alpha` のライセンスイニシエーターを指定する必要があります。MediaKeysインスタンスを作成すると、ブラウザが自動的にライセンス要求を処理します。

ライセンスエラーの処理

Widevineを統合する際には、アクセス権の欠如、サブスクリプションの期限切れ、デバイスの非互換性によって発生するライセンスエラーを正しく処理することが重要です。TYPE_EXPIRED_LICENSEエラーは、サーバーへの再要求によるライセンスの更新が必要です。一方、TYPE_OUTPUT_NOT_ALLOWEDは、DRMポリシーとビデオ出力の非互換性を示します。

一時的なネットワークエラーには指数バックオフによる再試行メカニズムを実装し、永続的なライセンス失敗時にはユーザーに明確なメッセージを表示することをお勧めします。DRMセッションエラーログは、コンテンツプロバイダーがデバイスの問題を特定し、ポリシーを最適化するのに役立ちます。

Widevineと代替DRM

Widevineは、AppleのFairPlayやMicrosoftのPlayReadyと競合しており、モバイルプラットフォーム市場における3つの主要なDRMソリューションを形成しています。各技術には、プラットフォームエコシステムに関連した独自の利点と制限があります。

DRMソリューションの比較

特性WidevineFairPlayPlayReady
開発元GoogleAppleMicrosoft
主要プラットフォームAndroid、ChromeiOS、tvOS、SafariWindows、Xbox、UWP
最大レベルL1(4K)L1相当(4K)SL3000(4K)
ハードウェア保護TEESecure EnclaveTPM + TEE

プロジェクトに適したDRMの選択

DRMの選択は、アプリケーションのターゲットプラットフォームによって異なります。Androidファーストのプロジェクトでは、WidevineがGoogle Mobile Servicesを搭載したすべての認定デバイスにプリインストールされており、追加のライセンス料が不要なため、自然な選択肢です。

クロスプラットフォームプロジェクトでは、Axinom、EZDRM、Vualtoなどのライセンスアグリゲーターを使用したマルチDRMアプローチがよく使用されます。これらは3つのDRMシステムすべてと連携するための統一APIを提供します。これにより統合の複雑さが軽減され、ライセンス管理が一元化されます。

よくある質問

Widevine DRMとは何ですか?

Widevineは、デジタルビデオコンテンツを不正コピーから保護するために設計されたGoogleのDRM技術です。ストリーミングサービスがビデオを暗号化し、ライセンスシステムを通じてアクセスを管理するために使用しています。

Widevineにはどのようなセキュリティレベルがありますか?

Widevineは3つのセキュリティレベルをサポートしています:TEEでのハードウェア暗号化によるL1、ハイブリッドアプローチのL2、完全ソフトウェア実装のL3。L1は4Kコンテンツの再生を可能にし、L3は720p品質に制限されています。

AndroidでWidevineレベルを確認する方法は?

MediaDrmクラスを介してsecurityLevelプロパティを要求することで、AndroidでWidevineレベルを確認できます。Widevine UUIDでMediaDrmインスタンスを作成し、getPropertyStringを呼び出すか、DRM Infoなどのサードパーティアプリを使用します。

WidevineとFairPlayの違いは何ですか?

WidevineはGoogleがAndroidとChrome向けに開発したのに対し、FairPlayはiOS、tvOS、Safari向けです。両方ともハードウェア暗号化と4Kをサポートしていますが、WidevineはAndroidデバイスでより普及しており、FairPlayはAppleエコシステムのデファクトスタンダードです。

Widevineを使用するにはライセンスが必要ですか?

モバイルアプリケーションでWidevineを使用するために個別のライセンスは不要です — この技術は認定されたAndroidデバイスとChromeに組み込まれています。料金は、ライセンスサーバーを使用するコンテンツプロバイダーのみに請求されます。

まとめ

  • WidevineはAndroidの主要なDRMメカニズムであり、ハードウェアまたはソフトウェア暗号化によるビデオコンテンツ保護を提供します。
  • 3つのセキュリティレベルL1、L2、L3が、最大再生品質と鍵保護の程度を決定します。
  • CDM(Content Decryption Module)は、ライセンス鍵を使用してクライアント側でコンテンツの復号を実行します。
  • 統合は、AndroidではExoPlayer、MediaDrmを介して、ウェブプラットフォームではEMEを介して行われます。
  • iOSにはFairPlayが必要であり、クロスプラットフォームプロジェクトにはマルチDRMアプローチが必要です。
  • Widevine ModularはCENC暗号化をサポートし、MPEG-DASHおよびHLS形式と互換性があります。
  • Googleライセンスサーバーは、コンテンツプロバイダーが設定したポリシーに基づいてコンテンツアクセスを管理します。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください