説明

メモリシステム、セキュリティメモリおよび情報保護方法

【課題】ホストコンピュータに接続されるメモリシステムに関して、すでに流通しているホストコンピュータとの互換性を維持しつつ、安価に、当該メモリシステムに格納された情報の不正な複製を抑制する技術を提供する。
【解決手段】ホストコンピュータ10に接続されるメモリシステム1に、プログラム22を格納するメモリアレイ21と、メモリアレイ21に対するアクセスを制御するコントローラ20と、ホストコンピュータ10からの格納情報120を格納するメモリアレイ31と、プログラム22を使用するホストコンピュータ10の状態に応じてメモリアレイ31のアドレスのオフセット値を求めるコントローラ30とを設ける。コントローラ30は、ホストコンピュータ10からのメモリアレイ31へのアクセス要求に対して、当該オフセット値を用いる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、記憶装置(例えば、半導体メモリなど)に格納された情報が不正に複製されないように保護する技術に関する。
【背景技術】
【0002】
従来より、ホストコンピュータに接続される記憶装置に記憶された保護対象の情報を不正な複製から保護する技術が知られている。例えば、そのような技術が特許文献1に記載されている。
【0003】
特許文献1には、ホストコンピュータと接続されるメモリシステムに、セキュリティ機能を備えたコントローラと不揮発性メモリとを設けている。そして、ホストコンピュータからのアクセスに対しては、当該コントローラがセキュリティ機能を発揮することにより、不揮発性メモリ上に格納された情報を保護する技術が記載されている。
【0004】
しかし、特許文献1に記載されている技術をもってしても、不正な複製を完全に防止することはできない。そして、メモリシステムのコントローラにおけるセキュリティ機能が破られ、不揮発性メモリに格納された情報(保護対象の情報)を違法に複製され、配布される事態が現実に生じている。特許文献1に記載されている技術では、不揮発性メモリに格納されているプログラムにかかわらず、ホストコンピュータとメモリシステムとが協働してセキュリティ機能を提供しているため、一度、このセキュリティが破られれば、すべてのプログラムが不正に複製されることを許す事態にもなりかねない。
【0005】
このような事態を安易に解決する手法として、コントローラが提供するセキュリティ機能を変更することが考えられる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−040941号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
ところが、特許文献1に記載された技術において、メモリシステムのコントローラにおけるセキュリティ機能を変更すると、ホストコンピュータ側にも変更が必要になるという問題があった。すなわち、ホストコンピュータがすでに多数市場に流通している現状では、メモリシステムのセキュリティ機能が破られるたびに、ホストコンピュータ側の設計変更まで行うことは、互換性の維持やコストの面で現実的ではないという問題があった。
【0008】
本発明は、上記課題に鑑みてなされたものであり、ホストコンピュータに接続されるメモリシステムに関して、すでに流通しているホストコンピュータとの互換性を維持しつつ、安価に、当該メモリシステムに格納された情報の不正な複製を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記の課題を解決するため、請求項1の発明は、ホストコンピュータに接続されるメモリシステムであって、保護対象の情報を格納する第1不揮発性メモリと、前記第1不揮発性メモリに対するアクセスを制御する第1コントローラと、前記ホストコンピュータからの格納情報を格納する第2不揮発性メモリと、前記保護対象の情報を使用する前記ホストコンピュータの状態に応じて前記第2不揮発性メモリのアドレスのオフセット値を求める第2コントローラとを備え、前記第2コントローラは、前記ホストコンピュータからの前記第2不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いる。
【0010】
また、請求項2の発明は、請求項1の発明に係るメモリシステムであって、前記第2コントローラは、前記ホストコンピュータからの読み出しコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第2不揮発性メモリの読み出しアドレスを求め、前記読み出しアドレスで示される領域から読み出した情報を、前記読み出しコマンドへの応答として前記ホストコンピュータに出力する。
【0011】
また、請求項3の発明は、請求項1または2の発明に係るメモリシステムであって、前記第2コントローラは、前記ホストコンピュータからの書き込みコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第2不揮発性メモリの書き込みアドレスを求め、前記書き込みアドレスで示される領域に前記書き込みコマンドとともに入力される格納情報を前記第2不揮発性メモリに格納する。
【0012】
また、請求項4の発明は、請求項1ないし3のいずれかの発明に係るメモリシステムであって、前記保護対象の情報を使用する前記ホストコンピュータの状態を進行状況情報として格納するとともに、前記ホストコンピュータからの進捗更新コマンドに応じて、前記進行状況情報を更新する。
【0013】
また、請求項5の発明は、請求項4の発明に係るメモリシステムであって、前記ホストコンピュータからの進行状況取得コマンドに応じて、前記ホストコンピュータに対して前記進行状況情報を出力する。
【0014】
また、請求項6の発明は、請求項4または5の発明に係るメモリシステムであって、前記進捗更新コマンドを取得したとき、前記第2不揮発性メモリに新たな格納情報を格納した後に、前記進行状況情報を更新する。
【0015】
また、請求項7の発明は、請求項4ないし6のいずれかの発明に係るメモリシステムであって、前記進捗更新コマンドを取得したとき、前記第2不揮発性メモリから格納情報を読み出した後に、前記進行状況情報を更新する。
【0016】
また、請求項8の発明は、請求項4ないし7のいずれかの発明に係るメモリシステムであって、前記進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新する。
【0017】
また、請求項9の発明は、請求項1ないし8のいずれかの発明に係るメモリシステムであって、前記ホストコンピュータからのオフセット取得コマンドに応じて、前記ホストコンピュータに対して前記オフセット値を出力する。
【0018】
また、請求項10の発明は、保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、前記ホストコンピュータからの格納情報を格納する不揮発性メモリと、前記保護対象の情報を使用する前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求めるコントローラとを備え、前記コントローラは、前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いる。
【0019】
また、請求項11の発明は、ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、前記ホストコンピュータからの格納情報を不揮発性メモリに格納する工程と、前記不揮発性メモリから格納情報を読み出す工程と、前記保護対象の情報を使用する前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求める工程とを有し、前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いる。
【発明の効果】
【0020】
請求項1ないし11に記載の発明は、保護対象の情報を使用する前記ホストコンピュータの状態に応じてアドレスのオフセット値を求め、ホストコンピュータからのアクセス要求に対して、当該オフセット値を用いることにより、保護対象の情報を複製しただけでは、当該情報を正常に使用することができず、セキュリティレベルが向上する。また、保護対象の情報ごとに容易に変更可能であるとともに、ホストコンピュータの仕様を変更することなく、適用が可能であるため、コストを抑制できる。
【図面の簡単な説明】
【0021】
【図1】本発明に係るメモリシステムを備えるコンピュータシステムを示す図である。
【図2】第1の実施の形態におけるメモリアレイの記憶領域と各記憶領域に格納される情報とを例示する図である。
【図3】第1の実施の形態におけるオフセット情報を例示する図である。
【図4】第1の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図5】第1の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図6】第1の実施の形態におけるホストコンピュータの動作を示す流れ図である。
【図7】第1の実施の形態におけるプログラム進行処理を示す流れ図である。
【図8】第2の実施の形態におけるセキュリティメモリの動作を示す流れ図である。
【図9】第2の実施の形態におけるプログラム進行処理を示す流れ図である。
【発明を実施するための形態】
【0022】
以下、本発明の好適な実施の形態について、添付の図面を参照しつつ、詳細に説明する。
【0023】
<1. 第1の実施の形態>
図1は、本発明に係るメモリシステム1を備えるコンピュータシステムを示す図である。コンピュータシステムは、本発明に係るメモリシステム1と、一般的なコンピュータとしての機能を有するホストコンピュータ10とを備えている。
【0024】
メモリシステム1は、読み取り専用の記憶装置であるROM2と、各種の情報を必要に応じて書き込むことができるように読み書き可能な記憶装置として構成されるセキュリティメモリ3とを備えている。詳細は図示しないが、本実施の形態におけるメモリシステム1は、ホストコンピュータ10に対して着脱自在に構成されている。このようなメモリシステム1としては、例えば、メモリカードやゲームカセットが該当するがこれに限定されるものではない。
【0025】
ROM2は、コントローラ20と、メモリアレイ21(第1不揮発性メモリ)とを備えている。コントローラ20は、ホストコンピュータ10からの要求に応じて、メモリアレイ21に格納されている各種データを読み出してホストコンピュータ10に出力する機能を有している。また、コントローラ20は、ホストコンピュータ10との間で、メモリアレイ21に格納された保護対象の情報に対するセキュリティ機能を提供する。コントローラ20が提供するセキュリティ機能としては従来より提案されている様々な手法を適宜採用できるため、以下において詳細な説明は省略する。
【0026】
本実施の形態におけるメモリアレイ21を構成する記憶素子は、ホストコンピュータ10によるデータの書き込みができない素子である。したがって、ROM2は、メモリシステム1において、先述のように読み取り専用の記憶装置(例えば、マスクROMやEPROMなど)として構成されている。ただし、保護対象の情報を格納する第1不揮発性メモリは必ずしも読み取り専用の記憶装置でなくてもよい。
【0027】
メモリアレイ21に格納されているプログラム22は、保護対象の情報であり、ホストコンピュータ10によって実行される。そして、プログラム22には、ホストコンピュータ10によって実行されるときの当該プログラム22の進行状況がマーカーコード等により定義されている。
【0028】
以下の説明では、プログラム22の進行状況として、当該プログラム22には、順次に、N個のステージ(S1,・・・,SN)が定義されているものとする(Nは2以上の自然数。)。また、その時点におけるプログラム22の進行状況(現在のステージ)を、「S」と称し、直前のステージを「S−1」と称し、遷移先のステージを「S」と称する。したがって、当然ではあるが、「S−1」、「S」および「S」は、いずれもS1,・・・,SNのいずれかである。
【0029】
図1に戻って、セキュリティメモリ3は、コントローラ30と、メモリアレイ31(第2不揮発性メモリ)とを備えている。
【0030】
コントローラ30の詳細は図示しないが、コントローラ30は、各種の論理回路と記憶バッファや高速のRAM、計時回路等から構成されている。コントローラ30は、ホストコンピュータ10からの要求に応じて、メモリアレイ31に格納されている各種データを読み出してホストコンピュータ10に出力する機能と、メモリアレイ31に各種データを格納する機能とを有している。また、コントローラ30は、タイマ機能を有しており、時間を測定する(例えば、一定時間が経過したことを検出する。)ことが可能である。本実施の形態におけるコントローラ30の機能および動作の詳細については、後述する。
【0031】
図2は、第1の実施の形態におけるメモリアレイ31の記憶領域と各記憶領域に格納される情報とを例示する図である。メモリアレイ31は、複数の不揮発性の記憶素子から構成されており、図2に示すように複数の記憶領域に分割されている。
【0032】
本実施の形態におけるメモリアレイ31の記憶領域としては、データセーブ領域32、オフセット値格納領域33、進行状況格納領域34、および、コマンド格納領域35が定義されている。ただし、定義される記憶領域はこれに限定されるものではなく、必要に応じて、その他の記憶領域が定義されてもよい。
【0033】
メモリアレイ31を構成する記憶素子は、ホストコンピュータ10によるデータの読み出しのみではなく、ホストコンピュータ10によるデータの書き込みも可能な素子である。したがって、セキュリティメモリ3は、メモリシステム1において、先述のように読み書き可能な記憶装置として構成されている。
【0034】
ただし、セキュリティメモリ3が備える記憶装置は、そのすべてが読み書き可能である必要はない。少なくともデータセーブ領域32および進行状況格納領域34が読み書き可能に構成されていれば、例えば、オフセット値格納領域33およびコマンド格納領域35は、読み取り専用であってもよい。しかし、セキュリティ機能を強化させる意味では、セキュリティメモリ3がワンチップで構成されていることが好ましい。
【0035】
データセーブ領域32は、格納情報120を格納する記憶領域である。格納情報120は、ホストコンピュータ10において作成され、メモリシステム1に転送されて格納されるデータであり、主に、プログラム22の実行を、当該格納情報120が作成された時点から再開させるときに読み出されるバックアップ用のデータである。このように、格納情報120を格納することにより、本実施の形態におけるセキュリティメモリ3は、データセーブ用のバックアップメモリとしての機能を有している。なお、主に、格納情報120は、プログラム22を中断するときなどに、ユーザの指示により作成されるが、ホストコンピュータ10が任意のタイミングで自動的に(ユーザの指示によらずに)作成してもよい。
【0036】
オフセット値格納領域33は、オフセット情報330を格納する記憶領域である。
【0037】
図3は、第1の実施の形態におけるオフセット情報330を例示する図である。オフセット情報330とは、各ステージS1,・・・,SNに対応するオフセット値をコントローラ30が求めるための情報である。
【0038】
第1の実施の形態におけるオフセット情報330は、ステージS1,・・・,SNと、オフセット値F1,・・・,FNとが、それぞれ一対一で互いに関連づけられたテーブル構造の情報としてオフセット値格納領域33に予め格納されている。詳細は後述するが、例えば、オフセット情報330において、「S1」に関連づけられているオフセット値である「F1」は、現在のステージである「S」が「S1」であるときのアクセス要求に対して用いられるオフセット値である。
【0039】
進行状況格納領域34は、進行状況情報340および予約フラグ341を格納する記憶領域である。進行状況情報340は、コントローラ30により作成され、更新される情報であって、現在のステージである「S」を記録している情報である。予約フラグ341については後述するが、予約フラグ341はメモリアレイ31以外の記憶装置(コントローラ30のレジスタなど)に格納されてもよい。
【0040】
コマンド格納領域35は、コマンド情報350を格納する記憶領域である。コマンド情報350とは、ホストコンピュータ10から発行されるコマンドと、その機能とを関連づける情報である。コントローラ30は、ホストコンピュータ10からのコマンドを受け付けると、コマンド情報350を参照して、当該コマンドに関連づけられている機能を特定して、当該機能を実現する動作を実行する。
【0041】
本実施の形態におけるコマンド情報350には、特に、セキュリティメモリ3(コントローラ30)に対して発行されるコマンドとして、進行状況取得コマンド、進捗更新コマンド、オフセット取得コマンド、リードコマンド、ライトコマンドが定義されている。
【0042】
進行状況取得コマンドは、コントローラ30に対して、進行状況情報340から「S」を読み出して、ホストコンピュータ10に出力するように要求するコマンドである。すなわち、ホストコンピュータ10は、進行状況取得コマンドを発行することにより、必要に応じて、現在のステージである「S」をセキュリティメモリ3に問い合わせることができる。したがって、ホストコンピュータ10において進行状況情報340に相当する情報を別途保持しておく必要がない。
【0043】
進捗更新コマンドは、コントローラ30に対して、進行状況情報340を更新するように要求するコマンドである。進捗更新コマンドは、変更先(遷移先)のステージを示す情報(付加情報)とともに、発行される。本実施の形態では、進捗更新コマンドに付加される情報は、現在のステージである「S」と遷移先のステージである「S」とのプログラム22における定義順の相対的な差を示す情報とする。例えば、「S」が「S10」であった場合において、進捗更新コマンドとともに伝達される付加情報が「+2」であれば「S」は「S10」から2つ進んだ「S12」となることを意味し、付加情報が「−2」であれば「S」は「S10」から2つ戻った「S8」であることを意味する。
【0044】
オフセット取得コマンドは、コントローラ30に対して、オフセット情報330から「S」に対応するオフセット値を読み出して、ホストコンピュータ10に出力するように要求するコマンドである。
【0045】
リードコマンドは、読み出し用のアドレスとともにコントローラ30に対して発行されるコマンドであって、データセーブ領域32から格納情報120を読み出して、ホストコンピュータ10に出力するように要求するコマンドである。
【0046】
ライトコマンドは、書き込み用のアドレスおよび格納情報120とともにコントローラ30に対して発行されるコマンドであって、データセーブ領域32に当該格納情報120を格納するように要求するコマンドである。
【0047】
なお、リードコマンドおよびライトコマンドに付加される読み出し用のアドレスおよび書き込み用のアドレスを、各コマンドによって指定されるアドレスの意味で、「指定アドレス」と称する。
【0048】
図1に戻って、ホストコンピュータ10は、各種のデータの演算を行うとともにホストコンピュータ10が備える各種ハードウェアを制御するCPU11と、各種のデータを記憶する記憶装置12とを備えている。これにより、ホストコンピュータ10は、一般的なコンピュータとしての構成および機能を備えている。また、ホストコンピュータ10は、図示しないカードスロットを備えており、当該カードスロットにメモリシステム1を装着することが可能である。
【0049】
ホストコンピュータ10のCPU11は、メモリアレイ21に格納されているプログラム22をコントローラ20を介して記憶装置12にロードしつつ、実行する機能を有している。なお、CPU11は、プログラム22を実行しつつ、マーカーコード等を検出し、実行中のプログラム22の進行状況(進行中のステージの遷移の有無等。)を把握する。
【0050】
さらに、CPU11は、先述のように、各種のコマンドをコントローラ30に対して発行し、コントローラ30を介してメモリアレイ31にアクセスする機能も有している。
【0051】
記憶装置12は、CPU11の一時的なワーキングエリアとして使用されるRAM(一般的には、高速アクセス可能な揮発性の記憶装置が採用される。)や、ホストコンピュータ10の起動プログラム(図示せず)等を格納しておく読み取り専用のROMなどのハードウェアから構成されている。また、図1には示していないが、セキュリティ機能強化のためには、記憶装置12の一部または全部がCPU11の内部にあってもよい。
【0052】
また、詳細は図示しないが、ホストコンピュータ10は、ユーザに対して情報を出力する出力装置(ディスプレイやLED、スピーカ、プリンタ等)、ユーザが情報を入力するために操作する入力装置(キーボードやボタン、コントローラ、マイク、タッチパネル等)などのハードウェアを適宜備えていてもよい。
【0053】
以上が、メモリシステム1を含むコンピュータシステムの構成および機能の説明である。次に、コンピュータシステムの動作を説明しつつ、本実施の形態における情報保護方法について説明する。
【0054】
図4および図5は、第1の実施の形態におけるセキュリティメモリ3の動作を示す流れ図である。セキュリティメモリ3は、起動中のホストコンピュータ10にメモリシステム1が装着された状態で動作する。なお、以下において、ROM2のコントローラ20の動作については、従来の技術を適用することが可能であるため、適宜説明を省略する。
【0055】
メモリシステム1が動作中において、セキュリティメモリ3のコントローラ30は、ホストコンピュータ10からの各種コマンドを受け付けたり、各種の状態を検出したりすることが可能な状態となっている(図4におけるステップS1,S4,S9、および、図5におけるステップS12,S16,S19)。
【0056】
以下、メモリシステム1に電力が供給され、コントローラ30がホストコンピュータ10からのコマンドを受け付けることが可能となっている状態を「待ち受け状態」と称する。ただし、コントローラ30が受け付けるコマンドは図4および図5に示すものに限定されるものではない。また、待ち受け状態において、ホストコンピュータ10からコマンドを受け付けると、コントローラ30は、まず、コマンド情報350を参照して、受け付けたコマンドを判定する。
【0057】
待ち受け状態において、ホストコンピュータ10から進捗更新コマンドを受け付けると(ステップS1においてYes。)、コントローラ30は、予約フラグ341に、当該進捗更新コマンドの付加情報に基づいて遷移先のステージ「S」を格納する(ステップS2)。そして、コントローラ30は、計時回路を停止状態とし、計時回路において計時が進行中であればタイマを停止させる(ステップS3)。
【0058】
予約フラグ341とは、進行状況情報340を更新するか否かを判定する際に参照されるフラグであって、更新の要否を「オフ(更新不要)」または「S(更新要)」により示すフラグである。すなわち、第1の実施の形態におけるコントローラ30は、進捗更新コマンドを受け付けても、直ちに進行状況情報340の「S」を更新することはない。
【0059】
待ち受け状態において、ホストコンピュータ10からライトコマンドを受け付けると(ステップS4においてYes)、コントローラ30は、セーブ処理(ステップS5ないしS8)を実行する。
【0060】
第1の実施の形態におけるセーブ処理において、コントローラ30は、まず、ライトコマンドとともに入力される指定アドレスに基づいて、現実に使用する書き込みアドレスを作成する(ステップS5)。なお、本実施の形態におけるコントローラ30は、指定アドレスをそのまま書き込みアドレスとして使用する。
【0061】
書き込みアドレスを作成すると、コントローラ30は、当該書き込みアドレスで示される領域(データセーブ領域32)に、ライトコマンドとともに入力された格納情報120を書き込む(ステップS6)。このようにして、ホストコンピュータ10は、セーブしようとする格納情報120を、メモリアレイ31(データセーブ領域32)に格納する。
【0062】
格納情報120を格納すると(すなわち、データセーブが完了すると)、コントローラ30は、進行状況格納領域34の予約フラグ341を参照して、当該予約フラグ341が「オフ」か否かを判定する(ステップS7)。
【0063】
予約フラグ341に遷移先のステージ「S」が格納されているとき(ステップS7においてNo。)、コントローラ30は、図示しない計時回路(タイマ)を起動して更新待機時間Tを計時するようにセットし(ステップS8)、セーブ処理を終了する。なお、更新待機時間Tとは、ステップS8が実行されてから、進行状況情報340が更新されるまでの猶予時間である。したがって、詳細は後述するが、ステップS8が実行されてから更新待機時間Tが経過すると、進行状況情報340は更新される。
【0064】
一方、予約フラグ341が「オフ」のとき(ステップS7においてYes。)、コントローラ30は、ステップS8をスキップし、セーブ処理を終了する。すなわち、更新待機時間Tがセットされることはないので、進行状況情報340は更新されない。
【0065】
待ち受け状態において、タイマ割り込みが発生すると(ステップS9においてYes。)、コントローラ30は、進行状況情報340を更新する(ステップS10)。具体的には、進行状況情報340に記録されている現在のステージ「S」を、予約フラグ341に記録されている遷移先のステージ「S」によって上書きする。
【0066】
ステップS10を実行した後、コントローラ30は、予約フラグ341における「S」を「オフ」に更新する(ステップS11)。これにより、予約フラグ341は、進行状況情報340の更新が予約されていない状態に戻る。
【0067】
セキュリティメモリ3では、タイマ割り込みは、ステップS8においてセットされた更新待機時間Tが経過したときに発生する。そして、タイマ割り込みが発生したときには、ステップS10が実行されることにより、予約されていた進行状況情報340の更新がコントローラ30によって実行される。
【0068】
したがって、第1の実施の形態では、ステップS8が実行されてから更新待機時間Tが経過すると、進行状況情報340は更新される。なお、更新待機時間Tとしては、「0」を含む任意の値を設定することができる。
【0069】
第1の実施の形態では、ステップS8が実行されていなければ、タイマがセットされることがないので、進行状況情報340の「S」が更新されることはない。ここで、ステップS8は、格納情報120がメモリアレイ21に格納されたときにのみ実行される工程である。すなわち、進捗更新コマンドを取得したとき、コントローラ30は、メモリアレイ31に新たな格納情報120を格納した後に、進行状況情報340を更新する。これにより、進捗更新コマンドが発行された直後に進行状況情報340を更新するよりも、第三者に動作を見破られにくいという効果がある。
【0070】
また、ステップS4ないしS6を見れば明らかなように、第1の実施の形態におけるセキュリティメモリ3では、進捗更新コマンドが発行されていること(ステップS1においてYesと判定されていること)は、格納情報120を格納する(ステップS6を実行する)ための条件とはなっていない。すなわち、ホストコンピュータ10は、進捗更新コマンドを発行しなくても、格納情報120をメモリアレイ21に格納することは可能とされている。
【0071】
待ち受け状態において、ホストコンピュータ10からオフセット取得コマンドを受け付けると(図5のステップS12においてYes。)、コントローラ30は、進行状況格納領域34に格納されている進行状況情報340を参照する(ステップS13)。そして、進行状況情報340から現在のステージである「S」を取得する。
【0072】
次に、コントローラ30は、取得した「S」に対応するオフセット値を求める(ステップS14)。本実施の形態では、ステップS13において取得した「S」によりオフセット情報330を検索し、当該「S」に対応付けられているオフセット値を取得することにより、コントローラ30は現在のステージにおけるオフセット値を求める。
【0073】
オフセット値が求まると、コントローラ30は、ステップS14において求めたオフセット値をホストコンピュータ10に出力する(ステップS15)。
【0074】
待ち受け状態において、ホストコンピュータ10から進行状況取得コマンドを受け付けると(ステップS16においてYes。)、コントローラ30は、進行状況格納領域34に格納されている進行状況情報340を参照する(ステップS17)。そして、進行状況情報340から現在のステージである「S」を取得する。
【0075】
現在のステージである「S」を取得すると、コントローラ30は、取得した「S」を現在のステージとしてホストコンピュータ10に出力する(ステップS18)。このように、ホストコンピュータ10からの進行状況取得コマンドに応じて、ホストコンピュータ10に対して進行状況情報340を出力することにより、ホストコンピュータ10において進行状況情報340に相当する情報を別途保持しておく必要がない。
【0076】
待ち受け状態において、リードコマンドが入力されると(ステップS19においてYes。)、コントローラ30は、進行状況格納領域34に格納されている進行状況情報340を参照する(ステップS20)。そして、進行状況情報340から現在のステージである「S」を取得する。
【0077】
現在のステージである「S」を取得すると、コントローラ30は、取得した「S」に対応するオフセット値を求める(ステップS21)。ここでは、すでに説明した、ステップS14と同様の手法によりオフセット値を求める。
【0078】
オフセット値が求まると、コントローラ30は、リードコマンドとともに入力された指定アドレスに、ステップS21で求めたオフセット値を加算して、現実に使用する読み出しアドレスを作成する(ステップS22)。
【0079】
次に、コントローラ30は、ステップS22において作成した読み出しアドレスにより指定される情報(正常であれば所望の格納情報120)をメモリアレイ31から読み出し(ステップS23)、ホストコンピュータ10に格納情報120として出力する(ステップS24)。
【0080】
このように、第1の実施の形態におけるコントローラ30は、ホストコンピュータ10からのリードコマンドとともに通知される指定アドレスと現在のステージに対応したオフセット値とに基づいてメモリアレイ31の読み出しアドレスを求める。そして、当該アドレスで示される領域から読み出した情報を、当該リードコマンドへの応答としてホストコンピュータ10に出力する。したがって、後述するように、ホストコンピュータ10は、セキュリティメモリ3において加算されるオフセット値を考慮した指定アドレスでリードコマンドを発行しないと所望の格納情報120を読み出すことができない。
【0081】
以上がセキュリティメモリ3の動作である。次に、ホストコンピュータ10の動作を説明する。
【0082】
図6は、第1の実施の形態におけるホストコンピュータ10の動作を示す流れ図である。なお、図6に示される各工程は、特に断らない限り、ホストコンピュータ10のCPU11により実行される工程を示す。
【0083】
電源が投入されると、ホストコンピュータ10は、まず、所定の初期設定を実行する(ステップS31)。ステップS31では、記憶装置12のROMに記憶されている起動プログラムがCPU11により実行される。
【0084】
初期設定が終了すると、ホストコンピュータ10は、メモリシステム1が装着されているか否かを判定する(ステップS32)。そして、メモリシステム1を検出すると、メモリシステム1のROM2からプログラム22の一部(最初に取得すべき特定の部分)を記憶装置12にロードし(ステップS33)、ロードしたプログラム22を実行することにより、プログラム進行処理(ステップS34)を開始する。
【0085】
なお、プログラム進行処理は、プログラム22の終了が指示されるまで、ステップS35においてNoと判定されることにより、継続される。
【0086】
図7は、第1の実施の形態におけるプログラム進行処理を示す流れ図である。ホストコンピュータ10は、プログラム22を進行させつつ、プログラム22を進行させることにより検出される各種の状態を監視している(ステップS40,S44,S50)。ただし、ホストコンピュータ10が監視している状態は、図7に示されるものに限定されるものではない。
【0087】
プログラム進行処理において、情報格納処理が指示されると(ステップS40においてYes。)、ホストコンピュータ10は、第1の実施の形態における情報格納処理(ステップS41ないしS43)を開始する。なお、情報格納処理は、ユーザによって指示される場合に限られるものではなく、プログラム22内に情報格納処理を実行するように記述されている場合もあり得る。
【0088】
情報格納処理が開始されると、まず、ホストコンピュータ10は、セキュリティメモリ3に格納する格納情報120を作成する(ステップS41)。
【0089】
格納情報120は、現在の状態を保存しておき、後にプログラム22を現在の状態から再開するために作成される。例えば、ユーザがプログラム22を中断しておいて、後に再開させたいと望む場合などである。また、格納情報120は、後に必要となる情報をセキュリティメモリ3に格納しておき、必要なときに読み出すために作成される場合もある。例えば、プログラム22を実行するために必要不可欠な情報を、一旦、セキュリティメモリ3に格納しておく場合などが考えられる。後者の場合は格納情報120に現在のステージ「S」を格納しておく必要はないが、前者の場合は再開するときのステージ(その場合は遷移先のステージとなる。)として現在のステージ「S」を格納しておくことが好ましい。
【0090】
格納情報120を作成すると、ホストコンピュータ10は、当該格納情報120を格納する領域を示す指定アドレス(データセーブ領域32における位置を示す。)を作成する(ステップS42)。
【0091】
格納情報120および当該格納情報120を格納するための指定アドレスが作成されると、ホストコンピュータ10は、これらの情報とともに、セキュリティメモリ3に対してライトコマンドを発行する(ステップS43)。
【0092】
すでに説明したように、ライトコマンドが発行されると、セキュリティメモリ3は、指定アドレスに格納情報120を格納する。したがって、ステップS43を実行することにより、ホストコンピュータ10は、所望の格納情報120をセキュリティメモリ3に格納することができる。
【0093】
プログラム進行処理において、情報読み出し処理が指示されると(ステップS44においてYes。)、ホストコンピュータ10は、情報読み出し処理(ステップS45ないしS49)を開始する。なお、情報読み出し処理は、情報格納処理と同様に、ユーザによって指示される場合に限られるものではなく、プログラム22内に情報格納処理を実行するように記述されている場合もあり得る。
【0094】
情報読み出し処理が開始されると、まず、ホストコンピュータ10は、セキュリティメモリ3にオフセット取得コマンドを発行する(ステップS45)。オフセット取得コマンドが発行されるとセキュリティメモリ3から、現在のオフセット値が出力されるので、ホストコンピュータ10はこれを取得する(ステップS46)。
【0095】
次に、ホストコンピュータ10は、読み出そうと所望する格納情報120のアドレス(例えば、情報格納処理における指定アドレス。)から、オフセット値を減算することにより、情報読み出し処理における指定アドレス(読み出し用の指定アドレス。)を作成する(ステップS47)。
【0096】
指定アドレスを作成すると、ホストコンピュータ10は、作成した指定アドレスとともにリードコマンドをセキュリティメモリ3に対して発行する(ステップS48)。リードコマンドが発行されると、セキュリティメモリ3では指定アドレスにオフセット値が加算された読み出しアドレスから情報が読み出され、格納情報120として出力される。
【0097】
しかし、リードコマンドとともに出力される指定アドレスは、ステップS47において予めオフセット値が減算されている。したがって、当該指定アドレスにオフセット値が加算された読み出しアドレスは、ホストコンピュータ10が読み出そうと所望する格納情報120のアドレスとなり、このとき格納情報120として出力される情報は、ホストコンピュータ10が、本来、読み出そうと所望する格納情報120である。このようにして、情報読み出し処理において、ホストコンピュータ10は格納情報120を取得する(ステップS49)。
【0098】
第1の実施の形態では、格納情報120を読み出すときには、予めオフセット値を取得して、当該オフセット値に基づいた読み出し用の指定アドレスを作成してリードコマンドを発行しなければ、所望の格納情報120を読み出すことができない仕組みになっている。言い換えれば、本実施の形態におけるコンピュータシステムでは、ホストコンピュータ10が、予めオフセット値を取得して、当該オフセット値に基づいた指定アドレスを作成してリードコマンドを発行しなければ、セキュリティメモリ3に格納した格納情報120を読み出せなくなるように構成されている。
【0099】
なお、第1の実施の形態では、ステップS14(ホストコンピュータ10からのオフセット取得コマンドによりセキュリティメモリ3のコントローラ30がオフセット値を求める工程)が実行されてから、ステップS21(リードコマンドによりコントローラ30が読み出しアドレスを作成するためにオフセット値を求める工程)が実行されるまでの間に、進行状況情報340が更新されてオフセット値が変更されると、正常な処理であっても、正常な格納情報120を読み出せなくなる。したがって、この間は、コントローラ30が計時回路をロックするなどして、進行状況情報340が更新されないようにすることが好ましい。
【0100】
また、先述のように、進捗更新コマンドが発行されても、セキュリティメモリ3は、直ちに進行状況情報340を更新しない。すなわち、厳密には、ホストコンピュータ10と、セキュリティメモリ3との間には、ステージの遷移にタイムラグが発生していることになる。しかし、第1の実施の形態における情報読み出し処理は、ホストコンピュータ10における現在のステージに関係のない処理とされているので、このようなタイムラグが発生していても問題はない。
【0101】
例えば、ホストコンピュータ10がステージS2であり、セキュリティメモリ3が未だステージS1である場合、ステップS46ではステージS1に対応するオフセット値F1(図3)が現在のオフセット値として取得される。しかし、ステップS48において発行されるリードコマンドに対しては、ステップS21においてステージS1に対応するオフセット値(すなわち、オフセット値F1)が取得される。したがって、オフセット値F1が減算されて作成された指定アドレスに、オフセット値F1が加算されて読み出しが実行されるので、結局、所望の格納情報120が読み出されることになり、問題は生じない。
【0102】
プログラム進行処理において、ステージを遷移させる必要が生じたとき(ステップS50においてYes。)、ホストコンピュータ10は、セキュリティメモリ3に対して進行状況取得コマンドを発行する(ステップS51)。なお、ステージを遷移させる必要が生じる場合としては、プログラム22の実行中にステージを遷移させるためのマーカーコードを検出した場合の他に、ステップS49において読み出した格納情報120によってプログラム22を当該格納情報120に記録されているステージから再開させる場合などがある。
【0103】
すでに説明したように、進行状況取得コマンドが発行されると、セキュリティメモリ3では、進行状況情報340が参照され、現在のステージ「S」が出力される。したがって、進行状況取得コマンドを発行することにより、ホストコンピュータ10は、現在のステージ「S」を取得する(ステップS52)。
【0104】
現在のステージ「S」を取得すると、ホストコンピュータ10は、セキュリティメモリ3から取得したステージ「S」と、遷移先のステージ「S」との差を求め(ステップS53)、これを付加情報として、セキュリティメモリ3に対して進捗更新コマンドを発行する(ステップS54)。
【0105】
すでに説明したように、進捗更新コマンドが発行されると、セキュリティメモリ3では、予約フラグ341に遷移先のステージ「S」が記録され、その後、タイマ割り込みが発生して、進行状況情報340が更新される。
【0106】
なお、先述のように、厳密には、ホストコンピュータ10と、セキュリティメモリ3との間には、ステージの遷移にタイムラグが発生している場合がある。セキュリティメモリ3において進行状況情報340が未だ更新されておらず、進行状況情報340が「S−1」であり予約フラグ341が「S」のときに、ホストコンピュータ10においてステージ「S」をさらに「S」に遷移させようとすると、ステップS52ではステージ「S−1」が取得され、ステップS53では、「S−1」と「S」との差が求められることになる。
【0107】
しかし、この差が付加情報として進捗更新コマンドが発行されると、この時点の進行状況情報340は「S−1」であるから、求められる遷移先のステージは「S」となり、これが予約フラグ341に新たに格納される(ステージ「S」は上書きされる。)。また、例え、この時点で、更新のためのタイマが起動中であっても、ステップS3により停止されることから、ステージ「S」への更新は、一旦、保留される。したがって、ホストコンピュータ10と、セキュリティメモリ3との間でタイムラグが発生していても、進捗更新コマンドを発行するときにおいて問題は生じない。
【0108】
以上が、第1の実施の形態における情報保護方法の説明である。次に、本実施の形態における効果について検証する。
【0109】
メモリシステム1では、保護の対象となる情報は、ROM2のメモリアレイ21に格納されている。プログラム22を不正に複製し実施しようと企図する者(以下、「不正な複製者」と称する。)は、ROM2のセキュリティ機能を破ってメモリアレイ21に格納されている情報(プログラム22)を複製する。
【0110】
しかし、デッドコピーされたプログラム22を実行すると、格納情報120をメモリ(セキュリティメモリ3に相当する記憶装置)に格納するときには通常どおり指定アドレスで格納されるにもかかわらず、当該格納情報120を読み出すときには何らかのオフセット値が減算されてリードコマンドが発行されてしまう。すなわち、メモリに格納した格納情報120を読み出すことができなくなる。
【0111】
したがって、不正な複製者は、複製したプログラム22を解析して、このような処理を取り除くためのプログラム22の改ざんを行うか、あるいは、セキュリティメモリ3をも忠実に再現して、減算された指定アドレスに適切なオフセット値が加算されるようにしなければならない。
【0112】
しかし、プログラム22の改ざんは、デッドコピーしたプログラム22を逆アセンブルしたうえで、セキュリティ機能に関する部分を正確に特定し、改ざんしなければならず、非常に困難である。
【0113】
また、セキュリティメモリ3を再現するためには、セキュリティメモリ3のコントローラ30が提供するセキュリティ機能をも看破し、メモリアレイ31に格納されている情報(特に、オフセット情報330)をもすべて読み出して複製する必要がある。
【0114】
確かに、オフセット情報330は、外部のコンピュータ(ホストコンピュータ10に限られない。例えば、不正な複製者の使用するコンピュータも含む。)からオフセット取得コマンドを発行することによりメモリアレイ31から読み出せる。しかし、それによって読み出せるのは、そのときのステージに対応するオフセット値のみであり、すべてのオフセット情報330を読み出すことはできない。
【0115】
したがって、すべてのオフセット値を読み出して、オフセット情報330を完全に再現するには、外部のコンピュータは、すべての正常なホストコンピュータ10のステージを再現しつつ、正確に、オフセット値の読み出し手順を再現してやらなければならない。例えば、一度プログラム22を最初から最後まで実行したとしても、そのときにたまたま実行されなかったステージが存在すれば、そのステージに対応するオフセット値は取得できないことになる。したがって、この作業は、プログラム22を、ほぼすべての分岐を含めて実行し尽くす作業となり、非常に困難である。
【0116】
一方で、すべてのオフセット値およびプログラム22におけるマーカーコードの位置や数は、正規のプログラマ(プログラム22の提供者)がプログラム22に応じて書き換えるだけで、容易に変更でき、ホストコンピュータ10における変更を要しない。したがって、例えば、ゲームタイトルごとや改訂版ごとに頻繁に変更でき、不正な複製者は、その度に上記の解析作業を行わなければならず、違法な複製品(海賊版)を製造するまでに一定以上の時間を要することとなる。特に、プログラム22がゲームソフトウェアなどである場合、発売開始直後から海賊版が流通すると正規版の売れ行きに大きな影響がでてしまうという特性がある。したがって、このような市場の製品においては、例え完全に海賊版の製造を完全に防止できなくとも、発売開始から一定期間でも海賊版の出現を遅らせることができるならばその効果は大きいといえる。
【0117】
また、進捗更新コマンドが発行されない場合は、セキュリティメモリ3において格納情報120が格納されるだけで、オフセット値は変化しない。特に、セキュリティメモリ3が初期状態で、進捗更新コマンドが発行されなければ、セキュリティメモリ3の動作は、通常のメモリと同じである。したがって、進捗更新コマンドを知らずに、セキュリティメモリ3のみを観測すると、セキュリティメモリ3が通常のメモリであるかのように観測されるため、セキュリティメモリ3を単体で解読することは困難である。
【0118】
さらに、セキュリティメモリ3では、簡潔に言えば、リードコマンドに付加される指定アドレスを操作することによりセキュリティ機能を提供するものである。すなわち、コントローラ30は、格納情報120の内容を解析する必要がない。したがって、格納情報120が暗号化されていたり、あるいは、ファイルシステムにより分散して格納されたりした場合でも、適用可能である。すなわち、本発明は、他のセキュリティ機能との親和性が高い技術である。
【0119】
以上のように、第1の実施の形態におけるメモリシステム1は、ホストコンピュータ10に接続され、プログラム22を格納するメモリアレイ21と、メモリアレイ21に対するアクセスを制御するコントローラ20と、ホストコンピュータ10からの格納情報120を格納するメモリアレイ31と、プログラム22を使用するホストコンピュータ10の状態(ステージ)に応じてメモリアレイ31のアドレスのオフセット値を求めるコントローラ30とを備え、コントローラ30は、ホストコンピュータ10からのメモリアレイ31へのアクセス要求に対して、当該オフセット値を用いる。これにより、ROM2に格納されているプログラム22を複製しただけでは、プログラム22を正常に実施することができず、セキュリティレベルが向上する。また、プログラム22ごとに容易に変更可能であるとともに、ホストコンピュータ10の仕様を変更することなく、適用が可能であるため、コストを抑制できる。
【0120】
特に、コントローラ30は、ホストコンピュータ10からのリードコマンドとともに通知される指定アドレスとオフセット値とに基づいてメモリアレイ31の読み出しアドレスを求め、当該アドレスで示される領域から読み出した情報を、当該リードコマンドへの応答としてホストコンピュータ10に出力する。これにより、ホストコンピュータ10は、オフセット値を考慮した指定アドレスでリードコマンドを発行しないと所望の格納情報120を読み出せない。
【0121】
また、セキュリティメモリ3が、プログラム22を使用するホストコンピュータ10の状態を進行状況情報340として格納するとともに、ホストコンピュータ10からの進捗更新コマンドに応じて、進行状況情報340を更新することにより、例えば、オフセット値を求めるときなどに、ホストコンピュータ10からその時点のホストコンピュータ10の状態を通知してもらう必要がない。
【0122】
また、ホストコンピュータ10からの進行状況取得コマンドに応じて、ホストコンピュータ10に対して進行状況情報340を出力することにより、ホストコンピュータにおいて進行状況情報340に相当する情報を別途保持しておく必要がない。
【0123】
進捗更新コマンドを取得したとき、メモリアレイ31に新たな格納情報120を格納した後に、進行状況情報340を更新することにより、進捗更新コマンドが発行された直後に進行状況情報340を更新するよりも、第三者に動作を見破られにくい。特に、第1の実施の形態では、いわば、格納情報120が読み出されるときにセキュリティ機能が発動するので、格納情報120が格納されてから進行状況情報340を更新することで、確実にセキュリティ機能を発動させることができるとともに、動作を観測されにくくすることができる。
【0124】
また、進捗更新コマンドを取得してから更新待機時間Tが経過した後に、進行状況情報340を更新することにより、進捗更新コマンドが発行された直後に進行状況情報340を更新するよりも、第三者に動作を見破られにくい。特に、外部のコンピュータから、格納情報120を読み書きされても、その間に更新待機時間Tが経過していなければ、第三者からはセキュリティメモリ3が通常のメモリとして観測されるので、セキュリティ機能を見破られにくい。
【0125】
また、ホストコンピュータ10からのオフセット取得コマンドに応じて、ホストコンピュータ10に対してオフセット値を出力することにより、ホストコンピュータ10においてオフセット情報330に相当する情報を管理しておく必要がない。したがって、プログラム22にオフセット情報330を記述しておく必要がないため、オフセット情報330がプログラム22にも記述される場合に比べて、セキュリティレベルが向上する。
【0126】
なお、ホストコンピュータ10においてオフセット値を減算して指定アドレスを作成し、セキュリティメモリ3において指定アドレスとオフセット値とを加算すると説明した。しかし、ホストコンピュータ10においてオフセット値を加算して指定アドレスを作成し、セキュリティメモリ3において指定アドレスとオフセット値を減算してもよい。以下の実施の形態においても同様である。
【0127】
また、第1の実施の形態では、オフセット情報330において、ステージとオフセット値とが互いに関連づけられており、コントローラ30は「S」でオフセット情報330を検索することによりオフセット値を求めると説明した。しかし、オフセット値を求める手法はこれに限定されるものではない。例えば、オフセット情報330には、ステージと各ステージで使用する演算方法(関数)とが関連づけられており、「S」で検索することにより取得される演算方法によって指定アドレス(あるいは「S」)を演算することによって読み出しアドレス(あるいはオフセット値)を作成するように構成してもよい。このような場合には、ホストコンピュータ10からのオフセット取得コマンドに対して、求めたオフセット値の代わりに、当該演算方法を出力し、ホストコンピュータ10において当該演算方法の逆関数を用いてリードコマンドに付加する指定アドレスを演算するように構成してもよい。
【0128】
また、第1の実施の形態では、ホストコンピュータ10からオフセット取得コマンドが発行されると、セキュリティメモリ3は、格納している進行状況情報340を参照して「S」を取得し、それに対応するオフセット値を求める。すなわち、上記実施の形態では、ホストコンピュータ10は、オフセット値を取得するときに、オフセット取得コマンドのみを発行する。しかし、オフセット取得コマンドとともに、ホストコンピュータ10から「S」を通知させ、この通知された「S」によってセキュリティメモリ3がオフセット値を求めるように構成してもよい。そのように構成すると、オフセット値を取得しようとするときのホストコンピュータ10の状態も再現しなければ、正常に格納情報120を読み出せなくなるため、セキュリティレベルが向上する。ただし、その場合は、ホストコンピュータ10と、セキュリティメモリ3との間のステージの遷移のタイムラグについて、対策が必要となる。
【0129】
また、図2に示した各記憶領域のそれぞれは、メモリアレイ31において連続したアドレスで構成されているように示している。しかし、これらの領域は、いずれも不連続なアドレスにより構成されていてもよい。以下の実施の形態においても同様である。
【0130】
<2. 第2の実施の形態>
第1の実施の形態では、ホストコンピュータ10が格納情報120を読み出すためのアクセス要求をしたときに、セキュリティメモリ3においてオフセット値が用いられた。しかし、ホストコンピュータ10が格納情報120を書き込むためのアクセス要求をしたときに、セキュリティメモリ3においてオフセット値が用いられるように構成することも可能である。
【0131】
図8は、第2の実施の形態におけるセキュリティメモリ3の動作を示す流れ図である。なお、第2の実施の形態におけるコンピュータシステムにおいて第1の実施の形態におけるコンピュータシステムと同様の構成については同符号を付し、適宜説明を省略する。
【0132】
第2の実施の形態においても、メモリシステム1が動作中において、セキュリティメモリ3のコントローラ30は、ホストコンピュータ10からの各種コマンドを受け付けたり、状態を検出したりすることが可能な状態となっている(図8におけるステップS61,S68)。なお、図8では図示を省略しており、以下、説明を省略するが、第2の実施の形態におけるセキュリティメモリ3においても、待ち受け状態において、進捗更新コマンド、オフセット取得コマンドおよび進行状況取得コマンドを受け付けたときの各処理と、タイマ割り込みが発生したときの処理とが、第1の実施の形態と同様に実行される。
【0133】
待ち受け状態において、ライトコマンドが入力されると(ステップS61においてYes。)、コントローラ30は、進行状況格納領域34に格納されている進行状況情報340を参照する(ステップS62)。そして、進行状況情報340から現在のステージである「S」を取得する。
【0134】
現在のステージである「S」を取得すると、コントローラ30は、取得した「S」に対応するオフセット値を求める(ステップS63)。ここでは、すでに説明した、ステップS14と同様の手法によりオフセット値を求める。
【0135】
オフセット値が求まると、コントローラ30は、ライトコマンドとともに入力された指定アドレスに、ステップS63で求めたオフセット値を加算して、現実に使用する書き込みアドレスを作成する(ステップS64)。すなわち、第2の実施の形態では、オフセット値を用いて書き込みアドレスが作成される。
【0136】
書き込みアドレスを作成すると、コントローラ30は、当該書き込みアドレスで示される領域(データセーブ領域32)に、ライトコマンドとともに入力された格納情報120を書き込む(ステップS65)。このように、第2の実施の形態では、ホストコンピュータ10がセーブしようとする格納情報120を、オフセット値が加算された書き込みアドレスでメモリアレイ31(データセーブ領域32)に格納する。
【0137】
格納情報120を格納すると(すなわち、データセーブが完了すると)、コントローラ30は、予約フラグ341が「オフ」か否かを判定する(ステップS66)。
【0138】
予約フラグ341に遷移先のステージ「S」が格納されているとき(ステップS66においてNo。)、コントローラ30は、図示しない計時回路(タイマ)を起動して更新待機時間Tを計時するようにセットし(ステップS67)、セーブ処理を終了する。一方、予約フラグが「オフ」のとき(ステップS66においてYes。)、コントローラ30は、ステップS67をスキップし、セーブ処理を終了する。
【0139】
待ち受け状態において、ホストコンピュータ10からリードコマンドを受け付けると(ステップS68においてYes。)、コントローラ30は、リード処理(ステップS69ないしS71)を実行する。
【0140】
リード処理において、コントローラ30は、まず、リードコマンドとともに入力される指定アドレスに基づいて、現実に使用する読み出しアドレスを作成する(ステップS69)。なお、第2の実施の形態におけるコントローラ30は、指定アドレスをそのまま読み出しアドレスとして使用する。
【0141】
次に、コントローラ30は、ステップS69において作成した読み出しアドレスにより指定される情報(正常であれば所望の格納情報120)をメモリアレイ31から読み出し(ステップS70)、ホストコンピュータ10に格納情報120として出力する(ステップS71)。
【0142】
以上が、第2の実施の形態におけるセキュリティメモリ3の動作である。次に、第2の実施の形態におけるホストコンピュータ10の動作を説明する。
【0143】
図9は、第2の実施の形態におけるプログラム進行処理を示す流れ図である。なお、図9に示される各工程は、特に断らない限り、ホストコンピュータ10のCPU11により実行される工程を示す。また、図9に示すステップS90ないしS94の処理は、第1の実施の形態におけるステップS50ないしS54と同様の処理であるため、説明を省略する。
【0144】
プログラム進行処理において、情報格納処理が指示されると(ステップS80においてYes。)、ホストコンピュータ10は、第2の実施の形態における情報格納処理(ステップS81ないしS85)を開始する。
【0145】
情報格納処理が開始されると、第2の実施の形態におけるホストコンピュータ10は、セキュリティメモリ3に格納する格納情報120を作成する(ステップS81)。
【0146】
格納情報120を作成すると、ホストコンピュータ10は、セキュリティメモリ3にオフセット取得コマンドを発行する(ステップS82)。オフセット取得コマンドが発行されるとセキュリティメモリ3から、第1の実施の形態と同様に、現在のオフセット値が出力されるので、ホストコンピュータ10はこれを取得する(ステップS83)。
【0147】
オフセット値を取得すると、ホストコンピュータ10は、当該格納情報120の書き込もうと所望するアドレスから、オフセット値を減算することにより、情報格納処理おける指定アドレス(書き込み用の指定アドレス。)を作成する(ステップS84)。
【0148】
格納情報120および当該格納情報120を格納するための指定アドレスが作成されると、ホストコンピュータ10は、これらの情報とともに、セキュリティメモリ3に対してライトコマンドを発行する(ステップS85)。
【0149】
すでに説明したように、ライトコマンドが発行されると、第2の実施の形態におけるセキュリティメモリ3は、当該ライトコマンドとともに入力される指定アドレスにオフセット値を加算した書き込みアドレスを作成し、当該アドレスに格納情報120を格納する。しかし、ライトコマンドとともに出力される指定アドレスは、ステップS84において予めオフセット値が減算されている。したがって、当該指定アドレスにオフセット値が加算された書き込みアドレスは、格納情報120を格納しようと所望するアドレスである。このようにして、ステップS85を実行することにより、ホストコンピュータ10は、セキュリティメモリ3(メモリアレイ31)の所望の領域に格納情報120を格納する。
【0150】
プログラム進行処理において、情報読み出し処理が指示されると(ステップS86においてYes。)、ホストコンピュータ10は、第2の実施の形態における情報読み出し処理(ステップS87ないしS89)を開始する。
【0151】
情報読み出し処理が開始されると、まず、ホストコンピュータ10は、読み出そうと所望する格納情報120のアドレス(情報格納処理において所望したアドレス)を指定アドレス(読み出し用の指定アドレス。)として作成する(ステップS87)。
【0152】
指定アドレスを作成すると、ホストコンピュータ10は、作成した指定アドレスとともにリードコマンドをセキュリティメモリ3に対して発行する(ステップS88)。すでに説明したように、リードコマンドが発行されると、第2の実施の形態におけるセキュリティメモリ3ではリードコマンドとともに入力された指定アドレスから情報が読み出され、格納情報120として出力される。
【0153】
したがって、格納情報120が所望のアドレスに格納されていれば、このとき格納情報120として出力される情報は、ホストコンピュータ10が、本来、読み出そうと所望する格納情報120である。このようにして、第2の実施の形態における情報読み出し処理において、ホストコンピュータ10は格納情報120を取得する(ステップS89)。
【0154】
以上のように、第2の実施の形態におけるコントローラ30は、ホストコンピュータ10からのライトコマンドとともに通知されるアドレスとオフセット値とに基づいてメモリアレイ31の書き込みアドレスを求め、当該アドレスで示される領域(メモリアレイ31の領域)にライトコマンドとともに入力される格納情報120を格納する。これにより、ホストコンピュータ10は、オフセット値を考慮したアドレスでライトコマンドを発行しないと所望のアドレスに格納情報120を格納できないので、以後、読み出すことができなくなる。したがって、第2の実施の形態におけるコンピュータシステムも、第1の実施の形態と同様の効果を得ることができる。
【0155】
<3. 変形例>
以上、本発明の実施の形態について説明してきたが、本発明は上記実施の形態に限定されるものではなく様々な変形が可能である。
【0156】
例えば、上記実施の形態では、メモリシステム1において、保護対象の情報を格納するROM2と、セキュリティメモリ3とが一体構造物を構成していた。しかし、例えば、ROM2のメモリアレイ21に相当する記憶媒体をCD−ROMで構成し、ROM2のコントローラ20をホストコンピュータ10に設けたCD−ROMドライブ装置とCPU11とで構成し、着脱可能かつ書き込み可能な記憶媒体にセキュリティメモリ3に相当する構成のみを搭載して実現することも可能である。
【0157】
また、セキュリティメモリ3からオフセット値が出力されるときにおいて、当該オフセット値が暗号化されていてもよい。その場合、第三者がオフセット情報330を再現することがさらに困難となり、セキュリティレベルが向上する。
【0158】
また、オフセット値はすべてのステージにおいて互いに異なる値である必要はない。いくつかのステージにおいて共通のオフセット値が用いられてもよい。
【0159】
また、上記実施の形態に示した各工程は、あくまでも例示であって、同様の効果が得られるならば、各工程における処理内容や、各工程の実行順は、適宜、変更されてもよい。
【符号の説明】
【0160】
1 メモリシステム
10 ホストコンピュータ
120 格納情報
2 ROM
20,30 コントローラ
21,31 メモリアレイ
22 プログラム
3 セキュリティメモリ
330 オフセット情報
340 進行状況情報
341 予約フラグ

【特許請求の範囲】
【請求項1】
ホストコンピュータに接続されるメモリシステムであって、
保護対象の情報を格納する第1不揮発性メモリと、
前記第1不揮発性メモリに対するアクセスを制御する第1コントローラと、
前記ホストコンピュータからの格納情報を格納する第2不揮発性メモリと、
前記保護対象の情報を使用する前記ホストコンピュータの状態に応じて前記第2不揮発性メモリのアドレスのオフセット値を求める第2コントローラと、
を備え、
前記第2コントローラは、前記ホストコンピュータからの前記第2不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いるメモリシステム。
【請求項2】
請求項1に記載のメモリシステムであって、
前記第2コントローラは、前記ホストコンピュータからの読み出しコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第2不揮発性メモリの読み出しアドレスを求め、前記読み出しアドレスで示される領域から読み出した情報を、前記読み出しコマンドへの応答として前記ホストコンピュータに出力するメモリシステム。
【請求項3】
請求項1または2に記載のメモリシステムであって、
前記第2コントローラは、前記ホストコンピュータからの書き込みコマンドとともに通知されるアドレスと前記オフセット値とに基づいて前記第2不揮発性メモリの書き込みアドレスを求め、前記書き込みアドレスで示される領域に前記書き込みコマンドとともに入力される格納情報を前記第2不揮発性メモリに格納するメモリシステム。
【請求項4】
請求項1ないし3のいずれかに記載のメモリシステムであって、
前記保護対象の情報を使用する前記ホストコンピュータの状態を進行状況情報として格納するとともに、前記ホストコンピュータからの進捗更新コマンドに応じて、前記進行状況情報を更新するメモリシステム。
【請求項5】
請求項4に記載のメモリシステムであって、
前記ホストコンピュータからの進行状況取得コマンドに応じて、前記ホストコンピュータに対して前記進行状況情報を出力するメモリシステム。
【請求項6】
請求項4または5に記載のメモリシステムであって、
前記進捗更新コマンドを取得したとき、前記第2不揮発性メモリに新たな格納情報を格納した後に、前記進行状況情報を更新するメモリシステム。
【請求項7】
請求項4ないし6のいずれかに記載のメモリシステムであって、
前記進捗更新コマンドを取得したとき、前記第2不揮発性メモリから格納情報を読み出した後に、前記進行状況情報を更新するメモリシステム。
【請求項8】
請求項4ないし7のいずれかに記載のメモリシステムであって、
前記進捗更新コマンドを取得してから所定時間が経過した後に、前記進行状況情報を更新するメモリシステム。
【請求項9】
請求項1ないし8のいずれかに記載のメモリシステムであって、
前記ホストコンピュータからのオフセット取得コマンドに応じて、前記ホストコンピュータに対して前記オフセット値を出力するメモリシステム。
【請求項10】
保護対象の情報を使用するホストコンピュータに接続されるセキュリティメモリであって、
前記ホストコンピュータからの格納情報を格納する不揮発性メモリと、
前記保護対象の情報を使用する前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求めるコントローラと、
を備え、
前記コントローラは、前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いるセキュリティメモリ。
【請求項11】
ホストコンピュータにおいて使用される保護対象の情報を保護する情報保護方法であって、
前記ホストコンピュータからの格納情報を不揮発性メモリに格納する工程と、
前記不揮発性メモリから格納情報を読み出す工程と、
前記保護対象の情報を使用する前記ホストコンピュータの状態に応じて前記不揮発性メモリのアドレスのオフセット値を求める工程と、
を有し、
前記ホストコンピュータからの前記不揮発性メモリへのアクセス要求に対して、前記オフセット値を用いる情報保護方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2013−25654(P2013−25654A)
【公開日】平成25年2月4日(2013.2.4)
【国際特許分類】
【出願番号】特願2011−161471(P2011−161471)
【出願日】平成23年7月25日(2011.7.25)
【出願人】(591128453)株式会社メガチップス (322)
【Fターム(参考)】