PlayReady コンテンツ暗号化モード
このトピックでは、PlayReady システムのコンテンツ暗号化モードの概要について説明します。 PlayReady とコンテンツ暗号化の概要については、「 PlayReady コンテンツ暗号化」を参照してください。 暗号化の用語と定義については、「 用語集」 を参照してください。
PlayReady バージョン 1.0 では、以前 WMDRM (Windows Media Digital Rights Management) で使用されていたMicrosoft固有のカクテル暗号化モードに加えて、AES-128 CTR コンテンツ暗号化モードが導入されました。 AES-128 CTR コンテンツ暗号化モードでは、カウンター モード (CTR) のコンテンツ ファイルで使用される長さが 128 ビットの AES キーが使用されます。
バージョン 4.0 以降、PlayReady システムでは、カウンター モード (CTR) と暗号ブロック チェーン モード (CBC) の両方で AES 128 ビット キーがサポートされています。
この変更により、PlayReady を使用するサービスは、すべてのデバイスで一意のストリームとファイル形式を完全に利用できるようになります。 さらに、Microsoftでは、ISO/IEC FDIS 23000-19 で定義されている CMAF (Common Media Application Format) 標準がサポートされています。
一般的な暗号化モード
ISO 標準 ISO/IEC 23001-7 では、4 つの共通暗号化モードが定義されています。
バージョン 4.0 以降の PlayReady クライアントでは、AES CBC キーがサポートされています。これにより、共通暗号化モード 'cenc' の AES CTR キーに加えて、共通暗号化モード 'cbcs' もサポートされます。 バージョン 4.0 より前のバージョンでは、AES CTR は主に PlayReady クライアントでサポートされていたモードでした。これにより、Common Encryption モード 'cenc' をサポートできます。 一般的な暗号化モード 'cens' と 'cbc1' は、PlayReady エコシステムでは許可され、技術的には実行できますが、サポートされていないことに注意してください。
'cbcs' AES-CBC 暗号化スキームのサポート
PlayReady PK バージョン 4.0 以降に構築されたすべてのクライアントで CBC キーがサポートされる場合があります。 ただし、クライアントのサポートは省略可能であり、ライセンス取得プロトコルの追加のプロパティを介してライセンス サーバーに通知されます。
Version | カクテル | 'cenc' | 'cbcs' |
---|---|---|---|
PlayReady クライアント 1.0 | サポート対象 | サポート対象 | サポート対象外 |
PlayReady クライアント 2.0 | サポート対象 | サポート対象 | サポート対象外 |
PlayReady クライアント 2.5 | サポート対象 | サポート対象 | サポート対象外 |
PlayReady クライアント 3.0 | サポート対象外 | サポート対象 | サポート対象外 |
PlayReady クライアント 3.3 | サポート対象外 | サポート対象 | サポート対象外 |
PlayReady クライアント 4.0 | サポート対象外 | サポート対象 | サポート対象 |
Note
- バージョン 1709 以降でアップグレードされたすべての Xbox One ユニットは、'cbcs' をサポートしています。
- バージョン 4.0 以降のすべての PlayReady ライセンス サーバーでは、CBC キーを使用したライセンスの発行がサポートされています。
PlayReady ヘッダーでの ALGID のシグナル通知
PlayReady ヘッダーは、通常、コンテンツ ファイルまたはストリームのヘッダーに含まれる XML ドキュメントです。 クライアントがこのコンテンツの暗号化を解除するために必要な PlayReady 属性について説明します。 PlayReady ヘッダーには、独自の仕様とバージョン管理があります。 詳細については、「 PlayReady ヘッダーの仕様」を参照してください。
Version | PlayReady ヘッダー 4.3 | PlayReady ヘッダー 4.2 | PlayReady ヘッダー 4.1 | PlayReady ヘッダー 4.0 |
---|---|---|---|---|
PlayReady クライアント 4.0 (注 4 を参照) |
✔ | ✔ | ✔ | ✔ |
PlayReady クライアント 3.3 (注 3 を参照) |
✔ | ✔ | ✔ | |
PlayReady クライアント 3.0 (注 3 を参照) |
✔ | ✔ | ✔ | |
PlayReady クライアント 2.5 (注 2 を参照) |
✔ | ✔ | ||
PlayReady クライアント 2.0 (注 2 を参照) |
✔ | ✔ | ||
PlayReady クライアント 1.0 (注 1 を参照) |
✔ |
注意
- (4) Xbox One バージョン 1709 以降は PlayReady 4.X クライアントです。
- (3) すべてのバージョンWindows 10、Xbox One バージョン 1703 以下は PlayReady 3.X クライアントです。 2017 以降にリリースされた最新の Windows 以外のデバイス (スマート テレビなど) は、PlayReady 3.X クライアントです。
- (2) Silverlight と Windows 8、8.1 は PlayReady 2.X クライアントです。 2011 年から 2017 年の間にリリースされた Windows 以外のほとんどのデバイス (スマート テレビなど) は、PlayReady 2.X クライアントです。
- (1) 2008 年から 2011 年の間にリリースされたほとんどの Windows 以外のデバイス (スマート テレビなど) は、PlayReady 1.X クライアントです。
PlayReady ヘッダー v4.2 の例を次に示します。
<WRMHEADER
version="4.2.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
<KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
ALGID (アルゴリズム識別子) は KID 要素のプロパティであり、コンテンツの暗号化に使用された暗号化アルゴリズムを指定します。 PlayReady ヘッダー バージョン 4.2 以降では、ALGID が必要であり、"AESCTR" または "COCKTAIL" に設定する必要があります。 ただし、バージョン 4.3 以降では、ALGID を値 "AESCBC" に設定することもできます。 次の例は、ALGID 値が "AESCBC" に設定された PlayReady ヘッダー バージョン 4.3 を示しています。
<WRMHEADER
version="4.3.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"/>
<KID VALUE="tuhDoKUN7EyxDPtMRNmhyA==" ALGID="AESCBC"/>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
次の図は、ライセンス要求が PlayReady ヘッダーに基づいており、ALGID が指定されているコンテンツ フローを示しています。
ALGID が見つからない
PlayReady ヘッダー バージョン 4.3 以降では、ALGID が見つからない可能性があります。 次の例は、ALGID 値がない PlayReady ヘッダー バージョン 4.3 を示しています。
<WRMHEADER
version="4.3.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="/>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
次の図は、ライセンス要求が CDMi モジュールを使用していて、ALGID がないコンテンツ フローを示しています。
Note
各 PlayReady ヘッダーには、次の情報が含まれる場合があります。
- 暗号化の種類は 1 つだけです。 たとえば、ALGID="AESCTR" の場合、ヘッダーのすべてのキーが CTR モードで使用されます。 ALGID="AESCBC" の場合、このヘッダーのすべてのキーが CBC モードで使用されます。
- ALGID がない場合、このヘッダーのすべてのキーはカウンター モードまたは暗号ブロック チェーンで使用されますが、値はヘッダーに挿入されません。
- PlayReady ヘッダー v4.3 を使用して v4.0 より下のライセンス サーバーにライセンス取得要求を行うと、例外がスローされます。
- ライセンス応答には 1 つまたは複数のライセンスを含めることができます。各ライセンスには 1 つのキーと任意の数のポリシーが含まれます。
ALGID 値がない理由
Microsoftでは、暗号化機能は、コンテンツの処理時に含まれるのと同じ ALGID 値を PlayReady ヘッダーに常に含める必要があります。
標準シナリオでは、暗号化機能によってコンテンツが暗号化され、コンテンツに PlayReady ヘッダーが生成されます。 暗号化器は、暗号化に使用した AES モードを認識します。そのため、PlayReady ヘッダーの ALGID プロパティにこの情報が含まれます。 クライアントは、実際のコンテンツから解析された PlayReady ヘッダーに基づいてライセンス要求を開始するため、ALGID 値が存在し、有効です。
一部のシナリオでは、クライアントは単純な KID 値 (128 ビット GUID) に基づいてライセンス要求を開始します。 この場合、ライセンス要求に挿入された PlayReady ヘッダーの ALGID 値が見つかりません (指定なしとも呼ばれます)。 1 つの例として、クライアントが HTML5 EME API を使用してライセンス要求を行う場合があります。
不足している ALGID をクライアントが処理する方法
クライアントが着信 PlayReady ヘッダーに基づいてライセンス要求を開始した場合、ライセンス取得チャレンジには PlayReady ヘッダーのコピーが含まれているため、ライセンス要求の ALGID 値にヘッダー内の値が反映されます。 この場合、次のようになります。
- すべての PlayReady Headers v4.2 以下では、ALGID 値が必要であり、有効である必要があります。
- PlayReady Headers v4.3 以降では、ALGID 値が存在し、有効であるか、または欠落している可能性があります。
不足している ALGID をサーバー SDK で処理する方法
ライセンス応答を通じて配信されるすべてのライセンスには、有効な ALGID 値を含める必要があります。
受信ライセンス要求で ALGID が指定されていない場合、ライセンス サーバーはサービスのバックエンドからこの情報を取得し、ライセンス応答に適切な値を設定する必要があります。
初期化ベクトル (IV)
PlayReady バージョン 3.3 以前では、CTR モードでは 64 ビット IV (8 バイトの IV) のみがサポートされています。 PlayReady バージョン 4.0 以降では、64 ビットと 128 ビットの両方の IV (8 バイトおよび 16 バイトの IV) が CTR モードと CBC モードの両方でサポートされています。
例 :
- CBC モードで 128 ビットの IV を頻繁に使用する HLS 準拠ストリームがサポートされるようになりました。
- CTR モードで 128 ビットの IV を使用する一部の HbbTV 準拠ストリームがサポートされるようになりました。
制限事項
- PlayReady ヘッダーでは、すべての KID 要素に対して 1 つの ALGID 値のみを使用する必要があります。 つまり、資産のさまざまなトラックと品質を暗号化するために使用されるすべてのキーは、AES CTR または AES CBC である必要があります。 ALGID がすべての KID 要素に存在しない場合は、すべての KID 要素から欠落している必要があります。
- PlayReady バージョン 4.4 より前のバージョンでは、受信クライアント証明書が Windows で SL2000 が例外をスローしたときに、CBC キーを使用してライセンスを生成しました。 これは、Windows クライアントが SL3000 ユニットでのみ CBC をサポートしているためです。 ただし、このクライアントが PlayReady バージョン 4.0 最小であり、CBC モードのサポートを宣言している場合は、CBC キーを持つライセンスを SL2000 クライアントに配信できる場合があります。
- 受信クライアント証明書が 4.0 より前の Porting Kit バージョンを使用するデバイスである場合、CBC キーを使用してライセンスを生成すると、例外がスローされます。
- 受信ライセンス要求が AES CBC のサポートを示していない場合に CBC キーを使用してライセンスを生成すると、例外がスローされます。
重要
サービスは、同じ {KID, Ck} を使用して CTR モードおよび CBC モードで 1 つのコンテンツを暗号化してはなりません。
- 機能上の理由から、{KID、Ck、AESCTR} と {KID、Ck、AESCBC} の両方のライセンスを取得しているクライアントは機能しません。
- 堅牢性の理由から、CBC モードと CTR モードの両方で同じキーで暗号化された同じコンテンツにアクセスできる攻撃者は、承認なしでコンテンツをより簡単に復号化できます。