(第1の実施の形態)
図1は、第1の実施の形態に係るデータ管理システム10の全体構成を示す。データ管理システム10は、ストレージデバイス200へのデータの記録を制御する記録装置100、ストレージデバイス200に記録されたデータの再生を制御する再生装置300、およびデータを記録保持するストレージデバイス200を備える。本実施の形態のストレージデバイス200は、データを保持する記憶媒体だけでなく、記録装置100または再生装置300などのホスト装置と記憶媒体との間でのデータの入出力を制御するコントローラなどの構成を備えるドライブ一体型のストレージデバイスである。本実施の形態では、ストレージデバイス200として、ハードディスクドライブを例にとって説明する。
従来のハードディスクドライブは、一つのホスト装置に固定的に接続されて使用されるのが一般的であったが、本実施の形態のストレージデバイス200は、記録装置100および再生装置300などのホスト装置に対して着脱自在に構成されている。すなわち、本実施の形態のストレージデバイス200は、CDやDVDなどと同様にホスト装置から取り外して持ち運ぶことができ、記録装置100、再生装置300、記録および再生が可能な記録再生装置など、複数のホスト装置間で共用することが可能な記憶装置である。
このように、本実施の形態のストレージデバイス200は、複数のホスト装置に接続されることを前提にしており、たとえば所有者以外の第三者のホスト装置に接続されて、内部に記録されたデータを読み出される可能性もある。このストレージデバイス200に、音楽や映像などの著作権により保護されるべきコンテンツ、企業や個人の機密情報などの秘匿すべきデータを記録することを想定したとき、それらの秘匿データが外部に漏洩することを防ぐためには、ストレージデバイス200自身にデータを適切に保護するための構成を設け、十分な耐タンパ機能を持たせることが好ましい。
このような観点から、本実施の形態のストレージデバイス200は、ホスト装置との間で秘匿データを入出力するときに、その秘匿データを暗号化してやり取りするための構成を備える。また、秘匿データを格納するために、通常の記憶領域とは異なる機密データ記憶領域を設け、その機密データ記憶領域はストレージデバイス200内に設けられた暗号エンジンを介さないとアクセスできないように構成する。この暗号エンジンは、正当な権限を有すると検証されたホスト装置のみと秘匿データの入出力をする。以下、このようなデータ保護機能を「セキュア機能」ともいう。上記の構成および機能により、ストレージデバイス200に記録された秘匿データを適切に保護することができる。
ストレージデバイス200のリムーバブルメディアとしての特徴を最大限に生かすため、通常のデータについては、セキュア機能に非対応のホスト装置でも入出力可能とするのが好ましい。そのため、本実施の形態のストレージデバイス200は、従来のハードディスクとの互換性を保つべく、ANSI(American National Standards Institute)の標準規格であるATA(AT Attachment)に対応しており、上述のセキュア機能は、ATAの拡張命令として実現される。
以下、秘匿データの入出力の例として、映像などのコンテンツデータを記録再生する場合について説明する。コンテンツデータ自身を秘匿データとして扱ってもよいが、本実施の形態では、コンテンツデータを暗号化し、暗号化されたコンテンツデータ自身は、ストレージデバイス200に通常のデータとして記録する。そして、暗号化されたコンテンツを復号するための鍵(コンテンツ鍵と呼ぶ)と、コンテンツの再生制御やライセンスの利用、移動、複製に関する制御に関する情報(利用規則と呼ぶ)を含むデータ(ライセンスデータと呼ぶ)を、秘匿データとして上述のセキュア機能を用いて入出力を行う。これにより、十分な耐タンパ性を維持しつつ、データの入出力を簡略化し、処理の高速化および消費電力の低減を図ることができる。ここで、ライセンスデータは、コンテンツ鍵や利用規則の他に、ライセンスデータを特定するためのライセンスIDなどを含む。
以下、記録装置100、再生装置300などのホスト装置がストレージデバイス200に対して発行する命令のうち、セキュア機能のための拡張命令を「セキュアコマンド」とも呼び、その他の命令を「通常コマンド」とも呼ぶ。
図2は、実施の形態に係る記録装置100の内部構成を示す。この構成は、ハードウエア的には、任意のコンピュータのCPU、メモリ、その他のLSIなどで実現でき、ソフトウエア的にはメモリにロードされた記録制御機能のあるプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
記録装置100は、主に、コントローラ101、ストレージインタフェース102、暗号エンジン103、暗号器104、コンテンツエンコーダ105、およびそれらを電気的に接続するデータバス110を備える。
コンテンツエンコーダ105は、オンラインまたはオフラインにより取得したコンテンツを所定の形式にコーディングする。ここでは、放送波などから取得した映像データをMPEG形式にコーディングする。
暗号器104は、暗号化コンテンツを復号するためのコンテンツ鍵を含むライセンスデータLICを発行し、このコンテンツ鍵を用いて、コンテンツエンコーダ105にてコーディングされたコンテンツを暗号化する。暗号化されたコンテンツは、データバス110およびストレージインタフェース102を介してストレージデバイス200に記録される。発行されたライセンスデータLICは、暗号エンジン103に通知され、暗号エンジン103を介してストレージデバイス200に記録される。
暗号エンジン103は、ライセンスデータLICをストレージデバイス200に入力するために、ストレージデバイス200との間で暗号通信の制御を行う。ストレージインタフェース102は、ストレージデバイス200とのデータの入出力を制御する。コントローラ101は、記録装置100の構成要素を統括的に制御する。
図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などの秘匿データを記録する機密データ記憶領域である。コントローラ201は、ストレージデバイス200の構成要素を統括的に制御する。通常データ記憶部205は、外部から直接アクセス(データの入出力)が行われるが、耐タンパ記憶部204は、暗号エンジン203を介さないとアクセス(データの入出力)ができないように構成される。
ここで、本実施の形態で用いる鍵について説明する。本実施の形態では、鍵はすべて大文字の「K」から始まる文字列として表記する。
第2文字が小文字の「c」あるいは「s」である場合は対称鍵(共通鍵)を表す。「c」の場合はチャレンジ鍵であり、暗号化データの送信元で生成されるテンポラルな対称鍵である。「s」の場合はセッション鍵であり、暗号化データの送信先で生成されるテンポラルな対称鍵である。
第2文字が大文字の「P」である場合は、公開鍵暗号方式の公開鍵を示す。この鍵には対応する秘密鍵が必ず存在し、この秘密鍵は公開鍵の表記から第2文字の大文字の「P」を除く表記となる。
鍵を示す文字列が小文字の「d」を含む場合は、装置のグループ毎に与えられた鍵であることを表す。また鍵を示す文字列が小文字「p」を含む場合は、装置毎に与えられた鍵であることを表す。それぞれは、公開鍵と秘密鍵の対として与えられ、グループ毎に与えられた公開鍵は、電子署名付きの公開鍵証明書として与えられている。
鍵を示す文字列の最後に記載される文字、たとえば、公開鍵KPd2の「2」は、その鍵が与えられる暗号エンジンを識別するための記号である。本実施の形態では、提供先が明確な場合には、「1」、「2」、「3」などの数字により表記し、当該暗号エンジン以外から提供される鍵であって提供先が不明な場合あるいは特定しない場合には、「x」、「y」などの英文字によって表記する。本実施の形態では、記録装置100の暗号エンジン103に対しては識別記号として「1」、ストレージデバイス200の暗号エンジン203については識別記号として「2」、再生装置300の暗号エンジン303については識別記号として「3」をそれぞれ使用する。
ここで、実施の形態で用いる暗号アルゴリズムについて説明する。本実施の形態では、公開鍵暗号方式および対称鍵(共通)暗号方式の2つの方式から、1つずつ暗号アルゴリズムを採用する。
公開鍵暗号方式は、暗号および復号を異なった鍵を用いて行う暗号方式である。暗号化する鍵を公開鍵、復号する鍵を秘密鍵と呼ぶ。公開鍵はその名が示すとおり、公開可能な鍵であり、秘密に管理する必要がない。これに対して、秘密鍵は秘密に管理される。
この方式では、RSA、EC−DH(Elliptic Curve Diffie-Hellman)などの暗号アルゴリズムが知られている。本実施の形態では、EC−DHアルゴリズムを採用する。EC−DHは、有限体上の楕円曲線における乗算(この演算アルゴリズムを楕円曲線暗号と呼ぶ)によって、双方で共有した対称鍵(シェアード鍵と呼ぶ)でデータを暗号化する。暗号化データは、データを暗号化した結果と、シェアード鍵を共有するためのデータ(パラメータと呼ぶ)を連結した形式となる。
たとえば、公開鍵KPdx、秘密鍵Kdxにおける暗号データの送信について説明する。EC−DHでは、両者の関係は、KPdx=Kdx*Bとなる。ここで、楕円曲線上のベースポイントを「B」、楕円曲線上の乗算を「*」で示している。なお、以下の説明において、「x」は暗号データを受け取る側(受信側と呼ぶ)を示し、「y」は暗号データ提供する側(送信側とよぶ)を示す。
受信側は公開鍵KPdxを、送信側に伝達する。送信側は、公開鍵KPdxを受け取ると、暗号データを作成するために、まず、乱数rdyを生成する。そして、公開鍵KPdxと、乱数rdyとを楕円曲線上で掛け合わせシェアード鍵KPdx*rdyを演算によって求める。同時に、受信側とシェアード鍵KPdx*rdyを共有するために、パラメータB*rdyを演算する。なお、ベースポイントBは、楕円曲線の方程式とともに事前に共有している。
生成したシェアード鍵KPdx*rdyで、対象となるデータ(Dataと記す)を暗号化し、暗号データEs(KPdx*rdy,Data)を生成する。そして、パラメータB*rdyと、この結果を連結したB*rdy//Es(KPdx*rdy,Data)をEp(KPdx,Data)として受信側に送る。
ここで、記号「//」は、データの連結を示し、B*rdy//Es(KPdx*rdy,Data)は、パラメータB*rdyと暗号データEs(KPdx*rdy,Data)を並べて結合したデータ列を示す。また、Esは共通鍵暗号方式による暗号化関数を示し、Es(KPdx*rdy,Data)は、対称鍵KPdx*rdyで対象となるデータDataを暗号化したものであることを示す。また、Epは公開鍵暗号方式による暗号化関数を示し、公開鍵KPdxで対象となるデータDataを暗号化したものであることを示す。
このように、EC−DHでは、Ep(KPdx,Data)=B*rdy//Es(KPdx*rdy、Data)となる。
受信側では、Ep(KPdx,Data)を受け取ると、保持している秘密鍵KdxとパラメータB*rdyとを楕円曲線上で掛け合わせシェアード鍵Kdx*B*rdy=KPdx*rdyを求める。求めたシェアード鍵KPdx*rdyで、暗号データEs(KPdx*rdy、Data)を復号する。なお、公開鍵KPpxと秘密鍵Kpxの組についても同様である。
共通鍵暗号方式は同一の鍵によって暗号および復号を行う暗号方式であり、暗号アルゴリズムとしてDES(Data Encryption Standard)、AES(Advanced Encryption Standard)などが知られている。本実施の形態では、いずれの方式も採用可能であるが、前述する公開鍵暗号方式での利用と暗号強度のバランスを考慮し、AESを採用する。
図5は、図2に示した記録装置100の暗号エンジン103の内部構成を示す。暗号エンジン103は、証明書検証部120、乱数発生部121、第1暗号部122、復号部123、第2暗号部124、第3暗号部125、およびこれらの構成要素の少なくとも一部を電気的に接続するローカルバス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暗号部122に伝達し、検証結果を通知する。検証に失敗した場合には、検証エラー通知を出力する。
乱数発生部121は、乱数を発生する。乱数は、疑似乱数であってもよい。ここでは、ストレージデバイス200との間で暗号通信を行うために一時的に使用されるチャレンジ鍵Kc1と乱数rd1、rp1を生成する。暗号通信を行う度に、乱数であるチャレンジ鍵Kc1を生成することで、チャレンジ鍵Kc1を見破られる可能性を最小限に抑える。生成されたチャレンジ鍵Kc1は、第1暗号部122および復号部123に伝達される。また、乱数rd1、rp1は、それぞれ第1暗号部122、第2暗号部124に伝達され、ED−DHによる暗号化に使用される。
第1暗号部122は、ストレージデバイス200にチャレンジ鍵Kc1を通知するために、証明書検証部120により取り出されたストレージデバイス200の公開鍵KPd2でチャレンジ鍵Kc1を暗号化して、暗号化チャレンジ鍵Ep(KPd2,Kc1)=B*rd1//Es(KPd2*rd1,Kc1)を生成する。暗号化には、乱数発生部121が生成した乱数rd1を使用する。
復号部123は、チャレンジ鍵Kc1で暗号化されたデータを復号する。ストレージデバイス200で発行されたセッション鍵Ks2およびストレージデバイス200の保持する公開鍵KPp2は、セッション情報Es(Kc1,Ks2//KPp2)としてストレージデバイス200から供給されるため、復号部123は、乱数発生部121が発生したチャレンジ鍵Kc1を取得して、セッション情報Es(Kc1,Ks2//KPp2)を復号し、セッション鍵Ks2および公開鍵KPp2を取り出す。取り出された公開鍵KPp2とセッション鍵Ks2は、それぞれ第2暗号部124、第3暗号部125に伝達される。
第2暗号部124は、暗号器104がコンテンツを暗号化する際に発行したコンテンツ鍵を含むライセンスデータLICを取得し、そのライセンスデータLICをライセンスデータの提供先、すなわち、ストレージデバイス200の公開鍵KPp2で暗号化したEp(KPp2、LIC)=B*rp1//Es(KPp2*rp1,LIC)を生成する。暗号化には、乱数発生部121が生成した乱数rp1を取得し、使用する。そして、Ep(KPp2、LIC)は、第3暗号部125に伝達される。
第3暗号部125は、第2暗号部124によって生成されたEp(KPp2,LIC)を、さらに、ストレージデバイス200で発行されたセッション鍵Ks2により暗号化し、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を生成する。
図5では、暗号エンジン103の構成要素のうち、証明書検証部120、第1暗号部122、復号部123、および第3暗号部125がローカルバス130により電気的に接続されており、ローカルバス130を介して記録装置100のデータバス110に接続されている。各構成要素を接続する形態にはいろいろな変更例が考えられるが、本実施の形態では、乱数発生部121が発生したチャレンジ鍵Kc1、乱数rd1およびrp1、ストレージデバイス200から受け取ったセッション鍵Ks2が、直接データバス110に流れないよう配慮している。これにより、暗号エンジン103内で使用される各鍵が、記録装置100の他の構成要素などを介して外部に漏洩することを防ぎ、セキュリティ性を向上させることができる。
図6は、図3に示した再生装置300の暗号エンジン303の内部構成を示す。暗号エンジン303は、証明書出力部320、乱数発生部321、第1復号部322、暗号部323、第2復号部324、第3復号部325、およびこれらの構成要素の少なくとも一部を電気的に接続するローカルバス330を備える。
証明書出力部320は、再生装置300の証明書C[KPd3]を出力する。証明書は、証明書出力部320が保持してもよいし、図示しない証明書保持部に保持しておき、それを読み出してもよい。証明書は、再生装置300の公開鍵KPd3を含む証明書本体と、証明書本体に対して付される電子署名からなる。電子署名は、ストレージデバイス200の証明書と同様に、認証局のルート鍵Kaにより暗号化される。
乱数発生部321は、ストレージデバイス200との間で暗号通信を行うために一時的に使用されるセッション鍵Ks3を発生する。生成されたセッション鍵Ks3は、暗号部323および第2復号部324に伝達される。
第1復号部322は、公開鍵KPd3によって暗号化されたデータを秘密鍵Kd3で復号する。再生時には、ストレージデバイス200で発行されたチャレンジ鍵Kc2は、再生装置300の公開鍵KPd3により暗号化したチャレンジ情報Ep(KPd3,Kc2)としてストレージデバイス200から供給されるため、第1復号部322は、自身の秘密鍵Kd3により復号して、チャレンジ鍵Kc2を取り出す。取り出されたチャレンジ鍵Kc2は、暗号部323に伝達される。
暗号部323は、第1復号部322により取り出されたチャレンジ鍵Kc2で、データの暗号化を行う。乱数発生部321で発生したセッション鍵Ks3と自身の公開鍵KPp3を連結して、これを暗号化し、セッション情報Es(Kc2,Ks3//KPp3)を生成する。
第2復号部324は、セッション鍵Ks3で暗号化されたデータを復号する。ライセンスデータは、公開鍵KPp3およびセッション鍵Ks3により2重に暗号化された暗号化ライセンスデータEs(Ks3,Ep(KPp3,LIC))としてストレージデバイス200から供給されるため、第2復号部324は、乱数発生部321が発生したセッション鍵Ks3により復号して、その結果を第3復号部325に伝達される。
第3復号部325は、公開鍵KPp3で暗号化されたデータの復号を行う。公開鍵KPp3と対をなす秘密鍵Kp3で、第2復号部324の結果を復号し、ライセンスデータLICを取り出す。取り出されたライセンスデータLICは、復号器304に伝達され、復号器304はこのライセンスデータLICに含まれるコンテンツ鍵を用いて暗号化コンテンツを復号する。
図6に示した暗号エンジン303においても、各構成要素を接続する形態にはいろいろな変更例が考えられるが、本実施の形態では、乱数発生部321が発生したセッション鍵Ks3、公開鍵と対をなしている秘密鍵Kd3およびKp3、ストレージデバイス200から受け取ったセッション鍵Ks2が、データバス310上を流れないように構成することで、暗号エンジン303内で使用される復号鍵が外部に漏洩することを防ぐ。
図7は、図4に示したストレージデバイス200の暗号エンジン203の内部構成を示す。これらの機能ブロックも、ハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できる。暗号エンジン203は、制御部220、乱数発生部221、証明書出力部222、証明書検証部223、第1復号部224、第1暗号部225、第2復号部226、第3復号部227、第2暗号部228、第4復号部229、第3暗号部230、第4暗号部231およびこれらの構成要素の少なくとも一部を電気的に接続するローカルバス240を備える。
制御部220は、ストレージデバイス200のコントローラ201の指示に従って暗号エンジン203の内部の構成の制御および外部の構成との間でデータの入出力を仲介する。
乱数発生部221は、記録装置100または再生装置300との間の暗号通信に一時的に使用される乱数rd2およびrp2、セッション鍵Ks2、チャレンジ鍵Kc2を、乱数演算によって発生する。具体的には、ストレージデバイス200がライセンスデータを提供する場合、乱数rd2、rp2とチャレンジ鍵Kc2を生成し、ストレージデバイス200がライセンスデータの提供を受ける場合、セッション鍵Ks2を生成する。
証明書出力部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で暗号化されチャレンジ情報Ep(KPd2,Kc1)=B*rd1//Es(KPd2*rd1,Kc1)として記録装置100から供給されるため、これを自身の秘密鍵Kd2で復号し、チャレンジ鍵Kc1を取り出す。取り出したチャレンジ鍵Kc1は、第1暗号部225に与えられる。
第1暗号部225は、記録装置100が発行したチャレンジ鍵Kc1でデータを暗号化する。具体的には、具体的には、乱数発生部221が発生したセッション鍵Ks2と自身の公開鍵KPp2を連結して、チャレンジ鍵Kc1で暗号化し、セッション情報Es(Kc1,Ks2//KPp2)を生成する。
第2復号部226は、乱数発生部221が発生したセッション鍵Ks2で暗号化されたデータを復号する。具体的には、ライセンスデータLICが、公開鍵KPp2およびセッション鍵Ks2により2重に暗号化された暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))として記録装置100から受け取るため、これをセッション鍵Ks2により復号して、結果を第3復号部227に与える。
第3復号部227は、自身の公開鍵KPp2で暗号化されたデータを復号する。第2復号部226から与えられる公開鍵KPp2で暗号化されたライセンスデータEp(KPp2,LIC)=B*rp1//Es(KPp2*rp1,LIC)を、公開鍵KPp2と対をなす自身の秘密鍵Kp2で復号し、ライセンスデータLICを取り出す。
取り出されたライセンスデータLICは、ローカルバス240、制御部220を介して、データバス210に供給され、コントローラ201の指示に従って、耐タンパ記憶部204に記憶される。
第2暗号部228は、再生装置300の公開鍵KPd3でデータを暗号化する。具体的には、再生装置300に対してライセンスデータを提供する場合に、再生装置300から受け取った証明書C[KPd3]から取り出された公開鍵KPd3で、乱数発生部221が生成したチャレンジ鍵Kc2を暗号化し、チャレンジ情報Ep(KPd3,Kc2)=B*rd2//Es(KPd3*rd2,Kc2)を生成する。暗号化には、乱数発生部221が生成した乱数rd2を使用する。生成した暗号化チャレンジ鍵Ep(KPd3,Kc2)は、ローカルバス240を介して制御部220へ与えられる。
第4復号部229は、乱数発生部221が生成したチャレンジ鍵Kc2で暗号化されたデータを復号する。再生装置300から受け取ったセッション情報Es(Kc2,Ks3//KPp3)を、乱数発生部221が生成したチャレンジ鍵Kc2で復号し、セッション鍵Ks3および再生装置300の公開鍵KPp3を取り出す。取り出されたセッション鍵Ks3と公開鍵KPp3は、それぞれ第4暗号部231、第3暗号部230に伝達される。
第3暗号部230は、再生装置300の公開鍵KPp3でデータを暗号化する。再生装置300に対してライセンスデータを提供する場合、再生装置300から受け取った公開鍵KPp3で、ライセンスデータLICを暗号化し、Ep(KPp3,LIC)=B*rp2//Es(KPp3*rp2,LIC)する。ライセンスデータは、コントローラ201の指示に従って、耐タンパ記憶部204から読み出され、データバス210、制御部220およびローカルバス240を介して第3暗号部230に供給される。また、暗号化には、乱数発生部221が生成した乱数rp2を使用する。
第4暗号部231は、再生装置300が発行したセッション鍵Ks3でデータを暗号化する。具体的には、セッション鍵Ks3で、第3暗号部230において再生装置300の公開鍵KPp3で暗号化されたライセンスデータをさらに暗号化し、暗号化ライセンスデータEs(Ks3,Ep(KPp3,LIC))を生成する。
図8および図9は、記録装置100がストレージデバイス200にライセンスデータLICを記録するまでの手順を示す。
まず、記録装置100のコントローラ101は、ストレージデバイス200に対して証明書出力命令を発行する(S102)。ストレージデバイス200のコントローラ201は、証明書出力命令を正常に受理する(S104)と、暗号エンジン203に証明書の出力を命じ、暗号エンジン203から証明書C[KPd2]を読み出して記録装置100へ出力する(S106)。
コントローラ101は、ストレージデバイス200から証明書C[KPd2]を取得すると、それを記録装置100の暗号エンジン103に送る(S108)。暗号エンジン103がストレージデバイス200の証明書C[KPd2]を受信すると(S110)、証明書検証部120は、検証鍵KPaで証明書を検証する(S112)。証明書が承認されなかった場合(S112のN)、証明書検証部120は検証エラー通知をコントローラ101に送信する(S190)。コントローラ101は、エラー通知を受信すると(S192)、処理を異常終了する。
証明書が承認された場合(S112のY)、暗号エンジン103は、乱数発生部121においてチャレンジ鍵Kc1を生成し、生成したチャレンジ鍵Kc1を第1暗号部122と復号部123に伝達する。復号部123は、このチャレンジ鍵Kc1を内部に保持する(S114)。さらに、乱数発生部121は、乱数rd1を生成し、生成した乱数rd1を第1暗号部122に伝達する。第1暗号部122では、乱数rd1を用いて、シェアード鍵KPd2*rd1とパラメータB*rd1を演算する(S116)。このシェアード鍵KPd2*rd1で、チャレンジ鍵Kc1を暗号化して、チャレンジ情報Ep(KPd2,Kc1)=B*rd1//Es(KPd2*rd1,Kc1)を生成し、コントローラ101に伝達する(S118)。
コントローラ101は、チャレンジ情報Ep(KPd2,Kc1)を受信すると(S120)、ストレージデバイス200に対してチャレンジ情報処理命令を発行する(S124)。ストレージデバイス200では、コントローラ201がチャレンジ情報処理命令を受理すると、チャレンジ情報Ep(KPd2,Kc1)の入力を要求する(S126)。記録装置100のコントローラ101は、この要求に応じてチャレンジ情報Ep(KPd2,Kc1)をストレージデバイス200へ出力する(S128)。
ストレージデバイス200は、チャレンジ情報Ep(KPd2,Kc1)を受理すると(S130)、暗号エンジン203では、第1復号部224が、チャレンジ情報Ep(KPd2,Kc1)をパラメータB*rd1と暗号化チャレンジ鍵Es(KPd2*rd1,Kc1)に分解する。パラメータB*rd1と自身の秘密鍵Kd2から、シェアード鍵Kd2*B*rd1(=KPd2*rd1)を演算し(S132)、これで暗号化チャレンジ鍵Es(KPd2*rd1,Kc1)を復号し、チャレンジ鍵Kc1を取り出す(S134)。そして、第1復号部224にて取り出されたチャレンジ鍵Kc1は、第1暗号部225に保持される(S136)。
一方、コントローラ101は、ストレージデバイス200においてチャレンジ情報処理命令の処理が終了すると、ストレージデバイス200に対してセッション情報生成命令を発行する(S138)。ストレージデバイス200では、コントローラ201がセッション情報生成命令を受理すると(S140)、暗号エンジン203では制御部220の指示に従って、乱数発生部221がセッション鍵Ks2を生成し、生成したセッション鍵Ks2を第2復号部226および第1暗号部225に与える。そして、第2復号部226は、このセッション鍵Ks2を保持する(S142)。第1暗号部225は、このセッション鍵Ks2と自身の公開鍵KPp2とを連結し、ステップS136で保持したチャレンジ鍵Kc1で暗号化して、セッション情報Es(Kc1,Ks2//KPp2)を生成する(S144)。
一方、記録装置100のコントローラ101は、ストレージデバイス200においてセッション情報生成命令の処理が終了すると、セッション情報出力命令を発行する(S146)。ストレージデバイス200では、セッション情報出力命令を受理すると(S148)、コントローラ201が、暗号エンジン203からセッション情報Es(Kc1,Ks2//KPp2)を読み出し、記録装置100のコントローラ101へ出力する(S150)。
記録装置100のコントローラ101は、ストレージデバイス200からセッション情報Es(Kc1,Ks2//KPp2)を受信すると、それを暗号エンジン103に送る(S152)。暗号エンジン103が、コントローラ101からセッション情報Es(Kc1,Ks2//KPp2)を受信すると(S154)、復号部123は、ステップS114で保持したチャレンジ鍵Kc1でセッション情報Es(Kc1,Ks2//KPp2)を復号し、セッション鍵Ks2とストレージデバイス200の公開鍵KPp2を取り出し(S156)、それぞれ第3暗号部125、第2暗号部124に伝達する。
つづいて、暗号エンジン103は、このライセンスデータの記録が、ステップS114のチャレンジ鍵Kc1保持後、初回の記録処理か、繰り返し記録による2回目以降の記録処理かを判断する(S158)。初回の処理の場合(S158のY)、暗号エンジン103は、乱数発生部121において乱数rp1を生成し、生成した乱数rp1を第2暗号部124に伝達する。第2暗号部124では、乱数rp1を用いて、シェアード鍵KPp2*rp1とパラメータB*rp1を演算し、内部に保持する(S160)。
一方、2回目以降の処理の場合(S158のN)、ステップS160をスキップし、すなわち、シェアード鍵KPp2*rp1とパラメータB*rp1を生成せず、次のステップS162へ進む。
第2暗号部124は、保持しているシェアード鍵KPp2*rp1で、暗号器104が発行したライセンスデータLICを暗号化して、暗号化ライセンスデータEp(KPp2,LIC)=B*rp1//Es(KPp2*rp1,LIC)を生成し、第3暗号部125に伝達する。そして、第3暗号部125は、第2暗号部124により生成された暗号化ライセンスデータEp(KPp2,LIC)を、さらに、ストレージデバイス200が発行したセッション鍵Ks2で暗号化し、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を生成し、コントローラ101に送る(S162)。
このように、初回の場合(158のY)、新しくシェアード鍵KPp2*rp1とパラメータB*rp1を生成する楕円曲線上での乗算、すなわち、公開鍵暗号方式による暗号演算を行い、演算結果であるシェアード鍵KPp2*rp1とパラメータB*rp1を用いてステップS162を実施し、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を生成し、コントローラ101に送る。
一方、2回目以降の処理の場合(S158のN)、新たにシェアード鍵KPp2*rp1とパラメータB*rp1を生成せず、ステップS160へ進み、初回の処理で作成し、第2暗号部124の内部に保持されたシェアード鍵KPp2*rp1とパラメータB*rp1を用いて、ステップS162を実施し、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を生成し、コントローラ101に送る。すなわち、シェアード鍵KPp2*rp1とパラメータB*rp1の生成を行わないため、楕円曲線上での乗算を省略でき、データの暗号化処理のみを行う。この場合の処理時間は、共通鍵暗号方式の暗号演算と同様であり、高速演算が可能である。このように、2回目以降の処理は、楕円曲線上での乗算を行う初回の処理と比べて、高速に処理することができる。
コントローラ101は、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を受信すると(S164)、ストレージデバイス200に対してライセンスデータ書込命令を発行する(S166)。ライセンス書込命令は、耐タンパ記憶部204における記録位置を指定するアドレスと、暗号化ライセンスデータを復号する時に、シェアード鍵生成の演算の有無を示す制御情報を伴っている。ここでアドレスとは、論理アドレスを示し、耐タンパ記憶部204における記録位置を直接指定するものではないが、アドレスを指定して記録したデータは、同じアドレスを指定することで読み出せるようにコントローラ201によって管理されている。しかしながら、直接、耐タンパ記憶部204における位置を示す物理アドレスであってもよい。
ストレージデバイス200は、ライセンス書込命令を受理すると(S168)、暗号化ライセンスデータの入力を要求し、記録装置100のコントローラ101は、この要求に応じて、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))をストレージデバイス200へ出力する(S170)。
ストレージデバイス200は、暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を受理すると(S172)、暗号エンジン203の第2復号部226に伝達する。第2復号部226は、内部に保持しているセッション鍵Ks2で暗号化ライセンスデータEs(Ks2,Ep(KPp2,LIC))を復号し、自身の公開鍵KPp2で暗号化されたライセンスデータEp(KPp2,LIC)を取り出す(S174)。そして、取り出した暗号化されたライセンスデータEp(KPp2,LIC)を第3復号部227に伝達する。
そして、制御部220は、シェアード鍵の生成の有無を示す制御情報を確認する(S176)。生成が必要な場合、すなわち、このライセンスデータの記録が、ステップS136の共通鍵Kc1保持後、初回の記録処理の場合(S176のY)、第3復号部227は、伝達されたEp(KPp2,LIC)=B*rp1//Es(KPp2*rp1,LIC)から、パラメータB*rp1を取り出し、パラメータB*rp1と自身の秘密鍵Kp2から、シェアード鍵Kp2*B*rp1=KPp2*rp1を楕円曲線上で演算し、これを内部に保持する(S178)。
一方、シェアード鍵の演算が不要な場合、すなわち、2回目以降の処理の場合(S176のN)、ステップS178をスキップし、シェアード鍵Kp2*B*rp1を生成せず、次のステップS180へ進む。
第3復号部227は、内部に保持する鍵Kp2*B*rp1で、第2復号部226から伝達された暗号化されたライセンスデータEp(KPp2,LIC)を復号してライセンスデータLICを取り出し(S180)、ローカルバス240、制御部220を介してデータバス210に伝達する。
このように、初回の場合(176のY)、新しくシェアード鍵Kp2*B*rp1とを生成する楕円曲線上での乗算、すなわち、公開鍵暗号方式による暗号演算を行い、演算結果であるシェアード鍵KPp2*rp1で、暗号化ライセンスデータEp(KPp2,LIC)を復号し、ライセンスデータLICを取り出す。
一方、2回目以降の処理の場合(S176のN)、新たにシェアード鍵KPp2*rp1を生成せずにステップS180へ進み、初回の処理で作成し、第3復号部227に保持されたシェアード鍵Kp2*B*rp1を用いて、暗号化ライセンスデータEp(KPp2,LIC)を復号し、ライセンスデータLICを取り出す。
コントローラ201は、データバス210に伝達されたライセンスデータを耐タンパ記憶部204の指定されたアドレスに記憶する格納処理を行う(S182)。
一方、コントローラ101は、ストレージデバイス200においてライセンスデータ書込命令の処理が終了後、続けてライセンスデータを記録するか否か判断する(S184)。
続けてライセンスデータを記録する場合(S184のY)、ステップS138に移行して、セッション情報の生成命令の発行から手順を開始する。これは、複数のライセンスデータを記録する場合に、証明書の検証処理および、公開鍵暗号方式による暗号演算および復号演算を複数の記録処理で共有し、続けてライセンスデータを記録する場合に、2回目以降の記録にかかる処理時間を短縮するための手順である。1つのライセンスデータの記録後、直ちに次のライセンスデータの記録を行わなければならないわけではない。暗号エンジン103とストレージデバイス200が、チャレンジ鍵Kc1とシェアード鍵KPp2*rp1とパラメータB*rp1を共有している、具体的には、記録装置100の暗号エンジン103の復号部123と、ストレージデバイス200の暗号エンジン203の第1暗号部225が、同じチャレンジ鍵Kc1を保持し、かつ、記録装置100の暗号エンジン103の第2暗号部124と、ストレージデバイス200の暗号エンジン203の第3復号部227が、同じシェアード鍵KPp2*rp1とパラメータB*rp1をともに保持している状態であればいかなるタイミングであっても良い。
また、続けてライセンスデータを記録する場合であっても、ステップS102から手順を開始してもよいが、2回目以降であっても、初回として扱われるために記録時に時間を要することになる。
一方、続けてライセンスデータを記録しない場合(S184のN)、処理は正常終了する。
以上の手順により、暗号化されたコンテンツを復号し再生するために必要なライセンスデータがストレージデバイス200に記録される。暗号化コンテンツは、通常データであり、通常コマンドによって直接ストレージデバイス200の通常データ記憶部205に記憶される。この通常データの記憶処理については、その説明を省略する。
なお、ストレージデバイス200へのライセンスデータと暗号化コンテンツデータの記録順序は、いずれが先であってもかまわない。さらには、暗号化コンテンツデータの記録時における、空き時間にセキュアコマンドを分割して発行することで、ライセンスデータを記録するようにしてもよい。
また、ストレージデバイス200の暗号エンジン203の制御部220において、初回の処理か、2回目以降の処理かを判断する手段として、ライセンス書込命令に、シェアード鍵生成の演算の有無を指示するように示したが、本実施の形態のように、シェアード鍵の演算の有無に関わらず、暗号化ライセンスデータにパラメータが含まれる場合、初回の処理時にパラメータを保持しておき、保持したパラメータと受理した暗号化ライセンスデータに含まれるパラメータの一致・不一致をもって、2回目以降か否かを判断してもよい。さらには、2回目以降は、暗号化ライセンスデータにパラメータを含まない形式とし、パラメータの有無によって判断するようにしてもよい。また、本実施の形態における暗号エンジン103と同様に、処理手順を内部で管理して判断してもよい。なお、暗号エンジン103における判断も同様にすることができる。
なお、図8および図9に示した記録装置100がストレージデバイス200にライセンスデータを記録するまでの手順は、正常に処理が推移した場合の例である。
図10および図11は、再生装置300がストレージデバイス200からライセンスデータを読み出すまでの手順を示す。
まず、再生装置300のコントローラ301は、暗号エンジン303に対して証明書の送信要求を行う(S302)。暗号エンジン303は、この送信要求を受け取ると(S304)、証明書出力部320により、証明書C[KPd3]をコントローラ301へ送る(S306)。コントローラ301は、暗号エンジン303から証明書C[KPd3]を受信すると(S308)、ストレージデバイス200に対して証明書検証命令を発行する(S310)。
ストレージデバイス200は、証明書検証命令を受理すると(S312)、証明書の入力を要求し、再生装置300のコントローラ301は、この要求に応じて、暗号エンジン303から受け取った証明書C[KPd3]をストレージデバイス200へ出力する(S314)。
ストレージデバイス200は、証明書C[KPd3]を受理すると(S316)、証明書C[KPd3]を内部の暗号エンジン203に与える。暗号エンジン203内では制御部220の指示に従って、証明書検証部223が、証明書C[KPd3]を検証鍵KPaで検証する(S318)。証明書が承認されなかった場合(S318のN)、証明書検証部223は検証エラー通知を制御部220、コントローラ201、ストレージインタフェース202を介して、コントローラ301に送信する(S400)。再生装置300のコントローラ301は、エラー通知を受信すると(S402)、処理を異常終了する。
一方、証明書C[KPd3]が承認された場合(S318のY)、暗号エンジン203は、公開鍵KPd3を第2暗号部228に保持する(S320)。
一方、再生装置300のコントローラ301は、ストレージデバイス200で、暗号エンジン303の証明書C[KPd3]が承認されると、ストレージデバイス200に対してチャレンジ情報生成命令を発行する(S322)。そして、ストレージデバイス200は、チャレンジ情報生成命令を受理する(S324)。そして、暗号エンジン203内では制御部220の指示に従って、乱数発生部221がチャレンジ鍵Kc2を生成し、生成したチャレンジ鍵Kc2を第2暗号部228および第4復号部229に伝達する。そして、第4復号部229は、このチャレンジ鍵Kc2を内部に保持する(S326)。さらに乱数発生部221は、乱数rd2を生成し、生成した乱数rd2を第2暗号部228に伝達する。そして、第2暗号部228は、ステップS320にて保持した公開鍵KPd3と乱数rd2とを演算し、シェアード鍵KPd3*rd2およびパラメータB*rd2を算出する(S328)。そして、乱数発生部221から伝達されたチャレンジ鍵Kc2を、演算したシェアード鍵KPd3*rd2で暗号化し、チャレンジ情報Ep(KPd3,Kc2)を生成する(S330)。
一方、コントローラ101は、ストレージデバイス200においてチャレンジ情報生成命令の処理が終了すると、チャレンジ情報出力命令を発行する(S332)。そして、ストレージデバイス200は、チャレンジ情報出力命令を受理すると(S334)、コントローラ201によって、暗号エンジン203からチャレンジ情報Ep(KPd3,Kc2)を取り出し、再生装置300のコントローラ301へ出力する(S336)。
再生装置300のコントローラ301は、チャレンジ情報Ep(KPd3,Kc2)を受信すると、それを暗号エンジン303に送る(S338)。そして、暗号エンジン303が、チャレンジ情報Ep(KPd3,Kc2)を受信すると(S340)、暗号エンジン303では、第1復号部322は、チャレンジ情報Ep(KPd3,Kc2)をパラメータB*rd2と暗号化チャレンジ鍵Es(KPd3*rd2,Kc2)に分解する。パラメータB*rd2と自身の秘密鍵Kd3から、シェアード鍵Kd3*B*rd2(=KPd3*rd2)を演算し(S342)、これで暗号化チャレンジ鍵Es(KPd3*rd2,Kc2)を復号し、チャレンジ鍵Kc2を取り出す(S344)。そして、取り出されたチャレンジ鍵Kc2は、暗号部323に伝達され保持される(S346)。
一方、再生装置300のコントローラ301は、ストレージデバイス200に対してライセンス読出命令を発行する(S348)。ライセンス読出命令は、耐タンパ記憶部204における読み出し位置を指定するアドレスを伴っている。ストレージデバイス200は、ライセンス読出命令を受理すると(S350)、耐タンパ記憶部204の指定されたアドレスに記憶されているライセンスデータLICを読み出し、読み出されたライセンスデータLICは暗号エンジン203の第3暗号部230によって保持される(S352)。
一方、再生装置300のコントローラ301は、暗号エンジン303に対してセッション情報の送信要求を行う(S354)。暗号エンジン303は、この送信要求を受け取ると(S356)、暗号エンジン303では、乱数発生部321が、セッション鍵Ks3を生成して、暗号部323および第2復号部324に伝達する。第2復号部324では、このセッション鍵Ks3を内部に保持する(S358)。
暗号部323は、乱数発生部321が生成したセッション鍵Ks3に自身の公開鍵KPp3を連結したKs3//KPp3を、ステップS346で保持したチャレンジ鍵Kc2で暗号化して、セッション情報Es(Kc2,Ks3//KPp3)を生成し、コントローラ301へ送る(S360)。コントローラ301は、暗号エンジン303からセッション情報Es(Kc2,Ks3//KPp3)を受信すると(S362)、ストレージデバイス200に対してセッション情報処理命令を発行する(S364)。このセッション情報処理命令は、ライセンスデータを暗号化する時に、シェアード鍵生成の有無を示す制御情報を伴っている。
ストレージデバイス200は、セッション情報処理命令を受理すると(S366)、セッション情報の入力を要求し、再生装置300のコントローラ301は、この要求に応じて、暗号エンジン303から受け取ったセッション情報Es(Kc2,Ks3//KPp3)をストレージデバイス200へ出力する(S367)。ストレージデバイス200は、セッション情報Es(Kc2,Ks3//KPp3)を受理すると(S368)、暗号エンジン203の第4復号部229に与える。第4復号部229は、与えられたセッション情報Es(Kc2,Ks3//KPp3)を、ステップS326で保持したチャレンジ鍵Kc2で復号する。そして、再生装置300が発行したセッション鍵Ks3と再生装置300の公開鍵KPp3を取り出し、それぞれ第4暗号部231、第3暗号部230に伝達する(S370)。
そして、制御部220は、シェアード鍵生成の有無を示す制御情報を確認する(S372)。シェアード鍵生成が必要な場合、すなわち、ステップS326のチャレンジ鍵Kc2の生成後、初めての再生処理の場合(S372のY)、制御部220は、乱数発生部221に乱数rp2の生成を指示する。乱数発生部221は、乱数rp2を生成し、生成した乱数rp2を第3暗号部230に伝達する。第3暗号部230では、乱数rp2を用いて、シェアード鍵KPp3*rp2とパラメータB*rp2を演算し、内部に保持する(S374)。
一方、シェアード鍵生成が不要な場合、すなわち、ステップS326のチャレンジ鍵Kc2の生成後、2回目以降の再生処理の場合(S372のN)、ステップS374をスキップし、シェアード鍵KPp3*rp2とパラメータB*rp2を生成せずに次のステップS376へ進む。
第3暗号部230は、ステップS352で保持したライセンスデータLICを、保持しているシェアード鍵KPp3*rp2で暗号化し、この結果と保持しているパラメータB*rp2を連結して、暗号化ライセンスデータB*rp2//Es(KPp3*rp2,LIC)=Ep(KPp3,LIC)を生成し、第4暗号部231に伝達する。第4暗号部231は、暗号化ライセンスデータEp(KPp3,LIC)を、第4復号部229から与えられたセッション鍵Ks3で暗号化し、暗号化ライセンスデータEs(Ks3,(Ep(KPp3,LIC))を生成する(S376)。
一方、再生装置300のコントローラ301は、ストレージデバイス200においてセッション情報処理命令の処理が終了、すなわち、暗号化ライセンスデータが生成されると、暗号化ライセンス出力命令を発行する(S378)。ストレージデバイス200では、暗号化ライセンス出力命令を受理する(S380)と、コントローラ201が、暗号エンジン203から暗号化ライセンスデータEs(Ks3,Ep(KPp3,LIC))を取り出し、再生装置300のコントローラ301へ出力する(S382)。
再生装置300のコントローラ301は、ストレージデバイス200から暗号化ライセンスデータEs(Ks3,Ep(KPp3,LIC))を受信すると、それを暗号エンジン303に送る(S384)。暗号エンジン303が暗号化ライセンスデータを受信すると(S386)、第2復号部324は、ステップS358で保持したセッション鍵Ks3で暗号化ライセンスデータEs(Ks3,Ep(KPp3,LIC))を復号し(S388)、復号結果Ep(KPp3,LIC)を第3復号部325に伝達する。
そして、この再生処理がステップS346のチャレンジ鍵Kc2保持後、初回の処理か、2回目以降の処理か判断する(S390)。初回の再生処理の場合(S390のY)、第3復号部325は、伝達されたEp(KPp3,LIC)=B*rp2//Es(KPp3*rp2,LIC)から、パラメータB*rp2を取り出し、パラメータB*rp2と自身の秘密鍵Kp3から、シェアード鍵Kp3*B*rp2=KPp3*rp2を楕円曲線上で演算し、演算結果を内部に保持する(S392)。
一方、シェアード鍵の生成が必要でない場合、すなわち、2回目以降の再生処理の場合(S390のN)、ステップS392をスキップし、シェアード鍵Kp3*B*rp2を生成せずに次のステップS394へ進む。
第3復号部325は、伝達されたEp(KPp3,LIC)=B*rp2//Es(KPp3*rp2,LIC)から、暗号化されたライセンスデータEs(KPp3*rp2,LIC)を取り出し、内部に保持するシェアード鍵Kp3*B*rp2で復号し、ライセンスデータLICを取り出す(S394)。そして、ライセンスデータは、復号器304に送られ(S396)、復号器304が暗号化コンテンツデータを復号する際に用いられる。以上の手順により、暗号化コンテンツを復号するためのライセンスデータが、ストレージデバイス200から再生装置300により読み出される。
このように、再生処理が初回の場合(390のY)、新しくシェアード鍵Kp3*B*rp2を生成する楕円曲線上での乗算、すなわち、公開鍵暗号方式による暗号演算を行い、演算結果であるシェアード鍵KPp3*rp2で、暗号化ライセンスデータEp(KPp3,LIC)を復号し、ライセンスデータLICを取り出す。
一方、2回目以降の再生処理の場合(S390のN)、シェアード鍵KPp3*rp2とパラメータB*rp2を生成せずに復号処理のステップS394へ進み、初回の処理で作成し、第3復号部325に保持されたシェアード鍵Kp3*B*rp2で、暗号化ライセンスデータEp(KPp3,LIC)を復号し、ライセンスデータLICを取り出す。
再生装置300のコントローラ301は、ストレージデバイス200においてライセンスデータの読み出し後、続けて、他のライセンスデータを読み出す場合(S398のY)、ステップS348に移行し、ライセンス読出命令の発行から手順を開始する。これは、複数のライセンスデータの読み出しにおいて、証明書の検証処理を共有とすることで処理を軽減することを目的とした手順である。ここで、続けてライセンスデータを読み出するとしたが、1つのライセンスデータを読み出し後、直ちに次の読み出しを行わなければならないわけではない。暗号エンジン103とストレージデバイス200が、チャレンジ鍵Kc2とシェアード鍵KPp3*rp2とパラメータB*rp2を共有している、具体的には、ストレージデバイス200の暗号エンジン203の第4復号部229と再生装置300の暗号エンジン303の暗号部323とが、同じチャレンジ鍵Kc2を共有し、かつ、ストレージデバイス200の暗号エンジン203の第3暗号部230と、再生装置300の暗号エンジン303の第2復号部324とが、同じシェアード鍵KPp3*rp2と同じパラメータB*rp2をともに保持している状態であればいかなるタイミングであっても良い。
また、続けてライセンスデータを読み出す場合であっても、ステップS302から手順を開始してもよいが、この場合、再生処理が2回目以降であっても、初回として扱われるため時間を要す。
続けて他のライセンスデータを読み出さない場合(S398のN)には、コントローラ301は、正常に処理を終了する。
上記実施の形態では、ストレージデバイス200の暗号エンジン203の制御部220において、初回の処理か、2回目以降の処理かを判断する手段として、ライセンス書込命令に、シェアード鍵の演算の有無を指示するように示したが、本実施の形態のように、シェアード鍵の演算の有無に関わらず、セッション情報に公開鍵KPp3が含まれる場合、初回の処理時に、公開鍵KPp3を保持しておき、保持した公開鍵KPp3と受理したセッション情報に含まれる公開鍵KPp3との一致・不一致をもって、2回目以降の処理をか否か判断することもできる。さらに、2回目以降の処理では、セッション情報に公開鍵KPp3を含まない形式とし、公開鍵KPp3の有無によって判断するようにしてもよい。また、制御部220によって処理手順を内部で管理して判断してもよい。
このようにして、ストレージデバイス200に記録されたライセンスデータを、他のストレージデバイスに対して複製(ストレージデバイス200に記録されたライセンスデータが利用可能)あるいは移動(ストレージデバイス200に記録されたライセンスデータが削除あるいは無効化される)によって記録する処理を提供することができる。新たにライセンスデータを記録する他のストレージメディアが同様な機能を備えていれば、同様な手順にてストレージデバイス間でライセンスを転送し、ストレージデバイス200から他のストレージデバイスにライセンスを記録することができることは明らかである。この場合、ストレージデバイス200から他のストレージデバイスへのライセンスの転送は、上記ストレージデバイス200から再生装置300へのライセンスの利用と、また、他のストレージデバイスからストレージデバイス200へのライセンスの転送は、上記記録装置100からストレージデバイス200へのライセンスの記録と同様に機能する。
上記実施の形態では、簡単化のためシェアード鍵Kp2*B*rp1=KPp2*rp1、Kp3*B*rp2=KPp3*rp2によりデータを暗号化すると説明したが、データの暗号化については、Kp2*B*rp1またはKp3*B*rp2から対称鍵アルゴリズムの鍵長のデータを導出してから、この導出関数の結果によりデータを暗号化するすることもできる。これにより、楕円曲線暗号により共有されるシェアード鍵Kp2*B*rp1、Kp3*B*rp2と、対称鍵暗号アルゴリズムで使用できる鍵の形式の違いを補償することができる。なお、このとき、楕円曲線上の2次元座標であるシェアード鍵Kp2*B*rp1、Kp3*B*rp2の2つの座標値、或いは一方の座標値から、データを暗号化する対称鍵暗号アルゴリズムの鍵長のデータを求める導出関数をベースポイントと共に事前にライセンスデータ送信元とライセンスデータ送信先で共有しておく必要がある。
上記実施の形態によれば、公開鍵暗号アルゴリズムに、公開鍵暗号アルゴリズムに比べて演算量が少なく、またハードウェア化も容易な共通鍵暗号アルゴリズムを組み合わせることにより、ライセンスデータのような秘匿すべきデータに対するアクセス(記録あるいは読み出し)を繰り返して行う場合にも、安全性を損なうことなく高速に秘匿データにアクセスすることができるため、ストレージデバイスとホスト装置との間で秘匿すべきデータを暗号化して入出力するときの処理効率を向上させることができる。
(第2の実施の形態)
図12は、第2の実施の形態に係る記録再生装置400の構成を示す。本実施の形態では、第1の実施の形態における記録装置100および再生装置300が一つの記録再生装置400として実現されている。
本実施の形態の記録再生装置400は、コントローラ401、ストレージインタフェース402、記録部403、再生部404、およびこれらの構成要素の少なくとも一部を電気的に接続するデータバス410を備える。記録部403は図2に示した第1の実施の形態における記録装置100の構成を、再生部404は図3に示した第1の実施の形態における再生装置300の構成を各々備えている。なお、本図中、第1の実施の形態と同様の構成には同じ符号を付している。
暗号エンジン103は、第1の実施の形態における記録装置100の暗号エンジン103に対応し、暗号エンジン303は、第1の実施の形態における再生装置300の暗号エンジン303に対応する。暗号エンジン103の内部構成は、図5に示した第1の実施の形態の暗号エンジン103と同様であり、暗号エンジン303の内部構成は、図6に示した第1の実施の形態の暗号エンジン303の内部構成と同様である。コントローラ401は、第1の実施の形態における記録装置100のコントローラ101と再生装置300のコントローラ301の双方の機能を有する。ストレージインタフェース402は、ストレージデバイス200とのデータの入出力を制御し、データバス410は、記録再生装置400の構成を電気的に接続する。
本実施の形態における記録再生装置400の動作も、第1の実施の形態における動作と同様であり、第1の実施の形態で説明した動作において、記録装置100および再生装置300を記録再生装置400に、コントローラ101および301をコントローラ401に、ストレージインタフェース102および302をストレージインタフェース402に、データバス110および310をデータバス410にそれぞれ置き換えたものと同様である。
なお、本実施の形態では、記録部403、再生部404は、各々暗号エンジン103、暗号エンジン303を備えるが、これらの暗号エンジン内の同一機能ブロックを共有する構成としても良く、この場合、第1の実施の形態における図7で示すストレージデバイス200における暗号エンジン203と同様の構成となる。
(第3の実施の形態)
図13は、第3の実施の形態に係るコンテンツ配信システムの構成を示す。本実施の形態では、第1の実施の形態における記録装置100が、コンテンツを配信する配信サーバ500とコンテンツの提供を受ける端末装置520として実現されている。なお、本図中、第1の実施の形態における記録装置100と同一の構成には同じ符号を付している。
配信サーバ500は、暗号エンジン103、通信装置502、コンテンツデータベース503、ライセンスデータベース504、ユーザデータベース505、それらを制御するコントローラ501、およびそれらを電気的に接続するデータバス510を備える。端末装置520は、コントローラ101、ストレージインタフェース102、通信装置521、およびそれらを電気的に接続するデータバス522を備える。配信サーバ500と端末装置520は、それぞれ通信装置502、521を介して、ネットワークの一例としてのインターネット20により接続される。
配信サーバ500の暗号エンジン103は、第1の実施の形態の暗号エンジン103と同様の機能を有し、端末装置520のコントローラ101およびストレージインタフェース102は、それぞれ第1の実施の形態のコントローラ101およびストレージインタフェース102と同様の機能を有する。
コンテンツデータベース503は、ユーザに提供するコンテンツを保持する。ライセンスデータベース504は、コンテンツを暗号化するのに用いられるコンテンツ鍵を含むライセンスデータを保持する。本実施の形態では、コンテンツは既にコンテンツ鍵により暗号化されてコンテンツデータベース503に格納されているが、コンテンツデータベース503に暗号化される前のコンテンツを格納しておき、配信サーバ500に、第1の実施の形態の記録装置100が備えるコンテンツエンコーダ105および暗号器104をさらに設け、コンテンツデータベース503からコンテンツを読み出してエンコードし、暗号化してもよい。ユーザデータベース505は、コンテンツの提供先であるユーザの情報を保持する。たとえば、ユーザの個人情報、ユーザの端末装置520のアドレス、コンテンツの購入履歴、課金情報などを保持してもよい。
コントローラ501は、ユーザの要求に応じて暗号化コンテンツをコンテンツデータベース503から読み出し、ユーザに提供する。そして、暗号エンジン103によりそのコンテンツを復号するためのライセンスデータがユーザに提供されると、このコンテンツ提供の対価を課金すべくユーザデータベース505を更新する。
本実施の形態において、データバス510、通信装置502、インターネット20、通信装置521およびデータバス522を、構成を電気的に接続している第1の実施の形態におけるデータバス110とすれば、第1の実施の形態と同様の構成となる。
本実施の形態の暗号入出力処理の手順は、第1の実施の形態と同様である。本実施の形態では、暗号エンジン103とコントローラ101との間の通信がインターネット20を介して行われるのが、図8および図9で説明したように、暗号エンジン103とコントローラ101との間でも必ずデータを暗号化して送受信を行うので、高い耐タンパ性を実現することができる。
コンテンツの再生については、第1の実施の形態における再生装置300、または、第2の実施の形態における記録再生装置400に、ストレージデバイス200を装着することによって行うことができる。さらに、端末装置520に、第2の実施の形態における記録再生装置400の再生部404を備える構成として、再生を行うようにしてもよい。
以上、本発明に係る実施の形態について説明したが、この実施の形態は例示であり、本発明はこの実施の形態に限定されるものではなく、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば、上記の実施の形態では、暗号エンジン内において暗号化を行う機能ブロックと復号を行う機能ブロックとを別個に設けたが、これらの構成要素において回路を共有してもよい。これにより、回路規模を抑え、小型化、低消費電力化に寄与することができる。
本発明の実施の形態は、特許請求の範囲に示された技術的思想の範囲内において、適宜種々の変更が可能である。