(57)【特許請求の範囲】
【請求項１】
ホストコンピュータに接続されるメモリシステムであって、
保護対象の情報を格納する第１不揮発性メモリと、
前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、
前記ホストコンピュータからの格納情報を格納する第２不揮発性メモリと、
前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態に応じて前記第２不揮発性メモリのアドレスのオフセット値を求める第２コントローラと、
を備え、
前記格納情報は、前記ホストコンピュータが前記保護対象の情報を使用するために必要不可欠な情報であり、
前記第２コントローラは、前記ホストコンピュータからの前記第２不揮発性メモリへのアクセス要求に対して、前記オフセット値を用い、
前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態を進行状況情報として格納するとともに、前記ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新するメモリシステム。
【請求項２】
請求項１に記載のメモリシステムであって、
前記第２コントローラは、前記ホストコンピュータからの読み出しコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第２不揮発性メモリの読み出しアドレスを求め、前記読み出しアドレスで示される領域から読み出した情報を、前記読み出しコマンドへの応答として前記ホストコンピュータに出力するメモリシステム。
【請求項３】
請求項１または２に記載のメモリシステムであって、
前記第２コントローラは、前記ホストコンピュータからの書き込みコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第２不揮発性メモリの書き込みアドレスを求め、前記書き込みアドレスで示される領域に前記書き込みコマンドとともに入力される格納情報を前記第２不揮発性メモリに格納するメモリシステム。
【請求項４】
請求項１ないし３のいずれかに記載のメモリシステムであって、
前記ホストコンピュータからの進行状況取得コマンドに応じて、前記ホストコンピュータに対して前記進行状況情報を出力するメモリシステム。
【請求項５】
請求項１ないし４のいずれかに記載のメモリシステムであって、
前記進捗更新コマンドを取得したとき、前記第２不揮発性メモリに新たな格納情報を格納した後に、前記進行状況情報を更新するメモリシステム。
【請求項６】
請求項１ないし５のいずれかに記載のメモリシステムであって、
前記進捗更新コマンドを取得したとき、前記第２不揮発性メモリから格納情報を読み出した後に、前記進行状況情報を更新するメモリシステム。
【請求項７】
請求項１ないし６のいずれかに記載のメモリシステムであって、
前記ホストコンピュータからのオフセット取得コマンドに応じて、前記ホストコンピュータに対して前記オフセット値を出力するメモリシステム。
【請求項８】
保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、
前記ホストコンピュータからの格納情報を格納する不揮発性メモリと、
前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求めるコントローラと、
を備え、
前記格納情報は、前記ホストコンピュータが前記保護対象の情報を使用するために必要不可欠な情報であり、
前記コントローラは、前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用い、
前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態を進行状況情報として格納するとともに、前記ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新するセキュリティメモリ。
【請求項９】
ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、
前記ホストコンピュータが前記保護対象の情報を使用するために必要不可欠な情報である格納情報を、前記ホストコンピュータから不揮発性メモリに格納する工程と、
前記不揮発性メモリから格納情報を読み出す工程と、
前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求める工程と、
前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態を進行状況情報として格納する工程と、
前記ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新する工程と、
を有し、
前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いる情報保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置（例えば、半導体メモリなど）に格納された情報が不正に複製されないように保護する技術に関する。
【背景技術】
【０００２】
従来より、ホストコンピュータに接続される記憶装置に記憶された保護対象の情報を不正な複製から保護する技術が知られている。例えば、そのような技術が特許文献１に記載されている。
【０００３】
特許文献１には、ホストコンピュータと接続されるメモリシステムに、セキュリティ機能を備えたコントローラと不揮発性メモリとを設けている。そして、ホストコンピュータからのアクセスに対しては、当該コントローラがセキュリティ機能を発揮することにより、不揮発性メモリ上に格納された情報を保護する技術が記載されている。
【０００４】
しかし、特許文献１に記載されている技術をもってしても、不正な複製を完全に防止することはできない。そして、メモリシステムのコントローラにおけるセキュリティ機能が破られ、不揮発性メモリに格納された情報（保護対象の情報）を違法に複製され、配布される事態が現実に生じている。特許文献１に記載されている技術では、不揮発性メモリに格納されているプログラムにかかわらず、ホストコンピュータとメモリシステムとが協働してセキュリティ機能を提供しているため、一度、このセキュリティが破られれば、すべてのプログラムが不正に複製されることを許す事態にもなりかねない。
【０００５】
このような事態を安易に解決する手法として、コントローラが提供するセキュリティ機能を変更することが考えられる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−０４０９４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところが、特許文献１に記載された技術において、メモリシステムのコントローラにおけるセキュリティ機能を変更すると、ホストコンピュータ側にも変更が必要になるという問題があった。すなわち、ホストコンピュータがすでに多数市場に流通している現状では、メモリシステムのセキュリティ機能が破られるたびに、ホストコンピュータ側の設計変更まで行うことは、互換性の維持やコストの面で現実的ではないという問題があった。
【０００８】
本発明は、上記課題に鑑みてなされたものであり、ホストコンピュータに接続されるメモリシステムに関して、すでに流通しているホストコンピュータとの互換性を維持しつつ、安価に、当該メモリシステムに格納された情報の不正な複製を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するため、請求項１の発明は、ホストコンピュータに接続されるメモリシステムであって、保護対象の情報を格納する第１不揮発性メモリと、前記第１不揮発性メモリに対するアクセスを制御する第１コントローラと、前記ホストコンピュータからの格納情報を格納する第２不揮発性メモリと、前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態に応じて前記第２不揮発性メモリのアドレスのオフセット値を求める第２コントローラとを備え、前記格納情報は、前記ホストコンピュータが前記保護対象の情報を使用するために必要不可欠な情報であり、前記第２コントローラは、前記ホストコンピュータからの前記第２不揮発性メモリへのアクセス要求に対して、前記オフセット値を用い、前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態を進行状況情報として格納するとともに、前記ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新する。
【００１０】
また、請求項２の発明は、請求項１の発明に係るメモリシステムであって、前記第２コントローラは、前記ホストコンピュータからの読み出しコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第２不揮発性メモリの読み出しアドレスを求め、前記読み出しアドレスで示される領域から読み出した情報を、前記読み出しコマンドへの応答として前記ホストコンピュータに出力する。
【００１１】
また、請求項３の発明は、請求項１または２の発明に係るメモリシステムであって、前記第２コントローラは、前記ホストコンピュータからの書き込みコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第２不揮発性メモリの書き込みアドレスを求め、前記書き込みアドレスで示される領域に前記書き込みコマンドとともに入力される格納情報を前記第２不揮発性メモリに格納する。
【００１３】
また、請求項４の発明は、請求項１ないし３のいずれかの発明に係るメモリシステムであって、前記ホストコンピュータからの進行状況取得コマンドに応じて、前記ホストコンピュータに対して前記進行状況情報を出力する。
【００１４】
また、請求項５の発明は、請求項１ないし４のいずれかの発明に係るメモリシステムであって、前記進捗更新コマンドを取得したとき、前記第２不揮発性メモリに新たな格納情報を格納した後に、前記進行状況情報を更新する。
【００１５】
また、請求項６の発明は、請求項１ないし５のいずれかの発明に係るメモリシステムであって、前記進捗更新コマンドを取得したとき、前記第２不揮発性メモリから格納情報を読み出した後に、前記進行状況情報を更新する。
【００１７】
また、請求項７の発明は、請求項１ないし６のいずれかに記載のメモリシステムであって、前記ホストコンピュータからのオフセット取得コマンドに応じて、前記ホストコンピュータに対して前記オフセット値を出力する。
【００１８】
また、請求項８の発明は、保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、前記ホストコンピュータからの格納情報を格納する不揮発性メモリと、前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求めるコントローラとを備え、前記格納情報は、前記ホストコンピュータが前記保護対象の情報を使用するために必要不可欠な情報であり、前記コントローラは、前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用い、前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態を進行状況情報として格納するとともに、前記ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新する。
【００１９】
また、請求項９の発明は、ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、前記ホストコンピュータが前記保護対象の情報を使用するために必要不可欠な情報である格納情報を、前記ホストコンピュータから不揮発性メモリに格納する工程と、前記不揮発性メモリから格納情報を読み出す工程と、前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求める工程と、前記ホストコンピュータが前記保護対象の情報を使用することにより生じる前記ホストコンピュータの状態を進行状況情報として格納する工程と、前記ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新する工程とを有し、前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いる。
【発明の効果】
【００２０】
請求項１ないし９に記載の発明は、ホストコンピュータが保護対象の情報を使用することにより生じるホストコンピュータの状態に応じてアドレスのオフセット値を求め、ホストコンピュータからのアクセス要求に対して、当該オフセット値を用いることにより、保護対象の情報を複製しただけでは、当該情報を正常に使用することができず、セキュリティレベルが向上する。また、保護対象の情報ごとに容易に変更可能であるとともに、ホストコンピュータの仕様を変更することなく、適用が可能であるため、コストを抑制できる。
また、ホストコンピュータが保護対象の情報を使用することにより生じるホストコンピュータの状態を進行状況情報として格納することにより、必要に応じて、その都度、ホストコンピュータからその時点のホストコンピュータの状態を通知してもらう必要がない。
また、ホストコンピュータからの進捗更新コマンドを取得してから所定時間が経過した後に、進行状況情報を更新することにより、進捗更新コマンドが発行された直後に進行状況情報を更新するよりも、第三者に動作を見破られにくい。特に、外部のコンピュータから、格納情報を読み書きされても、その間に所定時間が経過していなければ、第三者からは通常のメモリとして観測されるので、セキュリティ機能を見破られにくい。
【図面の簡単な説明】
【００２１】
【図１】本発明に係るメモリシステムを備えるコンピュータシステムを示す図である。
【図２】第１の実施の形態におけるメモリアレイの記憶領域と各記憶領域に格納される情報とを例示する図である。
【図３】第１の実施の形態におけるオフセット情報を例示する図である。
【図４】第１の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図５】第１の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図６】第１の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図７】第１の実施の形態におけるプログラム進行処理を示す流れ図である。
【図８】第２の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図９】第２の実施の形態におけるプログラム進行処理を示す流れ図である。
【発明を実施するための形態】
【００２２】
以下、本発明の好適な実施の形態について、添付の図面を参照しつつ、詳細に説明する。
【００２３】
＜１．  第１の実施の形態＞
図１は、本発明に係るメモリシステム１を備えるコンピュータシステムを示す図である。コンピュータシステムは、本発明に係るメモリシステム１と、一般的なコンピュータとしての機能を有するホストコンピュータ１０とを備えている。
【００２４】
メモリシステム１は、読み取り専用の記憶装置であるＲＯＭ２と、各種の情報を必要に応じて書き込むことができるように読み書き可能な記憶装置として構成されるセキュリティメモリ３とを備えている。詳細は図示しないが、本実施の形態におけるメモリシステム１は、ホストコンピュータ１０に対して着脱自在に構成されている。このようなメモリシステム１としては、例えば、メモリカードやゲームカセットが該当するがこれに限定されるものではない。
【００２５】
ＲＯＭ２は、コントローラ２０と、メモリアレイ２１（第１不揮発性メモリ）とを備えている。コントローラ２０は、ホストコンピュータ１０からの要求に応じて、メモリアレイ２１に格納されている各種データを読み出してホストコンピュータ１０に出力する機能を有している。また、コントローラ２０は、ホストコンピュータ１０との間で、メモリアレイ２１に格納された保護対象の情報に対するセキュリティ機能を提供する。コントローラ２０が提供するセキュリティ機能としては従来より提案されている様々な手法を適宜採用できるため、以下において詳細な説明は省略する。
【００２６】
本実施の形態におけるメモリアレイ２１を構成する記憶素子は、ホストコンピュータ１０によるデータの書き込みができない素子である。したがって、ＲＯＭ２は、メモリシステム１において、先述のように読み取り専用の記憶装置（例えば、マスクＲＯＭやＥＰＲＯＭなど）として構成されている。ただし、保護対象の情報を格納する第１不揮発性メモリは必ずしも読み取り専用の記憶装置でなくてもよい。
【００２７】
メモリアレイ２１に格納されているプログラム２２は、保護対象の情報であり、ホストコンピュータ１０によって実行される。そして、プログラム２２には、ホストコンピュータ１０によって実行されるときの当該プログラム２２の進行状況がマーカーコード等により定義されている。
【００２８】
以下の説明では、プログラム２２の進行状況として、当該プログラム２２には、順次に、Ｎ個のステージ（Ｓ１，・・・，ＳＮ）が定義されているものとする（Ｎは２以上の自然数。）。また、その時点におけるプログラム２２の進行状況（現在のステージ）を、「Ｓ０」と称し、直前のステージを「Ｓ−１」と称し、遷移先のステージを「Ｓ１」と称する。したがって、当然ではあるが、「Ｓ−１」、「Ｓ０」および「Ｓ１」は、いずれもＳ１，・・・，ＳＮのいずれかである。
【００２９】
図１に戻って、セキュリティメモリ３は、コントローラ３０と、メモリアレイ３１（第２不揮発性メモリ）とを備えている。
【００３０】
コントローラ３０の詳細は図示しないが、コントローラ３０は、各種の論理回路と記憶バッファや高速のＲＡＭ、計時回路等から構成されている。コントローラ３０は、ホストコンピュータ１０からの要求に応じて、メモリアレイ３１に格納されている各種データを読み出してホストコンピュータ１０に出力する機能と、メモリアレイ３１に各種データを格納する機能とを有している。また、コントローラ３０は、タイマ機能を有しており、時間を測定する（例えば、一定時間が経過したことを検出する。）ことが可能である。本実施の形態におけるコントローラ３０の機能および動作の詳細については、後述する。
【００３１】
図２は、第１の実施の形態におけるメモリアレイ３１の記憶領域と各記憶領域に格納される情報とを例示する図である。メモリアレイ３１は、複数の不揮発性の記憶素子から構成されており、図２に示すように複数の記憶領域に分割されている。
【００３２】
本実施の形態におけるメモリアレイ３１の記憶領域としては、データセーブ領域３２、オフセット値格納領域３３、進行状況格納領域３４、および、コマンド格納領域３５が定義されている。ただし、定義される記憶領域はこれに限定されるものではなく、必要に応じて、その他の記憶領域が定義されてもよい。
【００３３】
メモリアレイ３１を構成する記憶素子は、ホストコンピュータ１０によるデータの読み出しのみではなく、ホストコンピュータ１０によるデータの書き込みも可能な素子である。したがって、セキュリティメモリ３は、メモリシステム１において、先述のように読み書き可能な記憶装置として構成されている。
【００３４】
ただし、セキュリティメモリ３が備える記憶装置は、そのすべてが読み書き可能である必要はない。少なくともデータセーブ領域３２および進行状況格納領域３４が読み書き可能に構成されていれば、例えば、オフセット値格納領域３３およびコマンド格納領域３５は、読み取り専用であってもよい。しかし、セキュリティ機能を強化させる意味では、セキュリティメモリ３がワンチップで構成されていることが好ましい。
【００３５】
データセーブ領域３２は、格納情報１２０を格納する記憶領域である。格納情報１２０は、ホストコンピュータ１０において作成され、メモリシステム１に転送されて格納されるデータであり、主に、プログラム２２の実行を、当該格納情報１２０が作成された時点から再開させるときに読み出されるバックアップ用のデータである。このように、格納情報１２０を格納することにより、本実施の形態におけるセキュリティメモリ３は、データセーブ用のバックアップメモリとしての機能を有している。なお、主に、格納情報１２０は、プログラム２２を中断するときなどに、ユーザの指示により作成されるが、ホストコンピュータ１０が任意のタイミングで自動的に（ユーザの指示によらずに）作成してもよい。
【００３６】
オフセット値格納領域３３は、オフセット情報３３０を格納する記憶領域である。
【００３７】
図３は、第１の実施の形態におけるオフセット情報３３０を例示する図である。オフセット情報３３０とは、各ステージＳ１，・・・，ＳＮに対応するオフセット値をコントローラ３０が求めるための情報である。
【００３８】
第１の実施の形態におけるオフセット情報３３０は、ステージＳ１，・・・，ＳＮと、オフセット値Ｆ１，・・・，ＦＮとが、それぞれ一対一で互いに関連づけられたテーブル構造の情報としてオフセット値格納領域３３に予め格納されている。詳細は後述するが、例えば、オフセット情報３３０において、「Ｓ１」に関連づけられているオフセット値である「Ｆ１」は、現在のステージである「Ｓ０」が「Ｓ１」であるときのアクセス要求に対して用いられるオフセット値である。
【００３９】
進行状況格納領域３４は、進行状況情報３４０および予約フラグ３４１を格納する記憶領域である。進行状況情報３４０は、コントローラ３０により作成され、更新される情報であって、現在のステージである「Ｓ０」を記録している情報である。予約フラグ３４１については後述するが、予約フラグ３４１はメモリアレイ３１以外の記憶装置（コントローラ３０のレジスタなど）に格納されてもよい。
【００４０】
コマンド格納領域３５は、コマンド情報３５０を格納する記憶領域である。コマンド情報３５０とは、ホストコンピュータ１０から発行されるコマンドと、その機能とを関連づける情報である。コントローラ３０は、ホストコンピュータ１０からのコマンドを受け付けると、コマンド情報３５０を参照して、当該コマンドに関連づけられている機能を特定して、当該機能を実現する動作を実行する。
【００４１】
本実施の形態におけるコマンド情報３５０には、特に、セキュリティメモリ３（コントローラ３０）に対して発行されるコマンドとして、進行状況取得コマンド、進捗更新コマンド、オフセット取得コマンド、リードコマンド、ライトコマンドが定義されている。
【００４２】
進行状況取得コマンドは、コントローラ３０に対して、進行状況情報３４０から「Ｓ０」を読み出して、ホストコンピュータ１０に出力するように要求するコマンドである。すなわち、ホストコンピュータ１０は、進行状況取得コマンドを発行することにより、必要に応じて、現在のステージである「Ｓ０」をセキュリティメモリ３に問い合わせることができる。したがって、ホストコンピュータ１０において進行状況情報３４０に相当する情報を別途保持しておく必要がない。
【００４３】
進捗更新コマンドは、コントローラ３０に対して、進行状況情報３４０を更新するように要求するコマンドである。進捗更新コマンドは、変更先（遷移先）のステージを示す情報（付加情報）とともに、発行される。本実施の形態では、進捗更新コマンドに付加される情報は、現在のステージである「Ｓ０」と遷移先のステージである「Ｓ１」とのプログラム２２における定義順の相対的な差を示す情報とする。例えば、「Ｓ０」が「Ｓ１０」であった場合において、進捗更新コマンドとともに伝達される付加情報が「＋２」であれば「Ｓ１」は「Ｓ１０」から２つ進んだ「Ｓ１２」となることを意味し、付加情報が「−２」であれば「Ｓ１」は「Ｓ１０」から２つ戻った「Ｓ８」であることを意味する。
【００４４】
オフセット取得コマンドは、コントローラ３０に対して、オフセット情報３３０から「Ｓ０」に対応するオフセット値を読み出して、ホストコンピュータ１０に出力するように要求するコマンドである。
【００４５】
リードコマンドは、読み出し用のアドレスとともにコントローラ３０に対して発行されるコマンドであって、データセーブ領域３２から格納情報１２０を読み出して、ホストコンピュータ１０に出力するように要求するコマンドである。
【００４６】
ライトコマンドは、書き込み用のアドレスおよび格納情報１２０とともにコントローラ３０に対して発行されるコマンドであって、データセーブ領域３２に当該格納情報１２０を格納するように要求するコマンドである。
【００４７】
なお、リードコマンドおよびライトコマンドに付加される読み出し用のアドレスおよび書き込み用のアドレスを、各コマンドによって指定されるアドレスの意味で、「指定アドレス」と称する。
【００４８】
図１に戻って、ホストコンピュータ１０は、各種のデータの演算を行うとともにホストコンピュータ１０が備える各種ハードウェアを制御するＣＰＵ１１と、各種のデータを記憶する記憶装置１２とを備えている。これにより、ホストコンピュータ１０は、一般的なコンピュータとしての構成および機能を備えている。また、ホストコンピュータ１０は、図示しないカードスロットを備えており、当該カードスロットにメモリシステム１を装着することが可能である。
【００４９】
ホストコンピュータ１０のＣＰＵ１１は、メモリアレイ２１に格納されているプログラム２２をコントローラ２０を介して記憶装置１２にロードしつつ、実行する機能を有している。なお、ＣＰＵ１１は、プログラム２２を実行しつつ、マーカーコード等を検出し、実行中のプログラム２２の進行状況（進行中のステージの遷移の有無等。）を把握する。
【００５０】
さらに、ＣＰＵ１１は、先述のように、各種のコマンドをコントローラ３０に対して発行し、コントローラ３０を介してメモリアレイ３１にアクセスする機能も有している。
【００５１】
記憶装置１２は、ＣＰＵ１１の一時的なワーキングエリアとして使用されるＲＡＭ（一般的には、高速アクセス可能な揮発性の記憶装置が採用される。）や、ホストコンピュータ１０の起動プログラム（図示せず）等を格納しておく読み取り専用のＲＯＭなどのハードウェアから構成されている。また、図１には示していないが、セキュリティ機能強化のためには、記憶装置１２の一部または全部がＣＰＵ１１の内部にあってもよい。
【００５２】
また、詳細は図示しないが、ホストコンピュータ１０は、ユーザに対して情報を出力する出力装置（ディスプレイやＬＥＤ、スピーカ、プリンタ等）、ユーザが情報を入力するために操作する入力装置（キーボードやボタン、コントローラ、マイク、タッチパネル等）などのハードウェアを適宜備えていてもよい。
【００５３】
以上が、メモリシステム１を含むコンピュータシステムの構成および機能の説明である。次に、コンピュータシステムの動作を説明しつつ、本実施の形態における情報保護方法について説明する。
【００５４】
図４および図５は、第１の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。セキュリティメモリ３は、起動中のホストコンピュータ１０にメモリシステム１が装着された状態で動作する。なお、以下において、ＲＯＭ２のコントローラ２０の動作については、従来の技術を適用することが可能であるため、適宜説明を省略する。
【００５５】
メモリシステム１が動作中において、セキュリティメモリ３のコントローラ３０は、ホストコンピュータ１０からの各種コマンドを受け付けたり、各種の状態を検出したりすることが可能な状態となっている（図４におけるステップＳ１，Ｓ４，Ｓ９、および、図５におけるステップＳ１２，Ｓ１６，Ｓ１９）。
【００５６】
以下、メモリシステム１に電力が供給され、コントローラ３０がホストコンピュータ１０からのコマンドを受け付けることが可能となっている状態を「待ち受け状態」と称する。ただし、コントローラ３０が受け付けるコマンドは図４および図５に示すものに限定されるものではない。また、待ち受け状態において、ホストコンピュータ１０からコマンドを受け付けると、コントローラ３０は、まず、コマンド情報３５０を参照して、受け付けたコマンドを判定する。
【００５７】
待ち受け状態において、ホストコンピュータ１０から進捗更新コマンドを受け付けると（ステップＳ１においてＹｅｓ。）、コントローラ３０は、予約フラグ３４１に、当該進捗更新コマンドの付加情報に基づいて遷移先のステージ「Ｓ１」を格納する（ステップＳ２）。そして、コントローラ３０は、計時回路を停止状態とし、計時回路において計時が進行中であればタイマを停止させる（ステップＳ３）。
【００５８】
予約フラグ３４１とは、進行状況情報３４０を更新するか否かを判定する際に参照されるフラグであって、更新の要否を「オフ（更新不要）」または「Ｓ１（更新要）」により示すフラグである。すなわち、第１の実施の形態におけるコントローラ３０は、進捗更新コマンドを受け付けても、直ちに進行状況情報３４０の「Ｓ０」を更新することはない。
【００５９】
待ち受け状態において、ホストコンピュータ１０からライトコマンドを受け付けると（ステップＳ４においてＹｅｓ）、コントローラ３０は、セーブ処理（ステップＳ５ないしＳ８）を実行する。
【００６０】
第１の実施の形態におけるセーブ処理において、コントローラ３０は、まず、ライトコマンドとともに入力される指定アドレスに基づいて、現実に使用する書き込みアドレスを作成する（ステップＳ５）。なお、本実施の形態におけるコントローラ３０は、指定アドレスをそのまま書き込みアドレスとして使用する。
【００６１】
書き込みアドレスを作成すると、コントローラ３０は、当該書き込みアドレスで示される領域（データセーブ領域３２）に、ライトコマンドとともに入力された格納情報１２０を書き込む（ステップＳ６）。このようにして、ホストコンピュータ１０は、セーブしようとする格納情報１２０を、メモリアレイ３１（データセーブ領域３２）に格納する。
【００６２】
格納情報１２０を格納すると（すなわち、データセーブが完了すると）、コントローラ３０は、進行状況格納領域３４の予約フラグ３４１を参照して、当該予約フラグ３４１が「オフ」か否かを判定する（ステップＳ７）。
【００６３】
予約フラグ３４１に遷移先のステージ「Ｓ１」が格納されているとき（ステップＳ７においてＮｏ。）、コントローラ３０は、図示しない計時回路（タイマ）を起動して更新待機時間Ｔを計時するようにセットし（ステップＳ８）、セーブ処理を終了する。なお、更新待機時間Ｔとは、ステップＳ８が実行されてから、進行状況情報３４０が更新されるまでの猶予時間である。したがって、詳細は後述するが、ステップＳ８が実行されてから更新待機時間Ｔが経過すると、進行状況情報３４０は更新される。
【００６４】
一方、予約フラグ３４１が「オフ」のとき（ステップＳ７においてＹｅｓ。）、コントローラ３０は、ステップＳ８をスキップし、セーブ処理を終了する。すなわち、更新待機時間Ｔがセットされることはないので、進行状況情報３４０は更新されない。
【００６５】
待ち受け状態において、タイマ割り込みが発生すると（ステップＳ９においてＹｅｓ。）、コントローラ３０は、進行状況情報３４０を更新する（ステップＳ１０）。具体的には、進行状況情報３４０に記録されている現在のステージ「Ｓ０」を、予約フラグ３４１に記録されている遷移先のステージ「Ｓ１」によって上書きする。
【００６６】
ステップＳ１０を実行した後、コントローラ３０は、予約フラグ３４１における「Ｓ１」を「オフ」に更新する（ステップＳ１１）。これにより、予約フラグ３４１は、進行状況情報３４０の更新が予約されていない状態に戻る。
【００６７】
セキュリティメモリ３では、タイマ割り込みは、ステップＳ８においてセットされた更新待機時間Ｔが経過したときに発生する。そして、タイマ割り込みが発生したときには、ステップＳ１０が実行されることにより、予約されていた進行状況情報３４０の更新がコントローラ３０によって実行される。
【００６８】
したがって、第１の実施の形態では、ステップＳ８が実行されてから更新待機時間Ｔが経過すると、進行状況情報３４０は更新される。なお、更新待機時間Ｔとしては、「０」を含む任意の値を設定することができる。
【００６９】
第１の実施の形態では、ステップＳ８が実行されていなければ、タイマがセットされることがないので、進行状況情報３４０の「Ｓ０」が更新されることはない。ここで、ステップＳ８は、格納情報１２０がメモリアレイ２１に格納されたときにのみ実行される工程である。すなわち、進捗更新コマンドを取得したとき、コントローラ３０は、メモリアレイ３１に新たな格納情報１２０を格納した後に、進行状況情報３４０を更新する。これにより、進捗更新コマンドが発行された直後に進行状況情報３４０を更新するよりも、第三者に動作を見破られにくいという効果がある。
【００７０】
また、ステップＳ４ないしＳ６を見れば明らかなように、第１の実施の形態におけるセキュリティメモリ３では、進捗更新コマンドが発行されていること（ステップＳ１においてＹｅｓと判定されていること）は、格納情報１２０を格納する（ステップＳ６を実行する）ための条件とはなっていない。すなわち、ホストコンピュータ１０は、進捗更新コマンドを発行しなくても、格納情報１２０をメモリアレイ２１に格納することは可能とされている。
【００７１】
待ち受け状態において、ホストコンピュータ１０からオフセット取得コマンドを受け付けると（図５のステップＳ１２においてＹｅｓ。）、コントローラ３０は、進行状況格納領域３４に格納されている進行状況情報３４０を参照する（ステップＳ１３）。そして、進行状況情報３４０から現在のステージである「Ｓ０」を取得する。
【００７２】
次に、コントローラ３０は、取得した「Ｓ０」に対応するオフセット値を求める（ステップＳ１４）。本実施の形態では、ステップＳ１３において取得した「Ｓ０」によりオフセット情報３３０を検索し、当該「Ｓ０」に対応付けられているオフセット値を取得することにより、コントローラ３０は現在のステージにおけるオフセット値を求める。
【００７３】
オフセット値が求まると、コントローラ３０は、ステップＳ１４において求めたオフセット値をホストコンピュータ１０に出力する（ステップＳ１５）。
【００７４】
待ち受け状態において、ホストコンピュータ１０から進行状況取得コマンドを受け付けると（ステップＳ１６においてＹｅｓ。）、コントローラ３０は、進行状況格納領域３４に格納されている進行状況情報３４０を参照する（ステップＳ１７）。そして、進行状況情報３４０から現在のステージである「Ｓ０」を取得する。
【００７５】
現在のステージである「Ｓ０」を取得すると、コントローラ３０は、取得した「Ｓ０」を現在のステージとしてホストコンピュータ１０に出力する（ステップＳ１８）。このように、ホストコンピュータ１０からの進行状況取得コマンドに応じて、ホストコンピュータ１０に対して進行状況情報３４０を出力することにより、ホストコンピュータ１０において進行状況情報３４０に相当する情報を別途保持しておく必要がない。
【００７６】
待ち受け状態において、リードコマンドが入力されると（ステップＳ１９においてＹｅｓ。）、コントローラ３０は、進行状況格納領域３４に格納されている進行状況情報３４０を参照する（ステップＳ２０）。そして、進行状況情報３４０から現在のステージである「Ｓ０」を取得する。
【００７７】
現在のステージである「Ｓ０」を取得すると、コントローラ３０は、取得した「Ｓ０」に対応するオフセット値を求める（ステップＳ２１）。ここでは、すでに説明した、ステップＳ１４と同様の手法によりオフセット値を求める。
【００７８】
オフセット値が求まると、コントローラ３０は、リードコマンドとともに入力された指定アドレスに、ステップＳ２１で求めたオフセット値を加算して、現実に使用する読み出しアドレスを作成する（ステップＳ２２）。
【００７９】
次に、コントローラ３０は、ステップＳ２２において作成した読み出しアドレスにより指定される情報（正常であれば所望の格納情報１２０）をメモリアレイ３１から読み出し（ステップＳ２３）、ホストコンピュータ１０に格納情報１２０として出力する（ステップＳ２４）。
【００８０】
このように、第１の実施の形態におけるコントローラ３０は、ホストコンピュータ１０からのリードコマンドとともに通知される指定アドレスと現在のステージに対応したオフセット値とに基づいてメモリアレイ３１の読み出しアドレスを求める。そして、当該アドレスで示される領域から読み出した情報を、当該リードコマンドへの応答としてホストコンピュータ１０に出力する。したがって、後述するように、ホストコンピュータ１０は、セキュリティメモリ３において加算されるオフセット値を考慮した指定アドレスでリードコマンドを発行しないと所望の格納情報１２０を読み出すことができない。
【００８１】
以上がセキュリティメモリ３の動作である。次に、ホストコンピュータ１０の動作を説明する。
【００８２】
図６は、第１の実施の形態におけるホストコンピュータ１０の動作を示す流れ図である。なお、図６に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１により実行される工程を示す。
【００８３】
電源が投入されると、ホストコンピュータ１０は、まず、所定の初期設定を実行する（ステップＳ３１）。ステップＳ３１では、記憶装置１２のＲＯＭに記憶されている起動プログラムがＣＰＵ１１により実行される。
【００８４】
初期設定が終了すると、ホストコンピュータ１０は、メモリシステム１が装着されているか否かを判定する（ステップＳ３２）。そして、メモリシステム１を検出すると、メモリシステム１のＲＯＭ２からプログラム２２の一部（最初に取得すべき特定の部分）を記憶装置１２にロードし（ステップＳ３３）、ロードしたプログラム２２を実行することにより、プログラム進行処理（ステップＳ３４）を開始する。
【００８５】
なお、プログラム進行処理は、プログラム２２の終了が指示されるまで、ステップＳ３５においてＮｏと判定されることにより、継続される。
【００８６】
図７は、第１の実施の形態におけるプログラム進行処理を示す流れ図である。ホストコンピュータ１０は、プログラム２２を進行させつつ、プログラム２２を進行させることにより検出される各種の状態を監視している（ステップＳ４０，Ｓ４４，Ｓ５０）。ただし、ホストコンピュータ１０が監視している状態は、図７に示されるものに限定されるものではない。
【００８７】
プログラム進行処理において、情報格納処理が指示されると（ステップＳ４０においてＹｅｓ。）、ホストコンピュータ１０は、第１の実施の形態における情報格納処理（ステップＳ４１ないしＳ４３）を開始する。なお、情報格納処理は、ユーザによって指示される場合に限られるものではなく、プログラム２２内に情報格納処理を実行するように記述されている場合もあり得る。
【００８８】
情報格納処理が開始されると、まず、ホストコンピュータ１０は、セキュリティメモリ３に格納する格納情報１２０を作成する（ステップＳ４１）。
【００８９】
格納情報１２０は、現在の状態を保存しておき、後にプログラム２２を現在の状態から再開するために作成される。例えば、ユーザがプログラム２２を中断しておいて、後に再開させたいと望む場合などである。また、格納情報１２０は、後に必要となる情報をセキュリティメモリ３に格納しておき、必要なときに読み出すために作成される場合もある。例えば、プログラム２２を実行するために必要不可欠な情報を、一旦、セキュリティメモリ３に格納しておく場合などが考えられる。後者の場合は格納情報１２０に現在のステージ「Ｓ０」を格納しておく必要はないが、前者の場合は再開するときのステージ（その場合は遷移先のステージとなる。）として現在のステージ「Ｓ０」を格納しておくことが好ましい。
【００９０】
格納情報１２０を作成すると、ホストコンピュータ１０は、当該格納情報１２０を格納する領域を示す指定アドレス（データセーブ領域３２における位置を示す。）を作成する（ステップＳ４２）。
【００９１】
格納情報１２０および当該格納情報１２０を格納するための指定アドレスが作成されると、ホストコンピュータ１０は、これらの情報とともに、セキュリティメモリ３に対してライトコマンドを発行する（ステップＳ４３）。
【００９２】
すでに説明したように、ライトコマンドが発行されると、セキュリティメモリ３は、指定アドレスに格納情報１２０を格納する。したがって、ステップＳ４３を実行することにより、ホストコンピュータ１０は、所望の格納情報１２０をセキュリティメモリ３に格納することができる。
【００９３】
プログラム進行処理において、情報読み出し処理が指示されると（ステップＳ４４においてＹｅｓ。）、ホストコンピュータ１０は、情報読み出し処理（ステップＳ４５ないしＳ４９）を開始する。なお、情報読み出し処理は、情報格納処理と同様に、ユーザによって指示される場合に限られるものではなく、プログラム２２内に情報格納処理を実行するように記述されている場合もあり得る。
【００９４】
情報読み出し処理が開始されると、まず、ホストコンピュータ１０は、セキュリティメモリ３にオフセット取得コマンドを発行する（ステップＳ４５）。オフセット取得コマンドが発行されるとセキュリティメモリ３から、現在のオフセット値が出力されるので、ホストコンピュータ１０はこれを取得する（ステップＳ４６）。
【００９５】
次に、ホストコンピュータ１０は、読み出そうと所望する格納情報１２０のアドレス（例えば、情報格納処理における指定アドレス。）から、オフセット値を減算することにより、情報読み出し処理における指定アドレス（読み出し用の指定アドレス。）を作成する（ステップＳ４７）。
【００９６】
指定アドレスを作成すると、ホストコンピュータ１０は、作成した指定アドレスとともにリードコマンドをセキュリティメモリ３に対して発行する（ステップＳ４８）。リードコマンドが発行されると、セキュリティメモリ３では指定アドレスにオフセット値が加算された読み出しアドレスから情報が読み出され、格納情報１２０として出力される。
【００９７】
しかし、リードコマンドとともに出力される指定アドレスは、ステップＳ４７において予めオフセット値が減算されている。したがって、当該指定アドレスにオフセット値が加算された読み出しアドレスは、ホストコンピュータ１０が読み出そうと所望する格納情報１２０のアドレスとなり、このとき格納情報１２０として出力される情報は、ホストコンピュータ１０が、本来、読み出そうと所望する格納情報１２０である。このようにして、情報読み出し処理において、ホストコンピュータ１０は格納情報１２０を取得する（ステップＳ４９）。
【００９８】
第１の実施の形態では、格納情報１２０を読み出すときには、予めオフセット値を取得して、当該オフセット値に基づいた読み出し用の指定アドレスを作成してリードコマンドを発行しなければ、所望の格納情報１２０を読み出すことができない仕組みになっている。言い換えれば、本実施の形態におけるコンピュータシステムでは、ホストコンピュータ１０が、予めオフセット値を取得して、当該オフセット値に基づいた指定アドレスを作成してリードコマンドを発行しなければ、セキュリティメモリ３に格納した格納情報１２０を読み出せなくなるように構成されている。
【００９９】
なお、第１の実施の形態では、ステップＳ１４（ホストコンピュータ１０からのオフセット取得コマンドによりセキュリティメモリ３のコントローラ３０がオフセット値を求める工程）が実行されてから、ステップＳ２１（リードコマンドによりコントローラ３０が読み出しアドレスを作成するためにオフセット値を求める工程）が実行されるまでの間に、進行状況情報３４０が更新されてオフセット値が変更されると、正常な処理であっても、正常な格納情報１２０を読み出せなくなる。したがって、この間は、コントローラ３０が計時回路をロックするなどして、進行状況情報３４０が更新されないようにすることが好ましい。
【０１００】
また、先述のように、進捗更新コマンドが発行されても、セキュリティメモリ３は、直ちに進行状況情報３４０を更新しない。すなわち、厳密には、ホストコンピュータ１０と、セキュリティメモリ３との間には、ステージの遷移にタイムラグが発生していることになる。しかし、第１の実施の形態における情報読み出し処理は、ホストコンピュータ１０における現在のステージに関係のない処理とされているので、このようなタイムラグが発生していても問題はない。
【０１０１】
例えば、ホストコンピュータ１０がステージＳ２であり、セキュリティメモリ３が未だステージＳ１である場合、ステップＳ４６ではステージＳ１に対応するオフセット値Ｆ１（図３）が現在のオフセット値として取得される。しかし、ステップＳ４８において発行されるリードコマンドに対しては、ステップＳ２１においてステージＳ１に対応するオフセット値（すなわち、オフセット値Ｆ１）が取得される。したがって、オフセット値Ｆ１が減算されて作成された指定アドレスに、オフセット値Ｆ１が加算されて読み出しが実行されるので、結局、所望の格納情報１２０が読み出されることになり、問題は生じない。
【０１０２】
プログラム進行処理において、ステージを遷移させる必要が生じたとき（ステップＳ５０においてＹｅｓ。）、ホストコンピュータ１０は、セキュリティメモリ３に対して進行状況取得コマンドを発行する（ステップＳ５１）。なお、ステージを遷移させる必要が生じる場合としては、プログラム２２の実行中にステージを遷移させるためのマーカーコードを検出した場合の他に、ステップＳ４９において読み出した格納情報１２０によってプログラム２２を当該格納情報１２０に記録されているステージから再開させる場合などがある。
【０１０３】
すでに説明したように、進行状況取得コマンドが発行されると、セキュリティメモリ３では、進行状況情報３４０が参照され、現在のステージ「Ｓ０」が出力される。したがって、進行状況取得コマンドを発行することにより、ホストコンピュータ１０は、現在のステージ「Ｓ０」を取得する（ステップＳ５２）。
【０１０４】
現在のステージ「Ｓ０」を取得すると、ホストコンピュータ１０は、セキュリティメモリ３から取得したステージ「Ｓ０」と、遷移先のステージ「Ｓ１」との差を求め（ステップＳ５３）、これを付加情報として、セキュリティメモリ３に対して進捗更新コマンドを発行する（ステップＳ５４）。
【０１０５】
すでに説明したように、進捗更新コマンドが発行されると、セキュリティメモリ３では、予約フラグ３４１に遷移先のステージ「Ｓ１」が記録され、その後、タイマ割り込みが発生して、進行状況情報３４０が更新される。
【０１０６】
なお、先述のように、厳密には、ホストコンピュータ１０と、セキュリティメモリ３との間には、ステージの遷移にタイムラグが発生している場合がある。セキュリティメモリ３において進行状況情報３４０が未だ更新されておらず、進行状況情報３４０が「Ｓ−１」であり予約フラグ３４１が「Ｓ０」のときに、ホストコンピュータ１０においてステージ「Ｓ０」をさらに「Ｓ１」に遷移させようとすると、ステップＳ５２ではステージ「Ｓ−１」が取得され、ステップＳ５３では、「Ｓ−１」と「Ｓ１」との差が求められることになる。
【０１０７】
しかし、この差が付加情報として進捗更新コマンドが発行されると、この時点の進行状況情報３４０は「Ｓ−１」であるから、求められる遷移先のステージは「Ｓ１」となり、これが予約フラグ３４１に新たに格納される（ステージ「Ｓ０」は上書きされる。）。また、例え、この時点で、更新のためのタイマが起動中であっても、ステップＳ３により停止されることから、ステージ「Ｓ１」への更新は、一旦、保留される。したがって、ホストコンピュータ１０と、セキュリティメモリ３との間でタイムラグが発生していても、進捗更新コマンドを発行するときにおいて問題は生じない。
【０１０８】
以上が、第１の実施の形態における情報保護方法の説明である。次に、本実施の形態における効果について検証する。
【０１０９】
メモリシステム１では、保護の対象となる情報は、ＲＯＭ２のメモリアレイ２１に格納されている。プログラム２２を不正に複製し実施しようと企図する者（以下、「不正な複製者」と称する。）は、ＲＯＭ２のセキュリティ機能を破ってメモリアレイ２１に格納されている情報（プログラム２２）を複製する。
【０１１０】
しかし、デッドコピーされたプログラム２２を実行すると、格納情報１２０をメモリ（セキュリティメモリ３に相当する記憶装置）に格納するときには通常どおり指定アドレスで格納されるにもかかわらず、当該格納情報１２０を読み出すときには何らかのオフセット値が減算されてリードコマンドが発行されてしまう。すなわち、メモリに格納した格納情報１２０を読み出すことができなくなる。
【０１１１】
したがって、不正な複製者は、複製したプログラム２２を解析して、このような処理を取り除くためのプログラム２２の改ざんを行うか、あるいは、セキュリティメモリ３をも忠実に再現して、減算された指定アドレスに適切なオフセット値が加算されるようにしなければならない。
【０１１２】
しかし、プログラム２２の改ざんは、デッドコピーしたプログラム２２を逆アセンブルしたうえで、セキュリティ機能に関する部分を正確に特定し、改ざんしなければならず、非常に困難である。
【０１１３】
また、セキュリティメモリ３を再現するためには、セキュリティメモリ３のコントローラ３０が提供するセキュリティ機能をも看破し、メモリアレイ３１に格納されている情報（特に、オフセット情報３３０）をもすべて読み出して複製する必要がある。
【０１１４】
確かに、オフセット情報３３０は、外部のコンピュータ（ホストコンピュータ１０に限られない。例えば、不正な複製者の使用するコンピュータも含む。）からオフセット取得コマンドを発行することによりメモリアレイ３１から読み出せる。しかし、それによって読み出せるのは、そのときのステージに対応するオフセット値のみであり、すべてのオフセット情報３３０を読み出すことはできない。
【０１１５】
したがって、すべてのオフセット値を読み出して、オフセット情報３３０を完全に再現するには、外部のコンピュータは、すべての正常なホストコンピュータ１０のステージを再現しつつ、正確に、オフセット値の読み出し手順を再現してやらなければならない。例えば、一度プログラム２２を最初から最後まで実行したとしても、そのときにたまたま実行されなかったステージが存在すれば、そのステージに対応するオフセット値は取得できないことになる。したがって、この作業は、プログラム２２を、ほぼすべての分岐を含めて実行し尽くす作業となり、非常に困難である。
【０１１６】
一方で、すべてのオフセット値およびプログラム２２におけるマーカーコードの位置や数は、正規のプログラマ（プログラム２２の提供者）がプログラム２２に応じて書き換えるだけで、容易に変更でき、ホストコンピュータ１０における変更を要しない。したがって、例えば、ゲームタイトルごとや改訂版ごとに頻繁に変更でき、不正な複製者は、その度に上記の解析作業を行わなければならず、違法な複製品（海賊版）を製造するまでに一定以上の時間を要することとなる。特に、プログラム２２がゲームソフトウェアなどである場合、発売開始直後から海賊版が流通すると正規版の売れ行きに大きな影響がでてしまうという特性がある。したがって、このような市場の製品においては、例え完全に海賊版の製造を完全に防止できなくとも、発売開始から一定期間でも海賊版の出現を遅らせることができるならばその効果は大きいといえる。
【０１１７】
また、進捗更新コマンドが発行されない場合は、セキュリティメモリ３において格納情報１２０が格納されるだけで、オフセット値は変化しない。特に、セキュリティメモリ３が初期状態で、進捗更新コマンドが発行されなければ、セキュリティメモリ３の動作は、通常のメモリと同じである。したがって、進捗更新コマンドを知らずに、セキュリティメモリ３のみを観測すると、セキュリティメモリ３が通常のメモリであるかのように観測されるため、セキュリティメモリ３を単体で解読することは困難である。
【０１１８】
さらに、セキュリティメモリ３では、簡潔に言えば、リードコマンドに付加される指定アドレスを操作することによりセキュリティ機能を提供するものである。すなわち、コントローラ３０は、格納情報１２０の内容を解析する必要がない。したがって、格納情報１２０が暗号化されていたり、あるいは、ファイルシステムにより分散して格納されたりした場合でも、適用可能である。すなわち、本発明は、他のセキュリティ機能との親和性が高い技術である。
【０１１９】
以上のように、第１の実施の形態におけるメモリシステム１は、ホストコンピュータ１０に接続され、プログラム２２を格納するメモリアレイ２１と、メモリアレイ２１に対するアクセスを制御するコントローラ２０と、ホストコンピュータ１０からの格納情報１２０を格納するメモリアレイ３１と、プログラム２２を使用するホストコンピュータ１０の状態（ステージ）に応じてメモリアレイ３１のアドレスのオフセット値を求めるコントローラ３０とを備え、コントローラ３０は、ホストコンピュータ１０からのメモリアレイ３１へのアクセス要求に対して、当該オフセット値を用いる。これにより、ＲＯＭ２に格納されているプログラム２２を複製しただけでは、プログラム２２を正常に実施することができず、セキュリティレベルが向上する。また、プログラム２２ごとに容易に変更可能であるとともに、ホストコンピュータ１０の仕様を変更することなく、適用が可能であるため、コストを抑制できる。
【０１２０】
特に、コントローラ３０は、ホストコンピュータ１０からのリードコマンドとともに通知される指定アドレスとオフセット値とに基づいてメモリアレイ３１の読み出しアドレスを求め、当該アドレスで示される領域から読み出した情報を、当該リードコマンドへの応答としてホストコンピュータ１０に出力する。これにより、ホストコンピュータ１０は、オフセット値を考慮した指定アドレスでリードコマンドを発行しないと所望の格納情報１２０を読み出せない。
【０１２１】
また、セキュリティメモリ３が、プログラム２２を使用するホストコンピュータ１０の状態を進行状況情報３４０として格納するとともに、ホストコンピュータ１０からの進捗更新コマンドに応じて、進行状況情報３４０を更新することにより、例えば、オフセット値を求めるときなどに、ホストコンピュータ１０からその時点のホストコンピュータ１０の状態を通知してもらう必要がない。
【０１２２】
また、ホストコンピュータ１０からの進行状況取得コマンドに応じて、ホストコンピュータ１０に対して進行状況情報３４０を出力することにより、ホストコンピュータにおいて進行状況情報３４０に相当する情報を別途保持しておく必要がない。
【０１２３】
進捗更新コマンドを取得したとき、メモリアレイ３１に新たな格納情報１２０を格納した後に、進行状況情報３４０を更新することにより、進捗更新コマンドが発行された直後に進行状況情報３４０を更新するよりも、第三者に動作を見破られにくい。特に、第１の実施の形態では、いわば、格納情報１２０が読み出されるときにセキュリティ機能が発動するので、格納情報１２０が格納されてから進行状況情報３４０を更新することで、確実にセキュリティ機能を発動させることができるとともに、動作を観測されにくくすることができる。
【０１２４】
また、進捗更新コマンドを取得してから更新待機時間Ｔが経過した後に、進行状況情報３４０を更新することにより、進捗更新コマンドが発行された直後に進行状況情報３４０を更新するよりも、第三者に動作を見破られにくい。特に、外部のコンピュータから、格納情報１２０を読み書きされても、その間に更新待機時間Ｔが経過していなければ、第三者からはセキュリティメモリ３が通常のメモリとして観測されるので、セキュリティ機能を見破られにくい。
【０１２５】
また、ホストコンピュータ１０からのオフセット取得コマンドに応じて、ホストコンピュータ１０に対してオフセット値を出力することにより、ホストコンピュータ１０においてオフセット情報３３０に相当する情報を管理しておく必要がない。したがって、プログラム２２にオフセット情報３３０を記述しておく必要がないため、オフセット情報３３０がプログラム２２にも記述される場合に比べて、セキュリティレベルが向上する。
【０１２６】
なお、ホストコンピュータ１０においてオフセット値を減算して指定アドレスを作成し、セキュリティメモリ３において指定アドレスとオフセット値とを加算すると説明した。しかし、ホストコンピュータ１０においてオフセット値を加算して指定アドレスを作成し、セキュリティメモリ３において指定アドレスとオフセット値を減算してもよい。以下の実施の形態においても同様である。
【０１２７】
また、第１の実施の形態では、オフセット情報３３０において、ステージとオフセット値とが互いに関連づけられており、コントローラ３０は「Ｓ０」でオフセット情報３３０を検索することによりオフセット値を求めると説明した。しかし、オフセット値を求める手法はこれに限定されるものではない。例えば、オフセット情報３３０には、ステージと各ステージで使用する演算方法（関数）とが関連づけられており、「Ｓ０」で検索することにより取得される演算方法によって指定アドレス（あるいは「Ｓ０」）を演算することによって読み出しアドレス（あるいはオフセット値）を作成するように構成してもよい。このような場合には、ホストコンピュータ１０からのオフセット取得コマンドに対して、求めたオフセット値の代わりに、当該演算方法を出力し、ホストコンピュータ１０において当該演算方法の逆関数を用いてリードコマンドに付加する指定アドレスを演算するように構成してもよい。
【０１２８】
また、第１の実施の形態では、ホストコンピュータ１０からオフセット取得コマンドが発行されると、セキュリティメモリ３は、格納している進行状況情報３４０を参照して「Ｓ０」を取得し、それに対応するオフセット値を求める。すなわち、上記実施の形態では、ホストコンピュータ１０は、オフセット値を取得するときに、オフセット取得コマンドのみを発行する。しかし、オフセット取得コマンドとともに、ホストコンピュータ１０から「Ｓ０」を通知させ、この通知された「Ｓ０」によってセキュリティメモリ３がオフセット値を求めるように構成してもよい。そのように構成すると、オフセット値を取得しようとするときのホストコンピュータ１０の状態も再現しなければ、正常に格納情報１２０を読み出せなくなるため、セキュリティレベルが向上する。ただし、その場合は、ホストコンピュータ１０と、セキュリティメモリ３との間のステージの遷移のタイムラグについて、対策が必要となる。
【０１２９】
また、図２に示した各記憶領域のそれぞれは、メモリアレイ３１において連続したアドレスで構成されているように示している。しかし、これらの領域は、いずれも不連続なアドレスにより構成されていてもよい。以下の実施の形態においても同様である。
【０１３０】
＜２．  第２の実施の形態＞
第１の実施の形態では、ホストコンピュータ１０が格納情報１２０を読み出すためのアクセス要求をしたときに、セキュリティメモリ３においてオフセット値が用いられた。しかし、ホストコンピュータ１０が格納情報１２０を書き込むためのアクセス要求をしたときに、セキュリティメモリ３においてオフセット値が用いられるように構成することも可能である。
【０１３１】
図８は、第２の実施の形態におけるセキュリティメモリ３の動作を示す流れ図である。なお、第２の実施の形態におけるコンピュータシステムにおいて第１の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
【０１３２】
第２の実施の形態においても、メモリシステム１が動作中において、セキュリティメモリ３のコントローラ３０は、ホストコンピュータ１０からの各種コマンドを受け付けたり、状態を検出したりすることが可能な状態となっている（図８におけるステップＳ６１，Ｓ６８）。なお、図８では図示を省略しており、以下、説明を省略するが、第２の実施の形態におけるセキュリティメモリ３においても、待ち受け状態において、進捗更新コマンド、オフセット取得コマンドおよび進行状況取得コマンドを受け付けたときの各処理と、タイマ割り込みが発生したときの処理とが、第１の実施の形態と同様に実行される。
【０１３３】
待ち受け状態において、ライトコマンドが入力されると（ステップＳ６１においてＹｅｓ。）、コントローラ３０は、進行状況格納領域３４に格納されている進行状況情報３４０を参照する（ステップＳ６２）。そして、進行状況情報３４０から現在のステージである「Ｓ０」を取得する。
【０１３４】
現在のステージである「Ｓ０」を取得すると、コントローラ３０は、取得した「Ｓ０」に対応するオフセット値を求める（ステップＳ６３）。ここでは、すでに説明した、ステップＳ１４と同様の手法によりオフセット値を求める。
【０１３５】
オフセット値が求まると、コントローラ３０は、ライトコマンドとともに入力された指定アドレスに、ステップＳ６３で求めたオフセット値を加算して、現実に使用する書き込みアドレスを作成する（ステップＳ６４）。すなわち、第２の実施の形態では、オフセット値を用いて書き込みアドレスが作成される。
【０１３６】
書き込みアドレスを作成すると、コントローラ３０は、当該書き込みアドレスで示される領域（データセーブ領域３２）に、ライトコマンドとともに入力された格納情報１２０を書き込む（ステップＳ６５）。このように、第２の実施の形態では、ホストコンピュータ１０がセーブしようとする格納情報１２０を、オフセット値が加算された書き込みアドレスでメモリアレイ３１（データセーブ領域３２）に格納する。
【０１３７】
格納情報１２０を格納すると（すなわち、データセーブが完了すると）、コントローラ３０は、予約フラグ３４１が「オフ」か否かを判定する（ステップＳ６６）。
【０１３８】
予約フラグ３４１に遷移先のステージ「Ｓ１」が格納されているとき（ステップＳ６６においてＮｏ。）、コントローラ３０は、図示しない計時回路（タイマ）を起動して更新待機時間Ｔを計時するようにセットし（ステップＳ６７）、セーブ処理を終了する。一方、予約フラグが「オフ」のとき（ステップＳ６６においてＹｅｓ。）、コントローラ３０は、ステップＳ６７をスキップし、セーブ処理を終了する。
【０１３９】
待ち受け状態において、ホストコンピュータ１０からリードコマンドを受け付けると（ステップＳ６８においてＹｅｓ。）、コントローラ３０は、リード処理（ステップＳ６９ないしＳ７１）を実行する。
【０１４０】
リード処理において、コントローラ３０は、まず、リードコマンドとともに入力される指定アドレスに基づいて、現実に使用する読み出しアドレスを作成する（ステップＳ６９）。なお、第２の実施の形態におけるコントローラ３０は、指定アドレスをそのまま読み出しアドレスとして使用する。
【０１４１】
次に、コントローラ３０は、ステップＳ６９において作成した読み出しアドレスにより指定される情報（正常であれば所望の格納情報１２０）をメモリアレイ３１から読み出し（ステップＳ７０）、ホストコンピュータ１０に格納情報１２０として出力する（ステップＳ７１）。
【０１４２】
以上が、第２の実施の形態におけるセキュリティメモリ３の動作である。次に、第２の実施の形態におけるホストコンピュータ１０の動作を説明する。
【０１４３】
図９は、第２の実施の形態におけるプログラム進行処理を示す流れ図である。なお、図９に示される各工程は、特に断らない限り、ホストコンピュータ１０のＣＰＵ１１により実行される工程を示す。また、図９に示すステップＳ９０ないしＳ９４の処理は、第１の実施の形態におけるステップＳ５０ないしＳ５４と同様の処理であるため、説明を省略する。
【０１４４】
プログラム進行処理において、情報格納処理が指示されると（ステップＳ８０においてＹｅｓ。）、ホストコンピュータ１０は、第２の実施の形態における情報格納処理（ステップＳ８１ないしＳ８５）を開始する。
【０１４５】
情報格納処理が開始されると、第２の実施の形態におけるホストコンピュータ１０は、セキュリティメモリ３に格納する格納情報１２０を作成する（ステップＳ８１）。
【０１４６】
格納情報１２０を作成すると、ホストコンピュータ１０は、セキュリティメモリ３にオフセット取得コマンドを発行する（ステップＳ８２）。オフセット取得コマンドが発行されるとセキュリティメモリ３から、第１の実施の形態と同様に、現在のオフセット値が出力されるので、ホストコンピュータ１０はこれを取得する（ステップＳ８３）。
【０１４７】
オフセット値を取得すると、ホストコンピュータ１０は、当該格納情報１２０の書き込もうと所望するアドレスから、オフセット値を減算することにより、情報格納処理おける指定アドレス（書き込み用の指定アドレス。）を作成する（ステップＳ８４）。
【０１４８】
格納情報１２０および当該格納情報１２０を格納するための指定アドレスが作成されると、ホストコンピュータ１０は、これらの情報とともに、セキュリティメモリ３に対してライトコマンドを発行する（ステップＳ８５）。
【０１４９】
すでに説明したように、ライトコマンドが発行されると、第２の実施の形態におけるセキュリティメモリ３は、当該ライトコマンドとともに入力される指定アドレスにオフセット値を加算した書き込みアドレスを作成し、当該アドレスに格納情報１２０を格納する。しかし、ライトコマンドとともに出力される指定アドレスは、ステップＳ８４において予めオフセット値が減算されている。したがって、当該指定アドレスにオフセット値が加算された書き込みアドレスは、格納情報１２０を格納しようと所望するアドレスである。このようにして、ステップＳ８５を実行することにより、ホストコンピュータ１０は、セキュリティメモリ３（メモリアレイ３１）の所望の領域に格納情報１２０を格納する。
【０１５０】
プログラム進行処理において、情報読み出し処理が指示されると（ステップＳ８６においてＹｅｓ。）、ホストコンピュータ１０は、第２の実施の形態における情報読み出し処理（ステップＳ８７ないしＳ８９）を開始する。
【０１５１】
情報読み出し処理が開始されると、まず、ホストコンピュータ１０は、読み出そうと所望する格納情報１２０のアドレス（情報格納処理において所望したアドレス）を指定アドレス（読み出し用の指定アドレス。）として作成する（ステップＳ８７）。
【０１５２】
指定アドレスを作成すると、ホストコンピュータ１０は、作成した指定アドレスとともにリードコマンドをセキュリティメモリ３に対して発行する（ステップＳ８８）。すでに説明したように、リードコマンドが発行されると、第２の実施の形態におけるセキュリティメモリ３ではリードコマンドとともに入力された指定アドレスから情報が読み出され、格納情報１２０として出力される。
【０１５３】
したがって、格納情報１２０が所望のアドレスに格納されていれば、このとき格納情報１２０として出力される情報は、ホストコンピュータ１０が、本来、読み出そうと所望する格納情報１２０である。このようにして、第２の実施の形態における情報読み出し処理において、ホストコンピュータ１０は格納情報１２０を取得する（ステップＳ８９）。
【０１５４】
以上のように、第２の実施の形態におけるコントローラ３０は、ホストコンピュータ１０からのライトコマンドとともに通知されるアドレスとオフセット値とに基づいてメモリアレイ３１の書き込みアドレスを求め、当該アドレスで示される領域（メモリアレイ３１の領域）にライトコマンドとともに入力される格納情報１２０を格納する。これにより、ホストコンピュータ１０は、オフセット値を考慮したアドレスでライトコマンドを発行しないと所望のアドレスに格納情報１２０を格納できないので、以後、読み出すことができなくなる。したがって、第２の実施の形態におけるコンピュータシステムも、第１の実施の形態と同様の効果を得ることができる。
【０１５５】
＜３．  変形例＞
以上、本発明の実施の形態について説明してきたが、本発明は上記実施の形態に限定されるものではなく様々な変形が可能である。
【０１５６】
例えば、上記実施の形態では、メモリシステム１において、保護対象の情報を格納するＲＯＭ２と、セキュリティメモリ３とが一体構造物を構成していた。しかし、例えば、ＲＯＭ２のメモリアレイ２１に相当する記憶媒体をＣＤ−ＲＯＭで構成し、ＲＯＭ２のコントローラ２０をホストコンピュータ１０に設けたＣＤ−ＲＯＭドライブ装置とＣＰＵ１１とで構成し、着脱可能かつ書き込み可能な記憶媒体にセキュリティメモリ３に相当する構成のみを搭載して実現することも可能である。
【０１５７】
また、セキュリティメモリ３からオフセット値が出力されるときにおいて、当該オフセット値が暗号化されていてもよい。その場合、第三者がオフセット情報３３０を再現することがさらに困難となり、セキュリティレベルが向上する。
【０１５８】
また、オフセット値はすべてのステージにおいて互いに異なる値である必要はない。いくつかのステージにおいて共通のオフセット値が用いられてもよい。
【０１５９】
また、上記実施の形態に示した各工程は、あくまでも例示であって、同様の効果が得られるならば、各工程における処理内容や、各工程の実行順は、適宜、変更されてもよい。
【符号の説明】
【０１６０】
１  メモリシステム
１０  ホストコンピュータ
１２０  格納情報
２  ＲＯＭ
２０，３０  コントローラ
２１，３１  メモリアレイ
２２  プログラム
３  セキュリティメモリ
３３０  オフセット情報
３４０  進行状況情報
３４１  予約フラグ
【図１】
0005753457.tif 000002
【図２】
0005753457.tif 000003
【図３】
0005753457.tif 000004
【図４】
0005753457.tif 000005
【図５】
0005753457.tif 000006
【図６】
0005753457.tif 000007
【図７】
0005753457.tif 000008
【図８】
0005753457.tif 000009
【図９】
0005753457.tif 000010