(57)【要約】【課題】ハードディスク装置などの記憶装置に格納されたデータの改ざんを検知して、データの安全性を高め、コンテンツ保護をおこなうようにする。【解決手段】ＨＤＡ部とコントローラからなる記憶装置において、コントローラに、不揮発メモリを接続する。外部装置からハードディスクにデータを書き込むときには、アクセスが正当なものであるかを認証し、認証に成功したときには、書き込もうとしているデータのダイジェストをハッシュ関数により生成する。生成したダイジェストは、不揮発メモリに格納する。データを読み出すときには、読みだすデータのダイジェストを生成し、かつ、不揮発メモリに格納したダイジェストを読み出して、読みだすデータのダイジェストと一致する否かを検証する。一致しない場合には、改ざんのおそれがあるので、その旨を外部装置に通知する。【選択図】図１
2007219802.tif 000002
【特許請求の範囲】
【請求項１】
第一の記憶媒体と、前記第一の記憶媒体へのデータの書き込みおよび読み出しを制御するコントローラとを備えた記憶装置において、
前記コントローラは、外部装置からのデータを前記第一の記憶媒体に書き込むときに、前記データのダイジェストを生成し、前記コントローラに接続された第二の記憶媒体に書き込むことを特徴とする記憶装置。
【請求項２】
前記ダイジェストを生成するときに、前記データのダイジェストをセクタ単位で生成することを特徴とする請求項１記載の記憶装置。
【請求項３】
前記コントローラは、前記第一の記憶媒体に記憶されたデータの論理アドレスまたは物理アドレスと、前記第二の記憶媒体に記憶されたダイジェストの論理アドレスまたは物理アドレスとを対応付けてアクセスすることを特徴とする請求項１記載の記憶装置。
【請求項４】
前記第一の記憶媒体は、ハードディスクであり、
前記第二の記憶媒体は、不揮発メモリまたはＩＣチップであることを特徴とする請求項１記載の記憶装置。
【請求項５】
第一の記憶媒体と、前記第一の記憶媒体へのデータの書き込みおよび読み出しをおこなう記憶装置において、
外部装置からのデータを第一の記憶媒体に書き込むときに、前記データのダイジェストを生成する手段と、
接続されている第二の記憶媒体に前記ダイジェストを書き込む手段と、
前記第一の記憶媒体のデータを第一の記憶媒体から読み出すときに、前記読み出したデータのダイジェストを生成する手段と、
前記第二の記憶媒体から前記ダイジェストを読み出す手段と、
前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと前記第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証する手段とを有することを特徴とする記憶装置。
【請求項６】
さらに、
前記第一の記憶媒体にアクセスする主体を認証する手段を有し、認証が成功したときに、第一の記憶媒体に書き込むデータのダイジェストを生成することを特徴とする請求項５記載の記憶装置。
【請求項７】
さらに、
前記外部装置と転送路上のデータを暗号化するセッション鍵を一時的に共有する手段と、
前記セッション鍵を用いて暗号化されて前記外部装置から転送される前記第一の記憶媒体へ書き込みデータを復号する手段と、
前記第一の記憶媒体から読み出したデータを前記セッション鍵を用いて暗号化して前記外部装置に転送する手段とを有することを特徴とする請求項５記載の記憶装置。
【請求項８】
さらに、
前記データを前記第一の記憶媒体に書き込むときに、記憶装置固有の暗号鍵を用いて暗号化して前記第一の記憶媒体に書き込む手段を有することを特徴とする請求項５記載の記憶装置。
【請求項９】
さらに、
前記外部装置からのデータを前記第一の記憶媒体に書き込むときに、前記ダイジェストを生成する否かを判断する手段と、
前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと前記第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証するか否かを判断する手段とを有することを特徴とする請求項５記載の記憶装置。
【請求項１０】
前記外部装置からのデータを前記第一の記憶媒体に書き込むときに、前記ダイジェストを生成する否かを判断する手段と、前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと接続されている第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証するか否かを判断する手段とは、前記第一の記憶媒体のデータの論理アドレスまたは物理アドレスに従って判断することを特徴とする請求項９記載の記憶装置。
【請求項１１】
前記外部装置からのデータを前記第一の記憶媒体に書き込むときに、前記ダイジェストを生成する否かを判断する手段と、前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと前記第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証するか否かを判断する手段とは、前記外部装置からのコマンドに基づき判断することを特徴とする請求項９記載の記憶装置。
【請求項１２】
前記第二の記憶媒体は、耐タンパモジュールに実装されることを特徴とする請求項５記載の記憶装置。
【請求項１３】
前記第一の記憶媒体にアクセスする主体を認証する手段と、前記外部装置からのデータを第一の記憶媒体に書き込むときに、前記データのダイジェストを生成する手段と、前記外部装置からのデータを前記第一の記憶媒体に書き込むときに、前記ダイジェストを生成する否かを判断する手段と、前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと前記第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証するか否かを判断する手段とは、耐タンパモジュールに実装されることを特徴とする請求項９記載の記憶装置。
【請求項１４】
前記外部装置と転送路上のデータを暗号化するセッション鍵を一時的に共有する手段と、前記セッション鍵を用いて暗号化されて前記外部装置から転送される前記第一の記憶媒体へ書き込みデータを復号する手段と、前記第一の記憶媒体から読み出したデータを前記セッション鍵を用いて暗号化して前記外部装置に転送する手段とは、耐タンパモジュールに実装されることを特徴とする請求項７記載の記憶装置。
【請求項１５】
前記データを前記第一の記憶媒体に書き込むときに、記憶装置固有の暗号鍵を用いて暗号化して前記第一の記憶媒体に書き込む手段は、耐タンパモジュールに実装されることを特徴とする請求項５記載の記憶装置。
【請求項１６】
前記第二の記憶媒体は、前記ダイジェストの他に、他のデータを格納することを特徴をする請求項５記載の記憶装置。
【請求項１７】
第一の記憶媒体を備え、前記第一の記憶媒体へのデータの書き込みおよび読み出しをおこなう記憶装置のコントローラにおいて、
外部装置からのデータを第一の記憶媒体に書き込むときに、前記データのダイジェストを生成する手段と、
前記第二の記憶媒体に前記ダイジェストを書き込む手段と、
前記第一の記憶媒体のデータを第一の記憶媒体から読み出すときに、前記読み出したデータのダイジェストを生成する手段と、
接続されている第二の記憶媒体から前記ダイジェストを読み出す手段と、
前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと接続されている第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証する手段とを有することを特徴とする記憶装置のコントローラ。
【請求項１８】
第一の記憶媒体を備え、前記第一の記憶媒体へのデータの書き込みおよび読み出しをおこなう記憶装置の制御方法において、
外部装置からのデータを第一の記憶媒体に書き込むときに、前記データのダイジェストを生成するステップと、
接続されている第二の記憶媒体に前記ダイジェストを書き込むステップと、
前記第一の記憶媒体のデータを第一の記憶媒体から読み出すときに、前記読み出したデータのダイジェストを生成するステップと、
前記第二の記憶媒体から前記ダイジェストを読み出すステップと、
前記第一の記憶媒体のデータを読み出すときに、前記読み出したデータから生成されたダイジェストと接続されている第二の記憶媒体から読み出されたダイジェストとを比較し、一致するか否かを検証するステップとを有することを特徴とする記憶装置の制御方法。
【請求項１９】
さらに、
前記第一の記憶媒体にアクセスする主体を認証するステップを有し、認証が成功したときに、前記読み出したデータのダイジェストを生成するステップを実行することを特徴とする請求項１８記載の記憶装置の制御方法。
【請求項２０】
さらに、
前記外部装置と転送路上のデータを暗号化するセッション鍵を一時的に共有するステップと、
前記セッション鍵を用いて暗号化されて前記外部装置から転送される前記第一の記憶媒体へ書き込みデータを復号するステップと、
前記第一の記憶媒体から読み出したデータを前記セッション鍵を用いて暗号化して前記外部装置に転送するステップとを有することを特徴とする請求項１８記載の記憶装置の制御方法。
【請求項２１】
さらに、
前記データを前記第一の記憶媒体に書き込むステップで、記憶装置固有の暗号鍵を用いて暗号化して前記第一の記憶媒体に書き込むことを特徴とする請求項１８記載の記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，記憶装置、そのコントローラ、および、その制御方法に係り、情報処理システムに用いられて、データやプログラムを格納する記憶装置であって、特に、著作権保護やデータ保護が必要なデータを読み出す際に、格納されたデータの改ざんの有無を検知するのに用いて好適な記憶装置、そのコントローラ、および、その制御方法に関する。
【背景技術】
【０００２】
近年、インターネットやデジタル放送などの通信手段によって、映画や音楽といったコンテンツを配信するサービスが提供されてきている。このようなシステムで扱われるデータはデジタル化されており、複製が容易であるため、コンテンツの著作権を保護することが重要である。そのための手段の一つとして、コンテンツを暗号化して配信する方法が提案されている。この方法では、例えば、共通鍵暗号方式などにより、コンテンツを暗号化し、それと同時に暗号化されたコンテンツを復号するための復号鍵を作成する。暗号化されたコンテンツは対応する復号鍵がなければ再生できないため、その復号鍵とその利用条件を対とした情報を管理することにより、コンテンツの不正使用を防ぎ、コンテンツ著作者らの権利を保護しようというものである。
【０００３】
また、以下の特許文献１には、データの改ざんを検出する技術が開示されている。以下、図１０を用いて特許文献１のデータの改ざんを検出する技術について説明する。
図１０は、特許文献１で開示されている従来の画像記録再生装置の構成例を示すブロック図である。
【０００４】
記録時の動作は以下の通りである。カメラ２０１で撮影された画像は、画像圧縮部２１０でデジタル化し帯域圧縮され情報が削減される。圧縮された情報は、改ざん検出データ生成部Ａ２１１で、改ざんを検出するためのデータを、例えばフレーム毎に生成し、データ合成部２１３で圧縮されたデータと合成した後で、記録部２１４（ハードディスク、光ディスク、半導体メモリなど）へ記録する。
【０００５】
再生時の動作は、先ず、記録部２１４から再生すべきデータを検索して、読み出しデータ分離部２１５に入力し、圧縮された情報と、生成した改ざんを検出するためのデータを分離する。圧縮された情報は、画像伸張部２１６に入力され原画像に戻される、これと同時に、改ざん検出データ生成Ｂ２１２にも入力され、改ざん検出データを生成する。同時に改ざん検出データ生成Ｂ２１２で生成された改ざん検出データとデータ分離部２１５で分離した改ざん検出データを、改ざん検出部２１７に入力し一致するか否かを検証することにより、記録されたデータが改ざんされているか否かを判断する。ここで、改ざんされたと判断すると、表示制御部２１８に対して表示の停止を指示し、モニタ２０３への画像出力を停止する。このようにして、データが改ざんされていない場合のみ画像の再生を許可することが可能になる。
【０００６】
【特許文献１】特開２０００−３４１６３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記従来技術を、コンテンツの利用条件（再生回数、再生時間）やショッピングポイント、クレジット情報などの利用（消費）に応じて情報が変化するデータに適用して場合、例えば、悪意のある者が、利用前にバックアップを取っておき、利用後にデータをリストアし不正にデータを操作する攻撃（ロールバック攻撃）して、ショッピングポイント、クレジット情報を有利に書き換えるという海賊行為をおこなうということが考えられる。この攻撃では、たとえデータが暗号化されていても解読する必要がなくデータおよび改ざん検出用のデータをコピーすることで比較的容易に実現が可能となる。一方、ハードディスク装置（磁気ディスク装置）では、パスワードを設定し不正なアクセスを制限する方法もあるが、これらのセキュリティの機能は、回路基板上で実現されており、回路基板のリプレイスやＨＤＡ（Head Disk Assembly）を直接制御して、セキュリティ機能を回避してデータにアクセスする攻撃があり、上記のロールバック攻撃を有効に防止することができない。
【０００８】
本発明は、上記問題点を解決するためになされたもので、その目的は、ハードディスク装置などの記憶装置に格納されたデータの改ざんを検知して、データの安全性を高め、コンテンツ保護をおこなうことのできる記憶装置を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の記憶装置は、記憶媒体としてのハードディスクなどの磁気ディスクを含むＨＤＡ部とコントローラからなる。そして、コントローラには、フラッシュメモリなどの不揮発半導体メモリが接続されている。
【００１０】
ＰＣなどの外部装置からハードディスクにデータを書き込むときには、先ず、外部装置からのアクセスが正当なものであるかを認証する。
【００１１】
認証に成功したときには、書き込もうとしているデータのダイジェストを生成する。ダイジェストの生成には、元データを推測できないようにするハッシュ関数と呼ばれる一方向関数を用いる。ここで、ダイジェストとは、与えられた原文（データ）を一方向関数により演算して得られた固定長の擬似乱数をいう。
【００１２】
そして、生成したダイジェストを不揮発メモリに格納する。
【００１３】
一方、外部装置からハードディスクからデータを読み出すときには、読みだそうとするデータのダイジェストを生成する。また、不揮発メモリに格納したダイジェストを読み出して、読みだそうとするデータのダイジェストと一致する否かを検証する。一致しない場合には、ハードディスクに格納されたデータは改ざんされたおそれがあるので、その旨を外部装置に通知する。
【００１４】
ハードディスクに格納するデータは、そのハードディスク装置に固有のメディア暗号鍵により暗号化して格納し、読み出し時に復号化して用いるようにすればデータの安全性を高めることができる。
【００１５】
また、外部装置と記憶装置で一時的に用いられるセッション鍵により、外部装置からのデータを暗号化して記憶装置に送るようにすれば、さらに安全性を高めることができる。
【００１６】
記憶容量と価格比ということでみれば、ハードディスクに対して不揮発メモリは高価なので、改ざんのチェックの必要性が高いところのみダイジェストを生成するようにしてもよい。
【００１７】
また、不揮発メモリをデータやプログラムの盗聴や改ざんなどの海賊行為から保護されている耐タンパモジュールとして実装すれば、データの安全性を高めることができる。
【００１８】
さらに、不揮発メモリ、ダイジェストに関する処理部、暗号処理部を耐タンパモジュールとして実装すれば、さらにデータの安全性を高めることができる。
【００１９】
さらに、本発明の記憶装置によれば、著作権保護が必要なコンテンツを移動中に障害が起きてコンテンツが分割された場合でも、コンテンツを移動時に、移動元のコンテンツ、移動先のメディア、コンテンツを特定する情報と、移動の状態を示す情報を格納することにより、これらの情報からコンテンツの移動を継続したり、移動元に戻すことが可能になる。そのため、コンテンツが分割されたままの場合に比べユーザは、分割されたコンテンツの対応を覚えておく必要が無く、ユーザの利便性が大きく向上する。
【００２０】
また、ＨＤＤなどの蓄積メディアの容量が不足して、コンテンツの録画が継続しておこなえない場合に端末内のメディアやネットワークで接続された端末にコンテンツを分割して録画するとき、分割元と分割先のコンテンツの対応をとる情報を格納することができる。そのため、別のコンテンツを削除するなどしてＨＤＤの容量が空いた後に、分割されたコンテンツを結合することができユーザの利便性が大きく向上する。
【発明の効果】
【００２１】
本発明によれば、ハードディスク装置などの記憶装置に格納されたデータの改ざんを検知して、データの安全性を高め、コンテンツ保護をおこなうことのできる記憶装置を提供することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明に係る各実施形態を、図１ないし図９を用いて説明する。
【００２３】
〔実施形態１〕
以下、本発明に係る第一の実施形態を、図１および図９を用いて説明する。
【００２４】
先ず、図１を用いて本発明の第一の実施形態に係る記憶装置の構成と動作について説明する。
図１は、本発明の第一の実施形態に係る記憶装置の構成を示すブロック図である。
【００２５】
本実施形態の記憶装置は、大別して、ハードディスクの回路基板１と、ＨＤＡ部２１からなる。ＨＤＡ部２１は、ディスクやスピンドルモータや磁気ヘッドが筐体に収められている。
【００２６】
回路基板１には、ハードディスクコントローラ２０、バッファＲＡＭ２２、不揮発メモリ２３が実装されている。バッファＲＡＭ２２は、揮発性のワークメモリである。不揮発メモリ２３は、電源を切っても記憶内容を保持することができる半導体メモリであり、ダイジェストデータを格納しておくメモリである。具体的には、ＦＬＡＳＨメモリなどである。
【００２７】
ここでは、ハードディスクコントローラ２０は、ハードディスクを制御する上での機能を一体化された形態として記載しているが、ハードディスクコントローラの一部の機能を外付けの部品として回路基板１に実装しても良い。
【００２８】
ハードディスクコントローラ２０は、制御用のＣＰＵ２０、制御プログラムなどを格納するメモリ１１、バッファ制御部１２、サーボ制御部１３、Ｉ／Ｆ制御部１４、信号処理部１５、認証制御部１６、ダイジェスト処理部１８から構成される。
【００２９】
バッファ制御部１２は、ＨＤＡ部２１から読み出したデータ、書き込むデータを一時的にバッファＲＡＭ２２に格納するための制御をおこなう部分である。サーボ制御部１３は、サーボ制御によってＨＤＡ部２１のスピンドルモータを制御する部分である。Ｉ／Ｆ制御部１４は、ホストとのＩ／Ｆをおこなう部分である。信号処理部１５は、ＨＤＡ部２１に書き込みや読み出しをおこなうときに、信号の変復調や誤り訂正をおこなう部分である。認証制御部１６は、ＨＤＡ部２１に格納されたデータにアクセスをおこなうときに認証を制御する部分である。ダイジェスト処理部１８は、書き込みや読み出しのデータに対してダイジェストの生成や検証をおこなう部分である。
【００３０】
また、ダイジェスト処理部１８は、ダイジェスト生成部３１、アドレス生成部３４、不揮発メモリＩ／Ｆ制御部３３、ダイジェスト検証部３２で構成される。
【００３１】
ダイジェスト生成部３１は、書き込みデータのダイジェストを生成する部分である。アドレス生成部３４は、ダイジェストを格納したり読み出したりするときの不揮発メモリ２３のアドレスを生成する部分である。不揮発メモリＩ／Ｆ制御部３３は、不揮発メモリのＩ／Ｆを制御する部分である。ダイジェスト検証部３２は、読み出しデータからダイジェストを生成し不揮発メモリ２３に格納されたダイジェストと比較し改ざんがおこなわれたか否かを検証する部分である。
【００３２】
次に、本実施形態の記憶装置のデータの書き込み時と読み込み時の動作について説明する。
【００３３】
先ず、書き込み動作について説明する。
【００３４】
ハードディスクのデータに自由にアクセスができると容易にデータのバックアップやリストアができてしまうために、上述したロールバック攻撃が可能になるため、最初に、外部装置のホストとハードディスクの間で認証をおこなう。
【００３５】
アクセス主体を認証するために、ユーザの場合には、ユーザＩＤとパスワードによる認証、アプリケーションソフトウェアの場合には、ライセンス番号、ソフトウェアのシリアル番号による認証、外部装置の場合には、ＭＡＣアドレス、機器の製造番号による認証などの手段が考えられる。
【００３６】
パスワード用いた認証では、ホストからパスワードをホストＩ／Ｆ１４を介してハードディスクコントローラ２０に入力し、ＣＰＵ１０は、パスワードを認証制御部１６に入力する。それから、予め設定されているパスワードをＨＤＡ部２１のホストからはアクセスできないシステム領域２７から読み出して、認証制御部１６に入力する。なお、安全性を高めるためにシステム領域２７は、ホストからはアクセスできないようになっている。
【００３７】
このとき認証制御部１６では、予め設定されているパスワードが暗号化などの演算が施されている場合には、それを復号化しホストから入力されたパスワードと比較し一致しなければ、ハードディスクに格納されたデータへのアクセスを許可しないように制御する。このとき、改ざんだけが問題となる場合は、データの書き込みアクセスのみを認証により制限することも可能である。この場合には、データの読み込みは自由にできるため、閲覧のみは自由におこなうことが可能になる。
【００３８】
認証は、アクセスを開始する前に一度だけおこなう以外にも、ある一定期間アクセスがない場合には再度認証をおこなうように制御しても良い。
【００３９】
認証が成功すると書き込みアクセスが可能になるので、ホストＩ／Ｆ制御部１４を介して書き込みのデータとアドレス(論理ブロックアドレス：ＬＢＡ)を、ＣＰＵ１０を介し、あるいは、ＤＭＡ転送によりバッファメモリ制御部１２に転送して、いったん、バッファＲＡＭ２２に格納する。そして、ＨＤＡ部２１へのアクセスが可能になったときに、バッファメモリ２２から書き込みデータを読み出し、信号処理部１５でＣＲＣ処理や変調をおこない、ＨＤＡ２１の格納領域２５内にある通常領域２６の指定されたＬＢＡの示す個所にデータを書き込む。
【００４０】
次に、書き込みデータとＬＢＡをバッファＲＡＭ２２からＣＰＵ１０経由やＤＭＡ転送によりダイジェスト処理部１８に転送する。ダイジェスト処理部１８では、データは、ハードディスクのアクセスの最小単位であるセクタの単位で処理される。１セクタのバイト数は５１２バイトが多く用いられている。もちろん、５１２バイト以外でも問題なく、たとえばアクセスの効率から４Ｋバイトを１セクタとすることも可能である。
【００４１】
ダイジェスト処理部１８では、１セクタのデータをダイジェスト生成部３１に入力し、ダイジェストを生成する。ダイジェストはセキュリティの観点から容易に元データを推測できないようにするハッシュ関数と呼ばれる一方向関数を用いることができる。ハッシュ関数としてはＳＨＡ−１、ＳＨＡ−２５６、ＭＤ５などがある。例えば、ＳＨＡ−１では、入力データ数によらずその出力は２０バイトと固定されている。また、ＳＨＡ−１などのハッシュ関数はアルゴリズムが公開されているため、例えば、ハードディスクそれぞれに固有な情報をデータに付加してハッシュ関数を用いてもよい。そのようにすることにより、容易にダイジェストを偽造できないようになる。
【００４２】
次に、アドレス生成部３３では、データと共に転送されるＬＢＡを基にして、ダイジェストを格納する不揮発メモリのアドレス（ダイジェストの長さを持ったエリアの先頭アドレス）を生成する。例えば、以下の式１に示すように不揮発メモリのアドレスを求めればよい。このアドレスは、論理アドレスでもよいし、物理アドレスでもよい。
【００４３】
アドレス ＝ ＬＢＡ × (ダイジェストの長さ) ＋ オフセット …（式１）
ここで、ハッシュ関数の出力は固定であり、オフセットを固定にすれば、ＬＢＡから一意にダイジェストを格納するアドレスを算出することが可能である。このようにすることで、データとダイジェストを別のメディアに格納する場合でも互いを対応付けることが可能になる。そして、ダイジェストと格納するアドレスを不揮発メモリＩ／Ｆ制御部３３に入力し、不揮発メモリ２３の該当アドレスから順にダイジェストを格納する。ダイジェストとデータを別々のメディアに格納するため、不整合が起こる可能性がある。そのため、確実に不揮発メモリ２３にデータが書き込めたか否かを確認するため、不揮発メモリ２３から既ダイジェストを読み出し正常に格納されたかを確認してもよい。ここで、バッファＲＡＭ２２上のデータは不要になったので、バッファＲＡＭ２２に格納されているデータとＬＢＡを無効化しバッファＲＡＭの領域を開放する。
【００４４】
そして、データとダイジェストが正常に格納されたときには、書き込み処理が終了したことをホストＩ／Ｆ制御部１４を介してホストに通知する。また、一連の書き込み処理でエラーが起きたら、ホストにホストＩ／Ｆ制御部１４を介してエラーを通知する。また、この例では、データの書き込みとダイジェストの書き込みを、順次、おこなう例を示したがこれらの動作を並列しておこなうことも可能である。
【００４５】
本実施形態では、不揮発メモリ２３は、ハードディスクコントローラ２０の外部に接続されているが、ダイジェストに対する攻撃も考えられるため、ハードディスクコントローラ２０に内蔵した方がよりセキュリティの強度を上げることが可能になる。
【００４６】
次に、読み出し動作について説明する。
【００４７】
データの読み出しの場合には、先ず、ホストから読み出し命令がホストＩ／Ｆ制御部１４を介してハードディスクに通知される。そのとき、読み出す位置を示すＬＢＡもパラメータとして転送される。次に、ＣＰＵ１０は、バッファＲＡＭ２２内に指定されたＬＢＡのデータがキャッシュされているか否かを判断し、キャッシュされていない場合には、サーボ制御部１４と信号処理部１５を制御しＨＤＡ部２１から指定されたＬＢＡのデータを読み出し、ＬＢＡと共にバッファＲＡＭ２２に格納する。次に、バッファＲＡＭ２２からバッファメモリ制御部１２を介してＬＢＡとデータを読み出して、ダイジェスト処理部１８に転送する。
【００４８】
ダイジェスト処理部１８では、ダイジェスト生成部３１でＨＤＡ部２１から読み出したデータからダイジェストを生成する。次に、ＬＢＡをアドレス生成部３４に入力し、上記の式１を用いて書き込み時に格納したダイジェストが格納されている不揮発メモリ２３のアドレスを算出する。そして、不揮発メモリＩ／Ｆ制御部３３に、そのアドレスを入力して、該当アドレスからダイジェストを読み出す。
【００４９】
そして、不揮発メモリ２３から読み出したダイジェストとダイジェスト生成部３１で生成したダイジェストをダイジェスト検証部３２に入力し、ダイジェスト検証部３２でそれぞれのダイジェストを比較する。比較の結果、一致すれば、データは改ざんされていないので、ＨＤＡ部２１から読み込んだデータをホストＩ／Ｆ制御部１４を介してホストに転送する。ダイジェストが一致しない場合は、データが改ざんされた可能性があるためホストＩ／Ｆ制御部１４を介してホストにその旨を通知する。このとき、データはホストに転送してもよいし、転送しなくてもよい。
【００５０】
また、ダイジェストを不正に操作することも考えられるため、不揮発メモリ２３へは、ホストＩ／Ｆ制御部１４を介してアクセスできないようにする必要がある。
【００５１】
さらに、ダイジェストの処理や認証処理は、機能ブロックとして記述したが、ＣＰＵ１０を用いてソフトウェアによりおこなってもよい。
【００５２】
このようにすることにより、不揮発メモリ２３に格納されたダイジェストは、認証が成功してデータを書き込んだときしか変更されてないことが保証されるため、回路基板を取り替えた場合、回路基板を取り外し、ＨＤＡを直接制御してデータを変更した場合に、データが改ざんされたか否かを検知することが可能になりコンテンツの不正利用やデータの不正操作による不正行為を防ぐことが可能になる。
【００５３】
次に、図９を用いてＬＢＡアドレスからダイジェストを格納する不揮発メモリのアドレスを求める別の例を説明する。
【００５４】
図９は、アドレス生成部により、オフセットテーブルを用いて不揮発メモリの物理アドレスを生成する仕組みを示す図である。
【００５５】
ＬＢＡレジスタ５１はＬＢＡを格納するレジスタである。ＬＢＡは、図９に示されるように、論理的に、ＬＢＡの上位１８ビット５３、ＬＢＡの下位１０ビット５２に分割する。オフセットテーブル５４は、ダイジェストを格納する物理アドレスのオフセットを複数持つテーブルである。
【００５６】
不揮発メモリの物理アドレスは、ＬＢＡの下位１０ビット５２と定数を乗算器５５により乗算し、オフセットテーブル５４のオフセット値と加算器５６により足し合わせて求められ、不揮発メモリ物理アドレスレジスタ５７に格納される。
【００５７】
不揮発メモリ２３は、オフセットテーブル格納領域６１とダイジェスト格納領域６２を有している。オフセットテーブル格納領域６１は、不揮発メモリ内のオフセットテーブルの値を格納する領域であり、ダイジェスト格納領域６２は、不揮発メモリ内のダイジェストを格納する領域である。
【００５８】
先ず、アドレス生成部３４は、ハードディスクの起動時に、不揮発メモリ１８の中のオフセットテーブル格納領域６１からダイジェストを格納する物理アドレスのオフセットのデータを不揮発メモリＩ／Ｆ制御部３３を介してオフセットテーブル５４に読み込む。
【００５９】
そして、ＬＢＡレジスタ５１にＬＢＡ（ＬＢＡは２８ビットとする）が設定されると、ＬＢＡの上位１８ビット５３をオフセットテーブル５４に入力し対応するオフセットを出力し、加算器５６に入力する。このとき、例えばＬＢＡの上位１８ビット５３が‘０００００ｈ’の場合オフセット０が出力され、‘００００１ｈ’の場合オフセット１が出力されるようにする。そして、ＬＢＡの下位１０ビット５２を乗算器５５に入力し‘２０’倍する。ここで‘２０’はＳＨＡ−１を用いたときのダイジェストの長さである。そして、乗算器５５の出力を加算器５６に入力する。そして、加算器５６では、オフセットテーブル５６から出力されたオフセットと、乗算器５５で計算された値を加算し、不揮発メモリアドレスレジスタ５７に格納する。このようにＬＢＡを基にダイジェストを格納する不揮発メモリ２３の物理アドレス（不揮発メモリ２３上に取られるダイジェストを格納する‘２０’バイト毎のエリアの先頭の物理アドレス）を一意に算出することができる。
【００６０】
また、ＦＬＡＳＨデバイスは書き込み回数に制限があるため、特定の領域にデータの書き込みがあった場合にダイジェストを書き込む領域が書き込み不可能になる。このような構成をとることにより、例えば、不揮発メモリにＦＬＡＳＨデバイスを用いた場合、ダイジェストを書き込む領域が書き込み不可能になったときに、該当するオフセットテーブル格納領域のオフセットを別の空きの領域のアドレスを指定することでダイジェストを格納する位置を変更できるため、寿命を延ばすことが可能になる。
【００６１】
この例では、オフセットのデータを、いったんアドレス生成部に読み込む例を示したがＬＢＡが設定されたときに不揮発メモリのオフセットテーブル格納領域からオフセットを読み出すように構成してもよい。また、ＨＤＡのアドレスとして論理アドレスであるＬＢＡを用いているがＨＤＡの物理アドレスを用いてダイジェストを格納するアドレスを生成してもよい。
【００６２】
〔実施形態２〕
次に、図２ないし図５を用いて本発明の第二の実施形態に係る記憶装置の構成と動作について説明する。
図２は、本発明の第二の実施形態に係る記憶装置の構成を示すブロック図である。
【００６３】
本実施形態では、データをホストと記憶装置との間で暗号化し、記録メディアにも暗号化して格納する例である。
【００６４】
図２に示されるように、本実施形態の記憶装置は、暗号処理部１７を有しており、データの暗号化や復号化をおこなう。
【００６５】
先ず、書き込み動作について説明する。
【００６６】
ハードディスクのデータに自由にアクセスができると容易にデータのバックアップやリストアができてしまうために、上述したロールバック攻撃が可能になる。そのため、先ず、ホストとハードディスクの間で認証をおこない、ホストＩ／Ｆ上でデータの暗号化をおこなうためのセッション鍵を共有する。セッション鍵は、認証毎に新たに生成されセッションが終了すると消失する一時的な鍵である。セッション鍵の共有については後述する。
【００６７】
認証が成功してセッション鍵が共有されると、ＣＰＵ１０は、セッション鍵を暗号処理部１７に設定する。また、ＨＤＡ部２１の格納領域２５にデータを格納するときにデータを暗号化するメディア暗号鍵を、不揮発メモリ２３から読み出し暗号処理部１７に設定する。
【００６８】
メディア暗号鍵は、不揮発メモリ２３から読み出すときに盗聴される可能性があるため暗号化しておいてもよい。その場合は、暗号化メディア暗号鍵を復号して暗号処理部に設定する。
【００６９】
認証が成功すると書き込みアクセスが可能になり、ホストとハードディスクの間でセッション鍵が共有されているので、ホストで書き込むデータを、セッション鍵を用いて暗号化した後、暗号化データとＬＢＡの情報をホストＩ／Ｆ制御部１４を介してハードディスクに転送する。このときデータを格納するアドレスであるＬＢＡの情報も暗号化してもよい。
【００７０】
そして、暗号化データとＬＢＡをＣＰＵ１０により、あるいは、ＤＭＡ転送によりバッファメモリ制御部１２に転送し、いったん、バッファＲＡＭ２２に格納する。次に、ＨＤＡ部２１へのアクセスが可能になったらバッファメモリ２２から書き込みデータを読み出し、暗号処理部１７に転送する。暗号処理部１７では、先ず、セッション鍵で暗号化されている暗号化データを、セッション鍵を用いて復号化し、続いてメディア暗号鍵を用いて、再びデータを暗号化する。そして、その暗号化したデータを信号処理部１５に転送し、信号処理部１５でＣＲＣ処理や変調をおこないＨＤＡ部２１の格納領域２５内にある通常領域２６の指定されたＬＢＡの示す個所にデータを書き込む。
【００７１】
それと同時に、メディア暗号鍵により暗号化したデータをダイジェスト処理部１８に転送する。ダイジェスト処理部１８では、データはハードディスクのアクセスの最小単位であるセクタの単位で処理される。先ず、１セクタの暗号化したデータをダイジェスト生成部３１に入力し、ダイジェストを生成する。次に、アドレス生成部３３では、暗号化したデータと共に転送されるＬＢＡを基にして、ダイジェストを格納する不揮発メモリのアドレスを生成する。そして、ダイジェストを格納するアドレスを不揮発メモリＩ／Ｆ制御部３３に入力し、不揮発メモリ２３の該当アドレスから順にダイジェストを格納する。ここで、バッファＲＡＭ２２上のデータは不要になったので、バッファＲＡＭ２２に格納されているデータとＬＢＡを無効化しバッファＲＡＭの領域を開放する。
【００７２】
このようにして、暗号化したデータとダイジェストが正常に格納されたときには、書き込み処理が終了したことをホストＩ／Ｆ制御部１４を介してホストに通知する。また、一連の書き込み処理でエラーが起きたときには、ホストにホストＩ／Ｆ制御部１４を介してエラーを通知する。
【００７３】
次に、読み出し動作について説明する。
【００７４】
データを読み出す場合も、セッション鍵を用いてホストＩ／Ｆ上のデータを暗号化するため認証が必要となる。セッション鍵が共有されてない場合は、認証を行い、セッション鍵をホストとハードディスクで共有し、セッション鍵とメディア暗号鍵を暗号処理部１７に設定する。
【００７５】
データの読み出しの場合は、先ず、ホストから読み出し命令がホストＩ／Ｆ制御部１４を介してハードディスクに通知される。そのとき読み出す位置を示すＬＢＡもパラメータとして転送される。次に、ＣＰＵ１０は、バッファＲＡＭ２２内に指定されたＬＢＡのデータ（メディア暗号鍵で暗号化されたデータ）がキャッシュされているか否かを判断し、キャッシュされていない場合は、サーボ制御部１４と信号処理部１５を制御しＨＤＡ２１から指定されたＬＢＡの暗号化データを読み出しＬＢＡと共にバッファＲＡＭ２２に格納する。次に、バッファＲＡＭ２２からバッファメモリ制御部１２を介してＬＢＡと暗号化データを読み出しダイジェスト処理部１８に転送する。
【００７６】
ダイジェスト処理部１８では、ダイジェスト生成部３１でＨＤＡ部２１から読み出した暗号化データからダイジェストを生成する。次に、ＬＢＡをアドレス生成部３４に入力し、実施形態１で説明した式１を用いて書き込み時に格納したダイジェストが格納されている不揮発メモリ２３のアドレスを算出する。そして、不揮発メモリＩ／Ｆ制御部３３に、そのアドレスを入力し、該当アドレスからダイジェストを読み出す。次に、不揮発メモリ２３から読み出したダイジェストとダイジェスト生成部３１で生成したダイジェストをダイジェスト検証部３２に入力し、ダイジェスト検証部３２でそれぞれのダイジェストを比較する。比較の結果、一致すれば、データは改ざんされていないので、ＨＤＡ部２１から読み込んだ暗号化されたデータを暗号処理部１７に転送して、先ず、メディア暗号鍵を用いて暗号化データを復号する。そして、メディア暗号鍵により復号化したデータを、セッション鍵を用いて、再度暗号化し、ホストＩ／Ｆ制御部１４を介してホストに転送する。ダイジェストが一致しない場合は、データが改ざんされた可能性があるためホストＩ／Ｆ制御部１４を介してホストにその旨を通知する。
【００７７】
このようにすることで、ホストＩ／Ｆと記憶装置とをつなぐ転送路上のデータやＨＤＡなどのメディアを解析してもデータは暗号化されているため、安全性が向上し、例えば、コンテンツ配信などで用いるコンテンツを暗号化するコンテンツ鍵や利用条件を含んだライセンスを格納する場合に適した記憶装置になる。特に、コンテンツ鍵は、ユーザには知られてはいけない情報であるため、このような暗号化は有用である。
【００７８】
上述の例では、メディア暗号鍵で暗号化したデータに対してダイジェストを生成、検証をおこなったが、暗号化されてないデータに対してダイジェストを生成、検証することも可能である。その場合は、書き込み時は、まずセッション鍵で暗号化されたデータを、暗号処理部でセッション鍵を用いて復号化し、復号化されたデータに対してダイジェスト生成し格納して、暗号処理部でメディア暗号鍵を用いて、再度暗号化してＨＤＡに格納する。読み出し時は、ＨＤＡから読み出した暗号化データを暗号処理部でメディア暗号鍵を用いて復号化し、ダイジェストを検証して、改ざんが検出されなければ暗号処理部でセッション鍵を用いてデータを、再度暗号化してホストに転送すればよい。
【００７９】
また、上述の例では、ホストＩ／Ｆ上の暗号とメディアに格納するときの暗号をどちらも処理する例を挙げたが、いずれか一方のみの暗号化だけを処理する構成にしてもよい。
【００８０】
次に、図３を用いてセッション鍵を共有する認証の例を説明する。
図３は、証明書を用いた認証とセッション鍵の共有を示すシーケンス図である。
【００８１】
先ず、ハードディスク装置は、予め認証局の公開鍵Ｋｏとハードディスク装置の証明書（ＨＤＤ証明書）（ハードディスクの公開鍵と認証の署名を含む）とハードディスクの秘密鍵（ＨＤＤ秘密鍵）を設定しておく。これは、ハードディスクの製造時に設定してもよいし、購入後にユーザが設定してもよい。一方、ホストには、予め認証局の公開鍵Ｋｏとホスト証明書（ホストの公開鍵と認証の署名を含む）とホスト秘密鍵を設定しておく。
【００８２】
先ず、ホストは、ハードディスク装置にホスト証明書を送信する（Ｔ００１）。次に、ハードディスクでは、ホスト証明書を、認証局公開鍵Ｋｏを用いて署名を検証し、ホスト証明書が改ざんされていなく、認証局が発行した証明書であることを確認する（Ｔ００２）。そして、ハードディスクは、ＨＤＤ証明書をホストに転送する（Ｔ００３）。ホストでは、ＨＤＤ証明書を、認証局公開鍵Ｋｏを用いて署名を検証し、ＨＤＤ証明書が改ざんされていなく、認証局が発行した証明書であることを確認する（Ｔ００４）。また、各証明書にユニークなＩＤを格納しておき、ホストおよびハードディスクに予め登録したＩＤの場合のみ、認証可能なようにしてもよい。
【００８３】
次に、ホストでは、乱数Ｎ１ｈを生成し（Ｔ００５）、ハードディスクに転送する（Ｔ００６）。ハードディスクでは、乱数Ｎ１ｈｄを生成し（Ｔ００７）、送信されてきた乱数Ｎ１ｈに対してＨＤＤ秘密鍵を用いて署名ＳＮ１ｈを生成する（Ｔ００８）。そして、乱数Ｎ１ｈｄと署名ＳＮ１ｈをホストに転送する（Ｔ００９）。ホストでは、送信されてきた乱数Ｎ１ｈｄに対してホスト秘密鍵を用いて署名ＳＮ１ｈｄを生成する（Ｔ０１０）。
【００８４】
そして、署名ＳＮ１ｈを、ＨＤＤ証明書に含まれるＨＤＤ公開鍵Ｋｈｄｏを用いて検証しＨＤＤが秘密鍵を所有していることを確認する（Ｔ０１１）。次に、乱数Ｎ２ｈを生成して、ＨＤＤ公開鍵で暗号化し（Ｔ０１２）、ハードディスクに署名ＳＮ１ｈｄと暗号化乱数Ｎ２ｈを送信する（Ｔ０１３）。次に、ハードディスクでは、署名ＳＮ１ｈｄを、ホスト証明書に含まれるホスト公開鍵Ｋｈｏを用いて、検証しホストが秘密鍵を所有していることを確認する（Ｔ０１４）。ここまででお互いの証明書に含まれる秘密鍵が正当なものであることが分かったことになる。
【００８５】
そして、乱数Ｎ２ｈｄを生成して、ホスト公開鍵で暗号化し（Ｔ０１５）、暗号化乱数Ｎ２ｈｄをホストに転送する（Ｔ０１６）。次に、ホストでは、暗号化乱数Ｎ２ｈｄを、ホスト秘密鍵を用いて復号化し、ホストで生成したＮ２ｈとＮ２ｈｄを用いてセッション鍵を生成する（Ｔ０１７）。ハードディスクでも、暗号化乱数Ｎ２ｈを、ＨＤＤ秘密鍵を用いて復号化し、ハードディスクで生成したＮ２ｈｄとＮ２ｈを用いてホストと同じアルゴリズムを用いてセッション鍵を生成する（Ｔ０１８）。
【００８６】
公開鍵で暗号化されたデータは、秘密鍵がないと復号化できないため、たとえホストＩ／Ｆ上のデータを盗聴されたとしても秘密鍵を所有していないとセッション鍵を生成するための乱数を復号できないため、安全にセッション鍵を共有することができる。また、このように共有されたセッション鍵を用いてデータを暗号化することにより、ホストとハードディスク間でセキュアにデータの交換をおこなうことができる。
【００８７】
また、通常、データを読み出してからデータを更新して書き込むので、書き込み時と読み出し時で同じセッション鍵を用いると、読み出しにセッション鍵で暗号化されたデータを保存しておき、データを更新してデータを書き込んだ後に保存しておいた暗号化データを書き込むといったリプレイ攻撃が考えられるが、これは書き込み用のセッション鍵と読み出し用のセッション鍵を異なる値にすることにより防ぐことが可能になる。
【００８８】
次に、図４および図５を用いてデータの書き込みや読み出し毎にセッション鍵を変更する方法を説明する。
図４は、データを書き込むときにセッション鍵を生成する処理を示すシーケンス図である。
図５は、データを読み出すときにセッション鍵を生成する処理を示すシーケンス図である。
【００８９】
上記の説明でホストとハードディスク装置がお互いに証明書と署名を検証する方法を説明したが、データの書き込みと読み出し毎にこのような処理をおこなうとオーバヘッドが大きくなる。したがって、このようなオーバヘッドを軽減し、しかも、セキュリティを確保するためには、以下に説明するようにデータの書き込みと読み出しをおこなう毎にセッション鍵を変更するようにすればよい。
【００９０】
先ず、図４により書き込み時の動作を説明する。
【００９１】
図３に示した処理によって、セッション鍵Ｋｓは、既に共有されているものとする。
【００９２】
先ず、ホストはデータの暗号化に用いる第二のセッション鍵Ｋ２ｓを、乱数などを用いて生成する（Ｔ１０１）。そして、第二のセッション鍵Ｋ２ｓを、既に生成されているセッション鍵Ｋｓで暗号化し（Ｔ１０２）、ハードディスク装置に送信する（Ｔ１０３）。
【００９３】
次に、ハードディスク装置では、受信した暗号化Ｋ２ｓを共有しているセッション鍵Ｋｓを用いて復号化する（Ｔ１０４）。そして、ホストでは書き込むデータを第二のセッション鍵Ｋ２ｓを用いて暗号化し（Ｔ１０５）、ハードディスクに対して暗号化データを送信（書き込み命令）する（Ｔ１０６）。そして、ハードディスク装置では、Ｋ２ｓを用いてデータを復号し、上述したようにダイジェストを生成し、不揮発メモリ２３に格納し、メディア暗号鍵を用いてデータを暗号化してＨＤＡ部２１などのメディアに書き込む（Ｔ１０７）。
【００９４】
次に、図５により読み出し時の動作を説明する。
【００９５】
先ず、ホストはハードディスク装置に対して第二のセッション鍵を要求する（Ｔ２０１）。
【００９６】
次に、ハードディスク装置では、第二のセッション鍵Ｋ２ｓを、乱数などを用いて生成する（Ｔ２０２）。そして、第二のセッション鍵Ｋ２ｓを、セッション鍵Ｋｓで暗号化し（Ｔ２０３）、ホストに送信する（Ｔ２０４）。
【００９７】
次に、ホストでは、受信した暗号化Ｋ２ｓを共有しているセッション鍵Ｋｓを用いて復号化する（Ｔ２０５）。そして、ハードディスク装置に対して読み出しを要求する（Ｔ２０６）。
【００９８】
次に、ハードディスク装置では、ＨＤＡ部２１から暗号化データを読み出し、改ざんの有無を検証して改ざんがなければ、メディア暗号鍵を用いて暗号化データを復号し（Ｔ２０７）、第二のセッション鍵Ｋ２ｓを用いてデータを暗号化する（Ｔ２０８）。そして、Ｋ２ｓで暗号化したデータをホストに転送する（Ｔ２０９）。
【００９９】
次に、ホストでは、第二のセッション鍵Ｋ２ｓを用いて読み出しデータを復号して利用する。
【０１００】
このように、ハードディスク装置へのアクセスがある毎に、ホストＩ／Ｆ上のデータを暗号化する鍵を変更するので、リプレイ攻撃を、より安全に防ぐことが可能になる。
【０１０１】
〔実施形態３〕
以下、図６を用いて本発明に係る第三の実施形態に係る記憶装置の構成と動作について説明する。
図６は、本発明の第三の実施形態に係る記憶装置の構成を示すブロック図である。
【０１０２】
記憶容量と価格比ということでみれば、ハードディスクに対しＦＬＡＳＨメモリなどの不揮発メモリは高価である。また、例えば、ＳＨＡ−１の圧縮比は、１セクタあたり２５分の１程度でありそれほど高いものではない。したがって、本実施形態は、改ざんのチェックの必要性が高いところのみダイジェストを生成するようにして、価格に対する効果を高めようとするものである。
【０１０３】
図６に示されるように、本実施形態のＨＤＡ部２１の格納領域２８は、通常領域２６、改ざんチェック領域２８、システム領域２７からなっている。通常領域２６は、改ざん検知をおこなわないデータを格納するハードディスク媒体上の領域であり、改ざんチェック領域２８は、改ざん検知をおこなうデータを格納するハードディスク媒体上の領域である。
【０１０４】
改ざんチェック領域２８は、例えば、ライセンス情報、商品・サービスの購入に応じてポイントが加算されるポイントシステムのポイント情報、電子マネーに関する情報など、特に、改ざんから防御する必要のある情報の格納領域とする。
【０１０５】
また、ハードディスクコントローラ２０は、ホストからのアクセスが改ざん検知をおこなう領域へのアクセスか否かを判断する領域判定部１９を有している。
【０１０６】
ホストからハードディスクに対するアクセスがあった場合、ホストＩ／Ｆ１４に書き込み命令や読み出し命令が送信される。それらの命令には、ＨＤＡ部２１のアドレスを示すＬＢＡがパラメータとして含まれる。そして、ＣＰＵ１０は、そのＬＢＡの情報を領域判定部１９に設定する。領域判定部１９では、改ざんチェック領域２８の開始ＬＢＡと終了ＬＢＡを保持しており、設定されたＬＢＡが、開始ＬＢＡ≦ＬＢＡ≦終了ＬＢＡの範囲にあるか否かを判断する。
【０１０７】
そして、ＣＰＵ１０は、データの書き込みの場合は、データのＬＢＡが改ざんチェック領域２８内のＬＢＡであると判断したときには、データを改ざんチェック領域２８内の指定のＬＢＡにデータを書き込み、ダイジェスト処理部１８でダイジェストを生成して不揮発メモリ２３にダイジェストを格納する。
【０１０８】
また、データの読み出しの場合は、データのＬＢＡが改ざんチェック領域２８内のＬＢＡであると判断したときには、データを改ざんチェック領域２８内の指定のＬＢＡから読み出し、ダイジェスト処理部１８でダイジェストの検証をおこない改ざんされているか否かを確認する。そして、読み出したデータをホストに転送する。
【０１０９】
一方、ＬＢＡがデータを改ざんチェック領域２８ではなく、通常領域２６内のアドレスであると判断したときには、データの書き込み時には、ダイジェストの生成、通常領域２６にデータを書き込む。また、データの読み込み時には、ダイジェストの検証をおこなわないで、通常領域２６からデータを読み出しホストに転送する。
【０１１０】
上述の例では、ＬＢＡにより、改ざんチェック領域２８か否かを判断したが、改ざんチェック領域２８にアクセスする場合は、コマンドを変更してもよい。そのようにすれば、コマンドにより、通常領域２６へのアクセスか改ざんチェック領域２８へのアクセスかを判断することが可能になる。
【０１１１】
このようにすることで、改ざんをチェックする領域を制限することができる。つまり、ダイジェストを格納する不揮発メモリの容量も制限することが可能になり、不揮発メモリのコストや実装面積を抑えることができる。例えば、５００Ｇバイトの容量をもつハードディスクの場合、１セクタが５１２バイトでダイジェストの生成にＳＨＡ−１を用いた場合、不揮発メモリとしては、２０Ｇバイトの容量が必要になり、ＦＬＡＳＨなどの半導体メモリを用いると非常に高価になり、かつメモリの実装面積も大きくなる。
【０１１２】
本実施形態では、改ざんのチェックが特に必要な情報を格納する領域のみデータのダイジェストを生成するので、不揮発メモリの容量を大幅に削減することができる。
【０１１３】
〔実施形態４〕
以下、図７を用いて本発明に係る第四の実施形態に係る記憶装置の構成と動作について説明する。
図７は、本発明の第四の実施形態に係る記憶装置の構成を示すブロック図である。
【０１１４】
本実施形態の記憶装置は、ダイジェストを耐タンパモジュールに格納するようにしたものである。図７に示されるように、本実施形態の記憶装置は、ハードディスクコントローラ２０のダイジェスト処理部１８に耐タンパモジュール１００が接続されている。耐タンパモジュール１００は、内部に格納したデータを外部からの攻撃に耐性を持つモジュールである。
【０１１５】
また、ダイジェスト処理部１８は、認証制御部４１、暗号処理部４２で、格納領域指定部４３、耐タンパモジュールＩ／Ｆ制御部４４を有する。認証制御部４１は、耐タンパモジュール１００と認証をおこなう部分である。暗号処理部４２は、耐タンパモジュール１００とのデータの送受信時にデータを暗号化・復号化する部分である。格納領域指定部４３は、耐タンパモジュール１００内の不揮発メモリ内の位置を指定する部分である。耐タンパモジュールＩ／Ｆ制御部４４は、耐タンパモジュールとのＩ／Ｆを制御する部分である。
【０１１６】
以下、耐タンパモジュールにアクセスする動作を説明する。
【０１１７】
耐タンパモジュール１００は、例えば、ＩＣカードチップであり、内部にＣＰＵや不揮発メモリを内蔵しており、認証をおこなわないと内部のデータにアクセスできない制御が可能であり、ハードウェアレベルでも、電流制御回路や内部の回路をメタルマスクで覆うといった機能などを具備し、動作による電流解析・電圧解析などに手段では、簡単には解析できないような耐性を持つデバイスである。
【０１１８】
耐タンパモジュールにアクセスとするときには、実施形態２で記述したようなハードディスク装置とホスト間の認証と同様な認証を、認証制御部４１と耐タンパモジュール１００の間でおこない、かつ、ハードディスクコントローラ２０と耐タンパモジュール１００でセッション鍵の共有をおこなう。そして共有されたセッション鍵は、暗号処理部４２に設定する
ダイジェストを耐タンパモジュール１００に格納する場合には、ダイジェスト生成部３１で生成したダイジェストを暗号処理部４２で、セッション鍵を用いて暗号化し、格納領域指定部４３でＬＢＡのアドレスを基に、耐タンパモジュール１００内にある不揮発メモリの位置を特定する情報を生成する。そして、セッション鍵を用いて暗号化されたダイジェストと不揮発メモリの位置を特定する情報を耐タンパモジュールＩ／Ｆ４４に渡し、耐タンパモジュール１００に送信する。
【０１１９】
次に、耐タンパモジュール１００では、セッション鍵を用いて暗号化ダイジェストを復号化して、不揮発メモリの位置を特定する情報を基に内蔵されている不揮発メモリの物理アドレスを生成してそのアドレスにダイジェストを格納する。
【０１２０】
ダイジェストを耐タンパモジュール１００から読み出す場合には、格納領域指定部４３でＬＢＡのアドレスを基に耐タンパモジュール１００内にある不揮発メモリの位置を特定する情報を生成し、その情報を耐タンパモジュールＩ／Ｆ４４に渡し、耐タンパモジュール１００にダイジェストの読み出しを要求する。
【０１２１】
次に、耐タンパモジュール１００では、不揮発メモリの位置を特定する情報を基に内蔵されている不揮発メモリの物理アドレスを生成して、そのアドレスからダイジェストを読み出す。そして、セッション鍵を用いてダイジェストを暗号化し耐タンパモジュールＩ／Ｆ４４に送信する。
【０１２２】
次に、ハードディスクコントローラ２０では、暗号処理部４２でセッション鍵を用いて暗号化ダイジェストを復号化し、ダイジェスト検証部３２でＨＤＡ部２１から読み出したデータから生成したダイジェストと比較をして改ざんがされてないか否かを確認する。
【０１２３】
また、ＦＬＡＳＨメモリなどの不揮発メモリは、アクセスをおこなう方法が開示されており、このようなデバイスにダイジェストを格納する場合、ダイジェストに対する改ざんなどの攻撃が考えられる。上述したような処理をすることで、ＦＬＡＳＨメモリのような通常の不揮発メモリにダイジェストを格納するのに比べ、ダイジェストに対する改ざんを困難にすることができ、よりセキュリティ強度の高い記憶装置を提供することができる。
【０１２４】
〔実施形態５〕
以下、図８を用いて本発明に係る第五の実施形態に係る記憶装置の構成と動作について説明する。
図８は、本発明の第五の実施形態に係る記憶装置の構成を示すブロック図である。
【０１２５】
本実施形態の記憶装置は、耐タンパモジュール内でダイジェストの生成、検証をおこなうようにしたものである。本実施形態の記憶装置は、図８に示されるように、ハードディスクコントローラ２０に耐タンパモジュールＩ／Ｆ制御部３５を有しており、それに耐タンパモジュール１００が接続されている。耐タンパモジュールＩ／Ｆ制御部は、耐タンパモジュール１１０とのＩ／Ｆ制御をおこなう部分である。
【０１２６】
耐タンパモジュール１１０は、Ｉ／Ｆ制御部１１１、ＣＰＵ１１２、ワークメモリ１１３、不揮発メモリ１１４、認証制御部１１５、暗号処理部１１６、ダイジェスト生成部１１７、ダイジェスト検証部１１９、格納領域指定部１１９を有している。
【０１２７】
Ｉ／Ｆ制御部１１１は、ハードディスクコントローラ２０とのＩ／Ｆの制御をおこなう部分である。ＣＰＵ１１２は、耐タンパモジュール１１０内の各機能ブロックを制御やデータの処理やハンドリングをおこなうプログラムを実行する部分である。ワークメモリ１１３は、一時的なデータを格納する部分である。不揮発メモリ１１４は、プログラムやデータ、特に、ハードディスクに格納されるデータのダイジェストを格納する部分である。認証制御部１１５は、認証の制御をおこなう部分である。暗号処理部１１６は、暗号の処理をおこなう部分である。ダイジェスト生成部１１７は、ダイジェストの生成をおこなう部分である。ダイジェスト検証部１１８は、ダイジェストの検証をおこなう部分である。格納領域指定部１１９は、データを格納するＬＢＡからダイジェストを格納する不揮発メモリのアドレスを生成する部分である。
【０１２８】
先ず、データの書き込み動作について説明する。
【０１２９】
改ざんチェック領域２８にアクセスするために、先ず、ホストとハードディスクの間で認証をおこなう。ハードディスクのアクセスに関する認証は、耐タンパモジュール１１０でおこなうため、ホストは、ホストＩ／Ｆ制御部１４、耐タンパモジュールＩ／Ｆ制御部３５、耐タンパモジュール１１０のＩ／Ｆ制御部１１１を介して、耐タンパモジュール１１０内の認証制御部１１５との間で認証をおこない、認証が成功するとホストと耐タンパモジュール１１０でセッション鍵を共有する。共有されたセッション鍵は、ＣＰＵ１１２により暗号処理部１１６に設定される。そして、ＣＰＵ１２は、不揮発メモリ１１４に格納されているＨＤＡ部２１にデータを格納するときに用いるメディア暗号鍵を暗号処理部１１６に設定する。
【０１３０】
認証が成功するとアクセスが可能になる。ホストとハードディスクの間でセッション鍵が共有されているので、ホストで書き込むデータは、セッション鍵を用いて暗号処理部１１６で暗号化された後、暗号化されたデータとＬＢＡの情報はホストＩ／Ｆ制御部１４を介してハードディスクに転送される。
【０１３１】
そして、暗号化されたデータとＬＢＡをＣＰＵ１０により、あるいは、ＤＭＡ転送によりバッファメモリ制御部１２に転送し、いったん、暗号化されたデータとＬＢＡをバッファＲＡＭ２２に格納する。
【０１３２】
次に、バッファＲＡＭ２２から書き込みデータを読み出して、耐タンパモジュールＩ／Ｆ制御部３５を介して耐タンパモジュール１１０に転送する。耐タンパモジュール１１０では、暗号化されたデータを暗号処理部１１６に転送する。暗号処理部１１６では、まずセッション鍵で暗号化されている暗号化データを、セッション鍵を用いて復号化し、続いてメディア暗号鍵を用いて再びデータを暗号化する。
【０１３３】
そして、ハードディスクコントローラ２０内の領域判定部１９で改ざんチェック領域への書き込みであると判断されと、メディア暗号鍵により暗号化されたデータをダイジェスト生成部１１７に転送する。ダイジェスト生成部１１７では、１セクタ分の暗号化されたデータを基にダイジェストを生成する。
【０１３４】
次に、格納領域指定部１１９では、セッション鍵で暗号化されたデータと共に転送されるＬＢＡを基にして、ダイジェストを格納する不揮発メモリ１１４のアドレスを生成する。そして、ダイジェストと格納するアドレスを不揮発メモリ１１４に該当アドレスから順にダイジェストを格納する。
【０１３５】
また、例えば、暗号化コンテンツを利用するとき必要となるコンテンツ鍵を含んだライセンスなどの予めフォーマットの分かっているデータの場合、セッション鍵で暗号化データを復号したあと、コンテンツ鍵を取り出し、コンテンツ鍵のデータをダミーのデータに置き換えメディア暗号鍵を用いてデータを再び暗号化して、ダイジェストと一緒にコンテンツ鍵を不揮発メモリ１１４に格納してもよい。
【０１３６】
そして、メディア暗号鍵により再び暗号化されたデータを、ハードディスクコントローラ２０にＩ／Ｆ制御部１１を介して転送する。次に、ハードディスクコントローラ２０では、メディア暗号鍵により再び暗号化されたデータを信号処理部１５に転送し、信号処理部１５でＣＲＣ処理や変調をおこないＨＤＡ部２１の格納領域２５内にある改ざんチェック領域２８の指定されたＬＢＡにデータを書き込む。
【０１３７】
一方、ハードディスクコントローラ２０内の領域判定部１９で改ざんチェック領域への書き込みでないと判断されと、ダイジェストは生成せずに、メディア暗号鍵により再び暗号化されたデータを、ハードディスクコントローラ２０にＩ／Ｆ制御部１１を介して転送する。次に、ハードディスクコントローラ２０では、メディア暗号鍵により再び暗号化されたデータを信号処理部１５に転送し、信号処理部１５でＣＲＣ処理や変調をおこないＨＤＡ部２１の格納領域２５内にある通常領域２６の指定されたＬＢＡにデータを書き込む。
【０１３８】
ここで、バッファＲＡＭ２２上のデータは不要になったので、バッファＲＡＭ２２に格納されている暗号化されたデータとＬＢＡを無効化しバッファＲＡＭの領域を開放する。
【０１３９】
そして、書き込み処理が終了したことをホストＩ／Ｆ制御部１４を介してホストに通知する。また、一連の書き込み処理でエラーが起きたら、ホストにホストＩ／Ｆ制御部１４を介してエラーを通知する。
【０１４０】
次に読み出し動作について説明する。
【０１４１】
データを読み出す場合も、セッション鍵を用いてホストＩ／Ｆ上のデータを暗号化するため認証が必要となる。セッション鍵が共有されてない場合は、認証をおこない、セッション鍵をホストとハードディスクで共有し、セッション鍵とメディア暗号鍵を暗号処理部１１６に設定する。
【０１４２】
データの読み出しの場合は、先ず、ホストから読み出し命令がホストＩ／Ｆ制御部１４を介してハードディスク装置に通知される。そのとき読み出す位置を示すＬＢＡもパラメータとして転送される。次に、ＣＰＵ１０は、バッファＲＡＭ２２内に指定されたＬＢＡのデータ（メディア暗号鍵で暗号化されたデータ）がキャッシュされているか否かを判断し、キャッシュされてない場合は、サーボ制御部１４と信号処理部１５を制御し、ＨＤＡ部２１から指定されたＬＢＡの暗号化されたデータを読み出し、ＬＢＡと共にバッファＲＡＭ２２に格納する。次に、領域判定部１９で該当ＬＢＡが改ざんチェック領域２８内のアドレスであると判断すると、バッファＲＡＭ２２からバッファメモリ制御部１２を介してＬＢＡと暗号化されたデータを読み出し、耐タンパモジュールＩ／Ｆ制御部３５を介して耐タンパモジュール１１０に転送する。
【０１４３】
次に、耐タンパモジュール１１０では、暗号化されたデータをダイジェスト生成部１１７に転送し、ダイジェスト生成部１１７によりダイジェストを生成する。次に、ＬＢＡを格納領域指定部１１９に入力し、書き込み時に格納したダイジェストが格納されている不揮発メモリ１１４のアドレスを算出する。そして、不揮発メモリ１４からそのアドレスのダイジェストを読み出す。次に、不揮発メモリ１１４から読み出したダイジェストとダイジェスト生成部１１７で読み出したデータを基に生成したダイジェストをダイジェスト検証部１１８に入力し、ダイジェスト検証部１１８でそれぞれのダイジェストを比較する。比較の結果、一致すれば、データは改ざんされていないので、暗号化データを暗号処理部１１６に転送して、先ず、メディア暗号鍵を用いて暗号化データを復号する。そして、セッション鍵を用いて復号化したデータを、再び暗号化しＩ／Ｆ制御部１１を介して、ハードディスクコントローラ２０に転送する。
【０１４４】
また、上述したようにダイジェストと一緒にコンテンツ鍵などのデータの一部を不揮発メモリ１１４に格納している場合には、メディア暗号鍵を用いて暗号化データを復号した後、ダミーのデータに置き換えた位置に不揮発メモリ１１４に格納しておいたコンテンツ鍵を元に戻し、復号化したデータをセッション鍵を用いて再び暗号化しＩて／Ｆ制御部１１を介して、ハードディスクコントローラ２０に転送する。
【０１４５】
そして、ハードディスクコントローラ２０では、ホストＩ／Ｆ制御部１４を介してホストに転送する。
【０１４６】
一方、比較の結果、ダイジェストが一致しない場合は、改ざんされた可能性があるためＩ／Ｆ制御部１１を介して、ハードディスクコントローラ２０に通知し、ホストＩ／Ｆ制御部１４を介してホストにその旨を通知する。
【０１４７】
このようにすることで、ダイジェストの生成、検証やデータの暗号化、復号化を全て耐タンパモジュール内で実現することができ、認証に使う情報、ダイジェストの生成アルゴリズムやメディア暗号鍵を耐タンパモジュールから出力する必要がなく、さらに、セキュリティの強度を上げることが可能になる。また、データの一部を不揮発メモリに格納することによって、特に重要なデータをより安全に格納することが可能になる。
【図面の簡単な説明】
【０１４８】
【図１】本発明の第一の実施形態に係る記憶装置の構成を示すブロック図である。
【図２】本発明の第二の実施形態に係る記憶装置の構成を示すブロック図である。
【図３】証明書を用いた認証とセッション鍵の共有を示すシーケンス図である。
【図４】データを書き込むときにセッション鍵を生成する処理を示すシーケンス図である。
【図５】データを読み出すときにセッション鍵を生成する処理を示すシーケンス図である。
【図６】本発明の第三の実施形態に係る記憶装置の構成を示すブロック図である。
【図７】本発明の第四の実施形態に係る記憶装置の構成を示すブロック図である。
【図８】本発明の第五の実施形態に係る記憶装置の構成を示すブロック図である。
【図９】アドレス生成部により、オフセットテーブルを用いて不揮発メモリの物理アドレスを生成する仕組みを示す図である。
【図１０】特許文献１で開示されている従来の画像記録再生装置の構成例を示すブロック図である。
【符号の説明】
【０１４９】
１…回路基板、１０…ＣＰＵ、１１…メモリ、１２…バッファメモリ制御部、１３…サーボ制御部、１４…ホストＩ／Ｆ制御部、１５…信号処理部、１６…認証制御部、１７…暗号処理部、１８…ダイジェスト処理部、１９…領域判定部、２０…ハードディスクコントローラ、２１…ＨＤＡ部、２２…バッファＲＡＭ、２３…不揮発メモリ、２５…格納納領域、２６…通常領域、２７…システム領域、２８…改ざんチェック領域、３１…ダイジェスト生成部、３２…ダイジェスト検証部、３３…不揮発メモリＩ／Ｆ制御部,３４…アドレス生成部, ３５…耐タンパモジュールＩ／Ｆ制御部、４１…認証制御部、４２…暗号処理部、４３…格納領域指定部、４４…耐タンパモジュールＩ／Ｆ制御部、５１…ＬＢＡレジスタ、５２…ＬＢＡ上位１８ビット、５３…ＬＢＡ下位１０ビット、５４…オフセットテーブル、５５…乗算器、５６…加算器、５７…不揮発メモリ物理アドレスレジスタ、６１…オフセットテーブル格納領域、６２…ダイジェスト格納領域、１００…耐タンパモジュール、１１１…Ｉ／Ｆ制御部、１１２…ＣＰＵ、１１３…ワークメモリ、１１４…不揮発メモリ、１１５…認証制御部、１１６…暗号処理部、１１７…ダイジェスト生成部、１１８…ダイジェスト生成部、１１９…格納領域指定部、２０１…カメラ、２０２…画像記録再生装置、２０３…モニタ、２１０…画像圧縮部、２１１…改ざん検出生成部Ａ、２１２…改ざん検出生成部Ｂ、２１３…データ合成部、２１４…記録部、２１５…データ分離部、２１６…画像伸張部、２１７…改ざん検出部、２１８…表示制御部。
【図１】
2007219802.tif 000003
【図２】
2007219802.tif 000004
【図３】
2007219802.tif 000005
【図４】
2007219802.tif 000006
【図５】
2007219802.tif 000007
【図６】
2007219802.tif 000008
【図７】
2007219802.tif 000009
【図８】
2007219802.tif 000010
【図９】
2007219802.tif 000011
【図１０】
2007219802.tif 000012