本発明の実施の形態について、図を参照しながら以下に説明する。実施の形態では、ストレージデバイスからコンテンツ利用情報を受け取って、暗号化コンテンツデータを復号して再生する装置において、再生が行われなかった場合、もしくは、再生が行われたとしても所定の時間内であった場合には、ストレージデバイス内のコンテンツ利用情報に含まれる再生に関する制御情報を出力前の状態に復元する技術を提案する。再生回数制限があるライセンスデータを用いた再生において、選択のための頭出し再生や試聴などを目的とした一部の再生においては、ライセンスを消費する再生とみなさないことにより、ユーザが持つコンテンツ再生の権利を保護することができる。
(第1の実施の形態)
図1は、実施の形態に係るデータ管理システム10の全体構成を示す。データ管理システム10は、データを送信する配信サーバ100、配信サーバ100から送信されたデータをストレージデバイス200に記録する端末装置150、ストレージデバイス200に記録されたデータを再生する再生装置300、データを記録保持するストレージデバイス200を備える。
本実施の形態のストレージデバイス200は、データを保持する記憶媒体だけでなく、端末装置150または再生装置300などのホスト装置との間で、データの入出力を制御するコントローラなどの構成を備える、ドライブ一体型のストレージデバイスである。本実施の形態では、ストレージデバイス200として、ハードディスクドライブを例にとって説明する。
従来のハードディスクドライブは、一つのホスト装置に固定的に接続されて使用されるのが一般的であったが、本実施の形態のストレージデバイス200は、端末装置150および再生装置300などのホスト装置に対して、着脱が自在になされるよう構成されている。すなわち、本実施の形態のストレージデバイス200は、CDやDVDなどと同様にホスト装置から取り外して持ち運ぶことができ、端末装置150、再生装置300のほか、記録および再生が可能な記録再生装置などの複数のホスト装置間で共用することが可能な記憶装置である。
このように、本実施の形態のストレージデバイス200は、複数のホスト装置に接続されることを前提にしており、たとえば、所有者以外の第三者のホスト装置に接続され、記録されたデータが読み出される可能性もある。このストレージデバイス200に、音楽や映像などの著作権により保護されるべきコンテンツ、企業や個人の機密情報などの秘匿すべきデータを記録することを想定したとき、それらの秘匿データが外部に漏洩することを防ぐためには、ストレージデバイス200自身にデータを適切に保護するための構成を設け、十分な耐タンパ機能を持たせることが好ましい。
このような観点から、本実施の形態のストレージデバイス200は、ホスト装置との間で秘匿データを入出力するときに、その秘匿データを暗号化してやり取りするための構成を備える。また、秘匿データを格納するために、通常の記憶領域とは異なる機密データ記憶領域を設け、その機密データ記憶領域はストレージデバイス200内に設けられた暗号エンジンを介さないとアクセスできないように構成する。この暗号エンジンは、正当な権限を有すると検証されたホスト装置のみと秘匿データの入出力を行う。以下、このようなデータ保護機能を「セキュア機能」ともいう。上記の構成および機能により、ストレージデバイス200に記録された秘匿データを適切に保護することができる。
ストレージデバイス200のリムーバブルメディアとしての特徴を最大限に生かすため、通常のデータについては、セキュア機能に非対応のホスト装置でも入出力可能とするのが好ましい。そのため、本実施の形態のストレージデバイス200は、従来のハードディスクとの互換性を保つべく、ANSI(American National Standards Institute)の標準規格であるATA(AT Attachment)に対応しており、上述のセキュア機能は、ATAの拡張命令として実現される。
以下、秘匿データの入出力の例として、映像などのコンテンツデータを記録再生する場合について説明する。コンテンツデータ自身を秘匿データとして扱ってもよいが、本実施の形態では、コンテンツデータを暗号化し、暗号化されたコンテンツデータ自身は、ストレージデバイス200に通常のデータとして記録する。そして、暗号化されたコンテンツを復号するための鍵(以下、コンテンツ鍵と称す)と、コンテンツの再生制御やライセンスの利用、移動、複製に関する制御に関する情報(以下、利用規則と称す)を含むデータ(以下、ライセンスデータと称す)を、秘匿データとして上述のセキュア機能を用いて入出力を行う。これにより、十分な耐タンパ性を維持しつつ、データの入出力を簡略化し、処理の高速化および消費電力の低減を図ることができる。
ここで、ライセンスデータは、コンテンツ鍵や利用規則の他に、ライセンスデータを特定するための識別情報LicIDを含むものとする。また、利用規則として、再生を目的としたライセンスデータの出力回数の上限を示す制御情報PCを含むものとする。ここでは、制御情報PCは、1バイトの符号なし整数とし、その値がライセンスデータを出力回数の上限値を示すものとし、ライセンスデータの出力毎に1減算されるものとする。また、PC=255は、例外として、再生回数の上限設定がないことを示し、再生を目的としたライセンスデータの出力によって、値を変化させないものとする。なお、ここで示した制御情報PCの設定方法および運用方法は、本実施の形態における一例であって、特に限定するものではない。
なお、以下においては、配信サーバ100、再生装置300などのホスト装置がストレージデバイス200に対して発行する命令のうち、セキュア機能のための拡張命令を「セキュアコマンド」とも呼び、その他の命令を「通常コマンド」とも呼ぶ。
図2は、実施の形態に係る配信サーバ100および端末装置150の構成を示す。配信サーバ100および端末装置150は、それぞれ通信装置104、153を介して、ネットワークの一例であるインターネット20により接続される。配信サーバ100は、暗号器102、暗号エンジン103、通信装置104、コンテンツデータベース105、ライセンスデータベース106、ユーザデータベース107、これらを制御するコントローラ101、およびそれらを電気的に接続するデータバス110を備える。配信サーバ100の構成は、ハードウエア的には、任意のコンピュータのCPU、メモリ、その他のLSIなどで実現でき、ソフトウエア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
暗号器102は、暗号化コンテンツを復号するためのコンテンツ鍵を含むライセンスデータLICを発行し、このコンテンツ鍵を用いて、コンテンツデータベース105に格納されているコーディングされたコンテンツを暗号化する。暗号化されたコンテンツは、データバス110、通信装置104を介して、端末装置150に送信され、ストレージデバイス200に記録される。
暗号エンジン103は、ユーザに提供するライセンスデータLICをストレージデバイス200に記録するために、ストレージデバイス200との間で暗号通信の制御を行う。暗号通信は、配信サーバ100のデータバス110および通信装置104、インターネット20、端末装置150の通信装置153、データバス160、コントローラ151、およびストレージインタフェース152を介して、直接ストレージデバイス200との間で行われる。
通信装置104は、インターネット20を介して、他の装置とデータ交換を行う。ここでは、端末装置150とデータ交換を行う。コンテンツデータベース105は、ユーザに提供するコンテンツを保持する。ライセンスデータベース106は、コンテンツを暗号化するのに用いられるコンテンツ鍵を含むライセンスデータを保持する。ユーザデータベース107は、コンテンツの提供先であるユーザの情報を保持する。たとえば、ユーザの個人情報、ユーザの端末装置150のアドレス、コンテンツの購入履歴、課金情報などを保持してもよい。
配信サーバ100のコントローラ101は、ユーザの要求に応じてコンテンツデータベース105からコンテンツデータを読み出し、また、ライセンスデータベース106からライセンスデータLICを読み出す。読み出したコンテンツデータとライセンスデータLIC内のコンテンツ鍵を暗号器102に伝達し、また、ライセンスデータLICを暗号エンジン103に伝達する。そして、暗号器102にて、コンテンツ鍵でコンテンツデータを暗号化し、暗号化されたコンテンツデータを通信装置104を介して端末装置150に送信する。さらに、暗号エンジン103によって暗号通信路を構築し、これを介してライセンスデータLICを端末装置150に送信する。端末装置150は、受信したライセンスデータLICをストレージデバイス200に記録する。
暗号化されたコンテンツデータおよびライセンスデータLICがストレージデバイス200に記録されると、端末装置150のユーザに対して、コンテンツの提供が行われたとして、このコンテンツ提供の対価を課金すべくユーザデータベース107を更新する。
端末装置150は、ストレージインタフェース152、通信装置153、それらを制御するコントローラ151、およびそれらを電気的に接続するデータバス160を備える。端末装置150の構成は、ハードウエア的には、任意のコンピュータのCPU、メモリ、その他のLSIなどで実現でき、ソフトウエア的にはメモリにロードされた記録制御機能のあるプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
ストレージインタフェース152は、ストレージデバイス200とのデータの入出力を制御する。通信装置153は、インターネット20を介して、他の装置とデータ交換を行う。ここでは、配信サーバ100とデータ交換を行う。端末装置150のコントローラ151は、ユーザのコンテンツ配信要求を、通信装置153を介して配信サーバ100に送信する。また、この応答として、配信サーバ100から提供される暗号化されたコンテンツデータとライセンスデータを通信装置153を介して受信し、ストレージインタフェース152を介して、ストレージデバイス200に記録する。
図3は、実施の形態に係る再生装置300の内部構成を示す。これらの機能ブロックも、ハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できる。再生装置300は、主に、コントローラ301、ストレージインタフェース302、暗号エンジン303、復号器304、コンテンツデコーダ305、およびそれらを電気的に接続するデータバス310を備える。
ストレージインタフェース302は、ストレージデバイス200とのデータの入出力を制御する。暗号エンジン303は、コンテンツ鍵を含むライセンスデータLICをストレージデバイス200から受信するために、ストレージデバイス200との間で暗号通信の制御を行う。復号器304は、ストレージデバイス200から読み出した暗号化されたコンテンツを、ストレージデバイス200から入手したライセンスデータLICに含まれるコンテンツ鍵により復号する。コンテンツデコーダ305は、復号器304により復号されたコンテンツをデコードして出力する。たとえば、MPEG形式のコンテンツであれば、コンテンツから映像信号と音声信号を復元し、映像信号を図示しない表示装置に出力し、音声信号を図示しないスピーカに出力する。コントローラ301は、再生装置300の構成要素を統括的に制御する。
図4は、実施の形態に係るストレージデバイス200の内部構成を示す。ストレージデバイス200は、主に、コントローラ201、ストレージインタフェース202、暗号エンジン203、耐タンパ記憶部204、通常データ記憶部205、およびそれらを電気的に接続するデータバス210を備える。
ストレージインタフェース202は、配信サーバ100および再生装置300とのデータの入出力を制御する。暗号エンジン203は、コンテンツ鍵を含むライセンスデータLICなどの秘匿データを配信サーバ100および再生装置300との間で入出力するための暗号通信の制御を行う。通常データ記憶部205は、暗号化されたコンテンツや通常のデータなどを記録する通常記憶領域である。耐タンパ記憶部204は、コンテンツ鍵を含むライセンスデータLICなどの秘匿データを記録する機密データ記憶領域である。通常データ記憶部205は、外部からの直接アクセスによりデータの入出力が行われるが、耐タンパ記憶部204は、暗号エンジン203を介さないとデータの入出力ができないように構成される。コントローラ201は、ストレージデバイス200の構成要素を統括的に制御する。
ここで、本実施の形態で用いる鍵について説明する。本実施の形態では、鍵はすべて大文字の「K」から始まる文字列として表記する。また、第2文字が小文字の「c」、「s」、「r」のいずれかである場合は、対称鍵(共通鍵)を示す。詳しくは、「c」はチャレンジ鍵であり、ライセンスデータの送信元で生成されるテンポラルな対称鍵を示す。「s」はセッション鍵であり、ライセンスデータの送信先で生成されるテンポラルな対称鍵を示す。「r」はリカバリー鍵であり、ライセンスデータの送信先で生成されるテンポラルな対称鍵を示す。また、第2文字が大文字の「P」である場合は、公開鍵暗号方式の公開鍵を示す。この鍵には、対応する秘密鍵が必ず存在し、この秘密鍵は公開鍵の表記から第2文字の大文字の「P」を除く表記となる。
鍵を示す文字列が小文字の「d」を含む場合は、装置のグループ毎に与えられた鍵であることを表す。また鍵を示す文字列が小文字の「p」を含む場合は、装置毎に与えられた鍵であることを表す。それぞれ、公開鍵と秘密鍵の対として与えられ、グループ毎に与えられた公開鍵KPdxは、電子署名付きの公開鍵証明書C[KPdx]として与えられている。
また、鍵を示す文字列の最後に記載される文字、たとえば、公開鍵KPd2の「2」は、その鍵が与えられる暗号エンジンを識別するための記号である。本実施の形態では、提供先が明確な場合には、数字「1」、「2」、「3」と表記し、当該暗号エンジン以外から提供される鍵であって提供先が不明な場合あるいは特定しない場合には、「x」、「y」などの英文字によって表記する。本実施の形態では、配信サーバ100の暗号エンジン103に対しては識別記号として「1」、ストレージデバイス200の暗号エンジン203については識別記号として「2」、再生装置300の暗号エンジン303については識別記号として「3」をそれぞれ使用する。
図5は、図2に示した配信サーバ100の暗号エンジン103の内部構成を示す。暗号エンジン103は、証明書検証部120、第1暗号部121、乱数発生部122、第1復号部123、第2復号部124、第2暗号部125、第3暗号部126、証明書出力部127、制御部128、およびこれらの構成要素の少なくとも一部を電気的に接続するローカルバス130を備える。
証明書検証部120は、ストレージデバイス200から取得した証明書C[KPd2]を検証する。証明書C[KPd2]は、公開鍵KPd2を含む平文の情報(以下、「証明書本体」と称す)と、証明書本体に対して付される電子署名からなる。この電子署名は、証明書本体に対してハッシュ関数による演算(以下、この演算処理を「ハッシュ演算」と称す)を施した結果を、第三者機関である認証局(図示せず)のルート鍵Kaによって暗号化したデータである。ルート鍵Kaは、認証局によって厳重に管理されている非公開な鍵であり、認証局の秘密鍵となる。証明書検証部120は、このルート鍵Kaと対をなす検証鍵KPaを保持している。この検証鍵KPaは証明書の正当性を検証する公開鍵である。証明書の検証は、証明書の正当性と証明書の有効性によって判断する。
証明書の正当性の確認は、検証すべき証明書の証明書本体に対するハッシュ関数の演算結果と、検証鍵KPaで電子署名を復号した結果を比較する処理であり、両者が一致したとき、正当であると判断する。証明書検証部120は、無効となった証明書のリストである証明書破棄リスト(Certificate Revocation List:CRLと呼ぶ)を保持し、このCRLに検証すべき証明書が記載されていない場合に有効であると判断する。このように、証明書の正当性と有効性を判断し、正当な証明書を承認する処理を検証と称す。
証明書検証部120は、検証に成功すると、ストレージデバイス200の公開鍵KPd2を取り出して第1暗号部121に伝達し、検証結果を通知する。検証に失敗した場合には、検証エラー通知を出力する。
証明書出力部127は、配信サーバ100の証明書C[KPd1]を出力する。この証明書は、配信サーバ100の公開鍵KPd1を含む証明書本体と、証明書本体に対して付される電子署名からなる。電子署名は、ストレージデバイス200の証明書と同様に、認証局のルート鍵Kaにより暗号化される。
乱数発生部122は、ストレージデバイス200との間で暗号通信を行うために一時的に使用されるチャレンジ鍵Kc1を生成する。暗号通信を行う度に、乱数によりチャレンジ鍵Kc1を生成することで、チャレンジ鍵Kc1を見破られる可能性を最小限に抑えることができる。生成されたチャレンジ鍵Kc1は、第1暗号部121および第1復号部123に伝達される。
第1暗号部121は、ストレージデバイス200にチャレンジ鍵Kc1を通知するために、証明書検証部120により取り出されたストレージデバイス200の公開鍵KPd2でチャレンジ鍵Kc1を暗号化して、暗号化チャレンジ鍵E(KPd2,Kc1)を生成する。そして、暗号化チャレンジ鍵E(KPd2,Kc1)は、証明書出力部127から出力された証明書C[KPd1]と結合され、チャレンジ情報E(KPd2,Kc1)//C[KPd1]とされる。
ここで、記号「//」は、データの連結を示し、E(KPd2,Kc1)//C[KPd1]は、暗号化チャレンジ鍵E(KPd2,Kc1)と証明書C[KPd1]を並べて結合したデータ列を示す。また、Eは暗号化関数を示し、E(KPd2,Kc1)は、公開鍵KPd2でチャレンジ鍵Kc1を暗号化したものであることを示す。
第1復号部123は、チャレンジ鍵Kc1で暗号化されたデータを復号する。ストレージデバイス200で発行されたセッション鍵Ks2およびストレージデバイス200の保持する公開鍵KPp2は、セッション情報E(Kc1,E(KPd1,Ks2)//KPp2)として、ストレージデバイス200から供給されるため、第1復号部123は、乱数発生部122が生成したチャレンジ鍵Kc1を用いてセッション情報を復号し、暗号化セッション鍵E(KPd1,Ks2)および公開鍵KPp2を取り出す。取り出された公開鍵KPp2は第2暗号部125に伝達され、暗号化セッション鍵E(KPd1,Ks2)は第2復号部124に伝達される。
第2復号部124は、第1復号部123から伝達された、自身の公開鍵KPd1で暗号化された暗号化セッション鍵E(KPd1,Ks2)を、公開鍵KPd1と対をなす秘密鍵Kd1で復号し、セッション鍵Ks2を取り出す。、取り出されたセッション鍵Ks2は、第3暗号部126へ伝達される。
第2暗号部125は、暗号器102がコンテンツを暗号化する際に発行したコンテンツ鍵を含むライセンスデータLICを取得し、そのライセンスデータLICをライセンスデータの提供先のストレージデバイス200の公開鍵KPp2で暗号化し、E(KPp2,LIC)を生成する。そして、生成されたE(KPp2,LIC)は、第3暗号部126に伝達される。
第3暗号部126は、第2暗号部125から伝達されたE(KPp2,LIC)を、さらに、ストレージデバイス200で発行されたセッション鍵Ks2により暗号化し、暗号化ライセンスデータE(Ks2,E(KPp2,LIC))を生成する。
制御部128は、配信サーバ100のコントローラ101の指示に従って、暗号エンジン103の内部の構成要素の制御および外部の構成との間でデータの入出力を仲介する。尚、図5では、制御部128による内部の各構成要素への制御を示す結線は省略されている。
図5に示す如く、本実施の形態では、制御部128を介さないと、暗号エンジン103は外部とデータの交換ができない構成となっている。各構成要素を接続する形態については、種々考えられるが、本実施の形態では、乱数発生部122が生成するチャレンジ鍵Kc1、ストレージデバイス200から受け取ったセッション鍵Ks2、自身の秘密鍵Kd1などの暗号エンジン103内で使用される各鍵が、暗号エンジン103の外部に直接流出しないように構成している。これにより、暗号エンジン103内で使用される各鍵が、配信サーバ100の他の構成要素などを介して外部に漏洩することを防ぎ、セキュリティ性を向上させている。
図6は、図3に示した再生装置300の暗号エンジン303の内部構成を示す。暗号エンジン303は、証明書出力部320、乱数発生部321、証明書検証部322、第1復号部323、第1暗号部324、第2暗号部325、第2復号部326、第3復号部327、コンテンツ鍵出力部328、経過時間計測部329、ログ記憶部330、第4復号部331、ログ署名部332、制御部333、およびこれらの構成要素の少なくとも一部を電気的に接続するローカルバス340を備える。
証明書出力部320は、再生装置300の証明書C[KPd3]を出力する。証明書は、証明書出力部320が保持してもよいし、図示しない証明書保持部に保持しておき、それを読み出してもよい。証明書は、再生装置300の公開鍵KPd3を含む証明書本体と、証明書本体に対して付される電子署名からなる。電子署名は、ストレージデバイス200の証明書と同様に、認証局のルート鍵Kaにより暗号化される。
乱数発生部321は、ストレージデバイス200との間で暗号通信を行うために一時的に使用されるセッション鍵Ks3を生成する。生成されたセッション鍵Ks3は、第1暗号部324、第2復号部326、ログ記憶部330に伝達される。
証明書検証部322は、ストレージデバイス200の証明書C[KPd2]の検証を行う。検証の詳細は、上述したとおりである。
第1復号部323は、公開鍵KPd3によって暗号化されたデータを秘密鍵Kd3で復号する。再生時には、ストレージデバイス200で発行されたチャレンジ鍵Kc2は、再生装置300の公開鍵KPd3により暗号化されてストレージデバイス200から供給されるため、第1復号部323は、自身の秘密鍵Kd3によりこれを復号し、チャレンジ鍵Kc2を取り出す。取り出されたチャレンジ鍵Kc2は、第2暗号部325に伝達される。
第1暗号部324は、ストレージデバイス200の証明書C[KPd2]から取り出された公開鍵KPd2でデータの暗号化を行う。ストレージデバイス200にセッション鍵Ks3を通知するために、乱数発生部321で生成したセッション鍵Ks3を暗号化し、暗号化セッション鍵E(KPd2,Ks3)を生成する。生成した暗号化セッション鍵E(KPd2,Ks3)は、第2暗号部325に伝達される。
第2暗号部325は、第1復号部323により取り出されたチャレンジ鍵Kc2で、データの暗号化を行う。第1暗号部324から伝達された暗号化セッション鍵E(KPd2,Ks3)と自身の公開鍵KPp3を連結し、これを暗号化してセッション情報E(Kc2,E(KPd2,Ks3)//KPp3)を生成する。
第2復号部326は、セッション鍵Ks3で暗号化されたデータを復号する。ライセンスデータLICは、公開鍵KPp3およびセッション鍵Ks3により2重に暗号化された暗号化ライセンスデータE(Ks3,E(KPp3,LIC))としてストレージデバイス200から供給されるため、第2復号部326は、乱数発生部321が生成するセッション鍵Ks3により復号を行い、その結果である暗号化ライセンスデータE(KPp3,LIC)を第3復号部327に伝達する。
第3復号部327は、公開鍵KPp3で暗号化されたデータの復号を行う。公開鍵KPp3と対をなす秘密鍵Kp3で、第2復号部326の復号結果である暗号化ライセンスデータE(KPp3,LIC)を復号し、ライセンスデータLICを取り出す。
コンテンツ鍵出力部328は、第3復号部327にて取り出されたライセンスデータLICから、コンテンツ鍵を取り出し保持する。さらに、コンテンツ鍵出力部328は、保持しているコンテンツ鍵を復号器304に提供し、かつ、復号器304における当該コンテンツ鍵を用いた復号処理を監視し、その状況を経過時間計測部329に伝達する。
経過時間計測部329は、コンテンツ鍵出力部328が提供するコンテンツ鍵を用いて復号した暗号化コンテンツの再生時間を計測する。経過時間計測部329は、判定部の機能を兼ねており、再生時間が所定のT秒を超過することによって、コンテンツ鍵による再生が行われた、すなわち、ライセンスデータの制御情報PCによって規定される再生の権利が1再生回数消費された、と判断する。逆に、T秒が経過しないまま再生が停止された場合には、コンテンツ鍵による再生は行われなかった、すなわち、ライセンスデータによって規定される再生の権利が消費されていない、と判断する。別の言い方をすれば、経過時間計測部329は、再生の開始からの経過時間がT秒を超過していなければ、ライセンスデータに含まれるコンテンツ鍵は使用されなかったとみなし、T秒を超過していれば、コンテンツ鍵が使用されたとみなす。
経過時間計測部329の構成については、様々な構成方法が存在するが、ここでは、タイマを用いて再生開始後の経過時間を計測する構成例を示す。経過時間計測部329は、タイマを含んでいる。そして、コンテンツ鍵出力部328が復号器304に提供したコンテンツ鍵による復号が開始されるとタイマをリセットして経過時間の計測を開始する。そして、所定のT秒が経過すると、再生が行われたと判断する。ここで、Tはコンテンツ種類(音楽/映像など)毎に再生を行った、すなわち、ライセンスを消費したと判断する境界時間であり、予め定められている。これによると、たとえば、T秒経過以前に、コンテンツ鍵出力部328の保持するコンテンツ鍵が破棄され、復号器304における復号処理が停止すると、このコンテンツ鍵による再生は行われなかった、と判断される。そして、この判定結果を、後述するログ記憶部330に格納されている情報ST3に反映する。なお、上記境界時間Tは、たとえば音楽の試聴等を想定した場合、45秒と設定される。
ログ記憶部330は、ライセンスデータLICの通信および消費に関する履歴情報を記憶する。履歴情報は、ライセンスデータLICを特定する情報LicID、ライセンスデータLICの通信を特定するための情報であり、ライセンスデータLICの通信にて生成したセッション鍵Ks3、ライセンスデータの通信から消費(再生)に至る状態を示す情報ST3を含む。履歴情報は、ライセンスデータが格納されたアドレスの情報や、ライセンスデータに含まれていた元の制御情報PCを含んでもよい。
情報ST3は、セッション鍵を生成した状態(以下、「状態RP」と称す)、ライセンスデータLICを受信した状態(以下、「状態RL」と称す)、経過時間計測部329により再生が開始されたと判定された状態(以下、「状態CL」と称す)の3つの状態のうち、いずれか1つの状態を示す情報からなる。
第4復号部331は、公開鍵KPp3で暗号化されたデータの復号を行う。公開鍵KPp3と対をなす秘密鍵Kp3で、ストレージデバイス200から供給されるリカバリー情報E(KPp3,Kr2)を復号し、リカバリー鍵Kr2を取り出す。
ログ署名部332は、第4復号部331で取り出されたリカバリー鍵Kr2と、ログ記憶部330に記憶されている履歴情報を用いて、再生装置300におけるライセンスデータLICの受信や消費の状況を知らせるステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)を生成する。このステータス情報は、Kr2とKs3を共有している暗号エンジン203において、その正当性を検証することができる。ここで、Hはハッシュ関数を示し、H(Kr2//Ks3//LicID//ST3)は、データKr2//Ks3//LicID//ST3に対するハッシュ演算結果を示す。
制御部333は、再生装置300のコントローラ301の指示に従って暗号エンジン303の内部の構成要素の制御および外部の構成との間でデータの入出力を仲介する。尚、図6では、制御部333による内部の各構成要素への制御を示す結線は省略されている。
図6に示す暗号エンジン303においても、各構成要素を接続する形態については、種々考えられるが、本実施の形態では、制御部333を介さないと、暗号エンジン303は外部とデータの交換ができない構成となっている。これにより、乱数発生部321が生成したセッション鍵Ks3、公開鍵と対をなしている秘密鍵Kd3およびKp3、ストレージデバイス200から受け取ったセッション鍵Ks2、リカバリー鍵Kr2などの暗号エンジン303内で使用される鍵が外部に漏洩されることを防ぐ。
図7は、図4に示したストレージデバイス200の暗号エンジン203の内部構成を示す。これらの機能ブロックも、ハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できる。暗号エンジン203は、制御部220、乱数発生部221、証明書出力部222、証明書検証部223、第1復号部224、第1暗号部225、第2暗号部226、第2復号部227、第3復号部228、第3暗号部229、第4復号部230、第5復号部231、第4暗号部232、第5暗号部233、ログ記憶部234、第6暗号部235、ログ検証部236、および、これらの構成要素の少なくとも一部を電気的に接続するローカルバス240を備える。
制御部220は、ストレージデバイス200のコントローラ201の指示に従って暗号エンジン203の内部の構成を制御し、また、外部の構成との間でデータの入出力を仲介する。
乱数発生部221は、配信サーバ100または再生装置300との間の暗号通信に一時的に使用されるセッション鍵Ks2、チャレンジ鍵Kc2、リカバリー鍵Kr2を、乱数演算によって生成する。各鍵の用途については、追って説明する。
証明書出力部222は、ストレージデバイス200の証明書C[KPd2]を出力する。証明書は、証明書出力部222が保持してもよいし、ストレージデバイス200の所定の記憶領域、たとえば耐タンパ記憶部204に保持しておき、それを読み出してもよい。証明書は、ストレージデバイス200の公開鍵KPd2を含む証明書本体と、証明書本体に付された電子署名とを含む。電子署名は、認証局のルート鍵Kaにより暗号化される。
証明書検証部223は、外部から提供された証明書の検証を行う。具体的には、配信サーバ100から取得した証明書C[KPd1]および再生装置300から取得した証明書C[KPd3]を検証鍵KPaにより検証する。検証の詳細は、上記のとおりである。
第1復号部224は、自身の公開鍵KPd2で暗号化されたデータを復号する。具体的には、記録時には、配信サーバ100で発行されたチャレンジ鍵Kc1が、ストレージデバイス200の公開鍵KPd2で暗号化されて配信サーバ100から供給されるため、これを自身の秘密鍵Kd2で復号し、チャレンジ鍵Kc1を取り出す。取り出されたチャレンジ鍵Kc1は、第2暗号部226に伝達される。
第1暗号部225は、配信サーバ100の公開鍵KPd1でデータを暗号化する。具体的には、乱数発生部221が生成したセッション鍵Ks2を公開鍵KPd1で暗号化し、暗号化セッション鍵E(KPd1,Ks2)を生成する。ここで用いる配信サーバ100の公開鍵KPd1は、制御部220によってストレージデバイス200の証明書C[KPd1]内から取り出され、ローカルバス240を介して伝達される。
第2暗号部226は、配信サーバ100が発行したチャレンジ鍵Kc1でデータを暗号化する。具体的には、第1暗号部225から受け取った暗号化セッション鍵E(KPd1,Ks2)と自身の公開鍵KPp2を連結して、これをチャレンジ鍵Kc1で暗号化し、セッション情報E(Kc1,E(KPd1,Ks2)//KPp2)を生成する。
第2復号部227は、乱数発生部221が生成したセッション鍵Ks2で暗号化されたデータを復号する。具体的には、配信サーバ100から、ライセンスデータLICを、公開鍵KPp2およびセッション鍵Ks2により2重に暗号化されたE(Ks2,E(KPp2,LIC))として受け取り、これをセッション鍵Ks2により復号し、結果を第3復号部228に伝達する。
第3復号部228は、自身の公開鍵KPp2で暗号化されたデータを復号する。第2復号部227から伝達されるライセンスデータE(KPp2,LIC)を、公開鍵KPp2と対をなす自身の秘密鍵Kp2で復号し、ライセンスデータLICを取り出す。
取り出されたライセンスデータLICは、ローカルバス240、制御部220を介して、データバス210に供給され、コントローラ201の指示に従って、耐タンパ記憶部204に記憶される。
第3暗号部229は、再生装置300の公開鍵KPd3でデータを暗号化する。具体的には、再生装置300に対してライセンスデータLICを提供する場合、再生装置300から受け取った証明書C[KPd3]から取り出された公開鍵KPd3で、乱数発生部221が発行するチャレンジ鍵Kc2を暗号化し、暗号化チャレンジ鍵E(KPd3,Kc2)を生成する。生成された暗号化チャレンジ鍵E(KPd3,Kc2)は、ローカルバス240を介して制御部220へ伝達される。制御部220では、これと証明書出力部222から出力される自身の証明書C[KPd2]とを結合して、チャレンジ情報E(KPd3,Kc2)//C[KPd2]を生成する。
第4復号部230は、乱数発生部221が発行したチャレンジ鍵Kc2で暗号化されたデータを復号する。再生装置300から受け取ったセッション情報E(Kc2,E(KPd2,Ks3)//KPp3)を、乱数発生部221が生成したチャレンジ鍵Kc2で復号し、暗号化セッション鍵E(KPd2,Ks3)および再生装置300の公開鍵KPp3を取り出す。取り出した暗号化セッション鍵E(KPd2,Ks3)は第5復号部231に伝達され、公開鍵KPp3は第4暗号部232およびログ記憶部234に伝達される。
第5復号部231は、自身の公開鍵KPd2で暗号化されたデータを復号する。具体的には、第4復号部230から伝達された暗号化セッション鍵E(KPd2,Ks3)を、自身の秘密鍵Kd2で復号し、セッション鍵Ks3を取り出す。取り出されたセッション鍵Ks3は、第5暗号部233に伝達される。
第4暗号部232は、再生装置300の公開鍵KPp3でデータを暗号化する。再生装置300に対してライセンスデータを提供する場合、再生装置300から受け取った公開鍵KPp3で、ライセンスデータLICを暗号化する。このライセンスデータLICは、コントローラ201の指示に従って、耐タンパ記憶部204から読み出され、データバス210、制御部220およびローカルバス240を介して第4暗号部232に伝達される。ここで、暗号化されたライセンスデータE(KPp3,LIC)は、第5暗号部233に伝達される。
第5暗号部233は、再生装置300が発行したセッション鍵Ks3でデータを暗号化する。具体的には、セッション鍵Ks3で、第4暗号部232において暗号化されたライセンスデータE(KPp3,LIC)を、さらに暗号化し、暗号化ライセンスデータE(Ks3,E(KPp3,LIC))を生成する。
ログ記憶部234は、ライセンスデータLICの通信および消費に関する履歴情報を記憶する。履歴情報は、ライセンスデータLICを特定する情報LicID、ライセンスデータLICの通信を特定するための情報であり、ライセンスデータLICの通信にて生成したセッション鍵Ks3、ライセンスデータの通信から消費(再生)に至る状態を示す情報ST2を含む。
情報ST2は、セッション鍵を受け取った状態(以下、「状態SP」と称す)、再生のためにライセンスデータLICを送信した状態(以下、「状態SL」と称す)、再生を目的としてライセンスデータLICを出力後、記録されているライセンスデータLICを出力前の状態に復元した状態(以下、「状態SR」と称す)の3つの状態のうち、いずれか1つの状態を示す情報、ライセンス送信に固有の公開鍵KPp3からなる。
第6暗号部235は、ログ記憶部234に記憶されている公開鍵KPp3でデータを暗号化する。具体的には、再生装置300から、ステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)を受け取る場合において、再生装置300から受け取り、かつ、ログ記憶部234に記憶されている公開鍵KPd3で、乱数発生部221が発行するリカバリー鍵Kr2を暗号化し、リカバリー情報E(KPp3,Kr2)を生成する。
ログ検証部236は、ログ記憶部234に記憶されている履歴情報を参照しつつ、再生装置300から受け取ったステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)の正当性を検証し、当該ライセンスデータの復元可否の判断を行う。
図8および図9は、配信サーバ100がストレージデバイス200にライセンスデータLICを記録するまでの手順を示す。この記録処理では、配信サーバ100の暗号エンジン103とストレージデバイス200の暗号エンジン203との間で暗号通信路が構築され、その暗号通信路によってライセンスデータLICが配信サーバ100からストレージデバイス200に送信される。図では、配信サーバ100(暗号エンジン103)、ストレージデバイス200(暗号エンジン203)および、配信サーバ100とストレージデバイス200のデータ交換を仲介する端末装置150(コントローラ151)に区分して処理を示している。
まず、端末装置150のコントローラ151は、ストレージデバイス200に対して証明書出力命令を発行する(S102)。コントローラ201は、証明書出力命令を正常に受理する(S104)と、暗号エンジン203に証明書の出力を命じ、暗号エンジン203から証明書C[KPd2]を読み出して端末装置150のコントローラ151へ出力する(S106)。コントローラ151は、ストレージデバイス200から証明書C[KPd2]を取得すると、それを配信サーバ100へ送信する(S108)。
配信サーバ100のコントローラ101は、ストレージデバイス200から発行された証明書C[KPd2]を受信すると(S110)、それを暗号エンジン103に伝達し、証明書検証部120は、認証鍵KPaで証明書を検証する(S112)。証明書が承認されなかった場合(S112のN)、証明書検証部120はエラーをコントローラ101に伝達する。エラーを伝達されたコントローラ101は、検証エラー通知を端末装置150に送信する(S190)。端末装置150のコントローラ151は、エラー通知を受信すると(S192)、処理を異常終了する。
証明書が承認された場合(S112のY)、暗号エンジン103は、乱数発生部122にてチャレンジ鍵Kc1を生成し、生成したチャレンジ鍵Kc1を第1暗号部121と第1復号部123に伝達する。第1復号部123では、このチャレンジ鍵Kc1を内部に保持する(S114)。また、第1暗号部121では、このチャレンジ鍵Kc1を証明書C[KPd2]から取り出したストレージデバイス200の公開鍵KPd2で暗号化し、暗号化チャレンジ鍵E(KPd2,Kc1)を生成する。そして、生成した暗号化チャレンジ鍵E(KPd2,Kc1)と証明書出力部127から出力される自身の証明書C[KPd1]とを結合し、チャレンジ情報E(KPd2,Kc1)//C[KPd1]を生成し、これをコントローラ101へ伝達する。コントローラ101は、生成されたチャレンジ情報E(KPd2,Kc1)//C[KPd1]を端末装置150へ送信する(S116)。
端末装置150のコントローラ151は、配信サーバ100からチャレンジ情報E(KPd2,Kc1)//C[KPd1]を受信すると(S118)、ストレージデバイス200に対してチャレンジ情報検証命令を発行する(S120)。ストレージデバイス200では、コントローラ201がチャレンジ情報検証命令を受理すると、チャレンジ情報E(KPd2,Kc1)//C[KPd1]の入力を端末装置150に要求する(S122)。端末装置150のコントローラ151は、この要求に応じてチャレンジ情報E(KPd2,Kc1)//C[KPd1]をストレージデバイス200へ出力する(S124)。
ストレージデバイス200は、チャレンジ情報E(KPd2,Kc1)//C[KPd1]を受理すると(S126)、暗号エンジン203では、制御部220が、チャレンジ情報E(KPd2,Kc1)//C[KPd1]から証明書C[KPd1]を取り出し、これを証明書検証部223に伝達する。証明書検証部223は、伝達された証明書C[KPd1]を検証鍵KPaで検証し、検証結果を制御部220に伝達する(S128)。
証明書が承認されなかった場合(S128のN)、証明書検証部223は検証エラー通知を制御部220へ通知し、検証エラー通知を受けた制御部220はこれをコントローラ201へ通知する。そしてコントローラ201は、受信した検証エラー通知を、ストレージインタフェース202を介して端末装置150のコントローラ151に送信する(S194)。コントローラ151は、検証エラー通知を受信すると(S192)、本処理を異常終了する。
証明書が承認された場合(S128のY)、制御部220は、チャレンジ情報E(KPd2,Kc1)//C[KPd1]から、公開鍵KPd1と暗号化チャレンジ鍵E(KPd2,Kc1)を取り出し、それぞれ第1暗号部225、第1復号部224に伝達する。
第1暗号部225は、伝達された公開鍵KPd1を保持する。第1復号部224は、伝達された暗号化チャレンジ鍵E(KPd2,Kc1)を自身の秘密鍵Kd2で復号し、チャレンジ鍵Kc1を取り出す(S130)。取り出されたチャレンジ鍵Kc1は、第2暗号部226に伝達され保持される(S132)。
一方、端末装置150のコントローラ151は、ストレージデバイス200においてチャレンジ情報検証命令の処理が終了すると、ストレージデバイス200に対してセッション情報生成命令を発行する(S134)。ストレージデバイス200では、コントローラ201がセッション情報生成命令を受理する(S136)と、暗号エンジン203では制御部220の指示に従って、乱数発生部221がセッション鍵Ks2を生成し、生成したセッション鍵Ks2を、第2復号部227および第1暗号部225に伝達する。第2復号部227は、伝達されたセッション鍵Ks2を保持する(S138)。
第1暗号部225は、S130で保持した公開鍵KPd1で、伝達されたセッション鍵Ks2を暗号化して暗号化セッション鍵E(KPd1,ks2)を生成し、これを第2暗号部226に伝達する。第2暗号部226は、暗号化セッション鍵E(KPd1,ks2)と自身の公開鍵KPp2とを連結し、これをS132で保持したチャレンジ鍵Kc1で暗号化してセッション情報E(Kc1,E(KPd1、Ks2)//KPp2)を生成する(S140)。
端末装置150のコントローラ151は、ストレージデバイス200においてセッション情報生成命令の処理が終了すると、セッション情報出力命令を発行する(S142)。ストレージデバイス200は、セッション情報出力命令を受理する(S144)と、コントローラ201が、暗号エンジン203からセッション情報E(Kc1,E(KPd1,Ks2)//KPp2)を読み出し、端末装置150のコントローラ151へ出力する(S146)。端末装置150のコントローラ151は、ストレージデバイス200からセッション情報E(Kc1,E(KPd1、Ks2)//KPp2)を受信すると、これを配信サーバ100に送信する(S148)。
配信サーバ100のコントローラ101は、セッション情報E(Kc1,E(KPd1,Ks2)//KPp2)を受信すると(S150)、これを暗号エンジン103に伝達する。暗号エンジン103の第1復号部123は、内部に保持したチャレンジ鍵Kc1で、伝達されたセッション情報E(Kc1,E(KPd1,Ks2)//KPp2)を復号し、暗号化セッション鍵E(KPd1,Ks2)とストレージデバイス200の公開鍵KPp2を取り出す。取り出された暗号化セッション鍵E(KPd1,Ks2)は、第2復号部124に伝達され、第2復号部124は、自身の秘密鍵Kd1で復号してセッション鍵Ks2を取り出す(S152)。
続いて、暗号エンジン103の第2暗号部125は、暗号器102が発行したライセンスデータLICをストレージデバイス200の公開鍵KPp2で暗号化してE(KPp2,LIC)を生成し、これを第3暗号部126に伝達する。第3暗号部126は、伝達されたE(KPp2,LIC)を、さらにストレージデバイス200が発行したセッション鍵Ks2で暗号化して暗号化ライセンスデータE(Ks2,E(KPp2,LIC))を生成し、これをコントローラ101に伝達する。コントローラ101は、伝達された暗号化ライセンスデータE(Ks2,E(KPp2,LIC))を端末装置150に送信する(S154)。
端末装置150のコントローラ151は、配信サーバ100から送信された暗号化ライセンスデータE(Ks2,E(KPp2,LIC))を受信する(S156)と、ストレージデバイス200に対してライセンスデータ書込命令を発行する(S158)。このライセンス書込命令は、耐タンパ記憶部204上の記録位置を指定するアドレスを伴っている。ここでアドレスとは、論理アドレスを示し、耐タンパ記憶部204における記録位置を直接指定するものではないが、アドレスを指定して記録したデータは、同じアドレスを指定することで読み出せるように、コントローラ201によって管理されている。しかしながら、耐タンパ記憶部204における位置を示す物理アドレスであってもよい。
ストレージデバイス200では、端末装置150が発行したライセンス書込命令を受理すると、暗号ライセンスデータを端末装置150のコントローラ151に要求し(S160)、端末装置150のコントローラ151は、この要求に応じて、暗号ライセンスデータE(Ks2,E(KPp2,LIC))をストレージデバイス200へ出力する(S162)。
ストレージデバイス200は、暗号ライセンスデータE(Ks2,E(KPp2,LIC))を受理すると(S164)、これを暗号エンジン203内の第2復号部227に伝達する。第2復号部227は、内部に保持しているセッション鍵Ks2で暗号化ライセンスデータE(Ks2,E(KPp2,LIC))を復号し、自身の公開鍵KPp2で暗号化されたライセンスデータE(KPp2,LIC)を取り出す。そして、取り出された暗号化ライセンスデータE(KPp2,LIC)は第3復号部228に伝達される。第3復号部228は、伝達された暗号化ライセンスデータE(KPp2,LIC)を、公開鍵KPp2と対の秘密鍵Kp2で復号してライセンスデータLICを取り出し(S166)、これをローカルバス240、制御部220を介してデータバス210へ出力する。コントローラ201は、データバス210に出力されたライセンスデータを耐タンパ記憶部204の指定されたアドレスに記憶する(S168)。
端末装置150のコントローラ151は、ストレージデバイス200においてライセンスデータ書込命令の処理が終了した後、続いてライセンスデータを記録するか判断する(S170)。続いてライセンスデータを記録する場合(S170のY)、S134に移行してセッション情報の生成命令の発行から処理を繰り返す。これは、複数のライセンスデータを記録する場合に、証明書の検証処理を共有とすることで、処理を軽減することを目的とした手順である。なお、ここで、続いてライセンスデータを記録するとしたが、1つのライセンスデータの記録後、直ちに次のライセンスデータの記録を行わなければならないわけではない。配信サーバ100の暗号エンジン103とストレージデバイス200の暗号エンジン203が同じチャレンジ鍵Kc1を共有している状態、具体的には、配信サーバ100の暗号エンジン103の第1復号部123と、ストレージデバイス200の暗号エンジン203の第2暗号部226が、同じチャレンジ鍵Kc1を保持している状態であればいかなるタイミングであっても良い。また、続いてライセンスデータを記録する場合であっても、S102から処理を繰り返しても何ら問題はない。続いてライセンスデータを記録しない場合(S170のN)には、本処理を正常終了する。
以上の手順により、暗号化されたコンテンツを復号し再生するために必要なライセンスデータLICがストレージデバイス200に記録される。暗号化コンテンツは、通常データであり、ストレージデバイス200の通常コマンドによって記録されるため、ここでは説明を省略する。
なお、ライセンスデータLICと暗号化コンテンツデータの記録順序は、いずれが先であってもかまわない。さらには、暗号化コンテンツデータの記録における空き時間に、セキュアコマンドを分割して発行することで、ライセンスデータLICを記録するようにしてもよい。
なお、図8および図9が示す、端末装置150が配信サーバ100から送信されたライセンスデータLICをストレージデバイス200に記録するまでの手順は、正常に処理が推移した場合の例である。
図10乃至図13は、再生装置300がストレージデバイス200からライセンスデータLICを読み出し、読み出したコンテンツ鍵を破棄するまでの再生処理にかかる手順を示す。この再生処理では、ストレージデバイス200の暗号エンジン203と再生装置300の暗号エンジン303との間で暗号通信路が構築され、その暗号通信路を介してライセンスデータLICがストレージデバイス200から再生装置300に送信される。なお、図は、ストレージデバイス200(暗号エンジン203)、再生装置300の暗号エンジン303、および、これらのデータ交換を仲介する再生装置300のコントローラ301に区分して処理を示している。
まず、再生装置300のコントローラ301は、暗号エンジン303に対して証明書の出力要求を行う(S302)。暗号エンジン303は、この送信要求を受け取ると(S304)、証明書出力部320が証明書C[KPd3]をコントローラ301へ伝達する(S306)。コントローラ301は、暗号エンジン303から証明書C[KPd3]が伝達されると(S308)、ストレージデバイス200に対して証明書検証命令を発行する(S310)。
ストレージデバイス200では、証明書検証命令が受理されると(S312)、再生装置300に対して証明書を要求する。再生装置300のコントローラ301は、この要求に応じて、暗号エンジン303から伝達された証明書C[KPd3]をストレージデバイス200へ出力する(S314)。ストレージデバイス200は、証明書C[KPd3]を受理すると(S316)、受理した証明書C[KPd3]を内部の暗号エンジン203に伝達する。暗号エンジン203では、制御部220の指示に従って、証明書検証部223が証明書C[KPd3]を検証鍵KPaで検証する(S318)。
S318において、証明書が承認されなかった場合(S318のN)、証明書検証部223は検証エラー通知を、制御部220、コントローラ201、ストレージインタフェース202を介して、コントローラ301に送信する(S490)。コントローラ301は、エラー通知を受信すると(S492)、本処理を異常終了する。
一方、S318において、証明書C[KPd3]が承認された場合(S318のY)、暗号エンジン203の制御部220は、証明書C[KPd3]から公開鍵KPd3を取り出し、これを第3暗号部229に伝達する。第3暗号部229は、伝達された公開鍵KPd3を保持する(S320)。
ストレージデバイス200において、暗号エンジン303の証明書C[KPd3]が承認されると、再生装置300のコントローラ301は、ストレージデバイス200に対してチャレンジ情報生成命令を発行する(S322)。ストレージデバイス200が、再生装置300が発行したチャレンジ情報生成命令を受理する(S324)と、暗号エンジン203では、制御部220の指示に従って、乱数発生部221がチャレンジ鍵Kc2を生成し、生成したチャレンジ鍵Kc2を第3暗号部229および第4復号部230に伝達する。
第4復号部230は、伝達されたチャレンジ鍵Kc2を内部に保持する(S326)。第3暗号部229は、S320にて保持した公開鍵KPd3で、伝達されたチャレンジ鍵Kc2を暗号化して暗号化チャレンジ鍵E(KPd3,Kc2)を生成する。次に、自身の証明書C[KPd2]を証明書出力部222から取得し、これを生成した暗号化チャレンジ鍵E(KPd3,Kc2)と連結してチャレンジ情報E(KPd3,Kc2)//C[KPd2]を生成する(S328)。
再生装置300では、ストレージデバイス200においてチャレンジ情報生成命令の処理が終了すると、コントローラ301がチャレンジ情報出力命令を発行する(S330)。ストレージデバイス200が、再生装置300が発行したチャレンジ情報出力命令を受理する(S332)と、コントローラ201は、暗号エンジン203からチャレンジ情報E(KPd3,Kc2)//C[KPd2]を取り出し、再生装置300のコントローラ301へ出力する(S334)。
再生装置300では、コントローラ301が、チャレンジ情報E(KPd3,Kc2)//C[KPd2]を受信すると、これを暗号エンジン303に伝達する(S336)。そして、暗号エンジン303が、チャレンジ情報E(KPd3,Kc2)//C[KPd2]を受信すると(S338)、暗号エンジン303内の証明書検証部322が、検証鍵KPaで伝達された証明書を検証する(S340)。
証明書が承認されなかった場合(S340のN)、証明書検証部322は、検証エラー通知をコントローラ301に送信する(S394)。コントローラ301は、エラー通知を受信すると(S492)、本処理を異常終了する。
一方、証明書が承認された場合(S340のY)、暗号エンジン303の第1復号部323は、暗号化チャレンジ鍵E(KPd3,Kc2)を自身の秘密鍵Kd3で復号してチャレンジ鍵Kc2を取り出す(S342)。取り出されたチャレンジ鍵Kc2は、第2暗号部325に伝達され保持される(S344)。
一方、コントローラ301は、ストレージデバイス200に対してライセンス読出命令を発行する(S346)。このライセンス読出命令は、耐タンパ記憶部204における読み出し位置を指定するアドレスを伴っている。
ストレージデバイス200は、再生装置300が発行したライセンス読出命令を受理すると(S348)、耐タンパ記憶部204の指定されたアドレスに記憶されているライセンスデータLICを読み出し、読み出されたライセンスデータLICは、暗号エンジン203の第4暗号部232に保持される(S350)。
続いて、コントローラ301は、暗号エンジン303に対してセッション情報を要求する(S352)。暗号エンジン303は、この要求を受け取ると(S354)、乱数発生部321がセッション鍵Ks3を生成し、第1暗号部324、第2復号部326、ログ記憶部330に伝達する。第2復号部326およびログ記憶部330は、伝達されたセッション鍵Ks3を内部に保持する。この時、ログ記憶部330は、情報ST3として「状態RP」を示す情報を併せて保持する(S355)。そして、第1暗号部324は、証明書C[KPd2]から取り出されたストレージデバイス200の公開鍵KPd2で、セッション鍵Ks2を暗号化し、暗号化セッション鍵E(KPd2,Ks3)を生成する。生成された暗号化セッション鍵E(KPd2,Ks3)は、第2暗号部325に伝達される。第2暗号部325は、伝達された暗号化セッション鍵E(KPd2,Ks3)に自身の公開鍵KPp3を連結し、これらをS344で保持されたチャレンジ鍵Kc2で暗号化してセッション情報E(Kc2,E(KPd2、Ks3)//KPp3)を生成し、これをコントローラ301へ送る(S356)。
コントローラ301は、暗号エンジン303からセッション情報E(Kc2,E(KPd2,Ks3)//KPp3)を受信すると(S358)、ストレージデバイス200に対してセッション情報処理命令を発行する(S360)。
ストレージデバイス200は、再生装置300から発行されたセッション情報処理命令を受理すると(S362)、再生装置300に対してセッション情報を要求し、再生装置300のコントローラ301は、この要求に応じて、暗号エンジン303から受け取ったセッション情報E(Kc2,E(KPd2,Ks3)//KPp3)をストレージデバイス200へ出力する(S364)。
ストレージデバイス200は、セッション情報E(Kc2,E(KPd2,Ks3)//KPp3)を受理すると(S366)、暗号エンジン203の第4復号部230に伝達する。第4復号部230は、伝達されたセッション情報E(Kc2,E(KPd2,Ks3)//KPp3)を、S326で保持されたチャレンジ鍵Kc2で復号する。そして、暗号化セッション鍵E(KPd2,Ks3)と再生装置300の公開鍵KPp3を取り出し、暗号化セッション鍵E(KPd2,Ks3)を第5復号部231に伝達し、また公開鍵KPp3を第4暗号部232とログ記憶部234に伝達する。
次いで、第5復号部231は、伝達された暗号化セッション鍵E(KPd2,Ks3)を、自身の公開鍵KPd2と対をなす自身の秘密鍵Kd2で復号してセッション鍵Ks3を取り出し、これを第5暗号部233とログ記憶部234に伝達する。ログ記憶部234は、伝達されたセッション鍵Ks3と公開鍵KPp3を保持する。また、この時、「状態SP」を示す情報も併せて保持する(S368)。
第4暗号部232は、S350で保持されたライセンスデータLICを、第4復号部230から伝達された再生装置300の公開鍵KPp3で暗号化して暗号化ライセンスデータE(KPp3,LIC)を生成し、これを第5暗号部233に伝達する。第5暗号部233は、第4暗号部232で生成された暗号化ライセンスデータE(KPp3,LIC)を、第5復号部231から伝達されたセッション鍵Ks3で暗号化し、暗号化ライセンスデータE(Ks3,E(KPp3,LIC))を生成する(S370)。
再生装置300のコントローラ301は、ストレージデバイス200においてセッション情報処理命令の処理が終了、すなわち、暗号化ライセンスデータE(Ks3,E(KPp3,LIC))が生成されると、ストレージデバイス200に対して暗号化ライセンス出力命令を発行する(S372)。ストレージデバイス200は、再生装置300が発行した暗号化ライセンス出力命令を受理する(S374)と、暗号エンジン203の制御部220は、ライセンスデータLICに記載される制御情報PCの確認を行う(S376)。
制御情報PCが0の場合(S376のIV)、制御部220は、再生回数の制限がなされたライセンスデータであって、かつ、既に制限回数の再生が終了していると判断し、再生条件エラー通知を、コントローラ201、ストレージインタフェース202を介して、再生装置300のコントローラ301に送信する(S390)。再生装置300のコントローラ301は、ストレージデバイス200が送信したエラー通知を受信すると(S392)、本処理を異常終了する。
また、S376において、制御情報PCが1〜254の場合(S376のC)、制御部220は、耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCを1減算した値に変更する。(S378)。
また、S376において、制御情報PCが255の場合(S376のNA)、およびS378の後、制御部220は、暗号化ライセンスデータE(Ks3,E(KPp3,LIC))を、コントローラ201、ストレージインタフェース202を介して、再生装置300のコントローラ301へ出力すると共に、ログ記憶部234に、出力したライセンスデータLICの識別情報LicIDを保持させ、情報ST2を「状態SL」に変更させる(S380)。
再生装置300のコントローラ301は、ストレージデバイス200から暗号化ライセンスデータE(Ks3,E(KPp3,LIC))を受信すると、これを暗号エンジン303に送る(S382)。暗号エンジン303が暗号化ライセンスデータE(Ks3,E(KPp3,LIC))を受信すると(S384)、第2復号部326は、S354において保持されたセッション鍵Ks3で暗号化ライセンスデータE(Ks3,E(KPp3,LIC))を復号し、復号結果のE(KPp3,LIC)を第3復号部327に伝達する。
第3復号部327は、伝達されたE(KPp3,LIC)を公開鍵KPp3と対をなす自身の秘密鍵Kp3で復号してライセンスデータLICを取り出し、取り出したライセンスデータLICの識別情報LicIDをログ記憶部330に伝達し、また、コンテンツ鍵をコンテンツ鍵出力部328に伝達する。
ログ記憶部330は、伝達された識別情報LicIDを保持し、情報ST3を「状態RL」に変更し(S386)、コンテンツ鍵出力部328は、復号器304に対して伝達されたコンテンツ鍵の提供を開始する(S388)。
コントローラ301は、復号器304に対してコンテンツ鍵が提供可能な状態になると、再生終了の確認、すなわち、暗号コンテンツデータの再生完了による再生の終了、あるいは、ユーザからの再生中止指示(終了操作、選択操作などによる再生停止の指示を含む)による再生の終了をすべきか確認する(S390)。
S390において、再生が終了でない場合(S390のN)、ストレージデバイス200の通常データ記憶部205に記録されている暗号化コンテンツデータを読み出し、復号器304に供給する(S392)。このとき、コントローラ301は、コンテンツデコーダ305においてスムーズに再生がなされるよう、必要量の暗号化コンテンツデータを、断続的に復号器304に供給する。そして、復号器304へ供給を休止している間に、再びS390に戻って、終了判定を行う。
一方、暗号エンジン303では、復号器304に対してコンテンツ鍵が提供可能な状態になると、コントローラ301における処理と並行して、コンテンツ鍵出力部328による復号器304の復号処理を監視する監視処理が開始される(S400)。コンテンツ鍵出力部328は、提供したコンテンツ鍵による再生が開始されるか、あるいは、コンテンツ鍵が利用されずに再生が終了するかを確認する(S402)。
S402で再生が開始されたと確認されると(S402のY)、経過時間計測部329のタイマをリセットし、復号処理の継続時間の計測を開始してT秒の経過を待つ(S404)。そして、T秒が経過すると(S404のY)、経過時間計測部329からライセンスデータLICが消費された旨を伝える情報が、ログ記憶部330に伝達される。この情報を受け取ったログ記憶部330は、記憶されている情報ST3を「状態CL」に変更して(S406)、暗号エンジン303における監視処理を終了する。
また、S402、あるいは、S404において、再生の終了が確認されると(S402のS、あるいは、S404のS)、暗号エンジン303における監視処理を終了する。この場合、ログ記憶部330に記憶されている情報ST3は「状態RL」のままである。
S390において、コントローラ301が再生終了を確認する(S390のY)と、再生時間がT秒を超えているか確認する(S394)。この確認においては、たとえば、コントローラ301が内部に備えているタイマを用いて確認を行っても良いし、暗号エンジン303の経過時間計測部329を参照して確認を行っても良いし、また、暗号エンジン303のログ記憶部330の情報ST3の状態によって判断するようにしても良い。
S394において、再生してT秒が経過した場合(S394のY)、コントローラ301は、ライセンスデータが消費されたとみなし、次のコンテンツを続いて再生するか判断する(S396)。続けて再生を行わない、すなわち、他のライセンスデータを読み出さない場合(S396のN)、本処理を正常に終了する。
S396において、続いて再生する、すなわち、他のライセンスデータを読み出したい場合(S396のY)、コントローラ301は、S346に移行してライセンス読出命令の発行から処理を繰り返すことができる。これは、複数のライセンスデータの読み出しにおいて、証明書の検証処理を共有とすることで、処理を軽減することを目的とした手順である。なお、続いてライセンスデータを読み出すとしたが、1つのライセンスデータを読み出した後、直ちに次の読み出しを行わなければならないわけではない。暗号エンジン303とストレージデバイス200がチャレンジ鍵Kc2を共有している状態、具体的には、再生装置300の暗号エンジン303の第2暗号部325と、ストレージデバイス200の暗号エンジン203の第4復号部230が、同じチャレンジ鍵Kc2を保持している状態であればいかなるタイミングであっても良い。また、続けてライセンスデータを読み出す場合であっても、ステップS302から手順を開始しても何ら問題はない。続いて他のライセンスデータを読み出さない場合(S386のN)、コントローラ301は、本処理を正常に終了する。
また、S394において、T秒未満の再生、あるいは、再生が行われなかった場合(S394のN)、コントローラ301は、ライセンスデータが消費されていないと判断し、ストレージデバイス200に記録されているライセンスデータLICの復元処理を開始する。
再生装置300のコントローラ301は、ストレージデバイス200に対してリカバリー情報生成命令を発行する(S410)。ストレージデバイス200が、再生装置300が発行したリカバリー情報生成命令を受理する(S412)と、暗号エンジン203では制御部220の指示に従って、乱数発生部221がリカバリー鍵Kr2を生成し、生成したリカバリー鍵Kr2を第6暗号部235とログ検証部236に伝達する。ログ検証部236は、伝達されたリカバリー鍵Kr2を内部に保持する(S414)。第6暗号部235は、ログ記憶部234に保持された公開鍵KPp3で、伝達されたリカバリー鍵Kr2を暗号化し、リカバリー情報E(KPp3,Kr2)を生成する(S416)。
一方、再生装置300のコントローラ301は、ストレージデバイス200においてリカバリー情報生成命令の処理が終了すると、リカバリー情報出力命令を発行する(S418)。ストレージデバイス200が、再生装置300が発行したリカバリー情報出力命令を受理する(S420)と、コントローラ201は、暗号エンジン203からリカバリー情報E(KPp3,Kr2)を取り出し、再生装置300のコントローラ301へ出力する(S422)。再生装置300のコントローラ301は、ストレージデバイス200から出力されたリカバリー情報E(KPp3,Kr2)を受信すると、これを暗号エンジン303に送る(S424)。
暗号エンジン303が、リカバリー情報E(KPp3,Kr2)を受信すると(S426)、暗号エンジン303の第4復号部331は、リカバリー情報E(KPp3,Kr2)を自身の秘密鍵Kp3で復号してリカバリー鍵Kr2を取り出す(S428)。取り出されたリカバリー鍵Kr2は、ログ署名部332に伝達される。ログ署名部332は、ログ記憶部330から、セッション鍵Ks3、識別情報LicID、情報ST3を取り出し、これらと第4復号部331から伝達されたリカバリー鍵Kr2を連結して、データKr2//Ks3//LicID//ST3を生成する。そして、ハッシュ演算を行い、H(Kr2//Ks3//LicID//ST3)を算出し、この演算結果と識別情報LicID、状態情報ST3を連結して、ステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)を生成し、再生装置300のコントローラ301へ出力する(S430)。
再生装置300のコントローラ301は、暗号エンジン303からステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)を受信すると(S432)、ストレージデバイス200に対してステータス情報処理命令を発行する(S434)。ストレージデバイス200は、再生装置300から発行されたステータス情報処理命令を受理すると(S436)、再生装置300にステータス情報を要求する。再生装置300のコントローラ301は、この要求に応じて、暗号エンジン303から出力されたステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)をストレージデバイス200へ出力する(S438)。
ストレージデバイス200は、ステータス情報LicID//ST3//H(Kr2//Ks3//LicID//ST3)を受理すると(S340)、これを内部の暗号エンジン203に伝達する。暗号エンジン203では、制御部220の指示に従って、ログ検証部236が伝達されたステータス情報を検証し、ステータス情報が信頼できるかの判断によって、ライセンスデータをリカバリー、すなわち、ライセンスデータを出力前の状態に戻すかの判断を行う(S442)。
S442のステータス情報の検証では、次の2項目が確認される。
1)ステータス情報中の識別情報LicIDとログ記憶部234に記憶されている識別情報LicIDが一致しているか。
2)ステータス情報中の識別情報LicID、状態情報ST3、ログ記憶部234に保持されているセッション鍵Ks3、ステップS414で保持したリカバリー鍵Kr2を連結し、この連結されたデータに対してハッシュ関数演算を行った結果H(Kr2//Ks3//LicID//ST3)と、ステータス情報中のハッシュ値H(Kr2//Ks3//LicID//ST3)が一致しているか。
上記2項目の確認において、何れか1つでも不一致であった場合、ステータス情報は信頼できない情報であるとして、リカバリーの対象でないと判断する(S442のN)。制御部220は、リカバリーエラー通知をコントローラ201、ストレージインタフェース202を介して、再生装置300のコントローラ301に送信する(S450)。再生装置300のコントローラ301は、ストレージデバイス200から出力されたエラー通知を受信すると(S452)、S396へ移行し、本処理を継続する。
一方、上記2項目の確認において、2項目共に一致した場合、ステータス情報を信頼できるデータであると承認し、さらに、情報ST3と、ログ記憶部234に記憶されている情報ST2に基づいて、当該ライセンスデータが復旧の対象となるライセンスデータか否かを判断する。これは、コンテンツの著作権者の権利を保護する立場から、復旧の対象となるライセンスデータは、ストレージデバイス200から出力されたものであり、かつ、再生装置300にて消費されていないものに限られるためである。具体的には、情報ST2が「状態SL」であり、かつ、情報ST3が「状態RP」あるいは「状態RL」であるときである。
上記の判断において、復旧の対象であると判断されると(S442のY)、耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCが255でない場合、この制御情報PCを1加算した値に変更する(S444)。そして、制御部220は、リカバリー通知をコントローラ201、ストレージインタフェース202を介して、再生装置300のコントローラ301に送信する(S446)。再生装置300のコントローラ301は、ストレージデバイス200から出力されたエラー通知を受信すると(S448)、S396へ移行し、本処理を継続する。
なお、図10乃至図13に示す、再生装置300がストレージデバイス200に記録されたライセンスデータを利用する手順は、処理が正常に推移した場合の例である。
なお、ライセンスデータの消費の判定における再生時間の測定について、本実施の形態では、復号器304における復号処理の経過時間を測定するものとしたが、復号器304からコンテンツデコーダ305への復号結果の提供の経過時間を測定するものとしてもよい。このほか、コンテンツデコーダ305におけるデコード処理の経過時間、あるいは、コンテンツデコーダ305から出力された再生信号の提供の経過時間を測定するようにしてもよい。
また、本実施の形態では、ライセンスデータの「消費」ではないと判断する境界時間Tを、コンテンツ種類、たとえば、音楽や映像など毎に予め定められているとしたが、利用規則としてライセンスデータLICに含めることもでき、また、これらを併用することもできる。たとえば、境界時間Tが利用規則として設定されていない場合、予め定められた境界時間を用いることができる。
また、本実施の形態では、ライセンスデータの消費の判定における再生開始後の経過時間の測定では、経過時間計測部329はタイマを含み、タイマを用いて時間を計測し、境界時間T秒の経過によって、消費の判断を行うものとしたが、処理したデータ量(復号または再生)によって再生開始後の経過時間を導出し、ライセンスの消費を判断することもできる。これは、コンテンツデータを符号化した符号化方式の特性から、コンテンツデータの処理データ量から再生時間を予測することが可能であるためである。また、コンテンツが、映像コンテンツである場合には、復号した、あるいは再生した映像データのフレーム数によって経過時間を導出し、ライセンスの消費を判断することもできる。ストリームデータ中のタイムスタンプ、例えば、MPEGデータのTS中に埋め込まれた「time_code」を参照して経過時間を算出してもよい。
さらに、ライセンスデータの消費の判定を再生時間によって行うとしているが、「消費」とするコンテンツデータの境界データ量の設定と、再生したデータ量の計測によって、消費の判定を行うようにしてもよい。再生の権利を消費したと判定されない時間分のデータ量を予め算出し、その量のデータをコンテンツデコーダ305に供給してもよい。再生の権利を消費したと判定されない時間又はデータ量の再生が終了したときに、更に再生を継続するか否かをユーザに問い合わせてもよい。ユーザが再生の終了を指示したときには、上述したライセンスデータの復旧手順が実行される。ユーザが再生の継続を指示したときには、再生が継続され、ライセンスデータは復旧されない。
また、本実施の形態では、チャレンジ鍵Kc2とリカバリー鍵Kr2を区別して説明したが、共にライセンスデータの送信先であるストレージデバイス200の乱数発生部221にて生成された共通鍵であることに鑑み、リカバリー鍵Kr2の発生を、チャレンジ鍵Kc2の更新としてもよい。この場合、ストレージデバイス200の暗号エンジン203では、乱数発生部221で生成されたリカバリー鍵Kr2を第4復号部230にも伝達し、第4復号部230は、保持しているチャレンジ鍵Kc2に替えて、伝達されたリカバリー鍵Kr2を保持する。そして、S346からの繰り返しの処理では、セッション情報の復号を、チャレンジ鍵Kc2に代わって、保持したリカバリー鍵Kr2を用いて行う。再生装置300の暗号エンジン303では、第4復号部331で取り出されたリカバリー鍵Kr2が第2暗号部325に伝達され、第2暗号部325は、保持しているチャレンジ鍵Kc2に替えて、伝達されたリカバリー鍵Kr2を保持する。そして、S346からの繰り返しの処理では、セッション情報の生成に当たって、チャレンジ鍵Kc2に代えて保持されたリカバリー鍵Kr2を用いる。
上記の手順では、ライセンスデータを元の状態に復旧させるときに、ストレージデバイス200の制御部220が、耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCに1を加算して元に戻す処理を行った。別の例では、ストレージデバイス200がライセンスデータを出力するときに、そのライセンスデータの出力前の制御情報PCをログ記憶部234に記録しておき、ライセンスデータのリカバリーを要求されたときには、耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCに、ログ記憶部234に記録されている出力前の制御情報PCを上書きすることにより、元の状態に戻してもよい。これにより、ライセンスデータの制御情報PCを確実に元の状態に戻すことができる。
更に別の例では、ライセンスデータの出力前の制御情報PCを再生装置300のログ記憶部330に記録しておき、再生装置300がライセンスデータのリカバリーを要求する際に、そのライセンスデータの出力前の制御情報PCをログ記憶部330から読み出してストレージデバイス200に送り、耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCに上書きさせてもよい。この場合、再生装置300は、ストレージデバイス200との間で共有している共通鍵、例えば、セッション鍵Ks2などで制御情報PC及び識別情報LicIDを暗号化してストレージデバイス200に送信してもよい。ストレージデバイス200の制御部220は、再生装置300から受け取った暗号化された制御情報PCを復号し、耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCに上書きする。
上記の手順では、ライセンスデータを提供する側と享受する側で一方向の暗号通信路を構築する例を示したが、別の例では、双方向の暗号通信路を構築してもよい。この場合、ライセンスデータが送信される方向にかかわらず、ストレージデバイス200が従属的に動作するような通信プロトコルであってもよい。例えば、再生装置300とストレージデバイス200の間で双方向の暗号通信路を構築する場合、ライセンスデータを享受する側の再生装置300が主導的で、ライセンスデータを提供する側のストレージデバイス200が従属的な役割を果たしてもよい。これにより、ストレージデバイス200の構成を簡略化することができる。この通信モードにおいて、再生装置300がストレージデバイス200にライセンスデータのリカバリーを要求する場合、再生装置300がストレージデバイス200にステータス情報を出力させ、再生装置300側でリカバリーの許否を判定してもよい。ライセンスデータのリカバリーが許可された場合、上述したように、再生装置300が、ライセンスデータの元の制御情報PCをストレージデバイス200に送信し、その制御情報PCを耐タンパ記憶部204に記憶されているライセンスデータの制御情報PCに上書きさせることにより、元の状態に復旧させてもよい。
(第2の実施の形態)
図14は、第2の実施の形態に係るコンテンツ配信システムの構成を示す。本実施の形態のコンテンツ配信システムは、第1の実施の形態と同様に、コンテンツを配信する配信サーバ100、コンテンツの提供を受ける端末装置150、端末装置150に提供されたコンテンツが記録されるストレージデバイス200を含み、配信サーバ100および端末装置150は、それぞれ通信装置104、153を介して、ネットワークの一例とするインターネット20により接続される。
第1の実施の形態とは、配信サーバ100の暗号器102と暗号エンジン103が、端末装置150に備えられた構成である点が異なる。
また、配信サーバ100とユーザの端末装置150との間の通信におけるデータの安全性を確保するために、配信サーバ100とユーザの端末装置150間は、SSLあるいは配信事業者が規定する独自のデジタルコンテンツ管理方式にしたがって、安全に保護される。これにより、第1の実施の形態と同様に機能するものである。
以上、本発明に係る実施の形態について説明したが、この実施の形態は例示であり、本発明はこの実施の形態に限定されるものではなく、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
たとえば、上記の実施の形態では、暗号エンジン内において暗号化を行う機能ブロックと復号を行う機能ブロックとを別個に設けたが、これらの構成要素において回路を共有してもよい。これにより、回路規模を抑え、小型化、低消費電力化に寄与することができる。
本発明の実施の形態は、特許請求の範囲に示された技術的思想の範囲内において、適宜種々の変更が可能である。