(57)【特許請求の範囲】
【請求項１】
情報処理装置であって、
ＣＰＵと、
当該情報処理装置において実行中のプログラムが改ざんされているか否かの検証に用いられる完全性情報を記憶するセキュリティーモジュールと、
記憶装置とを備え、
前記記憶装置は、
当該記憶装置の外部から読み書き可能な記憶部と、前記記憶部に記憶されたプログラムの完全性情報を記憶する、当該記憶装置の外部からの書き込みが禁止された完全性情報記憶部と、
当該記憶装置の外部から書込コマンドおよび書込対象プログラムを受けて、前記書込対象プログラムを前記記憶部に書き込む書込部と、
前記書込対象プログラムの完全性情報を起動に先立ち算出して前記完全性情報記憶部に書き込む算出部と、
前記記憶部に書き込まれた前記書込対象プログラムに対する上書きを禁止する保護部と、
を有し、
前記ＣＰＵは、起動時において、前記書込対象プログラムの完全性情報を算出することなく、前記記憶装置内の前記完全性情報記憶部から前記書込対象プログラムの完全性情報を読み出して、前記セキュリティーモジュールに与える
情報処理装置。
【請求項２】
前記算出部は、前記書込対象プログラムのハッシュ値を前記完全性情報として算出する請求項１に記載の情報処理装置。
【請求項３】
前記保護部は、前記書込部による前記記憶部に対する前記書込対象プログラムの書き込みが正常に終了したことを条件として、前記記憶部に書き込まれた前記書込対象プログラムに対する上書きを禁止する
請求項１から２の何れかに記載の情報処理装置。
【請求項４】
前記保護部は、前記書込部による前記記憶部に対する前記書込対象プログラムの書き込みが失敗したことを条件として、前記記憶部における前記書込対象プログラムが書き込まれるはずであった領域に対する外部からの書き込みを許可する
請求項１から３の何れかに記載の情報処理装置。
【請求項５】
前記書込対象プログラムの書き込みが失敗したか否かを示す書込失敗情報を格納する管理テーブルを記憶するテーブル記憶部を更に備え、
前記書込部は、前記記憶部に対する前記書込対象プログラムの書き込みが失敗したことを条件として、前記書込失敗情報を書き込みが失敗したことを示す値に書き換える請求項１から４の何れかに記載の情報処理装置。
【請求項６】
前記保護部は、前記記憶部における前記書込対象プログラムを記憶させる保護領域を指定する情報を含むセットアップコマンドを外部から受けて、前記記憶部における前記保護領域に対する書き込みを許可し、
前記書込部は、前記書込コマンドおよび前記書込対象プログラムを受けて、前記書込対象プログラムを前記記憶部における前記保護領域に書き込み、
前記保護部は、前記書込部による前記記憶部に対する前記書込対象プログラムの書き込みが正常に終了したことを条件として、前記保護領域に対する書き込みを禁止する請求項１から５の何れかに記載の情報処理装置。
【請求項７】
前記書込コマンドおよび前記書込対象プログラムとともに、前記書込対象プログラムの完全性情報の期待値を受けて、前記算出部が算出した前記完全性情報と、前記期待値とが一致するか否かを比較する比較部を更に備える
請求項１から６の何れかに記載の情報処理装置。
【請求項８】
前記算出部は、前記記憶部に書き込まれた前記書込対象プログラムに対する上書きが禁止されている状態において、外部から検証コマンドを受けると、前記記憶部に記憶された前記書込対象プログラムの完全性情報を新たに算出し、
当該記憶装置は、前記完全性情報記憶部に記憶された前記完全性情報と、前記検証コマンドを受けたことに応じて新たに算出された前記完全性情報とが一致するか否かを比較する比較部を更に備える
請求項１から６の何れかに記載の情報処理装置。
【請求項９】
前記比較部が不一致であるとの比較結果を得たことを条件として、前記保護部は、前記記憶部における前記書込対象プログラムに対する上書きを許可する
請求項８に記載の情報処理装置。
【請求項１０】
前記比較部は、不一致であるとの比較結果を得たことを条件として、前記検証コマンドを受けたことに応じて新たに算出された前記完全性情報を、前記完全性情報記憶部に書き込む
請求項８に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、改ざんされているか否かの検証の対象となるデータを記憶する記憶装置、情報処理装置およびプログラムに関する。
【背景技術】
【０００２】
トラステッドコンピューティングと呼ばれる、コンピュータ等のセキュリティー対策に関する技術が知られている（非特許文献１参照。）。トラステッドコンピューティングは、コンピュータの起動時にプログラムコードのハッシュ値を算出し、算出したハッシュ値をＴＰＭ（Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）と呼ばれる耐タンパ性を有するセキュリティーチップに記録する。これにより、プログラムが不正に書き換えられた場合、ＴＰＭ内のハッシュ値が本来の値から変わるので、検証者は、ＴＰＭ内のハッシュ値を参照することによりプログラムの改ざんを検出することができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Trusted Computing Group（ＴＣＧ）ホームページ、［平成２０年７月１５日検索］、インターネット＜https://www.trustedcomputinggroup.org/home/＞
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、トラステッドコンピューティングにおいては、システムのブート時において起動するプログラムのハッシュ値を算出する。従って、ハッシュ値の算出時間がブート時におけるオーバーヘッドとなっていた。特に、記憶領域へのアクセス速度が比較的に遅い、また、内蔵するＣＰＵの演算能力が比較的に低い例えば携帯電話機等の組み込み機器においては、このオーバーヘッドにより起動時間が長くなるという問題があった。【０００５】
そこで本発明は、上記の課題を解決することのできる記憶装置、情報処理装置およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００６】
外部から読み書き可能な記憶部と、前記記憶部が記憶するデータが改ざんされているか否かの検証に用いられる完全性情報を記憶する、外部からの書き込みが禁止された完全性情報記憶部と、外部から書込コマンドおよび書込対象データを受けて、前記書込対象データを前記記憶部に書き込む書込部と、前記書込対象データの完全性情報を算出して前記完全性情報記憶部に書き込む算出部と、前記記憶部に書き込まれた前記書込対象データに対する上書きを禁止する保護部と、を備える記憶装置、この記憶装置を備える情報処理装置、及び、情報処理装置をこの記憶装置として機能させるプログラムを提供する。なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【０００７】
【図１】本発明の実施形態に係る情報処理装置１０の構成を示す。
【図２】本発明の実施形態に係る情報処理装置１０の起動時に処理の流れの一例を示す。
【図３】本発明の実施形態に係る記憶装置２０の構成を示す。
【図４】記憶部３０の保護領域の状態の遷移を示す。
【図５】書込対象プログラムの書込時における、記憶装置２０の処理フローを示す。
【図６】検証時における、記憶装置２０の処理フローを示す。
【図７】本発明の実施形態に係る第１変形例に係るセキュリティーモジュール１８の構成を示す。
【図８】本発明の実施形態に係る第２変形例に係る情報処理装置１０の構成を示す。
【図９】本発明の実施形態の第３変形例に係る情報処理装置１０の構成を示す。
【図１０】本発明の実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。
【発明を実施するための形態】
【０００８】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００９】
図１は、本実施形態に係る情報処理装置１０の構成を示す。情報処理装置１０は、ＣＰＵ１２と、ＲＡＭ１４と、セキュリティーモジュール１８と、記憶装置２０と、Ｉ／Ｏ部２２とを備える。ＣＰＵ１２は、プログラムを実行して、演算処理等を行う。ＲＡＭ１４は、ＣＰＵ１２による実行中のプログラムおよびＣＰＵ１２の実行に用いられるデータ等を記憶する。
【００１０】
セキュリティーモジュール１８は、ＣＰＵ１２により実行されるプログラムが改ざんされているか否かの検証に用いられる完全性情報を記憶する。本実施形態においては、セキュリティーモジュール１８は、ＣＰＵ１２が実行する各プログラムのハッシュ値を累積した値を、ＰＣＲ（Platform Configuration Register）と呼ばれる外部からのアクセスが
物理的に制限されたレジスタに記憶する。さらに、セキュリティーモジュール１８は、公開鍵暗号演算、暗号鍵生成、ハッシュ値の算出および乱数生成等の機能を有してよい。
【００１１】
記憶装置２０は、ＣＰＵ１２により実行される１または複数のプログラムのコードデータ、音声データおよび画像データ等の各種のデータを記憶する。記憶装置２０は、フラッシュメモリ等の不揮発性のメモリであってよい。
【００１２】
また、記憶装置２０は、当該情報処理装置１０の起動時に実行されるブートプログラムを、外部からの書き込みが禁止された領域に記憶する。さらに、記憶装置２０は、当該記憶装置２０に記憶された１または複数のプログラムのそれぞれの完全性情報を、それぞれのプログラムに対応させて記憶する。本実施形態においては、記憶装置２０は、１または複数のプログラムのそれぞれの完全性情報として、対応するプログラムのハッシュ値を記憶する。
【００１３】
より詳しくは、記憶装置２０は、ＣＰＵ１２により各プログラムが内部に書き込まれる場合において、当該プログラムの書込処理と並行して、当該プログラムのハッシュ値を算出する。そして、記憶装置２０は、当該プログラムの書き込みが完了すると、書き込まれたプログラムへの上書きを予め定められたコマンドが与えられるまで禁止する。さらに、記憶装置２０は、当該プログラムのハッシュ値を、外部からの書き込みが禁止された領域に記憶する。なお、記憶装置２０の構成の詳細については、後述する。
【００１４】
Ｉ／Ｏ部２２は、当該情報処理装置１０の外部の機器とのデータの入出力を制御する。なお、ブートプログラムは、記憶装置２０とは別個の、外部からの書き込みが禁止されたＲＯＭに記憶されていてもよい。
【００１５】
図２は、本実施形態に係る情報処理装置１０の起動時に処理の流れの一例を示す。情報処理装置１０は、起動時において、次のように処理がされる。
【００１６】
電源が投入されると、ＣＰＵ１２は、まず、記憶装置２０からブートプログラムを呼び出して、実行する。続いて、ＣＰＵ１２は、実行中のブートプログラムにより指定された第１のプログラムを記憶装置２０から呼び出して、実行する。続いて、ＣＰＵ１２は、実行中の第１のプログラムにより指定された第２のプログラムを記憶装置２０から呼び出して、実行する。以後、ＣＰＵ１２は、実行中のプログラムにより指定された別個のプログラムの呼び出しおよび実行を繰り返す。そして、ＣＰＵ１２は、オペレーションシステム（または当該オペレーションシステム上において起動されるアプリケーションプログラム）を記憶装置２０から呼び出して、実行する。
【００１７】
さらに、起動時において、ＣＰＵ１２は、記憶装置２０に記憶された各プログラムのそれぞれの実行に先立って、当該プログラムのハッシュ値を記憶装置２０から読み出して、セキュリティーモジュール１８に与える。セキュリティーモジュール１８は、ＣＰＵ１２からハッシュ値が与えられる毎に、与えられえたハッシュ値に基づきＰＣＲの値を更新する。より詳しくは、セキュリティーモジュール１８は、与えられたハッシュ値とＰＣＲから読み出した値とを加算し、加算値に対してハッシュ演算をした値をＰＣＲに上書きする処理を実行する。なお、電源投入直後のＰＣＲの初期値は、予め定められた値（例えば、全ビットが０、または、全ビットが１等）である。この結果、オペレーションシステム（またはアプリケーションプログラム）まで実行されると、ＰＣＲには、ブートプログラムからオペレーションシステム（またはアプリケーションプログラム）までの各プログラムのハッシュ値を累積した値が書き込まれる。
【００１８】
なお、起動時に最初に実行されるブートプログラムについては、事前に記憶装置２０からのハッシュ値の読み出しとセキュリティーモジュール１８への記録を行うことはできない。従って、記憶装置２０は、ブートプログラムが記録された領域に対する外部からの物理的な書込み禁止して、ブートプログラムが改ざんされることを防止している。
【００１９】
ＰＣＲに記憶された累積されたハッシュ値は、起動時において段階的に実行される各プログラムの全てが改ざんされておらず、全て完全の場合、常に予め定められた値となる。しかし、何れかのプログラムが改ざんされていれば、その改ざんの過程で記憶装置２０の対応するハッシュ値が変更される。結果として上記の起動方法でＰＣＲに記憶されたハッシュ値は、予め期待される値と異なる値となる。従って、このような情報処理装置１０よれば、ＰＣＲに記憶された累積されたハッシュ値を例えば署名等をして検証者に送信することにより、実行しているプログラムが改ざんされているか否かを検証者に検出させることができる。
【００２０】
さらに、このような情報処理装置１０は、記憶装置２０に対するプログラムの書き込み時において、当該プログラムのハッシュ値を算出して記憶装置２０内の外部から書き込みできない領域に書き込む。そして、情報処理装置１０は、起動時において、各プログラムのハッシュ値を、各プログラムの実行に先立って記憶装置２０から読み出してセキュリティーモジュール１８に与える。これにより、情報処理装置１０によれば、起動時において、各プログラムのハッシュ値を算出する演算を実行しなくてよいので、ハッシュ値を算出するためのオーバーヘッドを無くして、起動時間を短くすることができる。
【００２１】
図３は、本実施形態に係る記憶装置２０の構成を示す。記憶装置２０は、記憶部３０と、完全性情報記憶部３２と、テーブル記憶部３４と、ハッシュエンジン３６と、コントローラ４０とを有する。
【００２２】
記憶部３０は、当該記憶装置２０の外部から読み書き可能であって、各種のデータを記憶する。記憶部３０は、保護領域を含む。保護領域は、改ざん検出の対象となる１または複数の書込対象プログラムが記憶され、上書き禁止状態に設定することができる。
【００２３】
完全性情報記憶部３２は、記憶部３０の保護領域に記憶された１または複数の書込対象プログラムのそれぞれのハッシュ値を、当該書込対象プログラムに対応させて記憶する。完全性情報記憶部３２は、当該記憶装置２０の外部からの書き込みが禁止される。
【００２４】
テーブル記憶部３４は、管理テーブルを記憶する。管理テーブルは、記憶部３０における保護領域を指定する領域情報を格納する。さらに、管理テーブルは、記憶部３０に対する書込対象プログラムの書き込みが失敗したか否かを示す書込失敗情報、および、記憶部３０内の保護領域の状態を表わす状態情報を格納する。テーブル記憶部３４は、当該記憶装置２０の外部からの書き込みが禁止された構成であってよい。
【００２５】
なお、記憶部３０、完全性情報記憶部３２およびテーブル記憶部３４のそれぞれは、同一の不揮発性デバイスにおける異なる領域に設けられてよい。これに代えて、記憶部３０、完全性情報記憶部３２およびテーブル記憶部３４は、それぞれが別個の異なる不揮発性デバイスに設けられてもよい。
【００２６】
ハッシュエンジン３６は、書込対象プログラムの記憶部３０に対する書込時において、コントローラ４０から当該書込対象プログラムが与えられる。そして、ハッシュエンジン３６は、与えられた書込対象プログラムのハッシュ値を算出してコントローラ４０に返信する。なお、ハッシュエンジン３６は、一例として、コントローラ４０とは別個のハードウェアであってもよいし、コントローラ４０により実現される機能ブロックであってもよい。
【００２７】
コントローラ４０は、当該記憶装置２０の全体を制御する。コントローラ４０は、機能ブロックとして、読出部４２と、書込部４４と、保護部４６と、算出部４８と、比較部５０と、状態管理部５２とを含む。
【００２８】
読出部４２は、当該記憶装置２０の外部から読出コマンドを受けて、記憶部３０に記憶されている各種のデータ（プログラム、音声データおよび画像データ等）を読み出して、外部に出力する。また、読出部４２は、記憶部３０の保護領域から書込対象プログラムがＣＰＵ１２により呼び出されることに先立って、当該書込対象プログラムの対応するハッシュ値を完全性情報記憶部３２から読み出してＣＰＵ１２に送信する。これにより、ＣＰＵ１２は、書込対象プログラムの実行に先立って、当該書込対象プログラムのハッシュ値をセキュリティーモジュール１８に与えることができる。
【００２９】
書込部４４は、当該記憶装置２０の外部から書込コマンドおよび各種のデータを受けて、各種のデータを記憶部３０に書き込む。ここで、書込部４４は、書込コマンドおよび書込対象プログラムが与えられた場合には、記憶部３０の保護領域に当該書込対象プログラムを書き込む。
【００３０】
保護部４６は、書込部４４による記憶部３０の保護領域に対する書込対象プログラムの書き込みが正常に終了したことを条件として、記憶部３０に書き込まれた書込対象プログラムに対する上書きを禁止する。また、保護部４６は、書込部４４による記憶部３０に対する書込対象プログラムの書き込みが失敗したことを条件として、記憶部３０における書込対象プログラムが書き込まれるはずであった領域に対する外部からの書き込みを許可する。また、保護部４６は、上書き禁止状態を解除するセットアップコマンドが当該記憶装置２０の外部から与えられたことを条件として、記憶部３０に書き込まれた書込対象プログラムに対する上書きを許可してよい。
【００３１】
算出部４８は、書込対象プログラムが与えられた場合、ハッシュエンジン３６を利用して当該書込対象プログラムのハッシュ値を算出する。そして、算出部４８は、算出したハッシュ値を、記憶部３０に書き込まれた当該書込対象プログラムに対応付けて完全性情報記憶部３２に書き込む。また、算出部４８は、記憶部３０に書き込まれた書込対象プログラムに対する上書きが禁止されている状態において、外部から検証コマンドを受けると、記憶部３０に記憶された書込対象プログラムを読み出して、ハッシュエンジン３６を利用して読み出した書込対象プログラムのハッシュ値を新たに算出する。
【００３２】
比較部５０は、完全性情報記憶部３２に記憶されたハッシュ値と、検証コマンドを受けたことに応じて新たに算出されたハッシュ値とが一致するか否かを比較する。更に、比較部５０は、書込コマンドとともに外部から与えられた書込対象プログラムのハッシュ値の期待値を受けて、算出部４８が算出したハッシュ値と、期待値とが一致するか否かを比較してよい。
【００３３】
状態管理部５２は、テーブル記憶部３４に記憶された管理テーブルに格納された状態情報を参照して、記憶部３０の保護領域の状態を管理する。
【００３４】
このような記憶装置２０は、ＣＰＵ１２によって書込対象プログラムが記憶部３０に書き込まれる場合において、当該書込対象プログラムのハッシュ値を算出して完全性情報記憶部３２に記憶させることができる。そして、記憶装置２０は、ＣＰＵ１２によって書込対象プログラムが読み出される場合において、完全性情報記憶部３２に記憶された当該書込対象プログラムのハッシュ値を読み出す。これにより、情報処理装置１０によれば、起動時において、各プログラムのハッシュ値を出力することができるので、セキュリティーモジュール１８に記録するハッシュ値を算出するためのオーバーヘッドを無くして、起動時間を短くすることができる。
【００３５】
なお、記憶装置２０は、プログラムに代えて、当該記憶装置２０に記憶されたプログラム以外の書込対象データ（例えば、音楽データおよび画像データ等）の完全性情報を、それぞれの書込対象データに対応させて保護領域に記憶してもよい。この場合、記憶装置２０は、書込対象データの書込時において、完全性情報を算出して完全性情報記憶部３２に記憶させる。また、記憶装置２０は、ファイルシステム全体のイメージ等、任意のデータ形式の完全性保護に利用することもできる。
【００３６】
図４は、記憶部３０の保護領域の状態の遷移を示す。状態管理部５２は、記憶部３０の保護領域を、通常動作状態、書込状態、保護状態または検証状態の何れかの状態に管理する。
【００３７】
通常動作状態は、記憶部３０の保護領域に対する当該記憶装置２０の外部からの書き込みを許可する状態を示す。通常動作状態において書込コマンドが与えられた場合、保護部４６は、書込コマンドとともに与えられたデータを、記憶部３０の保護領域に書き込むことができる。
【００３８】
保護状態は、記憶部３０の保護領域に対する当該記憶装置２０の外部からの書き込みを許可する状態を示す。保護状態においては、保護部４６は、書込コマンドが与えられた場合、与えられたデータの記憶部３０の保護領域に対する書き込みを禁止する。
【００３９】
書込状態は、当該記憶装置２０の外部から与えられた書込対象プログラムを記憶部３０の保護領域に書き込み中である状態を示す。検証状態は、記憶部３０の保護領域に書き込まれた書込対象プログラムを検証している最中である状態を示す。
【００４０】
状態管理部５２は、記憶部３０の保護領域の状態を次のように遷移させる。まず、工場出荷時において、状態管理部５２は、記憶部３０の保護領域を通常動作状態とする。
【００４１】
通常動作状態また保護状態においてセットアップコマンドを受けると、状態管理部５２は、記憶部３０の保護領域を書込状態に遷移させる。書込状態において書込コマンドが与えられると、状態管理部５２は、書込コマンドとともに与えられた書込対象プログラムを、記憶部３０の保護領域に書き込む。また、保護状態において、別個のセットアップコマンドを受けた場合において、状態管理部５２は、記憶部３０の保護領域を通常動作状態に遷移させてもよい。
【００４２】
書込状態において書込対象プログラムの書き込みが成功すると、状態管理部５２は、記憶部３０の保護領域を保護状態に遷移させる。書込状態において書込対象プログラムの書き込みが失敗すると、状態管理部５２は、記憶部３０の保護領域を通常動作状態に遷移させる。
【００４３】
また、保護状態において検証コマンドを受けると、状態管理部５２は、記憶部３０の保護領域を、検証状態に遷移させる。検証が正常であった場合、状態管理部５２は、記憶部３０の保護領域を保護状態に遷移させる。検証がエラーであった場合、状態管理部５２は、記憶部３０の保護領域を通常動作状態に遷移させる。
【００４４】
図５は、書込対象プログラムの書込時における、記憶装置２０の処理フローを示す。記憶装置２０は、通常動作状態または保護状態において、当該記憶装置２０の外部からセットアップコマンドを受けることができる（Ｓ１０１）。セットアップコマンドには、保護領域の位置を指定する情報を含んでよい。
【００４５】
セットアップコマンドを受けると、書込部４４は、管理テーブルに格納された状態情報を、通常動作状態または保護状態を表わす値から、書込状態を表わす値に書き換える。これにより、状態管理部５２は、記憶部３０の保護領域を、書込状態とすることができる（Ｓ１０２）。
【００４６】
続いて、書込部４４は、当該記憶装置２０の外部から書込コマンドおよび書込対象プログラムを受ける（Ｓ１０３）。続いて、書込部４４は、書込コマンドに示された書込範囲が保護領域内を指定しているか否か等のコマンドの整合性を確認して、アクノーレッジ（ＡＣＫ）を書込コマンドの送出元に返信する（Ｓ１０４）。
【００４７】
続いて、書込部４４は、受け取った書込対象プログラムを記憶部３０の保護領域に書き込む（Ｓ１０５）。更に、算出部４８は、書込部４４による書込対象プログラムの書き込みと並行して、当該書込対象プログラムのハッシュ値を算出する（Ｓ１０５）。
【００４８】
続いて、算出部４８は、書込部４４による書込対象プログラムの書き込みが成功したか否かを判断する（Ｓ１０６）。算出部４８は、一例として、書込部４４が書込対象プログラムの先頭から末尾までを記憶部３０の保護領域内に書き込めた場合に、書き込みが成功したと判断してよい。
【００４９】
書き込みが成功したことを条件として（Ｓ１０６のＹｅｓ）、算出部４８は、算出したハッシュ値を、当該書込対象プログラムと対応付けて完全性情報記憶部３２に書き込む（Ｓ１０７）。そして、書込部４４は、管理テーブルに格納された状態情報を、書込状態を表わす値から保護状態を表わす値に書き換える。これにより、状態管理部５２は、記憶部３０の保護領域を、保護状態とすることができる（Ｓ１０８）。
【００５０】
また、書き込みが失敗したことを条件として（Ｓ１０６のＮｏ）、算出部４８は、当該書込対象プログラムと対応付けて書き込まれるべきハッシュ値に代えて、規定の値（例えば、全ビットが０または全ビットが１等）を完全性情報記憶部３２に書き込む（Ｓ１０９）。そして、書込部４４は、管理テーブルに格納された書込失敗情報を、書き込みが失敗したことを示す値に書き換えてよい。さらに、書込部４４は、管理テーブルに格納された状態情報を、書込状態を表わす値から通常動作状態を表わす値に書き換える。これにより、状態管理部５２は、記憶部３０の保護領域を、通常動作状態とすることができる（Ｓ１１０）。
【００５１】
以上の処理により、保護部４６は、書込部４４による記憶部３０の保護領域に対する書込対象プログラムの書き込みが正常に終了したことを条件として、記憶部３０に書き込まれた書込対象プログラムに対する上書きを禁止することができる。また、保護部４６は、書込部４４による記憶部３０に対する書込対象プログラムの書き込みが失敗したことを条件として、記憶部３０における書込対象プログラムが書き込まれるはずであった領域に対する外部からの書き込みを許可することができる。
【００５２】
なお、ステップＳ１０３において、比較部５０は、書込コマンドおよび書込対象プログラムとともに、書込対象プログラムのハッシュ値の期待値を受けてもよい。この場合、ステップＳ１０６において、比較部５０は、算出部４８がステップＳ１０５で算出したハッシュ値と、受け取った期待値とが一致するか否かを比較する。そして、算出部４８は、一例として、比較部５０が一致したとの比較結果を得たことを条件として書き込みが成功したと判断し、比較部５０が不一致であるとの比較結果を得たことを条件として、書き込みが失敗したと判断してよい。
【００５３】
図６は、検証時における、記憶装置２０の処理フローを示す。記憶装置２０は、保護状態において、当該記憶装置２０の外部から検証コマンドを受けることができる（Ｓ２０１）。検証コマンドには、検証対象となる書込対象プログラムを指定する情報を含んでよい。
【００５４】
検証コマンドを受けると、書込部４４は、管理テーブルに格納された状態情報を、保護状態を表わす値から、検証状態を表わす値に書き換える。これにより、状態管理部５２は、記憶部３０の保護領域を、検証状態とすることができる（Ｓ２０２）。
【００５５】
続いて、算出部４８は、検証コマンドにより指定された書込対象プログラムを記憶部３０の保護領域から読み出して、当該書込対象プログラムのハッシュ値を算出する（Ｓ２０３）。ハッシュ値の算出が完了すると、比較部５０は、完全性情報記憶部３２に記憶された当該書込対象プログラムのハッシュ値と、検証コマンドを受けたことに応じて新たに算出されたハッシュ値とが一致するか否かを比較する（Ｓ２０４）。続いて、比較部５０は、比較結果を検証コマンドの送出元に、比較結果を通知する（Ｓ２０５）。
【００５６】
続いて、保護部４６は、記憶部３０の保護領域に記憶された書込対象プログラムが正常であったか、否か（エラーか）を判断する（Ｓ２０６）。より詳しくは、保護部４６は、比較部５０が一致したとの比較結果を得たことを条件として正常であると判断し、不一致であるとの比較結果を得たことを条件としてエラーであると判断する。
【００５７】
正常であることを条件として（Ｓ２０６のＹｅｓ）、保護部４６は、管理テーブルに格納された状態情報を、検証状態を表わす値から保護状態を表わす値に書き換える。これにより、状態管理部５２は、記憶部３０の保護領域を、保護状態とすることができる（Ｓ２０７）。
【００５８】
エラーであることを条件として（Ｓ２０６のＮｏ）、保護部４６は、当該書込対象プログラムと対応付けて書き込まれていたハッシュ値に代えて、規定の値（例えば、全ビットが０または全ビットが１等）を完全性情報記憶部３２に書き込む（Ｓ２０８）。続いて、保護部４６は、管理テーブルに格納された状態情報を、検証状態を表わす値から通常動作状態を表わす値に書き換える。これにより、状態管理部５２は、記憶部３０の保護領域を、通常動作状態とすることができる（Ｓ２０９）。そして、保護部４６は、記憶部３０における当該書込対象プログラムに対する上書きを許可する。
【００５９】
以上の処理により、記憶装置２０は、記憶部３０に記憶された書込対象プログラムが改ざんされていないか否かを検出することができる。記憶装置２０は、例えばＣＰＵ１２から定期的に検証コマンドを受けて、記憶部３０に記憶された書込対象プログラムが検証される構成であってよい。
【００６０】
なお、ステップＳ２０８の処理として、保護部４６は、当該書込対象プログラムと対応付けて書き込まれていたハッシュ値に代えて、検証コマンドを受けたことに応じて新たに算出されたハッシュ値を、完全性情報記憶部３２に書き込んでよい。この場合、ステップＳ２０９の処理として、保護部４６は、管理テーブルに格納された状態情報を、検証状態を表わす値から保護状態を表わす値に書き換えてよい。これにより、記憶装置２０は、記憶部３０に記録済みの書込対象プログラムが何らかの原因で改ざんされた場合であっても、正常な書込対象プログラムのハッシュ値と異なる値を完全性情報記憶部３２に記憶させることができるので、検証者に改ざんを検出させることができる。
【００６１】
図７は、本実施形態に係る第１変形例に係るセキュリティーモジュール１８の構成を示す。本変形例に係るセキュリティーモジュール１８は、記憶部３０と、テーブル記憶部３４と、ハッシュエンジン３６と、コントローラ４０と、完全性情報記憶部７０と、セキュリティー処理部７２とを有する。記憶部３０、テーブル記憶部３４、ハッシュエンジン３６およびコントローラ４０のそれぞれは、図３に示された同一の符号の部材と略同一の構成および機能を採るので、説明を省略する。
【００６２】
完全性情報記憶部７０は、不揮発性の記憶部であって、図１に示されるセキュリティーモジュール１８内のＰＣＲの機能と、図３に示される記憶装置２０内の完全性情報記憶部３２の機能とを統合した機能を有する。セキュリティー処理部７２は、図１に示されるセキュリティーモジュール１８における、ＰＣＲ以外の各機能を有する。セキュリティー処理部７２は、一例として、ＲＳＡ暗号演算、暗号鍵生成、ハッシュ値の算出および乱数生成等の機能を有する。なお、セキュリティー処理部７２におけるハッシュ値の算出機能およびハッシュエンジン３６は、共通の機能ブロックにより実現されてよい。
【００６３】
このような第１変形例に係るセキュリティーモジュール１８を備える情報処理装置１０は、図１〜図６において説明した情報処理装置１０と同様に、起動時における、各プログラムのハッシュ値を算出するためのオーバーヘッドを無くして、起動時間を短くすることができる。さらに、第１変形例に係るセキュリティーモジュール１８は、各プログラムのハッシュ値を、耐タンパ性がより高い状態で保持することができる。
【００６４】
図８は、本実施形態に係る第２変形例に係る情報処理装置１０の構成を示す。本変形例に係る情報処理装置１０は、図１に示される情報処理装置１０と略同一の構成および機能を採るので、図１に示される各部材と略同一の構成および機能の部材に同一の符号を付け、以下相違点を除き説明を省略する。
【００６５】
本変形例に係る情報処理装置１０は、記憶装置２０に代えて、記憶部３０とメモリコントローラ８０とを備える。記憶部３０は、図３に示された記憶部３０と略同一の構成および機能を採るので、説明を省略する。
【００６６】
メモリコントローラ８０は、ＣＰＵ１２からの記憶部３０へのアクセスを受けて、当該アクセスに応じて記憶部３０に対してデータの読み出し、書き込みおよび各種制御を実行する。さらに、本変形例に係るメモリコントローラ８０は、完全性情報記憶部３２と、テーブル記憶部３４と、ハッシュエンジン３６と、コントローラ４０とを含む。完全性情報記憶部３２、テーブル記憶部３４、ハッシュエンジン３６およびコントローラ４０のそれぞれは、図３に示された同一の符号の部材と略同一の構成および機能を採るので、説明を省略する。
【００６７】
このような第２変形例に係る情報処理装置１０は、図１〜図６において説明した情報処理装置１０と同様に、起動時における、各プログラムのハッシュ値を算出するためのオーバーヘッドを無くして、起動時間を短くすることができる。さらに、第２変形例に係る情報処理装置１０は、ハッシュ値の算出および保持機能がメモリコントローラ８０内に含まれるので、記憶部３０として汎用の不揮発性メモリを用いることができる。
【００６８】
図９は、本実施形態の第３変形例に係る情報処理装置１０の構成を示す。本変形例に係る情報処理装置１０は、仮想マシンモニタ９０と、ゲストＯＳ９２と、データ記憶部９４と、セキュリティーモジュール１８と、記憶装置２０とを備える。
【００６９】
仮想マシンモニタ９０は、コンピュータのハードウェアリソースを、ソフトウェアにより仮想化する。仮想マシンモニタ９０は、情報処理装置１０が仮想化プログラムを実行することにより当該情報処理装置１０により実現される機能である。ゲストＯＳ９２は、仮想マシンモニタ９０によって仮想化されたハードウェアリソース上において実行されるオペレーションシステムである。データ記憶部９４は、例えばハードディスクドライブ等であって、データを記憶する。
【００７０】
このような第３変形例に係る情報処理装置１０において、仮想マシンモニタ９０は、図１に示される記憶装置２０と同様の構成および機能を、ゲストＯＳ９２に対して仮想化して提供する。従って、本変形例に係る情報処理装置１０は、仮想マシンモニタ９０により仮想化された記憶装置２０から各プログラムが呼び出されて、実行される。従って、このような本変形例に係る情報処理装置１０によれば、仮想化されたコンピュータの起動時における、各プログラムのハッシュ値を算出するためのオーバーヘッドを無くして、起動時間を短くすることができる。
【００７１】
図１０は、本実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＣＤ−ＲＯＭドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【００７２】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００７３】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ２０６０は、ＣＤ−ＲＯＭ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【００７４】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブートプログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【００７５】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【００７６】
コンピュータ１９００にインストールされ、コンピュータ１９００を記憶装置２０として機能させるプログラムは、記憶モジュールと、完全性情報記憶モジュールと、テーブル記憶モジュールと、ハッシュエンジンモジュールと、コントローラモジュールとを備える。これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、記憶部３０、完全性情報記憶部３２、テーブル記憶部３４、ハッシュエンジン３６およびコントローラ４０としてそれぞれ機能させる。
【００７７】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である記憶部３０、完全性情報記憶部３２、テーブル記憶部３４、ハッシュエンジン３６およびコントローラ４０として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の記憶部３０、完全性情報記憶部３２、テーブル記憶部３４、ハッシュエンジン３６およびコントローラ４０が構築される。
【００７８】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、又はＣＤ−ＲＯＭ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【００７９】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０（ＣＤ−ＲＯＭ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０および外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【００８０】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【００８１】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【００８２】
また、本明細書中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。明細書中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【００８３】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５の他に、ＤＶＤ又はＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【００８４】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【符号の説明】
【００８５】
１０  情報処理装置
１２  ＣＰＵ
１４  ＲＡＭ
１８  セキュリティーモジュール
２０  記憶装置
２２  Ｉ／Ｏ部
３０  記憶部
３２  完全性情報記憶部
３４  テーブル記憶部
３６  ハッシュエンジン
４０  コントローラ
４２  読出部
４４  書込部
４６  保護部
４８  算出部
５０  比較部
５２  状態管理部
７０  完全性情報記憶部
７２  セキュリティー処理部
８０  メモリコントローラ
９０  仮想マシンモニタ
９２  ゲストＯＳ
９４  データ記憶部
１９００  コンピュータ
２０００  ＣＰＵ
２０１０  ＲＯＭ
２０２０  ＲＡＭ
２０３０  通信インターフェイス
２０４０  ハードディスクドライブ
２０５０  フレキシブルディスク・ドライブ
２０６０  ＣＤ−ＲＯＭドライブ
２０７０  入出力チップ
２０７５  グラフィック・コントローラ
２０８０  表示装置
２０８２  ホスト・コントローラ
２０８４  入出力コントローラ
２０９０  フレキシブルディスク
２０９５  ＣＤ−ＲＯＭ
【図１】
0005466645.tif 000002
【図２】
0005466645.tif 000003
【図３】
0005466645.tif 000004
【図４】
0005466645.tif 000005
【図５】
0005466645.tif 000006
【図６】
0005466645.tif 000007
【図７】
0005466645.tif 000008
【図８】
0005466645.tif 000009
【図９】
0005466645.tif 000010
【図１０】
0005466645.tif 000011