説明

数値記録装置、数値記録方法、ならびに、プログラム

【課題】 コンピュータゲームにおけるチート行為や情報記録媒体の不良等に起因する数値のデータ改変をできるだけ検出する数値記録装置等を提供する。
【解決手段】 数値記録装置201の記憶部202は、double型の数値を記憶することができ、保存部203は、保存すべきfloat型の数値を、float型にキャストするとこれと同じ値となるdouble型の数値に特定変換して、記憶部202に記憶させて保存し、取得部204は、記憶部202に記憶されたdouble型の数値を取得してこれをfloat型の数値にキャストし、報告部205は、キャストの結果のfloat型の数値を特定変換した結果が、記憶部202に記憶されたdouble型の数値に等しくない場合は、記憶部202に改変があった旨を報告する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、たとえばコンピュータゲームにおけるチート行為や情報記録媒体の不良等に起因する数値のデータ改変をできるだけ検出するのに好適な数値記録装置、数値記録方法、ならびに、これらをコンピュータにて実現するプログラムに関する。
【背景技術】
【0002】
従来から、ゲーム装置においては、各種の数値パラメータを用いてゲームの状態が表現されている。このような数値パラメータには、プレイヤーが操作するキャラクターの体力やレベル等の各種の能力値、クリアした面の数や過去のスコア履歴など、種々のものがある。そして、このような、数値パラメータは、メモリカードやハードディスクなど、ユーザが利用する不揮発性情報記録媒体に記録されることが多い。ここで、ゲームの状態を保存することをセーブ、過去に保存されたゲームの状態に復帰することをロードという。
【0003】
このようなセーブ/ロードに関する技術については、以下の文献に開示されている。
【特許文献1】特許第3426592号
【0004】
本技術は、以下のようなものである。すなわち、ゲーム開始後に、プレイ状況を記憶させる記憶タイミングを乱数に基づいて順次決定し、各記憶タイミングにおけるプレイ状況を主記憶に順次一時記憶する。そして、セーブ操作が検知されると、主記憶に記憶されたプレイ状況を読み出すとともに、その読み出されたプレイ状況を表すセーブデータをメモリカードに記憶する。メモリカードに記憶されたセーブデータは、後に読み出され、該セーブデータに基づいてゲームが再開される。こうすれば、セーブ操作のタイミングとは異なるタイミングのプレイ状況を表すセーブデータをメモリカードに記憶しておくことができる。
【発明の開示】
【発明が解決しようとする課題】
【0005】
一方で、セーブされた数値パラメータを改変することはチート行為と呼ばれ、特にネットワークにおいて多数のプレイヤーが参加するゲームにおいては、不正行為となる。そこで、このようなチート行為を防止する技術が必要となる。
また、チート行為防止策に対しては、一旦その防止策が判明してしまうと、これを覆すような不正技術が開発されることも多く、種々の新たな技術が常に必要とされている。
このほか、記憶媒体の故障や不良が生じた場合を考慮するため、記憶媒体に保存されたデータが正当であるか否かをチェックする手法は、種々の応用分野で必要とされている。
【0006】
本発明は、上記のような課題を解決するためになされたもので、たとえばコンピュータゲームにおけるチート行為や情報記録媒体の不良等に起因する数値のデータ改変をできるだけ検出するのに好適な数値記録装置、数値記録方法、ならびに、これらをコンピュータにて実現するプログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
まず、本発明の数値記録装置、数値記録方法、ならびに、プログラムでは、昇格変換、降格変換、特定変換を用いる。
【0008】
ここで、昇格変換とは、第1精度の任意の数値について、当該数値を、第1精度よりも高い第2精度の数値であって、当該第2精度の数値を当該第1精度に丸めた場合に、元の第1精度の数値に等しくなるように変換するものをいう。
一方、降格変換とは、第2精度の任意の数値について、当該数値を、第1精度の数値に丸める変換をいう。丸める手法としては、切り捨て、切り上げ、四捨五入やその変形など、種々の手法を採用することができる。
【0009】
さらに、特定変換とは、第1精度の任意の数値について、当該数値を、当該第2精度の数値に変換するものであって、当該特定変換の結果を第1精度の数値に降格変換した結果が元の数値に等しくなるものをいう。
したがって、昇格変換は、特定変換の一種である。
また、数値の精度については、たとえば、倍精度浮動小数点表現を用いることによって第1精度の数値を表し、倍々精度浮動小数点表現を用いることによって第2精度の数値を表すことができる。
【0010】
本発明の第1の観点に係る数値記録装置は、記憶部、保存部、取得部、報告部を備え、以下のように構成する。
【0011】
すなわち、記憶部は、第2精度の数値を記憶することができる。
典型的には、記憶部は、ゲーム装置におけるメモリカードや情報処理装置におけるフレキシブルディスク、ハードディスクのほか、一時的に数値が記憶されるRAM(Random Access Memory)を採用することができ、ここに、第2精度で数値を記憶させる。
【0012】
一方、保存部は、第1精度の保存すべき数値Aを、第2精度の数値に特定変換した結果Bを記憶部に記憶させて保存する。
保存部が行う処理は、ゲームにおけるセーブに相当するものである。また、数値Bを降格変換すれば、数値Aが得られることになり、数値Aは、数値Bの近似値であると考えることができる。
【0013】
さらに、取得部は、記憶部に記憶された第2精度の数値Xを第1精度の数値に降格変換した結果Yを取得する。
取得部が行う処理は、ゲームにおけるロードに相当するものである。また、記憶部に故障がなく、不正行為等に基づく改変もない場合には、数値Xは数値Bに等しいはずである。
【0014】
そして、報告部は、記憶部に記憶された第2精度の数値Xと、取得された第1精度の数値Yを第2精度の数値に特定変換した結果Zと、が等しくない場合、記憶部に記憶された数値が改変された旨を報告する。
上記のように、改変がない場合には、数値Xは数値Bに等しいのであるから、数値Xを降格変換した数値Yは、数値Aに等しくなる。したがって、数値Yを特定変換した結果Zは、数値Aを特定変換した結果Bに等しい。すなわち、数値Zは、数値Xに等しい。
【0015】
一方、改変がある場合は、殆どの場合、数値Xと数値Bとが異なることとなる。したがって、数値Yを特定変換した結果Zも、数値Xには等しくならないのが殆どである。したがって、これによって保存された数値の改変を検出するのである。
本発明によれば、たとえばコンピュータゲームにおけるチート行為や情報記録媒体の不良等に起因する数値のデータ改変をできるだけ検出することができる。
【0016】
また、本発明の数値記録装置において、当該昇格変換と、特定変換と、は、同一の変換であるように構成することができる。
本発明は上記発明の好適実施形態の一つであり、特定変換として、より精度の高い表現への昇格変換をそのまま用いるものである。
本発明によれば、昇格変換という実装の容易な変換を用いることで、数値のデータ改変を少ない計算時間や労力で検出することができるようになる。
【0017】
また、本発明の数値記録装置において、特定変換は、第1精度の数値Pを第2精度の数値Qに昇格変換した結果に、第2精度の所定の数値Cを加算または減算する変換であって、当該変換の結果(Q+C)または(Q−C)を第1精度の数値に降格変換すると元の数値Pに等しくなる変換であるように構成することができる。
すなわち、第2精度の数値Qを降格変換した結果と、第2精度の数値(Q+C)や(Q−C)を降格変換した結果と、は、いずれもPに等しくなるのである。
【0018】
本発明によれば、微小な定数Cの加算や減算を行うことによって、どのような特定変換を行っているかをわかりにくくすることができる。
【0019】
また、本発明の数値記録装置において、特定変換は、第1精度の数値Pを第2精度の数値Qに昇格変換した結果に、第1精度の数値Pに所定の演算を施して得られる第2精度の所定の数値Rを加算もしくは減算する変換であって、当該変換の結果(Q+R)または(Q−R)を第1精度の数値に降格変換すると元の数値Pに等しくなる変換であるように構成することができる。
したがって、数値Rは数値Pに所定の演算を施した結果得られるものであり、当該所定の演算によれば、第2精度の数値Qを降格変換した結果と、第2精度の数値(Q+R)や(Q−R)を降格変換した結果と、は、いずれもPに等しくなる。
【0020】
本発明によれば、数値Pから得られる微小な数値Rの加算や減算を行うことによって、どのような特定変換を行っているかをわかりにくくすることができる。
【0021】
本発明の他の観点に係る数値記録装置は、表示部をさらに備え、表示部は、保存部が保存すべき第1精度の数値および取得部が取得した第1精度の数値の少なくとも一方を、第1精度より低い第3精度に降格変換した結果を表示するように構成することができる。
上記の精度の例でいえば、第3精度には単精度浮動小数点表現を用いることができる。
【0022】
本発明によれば、画面等に表示される数値パラメータは、実際に保存すべき第1精度の数値や記憶される第2精度の数値よりも精度が低いものであるため、画面表示を見ても、どのような特定変換を行っているかをわかりにくくすることができる。
【0023】
また、本発明の数値記録装置において、記憶部は、第1精度の数値を不揮発に数値を記憶するように構成することができる。
本発明は、上記発明の好適実施形態に係るものであり、不揮発に数値を記憶するものとしては、フレキシブルディスク、光磁気ディスク、半導体メモリ、ハードディスク、バッテリバックアップされたRAMなどを採用することができる。
本発明によれば、記憶部に数値を保存した後、数値記録装置の電源を切り、時間が経過してから数値記録装置の電源を入れて、数値を取得する、データのセーブとロードのような処理が行えるようになる。
【0024】
また、本発明の数値記録装置において、記憶部としては、当該数値記録装置から着脱可能な不揮発性情報記録媒体(フレキシブルディスク、光磁気ディスク、および、半導体メモリを含む。)であるように構成することができる。
本発明は、上記発明の好適実施形態に係るものであり、着脱可能な不揮発性情報記録媒体を用いて、データのセーブとロードを行う。
【0025】
本発明によれば、記憶部に数値を保存した後、情報記録媒体を数値記録装置から外し、他の数値記録装置において当該情報記録媒体から数値を取得したりなどの処理が行えるようになる。
【0026】
本発明のその他の観点に係る数値記録方法は、上記の数値記録装置にて実行される方法であって、保存工程、取得工程、報告工程を備える。
ここで、保存工程では、保存部が、第1精度の保存すべき数値を、第2精度の数値に特定変換した結果を記憶部に記憶させて保存する。
【0027】
一方、取得工程では、取得部が、記憶部に記憶された第2精度の数値を第1精度の数値に降格変換した結果を取得する。
さらに、報告工程では、記憶部に記憶された第2精度の数値と、取得された第1精度の数値を第2精度の数値に特定変換した結果と、が等しくない場合、報告部が、記憶部に記憶された数値が改変された旨を報告する。
【0028】
本発明のその他の観点に係るプログラムは、コンピュータを上記数値記録装置として機能させ、または、コンピュータに上記数値記録方法を実行させるように構成する。
【0029】
また、本発明のプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記憶媒体に記録することができる。
上記プログラムは、プログラムが実行されるコンピュータとは独立して、コンピュータ通信網を介して配布・販売することができる。また、上記情報記憶媒体は、コンピュータとは独立して配布・販売することができる。
【発明の効果】
【0030】
本発明によれば、たとえばコンピュータゲームにおけるチート行為や情報記録媒体の不良等に起因する数値のデータ改変をできるだけ検出するのに好適な数値記録装置、数値記録方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
【発明を実施するための最良の形態】
【0031】
以下に本発明の実施形態を説明する。以下では、理解を容易にするため、ゲーム装置として動作する情報処理装置に対して本発明が適用される実施形態を説明するが、各種のコンピュータ、PDA(Personal Data Assistants)、携帯電話などの情報処理装置においても同様に本発明を適用することができる。すなわち、以下に説明する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本発明の範囲に含まれる。
【実施例1】
【0032】
図1は、本発明の数値記録装置が実現される典型的な情報処理装置の概要構成を示す説明図である。以下、本図を参照して説明する。
【0033】
情報処理装置100は、CPU 101と、ROM 102と、RAM 103と、インターフェイス104と、コントローラ105と、外部メモリ106と、画像処理部107と、DVD−ROMドライブ108と、NIC(Network Interface Card)109と、音声処理部110を備える。
ゲーム用のプログラムおよびデータを記憶したDVD−ROMをDVD−ROMドライブ108に装着して、情報処理装置100の電源を投入することにより、当該プログラムが実行され、本実施形態の数値記録装置が実現される。
【0034】
CPU 101は、情報処理装置100全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。また、CPU 101は、レジスタ(図示せず)という高速アクセスが可能な記憶域に対してALU(Arithmetic Logic Unit)(図示せず)を用いて加減乗除等の算術演算や、論理和、論理積、論理否定等の論理演算、ビット和、ビット積、ビット反転、ビットシフト、ビット回転等のビット演算などを行うことができる。さらに、マルチメディア処理対応のための加減乗除等の飽和演算や、三角関数等、ベクトル演算などを高速に行えるように、CPU 101自身が構成されているものや、コプロセッサを備えて実現するものがある。
【0035】
ROM 102には、電源投入直後に実行されるIPL(Initial Program Loader)が記録され、これが実行されることにより、DVD−ROMに記録されたプログラムをRAM 103に読み出してCPU 101による実行が開始される。また、ROM 102には、情報処理装置100全体の動作制御に必要なオペレーティングシステムのプログラムや各種のデータが記録される。
【0036】
RAM 103は、データやプログラムを一時的に記憶するためのもので、DVD−ROMから読み出したプログラムやデータ、その他ゲームの進行やチャット通信に必要なデータが保持される。また、CPU 101は、RAM 103に変数領域を設け、当該変数に格納された値に対して直接ALUを作用させて演算を行ったり、RAM 103に格納された値を一旦レジスタに格納してからレジスタに対して演算を行い、演算結果をメモリに書き戻す、などの処理を行う。
【0037】
インターフェース104を介して接続されたコントローラ105は、ユーザがレーシングゲームなどのゲーム実行の際に行う操作入力を受け付ける。
【0038】
インターフェース104を介して着脱自在に接続された外部メモリ106には、対戦ゲーム等のプレイ状況(過去の成績等)を示すデータ、ゲームの進行状態を示すデータ、対戦に伴うチャット通信のログ(記録)のデータなどが書き換え可能に記憶される。ユーザは、コントローラ105を介して指示入力を行うことにより、これらのデータを適宜外部メモリ106に記録することができる。
【0039】
DVD−ROMドライブ108に装着されるDVD−ROMには、ゲームを実現するためのプログラムとゲームに付随する画像データや音声データ、動画情報データが記録される。CPU 101の制御によって、DVD−ROMドライブ108は、これに装着されたDVD−ROMに対する読み出し処理を行って、必要なプログラムやデータを読み出し、これらはRAM 103等に一時的に記憶される。
【0040】
画像処理部107は、DVD−ROMから読み出されたデータをCPU 101や画像処理部107が備える画像演算プロセッサ(図示せず)によって加工処理した後、これを画像処理部107が備えるフレームメモリ(図示せず)にバッファリング記録する。フレームメモリに記録された画像情報は、所定の同期タイミングでビデオ信号に変換され画像処理部107に接続されるモニタ(図示せず)へ出力される。これにより、各種の画像表示が可能となる。このような画像処理部107の処理は、CPU 101の演算処理とは並行して行うことができる。
画像演算プロセッサは、2次元の画像の重ね合わせ演算やαブレンディング等の透過演算、各種の飽和演算を高速に実行できる。
【0041】
また、仮想3次元空間に配置され、各種のテクスチャ情報が付加されたポリゴン情報を、Zバッファ法によりレンダリングして、所定の視点位置から仮想3次元空間に配置されたポリゴンを所定の視線の方向へ俯瞰したレンダリング画像を得る演算の高速実行も可能である。
さらに、CPU 101と画像演算プロセッサが協調動作することにより、文字の形状を定義するフォント情報にしたがって、文字列を2次元画像としてフレームメモリへ描画したり、各ポリゴン表面へ描画することが可能である。フォント情報は、ROM 102に記録されているが、DVD−ROMに記録された専用のフォント情報を利用することも可能である。
【0042】
このほか、DVD−ROMに記録された動画情報や、これをあらかじめRAM 103等に転送した場合の動画情報は、画像処理部107によって、画面の所定の領域にスーパーインポーズするような形式で、動画表示を行うことができる。
【0043】
さて、NIC 109は、情報処理装置100をインターネット等のコンピュータ通信網(図示せず)に接続するためのものであり、LAN(Local Area Network)を構成する際に用いられる10BASE−T/100BASE−T規格にしたがうものや、電話回線を用いてインターネットに接続するためのアナログモデム、ISDN(Integrated Services Digital Network)モデム、ADSL(Asymmetric Digital Subscriber Line)モデム、ケーブルテレビジョン回線を用いてインターネットに接続するためのケーブルモデム等と、これらとCPU 101との仲立ちを行うインターフェース(図示せず)により構成される。
【0044】
インターネット内のSNTPサーバにNIC 109を介して接続し、ここから情報を得ることによって現在の日時情報を得ることができる。また、各種のネットワークゲームのサーバ装置が、SNTPサーバと同様の機能を果たすように構成設定してもよい。
【0045】
音声処理部110は、DVD−ROMから読み出した音声データをアナログ音声信号に変換し、これに接続されたスピーカ(図示せず)から出力させる。また、CPU 101の制御の下、ゲームの進行の中で発生させるべき効果音や楽曲データを生成し、これに対応した音声をスピーカから出力させる。
音声処理部110では、DVD−ROMに記録された音声データがMIDIデータである場合には、これが有する音源データを参照して、MIDIデータをPCMデータに変換する。また、ADPCM形式やOgg Vorbis形式等の圧縮済音声データである場合には、これを展開してPCMデータに変換する。PCMデータは、そのサンプリング周波数に応じたタイミングでD/A(Digital/Analog)変換を行って、スピーカに出力することにより、音声出力が可能となる。
【0046】
さらに、情報処理装置100には、インターフェース104を介してマイク111を接続することができる。この場合、マイク111からのアナログ信号に対しては、適当なサンプリング周波数でA/D変換を行い、PCM形式のディジタル信号として、音声処理部110でのミキシング等の処理ができるようにする。情報処理装置100をゲーム装置として利用する場合には、マイク111から入力された音声データを指示入力データとして、コントローラ105のかわりに入力デバイスとして用いることも可能である。
【0047】
このほか、情報処理装置100は、ハードディスク等の大容量外部記憶装置を用いて、ROM 102、RAM 103、外部メモリ106、DVD−ROMドライブ108に装着されるDVD−ROM等と同じ機能を果たすように構成してもよい。
【0048】
また、ユーザからの文字列の編集入力を受け付けるためのキーボードや、各種の位置の指定および選択入力を受け付けるためのマウスなどを接続する形態も採用することができる。また、本実施形態の情報処理装置100にかえて、汎用のパーソナルコンピュータを利用することもできる。
【0049】
一般的なコンピュータは、上記情報処理装置100と同様に、CPU、RAM、ROM、DVD−ROMドライブ、および、NICを備え、ゲームにおける画面表示には必ずしも特化していない画像処理部を備え、外部記憶装置としてハードディスクを有する他、フレキシブルディスク、光磁気ディスク、磁気テープ等が利用できるようになっているのが一般的である。また、コントローラではなく、キーボードやマウスなどを入力装置として利用する。
したがって、このような一般的なコンピュータを、本発明の数値記録装置として動作させることも可能である。
【0050】
さて、本実施形態では、第1精度の数値の表現として、IEEE(Institute Electrical and Electronics Engineers)の754規格における単精度浮動小数点表現を採用し、第2精度の数値の表現として、同規格における倍精度浮動小数点表現を採用する。
単精度浮動小数点表現は、一つの数値は32ビットで表現され、符号ビットは1ビット、仮数部は23ビット、指数部は8ビットである。これは、各種のプログラミング言語におけるfloat型に相当する。
倍精度浮動小数点表現は、一つの数値は64ビットで表現され、符号ビットは1ビット、仮数部は52ビット、指数部は11ビットである。これは、各種のプログラミング言語におけるdouble型に相当する。
【0051】
そして、これらの数値表現に対して、昇格変換、降格変換、特定変換を用いる。
ここで、昇格変換とは、float型の値をdouble型の値にキャスト(cast)する演算に相当し、降格変換とは、double型の値をfloat型の値にキャストする演算に相当する。
キャスト演算においては、符号ビットは変化せず、指数部のビット列を整数として見た場合には同じ値が維持される。
仮数部について考えると、float型では、223 = 8,388,608であるから、十進数では、6桁〜7桁の有効数字となる。double型では、252 = 4,503,599,627,370,474であるから、十進数では、15桁〜16桁の有効数字となる。
【0052】
したがって、同じ仮数部を持つdouble型とfloat型の数値では、252-23 = 536,870,912種類のdouble型の数値が、同じfloat型の数値にキャストされることになる。
また、本実施形態では、特定変換として、昇格変換そのものを用いるものとする。
【0053】
図2は、本発明の実施形態の一つに係る数値記録装置の概要構成を示す模式図である。以下、本図を参照して説明する。
本実施形態に係る数値記録装置201は、記憶部202、保存部203、取得部204、報告部205、表示部206を備え、以下のように構成する。
【0054】
すなわち、記憶部202は、第2精度(double型)の数値を記憶することができる。
本実施形態では、記憶部202として外部メモリ106を用いる。記憶部202には、数値が8バイト単位に記憶されることになる。
図3は、本実施形態に係る数値記録装置にて実行されるセーブ処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
【0055】
まず、保存部203は、ゲームにおける各種の第1精度(float型)の数値のうち、保存すべきものを受け付ける(ステップS301)。本実施形態では、保存すべき数値(ゲーム内の処理で使われる数値)はfloat型であるものとしているからである。
ついで、保存部203は、当該数値を第2精度(double型)に特定変換する(ステップS302)。本実施形態では、特定変換は、float型からdouble型のキャスト演算に相当し、これは昇格変換に等しい。
【0056】
さらに、保存部203は、特定変換の結果を、記憶部202に記憶させて保存し(ステップS303)。本処理を終了する。本実施形態では、外部メモリにdouble型の数値を記憶させることになる。
このように、本実施形態では、CPU 101が外部メモリ106と共働して、保存部203として機能することとなる。
【0057】
図4は、本実施形態に係る数値記録装置にて実行されるロード処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
まず、取得部204は、記憶部202に記憶された第2精度(double型)の数値Xを読み出す(ステップS401)。本実施形態では、8バイトに相当するビット列が読み出されることになる。
【0058】
次に、取得部204は、読み出した第2精度(double型)の数値に対して降格変換を施す(ステップS402)。本実施形態では、降格変換は、double型からfloat型へのキャストである。
このように、本実施形態では、CPU 101が外部メモリ106と共働して、取得部204として機能することとなる。
【0059】
ついで、報告部205は、ステップS402における降格変換の結果Yに対して特定変換を施す(ステップS403)。本実施形態では、特定変換は、float型からdouble型へのキャストである。
さらに、報告部205は、ステップS403における特定変換の結果Zと、記憶部202から読み出した数値Xとが等しいか否かを調べる(ステップS404)。
【0060】
等しくない場合(ステップS404;No)、報告部205は、外部メモリ106の改変がされたり、外部メモリ106に不具合が生じたものと判断して、改変があった旨を報告し(ステップS405)、本処理を終了する。この後、典型的には、エラー対応処理が起動されることになる。
等しい場合(ステップS404;Yes)、数値記録装置201は、降格変換の結果Yを、ロードされた数値であるとして扱うことになる。
【0061】
上記のように、同じ指数部を有するdouble型の数値は、float型の数値に比べて252-23 = 536,870,912倍の冗長度を有する。したがって、指数部の改変等がされた場合に、これを検出できる確率は、536,870,911/536,870,912 = 0.9999999981373549…と考えることができる。
したがって、本実施形態においては、CPU 101は、報告部205として機能することとなる。
【0062】
さて、そこで、表示部206は、このロード数値を、float型よりも低い精度数値に丸める(ステップS406)。なお、丸める対象は、ロード数値ではなく、記憶部202から読み出した数値としても良い。いずれを丸めても、同じ結果となるからである。そして、丸めた結果をこれを画面に表示する(ステップS407)。
したがって、本実施形態においては、CPU 101は、画像処理部107と共働して、表示部206として機能することとなる。
【0063】
上述のように、float型の仮数部は、十進数で6桁〜7桁の有効数字である。したがって、画面表示の際には、これよりも桁数の少ない有効数字で表示することとなる。
なお、表示部206およびステップS406〜S407の処理は、実行しなくとも、本発明の効果を得ることは可能である。
【0064】
そして、数値記録装置201は、自身が出力したロード数値を他の処理に委ねて(ステップS408)、本処理を終了する。
上記のように、画面には、float型の数値がこれよりもさらに低い精度で表示される。また、外部メモリ106には、画面に表示されている数値を近似値とするdouble型の数値が記憶されることとなる。
したがって、チート行為をしようとしている不正利用者は、「外部メモリ106に記憶されるdouble型の数値を改変すれば良い」と予想するものと想定される。
【0065】
ところが、上記のように、double型の数値を改変したとしても、これを降格変換した後に昇格変換した場合に、元のdouble型の数値に一致する確率は極めて低い。したがって、チート行為をできるだけ防止することができる。
このように、本実施形態によれば、きわめて高い確率で、記憶部202に記憶された値の改変等を検出することができる。
【実施例2】
【0066】
上記実施形態では、キャスト演算を特定変換として用いていたが、本実施形態では、それ以外の演算を特定演算として用いる種々の技術について説明する。
上記のように、float型の仮数部は23ビット、double型の仮数部は52ビットであるから、その差である29ビットを何らかのビット列で埋める必要がある。上記実施形態ではキャスト演算を用いていたが、キャスト演算では、この29ビットをすべて0とすることが多い。
【0067】
すると、不正利用者は、外部メモリ106に記憶されているdouble型のビット列を見て、ゲームの内部では数値をfloat型で扱っている、と予想する可能性が高くなるとも考えられる。
そこで、本実施形態では、この29ビットをどのような数値で埋めるか、について種々の技術を提供することとし、不正利用者が特定変換をできるだけ予測できないようにする。
【0068】
まず、29ビットを、所定の定数ビット列で埋める手法が考えられる。この場合、29ビットの定数ビット列は、適度に、0と1が出現するもの、たとえば、0の出現比が30パーセント〜70パーセントのようなビット列を選択することが望ましい。
【0069】
次に、29ビットをfloat型の数値に所定のハッシュ関数を適用したもので埋める手法がある。所定のハッシュ関数としては、以下のようなものが考えられる。
(a)float型の数値の32ビット表現を、32ビット整数と見て、この整数をnビット右シフトし、下位29ビットを選ぶ。nの範囲は、0〜5が望ましいが、これ以外の数値を選択しても良い。
(b)float型の数値の32ビット表現を、32ビット整数と見て、この整数を所定の整数mで除算し、下位29ビットを選ぶ。mとしては、32以下の素数を選択することが望ましい。
【0070】
(c)float型の数値の32ビット表現を、8ビットの整数列とみて、この整数列の順序を所定の法則にしたがって交換した後、これらを32ビット整数とみて、下位29ビットを選ぶ。
(d)float型の数値の32ビット表現を、32ビット整数と見て、この整数に所定の整数pを加算もしくは減算し、あるいは、所定の整数pと排他的論理和をとるなど、各種のあらかじめ定めた演算を行ってから、下位29ビットを選ぶ。
(e)上記(a)〜(d)を適宜組み合わせた演算を行う。
【0071】
このようにすれば、不正利用者といえども、特定変換を予想することは極めて困難になる。
なお、このような仮数部のビット数は、適宜変更が可能であり、変更した場合であっても、本発明の範囲に含まれる。
【実施例3】
【0072】
上記実施形態において、浮動小数点表現の仮数部のみを取り出して考えれば、固定小数点表現と考えることもできる。すなわち、固定小数点表現の数値についても、上記実施形態と同様の技術を適用することができ、きわめて高い確率で、記憶部に記憶された値の改変等を検出することができる。
たとえば、固定小数点表現として、整数表現を採用した場合には、第1精度の数値として2n (n>0)の倍数のみを採用し、第2精度の数値として通常の整数を用いる、などの手法を採用することができる。
【実施例4】
【0073】
第1精度の数を第2精度の数に昇格変換すると、第2精度の数から第1精度の数に丸めた際に捨てられる部分が出てくる。上記のように、float型とdouble型を用いた場合には、丸める際に仮数部や指数部の一部のビットが無視されることになる。そこで、この捨てられるビット部分には、種々の情報を入れることができる。
【0074】
上記実施例では、この捨てられるビット部分(29ビットの部分)に、第1精度の数値のハッシュ値等を埋め込むこととしていたが、ここに埋め込む値は、たとえば定数であっても良いし、あらかじめ定めた乱数表に含まれる乱数としても良い。
この場合、特定変換では、それぞれ、埋め込まれている値が定数に等しいか、あるいは、当該乱数表に含まれるかを調べ、そうでない場合には値の改変があったものとして取り扱うことになる。
【0075】
たとえば、あらかじめ所定の要素数の乱数表を用意しておき、float型の数値の32ビット表現を32ビット整数と見て、この整数(をそのまま、もしくは、これに上記のような加減乗除算等の種々の演算を適用した結果)を所定の整数(乱数表の要素数)で割った余りをインデックスと考え、当該乱数表の当該インデックスに配置されている乱数を29ビットの部分に埋め込むのである。この場合、特定変換でも同様の処理を行って、29ビットの部分に埋め込まれた値と、実際に得られた値とが等しいかどうかで、値の改変がされていないかどうかを知ることができる。
【0076】
また、float型の数値の32ビット表現を32ビット整数と見て、これを乱数の種として取扱い、この種からM系列等の漸化式を用いて乱数を生成させて、所定の回数漸化式を適用した後に得られる整数を29ビットの部分に埋め込むこととしても良い。この場合も、特定変換でのチェックは上記と同様である。
【0077】
このように、降格変換の際に捨てられる情報の部分には、昇格変換の際に種々の情報を埋め込むことができ、特定変換では、この埋め込まれた情報をチェックすることによって、値の改変の有無を調べることができるのである。
【0078】
このほか、固定小数点の数値パラメータや、浮動小数点の数値パラメータの仮数部では、LSB(Least Significant Bits)部分の数ビットを事実上使わないことも多い。たとえば、float型数値の場合は、上記のように仮数部は23ビットであるが、ここまでの精度が必要とされない場合である。たとえば、有効数字が20ビット分で表現できる場合は、LSBの3ビットは必要とされない。
【0079】
しかしながら、有効数字20ビットの場合であっても、CPUが各種の演算処理をする場合に、LSBの3ビットをわざわざクリアするようなことは行われない。これは、各種の演算を行ってから、LSBの3ビットを切り捨てれば十分だからである。特に、固定小数点表現を使用した場合や、浮動小数点表現であっても指数部の変動が小さい場合には、これが成り立つ。
【0080】
このような場合、このLSBの3ビットには、本来の数値パラメータでは使用しないビット列を埋め込むことができる。すなわち、以下のようにするのである。
(1)float型の仮数部についてはMSBの20ビットのみを有効数字とする表現を第1精度の数値表現とし、
(2)float型の仮数部については全23ビットを用いる表現を第2精度の数値表現とし、
(3)昇格変換の際には、LSBの3ビットに、改変をチェックするための情報を埋め込む。
【0081】
このほか、以下のような態様を採ることもできる。
(1)float型の仮数部についてはMSBの20ビットのみを有効数字とする表現を第1精度の数値表現とし、
(2)double型の仮数部については全52ビットを用いる表現を第2精度の数値表現とし、
(3)昇格変換の際には、float型のLSBの3ビットに、改変をチェックするための情報を埋め込むとともに、これをdouble型に変換する。変換の際に、さらに改変をチェックするための情報を埋め込んでも良い。
【0082】
上記の説明では、浮動小数点表現を中心に説明したが、浮動小数点表現の仮数部のみについて考えれば、これは固定小数点表現、あるいは、整数表現と実質的に等価である。したがって、固定小数点表現、あるいは、整数表現の数値パラメータについても、上記と同様に、第1精度、第2精度の表現を定め、昇格変換や降格変換を定義して、本発明を適用することができる。
【産業上の利用可能性】
【0083】
以上説明したように、本発明によれば、たとえばコンピュータゲームにおけるチート行為や情報記録媒体の不良等に起因する数値のデータ改変をできるだけ検出するのに好適な数値記録装置、数値記録方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができ、ゲームのチート行為や情報記録媒体の不良等を検出することができる。
【図面の簡単な説明】
【0084】
【図1】本発明の実施形態の1つに係る数値記録装置が実現される典型的な情報処理装置の概要構成を示す説明図である。
【図2】本発明の実施形態の1つに係る数値記録装置の概要構成を示す模式図である。
【図3】本発明の実施形態の1つに係る数値記録装置のセーブ処理の制御の流れを示すフローチャートである。
【図4】本発明の実施形態の1つに係る数値記録装置のロード処理の制御の流れを示すフローチャートである。
【符号の説明】
【0085】
100 情報処理装置
101 CPU
102 ROM
103 RAM
104 インターフェース
105 コントローラ
106 外部メモリ
107 画像処理部
108 DVD−ROMドライブ
109 NIC
110 音声処理部
111 マイク
201 数値記録装置
202 記憶部
203 保存部
204 取得部
205 報告部

【特許請求の範囲】
【請求項1】
第1精度の任意の数値について、当該数値を、当該第1精度よりも高い第2精度の数値に変換(以下、当該変換を「昇格変換」という。)をし、当該昇格変換の結果を当該第1精度の数値に丸める変換(以下、当該変換を「降格変換」という。)をした結果は、元の数値に等しく、
当該第1精度の任意の数値について、当該数値を当該第2精度の数値に特定変換し、当該特定変換の結果を当該第1精度の数値に降格変換した結果は、元の数値に等しく、
当該第2精度の数値を記憶することができる記憶部、
当該第1精度の保存すべき数値を、当該第2精度の数値に当該特定変換した結果を前記記憶部に記憶させて保存する保存部、
前記記憶部に記憶された当該第2精度の数値を当該第1精度の数値に当該降格変換した結果を取得する取得部、
前記記憶部に記憶された当該第2精度の数値と、前記取得された当該第1精度の数値を当該第2精度の数値に当該特定変換した結果と、が等しくない場合、前記記憶部に記憶された数値が改変された旨を報告する報告部
を備える数値記録装置。
【請求項2】
請求項1に記載の数値記録装置であって、
当該昇格変換と、当該特定変換と、は、同一の変換である
ことを特徴とするもの。
【請求項3】
請求項1に記載の数値記録装置であって、
当該特定変換は、当該第1精度の数値を当該第2精度の数値に昇格変換した結果に、当該第2精度の所定の数値を加算もしくは減算する変換であって、当該加算もしくは減算した結果を当該第1精度の数値に当該降格変換すると元の数値に等しくなる変換である
ことを特徴とするもの。
【請求項4】
請求項1に記載の数値記録装置であって、
当該特定変換は、当該第1精度の数値を当該第2精度の数値に昇格変換した結果に、当該第1精度の数値に所定の演算を施して得られる当該第2精度の所定の数値を加算もしくは減算する変換であって、当該加算もしくは減算した結果を当該第1精度の数値に当該降格変換すると元の数値に等しくなる変換である
ことを特徴とするもの。
【請求項5】
請求項1に記載の数値記録装置であって、
前記保存部が保存すべき当該第1精度の数値および前記取得部が取得した当該第1精度の数値の少なくとも一方を、当該第1精度より低い第3精度に降格変換した結果を表示する表示部
を備えることを特徴とするもの。
【請求項6】
請求項1から5のいずれか1項に記載の数値記録装置であって、
前記記憶部は、当該第1精度の数値を不揮発に数値を記憶する
ことを特徴とするもの。
【請求項7】
請求項6に記載の数値記録装置であって、
前記記憶部は、当該数値記録装置から着脱可能な不揮発性情報記録媒体(フレキシブルディスク、光磁気ディスク、および、半導体メモリを含む。)である
ことを特徴とするもの。
【請求項8】
第1精度の任意の数値について、当該数値を、当該第1精度よりも高い第2精度の数値に変換(以下、当該変換を「昇格変換」という。)をし、当該昇格変換の結果を当該第1精度の数値に丸める変換(以下、当該変換を「降格変換」という。)をした結果は、元の数値に等しく、当該第1精度の任意の数値について、当該数値を当該第2精度の数値に特定変換し、当該特定変換の結果を当該第1精度の数値に降格変換した結果は、元の数値に等しくなるような昇格変換、降格変換、特定変換を用い、当該第2精度の数値を記憶することができる記憶部、保存部、取得部、報告部を備える数値記録装置にて実行される数値記録方法であって、
前記保存部が、当該第1精度の保存すべき数値を、当該第2精度の数値に当該特定変換した結果を前記記憶部に記憶させて保存する保存工程、
前記取得部が、前記記憶部に記憶された当該第2精度の数値を当該第1精度の数値に当該降格変換した結果を取得する取得工程、
前記記憶部に記憶された当該第2精度の数値と、前記取得された当該第1精度の数値を当該第2精度の数値に当該特定変換した結果と、が等しくない場合、前記報告部が、前記記憶部に記憶された数値が改変された旨を報告する報告工程
を備える方法。
【請求項9】
第1精度の任意の数値について、当該数値を、当該第1精度よりも高い第2精度の数値に変換(以下、当該変換を「昇格変換」という。)をし、当該昇格変換の結果を当該第1精度の数値に丸める変換(以下、当該変換を「降格変換」という。)をした結果は、元の数値に等しく、当該第1精度の任意の数値について、当該数値を当該第2精度の数値に特定変換し、当該特定変換の結果を当該第1精度の数値に降格変換した結果は、元の数値に等しくなるような昇格変換、降格変換、特定変換を用いるプログラムであって、コンピュータを、
当該第2精度の数値を記憶することができる記憶部、
当該第1精度の保存すべき数値を、当該第2精度の数値に当該特定変換した結果を前記記憶部に記憶させて保存する保存部、
前記記憶部に記憶された当該第2精度の数値を当該第1精度の数値に当該降格変換した結果を取得する取得部、
前記記憶部に記憶された当該第2精度の数値と、前記取得された当該第1精度の数値を当該第2精度の数値に当該特定変換した結果と、が等しくない場合、前記記憶部に記憶された数値が改変された旨を報告する報告部
として機能させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate