(57)【要約】【課題】秘匿化の向上に有利なデジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置を提供する。【解決手段】実施形態によれば、デジタルコンテンツの保護方法は、暗号化されたコンテンツ（Protected Content）７０と共に、少なくとも暗号化された保護プログラム鍵（Protected Program Key）６７、保護コンテンツ鍵（Protected Content Keys（Ck0e,Ck1e,Ck2e,,,））６９、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コード（（C1e,C2e,,,）を含む保護コード（Protected Code）６８を配布する。【選択図】図１６
2012084071.tif 000002
【特許請求の範囲】
【請求項１】
暗号化されたコンテンツと共に、暗号化された保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを配布する
デジタルコンテンツの保護方法。
【請求項２】
前記保護コードは、前記コンテンツ再生装置毎に共通の共通オペレーションコード仕様に従って設計された共通命令コードを更に含む
請求項１に記載のデジタルコンテンツの保護方法。
【請求項３】
前記個別命令コードを、異なる前記固有オペレーションコード仕様に従って設計された前記コンテンツ再生装置または前記コンテンツ再生装置群では導出不可能なプログラム鍵によって暗号化する
請求項１または２に記載のデジタルコンテンツの保護方法。
【請求項４】
前記プログラム鍵を、前記コンテンツ再生装置の固有情報を用いて導出される鍵によって暗号化する
請求項３に記載のデジタルコンテンツの保護方法。
【請求項５】
前記共通命令コードを、任意の前記コンテンツ再生装置群で導出可能なプログラム鍵によって暗号化する
請求項２乃至４のいずれか１項に記載のデジタルコンテンツの保護方法。
【請求項６】
暗号化されたコンテンツと共に配布された、暗号化された保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを復号する
デジタルコンテンツの復号方法。
【請求項７】
前記保護コードに更に含まれる前記コンテンツ再生装置毎に共通の共通オペレーションコード仕様に従って設計された共通命令コードを復号化する
請求項６に記載のデジタルコンテンツの復号方法。
【請求項８】
前記個別命令コードを、前記固有オペレーションコード仕様に従って設計された前記コンテンツ再生装置または前記コンテンツ再生装置群で導出可能なプログラム鍵によって復号化する
請求項６または７に記載のデジタルコンテンツの復号方法。
【請求項９】
前記プログラム鍵を、前記コンテンツ再生装置の固有情報を用いて導出される鍵によって復号化する
請求項８に記載のデジタルコンテンツの復号方法。
【請求項１０】
前記共通命令コードを、任意の前記コンテンツ再生装置群で導出可能なプログラム鍵によって復号化する
請求項７乃至９のいずれか１項に記載のデジタルコンテンツの復号方法。
【請求項１１】
暗号化されたコンテンツと共に配布された、暗号化された保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを再生する処理部を具備する
デジタルコンテンツの再生装置。
【請求項１２】
前記保護コードは、前記コンテンツ再生装置毎に共通の共通オペレーションコード仕様に従って設計された共通命令コードを更に含む
請求項１１に記載のデジタルコンテンツの再生装置。
【請求項１３】
前記個別命令コードを、前記固有オペレーションコード仕様に従って設計された前記コンテンツ再生装置または前記コンテンツ再生装置群で導出可能なプログラム鍵によって復号化する
請求項１１または１２に記載のデジタルコンテンツの再生装置。
【請求項１４】
前記プログラム鍵を、前記コンテンツ再生装置の固有情報を用いて導出される鍵によって復号化する
請求項１３に記載のデジタルコンテンツの再生装置。
【請求項１５】
前記共通命令コードを、任意の前記コンテンツ再生装置群で導出可能なプログラム鍵によって復号化する
請求項１２乃至１４のいずれか１項に記載のデジタルコンテンツの再生装置。
【請求項１６】
暗号化されたコンテンツと共に配布された、暗号化された保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを記憶する
デジタルコンテンツの記憶媒体。
【請求項１７】
前記保護コードは、前記コンテンツ再生装置毎に共通の共通オペレーションコード仕様に従って設計された共通命令コードを更に含む
請求項１６に記載のデジタルコンテンツの記憶媒体。
【請求項１８】
前記個別命令コードは、異なる前記固有オペレーションコード仕様に従って設計された前記コンテンツ再生装置または前記コンテンツ再生装置群では導出不可能なプログラム鍵によって暗号化される
請求項１６または１７に記載のデジタルコンテンツの記憶媒体。
【請求項１９】
前記プログラム鍵は、前記コンテンツ再生装置の固有情報を用いて導出される鍵によって暗号化される
請求項１８に記載のデジタルコンテンツの記憶媒体。
【請求項２０】
前記共通命令コードは、任意の前記コンテンツ再生装置群で導出可能なプログラム鍵によって暗号化される
請求項１７乃至１９のいずれか１項に記載のデジタルコンテンツの記憶媒体。
【請求項２１】
コンテンツと共に、保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを暗号化させる
デジタルコンテンツの暗号装置。
【請求項２２】
前記保護コードは、前記コンテンツ再生装置毎に共通の共通オペレーションコード仕様に従って設計された共通命令コードを更に含む
請求項２１に記載のデジタルコンテンツの暗号装置。
【請求項２３】
前記個別命令コードを、異なる前記固有オペレーションコード仕様に従って設計された前記コンテンツ再生装置または前記コンテンツ再生装置群では導出不可能なプログラム鍵によって暗号化させる
請求項２１または２２に記載のデジタルコンテンツの暗号装置。
【請求項２４】
前記プログラム鍵を、前記コンテンツ再生装置の固有情報を用いて導出される鍵によって暗号化させる
請求項２３に記載のデジタルコンテンツの暗号装置。
【請求項２５】
前記共通命令コードを、任意の前記コンテンツ再生装置群で導出可能なプログラム鍵によって暗号化させる
請求項２２乃至２４のいずれか１項に記載のデジタルコンテンツの暗号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
デジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置に関する。
【背景技術】
【０００２】
著作権保護方式は、一般に著作物であるコンテンツを暗号化した形式にて配布する方法を定めている。また、コンテンツの暗号化に用いる暗号鍵は、秘匿情報であるため、暗号鍵自身も更に他の暗号鍵で暗号化されるなどをし、違法コピー防止などがなされている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００８／０１０１６０４号
【非特許文献】
【０００４】
【非特許文献１】インターネット＜URL：http://www.cryptography.com/public/pdf/SelfProtectingContent.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コンテンツの秘匿性の向上に有利なデジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置を提供する。
【課題を解決するための手段】
【０００６】
実施形態によれば、デジタルコンテンツの保護方法は、暗号化されたコンテンツと共に、暗号化された保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを配布する。
【図面の簡単な説明】
【０００７】
【図１】比較例に係るＡＡＣＳのコンテンツ保護手順を示す図。
【図２】比較例に係るMKBによる鍵の無効化について説明するための図。
【図３】比較例に係るSKBによる鍵の無効化について説明するための図。
【図４】第１実施形態に係るバーチャルマシンを用いたＳＰＤＣ技術の再生装置を示すブロック図。
【図５】第１実施形態に係るバーチャルマシンの構造例を示すブロック図。
【図６】第１実施形態に係る命令セット（Instruction Set）を示す図。
【図７】第１実施形態に係る命令フォーマット（Instruction Format）を示す図。
【図８】第１実施形態に係る命令テーブル（Instruction Tables）を示す図。
【図９】第１実施形態に係る命令テーブルを記憶する再生装置の例を示す図。
【図１０】第１実施形態に係るコンテントコードの一生成方法を示す図。
【図１１】第１実施形態に係るコンテントコードの一生成方法を示す図。
【図１２】第１実施形態に係るコンテントコードの一生成方法を示す図。
【図１３】第１実施形態に係るコンテントコードの一生成方法を示す図。
【図１４】第１実施形態に係るコンテントコードの一生成方法を示す図。
【図１５】第１実施形態に係るプログラム鍵を説明するための図。
【図１６】第１実施形態に係る暗号化処理（デジタルコンテンツ保護処理）を説明するためのフロー図。
【図１７Ａ】第１実施形態に係る暗号化処理後の記憶媒体の一例を示す図。
【図１７Ｂ】第１実施形態に係る暗号化処理後の記憶媒体の一例を示す図。
【図１８】第１実施形態に係る復号化処理を説明するためのフロー図。
【発明を実施するための形態】
【０００８】
著作権保護方式には、特定の企業が仕様を定めたプロプラエタリ仕様や、複数の企業等から構成される団体が定めたデファクト標準仕様などが存在する。著作権保護方式の運用については、暗号鍵等は秘匿情報とするが方式は公開するという場合のほか、著作権保護方式自体も秘匿情報とする場合などもある。いずれの場合においても、著作権保護方式に対応した再生装置を製造するためには、暗号鍵等の秘密情報やコンテンツ復号仕様を著作権保護方式管理団体から入手する必要がある。再生装置はコンテンツ復号仕様に則り設計・製造され、暗号鍵を容易に露見しない形で組み込んで販売される。
【０００９】
しかしながら、近年では、再生装置内やその他の経路を通じて暗号鍵を取得し、コンテンツの不正コピーに利用する事象が生じている。例えば、ＤＶＤ（Digital Versatile Disc）における著作権保護方式であるＣＳＳ（Content Scramble System）解除ソフトや、Blu-Ray Discにおける著作権保護方式であるＡＡＣＳ（Advanced Access Content System）解除ソフトなどは、不正に入手した暗号鍵を用いることで、コンテンツの不正入手や配布に利用されている。
【００１０】
このため、上記著作権保護方式における追加のコンテンツ不正利用対策として、コンテンツとともにコンテンツセキュリティーポリシーや復号処理を実行するためのデータ処理・演算プログラム（以下、コンテントコードと呼ぶ）を合わせて提供し、再生装置仕様として前記コンテントコードを処理するバーチャルマシンを規定することで、通常著作権保護方式において画一的に規定されていることによる再生装置依存であったセキュリティー処理の少なくとも一部を更新可能なシステムとする技術も利用されている。
【００１１】
しかしながら、上記追加のコンテンツ保護を施した場合であっても、脆弱性を持った機器からコード実行環境、コンテントコードやバーチャルマシン等の構造が一旦露見してしまうと、全ての環境においてコンテンツ保護処理の更新によるセキュリティー上の効果がなくなってしまう。一方で、バーチャルマシン等の構造を規定せず、全てを独自の個別仕様とした場合、装置の処理環境を全て把握した上でコンテントコードを作成する必要があり、生産性および互換性が低減するという傾向もある。
【００１２】
以下、実施形態について図面を参照して説明する。尚、この説明においては、全図にわたり共通の部分には共通の参照符号を付す。
【００１３】
［比較例］  
まず、図１乃至図３を用い、下記実施形態と比較するために、比較例について説明する。
【００１４】
＜ＡＡＣＳ方式のコンテンツ保護＞
図１は、再生専用型Blu-Ray Discなどで用いられているＡＡＣＳのコンテンツ保護手順を示したものである。  
図示するように、ディスク製造者（Disc Manufacturer）１００は、著作権保護管理機構から、コンテンツ暗号化に使われるメディア鍵を元にデバイス鍵群によって生成したMKB（Media Key Block）、メディア鍵（Km）、KCD（Key Conversion Data）等を共に提供される。ディスク製造者１００は、コンテンツ及びタイトル鍵（Kt）等をコンテンツ著作権者から受け取り、Ktを暗号鍵としてコンテンツを暗号化する。更に、Ktはメディア鍵とVolume IDよりAES-G処理によって生成されたVolume Unique Keyによって暗号化され、暗号化Ktを含むTitle Key Fileが生成される。ここで、AES-G処理とは、AES暗号に基づく一方性関数処理である。Volume IDはディスク製造者１００もしくはコンテンツ著作権者によって生成されたタイトルボリューム固有の値である。
【００１５】
メディア（Media）２００の指定箇所には、上記のようなディスク製造者１００が入手、もしくは処理・生成した「MKB」、「KCD」、「Volume ID」、「Title Key」、「暗号化コンテンツ」が記録される。その後、メディア２００は、上記記憶データと共に、マーケットに供給される。尚、メディア２００は、円盤状のディスクに限らず、ＳＤ（Secure Digital）カードなど任意の物理記憶媒体であれば良い。
【００１６】
再生装置（Player）３００は、上記メディア２００から読み出した上記記録データを元に、復号処理し、コンテンツの再生を行なう。再生装置３００内には、著作権保護管理機構から提供されたデバイス鍵が露見・改竄困難な形で保持されている。再生装置３００は、メディア２００からMKBを読み出し、デバイス鍵によってMKB処理（Process MKB）を行なうことでメディア鍵を導出する。ここで、再生装置３００の保持するデバイス鍵の種類によって、MKB処理の結果導出された値は異なる。ＡＡＣＳでは、再生装置を2つのカテゴリに分けており、一つはEnhanced Robustness Device、もう一つはProactive Renewal Deviceと呼ばれる。前者は、ハードウェア等により強固にデバイス鍵等の秘匿データが守られた再生装置を指す。後者は、PC等のオープンプラットフォーム上で動作するソフトウェアに代表され、ハードウェアベースでデバイス鍵を保護する代わりに定期的なデバイス鍵の更新を義務付けた再生装置を指す。前者の場合、MKB処理によって導出された値に対し、KCDとAES-G処理を行なうことでメディア鍵が導出される。後者の場合、MKB処理によって導出された値そのものがメディア鍵となる。こうして導出されたメディア鍵に対して、Volume IDを用いてAES-G処理を行うことでVolume Unique Keyが導出される。Volume Unique Keyによって、Title Key File中のタイトル鍵が復号され、次いでタイトル鍵によってコンテンツが復号される。
【００１７】
これからもわかるとおり、暗号化・復号化の大本となっているデバイス鍵（Device Keys）は非常に重要な秘匿データである。よって、デバイス鍵が万一流出した場合に備えて、MKBにはデバイス鍵の無効化を可能とする構造が適用されている。MKBは、複数のメディア鍵複製データに対し、複数のデバイス鍵によって各々暗号化を施した暗号化メディア鍵束から構成される。もし、あるデバイス鍵が流出しコンテンツの不正コピーに利用された場合、MKBから流出したデバイス鍵で暗号化されたメディア鍵を除くことで、流出したデバイス鍵を用いたコンテンツの復号を防ぐことができる。これをデバイス鍵の無効化、もしくはリボケーションと呼ぶ。ただし、この無効化情報が適用できるのは新規に製造されたメディアであり、過去に製造・販売されたメディアには適用できない。
【００１８】
＜MKB構造による鍵の無効化＞
次に、図２を用いて、MKBによる鍵の無効化について説明する。上記ＡＡＣＳで用いられているMKBはNNL Treeと呼ばれるツリー構造となっており、各リーフには対応するデバイス鍵(Kd1, Kd2, Kd3…)が存在する。メディア鍵（Km）は各リーフに対応したデバイス鍵によって各々暗号化され、MKBの対応するリーフに割り当てられる。この構造に基づき、各リーフに対応する暗号化されたデバイス鍵やリーフ・デバイス鍵のノード番号などの情報がMKBファイルに格納される。もし、リーフ2に相当するデバイス鍵を無効化する場合、同リーフに対応する暗号化されたメディア鍵をMKBに含めなければよい。
【００１９】
＜SKB構造による鍵の無効化＞
図３は、別のMKB構造（SKB（Sequence Key Block）構造）を示す。上記図２の場合では、いずれのリーフにおいても同一のメディア鍵を元としたデータが割り当てられていたが、図示するSKB構造では、各リーフにはメディア鍵バリアント（Kmv）と呼ばれる異なるメディア鍵が割り当てられている。これは、デバイス毎に入手できるメディア鍵を個別化し、後の暗号処理を異ならせる、などの用途に用いられる。ＡＡＣＳ方式では、コンテンツの一部を複製、複製された各々のコンテンツを別のメディア鍵バリアントに基づく鍵で暗号化し、デバイス毎に再生可能なコンテンツを異ならせることで、デバイス鍵流出時のデバイス特定などに利用されている。
【００２０】
このように、ＡＡＣＳ方式では、万一デバイス鍵が流出した場合、デバイス鍵を特定する手段や、デバイス鍵を無効化する手段が講じられている。しかしながら、脆弱性を持った再生装置や経路が発生した場合、複数の再生装置やその他の経路を通じて、複数のデバイス鍵が流出し、同デバイス鍵を無効化しても別のデバイス鍵によりコンテンツの不正コピーが継続するおそれがある。
【００２１】
［第１実施形態］  
次に、図４乃至図１８を用い、第１実施形態に係るデジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置について説明する。この説明において、上記比較例と重複する部分の詳細な説明を省略する。
【００２２】
＜０．前提（ＳＰＤＣ方式）＞  
まず、前提として、ＳＰＤＣ（Self-Protecting Digital Content）方式による、コンテンツ保護技術について説明する。ＳＰＤＣ方式では、上記鍵の無効化以外のコンテンツ不正利用対策として、コンテンツ保護方式自身を変更・更新する技術である。例えば、ＳＰＤＣ技術によれば、記憶媒体に暗号化されたコンテンツとともにコンテンツセキュリティーポリシーや復号処理を実行するためのデータ処理・演算プログラム（以下、コンテントコードと呼ぶ）を合わせて提供することで、再生装置依存であったセキュリティー処理を更新可能なシステムとすることができる。ＳＰＤＣでは、コンテンツ保護処理の一部を、再生装置内のバーチャルマシン上で動作するコンテントコードによって実現する。ここで、バーチャルマシンとは一般にコンピュータのCPUや記憶装置などのリソースを仮想化したコンピュータを定義し、仮想化したコンピュータを実行するためのアーキテクチャを意味する。
【００２３】
バーチャルマシンは、ハードウェアに依存した機械語とC言語のような高級プログラミング言語の中間に位置する中間言語（バイトコードとも呼ぶ）を入力とし、バーチャルマシン内の翻訳部によって中間言語を機械語に翻訳することで、機械語形式が異なるCPUや記憶装置においても同一のプログラムが実行できる。バーチャルマシンは仮想プロセッサ、仮想メモリを備え、算術・暗号演算などの実行のほか、その他再生装置内のリソースやディスク内のリソースへのアクセス機能なども提供する。
【００２４】
＜１．構成例＞  
１−１．再生装置（Player）  
次に、図４を用い、本例に係るバーチャルマシンを用いたＳＰＤＣ技術を採用する再生装置（Player）について説明する。  
図示するように、本例に係る再生装置は、図中の破線で示す境界線（Player boundary）１０で区画され、プロセッサ１２、翻訳部１７、および実行部・ＲＡＭ１８から構成されるバーチャルマシン３０を含むものである。バーチャルマシン３０の詳細については、後述する。
【００２５】
プロセッサ（Processor）１２は、再生装置固有の環境・設定情報などから構成される再生環境配置データ（Playback Environ. Config.）１１等を読み出し、この再生装置全体の動作を制御する。
【００２６】
翻訳部（Interpreter）１７は、中間言語から機械語への翻訳方法に基づき実装される。さらに、翻訳部１７は、共通命令テーブルと個別命令テーブルとを備える命令テーブル（Instruction Tables）１９を備える。命令テーブル１９の詳細については、後述する。
【００２７】
実行部・ＲＡＭ１８は、ＲＡＭに展開される必要なソフトフェアやデータに基づき、所定の処理を実行する。
【００２８】
バルク復号モジュール（BULK Decryption Module）１３は、記憶媒体２５から読み出したコンテンツもしくは暗号鍵情報などに対する正当な復号キーやパラメータを、プロセッサ１２により指定される。
【００２９】
暗号認証部（Cryptographic Oracles）１４は、暗号認証部自身が保持する、もしくは外部の取り外し可能なセキュリティカード２４にインプリントされたコンテンツにより、この再生装置（Player）が本装置であることの証明を認証できる証拠や、記憶媒体２５から読み出した暗号鍵等の情報、もしくは同暗号鍵等の情報に対して暗号認証部１４が処理した結果などを、プロセッサ１２に与える。セキュリティカード（SIM）２４は、例えば、スマートカード等である。
【００３０】
メディアインターフェイス（Media Interface）１５は、記憶媒体２５からコンテントコード２９を読み出し、バーチャルマシン３０内のＲＡＭ１８にロードする。このように、記憶媒体（Media）２５には、コンテンツ毎のセキュリティーポリシーに応じて記述されたコンテントコード（Content Code）２９が記録される。
【００３１】
出力インターフェイス（Output Interface）１６は、プロセッサ１２、もしくはバルク復号モジュール１３によって処理されたコンテンツを、描画、記録、もしくは再生を目的とする外部プログラム／デバイス（Destination Program/Device）２６に供給する。
【００３２】
バーチャルマシン３０は、コンテンツコード２９内に記述された命令を逐次読み出し、機械語に翻訳して実行する。ここで、バーチャルマシン３０は、再生装置固有の環境・設定情報にアクセスする機能や、再生装置内のＲＡＭ１８、もしくはSIMカード２４のような外部メディアに記録された暗号処理に係る情報や機能にアクセスする機能、及び復号処理モジュールの制御や処理を実行する機能などを有する。これら機能を利用するための命令記述ルールはあらかじめ定義されており、同定義に従ってバーチャルマシン３０の実装及びコンテントコード２９の記述がなされる。  
上記構成により、これまで画一的であったコンテンツ保護処理を、コンテンツコード２９によりコンテンツ毎に異なる保護処理へと拡張することできる。例えば、ＤＶＤのCSSのように、コンテンツ保護構造が全て露見してしまい、一切の対応手段を講じることができない、などといった事態を、拡張可能な保護処理によって回避することができる。これにより、コンテンツ保護処理自身を変更できることの他、再生装置の環境に応じた処理を実行する、例えば、鍵が流出した再生装置に対して追加の処理を設ける、再生装置毎に異なるウォーターマークを付加してコンテンツ個別化を図る等を行うことが可能である。
【００３３】
しかしながら、かかるＳＰＤＣ方式のコンテンツ保護技術においても、バーチャルマシン３０の構造が露見した場合は、対策手段がないという傾向がある。バーチャルマシン３０の構造が露見するということは、上記コンテンツ保護処理を記述したコンテンツコード２９を実行できる環境を不正者が構築できることを意味し、ひいてはコンテンツコード２９の処理内容の解析と把握、実行が可能となってしまう。また、再生装置に応じた処理に関しても、これを回避する手段や、再生装置環境の偽装応答なども実施することができる。すなわち、バーチャルマシン３０を利用したプログラムによるコンテンツ保護処理においては、バーチャルマシン３０の構造の秘匿性が非常に重要となる。
【００３４】
上記のように、コンテンツの保護の観点からは、ＳＰＤＣ方式のような更新可能なコンテンツ保護処理を導入するにあたり、バーチャルマシン３０の構造の秘匿性が重要である。一方で、生産性、互換性の向上の観点からは、コンテンツと再生装置の互換性を保証するする必要があり、コンテンツ自身のフォーマット、コンテンツ保護フォーマット、コンテントコードフォーマット、装置仕様などを標準化し、コンテンツ制作者や装置製造者などが仕様を共有する必要がある。通常、これら標準化及び標準仕様は、標準化仕様策定団体によって策定され、標準化仕様運用団体によってコンテンツ制作者及び装置製造者へ仕様やデータを含んだ必要な情報を提供するという形をとる。これら仕様やデータ等の情報には、上述の鍵情報やバーチャルマシン構造などの秘匿性を要する情報なども含まれており、これらはグローバルシークレットとして扱われる。よって、バーチャルマシンの技術仕様の開示にあたり、同情報は鍵情報と同等以上の守秘義務を開示元である標準化仕様策定団体と開示先の間で締結する必要がある。また、不正者がバーチャルマシン構造を解析するに当たり、手がかりとなる要素として、コンテントコード自身やバーチャルマシンを実装した機器があり、これらも内容が容易に露見しないよう対策を講じる必要がある。
【００３５】
しかしながら、上記に示す対策を講じた場合であっても、バーチャルマシンやコンテントコードの構造が露見する可能性を否定することはできない。同様に秘匿性が求められる鍵情報については、前述のとおり漏洩時の無効化手段が講じられている。一方で、バーチャルマシン３０については、有効な無効化手段が設けられていない傾向がある。これは、コンテントコードの互換性を実現するために単一のバーチャルマシン仕様が利用されており、同仕様を無効化するということは、同仕様に基づき製造された装置全てを無効化するということになるためである。
【００３６】
このため、ある脆弱性をもった機器からバーチャルマシンの構造が把握されてしまった場合、同様のバーチャルマシンの構造を適用している他の全ての機器にも影響が波及してしまう。これに対しては、対抗手段がなく、バーチャルマシンを用いたコンテンツ保護システム自身が無効となってしまう。
【００３７】
そこで、脆弱性をもった機器からの解析内容を他の機器には適用できなくするために、機器もしくは機器群毎にバーチャルマシンの少なくとも一部の処理を個別化してコンテンツ保護を向上でき、かつ生産性および互換性の向上できる点で有利な方法および構成について、以下より具体的に説明する。
【００３８】
１−２．バーチャルマシンの構成例  
次に、図５を用い、本例に係るバーチャルマシン３０の内部構造例を説明する。  
図示するように、バーチャルマシン３０は、再生装置１０の内部にハードウェア、ソフトウェア、もしくはその組み合わせにより実装されている。
【００３９】
コンテントコード（Content Code）２９は、機器内部・外部のストレージ、もしくは通信装置などを経由して再生装置１０に供給される。コンテントコード２９の内部には再生装置１０（バーチャルマシン３０）が解釈できる後述するInstruction Setや同Instruction Setによって処理されるデータなどが存在する。
【００４０】
メモリ（Memory）３１は、コンテントコード２９を保持する。ここで、メモリ３１は、揮発性メモリであってもよいし、不揮発性メモリであってもよい。
【００４１】
Instruction Loader３２は、メモリ３１に保持されたコンテントコード２９内の命令（Instruction）やデータを呼び出す。Instruction Loader３２によって呼び出される各Instructionは、Instruction Processorがそのまま解釈できる形式であってもよいし、図に示すInstruction Converter３４によって変換された後、Instruction Processor３５が解釈できる形式であってもよい。
【００４２】
レジスタ（Register）３３は、演算に用いる値、演算結果の値、メモリ３１に保持されたコンテントコード２９内の次実行Instructionのアドレス値（プログラムカウンタ）等を保持する。レジスタ３３は、Instruction Processor３５のほか、Instruction Loader３２や後述するSystem Call Operation３６などからもアクセスされる。尚、本例では、レジスタ３３は、メモリ３１と別のモジュールとして記載しているが、実際にはメモリ３１の一部をレジスタとして利用してもよい。
【００４３】
Instruction Converter３４は、コンテントコード２９及びその実行環境を難読化するために用いられ、Instructionをロードした時点でのレジスタ３３、もしくは、メモリ３１に保持されている値とロードされたInstructionの値を演算し、Instruction Processor３４が解釈できる形式に変換する機能を持つ。ここで、演算に用いる値が保持されているレジスタ３３、もしくは、メモリ３１のアドレスは、あらかじめ定められた固定アドレスとしてもよいし、ロードしたInstructionの一部に含まれる値、もしくはレジスタ３３、メモリ３１の所定領域に保持されている値によって指し示してもよい。演算方法は、ビット演算、算術演算、暗号演算のいずれであってもよい。演算に用いる値は、一つであってもよいし、複数であってもよい。
【００４４】
Instruction Processor３５は、Instruction Loader３２が呼び出した命令、またはInstruction Converter３４によって変換された命令を受け取る。Instruction Processor３５は、各Instructionの命令コード（Opcode）を、Instruction tables（Opcode-Function）１９を用いて、各実行機能（Function）へと解釈する。ここで、Instruction tables１９は、Hard wiredで実装されている場合、EEPROM（Electrically Erasable and Programmable Read Only Memory）に記録されている場合、バーチャルマシン３０外部の記憶領域にデータとして記録されている場合などがある。Instruction Processor３５は、命令コードに基づき処理を行なう際の記憶領域として、上記レジスタ３３を利用する。
【００４５】
System Call Operation３６は、各Instructionによって、バーチャルマシン３０、もしくは図４の境界線（Player boundary）によって示される再生装置１０内部が持つ暗号機能、利用制御機能、メディアアクセス機能、その他のモジュールアクセス機能により利用されるものである。これら機能は、Instruction Processor３５が、バーチャルマシン３０の各機能を呼び出すためのSystem Callを発行することで利用される。System Call Operation３６の実行に係る入出力のやり取りには、前述のレジスタ３３やメモリ３１が利用される。
【００４６】
Crypt module４１は、暗号化、復号化、乱数生成、一方向性関数、署名処理などの暗号器に基づく演算のほか、別途装置が保持する暗号演算に用いるための固有情報や暗号、復号、署名鍵、証明書などを含んでいても良い。また、Crypt module４１は、それ自身が前述の演算もしくは固有情報を含んでおらず、図４のバルク復号モジュール１３、もしくは暗号認証部１４などの装置３０の外部機能を利用するためのインターフェースであってもよい。
【００４７】
Usage control４２は、再生開始、停止、ディスプレイやその他外部機器への信号出力時のCopy制御情報、マクロビジョンに代表されるアナログコピーガード情報、HDCP（High-bandwidth Digital Content Protection system）やDTCP（Digital Transmission Content Protection）に代表されるデジタルコピーガード情報などの付与等、コンテンツ利用に関わる制御を含んでいても良い。また、Usage control４２は、それ自身が前述の制御情報もしく制御機能を含んでおらず、図４の外部プログラム／デバイス２６などのバーチャルマシン３０の外部機能を利用するためのインターフェースであってもよい。
【００４８】
Media interface４３は、コンテンツ及びコンテンツに係る情報が記録されているメディアに対するアクセスインターフェースであり、メディアはリムーバブルメディア、装置内蔵のメディア、外部装置上のメディアであってもよい。また、Media interface４３は、それ自身が前述のアクセス機能を含んでおらず、図４のメディアインターフェイス１５、記憶媒体２５などのバーチャルマシン３０の外部機能を利用するためのインターフェースであってもよい。
【００４９】
Module interface４４は、上記以外のその他の機能モジュール、例えば、コンテンツデコーダー、装置内蔵の時計、ネットワークインターフェース、USBインターフェース、携帯電話向けSIMカード、クレジットカードなどがある。Module interface４４は、装置内蔵の機能モジュール、もしくは装置のインターフェースを通じて利用可能な外部装置の機能モジュールなどを示す。
【００５０】
１−３．Instruction Set  
次に、図６を用い、上記図５中の本例に係る命令単位（Instruction Set）３９について説明する。  
図示するように、図６には、本例に係る命令単位３９の一例が示されている。Instruction set３９には、メモリ３１やレジスタ３３などのデータロード、加減乗除などの算術演算、AND/OR/XOR/Shiftなどのビット演算などの他、System call operation３６に対応した命令語を示すOpcode（0x01,0x02,0x03等）が含まれる。System call operation３６を示すOpcodeは、レジスタ３３やメモリ３１上の特定領域、もしくはInstructionに含まれる引数もしくは引数によって示されたレジスタ３３やメモリアドレスに置かれた、各System call operation毎に定められたコードセットとともに利用される。
【００５１】
１−４．Instruction Format  
次に、図７を用い、本例に係る命令構成（Instruction format）の例について説明する。
【００５２】
図示するように、命令構成（Instruction format）には、先のOpcodeとともにRS1,RS2,RD,SA,Immediate,Function,PC Offsetなどを示すデータが各Instructionに含まれる。
【００５３】
（ａ）では、32bitのI-typeが示されている。図中のRS1はオペレーションに用いる変数が格納されているレジスタ３３やメモリ３３のアドレスを意味する。RDはオペレーション結果の値を格納するレジスタ３３やメモリ３１のアドレスを意味する。これはDLX Processorなどで用いられているフォーマットを利用した例である。Immediateは、レジスタ３３格納の値ではなく、オペレーションに利用する即時値（直接指定変数）が格納されている領域である。
【００５４】
（ｂ）では、32bitのR-typeが示されている。図中のRS2は、同様に、オペレーションに用いる変数が格納されているレジスタ３３やメモリ３１のアドレスを意味する。
【００５５】
RDは、RDはオペレーション結果の値を格納するレジスタ３３やメモリ３１のアドレスである。SAは、任意用途用スペア領域である。Functionは、追加入出力やその他の拡張条件の指示もしくは利用向けにOpcode毎に必要に応じて定められる拡張関数領域である。
【００５６】
（ｃ）では、32bitのJ-typeが示されている。PC Offsetは、通常はInstruction列が順次実行されるのに対して、特定のInstructionへとジャンプする際などに利用されるプログラムカウンタのアドレスを保持する領域である。プログラムカウンタのアドレスは絶対アドレスであってもよいし、相対アドレスであってもよい。
【００５７】
コンテントコード２９は、上述したSystem call operation３６を含むInstruction set３９及び同Instruction setにより処理・利用されるデータなどから構成される。このように、コンテントコード２９により、データ演算のほか、System call operation３６を通じた装置の各機能の利用とその戻り値に基づく更なる演算処理、条件分岐処理などを実現することで、高度かつ難読なセキュリティー処理を実現することが可能となる。
【００５８】
ここで、上述のように、全ての機器において単一のバーチャルマシン構造を採用した場合、ある脆弱性をもった機器からバーチャルマシンの構造が把握されてしまった場合、同様のバーチャルマシンの構造を適用している他の全ての機器にも影響が波及してしまうという傾向がある。一方で、バーチャルマシンを規定せず、全てを独自の仕様とした場合、装置の処理環境を全て把握した上でコンテントコードを作成する必要があり、生産性、互換性が低減するという傾向がある。
【００５９】
そこで、バーチャルマシン３０の構造を固有化してコンテンツの保護を向上させつつ、生産性、互換性の劣化を防止できる方法および構成について、さらに具体的に説明を進める。
【００６０】
１−５．Instruction Tables  
図８を用い、上記方法および構成に適用される本例に係る命令テーブル（Instruction Tables）の例について説明する。
【００６１】
図示するように、Instraction setのOpcodeと機能割り当てが異なる（ａ）共通命令テーブル（Common Instruction Table）１９−０と、（ｂ）個別命令テーブル（Instruction table #1-#3）１９−１〜１９−３の例が示されている。
【００６２】
（ａ）で示す共通命令テーブル（Common Instruction Table）１９−０は、各装置で共通のInstruction tableである。このように、各装置において共通のコンテントコードとして、Common instruction table１９−０を用いることで、情報量を削減でき、加えて生産性、互換性を向上できる点で有利である。
【００６３】
（ｂ）で示す個別命令テーブル（Instruction table #1-#3）１９−１〜１９−３は、Instraction setの各Opcodeと機能の割り当て関係を示すInstruction tableを装置毎、もしくは装置群毎に少なくとも一部の要素が個別化された命令テーブルである。装置群とは例えば、あるモデル名に属する一群の装置、または、あるメーカ名に属する一群の装置などを意味する。
【００６４】
例えば、Table #1は、OpcodeとしてX(i), X(i+1), X(i+2), …によって示される系列を用いる。Table #2は、OpcodeとしてY(i), Y(i+1), Y(i+2), …によって示される系列を用いる。Table #3は、OpcodeとしてZ(i), Z(i+1), Z(i+2), …によって示される系列を用いる。ここで、各X,Y,Z系列は各々異なるデータ指示子系列である。このように、装置毎、もしくは装置群毎に異なる個別化された命令テーブル１９−１〜１９−３を適用することで、例えばTable #1を実装した装置に脆弱性があり、Table #1の内容が露見した場合でも他のTable #2, #3を用いた装置群には影響を及ぼさないため、コンテンツ保護の向上に対して有利である。
【００６５】
上記のように、本例に係るInstruction tables１９では、個別命令テーブル（Instruction table #1-#3）１９−１〜１９−３によりバーチャルマシン３０を個別化するため、コンテントコードを各バーチャルマシン３０毎に用意し、コンテントと共に配布・記録する必要がある。しかしながら、共通命令テーブル（Common Instruction Tables）１９−０により共通部分のコンテントコードについて共通化させることで、情報量を削減している。
【００６６】
この結果、例えば、バーチャルマシン３０を有する各再生装置が記憶するテーブルは、図９のように示される。テーブルは、例えば再生装置中のＲＯＭ（Read Only Memory）に格納される。
【００６７】
（ａ）に示す再生装置Ａでは、ＲＯＭ中に、共通命令テーブル（Common Instruction Table）１９−０および個別命令テーブル（Instruction table #1）１９−１を格納する。
【００６８】
（ｂ）に示す再生装置Ｂでは、ＲＯＭ中に、共通命令テーブル（Common Instruction Table）１９−０および個別命令テーブル（Instruction table #2）１９−２を格納する。
【００６９】
（ｃ）に示す再生装置Ｃでは、ＲＯＭ中に、共通命令テーブル（Common Instruction Table）１９−０および個別命令テーブル（Instruction table #3）１９−３を格納する。
【００７０】
尚、この例に限らず、例えば、必要に応じて、更に個別命令テーブル（Instruction table #4, #5,,,）を格納しても良いことは勿論である。例えば、コンテンツ再生装置群毎に異なる（例えば、第１群｛再生装置Ａ，再生装置Ｂ｝：個別命令テーブル１９−１，第２群｛再生装置Ｃ｝：個別命令テーブル１９−２等）ように、必要に応じて格納することが可能である。
【００７１】
＜２．コンテントコードの生成方法＞  
次に、図１０乃至図１５を用い、本例に係るコンテントコード２９の生成方法について、説明する。このコンテントコードの生成方法は、ディスク製造者（Disc Manufacturer）１００側により、専用の書き込み装置（暗号装置）により行われるものである。
【００７２】
コンパイラは、上記共通命令テーブル（Common instruction table）１９−０、および各装置もしくは装置群毎に割り当てられた個別命令テーブル（Instruction table #n）１９−ｎを元に、各ソースコードをコンテントコード（C0-C#n）へと変換する。ここで、Common instruction table１９−０によりコンパイルされたコンテントコード（Common Code:C0）を共通コンテントコードとし、個別命令テーブル（Instruction table #n）１９−ｎを元にコンパイルされたコンテントコードを個別コンテントコード（Code #n）と称する。
【００７３】
ソースコード（Source Code）内にはコンテントのセキュリティーポリシーに従った、装置に実行させる処理手順が記載されている。コンパイラは、ソースコードをコンテントコードへと変換する際、必要に応じて、前述したInstruction converter３４における処理向けの変換処理も実行する。生成されたコンテントコード２９は、署名処理のほか、必要に応じて、暗号化やパッケージ化などの配布もしくは記録用の処理がなされる。ここで、署名処理は不正者が作成したコンテントコード２９の実行を防止するために必要な処理であり、再生装置はコンテントコード２９実行前に署名を検証することで不正なコンテントコードであるか否か、また、コンテントコードが改竄されていないか、を判定でき、正当なコンテントコード以外の実行を防止することができる。ここで、署名処理は、RSAやECDSAなどの公開鍵暗号方式に基づき、秘密鍵によって署名が生成され、公開鍵によって署名が検証される方法のほか、AES（Advanced Encryption Standard）などの共通鍵暗号方式に基づき、秘密鍵によってメッセージ認証コード（Message Authentication Code: MAC）が生成され、同秘密鍵によってMACが検証される方法でもよい。後者の秘密鍵は、コンテントコード２９毎に用意される後述のプログラム鍵を用いてもよい。
【００７４】
２−１．共通コード生成の例（ハッキングが発生していない場合）  
図１０は、全ての再生装置について共通の処理を実行させ、かつ、Common instruction table １９−０を用いてソースコードをコンパイルする場合の例である。この場合は、例えば、いずれの再生装置においてもハッキングが生じておらず、従ってCommon instruction table １９−０のみを用いて、共通のセキュリティーポリシーに従った処理を実行させる場合などが考えられる。
【００７５】
図示するように、対応するコンパイラ（Compiler(w/ Intstruction convert)）１３４−０は、共通命令テーブル（Common instruction table）１９−０を元に、ソースコード（Source Code 0）を、共通コンテントコード（Common Code(C0)）６４−０へ変換させる。
【００７６】
続いて、Post processing部１３５は、コード保護のための鍵（Keys for Code Protection）６１を秘密鍵として、共通コンテントコード（Common Code(C0)）６４−０を保護されたコード（Protected Code）６８に処理する。ここで、コード保護のための鍵６１とは、後述するプログラム鍵、あるいは必要に応じて署名鍵等を含む鍵である。
【００７７】
２−２．個別コード生成の例（Common instruction tableのハッキングが生じた場合）  
図１１は、全ての再生装置について共通の処理を実行させるが、再生装置毎に異なる個別命令テーブル（Instruction Table #n）を用いてソースコードをコンパイルする場合の例である。例えば、Common instruction table １９−０がハッキングされ、共通のセキュリティーポリシーに従った処理を実行させる場合などが考えられる。  
図示するように、例えば、共通命令テーブル（Common instruction table）１９−０のハッキングが生じた場合、上記２−１の共通コンテントコード６４−０は生成されず、個別命令テーブル（Instruction Table #n）を用いてソースコードのコンパイルが開始される。
【００７８】
即ち、対応する個別のコンパイラ（Compiler(w/ Instruction convert)）１３４−１〜１３４−４は、個別命令テーブル（instruction table #1-#4）１９−１〜１９−４を元に、共通のソースコード（Source Code）を、個別のコンテントコード（Code #1 - Code #4）６４−１〜６４−４へ変換させる。
【００７９】
続いて、Post processing部１３５は、同様に、コード保護のための鍵（Keys for Code Protection）６１を秘密鍵として、個別のコンテントコード（Code #1 - Code #4）６４−１〜６４−４を保護されたコード（Protected Code）６８に処理する。
【００８０】
２−３．特定のコード生成の例  
図１２は、特定の再生装置（ここでは、instruction table #4に対応する再生装置）に対して異なる処理を実行させ、また、装置毎に異なるInstruction tableを用いてソースコードをコンパイルする場合の例である。例えば、Instruction table #4に基づく処理を行う再生装置にハッキングの疑いが生じた場合などに用いられ、当該再生装置のみに対してSystem call operation３６を通じたハッキング状況の検査やそれに基づく鍵導出処理の選択、停止、コンテンツ再生制御などを行なうことが可能となる。  
即ち、対応する個別のコンパイラ（Compiler(w/Instruction convert)）１３４−４は、個別命令テーブル（instruction table #4）１９−４を元に、ソースコード２（Source Code 2）を、個別のコンテントコード（Code #4）６４−４へ変換させる。
【００８１】
続いて、Post processing部１３５は、同様に、コード保護のための鍵（Keys for Code Protection）６１を秘密鍵として、個別のコンテントコード（Code #4）６４−４を保護されたコード（Protected Code）６８に処理する。
【００８２】
２−４．ソースコード１処理の後にソースコード２を処理する場合  
図１３は、全ての再生装置で共通の処理を実行させてソースコード１（Source Code 1）を共通命令テーブル（Common instruction table）１９−０を用いてコンパイルした後、ソースコード２（Source Code ２）を再生装置毎に異なる個別命令テーブル（Instruction table #1 -#4）を用いてコンパイルする、２つのコンテントコードを組み合わせる場合の例である。例えば、コード生成時にはCommon instruction table １９−０のハッキングは生じていないが、将来的にハッキングが生じることを仮定して、処理の少なくとも一部を、再生装置毎に異なるInstruction table １９−１〜１９−４を用いてコンパイルしたコードに含める場合が考えられる。この場合は、Common instruction table １９−０のハッキングのみで処理の全体を把握することが困難となる。例えば、ソースコード１を実行した後にソースコード２を実行するような分岐命令が存在する場合がこれに相当する。
【００８３】
即ち、上記と同様に、対応するコンパイラ（Compiler(w/ Instruction convert)）１３４−０は、共通命令テーブル（Common instruction table）１９−０を元に、ソースコード１（Source Code 1）を、共通コンテントコード（Common Code(C0)）６４−０へ変換させる。続いて、Post processing部１３５は、コード保護のための鍵（Keys for Code Protection）を秘密鍵として、共通コンテントコード（Common Code(C0)）６４−０を保護されたコード（Protected Code）６８に処理する。
【００８４】
続いて、対応する個別のコンパイラ（Compiler(w/ Instruction convert)）１３４−１〜１３４−４は、個別命令テーブル（instruction table #1-#4）１９−１〜１９−４を元に、ソースコード２（Source Code 2）を、個別のコンテントコード（Code #1 - Code #4）６４−１〜６４−４へ変換させる。続いて、Post processing部１３５は、同様に、コード保護のための鍵（Keys for Code Protection）を秘密鍵として、個別のコンテントコード（Code #1 - Code #4）６４−１〜６４−４を保護されたコード（Protected Code）６８に処理する。
【００８５】
２−５．共通処理の後に装置毎に個別処理を行う場合  
図１４は、例えば、上記図１３に示す２−４と比較して、更に再生装置毎に異なる処理（ソースコード１〜４）を実行させる点で、相違する。このような実行により、再生装置ごとにソースコードが異なるため、特定の再生装置をハッキングした結果露見した処理内容を、他の再生装置に適用することを困難とさせることができる。
【００８６】
即ち、上記と同様に、対応するコンパイラ（Compiler(w/ Instruction convert)）１３４−０は、共通命令テーブル（Common instruction table）１９−０を元に、ソースコード１（Source Code 1）を、共通コンテントコード（Common Code(C0)）６４−０へ変換させる。続いて、Post processing部１３５は、コード保護のための鍵（Keys for Code Protection）を秘密鍵として、共通コンテントコード（Common Code(C0)）６４−０を保護されたコード（Protected Code）６８に処理する。
【００８７】
続いて、対応する個別のコンパイラ（Compiler(w/ Instruction convert)）１３４−１〜１３４−４は、個別命令テーブル（instruction table #1-#4）１９−１〜１９−４を元に、ソースコード１〜４（Source Code 2-4）を、個別のコンテントコード（Code #1 - Code #4）６４−１〜６４−４へ変換させる。続いて、Post processing部１３５は、同様に、コード保護のための鍵（Keys for Code Protection）を秘密鍵として、個別のコンテントコード（Code #1 - Code #4）６４−１〜６４−４を保護されたコード（Protected Code）６８に処理する。
【００８８】
２−６．プログラム鍵（Program key）について  
次に、図１５を用い、プログラム鍵６１について説明する。  
図示するように、プログラム鍵KP0, KP1, KP2, KP3, KP４…（６１−０〜６１−４）は、各々のコンテントコード６４−０〜６４−４の暗号として用いられる。
【００８９】
ここで、プログラム鍵６１−０〜６１−４は、前述のメッセージ認証コードの生成に用いる秘密鍵であってもよい。また、各プログラム鍵６１−０〜６１−４は、各々異なる鍵であってもよいし、少なくとも一部が同一の鍵であってもよいし、また全て同一の鍵であっても良い。プログラム鍵を異ならせた場合、脆弱性を持った装置からプログラム鍵が露見し、当該装置向けの個別コンテントコードの復号がされた場合であっても、他の装置向けの個別コンテントコードの復号はできないため、コンテントコード及びこれを処理するバーチャルマシンの秘匿性には影響を与えない。この場合、プログラム鍵はデバイス固有の鍵やデータに基づき保護されていることが望ましい。詳細については、後述する。
【００９０】
＜３．暗号化処理（デジタルコンテンツ保護処理）＞  
３−１．  
次に、図１６を用い、本例に係る暗号化処理（デジタルコンテンツ保護処理）について説明する。以下に説明する暗号化処理は、例えば、メディアにコンテンツを書き込む事業者側１００により、専用の書き込み装置（暗号装置）が行う処理であり、図１０乃至図１４の処理の何れかを含むものである。
【００９１】
図示するように、本例に係る暗号化処理により、上記コンテントコード２９、コンテント鍵の保護やその他の処理に用いられるプログラム鍵は、デバイス固有のデータもしくは鍵などで暗号化される。最終的には、保護処理がなされたデータ群として、保護されたプログラム鍵６７、保護されたコード６８、保護されたコンテント鍵６９、および保護されたコンテント７０は、電子配信や物理媒体（メディア）に記録された形式で、再生装置向けに配布される。
【００９２】
（ステップＰ０（Generating code (Security policy, etc)））  
セキュリティーポリシーやコンテンツ保護方法に基づいて記されたソースコードを基にして、図１０乃至図１４で説明したコンテントコード生成方法のように、コンテントコード生成部としてのコンパイラ１３４は、コンテントコード（C0,C1,C2,,,）２９を生成する。ここで、図１０乃至図１４のバリエーションで示したように、ソースコードは単一であってもよいし、複数であってもよい。また、生成されるコンテントコードはソースコード毎に単一であってもよいし、異なるInstruction tableによってコンパイルされた複数のコードであってもよい。
【００９３】
（ステップＰ１（Protect Code (w/ or w/c conv.））  
続いて、生成されたコンテントコード２９は、コンテントコード保護部としてのPost processing部１３５により、保護処理が行なわれ、保護コード（Protected Code（C0e,C1e,C2e,,,））６８として処理される。この際、上記のように、プログラム鍵６１が用いられる。ここで、プログラム鍵６１は、前述のとおり、装置固有値に基づく情報６２と保護処理により関連付けられており、同関連付けられた装置向けのコンテントコードに対応するプログラム鍵６１が各々のコンテントコードの保護に用いられる。またこの際、図中の破線で示すように、メディアID/Key、ボリュームID/Key、コンテントID/Key, デバイスID/Keyなどの固有値（Unique Value）７１を保護処理に用いてもよい。更に、前述のInstruction converter３４による処理に対応する難読化処理を行なってもよい。保護されたコンテントコード６８は、ステップＰ６に示すように、暗号化されたコンテンツとして電子配信や物理媒体（メディア）に記録されるなどの形式で再生装置向けに配布される。
【００９４】
（ステップＰ２（Protect Program Key））  
コンテントコードを暗号化するプログラム鍵（Program Keys (Kpc, Kp1, Kp2,,,)）は、装置固有値に基づく情報６２などを用いて、保護処理がなされる。ここで、装置固有値に基づく情報６２とは、装置固有値を直接的に用いる場合の他、装置固有値を用いて導出された間接情報を用いてもよい。関連情報の例としては、装置固有値に基づく情報６２毎に対応するメディア鍵群などが考えられる。
【００９５】
具体例としては、前述のSKBにおけるメディア鍵バリアントが間接情報であり、SKBを処理し、前記メディア鍵バリアントを導出するのに必要なデバイス鍵が装置固有情報などに相当する。また、間接情報の導出には、図中の破線で示すように、メディアID/Key、ボリュームID/Key、コンテントID/Key, デバイスID/Keyなどの固有値（Unique Value）７１を用いてもよい。保護処理がなされたプログラム鍵（Protected Program Key）６７は、ステップＰ６に示すように、暗号化されたコンテンツとして電子配信や物理媒体（メディア）に記録されるなどの形式で再生装置向けに配布される。
【００９６】
（ステップＰ３（Protect Content））  
コンテンツ６６は、コンテント鍵（Content key）６５を用いて保護処理がなされ、保護されたコンテンツ（Protected Content）７０として処理される。  
ここで、コンテントコード２９によってコンテントの少なくとも一部に対し追加の処理をしてもよい。追加の処理はデータの変換、暗号化、置き換え処理などでよい。保護されたコンテンツ７０は、ステップＰ６に示すように、暗号化されたコンテンツとして電子配信や物理媒体（メディア）に記録されるなどの形式で再生装置向けに配布される。
【００９７】
（ステップＰ４（Transform Key））  
コンテントを暗号化するコンテンツ鍵６５は、コンテントコード２９に含まれる鍵変換方式に則り変換され、変換コンテント鍵（Transformed Content key）として変換される。この際、同様に、固有値７１を用いて、追加の処理をしてもよい。
【００９８】
（ステップＰ５（Protect Transformed Content Key）  
続いて、変換された変換コンテント鍵は、保護処理が行なわれ、保護コンテント鍵（Protected Content Keys（Ck0e,Ck1e,Ck2e,,,））６９として処理される。この際、メディアID/Key、ボリュームID/Key、コンテントID/Key, デバイスID/Keyなどの固有値７１を鍵変換処理や保護処理に用いてもよい。ここで、ステップＰ４の鍵変換処理とステップＰ５の保護処理とは順序は逆であってもよく、保護処理後に鍵変換処理を行なってもよい。またいずれか一方の処理がもう一方の処理を包含するといった直列処理接続以外の構造をとってもよい。保護コンテント鍵６９は、ステップＰ６に示すように、電子配信や物理媒体（メディア）に記録されるなどの形式で再生装置向けに配布される。
【００９９】
３−２．物理記憶媒体に記憶された形式  
上記暗号化処理のステップＰ６の結果、暗号化されたコンテンツとして物理記憶媒体（メディア）に記憶される保護されたプログラム鍵６７等は、例えば、図１７Ａ、図１７Ｂのように示される。
【０１００】
図１７Ａに示す例では、記憶媒体（Storage Media）に、暗号化されたコンテンツとして上記暗号化処理が行われた保護プログラム鍵（Protected Program Key）６７，保護されたコード（Protected Code（C0e,C1e,C2e,,,））６８，保護コンテント鍵（Protected Content Keys（Ck0e,Ck1e,Ck2e,,,））６９，および保護されたコンテンツ（Protected Content）７０が記憶される。この記憶媒体は、再生装置向けに配布される。
【０１０１】
図１７Ｂに示す例では、より具体的に、記憶媒体としてＳＤカード（SD Card）（登録商標）の例を示している。ＳＤカードは、メモリコントローラ７６と、不揮発性半導体メモリのＮＡＮＤ型フラッシュメモリ７７とを備える。メモリコントローラ７６は、ＮＡＮＤ型フラッシュメモリ７７の動作全体を制御する。  
ＮＡＮＤ型フラッシュメモリ７７には、暗号化されたコンテンツとして上記暗号化処理が行われた保護プログラム鍵（Protected Program Key）６７，保護されたコード（Protected Code（C0e,C1e,C2e,,,））６８，保護コンテント鍵（Protected Content Keys（Ck0e,Ck1e,Ck2e,,,））６９，および保護されたコンテンツ（Protected Content）７０が記憶される。このＳＤカードは、同様に、再生装置向けに配布される。
【０１０２】
尚、記憶媒体に限らず、ステップＰ６に示したように、例えば、ダウンロード等による電気通信回線を通じた電子配信等の形式により、再生装置向けに配布されても良い。
【０１０３】
＜４．復号化処理＞  
次に、図１８を用い、本例に係る復号化処理について説明する。本例に係る復号化処理は、原則的には、上記図１６で説明した暗号化処理の反対の処理を行うものであり、コンシューマ向けに販売される再生装置（プレイヤー３００側）で実行される処理である。
【０１０４】
（ステップＵＰ０（Electrically delivered and/or Read from Storage））  
暗号化されたコンテンツとして上記電子配信や物理媒体に記録されるなどの形式で、再生装置には、上記暗号化処理が行われた保護されたプログラム鍵６７、保護されたコード６８、および保護コンテント鍵６９、保護されたコンテンツ７０に加え、固有値７１が配布される。固有値（Unique Value）７１は、例えば、メディアID/Key、ボリュームID/Key、コンテントID/Key,、デバイスID/Key等である。固有値７１は、同一、または異なる手段により再生装置へと提供される。
【０１０５】
（ステップＵＰ１（Unprotect Program Key））  
保護プログラム鍵（Protected Program Key）６７は、装置固有値に基づく情報６２を用いて、プログラム鍵（Kp0, Kp#n）６１として復号される。上記のように、この際の復号処理には装置固有値に基づく情報６２が用いられる。
【０１０６】
ここで、装置固有値に基づく情報６２とは、装置固有値を直接的に用いる場合の他、装置固有値を用いて導出された間接情報を用いてもよい。関連情報の例としては、装置固有値に基づく情報６２毎に対応するメディア鍵群などが考えられる。具体例としては、前述のSKBにおけるメディア鍵バリアントが間接情報であり、SKBを処理し、前記メディア鍵バリアントを導出するのに必要なデバイス鍵が装置固有情報などに相当する。また、間接情報の導出には、図中の破線で示すように、メディアID/Key、ボリュームID/Key、コンテントID/Key, デバイスID/Keyなどの固有値（Unique Value）７１を用いてもよい。復号化されたプログラム鍵（Kp0, Kp#n）６１は、後段の復号処理で用いられる。  （ステップＵＰ２（Select ＆ Unprotect Code））  
保護されたコンテントコード（Protected Code（C0e,C1e,C2e,,,））６８は、再生装置のコンテントコード選択部・復号部によって、コンテントコード（C0, C#n）６４に復号される。この際の選択処理には、プログラム鍵６１もしくはデバイス固有鍵７１やデータに付随するコンテントコード選択番号、もしくは事前に定められた選択番号、もしくはその他の手段で提供される選択番号が用いられる。復号処理には上記プログラム鍵６１が用いられる。また、メディアID/Key、ボリュームID/Key、コンテントID/Key, デバイスID/Keyなどの固有値７１を選択もしくは復号処理に用いてもよい。  （ステップＵＰ３（Select ＆ Unprotect Key））  
保護されたコンテント鍵（Protected Content Keys（Ck0e,Ck1e,Ck2e,,,））６９は、再生装置のコンテント鍵選択部・復号部によって復号され、ステップＵＰ４へ受け渡される。
【０１０７】
（ステップＵＰ４（Execute Code (Transform key, etc.)））  
続いて、コンテントコード（C0, C#n）６４は、再生装置のバーチャルマシン（Virtual Machine）３０により、例えば、プログラム鍵６１、変換された鍵（Transformed key, etc）等を用い、コンテント鍵（Content Key）６５を復号する。また、保護されたコンテント（Protected Content）７０がコンテントコード２９によってコンテントの少なくとも一部に対し追加の処理がなされていた場合、それらに対応する復号処理も本ステップにおいてなされる。
【０１０８】
（ステップＵＰ５（Unprotect Content））  
保護されたコンテント（Protected Content）７０は、コンテント鍵（Content Key）６５を用いて、コンテンツ（Content）６６に復号される。
【０１０９】
（ステップＵＰ６（Playback Control (Rendering, etc)））  
復号されたコンテンツ（Content）６６は、必要に応じて、再生装置のバーチャルマシン（Virtual Machine）３０で実行されるコード（Execute Code）により、適宜再生制御がなされる。
【０１１０】
＜５．作用効果＞  
上記第１実施形態に係るデジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置によれば、少なくとも下記（１）および（２）に示す効果が得られる。
【０１１１】
（１）秘匿性の向上に対して有利である。  
上記図１６等に示したように、第１実施形態に係るデジタルコンテンツの保護処理（デジタルコンテンツの暗号処理）では、暗号化されたコンテンツ（Protected Content）７０と共に、少なくとも暗号化された保護プログラム鍵（Protected Program Key）６７、保護コンテンツ鍵（Protected Content Keys（Ck0e,Ck1e,Ck2e,,,））６９、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コード（C1e,C2e,,,）を含む保護コード（Protected Code）６８が配布される。
【０１１２】
このように、コンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が異なる個別化された個別命令コード（C1e,C2e,,,）を含むことで、例えば、個別命令コード（C1e）を用いた再生装置に脆弱性があり、個別命令コード（C1e）の内容が露見した場合であっても、他の個別命令コード（C2e,,,）を用いた再生装置群には影響を及ぼさず、デジタルコンテンツの不正コピー等を防止することができる。このように、デジタルコンテンツ保護を向上でき、秘匿性の向上に対して有利である。
【０１１３】
（２）情報量を削減でき、生産性および互換性の劣化の防止に対して有利である。  
加えて、上記保護コード６８は、コンテンツ再生装置毎に共通の共通命令コード（C0e）を更に含む。
【０１１４】
このように、コンテンツ再生装置毎に共通の共通命令コード（C0e）を含むことで、共通部分の情報量を削減でき、かつ生産性および互換性を向上できる点で有利である。
【０１１５】
（３）デジタルコンテンツの復号方法、再生装置、記憶媒体、暗号装置について  
上記（１）および（２）で示した効果については、上記で説明したデジタルコンテンツの復号方法（例えば、図１８等）、再生装置（例えば、図４、図５等）、記憶媒体（例えば、図１７等）、暗号装置（例えば、図１、図１０等）においても同様に有するものである。
【０１１６】
例えば、第１実施形態に係るデジタルコンテンツ保護方法により保護されたコンテンツを再生する再生装置に関しては、バーチャルマシン（Virtual Machine）３０のプロセッサ（Instruction Processor）３５により、図８で示す命令テーブル（Instruction tables）１９を用いて実行される。
【０１１７】
図８（ａ）で示す共通命令テーブル（Common Instruction Table）１９−０は、各装置で共通のInstruction tableである。
【０１１８】
図８（ｂ）で示す個別命令テーブル（Instruction table #1-#3）１９−１〜１９−３は、Instraction setの各Opcodeと機能の割り当て関係を示すInstruction tableを装置毎、もしくは装置群毎に個別化された命令テーブルである。
【０１１９】
例えば、Table #1は、OpcodeとしてX(i), X(i+1), X(i+2), …によって示される系列を用いる。Table #2は、OpcodeとしてY(i), Y(i+1), Y(i+2), …によって示される系列を用いる。Table #3は、OpcodeとしてZ(i), Z(i+1), Z(i+2), …によって示される系列を用いる。
【０１２０】
この結果、例えば、バーチャルマシン３０を有する各再生装置が記憶するテーブルは、図９のように示される。
【０１２１】
（ａ）に示す再生装置Ａでは、ＲＯＭ中に、共通命令テーブル（Common Instruction Table）１９−０および個別命令テーブル（Instruction table #1）１９−１を格納する。
【０１２２】
（ｂ）に示す再生装置Ｂでは、ＲＯＭ中に、共通命令テーブル（Common Instruction Table）１９−０および個別命令テーブル（Instruction table #2）１９−２を格納する。
【０１２３】
（ｃ）に示す再生装置Ｃでは、ＲＯＭ中に、共通命令テーブル（Common Instruction Table）１９−０および個別命令テーブル（Instruction table #3）１９−３を格納する。
【０１２４】
加えて、図１０乃至図１４に示したように、コンテントコードの生成については、必要に応じて、種々に適用することが可能である点で有利である。
【０１２５】
［本例が包含し得る態様］  
また、上記比較例および実施形態は、以下の態様を含む。  
（１）  暗号化されたコンテンツと共に、暗号化された保護プログラム鍵、保護コンテンツ鍵、およびコンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の固有オペレーションコード仕様に従って設計された個別命令コードを含む保護コードを配布するデジタルコンテンツの保護方法。
【０１２６】
（２）  （１）に記載のデジタルコンテンツの保護方法において、前記保護コードは、前記コンテンツ再生装置毎に共通の共通オペレーションコード仕様に従って設計された共通命令コードを更に含む。
【０１２７】
（３）  （１）または（２）に記載のデジタルコンテンツの保護方法において、前記個別命令コードは、異なる前記固有オペレーションコード仕様に従って設計された前記コンテンツ再生装置または前記コンテンツ再生装置群では導出不可能なプログラム鍵によって暗号化される。
【０１２８】
（４）  （３）に記載のデジタルコンテンツの保護方法において、前記プログラム鍵は、前記コンテンツ再生装置の固有情報を用いて導出される鍵によって暗号化される。
【０１２９】
（５）  （２）乃至（４）に記載のデジタルコンテンツの保護方法において、前記共通命令コードは、任意の前記コンテンツ再生装置群で導出可能なプログラム鍵によって暗号化される。
【０１３０】
（６）  （１）または（２）に記載のデジタルコンテンツの保護方法において、前記個別命令コードおよび共通命令コードは、少なくとも命令意味（Mnemonic）と記述子（Opcode）とを含む個別命令テーブルおよび共通命令テーブルに基づきコンパイルされる。
【０１３１】
（７）  （１）または（２）に記載のデジタルコンテンツの保護方法において、前記共通命令コードは任意の前記コンテンツ処理装置で実行可能であり、前記個別命令コードは異なる前記固有オペレーションコード仕様に従って設計された前記コンテンツ処理装置または前記コンテンツ処理装置群では実行ができない。
【０１３２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３３】
７０…暗号化されたコンテンツ、６７…暗号化された保護プログラム鍵、６９…暗号化された保護コンテンツ鍵、６８…暗号化された保護コード、C1e, C2e, ……コンテンツ再生装置毎またはコンテンツ再生装置群毎に少なくとも一部の要素が固有の個別命令コード。
【図１】
2012084071.tif 000003
【図２】
2012084071.tif 000004
【図３】
2012084071.tif 000005
【図４】
2012084071.tif 000006
【図５】
2012084071.tif 000007
【図６】
2012084071.tif 000008
【図７】
2012084071.tif 000009
【図８】
2012084071.tif 000010
【図９】
2012084071.tif 000011
【図１０】
2012084071.tif 000012
【図１１】
2012084071.tif 000013
【図１２】
2012084071.tif 000014
【図１３】
2012084071.tif 000015
【図１４】
2012084071.tif 000016
【図１５】
2012084071.tif 000017
【図１６】
2012084071.tif 000018
【図１７Ａ】
2012084071.tif 000019
【図１７Ｂ】
2012084071.tif 000020
【図１８】
2012084071.tif 000021