以下、本発明の好適な実施の形態について、添付の図面を参照しつつ、詳細に説明する。
<1. 第1の実施の形態>
図1は、本発明に係るメモリシステム1を備えるコンピュータシステムを示す図である。コンピュータシステムは、本発明に係るメモリシステム1と、一般的なコンピュータとしての機能を有するホストコンピュータ10とを備えている。
メモリシステム1は、読み取り専用の記憶装置であるROM2と、例えばユーザデータ(ユーザ格納情報)等を必要に応じてセーブすることができるように読み書き可能な記憶装置として構成されるセキュリティメモリ3とを備えている。詳細は図示しないが、本実施の形態におけるメモリシステム1は、ホストコンピュータ10に対して着脱自在に構成されている。このようなメモリシステム1としては、例えば、メモリカードやゲームカセットが該当するがこれに限定されるものではない。
ROM2は、コントローラ20と、メモリアレイ21とを備えている。コントローラ20は、ホストコンピュータ10からの要求に応じて、メモリアレイ21に格納されている各種データを読み出してホストコンピュータ10に出力する機能を有している。また、コントローラ20は、ホストコンピュータ10との間で、メモリアレイ21に格納されたデータ(保護対象の情報)に対するセキュリティ機能を提供する。コントローラ20が提供するセキュリティ機能としては従来より提案されている様々な手法を適宜採用できるため、以下では詳細な説明は省略する。
図2は、ROM2のメモリアレイ21の記憶領域を例示する図である。メモリアレイ21は、複数の不揮発性の記憶素子が規則的に配列した構造を有しており、図2に示すように、複数の記憶領域に分割されている。
本実施の形態におけるメモリアレイ21を構成する記憶素子は、ホストコンピュータ10によるデータの書き込みができない素子が採用されている。したがって、ROM2は、メモリシステム1においては、先述のように読み取り専用の記憶装置として構成されている。ただし、プログラム26等を格納する記憶装置は必ずしも読み取り専用の記憶装置でなくてもよい。
図2に示すように、メモリアレイ21の記憶領域としては、キー情報25を格納する固有キー格納領域22、プログラム26を格納するプログラム格納領域23、プログラム26が使用するコンテンツ情報27(画像、音声、テキスト等)を格納するコンテンツ格納領域24が定義されている。ただし、定義される記憶領域はこれに限定されるものではなく、その他の記憶領域(例えば、上記セキュリティ機能を提供するためのデータが格納される領域等)が定義されてもよい。
キー情報25は、プログラム26を識別する固有の値であり、例えば、コントローラ20が提供するセキュリティ機能に利用される値などが想定される。本実施の形態では、キー情報25は、例えば商品コードのように、プログラム26のタイトルごとに異なる値を用いる。すなわち、プログラム26がゲームプログラムであれば、キー情報25はゲームのタイトルに固有であり、同じタイトルのゲームプログラムでは同じ値となる。ただし、例えば、製造番号のように、同じタイトルのプログラム26であっても、個々に異なる値をキー情報25として採用してもよい。
プログラム26は、保護対象の情報であり、ホストコンピュータ10によって実行される。そして、プログラム26には、ホストコンピュータ10によって実行されるときの当該プログラム26の進行状況がマーカーコード等により定義されている。以下の説明では、プログラム26の進行状況として、当該プログラム26には、順次に、N個のステージ(ステージ1,・・・,N)が定義されているものとする(Nは2以上の自然数)。すなわち、ホストコンピュータ10は、プログラム26を実行中において、実行中のプログラム26の進行状況をステージn(nは1からNまでの自然数)として取得することができる。
図1に戻って、セキュリティメモリ3は、コントローラ30と、メモリアレイ31とを備えている。コントローラ30は、ホストコンピュータ10からの要求に応じて、メモリアレイ31に格納されている各種データを読み出してホストコンピュータ10に出力する機能と、メモリアレイ31に各種データを格納する機能とを有している。本実施の形態におけるコントローラ30の機能および動作については、後述する。
図3は、第1の実施の形態におけるメモリアレイ31の記憶領域と各記憶領域に格納される情報とを例示する図である。メモリアレイ31は、複数の不揮発性の記憶素子から構成されており、図3に示すように複数の記憶領域に分割されている。
本実施の形態におけるメモリアレイ31の記憶領域としては、第1データセーブ領域32、第2データセーブ領域33、演算方法格納領域34、および、テーブル格納領域35が定義されている。ただし、定義される記憶領域はこれに限定されるものではなく、必要に応じて、その他の記憶領域が定義されてもよい。
メモリアレイ31を構成する記憶素子は、ホストコンピュータ10によるデータの読み出しのみではなく、ホストコンピュータ10による書き込みも可能な素子が採用される。したがって、セキュリティメモリ3は、メモリシステム1において、先述のように読み書き可能な記憶装置として構成されている。ただし、セキュリティメモリ3が備える記憶装置は、そのすべてが読み書き可能である必要はない。少なくとも第1データセーブ領域32および第2データセーブ領域33が読み書き可能に構成されていれば、例えば、演算方法格納領域34およびテーブル格納領域35は、読み取り専用であってもよい。しかし、セキュリティ機能を強化させる意味では、セキュリティメモリ3がワンチップで構成されていることが好ましい。
第1データセーブ領域32は、ユーザ格納情報121を格納する記憶領域であって、ホストコンピュータ10(ユーザ)によって自由にアクセスすることができる領域である。なお、ここにいう、「自由にアクセスすることができる」とは、特別なセキュリティ機能によらずにアクセスすることができるという意味であるが、もちろん何らかのセキュリティ機能が設けられていてもよい。
ユーザ格納情報121は、主には、ユーザによって作成される情報であり、プログラム26を途中から再開させるための情報(ゲームを途中で中断したときの情報等)や、ユーザが取得したコンテンツ情報(画像、音声、文章等)等である。ユーザ格納情報121は、ホストコンピュータ10において作成され、コントローラ30によって第1データセーブ領域32に格納される。すなわち、ユーザ格納情報121を格納することにより、セキュリティメモリ3は、データバックアップ用の記憶装置としても兼用されている。
第2データセーブ領域33は、演算結果情報330を格納する記憶領域であって、第1データセーブ領域32と同様にホストコンピュータ10(ユーザ)によって自由にアクセスすることができる領域である。
演算結果情報330は、ホストコンピュータ10からの格納情報120(図1)を、演算方法情報340から選択される1の被選択演算方法を用いて演算して得られる情報である。すなわち、演算結果情報330は、格納情報120を被選択演算方法により変換した情報である。コントローラ30は、格納情報120と被選択演算方法とに基づいて演算結果情報330を作成し、第2データセーブ領域33に格納する。
演算方法格納領域34は、演算方法情報340を格納する領域である。演算方法情報340には、ステージn(先述のようにプログラム26の進行状況を示す。)ごとに設定された複数の演算方法を定義する情報が含まれている。以下の説明では、ステージnに対応する演算方法を「演算方法fn(x)」と称する。すなわち、演算方法情報340には、ステージnと、ステージnに対応する演算方法fn(x)とが互いに関連づけられている。
演算方法fn(x)としては、例えば、「x」のチェックサムの値やハッシュ値を演算するものが考えられるが、もちろんこれらに限定されるものではない。なお、「x」は、ホストコンピュータ10から入力される格納情報120の値である。
テーブル格納領域35は、テーブル350を格納する記憶領域である。テーブル350とは、演算方法情報340に格納されている演算方法fn(x)と、演算方法fn(x)を読み出すためのコマンドとを関連づける情報である。より詳細には、テーブル350には、演算方法fn(x)の演算方法格納領域34における格納アドレスと、演算方法fn(x)を読み出すためのコマンドとが関連づけられている。
以下の説明では、演算方法fn(x)を読み出すためのコマンドを「コマンドRn」と称する。詳細は後述するが、コントローラ30は、ホストコンピュータ10からコマンドRnを受け取ると、テーブル350を参照して、受け取ったコマンドRnに応じた演算方法fn(x)を被選択演算方法として選択し(受け取ったコマンドRnに対応する演算方法fn(x)の格納アドレスを取得し)、当該被選択演算方法を演算方法情報340から読み出してホストコンピュータ10に出力する。すなわち、本実施の形態では、出力される「演算方法に対応した関数情報」とは、演算方法fn(x)であり、演算方法そのものである。
なお、ホストコンピュータ10によりコマンドRnが発行されたときに選択される被選択演算方法は、演算方法fn(x)の逆関数f-1 n(x)であってもよい。すなわち、演算方法情報340は、演算方法fn(x)と、逆関数f-1 n(x)とを関連づけて格納する情報であってもよい。この場合、コントローラ30が演算結果情報330を作成するときには演算方法情報340から演算方法fn(x)が取得されて演算が実行されるが、コマンドRnがコントローラ30に対して発行されたときには演算方法情報340から逆関数f-1 n(x)が取得されてホストコンピュータ10に出力される。このように、出力される「演算方法に対応した関数情報」とは、演算方法そのものではなくてもよい。
本実施の形態では、コマンドRnは、プログラム26内に記述されており、ホストコンピュータ10は、プログラム26の進行状況(ステージ1,・・・,N)に対応するコマンドR1,・・・,RNを取得するものとして説明する。すなわち、コマンドRnはホストコンピュータ10におけるプログラム26の進行状況に応じて選択されるため、選択されたコマンドRnはホストコンピュータ10の状態を反映している。
図1に戻って、ホストコンピュータ10は、各種のデータの演算を行うとともにホストコンピュータ10が備える各種ハードウェアを制御するCPU11と、各種のデータを記憶する記憶装置12とを備えている。これにより、ホストコンピュータ10は、一般的なコンピュータとしての構成および機能を備えている。また、ホストコンピュータ10は、図示しないスロットを備えており、当該スロットにメモリシステム1を装着することが可能である。
ホストコンピュータ10のCPU11は、メモリシステム1のメモリアレイ21に格納されているデータをROM2から読み出して各種の演算を行う。特に、CPU11は、プログラム格納領域23に格納されているプログラム26をコントローラ20を介して記憶装置12にロードしつつ、実行する機能を有している。また、CPU11は、プログラム26を実行しつつ、実行中のプログラム26の進行状況(進行中のステージ)を把握し、必要であれば、記憶装置12に進行状況(ステージ識別子)を格納する。
さらに、CPU11は、コントローラ30を介してメモリアレイ31にアクセスする機能も有している。
例えば、CPU11は、実行中のプログラム26の進行状況(ステージn)に応じて、メモリシステム1に対してコマンドRnを発行する。これによってホストコンピュータ10は、セキュリティメモリ3(コントローラ30)から演算方法fn(x)を取得することができる。
また、CPU11は、取得した演算方法fn(x)に基づいて、当該演算方法fn(x)の逆関数f-1 n(x)を求め、セキュリティメモリ3から読み出した演算結果情報330を当該逆関数f-1 n(x)により演算し評価情報122を求める。そして、このようにして得られた評価情報122を評価して、正しい演算が行われたか否かを判定し、プログラム26を進行させる。なお、詳細は後述する。
記憶装置12は、CPU11の一時的なワーキングエリアとして使用されるRAM(一般的には、高速アクセス可能な揮発性の記憶装置が採用される。)や、ホストコンピュータ10の起動プログラム(図示せず)等を格納しておく読み取り専用のROMなどのハードウェアから構成されている。また、図1には示していないが、セキュリティ機能強化のためには、記憶装置12の一部または全部がCPU11の内部にあってもよい。
特に、記憶装置12には、ロードされたプログラム26の一部や格納情報120、ユーザ格納情報121および評価情報122が適宜格納される。
本実施の形態におけるメモリシステム1では、ホストコンピュータ10が当該プログラム26を進行させる上で必要不可欠な情報がステージnごとに定義されている。以下の説明では、ステージnに対応する必要不可欠な情報を「En」と称する。すなわち、プログラム26には、ステージ1,・・・,Nに対応して、複数の必要不可欠な情報E1,・・・,ENが含まれている。
本実施の形態では、ホストコンピュータ10がステージnの状態であるときに作成される格納情報120は、当該ステージnにおける必要不可欠な情報Enとする。すなわち、格納情報120は、プログラム26の進行状況に応じて変化する情報であり、ホストコンピュータ10の状態を反映した情報である。
必要不可欠な情報Enとしては、例えば、プログラム26を進行させる上で必要となるキャラクタデータまたはその一部や、ROM2内に暗号化されて格納されている情報の復号キーに関する情報等が想定される。
以下では、必要不可欠な情報Enは、プログラム26を実行するときにおいて、ステージnを進行させるためだけに必要な情報として説明する。すなわち、本実施の形態では、ステージnを進行させるときにおいて、ホストコンピュータ10は、必要不可欠な情報Enをメモリシステム1から取得する必要がある一方で、直前までのステージ1,・・・,(n−1)において取得した必要不可欠な情報E1,・・・,E(n-1)を記憶装置12等に保持しておく必要はない。
なお、格納情報120は、例えば、ホストコンピュータ10の記憶装置12またはROM2のメモリアレイ21内の特定のアドレスに格納されている他の値などが採用されてもよいし、プログラム26の進行中において固定の値(例えば、キー情報25)であってもよい。ただし、格納情報120は、セキュリティ向上のためには、本実施の形態が採用するようにホストコンピュータ10の状態を反映した情報であることが好ましい。また、本実施の形態における格納情報120には、作成されたときのステージnを示す情報も含まれている。
また、詳細は図示しないが、ホストコンピュータ10は、ユーザに対して情報を出力する出力装置(ディスプレイやLED、スピーカ、プリンタ等)、ユーザが情報を入力するために操作する入力装置(キーボードやボタン、コントローラ、マイク、タッチパネル等)などのハードウェアを適宜備えていてもよい。
以上が、メモリシステム1を含むコンピュータシステムの構成および機能の説明である。次に、コンピュータシステムの動作を説明しつつ、本実施の形態における情報保護方法について説明する。
図4は、第1の実施の形態におけるセキュリティメモリ3の動作を示す流れ図である。セキュリティメモリ3は、起動中のホストコンピュータ10にメモリシステム1が装着された状態で動作する。なお、以下において、ROM2のコントローラ20の動作については、従来の技術を適用することが可能であるため、適宜説明を省略する。
メモリシステム1が動作中において、セキュリティメモリ3のコントローラ30は、ホストコンピュータ10からの各種コマンドを受け付けることが可能な状態となっている(ステップS1,S7,S9)。以下、コントローラ30がホストコンピュータ10からのコマンドを受け付けることが可能な状態を「待ち受け状態」と称する。ただし、コントローラ30が受け付けるコマンドは図4に示すものに限定されるものではない。
待ち受け状態において、ホストコンピュータ10からセーブコマンドが入力されると(ステップS1においてYes)、コントローラ30は、セーブする情報が格納情報120か否かを判定する(ステップS2)。
先述のように、本実施の形態におけるメモリシステム1(セキュリティメモリ3)にセーブされる情報としてコントローラ30に入力される情報は、格納情報120とユーザ格納情報121とがある。コントローラ30は、セーブコマンドとともに入力されるアドレス(メモリアレイ31における格納アドレス)に基づいて、当該格納アドレスが第1データセーブ領域32のアドレスであれば、セーブされる情報はユーザ格納情報121であると判定する。一方、当該格納アドレスが第2データセーブ領域33のアドレスであれば、セーブされる情報は格納情報120であると判定する。
セーブするデータがユーザ格納情報121である場合(ステップS2においてNo)、コントローラ30は、ユーザ格納情報121をメモリアレイ31の第1データセーブ領域32に格納する(ステップS6)。すなわち、本実施の形態におけるコントローラ30は、ユーザ格納情報121については、そのままメモリアレイ31に書き込む。
セーブするデータが格納情報120である場合(ステップS2においてYes)、コントローラ30は、格納情報120からステージS(当該格納情報120が作成されたときのステージを示す。)を取得する(ステップS3)。このように、本実施の形態におけるコントローラ30は、格納情報120を生成した際のホストコンピュータ10の状態を、ホストコンピュータ10から通知される格納情報120から取得する。
次に、コントローラ30は、演算方法情報340に含まれる複数の演算方法f1(x),・・・,fN(x)から、ステージSに対応する演算方法fS(x)を1の被選択演算方法として選択し(ステップS4)、取得する。そして、コントローラ30は、格納情報120と、取得した演算方法fS(x)により、演算結果情報330を作成し(ステップS5)、第2データセーブ領域33にセーブする(ステップS6)。
このようにして、ホストコンピュータ10がステージSにおいて作成した格納情報120は、セキュリティメモリ3において、ステージSに対応する演算方法fS(x)を用いて演算結果情報330に変換されてからメモリアレイ31に格納される。
待ち受け状態において、ロードコマンドが入力されると(ステップS7においてYes)、コントローラ30は、メモリアレイ31の第1データセーブ領域32または第2データセーブ領域33に格納されているユーザ格納情報121または演算結果情報330をロードする(ステップS8)。より詳細には、ロードコマンドとともに入力されるアドレス(第1データセーブ領域32または第2データセーブ領域33のアドレス)により指定されるデータ(ユーザ格納情報121または演算結果情報330)をメモリアレイ31から読み出し、ホストコンピュータ10に出力する。
待ち受け状態において、コマンドRnが入力されると(ステップS9においてYes)、コントローラ30は、テーブル格納領域35のテーブル350を参照し(ステップS10)、入力されたコマンドRnがテーブル350に存在するか否かを判定する(ステップS11)。すなわち、正しく定義されたコマンドRnが入力されたか否かを判定する。
入力されたコマンドRnがテーブル350に存在しない場合(ステップS11においてNo)、コントローラ30は、ホストコンピュータ10にダミーデータを出力する(ステップS12)。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
一方、入力されたコマンドRnがテーブル350に存在する場合(ステップS11においてYes)、コントローラ30は、当該コマンドRnに対応する演算方法fn(x)が格納されている位置を示す演算方法格納領域34のアドレスをテーブル350から取得する。
次に、コントローラ30は、取得したアドレスで示される演算方法格納領域34に格納されている情報を読み出してホストコンピュータ10に出力する。このようにして、演算方法格納領域34から読み出される情報とは、すなわち、演算方法情報340に含まれている演算方法fn(x)を表現した情報である。このように、ホストコンピュータ10からコマンドRnが入力されたときには、コントローラ30は、当該コマンドRnに対応する演算方法fn(x)を被選択演算方法として選択しホストコンピュータ10に出力する(ステップS13)。
先述のように、コマンドRnはステージn(ホストコンピュータ10の状態を反映している。)に応じて選択されるため、コマンドRnはコマンドRnが出力されたときのホストコンピュータ10の状態を反映した情報である。そして、コントローラ30がコマンドRnに応じて複数の演算方法f1(x),・・・,fN(x)から演算方法fn(x)を選択することは、すなわちコントローラ30がホストコンピュータ10からの要求があったときのホストコンピュータ10の状態に応じて演算方法情報340から1の演算方法fn(x)を被選択演算方法として選択することになる。
このように構成することにより、不正に演算方法fn(x)を読みだそうと企図する者は、刻々と変化する正常なホストコンピュータ10の状態をも再現しなければ演算方法fn(x)を読み出すことができず、セキュリティレベルが向上する。
以上がセキュリティメモリ3の動作である。次に、ホストコンピュータ10の動作を説明する。
図5および図6は、第1の実施の形態におけるホストコンピュータ10の動作を示す流れ図である。なお、以下では、ホストコンピュータ10には、すでにメモリシステム1が装着されており、コントローラ30は待ち受け状態にあるものとして説明する。また、図5および図6に示される各工程は、特に断らない限り、ホストコンピュータ10のCPU11が、主にプログラム26に従って動作することにより実行される工程を示す。
ホストコンピュータ10は、プログラム26の実行を開始すると、所定の初期設定を実行した後、プログラム26の進行状況を示すステージnに「1(初期ステージ)」をセットする(ステップS21)。これにより、ホストコンピュータ10において実行中のプログラム26の進行状況がステージ1に移行し、ステージ1が開始される。すなわち、ホストコンピュータ10の状態は、ステージ1が進行している状態となる。
次に、ホストコンピュータ10は、ステージnにおける必要不可欠な情報Enをコントローラ20(ROM2)から取得して格納情報120を作成する(ステップS22)。このときホストコンピュータ10は、取得した必要不可欠な情報Enに、そのときのステージnの値(このときのホストコンピュータ10の状態を示す値。)をステージSとして付加して格納情報120を作成する。
格納情報120を作成すると、ホストコンピュータ10は、作成した格納情報120を第2データセーブ領域33に格納するように、当該格納情報120をメモリシステム1に向けて出力する。すなわち、セーブコマンドと、第2データセーブ領域33の格納アドレスと、格納情報120とをコントローラ30に出力する(ステップS23)。
すでに説明したように、セーブコマンドと、第2データセーブ領域33の格納アドレスと、格納情報120とが入力されると、コントローラ30は、格納情報120を演算方法fn(x)により演算結果情報330に変換して、メモリアレイ31(第2データセーブ領域33)に格納する。
なお、ステップS23により格納情報120を出力した後、ホストコンピュータ10が記憶装置12から格納情報120を削除するようにプログラム26に記述しておくことが好ましい。すなわち、格納情報120をメモリシステム1に格納した状態では、ホストコンピュータ10が必要不可欠な情報Enを保持していない状態となるように構成しておくことがセキュリティ強化のためには好ましい。
格納情報120がメモリシステム1に格納されると、ホストコンピュータ10は、演算結果情報330をメモリシステム1から読み出して取得する(ステップS24)。具体的には、ホストコンピュータ10は、ロードコマンドと、格納情報120を出力したときの格納アドレスとをメモリシステム1に向けて出力する。これに応じて、コントローラ30が演算結果情報330を当該格納アドレス(第2データセーブ領域33のアドレス)から読み出してホストコンピュータ10に向けて出力する。このようにして、ホストコンピュータ10は、演算結果情報330を取得する。
すなわち、ホストコンピュータ10は、ステップS23により格納情報120をメモリシステム1にセーブした後、すぐにステップS24により格納情報120が変換された演算結果情報330をメモリシステム1からロードするのである。
演算結果情報330は、通常のロードコマンドで読み出せる情報であるため、外部のコンピュータ(ホストコンピュータ10に限られない。保護対象の情報を不正に複製しようとする者が使用するコンピュータを含む。)は比較的容易にメモリアレイ31から取得できる。しかし、ステップS24で得られた演算結果情報330は、演算方法fn(x)により変換されており、そのままではホストコンピュータ10は演算結果情報330を必要不可欠な情報Enとして使用することはできない。
したがって、演算結果情報330を取得すると、ホストコンピュータ10は、メモリシステム1(コントローラ30)に対して、コマンドRnを発行する。これにより、メモリシステム1から演算方法fn(x)(被選択演算方法)が取得される(ステップS25)。なお、先述のように、ステージnにおいて使用するコマンドRnは、ホストコンピュータ10がROM2のメモリアレイ21から取得する。
演算方法fn(x)が取得されると、ホストコンピュータ10は、取得した演算方法fn(x)に基づいて逆関数f-1 n(x)を求める。そして、求めた逆関数f-1 n(x)により演算結果情報330を演算し、評価情報122を作成する(ステップS26)。すなわち、ステップS26により、演算結果情報330が解読され、元の格納情報120に復号化され評価情報122となる。
本実施の形態では、ステージnにおいて作成された格納情報120は、当該ステージnを実行するために必要な情報(必要不可欠な情報En)を含んでいる。したがって、正常に評価情報122が作成(正常に元の格納情報120が復元)されていれば、ホストコンピュータ10は、必要不可欠な情報Enを取得できていることになり、ステップS26の後、ステージnを進行させることに何ら支障はない。一方、何らかの理由で、正常な評価情報122が作成されなければ、その後、ステージnを進行させることはできなくなる。
すなわち、本実施の形態では、評価情報122が正常であるか否かをホストコンピュータ10が改めて判定することはしないが、ステージnが進行できるか否かによって間接的に評価情報122が評価されることになる。なお、元の格納情報120を記憶装置12に保持しておき、評価情報122と比較して評価するように構成してもよい。
評価情報122を作成し必要不可欠な情報Enを取得すると、ホストコンピュータ10は、プログラム26のステージnを進行させつつ(ステップS30)、様々な状態を監視する状態となる(ステップS31,S34,S36,S39)。ただし、ホストコンピュータ10が監視する状態は、図6に示される状態に限定されるものではない。以下、ホストコンピュータ10が様々な状態を監視している状態を「監視状態」と称する。
監視状態において、データロード(メモリアレイ31の第1データセーブ領域32に格納されているユーザ格納情報121に対する読み出し。)が指示されると(ステップS31においてYes)、ホストコンピュータ10はメモリシステム1のコントローラ30に対して、ロードコマンドを出力する。ホストコンピュータ10からロードコマンドを受け取ると、コントローラ30は、先述のように、データロードを行い、ホストコンピュータ10に対してユーザ格納情報121を出力する。これにより、ホストコンピュータ10は、ユーザ格納情報121を取得する(ステップS32)。
ユーザ格納情報121を取得すると、ホストコンピュータ10は、取得したユーザ格納情報121に含まれる再開させるステージSに関する情報に基づいて、nにSをセットする(ステップS33)。これにより、プログラム26の進行状況は、データロード前のステージから再開させるステージ(すなわちステージS)に移行する。ステージSが再開されると、ロードしたユーザ格納情報121に従ってプログラム26を進行させるために、ホストコンピュータ10はステップS30の処理に戻る。
本実施の形態では、先述のように、必要不可欠な情報Enは、ステージnを進行させるためにのみ必要な情報である。しかし、このような情報を必要不可欠な情報Enとして定義した場合であっても、ユーザ格納情報121を取得しステージSからプログラム26を再開した場合においても、再開時点からステージSを終了するまでに、必要不可欠な情報ESを使用しなければならなくなる場合も起こりうる。
例えば、必要不可欠な情報ESがステージSにのみ登場するキャラクタデータの一部であって、再開時点からステージSが終了するまでに、そのキャラクタが登場するならば、前記の問題が発生する。このような場合には、ステージSに関する情報とともに、当該ステージSを開始したときに取得した必要不可欠な情報ESもユーザ格納情報121に含めてセーブし、ロードしたユーザ格納情報121から必要不可欠な情報ESを取得するように構成すればよい。あるいは、ユーザ格納情報121による再開が行われた場合には、必要不可欠な情報ESを、格納情報120を作成する場合と同様に、ROM2から再度取得してもよい。
監視状態において、データセーブが指示されると(ステップS34においてYes)、ホストコンピュータ10はメモリシステム1のコントローラ30に対して、セーブコマンドとともに、ユーザ格納情報121(セーブ時のステージnに関する情報を含む。)を出力する(ステップS35)。これにより、コントローラ30は、先述のように、データのセーブを行う。なお、ホストコンピュータ10に対するデータセーブの指示は、ユーザからされてもよいし、オートセーブのように、プログラム26によって実行タイミングが予め決められているものであってもよい。
監視状態において、プログラム26が進行しステージnが終了すると(ステップS36においてYes)、ホストコンピュータ10は、現在のステージnが最終ステージNであるか否かを判定する(ステップS37)。
そして、現在のステージnが最終ステージNである場合、プログラム26が最後まで進行したと判断し、プログラム26を終了する。一方、現在のステージnが最終ステージNでない場合、ステージnをインクリメントして(ステップS38)、次のステージを開始し、ステップS22の処理に戻る。
監視状態において、終了が指示されると(ステップS39においてYes)、ホストコンピュータ10は、プログラム26の実行を終了する。なお、詳細は省略するが、終了が指示された場合は、データセーブを行うか否かをユーザに対して確認することが好ましい。
以上が、第1の実施の形態における情報保護方法の説明である。次に、本実施の形態における効果について検証する。
メモリシステム1では、保護の対象となる情報は、ROM2のメモリアレイ21に格納されている。プログラム26を不正に複製しようと企図する者(以下、「不正な複製者」と称する。)は、ROM2のセキュリティ機能を破ってメモリアレイ21に格納されている情報を複製する。しかし、デッドコピーされたプログラム26を実行すると、格納情報120(必要不可欠な情報En)をメモリ(セキュリティメモリ3に相当する記憶装置)に格納されてしまい、メモリから読み出された情報にはステップS26により演算が施される(評価情報122に変換される)。したがって、不正な複製者は、複製したプログラム26を解析して、このような処理を取り除くためのプログラム26の改ざんを行うか、あるいは、セキュリティメモリ3をも忠実に再現する必要がある。
プログラム26の改ざんは、ステージ1,・・・,Nまでのすべての該当箇所を特定して、改ざんしなければならず、困難である。また、セキュリティメモリ3を再現するためには、セキュリティメモリ3のコントローラ30が提供するセキュリティ機能をも看破し、メモリアレイ31に格納されている情報をも全て読み出して複製する必要がある。
ここで、コントローラ30を介して、メモリアレイ31から全ての演算方法f1(x),・・・,fN(x)を読み出すためには、外部のコンピュータ(ホストコンピュータ10に限られない。例えば、不正な複製者の使用するコンピュータも含む。)は、全てのコマンドR1,・・・,RNを特定して1つずつコントローラ30に出力してセキュリティメモリ3から読み出す必要がある。
また、先述のように、全てのコマンドR1,・・・,RNは、ホストコンピュータ10の状態を反映した情報とされているため、不正な複製者は、特定した全てのコマンドR1,・・・,RNとを使用するに際しても、正常なホストコンピュータ10の状態をも再現しなければならない。
さらに、全ての演算方法f1(x),・・・,fN(x)および全てのコマンドR1,・・・,RN、あるいは、プログラム26におけるマーカーコードの位置や数は、正規のプログラマ(プログラム26の提供者)がプログラム26に応じて書き換えるだけで、容易に変更でき、ホストコンピュータ10における変更を要しない。したがって、例えば、ゲームタイトルごとや改訂版ごとに頻繁に変更でき、不正な複製者は、その度に上記の解析作業を行わなければならず、違法な複製品(海賊版)を製造するまでに一定以上の時間を要することとなる。特に、プログラム26がゲームソフトウェアなどである場合、発売開始直後から海賊版が流通すると正規版の売れ行きに大きな影響がでてしまうという特性がある。したがって、このような市場の製品においては、例え完全に海賊版の製造を防止できなくとも、発売開始から一定期間でも海賊版の出現を遅らせることができるならばその効果は大きいといえる。
以上のように、第1の実施の形態におけるメモリシステム1は、ホストコンピュータ10に接続され、プログラム26を格納するメモリアレイ21と、メモリアレイ21に対するアクセスを制御するコントローラ20と、演算方法を格納するメモリアレイ31と、プログラム26を使用するホストコンピュータ10からの格納情報120を、当該格納情報120を生成した際のホストコンピュータ10の状態に応じて、メモリアレイ31に格納されている演算方法fn(x)を用いて演算し演算結果情報330を求めるコントローラ30とを備え、コントローラ30は、ホストコンピュータ10からの要求に応じて、演算結果情報330と演算結果情報330を作成するときに用いた演算方法fn(x)に対応した関数情報(本実施の形態では演算方法fn(x))とをホストコンピュータ10に出力する。これにより、既存のホストコンピュータ10の設計変更を必要とせず、安価にセキュリティレベルを向上させることができる。また、例えば、プログラム26ごとに変更できるので、一旦、セキュリティを破られても、容易に再構築できる。また、ホストコンピュータ10の状態に応じて演算方法fn(x)が選択されるため、これを再現しなければ演算結果情報330を取得できても格納情報120を再現できない。したがって、複製を作成することが一層困難となる。
また、コントローラ30は、格納情報120を生成した際のホストコンピュータ10の状態を、当該格納情報120から取得することにより、状態を通知するためのコマンド等を別途必要としない。
また、ホストコンピュータ10におけるプログラム26の進行状況に応じて、ホストコンピュータ10の状態が変化する。これにより、プログラム26の進行状況にリンクさせたコマンドRnを発行しなければ、格納情報120を再現することが困難となる。これによりセキュリティレベルが向上する。
また、格納情報120はホストコンピュータ10においてプログラム26を使用するときに必要不可欠な情報であることにより、評価情報122に対する評価を簡略化できる。すなわち、正しい評価情報122が作成されなければプログラム26が正常に動作しないため、正しい評価情報122が作成されたか否かを判定する必要がない。
また、演算結果情報330がメモリアレイ31に格納されることにより、設計の自由度が向上する。
なお、ホストコンピュータ10は第1データセーブ領域32および第2データセーブ領域33に対して自由にアクセス可能であると説明したが、これらの領域に対するホストコンピュータ10からのアクセスに対して、何らかのセキュリティ機能を設けてもよい。以下の実施の形態においても同様である。
また、第1の実施の形態では、演算方法情報340において複数の演算方法fn(x)が定義されていたが、定義される演算方法は1つであってもよい。この場合でも、セキュリティメモリ3にセキュリティ機能が追加されているため、従来の技術に比べればセキュリティレベルは向上する。そして、演算方法情報340において1の演算方法のみを定義する場合であっても、既存のホストコンピュータ10に対する設計変更は不要であるとともに、保護対象の情報に応じて容易に変更することも可能であるという効果も得られる。
また、図2および図3に示した各記憶領域のそれぞれは、メモリアレイ21,31において連続したアドレスで構成されているように示している。しかし、これらの領域は、いずれも不連続なアドレスにより構成されていてもよい。以下の実施の形態においても同様である。
また、第1の実施の形態では、演算結果情報330には、格納情報120に含まれていたステージSに関する情報も含められると説明した。しかし、格納情報120に含まれるステージSに関する情報は、コントローラ30が演算方法fn(x)を選択するために参照した後は破棄し、演算結果情報330に含めないように構成してもよい。
また、格納情報120の所定の一部分のみを演算方法fn(x)によって演算し、残りの部分と結合して演算結果情報330としてもよい。
また、演算結果情報330は、メモリアレイ31に格納されると説明したが、コントローラ30は、求めた演算結果情報330をメモリアレイ31に格納せず、演算後直ちに、ホストコンピュータ10に出力してもよい。この場合、メモリアレイ31に演算結果情報330を格納する領域(第2データセーブ領域33)を設ける必要がなくなる。
<2. 第2の実施の形態>
第1の実施の形態では、コントローラ30が格納情報120とユーザ格納情報121とを区別して、格納情報120については演算方法fn(x)による変換を行ってから格納する一方で、ユーザ格納情報121についてはこのような変換を行わずに格納するように構成していた。しかし、ユーザ格納情報121についても演算方法fn(x)による変換を行ってから格納するように構成することもできる。
図7は、第2の実施の形態におけるメモリアレイ31の記憶領域と各記憶領域に格納される情報とを例示する図である。なお、第2の実施の形態におけるコンピュータシステムにおいて第1の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
図7と図3とを比較すれば明らかなように、第2の実施の形態におけるメモリシステム1は、セキュリティメモリ3のメモリアレイ31に設けられる記憶領域が第1の実施の形態におけるメモリシステム1と異なっている。具体的には、第2の実施の形態におけるメモリアレイ31には、第1データセーブ領域32および第2データセーブ領域33の代わりにデータセーブ領域36が定義されている。すなわち、第1データセーブ領域32および第2データセーブ領域33がデータセーブ領域36に統一されている。また、進行履歴情報370を格納する進行履歴格納領域37が追加的に設けられている。
第2の実施の形態におけるテーブル351は、ステージnと、ステージnにおいて使用されるべきコマンドRnと、演算方法fn(x)の格納アドレスとを関連づける情報である。すなわち、第1の実施の形態におけるテーブル350と比べて、ステージnに関する情報がさらに関連づけられている点が異なっている。
データセーブ領域36は、演算結果情報360を格納する領域である。第1の実施の形態における演算結果情報330は、ユーザ格納情報121に基づいて作成されることはなかった。しかし、第2の実施の形態における演算結果情報360は、格納情報120のみならず、ユーザ格納情報121に基づいても作成される。演算結果情報360には、その元となった格納情報120またはユーザ格納情報121が作成されたときのステージを示す情報がステージSとして付加されている。
なお、詳細は後述するが、付加されるステージSに関する情報は、演算方法fn(x)による変換がされていないものとする。また、ステージSに関する情報は、ユーザ格納情報121に基づいて作成される演算結果情報360にのみ付加されるように構成し、格納情報120に基づいて作成される演算結果情報360には付加しないように構成してもよい。
進行履歴格納領域37に格納される進行履歴情報370は、コントローラ30により作成される情報であって、コントローラ30がホストコンピュータ10から進行状況(ステージn)を通知されたときに、当該通知された進行状況を記録する情報である。詳細は後述するが、本実施の形態では、プログラム26におけるステージ(n−1)までが順次に正常に進行して正常にステージnが開始されたときには、進行履歴情報370には、ステージnが記録される。言い換えれば、進行履歴情報370にステージnが記録されている状態とは、ホストコンピュータ10により実行中のプログラム26の進行状況がステージnの状態であることを示す。なお、以下の説明では、進行履歴情報370に記録されたステージを「ステージP」と称する。
次に、第2の実施の形態における情報保護方法について説明する。
図8は、第2の実施の形態におけるセキュリティメモリ3の動作を示す流れ図である。第2の実施の形態におけるセキュリティメモリ3は、起動中のホストコンピュータ10にメモリシステム1が装着された状態で動作する。
第2の実施の形態におけるセキュリティメモリ3が動作中において、セキュリティメモリ3のコントローラ30は、ホストコンピュータ10からの各種コマンドを受け付けることが可能な状態となっている(ステップS41,S46,S49)。以下、本実施の形態において、第2の実施の形態におけるコントローラ30がホストコンピュータ10からのコマンドを受け付けることが可能な状態を「待ち受け状態」と称する。ただし、コントローラ30が受け付けるコマンドは図8に示すものに限定されるものではない。
待ち受け状態において、ホストコンピュータ10からセーブコマンドが入力されると(ステップS41においてYes)、コントローラ30は、セーブコマンドとともに入力された情報(格納情報120またはユーザ格納情報121)からステージS(当該情報が作成されたときのステージを示す。)を取得して進行履歴情報370のステージPにセットする(ステップS42)。
これにより、セキュリティメモリ3の状態もホストコンピュータ10と同一のステージSとなるとともに、ステージSまで進行したことが進行履歴情報370に記録される。このように、本実施の形態におけるコントローラ30も、セーブする情報を生成した際のホストコンピュータ10の状態を、ホストコンピュータ10から通知される当該情報から取得する。
次に、コントローラ30は、演算方法情報340から、ステージSに対応する演算方法fS(x)を選択し(ステップS43)、取得する。そして、演算方法fS(x)を取得すると、コントローラ30は、セーブする情報と、取得した演算方法fS(x)とに基づいて、演算結果情報360を作成し(ステップS44)、データセーブ領域36にセーブする(ステップS45)。
このようにして、ホストコンピュータ10がステージSにおいて作成し、セーブしようとする情報(格納情報120またはユーザ格納情報121)は、セキュリティメモリ3において、ステージSに対応する演算方法fS(x)を用いて演算結果情報360に変換されてからメモリアレイ31に格納される。すなわち、第1の実施の形態と異なり、第2の実施の形態では、ユーザ格納情報121であっても、演算結果情報360に変換される。
待ち受け状態において、ロードコマンドが入力されると(ステップS46においてYes)、コントローラ30は、メモリアレイ31のデータセーブ領域36に格納されている演算結果情報360をロードする(ステップS47)。より詳細には、ロードコマンドとともに入力されるアドレスにより指定されるデータ(通常は演算結果情報360の一部)をメモリアレイ31から読み出し、ホストコンピュータ10に出力する。
ステップS47の処理と並行して、コントローラ30は、ステップS47において読み出した演算結果情報360に付加されているステージSを取得し、進行履歴情報370のステージPにセットする(ステップS48)。
演算結果情報360に付加されているステージSとは、演算結果情報360の元となった情報(格納情報120またはユーザ格納情報121)が作成されたときのホストコンピュータ10におけるプログラム26の進行状況である。すなわち、ステップS48を実行することにより、コントローラ30は、進行履歴情報370を、ロードされた情報の作成時のステージに戻す。ただし、演算結果情報360にステージSが付加されていない場合(当該演算結果情報360が格納情報120に由来する情報である場合)は、ステップS48は実行しない。
待ち受け状態において、コマンドRnが入力されると(ステップS49においてYes)、コントローラ30は、進行履歴情報370を参照して現在のステージPを取得して、テーブル格納領域35のテーブル351を参照する(ステップS50)。ステップS50においてテーブル格納領域35(テーブル351)から読み出される情報とは、ステージPにおいて使用されるべきコマンドRPである。
次に、コントローラ30は、ステップS50で取得したコマンドと、入力されたコマンドとが一致しているか否かを判定する(ステップS51)。
ホストコンピュータ10から入力されたコマンドRnが、現在のステージPにおいて使用されるべきコマンドRPと一致した場合、コントローラ30は、再度、テーブル351を参照して、入力されたコマンドRnに関連づけられている格納アドレスを取得する。そして、取得した格納アドレスに格納されている演算方法fn(x)を表現した情報を演算方法格納領域34から読み出してホストコンピュータ10に出力する。このように、ホストコンピュータ10からコマンドRnが入力されたときには、コントローラ30は、当該コマンドRnに対応する演算方法fn(x)を被選択演算方法として選択しホストコンピュータ10に出力する(ステップS52)。
第1の実施の形態では、セキュリティメモリ3に対して単独でコマンドR1,・・・,コマンドRNが打ち込まれれば、それに対して演算方法f1(x),・・・,演算方法fN(x)を読み出すことができる。しかし、第2の実施の形態では、進行履歴情報370を設けることにより、不正に演算方法fn(x)を読みだそうと企図する者は、刻々と変化する正常なホストコンピュータ10の状態を再現するだけでなく、それに応じてセキュリティメモリ3の状態も変化させなければ演算方法fn(x)を読み出すことができず、セキュリティレベルがさらに向上する。
一方、ホストコンピュータ10から入力されたコマンドRnが、現在のステージPにおいて使用されるべきコマンドRPと一致しない場合、コントローラ30は、ホストコンピュータ10にダミーデータを出力する(ステップS53)。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
以上が第2の実施の形態におけるセキュリティメモリ3の動作である。次に、第2の実施の形態におけるホストコンピュータ10の動作を説明する。
図9および図10は、第2の実施の形態におけるホストコンピュータ10の動作を示す流れ図である。なお、図9および図10に示される各工程は、特に断らない限り、ホストコンピュータ10のCPU11が、主にプログラム26に従って動作することにより実行される工程を示す。
第2の実施の形態におけるホストコンピュータ10は、プログラム26の実行を開始すると、所定の初期設定を実行した後、プログラム26の進行状況を示すステージnに「1(初期ステージ)」をセットする(ステップS61)。これにより、ホストコンピュータ10において実行中のプログラム26の進行状況がステージ1に移行し、ステージ1が開始される。
なお、ステップS62ないしS66およびステップS71の処理は、第1の実施の形態におけるステップS22ないしS26およびステップS30と同様の処理であるため、説明を省略する。
第2の実施の形態における監視状態において、データロードが指示されると(ステップS72においてYes)、ホストコンピュータ10はメモリシステム1のコントローラ30に対して、ロードコマンドを出力する。ホストコンピュータ10からロードコマンドを受け取ると、コントローラ30は、先述のように、データロードを行い、ホストコンピュータ10に対して演算結果情報360を出力する。これにより、ホストコンピュータ10は、演算結果情報360を取得する(ステップS73)。
演算結果情報360を取得すると、ホストコンピュータ10は、取得した演算結果情報360に付加されているステージS(解読不要)に関する情報に基づいて、nにSをセットする(ステップS74)。これにより、プログラム26の進行状況は、データロード前のステージから再開させるステージ(すなわちステージS)に移行する。
ステージSが再開されると、ホストコンピュータ10は、ステップS73で取得した演算結果情報360を解読するために、コントローラ30に対してコマンドRnを発行し、演算方法fn(x)を取得する(ステップS75)。
このときすでにステップS74が実行され、ステージnは、演算結果情報360が作成されたときのホストコンピュータ10におけるプログラム26のステージSに戻っている。したがって、ステップS75において発行されるコマンドRnは、ステップS73において取得した演算結果情報360が作成されたときに使用された演算方法fS(x)を取得するためのコマンドRSである。また、先述のように、演算結果情報360を出力するときには、セキュリティメモリ3の進行履歴情報370はステージSに書き換えられている(図8:ステップS48)。したがって、ステップS75において発行されるコマンドRSが、コントローラ30により、不適切なコマンドであると判定されることはない。
次に、ホストコンピュータ10は、取得した演算方法fn(x)から演算方法fn(x)の逆関数f-1 n(x)を求め、当該逆関数f-1 n(x)により演算結果情報360を演算することによってユーザ格納情報121を作成する(ステップS76)。そして、作成したユーザ格納情報121に従ってプログラム26を進行させるために、ホストコンピュータ10はステップS71の処理に戻る。
なお、ステップS77ないしS82の処理は、第1の実施の形態におけるステップS34ないしS39と同様の処理であるため、説明を省略する。
以上のように、第2の実施の形態におけるメモリシステム1は、ユーザ格納情報121についても、演算方法fn(x)による変換を行ってメモリアレイ31に格納する。このように構成することによっても、第1の実施の形態と同様の効果を得ることができる。
また、ユーザ格納情報121は、ユーザにより作成される情報であり、例えば、ROM2に格納されていない情報であって、記憶装置12に保存しておくことが困難な情報である。メモリアレイ31以外の記憶領域に格納容易な情報であれば、メモリアレイ31から取得される演算結果情報360の解読に失敗しても、他の記憶領域から取得するように不正にプログラム26を改ざんされるおそれがある。しかし、格納情報120だけでなく、ユーザ格納情報121についても、メモリアレイ31に格納するときに、演算方法fn(x)による変換を行うことにより、ホストコンピュータ10は、メモリアレイ31から得られる演算結果情報360の解読を確実に行う必要があり、セキュリティ機能が向上する。
また、コントローラ30が、ホストコンピュータ10の状態を取得するたびに、進行履歴情報370に記録することにより、例えば、正しいコマンドRnが使用されたか否かを容易に確認できる。
なお、第1の実施の形態および第2の実施の形態では、格納情報120(またはユーザ格納情報121)を作成したときのホストコンピュータ10の状態は、プログラム26のホストコンピュータ10における進行状況(ステージn)として、格納情報120(またはユーザ格納情報121)に含まれていると説明した。そして、コントローラ30は、これらの情報(メモリアレイ31に格納する元となる情報)からホストコンピュータ10の状態を取得する。これにより、ホストコンピュータ10は、状態の変化を意識して、その都度、コントローラ30に通知する必要がない。
しかし、ホストコンピュータ10の状態をコントローラ30に通知するための専用のコマンド(状態通知コマンド)が定義されていてもよい。すなわち、ホストコンピュータ10は、状態が変化するたびに、状態通知コマンドをコントローラ30に向けて発行してもよい。
ホストコンピュータ10とメモリシステム1との間のセキュリティ機能によっては、メモリアレイ31に格納する情報をコントローラ30が解析することが困難な場合もある。そのような場合であっても、ホストコンピュータ10から状態通知コマンドが発行され、これを進行履歴情報370に記録しておけば、コントローラ30は容易にホストコンピュータ10の状態を取得できる。また、このように構成することにより、格納情報120(またはユーザ格納情報121)をセキュリティメモリ3に格納させるとき以外のタイミングでも状態を通知できる。
<3. 第3の実施の形態>
上記実施の形態では、格納情報120は、メモリシステム1においてコントローラ30により演算結果情報330(あるいは演算結果情報360)に変換される。そして、ホストコンピュータ10が正常な演算方法fn(x)をメモリシステム1から取得できれば、演算結果情報330(あるいは演算結果情報360)はホストコンピュータ10によって逆変換されて(復号化されて)評価情報122となる。すなわち、上記実施の形態では、格納情報120と評価情報122とは元情報と復元情報の関係であり、互いにほぼ同等の情報として構成されていた。しかし、格納情報120と評価情報122との関係は必ずしもこのような関係に限定されるものではない。
図11は、第3の実施の形態におけるメモリアレイ31の記憶領域と各記憶領域に格納される情報とを例示する図である。なお、第3の実施の形態におけるコンピュータシステムにおいて第1の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
第3の実施の形態における演算方法格納領域34は、演算方法情報340の代わりに演算方法情報341を格納している点が第1の実施の形態における演算方法格納領域34と異なっている。演算方法情報341は、第1の実施の形態における演算方法情報340と同様にステージ1,・・・,Nと、これに対応する演算方法f1(x),・・・,fN(x)とが互いに関連づけられて定義されている。しかし、第3の実施の形態における演算方法情報341は、さらに、各演算方法f1(x),・・・,fN(x)に対応する演算方法F1(x),・・・,FN(x)が、演算方法f1(x),・・・,fN(x)に関連づけて定義されている点が演算方法情報340と異なっている。
ここで、演算方法fn(x)と演算方法Fn(x)との関係は、互いに逆関数の関係とはなっていない。また、ステージnにおける格納情報120を、演算方法fn(x)で一次変換し、さらに、演算方法Fn(x)で二次変換すると、ステージnにおける必要不可欠な情報Enとなる。
例えば、第3の実施の形態における格納情報120は暗号化された情報であり、そのままでは必要不可欠な情報Enとしてホストコンピュータ10において使用することができない情報である。このような格納情報120を演算方法fn(x)で一回目の復号化をし、さらに、演算方法Fn(x)で二回目の復号化をすると、格納情報120が完全な必要不可欠な情報Enに復号化される。すなわち、第3の実施の形態におけるプログラム26には、このような状態の格納情報120が各ステージごとに記述されている。
第3の実施の形態におけるテーブル352は、演算方法情報340に格納されている演算方法Fn(x)と、演算方法Fn(x)を読み出すためのコマンドRnとを関連づける情報である。より詳細には、テーブル352には、演算方法Fn(x)の演算方法格納領域34における格納アドレスと、演算方法Fn(x)を読み出すためのコマンドRnとが関連づけられている。すなわち、本実施の形態では、コマンドRnは、メモリシステム1から演算方式fn(x)を読み出すためのコマンドとして定義されるものではなく、演算方式Fn(x)を読み出すためのコマンドとして定義される。
図12は、第3の実施の形態におけるセキュリティメモリ3の動作を示す流れ図である。第3の実施の形態におけるセキュリティメモリ3も、第1の実施の形態におけるセキュリティメモリ3と同様に、起動中のホストコンピュータ10にメモリシステム1が装着された状態で動作する。
メモリシステム1が動作中において、セキュリティメモリ3のコントローラ30は、ホストコンピュータ10からの各種コマンドを受け付けることが可能な状態となっている(ステップS91,S97,S99)。以下、コントローラ30がホストコンピュータ10からのコマンドを受け付けることが可能な状態を「待ち受け状態」と称する。ただし、コントローラ30が受け付けるコマンドは図12に示すものに限定されるものではない。
なお、図12に示すステップS91ないしS98の処理は、第1の実施の形態におけるステップS1ないしS8と同様の処理であるため、説明を省略する。ただし、ステップS95において、被選択演算方法である演算方法fn(x)と格納情報120とに基づいて演算結果情報330を作成する処理は、第1の実施の形態におけるステップS5では暗号化に相当する処理であったが、第3の実施の形態では一段目の復号化に相当する処理である。
第3の実施の形態における待ち受け状態において、コマンドRnが入力されると(ステップS99においてYes)、コントローラ30は、テーブル格納領域35のテーブル352を参照し(ステップS100)、入力されたコマンドRnがテーブル352に存在するか否かを判定する(ステップS101)。すなわち、正しく定義されたコマンドRnが入力されたか否かを判定する。
入力されたコマンドRnがテーブル352に存在しない場合(ステップS101においてNo)、コントローラ30は、ホストコンピュータ10にダミーデータを出力する(ステップS102)。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
一方、入力されたコマンドRnがテーブル352に存在する場合(ステップS101においてYes)、コントローラ30は、当該コマンドRnに対応する演算方法Fn(x)が格納されている位置を示す演算方法格納領域34のアドレスをテーブル352から取得する。
次に、コントローラ30は、取得したアドレスで示される演算方法格納領域34に格納されている情報を読み出してホストコンピュータ10に出力する。このようにして、演算方法格納領域34から読み出される情報とは、すなわち、演算方法情報341に含まれている演算方法Fn(x)を表現した情報である。このように、第3の実施の形態におけるホストコンピュータ10からコマンドRnが入力されたときには、コントローラ30は、当該コマンドRnに対応する演算方法Fn(x)を被選択演算方法として選択しホストコンピュータ10に出力する(ステップS103)。
以上が第3の実施の形態におけるセキュリティメモリ3の動作である。次に、本実施の形態におけるホストコンピュータ10の動作を説明する。
図13は、第3の実施の形態におけるホストコンピュータ10の動作を示す流れ図である。なお、図13に示される各工程は、特に断らない限り、ホストコンピュータ10のCPU11が、主にプログラム26に従って動作することにより実行される工程を示す。
第3の実施の形態におけるホストコンピュータ10は、プログラム26の実行を開始すると、ステップS111を実行することによりステージnに「1」を設定して、初期ステージを開始する。その後、ステップS112ないしS114の処理を行う。ここで、ステップS112ないしS114の処理は、第1の実施の形態におけるステップS22ないしS24と同様の処理なので説明を省略する。
第3の実施の形態におけるホストコンピュータ10は、ステップS114を実行して演算結果情報330をメモリシステム1から取得すると、メモリシステム1に対してコマンドRnを発行し、演算方法Fn(x)を取得する(ステップS115)。
このように、第3の実施の形態では、ホストコンピュータ10からの取得命令(コマンドRn)に対して、メモリシステム1から出力される演算方法は演算結果情報330を作成するために使用した演算方法fn(x)ではない。すなわち、コマンドRnに対しては、演算結果情報330を必要不可欠な情報Enに復号化するために必要な演算方法Fn(x)が、演算方法fn(x)に対応する関数情報としてメモリシステム1から出力される。
演算方法Fn(x)を取得すると、ホストコンピュータ10は、ステップS114において取得した演算結果情報330と、ステップS115において取得した演算方法Fn(x)とに基づいて、評価情報122を作成する(ステップS116)。
なお、ステップS116を実行した後のホストコンピュータ10の処理は、第1の実施の形態におけるステップS30ないしS39と同様に実行することができるため、説明を省略する。
以上のように、第3の実施の形態におけるメモリシステム1も、上記実施の形態と同様の効果を得ることができる。
また、先述のように、格納情報120がメモリアレイ31以外の記憶領域に格納しておくことが可能な情報であれば、メモリアレイ31から得られた演算結果情報330の解読に失敗しても、他の記憶領域から元の格納情報120を取得するように不正にプログラム26を改ざんされるおそれがある。しかし、格納情報120を暗号化された情報としてプログラム26に記述しておくことにより、格納情報120を記憶装置12に保存しておいて、解読に失敗したときに利用しようとしても、ホストコンピュータ10は格納情報120を必要不可欠な情報Enとして使用することができない。すなわち、第3の実施の形態におけるホストコンピュータ10は、メモリアレイ31から得られる演算結果情報330の解読を確実に行う必要があり、セキュリティ機能が向上する。
<4. 第4の実施の形態>
上記実施の形態では、ホストコンピュータ10が1のコマンドRnを発行することにより、メモリシステム1から1の演算方法fn(x)(あるいは1の演算方法Fn(x))が取得された。しかし、演算方法を読み出すコマンドRnは、必ずしも演算方法と一対一に対応していなくてもよい。なお、第4の実施の形態におけるコンピュータシステムにおいて第1の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
図示は省略するが、第4の実施の形態における演算方法情報340には、第1の実施の形態と同様に、複数の演算方法f1(x),・・・,fN(x)が定義されている。そして、第4の実施の形態では、各演算方法f1(x),・・・,fN(x)を定義する情報は、いずれも複数回に分割して、順次に、セキュリティメモリ3からホストコンピュータ10に出力することが可能とされている。そして、ホストコンピュータ10は、複数回に分割して、順次に取得した各情報から、各演算方法f1(x),・・・,fN(x)を作成する。
以下では、各演算方法f1(x),・・・,fN(x)を定義する情報の分割数を分割数M(Mは2以上の自然数。)と称する。また、演算方法fn(x)をM個に分割する各情報を、セキュリティメモリ3からの出力順序を示す添え字「m(mはM以下の自然数。)」を用いて、演算方法fn1(x),・・・,fnM(x)と称する。言い換えれば、演算方法fn1(x),・・・,fnM(x)は、ホストコンピュータ10において、演算方法fn(x)を作成するために必要な情報である。
また、各演算方法fn1(x),・・・,fnM(x)を要求するためにホストコンピュータ10から入力されるコマンドとして、コマンドRn1,・・・,RnMがプログラム26内において定義されている。そして、第4の実施の形態におけるテーブル350では、コマンドRn1,,RnMは演算方法fn1(x),・・・,fnM(x)の格納アドレス(演算方法格納領域34のアドレス)とそれぞれ一対一で関連づけられている。
次に、第4の実施の形態における情報保護方法について説明する。
図14は、第4の実施の形態におけるセキュリティメモリ3の動作を示す流れ図である。セキュリティメモリ3は、第1の実施の形態と同様に、起動中のホストコンピュータ10にメモリシステム1が装着された状態で動作する。
図14に示すステップS121ないしS128は、第1の実施の形態におけるステップS1ないしS8と同様の処理であるため説明を省略する。ただし、ステップS124では、ステージSに対応する演算方法fS1(x),・・・,fSM(x)が全て演算方法格納領域34から読み出され、演算方法fS(x)が作成されることにより取得される。
第4の実施の形態における待ち受け状態において、コマンドRnmが入力されると(ステップS129においてYes)、コントローラ30は、テーブル格納領域35のテーブル350を参照し(ステップS130)、入力されたコマンドRnmがテーブル350に存在するか否かを判定する(ステップS131)。すなわち、正しく定義されたコマンドRnmが入力されたか否かを判定する。
入力されたコマンドRnmがテーブル350に存在しない場合(ステップS131においてNo)、コントローラ30は、ホストコンピュータ10にダミーデータを出力する(ステップS132)。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
一方、入力されたコマンドRnmがテーブル350に存在する場合(ステップS131においてYes)、コントローラ30は、当該コマンドRnmに対応する演算方法fnm(x)が格納されている位置を示す演算方法格納領域34のアドレスをテーブル350から取得する。そして、取得したアドレスに基づいて、コントローラ30は、演算方法格納領域34から演算方法fnm(x)を表現をした情報を読み出してホストコンピュータ10に出力する(ステップS133)。このように、第4の実施の形態では、ホストコンピュータ10からコマンドRnmが入力されたときには、コントローラ30は、当該コマンドRnmに対応する演算方法fnm(x)を被選択演算方法として選択しホストコンピュータ10に出力する。
以上が第4の実施の形態におけるセキュリティメモリ3の動作である。次に、本実施の形態におけるホストコンピュータ10の動作を説明する。
図15は、第4の実施の形態におけるホストコンピュータ10の動作を示す流れ図である。なお、図11に示される各工程は、特に断らない限り、ホストコンピュータ10のCPU11が、主にプログラム26に従って動作することにより実行される工程を示す。
第3の実施の形態におけるホストコンピュータ10は、プログラム26の実行を開始すると、ステップS140ないしS143の処理を行う。ここで、ステップS140ないしS143の処理は、第1の実施の形態におけるステップS21ないしS24と同様に実行できるため説明を省略する。
ステップS143が実行されると、第4の実施の形態におけるホストコンピュータ10は出力順序を示すmの値を「1(初期値)」にセットする(ステップS144)。
次に、ホストコンピュータ10は、コマンドRnmをメモリシステム1に対して発行し、これに対してメモリシステム1から出力される演算方法fnm(x)を取得して記憶装置12に記憶する(ステップS145)。
そして、さらに、mがMと一致しなければ(ステップS146においてNo)、演算方法fn(x)を作成するために必要な演算方法fn1(x),・・・,fnM(x)が未だすべて取得されていないと判断して、mをインクリメントして(ステップS147)、ステップS145からの処理を繰り返す。
一方、mがMと一致した場合(ステップS146においてYes)、演算方法fn(x)を作成するために必要な演算方法fn1(x),・・・,fnM(x)がすべて取得されたと判断して、取得し格納しておいた演算方法fn1(x),・・・,fnM(x)に基づいて演算方法fn(x)を作成する(ステップS148)。
ステージnにおいて取得する必要のある演算方法fn(x)が無事に取得されると、第4の実施の形態におけるホストコンピュータ10は、ステップS143において取得した演算結果情報330とステップS148において作成した演算方法fn(x)とに基づいて評価情報122を作成する(ステップS149)。
ステップS149を終了すると、第4の実施の形態におけるホストコンピュータ10は、第1の実施の形態におけるステップS30ないしS39と同様の処理を実行する(説明は省略する)。
以上のように、第4の実施の形態においても、上記実施の形態と同様の効果を得ることができる。
また、被選択演算方法が、演算方法情報340から複数回に分けて読み出されることにより、複数回の読み出しの全てに成功しない限り1の演算方法fn(x)すら取得できない。これによりセキュリティレベルが向上する。
なお、上記実施の形態では、すべての演算方法fn(x)が、M個に分割される例で説明したが、各演算方法fn(x)ごとに分割数が異なっていてもよい。
<5. 変形例>
以上、本発明の実施の形態について説明してきたが、本発明は上記実施の形態に限定されるものではなく様々な変形が可能である。
例えば、上記実施の形態では、メモリシステム1において、保護対象の情報を格納するROM2と、演算方法による演算を行うセキュリティメモリ3とが一体構造物を構成していた。しかし、例えば、ROM2のメモリアレイ21に相当する記憶媒体をCD−ROMで構成し、ROM2のコントローラ20をホストコンピュータ10に設けたCD−ROMドライブ装置とCPU11とで構成し、着脱可能な記憶媒体にはセキュリティメモリ3に相当する構成のみを搭載して構成することも可能である。
また、上記実施の形態に示した各工程は、あくまでも例示であって、同様の効果が得られるならば、各工程における処理内容や、各工程の実行順は、適宜、変更されてもよい。