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