(57)【特許請求の範囲】
【請求項１】
複数の格納読出処理部と、格納要求受付部と、読出要求受付部と、読出出力部と、を備える格納装置であって、
（ａ）前記格納要求受付部は、格納すべき値を指定する格納要求を受け付けて、これを格納値として前記複数の格納読出処理部のそれぞれに与え、
（ｂ）前記読出要求受付部は、格納された値を読み出すべき旨の読出要求を受け付け、
（ｃ）前記複数の格納読出処理部のそれぞれは、変換計算部と、格納部と、逆変換計算部と、を備え、
前記変換計算部は、当該格納値が与えられた場合、これに他の格納読出処理部のいずれとも異なる所定の変換計算を適用し、その結果を変換済値として得て、
前記格納部は、前記得られた変換済値を格納し、
前記逆変換計算部は、当該読出要求が受け付けられた場合、前記格納部に格納された値に、所定の逆変換計算であって当該格納値として与えられうる任意の値に当該所定の変換計算を適用した結果に当該所定の逆変換計算を適用すると当該値が得られる逆変換計算を適用し、その結果を出力値として得て、
（ｄ）前記読出出力部は、
前記複数の格納読出処理部のそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力し、
異なるものがある場合、最大多数の出力値を、読出要求に対する結果として出力する
ことを特徴とするもの。
【請求項２】
請求項１に記載の格納装置であって、更新部をさらに備え、
前記更新部は、前記複数の格納読出処理部のそれぞれから得られた出力値に異なるものがある場合、当該最大多数の出力値以外の出力値が得られた格納読出処理部のそれぞれに、当該最大多数の出力値を格納値として与えて更新させる
ことを特徴とするもの。
【請求項３】
請求項１に記載の格納装置であって、報告部をさらに備え、
前記報告部は、前記複数の格納読出処理部のそれぞれから得られた出力値に異なるものがある場合であって、最大多数の出力値が複数種類ある場合、エラーが発生した旨の報告をする
ことを特徴とするもの。
【請求項４】
請求項１に記載の格納装置であって、
前記複数の格納読出処理部が備える格納部のそれぞれは、メモリ内に動的に確保され、所定の条件が満たされる場合、異なるアドレスに動的に再確保される
ことを特徴とするもの。
【請求項５】
請求項１に記載の格納装置であって、
前記複数の格納読出処理部のいずれか少なくとも１つにおいて、
これが備える格納部は、複数の記憶装置を有し、
当該格納部は、前記得られた変換済値を当該複数の記憶装置に分割して記憶し、
これが備える逆変換計算部は、当該読出要求が受け付けられた場合、当該複数の記憶装置に分割して記憶された値を結合して、これを当該格納部に格納された値とする
ことを特徴とするもの。
【請求項６】
請求項１に記載の格納装置であって、
（ｅ）前記複数の格納読出処理部のそれぞれについて、
前記格納部は、当該格納値のハッシュ値をさらに格納し、
前記逆変換計算部は、当該読出要求が受け付けられた場合、「当該所定の逆変換計算を適用した結果のハッシュ値と前記格納部に格納されたハッシュ値とが等しいか否か」を検査し、
（ｆ）前記読出出力部は、
前記複数の格納読出処理部のうち、当該検査の結果が「等しい」もののそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力する
ことを特徴とするもの。
【請求項７】
請求項１に記載の格納装置であって、
（ｅ）前記複数の格納読出処理部のそれぞれについて、
前記格納部は、当該変換済値のハッシュ値をさらに格納し、
前記逆変換計算部は、当該読出要求が受け付けられた場合、「前記格納部に格納された値のハッシュ値と前記格納部に格納されたハッシュ値とが等しいか否か」を検査し、
（ｆ）前記読出出力部は、
前記複数の格納読出処理部のうち、当該検査の結果が「等しい」もののそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力する
ことを特徴とするもの。
【請求項８】
請求項１に記載の格納装置であって、
前記複数の格納読出処理部が備える変換計算部と逆変換計算部と、は、あらかじめコンピュータ通信網からダウンロードしたプログラムを実行して当該所定の変換計算と当該所定の逆変換計算とを適用し、所定の条件が満たされる場合、当該プログラムを当該コンピュータ通信網から再ダウンロードする
ことを特徴とするもの。
【請求項９】
コンピュータ（ゲーム装置であって、コンピュータ通信網に接続されるものを含む。）を、複数の格納読出処理部、格納要求受付部、読出要求受付部、および、読出出力部として機能させるプログラムであって、
（ａ）前記格納要求受付部は、格納すべき値を指定する格納要求を受け付けて、これを格納値として前記複数の格納読出処理部のそれぞれに与え、
（ｂ）前記読出要求受付部は、格納された値を読み出すべき旨の読出要求を受け付け、
（ｃ）前記複数の格納読出処理部のそれぞれは、変換計算部と、格納部と、逆変換計算部と、を備え、
前記変換計算部は、当該格納値が与えられた場合、これに他の格納読出処理部のいずれとも異なる所定の変換計算を適用し、その結果を変換済値として得て、
前記格納部は、前記得られた変換済値を格納し、
前記逆変換計算部は、当該読出要求が受け付けられた場合、前記格納部に格納された値に所定の逆変換計算であって、当該格納値として与えられうる任意の値に当該所定の変換計算を適用した結果に当該所定の逆変換計算を適用すると、当該値が得られる逆変換計算を適用し、その結果を出力値として得て、
（ｄ）前記読出出力部は、
前記複数の格納読出処理部のそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力し、
異なるものがある場合、最大多数の出力値を、読出要求に対する結果として出力する
ように機能させることを特徴とするプログラム。
【請求項１０】
複数の格納読出処理工程と、格納要求受付工程と、読出要求受付工程と、読出出力工程と、を備える格納方法であって、
（ａ）前記格納要求受付工程では、格納すべき値を指定する格納要求を受け付けて、これを格納値として前記複数の格納読出処理工程のそれぞれに与え、
（ｂ）前記読出要求受付工程では、格納された値を読み出すべき旨の読出要求を受け付け、
（ｃ）前記複数の格納読出処理工程のそれぞれは、変換計算工程と、格納工程と、逆変換計算工程と、を備え、
前記変換計算工程では、当該格納値が与えられた場合、これに他の格納読出処理工程とは異なる所定の変換計算を適用し、その結果を変換済値として得て、
前記格納工程では、前記得られた変換済値を、他の格納読出処理工程とは異なる格納部に格納し、
前記逆変換計算工程では、当該読出要求が受け付けられた場合、当該格納部に格納された値に、所定の逆変換計算であって、当該格納値として与えられうる任意の値に当該所定の変換計算を適用した結果に当該所定の逆変換計算を適用すると、当該値が得られる逆変換計算を適用し、その結果を出力値として得て、
（ｄ）前記読出出力工程では、
前記複数の格納読出処理工程のそれぞれにて得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力し、
異なるものがある場合、最大多数の出力値を、読出要求に対する結果として出力する
ことを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、格納装置、プログラム、ならびに、格納方法に関する。
【０００２】
【従来の技術】
コンピュータを用いた各種の情報処理のおいては、値をメモリやハードディスクなどの揮発性記憶装置や不揮発性記憶装置に格納したり、読み出したりする処理は極めて重要である。
【０００３】
一方で、このような処理を行うプログラムは、ユーザが所有するコンピュータにおいて実行されるのが一般的である。したがって、値の格納や読出を行うための格納装置は、ユーザの所有物であることがきわめて多い。したがって、ユーザや当該コンピュータにおいて実行されるアプリケーションには、このような格納装置に格納される値を任意に書き換える機会が与えられることになる。
【０００４】
【発明が解決しようとする課題】
しかしながら、あるプログラムが用いるためにメモリ等に格納した値をユーザや他のアプリケーション任意に書き換えうることとすると、当該プログラムが誤動作するおそれが生ずる、という問題がある。
【０００５】
このほか、ユーザが所有するコンピュータ自体の故障や電源切れなどにより、格納装置の動作が不安定となり、格納された値が変化してしまうような場合にも、同様の問題が生ずる。
【０００６】
【発明が解決しようとする課題】
そこで、格納装置に格納された値が不用意に書き換えられたり変化したりしないようにし、書き換えられたり変化したりした場合には、できるだけこれを修復し、必要に応じて、各種の報告を行う技術が強く求められている。
【０００７】
本発明は、このような課題を解決するためになされたもので、格納される値の不用意な書き換えや変化を修復するのに好適な格納装置、これをコンピュータによって実現するプログラム、ならびに格納方法を提供することを目的とする。
【０００８】
【課題を解決するための手段】
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
【０００９】
本発明の第１の観点に係る格納装置は、複数の格納読出処理部と、格納要求受付部と、読出要求受付部と、読出出力部と、を備え、以下のように構成する。
【００１０】
すなわち、格納要求受付部は、格納すべき値を指定する格納要求を受け付けて、これを格納値として複数の格納読出処理部のそれぞれに与える。したがって、同じ値が、格納値として複数の格納読出処理部のそれぞれに与えられることとなる。
【００１１】
一方、読出要求受付部は、格納された値を読み出すべき旨の読出要求を受け付ける。したがって、読出要求受付部が当該要求を受け付けることを契機として、当該格納装置に過去に格納された値を読み出す処理が開始される。
【００１２】
さらに、複数の格納読出処理部のそれぞれは、変換計算部と、格納部と、逆変換計算部と、を備え、以下のように構成する。
【００１３】
まず、当該格納読出処理部は、他の格納読出処理部とは異なる所定の変換計算と、これに対応付けられる所定の逆変換計算と、を用いる。ここで、当該所定の変換計算と、これに対応する所定の逆変換計算とは、当該格納値として与えられうる任意の値に当該所定の変換計算を適用した結果に当該所定の逆変換計算を適用すると、当該値が得られる関係にある。すなわち、後者は前者の逆関数である。
【００１４】
まず、変換計算部は、当該格納値が与えられた場合、これに当該所定の変換計算を適用し、その結果を変換済値として得る。変換計算は各格納読出処理部ごとに異なるので、得られる変換済値は、偶然一致する場合を除き、互いに異なる値となる。
【００１５】
一方、格納部は、得られた変換済値を格納する。したがって、各格納読出処理部は、一般には、互いに異なる値を格納部に格納することとなる。
【００１６】
さらに、逆変換計算部は、当該読出要求が受け付けられた場合、格納部に格納された値に当該所定の逆変換計算を適用し、その結果を出力値として得る。格納部には、変換計算部によって計算された変換済値が記憶されているのが通例であり、変換計算と逆変換計算とは、上記のような関係を有するため、格納部に変換済値がそのまま格納されていれば、得られる出力値は、最後に与えられた格納値に一致するはずである。一方、格納された値の改変・変更がされていれば、得られる出力値は、格納値と異なる可能性が極めて高い。したがって、異なる値に適用するとできるだけ（もしくは、必ず）異なる値が得られるような逆変換計算と、これに対応付けられる変換計算を採用することが望ましい。
【００１７】
一方、読出出力部は、複数の格納読出処理部のそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力し、異なるものがある場合、最大多数の出力値を、読出要求に対する結果として出力する。すなわち、読出要求が受け付けられると、各格納読出処理部から出力される値が一致する場合はそのままそれを結果として出力する。これは、最後に与えられた格納値に一致するはずである。また、一致しないものがある場合には、多数決によって、これを決する。これは、最後に与えられた格納値に一致する可能性が最も高いものである。
【００１８】
本発明により、格納された値が不用意に書き換えられたり変化した場合であっても、できるだけ元の値を修復するのに好適な格納装置であって、従来のメモリや各種の記憶装置と置き換え可能なものを提供することができる。
【００１９】
また、本発明の格納装置は、更新部をさらに備え、更新部は、複数の格納読出処理部のそれぞれから得られた出力値に異なるものがある場合、当該最大多数の出力値以外の出力値が得られた格納読出処理部のそれぞれに、当該最大多数の出力値を格納値として与えて更新させるように構成することができる。すなわち、多数決によって少数派となった格納読出処理部には、多数派の値が再度書き込まれることとなり、格納装置が記憶する値の一貫性が保たれることとなる。
【００２０】
本発明により、格納された値が不用意に書き換えられたり変化した場合であっても、書き換えられた部分、変化した部分そのものをできるだけ元の値に戻すのに好適な格納装置を提供することができる。
【００２１】
また、本発明の格納装置は、報告部をさらに備え、報告部は、複数の格納読出処理部のそれぞれから得られた出力値に異なるものがある場合であって、最大多数の出力値が複数種類ある場合、エラーが発生した旨の報告をするように構成することができる。すなわち、多数決によって格納されている値を決することができない場合、たとえば、格納読出処理部が３つある場合であって、互いに異なる値を出力値として出力した場合には、エラーが発生した旨の報告をすることとなる。
【００２２】
本発明により、格納装置に記憶されている情報が修復不能なまでに改変・変更されている場合には、これをエラーとして発見することができるようになる。
【００２３】
また、本発明の格納装置において、複数の格納読出処理部が備える格納部のそれぞれは、メモリ内に動的に確保され、所定の条件が満たされる場合、異なるアドレスに動的に再確保されるように構成することができる。すなわち、格納部のそれぞれのアドレスは、条件によって適宜変化することとなる。
【００２４】
本発明により、各格納読出処理部が備える格納部のそれぞれのアドレスが適宜変化するため、たとえば悪意あるアプリケーションが格納部のアドレスを追跡することにより値の改変や変更を試みようとしても、これをできるだけ防止することができる。
【００２５】
また、本発明の格納装置において、複数の格納読出処理部のいずれか少なくとも１つにおいて、これが備える格納部は、複数の記憶装置を有し、以下のように構成することができる。
【００２６】
すなわち、格納部は、得られた変換済値を複数の記憶装置に分割して記憶し、これが備える逆変換計算部は、当該読出要求が受け付けられた場合、当該複数の記憶装置に分割して記憶された値を結合して、これを当該格納部に格納された値とする。たとえば、変換済値をビット列として見たときの、下位の所定ビット列を１つの格納装置に、それ以外のビット列を他の格納装置に、それぞれ分割して記憶する。必要があれば、これらのビット列を単に結合すれば、変換済値が得られることとなる。
【００２７】
本発明により、たとえば、１つの格納装置をユーザが利用するローカルなコンピュータ、他の格納装置をユーザが利用するサーバに配置することができ、ローカルなコンピュータ側で値の改変や変更があっても、適宜これを修復したり、改変や変更を検出することができるようになる。
【００２８】
また、本発明の格納装置において、複数の格納読出処理部のそれぞれについて、格納部は、当該格納値のハッシュ値をさらに格納し、逆変換計算部は、当該読出要求が受け付けられた場合、「当該所定の逆変換計算を適用した結果のハッシュ値と格納部に格納されたハッシュ値とが等しいか否か」を検査し、読出出力部は、複数の格納読出処理部のうち、当該検査の結果が「等しい」もののそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力するように構成することができる。
【００２９】
すなわち、逆変換計算の結果のハッシュ値が正しい（格納値のハッシュ値と等しい）場合にのみ、出力値を多数決の候補として採用するので、改変・変更の可能性が極めて低い格納読出処理部のみを多数決に参加させることとなる。
【００３０】
本発明により、改変・変更の可能性が極めて低い格納読出処理部の出力値のみを利用して多数決を行うため、読み出した値に対する改変・変更の修復や検出の可能性を増すことができる。
【００３１】
また、本発明の格納装置において、複数の格納読出処理部のそれぞれについて、格納部は、当該変換済値のハッシュ値をさらに格納し、逆変換計算部は、当該読出要求が受け付けられた場合、「格納部に格納された値のハッシュ値と格納部に格納されたハッシュ値とが等しいか否か」を検査し、読出出力部は、複数の格納読出処理部のうち、当該検査の結果が「等しい」もののそれぞれから得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力するように構成することができる。
【００３２】
すなわち、格納部に格納された値のハッシュ値が正しい（変換済値のハッシュ値と等しい）場合にのみ、出力値を多数決の候補として採用するので、改変・変更の可能性が極めて低い格納読出処理部のみを多数決に参加させることとなる。
【００３３】
本発明により、改変・変更の可能性が極めて低い格納読出処理部の出力値のみを利用して多数決を行うため、読み出した値に対する改変・変更の修復や検出の可能性を増すことができる。
【００３４】
また、本発明の格納装置において、複数の格納読出処理部が備える変換計算部と逆変換計算部と、は、あらかじめコンピュータ通信網からダウンロードしたプログラムを実行して当該所定の変換計算と当該所定の逆変換計算とを適用し、所定の条件が満たされる場合、当該プログラムを当該コンピュータ通信網から再ダウンロードするように構成することができる。すなわち、プログラムを、適宜コンピュータ通信網からダウンロードして、これを新たな変換計算と逆変換計算のプログラムとして利用する。
【００３５】
本発明により、悪意あるアプリケーションにより格納装置に対する改変や変更が発覚した場合であっても、あらたな変換計算と逆変換計算のアルゴリズムを利用させることにより、当該アプリケーションによる将来の攻撃を防止することができる。
【００３６】
本発明の他の観点に係るプログラムは、コンピュータ（ゲーム装置であって、コンピュータ通信網に接続されるものを含む。）を、上記の格納装置として機能させるように構成する。このプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記録媒体に記録することができる。上記プログラムは、当該プログラムが実行されるコンピュータとは独立して、コンピュータ通信網を介して配布・販売することができる。また、上記情報記録媒体は、当該コンピュータとは独立して配布・販売することができる。
【００３７】
本発明の他の観点に係る格納方法は、複数の格納読出処理工程と、格納要求受付工程と、読出要求受付工程と、読出出力工程と、を備え、以下のように構成する。
【００３８】
すなわち、格納要求受付工程では、格納すべき値を指定する格納要求を受け付けて、これを格納値として複数の格納読出処理工程のそれぞれに与える。一方、読出要求受付工程では、格納された値を読み出すべき旨の読出要求を受け付ける。
【００３９】
さらに、複数の格納読出処理工程のそれぞれは、変換計算工程と、格納工程と、逆変換計算工程と、を備え、以下のように構成する。
【００４０】
まず、各格納読出処理工程においては、互いに異なる所定の変換計算と、これに対応付けられる所定の逆変換計算と、を用い、互いに異なる格納部を用いる。ここで、当該格納値として与えられうる任意の値に当該所定の変換計算を適用した結果に当該所定の逆変換計算を適用すると、当該値が得られる。
【００４１】
すなわち、変換計算工程では、当該格納値が与えられた場合、これに当該所定の変換計算を適用し、その結果を変換済値として得る。一方、格納工程では、得られた変換済値を、当該格納部に格納する。さらに、逆変換計算工程では、当該読出要求が受け付けられた場合、当該格納部に格納された値に当該所定の逆変換計算を適用し、その結果を出力値として得る。
【００４２】
一方、読出出力工程では、複数の格納読出処理工程のそれぞれにて得られた出力値がすべて同じ場合、これを、読出要求に対する結果として出力し、異なるものがある場合、最大多数の出力値を、読出要求に対する結果として出力する。
【００４３】
【発明の実施の形態】
以下に本発明の実施形態を説明する。なお、以下に説明する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本願発明の範囲に含まれる。
【００４４】
（第１の実施の形態）
図１は、本発明の第１の実施の形態に係る格納装置が実現される典型的なゲーム装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【００４５】
ゲーム装置１００は、ＣＰＵ（Central Processing Unit）１０１と、ＲＯＭ（Read Only Memory）１０２と、ＲＡＭ（Random Access Memory）１０３と、インターフェース１０４と、コントローラ１０５と、外部メモリ１０６と、画像処理部１０７と、ＤＶＤ（Digital Versatile Disk）−ＲＯＭドライブ１０８と、ＮＩＣ（Network Interface Card）１０９と、を備える。
【００４６】
ゲーム用のプログラムおよびデータを記憶したＤＶＤ−ＲＯＭをＤＶＤ−ＲＯＭドライブ１０８に装着して、ゲーム装置１００の電源を投入することにより、当該プログラムが実行され、本実施形態の格納装置が実現される。
【００４７】
ＣＰＵ  １０１は、ゲーム装置１００全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。
【００４８】
ＲＯＭ  １０２には、電源投入直後に実行されるＩＰＬ（Initial Program Loader）が記録され、これが実行されることにより、ＤＶＤ−ＲＯＭに記録されたプログラムをＲＡＭ  １０３に読み出してＣＰＵ  １０１による実行が開始される。また、ＲＯＭ  １０２には、ゲーム装置１００全体の動作制御に必要なオペレーティングシステムのプログラムや各種のデータを記録される。
【００４９】
ＲＡＭ  １０３は、データやプログラムを一時的に記憶するためのもので、ＤＶＤ−ＲＯＭから読み出したプログラムやデータ、その他ゲームの進行やチャット通信に必要なデータが保持される。
【００５０】
インターフェース１０４を介して接続されたコントローラ１０５は、ユーザがゲーム実行の際に行う操作入力を受け付ける。
【００５１】
インターフェース１０４を介して着脱自在に接続された外部メモリ１０６には、ゲームの進行状態を示すデータ、チャット通信のログ（記録）のデータなどが書き換え可能に記憶される。ユーザは、コントローラ１０５を介して指示入力を行うことにより、これらのデータを適宜外部メモリ１０６に記録することができる。
【００５２】
ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭには、ゲームを実現するためのプログラムとゲームに付随する画像データや音声データが記録される。ＣＰＵ  １０１の制御によって、ＤＶＤ−ＲＯＭドライブ１０８は、これに装着されたＤＶＤ−ＲＯＭに対する読み出し処理を行って、必要なプログラムやデータを読み出し、これらはＲＡＭ  １０３等に一時的に記憶される。
【００５３】
画像処理部１０７は、ＤＶＤ−ＲＯＭから読み出されたデータをＣＰＵ  １０１や画像処理部１０７が備える画像演算プロセッサ（図示せず）によって加工処理した後、これを画像処理部１０７が備えるフレームメモリ（図示せず）に記録する。フレームメモリに記録された画像情報は、所定の同期タイミングでビデオ信号に変換され画像処理部１０７に接続されるモニタ（図示せず）へ出力される。これにより、各種の画像表示が可能となる。
【００５４】
画像演算プロセッサは、２次元の画像の重ね合わせ演算やαブレンディング等の透過演算、各種の飽和演算を高速に実行できる。
【００５５】
また、仮想３次元空間に配置され、各種のテクスチャ情報が付加されたポリゴン情報を、Ｚバッファ法によりレンダリングして、所定の視点位置から仮想３次元空間に配置されたポリゴンを俯瞰したレンダリング画像を得る演算の高速実行も可能である。
【００５６】
さらに、ＣＰＵ  １０１と画像演算プロセッサが協調動作することにより、文字の形状を定義するフォント情報にしたがって、文字列を２次元画像としてフレームメモリへ描画したり、各ポリゴン表面へ描画することが可能である。フォント情報は、ＲＯＭ  １０３に記録されているが、ＤＶＤ−ＲＯＭに記録された専用のフォント情報を利用することも可能である。
【００５７】
ＮＩＣ  １０９は、ゲーム装置１００をインターネット等のコンピュータ通信網（図示せず）に接続するためのものであり、ＬＡＮ（Local Area Network）を構成する際に用いられる１０ＢＡＳＥ−Ｔ／１００ＢＡＳＥ−Ｔ規格にしたがうものや、電話回線を用いてインターネットに接続するためのアナログモデム、ＩＳＤＮ（Integraged Services Digital Network）モデム、ＡＤＳＬ（Asymmetric Digital Subscriber Line Modem）モデム、ケーブルテレビジョン回線を用いてインターネットに接続するためのケーブルモデム等と、これらとＣＰＵ  １０１との仲立ちを行うインターフェース（図示せず）により構成される。
【００５８】
音声処理部１１０は、ＤＶＤ−ＲＯＭから読み出した音声データをアナログ音声信号に変換し、これに接続されたスピーカ（図示せず）から出力させる。また、ＣＰＵ  １０１の制御の下、ゲームの進行の中で発生させるべき効果音や楽曲データを生成し、これに対応した音声をスピーカから出力させる。
【００５９】
このほか、ゲーム装置１００は、ハードディスク等の大容量外部記憶装置を用いて、ＲＯＭ  １０２、ＲＡＭ  １０３、外部メモリ１０６、ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭ等と同じ機能を果たすように構成してもよい。
【００６０】
また、ユーザからの文字列の編集入力を受け付けるためのキーボードや、各種の位置の指定および選択入力を受け付けるためのマウスなどを接続する形態も採用することができる。また、本実施形態のゲーム装置１００にかえて、汎用のパーソナルコンピュータを利用することもできる。
【００６１】
図２は、本実施形態に係る格納装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【００６２】
格納装置２０１は、複数の格納読出処理部２０２と、格納要求受付部２０４と、読出要求受付部２０５と、読出出力部２０６と、報告部２０７を備える。
【００６３】
格納要求受付部２０４は、格納すべき値を指定する格納要求を受け付け、読出要求受付部２０５は、格納された値を読み出すべき旨の読出要求を受け付け、読出出力部２０６は、読出要求に対する結果として、最後に受け付けた格納要求で指定された値（である可能性が高い値）を出力する。したがって、格納装置２０１は、従来のメモリやハードディスクのような格納装置と透過的に置き換えることができる。
【００６４】
なお、これらの各要素は、いずれも複数の格納読出処理部２０２と協調動作するが、その詳細については以下に述べる。
【００６５】
図３は、格納装置２０１に対する値の格納要求に対する処理の流れを示すフローチャートである。これによって、メモリやハードディスク等の記憶領域に対する値の書込処理と同等の処理が実現されることになる。以下、本図を参照して説明する。
【００６６】
まず、格納装置２０１は、格納要求受付部２０４により、格納すべき値を指定する格納要求を受け付ける（ステップＳ３０１）。以下、理解を容易にするため、当該格納要求に指定された格納すべき値をvとする。各種の整数値、浮動小数点値、固定小数点値、文字列、ビットストリーム等、コンピュータによって表現可能な任意の値を、格納すべき値vとして用いることができる。
【００６７】
そして、格納要求受付部２０４は、複数の格納読出処理部２０２のそれぞれに、当該格納すべき値vを格納値として与えるが、本実施形態では、これを繰り返し処理により実現する。以下、理解を容易にするため、複数の格納読出処理部２０２のそれぞれをs0，s1，…，sN-1と表記することとする。すなわち、格納読出処理部２０２は、N個あることとなる。Nは、３以上であることが望ましい。
【００６８】
繰返し処理によって実行するため、ＲＡＭ  １０３などに確保されたカウンタiに、まず0を設定する。（ステップＳ３０２）。そして、iがN未満であるか否かを調べる（ステップＳ３０３）。iがN未満である場合（ステップＳ３０３；Ｙｅｓ）、ステップＳ３０４に進むが、これは、i (0≦i≦N-1)番目の格納読出処理部si２０２に対して格納値vを与えることに対応する。以下、詳細に説明する。
【００６９】
図４は、格納読出処理部２０２の概要構成を示す模式図である。格納読出処理部２０２は、変換計算部４０１と、格納部４０２と、逆変換計算部４０３と、を備える。
【００７０】
格納読出処理部si２０２には、所定の変換計算fi(・)と、所定の逆変換計算gi(・)とが、対応付けられている。これらは、格納値として与えられる可能性があるすべての値xについて、関係
gi(fi(x)) = x
を満たすものである。このような変換計算の具体例については、後述する。なお、変換計算f0(・)，f1(・)，…，fN-1(・)は、互いに異なることが望ましい。
【００７１】
さて、格納読出処理部si２０２に格納値vが与えられると、変換計算部４０１は、格納値vに所定の変換計算fi(・)を適用し、その結果fi(v)を変換済値として得る（ステップＳ３０４）。この変換計算は、ＣＰＵ  １０１が行う。
【００７２】
そして、この結果fi(v)を、格納部４０２に格納する（ステップＳ３０５）。格納部４０２は、ＲＡＭ  １０３や外部メモリ１０６、ハードディスク等のあらかじめ割り当てられた記憶領域である。以下、理解を容易にするため、格納読出処理部si２０２が備える格納部４０２をmiと表記する。m0，m1，…，mN-1のアドレスは、互いに異なるものとしなければならない。
【００７３】
また、m0，m1，…，mN-1は、メモリ内に動的に確保することが望ましい。さらに、確保されたm0，m1，…，mN-1に対しては、そのそれぞれについて乱数を発生させ、この値を格納することが望ましい。これらの対策をとることにより、悪意あるアプリケーションが格納装置２０１に記憶された値を盗み出したり、これを書き換える可能性を減らすことができる。
【００７４】
ついで、カウンタiの値を１増やし（ステップＳ３０６）、ステップＳ３０３に戻るが、iの値がN以上である場合（ステップＳ３０３；Ｎｏ）、すべての格納読出処理部si２０２において、格納部mi４０２に対する書き込みが終わったことになり、値の格納要求に対する処理を終了する。
【００７５】
図５は、格納装置２０１に対する値の読出要求に対する処理の流れを示すフローチャートである。これによって、メモリやハードディスク等の記憶領域に対する値の読出処理と同等の処理が実現されることになる。以下、本図を参照して説明する。
【００７６】
まず、格納装置２０１の読出要求受付部２０５は、格納された値を読み出すべき旨の読出要求を受け付ける（ステップＳ５０１）。そして、カウンタiの値を0に初期化し（ステップＳ５０２）、iがN未満であるか否かを調べる（ステップＳ５０３）。iがN未満である場合（ステップＳ５０３；Ｙｅｓ）、格納読出処理部si２０２に対して、以下の処理を行う。
【００７７】
すなわち、格納部mi４０２に格納されている値を読み出す（ステップＳ５０４）。理解を容易にするため、読み出された値をyiとおく。格納部mi４０２に格納された値が改変されたり変化していなければ、最後の格納値vに対して所定の変換計算を適用した値fi(v)と値yiとは、等しいはずである。
【００７８】
そして、読み出した値yiに対して、所定の逆変換計算gi(・)を適用して、出力値
vi = gi(yi)
を得る（ステップＳ５０５）。この逆変換計算は、ＣＰＵ  １０１が行う。
【００７９】
上述のように、gi(・)は、fi(・)の逆関数であるから、格納部mi４０２に格納された値が改変されたり変化したりしていなければ、最後の格納値vと出力値viとは等しいはずである。この出力値viは、すべてのＲＡＭ  １０３などの一時的な記憶域に保存しておく。
【００８０】
そして、iの値を１増やして（ステップＳ５０６）、ステップＳ５０３に戻るが、iの値がN以上である場合（ステップＳ５０３；Ｎｏ）、ステップＳ５０６に進む。すなわち、ＲＡＭ  １０３などに保存された出力値v0，v1，…，vN-1がすべて等しいか、それとも、異なる値が存在するかを調べる（ステップＳ５０７）。
【００８１】
すべて等しい場合（ステップＳ５０７；Ｙｅｓ）、各格納部m0，m1，…，mN-1に対する改変や予期しない変化はなかったこととなり、格納装置２０１の読出出力部２０６は、当該値v0 =v1 = … = vN-1を、読出要求に対する結果v'として出力して（ステップＳ５０８）、本処理を終了する。尚、これは、最後の格納値vに等しい。
【００８２】
一方、異なる値が存在する場合（ステップＳ５０７；Ｎｏ）、出力値v0，v1，…，vN-1における値の頻度を求め（ステップＳ５０９）、唯一の最大多数の値v'を得ることができる（最頻値v'が１つである）か否かを調べる（ステップＳ５１０）。たとえば、N=3である場合に、
v0 = 511、v1 = 511、v2 = 71024であればv' = 511とし、
v0 = 123、v1 = 16542、v2 = 123であればv' = 123とし、
v0 = 999、v1 = 8192、v2 = 8192であればv' = 8192とする、
ということである。
【００８３】
そして、唯一の最大多数の値v'が得られた場合（ステップＳ５１０；Ｙｅｓ）、読出要求に対する結果として出力して（ステップＳ５１１）、本処理を終了する。すなわち、多数決をとることにより、最後の格納値vの推定値としてv'を使うことになる。Nの値が３以上であることが望ましいのは、このように多数決をとるためである。
【００８４】
一方、最大多数の値v'が複数得られた場合（ステップＳ５１０；Ｎｏ）、典型的には、出力値v0，v1，…，vN-1がすべて異なる値であった場合は、報告部２０７がエラーが発生した旨の報告をして（ステップＳ５１２）、本処理を終了する。
【００８５】
本実施形態では、メモリ等の改変・変化があった場合であっても、元の値をできるだけ修復することにより、プログラムの誤動作をできるだけ防止することができる。また修復不可能な場合には、エラーが発生した旨の報告をすることができる。
【００８６】
（変換計算・逆変換計算の実施形態）
以下では、変換計算・逆変換計算の実施形態について述べる。上述した条件を満たす変換計算・逆変換計算であれば、いかなるものも採用することができるが、計算時間や実現の容易さを考慮して、以下のような種々の実施形態を採用することができる。
【００８７】
まず、格納値vが整数である場合について考える。この場合は、ＣＰＵ  １０１のレジスタに対する演算をそのまま利用できることが多い。
【００８８】
第１の手法としては、定数に対する排他的論理和（eXclusive OR；ＸＯＲ）を利用するものである。すなわち、定数ciに対して、
fi(x) = x XOR ci
gi(x) = x XOR ci
のようにする。この場合は、定数ciを、各格納読出処理部２０２によって異なるものとすればよい。
【００８９】
第２の手法としては、定数に対する加算と減算を利用するものである。すなわち、定数ciに対して、
fi(x) = x + ci
gi(x) = x - ci
のようにする。この場合も、定数ciを、各格納読出処理部２０２によって異なるものとすればよい。
【００９０】
また、これらを適宜組み合わせてもよい。たとえばＣＰＵ  １０１のレジスタが１６ビットである場合には、６５５３６を法とする整数演算が行われ、加減算や排他的論理和演算では、情報が失われることがなく高速な演算が期待できることから、乗除算等を用いるよりも有利である。
【００９１】
次に、格納値vが文字列である場合について考える。以下、理解を容易にするため、長さMの文字列xに含まれる文字コードを、先頭から順にp0，p1，…，pM-1と表記することとする。
【００９２】
これに対して、長さLの文字列t（同様に文字コードを先頭から順にq0，q1，…，qN-1であるとする。）を用意する。
【００９３】
そして、演算u = h(x,t)により得られる長さMの文字列u（同様に文字コードを先頭から順にr0，r1，…，rM-1であるとする。）を考える。演算h(x,t)は、以下のように定義する。
rj = pj XOR q(j MOD N)
【００９４】
ここで、j MOD Nは、jをNで割ったときの余りを求める演算である。このように定義した場合、定文字列tiに対して
fi(x) = h(x，ti)
gi(x) = h(x，ti)
のようにする。この場合、低文字列tiを、各格納読出処理部２０２によって異なるものとすればよい。この場合は、変換計算と逆変換計算で、同じプログラムを利用することができるため、コード量の低減に役立つほか、定文字列tiを変化させるだけでさまざまなバリエーションを得ることができる。
【００９５】
なお、定数ciは、あらかじめ定めた値とするほか、以下のようにして決めることもできる。すなわち、ＮＩＣ  １０９を介して接続されたサーバから数バイトの値を受信し、もしくは、ゲーム装置１００に電源を投入した時刻等から数バイトの値を取得し、これを種として、所定の乱数生成アルゴリズムを用いて、定数ciを順次決めていくことができる。乱数生成アルゴリズムは漸化式の形態をとることが多いため、定数ciを順に決めるのに好適である。
【００９６】
（その他の実施形態）
本実施形態は、上記実施形態において唯一の最大多数の値v'が得られた場合に、これと異なる出力値を出力した格納読出処理部si２０２に対する更新を行うものである。図６は、本実施形態に係る格納装置の概要構成を示す模式図である。以下、本図を参照して説明する。尚、図２に示すものと同じ機能を果たす要素には、同じ符号を付してある。
【００９７】
本実施形態の格納装置２０１は、上記実施形態の各要素の他、更新部６０１をさらに備える。本実施形態では、上記実施形態におけるステップＳ５１１に続いて、更新部６０１が以下の更新処理を実行する。図７は、この更新処理の流れを示すフローチャートである。
【００９８】
まず、カウンタiを0に初期化し（ステップＳ７０１）、カウンタiの値がN未満であるか否かを調べる（ステップＳ７０２）。N未満である場合（ステップＳ７０２；Ｙｅｓ）、vi = v'であるか否かを調べる（ステップＳ７０３）。vi = v'である場合（ステップＳ７０３；Ｙｅｓ）、iの値を１増やして（ステップＳ７０４）、ステップＳ７０２に戻る。
【００９９】
一方、vi ≠ v'である場合（ステップＳ７０３；Ｎｏ）、格納読出処理部si２０２に対して、格納値としてv'を与えることになる。変換計算部４０１が格納値v'に所定の変換計算fi(・)を適用し、その結果fi(v')を変換済値として得る（ステップＳ７０５）。そして、この結果fi(v')を、格納部mi４０２に格納して（ステップＳ７０６）、ステップＳ７０４に進む。
【０１００】
一方、カウンタiの値がN以上である場合（ステップＳ７０２；Ｎｏ）、すべての更新は終わったことになり、本処理を終了する。
【０１０１】
本実施形態では、メモリ等の改変・変化があった場合であっても、その領域そのものを修復することにより、プログラムの誤動作をできるだけ防止することができる。
【０１０２】
（その他の実施形態）
上記実施形態では、格納部４０２m0，m1，…，mN-1は、それぞれ異なるアドレスに確保し、動的に確保することが望ましいとしていたが、所定の条件が満たされる場合に（たとえば、一定時間が経過するごとに）、これらの領域を再確保してもよい。この場合、m0，m1，…，mN-1のアドレスが、プログラムの進行にともなって変化するため、値の改変を行うような悪意あるプログラムの追跡を困難にすることができる。このほか、当該プログラムが起動されるごとに乱数で確保するアドレスを選択することによっても同様の効果を得ることができる。
【０１０３】
また、変換計算fi(・)と逆変換計算gi(・)とを動的にロード可能なライブラリによるプログラム（「ダイナミック・ローディング・ライブラリ（Dynamic Loading Library；ＤＬＬ）」や「共有オブジェクト（Shared Object；ＳＯ）」）によって表現し、所定の条件が満たされる場合（たとえば、一定時間が経過するごとに）、これらを変更するような態様を採用してもよい。この場合、当該プログラムを当該コンピュータ通信網から再ダウンロードするように構成することができる。本実施態様では、悪意あるプログラムに変換計算fi(・)と逆変換計算gi(・)が知得されてしまった後であっても、新たな変換計算および逆変換計算を格納装置２０１にダウンロードさせて利用させることで、当該悪意あるプログラムに対する防御を行うことができる。
【０１０４】
なお、この場合、当該ダウンロードされるライブラリについては電子署名を付加し、ライブラリを利用する際に当該電子署名を検査して、悪意ある第三者が偽装ライブラリを利用できないようにすることが望ましい。
【０１０５】
（その他の実施形態）
上記実施形態では、逆変換計算部４０３により得られた値をそのまま格納装置２０１の出力として採用していたが、本実施形態は、これに対してさらに変更を加えるものである。すなわち、ハッシュ値を用いることにより、さらにメモリ等の書き換え・変更に対する防御力を高めんとするものである。
【０１０６】
第１の手法は、格納部４０２にfi(v)が格納される際に、さらにvのハッシュ値も併せて格納するものである。この手法では、逆変換計算部４０３がgi(yi) = viを計算する際に、併せてviのハッシュ値を計算する。そして、格納部４０２に格納されているハッシュ値と、ここで計算されたハッシュ値とが等しいか否かを検査する。
【０１０７】
一方、読出出力部２０６では、各格納読出処理部２０２の検査の結果を調べ、「２つのハッシュ値が等しい」場合にのみ、当該格納読出処理部２０２から得られた値を多数決の対象とする。たとえば、４つの格納読出処理部２０２のうち３つにおける検査結果が「２つのハッシュ値が等しい」であり、残りの１つが「等しくない」であった場合は、「等しい」となった３つの格納読出処理部２０２から得られた値で多数決をとる。ハッシュ値が等しくない場合は、格納部４０２に格納された値が変更・改変されていると考えられるからである。
【０１０８】
ハッシュ値の計算方法は、公知のハッシュ関数を用いるもの、ＣＲＣ（Cyclic Redundancy Check）やチェックサム、メッセージダイジェストアルゴリズムで用いられるＭＤ２、ＭＤ４、ＭＤ５等をハッシュ値として用いるものなどが考えられる。また、公開鍵暗号システムにおける署名をハッシュ値として適用してもよい。
【０１０９】
第２の手法は、格納部４０２にfi(v)が格納される際に、さらにfi(v)のハッシュ値も併せて格納するものである。この手法では、逆変換計算部４０３がgi(yi) = viを計算する際に、併せてyiのハッシュ値を計算する。あとは、上記の手法と同様である。さらに、これら第１と第２の手法を組み合わせて適用してもよい。
【０１１０】
（その他の実施形態）
本実施形態は、格納部４０２を複数の記憶装置に分割するものである。たとえば、ゲーム装置１００の外部メモリ１０６（動作中の値の変更・改変防止に対応する際にはＲＡＭ  １０３であるが、以下理解を容易にするため、外部メモリ１０６を代表例として説明する。）と、ＮＩＣ  １０９およびインターネットを介して接続されたサーバが有するハードディスクと、に分割する形態が考えられる。
【０１１１】
そして、格納部４０２に格納される値fi(v)をこれら２つに分割して記憶する。たとえば、値fi(v)が１０２４バイトである場合、外部メモリ１０６にはそのうちの１０２０バイトを、サーバ側には残りの４バイトを、それぞれ記憶する、という形態が考えられる。このようにして、２つの記憶装置に記憶された値を割符として用いるとともに、サーバへ当該値を通知するための通知トラフィックを低減することができる。なお、外部メモリ１０６には、１０２４バイト全体を記憶し、サーバ側に記憶される４バイトの部分を無視するような形態をとってもよい。
【０１１２】
また、ハッシュ値を利用する実施形態においては、外部メモリ１０６には値fi(v)をそのまま記憶し、サーバ側にはハッシュ値を記憶する、という形態を採用することもできる。
【０１１３】
さらに、ゲーム装置１００がハードディスクやフレキシブルディスクドライブを内蔵する場合はそのハードディスクやフレキシブルディスクも本実施形態の記憶装置として利用することができる。分割して記憶する対象の記憶装置は、複数であれば、３つ以上であってもよい。
【０１１４】
【発明の効果】
以上説明したように、本発明によれば、格納される値の不用意な書き換えや変化を修復するのに好適な格納装置、これをコンピュータによって実現するプログラム、ならびに格納方法を提供することができる。
【図面の簡単な説明】
【図１】  本発明の第１の実施の形態に係る格納装置が実現される典型的なゲーム装置の概要構成を示す模式図である。
【図２】  本発明の格納装置の実施形態の概要構成を示す模式図である。
【図３】  格納装置に対する値の格納要求に対する処理の流れを示すフローチャートである。
【図４】  格納読出処理部の概要構成を示す模式図である。
【図５】  格納装置に対する値の読出要求に対する処理の流れを示すフローチャートである。
【図６】  本発明の格納装置の他の実施形態の概要構成を示す模式図である。
【図７】  更新処理の流れを示すフローチャートである。
【符号の説明】
１００  ゲーム装置
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  インターフェース
１０５  コントローラ
１０６  外部メモリ
１０７  画像処理部
１０８  ＤＶＤ−ＲＯＭドライブ
１０９  ＮＩＣ
１１０  音声処理部
２０１  格納装置
２０２  格納読出処理部
２０４  格納要求受付部
２０５  読出要求受付部
２０６  読出出力部
２０７  報告部
４０１  変換計算部
４０２  格納部
４０３  逆変換計算部
６０１  更新部
【図１】
0003748847.tif 000002
【図２】
0003748847.tif 000003
【図３】
0003748847.tif 000004
【図４】
0003748847.tif 000005
【図５】
0003748847.tif 000006
【図６】
0003748847.tif 000007
【図７】
0003748847.tif 000008