(57)【特許請求の範囲】
【請求項１】
ホストコンピュータに接続されるメモリシステムであって、
保護対象の情報を格納する第１不揮発性メモリと、
前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、
演算方法を格納する第２不揮発性メモリと、
前記保護対象の情報を使用する前記ホストコンピュータからの格納情報を、前記格納情報を生成した際の前記ホストコンピュータの状態に応じて、前記第２不揮発性メモリに格納されている演算方法を用いて演算し演算結果情報を求める第２コントローラと、
を備え、
前記第２コントローラは、前記ホストコンピュータからの要求に応じて、前記演算結果情報と前記演算結果情報を作成するときに用いた演算方法に対応した関数情報とを前記ホストコンピュータに出力するメモリシステム。
【請求項２】
請求項１に記載のメモリシステムであって、
前記第２コントローラは、複数の演算方法から１の被選択演算方法を選択して演算結果情報を求めるメモリシステム。
【請求項３】
請求項１または２に記載のメモリシステムであって、
前記第２コントローラは、格納情報を生成した際の前記ホストコンピュータの状態を、前記格納情報から取得するメモリシステム。
【請求項４】
請求項３に記載のメモリシステムであって、
前記第２コントローラは、前記ホストコンピュータの状態を進行履歴情報として前記第２不揮発性メモリに格納するメモリシステム。
【請求項５】
請求項１ないし４のいずれかに記載のメモリシステムであって、
前記ホストコンピュータにおける前記保護対象の情報の進行状況に応じて、前記ホストコンピュータの状態が変化するメモリシステム。
【請求項６】
請求項１ないし５のいずれかに記載のメモリシステムであって、
前記演算方法に対応した関数情報は、前記第２不揮発性メモリから複数回に分けて読み出されるメモリシステム。
【請求項７】
請求項１ないし６のいずれかに記載のメモリシステムであって、
前記格納情報は前記ホストコンピュータにおいて前記保護対象の情報を使用するときに必要不可欠な情報であるメモリシステム。
【請求項８】
請求項１ないし７のいずれかに記載のメモリシステムであって、
前記演算結果情報が前記第２不揮発性メモリに格納されるメモリシステム。
【請求項９】
ホストコンピュータに接続されるセキュリティメモリであって、
前記ホストコンピュータの状態を反映した演算方法を格納する不揮発性メモリと、
保護対象の情報を使用する前記ホストコンピュータからの格納情報を、前記格納情報を生成した際の前記ホストコンピュータの状態に応じて、前記不揮発性メモリに格納されている演算方法を用いて演算し演算結果情報を求めるコントローラと、
を備え、
前記コントローラは、前記ホストコンピュータからの要求に応じて、前記演算結果情報と前記演算結果情報を作成するときに用いた演算方法に対応した関数情報とを前記ホストコンピュータに出力するセキュリティメモリ。
【請求項１０】
ホストコンピュータに接続されるメモリシステムの第１不揮発性メモリに格納される保護対象の情報を保護する情報保護方法であって、
前記ホストコンピュータの状態を反映した演算方法を前記メモリシステムが備える第２不揮発性メモリに、前記メモリシステムが備えるコントローラによって格納する工程と、
前記保護対象の情報を使用する前記ホストコンピュータからの格納情報を、前記格納情報を生成した際の前記ホストコンピュータの状態に応じて、前記第２不揮発性メモリに格納されている演算方法を用いて演算し演算結果情報を前記コントローラによって求める工程と、
前記ホストコンピュータからの要求に応じて、前記演算結果情報と前記演算結果情報を作成するときに用いた演算方法に対応した関数情報とを前記ホストコンピュータに前記コントローラによって出力する工程と、
を有する情報保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置（例えば、半導体メモリなど）に格納された情報が不正に複製されないように保護する技術に関する。
【背景技術】
【０００２】
従来より、ホストコンピュータに接続される記憶装置に記憶された情報を不正な複製から保護する技術が知られている。例えば、そのような技術が特許文献１に記載されている。
【０００３】
特許文献１には、ホストコンピュータと接続されるメモリシステムに、セキュリティ機能を備えたコントローラと不揮発性メモリとを設けている。そして、ホストコンピュータからのアクセスに対しては、当該コントローラがセキュリティ機能を発揮することにより、不揮発性メモリ上に格納された情報を保護する技術が記載されている。
【０００４】
しかし、特許文献１に記載されている技術をもってしても、不正な複製を完全に防止することはできない。そして、メモリシステムのコントローラにおけるセキュリティ機能が破られ、不揮発性メモリに格納された情報（保護対象の情報）を違法に複製され、配布される事態が現実に生じている。特許文献１に記載されている技術では、不揮発性メモリに格納されているプログラムにかかわらず、ホストコンピュータとメモリシステムとが協働してセキュリティ機能を提供しているため、一度、このセキュリティが破られれば、すべてのプログラムが不正に複製されることを許す事態にもなりかねない。
【０００５】
このような事態を安易に解決する手法として、コントローラが提供するセキュリティ機能を変更することが考えられる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−０４０９４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところが、特許文献１に記載された技術において、メモリシステムのコントローラにおけるセキュリティ機能を変更すると、ホストコンピュータ側にも変更が必要になるという問題があった。すなわち、ホストコンピュータがすでに多数市場に流通している現状では、メモリシステムのセキュリティ機能が破られるたびに、ホストコンピュータ側の設計変更まで行うことは、互換性の維持やコストの面で現実的ではないという問題があった。
【０００８】
本発明は、上記課題に鑑みてなされたものであり、ホストコンピュータに接続されるメモリシステムに関して、すでに流通しているホストコンピュータとの互換性を維持しつつ、安価に、当該メモリシステムに格納された情報の不正な複製を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するため、請求項１の発明は、ホストコンピュータに接続されるメモリシステムであって、保護対象の情報を格納する第１不揮発性メモリと、前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、演算方法を格納する第２不揮発性メモリと、前記保護対象の情報を使用する前記ホストコンピュータからの格納情報を、前記格納情報を生成した際の前記ホストコンピュータの状態に応じて、前記第２不揮発性メモリに格納されている演算方法を用いて演算し演算結果情報を求める第２コントローラとを備え、前記第２コントローラは、前記ホストコンピュータからの要求に応じて、前記演算結果情報と前記演算結果情報を作成するときに用いた演算方法に対応した関数情報とを前記ホストコンピュータに出力する。
【００１０】
また、請求項２の発明は、請求項１の発明に係るメモリシステムであって、前記第２コントローラは、複数の演算方法から１の被選択演算方法を選択して演算結果情報を求める。
【００１１】
また、請求項３の発明は、請求項１または２の発明に係るメモリシステムであって、前記第２コントローラは、格納情報を生成した際の前記ホストコンピュータの状態を、前記格納情報から取得する。
【００１２】
また、請求項４の発明は、請求項３の発明に係るメモリシステムであって、前記第２コントローラは、前記ホストコンピュータの状態を進行履歴情報として前記第２不揮発性メモリに格納する。
【００１３】
また、請求項５の発明は、請求項１ないし４のいずれかの発明に係るメモリシステムであって、前記ホストコンピュータにおける前記保護対象の情報の進行状況に応じて、前記ホストコンピュータの状態が変化する。
【００１４】
また、請求項６の発明は、請求項１ないし５のいずれかの発明に係るメモリシステムであって、前記演算方法に対応した関数情報は、前記第２不揮発性メモリから複数回に分けて読み出される。
【００１５】
また、請求項７の発明は、請求項１ないし６のいずれかの発明に係るメモリシステムであって、前記格納情報は前記ホストコンピュータにおいて前記保護対象の情報を使用するときに必要不可欠な情報である。
【００１６】
また、請求項８の発明は、請求項１ないし７のいずれかの発明に係るメモリシステムであって、前記演算結果情報が前記第２不揮発性メモリに格納される。
【００１７】
また、請求項９の発明は、ホストコンピュータに接続されるセキュリティメモリであって、前記ホストコンピュータの状態を反映した演算方法を格納する不揮発性メモリと、保護対象の情報を使用する前記ホストコンピュータからの格納情報を、前記格納情報を生成した際の前記ホストコンピュータの状態に応じて、前記不揮発性メモリに格納されている演算方法を用いて演算し演算結果情報を求めるコントローラとを備え、前記コントローラは、前記ホストコンピュータからの要求に応じて、前記演算結果情報と前記演算結果情報を作成するときに用いた演算方法に対応した関数情報とを前記ホストコンピュータに出力する。
【００１８】
また、請求項１０の発明は、ホストコンピュータに接続されるメモリシステムの第１不揮発性メモリに格納される保護対象の情報を保護する情報保護方法であって、前記ホストコンピュータの状態を反映した演算方法を前記メモリシステムが備える第２不揮発性メモリに、前記メモリシステムが備えるコントローラによって格納する工程と、前記保護対象の情報を使用する前記ホストコンピュータからの格納情報を、前記格納情報を生成した際の前記ホストコンピュータの状態に応じて、前記第２不揮発性メモリに格納されている演算方法を用いて演算し演算結果情報を前記コントローラによって求める工程と、前記ホストコンピュータからの要求に応じて、前記演算結果情報と前記演算結果情報を作成するときに用いた演算方法に対応した関数情報とを前記ホストコンピュータに前記コントローラによって出力する工程とを有する。
【発明の効果】
【００１９】
保護対象の情報を使用するホストコンピュータからの格納情報を、当該格納情報を生成した際のホストコンピュータの状態に応じて、演算方法を用いて演算し演算結果情報を求め、ホストコンピュータからの要求に応じて、演算結果情報と演算結果情報を作成するときに用いた演算方法に対応した関数情報とをホストコンピュータに出力する。これにより、既存のホストコンピュータの設計変更を必要とせず、安価にセキュリティレベルを向上させることができる。また、例えば、保護対象の情報ごとに変更できるので、一旦、セキュリティを破られても、容易に再構築できる。また、ホストコンピュータの状態に応じて演算方法が選択されるため、これを再現しなければ当該演算方法に対応した関数情報を読み出すことができず、演算結果情報を取得できても格納情報を再現できない。したがって、複製を作成することが一層困難となる。
【図面の簡単な説明】
【００２０】
【図１】本発明に係るメモリシステムを備えるコンピュータシステムを示す図である。
【図２】ＲＯＭのメモリアレイの記憶領域を例示する図である。
【図３】第１の実施の形態におけるメモリアレイの記憶領域と各記憶領域に格納される情報とを例示する図である。
【図４】第１の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図５】第１の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図６】第１の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図７】第２の実施の形態におけるメモリアレイの記憶領域と各記憶領域に格納される情報とを例示する図である。
【図８】第２の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図９】第２の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図１０】第２の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図１１】第３の実施の形態におけるメモリアレイの記憶領域と各記憶領域に格納される情報とを例示する図である。
【図１２】第３の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図１３】第３の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図１４】第４の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図１５】第４の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【発明を実施するための形態】
【００２１】
以下、本発明の好適な実施の形態について、添付の図面を参照しつつ、詳細に説明する。
【００２２】
＜１．  第１の実施の形態＞
図１は、本発明に係るメモリシステム１を備えるコンピュータシステムを示す図である。コンピュータシステムは、本発明に係るメモリシステム１と、一般的なコンピュータとしての機能を有するホストコンピュータ１０とを備えている。
【００２３】
メモリシステム１は、読み取り専用の記憶装置であるＲＯＭ２と、例えばユーザデータ（ユーザ格納情報）等を必要に応じてセーブすることができるように読み書き可能な記憶装置として構成されるセキュリティメモリ３とを備えている。詳細は図示しないが、本実施の形態におけるメモリシステム１は、ホストコンピュータ１０に対して着脱自在に構成されている。このようなメモリシステム１としては、例えば、メモリカードやゲームカセットが該当するがこれに限定されるものではない。
【００２４】
ＲＯＭ２は、コントローラ２０と、メモリアレイ２１とを備えている。コントローラ２０は、ホストコンピュータ１０からの要求に応じて、メモリアレイ２１に格納されている各種データを読み出してホストコンピュータ１０に出力する機能を有している。また、コントローラ２０は、ホストコンピュータ１０との間で、メモリアレイ２１に格納されたデータ（保護対象の情報）に対するセキュリティ機能を提供する。コントローラ２０が提供するセキュリティ機能としては従来より提案されている様々な手法を適宜採用できるため、以下では詳細な説明は省略する。
【００２５】
図２は、ＲＯＭ２のメモリアレイ２１の記憶領域を例示する図である。メモリアレイ２１は、複数の不揮発性の記憶素子が規則的に配列した構造を有しており、図２に示すように、複数の記憶領域に分割されている。
【００２６】
本実施の形態におけるメモリアレイ２１を構成する記憶素子は、ホストコンピュータ１０によるデータの書き込みができない素子が採用されている。したがって、ＲＯＭ２は、メモリシステム１においては、先述のように読み取り専用の記憶装置として構成されている。ただし、プログラム２６等を格納する記憶装置は必ずしも読み取り専用の記憶装置でなくてもよい。
【００２７】
図２に示すように、メモリアレイ２１の記憶領域としては、キー情報２５を格納する固有キー格納領域２２、プログラム２６を格納するプログラム格納領域２３、プログラム２６が使用するコンテンツ情報２７（画像、音声、テキスト等）を格納するコンテンツ格納領域２４が定義されている。ただし、定義される記憶領域はこれに限定されるものではなく、その他の記憶領域（例えば、上記セキュリティ機能を提供するためのデータが格納される領域等）が定義されてもよい。
【００２８】
キー情報２５は、プログラム２６を識別する固有の値であり、例えば、コントローラ２０が提供するセキュリティ機能に利用される値などが想定される。本実施の形態では、キー情報２５は、例えば商品コードのように、プログラム２６のタイトルごとに異なる値を用いる。すなわち、プログラム２６がゲームプログラムであれば、キー情報２５はゲームのタイトルに固有であり、同じタイトルのゲームプログラムでは同じ値となる。ただし、例えば、製造番号のように、同じタイトルのプログラム２６であっても、個々に異なる値をキー情報２５として採用してもよい。
【００２９】
プログラム２６は、保護対象の情報であり、ホストコンピュータ１０によって実行される。そして、プログラム２６には、ホストコンピュータ１０によって実行されるときの当該プログラム２６の進行状況がマーカーコード等により定義されている。以下の説明では、プログラム２６の進行状況として、当該プログラム２６には、順次に、Ｎ個のステージ（ステージ１，・・・，Ｎ）が定義されているものとする（Ｎは２以上の自然数）。すなわち、ホストコンピュータ１０は、プログラム２６を実行中において、実行中のプログラム２６の進行状況をステージｎ（ｎは１からＮまでの自然数）として取得することができる。
【００３０】
図１に戻って、セキュリティメモリ３は、コントローラ３０と、メモリアレイ３１とを備えている。コントローラ３０は、ホストコンピュータ１０からの要求に応じて、メモリアレイ３１に格納されている各種データを読み出してホストコンピュータ１０に出力する機能と、メモリアレイ３１に各種データを格納する機能とを有している。本実施の形態におけるコントローラ３０の機能および動作については、後述する。
【００３１】
図３は、第１の実施の形態におけるメモリアレイ３１の記憶領域と各記憶領域に格納される情報とを例示する図である。メモリアレイ３１は、複数の不揮発性の記憶素子から構成されており、図３に示すように複数の記憶領域に分割されている。
【００３２】
本実施の形態におけるメモリアレイ３１の記憶領域としては、第１データセーブ領域３２、第２データセーブ領域３３、演算方法格納領域３４、および、テーブル格納領域３５が定義されている。ただし、定義される記憶領域はこれに限定されるものではなく、必要に応じて、その他の記憶領域が定義されてもよい。
【００３３】
メモリアレイ３１を構成する記憶素子は、ホストコンピュータ１０によるデータの読み出しのみではなく、ホストコンピュータ１０による書き込みも可能な素子が採用される。したがって、セキュリティメモリ３は、メモリシステム１において、先述のように読み書き可能な記憶装置として構成されている。ただし、セキュリティメモリ３が備える記憶装置は、そのすべてが読み書き可能である必要はない。少なくとも第１データセーブ領域３２および第２データセーブ領域３３が読み書き可能に構成されていれば、例えば、演算方法格納領域３４およびテーブル格納領域３５は、読み取り専用であってもよい。しかし、セキュリティ機能を強化させる意味では、セキュリティメモリ３がワンチップで構成されていることが好ましい。
【００３４】
第１データセーブ領域３２は、ユーザ格納情報１２１を格納する記憶領域であって、ホストコンピュータ１０（ユーザ）によって自由にアクセスすることができる領域である。なお、ここにいう、「自由にアクセスすることができる」とは、特別なセキュリティ機能によらずにアクセスすることができるという意味であるが、もちろん何らかのセキュリティ機能が設けられていてもよい。
【００３５】
ユーザ格納情報１２１は、主には、ユーザによって作成される情報であり、プログラム２６を途中から再開させるための情報（ゲームを途中で中断したときの情報等）や、ユーザが取得したコンテンツ情報（画像、音声、文章等）等である。ユーザ格納情報１２１は、ホストコンピュータ１０において作成され、コントローラ３０によって第１データセーブ領域３２に格納される。すなわち、ユーザ格納情報１２１を格納することにより、セキュリティメモリ３は、データバックアップ用の記憶装置としても兼用されている。
【００３６】
第２データセーブ領域３３は、演算結果情報３３０を格納する記憶領域であって、第１データセーブ領域３２と同様にホストコンピュータ１０（ユーザ）によって自由にアクセスすることができる領域である。
【００３７】
演算結果情報３３０は、ホストコンピュータ１０からの格納情報１２０（図１）を、演算方法情報３４０から選択される１の被選択演算方法を用いて演算して得られる情報である。すなわち、演算結果情報３３０は、格納情報１２０を被選択演算方法により変換した情報である。コントローラ３０は、格納情報１２０と被選択演算方法とに基づいて演算結果情報３３０を作成し、第２データセーブ領域３３に格納する。
【００３８】
演算方法格納領域３４は、演算方法情報３４０を格納する領域である。演算方法情報３４０には、ステージｎ（先述のようにプログラム２６の進行状況を示す。）ごとに設定された複数の演算方法を定義する情報が含まれている。以下の説明では、ステージｎに対応する演算方法を「演算方法ｆn(x)」と称する。すなわち、演算方法情報３４０には、ステージｎと、ステージｎに対応する演算方法ｆn(x)とが互いに関連づけられている。
【００３９】
演算方法ｆn(x)としては、例えば、「x」のチェックサムの値やハッシュ値を演算するものが考えられるが、もちろんこれらに限定されるものではない。なお、「ｘ」は、ホストコンピュータ１０から入力される格納情報１２０の値である。
【００４０】
テーブル格納領域３５は、テーブル３５０を格納する記憶領域である。テーブル３５０とは、演算方法情報３４０に格納されている演算方法ｆn(x)と、演算方法ｆn(x)を読み出すためのコマンドとを関連づける情報である。より詳細には、テーブル３５０には、演算方法ｆn(x)の演算方法格納領域３４における格納アドレスと、演算方法ｆn(x)を読み出すためのコマンドとが関連づけられている。
【００４１】
以下の説明では、演算方法ｆn(x)を読み出すためのコマンドを「コマンドＲn」と称する。詳細は後述するが、コントローラ３０は、ホストコンピュータ１０からコマンドＲnを受け取ると、テーブル３５０を参照して、受け取ったコマンドＲnに応じた演算方法ｆn(x)を被選択演算方法として選択し（受け取ったコマンドＲnに対応する演算方法ｆn(x)の格納アドレスを取得し）、当該被選択演算方法を演算方法情報３４０から読み出してホストコンピュータ１０に出力する。すなわち、本実施の形態では、出力される「演算方法に対応した関数情報」とは、演算方法ｆn(x)であり、演算方法そのものである。
【００４２】
なお、ホストコンピュータ１０によりコマンドＲnが発行されたときに選択される被選択演算方法は、演算方法ｆn(x)の逆関数ｆ-1n(x)であってもよい。すなわち、演算方法情報３４０は、演算方法ｆn(x)と、逆関数ｆ-1n(x)とを関連づけて格納する情報であってもよい。この場合、コントローラ３０が演算結果情報３３０を作成するときには演算方法情報３４０から演算方法ｆn(x)が取得されて演算が実行されるが、コマンドＲnがコントローラ３０に対して発行されたときには演算方法情報３４０から逆関数ｆ-1n(x)が取得されてホストコンピュータ１０に出力される。このように、出力される「演算方法に対応した関数情報」とは、演算方法そのものではなくてもよい。
【００４３】
本実施の形態では、コマンドＲnは、プログラム２６内に記述されており、ホストコンピュータ１０は、プログラム２６の進行状況（ステージ１，・・・，Ｎ）に対応するコマンドＲ1，・・・，ＲNを取得するものとして説明する。すなわち、コマンドＲnはホストコンピュータ１０におけるプログラム２６の進行状況に応じて選択されるため、選択されたコマンドＲnはホストコンピュータ１０の状態を反映している。
【００４４】
図１に戻って、ホストコンピュータ１０は、各種のデータの演算を行うとともにホストコンピュータ１０が備える各種ハードウェアを制御するＣＰＵ１１と、各種のデータを記憶する記憶装置１２とを備えている。これにより、ホストコンピュータ１０は、一般的なコンピュータとしての構成および機能を備えている。また、ホストコンピュータ１０は、図示しないスロットを備えており、当該スロットにメモリシステム１を装着することが可能である。
【００４５】
ホストコンピュータ１０のＣＰＵ１１は、メモリシステム１のメモリアレイ２１に格納されているデータをＲＯＭ２から読み出して各種の演算を行う。特に、ＣＰＵ１１は、プログラム格納領域２３に格納されているプログラム２６をコントローラ２０を介して記憶装置１２にロードしつつ、実行する機能を有している。また、ＣＰＵ１１は、プログラム２６を実行しつつ、実行中のプログラム２６の進行状況（進行中のステージ）を把握し、必要であれば、記憶装置１２に進行状況（ステージ識別子）を格納する。
【００４６】
さらに、ＣＰＵ１１は、コントローラ３０を介してメモリアレイ３１にアクセスする機能も有している。
【００４７】
例えば、ＣＰＵ１１は、実行中のプログラム２６の進行状況（ステージｎ）に応じて、メモリシステム１に対してコマンドＲnを発行する。これによってホストコンピュータ１０は、セキュリティメモリ３（コントローラ３０）から演算方法ｆn(x)を取得することができる。
【００４８】
また、ＣＰＵ１１は、取得した演算方法ｆn(x)に基づいて、当該演算方法ｆn(x)の逆関数ｆ-1n(x)を求め、セキュリティメモリ３から読み出した演算結果情報３３０を当該逆関数ｆ-1n(x)により演算し評価情報１２２を求める。そして、このようにして得られた評価情報１２２を評価して、正しい演算が行われたか否かを判定し、プログラム２６を進行させる。なお、詳細は後述する。
【００４９】
記憶装置１２は、ＣＰＵ１１の一時的なワーキングエリアとして使用されるＲＡＭ（一般的には、高速アクセス可能な揮発性の記憶装置が採用される。）や、ホストコンピュータ１０の起動プログラム（図示せず）等を格納しておく読み取り専用のＲＯＭなどのハードウェアから構成されている。また、図１には示していないが、セキュリティ機能強化のためには、記憶装置１２の一部または全部がＣＰＵ１１の内部にあってもよい。
【００５０】
特に、記憶装置１２には、ロードされたプログラム２６の一部や格納情報１２０、ユーザ格納情報１２１および評価情報１２２が適宜格納される。
【００５１】
本実施の形態におけるメモリシステム１では、ホストコンピュータ１０が当該プログラム２６を進行させる上で必要不可欠な情報がステージｎごとに定義されている。以下の説明では、ステージｎに対応する必要不可欠な情報を「Ｅn」と称する。すなわち、プログラム２６には、ステージ１，・・・，Ｎに対応して、複数の必要不可欠な情報Ｅ1，・・・，ＥNが含まれている。
【００５２】
本実施の形態では、ホストコンピュータ１０がステージｎの状態であるときに作成される格納情報１２０は、当該ステージｎにおける必要不可欠な情報Ｅnとする。すなわち、格納情報１２０は、プログラム２６の進行状況に応じて変化する情報であり、ホストコンピュータ１０の状態を反映した情報である。
【００５３】
必要不可欠な情報Ｅnとしては、例えば、プログラム２６を進行させる上で必要となるキャラクタデータまたはその一部や、ＲＯＭ２内に暗号化されて格納されている情報の復号キーに関する情報等が想定される。
【００５４】
以下では、必要不可欠な情報Ｅnは、プログラム２６を実行するときにおいて、ステージｎを進行させるためだけに必要な情報として説明する。すなわち、本実施の形態では、ステージｎを進行させるときにおいて、ホストコンピュータ１０は、必要不可欠な情報Ｅnをメモリシステム１から取得する必要がある一方で、直前までのステージ１，・・・，（ｎ−１）において取得した必要不可欠な情報Ｅ1，・・・，Ｅ(n-1)を記憶装置１２等に保持しておく必要はない。
【００５５】
なお、格納情報１２０は、例えば、ホストコンピュータ１０の記憶装置１２またはＲＯＭ２のメモリアレイ２１内の特定のアドレスに格納されている他の値などが採用されてもよいし、プログラム２６の進行中において固定の値（例えば、キー情報２５）であってもよい。ただし、格納情報１２０は、セキュリティ向上のためには、本実施の形態が採用するようにホストコンピュータ１０の状態を反映した情報であることが好ましい。また、本実施の形態における格納情報１２０には、作成されたときのステージｎを示す情報も含まれている。
【００５６】
また、詳細は図示しないが、ホストコンピュータ１０は、ユーザに対して情報を出力する出力装置（ディスプレイやＬＥＤ、スピーカ、プリンタ等）、ユーザが情報を入力するために操作する入力装置（キーボードやボタン、コントローラ、マイク、タッチパネル等）などのハードウェアを適宜備えていてもよい。
【００５７】
以上が、メモリシステム１を含むコンピュータシステムの構成および機能の説明である。次に、コンピュータシステムの動作を説明しつつ、本実施の形態における情報保護方法について説明する。
【００５８】
図４は、第１の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。セキュリティメモリ３は、起動中のホストコンピュータ１０にメモリシステム１が装着された状態で動作する。なお、以下において、ＲＯＭ２のコントローラ２０の動作については、従来の技術を適用することが可能であるため、適宜説明を省略する。
【００５９】
メモリシステム１が動作中において、セキュリティメモリ３のコントローラ３０は、ホストコンピュータ１０からの各種コマンドを受け付けることが可能な状態となっている（ステップＳ１，Ｓ７，Ｓ９）。以下、コントローラ３０がホストコンピュータ１０からのコマンドを受け付けることが可能な状態を「待ち受け状態」と称する。ただし、コントローラ３０が受け付けるコマンドは図４に示すものに限定されるものではない。
【００６０】
待ち受け状態において、ホストコンピュータ１０からセーブコマンドが入力されると（ステップＳ１においてＹｅｓ）、コントローラ３０は、セーブする情報が格納情報１２０か否かを判定する（ステップＳ２）。
【００６１】
先述のように、本実施の形態におけるメモリシステム１（セキュリティメモリ３）にセーブされる情報としてコントローラ３０に入力される情報は、格納情報１２０とユーザ格納情報１２１とがある。コントローラ３０は、セーブコマンドとともに入力されるアドレス（メモリアレイ３１における格納アドレス）に基づいて、当該格納アドレスが第１データセーブ領域３２のアドレスであれば、セーブされる情報はユーザ格納情報１２１であると判定する。一方、当該格納アドレスが第２データセーブ領域３３のアドレスであれば、セーブされる情報は格納情報１２０であると判定する。
【００６２】
セーブするデータがユーザ格納情報１２１である場合（ステップＳ２においてＮｏ）、コントローラ３０は、ユーザ格納情報１２１をメモリアレイ３１の第１データセーブ領域３２に格納する（ステップＳ６）。すなわち、本実施の形態におけるコントローラ３０は、ユーザ格納情報１２１については、そのままメモリアレイ３１に書き込む。
【００６３】
セーブするデータが格納情報１２０である場合（ステップＳ２においてＹｅｓ）、コントローラ３０は、格納情報１２０からステージＳ（当該格納情報１２０が作成されたときのステージを示す。）を取得する（ステップＳ３）。このように、本実施の形態におけるコントローラ３０は、格納情報１２０を生成した際のホストコンピュータ１０の状態を、ホストコンピュータ１０から通知される格納情報１２０から取得する。
【００６４】
次に、コントローラ３０は、演算方法情報３４０に含まれる複数の演算方法ｆ1(x)，・・・，ｆN(x)から、ステージＳに対応する演算方法ｆS(x)を１の被選択演算方法として選択し（ステップＳ４）、取得する。そして、コントローラ３０は、格納情報１２０と、取得した演算方法ｆS(x)により、演算結果情報３３０を作成し（ステップＳ５）、第２データセーブ領域３３にセーブする（ステップＳ６）。
【００６５】
このようにして、ホストコンピュータ１０がステージＳにおいて作成した格納情報１２０は、セキュリティメモリ３において、ステージＳに対応する演算方法ｆS(x)を用いて演算結果情報３３０に変換されてからメモリアレイ３１に格納される。
【００６６】
待ち受け状態において、ロードコマンドが入力されると（ステップＳ７においてＹｅｓ）、コントローラ３０は、メモリアレイ３１の第１データセーブ領域３２または第２データセーブ領域３３に格納されているユーザ格納情報１２１または演算結果情報３３０をロードする（ステップＳ８）。より詳細には、ロードコマンドとともに入力されるアドレス（第１データセーブ領域３２または第２データセーブ領域３３のアドレス）により指定されるデータ（ユーザ格納情報１２１または演算結果情報３３０）をメモリアレイ３１から読み出し、ホストコンピュータ１０に出力する。
【００６７】
待ち受け状態において、コマンドＲnが入力されると（ステップＳ９においてＹｅｓ）、コントローラ３０は、テーブル格納領域３５のテーブル３５０を参照し（ステップＳ１０）、入力されたコマンドＲnがテーブル３５０に存在するか否かを判定する（ステップＳ１１）。すなわち、正しく定義されたコマンドＲnが入力されたか否かを判定する。
【００６８】
入力されたコマンドＲnがテーブル３５０に存在しない場合（ステップＳ１１においてＮｏ）、コントローラ３０は、ホストコンピュータ１０にダミーデータを出力する（ステップＳ１２）。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
【００６９】
一方、入力されたコマンドＲnがテーブル３５０に存在する場合（ステップＳ１１においてＹｅｓ）、コントローラ３０は、当該コマンドＲnに対応する演算方法ｆn(x)が格納されている位置を示す演算方法格納領域３４のアドレスをテーブル３５０から取得する。
【００７０】
次に、コントローラ３０は、取得したアドレスで示される演算方法格納領域３４に格納されている情報を読み出してホストコンピュータ１０に出力する。このようにして、演算方法格納領域３４から読み出される情報とは、すなわち、演算方法情報３４０に含まれている演算方法ｆn(x)を表現した情報である。このように、ホストコンピュータ１０からコマンドＲnが入力されたときには、コントローラ３０は、当該コマンドＲnに対応する演算方法ｆn(x)を被選択演算方法として選択しホストコンピュータ１０に出力する（ステップＳ１３）。
【００７１】
先述のように、コマンドＲnはステージｎ（ホストコンピュータ１０の状態を反映している。）に応じて選択されるため、コマンドＲnはコマンドＲnが出力されたときのホストコンピュータ１０の状態を反映した情報である。そして、コントローラ３０がコマンドＲnに応じて複数の演算方法ｆ1(x)，・・・，ｆN(x)から演算方法ｆn(x)を選択することは、すなわちコントローラ３０がホストコンピュータ１０からの要求があったときのホストコンピュータ１０の状態に応じて演算方法情報３４０から１の演算方法ｆn(x)を被選択演算方法として選択することになる。
【００７２】
このように構成することにより、不正に演算方法ｆn(x)を読みだそうと企図する者は、刻々と変化する正常なホストコンピュータ１０の状態をも再現しなければ演算方法ｆn(x)を読み出すことができず、セキュリティレベルが向上する。
【００７３】
以上がセキュリティメモリ３の動作である。次に、ホストコンピュータ１０の動作を説明する。
【００７４】
図５および図６は、第１の実施の形態におけるホストコンピュータ１０の動作を示す流れ図である。なお、以下では、ホストコンピュータ１０には、すでにメモリシステム１が装着されており、コントローラ３０は待ち受け状態にあるものとして説明する。また、図５および図６に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１が、主にプログラム２６に従って動作することにより実行される工程を示す。
【００７５】
ホストコンピュータ１０は、プログラム２６の実行を開始すると、所定の初期設定を実行した後、プログラム２６の進行状況を示すステージｎに「１（初期ステージ）」をセットする（ステップＳ２１）。これにより、ホストコンピュータ１０において実行中のプログラム２６の進行状況がステージ１に移行し、ステージ１が開始される。すなわち、ホストコンピュータ１０の状態は、ステージ１が進行している状態となる。
【００７６】
次に、ホストコンピュータ１０は、ステージｎにおける必要不可欠な情報Ｅnをコントローラ２０（ＲＯＭ２）から取得して格納情報１２０を作成する（ステップＳ２２）。このときホストコンピュータ１０は、取得した必要不可欠な情報Ｅnに、そのときのステージｎの値（このときのホストコンピュータ１０の状態を示す値。）をステージＳとして付加して格納情報１２０を作成する。
【００７７】
格納情報１２０を作成すると、ホストコンピュータ１０は、作成した格納情報１２０を第２データセーブ領域３３に格納するように、当該格納情報１２０をメモリシステム１に向けて出力する。すなわち、セーブコマンドと、第２データセーブ領域３３の格納アドレスと、格納情報１２０とをコントローラ３０に出力する（ステップＳ２３）。
【００７８】
すでに説明したように、セーブコマンドと、第２データセーブ領域３３の格納アドレスと、格納情報１２０とが入力されると、コントローラ３０は、格納情報１２０を演算方法ｆn(x)により演算結果情報３３０に変換して、メモリアレイ３１（第２データセーブ領域３３）に格納する。
【００７９】
なお、ステップＳ２３により格納情報１２０を出力した後、ホストコンピュータ１０が記憶装置１２から格納情報１２０を削除するようにプログラム２６に記述しておくことが好ましい。すなわち、格納情報１２０をメモリシステム１に格納した状態では、ホストコンピュータ１０が必要不可欠な情報Ｅnを保持していない状態となるように構成しておくことがセキュリティ強化のためには好ましい。
【００８０】
格納情報１２０がメモリシステム１に格納されると、ホストコンピュータ１０は、演算結果情報３３０をメモリシステム１から読み出して取得する（ステップＳ２４）。具体的には、ホストコンピュータ１０は、ロードコマンドと、格納情報１２０を出力したときの格納アドレスとをメモリシステム１に向けて出力する。これに応じて、コントローラ３０が演算結果情報３３０を当該格納アドレス（第２データセーブ領域３３のアドレス）から読み出してホストコンピュータ１０に向けて出力する。このようにして、ホストコンピュータ１０は、演算結果情報３３０を取得する。
【００８１】
すなわち、ホストコンピュータ１０は、ステップＳ２３により格納情報１２０をメモリシステム１にセーブした後、すぐにステップＳ２４により格納情報１２０が変換された演算結果情報３３０をメモリシステム１からロードするのである。
【００８２】
演算結果情報３３０は、通常のロードコマンドで読み出せる情報であるため、外部のコンピュータ（ホストコンピュータ１０に限られない。保護対象の情報を不正に複製しようとする者が使用するコンピュータを含む。）は比較的容易にメモリアレイ３１から取得できる。しかし、ステップＳ２４で得られた演算結果情報３３０は、演算方法ｆn(x)により変換されており、そのままではホストコンピュータ１０は演算結果情報３３０を必要不可欠な情報Ｅnとして使用することはできない。
【００８３】
したがって、演算結果情報３３０を取得すると、ホストコンピュータ１０は、メモリシステム１（コントローラ３０）に対して、コマンドＲnを発行する。これにより、メモリシステム１から演算方法ｆn(x)（被選択演算方法）が取得される（ステップＳ２５）。なお、先述のように、ステージｎにおいて使用するコマンドＲnは、ホストコンピュータ１０がＲＯＭ２のメモリアレイ２１から取得する。
【００８４】
演算方法ｆn(x)が取得されると、ホストコンピュータ１０は、取得した演算方法ｆn(x)に基づいて逆関数ｆ-1n(x)を求める。そして、求めた逆関数ｆ-1n(x)により演算結果情報３３０を演算し、評価情報１２２を作成する（ステップＳ２６）。すなわち、ステップＳ２６により、演算結果情報３３０が解読され、元の格納情報１２０に復号化され評価情報１２２となる。
【００８５】
本実施の形態では、ステージｎにおいて作成された格納情報１２０は、当該ステージｎを実行するために必要な情報（必要不可欠な情報Ｅn）を含んでいる。したがって、正常に評価情報１２２が作成（正常に元の格納情報１２０が復元）されていれば、ホストコンピュータ１０は、必要不可欠な情報Ｅnを取得できていることになり、ステップＳ２６の後、ステージｎを進行させることに何ら支障はない。一方、何らかの理由で、正常な評価情報１２２が作成されなければ、その後、ステージｎを進行させることはできなくなる。
【００８６】
すなわち、本実施の形態では、評価情報１２２が正常であるか否かをホストコンピュータ１０が改めて判定することはしないが、ステージｎが進行できるか否かによって間接的に評価情報１２２が評価されることになる。なお、元の格納情報１２０を記憶装置１２に保持しておき、評価情報１２２と比較して評価するように構成してもよい。
【００８７】
評価情報１２２を作成し必要不可欠な情報Ｅnを取得すると、ホストコンピュータ１０は、プログラム２６のステージｎを進行させつつ（ステップＳ３０）、様々な状態を監視する状態となる（ステップＳ３１，Ｓ３４，Ｓ３６，Ｓ３９）。ただし、ホストコンピュータ１０が監視する状態は、図６に示される状態に限定されるものではない。以下、ホストコンピュータ１０が様々な状態を監視している状態を「監視状態」と称する。
【００８８】
監視状態において、データロード（メモリアレイ３１の第１データセーブ領域３２に格納されているユーザ格納情報１２１に対する読み出し。）が指示されると（ステップＳ３１においてＹｅｓ）、ホストコンピュータ１０はメモリシステム１のコントローラ３０に対して、ロードコマンドを出力する。ホストコンピュータ１０からロードコマンドを受け取ると、コントローラ３０は、先述のように、データロードを行い、ホストコンピュータ１０に対してユーザ格納情報１２１を出力する。これにより、ホストコンピュータ１０は、ユーザ格納情報１２１を取得する（ステップＳ３２）。
【００８９】
ユーザ格納情報１２１を取得すると、ホストコンピュータ１０は、取得したユーザ格納情報１２１に含まれる再開させるステージＳに関する情報に基づいて、ｎにＳをセットする（ステップＳ３３）。これにより、プログラム２６の進行状況は、データロード前のステージから再開させるステージ（すなわちステージＳ）に移行する。ステージＳが再開されると、ロードしたユーザ格納情報１２１に従ってプログラム２６を進行させるために、ホストコンピュータ１０はステップＳ３０の処理に戻る。
【００９０】
本実施の形態では、先述のように、必要不可欠な情報Ｅnは、ステージｎを進行させるためにのみ必要な情報である。しかし、このような情報を必要不可欠な情報Ｅnとして定義した場合であっても、ユーザ格納情報１２１を取得しステージＳからプログラム２６を再開した場合においても、再開時点からステージＳを終了するまでに、必要不可欠な情報ＥＳを使用しなければならなくなる場合も起こりうる。
【００９１】
例えば、必要不可欠な情報ＥSがステージＳにのみ登場するキャラクタデータの一部であって、再開時点からステージＳが終了するまでに、そのキャラクタが登場するならば、前記の問題が発生する。このような場合には、ステージＳに関する情報とともに、当該ステージＳを開始したときに取得した必要不可欠な情報ＥSもユーザ格納情報１２１に含めてセーブし、ロードしたユーザ格納情報１２１から必要不可欠な情報ＥSを取得するように構成すればよい。あるいは、ユーザ格納情報１２１による再開が行われた場合には、必要不可欠な情報ＥSを、格納情報１２０を作成する場合と同様に、ＲＯＭ２から再度取得してもよい。
【００９２】
監視状態において、データセーブが指示されると（ステップＳ３４においてＹｅｓ）、ホストコンピュータ１０はメモリシステム１のコントローラ３０に対して、セーブコマンドとともに、ユーザ格納情報１２１（セーブ時のステージｎに関する情報を含む。）を出力する（ステップＳ３５）。これにより、コントローラ３０は、先述のように、データのセーブを行う。なお、ホストコンピュータ１０に対するデータセーブの指示は、ユーザからされてもよいし、オートセーブのように、プログラム２６によって実行タイミングが予め決められているものであってもよい。
【００９３】
監視状態において、プログラム２６が進行しステージｎが終了すると（ステップＳ３６においてＹｅｓ）、ホストコンピュータ１０は、現在のステージｎが最終ステージＮであるか否かを判定する（ステップＳ３７）。
【００９４】
そして、現在のステージｎが最終ステージＮである場合、プログラム２６が最後まで進行したと判断し、プログラム２６を終了する。一方、現在のステージｎが最終ステージＮでない場合、ステージｎをインクリメントして（ステップＳ３８）、次のステージを開始し、ステップＳ２２の処理に戻る。
【００９５】
監視状態において、終了が指示されると（ステップＳ３９においてＹｅｓ）、ホストコンピュータ１０は、プログラム２６の実行を終了する。なお、詳細は省略するが、終了が指示された場合は、データセーブを行うか否かをユーザに対して確認することが好ましい。
【００９６】
以上が、第１の実施の形態における情報保護方法の説明である。次に、本実施の形態における効果について検証する。
【００９７】
メモリシステム１では、保護の対象となる情報は、ＲＯＭ２のメモリアレイ２１に格納されている。プログラム２６を不正に複製しようと企図する者（以下、「不正な複製者」と称する。）は、ＲＯＭ２のセキュリティ機能を破ってメモリアレイ２１に格納されている情報を複製する。しかし、デッドコピーされたプログラム２６を実行すると、格納情報１２０（必要不可欠な情報Ｅn）をメモリ（セキュリティメモリ３に相当する記憶装置）に格納されてしまい、メモリから読み出された情報にはステップＳ２６により演算が施される（評価情報１２２に変換される）。したがって、不正な複製者は、複製したプログラム２６を解析して、このような処理を取り除くためのプログラム２６の改ざんを行うか、あるいは、セキュリティメモリ３をも忠実に再現する必要がある。
【００９８】
プログラム２６の改ざんは、ステージ１，・・・，Ｎまでのすべての該当箇所を特定して、改ざんしなければならず、困難である。また、セキュリティメモリ３を再現するためには、セキュリティメモリ３のコントローラ３０が提供するセキュリティ機能をも看破し、メモリアレイ３１に格納されている情報をも全て読み出して複製する必要がある。
【００９９】
ここで、コントローラ３０を介して、メモリアレイ３１から全ての演算方法ｆ1(x)，・・・，ｆN(x)を読み出すためには、外部のコンピュータ（ホストコンピュータ１０に限られない。例えば、不正な複製者の使用するコンピュータも含む。）は、全てのコマンドＲ1，・・・，ＲNを特定して１つずつコントローラ３０に出力してセキュリティメモリ３から読み出す必要がある。
【０１００】
また、先述のように、全てのコマンドＲ1，・・・，ＲNは、ホストコンピュータ１０の状態を反映した情報とされているため、不正な複製者は、特定した全てのコマンドＲ1，・・・，ＲNとを使用するに際しても、正常なホストコンピュータ１０の状態をも再現しなければならない。
【０１０１】
さらに、全ての演算方法ｆ1(x)，・・・，ｆN(x)および全てのコマンドＲ1，・・・，ＲN、あるいは、プログラム２６におけるマーカーコードの位置や数は、正規のプログラマ（プログラム２６の提供者）がプログラム２６に応じて書き換えるだけで、容易に変更でき、ホストコンピュータ１０における変更を要しない。したがって、例えば、ゲームタイトルごとや改訂版ごとに頻繁に変更でき、不正な複製者は、その度に上記の解析作業を行わなければならず、違法な複製品（海賊版）を製造するまでに一定以上の時間を要することとなる。特に、プログラム２６がゲームソフトウェアなどである場合、発売開始直後から海賊版が流通すると正規版の売れ行きに大きな影響がでてしまうという特性がある。したがって、このような市場の製品においては、例え完全に海賊版の製造を防止できなくとも、発売開始から一定期間でも海賊版の出現を遅らせることができるならばその効果は大きいといえる。
【０１０２】
以上のように、第１の実施の形態におけるメモリシステム１は、ホストコンピュータ１０に接続され、プログラム２６を格納するメモリアレイ２１と、メモリアレイ２１に対するアクセスを制御するコントローラ２０と、演算方法を格納するメモリアレイ３１と、プログラム２６を使用するホストコンピュータ１０からの格納情報１２０を、当該格納情報１２０を生成した際のホストコンピュータ１０の状態に応じて、メモリアレイ３１に格納されている演算方法ｆn(x)を用いて演算し演算結果情報３３０を求めるコントローラ３０とを備え、コントローラ３０は、ホストコンピュータ１０からの要求に応じて、演算結果情報３３０と演算結果情報３３０を作成するときに用いた演算方法ｆn(x)に対応した関数情報（本実施の形態では演算方法ｆn(x)）とをホストコンピュータ１０に出力する。これにより、既存のホストコンピュータ１０の設計変更を必要とせず、安価にセキュリティレベルを向上させることができる。また、例えば、プログラム２６ごとに変更できるので、一旦、セキュリティを破られても、容易に再構築できる。また、ホストコンピュータ１０の状態に応じて演算方法ｆn(x)が選択されるため、これを再現しなければ演算結果情報３３０を取得できても格納情報１２０を再現できない。したがって、複製を作成することが一層困難となる。
【０１０３】
また、コントローラ３０は、格納情報１２０を生成した際のホストコンピュータ１０の状態を、当該格納情報１２０から取得することにより、状態を通知するためのコマンド等を別途必要としない。
【０１０４】
また、ホストコンピュータ１０におけるプログラム２６の進行状況に応じて、ホストコンピュータ１０の状態が変化する。これにより、プログラム２６の進行状況にリンクさせたコマンドＲnを発行しなければ、格納情報１２０を再現することが困難となる。これによりセキュリティレベルが向上する。
【０１０５】
また、格納情報１２０はホストコンピュータ１０においてプログラム２６を使用するときに必要不可欠な情報であることにより、評価情報１２２に対する評価を簡略化できる。すなわち、正しい評価情報１２２が作成されなければプログラム２６が正常に動作しないため、正しい評価情報１２２が作成されたか否かを判定する必要がない。
【０１０６】
また、演算結果情報３３０がメモリアレイ３１に格納されることにより、設計の自由度が向上する。
【０１０７】
なお、ホストコンピュータ１０は第１データセーブ領域３２および第２データセーブ領域３３に対して自由にアクセス可能であると説明したが、これらの領域に対するホストコンピュータ１０からのアクセスに対して、何らかのセキュリティ機能を設けてもよい。以下の実施の形態においても同様である。
【０１０８】
また、第１の実施の形態では、演算方法情報３４０において複数の演算方法ｆn(x)が定義されていたが、定義される演算方法は１つであってもよい。この場合でも、セキュリティメモリ３にセキュリティ機能が追加されているため、従来の技術に比べればセキュリティレベルは向上する。そして、演算方法情報３４０において１の演算方法のみを定義する場合であっても、既存のホストコンピュータ１０に対する設計変更は不要であるとともに、保護対象の情報に応じて容易に変更することも可能であるという効果も得られる。
【０１０９】
また、図２および図３に示した各記憶領域のそれぞれは、メモリアレイ２１，３１において連続したアドレスで構成されているように示している。しかし、これらの領域は、いずれも不連続なアドレスにより構成されていてもよい。以下の実施の形態においても同様である。
【０１１０】
また、第１の実施の形態では、演算結果情報３３０には、格納情報１２０に含まれていたステージＳに関する情報も含められると説明した。しかし、格納情報１２０に含まれるステージＳに関する情報は、コントローラ３０が演算方法ｆn(x)を選択するために参照した後は破棄し、演算結果情報３３０に含めないように構成してもよい。
【０１１１】
また、格納情報１２０の所定の一部分のみを演算方法ｆn(x)によって演算し、残りの部分と結合して演算結果情報３３０としてもよい。
【０１１２】
また、演算結果情報３３０は、メモリアレイ３１に格納されると説明したが、コントローラ３０は、求めた演算結果情報３３０をメモリアレイ３１に格納せず、演算後直ちに、ホストコンピュータ１０に出力してもよい。この場合、メモリアレイ３１に演算結果情報３３０を格納する領域（第２データセーブ領域３３）を設ける必要がなくなる。
【０１１３】
＜２．  第２の実施の形態＞
第１の実施の形態では、コントローラ３０が格納情報１２０とユーザ格納情報１２１とを区別して、格納情報１２０については演算方法ｆn(x)による変換を行ってから格納する一方で、ユーザ格納情報１２１についてはこのような変換を行わずに格納するように構成していた。しかし、ユーザ格納情報１２１についても演算方法ｆn(x)による変換を行ってから格納するように構成することもできる。
【０１１４】
図７は、第２の実施の形態におけるメモリアレイ３１の記憶領域と各記憶領域に格納される情報とを例示する図である。なお、第２の実施の形態におけるコンピュータシステムにおいて第１の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
【０１１５】
図７と図３とを比較すれば明らかなように、第２の実施の形態におけるメモリシステム１は、セキュリティメモリ３のメモリアレイ３１に設けられる記憶領域が第１の実施の形態におけるメモリシステム１と異なっている。具体的には、第２の実施の形態におけるメモリアレイ３１には、第１データセーブ領域３２および第２データセーブ領域３３の代わりにデータセーブ領域３６が定義されている。すなわち、第１データセーブ領域３２および第２データセーブ領域３３がデータセーブ領域３６に統一されている。また、進行履歴情報３７０を格納する進行履歴格納領域３７が追加的に設けられている。
【０１１６】
第２の実施の形態におけるテーブル３５１は、ステージｎと、ステージｎにおいて使用されるべきコマンドＲnと、演算方法ｆn(x)の格納アドレスとを関連づける情報である。すなわち、第１の実施の形態におけるテーブル３５０と比べて、ステージｎに関する情報がさらに関連づけられている点が異なっている。
【０１１７】
データセーブ領域３６は、演算結果情報３６０を格納する領域である。第１の実施の形態における演算結果情報３３０は、ユーザ格納情報１２１に基づいて作成されることはなかった。しかし、第２の実施の形態における演算結果情報３６０は、格納情報１２０のみならず、ユーザ格納情報１２１に基づいても作成される。演算結果情報３６０には、その元となった格納情報１２０またはユーザ格納情報１２１が作成されたときのステージを示す情報がステージＳとして付加されている。
【０１１８】
なお、詳細は後述するが、付加されるステージＳに関する情報は、演算方法ｆn(x)による変換がされていないものとする。また、ステージＳに関する情報は、ユーザ格納情報１２１に基づいて作成される演算結果情報３６０にのみ付加されるように構成し、格納情報１２０に基づいて作成される演算結果情報３６０には付加しないように構成してもよい。
【０１１９】
進行履歴格納領域３７に格納される進行履歴情報３７０は、コントローラ３０により作成される情報であって、コントローラ３０がホストコンピュータ１０から進行状況（ステージｎ）を通知されたときに、当該通知された進行状況を記録する情報である。詳細は後述するが、本実施の形態では、プログラム２６におけるステージ（ｎ−１）までが順次に正常に進行して正常にステージｎが開始されたときには、進行履歴情報３７０には、ステージｎが記録される。言い換えれば、進行履歴情報３７０にステージｎが記録されている状態とは、ホストコンピュータ１０により実行中のプログラム２６の進行状況がステージｎの状態であることを示す。なお、以下の説明では、進行履歴情報３７０に記録されたステージを「ステージＰ」と称する。
【０１２０】
次に、第２の実施の形態における情報保護方法について説明する。
【０１２１】
図８は、第２の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。第２の実施の形態におけるセキュリティメモリ３は、起動中のホストコンピュータ１０にメモリシステム１が装着された状態で動作する。
【０１２２】
第２の実施の形態におけるセキュリティメモリ３が動作中において、セキュリティメモリ３のコントローラ３０は、ホストコンピュータ１０からの各種コマンドを受け付けることが可能な状態となっている（ステップＳ４１，Ｓ４６，Ｓ４９）。以下、本実施の形態において、第２の実施の形態におけるコントローラ３０がホストコンピュータ１０からのコマンドを受け付けることが可能な状態を「待ち受け状態」と称する。ただし、コントローラ３０が受け付けるコマンドは図８に示すものに限定されるものではない。
【０１２３】
待ち受け状態において、ホストコンピュータ１０からセーブコマンドが入力されると（ステップＳ４１においてＹｅｓ）、コントローラ３０は、セーブコマンドとともに入力された情報（格納情報１２０またはユーザ格納情報１２１）からステージＳ（当該情報が作成されたときのステージを示す。）を取得して進行履歴情報３７０のステージＰにセットする（ステップＳ４２）。
【０１２４】
これにより、セキュリティメモリ３の状態もホストコンピュータ１０と同一のステージＳとなるとともに、ステージＳまで進行したことが進行履歴情報３７０に記録される。このように、本実施の形態におけるコントローラ３０も、セーブする情報を生成した際のホストコンピュータ１０の状態を、ホストコンピュータ１０から通知される当該情報から取得する。
【０１２５】
次に、コントローラ３０は、演算方法情報３４０から、ステージＳに対応する演算方法ｆS(x)を選択し（ステップＳ４３）、取得する。そして、演算方法ｆS(x)を取得すると、コントローラ３０は、セーブする情報と、取得した演算方法ｆS(x)とに基づいて、演算結果情報３６０を作成し（ステップＳ４４）、データセーブ領域３６にセーブする（ステップＳ４５）。
【０１２６】
このようにして、ホストコンピュータ１０がステージＳにおいて作成し、セーブしようとする情報（格納情報１２０またはユーザ格納情報１２１）は、セキュリティメモリ３において、ステージＳに対応する演算方法ｆS(x)を用いて演算結果情報３６０に変換されてからメモリアレイ３１に格納される。すなわち、第１の実施の形態と異なり、第２の実施の形態では、ユーザ格納情報１２１であっても、演算結果情報３６０に変換される。
【０１２７】
待ち受け状態において、ロードコマンドが入力されると（ステップＳ４６においてＹｅｓ）、コントローラ３０は、メモリアレイ３１のデータセーブ領域３６に格納されている演算結果情報３６０をロードする（ステップＳ４７）。より詳細には、ロードコマンドとともに入力されるアドレスにより指定されるデータ（通常は演算結果情報３６０の一部）をメモリアレイ３１から読み出し、ホストコンピュータ１０に出力する。
【０１２８】
ステップＳ４７の処理と並行して、コントローラ３０は、ステップＳ４７において読み出した演算結果情報３６０に付加されているステージＳを取得し、進行履歴情報３７０のステージＰにセットする（ステップＳ４８）。
【０１２９】
演算結果情報３６０に付加されているステージＳとは、演算結果情報３６０の元となった情報（格納情報１２０またはユーザ格納情報１２１）が作成されたときのホストコンピュータ１０におけるプログラム２６の進行状況である。すなわち、ステップＳ４８を実行することにより、コントローラ３０は、進行履歴情報３７０を、ロードされた情報の作成時のステージに戻す。ただし、演算結果情報３６０にステージＳが付加されていない場合（当該演算結果情報３６０が格納情報１２０に由来する情報である場合）は、ステップＳ４８は実行しない。
【０１３０】
待ち受け状態において、コマンドＲnが入力されると（ステップＳ４９においてＹｅｓ）、コントローラ３０は、進行履歴情報３７０を参照して現在のステージＰを取得して、テーブル格納領域３５のテーブル３５１を参照する（ステップＳ５０）。ステップＳ５０においてテーブル格納領域３５（テーブル３５１）から読み出される情報とは、ステージＰにおいて使用されるべきコマンドＲPである。
【０１３１】
次に、コントローラ３０は、ステップＳ５０で取得したコマンドと、入力されたコマンドとが一致しているか否かを判定する（ステップＳ５１）。
【０１３２】
ホストコンピュータ１０から入力されたコマンドＲnが、現在のステージＰにおいて使用されるべきコマンドＲPと一致した場合、コントローラ３０は、再度、テーブル３５１を参照して、入力されたコマンドＲnに関連づけられている格納アドレスを取得する。そして、取得した格納アドレスに格納されている演算方法ｆn(x)を表現した情報を演算方法格納領域３４から読み出してホストコンピュータ１０に出力する。このように、ホストコンピュータ１０からコマンドＲnが入力されたときには、コントローラ３０は、当該コマンドＲnに対応する演算方法ｆn(x)を被選択演算方法として選択しホストコンピュータ１０に出力する（ステップＳ５２）。
【０１３３】
第１の実施の形態では、セキュリティメモリ３に対して単独でコマンドＲ1，・・・，コマンドＲNが打ち込まれれば、それに対して演算方法ｆ1(x)，・・・，演算方法ｆN(x)を読み出すことができる。しかし、第２の実施の形態では、進行履歴情報３７０を設けることにより、不正に演算方法ｆn(x)を読みだそうと企図する者は、刻々と変化する正常なホストコンピュータ１０の状態を再現するだけでなく、それに応じてセキュリティメモリ３の状態も変化させなければ演算方法ｆn(x)を読み出すことができず、セキュリティレベルがさらに向上する。
【０１３４】
一方、ホストコンピュータ１０から入力されたコマンドＲnが、現在のステージＰにおいて使用されるべきコマンドＲPと一致しない場合、コントローラ３０は、ホストコンピュータ１０にダミーデータを出力する（ステップＳ５３）。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
【０１３５】
以上が第２の実施の形態におけるセキュリティメモリ３の動作である。次に、第２の実施の形態におけるホストコンピュータ１０の動作を説明する。
【０１３６】
図９および図１０は、第２の実施の形態におけるホストコンピュータ１０の動作を示す流れ図である。なお、図９および図１０に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１が、主にプログラム２６に従って動作することにより実行される工程を示す。
【０１３７】
第２の実施の形態におけるホストコンピュータ１０は、プログラム２６の実行を開始すると、所定の初期設定を実行した後、プログラム２６の進行状況を示すステージｎに「１（初期ステージ）」をセットする（ステップＳ６１）。これにより、ホストコンピュータ１０において実行中のプログラム２６の進行状況がステージ１に移行し、ステージ１が開始される。
【０１３８】
なお、ステップＳ６２ないしＳ６６およびステップＳ７１の処理は、第１の実施の形態におけるステップＳ２２ないしＳ２６およびステップＳ３０と同様の処理であるため、説明を省略する。
【０１３９】
第２の実施の形態における監視状態において、データロードが指示されると（ステップＳ７２においてＹｅｓ）、ホストコンピュータ１０はメモリシステム１のコントローラ３０に対して、ロードコマンドを出力する。ホストコンピュータ１０からロードコマンドを受け取ると、コントローラ３０は、先述のように、データロードを行い、ホストコンピュータ１０に対して演算結果情報３６０を出力する。これにより、ホストコンピュータ１０は、演算結果情報３６０を取得する（ステップＳ７３）。
【０１４０】
演算結果情報３６０を取得すると、ホストコンピュータ１０は、取得した演算結果情報３６０に付加されているステージＳ（解読不要）に関する情報に基づいて、ｎにＳをセットする（ステップＳ７４）。これにより、プログラム２６の進行状況は、データロード前のステージから再開させるステージ（すなわちステージＳ）に移行する。
【０１４１】
ステージＳが再開されると、ホストコンピュータ１０は、ステップＳ７３で取得した演算結果情報３６０を解読するために、コントローラ３０に対してコマンドＲnを発行し、演算方法ｆn(x)を取得する（ステップＳ７５）。
【０１４２】
このときすでにステップＳ７４が実行され、ステージｎは、演算結果情報３６０が作成されたときのホストコンピュータ１０におけるプログラム２６のステージＳに戻っている。したがって、ステップＳ７５において発行されるコマンドＲnは、ステップＳ７３において取得した演算結果情報３６０が作成されたときに使用された演算方法ｆS(x)を取得するためのコマンドＲSである。また、先述のように、演算結果情報３６０を出力するときには、セキュリティメモリ３の進行履歴情報３７０はステージＳに書き換えられている（図８：ステップＳ４８）。したがって、ステップＳ７５において発行されるコマンドＲSが、コントローラ３０により、不適切なコマンドであると判定されることはない。
【０１４３】
次に、ホストコンピュータ１０は、取得した演算方法ｆn(x)から演算方法ｆn(x)の逆関数ｆ-1n(x)を求め、当該逆関数ｆ-1n(x)により演算結果情報３６０を演算することによってユーザ格納情報１２１を作成する（ステップＳ７６）。そして、作成したユーザ格納情報１２１に従ってプログラム２６を進行させるために、ホストコンピュータ１０はステップＳ７１の処理に戻る。
【０１４４】
なお、ステップＳ７７ないしＳ８２の処理は、第１の実施の形態におけるステップＳ３４ないしＳ３９と同様の処理であるため、説明を省略する。
【０１４５】
以上のように、第２の実施の形態におけるメモリシステム１は、ユーザ格納情報１２１についても、演算方法ｆn(x)による変換を行ってメモリアレイ３１に格納する。このように構成することによっても、第１の実施の形態と同様の効果を得ることができる。
【０１４６】
また、ユーザ格納情報１２１は、ユーザにより作成される情報であり、例えば、ＲＯＭ２に格納されていない情報であって、記憶装置１２に保存しておくことが困難な情報である。メモリアレイ３１以外の記憶領域に格納容易な情報であれば、メモリアレイ３１から取得される演算結果情報３６０の解読に失敗しても、他の記憶領域から取得するように不正にプログラム２６を改ざんされるおそれがある。しかし、格納情報１２０だけでなく、ユーザ格納情報１２１についても、メモリアレイ３１に格納するときに、演算方法ｆn(x)による変換を行うことにより、ホストコンピュータ１０は、メモリアレイ３１から得られる演算結果情報３６０の解読を確実に行う必要があり、セキュリティ機能が向上する。
【０１４７】
また、コントローラ３０が、ホストコンピュータ１０の状態を取得するたびに、進行履歴情報３７０に記録することにより、例えば、正しいコマンドＲnが使用されたか否かを容易に確認できる。
【０１４８】
なお、第１の実施の形態および第２の実施の形態では、格納情報１２０（またはユーザ格納情報１２１）を作成したときのホストコンピュータ１０の状態は、プログラム２６のホストコンピュータ１０における進行状況（ステージｎ）として、格納情報１２０（またはユーザ格納情報１２１）に含まれていると説明した。そして、コントローラ３０は、これらの情報（メモリアレイ３１に格納する元となる情報）からホストコンピュータ１０の状態を取得する。これにより、ホストコンピュータ１０は、状態の変化を意識して、その都度、コントローラ３０に通知する必要がない。
【０１４９】
しかし、ホストコンピュータ１０の状態をコントローラ３０に通知するための専用のコマンド（状態通知コマンド）が定義されていてもよい。すなわち、ホストコンピュータ１０は、状態が変化するたびに、状態通知コマンドをコントローラ３０に向けて発行してもよい。
【０１５０】
ホストコンピュータ１０とメモリシステム１との間のセキュリティ機能によっては、メモリアレイ３１に格納する情報をコントローラ３０が解析することが困難な場合もある。そのような場合であっても、ホストコンピュータ１０から状態通知コマンドが発行され、これを進行履歴情報３７０に記録しておけば、コントローラ３０は容易にホストコンピュータ１０の状態を取得できる。また、このように構成することにより、格納情報１２０（またはユーザ格納情報１２１）をセキュリティメモリ３に格納させるとき以外のタイミングでも状態を通知できる。
【０１５１】
＜３．  第３の実施の形態＞
上記実施の形態では、格納情報１２０は、メモリシステム１においてコントローラ３０により演算結果情報３３０（あるいは演算結果情報３６０）に変換される。そして、ホストコンピュータ１０が正常な演算方法ｆn(x)をメモリシステム１から取得できれば、演算結果情報３３０（あるいは演算結果情報３６０）はホストコンピュータ１０によって逆変換されて（復号化されて）評価情報１２２となる。すなわち、上記実施の形態では、格納情報１２０と評価情報１２２とは元情報と復元情報の関係であり、互いにほぼ同等の情報として構成されていた。しかし、格納情報１２０と評価情報１２２との関係は必ずしもこのような関係に限定されるものではない。
【０１５２】
図１１は、第３の実施の形態におけるメモリアレイ３１の記憶領域と各記憶領域に格納される情報とを例示する図である。なお、第３の実施の形態におけるコンピュータシステムにおいて第１の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
【０１５３】
第３の実施の形態における演算方法格納領域３４は、演算方法情報３４０の代わりに演算方法情報３４１を格納している点が第１の実施の形態における演算方法格納領域３４と異なっている。演算方法情報３４１は、第１の実施の形態における演算方法情報３４０と同様にステージ１，・・・，Ｎと、これに対応する演算方法ｆ1(x)，・・・，ｆN(x)とが互いに関連づけられて定義されている。しかし、第３の実施の形態における演算方法情報３４１は、さらに、各演算方法ｆ1(x)，・・・，ｆN(x)に対応する演算方法Ｆ1(x)，・・・，ＦN(x)が、演算方法ｆ1(x)，・・・，ｆN(x)に関連づけて定義されている点が演算方法情報３４０と異なっている。
【０１５４】
ここで、演算方法ｆn(x)と演算方法Ｆn(x)との関係は、互いに逆関数の関係とはなっていない。また、ステージｎにおける格納情報１２０を、演算方法ｆn(x)で一次変換し、さらに、演算方法Ｆn(x)で二次変換すると、ステージｎにおける必要不可欠な情報Ｅnとなる。
【０１５５】
例えば、第３の実施の形態における格納情報１２０は暗号化された情報であり、そのままでは必要不可欠な情報Ｅnとしてホストコンピュータ１０において使用することができない情報である。このような格納情報１２０を演算方法ｆn(x)で一回目の復号化をし、さらに、演算方法Ｆn(x)で二回目の復号化をすると、格納情報１２０が完全な必要不可欠な情報Ｅnに復号化される。すなわち、第３の実施の形態におけるプログラム２６には、このような状態の格納情報１２０が各ステージごとに記述されている。
【０１５６】
第３の実施の形態におけるテーブル３５２は、演算方法情報３４０に格納されている演算方法Ｆn(x)と、演算方法Ｆn(x)を読み出すためのコマンドＲnとを関連づける情報である。より詳細には、テーブル３５２には、演算方法Ｆn(x)の演算方法格納領域３４における格納アドレスと、演算方法Ｆn(x)を読み出すためのコマンドＲnとが関連づけられている。すなわち、本実施の形態では、コマンドＲnは、メモリシステム１から演算方式ｆn(x)を読み出すためのコマンドとして定義されるものではなく、演算方式Ｆn(x)を読み出すためのコマンドとして定義される。
【０１５７】
図１２は、第３の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。第３の実施の形態におけるセキュリティメモリ３も、第１の実施の形態におけるセキュリティメモリ３と同様に、起動中のホストコンピュータ１０にメモリシステム１が装着された状態で動作する。
【０１５８】
メモリシステム１が動作中において、セキュリティメモリ３のコントローラ３０は、ホストコンピュータ１０からの各種コマンドを受け付けることが可能な状態となっている（ステップＳ９１，Ｓ９７，Ｓ９９）。以下、コントローラ３０がホストコンピュータ１０からのコマンドを受け付けることが可能な状態を「待ち受け状態」と称する。ただし、コントローラ３０が受け付けるコマンドは図１２に示すものに限定されるものではない。
【０１５９】
なお、図１２に示すステップＳ９１ないしＳ９８の処理は、第１の実施の形態におけるステップＳ１ないしＳ８と同様の処理であるため、説明を省略する。ただし、ステップＳ９５において、被選択演算方法である演算方法ｆn(x)と格納情報１２０とに基づいて演算結果情報３３０を作成する処理は、第１の実施の形態におけるステップＳ５では暗号化に相当する処理であったが、第３の実施の形態では一段目の復号化に相当する処理である。
【０１６０】
第３の実施の形態における待ち受け状態において、コマンドＲnが入力されると（ステップＳ９９においてＹｅｓ）、コントローラ３０は、テーブル格納領域３５のテーブル３５２を参照し（ステップＳ１００）、入力されたコマンドＲnがテーブル３５２に存在するか否かを判定する（ステップＳ１０１）。すなわち、正しく定義されたコマンドＲnが入力されたか否かを判定する。
【０１６１】
入力されたコマンドＲnがテーブル３５２に存在しない場合（ステップＳ１０１においてＮｏ）、コントローラ３０は、ホストコンピュータ１０にダミーデータを出力する（ステップＳ１０２）。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
【０１６２】
一方、入力されたコマンドＲnがテーブル３５２に存在する場合（ステップＳ１０１においてＹｅｓ）、コントローラ３０は、当該コマンドＲnに対応する演算方法Ｆn(x)が格納されている位置を示す演算方法格納領域３４のアドレスをテーブル３５２から取得する。
【０１６３】
次に、コントローラ３０は、取得したアドレスで示される演算方法格納領域３４に格納されている情報を読み出してホストコンピュータ１０に出力する。このようにして、演算方法格納領域３４から読み出される情報とは、すなわち、演算方法情報３４１に含まれている演算方法Ｆn(x)を表現した情報である。このように、第３の実施の形態におけるホストコンピュータ１０からコマンドＲnが入力されたときには、コントローラ３０は、当該コマンドＲnに対応する演算方法Ｆn(x)を被選択演算方法として選択しホストコンピュータ１０に出力する（ステップＳ１０３）。
【０１６４】
以上が第３の実施の形態におけるセキュリティメモリ３の動作である。次に、本実施の形態におけるホストコンピュータ１０の動作を説明する。
【０１６５】
図１３は、第３の実施の形態におけるホストコンピュータ１０の動作を示す流れ図である。なお、図１３に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１が、主にプログラム２６に従って動作することにより実行される工程を示す。
【０１６６】
第３の実施の形態におけるホストコンピュータ１０は、プログラム２６の実行を開始すると、ステップＳ１１１を実行することによりステージｎに「１」を設定して、初期ステージを開始する。その後、ステップＳ１１２ないしＳ１１４の処理を行う。ここで、ステップＳ１１２ないしＳ１１４の処理は、第１の実施の形態におけるステップＳ２２ないしＳ２４と同様の処理なので説明を省略する。
【０１６７】
第３の実施の形態におけるホストコンピュータ１０は、ステップＳ１１４を実行して演算結果情報３３０をメモリシステム１から取得すると、メモリシステム１に対してコマンドＲnを発行し、演算方法Ｆn(x)を取得する（ステップＳ１１５）。
【０１６８】
このように、第３の実施の形態では、ホストコンピュータ１０からの取得命令（コマンドＲn）に対して、メモリシステム１から出力される演算方法は演算結果情報３３０を作成するために使用した演算方法ｆn(x)ではない。すなわち、コマンドＲnに対しては、演算結果情報３３０を必要不可欠な情報Ｅnに復号化するために必要な演算方法Ｆn(x)が、演算方法ｆn(x)に対応する関数情報としてメモリシステム１から出力される。
【０１６９】
演算方法Ｆn(x)を取得すると、ホストコンピュータ１０は、ステップＳ１１４において取得した演算結果情報３３０と、ステップＳ１１５において取得した演算方法Ｆn(x)とに基づいて、評価情報１２２を作成する（ステップＳ１１６）。
【０１７０】
なお、ステップＳ１１６を実行した後のホストコンピュータ１０の処理は、第１の実施の形態におけるステップＳ３０ないしＳ３９と同様に実行することができるため、説明を省略する。
【０１７１】
以上のように、第３の実施の形態におけるメモリシステム１も、上記実施の形態と同様の効果を得ることができる。
【０１７２】
また、先述のように、格納情報１２０がメモリアレイ３１以外の記憶領域に格納しておくことが可能な情報であれば、メモリアレイ３１から得られた演算結果情報３３０の解読に失敗しても、他の記憶領域から元の格納情報１２０を取得するように不正にプログラム２６を改ざんされるおそれがある。しかし、格納情報１２０を暗号化された情報としてプログラム２６に記述しておくことにより、格納情報１２０を記憶装置１２に保存しておいて、解読に失敗したときに利用しようとしても、ホストコンピュータ１０は格納情報１２０を必要不可欠な情報Ｅnとして使用することができない。すなわち、第３の実施の形態におけるホストコンピュータ１０は、メモリアレイ３１から得られる演算結果情報３３０の解読を確実に行う必要があり、セキュリティ機能が向上する。
【０１７３】
＜４．  第４の実施の形態＞
上記実施の形態では、ホストコンピュータ１０が１のコマンドＲnを発行することにより、メモリシステム１から１の演算方法ｆn(x)（あるいは１の演算方法Ｆn(x)）が取得された。しかし、演算方法を読み出すコマンドＲnは、必ずしも演算方法と一対一に対応していなくてもよい。なお、第４の実施の形態におけるコンピュータシステムにおいて第１の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
【０１７４】
図示は省略するが、第４の実施の形態における演算方法情報３４０には、第１の実施の形態と同様に、複数の演算方法ｆ1(x)，・・・，ｆN(x)が定義されている。そして、第４の実施の形態では、各演算方法ｆ1(x)，・・・，ｆN(x)を定義する情報は、いずれも複数回に分割して、順次に、セキュリティメモリ３からホストコンピュータ１０に出力することが可能とされている。そして、ホストコンピュータ１０は、複数回に分割して、順次に取得した各情報から、各演算方法ｆ1(x)，・・・，ｆN(x)を作成する。
【０１７５】
以下では、各演算方法ｆ1(x)，・・・，ｆN(x)を定義する情報の分割数を分割数Ｍ（Ｍは２以上の自然数。）と称する。また、演算方法ｆn(x)をＭ個に分割する各情報を、セキュリティメモリ３からの出力順序を示す添え字「ｍ（ｍはＭ以下の自然数。）」を用いて、演算方法ｆn1(x)，・・・，ｆnM(x)と称する。言い換えれば、演算方法ｆn1(x)，・・・，ｆnM(x)は、ホストコンピュータ１０において、演算方法ｆn(x)を作成するために必要な情報である。
【０１７６】
また、各演算方法ｆn1(x)，・・・，ｆnM(x)を要求するためにホストコンピュータ１０から入力されるコマンドとして、コマンドＲn1，・・・，ＲnMがプログラム２６内において定義されている。そして、第４の実施の形態におけるテーブル３５０では、コマンドＲn1，，ＲnMは演算方法ｆn1(x)，・・・，ｆnM(x)の格納アドレス（演算方法格納領域３４のアドレス）とそれぞれ一対一で関連づけられている。
【０１７７】
次に、第４の実施の形態における情報保護方法について説明する。
【０１７８】
図１４は、第４の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。セキュリティメモリ３は、第１の実施の形態と同様に、起動中のホストコンピュータ１０にメモリシステム１が装着された状態で動作する。
【０１７９】
図１４に示すステップＳ１２１ないしＳ１２８は、第１の実施の形態におけるステップＳ１ないしＳ８と同様の処理であるため説明を省略する。ただし、ステップＳ１２４では、ステージＳに対応する演算方法ｆS1(x)，・・・，ｆSM(x)が全て演算方法格納領域３４から読み出され、演算方法ｆS(x)が作成されることにより取得される。
【０１８０】
第４の実施の形態における待ち受け状態において、コマンドＲnmが入力されると（ステップＳ１２９においてＹｅｓ）、コントローラ３０は、テーブル格納領域３５のテーブル３５０を参照し（ステップＳ１３０）、入力されたコマンドＲnmがテーブル３５０に存在するか否かを判定する（ステップＳ１３１）。すなわち、正しく定義されたコマンドＲnmが入力されたか否かを判定する。
【０１８１】
入力されたコマンドＲnmがテーブル３５０に存在しない場合（ステップＳ１３１においてＮｏ）、コントローラ３０は、ホストコンピュータ１０にダミーデータを出力する（ステップＳ１３２）。ただし、ダミーデータを出力する代わりに、エラーを返す、あるいは、以降の動作を限定する、もしくは、何も受け付けない等の処理を行ってもよい。
【０１８２】
一方、入力されたコマンドＲnmがテーブル３５０に存在する場合（ステップＳ１３１においてＹｅｓ）、コントローラ３０は、当該コマンドＲnmに対応する演算方法ｆnm(x)が格納されている位置を示す演算方法格納領域３４のアドレスをテーブル３５０から取得する。そして、取得したアドレスに基づいて、コントローラ３０は、演算方法格納領域３４から演算方法ｆnm(x)を表現をした情報を読み出してホストコンピュータ１０に出力する（ステップＳ１３３）。このように、第４の実施の形態では、ホストコンピュータ１０からコマンドＲnmが入力されたときには、コントローラ３０は、当該コマンドＲnmに対応する演算方法ｆnm(x)を被選択演算方法として選択しホストコンピュータ１０に出力する。
【０１８３】
以上が第４の実施の形態におけるセキュリティメモリ３の動作である。次に、本実施の形態におけるホストコンピュータ１０の動作を説明する。
【０１８４】
図１５は、第４の実施の形態におけるホストコンピュータ１０の動作を示す流れ図である。なお、図１１に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１が、主にプログラム２６に従って動作することにより実行される工程を示す。
【０１８５】
第３の実施の形態におけるホストコンピュータ１０は、プログラム２６の実行を開始すると、ステップＳ１４０ないしＳ１４３の処理を行う。ここで、ステップＳ１４０ないしＳ１４３の処理は、第１の実施の形態におけるステップＳ２１ないしＳ２４と同様に実行できるため説明を省略する。
【０１８６】
ステップＳ１４３が実行されると、第４の実施の形態におけるホストコンピュータ１０は出力順序を示すｍの値を「１（初期値）」にセットする（ステップＳ１４４）。
【０１８７】
次に、ホストコンピュータ１０は、コマンドＲnmをメモリシステム１に対して発行し、これに対してメモリシステム１から出力される演算方法ｆnm(x)を取得して記憶装置１２に記憶する（ステップＳ１４５）。
【０１８８】
そして、さらに、ｍがＭと一致しなければ（ステップＳ１４６においてＮｏ）、演算方法ｆn(x)を作成するために必要な演算方法ｆn1(x)，・・・，ｆnM(x)が未だすべて取得されていないと判断して、ｍをインクリメントして（ステップＳ１４７）、ステップＳ１４５からの処理を繰り返す。
【０１８９】
一方、ｍがＭと一致した場合（ステップＳ１４６においてＹｅｓ）、演算方法ｆn(x)を作成するために必要な演算方法ｆn1(x)，・・・，ｆnM(x)がすべて取得されたと判断して、取得し格納しておいた演算方法ｆn1(x)，・・・，ｆnM(x)に基づいて演算方法ｆn(x)を作成する（ステップＳ１４８）。
【０１９０】
ステージｎにおいて取得する必要のある演算方法ｆn(x)が無事に取得されると、第４の実施の形態におけるホストコンピュータ１０は、ステップＳ１４３において取得した演算結果情報３３０とステップＳ１４８において作成した演算方法ｆn(x)とに基づいて評価情報１２２を作成する（ステップＳ１４９）。
【０１９１】
ステップＳ１４９を終了すると、第４の実施の形態におけるホストコンピュータ１０は、第１の実施の形態におけるステップＳ３０ないしＳ３９と同様の処理を実行する（説明は省略する）。
【０１９２】
以上のように、第４の実施の形態においても、上記実施の形態と同様の効果を得ることができる。
【０１９３】
また、被選択演算方法が、演算方法情報３４０から複数回に分けて読み出されることにより、複数回の読み出しの全てに成功しない限り１の演算方法ｆn(x)すら取得できない。これによりセキュリティレベルが向上する。
【０１９４】
なお、上記実施の形態では、すべての演算方法ｆn(x)が、Ｍ個に分割される例で説明したが、各演算方法ｆn(x)ごとに分割数が異なっていてもよい。
【０１９５】
＜５．  変形例＞
以上、本発明の実施の形態について説明してきたが、本発明は上記実施の形態に限定されるものではなく様々な変形が可能である。
【０１９６】
例えば、上記実施の形態では、メモリシステム１において、保護対象の情報を格納するＲＯＭ２と、演算方法による演算を行うセキュリティメモリ３とが一体構造物を構成していた。しかし、例えば、ＲＯＭ２のメモリアレイ２１に相当する記憶媒体をＣＤ−ＲＯＭで構成し、ＲＯＭ２のコントローラ２０をホストコンピュータ１０に設けたＣＤ−ＲＯＭドライブ装置とＣＰＵ１１とで構成し、着脱可能な記憶媒体にはセキュリティメモリ３に相当する構成のみを搭載して構成することも可能である。
【０１９７】
また、上記実施の形態に示した各工程は、あくまでも例示であって、同様の効果が得られるならば、各工程における処理内容や、各工程の実行順は、適宜、変更されてもよい。
【符号の説明】
【０１９８】
１  メモリシステム
１０  ホストコンピュータ
１１  ＣＰＵ
１２  記憶装置
１２０  格納情報
１２１  ユーザ格納情報
１２２  評価情報
２  ＲＯＭ
２０  コントローラ
２１，３１  メモリアレイ
２６  プログラム
３  セキュリティメモリ
３０  コントローラ
３３０，３６０  演算結果情報
３４０，３４１  演算方法情報
３５０，３５１，３５２  テーブル
３７０  進行履歴情報
【図１】
0005718746.tif 000002
【図２】
0005718746.tif 000003
【図３】
0005718746.tif 000004
【図４】
0005718746.tif 000005
【図５】
0005718746.tif 000006
【図６】
0005718746.tif 000007
【図７】
0005718746.tif 000008
【図８】
0005718746.tif 000009
【図９】
0005718746.tif 000010
【図１０】
0005718746.tif 000011
【図１１】
0005718746.tif 000012
【図１２】
0005718746.tif 000013
【図１３】
0005718746.tif 000014
【図１４】
0005718746.tif 000015
【図１５】
0005718746.tif 000016