(57)【特許請求の範囲】
【請求項１】
ホストコンピュータに接続されるメモリシステムであって、
保護対象の情報を格納する第１不揮発性メモリと、
前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、
状態情報と第１演算情報と前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報とを格納する第２不揮発性メモリと、
前記ホストコンピュータの状態に応じて前記ホストコンピュータから送信される状態変更情報を取得し、当該取得した状態変更情報と前記第２不揮発性メモリに格納されている第１演算情報とに基づいて演算することにより新たな状態情報を生成し、前記第２不揮発性メモリに格納されている状態情報を前記新たな状態情報に変更するとともに、前記第２不揮発性メモリに格納されている状態情報に応じて前記第２不揮発性メモリに格納されている必要不可欠情報を読み出して前記ホストコンピュータに出力する第２コントローラと、
を備えるメモリシステム。
【請求項２】
請求項１に記載のメモリシステムであって、
前記第２コントローラは、前記第２不揮発性メモリに格納されている状態情報に基づいて前記新たな状態情報を生成するメモリシステム。
【請求項３】
請求項１または２に記載のメモリシステムであって、
前記第２コントローラは、前記ホストコンピュータにおいて前記保護対象の情報の使用が中断されるときに前記新たな状態情報を生成するための演算の途中経過を前記第２不揮発性メモリに格納するとともに、前記ホストコンピュータが前記保護対象の情報の使用を再開するときに前記第２不揮発性メモリに格納されている前記演算の途中経過を読み出して前記演算を再開させるメモリシステム。
【請求項４】
請求項１ないし３のいずれかに記載のメモリシステムであって、
前記第２コントローラは、前記第２不揮発性メモリに格納されている状態情報に応じて、前記状態情報を、前記新たな状態情報に変更するタイミングを制御するメモリシステム。
【請求項５】
請求項４に記載のメモリシステムであって、
前記第２コントローラは、前記第１演算情報に基づいて実行する演算の演算時間を制御することにより、前記タイミングを制御するメモリシステム。
【請求項６】
請求項１ないし５のいずれかに記載のメモリシステムであって、
前記ホストコンピュータが状態変更情報を演算するための第２演算情報を格納するメモリシステム。
【請求項７】
請求項６に記載のメモリシステムであって、
前記第２不揮発性メモリに格納されている必要不可欠情報は、前記ホストコンピュータにおいて状態変更情報を求めるための情報を含むメモリシステム。
【請求項８】
請求項１ないし７のいずれかに記載のメモリシステムであって、
前記第２不揮発性メモリにおいて前記必要不可欠情報は暗号化された状態で格納されており、
前記第２コントローラは、前記必要不可欠情報を前記状態情報を用いて復号化して、前記ホストコンピュータに出力するメモリシステム。
【請求項９】
請求項１ないし８のいずれかに記載のメモリシステムであって、
前記第２コントローラは、前記第２不揮発性メモリに格納されている状態情報を用いて前記第２不揮発性メモリのアドレスを演算し、前記アドレスを用いて前記第２不揮発性メモリに格納されている必要不可欠情報を読み出して、前記ホストコンピュータに出力するメモリシステム。
【請求項１０】
ホストコンピュータに接続されるメモリシステムであって、
保護対象の情報を格納する第１不揮発性メモリと、
前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、
前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報を暗号化された状態で格納するとともに、状態情報を格納する第２不揮発性メモリと、
前記ホストコンピュータの状態に応じて前記第２不揮発性メモリに格納されている状態情報を変更するとともに、前記第２不揮発性メモリに格納されている状態情報に応じて前記第２不揮発性メモリに格納されている必要不可欠情報を読み出し、前記状態情報を用いて復号化して前記ホストコンピュータに出力する第２コントローラと、
を備えるメモリシステム。
【請求項１１】
保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、
状態情報と第１演算情報と前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報とを格納する不揮発性メモリと、
前記ホストコンピュータの状態に応じて前記ホストコンピュータから送信される状態変更情報を取得し、当該取得した状態変更情報と前記不揮発性メモリに格納されている第１演算情報とに基づいて演算することにより新たな状態情報を生成し、前記不揮発性メモリに格納されている状態情報を前記新たな状態情報に変更するとともに、前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出して前記ホストコンピュータに出力するコントローラと、
を備えるセキュリティメモリ。
【請求項１２】
保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、
前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報を暗号化された状態で格納するとともに、状態情報を格納する不揮発性メモリと、
前記ホストコンピュータの状態に応じて前記不揮発性メモリに格納されている状態情報を変更するとともに、前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出し、前記状態情報を用いて復号化して前記ホストコンピュータに出力するコントローラと、
を備えるセキュリティメモリ。
【請求項１３】
ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、
状態情報と第１演算情報と前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報とを不揮発性メモリに格納する工程と、
前記ホストコンピュータの状態に応じて前記ホストコンピュータから送信される状態変更情報を取得し、当該取得した状態変更情報と前記不揮発性メモリに格納されている第１演算情報とに基づいて演算することにより新たな状態情報を生成し、前記不揮発性メモリに格納されている状態情報を前記新たな状態情報に変更する工程と、
前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出して前記ホストコンピュータに出力する工程と、
を有する情報保護方法。
【請求項１４】
ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、
状態情報を不揮発性メモリに格納する工程と、
前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報を暗号化された状態で不揮発性メモリに格納する工程と、
前記ホストコンピュータの状態に応じて前記不揮発性メモリに格納されている状態情報を変更する工程と、
前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出し、前記状態情報を用いて復号化して前記ホストコンピュータに出力する工程と、
を有する情報保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置（例えば、半導体メモリなど）に格納された情報が不正に複製されないように保護する技術に関する。
【背景技術】
【０００２】
従来より、ホストコンピュータに接続される記憶装置に記憶された保護対象の情報を不正な複製から保護する技術が知られている。例えば、そのような技術が特許文献１に記載されている。
【０００３】
特許文献１には、ホストコンピュータと接続されるメモリシステムに、セキュリティ機能を備えたコントローラと不揮発性メモリとを設けている。そして、ホストコンピュータからのアクセスに対しては、当該コントローラがセキュリティ機能を発揮することにより、不揮発性メモリ上に格納された情報を保護する技術が記載されている。
【０００４】
しかし、特許文献１に記載されている技術をもってしても、不正な複製を完全に防止することはできない。そして、メモリシステムのコントローラにおけるセキュリティ機能が破られ、不揮発性メモリに格納された情報（保護対象の情報）を違法に複製され、配布される事態が現実に生じている。特許文献１に記載されている技術では、不揮発性メモリに格納されているプログラムにかかわらず、ホストコンピュータとメモリシステムとが協働してセキュリティ機能を提供しているため、一度、このセキュリティが破られれば、すべてのプログラムが不正に複製されることを許す事態にもなりかねない。
【０００５】
このような事態を安易に解決する手法として、コントローラが提供するセキュリティ機能を変更することが考えられる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−０４０９４１号公報
【特許文献２】特開２００９−２５８８５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところが、特許文献１に記載された技術において、メモリシステムのコントローラにおけるセキュリティ機能を変更すると、ホストコンピュータ側にも変更が必要になるという問題があった。すなわち、ホストコンピュータがすでに多数市場に流通している現状では、メモリシステムのセキュリティ機能が破られるたびに、ホストコンピュータ側の設計変更まで行うことは、互換性の維持やコストの面で現実的ではないという問題があった。
【０００８】
本発明は、上記課題に鑑みてなされたものであり、ホストコンピュータに接続されるメモリシステムに関して、すでに流通しているホストコンピュータとの互換性を維持しつつ、安価に、当該メモリシステムに格納された情報の不正な複製を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するため、請求項１の発明は、ホストコンピュータに接続されるメモリシステムであって、保護対象の情報を格納する第１不揮発性メモリと、前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、状態情報と第１演算情報と前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報とを格納する第２不揮発性メモリと、前記ホストコンピュータの状態に応じて前記ホストコンピュータから送信される状態変更情報を取得し、当該取得した状態変更情報と前記第２不揮発性メモリに格納されている第１演算情報とに基づいて演算することにより新たな状態情報を生成し、前記第２不揮発性メモリに格納されている状態情報を前記新たな状態情報に変更するとともに、前記第２不揮発性メモリに格納されている状態情報に応じて前記第２不揮発性メモリに格納されている必要不可欠情報を読み出して前記ホストコンピュータに出力する第２コントローラとを備える。
【００１２】
また、請求項２の発明は、請求項１の発明に係るメモリシステムであって、前記第２コントローラは、前記第２不揮発性メモリに格納されている状態情報に基づいて前記新たな状態情報を生成する。
【００１３】
また、請求項３の発明は、請求項１または２の発明に係るメモリシステムであって、前記第２コントローラは、前記ホストコンピュータにおいて前記保護対象の情報の使用が中断されるときに前記新たな状態情報を生成するための演算の途中経過を前記第２不揮発性メモリに格納するとともに、前記ホストコンピュータが前記保護対象の情報の使用を再開するときに前記第２不揮発性メモリに格納されている前記演算の途中経過を読み出して前記演算を再開させる。
【００１４】
また、請求項４の発明は、請求項１ないし３のいずれかの発明に係るメモリシステムであって、前記第２コントローラは、前記第２不揮発性メモリに格納されている状態情報に応じて、前記状態情報を、前記新たな状態情報に変更するタイミングを制御する。
【００１５】
また、請求項５の発明は、請求項４の発明に係るメモリシステムであって、前記第２コントローラは、前記第１演算情報に基づいて実行する演算の演算時間を制御することにより、前記タイミングを制御する。
【００１６】
また、請求項６の発明は、請求項１ないし５のいずれかの発明に係るメモリシステムであって、前記ホストコンピュータが状態変更情報を演算するための第２演算情報を格納する。
【００１７】
また、請求項７の発明は、請求項６の発明に係るメモリシステムであって、前記第２不揮発性メモリに格納されている必要不可欠情報は、前記ホストコンピュータにおいて状態変更情報を求めるための情報を含む。
【００１８】
また、請求項８の発明は、請求項１ないし７のいずれかの発明に係るメモリシステムであって、前記第２不揮発性メモリにおいて前記必要不可欠情報は暗号化された状態で格納されており、前記第２コントローラは、前記必要不可欠情報を前記状態情報を用いて復号化して、前記ホストコンピュータに出力する。
【００１９】
また、請求項９の発明は、請求項１ないし８のいずれかの発明に係るメモリシステムであって、前記第２コントローラは、前記第２不揮発性メモリに格納されている状態情報を用いて前記第２不揮発性メモリのアドレスを演算し、前記アドレスを用いて前記第２不揮発性メモリに格納されている必要不可欠情報を読み出して、前記ホストコンピュータに出力する。
【００２０】
また、請求項１０の発明は、ホストコンピュータに接続されるメモリシステムであって、保護対象の情報を格納する第１不揮発性メモリと、前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報を暗号化された状態で格納するとともに、状態情報を格納する第２不揮発性メモリと、前記ホストコンピュータの状態に応じて前記第２不揮発性メモリに格納されている状態情報を変更するとともに、前記第２不揮発性メモリに格納されている状態情報に応じて前記第２不揮発性メモリに格納されている必要不可欠情報を読み出し、前記状態情報を用いて復号化して前記ホストコンピュータに出力する第２コントローラとを備える。
【００２１】
また、請求項１１の発明は、保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、状態情報と第１演算情報と前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報とを格納する不揮発性メモリと、前記ホストコンピュータの状態に応じて前記ホストコンピュータから送信される状態変更情報を取得し、当該取得した状態変更情報と前記不揮発性メモリに格納されている第１演算情報とに基づいて演算することにより新たな状態情報を生成し、前記不揮発性メモリに格納されている状態情報を前記新たな状態情報に変更するとともに、前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出して前記ホストコンピュータに出力するコントローラとを備える。
また、請求項１２の発明は、保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報を暗号化された状態で格納するとともに、状態情報を格納する不揮発性メモリと、前記ホストコンピュータの状態に応じて前記不揮発性メモリに格納されている状態情報を変更するとともに、前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出し、前記状態情報を用いて復号化して前記ホストコンピュータに出力するコントローラとを備える。
【００２２】
また、請求項１３の発明は、ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、状態情報と第１演算情報と前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報とを不揮発性メモリに格納する工程と、前記ホストコンピュータの状態に応じて前記ホストコンピュータから送信される状態変更情報を取得し、当該取得した状態変更情報と前記不揮発性メモリに格納されている第１演算情報とに基づいて演算することにより新たな状態情報を生成し、前記不揮発性メモリに格納されている状態情報を前記新たな状態情報に変更する工程と、前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出して前記ホストコンピュータに出力する工程とを有する。
また、請求項１４の発明は、ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、状態情報を不揮発性メモリに格納する工程と、前記ホストコンピュータが前記保護対象の情報を使用する際に必要となる必要不可欠情報を暗号化された状態で不揮発性メモリに格納する工程と、前記ホストコンピュータの状態に応じて前記不揮発性メモリに格納されている状態情報を変更する工程と、前記不揮発性メモリに格納されている状態情報に応じて前記不揮発性メモリに格納されている必要不可欠情報を読み出し、前記状態情報を用いて復号化して前記ホストコンピュータに出力する工程とを有する。
【発明の効果】
【００２３】
状態情報とホストコンピュータが保護対象の情報を使用する際に必要となる必要不可欠情報とを格納し、ホストコンピュータの状態に応じて状態情報を変更するとともに、格納されている状態情報に応じて必要不可欠情報を読み出してホストコンピュータに出力することにより、すでに流通しているホストコンピュータとの互換性を維持しつつ、安価に、保護対象の情報の不正な複製を抑制することができる。
【図面の簡単な説明】
【００２４】
【図１】第１の実施の形態におけるメモリシステムを備えるコンピュータシステムを示す図である。
【図２】第１の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図３】第１の実施の形態におけるプログラム進行処理を示す流れ図である。
【図４】第１の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図５】第２の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図６】第３の実施の形態におけるメモリシステムを備えるコンピュータシステムを示す図である。
【発明を実施するための形態】
【００２５】
以下、本発明の好適な実施の形態について、添付の図面を参照しつつ、詳細に説明する。
【００２６】
＜１．  第１の実施の形態＞
図１は、第１の実施の形態におけるメモリシステム１を備えるコンピュータシステムを示す図である。コンピュータシステムは、本発明に係るメモリシステム１と、一般的なコンピュータとしての機能を有するホストコンピュータ１０とを備えている。
【００２７】
ホストコンピュータ１０は、各種のデータの演算を行うとともにホストコンピュータ１０が備える各種ハードウェアを制御するＣＰＵ１１と、各種のデータを記憶する記憶装置１２とを備えている。これにより、ホストコンピュータ１０は、一般的なコンピュータとしての構成および機能を備えている。
【００２８】
また、ホストコンピュータ１０は、図示しないカードスロットを備えており、当該カードスロットにメモリシステム１を装着することが可能である。言い換えれば、本実施の形態におけるメモリシステム１は、ホストコンピュータ１０に対して、着脱自在となるように構成されている。
【００２９】
ホストコンピュータ１０のＣＰＵ１１は、第１記憶部２１に格納されているプログラム２１０をコントローラ２０を介して記憶装置１２にロードしつつ、実行する機能を有している。
【００３０】
プログラム２１０には、ホストコンピュータ１０によって実行されるときの当該プログラム２１０の進行状況がマーカーコード等により定義されている。以下の説明では、プログラム２１０の進行状況として、当該プログラム２１０には、順次に、Ｎ個のステージ（Ｇ１，・・・，ＧＮ）が定義されているものとする（Ｎは２以上の自然数。）。また、その時点におけるプログラム２１０の進行状況（現在のステージ）を、「Ｇｎ」と称する（ｎは、ｎ≦Ｎとなる自然数。）。したがって、当然ではあるが、「Ｇｎ」は、Ｇ１，・・・，ＧＮのいずれかである。
【００３１】
詳細は後述するが、本実施の形態における状態情報３１１は、ステージＧ１，・・・，ＧＮに応じて変更される。ここで、ホストコンピュータ１０がステージＧｎであるとは、ホストコンピュータ１０の状態が「プログラム２１０におけるステージＧｎを実行している状態」であることを意味する。したがって、上記のように、状態情報３１１がステージＧ１，・・・，ＧＮに応じて変更されるということは、状態情報３１１がホストコンピュータ１０の状態に応じて変更されることを意味する。
【００３２】
さらに、ＣＰＵ１１は、各種のコマンドをコントローラ３０に対して発行し、コントローラ３０を介して第２記憶部３１にアクセスする機能も有している。特に、本実施の形態におけるＣＰＵ１１は、プログラム２１０に含まれる第２演算情報２１１に基づいて状態変更情報１２０を求め、コントローラ３０に向けて送信する。
【００３３】
プログラム２１０には、ステージＧ１，・・・，Ｇ（Ｎ−１）ごとに、第２演算情報２１１を用いて状態変更情報１２０を求め、コントローラ３０に向けて送信するように記述されている。以下の説明では、ステージＧ１，・・・，Ｇ（Ｎ−１）ごとに求められる状態変更情報１２０を、それぞれＫ２，・・・，ＫＮと称する。なお、状態変更情報１２０は、コントローラ３０に向けて送信された後は、すみやかに記憶装置１２から消去されることが好ましい。
【００３４】
記憶装置１２は、ＣＰＵ１１の一時的なワーキングエリアとして使用されるＲＡＭ（一般的には、高速アクセス可能な揮発性の記憶装置が採用される。）や、ホストコンピュータ１０の起動プログラム（図示せず）等を格納しておく読み取り専用のＲＯＭなどのハードウェアから構成されている。また、図１には示していないが、セキュリティ機能強化のためには、記憶装置１２の一部または全部がＣＰＵ１１の内部にあってもよい。
【００３５】
また、詳細は図示しないが、ホストコンピュータ１０は、ユーザに対して情報を出力する出力装置（ディスプレイやＬＥＤ、スピーカ、プリンタ等）、ユーザが情報を入力するために操作する入力装置（キーボードやボタン、コントローラ、マイク、タッチパネル等）などのハードウェアを適宜備えていてもよい。
【００３６】
メモリシステム１は、読み取り専用の記憶装置であるＲＯＭ２と、各種の情報を必要に応じて書き込むことができるように読み書き可能な記憶装置として構成されるセキュリティメモリ３とを備えている。詳細は図示しないが、本実施の形態におけるメモリシステム１は、先述のように、ホストコンピュータ１０に対して着脱自在に構成されている。このようなメモリシステム１としては、例えば、メモリカードやゲームカセットが該当するがこれに限定されるものではない。
【００３７】
ＲＯＭ２は、コントローラ２０（第１コントローラ）と、第１記憶部２１（第１不揮発性メモリ）とを備えている。
【００３８】
コントローラ２０は、ホストコンピュータ１０からの要求に応じて、第１記憶部２１に格納されている各種データを読み出してホストコンピュータ１０に向けて出力する機能を有している。
【００３９】
また、コントローラ２０は、ホストコンピュータ１０との間で、第１記憶部２１に格納された保護対象の情報（プログラム２１０）に対するセキュリティ機能を提供する。ここで、強調すべきは、本実施の形態におけるメモリシステム１は、ホストコンピュータ１０とＲＯＭ２との間において、任意のセキュリティ機能を採用することができる点である。例えば、メモリシステム１は、コントローラ２０によって、既存のセキュリティ機能を引き継ぐように設計することができる。したがって、既に市場に多数流通しているコンピュータ（既存のセキュリティ機能を採用したコンピュータ）に搭載されている当該セキュリティ機能が、メモリシステム１と当該コンピュータとの間の障害となることはない。
【００４０】
本実施の形態における第１記憶部２１は、ホストコンピュータ１０によるデータの書き込みができない記憶素子により構成されている。したがって、ＲＯＭ２は、メモリシステム１において、先述のように読み取り専用の記憶装置（例えば、マスクＲＯＭやＥＰＲＯＭなど）として構成されている。ただし、保護対象の情報を格納する第１不揮発性メモリは必ずしも読み取り専用の記憶装置でなくてもよい。
【００４１】
第１記憶部２１に格納されているプログラム２１０は、保護対象の情報であり、ホストコンピュータ１０によって実行される。このようなプログラム２１０としては、例えば、アプリケーションソフトウェアのプログラムなどが想定されるが、これに限定されるものではない。
【００４２】
プログラム２１０に含まれる第２演算情報２１１は、ホストコンピュータ１０が状態変更情報１２０を演算するための情報であって、本実施の形態では、演算に用いる関数を表現した情報である。以下、第２演算情報２１１に表現される関数を「ｆ(ｘ)」と表す。
【００４３】
また、プログラム２１０に含まれる初期情報２１２は、第２演算情報２１１の引数の初期値である。以下の説明では、初期情報２１２の値を「Ｄ１」と称する。
【００４４】
すなわち、ホストコンピュータ１０は、ステージＧ１（初期ステージ）における状態変更情報１２０となる「Ｋ２」を、式１により求めることができる。
【００４５】
Ｋ２＝ｆ(Ｄ１)  ・・・  式１
【００４６】
なお、初期ステージＧ１において求められる「Ｋ２」は、いわば状態変更情報１２０の初期値である。そして、式１の右辺は、第２演算情報２１１および初期情報２１２であり、いずれもＲＯＭ２から読み出される情報であって、いずれも既存のセキュリティ機能による読み出しが可能な情報である。したがって、例えば、「Ｋ２」を初期情報２１２としてＲＯＭ２に格納しておき、ステージＧ１においてコントローラ３０に向けて送信するときにＲＯＭ２から読み出して使用しても、セキュリティ強度的にはあまり変わらない。すなわち、状態変更情報１２０の初期値「Ｋ２」に関しては、必ずしも演算により求めなくてもよい。
【００４７】
セキュリティメモリ３は、コントローラ３０（第２コントローラ）と、必要不可欠情報３１０、状態情報３１１および第１演算情報３１２が格納される第２記憶部３１（第２不揮発性メモリ）とを備えている。
【００４８】
必要不可欠情報３１０は、予め第２記憶部３１に格納されている情報であって、ホストコンピュータ１０がプログラム２１０を使用する際に必要となる情報である。ただし、本実施の形態における必要不可欠情報３１０は、コントローラ３０により適切に復号化されなければ、ホストコンピュータ１０において正常に使用することができないように暗号化されて格納されている。
【００４９】
本実施の形態におけるコンピュータシステムでは、ホストコンピュータ１０がプログラム２１０を実行し、正常に進行させ続けるためには、少なくとも特定の時点において必要不可欠情報３１０（より詳細には必要不可欠情報３１０に含まれる情報の少なくとも一部であって適切に復号化されたもの）が必要となるようにプログラム２１０が予め記述されている。
【００５０】
本実施の形態では、必要不可欠情報３１０は、ホストコンピュータ１０におけるステージＧ１，・・・，Ｇ（Ｎ−１）ごとに、ホストコンピュータ１０からの要求に応じて、コントローラ３０により読み出される。以下の説明では、ステージＧ１，・・・，Ｇ（Ｎ−１）ごとに読み出される必要不可欠情報３１０を、それぞれＤ２，・・・，ＤＮと称する。
【００５１】
必要不可欠情報３１０であるＤ２，・・・，ＤＮは、それぞれステージＧ２，・・・，ＧＮにおいて、ホストコンピュータ１０がプログラム２１０を実行するときに必要な情報となっている。例えば、ホストコンピュータ１０が、プログラム２１０におけるステージＧｎを進行させるためには、必要不可欠情報３１０の「Ｄｎ」が必要となる。すなわち、ホストコンピュータ１０は、ステージＧｎを進行させる過程で、必要不可欠情報３１０の「Ｄｎ」を取得していなければ、ステージＧｎを正常に進行させることが不可能となるように、プログラム２１０および必要不可欠情報３１０が設計されている。このような必要不可欠情報３１０としては、例えば、プログラム２１０の一部（コードの一部）が想定されるが、これに限定されるものではない。
【００５２】
本実施の形態における必要不可欠情報３１０は、ホストコンピュータ１０において状態変更情報１２０を求めるための情報を含んでいる。ただし、ステージＧＮ（最終ステージ）においては、次のステージに遷移するために状態変更情報１２０が作成されることはないので、ステージＧＮにおいて必要となる「ＤＮ」には、状態変更情報１２０を求めるための情報は含まれていない。
【００５３】
すなわち、ホストコンピュータ１０におけるステージＧｎにおいては、ＣＰＵ１１が以下に示す式２を実行することにより、状態変更情報１２０が求められるようにプログラム２１０が記述されている。
【００５４】
Ｋ（ｎ＋１）＝ｆ(Ｄｎ)  ・・・  式２
【００５５】
なお、式２は、式１を一般化した式となっているが、「Ｄ１」は、すでに説明したように、初期情報２１２としてＲＯＭ２の第１記憶部２１に記憶されており、必要不可欠情報３１０には含まれていない。逆に言えば、ホストコンピュータ１０は、セキュリティメモリ３にアクセスすることなく、ステージＧ１において、式２を実行できる。
【００５６】
また、式２において関数ｆ（ｘ）の引数ｘとして用いられる値は、「Ｄｎ」の全体でなく、一部であってもよい。例えば、「Ｄｎ＝ｄｎ＋αｎ」と表現するならば、式２は、「Ｋ（ｎ＋１）＝ｆ(ｄｎ)」と表現されてもよい。
【００５７】
また、式２は、ホストコンピュータ１０がプログラム２１０を進行させている過程において実行される演算である。したがって、ホストコンピュータ１０におけるプログラム２１０の実行の妨げにならないように、関数ｆ(ｘ)としては処理の比較的軽い関数を採用することが好ましい。
【００５８】
状態情報３１１は、コントローラ３０が第２記憶部３１に格納されている必要不可欠情報３１０を読み出してホストコンピュータ１０に出力するときに、コントローラ３０によって参照される情報である。言い換えれば、コントローラ３０は、第２記憶部３１に格納されている状態情報３１１に応じて第２記憶部３１に格納されている情報を読み出してホストコンピュータ１０に出力する。以下では、状態情報３１１を、Ｓ１，・・・，ＳＮと称する場合がある。
【００５９】
また、状態情報３１１は、コントローラ３０によって、ホストコンピュータ１０の状態に応じて（より詳細には、ホストコンピュータ１０におけるプログラム２１０の進行状況に応じて）、Ｓ１，・・・，ＳＮと順次に変更されるが、詳細は後述する。ただし、状態情報３１１の初期値Ｓ１は、予め第２記憶部３１に状態情報３１１として格納されている。
【００６０】
第１演算情報３１２は、ホストコンピュータから取得した状態変更情報１２０に基づいて、コントローラ３０が新たな状態情報３１１を演算するための情報であって、本実施の形態では、当該演算に用いる関数を表現した情報である。以下、第１演算情報３１２に表現される関数を「ｔ(ｙ，ｚ)」と表す。
【００６１】
本実施の形態では、ステージＧｎにおいて求められる新たな状態情報３１１（Ｓ（ｎ＋１））は、状態情報３１１（Ｓｎ）と第１演算情報３１２とに基づいて、以下の式３により求められる。
【００６２】
Ｓ（ｎ＋１）＝ｔ(Ｋ（ｎ＋１），Ｓｎ)  ・・・  式３
【００６３】
ここで、式３は、比較的、時間を要する演算となるように、第１演算情報３１２が定義されている。式３は、コントローラ３０が実行する演算であるから、式３を演算するために比較的長時間を要したとしても、ホストコンピュータ１０におけるプログラム２１０の実行の妨げになるおそれは低い。そして、式３の演算時間は、関数ｔ(ｙ，ｚ)の引数ｚによって制御可能とされている。
【００６４】
本実施の形態において、関数ｔ（ｙ，ｚ）の引数ｚとして用いられる値は、「Ｓｎ」の全体ではなく、「Ｓｎ」の一部である。したがって、「Ｓｎ」の一部であって、引数ｚとして採用される部分を「ｓｎ」と表現し、「Ｓｎ＝ｓｎ＋βｎ」と表現するならば、式３は、より詳細には式４となる。
【００６５】
Ｓ（ｎ＋１）＝ｔ(Ｋ（ｎ＋１），ｓｎ)  ・・・  式４
【００６６】
式４の演算時間を制御するパラメータとしては、例えば、ステップ数、演算の反復回数などが考えられる。すなわち、関数ｔ（ｙ，ｚ）は、引数ｚの値により、これらの値が変化する関数として定義されている。
【００６７】
さらに、状態情報３１１は、暗号化されて格納されている必要不可欠情報３１０を復号化させるための、復号鍵となっている。具体的には、暗号化された「Ｄｎ」をホストコンピュータ１０が使用できる状態に適切に復号化させるための復号鍵が「Ｓｎ」となっている。したがって、暗号化されたＤ２，・・・，ＤＮを復号化させるためには、それぞれ異なる復号鍵であるＳ２，・・・，ＳＮが必要となる。
【００６８】
コントローラ３０の詳細は図示しないが、コントローラ３０は、各種の論理回路と記憶バッファや高速のＲＡＭ、計時回路等から構成されている。コントローラ３０は、ホストコンピュータ１０からの要求に応じて、第２記憶部３１に格納されている各種データを読み出してホストコンピュータ１０に出力する機能と、第２記憶部３１に各種データを格納する機能とを有している。本実施の形態におけるコントローラ３０の機能および動作の詳細については、後述する。
【００６９】
第２記憶部３１は、ホストコンピュータ１０によるデータの読み出しのみではなく、ホストコンピュータ１０によるデータの書き込みも可能な記憶素子で構成されている。したがって、セキュリティメモリ３は、メモリシステム１において、先述のように読み書き可能な記憶装置として構成されている。第２記憶部３１は、特に、必要不可欠情報３１０、状態情報３１１および第１演算情報３１２を格納する。
【００７０】
なお、状態情報３１１および第１演算情報３１２は、コントローラ３０のみが参照する情報であり、セキュリティメモリ３の外部に出力されることがないように構成されていることが好ましい。また、セキュリティメモリ３が備える記憶装置は、そのすべての記憶領域が読み書き可能である必要はない。例えば、必要不可欠情報３１０や第１演算情報３１２は、セキュリティメモリ３内において書き換え不可能な記憶領域に格納されていてもよい。
【００７１】
以上が、メモリシステム１を含むコンピュータシステムの構成および機能の説明である。次に、コンピュータシステムの動作を説明しつつ、本実施の形態における情報保護方法について説明する。
【００７２】
図２は、第１の実施の形態におけるホストコンピュータ１０の動作を示す流れ図である。なお、図２に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１により実行される工程を示す。
【００７３】
電源が投入されると、ホストコンピュータ１０は、まず、所定の初期設定を実行する（ステップＳ１）。ステップＳ１では、記憶装置１２のＲＯＭに記憶されている起動プログラムがＣＰＵ１１により実行され、ホストコンピュータ１０の初期画面が表示される。
【００７４】
初期設定が終了すると、ホストコンピュータ１０は、メモリシステム１が装着されているか否かを判定する（ステップＳ２）。
【００７５】
メモリシステム１を検出すると、ホストコンピュータ１０はメモリシステム１（ＲＯＭ２）にコマンドを発行する。このとき発行されるコマンドは、コントローラ２０に対して、プログラム２１０を出力するように要求するコマンド（以下、「ロードコマンド」と称する。）である。ホストコンピュータ１０は、当該ロードコマンドに応じて、メモリシステム１から出力されるプログラム２１０を記憶装置１２にロードする（ステップＳ３）。
【００７６】
このとき、ロードされるプログラム２１０は、厳密にはプログラム２１０の一部であって全てではない。後述するが、ホストコンピュータ１０は、さらに、残りのプログラム２１０が必要になると、再び、ロードコマンドをメモリシステム１に向けて発行し、必要となったプログラム２１０の部分を追加的にロードする。また、ステップＳ３では、プログラム２１０の一部として第２演算情報２１１および初期情報２１２がロードされる。
【００７７】
次に、ホストコンピュータ１０は、ステップＳ３においてロードしたプログラム２１０の実行を開始することにより、プログラム進行処理（ステップＳ４）を開始する。
【００７８】
プログラム進行処理は、プログラム２１０の終了（アプリケーションの終了）が指示されるまでは、ステップＳ５においてＮｏと判定され、継続される。プログラム２１０の終了は、例えば、ホストコンピュータ１０が備える入力装置（図示せず）をユーザが操作することにより指示されるが、このような指示に限定されるものではなく、他の方法で指示されてもよい。
【００７９】
図３は、第１の実施の形態におけるプログラム進行処理を示す流れ図である。ホストコンピュータ１０は、プログラム２１０を実行し進行させつつ、プログラム２１０を進行させることにより検出される各種の状態を監視している（ステップＳ１０，Ｓ１３，Ｓ１６）。ただし、ホストコンピュータ１０が監視している状態は、図３に示されるものに限定されるものではない。
【００８０】
プログラム進行処理において、プログラム２１０が進行することにより、ステージ遷移がされると（ステップＳ１０においてＹｅｓ。）、ホストコンピュータ１０は状態変更情報１２０を求める（ステップＳ１１）。ホストコンピュータ１０は、ステップＳ１１が実行されるまでに取得されているＤｎ（必要不可欠情報３１０）と、第２演算情報２１１とに基づいて、式２を実行することにより、遷移した新しいステージＧｎにおけるＫ（ｎ＋１）（状態変更情報１２０）を求める。
【００８１】
状態変更情報１２０が求まると、ホストコンピュータ１０は、ステップＳ１１で求めた状態変更情報１２０をメモリシステム１（セキュリティメモリ３）に送信する（ステップＳ１２）。後述するが、状態変更情報１２０を受信すると、セキュリティメモリ３では、状態情報３１１が変更（更新）される。すなわち、状態変更情報１２０は、ホストコンピュータ１０が、セキュリティメモリ３に対して、現在のホストコンピュータ１０の状態を通知し、状態情報３１１を変更することを要求するコマンド（状態変更コマンド）としての意味を持つ。
【００８２】
プログラム進行処理において、新たに追加のプログラム２１０が必要となると（ステップＳ１３においてＹｅｓ。）、ホストコンピュータ１０はメモリシステム１（ＲＯＭ２）に対してロードコマンドを発行する（ステップＳ１４）。
【００８３】
ロードコマンドが発行されると、ＲＯＭ２のコントローラ２０が、ホストコンピュータ１０のロードコマンドに応じたプログラム２１０の一部（追加のプログラム２１０）を第１記憶部２１から読み出してホストコンピュータ１０に出力する。これにより、ホストコンピュータ１０は、適切な、追加のプログラム２１０を取得する（ステップＳ１５）。
【００８４】
以降、ホストコンピュータ１０は、ステップＳ１５で取得したプログラム２１０を実行しつつ、プログラム進行処理を継続する。このように、ホストコンピュータ１０は、新たなプログラム２１０が必要になるたびに、必要なプログラム２１０をコントローラ２０に要求し取得することができる。
【００８５】
なお、ホストコンピュータ１０とＲＯＭ２との間のデータ通信（プログラム２１０のロード等）は、適宜、従来の技術を適用できるため詳細は説明しない。しかし、例えば、ロードコマンドは、発行される時点でのロードの対象となるプログラム２１０の部分を特定する必要がある。したがって、通常は、ロードコマンドには、発行時点におけるホストコンピュータ１０の状態を通知する情報が付加される。このような情報としては、例えば、ホストコンピュータ１０の状態を直接的に示す「Ｇｎ」を用いてもよい。あるいは、プログラム２１０の格納アドレスであってもよい。ロード対象のプログラム２１０の部分は、ホストコンピュータ１０の状態に応じて変化するのであるから、当該プログラム２１０の格納アドレスは、ホストコンピュータ１０の状態に応じて変化し、ホストコンピュータ１０の状態を表現していると言える。
【００８６】
プログラム進行処理において、必要不可欠情報３１０が要求されると（ステップＳ１６においてＹｅｓ。）、ホストコンピュータ１０はメモリシステム１（セキュリティメモリ３）に対して必要不可欠情報３１０を要求するコマンド（必要不可欠情報読み出しコマンド）を発行する（ステップＳ１７）。本実施の形態における必要不可欠情報読み出しコマンドには、読み出す対象となる必要不可欠情報３１０の格納アドレス（第２記憶部３１のアドレス）が付加されている。
【００８７】
詳細は後述するが、必要不可欠情報読み出しコマンドが発行されると、セキュリティメモリ３のコントローラ３０は、当該コマンドに付加されている格納アドレスに応じて第２記憶部３１から情報を読み出し、復号化して、ホストコンピュータ１０に向けて出力する。これにより、ホストコンピュータ１０は、必要不可欠情報３１０を取得する（ステップＳ１８）。
【００８８】
本実施の形態では、ステージＧｎにおいて読み出される必要不可欠情報３１０は、「Ｄ（ｎ＋１）」である。したがって、ホストコンピュータ１０は、ステップＳ１８で取得した必要不可欠情報３１０を、ステージＧ（ｎ＋１）に遷移した後に使用するために記憶装置１２に格納する。特に、ステップＳ１８で取得された必要不可欠情報３１０は、次回に、ステップＳ１１が実行される際に、状態変更情報１２０を求めるために使用される。
【００８９】
なお、プログラム２１０の各ステージ（ステージＧ１，・・・，Ｇ（Ｎ−１））において、ステップＳ１２が実行されてから、ステップＳ１７が実行されるまでの時間（以下、「時間Ｔｎ」と称する。）は、プログラム２１０の進行速度に依存する。したがって、当該プログラム２１０の提供者は、時間Ｔｎのおよその値を把握でき、これを管理しているものとする。
【００９０】
以上が、第１の実施の形態におけるホストコンピュータ１０の動作である。次に、第１の実施の形態におけるメモリシステム１の動作を説明する。ただし、以下において、メモリシステム１（ＲＯＭ２）のコントローラ２０の動作については、従来の技術を適用することが可能であるため、適宜説明を省略する。
【００９１】
図４は、第１の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。セキュリティメモリ３は、起動中のホストコンピュータ１０にメモリシステム１が装着された状態で動作する。
【００９２】
メモリシステム１が動作中において、セキュリティメモリ３のコントローラ３０は、ホストコンピュータ１０からの各種コマンドを受け付けたり、各種の状態を検出したりすることが可能な状態となっている（ステップＳ２０，Ｓ２４）。
【００９３】
以下、メモリシステム１に電力が供給され、コントローラ３０がホストコンピュータ１０からのコマンドを受け付けることが可能となっている状態を「待ち受け状態」と称する。ただし、コントローラ３０が受け付けるコマンドは図４に示すものに限定されるものではない。
【００９４】
待ち受け状態において、ホストコンピュータ１０から送信された状態変更情報１２０を受信すると（ステップＳ２０においてＹｅｓ。）、コントローラ３０は、現在格納されている状態情報３１１を変更するために、新たな状態情報３１１を演算する処理を開始する（ステップＳ２１）。
【００９５】
すでに説明したように、コントローラ３０は、本実施の形態では、現在格納されている状態情報３１１（Ｓｎ）と第１演算情報３１２（ｔ(ｙ，ｚ)）とに基づいて、式４により、新たな状態情報３１１（Ｓ（ｎ＋１））を演算する。
【００９６】
ステップＳ２１が開始されると、コントローラ３０は、ステップＳ２１における演算が終了してから（ステップＳ２２においてＹｅｓ。）、第２記憶部３１に記憶されている状態情報３１１（Ｓｎ）を、新たに求めた状態情報３１１（Ｓ（ｎ＋１））に変更する（ステップＳ２３）。
【００９７】
先述のように、ステップＳ２１における演算（式４の演算）は、比較的時間を要する演算となるように、関数ｔ(ｙ，ｚ)が定義されている。ステップＳ２１において新たに求める状態情報３１１は、次のステージにおいて必要となる必要不可欠情報３１０を復号化するための復号鍵である。したがって、当該必要不可欠情報３１０が読み出されるとき（本実施の形態では、本ステージが終了するときまでに読み出される。）までに、当該新たに求める状態情報３１１が第２記憶部３１に格納されていなければならない。
【００９８】
ホストコンピュータ１０が状態変更情報１２０を送信してから、必要不可欠情報３１０の読み出しを要求するまでの時間は「Ｔｎ」である。したがって、ステップＳ２１における演算を含めて、状態情報３１１を変更する処理は、時間Ｔｎ以内で終了しなければならないことになる。しかし、先述のように、プログラム２１０の提供者は、通常、時間Ｔｎのおよその値を把握しているため、状態情報３１１の変更処理が時間Ｔｎ以内で終了するように、「Ｓｎ」を定義することができる。より詳細には、プログラム２１０の提供者は、そのような「ｓｎ」を含む「Ｓｎ」が各ステージにおいて求まるように必要不可欠情報３１０、「Ｓ１（状態情報３１１の初期値）」および第１演算情報３１２を定義する。
【００９９】
これにより、ステップＳ２１が開始されてから、ステップＳ２３が実行されて新たな状態情報３１１が第２記憶部３１に格納されるまで、比較的長い時間、状態情報３１１は演算中の中間値として存在することになる。したがって、この間に、不正に必要不可欠情報３１０を取得しようとしても、状態情報３１１が正常な値として求まっていないため、そのような不正行為者は、適切に復号化された必要不可欠情報３１０を得ることができない。すなわち、不正行為者は、例えば、そのステージが終了する程度の時間を各ステージごとに待ってからでないと、適切に復号化された必要不可欠情報３１０を読み出すことができないことになり、解析に時間を要することになる。
【０１００】
このように、本実施の形態におけるコントローラ３０は、第２記憶部３１に格納されている状態情報３１１に応じて、当該状態情報３１１を、新たな状態情報３１１に変更するタイミングを制御する。これにより、状態情報３１１が正式な値に書き換えられるまでの時間を引き延ばすことができ、例えば、ホストコンピュータ１０が状態変更情報１２０を送信した直後に状態情報３１１が変更される場合に比べて、セキュリティレベルが向上する。
【０１０１】
なお、上記の説明では省略したが、本実施の形態におけるコントローラ３０は、処理（特にプログラム進行処理）が中断された際には、ユーザのセーブデータや、演算途中の状態情報３１１等を第２記憶部３１に退避して格納する。そして、プログラム２１０の実行が再開されたときには、それら格納された情報を使用して、中断されたときの状態に復帰する。すなわち、コントローラ３０は、ホストコンピュータ１０においてプログラム２１０の使用が中断されるときに新たな状態情報３１１を生成するための演算の途中経過を第２記憶部３１に格納するとともに、ホストコンピュータ１０がプログラム２１０の使用を再開するときに第２記憶部３１に格納されている上記演算の途中経過を読み出して当該演算を再開させる。
【０１０２】
ステップＳ２３を実行すると、コントローラ３０は待ち受け状態に戻る。
【０１０３】
待ち受け状態において、ホストコンピュータ１０から必要不可欠情報読み出しコマンドを受信すると（ステップＳ２４においてＹｅｓ。）、コントローラ３０は、当該コマンドに付加されている格納アドレスを用いて、第２記憶部３１の当該格納アドレスから情報を読み出す（ステップＳ２５）。
【０１０４】
ステップＳ２５においてコントローラ３０により第２記憶部３１から読み出される情報は、暗号化されているとはいえ、適切な復号化が実行されれば、ホストコンピュータ１０による使用が可能な必要不可欠情報３１０となる情報である。
【０１０５】
次に、コントローラ３０は、第２記憶部３１に格納されている状態情報３１１を読み出し、これを復号鍵として使用して、ステップＳ２５において読み出した情報を復号化する（ステップＳ２６）。
【０１０６】
すでに説明したように、ステップＳ２６が実行されるときまでに、状態情報３１１が適切に変更されていれば、ステップＳ２６において適切な復号化が実行され、適切な必要不可欠情報３１０が復号化される。
【０１０７】
次に、コントローラ３０は、ステップＳ２６において復号化された情報を、ホストコンピュータ１０に向けて出力する（ステップＳ２７）。そして、ステップＳ２７を実行すると、コントローラ３０は待ち受け状態に戻る。
【０１０８】
本実施の形態におけるメモリシステム１は、必要不可欠情報読み出しコマンドに応答して、必ず必要不可欠情報３１０を出力する。しかし、必要不可欠情報３１０を取得したホストコンピュータ１０は、メモリシステム１から出力された当該必要不可欠情報３１０が適切に復号化されているか否かを判定する術はない。したがって、例え、適切な復号化がされていない必要不可欠情報３１０を取得したとしても、ホストコンピュータ１０は、そのままプログラム進行処理を継続する。そして、現実に必要不可欠情報３１０を使用する段階になって、初めて、ホストコンピュータ１０はプログラム２１０の続行が不可能な状態に陥り、停止することになる。
【０１０９】
このように、適切な復号化がされた必要不可欠情報３１０をメモリシステム１から常に取得していなければ、メモリシステム１に接続された外部のコンピュータ（不正なコンピュータを含む。）は、プログラム２１０の実行が不可能となり停止する。そして、適切に復号化された必要不可欠情報３１０をメモリシステム１から取得するには、外部のコンピュータは、正常に（プログラム２１０に設計されたとおりに）状態遷移を経なければならない。すなわち、プログラム２１０を最初のステージＧ１から最後のステージＧＮまで正常に実行しなければ、必要不可欠情報３１０を正常に読み出すことができず、解析に時間を要することになる。
【０１１０】
また、このような機能は、例えば、保護対象の情報ごと（ゲームタイトルごとや改訂版ごと）に頻繁に暗号アルゴリズム等を変更でき、不正な複製者は、その度に解析作業を行わなければならず、違法な複製品（海賊版）を製造するまでに一定以上の時間を要することとなる。特に、プログラム２１０がゲームソフトウェアなどである場合、発売開始直後から海賊版が流通すると正規版の売れ行きに大きな影響がでてしまうという特性がある。したがって、このような市場の製品においては、例え完全に海賊版の製造を防止できなくとも、発売開始から一定期間でも海賊版の出現を遅らせることができるならばその効果は大きいといえる。
【０１１１】
以上のように、第１の実施の形態におけるメモリシステム１は、プログラム２１０を格納する第１記憶部２１と、第１記憶部２１に対するアクセスを制御するコントローラ２０と、状態情報３１１とホストコンピュータ１０がプログラム２１０を使用する際に必要となる必要不可欠情報３１０とを格納する第２記憶部３１と、ホストコンピュータ１０の状態に応じて第２記憶部３１に格納されている状態情報３１１を変更するとともに、第２記憶部３１に格納されている状態情報３１１に応じて第２記憶部３１に格納されている必要不可欠情報３１０を読み出してホストコンピュータ１０に出力するコントローラ３０とを備える。これにより、すでに流通しているホストコンピュータ１０との互換性を維持しつつ、安価に、当該メモリシステム１に格納されたプログラム２１０の不正な複製を抑制することができる。
【０１１２】
特に、コントローラ３０は、ホストコンピュータ１０の状態に応じて当該ホストコンピュータ１０から送信される状態変更情報１２０を取得し、当該取得した状態変更情報１２０に応じて新たな状態情報３１１を生成し、第２記憶部３１に格納されている状態情報３１１を当該新たな状態情報３１１に変更する。これにより、容易に、ホストコンピュータ１０の状態を反映した状態情報３１１を生成することができる。
【０１１３】
また、第２記憶部３１は第１演算情報３１２を格納しており、コントローラ３０は、ホストコンピュータ１０から取得した状態変更情報１２０と第２記憶部３１に格納されている第１演算情報３１２とに基づいて演算することにより新たな状態情報３１１を生成する。このように、ホストコンピュータ１０の状態に応じて、その都度、演算によって状態情報３１１を生成することにより、予めすべての状態における状態情報３１１を一覧的に格納しておく場合に比べて、セキュリティレベルが向上する。
【０１１４】
また、コントローラ３０は、ホストコンピュータ１０においてプログラム２１０の使用が中断されるときに新たな状態情報３１１を生成するための演算の途中経過を第２記憶部３１に格納するとともに、ホストコンピュータ１０がプログラム２１０の使用を再開するときに第２記憶部３１に格納されている上記演算の途中経過を読み出して当該演算を再開させる。
【０１１５】
また、コントローラ３０は、第２記憶部３１に格納されている状態情報３１１に応じて、当該状態情報３１１を、新たな状態情報３１１に変更するタイミングを制御する。これにより、状態情報３１１が正常な値に変更されたタイミングを特定することが困難となり、解析に時間を要することとなる。また、少なくとも、各ステージにおいて、状態情報３１１が正常な値に変更されるまで、待つ必要があるため、さらに解析に時間を要することとなる。
【０１１６】
また、第１記憶部２１は、ホストコンピュータ１０が状態変更情報１２０を演算するための第２演算情報２１１を格納する。言い換えれば、本実施の形態では、状態変更コマンドに相当する状態変更情報１２０が演算により求められる。
【０１１７】
例えば、状態変更コマンドを予め定義しておいて、ホストコンピュータ１０が、プログラム２１０の進行状況に応じてこれを発行することももちろん可能である。しかし、そのように構成した場合、状態変更コマンドを定義するファイルを不正に読み出されると、各状態変更コマンドが一瞬にしてすべて特定されてしまうことになる。その場合は、メモリシステム１に接続された外部のコンピュータ（不正目的のコンピュータを含む。）は、特定した状態変更コマンドを当該外部のコンピュータ側の状態に関係なく、自由に発行することができるようになる。こうなると、外部のコンピュータ（不正にセキュリティメモリ３の内容を特定しようとするコンピュータ）は、順次に、正常なルートで状態遷移する必要がなくなるため、短期間でセキュリティメモリ３の内容（特に、必要不可欠情報３１０）を解析される危険性が増大する。すなわち、状態変更コマンドを予め定義しておく場合は、セキュリティレベルは、当該定義ファイルのセキュリティレベルに依存する。
【０１１８】
したがって、ホストコンピュータ１０が状態変更情報１２０を、ステージの進行状況に応じて、演算により生成することにより、例えば、状態変更情報１２０を予め一覧的に定義しておく場合に比べてセキュリティレベルが向上する。
【０１１９】
また、第２記憶部３１に格納されている必要不可欠情報３１０は、ホストコンピュータ１０において状態変更情報１２０を求めるための情報を含むため、ステージに応じた適切な必要不可欠情報３１０を取得しなければ、当該ステージに応じた適切な状態変更情報１２０を求めることができない。したがって、セキュリティレベルがさらに向上する。
【０１２０】
また、第２記憶部３１において必要不可欠情報３１０は暗号化された状態で格納されており、コントローラ３０は、必要不可欠情報３１０を状態情報３１１を用いて復号化して、ホストコンピュータ１０に出力する。このように、必要不可欠情報３１０を暗号化して格納しておくため、セキュリティレベルが向上する。また、各ステージごとに読み出される必要不可欠情報３１０は、それぞれ異なるアルゴリズム（ホストコンピュータ１０の状態に応じて変化する状態情報３１１で復号化されるアルゴリズム）で暗号化しておくことができるため、共通の暗号化が施されている場合に比べてセキュリティレベルが向上する。
【０１２１】
さらに、メモリシステム１では、第１記憶部２１に格納されている保護対象の情報（プログラム２１０）ごとに、ホストコンピュータ１０の状態（ステージＧ１，・・・，ＧＮ）が定義されている。すなわち、あるプログラム（例えばプログラム２１０）について本発明に係るセキュリティ機能が破られたとしても、他のプログラム（例えばプログラム２１０の改訂版プログラム）についてはステージＧ１，・・・，ＧＮとは異なる状態を新たに定義することができる。したがって、不正行為者は、保護対象の情報ごとに、セキュリティを破らなければならず、例えば、新しいゲームタイトルが発売されたときにおいて、すぐに海賊版（不正複製版）を作成することはできない。
【０１２２】
＜２．  第２の実施の形態＞
第１の実施の形態では、必要不可欠情報３１０が暗号化されて格納されていた。しかし、本発明によれば、必要不可欠情報３１０を暗号化しなくても、セキュリティレベルを向上させることができる。
【０１２３】
図５は、第２の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。なお、第２の実施の形態におけるコンピュータシステムにおいて第１の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。また、図５に示すステップＳ３０ないしＳ３３は、第２の実施の形態におけるステップＳ２０ないしＳ２３と同様の工程であるので説明を省略する。
【０１２４】
待ち受け状態において、必要不可欠情報読み出しコマンドを受信すると（ステップＳ３４においてＹｅｓ。）、コントローラ３０は、第２の実施の形態における必要不可欠情報読み出しコマンドに付加されているアドレス（以下、「付加アドレス」と称する。）を、第２記憶部３１の格納アドレスに変換するための演算を実行する（ステップＳ３５）。
【０１２５】
第１の実施の形態におけるホストコンピュータ１０は、必要不可欠情報読み出しコマンドに第２記憶部３１の格納アドレスを付加して、セキュリティメモリ３に対して発行していた。しかし、第２の実施の形態において、付加アドレスは、そのままでは目的の必要不可欠情報３１０の格納アドレスを示すものとはならない。
【０１２６】
コントローラ３０は、ステップＳ３５において、第２記憶部３１に格納されている状態情報３１１を付加アドレスのオフセット値として用いることにより、付加アドレスを格納アドレスに変換する。
【０１２７】
そして、コントローラ３０は、求めた格納アドレスに応じて、第２記憶部３１から情報を読み出し（ステップＳ３６）、ホストコンピュータ１０に向けて送信する（ステップＳ３７）。
【０１２８】
以上のように、第２の実施の形態におけるコントローラ３０は、第２記憶部３１に格納されている状態情報３１１を用いて第２記憶部３１の格納アドレスを演算し、当該格納アドレスを用いて第２記憶部３１に格納されている必要不可欠情報３１０を読み出して、ホストコンピュータ１０に出力する。このように構成しても、第１の実施の形態と同様の効果を得ることができる。
【０１２９】
また、第１の実施の形態では、各ステージにおける復号鍵（状態情報３１１）が異なるために、同一内容の必要不可欠情報３１０であっても、各ステージごとにそれぞれ異なる暗号化を施して格納しておく必要があった。すなわち、同一内容の必要不可欠情報３１０であっても重複して第２記憶部３１にそれぞれ格納しておく必要があった。しかし、第２の実施の形態では、正常な状態情報３１１が求まっていなければ、目的の必要不可欠情報３１０を読み出せないように構成することで、異なるステージで読み出される同一内容の必要不可欠情報３１０を重複して格納する必要がない。
【０１３０】
なお、第２の実施の形態において、必要不可欠情報３１０を各ステージにおいて共通の暗号化を施して格納しておいてもよい。共通の暗号化であれば、状態情報３１１によらずに、画一的に処理できるため、同一内容の必要不可欠情報３１０を重複して格納しておく必要はない。これにより、暗号化されていない必要不可欠情報３１０を格納する場合に比べてセキュリティレベルが向上する。
【０１３１】
＜３．  第３の実施の形態＞
上記実施の形態では、初期情報２１２（Ｄ１）が第１記憶部２１に格納されており、必要不可欠情報３１０は、Ｄ２，・・・，ＤＮであった。しかし、このような例に限定されるものではない。
【０１３２】
図６は、第３の実施の形態におけるメモリシステム１を備えるコンピュータシステムを示す図である。第３の実施の形態におけるメモリシステム１は、第１記憶部２１に、プログラム２１０ａを格納している点と、第２記憶部３１に必要不可欠情報３１０ａを格納している点が第１の実施の形態におけるメモリシステム１と異なる。以下、第３の実施の形態におけるコンピュータシステムにおいて第１の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
【０１３３】
プログラム２１０ａには、プログラム２１０のように、初期情報２１２が含まれていない。したがって、第３の実施の形態におけるホストコンピュータ１０は、ステージＧ１（初期ステージ）における状態変更情報１２０となる「Ｋ２」を、式１により求めるときに、「Ｄ１」をＲＯＭ２から取得することはできない。
【０１３４】
一方、第３の実施の形態における必要不可欠情報３１０ａは、第１の実施の形態における必要不可欠情報３１０と異なり、Ｄ１，Ｄ２，・・・，ＤＮである。すなわち、ステージＧ１において「Ｋ２」を求めるために必要となる「Ｄ１」が、必要不可欠情報３１０ａに含まれており、第２記憶部３１に格納されている。したがって、第３の実施の形態におけるホストコンピュータ１０は、式１を実行する際に、「Ｄ１」をセキュリティメモリ３から取得する。ただし、必要不可欠情報３１０ａにおけるＤ１，Ｄ２，・・・，ＤＮのうち、「Ｄ１」は、暗号化されない状態で格納される。
【０１３５】
このように、第３の実施の形態におけるメモリシステム１も、第１の実施の形態と同様の効果を得ることができる。
【０１３６】
＜４．  変形例＞
以上、本発明の実施の形態について説明してきたが、本発明は上記実施の形態に限定されるものではなく様々な変形が可能である。
【０１３７】
例えば、上記実施の形態では、メモリシステム１において、保護対象の情報を格納するＲＯＭ２と、セキュリティメモリ３とが一体構造物を構成していた。しかし、例えば、ＲＯＭ２の第１記憶部２１に相当する記憶媒体をＣＤ−ＲＯＭで構成し、ＲＯＭ２のコントローラ２０をホストコンピュータ１０に設けたＣＤ−ＲＯＭドライブ装置とＣＰＵ１１とで構成し、着脱可能かつ書き込み可能な記憶媒体にセキュリティメモリ３に相当する構成のみを搭載して実現することも可能である。
【０１３８】
また、第１の実施の形態では、新たな状態情報３１１を演算する際において、現在の状態情報３１１は、演算速度（新たな状態情報３１１に変更するタイミング）を制御するためにのみ用いられていた。しかし、コントローラ３０は、第２記憶部３１に格納されている状態情報３１１に基づいて新たな状態情報３１１を生成するように構成してもよい。すなわち、現在の状態情報３１１（Ｓｎ−１）の一部によって新たな状態情報３１１（Ｓｎ）の値が変わるように構成してもよい。例えば、状態情報３１１を求める関数ｔ(ｙ，ｚ)の引数ｙに、（Ｓｎ−１）の一部を用いてもよい。
【０１３９】
また、上記実施の形態では、第２記憶部３１に格納されている状態情報３１１を、新たな状態情報３１１に変更するタイミングは、演算速度によって制御していたが、例えば、単に、所定の時間だけ変更処理を待機するようにしてもよい。
【０１４０】
また、上記実施の形態に示した各工程は、あくまでも例示であって、同様の効果が得られるならば、各工程における処理内容や、各工程の実行順は、適宜、変更されてもよい。
【符号の説明】
【０１４１】
１  メモリシステム
１０  ホストコンピュータ
１２０  状態変更情報
２  ＲＯＭ
２０，３０  コントローラ
２１  第１記憶部
２１０，２１０ａ  プログラム
２１１  第２演算情報
２１２  初期情報
３  セキュリティメモリ
３１  第２記憶部
３１０，３１０ａ  必要不可欠情報
３１１  状態情報
３１２  第１演算情報
【図１】
0005808651.tif 000002
【図２】
0005808651.tif 000003
【図３】
0005808651.tif 000004
【図４】
0005808651.tif 000005
【図５】
0005808651.tif 000006
【図６】
0005808651.tif 000007