(57)【特許請求の範囲】
【請求項１】
予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部を有する情報処理装置であって、
検証用となる変数の値が記憶される検証メモリ部を有し、
少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、
前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、
検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、
前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、
前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、
前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、
前記予め定められたプログラムには、ループ処理を実行させる場合に、
前記設定記述と、
前記ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、
ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で前記情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、
前記判定記述と、が記述されており、
前記ループ処理記述中の検証演算記述には、
前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されており、
前記情報処理部は、
ループ処理を実行する場合に、
前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶し、
前記ビット列生成記述に基づいて、前記ループ処理の回数に応じた前記ビット列ｘを生成し、
前記ループ処理記述中の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算し、
前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定する
ことを特徴とする情報処理装置。
【請求項２】
前記ビット列生成記述は、
前記ループ処理の回数に応じて前記第２の固定ビット長以上のビット列ｘを生成する記述であり、
前記ビット列ｙは、前記ビット列ｘのうちの所定のビット位置における前記第２の固定ビット長のビット列である
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記ビット列生成記述は、
前記ループ処理の回数の値が前記第２の固定ビット長の値以上である場合に、
前記ループ処理の回数の値と等しいビット長を有し、且つ、前記ビット列ｘにおける１の数が奇数個になるように、前記ビット列ｘを生成する記述である
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記ビット列生成記述は、
前記ループ処理の回数の値が前記第２の固定ビット長の値未満である場合に、
前記ループ処理の回数の値から１を減算した値に等しい数のビット長の０と、１ビット長の１とを有するビット列による繰り返しに基づいて、前記ビット列ｘを生成する記述である
ことを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記ビット列生成記述は、
乱数に基づいて、前記ビット列ｘを生成する記述である
ことを特徴とする請求項２から請求項４のいずれか一項に記載の情報処理装置。
【請求項６】
前記型Ａのビット列の値であって、値が互いに異なるｍ個の値を、識別子ｊ（ｊ＝０，・・・，ｍ−１）と対応づけて、前記型Ａのビット列の配列Ｘ（ｊ）として記憶するビット列記憶部と、
Ｘ（ｋ）と排他的論理和演算することでＸ（ｌ）となるようなビット列の配列Ｚ（ｋ，ｌ）（ｋ，ｌ＝０，・・・，ｍ−１）を変換ビット列として記憶する変換ビット列記憶部と、を有し、
前記予め定められたプログラムには、
前記設定記述として、前記ビット列記憶部に記憶されている前記型Ａの値であるＸ（ｐ０）（ｐ０は、０〜ｍ−１の間の任意の値の識別子）を前記検証メモリ部に記憶させるように記述されており、
前記設定記述の後に、ｎ個の前記情報処理検証演算記述が順に記述され、且つ、前記ｎ個の情報処理検証演算記述の後に前記判定記述が記述されるように予め記述されており、
前記ｎ個の情報処理検証演算記述のうちｉ番目の記述の中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記変換ビット列記憶部より読み出した変換ビット列であるＺ（ｐｉ−１，ｐｉ）（ｐｉは０〜ｍ−１の間の任意の識別子）が示す値で排他的論理和演算し、検証メモリ部に上書きするように予め記述されており、
さらに、前記判定記述として、前記検証メモリ部に記憶されている変数が、Ｘ（ｐ０）＾Ｚ（ｐ０，ｐ１）＾・・・・＾Ｚ（ｐｎ−１，ｐｎ）（＾は排他的論理和演算）の値となるＸ（ｐｎ）（ｐｎは０〜ｍ−１の間の任意の識別子）であって、前記ビット列記憶部から読み出したＸ（ｐｎ）の値と一致するか否かを判断するように予め記述されており、
前記情報処理部は、
前記設定記述に基づいて、前記ビット列記憶部より読み出した前記型Ａのある値を前記検証メモリ部に記憶し、
前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記変換ビット列記憶部から読み出した変換ビット列とを排他的論理和演算した値を前記検証メモリ部に上書きし、
前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列記憶部から読み出した前記型Ａのビット列と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定し、
前記型Ａは、前記基本ビット列を単位とする前記基本ビット列のｑ倍のビット列として定められ、
配列Ｘ（ｊ）は、前記ｍ個を２のｑ乗個とした前記基本ビット列の組み合わせとして生成されるともに、前記配列Ｚ（ｋ，ｌ）は、前記配列Ｘ（ｊ）と前記配列Ｘ（ｊ）との排他的論理和演算に基づいて生成されている
ことを特徴とする請求項１から請求項５のいずれか一項に記載の情報処理装置。
【請求項７】
予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部を有する情報処理装置であって、
少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、
前記型Ａのビット列の値であって、値が互いに異なるｍ個の値を、識別子ｊ（ｊ＝０，・・・，ｍ−１）と対応づけて、前記型Ａのビット列の配列Ｘ（ｊ）として記憶するビット列記憶部と、
Ｘ（ｋ）と排他的論理和演算することでＸ（ｌ）となるようなビット列の配列Ｚ（ｋ，ｌ）（ｋ，ｌ＝０，・・・，ｍ−１）を変換ビット列として記憶する変換ビット列記憶部と、
検証用となる変数の値を記憶する検証メモリ部と、を有し、
前記予め定められたプログラムは、
前記ビット列記憶部に記憶されている前記型Ａのある値を前記検証メモリ部に記憶させる事を示す記述である設定記述と、
検査対象となる情報処理である検査対象情報処理を実行することを示す記述である情報処理記述と、
前記検証メモリ部に記憶されている変数を前記変換ビット列記憶部より読み出した変換ビット列で排他的論理和演算した値を前記検証メモリ部に上書きすることを示す記述である検証演算記述と、
前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述である判定記述とを有し、
前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、
前記設定記述の後に、ｎ個の前記情報処理検証演算記述が順に記述され、且つ、前記ｎ個の情報処理検証演算記述の後に前記判定記述が記述されるように予め記述されており、
前記設定記述は、前記ビット列記憶部に記憶されている前記型Ａの値であるＸ（ｐ０）（ｐ０は、０〜ｍ−１の間の任意の値の識別子）を前記検証メモリ部に記憶させるように記述されており、
前記ｎ個の情報処理検証演算記述のうちｉ番目の記述の中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記変換ビット列記憶部より読み出した変換ビット列であるＺ（ｐｉ−１，ｐｉ）（ｐｉは０〜ｍ−１の間の任意の識別子）が示す値で排他的論理和演算し、検証メモリ部に上書きするように予め記述されており、
前記判定記述には、前記検証メモリ部に記憶されている変数が、Ｘ（ｐ０）＾Ｚ（ｐ０，ｐ１）＾・・・・＾Ｚ（ｐｎ−１，ｐｎ）（＾は排他的論理和演算）の値となるＸ（ｐｎ）（ｐｎは０〜ｍ−１の間の任意の識別子）であって、前記ビット列記憶部から読み出したＸ（ｐｎ）の値と一致するか否かを判断するように予め記述されており、
前記情報処理部は、
前記設定記述に基づいて、前記ビット列記憶部より読み出した前記型Ａのある値を前記検証メモリ部に記憶し、
前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記変換ビット列記憶部から読み出した変換ビット列とを排他的論理和演算した値を前記検証メモリ部に上書きし、
前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列記憶部から読み出した前記型Ａのビット列と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定し、
前記型Ａは、前記基本ビット列を単位とする前記基本ビット列のｑ倍のビット列として定められ、
配列Ｘ（ｊ）は、前記ｍ個を２のｑ乗個とした前記基本ビット列の組み合わせとして生成されるとともに、前記配列Ｚ（ｋ，ｌ）は、前記配列Ｘ（ｊ）と前記配列Ｘ（ｊ）との排他的論理和演算に基づいて生成されている
ことを特徴とする情報処理装置。
【請求項８】
予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部を有する情報処理装置であって、
検証用となる変数の値が記憶される検証メモリ部を有し、
少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、
前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、
検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、
前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、
前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、
前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、
前記予め定められたプログラムには、
前記設定記述と、
前記情報処理検証演算記述の実行回数であるｎの値（ｎは自然数）に応じてビット列ｘを生成するビット列生成記述と、
前記ｎ個の前記情報処理検証演算記述と、
前記判定記述と、が記述されており、
前記検証演算記述には、
前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されており、
前記情報処理部は、
前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶し、
前記ビット列生成記述に基づいて、前記ｎの値に応じた前記ビット列ｘを生成し、
前記ｎ個の前記情報処理検証演算記述に基づいて、
前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算する処理を前記ｎ回実行し、
前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定する
ことを特徴とする情報処理装置。
【請求項９】
予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部と、検証用となる変数の値が記憶される検証メモリ部とを有する情報処理装置において用いられる情報処理方法であって、
少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、
前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、
検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、
前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、
前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、
前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、
前記予め定められたプログラムには、ループ処理を実行させる場合に、
前記設定記述と、
前記ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、
ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で前記情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、
前記判定記述と、が記述されており、
前記ループ処理記述中の検証演算記述には、
前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されており、
前記情報処理部は、
ループ処理を実行する場合に、
前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶し、
前記ビット列生成記述に基づいて、前記ループ処理の回数に応じた前記ビット列ｘを生成し、
前記ループ処理記述中の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算し、
前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定する
ことを特徴とする情報処理方法。
【請求項１０】
予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部と、検証用となる変数の値が記憶される検証メモリ部とを有し、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、前記予め定められたプログラムには、ループ処理を実行させる場合に、前記設定記述と、前記ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で前記情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、前記判定記述と、が記述されており、前記ループ処理記述中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されている情報処理装置としてのコンピュータに、
前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶する手順と、
前記ビット列生成記述に基づいて、前記ループ処理の回数に応じた前記ビット列ｘを生成する手順と、
前記ループ処理記述中の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算する手順と、
前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定する手順と
を実行させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、情報処理方法、及び情報処理プログラムに関する。
【背景技術】
【０００２】
ＩＣカードなどの情報処理部を搭載した情報処理装置は、高電圧を印加する、レーザービームを照射する、イオンビームを照射するなどの物理的な攻撃を受けることで、搭載しているソフトウェアが、認証処理のバイパスや内部データの改竄など、本来意図しない動作をする可能性がある。
【０００３】
このような、バイパスや内部データの改竄の問題に対して、“０１”と“１０”とを組み合わせた、例えば、１バイト長のビット列の全ての組み合わせであるＣＶ（Complex Value）を用いてバイパスや内部データの改竄を検知する技術が知られている（例えば、特許文献１を参照）。
例えば、特許文献１に記載の技術では、まず、処理プログラムの途中に、ＣＶの組み合わせのうちの１つの値であるＣＶ（ｉ）（スタンプ）を所定の値とのＸＯＲ演算（排他的論理和演算）により異なるＣＶ（ｊ）に変換するプログラムを組み込んでおく。そして、情報処理装置は、処理プログラムの間（途中）で変換されたＣＶ（ｊ）の値と、予め算出されるはずのＣＶ（ｊ）の値とが一致するか否かを判定してチェックすることにより、バイパスや改竄を検知する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２４５３３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、特許文献１に記載の技術では、このＣＶの値（スタンプ）を一定のルールに従って遷移させる必要がある。そのため、例えば、同一処理が複数回数実行されるループ文（特に、処理実行回数が一定でないループ文）に対して、特許文献１に記載の技術を適用した場合、ＣＶの値によるバイパスや内部データの改竄を検知することができないことがある。このような場合、例えば、２種類のＣＶの値だけが繰り返し現れたり、正常な処理であっても、誤ったＣＶの値となったりすることがある。
このような場合の対策の１つの方法として、対象となるループ処理の中に、条件文を記載して、ＣＶの値の状態に応じて遷移方法を動的に変更する方法が考えられる。しかしながら、この方法を用いた場合、情報処理装置は、条件文の処理が追加されるため、処理速度が大幅に低下するという問題が発生する。
【０００６】
また、例えば、ループ文でない場合であっても、一定のルールに従ってＣＶの値を遷移させる必要があるため、特許文献１に記載の技術では、ＣＶの値は、毎回同じ順序（固定の順序）により遷移する。さらに、例えば、検証する処理の回数（上述したＸＯＲ演算をする箇所の回数）がＣＶの値の組み合わせよりも多い場合には、同一のＣＶの値になる箇所が固定の処理位置に生じるので、バイパスや内部データの改竄される可能性が高まる場合がある。
このように、特許文献１に記載の技術では、コンピュータ等の処理において、その演算負荷を減じつつ、バイパスや内部データの改竄を検知することが困難な場合があった。
【０００７】
本発明は、上記問題を解決すべくなされたもので、その目的は、コンピュータ等の処理において、その演算負荷を減じつつ、バイパスや内部データの改竄を検知することを可能とする情報処理装置、情報処理方法、及び情報処理プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記問題を解決するために、本発明の一実施形態は、予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部を有する情報処理装置であって、検証用となる変数の値が記憶される検証メモリ部を有し、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、前記予め定められたプログラムには、ループ処理を実行させる場合に、前記設定記述と、前記ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で前記情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、前記判定記述と、が記述されており、前記ループ処理記述中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されており、前記情報処理部は、ループ処理を実行する場合に、前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶し、前記ビット列生成記述に基づいて、前記ループ処理の回数に応じた前記ビット列ｘを生成し、前記ループ処理記述中の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算し、前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定することを特徴とする情報処理装置である。
【０００９】
また、本発明の一態様は、上記の情報処理装置において、前記ビット列生成記述は、前記ループ処理の回数に応じて前記第２の固定ビット長以上のビット列ｘを生成する記述であり、前記ビット列ｙは、前記ビット列ｘのうちの所定のビット位置における前記第２の固定ビット長のビット列であることを特徴とする。
【００１０】
また、本発明の一態様は、上記の情報処理装置において、前記ビット列生成記述は、前記ループ処理の回数の値が前記第２の固定ビット長の値以上である場合に、前記ループ処理の回数の値と等しいビット長を有し、且つ、前記ビット列ｘにおける１の数が奇数個になるように、前記ビット列ｘを生成する記述であることを特徴とする。
【００１１】
また、本発明の一態様は、上記の情報処理装置において、前記ビット列生成記述は、前記ループ処理の回数の値が前記第２の固定ビット長の値未満である場合に、前記ループ処理の回数の値から１を減算した値に等しい数のビット長の０と、１ビット長の１とを有するビット列による繰り返しに基づいて、前記ビット列ｘを生成する記述であることを特徴とする。
【００１２】
また、本発明の一態様は、上記の情報処理装置において、前記ビット列生成記述は、乱数に基づいて、前記ビット列ｘを生成する記述であることを特徴とする。
【００１３】
また、本発明の一態様は、上記の情報処理装置において、前記型Ａのビット列の値であって、値が互いに異なるｍ個の値を、識別子ｊ（ｊ＝０，・・・，ｍ−１）と対応づけて、前記型Ａのビット列の配列Ｘ（ｊ）として記憶するビット列記憶部と、Ｘ（ｋ）と排他的論理和演算することでＸ（ｌ）となるようなビット列の配列Ｚ（ｋ，ｌ）（ｋ，ｌ＝０，・・・，ｍ−１）を変換ビット列として記憶する変換ビット列記憶部と、を有し、前記予め定められたプログラムには、前記設定記述として、前記ビット列記憶部に記憶されている前記型Ａの値であるＸ（ｐ０）（ｐ０は、０〜ｍ−１の間の任意の値の識別子）を前記検証メモリ部に記憶させるように記述されており、前記設定記述の後に、ｎ個の前記情報処理検証演算記述が順に記述され、且つ、前記ｎ個の情報処理検証演算記述の後に前記判定記述が記述されるように予め記述されており、前記ｎ個の情報処理検証演算記述のうちｉ番目の記述の中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記変換ビット列記憶部より読み出した変換ビット列であるＺ（ｐｉ−１，ｐｉ）（ｐｉは０〜ｍ−１の間の任意の識別子）が示す値で排他的論理和演算し、検証メモリ部に上書きするように予め記述されており、さらに、前記判定記述として、前記検証メモリ部に記憶されている変数が、Ｘ（ｐ０）＾Ｚ（ｐ０，ｐ１）＾・・・・＾Ｚ（ｐｎ−１，ｐｎ）（＾は排他的論理和演算）の値となるＸ（ｐｎ）（ｐｎは０〜ｍ−１の間の任意の識別子）であって、前記ビット列記憶部から読み出したＸ（ｐｎ）の値と一致するか否かを判断するように予め記述されており、前記情報処理部は、前記設定記述に基づいて、前記ビット列記憶部より読み出した前記型Ａのある値を前記検証メモリ部に記憶し、前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記変換ビット列記憶部から読み出した変換ビット列とを排他的論理和演算した値を前記検証メモリ部に上書きし、前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列記憶部から読み出した前記型Ａのビット列と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定し、前記型Ａは、前記基本ビット列を単位とする前記基本ビット列のｑ倍のビット列として定められ、配列Ｘ（ｊ）は、前記ｍ個を２のｑ乗個とした前記基本ビット列の組み合わせとして生成されるともに、前記配列Ｚ（ｋ，ｌ）は、前記配列Ｘ（ｊ）と前記配列Ｘ（ｊ）との排他的論理和演算に基づいて生成されていることを特徴とする。
【００１４】
また、本発明の一態様は、予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部を有する情報処理装置であって、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、前記型Ａのビット列の値であって、値が互いに異なるｍ個の値を、識別子ｊ（ｊ＝０，・・・，ｍ−１）と対応づけて、前記型Ａのビット列の配列Ｘ（ｊ）として記憶するビット列記憶部と、Ｘ（ｋ）と排他的論理和演算することでＸ（ｌ）となるようなビット列の配列Ｚ（ｋ，ｌ）（ｋ，ｌ＝０，・・・，ｍ−１）を変換ビット列として記憶する変換ビット列記憶部と、検証用となる変数の値を記憶する検証メモリ部と、を有し、前記予め定められたプログラムは、前記ビット列記憶部に記憶されている前記型Ａのある値を前記検証メモリ部に記憶させる事を示す記述である設定記述と、検査対象となる情報処理である検査対象情報処理を実行することを示す記述である情報処理記述と、前記検証メモリ部に記憶されている変数を前記変換ビット列記憶部より読み出した変換ビット列で排他的論理和演算した値を前記検証メモリ部に上書きすることを示す記述である検証演算記述と、前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述である判定記述とを有し、前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、前記設定記述の後に、ｎ個の前記情報処理検証演算記述が順に記述され、且つ、前記ｎ個の情報処理検証演算記述の後に前記判定記述が記述されるように予め記述されており、前記設定記述は、前記ビット列記憶部に記憶されている前記型Ａの値であるＸ（ｐ０）（ｐ０は、０〜ｍ−１の間の任意の値の識別子）を前記検証メモリ部に記憶させるように記述されており、前記ｎ個の情報処理検証演算記述のうちｉ番目の記述の中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記変換ビット列記憶部より読み出した変換ビット列であるＺ（ｐｉ−１，ｐｉ）（ｐｉは０〜ｍ−１の間の任意の識別子）が示す値で排他的論理和演算し、検証メモリ部に上書きするように予め記述されており、前記判定記述には、前記検証メモリ部に記憶されている変数が、Ｘ（ｐ０）＾Ｚ（ｐ０，ｐ１）＾・・・・＾Ｚ（ｐｎ−１，ｐｎ）（＾は排他的論理和演算）の値となるＸ（ｐｎ）（ｐｎは０〜ｍ−１の間の任意の識別子）であって、前記ビット列記憶部から読み出したＸ（ｐｎ）の値と一致するか否かを判断するように予め記述されており、前記情報処理部は、前記設定記述に基づいて、前記ビット列記憶部より読み出した前記型Ａのある値を前記検証メモリ部に記憶し、前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記変換ビット列記憶部から読み出した変換ビット列とを排他的論理和演算した値を前記検証メモリ部に上書きし、前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列記憶部から読み出した前記型Ａのビット列と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定し、前記型Ａは、前記基本ビット列を単位とする前記基本ビット列のｑ倍のビット列として定められ、配列Ｘ（ｊ）は、前記ｍ個を２のｑ乗個とした前記基本ビット列の組み合わせとして生成されるともに、前記配列Ｚ（ｋ，ｌ）は、前記配列Ｘ（ｊ）と前記配列Ｘ（ｊ）との排他的論理和演算に基づいて生成されていることを特徴とする情報処理装置である。
【００１５】
また、本発明の一態様は、予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部を有する情報処理装置であって、検証用となる変数の値が記憶される検証メモリ部を有し、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、前記予め定められたプログラムには、前記設定記述と、前記情報処理検証演算記述の実行回数であるｎの値（ｎは任意の自然数）に応じてビット列ｘを生成するビット列生成記述と、前記ｎ個の前記情報処理検証演算記述と、前記判定記述と、が記述されており、前記検証演算記述には、前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されており、前記情報処理部は、前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶し、前記ビット列生成記述に基づいて、前記ｎの値に応じた前記ビット列ｘを生成し、前記ｎ個の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算する処理を前記ｎ回実行し、前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定することを特徴とする情報処理装置である。
【００１６】
また、本発明の一態様は、予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部と、検証用となる変数の値が記憶される検証メモリ部とを有する情報処理装置において用いられる情報処理方法であって、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、前記予め定められたプログラムには、ループ処理を実行させる場合に、前記設定記述と、前記ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で前記情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、前記判定記述と、が記述されており、前記ループ処理記述中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されており、前記情報処理部は、ループ処理を実行する場合に、前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶し、前記ビット列生成記述に基づいて、前記ループ処理の回数に応じた前記ビット列ｘを生成し、前記ループ処理記述中の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算し、前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定することを特徴とする情報処理方法である。
【００１７】
また、本発明の一態様は、予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部と、検証用となる変数の値が記憶される検証メモリ部とを有し、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、前記型Ａのある値を前記検証メモリ部に記憶させることを示す記述を設定記述とし、検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、前記検証メモリ部に記憶されている変数をあるビット列で排他的論理和演算して前記検証メモリ部に上書きすることを示す記述を検証演算記述とし、前記検証メモリ部に記憶されている変数の値に基づいて前記検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とし、前記情報処理記述及びその後に前記検証演算記述が記述されている記述を情報処理検証演算記述として、前記予め定められたプログラムには、ループ処理を実行させる場合に、前記設定記述と、前記ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で前記情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、前記判定記述と、が記述されており、前記ループ処理記述中の検証演算記述には、前記検証メモリ部に記憶されている変数を、前記ビット列ｘに含まれるビット列ｙで排他的論理和演算し、前記検証メモリ部に上書きし、前記ビット列ｘを巡回シフト演算するように、予め記述されている情報処理装置としてのコンピュータに、前記設定記述に基づいて、前記型Ａのあるビット列ａを前記検証メモリ部に記憶する手順と、前記ビット列生成記述に基づいて、前記ループ処理の回数に応じた前記ビット列ｘを生成する手順と、前記ループ処理記述中の前記情報処理検証演算記述に基づいて、前記検査対象情報処理を実行するとともに、前記検証メモリ部から読み出した前記変数と、前記ビット列ｘに含まれる前記ビット列ｙとを排他的論理和演算した値を前記検証メモリ部に上書きし、さらに、前記ビット列ｘを巡回シフト演算する手順と、前記判定記述に基づいて、前記検証メモリ部から読み出した変数の値が、前記ビット列ａのビット反転値と一致するか否かを判定することにより、前記検証演算記述による排他的論理和演算が実行されたか否かを判定する手順とを実行させるための情報処理プログラムである。
【発明の効果】
【００１８】
本発明によれば、コンピュータ等の処理において、その演算負荷を減じつつ、バイパスや内部データの改竄を検知することを可能とする効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】“０１”と“１０”との２ビットの組み合わせのみを用いて、１バイトフォーマットを１６種類で表現する表現形式を説明する表である。
【図２】図１の表におけるＣＶに対するＣＶＭを説明する説明図である。
【図３】ＣＶ（ｉ）とＣＶ（ｊ）とに対応するＣＶＭ（ｉ，ｊ）を示す表である。
【図４】ＣＶを用いた基本的な検証の利用方法を説明する説明図である。
【図５】本実施形態におけるＣＶを用いたループ処理を説明する説明図である。
【図６】counterの値が８ビット未満である場合におけるビット列ｘの初期値を説明する説明図である。
【図７】ＣＶを用いたループ処理における検証の利用方法を説明する説明図である。
【図８】本発明の一実施形態による情報処理装置の構成を示すブロック図である。
【図９】本発明の一実施形態によるＣＶの生成方法を説明する説明図である。
【図１０】同実施形態におけるＣＶ（ｉ）とＣＶ（ｊ）とに対応するＣＶＭ（ｉ，ｊ）の生成例を示す表である。
【図１１】本実施形態におけるＣＶによる検証をループ処理以外に適用する場合の一例を説明する説明図である。
【図１２】ＣＶを用いたループ処理以外における検証の利用方法の一例を説明する説明図である。
【発明を実施するための形態】
【００２０】
以下、本発明の一実施形態による情報処理装置について、図面を参照して説明する。
［第１の実施形態］
＜原理＞
まず、本実施形態において用いる原理について説明する。本実施形態においては、全ビット反転するという攻撃が、非常に困難であることに注目し、次のような処理を行う。この処理により、処理プログラムに対してのバイパスや改竄の検知が可能となる。
【００２１】
まず、ＣＶ（Complex Value）を、予め準備しておく。このＣＶとは、“０１”と“１０”とを組み合わせた、１バイト（byte）長のビット列の全ての組み合わせである。このＣＶについては、後述する。
次に、ＣＶ（ｉ）をＸＯＲ演算（排他的論理和演算）した場合に、ＣＶ（ｊ）となる値ＣＶＭを、ＣＶ（ｉ）とＣＶ（ｊ）との全ての組み合わせに対して予め算出して準備し、変換テーブルに記憶しておく。ここで、ｉとｊとは、上記１６通りのＣＶの内、いずれか１つのＣＶを示すための識別情報である。
次に、処理プログラムの間（途中）に、ＣＶ（ｉ）を、ＣＶ（ｊ）に変換するプログラムを組み込む。
そして、処理プログラムの間（途中）で変換されたＣＶ（ｊ）の値と、予め算出されるはずのＣＶ（ｊ）の値とが一致するか否かを判定してチェックすることにより、バイパスや改竄を検知する。
【００２２】
＜原理詳細＞
以下、本実施形態において用いる原理の詳細について、図面を参照して説明する。
まず、本実施形態における基本原理について、説明する。
図１に示すように、“０１”と“１０”との２ビット固定長である基本ビット列を組み合わせた１バイトフォーマットのデータ（８ビット固定長のデータ）を、ＣＶとする。この場合、基本ビット列が２ビット固定長（第１の固定ビット長）であり、ＣＶが８ビット固定長（第２の固定ビット長）であるため、ＣＶは１６種類のデータとなる。なお、ここでは、１６種類の組み合わせを有するＣＶについて、それぞれのＣＶを識別するために、識別子（識別情報）ｉ（ここで、ｉは０から１５の整数）を用いてＣＶ（ｉ）とする。
【００２３】
なお、ここでは、識別子ｉとＣＶ（ｉ）との関係において、例えば、ＣＶ（０）とＣＶ（８）とが互いにビット反転の関係にあり、ＣＶ（１）とＣＶ（９）とが互いにビット反転の関係にあり、ＣＶ（２）とＣＶ（１０）とが互いにビット反転の関係にあり、ＣＶ（３）とＣＶ（１１）とが互いにビット反転の関係にあり、ＣＶ（４）とＣＶ（１２）とが互いにビット反転の関係にあり、ＣＶ（５）とＣＶ（１３）とが互いにビット反転の関係にあり、ＣＶ（６）とＣＶ（１４）とが互いにビット反転の関係にあり、且つ、ＣＶ（７）とＣＶ（１５）とが、互いにビット反転の関係にあるようにする。
【００２４】
すなわち、ＣＶ（ｋ）とＣＶ（ｋ＋８）とが互いにビット反転の関係にあるような順序とする（ここで、ｋは０から７の整数）。このような識別子ｉとＣＶ（ｉ）との関係としておくことにより、後述するように、判定段階において、検査対象となる情報処理前のＣＶと検査対象となる情報処理後のＣＶとで、ＣＶの値が互いにビット反転の関係になるように設定し易くなる。
【００２５】
次に、入力値をＣＶ（ｉ）として、排他的論理和演算（ＸＯＲ）した場合に、出力値がＣＶ（ｊ）となるようなＣＶＭの値を算出する。ここで、ｉ及びｊは、それぞれ、０から１５の任意の整数である。なお、以降の説明においては、ＣＶ又はＣＶＭ内で用いられるｉ及びｊは、それぞれ、０から１５の任意の整数として説明する。
【００２６】
例えば、図２（ａ）示すように、「ＣＶ（５）（＋）ＣＶＭ＝ＣＶ（１４）」の場合、すなわち、「０１１００１１０（＋）ＣＶＭ＝１００１０１１０」の場合には、この式を満たすＣＶＭの値は、「ＣＶＭ＝１１１１００００（＝Ｆ０ｈ）」となる。なお、記号「（＋）」又は「＾」は、排他的論理和演算を示す。また、記号「ｈ」は、１６進数であることを示す。
【００２７】
また、図２（ａ）と同様に、図２（ｂ）に示すように、「ＣＶ（１１）（＋）ＣＶＭ＝ＣＶ（７）」の場合、すなわち、「１０１００１０１（＋）ＣＶＭ＝０１１０１０１０」の場合には、この式を満たすＣＶＭの値は、「ＣＶＭ＝１１００１１１１（＝ＣＦｈ）」となる。
【００２８】
上記図２（ａ）及び図２（ｂ）に示す演算から、ＣＶ（ｉ）とＣＶ（ｊ）とを基本ビット列を単位として順に対比してみた場合、すなわち、２ビットずつを順に対比してみた場合、ＣＶ（ｉ）の値がビット反転してＣＶ（ｊ）になる箇所のＣＶＭの値が“１１”であり、それ以外が“００”である。すなわち、ＣＶ（ｉ）とＣＶ（ｊ）との値で、ＣＶ（ｉ）の“０１”がＣＶ（ｊ）の“１０”となる箇所、又は、ＣＶ（ｉ）の“１０”がＣＶ（ｊ）の“０１”となる箇所のＣＶＭの値が“１１”となり、それ以外のＣＶＭの値が“００”となる。また、ＣＶＭは、ＣＶ（ｉ）及びＣＶ（ｊ）と同じ８ビット固定長の変数である。
【００２９】
以上のようにして、全てのＣＶ（ｉ）とＣＶ（ｊ）との組み合わせに対して、ＣＶＭを全て算出する。これにより、図３に示すような、列をＣＶ（ｉ）とし、行をＣＶ（ｊ）として、ＣＶ（ｉ）とＣＶ（ｊ）とにＣＶＭが関連付けられたテーブルを算出することができる。
【００３０】
なお、本実施形態における情報処理装置は、このテーブルを変換テーブルとして予め内部の記憶部（後述するＣＶＭテーブル３）に記憶しておき、この変換テーブルの値を参照しつつ、以降に説明する処理を実行する。なお、以降、ＣＶ（ｉ）とＣＶ（ｊ）とに関連付けられているＣＶＭをＣＶＭ（ｉ，ｊ）として表現する。つまり、ＣＶＭは、ＣＶＭ（０，０）、・・・・、ＣＶＭ（１５，１５）として表現される。
【００３１】
ここで、図３のテーブルにおいては、列方向において、識別子ｉと変換前のＣＶであるＣＶ（ｉ）とが関連付けて記憶されており、行方向において、識別子ｊと変換後のＣＶであるＣＶ（ｊ）とが関連付けて記憶されているとともに、さらに、識別子ｉと識別子ｊとに関連付けてＣＶＭ（ｉ，ｊ）が変換テーブルとして記憶されている。
【００３２】
なお、この図３において、列方向のＣＶ（ｉ）と行方向のＣＶ（ｊ）とにおいて、１６種類のＣＶ順序は、互いに同じとしてある。すなわち、列方向のＣＶ（０）と行方向のＣＶ（０）とは同じ値であり、列方向のＣＶ（１）と行方向のＣＶ（１）とは同じ値であり、・・・・・、列方向のＣＶ（１５）と行方向のＣＶ（１５）とは同じである。
【００３３】
＜ＣＶを用いた基本的な検証の利用方法＞
次に、図４を用いて、上記に説明したＣＶを用いた一例としての、バイパスや改竄などの検証方法について説明する。
【００３４】
図４に示すように、プログラムの０１行目に、「CurrentCVを初期値ＣＶ（０）＝５５ｈに設定する」ことを示す記述が記述されている。
【００３５】
また、０２行目に、「処理Ａを実行する」ことを示す記述が記述されており、０３行目に、「CurrentCVを、ＣＶ（０）＝５５ｈからＣＶ（３）＝５Ａｈに変えるように、CurrentCVをＣＶＭ（０，３）とＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【００３６】
また、０４行目に、「処理Ｂを実行する」ことを示す記述が記述されており、０５行目に、「CurrentCVを、ＣＶ（３）＝５ＡｈからＣＶ（１２）＝９Ａｈに変えるように、CurrentCVをＣＶＭ（３，１２）とＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【００３７】
また、０６行目に、「処理Ｃを実行する」ことを示す記述が記述されており、０７行目に、「CurrentCVを、ＣＶ（１２）＝９ＡｈからＣＶ（８）＝ＡＡｈに変えるように、CurrentCVをＣＶＭ（１２，８）とＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【００３８】
また、０８行目に、「CurrentCVがＣＶ（８）＝ＡＡｈと一致する否かを判定し、判定した結果が一致しない場合には、異常と判定して停止する」ことを示す記述が記述されている。
【００３９】
このように、図４に示される処理が実行される場合、まず、０１行目の処理の実行により、CurrentCVにＣＶ（０）＝５５ｈの値が書き込まれる。これにより、物理的なメモリやレジスタなどの記憶部であるCurrentCVに、ＣＶ（０）＝５５ｈの値が書き込まれる。
【００４０】
次に、０２行目の処理の実行により、処理Ａが実行される。次に、０３行目の処理の実行により、CurrentCVとＣＶＭ（０，３）とがＸＯＲ演算されてCurrentCVに上書きされることにより、CurrentCVの値が、ＣＶ（０）＝５５ｈからＣＶ（３）＝５Ａｈに更新される。
【００４１】
次に、０４行目の処理の実行により、処理Ｂが実行される。次に、０５行目の処理の実行により、CurrentCVとＣＶＭ（３，１２）とがＸＯＲ演算されてCurrentCVに上書きされることにより、CurrentCVの値が、ＣＶ（３）＝５ＡｈからＣＶ（１２）＝Ｃ０ｈに更新される。
【００４２】
次に、０６行目の処理の実行により、処理Ｃが実行される。次に、０７行目の処理の実行により、CurrentCVとＣＶＭ（１２，８）とがＸＯＲ演算されてCurrentCVに上書きされることにより、CurrentCVの値が、ＣＶ（１２）＝Ｃ０ｈからＣＶ（８）＝ＡＡｈに更新される。
【００４３】
次に、０８行目の処理の実行により、CurrentCVの値がＣＶ（８）＝ＡＡｈと一致する否かを判定する。この判定した結果が一致することにより、上記の処理が順に正常になされたと判定し、一致しない場合には、異常と判定して処理を停止する。
【００４４】
このように、CurrentCVの値が、０１行目の初期値ＣＶ（０）から、０３行目のＣＶＭ（０，３）、０５行目のＣＶＭ（３，１２）、０７行目のＣＶＭ（１２，８）により、ＣＶ（３）、ＣＶ（１２）、ＣＶ（８）と順に更新され、０８行目の処理の実行により、CurrentCVの値がＣＶ（８）と一致する否かを判定することにより、CurrentCVの値を更新する処理が順に実行されたか否かを検証することができる。
【００４５】
ここで、例えば、０３行目のＣＶＭ（０，３）の処理のみがバイパスされた場合には、ＣＶは、０１行目の初期値ＣＶ（０）から、０５行目のＣＶＭ（３，１２）により更新され、０７行目のＣＶＭ（１２，８）により更新されるが、この場合には、０３行目のＣＶＭ（０，３）の処理がバイパスされているために、０７行目のＣＶＭ（１２，８）により更新されたＣＶの値はＣＶ（８）とならない。同様に、０１行目、０３行目、０５行目、０７行目の処理、すなわち、ＣＶの値を更新する処理のうち、１つでも処理がバイパスされた場合には、ＣＶの値はＣＶ（８）とならない。そのため、ＣＶの値を更新する処理が、全て正常に実行されたか否かを検証することができる。
【００４６】
また、０２行目の処理Ａ、０４行目の処理Ｂ、及び、０６行目の処理Ｃは、それぞれ、CurrentCVの値が順に更新される処理に挟まれて実行されている。すなわち、０１行目の初期値ＣＶ（０）から、０３行目のＣＶＭ（０，３）、０５行目のＣＶＭ（３，１２）、０７行目のＣＶＭ（１２，８）により、ＣＶ（３）、ＣＶ（１２）、ＣＶ（８）とCurrentCVの値が順に更新される処理に、０２行目の処理Ａ、０４行目の処理Ｂ、及び、０６行目の処理Ｃは挟まれている。
【００４７】
そのため、０８行目の処理の実行により、CurrentCVの値がＣＶ（８）と一致する否かを判定することにより、CurrentCVの値を更新する処理が順に実行されたか否かを検証することができるとともに、処理Ａ、処理Ｂ、処理Ｃが正しい順序で実行されたか否かを検証することができる。
【００４８】
また、ＣＶＭ（ｉ、ｊ）のｉとｊとの値を設定することにより、ＣＶの値が、ＣＶＭ（ｉ、ｊ）と排他的論理和演算され、すなわち、図３のテーブルに基づいて順に更新されるため、ＣＶの更新処理が順に実行されたことを検証することが可能である。
【００４９】
また、初期設定で設定されたＣＶ（ｉ）と、比較する場合に比較対象とするＣＶ（ｉ）とが、互いにビット反転になるような関係になるようにＣＶＭ（ｉ、ｊ）を設定しておくことが望ましい。すなわち、初期設定で設定されたＣＶをＣＶ（ｉ）として、比較する場合に比較対象とするＣＶがＣＶ（ｉ＋８）となるように、ＣＶＭ（ｉ、ｊ）の順序を設定しておくことが望ましい。
【００５０】
これにより、判定の演算方法として、初期設定で設定されたＣＶと比較対象とするＣＶとが、互いにビット反転の関係にあるか否かを判定するだけでよく、判定の精度が向上する効果を奏する。
【００５１】
＜ＣＶを用いたループ処理における検証の利用方法＞
次に、ＣＶを用いたループ処理について、図面を参照して説明する。
図５は、本実施形態におけるＣＶを用いたループ処理を説明する説明図である。
なお、ここでは、ループ処理が、固定のループ回数による処理ではなく、ループ回数を変数であるcounterによって設定する場合について説明する。また、図５において、ＣＶをGSR_stamp（スタンプ）として説明する。
【００５２】
まず、ループ処理の前に、counterの値に応じて、GSR_stampをループ処理内で変換するためのビット列ｘを生成する。なお、ビット列ｘは、GSR_stampのビット長以上のビット列である。
図５においては、counterの値がGSR_stamp（ＣＶ）のビット長の値以上である場合について示している。この場合、図５の［Step１］に示すように、counterの値のサイズ（ビット長）を有し、且つ、“１”の数が奇数個になるように乱数（ビット列ｘ）を生成する。すなわち、counter（ループ処理の回数）の値がGSR_stamp（ＣＶ）のビット長の値以上である場合に、counterの値と等しいビット長を有し、且つ、ビット列ｘにおける“１”の数が奇数個になるように、ビット列ｘを生成する。また、ビット列ｘは、乱数に基づいて生成される。
なお、図５の［Step１］では、counterの値が「１０」であるため、１０ビットのビット列ｘ「０１１０１００１０１」を生成する一例を示している。
【００５３】
次に、ループ処理内において、以下の２つの処理を実行する。
図５の［Step２］に示すように、GSR_stampに対してビット列ｘの下位８ビットとのＸＯＲ演算を計算する。ここで、演算結果をGSR_stampに代入する。すなわち、この演算結果を仮のGSR_stampとして設定し、次回のループ処理に用いる。
なお、図５の［Step２］に示すように、GSR_stamp（初期値）が「６９ｈ」であり、ビット列ｘが「０１１０１００１０１」であるため、仮のGSR_stampは、「０１１０１００１（＋）１０１００１０１＝１１００１１００」となる。
【００５４】
次に、図５の［Step３］に示すように、ビット列ｘを左巡回シフト（左循環シフト）演算する。ここでは、図５の［Step３］に示すように、ビット列ｘは、左巡回シフト演算されることにより「０１１０１００１０１」から「１１０１００１０１０」に遷移する。
【００５５】
このことにより、図５の［Step２］と［Step３］との処理が規定回数（counterの値）繰り返し実行された後に、GSR_stampは、GSR_stampの初期値をビット反転した値となる。例えば、GSR_stampの初期値（入力値）が「６９ｈ」である場合には、ループ処理後のGSR_stampは、「６９ｈ」のビット反転値である「９６ｈ」となる。
これは、counterの値と等しいビット長を有し、且つ、奇数個の“１”を含んだビット列ｘを巡回シフト演算させて、GSR_stampとＸＯＲ演算することにより、GSR_stampの初期値の各ビットには、奇数個の“１”がＸＯＲ演算されたことになる。そのため、この［Step２］と［Step３］との処理が規定回数（counterの値）実行された場合に、ループ処理後のGSR_stampは、GSR_stampの初期値をビット反転した値となる。
【００５６】
次に、counterの値がGSR_stamp（ＣＶ）のビット長の値未満である場合のビット列ｘの生成方法について説明する。
図６は、counterの値が８ビット未満である場合におけるビット列ｘの初期値を説明する説明図である。
図６に示すように、counterの値が８ビット未満である場合には、以下のルールに基づいて生成した固定値をビット列ｘの初期値として使用する。この場合、ビット列ｘの初期値は、counterの値から１を減算した値に等しい数の“０”と、１ビット長の“１”とを有するビット列による繰り返しに基づいて生成される。すなわち、ビット列ｘの初期値は、counterの値から１を減算した値に等しい数の“０”を“１”と“１”の間に挿入したビット列になる。
【００５７】
例えば、図６の（ａ）に示すように、「counter＝１」である場合、ビット列ｘの初期値を「１１１１１１１１」とする。この場合、「counter−１＝０」であるため、ビット列ｘの初期値は、全てのビットが“１”となる。
【００５８】
次に、図６の（ｂ）に示すように、「counter＝２」である場合、ビット列ｘの初期値を「０１０１０１０１」又は「１０１０１０１０」とする。この場合、「counter−１＝１」であるため、ビット列ｘの初期値は、ビット列“０１”又は“１０”の繰り返しとなる。
【００５９】
次に、図６の（ｃ）に示すように、「counter＝３」である場合、ビット列ｘの初期値を「００１００１００１」、「０１００１００１０」、及び「１００１００１００」のうちのいずれかとする。この場合、「counter−１＝２」であるため、ビット列ｘの初期値は、ビット列“００１”又は“１００”の繰り返しとなる。なお、ビット列ｘの初期値は、ビット列“００１”又は“１００”の繰り返しにより生成された「００１００１００１」又は「１００１００１００」の巡回シフト演算した値「０１００１００１０」でもよい。
【００６０】
同様に、図６の（ｄ）に示すように、「counter＝４」である場合、ビット列ｘの初期値を「０００１０００１」、「００１０００１０」、「０１０００１００」、及び「１０００１０００」のうちのいずれかとする。
また、図６の（ｅ）に示すように、「counter＝５」である場合、ビット列ｘの初期値を「００００１００００１」、「０００１００００１０」、「００１００００１００」、「０１００００１０００」、及び「１００００１００００」のうちのいずれかとする。
【００６１】
また、図６の（ｆ）に示すように、「counter＝６」である場合、ビット列ｘの初期値を「０００００１０００００１」、「００００１０００００１０」、「０００１０００００１００」、「００１０００００１０００」、「０１０００００１００００」、及び「１０００００１０００００」のうちのいずれかとする。
また、図６の（ｇ）に示すように、「counter＝７」である場合、ビット列ｘの初期値を「００００００１００００００１」、「０００００１００００００１０」、「００００１００００００１００」、「０００１００００００１０００」、「００１００００００１００００」、「０１００００００１０００００」、及び「１００００００１００００００」のうちのいずれかとする。
【００６２】
このように、counterの値が８ビット未満である場合に生成されたビット列ｘは、counterの値が８ビット以上である場合と同様に、図５の［Step２］及び［Step３］の処理が実行される。すなわち、図５の［Step２］に示すように、GSR_stampに対してビット列ｘの下位８ビットとのＸＯＲ演算を計算し、図５の［Step３］に示すように、ビット列ｘを左巡回シフト（左循環シフト）演算する。
なお、図６の（ｈ）に示すように、「counter＝８」である場合に、同様の方法によりビット列ｘの初期値を生成してもよい。
【００６３】
なお、上述のように、ビット列ｘの初期値の候補が複数ある場合には、乱数にも基づいて、複数の候補のうちの１つを選択して、ビット列ｘの初期値としてもよい。すなわち、ビット列ｘは、乱数に基づいて生成されてもよい。この場合、ループ処理が実行されるごとに、乱数によってビット列ｘの初期値が変更されるので、ループ処理中のGSR_stampの値の遷移順序をループ処理が実行されるごとにランダムに変更することができる。そのため、バイパスや内部データの改竄が行われる可能性をさらに低減することができる。
【００６４】
次に、ループ処理において、本実施形態における上述した方法をプログラムに記述した場合について説明する。
図７は、本実施形態におけるＣＶを用いたループ処理における検証の利用方法を説明する説明図である。
【００６５】
図７において、プログラムの０１行目に、「CurrentCVを初期値ＣＶ（０）＝５５ｈに設定する」ことを示す記述が記述されている。
【００６６】
また、０２行目に、「counterの値に応じたビット列ｘの初期値を設定する」ことを示す記述が記述されている。ここでは、サブルーチン「setCVMX(counter)」は、上述したビット列ｘの生成方法に基づいて、counterの応じたビット列ｘの初期値を設定する。
【００６７】
また、０３行目に、「counterの値の回数のループ処理を開始する」ことを示す記述が記述されている。
【００６８】
また、０４行目に、「処理Ａを実行する」ことを示す記述が記述されており、０５行目に、「CurrentCVをビット列ｘの下位８ビットとＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【００６９】
また、０６行目に、「ビット列ｘを左巡回シフト演算する」ことを示す記述が記述されている。なお、サブルーチン「rotationl(CVMX)」は、CVMXの値を左巡回シフト演算して、再び、CVMXに上書きする。
【００７０】
また、０７行目に、「ループ処理の終了」を示す記述が記述されている。
また、０８行目に、「CurrentCVがＣＶ（８）＝ＡＡｈと一致する否かを判定し、判定した結果が一致しない場合には、異常と判定して停止する」ことを示す記述が記述されている。
【００７１】
この図７に示される処理が実行される場合、まず、０１行目の処理の実行により、CurrentCVにＣＶ（０）＝５５ｈの値が書き込まれる。これにより、物理的なメモリやレジスタなどの記憶部であるCurrentCVに、ＣＶ（０）＝５５ｈの値が書き込まれる。
【００７２】
次に、０２行目の処理の実行により、counterの値に応じたビット列ｘの初期値がCVMXに設定される。これにより、上述した方法によりcounterの値とＣＶのビット長とに応じて生成されたビット列ｘの値が、物理的なメモリやレジスタなどの記憶部であるCVMXに書き込まれる。
【００７３】
次に、０３行目の処理の実行により、counterの値の回数のループ処理を開始する。
次に、０４行目の処理の実行により、処理Ａが実行される。次に、０５行目の処理の実行により、CurrentCVとCVMXの下位８ビットとがＸＯＲ演算されてCurrentCVに上書きされることにより、CurrentCVの値が更新される。
【００７４】
次に、０６行目の処理の実行により、CVMXの値が左巡回シフト演算されて、再び、CVMXに上書きされる。
【００７５】
次に、０７行目の処理の実行により、０４行目から０６行目の処理が、counterの値の回数繰り返して実行される。
【００７６】
次に、０８行目の処理の実行により、CurrentCVの値がＣＶ（８）＝ＡＡｈと一致する否かを判定する。この判定した結果が一致することにより、上記の処理が順に正常になされたと判定し、一致しない場合には、異常と判定して停止する。
【００７７】
このように、CurrentCVの値が、０１行目の初期値ＣＶ（０）から、０４行目から０６行目の処理がcounterの値の回数繰り返して実行され、０８行目の処理の実行により、CurrentCVの値がＣＶ（８）と一致する否かを判定することにより、CurrentCVの値を更新する処理が正しく実行されたか否かを検証することができる。
【００７８】
次に、図８を参照して、一例としての上記に説明した本実施形態のＩＣカードなどの情報処理装置１の構成について説明する。情報処理装置１は、検証メモリ部２、ＣＶＭテーブル３、情報処理部４、ＣＶ初期値設定部５、ＣＶ演算部６、ＣＶ判定部７、異常動作対処部８、ループ用ビット列生成部９、及び、ループ用ビット列記憶部１０を有する。なお、ＣＶＭテーブル３は、変換前ビット列記憶部（ビット列記憶部）３１と、変換後ビット列記憶部３２と、変換テーブル記憶部（変換ビット列記憶部）３３とを有する。なお、このＣＶＭテーブル３において、変換前ビット列記憶部３１と、変換後ビット列記憶部３２と、変換テーブル記憶部３３とは、図３に示すように、一体としたテーブルとしてもよい。また、後述するように変換前ビット列記憶部３１と変換後ビット列記憶部３２とには、同一の情報が記憶されるため、この変換前ビット列記憶部３１と変換後ビット列記憶部３２とを一体として１つの記憶部、例えば、ビット列記憶部３４としてもよい。
【００７９】
変換前ビット列記憶部３１には、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長（例えば、２ビット長）である複数の基本ビット列（例えば、“０１”と“１０”）を組み合わせた第２の固定ビット長（例えば、１バイト長）のビット列のデータ型を型Ａとして、型Ａのビット列の値であって、値が互いに異なるｍ個の値が、変換前ビット列を識別する変換前ビット列識別情報（識別子ｉ（ｉ＝０，・・・，ｍ−１））と関連付けて、型Ａのビット列の配列Ｘ（ｉ）として予め記憶されている（例えば、図３のｉとＣＶ（ｉ）とを参照）。
【００８０】
ここで、第１の固定ビット長の値をＬ１とし、第２の固定ビット長の値をＬ２とし、基本ビット列の個数をＵ個とした場合には、変換前ビット列の個数ｍの値は、ｍ＝Ｕ（Ｌ２／Ｌ１）となる。なお、Ｕの値は最大ではＵ＝２Ｌ１であるが、基本ビット列を、後述するように互いにビット反転した２つの基本ビット列とした場合には、Ｕ＝２となる。例えば、図３を用いて説明した基本ビット列と変換前ビット列との場合には、基本ビット列の個数が４個で、固定ビット長の値Ｌ１が２で、第２の固定ビット長の値Ｌ２が８であるため、変換前ビット列の個数ｍの値は、ｍ＝４（８／２）＝４×４＝１６となる。
【００８１】
変換後ビット列記憶部３２には、基本ビット列を組み合わせた第２の固定ビット長の変数である変換後ビット列が、変換後ビット列を識別する変換後ビット列識別情報（識別子ｊ（ｊ＝０，・・・，ｍ−１））と関連付けて予め記憶されている（例えば、図３のｊとＣＶ（ｊ）とを参照）。よって、この変換後ビット列記憶部３２には、変換前ビット列記憶部３１と同一の情報が記憶されることになる。そこで、以降においては、変換前ビット列記憶部３１と変換後ビット列記憶部３２とを一体として、ビット列記憶部３４として説明する。
【００８２】
変換テーブル記憶部３３には、変換前識別情報と変換後識別情報とに関連付けて、当該変換前識別情報で識別される変換前ビット列と排他的論理和演算することにより当該変換後識別情報で識別される変換後ビット列に変換させる変換ビット列が変換テーブルとして予め記憶されている（例えば、図３のｉとｊとＣＶＭ（ｉ，ｊ）とを参照）。
すなわち、変換テーブル記憶部３３には、型Ａのビット列Ｘ（ｋ）と排他的論理和演算することで型Ａのビット列Ｘ（ｌ）となるようなビット列の配列Ｚ（ｋ，ｌ）（ｋ，ｌ＝０，・・・，ｍ−１）が変換ビット列として記憶されている。
【００８３】
なお、この複数の基本ビット列は、互いにビット反転した２つの基本ビット列である（例えば、“０１”と“１０”）。
また、ビット列記憶部３４に記憶されている変換前ビット列と変換後ビット列記憶部３２に記憶されている変換後ビット列とは、少なくとも、互いにビット反転の関係にある変換前ビット列と変換後ビット列とを有している。
【００８４】
なお、ビット列記憶部３４には、複数の変換前ビット列と変換前ビット列識別情報とが関連付けて予め記憶されている。また、変換後ビット列記憶部３２には、複数の変換後ビット列と変換後ビット列識別情報とが関連付けて予め記憶されている。また、変換テーブル記憶部３３には、複数の変換前識別情報と複数の変換後識別情報とに関連付けて、複数の変換ビット列が変換テーブルとして予め記憶されている。
【００８５】
また、ビット列記憶部３４に関連付けて記憶されている複数の変換前ビット列と変換前ビット列識別情報との組み合わせと、変換後ビット列記憶部３２に関連付けて記憶されている複数の変換後ビット列と変換後ビット列識別情報との組み合わせは、互いに一致するようにされている。
【００８６】
検証メモリ部２には、検証用となる変数の値が記憶される。
情報処理部４は、予め定められたプログラムの記述に基づいて順に情報処理を実行する。なお、情報処理装置１は、このプログラムを記憶するためのプログラム記憶部を内部に有している。また、情報処理部４は、ループ処理がループされる毎に算出される変数をループ変数として有している。
【００８７】
ループ用ビット列記憶部１０は、上述したループ処理用のビット列ｘを記憶する記憶部である。
また、ループ用ビット列生成部９は、図５及び図６を参照して説明した方法を用いて、ビット列ｘの初期値を生成し、生成したビット列ｘの初期値をループ用ビット列記憶部１０に記憶させる。ループ用ビット列生成部９は、例えば、情報処理部４から供給されたループ処理の回数（例えば、上述したcounterの値）とＣＶのビット長情報に基づいて、ビット列ｘの初期値を生成し、生成したビット列ｘの初期値をループ用ビット列記憶部１０に記憶させる。
【００８８】
また、情報処理部４は、後述する設定記述に基づいて、変換前ビット列識別情報で識別される変換前ビット列をビット列記憶部３４から読み出して、ＣＶ初期値設定部５を介して検証メモリ部２に記憶する。
また、情報処理部４は、ＣＶ演算部６により、検証メモリ部２から読み出した変数と変換ビット列とを排他的論理和演算して、検証メモリ部２に上書きする。
また、情報処理部４は、ＣＶ判定部７により、検証メモリ部２から読み出した変数の値に基づいて、後述する検証演算記述による排他的論理和演算が実行されたか否かを判定する。
【００８９】
また、情報処理部４は、ＣＶ判定部７による判定結果が、後述する検証演算記述による排他的論理和演算が実行されていない場合には、異常動作対処部８により、予め定められた異常動作対処を実行する。
【００９０】
また、情報処理部４は、ループ処理を実行する場合に、ループ用ビット列生成部９により、後述するビット列生成記述によるビット列ｘの初期値を生成し、生成したビット列ｘの初期値をループ用ビット列記憶部１０に記憶させる。
また、情報処理部４は、後述するループ処理記述中の検証演算記述による検証メモリ部２から読み出した変数をビット列ｘのうちの所定のビット位置における上述した第２の固定ビット長のビット列の値で排他的論理和演算し、検証メモリ部２に上書きする。すなわち、情報処理部４は、ＣＶ演算部６により、例えば、検証メモリ部２から読み出した変数（例えば、８ビット長）とループ用ビット列記憶部１０から読み出したビット列ｘの下位８ビットとを排他的論理和演算し、検証メモリ部２に上書きする。
さらに、情報処理部４は、ＣＶ演算部６により、後述するループ処理記述中の検証演算記述によるビット列ｘを巡回シフト演算して、ループ用ビット列記憶部１０に上書きする。
【００９１】
以降からの情報処理装置１の構成について説明においては、プログラム記憶部に記憶されているプログラムと、情報処理部４の動作についてのみ説明する。
【００９２】
予め定められたプログラムには少なくとも、変換前ビット列識別情報で識別される変換前ビット列、すなわちビット列記憶部３４に記憶されている型Ａのある値を検証メモリ部２に記憶させることを示す記述である設定記述と、検査対象となる情報処理である検査対象情報処理を実行することを示す記述である情報処理記述と、検証メモリ部２に記憶されている変数を変換前識別情報と変換後識別情報とで識別される変換ビット列で、すなわち変換テーブル記憶部３３より読み出した変換ビット列で排他的論理和演算した値を検証メモリ部２に上書きすることを示す記述である検証演算記述と、検証メモリ部２に記憶されている変数の値に基づいて、検証演算記述による排他的論理和演算が実行されたか否かを判定することを示す記述である判定記述とが、予め記述されている。なお、このプログラムには、設定記述の後に情報処理記述が記述され、情報処理記述の後に検証演算記述が記述され、且つ、検証演算記述の後に判定記述が記述されるように予め記述されている。
また、このプログラムには、情報処理記述及びその後に検証演算記述が記述されている記述を情報処理検証演算記述として、設定記述の後に、ｎ個（ｎは任意の自然数）の情報処理検証演算記述が順に記述され、且つ、ｎ個の情報処理検証演算記述の後に判定記述が記述されるように予め記述されている。
【００９３】
この設定記述には、ビット列記憶部３４に記憶されている型Ａの値であるＸ（ｐ０）（ｐ０は、０〜ｍ−１の間の任意の値の識別子）を検証メモリ部２に記憶させるように記述されている。また、ｎ個の情報処理検証演算記述のうちｉ番目の記述の中の検証演算記述には、検証メモリ部２に記憶されている変数を、変換テーブル記憶部３３より読み出した変換ビット列であるＺ（ｐｉ−１，ｐｉ）（ｐｉは０〜ｍ−１の間の任意の識別子）が示す値で排他的論理和演算し、検証メモリ部２に上書きするように予め記述されている。
【００９４】
また、この判定記述には、検証メモリ部２に記憶されている変数が、Ｘ（ｐ０）＾Ｚ（ｐ０，ｐ１）＾・・・・＾Ｚ（ｐｎ−１，ｐｎ）（＾は排他的論理和演算）の値となるＸ（ｐｎ）（ｐｎは０〜ｍ−１の間の任意の識別子）であって、ビット列記憶部３４から読み出したＸ（ｐｎ）の値と一致するか否かを判断するように予め記述されている。
なお、上述したＣＶに対応する型Ａのビット列の配列Ｘ（ｉ）の遷移の仕方（すなわち、上述したＣＶＭに対応するＺ（ｉ、ｊ）の選び方）は任意に定められる。
【００９５】
この場合、情報処理部４は、設定記述に基づいて、変換前ビット列識別情報で識別される変換前ビット列をビット列記憶部３４から読み出して検証メモリ部２に記憶する。すなわち、情報処理部４は、設定記述に基づいて、ビット列記憶部３４より読み出した型Ａのある値を検証メモリ部２に記憶する。
【００９６】
次に、情報処理部４は、情報処理検証演算記述に含まれている情報処理記述に基づいて、検査対象情報処理を実行し、情報処理検証演算記述に含まれている検証演算記述に基づいて、検証メモリ部２から読み出した変数と、変換前識別情報と変換後識別情報とで識別される変換ビット列であって、変換テーブル記憶部３３の変換テーブルから読み出した変換ビット列とを排他的論理和演算して検証メモリ部２に上書きする。
すなわち、情報処理部４は、情報処理検証演算記述に基づいて、検査対象情報処理を実行するとともに、検証メモリ部２から読み出した変数と、変換テーブル記憶部３３から読み出した変換ビット列とを排他的論理和演算した値を検証メモリ部２に上書きする。
【００９７】
次に、情報処理部４は、判定記述に基づいて、検証メモリ部２から読み出した変数の値に基づいて、検証演算記述による排他的論理和演算が実行されたか否かを判定する。
すなわち、情報処理部４は、判定記述に基づいて、検証メモリ部２から読み出した変数の値が、ビット列記憶部３４から読み出した型Ａのビット列と一致するか否かを判定することにより、検証演算記述による排他的論理和演算が実行されたか否かを判定する。
【００９８】
なお、この判定記述には、検証メモリ部２に記憶されている変数と変換後ビット列識別情報で識別される変換後ビット列とが互いにビット反転の関係にあるか否かを判定することを示す記述が記述されている。
【００９９】
この場合、情報処理部４は、この判定記述に基づいて、検証メモリ部２から読み出した変数と、ビット列記憶部３４から読み出した変換後ビット列識別情報で識別される変換後ビット列とが互いにビット反転の関係にあるか否かを判定する。
すなわち、設定記述に基づいて検証メモリ部２に記憶された型Ａの値と、判定記述に基づいてビット列記憶部３４より読み出された型Ａの値とは、互いにビット反転の関係にある。
【０１００】
また、予め定められたプログラムには少なくとも、設定記述と、複数の情報処理検証演算記述と、判定記述とが、設定記述の後に複数の情報処理検証演算記述が順に記述され、複数の情報処理検証演算記述の後に判定記述が記述されるように予め記述されている。
【０１０１】
この場合、情報処理部４は、設定記述に基づいて、変換前ビット列識別情報で識別される変換前ビット列をビット列記憶部３４から読み出して検証メモリ部２に記憶する。次に、情報処理部４は、複数の情報処理検証演算記述に基づいて、検査対象情報処理を実行するとともに、検証メモリ部２から読み出した変数と、変換前識別情報と変換後識別情報とで識別される変換ビット列であって、変換テーブル記憶部３３の変換テーブルから読み出した変換ビット列とを排他的論理和演算して検証メモリ部２に順に上書きする。次に、情報処理部４は、判定記述に基づいて、検証メモリ部２から読み出した変数と、ビット列記憶部３４から読み出した変換後ビット列識別情報で識別される変換後ビット列とに基づいて、複数の情報処理検証演算記述に含まれている検証演算記述による排他的論理和演算が順に実行されたか否かを判定する。
【０１０２】
なお、複数の情報処理検証演算記述のうち最初の情報処理検証演算記述に含まれている検証演算記述の記述において、設定記述に記述されている変換前ビット列識別情報が、検証メモリ部２に記憶されている変数と排他的論理和演算するための変換ビット列を指定するための変換前識別情報として記述されている。
【０１０３】
また、複数の情報処理検証演算記述のうち２番目以降の情報処理検証演算記述に含まれている検証演算記述の記述において、１つ前の情報処理検証演算記述に含まれている検証演算記述に記述されている変換後識別情報が、検証メモリ部２に記憶されている変数と排他的論理和演算するための変換ビット列を指定するための変換前識別情報として記述されている。
【０１０４】
また、複数の情報処理検証演算記述のうち最後の情報処理検証演算記述に含まれている検証演算記述の記述において、検証メモリ部２に記憶されている変数を判定するために判定記述に記述されている変換後ビット列識別情報が、検証メモリ部２に記憶されている変数と排他的論理和演算するための変換ビット列を指定するための変換後識別情報として記述されている。
【０１０５】
＜ＣＶを用いたループ処理の実行の場合＞
また、予め定められたプログラムには、ループ処理を実行させる場合に、上述した設定記述と、ループ処理の回数に応じてビット列ｘを生成するビット列生成記述と、ループ処理を実行することを示す記述とともに、該記述されているループ処理が実行される場合に、該実行されているループ処理内で情報処理検証演算記述を実行する事を示す記述であるループ処理記述と、上述した判定記述と、が記述されている。
【０１０６】
なお、ループ処理記述中の検証演算記述には、検証メモリ部２に記憶されている変数を、ビット列ｘのうちの所定のビット位置における第２の固定ビット長のビット列（ビット列ｙ）の値で排他的論理和演算し、検証メモリ部２に上書きし、ビット列ｘを巡回シフト演算するように、予め記述されている。
【０１０７】
また、この場合（ループ処理を実行する場合）情報処理部４は、設定記述に基づいて、型Ａのあるビット列ａを検証メモリ部２に記憶させる。次に、情報処理部４は、ビット列生成記述に基づいて、ループ処理の回数に応じたビット列ｘ（ビット列ｘの初期値）を生成する。次に、情報処理部４は、ループ処理記述中の情報処理検証演算記述に基づいて、検査対象情報処理を実行するとともに、検証メモリ部２から読み出した変数と、ビット列ｘに含まれるビット列ｙ（例えば、下位８ビット）とを排他的論理和演算した値を検証メモリ部２に上書きする。そして、情報処理部４は、判定記述に基づいて、検証メモリ部２から読み出した変数の値が、ビット列ａのビット反転値と一致するか否かを判定することにより、検証演算記述による排他的論理和演算が実行されたか否かを判定する。
【０１０８】
このように、ループ処理を実行する場合に、ループ処理の回数の値に応じて生成した巡回シフト演算させたビット列ｘを用いてビット列ａを排他的論理和演算するので、正しくループ処理が実行された場合に、検証メモリ部２から読み出した変数の値は、ビット列ａのビット反転値になる。この場合、ループ処理の回数の値によらずに情報処理検証演算記述は共通であり、且つ、排他的論理和演算及び巡回シフト演算の演算負荷の軽い演算処理のみで実現することができる。そのため、本実施形態における情報処理装置１は、ループ処理におけるバイパスや内部データの改竄を検知するとともに、その演算負荷を減じることを可能とする効果を奏する。したがって、本実施形態における情報処理装置１は、コンピュータ等の処理において、その演算負荷を減じつつ、バイパスや内部データの改竄を検知することが可能となる効果を奏する。
【０１０９】
また、本実施形態では、ビット列生成記述は、ループ処理の回数に応じて第２の固定ビット長以上のビット列ｘを生成する記述である。そして、ビット列ｙは、ビット列ｘのうちの所定のビット位置における第２の固定ビット長のビット列（例えば、下位８ビットのビット列）である。
これにより、ループ処理の回数に応じた適切なビット列ｘ及びビット列ｙが生成されるので、本実施形態における情報処理装置１は、ループ処理の回数が可変であっても、ループ処理におけるバイパスや内部データの改竄を検知することができる。
【０１１０】
また、本実施形態では、ビット列生成記述は、ループ処理の回数の値が第２の固定ビット長の値（Ｌ２）未満である場合に、ループ処理の回数の値から１を減算した値に等しい数の“０”と、１ビット長の“１”とを有するビット列による繰り返しに基づいて、ビット列ｘを生成する記述である。
これにより、ループ処理の回数の数が第２の固定ビット長の値未満である場合でも、ループ処理の回数に応じた適切なビット列ｘを生成することができる。そのため、本実施形態における情報処理装置１は、ループ処理の回数の数が第２の固定ビット長の値未満である場合であっても、ループ処理におけるバイパスや内部データの改竄を検知することができる。
【０１１１】
また、本実施形態では、ビット列生成記述は、ループ処理の回数の値が第２の固定ビット長の値（Ｌ２）以上である場合に、ループ処理の回数の値と等しいビット長を有し、且つ、ビット列ｘにおける“１”の数が奇数個になるように、ビット列ｘを生成する記述である。
これにより、ループ処理の回数の数が第２の固定ビット長の値以上である場合でも、ループ処理の回数に応じた適切なビット列ｘを生成することができる。そのため、本実施形態における情報処理装置１は、ループ処理の回数の数が第２の固定ビット長の値以上である場合であっても、ループ処理におけるバイパスや内部データの改竄を検知することができる。
【０１１２】
また、本実施形態では、ビット列生成記述は、乱数に基づいて、ビット列ｘを生成する記述である。
これにより、ビット列ｘは、ループ処理を実行するごとに異なる値となる。そのため、本実施形態における情報処理装置１は、ループ処理における安全性（セキュリティ）を向上させることができる。
【０１１３】
以上、図８を用いて説明した一例としての情報処理装置１の構成により、この情報処理装置１は、図４から図７を用いて説明した各処理を実行することが可能である。
【０１１４】
［第２の実施形態］
次に、本発明の第２の実施形態について説明する。
上述の第１の実施形態では、第２の固定ビット長が予め定められた固定値である場合の一例を説明したが、本実施形態では、第２の固定ビット長を簡易な手段により変更する方法について説明する。
【０１１５】
＜ＣＶの生成方法＞
まず、本実施形態におけるＣＶの生成方法について説明する。
図９は、本実施形態によるＣＶの生成方法を説明する説明図である。
まず、図９（ａ）に示すように、例えば、基本ビット列“０１”を基本ビット列の論理“０”とし、基本ビット列“１０”を基本ビット列の論理“１”とする。
【０１１６】
次に、図９（ｂ）に示すように、ＣＶによる検証を行う処理の数に応じて、基本ビット列の数ｑを設定する。ここで、基本ビット列の数がｑである場合に、ＣＶは、２ｑ（２のｑ乗）通りの組み合わせとなる。
例えば、基本ビット列の数「ｑ＝５」である場合に、ＣＶは、「２５＝３２」通りの組み合わせが可能となる。図９（ｂ）の表は、このＣＶの３２通りの組み合わせを示している。図９（ｂ）に示すように、基本ビット列の数「ｑ＝５」である場合に、“０００００”、・・・、“０１１１１”、“１１１１１”、・・・、“１００００”の３２通りの基本ビット列の論理値（パラメータ）が生成される。この基本ビット列の論理値（パラメータ）を上述の基本ビット列“０１”又は“１０”により変換（置換）することにより、１０ビットのＣＶ（ｉ）が生成される。
このように、基本ビット列の論理表記することにより、ＣＶの組み合わせ数を変更することができる。
【０１１７】
また、図９（ｃ）に示すように、ＣＶの変換ビット列ＣＶＭ（ｉ，ｊ）は、演算により生成することができる。ＣＶ（ｉ）からＣＶ（ｊ）に変換する変換ビット列ＣＶＭ（ｉ，ｊ）は、下記の式（１）に示すように、ＣＶ（ｉ）とＣＶ（ｊ）とのＸＯＲ演算（排他的論理和演算）により生成することができる。
【０１１８】
ＣＶＭ（ｉ，ｊ）＝ＣＶ（ｉ）  ＸＯＲ  ＣＶ（ｊ）  ・・・  （１）
【０１１９】
図１０は、図９に示すＣＶの生成方法に基づいて、基本ビット列の数「５」の場合に変換ビット列ＣＶＭ（ｉ，ｊ）（ＣＶＭテーブル）を生成した一例である。
図１０に示す例は、基本ビット列の数「５」の場合の一例であるが、上述の基本ビット列の数ｑを変更することにより、ＣＶの組み合わせ数を変更することが可能となる。
【０１２０】
次に、上述のＣＶの生成方法を適用した場合における、情報処理装置１の構成について説明する。
本実施形態における情報処理装置１の構成は、ＣＶＭテーブル３に記憶される変換テーブルが可変である点を除いて、図８に示す情報処理装置１と同様である。
ＣＶＭテーブル３には、図９に示すＣＶの生成方法により生成された変換テーブルが予め記憶されていてもよいし、情報処理装置１が検証を行う処理の数に応じてＣＶを生成する生成部（例えば、ＣＶ演算部６）を備えていて、実行する処理やプログラムに応じて、ダイナミックに変換テーブルを変更させてもよい。但し、この場合、ＣＶのビット長（第２の固定ビット長）が変更されるので、情報処理部４は、ＣＶのビット長の情報を変数として有していてもよい。
また、ＣＶＭテーブル３には、異なる基本ビット列の数ｑに対応する複数の変換テーブルが記憶されていて、情報処理部４は、実行する処理やプログラムに応じて、複数の変換テーブルのうちの１つを選択して使用してもよい。
【０１２１】
本実施形態における情報処理装置１は、型Ａのビット列の値であって、値が互いに異なるｍ個の値を、識別子ｊ（ｊ＝０，・・・，ｍ−１）と対応づけて、型Ａのビット列の配列Ｘ（ｊ）として記憶するビット列記憶部３４と、Ｘ（ｋ）と排他的論理和演算することでＸ（ｌ）となるようなビット列の配列Ｚ（ｋ，ｌ）（ｋ，ｌ＝０，・・・，ｍ−１）を変換ビット列として記憶する変換テーブル記憶部３３と、を有している。
【０１２２】
また、予め定められたプログラムには、設定記述として、ビット列記憶部３４に記憶されている型Ａの値であるＸ（ｐ０）（ｐ０は、０〜ｍ−１の間の任意の値の識別子）を検証メモリ部２に記憶させるように記述されている。また、予め定められたプログラムには、設定記述の後に、ｎ個の情報処理検証演算記述が順に記述され、且つ、ｎ個の情報処理検証演算記述の後に判定記述が記述されるように予め記述されている。そして、ｎ個の情報処理検証演算記述のうちｉ番目の記述の中の検証演算記述には、検証メモリ部２に記憶されている変数を、変換テーブル記憶部３３より読み出した変換ビット列であるＺ（ｐｉ−１，ｐｉ）（ｐｉは０〜ｍ−１の間の任意の識別子）が示す値で排他的論理和演算し、検証メモリ部２に上書きするように予め記述されている。
さらに、予め定められたプログラムには、判定記述として、検証メモリ部２に記憶されている変数が、Ｘ（ｐ０）＾Ｚ（ｐ０，ｐ１）＾・・・・＾Ｚ（ｐｎ−１，ｐｎ）（＾は排他的論理和演算）の値となるＸ（ｐｎ）（ｐｎは０〜ｍ−１の間の任意の識別子）であって、ビット列記憶部３４から読み出したＸ（ｐｎ）の値と一致するか否かを判断するように予め記述されている。
【０１２３】
この場合、情報処理部４は、設定記述に基づいて、ビット列記憶部３４より読み出した型Ａのある値を検証メモリ部２に記憶する。また、情報処理部４は、情報処理検証演算記述に基づいて、検査対象情報処理を実行するとともに、検証メモリ部２から読み出した変数と、変換テーブル記憶部３３から読み出した変換ビット列とを排他的論理和演算した値を検証メモリ部２に上書きする。そして、情報処理部４は、判定記述に基づいて、検証メモリ部２から読み出した変数の値が、ビット列記憶部３４から読み出した型Ａのビット列と一致するか否かを判定することにより、検証演算記述による排他的論理和演算が実行されたか否かを判定する。
なお、本実施形態において、型Ａは、基本ビット列を単位とする基本ビット列のｑ倍のビット列として定められる。また、配列Ｘ（ｊ）は、ｍ個を２のｑ乗個とした基本ビット列の組み合わせとして生成されるとともに、配列Ｚ（ｋ，ｌ）は、配列Ｘ（ｊ）と配列Ｘ（ｊ）との排他的論理和演算に基づいて生成されている。
【０１２４】
これにより、本実施形態における情報処理装置１は、簡易な手段により、ＣＶの組み合わせ（配列Ｘ（ｉ）又は配列Ｘ（ｊ）の組み合わせ）を変更することができる。ＣＶの組み合わせの数が多い程、同じＣＶの値が出現する可能性を低減することができるので、本実施形態における情報処理装置１は、安全性を向上させることができる。よって、本実施形態における情報処理装置１は、その演算負荷を減じつつ、バイパスや内部データの改竄を検知することが可能となる効果を奏する。
【０１２５】
なお、本実施形態におけるＣＶの生成方法は、第１の実施形態と組み合わせて使用することが可能である。情報処理装置１は、例えば、ループ処理を実行する場合には、第１の実施形態による検証を実行し、ループ処理を実行しない場合に、第２の実施形態による検証を実行してもよい。
【０１２６】
［第３の実施形態］
次に、本発明の第３の実施形態について説明する。
上述の第１の実施形態では、ループ処理において、ＸＯＲ演算及び左巡回シフト演算を用いて、ＣＶを遷移させる例を説明したが、本実施形態では、ループ処理以外の通常の処理に、ＸＯＲ演算及び左巡回シフト演算を用いたＣＶの遷移を適用する場合について説明する。
【０１２７】
まず、ループ処理以外の処理に、第１の実施形態のＣＶ処理を適用する場合について、図面を参照して説明する。
図１１は、本実施形態におけるＣＶを用いたループ処理以外の処理を説明する説明図である。
なお、ここでは、検証の対象となる処理の実行回数（GSR_Stamp（スタンプ）の総数）が「１００」（ｎ＝１００）である場合について説明する。また、図１１において、ＣＶの初期値をGSR_Stamp０として説明する。図１１において、GSR_Stampとは、検証に用いるスタンプのことであり、上述のＣＶの値に対応する。また、GSR_Stampの総数とは、ＣＶの変換回数の総数であり、検証処理（検証の対象となる処理と後述の［Step１］及び［Step２］とを含む処理）の実行回数を示している。
【０１２８】
まず、検証処理の前に、GSR_Stampの総数（ｎの値）に応じて、ＣＶを変換するためのビット列ｘを生成する。なお、ビット列ｘは、ＣＶのビット長以上のビット列である。ここでは、一例として、ＣＶのビット長を８ビットとして説明する。
図１１においては、GSR_Stampの総数の値（ｎの値）がＣＶのビット長の値以上である場合について示している。この場合、図１１の［Step１］に示すように、GSR_Stampの総数のビット長を持ち、且つ、“１”の数が奇数個になるように乱数（ビット列ｘ）を生成する。すなわち、GSR_Stampの総数の値がＣＶのビット長の値以上である場合に、GSR_Stampの総数の値と等しいビット長を有し、且つ、ビット列ｘにおける“１”の数が奇数個になるように、ビット列ｘを生成する。また、ビット列ｘは、乱数に基づいて生成される。このGSR_Stampの総数の値（ｎの値）がＣＶのビット長の値以上である場合におけるビット列ｘの初期値の生成方法は、counterの値の代わりにGSR_Stampの総数（ｎの値）を用いる点を除き図５の［Step１］と同様である。
なお、図１１の［Step１］では、GSR_Stampの総数の値が「１００」であるため、１００ビットのビット列ｘ（ＣＶＭ０）を生成する例を示している。
【０１２９】
次に、検証処理において、検証対象の処理後に以下の２つの処理を実行する。
なお、図１１において、検証対象の処理とは、処理Ａ、処理Ｂ、・・・処理Ｙのことである。
【０１３０】
図１１の［Step２］に示すように、検証対象の処理の後に、まず、ＣＶに対してビット列ｘの下位８ビットとのＸＯＲ演算を計算する。ここで、演算結果をＣＶに代入する。
例えば、図１１の処理Ａを実行した後に、［Step２］の「ＣＶ＝ＣＶ＾ＣＶＭ０」に示すように、ＣＶと、ビット列ｘであるＣＶＭ０の下位８ビットとのＸＯＲ演算を計算し、再びＣＶに代入する。なお、この場合、ＣＶとＣＶＭ０とのＸＯＲ演算結果の下位８ビットをＣＶに再び代入してもよい。
【０１３１】
次に、図１１の［Step３］に示すように、ビット列ｘを左巡回シフト（左循環シフト）演算する。
例えば、図１１の処理Ａを実行した後の場合、ＣＶＭ０を左巡回シフト演算して、ＣＶＭ１を生成する。生成したＣＶＭ１は、次の検証処理において、ビット列ｘとして使用される。なお、図１１において、ビット列ｘは、左巡回シフト演算することにより、ＣＮＶ０、ＣＶＭ１、・・・、ＣＶＭ９８、ＣＶＭ９９と遷移する。
【０１３２】
次に、検証対象の処理とともに図１１の［Step２］と［Step３］との処理が、GSR_Stampの総数回（ここでは、１００回）実行された後に、［Step４］に示すように、ＣＶを検証する処理（ＣＳＲ検証）を実行する。ここでは、ＣＶの値が、初期値であるGSR_Stamp０のビット反転した値（ビット反転値）になっているか否かを判定する。
【０１３３】
なお、本実施形態において、GSR_Stampの総数（ｎの値）がＣＶのビット長の値未満である場合には、上述した図６に示す第１の実施形態の場合と同様に、ビット列ｘの生成方法する。ただし、本実施形態におけるビット列ｘの生成方法は、counterの値の代わりにGSR_Stampの総数（ｎの値）を用いて生成する。
【０１３４】
次に、本実施形態における上述した方法をプログラムに記述した場合について説明する。
図１２は、本実施形態におけるＣＶを用いた検証の利用方法の一例を説明する説明図である。
【０１３５】
図１２において、プログラムの０１行目に、「CurrentCVを初期値ＣＶ（０）＝５５ｈに設定する」ことを示す記述が記述されている。
【０１３６】
また、０２行目に、「ｎの値（検証の対象となる処理の実行回数）に応じたビット列ｘの初期値を設定する」ことを示す記述が記述されている。ここでは、サブルーチン「setCVMX(counter)」は、上述したビット列ｘの生成方法に基づいて、ｎの値に応じたビット列ｘの初期値を設定する。
【０１３７】
また、０３行目に、「処理Ａ（１回目の処理）を実行する」ことを示す記述が記述されており、０４行目に、「CurrentCVをビット列ｘの下位８ビットとＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【０１３８】
また、０５行目に、「ビット列ｘを左巡回シフト演算する」ことを示す記述が記述されている。なお、サブルーチン「rotationl(CVMX)」は、CVMXの値を左巡回シフト演算して、再び、CVMXに上書きする。
【０１３９】
また、０６行目に、「処理Ｂ（２回目の処理）を実行する」ことを示す記述が記述されており、０７行目に、「CurrentCVをビット列ｘの下位８ビットとＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【０１４０】
また、０８行目に、「ビット列ｘを左巡回シフト演算する」ことを示す記述が記述されている。
【０１４１】
続く行には、上述の０６行目〜０８行目の記述のような記述が繰り返し記述されている。
【０１４２】
さらに、Ｘ１行目に、「処理Ｘ（ｎ回目の処理）を実行する」ことを示す記述が記述されており、Ｘ２行目に、「CurrentCVをビット列ｘの下位８ビットとＸＯＲ演算してCurrentCVに上書きする」ことを示す記述が記述されている。
【０１４３】
また、Ｘ３行目に、「ビット列ｘを左巡回シフト演算する」ことを示す記述が記述されている。
【０１４４】
また、Ｘ４行目に、「CurrentCVがＣＶ（８）＝ＡＡｈと一致する否かを判定し、判定した結果が一致しない場合には、異常と判定して停止する」ことを示す記述が記述されている。
【０１４５】
このように、CurrentCVの値が、０１行目の初期値ＣＶ（０）から、０３行目からＸ３行目の処理（ｎ回の検証の対象となる処理）が実行され、Ｘ４行目の処理の実行により、CurrentCVの値がＣＶ（８）と一致する否かを判定することにより、CurrentCVの値を更新する処理が正しく実行されたか否かを検証することができる。
【０１４６】
次に、上述の本実施形態のＣＶ処理を行う場合における、情報処理装置１の構成について説明する。
本実施形態における情報処理装置１の構成は、図８に示す情報処理装置１と同様であり、その説明を省略する。
【０１４７】
本実施形態における情報処理装置１は、予め定められたプログラムの記述に基づいて順に情報処理を実行する情報処理部４と、検証用となる変数の値が記憶される検証メモリ部２とを有している。ここで、少なくとも０と１とを含む２ビット長以上の第１の固定ビット長である複数の基本ビット列を組み合わせた第２の固定ビット長のビット列のデータ型を型Ａとし、型Ａのある値を検証メモリ部２に記憶させることを示す記述を設定記述とする。また、検査対象となる情報処理である検査対象情報処理を実行することを示す記述を情報処理記述とし、検証メモリ部２に記憶されている変数をあるビット列で排他的論理和演算して検証メモリ部２に上書きすることを示す記述を検証演算記述とする。また、検証メモリ部２に記憶されている変数の値に基づいて検証演算記述による排他的論理和演算が実行されたか否かを示す記述を判定記述とする。
そして、情報処理記述及びその後に検証演算記述が記述されている記述を情報処理検証演算記述とする。
【０１４８】
以降からの情報処理装置１の構成について説明においては、第１の実施形態と同様に、プログラム記憶部に記憶されているプログラムと、情報処理部４の動作についてのみ説明する。
【０１４９】
予め定められたプログラムには、少なくとも、上述の設定記述と、情報処理検証演算記述の実行回数であるｎの値（ｎは自然数）に応じてビット列ｘを生成するビット列生成記述と、ｎ個の情報処理検証演算記述と、判定記述と、が記述されている。
また、検証演算記述には、検証メモリ部２に記憶されている変数を、ビット列ｘに含まれるビット列ｙ（例えば、下位８ビット）の値で排他的論理和演算し、検証メモリ部２に上書きし、ビット列ｘを巡回シフト演算するように、予め記述されている。なお、ビット列ｙは、ビット列ｘのうちの所定のビット位置における第２の固定ビット長のビット列である。
【０１５０】
この場合、情報処理部４は、まず、設定記述に基づいて、型Ａのあるビット列ａを検証メモリ部２に記憶する。
次に、情報処理部４は、ビット列生成記述に基づいて、ｎの値（情報処理検証演算記述の実行回数）に応じたビット列ｘを生成する。さらに、情報処理部４は、ｎ個の情報処理検証演算記述に基づいて、検査対象情報処理を実行するとともに、検証メモリ部２から読み出した変数と、ビット列ｘに含まれるビット列ｙとを排他的論理和演算した値を検証メモリ部２に上書きし、さらに、ビット列ｘを巡回シフト演算する処理をｎ回実行する。
そして、情報処理部４は、判定記述に基づいて、検証メモリ部２から読み出した変数の値が、ビット列ａのビット反転値と一致するか否かを判定することにより、検証演算記述による排他的論理和演算が実行されたか否かを判定する。
【０１５１】
このように、この場合、ｎの値（情報処理検証演算記述の実行回数）によらずに情報処理検証演算記述は共通であり、且つ、排他的論理和演算及び巡回シフト演算の演算負荷の軽い演算処理のみで実現することができる。そのため、本実施形態における情報処理装置１は、バイパスや内部データの改竄を検知するとともに、その演算負荷を減じることを可能とする効果を奏する。
また、本実施形態における情報処理装置１は、ｎの値（情報処理検証演算記述の実行回数）に応じたビット列ｘを毎回生成するので、ｎ個の情報処理検証演算記述を実行する毎に、異なる順序でビット列ａ（ＣＶ）を遷移させることが可能である。例えば、乱数に基づいてビット列ｘを生成する場合、ビット列ｘは、毎回異なる値となり、ビット列ａ（ＣＶ）は、毎回異なる順序により遷移（動的に遷移）させることが可能である。このように、本実施形態における情報処理装置１は、ビット列ａ（ＣＶ）の値を動的に遷移させることが可能であるため、安全性を向上させることができる。よって、本実施形態における情報処理装置１は、コンピュータ等の処理において、その演算負荷を減じつつ、バイパスや内部データの改竄を検知することを可能とする効果を奏する。
【０１５２】
また、本実施形態では、ビット列生成記述は、ｎの値（情報処理検証演算記述の実行回数）に応じて第２の固定ビット長以上のビット列ｘを生成する記述である。そして、ビット列ｙは、ビット列ｘのうちの所定のビット位置における第２の固定ビット長のビット列（例えば、下位８ビットのビット列）である。
これにより、ｎの値に応じた適切なビット列ｘ及びビット列ｙが生成されるので、本実施形態における情報処理装置１は、バイパスや内部データの改竄を適切に検知することができる。
【０１５３】
また、本実施形態では、ビット列生成記述は、ｎの値が第２の固定ビット長の値未満である場合に、ｎの値から１を減算した値に等しい数の“０”と、１ビット長の“１”とを有するビット列による繰り返しに基づいて、ビット列ｘを生成する記述である。
これにより、ｎの値が第２の固定ビット長の値未満である場合でも、ｎの値に応じた適切なビット列ｘを生成することができる。そのため、本実施形態における情報処理装置１は、ｎの値が第２の固定ビット長の値未満である場合であっても、バイパスや内部データの改竄を検知することができる。
【０１５４】
また、本実施形態では、ビット列生成記述は、ｎの値が第２の固定ビット長の値以上である場合に、ｎの値と等しいビット長を有し、且つ、ビット列ｘにおける“１”の数が奇数個になるように、ビット列ｘを生成する記述である。
これにより、ｎの値が第２の固定ビット長の値以上である場合でも、ｎの値に応じた適切なビット列ｘを生成することができる。そのため、本実施形態における情報処理装置１は、ｎの値が第２の固定ビット長の値以上である場合であっても、バイパスや内部データの改竄を検知することができる。
【０１５５】
また、本実施形態では、ビット列生成記述は、乱数に基づいて、ビット列ｘを生成する記述である。
これにより、ビット列ｘは、上述の検証処理を実行するごとに異なる値となる。そのため、本実施形態における情報処理装置１は、安全性（セキュリティ）を向上させることができる。
【０１５６】
なお、本発明は、上記の各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
上記の各実施形態において、基本ビット列として、“０１”と“１０”などの２ビット固定長の場合について説明したが、基本ビット列は、このような２ビット固定長に限られるものではなく、例えば、“０１０１”と“１０１０”との４ビット固定長であってもよい。又は、同様に、基本ビット列として、８ビット固定長などであってもよい。
【０１５７】
また、上記の第１の実施形態において、ビット列ｘの下位８ビットをビット列ｙとして用いる形態を説明したが、ビット列ｙは、上位８ビットでもよいし、予め定められた所定のビット位置のビットに基づいてビット列ｙを生成する形態でもよい。
また、上記の第１の実施形態において、ビット列ｘを左巡回シフト演算する場合について説明したが、これに限定されるものではなく、ビット列ｘを右巡回シフト演算する形態でもよい。
【０１５８】
また、上記の第１の実施形態において、ループ処理の回数が変数（counter）により可変である場合について説明したが、ループ処理の回数が固定値である場合にも適用可能である。
また、上記の第１の実施形態において、ＦＯＲループ文による処理に適用する例について説明したが、これに限定されるものではなく、他のループ文に適用してもよい。
【０１５９】
また、上記の各実施形態のプログラム中に記述において、ＣＶＭを、ＣＶＭ（ｉ，ｊ）としてｉ及びｊの識別子（識別情報）で指定し、ＣＶＭテーブル３から識別子ｉ及びｊに対応するＣＶＭの値を読み出すようにしていたが、これに限られるものではない。例えば、ＣＶＭ（ｉ，ｊ）の値そのものを、プログラム中に予め記述するようにしてもよい。
【０１６０】
また、上記の各実施形態おいて、設定記述、情報処理記述、検証演算記述、及び、判定記述が、プログラムの記述に予め記述されているとして説明したが、これに限定されるものではない。例えば、予め情報処理記述が記述されているプログラムに、設定記述、検証演算記述、及び、判定記述を自動的に埋め込む記述埋込装置により、設定記述、情報処理記述、検証演算記述、及び、判定記述が、プログラムの記述に記述されるようにしてもよい。
【０１６１】
また、上記の各実施形態は、それぞれ単独で実施される形態でもよいし、上記の各実施形態のうちの少なくとも２つを組み合わせて実施される形態でもよい。例えば、上記の第１の実施形態と第２の実施形態とを組み合わせて実施してもよいし、上記の第１の実施形態と第３の実施形態とを組み合わせて実施してもよい。また、上記の第１の実施形態から第３の実施形態を組み合わせて実施してもよい。
【０１６２】
また、上記の各実施形態おいて、情報処理装置１としてＩＣカードなどについて説明したが、これに限られるものではなく、情報処理装置１はパーソナルコンピュータ又は携帯電話などのコンピュータ装置であってもよい。
【０１６３】
また、上記の各実施形態おいて、各情報処理にＣＶを用いる場合について説明したが、モジュール間の入出力にＣＶを用いてもよい。
また、情報処理装置１の検証メモリ部２又はＣＶＭテーブル３は、ハードディスク装置や光磁気ディスク装置、フラッシュメモリ等の不揮発性のメモリや、ＣＤ−ＲＯＭ等の読み出しのみが可能な記憶媒体、ＲＡＭ（Random Access Memory）のような揮発性のメモリ、あるいはこれらの組み合わせにより構成されるものでもよい。
【０１６４】
また、情報処理装置１は、専用のハードウェアにより実現されるものであってもよく、また、メモリ及びマイクロプロセッサにより実現させるものであってもよい。この情報処理装置１はメモリ及びＣＰＵ（中央情報処理装置）により構成され、情報処理装置１の機能を実現するためのプログラムをメモリにロードして実行することによりその機能を実現させるものであってもよい。
【０１６５】
また、情報処理装置１の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより情報処理装置１の各機能による処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
【０１６６】
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
【符号の説明】
【０１６７】
１…情報処理装置、２…検証メモリ部、３…ＣＶＭテーブル、４…情報処理部、５…ＣＶ初期値設定部、６…ＣＶ演算部、７…ＣＶ判定部、８…異常動作対処部、９…ループ用ビット列生成部、１０…ループ用ビット列記憶部、３１…変換前ビット列記憶部、３２…変換後ビット列記憶部、３３…変換テーブル記憶部、３４…ビット列記憶部
【図１】
0005758336.tif 000002
【図２】
0005758336.tif 000003
【図３】
0005758336.tif 000004
【図４】
0005758336.tif 000005
【図５】
0005758336.tif 000006
【図６】
0005758336.tif 000007
【図７】
0005758336.tif 000008
【図８】
0005758336.tif 000009
【図９】
0005758336.tif 000010
【図１０】
0005758336.tif 000011
【図１１】
0005758336.tif 000012
【図１２】
0005758336.tif 000013