キー ID とキー ID (KID)
PlayReady によって保護されるすべてのメディア ファイルには PlayReady オブジェクト (PRO) があり、PlayReady に必要な情報がいくつか含まれています。 これはファイルの コンテンツ ヘッダー にあります。たとえば、ビデオトラックやオーディオトラックのメタデータも含まれている場合があります。
各 PRO 内には PlayReady ヘッダーがあります。このヘッダーは、格納されているコンテンツのライセンスを検索または取得するために必要な情報をクライアントに提供します。 PlayReady ヘッダーは次のようになります。
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
<KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
</DATA>
</WRMHEADER>
関心のある部分は、1 つ以上<KID>
の<KIDS>
要素を含む要素です。 KID (キー ID) には、クライアントがサーバーに対応するキーを要求するために使用するグローバル一意識別子 (GUID) と、ファイルの暗号化解除に使用される ALGID が含まれます。 KID は PRO に含まれているため公開されていますが、キー自体はサービスのシークレットであり、キーと KID の関係はサービスにのみ認識されます。
キーを生成してコンテンツを暗号化する
PlayReady システムのコンテンツ暗号化キーは、AES-128 CTR および AES-128 CBC キーです。 コンテンツを暗号化するサービスは、新しい KID と新しいコンテンツ キーを生成します。 KID が PRO に挿入され、コンテンツのビデオ フレームとオーディオ フレームがコンテンツ キーで暗号化されます。 次の図は、キーがどのように生成され、コンテンツを暗号化するために使用されるかを示しています。
KID とキーを生成するには、次の 2 つの方法があります。
- サービスが各 KID とキー値をランダムに生成して格納するキー管理システム (KMS) を使用して、クライアントによって提供される KID に対応するキー値を単純に検索できます。
- PlayReady キー シード メカニズムの使用。 このメカニズムを使用して、サービスはキー シード (30 バイトのランダム値) と呼ばれる定数値を決定し、キーを必要とするコンテンツごとにランダムな KID を生成します。 Server SDK を使用すると、キーの 128 ビット、またはキー シードと KID を指定してキーを生成できます。 キーは、 ここで指定した PlayReady アルゴリズムによって推論されます。
キーを生成する方法に関係なく、キーが正しい KID に対応していることを確認し、コンテンツを暗号化できる必要があります。
コンテンツのライセンスを配信する
クライアントは、ライセンス要求を行うと、コンテンツの PlayReady ヘッダーをライセンス発行者に送信します。 ライセンス発行者は、KID を抽出し、前述のいずれかの方法を使用して対応するキー値を決定します。キー シード メカニズムを使用する場合は、KID とキー シードに基づいてキーを再生成するだけです。 その後、このキーを含むライセンスが生成され、 ライセンス応答でクライアントに返送されます。
たとえば、ビデオ ファイルがあるとします。 このコンテンツのパッケージャーは、ランダムな KID 123
を生成し、ファイルの PlayReady ヘッダーに挿入します。 また、パッケージャーは、KID 123
に対応するランダムなキー値ABC
を生成し、両方をKMSに格納します。 パッケージャーは、ファイルを暗号化するための正しいキーをKMSに要求し、キーを使用してファイルを暗号化しますABC
。 顧客がファイルを再生しようとすると、クライアントはライセンス発行者に KID 123
に対応するライセンスを要求します。 ライセンス発行者は、KMSで KID を検索し、キーABC
を含むライセンスで応答します。これにより、クライアントはファイルのロックを解除でき、顧客はそれを監視できます。
注意
ライセンス発行者によってクライアントに送信されたライセンス (この例では、キー ABC
を含むライセンス) は暗号化されます。攻撃者はキー値を傍受できません。
メディア ファイルの保護に使用されるキーとライセンス内のキーは同じです。そのため、コンテンツ パッケージャーとライセンス発行者は、指定されたメディア ファイルに対してまったく同じキーを取得または生成できる必要があります。 これを実現するには、キー シードを使用してキーを生成する場合は、コンテンツ パッケージャーとライセンス発行者の間で共有する必要があります。
ファイルまたはトラック間でキーを共有する
実際のキーが複数のドアのロックを解除できるのと同様に、技術的には、1 つの PlayReady キーを使用して、1 つのファイル内の複数のトラック、または資産のコレクション内の複数のファイルのロックを解除することができます。 パッケージ化プロセス中、コンテンツ パッケージャーは複数のトラックまたは複数のメディア ファイルに同じキー識別子を指定でき、それらすべてに同じキーが使用されます。
たとえば、4K、HD、SD のビデオ トラックと複数のオーディオ トラックを備えたマルチ品質のビデオ アセットでは、暗号化ツールはトラックごとに 1 つのキー、またはすべてのトラックに対して 1 つのキーを柔軟に定義できます。
クライアントには、復号化する権限を持つ各キーのライセンスが必要です。 複数のライセンスの配信は、ライセンス サーバーが 1 つのライセンス応答で実行できることに注意してください。
複数のトラックを持つ 1 つの資産では、コンテンツを管理するサービスによって、次の条件に基づいて、すべてのトラックに対して 1 つのキーまたは各トラックのキーの間で決定が行われます。
- キーが増えるほど複雑になりますが、ライセンス配信時に、特定のクライアントの暗号化解除を許可するサービスの追跡を指定できます。
- キーが少ないほど複雑ではありませんが、ライセンス配信時に、特定のクライアントの暗号化解除を許可するサービスの追跡を指定することはできません。
- クライアントによっては、1 つの資産に対して複数のキーをサポートしないという制限がある場合があります。
注意
PlayReady キーは複数のデジタル メディア ファイルのロックを解除できますが、Microsoft はこれに強く反対しています。 すべてのファイルで一意のキーを使用すると、同じキーでファイルを保護するよりもセキュリティが強化されます。
ライセンス応答でのライセンスのスタック
また、1 つのライセンス応答で複数のライセンスを保持できるため、複数のキーを使用して、1 つのトランザクションで複数のファイルまたはトラックのロックを解除できます。 これは、複数のライセンスに対して複数の応答を作成するよりも効率的です。これは、1 つのトランザクションのみが含まれるためです。 これは、さまざまなシナリオで役立ちます。
- 1 つのメディア ファイルは、複数のキーを使用して暗号化されます。 たとえば、ビデオ トラックは Key1 を使用して暗号化され、オーディオ トラックは Key2 を使用して暗号化されます。 クライアントが KID1 のライセンスを要求すると、ライセンス サーバーは KID1 と KID2 のライセンスを含むライセンス応答を発行するため、クライアントにはファイルのビデオトラックとオーディオトラックを復号化するためのすべてのキーがあります。
- アルバム上の各曲は異なるキーを使用して暗号化されますが、顧客はすべての曲の権利を取得しています。 顧客が最初の曲の再生を開始すると、ライセンス サーバーはアルバムの曲ごとに 1 つのライセンスを含むライセンス応答を発行するため、クライアントはアルバム全体をシームレスに再生するために必要なすべてのキーを持ちます。
- ライブ テレビのチャンネルのキーは、24 時間ごとに変更される予定です。 再生が開始されると、サーバーは現在のキーのライセンスを含むライセンス応答を送信しますが、次のキーを持つライセンスも送信するため、キーが変更されると、クライアントは既に次のキーを持ち、変更がシームレスに行われます。