[RMS] IpcSetLicenseProperty 関数と ERD (Encrypted Rights Data) Type の関係

こんにちは。
RMS サポート担当の若狭です。

いつもMicrosoft製品をご愛顧いただきまして、誠にありがとうございます。
本記事では、RMS SDK 2.1 をご利用の皆様に向け、IpcSetLicenseProperty 関数と、ERD (Encrypted Rights Data) Type の関係について解説させていただきます。

まずは、IpcSetLicenseProperty 関数と ERD Type に関する説明を以下に記載いたします。
その後、この関数が ERD Type に与える影響について解説致します。

 

目次:
--------------
1. IpcSetLicenseProperty と ERD
2. ERD (Encrypted Rights Data) Type
3. IpcSetLicenseProperty 関数利用時の ERD Type への影響
--------------

 

1. IpcSetLicenseProperty と ERD
========================

IpcSetLicenseProperty は、暗号化時に指定するライセンス (IPC_LICENSE_HANDLE) を編集する際に利用します。
このライセンスには、ユーザーに与えられる権利情報や有効期限等の情報が含まれ、編集したライセンスは、IpcfEncryptFile 等の暗号化関数に指定して利用します。

 

<IpcSetLicenseProperty function>

https://msdn.microsoft.com/ja-jp/library/hh535271(v=vs.85).aspx

 

この情報は、暗号化時に発行ライセンス (PL) の一部である Encrypted Rights Data (ERD) としてコンテンツに埋め込まれます。

erd01

<Online Signing XML Example>

https://technet.microsoft.com/ja-jp/cc542501
※一覧の “The content key” が ERD に該当します。

<IpcfEncryptFile function>

https://msdn.microsoft.com/ja-jp/library/windows/desktop/dn133059(v=vs.85).aspx

 

2. ERD (Encrypted Rights Data) Type
============================

暗号化時のライセンス (IPC_LICENSE_HANDLE) を作成するには、IpcCreateLicenseFromTemplateId もしくは IpcCreateLicenseFromScratch 関数を使用します。
IpcCreateLicenseFromTemplateId は権利ポリシーテンプレートをもとに、IpcCreateLicenseFromScratch は空の状態からライセンスを作成します。
この時、暗号化時のライセンスが権利ポリシーテンプレートから作成されたものであるか、という情報も、ERD 上のエントリのひとつとして記録されます。
そのエントリが、ERD Type です。

階層としては、以下のようになります。

erd02

 

IpcCreateLicenseFromTemplateId で権利ポリシーテンプレートから作成されたライセンスで暗号化された場合には、この値が "Microsoft Official Rights Template"、その他の場合には "Microsoft Rights Template" となります。

復号化の際に、RMS サーバーはこの値をチェックし、権利ポリシーテンプレートによる暗号化と判断された場合には、当該のテンプレートの現在の権利情報に基づいた EUL を発行します。
それ以外であると判断された場合には、ERD 内に定義された権利情報のみを基に EUL を発行します。

 

<2.2.9.8 Encrypted Rights Data>
https://msdn.microsoft.com/en-us/library/cc243280.aspx
--------------------------------------------------------------------------------
[[- erdtype -]]: MUST be the type of ERD. If the ERD was generated based on
an enterprise rights template, then this value MUST be "Microsoft Official Rights Template".
Otherwise this value MUST be "Microsoft Rights Template".
--------------------------------------------------------------------------------

<IpcCreateLicenseFromTemplateID function>

https://msdn.microsoft.com/en-us/library/hh535257(v=vs.85).aspx

<IpcCreateLicenseFromScratch function>

https://msdn.microsoft.com/ja-jp/library/windows/desktop/hh535256(v=vs.85).aspx

 

3. IpcSetLicenseProperty 関数利用時の ERD Type への影響
============================================

IpcCreateLicenseFromTemplateId により作成されたライセンスを、IpcSetLicenseProperty 関数を使用して編集した場合、編集するプロパティによっては、ERD Type が "Microsoft Rights Template" に変更される場合があります。
これは、ERD Type が ”権利ポリシーテンプレートから直接ライセンスを作成して暗号化したかどうか” を判断するためのエントリであるためです。
権利ポリシーテンプレートより作成されたライセンスであっても、権利ポリシーテンプレートにより定義されるべき情報等を編集した場合には、権利ポリシーテンプレートから直接作成したライセンスではない、と判断されます。

上記の結果を確認するには、IpcGetLicenseProperty 関数を使用し、”IPC_LI_DESCRIPTOR” プロパティを取得します。
取得された “IPC_TEMPLATE_INFO” の、”fFromTemplate” フラグの状態を確認することで、テンプレートから作成されたライセンスとして機能しているかどうかが分かります。
fFromTemplate フラグが TRUE の場合には権利ポリシーテンプレートによる暗号化 (Microsoft Official Rights Template), FALSE の場合にはそれ以外 (Microsoft Rights Template) となります。

 

<IPC_TEMPLATE_INFO structure>

https://msdn.microsoft.com/en-us/library/hh535279(v=vs.85).aspx
--------------------------------------------------------------------------------
fFromTemplate
Specifies whether the license was created directly from a template (for example, enumerated using IpcGetTemplateList).
The property is a BOOL and is TRUE if the license was created directly from a template, otherwise FALSE.
--------------------------------------------------------------------------------

<IpcGetLicenseProperty function>

https://msdn.microsoft.com/en-us/library/hh535265(v=vs.85).aspx

 

前述の通り、ERD Type が "Microsoft Rights Template" となった状態で暗号化されたファイルは、権利ポリシーテンプレートによる権利の定義のチェックが行われません。
一度 EDR Type が "Microsoft Rights Template" の状態で暗号化されたファイルに対して権利ポリシーテンプレートの変更を反映するには、再度暗号化を行っていただく必要がございます。
IpcSetLicenseProperty 関数にてライセンスの情報を編集される際には、十分にご注意ください。

IpcSetLicenseProperty にて編集することのできるライセンスのプロパティは、以下の参考情報に記載があります。

 

<License property types>

https://msdn.microsoft.com/ja-jp/library/hh535287(v=vs.85).aspx

 

なお、本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。
何卒ご留意いただけますようお願い申し上げます。