(57)【要約】【課題】情報が改竄されたことをその情報の秘匿性を保つように元の情報と比較する技術において、比較対象の一致又は不一致に拘わらずハミングウェイトの相違や処理ステップ数の違いが顕著になり難いものとする。【解決手段】暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている暗号化処理情報との比較によって判別する検証処理部を有する。前記検証処理部は、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する。【選択図】図１
2013255157.tif 000002
【特許請求の範囲】
【請求項１】
記憶部から暗号化処理部にロードされた暗号化処理情報を用いて暗号化処理を行うデータ処理装置であって、前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている暗号化処理情報との比較によって判別する検証処理部を有し、
前記検証処理部は、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する、データ処理装置。
【請求項２】
請求項１において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示すオフセット情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う、データ処理装置。
【請求項３】
請求項１において、前記検証処理部は、前記比較対象とされる暗号化処理情報がＭバイトのＮ倍のデータ長を有するとき（Ｍは２以上の整数、Ｎは正の整数）、前記暗号化処理情報をＭバイト毎に２バイト単位に分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較を行い、Ｍバイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する、データ処理装置。
【請求項４】
請求項３において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う、データ処理装置。
【請求項５】
請求項１において、前記検証処理部は、前記比較対象とされる暗号化処理情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、前記暗号化処理情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する、データ処理装置。
【請求項６】
請求項５において、前記検証処理部は、前記比較対処とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う、データ処理装置。
【請求項７】
請求項６において、前記検証処理部は、前記比較対処とされる暗号化処理情報におけるＭ＋Ｌバイトに分割した部分の２バイト単位の比較順序をシャッフルアルゴリズムを用いて決定する、データ処理装置。
【請求項８】
請求項１において、前記分割部分同士の比較は、一方の分割部分をそれと同じビット数の１，０混在の定数とビット単位の排他的論理和を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る処理である、データ処理装置。
【請求項９】
請求項８において、前記分割部分同士の比較は、前記分割部分及び前記定数の上位側にダミーデータを付加した状態で行い、前記分割部分の比較結果は前記ダミー部分を除外した部分とする、データ処理装置。
【請求項１０】
請求項９において、前記ダミーデータはレジスタにロードされた乱数であり、一部の乱数はレジスタ上でビットローテンションされる、データ処理装置。
【請求項１１】
請求項８において、前記検証処理部は、前記比較対象とされる暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理和結果を取得すると共に、前記暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理積結果を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する、データ処理装置。
【請求項１２】
請求項１１において、前記検証処理部は、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し、演算結果に応じたゼロフラグの操作を行い、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードし、
前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの１ビットだけが相違するアドレスとされ、
前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの１ビットだけが相違するデータとされる、データ処理装置。
【請求項１３】
請求項１において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化処理の演算が行われる前の情報であり、暗号化に用いる鍵又は暗号化の対象になる平文の情報である、データ処理装置。
【請求項１４】
請求項１において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化されたデータを復号することによって得られた情報であり、暗号化の対象になった平文に対応する情報である、データ処理装置。
【請求項１５】
記憶部から暗号化処理部にロードされた暗号化処理情報を用いて暗号化処理を行うデータ処理装置のＣＰＵが実行する検証処理プログラムであって、
前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている対応する暗号化処理情報との比較によって判別するために、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する、検証処理プログラム。
【請求項１６】
請求項１５において、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する、検証処理プログラム。
【請求項１７】
請求項１５において、前記比較対象とされる暗号化処理情報がＭバイトのＮ倍のデータ長を有するとき（Ｍは２以上の整数、Ｎは正の整数）、前記暗号化処理情報をＭバイト毎に２バイト単位に分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較を行い、Ｍバイト毎の全部の比較結果を用いて前記一致するか否かを判別する処理を制御する、検証処理プログラム。
【請求項１８】
請求項１７において、前記比較対象とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する、検証処理プログラム。
【請求項１９】
請求項１５において、前記比較対象とされる暗号化処理情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、前記暗号化処理情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する、検証処理プログラム。
【請求項２０】
請求項１９において、前記比較対象とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示すオフセット情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する、検証処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報が改竄されたことをその情報の秘匿性を保つように元の情報と比較する技術に関し、例えば、平文を秘密鍵などを用いて暗号化復号するセキュアマイクロコンピュータなどのデータ処理装置、さらには、セキュアマイクロコンピュータが実行する比較処理プログラムなどに適用して有効な技術に関する。
【背景技術】
【０００２】
現在使用されている暗号方式は、暗号学的な解析手法に対して、計算量的に安全であるとされている。しかし、実際の暗号アルゴリズムを実装する場合、消費電流や処理時間といった、実装に依存したリークが発生する。また暗号アルゴリズムを実行するには、そのロジックへ平文や秘密鍵といった秘密情報を入力するときに、そのデータ入力および出力動作（データの移動つまりコピー）時に発生するリークも存在する。
【０００３】
暗号装置内のそのような動作状況を様々な物理的手段で観察することにより、秘密情報を不正に獲得しようとする攻撃方法があり、サイドチャネル攻撃（サイドチャネル攻撃、side-channel attack）と称される。具体的な攻撃方法としては、消費電力に注目した電力解析攻撃(power analysis attack)、装置から漏洩する電磁波に注目した電磁波解析攻撃（テンペストと呼ばれることもある）などがある。
【０００４】
サイドチャネル攻撃に対する対策の一環として、秘密鍵や平文等の改ざんが行われているかどうかを確認する目的でデータの比較処理を要所々で行うことができる。特にこの場合の比較においても、比較演算やデータ入出力動作をセキュアに行うことが求められる。
【０００５】
一方、１９９８年にCryptography Research社のPaul Kocherらがこうしたリーク情報を用いて秘密鍵を統計的な手法を用いて推定するDPA（Differential Power Analysis）手法を提案した（非特許文献１）。この手法を用いると、従来は解析に数十年かかっていた暗号解析が、オシロスコープや市販のPCを用いて短い期間でアタックできるようになる。アタックの手順は、既知の入力もしくは出力値に対応する消費電流、電磁放射、実行時間などを多数回測定し、統計的解析をおこなうことで、秘密鍵情報を推定する。この解析手法では、リークのうちの秘密情報に依存する成分と、秘密情報に依存しないノイズとみなせる成分の比率により、アタックに必要な測定回数が変動する。秘密情報に依存する成分の比率が１／ｎになると、必要な測定回数は、n^2（ｎの二乗）倍必要となる。この秘密情報に依存する成分の比率を下げる方法のひとつとして、例えば特許文献１のように、入力パラメータを変えて同じ演算を行い、かく乱するダミー演算を混ぜる方式がある。特許文献１では、特に、本物の鍵を使用した処理と、ダミー鍵を使用した処理をランダムな順番で実行することで、サイドチャネルリークと秘密鍵との間の相関を小さくすることを試みている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−６７９４２号公報
【非特許文献】
【０００７】
【非特許文献１】Paul Kocher, Joshua Jaffe, and Benjamin Jun,"Introduction to Differential Power Analysis and Related Attacks", http://www.fit.vutbr.cz/~cvrcek/cards/dpa.ps, 09 June 1998.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、ダミー演算によるリーク対策手法は、ダミーの演算が本当の演算と区別可能であった場合には、ダミー演算による対策効果は著しく低減する。例えば、ハミングウェイトなどの違いによる消費電流の相違に基づいて、処理中の暗号演算がダミー演算であるのか、本当の演算であるのかを判別することができる。そうすると、ダミー演算の測定結果を解析データから取り除いたり、真の処理の波形のみを選択的に取り出したりすることにより、秘密情報に依存する成分とノイズ成分の比率を下げることが可能になってしまう。そのため、上記比較演算やデータ入出力動作においてもハミングウェイトの違いや処理ステップ数の違いが消費電流、電磁放射、実行時間などの観測値の違いに反映されれば、サイドチャネル攻撃に対して比較処理を通じて秘密情報が漏洩されることになってしまう。
【０００９】
このような課題を解決するための手段等を以下に説明するが、その他の課題と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される実施の形態のうち代表的ものの概要を簡単に説明すれば下記の通りである。
【００１１】
すなわち、比較対象の値を所定バイト数単位で分割し、分割部分同士の比較順を可変とし、且つ、分割部分同士の全部の比較結果を用いて、比較対象の一致又は不一致を判別する。
【発明の効果】
【００１２】
本願において開示される実施の形態のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１３】
すなわち、比較対象の一致又は不一致に拘わらずハミングウェイトの相違や処理ステップ数の違いが顕著になり難い。
【図面の簡単な説明】
【００１４】
【図１】図１にはデータ処理装置において暗合化処理情報を分割部同士で比較する処理が例示される。
【図２】図２は分轄部分同士の比較順序を可変とし定数も演算対象としてＸＯＲ演算により比較を行う比較演算処理手法を原理的に例示する説明図である。
【図３】図３は一実施の形態にかかるデータ処理装置としてのマイクロコンピュータ（ＭＣＵ）を例示するブロック図である。
【図４】図４は秘密鍵を用いて平文を暗号化する場合を想定したとき、暗号化処理に対して比較処理の比較対象を処理系列に従って例示する説明図である。
【図５】図５は分割部分の２バイト単位の比較順序を可変にするために用いるリストＬＳＴの生成手法を例示する説明図である。
【図６】図６はインデックスされたリストＬＳＴが図５の場合における夫々８バイトの暗号化処理情報Ａｄａｔ，Ｂｄａｔに対する分割部分の２バイト単位の比較順序を例示する動作説明図である。
【図７】図７は演算結果ＲＳＬＴに基づいて暗号化処理情報ＡｄａｔとＢｄａｔが一致すか否かを判別する演算ロジックを例示する論理構成図である。
【図８】図８は８の倍数バイトを有する暗号化処理情報に対して８バイト単位の処理を集計する暗号化処理の処理手順を例示する説明図である。
【図９】図９は８バイト単位の処理の結果を集計した８×ｎバイトの演算結果について関数の戻り値として定義された定数をリターンコードとして出力する処理手順を例示するフローチャートである。
【図１０】図１０は図９の処理手順を考える一つ前に検討した処理手順を示すフローチャートである。
【図１１】図１１は処理ステップ数の相違という点でリークを生ずる虞の高い処理手順を例示するフローチャートである。
【図１２】図１２はランダム比較処理の第２の観点における８＋ｍバイトの比較処理順のランダム化方式について例示するタイミング図である。
【図１３】図１３はフィッシャーイェーツシャッフルアルゴリズムの概念を概略的に示す説明図である。
【図１４】図１４は暗号コプロセッサ１０４の更に具体的な例を示すブロック図である。
【図１５】図１５はサイドチャネルアタック対策の処理を含んだ暗号化処理を例示する全体的な処理のフローチャートである。
【発明を実施するための形態】
【００１５】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１６】
〔１〕＜所定バイト数に分割した全部の分割部分の比較と、分割部分の比較順序のランダム化＞
代表的な例に係るデータ処理装置（１００）は、記憶部（１０２，１０３）から暗号化処理部（１０４）にロードされた暗号化処理情報（秘密鍵、平文）を用いて暗号化処理を行う装置である。これは、前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている暗号化処理情報との比較によって判別する検証処理部（ＣＰＵ１０１とその動作プログラムなど）を有する。前記検証処理部は、比較対象とされる夫々の暗号化処理情報（Ａｄａｔ，Ｂｄａｔ）を所定バイト数単位に分割し、分割部分（Ａ［０］，Ａ［１］，Ａ［２］，Ａ［３］、Ｂ［０｝，Ｂ［１］，Ｂ［２］，Ｂ［３］）の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する。
【００１７】
これによれば、分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずその比較結果においてハミングウェイトの相違は顕著にならず、また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。したがって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して比較処理を通じて秘匿情報が漏洩し難くなる。
【００１８】
〔２〕＜分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照＞
項１において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示すオフセット情報（ＬＳＴ：Ｌ［０］，Ｌ［１］，Ｌ［２］，Ｌ［３］）の組み合わせの態様をデータテーブル（ＲＴＢＬ）から乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う。
【００１９】
これによれば、分割部分の比較順序を容易にランダム化することができる。
【００２０】
〔３〕＜ＭバイトのＮ倍のデータ長を有する暗号化処理情報＞
項１において、前記検証処理部は、前記比較対象とされる暗号化処理情報がＭバイトのＮ倍のデータ長を有するとき（Ｍは２以上の整数、Ｎは正の整数）、前記暗号化処理情報をＭバイト毎に２バイト単位に分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較を行い、Ｍバイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する（図６、図８参照）。
【００２１】
これによれば、Ｍバイト毎に同じ処理を繰り返して結果を出すことができるから、ＭバイトのＮ倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
【００２２】
〔４〕＜分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照＞
項３において、前記検証処理部は、前記比較対象とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数（Ｒ０）を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う。
【００２３】
これによれば、分割部分の比較順序を容易にランダム化することができる。
【００２４】
〔５〕＜任意データ長を有する暗号化処理情報＞
項１において、前記検証処理部は、前記比較対象とされる暗号化処理情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、前記暗号化処理情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する（図１２参照）。
【００２５】
これによれば、Ｍバイトの倍数に対してＬバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Ｌバイトの端数を含むＬ＋Ｍバイトの部分を除いてＭバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
【００２６】
〔６〕＜分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照＞
項５において、前記検証処理部は、前記比較対処とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分の比較を行う（図６参照）。
【００２７】
これによれば、夫々のＭバイト内の分割部分の比較順序を容易にランダム化することができる。
【００２８】
〔７〕＜Ｍバイト毎の比較とＭ＋Ｌバイトの比較とのランダム化＞
項６において、前記検証処理部は、前記比較対処とされる暗号化処理情報におけるＭ＋Ｌバイトに分割した部分の２バイト単位の比較順序をシャッフルアルゴリズムを用いて決定する（図１３参照）。
【００２９】
これによれば、Ｍ＋Ｌバイト内の分割部分の比較順序をＬの値に応じて容易にランダム化することができる。
【００３０】
〔８〕＜一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR＞
項１において、前記分割部分同士の比較は、一方の分割部分をそれと同じビット数の１，０混在の定数（０ｘ５５５５，０ｘＡＡＡＡ）とビット単位の排他的論理和を採り（３１０）、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る（３１１）処理である。
【００３１】
これによれば、定数と２つのデータの排他的論理和をとるために、２回の排他的論理和演算を行う。そのとき１回目は初期値定数とデータのうちの一方、２回目は１回目の結果と残りの一方のデータとで排他的論理和演算を行っている。この初期値との排他的論理和演算を行わず2つの値の単なる排他的論理和演算では2つの値が等しい場合には演算結果が０になり、一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまう。上記手段であれば、分割部分同士が一致していると、上記２回の排他的論理和結果が前記１，０混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。
【００３２】
〔９〕＜夫々の比較対象の上位側に乱数でデータを付加＞
項８において、前記分割部分同士の比較は、前記分割部分及び前記定数の上位側にダミーデータ（ｒ１、ｒ２、ｒ３）を付加した状態で行い、前記分割部分の比較結果は前記ダミー部分を除外した部分とする。
【００３３】
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００３４】
〔１０〕＜乱数のビットローテーション＞
項９において、前記ダミーデータ（ｒ２）はレジスタにロードされた乱数であり、一部の乱数はレジスタ上でビットローテンションされる。
【００３５】
これによれば、ダミーデータに単に乱数を用いる場合に比べると、一部の乱数のビットローテーションの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００３６】
〔１１〕＜分割部分の比較結果に基づく暗号化処理情報の一致判別＞
項８において、前記検証処理部は、前記比較対象とされる暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果（ＲＳＬＴ：Ｒ［０］，Ｒ［１］，Ｒ［２］，Ｒ［３］）の内の一つを前記定数（０ｘ５５５５又は０ｘＡＡＡＡ）とビット単位で論理和を採り（４１０）、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って（４１１，４１２，４１３）累積的論理和結果（４０１）を取得すると共に、前記暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積（４２０）を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って（４２１，４２２，４２３）累積的論理積結果（４０２）を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積（４３０）に基づいて、前記比較対象が一致するか否かの判別結果を生成する。
【００３７】
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を解消することができる。
【００３８】
〔１２〕＜判別のリターンコード＞
項１１において、前記検証処理部は、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し（Ｓ２）、演算結果に応じたゼロフラグの操作を行い（Ｓ３）、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い（Ｓ４，Ｓ５）、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの１ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの１ビットだけが相違するデータとされる。
【００３９】
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの１ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの１ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
【００４０】
〔１３〕＜暗号化処理部で暗号化処理される前の鍵、平文を比較対象とする＞
項１において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化処理の演算が行われる前の情報（ＣＰＲＥＧ１，ＣＰＲＥＧ２の情報）であり、暗号化に用いる鍵又は暗号化の対象になる平文の情報である。
【００４１】
これによれば、鍵と平文が暗号化の前に改竄されたか否かの判別をそれら情報の秘匿性を保ったまま判別することができ、その判別結果を用いて割込み処理又はリセット処理などに移行することによってサイドチャネルアタックに効果的に対処することが可能になる。
【００４２】
〔１４〕＜暗号化処理部で暗号化された後に復号した平文を比較対象とする＞
項１において、前記比較対象とされる暗号化処理情報の一つである、前記暗号化処理部にロードされた暗号化処理情報は、前記暗号化処理部で暗号化されたデータを復号することによって得られた情報（ＣＰＲＥＧ４の情報）であり、暗号化の対象になった平文に対応する情報である。
【００４３】
これによれば、平文が改竄されたか否かの判別をその情報の秘匿性を保ったまま判別することができ、その判別結果を用いて割込み処理又はリセット処理などに移行することによってサイドチャネルアタックに効果的に対処することが可能になる。
【００４４】
〔１５〕＜所定バイト数に分割した全部の分割部分の比較と、分割部分の比較順序のランダム化＞
別の代表的な例に係る検証処理プログラム（１０３に格納されているプログラム）は、記憶部（１０２，１０３）から暗号化処理部（１０４）にロードされた暗号化処理情報を用いて暗号化処理を行うデータ処理装置（１００）のＣＰＵ（１０１）が実行するプログラムである。このプログラムは、前記暗号化処理部にロードされた暗号化処理情報が改竄されたか否かを前記記憶部に格納されている対応する暗号化処理情報との比較によって判別するために、比較対象とされる夫々の暗号化処理情報を所定バイト数単位に分割し、分割部分の前記所定バイト数単位の比較順序を可変にして対応する分割部分同士の比較を全部行い、その比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。
【００４５】
このプログラムによれば、分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずハミングウェイトの相違は顕著にならず、また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。したがって、このプログラムを採用することによって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して比較処理を通じて秘匿情報が漏洩し難くなる構成を、マイクロコンピュータなどで容易に実現できるようになる。
【００４６】
〔１６〕＜分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照＞
項１５において、検証処理プログラムは、前記比較対象とされる暗号化処理情報における夫々の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する。
【００４７】
これによれば、分割部分の比較順序を容易にランダム化することができる。
【００４８】
〔１７〕＜ＭバイトのＮ倍のデータ長を有する暗号化処理情報＞
項１５において、前記比較対象とされる暗号化処理情報がＭバイトのＮ倍のデータ長を有するとき（Ｍは２以上の整数、Ｎは正の整数）、検証処理プログラムは、前記暗号化処理情報をＭバイト毎に２バイト単位に分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較を行い、Ｍバイト毎の全部の比較結果を用いて前記一致するか否かを判別する処理を制御する。
【００４９】
これによれば、Ｍバイト毎に同じ処理を繰り返して結果を出すことができるから、ＭバイトのＮ倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
【００５０】
〔１８〕＜分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照＞
項１７において、検証処理プログラムは、前記比較対象とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示す情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する。
【００５１】
これによれば、分割部分の比較順序を容易にランダム化することができる。
【００５２】
〔１９〕＜任意データ長を有する暗号化処理情報＞
項１５において、前記比較対象とされる暗号化処理情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、検証処理プログラムは、前記暗号化処理情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。
【００５３】
これによれば、Ｍバイトの倍数に対してＬバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Ｌバイトの端数を含むＬ＋Ｍバイトの部分を除いてＭバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
【００５４】
〔２０〕＜分割部分のランダムな比較順序を規定するテーブルエントリを乱数を用いて参照＞
項１９において、検証処理プログラムは、前記比較対象とされる暗号化処理情報における夫々のＭバイト内の２バイト単位の分割部分の相対位置を示すオフセット情報の組み合わせの態様をデータテーブルから乱数を用いて選択し、選択した態様に従った順番で前記分割部分を比較する処理を制御する。
【００５５】
これによれば、夫々のＭバイト内の分割部分の比較順序を容易にランダム化することができる。
【００５６】
〔２１〕＜Ｍバイト毎の比較とＭ＋Ｌバイトの比較とのランダム化＞
項２０において、検証処理プログラムは、前記検証対象とされる暗号化処理情報におけるＭ＋Ｌバイトに分割した部分の２バイト単位の比較順序をシャッフルアルゴリズムを用いて決定する動作を制御する。
【００５７】
これによれば、Ｍ＋Ｌバイト内の分割部分の比較順序をＬの値に応じて容易にランダム化することができる。
【００５８】
〔２２〕＜一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR＞
項１５において、前記分割部分同士を比較する処理の制御は、一方の分割部分をそれと同じビット数の１，０混在の定数とビット単位で排他的論理和を採り、その比較結果を他方の分割部分とビット単位で排他的論理和を採る処理の制御である。
【００５９】
これによれば、１，０を含む定数と２つのデータの排他的論理和をとるために、２回の排他的論理和演算を行っており、初期値との排他的論理和演算を行わず２つの値の単なる排他的論理和演算では２つの値が等しい場合には演算結果が０になり、一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまう。上記手段であれば、分割部分同士が一致していると、上記２回の排他的論理和結果が前記１，０混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。
【００６０】
〔２３〕＜夫々の比較対象の上位側に乱数でデータを付加＞
項２２において、前記分割部分同士を比較する処理の制御は、前記分割部分及び前記定数の上位側にダミーデータを付加した状態で比較し、前記分割部分の比較結果は前記ダミー部分を除外した部分とする制御である。
【００６１】
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００６２】
〔２４〕＜乱数のビットローテーション＞
項２３において、前記分割部分同士を比較する処理の制御は、前記ダミーデータとして乱数をレジスタにロードし、ロードした一部の乱数をレジスタ上でビットローテンションさせる処理の制御を含む。
【００６３】
これによれば、ダミーデータに単に乱数を用いる場合に比べると、一部の乱数のビットローテーションの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００６４】
〔２５〕＜分割部分の比較結果に基づく暗号化処理情報の一致判別＞
項２２において、検証処理プログラムは、前記比較対象とされる暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理和結果を取得すると共に、前記暗号化処理情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理積結果を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する処理を制御する。
【００６５】
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を容易に解消することができる。
【００６６】
〔２６〕＜判別のリターンコード＞
項２５において、検証処理プログラムは、前記比較対象とされる累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し、演算結果に応じたゼロフラグの操作を行い、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする処理を制御する。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの１ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの１ビットだけが相違するデータとされる。
【００６７】
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの１ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの１ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
【００６８】
〔２７〕＜一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR＞
別の例に係るデータ処理装置（１００）は、記憶部（１０２，１０３）からデータ処理部（１０４）にロードされた演算情報を用いてデータ処理を行う。このデータ処理装置は、前記データ処理部にロードされた演算情報（秘密鍵、平文）が改竄されたか否かを前記記憶部に格納されている対応する演算情報との比較によって判別する検証処理部（ＣＰＵとその動作プログラムによって実現）を有する。前記検証処理部は、比較対象とされる夫々の演算情報（Ａｄａｔ，Ｂｄａｔ）を所定バイト数単位に分割して（Ａ［０］，Ａ［１］，Ａ［２］，Ａ［３］、Ｂ［０｝，Ｂ［１］，Ｂ［２］，Ｂ［３］）対応する分割部分同士の比較を行い（３００）、その比較結果を用いて前記比較対象が一致するか否かを判別する。ここで、前記分割部分同士の比較は、一方の分割部分をそれと同じビット数の１，０混在の定数（０ｘ５５５５又は０ｘＡＡＡＡなど）とビット単位の排他的論理和（３１０）を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和（３１１）を採る処理である。
【００６９】
これによれば、１，０を含む定数と２つのデータの排他的論理和をとるために、２回の排他的論理和演算を行っている。初期値との排他的論理和演算を行わず２つの値の単なる排他的論理和演算では２つの値が等しい場合には演算結果が０になり、一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまう。上記手段であれば、分割部分同士が一致していると、上記２回の排他的論理和結果が前記１，０混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。この点で、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して、比較処理を通じた秘匿情報の漏洩を抑制可能になる。
【００７０】
〔２８〕＜夫々の比較対象の上位側に乱数でデータを付加＞
項２７において、前記分割部分同士の比較は、前記分割部分及び前記定数の上位側にダミーデータ（ｒ１、ｒ２、ｒ３）を付加した状態で行い、前記分割部分の比較結果は前記ダミー部分を除外した部分とする。
【００７１】
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００７２】
〔２９〕＜乱数のビットローテーション＞
項２８において、前記ダミーデータはレジスタにロードされた乱数であり、一部の乱数（ｒ２）はレジスタ上でビットローテンションされる。
【００７３】
これによれば、ダミーデータに単に乱数を用いる場合に比べると、一部の乱数のビットローテーションの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００７４】
〔３０〕＜分割部分の比較結果に基づく演算情報の一致判別＞
項２７において、前記検証処理部は、前記比較対象とされる演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和（４１０）を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って（４１１，４１２，４１３）累積的論理和結果（４０１）を取得すると共に、前記演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り（４２０）、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って（４２１，４２２，４２３）累積的論理積結果（４０２）を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する。
【００７５】
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を解消することができる。
【００７６】
〔３１〕＜判別のリターンコード＞
項３０において、前記検証処理部は、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し（Ｓ２）、演算結果に応じたゼロフラグの操作を行い（Ｓ３）、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い（Ｓ４，Ｓ５）、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの１ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの１ビットだけが相違するデータとされる。
【００７７】
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの１ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの１ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
【００７８】
〔３２〕＜ＭバイトのＮ倍のデータ長を有する演算情報＞
項２７において、前記検証処理部は、前記比較対象とされる演算情報がＭバイトのＮ倍のデータ長を有するとき（Ｍは２以上の整数、Ｎは正の整数）、前記演算情報をＭバイト毎に２バイト単位に分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較を行い、Ｍバイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する。
【００７９】
これによれば、Ｍバイト毎に同じ処理を繰り返して結果を出すことができるから、ＭバイトのＮ倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
【００８０】
〔３３〕＜任意データ長を有する演算情報＞
項２７において、前記検証処理部は、前記比較対象とされる演算情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、前記演算情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する。
【００８１】
これによれば、Ｍバイトの倍数に対してＬバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Ｌバイトの端数を含むＬ＋Ｍバイトの部分を除いてＭバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
【００８２】
〔３４〕＜一方の分割部分と1,0混在定数とのXOR結果を他方の分割部分とXOR＞
別の例に係る検証処理プログラムは、記憶部からデータ処理部にロードされた演算情報を用いてデータ処理を行うデータ処理装置のＣＰＵが実行するプログラムである。このプログラムは、前記データ処理部にロードされた演算情報が改竄されたか否かを前記記憶部に格納されている対応する演算情報との比較によって判別するために、比較対象とされる夫々の演算情報を所定バイト数単位に分割して対応する分割部分同士の比較を行い、その比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。ここで、前記分割部分同士を比較する処理の制御は、一方の分割部分をそれと同じビット数の１，０混在の定数とビット単位の排他的論理和を採り、その比較結果を他方の分割部分とビット単位の排他的論理和を採る制御である。
【００８３】
このプログラムを採用すると、分割部分同士が一致していれば、上記２回の排他的論理和結果が前記１，０混在の定数に等しくなり、分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。したがって、このプログラムを採用することによって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して、比較処理を通じた秘匿情報の漏洩を抑制可能になる構成を、マイクロコンピュータなどで容易に実現できるようになる。
【００８４】
〔３５〕＜夫々の比較対象の上位側に乱数でデータを付加＞
項３４において、前記分割部分同士を比較する制御は、前記分割部分及び前記定数の上位側にダミーデータを付加した状態で比較し、前記分割部分の比較結果は前記ダミー部分を除外した部分とする制御である。
【００８５】
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００８６】
〔３６〕＜乱数のビットローテーション＞
請求項３５において、前記分割部分同士を比較する制御は、前記ダミーデータとして乱数をレジスタにロードし、ロードした一部の乱数をレジスタ上でビットローテンションさせる処理の制御を含む、検証処理プログラム。
【００８７】
これにより、上位側に付加されたダミーデータの作用により、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【００８８】
〔３７〕＜分割部分の比較結果に基づく演算情報の一致判別＞
項３４において、検証処理プログラムは、前記比較対象とされる演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理和を採り、その論理和結果を次の前記分割部分同士の比較結果と論理和を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理和結果を取得すると共に、前記演算情報に対して前記分割部分同士の比較によって得られた比較結果の内の一つを前記定数とビット単位で論理積を採り、その論理積結果を次の前記分割部分同士の比較結果と論理積を採る操作を最後の前記分割部分同士の比較結果まで行って累積的論理積結果を取得し、前記累積的論理和結果と前記累積的論理積結果との論理積に基づいて、前記比較対象が一致するか否かの判別結果を生成する処理を制御する。
【００８９】
これによれば、累積的論理和又は累積的論理積だけを行う場合に生ずる、比較一致の誤り判定の虞を容易に解消することができる。
【００９０】
〔３８〕＜判別のリターンコード＞
項３７において、検証処理プログラムは、前記比較対象とされる累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との差を演算し、演算結果に応じたゼロフラグの操作を行い、ゼロフラグを有するコンディションコードレジスタの値を用いて生成したアドレスによってリードアクセスを行い、リードしたデータを、前記比較対象が一致するか否かの判別結果として所定のレジスタにロードする処理を制御する。ここで、前記アドレスは、前記コンディションコードレジスタの値に規定値を加算した値であり、前記累積的論理和結果と前記累積的論理積結果との論理積の結果がその期待値に等しい場合と、等しくない場合とで、アドレスビットの１ビットだけが相違するアドレスとされる。また、前記比較対象が一致するか否かの判別結果は、一致の場合と不一致の場合とでデータビットの１ビットだけが相違するデータとされる。
【００９１】
これによれば、前記累積的論理和結果と前記累積的論理積結果との論理積の結果とその期待値との相違、即ち、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの１ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値も一致または不一致に応じてデータビットの１ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
【００９２】
〔３９〕＜ＭバイトのＮ倍のデータ長を有する演算情報＞
項３４において、検証処理プログラムは、前記比較対象とされる演算情報がＭバイトのＮ倍のデータ長を有するとき（Ｍは２以上の整数、Ｎは正の整数）、前記演算情報をＭバイト毎に２バイト単位に分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較を行い、Ｍバイト毎の全部の比較結果を用いて前記一致するか否かを判別する処理を制御する。
【００９３】
これによれば、Ｍバイト毎に同じ処理を繰り返して結果を出すことができるから、ＭバイトのＮ倍の任意のデータ長を有する暗号化処理情報に対して容易に対応することができる。
【００９４】
〔４０〕＜任意データ長を有する演算情報＞
項３４において、検証処理プログラムは、前記比較対象とされる演算情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、前記演算情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割し、分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別する処理を制御する。
【００９５】
これによれば、Ｍバイトの倍数に対してＬバイトの端数がある任意のデータ長を有する暗号化処理情報に対して、Ｌバイトの端数を含むＬ＋Ｍバイトの部分を除いてＭバイト毎に同じ処理を繰り返して結果を出すことができるから、容易に対応することができる。
【００９６】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００９７】
＜実施の形態１＞
先ず最初に、サイドチャネルアタックによる不所望な情報リークを抑制するための、暗合化処理情報を分割部同士で比較する処理、について原理的に説明する。その後の実施の形態で、その処理について更に具体的な説明を行う。
【００９８】
図１にはデータ処理装置において暗合化処理情報を分割部同士で比較する処理が例示される。同図においてＡｄａｔ、Ｂｄａｔは比較対象とされる暗号化処理情報であり、例えば前者は記憶部に格納されている秘密鍵、後者は記憶部から暗号化処理部にロードされた秘密鍵である。暗号化処理情報Ａｄａｔは例えば２バイト数単位に４分割のデータＡ［０］，Ａ［１］，Ａ［２］，Ａ［３］として図示され、暗号化処理情報Ｂｄａｔは例えば２バイト数単位に４分割のデータＢ［０］，Ｂ［１］，Ｂ［２］，Ｂ［３］として図示される。分割部分の２バイト単位の比較順序を可変にして対応する分割部分同士の比較を行い、２バイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する。分割部分の比較順序の指定は例えば順序データＬ［０］，Ｌ［１］，Ｌ［２］，Ｌ［３］が配列されたリストＬＳＴに基づいて行われる。
【００９９】
これによれば、分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずその結果においてハミングウェイトの相違は顕著にならない。また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。したがって、比較処理において比較対象の一致と不一致との間で消費電流、電磁放射、実行時間などの観測値に大きな違いを生じさせず、サイドチャネル攻撃に対して比較処理を通じて秘匿情報が漏洩し難くなる。
【０１００】
分割部分同士の比較は例えば排他的論理和演算（ＸＯＲ）を利用して行う。比較の演算結果ＲＳＬＴは、分割部分同士を順次比較演算した結果Ｒ［０］，Ｒ［１］，Ｒ［２］，Ｒ［３］の配列として得られる。ＸＯＲを用いた分割部分同士の比較演算は、例えば、前記分割部分同士の比較を、一方の分割部分をそれと同じビット数の１，０混在の定数とビット単位の排他的論理和を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る処理を基本とする。単なる排他的論理和では分割部分同士が一致の場合に演算結果が全ビット０になり一致の場合と不一致の場合とでハミングウェイトの相違が顕著になってしまうからである。したがって初期値とのＸＯＲを最初に行う。たとえば、初期値を定数０ｘ５５５５としておくと、２回のＸＯＲ演算を行った結果、比較対象が等しい場合の結果として０ｘ５５５５が得られ、期待する演算結果におけるハミングウェイトの偏りを最小にする事ができる。
【０１０１】
不一致の場合には全ビット０又は１になる可能性は否定できないので、極力、排他的論理和演算結果のハミングウェイトの相違を小さくするために下位側２バイトには乱数ｒ１、ｒ２、ｒ３を配置するのがよい。このとき、演算毎に毎回新たな乱数を発生させて汎用レジスタにセットする処理を軽減するために、一つの乱数ｒ２のみ変更対象とし、その変更内容を例えば演算毎に毎回１ビットのビットローテーションを行うようにするとよい。
【０１０２】
＜実施の形態２＞
《マイクロコンピュータ》
図３には一実施の形態にかかるデータ処理装置としてのマイクロコンピュータ（ＭＣＵ）が例示される。同図に示されるマイクロコンピュータ１００は、特に制限されないが、ＩＣカードや携帯端末などに適用されるセキュアマイクロコンピュータとして秘匿データの暗号化及び復号や、認証などの処理に用いられる。この種のマイクロコンピュータにおいては、内部の動作や処理手順が外部に漏れると一般にセキュリティが確保できなくなってしまうため、内部解析（リバース・エンジニアリング）や改変に対する防護機能、即ち耐タンパ性を備える。この耐タンパ性を実現するのに、半導体集積回路としてのマイクロコンピュータの保護層をはがそうとすると内部回路まで破壊されるようにした物理的な手段と共に、サイドチャネルアタックなどによる秘匿情報の漏洩を抑制するためのソフトウェア的な手段が備えられている。ここではサイドチャネルアタックに対する耐性強化のための比較処理に関する手段について詳細な説明を行う。
【０１０３】
マイクロコンピュータ１００は、特に制限されないが、夫々が内部バス１０６を共有する、代表的に示された中央処理装置（ＣＰＵ）１０１、ＲＡＭ１０２、不揮発性メモリ１０３、暗号コプロセッサ（ＣＯＰＲＯ)１０４、乱数生成器１０５、及び入出力回路１０７を備える。乱数発生器１０５は疑似乱数を発生するものであってもよい。
【０１０４】
ＣＰＵ１０１は、命令を実行するプログラム制御装置であって、命令フェッチと命令実行手順を制御する命令制御ユニット及び命令をデコードして実行する実行ユニットなどによって構成される。ＲＡＭ１０２は、ＣＰＵ１０１のワーク領域若しくはデータの一時記憶領域として用いられる。不揮発性メモリ１０３は、ＣＰＵ１０１が実行するプログラムやプログラム実行時に参照するテーブルやパラメータなどが格納され、マスクＲＯＭや電気的に書き換え可能なフラッシュメモリなどで実現される。暗号コプロセッサ１０４はＣＰＵ１０１の指示にしたがって暗号化及び復号の処理を行う。乱数生成器１０５は暗号化復号処などで用いる乱数を生成する。入出力回路１０７はＩＯポート、シリアルインタフェース、バスインタフェースなどを備え、マイクロコンピュータの外部インタフェース機能を総称する。
【０１０５】
《暗号化処理に付随する比較処理の比較対象》
図４には例えば秘密鍵を用いて平文を暗号化する場合を想定したとき、暗号化処理に対して上記比較処理の比較対象が処理系列に従って例示される。暗号コプロセッサ１０４が秘密鍵を用いて平文を暗号化する場合、例えば、秘密鍵と平文を外部から入力するものとする。外部からそれらが入出力回路１０７に供給されると、ＣＰＵ１０１が秘密鍵と平文をＲＡＭ１０２にストアする。ＡＤＲ１は秘密鍵が格納されるメモリアドレス、ＡＤＲ２は平文が格納されるメモリアドレスである。ここでは、メモリアドレスＡＤＲ１，ＡＤＲ２上で直接データが改竄されることは無いものとする。ＲＡＭ１０２にストアされた秘密鍵と平文はＣＰＵ１０１の制御によって暗号コプロセッサ１０４の演算レジスタＣＰＲＥＧ１，ＣＰＲＥＧ２にロードされる。ＣＰＵ１０１が暗号コプロセッサ１０４に暗号化処理を指示することによって、暗号コプロセッサ１０４は演算レジスタＣＰＲＥＧ１の秘密鍵を用いて演算レジスタＣＰＲＥＧ２の平文を所定の暗号アルゴリズムＥＣＲＰＴにしたがって暗号化する。演算結果レジスタＣＰＲＥＧ３には暗号化された暗号文が格納される。サイドチャネルアタックに対抗するための比較処理は、例えば、演算レジスタＣＰＲＥＧ１に格納された秘密鍵がメモリアドレスＡＤＲ１に格納されている秘密鍵に一致するかを比較する処理ＣＭＰ１である。別の比較処理は、演算レジスタＣＰＲＥＧ２に格納された平文がメモリアドレスＡＤＲ１に格納されている平文に一致するかを比較する処理ＣＭＰ２である。更に別の比較処理は、演算レジスタＣＰＲＥＧ３の暗号文を復号アルゴリズムＤＣＲＰＴで復号して演算レジスタＣＰＲＥＧ４に取得した平文がメモリアドレスＡＤＲ１に格納されている平文に一致するかを比較する処理ＣＭＰ３である。処理ＣＭＰ１と処理ＣＭＰ２は演算レジスタＣＰＲＥＧ１，ＣＰＲＥＧ２上でデータが改竄された場合、或いは当該レジスタへの転送途上で改竄された場合を検出しようとするものである。処理ＣＭＰ３は演算レジスタＣＰＲＥＧ３に暗号文が取得されるまでの間、即ち、暗号コプロセッサ１０４のどこかで秘密鍵、平文が改竄された場合を検出しようとするものである。比較する処理ＣＭＰ１，ＣＭＰ１，ＣＭＰ３は何れもＣＰＵ１０１が行う、この意味において、暗号化処理部としての暗号コプロセッサ１０４にロードされた秘密鍵及び平文などの暗号化処理情報が改竄されたか否かを記憶部としてのＲＡＭ１０２に格納されている暗号化処理情報との比較によって判別する検証処理部の一例はＣＰＵ１０１及びその動作プログラムなどとされる。ＣＰＵ１０１は前記処理ＣＭＰ１，ＣＭＰ２，ＣＭＰ３の結果に基づいて秘密鍵や平文が改竄されたことを検出すると、例えば、リセット処理、その他の例外処理、又は割り込み処理などの例外的な処理に移行して、サイドチャネルアタックを制止することが可能である。尚、特に図示はしないが、秘密鍵が不揮発性メモリ１０３から演算レジスタＣＰＲＥＧ１にセットされる場合も上記同様である。
【０１０６】
《比較処理における比較演算処理手法》
図２には図３に代表的に示された比較する処理ＣＭＰ１，ＣＭＰ２，ＣＭＰ３の比較演算処理手法が原理的に例示される。同図においてＡｄａｔ、Ｂｄａｔは比較対象とされる暗号化処理情報である。以下の説明では、秘密鍵、平文の一つを単に暗号化処理情報とも称するものとする。暗号化処理情報Ａｄａｔが例えば演算レジスタＣＰＲＥＧ１上のデータであるとき、それに対応する暗号化処理情報ＢｄａｔはＲＡＭ１０２のメモリアドレスＡＤＲ１の秘密鍵である。また、暗号化処理情報Ａｄａｔが例えば演算レジスタＣＰＲＥＧ２上のデータ又は演算レジスタＣＰＲＥＧ４上のデータであるとき暗号化処理情報ＢｄａｔはＲＡＭ１０２に格納されているメモリアドレスＡＤＲ２の平文である。
【０１０７】
比較対象とされる夫々の暗号化処理情報Ａｄａｔ，Ｂｄａｔは、例えばＭバイトのＮ倍のデータ長を有し（Ｍは２以上の整数、Ｎは正の整数）、ここではＭ＝２，Ｎ＝４とする。暗号化処理情報Ａｄａｔは２バイト数単位に４分割のデータＡ［０］，Ａ［１］，Ａ［２］，Ａ［３］とし、暗号化処理情報Ｂｄａｔは２バイト数単位に４分割のデータＢ［０］，Ｂ［１］，Ｂ［２］，Ｂ［３］とする。このように、暗号化処理情報Ａｄａｔ，Ｂｄａｔを２バイト数単位に４分割とする。分割部分の２バイト単位の比較順序を可変にして対応する分割部分同士の比較を行い、２バイト毎の全部の比較結果を用いて前記比較対象が一致するか否かを判別する。分割部分の比較順序の指定は例えば順序データＬ［０］，Ｌ［１］，Ｌ［２］，Ｌ［３］が配列されたリストＬＳＴに基づいて選択ロジック２００が制御する。分割部分同士の比較は比較演算ロジック３００が排他的論理和演算（ＸＯＲ）を利用して行う。比較演算ロジック３００による演算結果ＲＳＬＴは、分割部分同士を順次比較演算した結果Ｒ［０］，Ｒ［１］，Ｒ［２］，Ｒ［３］の配列として得られる。
前記選択ロジック２００及び比較演算ロジック３００はＣＰＵ１０１、その動作プログラム及び制御データなどによって実現され、その具体的な構成について次に説明する。
【０１０８】
《分割部分の２バイト単位の比較順序を可変にする選択ロジック》
図５には分割部分の２バイト単位の比較順序を可変にするために用いるリストＬＳＴの生成手法が例示される。リストＬＳＴはランダムテーブルＲＴＢＬを乱数ＲＮＭＢを用いて参照される。例えば、リストＬＳＴは８バイトのデータをその先頭から２バイト単位で指定するためのバイトアドレスのオフセット値の配列とすることができる。この場合、８バイトの基点となる先頭アドレスを保持しておく必要があり、次のアドレスは先頭のアドレスにオフセット値を加算していくことで、次々に生成することができる。これに応じてランダムテーブルＲＴＢＬは、前記オフセット値の配列を４ｉ＝２４通り備えたデータテーブルとして不揮発性メモリ１０３に構成される。例えば、先頭バイトアドレスを基点としたバイトアドレスの差分をアドレスオフセットとし、第１バイト、第３バイト、第５バイト、第７バイトの夫々の先頭を０，２，４，６とすると、テーブル要素は、次の２４通りになる。
(0,2,4,6,), (0,2,6,4), (0,4,6,2), (0,4,2,6), (0,6,2,4,), (0,6,4,2), 
(2,0,4,6,), (2,0,6,4), (2,4,6,0), (2,4,0,6), (2,6,0,4,), (2,6,4,0), 
(4,2,0,6,), (4,2,6,0), (4,0,6,2), (4,0,2,6), (4,6,2,0,), (4,6,0,2), 
(6,2,4,0,), (6,2,0,4), (6,4,0,2), (6,4,2,0), (6,0,2,4,), (6,0,4,2). 
リストＬＳＴは、上記に限定されず、次に参照する２バイト単位のアドレスへの差分値の配列とすることも可能である。この場合、基点となる先頭アドレスを保持しておく必要がなく、次のアドレスは現在のアドレスに差分（テーブルで参照したリストの要素）を加算していくことで、次々に生成することができる。これに応じてランダムテーブルＲＴＢＬは、前記オフセット値の配列を４ｉ＝２４通り備えたデータテーブルとして不揮発性メモリ１０３に構成され、テーブル要素は、次の２４通りになる。
(0,2,2,2), (0,2,4,-2), (0,4,2,-4), (0,4,-2,4), (0,6,-4,2), (0,6,-2,-2),
(2,-2,4,2), (2,-2,6,-2), (2,2,2,-6), (2,2,-4,6), (2,4,-6,4), (2,4,-2,-4),
(4,-2,-2,6), (4,-2,4,-6), (4,-4,6,-4), (4,-4,2,4), (4,2,-4,-2), (4,2,-6,2),
(6,-4,2,-4), (6,-4,-2,4), (6,-2,-4,2), (6,-2,-2,-2), (6,-6,2,2), (6,-6,4,-2).
ランダムテーブルＲＴＢＬからリストＬＳＴを参照するには乱数発生器１０５で発生した乱数Ｒ０に対する２４の剰余Ｒを演算し（Ｒ＝Ｒ０％２４）、その剰余ＲをランダムテーブルＲＴＢＬの先頭アドレスに対するオフセットとしてリストＲＳＴをインデックスする。このようにしてランダムテーブルＲＴＢＬの２４個のエントリの中から１個がインデックスされる。例えば図５においてインデックスされたリストＬＳＴの比較順序データＬ［０］，Ｌ［１］，Ｌ［２］，Ｌ［３］はオフセットアドレス２，６，０，４とされる。
【０１０９】
図６にはインデックスされたリストＬＳＴが図５の場合における夫々８バイトの暗号化処理情報Ａｄａｔ，Ｂｄａｔに対する分割部分の２バイト単位の比較順序が例示される。選択ロジック２００は、リストＬＳＴのデータＬ［０］，Ｌ［１］，Ｌ［２］，Ｌ［３］の順に夫々のオフセットアドレスにしたがって２バイト単位の分割部分同士を選択する。比較演算ロジック３００は選択された順に比較を行っていく。即ち、最初のＬ［０］＝２に対応して８バイトの先頭から２バイトのオフセット位置を先頭とする２バイト分割データＡ［１］とＢ［１］が選択されて比較ロジックに供される（Ｓｔｅｐ１）。次に、Ｌ［１］＝６に対応して８バイトの先頭から６バイトのオフセット位置を先頭とする２バイト分割データＡ［３］とＢ［３］が選択されて比較ロジックに供される（Ｓｔｅｐ２）。更にＬ［２］＝０に対応して８バイトの先頭から２バイト分割データＡ［０］とＢ［０］が選択されて比較ロジックに供される（Ｓｔｅｐ３）。最後に、Ｌ［３］＝４に対応して８バイトの先頭から４バイトのオフセット位置を先頭とする２バイト分割データＡ［２］とＢ［２］が選択されて比較ロジックに供される（Ｓｔｅｐ４）。比較結果ＲＳＬＴはＲＡＭ１０２のワークエリアに一時的に格納される。
【０１１０】
《ＸＯＲを用いた分割部分同士の比較演算ロジック》
図２に例示されるように、ＸＯＲを用いた分割部分同士の比較演算ロジック３００、前記分割部分同士の比較を、一方の分割部分をそれと同じビット数の１，０混在の定数とビット単位の排他的論理和を採り、その排他的論理和結果を他方の分割部分とビット単位の排他的論理和を採る処理を基本とする。単なる排他的論理和では分割部分同士が一致の場合に演算結果が全ビット０になり一致の場合と不一致の場合とでハミングウェイトの相違が顕著になってしまうからである。したがって初期値とのＸＯＲを最初に行う。特に、初期値を定数０ｘ５５５５としておくと、２回のＸＯＲ演算を行った結果、２数が等しい場合の結果として０ｘ５５５５が得られ、期待する演算結果におけるハミングウェイトの偏りを最小にする事ができる。
【０１１１】
例えば、３０１，３０２、３０３はＣＰＵ１０１の汎用レジスタであり、汎用レジスタ３０３の上位２バイトには１，０混在の２バイトの定数がセットされる。１，０混在の定数としてはＸＯＲ演算結果のハミングウェイトに大きな相違をもたらし難いパターンが望ましく、１６進数標記で「０ｘ５５５５」又は「０ｘＡＡＡＡ」が好適である。図２では「０ｘ５５５５」がセットされるものとする。汎用レジスタ３０２の上位２バイトには暗号化処理情報Ｂｄａｔの分割データＢ［０］，Ｂ［１］，Ｂ［２］，Ｂ［３］が順位セットされる。汎用レジスタ３０１の上位２バイトには暗号化処理情報Ａｄａｔの分割データＡ［０］，Ａ［１］，Ａ［２］，Ａ［３］が順位セットされる。特に夫々の汎用レジスタ３９０１，３０２，３０３の下位２バイトには乱数ｒ１、ｒ２、ｒ３が併せてセットされる。汎用レジスタ３０３と３０２のセットされたデータはビット単位で排他的論理（ＸＯＲ）３１０が採られ、更に、その結果と汎用レジスタ３０１にセットされたデータがビット単位で排他的論理（ＸＯＲ）３１１が採られる。その結果は汎用レジスタ３０４に格納される。排他的論理（ＸＯＲ）演算はＣＰＵの演算回路を用いて行えばよい。
【０１１２】
暗号化処理情報の分割データＡ［ｉ］とＢ［ｉ］（ｉ＝０，１，２，３）が一致する場合、２回の排他的論理和によって汎用レジスタ３０４の上位２バイトに得られる結果は「０ｘ５５５５」になる。不一致の場合には全ビット０又は１になる可能性は否定できないので、極力、排他的論理和演算結果のハミングウェイトの相違を小さくするために下位側２バイトには乱数ｒ１、ｒ２、ｒ３を配置してある。このとき、演算毎に毎回新たな乱数を発生させて汎用レジスタにセットする処理を軽減するために、一つの乱数ｒ2のみ変更対象とし、その変更内容を例えば演算毎に毎回1ビットのビットローテーションを行うようにする。即ち、レジスタ３０２の下位側２バイトの乱数部を１ビット左巡回シフトして保存する。
【０１１３】
比較演算ロジック３００による一組に暗号化処理情報ＡｄａｔとＢｄａｔに対する演算結果ＲＳＬＴは例えばＲＡＭ１０２のワーク領域にストアされる。
【０１１４】
《暗号化処理情報ＡｄａｔとＢｄａｔとの一致判別演算ロジック》
図７には演算結果ＲＳＬＴに基づいて暗号化処理情報ＡｄａｔとＢｄａｔが一致すか否かを判別する演算ロジックが例示される。暗号化処理情報ＡｄａｔとＢｄａｔが一致する場合には８バイトの演算結果ＲＳＬＴは０，１の定数になる。一致判別演算ロジック４００は、比較演算ロジック３００による演算結果ＲＳＬＴに対して、一部の２バイトデータＲ［３］を定数０ｘ５５５５と論理和（ＯＲ）４１０を採る。その結果を次の下位データＲ［２］と論理和（ＯＲ）４１１を採り、この論理和結果をその次に下位データＲ［１］と論理和（ＯＲ）４１２を採り、最後にこの論理和結果をデータＲ［０］と論理和（ＯＲ）４１３を採り、その演算結果をＯＲ演算結果（２バイト）４０１とする。更に、比較演算ロジック３００による演算結果ＲＳＬＴに対して、一部の２バイトデータＲ［３］を定数０ｘ５５５５と論理積（ＡＮＤ）４２０を採る。その結果を次に下位データＲ［２］と論理積（ＡＮＤ）４２１を採り、この論理和結果をその次の下位データＲ［１］と論理積（ＡＮＤ）４２２を採り、最後にこの論理積結果をデータＲ［０］と論理積（ＡＮＤ）４２３を採り、その演算結果をＡＮＤ演算結果（２バイト）４０２とする。ＯＲ演算結果４０１とＡＮＤ演算結果４０２との論理積（ＡＮＤ）４３０の結果は２バイトで与えられ、これが最終的な８バイトの暗号化処理情報ＡｄａｔとＢｄａｔとの比較結果４０３となる。論理積（ＡＮＤ）４３０の結果４０３が０ｘ５５５５である場合には２つの数ＡｄａｔとＢｄａｔの値が等しく、それ以外の値のときには等しくないことを意味する。
【０１１５】
ここで、ＯＲ演算結果４０１とＡＮＤ演算結果４０２の双方を求めて論理積と採るのは以下の理由による。即ち、実際には稀ながら、以下のような場合があるため両方の演算が必要となる。例えば、演算対象が(０ｘＦＦＦＦ、０ｘ５５５５)のとき双方の論理積結果はＡＮＤ＝０ｘ５５５５、論理和結果はＯＲ＝０ｘＦＦＦＦになる。これは２値が違うのに、論理積結果は２値が同じであることを意味する０ｘ５５５５となって、誤りを生ずることになる。一方、演算対象が(０ｘ００００，０ｘ５５５５)のとき双方の論理積結果はＡＮＤ＝０ｘ００００、論理和結果はＯＲ＝０ｘ５５５５となる。これは２値が違うのに、論理和結果は２値が同じであることを意味する０ｘ５５５５となって、誤りを生ずることになる。従って、ＡＮＤ＝ＯＲ＝０ｘ５５５５であるときに、結果が正しい（２値が等しい）と判定することによって誤りを生ずる虞を未然に防止することができる。
【０１１６】
《８の倍数バイトを有する暗号化処理情報に対する比較処理》
図８には８の倍数バイトを有する暗号化処理情報に対して８バイト単位の処理を集計する暗号化処理の処理手順が例示される。ここでは８×ｎ（例えばｎ＝３）バイトの暗号化処理情報Ａｄａｔ，Ｂｄａｔを処理対象とする。ｎ個の８バイトデータの結果を集計することによって、８×ｎバイトデータについては、上述した８バイトの暗号化処理情報に対する比較処理をｎ回繰り返すことによって、８×ｎバイト長の暗号化処理情報Ａｄａｔ，Ｂｄａｔの比較を行うことができる。例えば、トリプルＤＥＳの暗号鍵の長さは１９２バイトであるため、ｎ＝３である。
【０１１７】
ｎ回の８バイトを処理する順番についてもやはりサイドチャネルアタックに対するリーク対策の観点から、ランダムであることが望ましい。そこで、ｎが固定である場合には、図５で説明したランダムテーブルＲＴＢＬと同様の考え方に基づいて分割部分同士の比較順序を可変に設定するためのランダムテーブルを用意しておくことが望ましい。
【０１１８】
処理手順を示す図８において、８バイト比較処理５００＿１，５００＿２，５００＿３の夫々は図２及び図６で説明した選択ロジック２００及び比較演算ロジック３００による処理である。８バイト比較結果ＲＳＬＴ＿１，ＲＳＬＴ＿２，ＲＳＬＴ＿３は夫々の８バイト比較処理５００＿１，５００＿２，５００＿３の結果であり、図２及び図６で説明した演算結果ＲＳＬＴに相当する。
【０１１９】
図８の８バイト比較結果ＲＳＬＴ＿１と定数０ｘ５５５５との論理和演算処理５１０は、図７において演算結果ＲＳＬＴからＯＲ演算結果４０１を得る処理に相当する。論理和演算処理５１０の結果と８バイト比較結果ＲＳＬＴ＿２との論理和演算処理５１１についてもその論理和演算処理手法は５１０と同様である。論理和演算処理５１２についても同様であり、その演算結果が２バイトのＯＲ演算結果（Ｒ＿ＯＲ）５３０となる。図８の８バイト比較結果ＲＳＬＴ＿１と定数０ｘ５５５５との論理積演算処理５２０は、図７において演算結果ＲＳＬＴからＡＮＤ演算結果４０２を得る処理に相当する。論理積演算処理５２０の結果と８バイト比較結果ＲＳＬＴ＿２との論理積演算処理５２１についてもその論理和演算処理手法は５２０と同様である。論理積演算処理５２２についても同様であり、その演算結果が２バイトのＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１となる。
【０１２０】
ここでは、８×ｎバイトの演算結果５３０は、３２ビットのレジスタの上位にＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１を、下位にＯＲ演算結果（Ｒ＿ＯＲ）５３０を格納して取得するものとする。以下に説明するリターンコードの生成処理にて論理積と採るのと同様の処理を行うため、省略した。図７のようにＡＮＤ演算結果５３１とＯＲ演算結果５３０との論理積を採ることを妨げるものではない。
【０１２１】
《リターンコード生成処理》
図９には８バイト単位の処理の結果を集計した８×ｎバイトの演算結果５３０について関数の戻り値として定義された定数をリターンコードとして出力する処理手順が例示される。
【０１２２】
比較対象とされる暗号化処理情報ＡｄａｔとＢｄａｔが一致する場合のリターンコードを０ｘ５５、不一致の場合のリターンコードを０ｘＡＡとする。双方のリターンコードは共にビット１と０の個数が同じであり、リターンコードの種類はハミングウェイトに差をもたらさない。
【０１２３】
先ず、ＣＰＵ１０１はレジスタＲ０Ｌに初期値０ｘ５５をセットする（Ｓ１）。
【０１２４】
次に、図８で説明したＯＲ演算結果（Ｒ＿ＯＲ）５３０とＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１が配列された３２ビットのデータと定数０ｘ５５５５５５５５との差分を演算して、その演算結果に応じたコンディションコードレジスタのゼロフラグ（Ｚ−ｆｌａｇ）の操作を行う（Ｓ２）。ＯＲ演算結果（Ｒ＿ＯＲ）５３０とＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１とが夫々０ｘ５５５５であれば差はゼロである。ゼロであればゼロフラグを１にセットし、コンディションコードレジスタのゼロフラグの値をレジスタＥＲ０に反映する（Ｓ３）。
【０１２５】
次にラベル＃ＬＡＶＥＬで示されるアドレスに保有されているデータにレジスタＥＲ０の値を加算してレジスタＥＲ０にアドレスを生成する（Ｓ４）。生成されたアドレスは、一致の場合には０ｘ０４、不一致の場合には０ｘ００にされ、相違は１ビットのみとされる。そのアドレスによってルックアップテーブルが参照される（Ｓ５）。参照アドレスが０ｘ０４の場合には参照値は０ｘ５５、参照アドレスが０ｘ００の場合には参照値は０ｘＡＡとされ、その値がリターンコードとしてレジスタＲ０Ｌにセットされる。
【０１２６】
これによれば、比較対象の一致または不一致の判別結果、をコンディションコードレジスタのゼロフラグに反映するから、判別結果に応じてその処理ステップ数に変わりはない。コンディションコードレジスタを用いて生成するアドレスは比較対象の一致または不一致に応じてアドレスビットの１ビットだけの相違とされるから、生成される双方のアドレスの点においても、ハミングウェイトの相違を最大限に縮小することができる。更に、当該アドレスで参照される値０ｘ５５，０ｘＡＡも一致または不一致に応じてデータビットの１ビットだけの相違とされるから、双方の参照値の点においても、ハミングウェイトの相違を最大限に縮小することができる。
【０１２７】
図１０は図９の処理手順を考える一つ前に検討した処理手順を示す。
【０１２８】
先ず、ＣＰＵ１０１はレジスタＲ０Ｌに初期値０ｘ５５をセットし、レジスタＲ２Ｌに０ｘ００をセットする（Ｓ１１）。
【０１２９】
次に、図８で説明したＯＲ演算結果（Ｒ＿ＯＲ）５３０とＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１が配列された３２ビットのデータと定数０ｘ５５５５５５５５との差分を演算し（Ｓ１２）、その演算結果に応じたコンディションコードレジスタのゼロフラグ（Ｚ−ｆｌａｇ）の操作を行う（Ｓ１３）。ＯＲ演算結果（Ｒ＿ＯＲ）５３０とＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１とが夫々０ｘ５５５５であれば差はゼロである。ゼロであればゼロフラグを１にセットする。
【０１３０】
次にゼロフラグの反転ビットを用いてキャリーフラグ（Ｃａｒｒｙ−ｆｌａｇ）をセットする（Ｓ１４）。ゼロフラグがゼロであればキャリーフラグがセットされる。そしてレジスタＲ２Ｌの値０ｘ００からキャリーフラグの値を減算して、その減算結果をレジスタＲ２Ｌに書き戻す（Ｓ１５）。Ｒ＿ＯＲとＲ＿ＡＮＤが夫々０ｘ５５５５で一致のときはレジスタＲ２Ｌの値は０ｘ００、不一致のときは０ｘＦＦとされる。リターンコードはレジスタＲ０Ｌの値０ｘ００とレジスタＲ２Ｌとの排他的論理和の結果とされ、上記一致の場合は０ｘ５５、不一致の場合は０ｘＡＡとなる（Ｓ１６）。しかしながら、この処理手順の場合は、ステップＳ１５でレジスタＲ２Ｌに得られる値が０ｘ００又は０ｘＦＦとなり、双方の間でハミングウェイトの相違が最大になり、この点で、サイドチャネルアタックに際してリークを生ずる虞が高くなる。
【０１３１】
図１１は処理ステップ数の相違という点でリークを生ずる虞の高い処理手順を例示する。
【０１３２】
先ず、ＣＰＵ１０１はレジスタＲ０Ｌに初期値０ｘ５５をセットする（Ｓ２１）。
【０１３３】
次に、図８で説明したＯＲ演算結果（Ｒ＿ＯＲ）５３０とＡＮＤ演算結果（Ｒ＿ＡＮＤ）５３１ｆが夫々定数０ｘ５５５５に一致するか否かを判決する（Ｓ２２）。不一致であればレジスタＲ０Ｌの値を反転させ、一致であればその処理をスキップする。これによってレジスタＲ０Ｌにリターンコードを得る。
【０１３４】
この処理手順は判定の結果によりジャンプ命令を用いて条件分岐を行うから、等しいか等しくないかで処理時間に差が生じることになる。このような時間差はリークを発生させる大きな要因となる。図９及び図１０の処理手順はタイミング的な要因によるリークは抑止される。図１０による処理手順は前述の如くハミングウェイトの相違によるリークの虞が残っている。図９による処理手順はハミングウェイトの相違によるリークの虞も解消されている。
【０１３５】
上記実施の形態２による以下の作用効果を以下にまとめる。ポイントはハミングウェイトの偏りを減らす効果がある。鍵の値を処理する際の消費電流などに代表されるサイドチャネルアタックにおいて特定波形を選別することが難しくなり、サイドチャネル解析を難しくする。具体的には以下の作用効果による。
【０１３６】
（１）分割部分の比較順序を可変とすることによって比較対象の一致又は不一致に拘わらずハミングウェイトの相違は顕著にならず、また、一致か否かの判別には分割部分同士の比較を全部行うから比較対象の一致又は不一致に拘わらず処理ステップ数も変わらない。
【０１３７】
（２）定数と２つのデータの排他的論理和をとるために、２回の排他的論理和演算を行うから、２つの値の単なる排他的論理和演算の場合のように一致の演算結果が０になって一致の場合と不一致の場合とでハミングウェイトの違いが顕著に現れてしまうことを阻止できる。分割部分同士が不一致の場合との間でのハミングウェイトの相違が顕著になることはない。
【０１３８】
（３）分割部分同士の排他的論理和演算に際してダミーデータ（乱数）を付加するので、分割部分同士が一致の場合と不一致の場合との間でのハミングウェイトの相違を更に縮小することができる。
【０１３９】
（４）乱数のダミーデータに対してビットローテーションを行うので、ダミーデータ部分のハミングウェイトの偏りを簡単に低減させることができる。
【０１４０】
（５）ＣＰＵが実行して上記比較処理を実現する検証処理プログラムを提供することにより、セキュアマイクロコンピュータなどにおいて暗号化処理情報が改竄されたか否かを判別する検証処理部を容易に実現できるようになる。
【０１４１】
＜実施の形態３＞
《任意データ長を有する暗号化処理情報》
実施の形態２では暗号化処理情報Ａｄａｔ，Ｂｄａｔは、例えばＭバイトのＮ倍のデータ長、例えば８×３バイトのような、８の倍数バイトを有するものとして説明した。しかしながらこれに限定されるものではなく、任意バイト長のデータに対してもほぼ同様に処理する事ができる。実施の形態３ではそのときの処理との相違点について説明する。
【０１４２】
例えば前記比較対象とされる暗号化処理情報がＭ×Ｎ＋Ｌのバイト長（Ｍは４以上の整数、Ｎは正の整数であって、Ｌは２の倍数であってＬ＜Ｍ）のデータ長を有するとき、前記暗号化処理情報をＮ−１個のＭバイトとＭ＋Ｌバイトに分割する。分割部分の２バイト単位の比較順序を可変にしてＭバイト毎の比較とＭ＋Ｌバイトの比較を行い、Ｍバイト毎の比較とＭ＋Ｌバイトの比較との全部の比較結果を用いて前記比較対象が一致するか否かを判別すればよい。
【０１４３】
例えばＭ＝８、Ｎ＝ｎ、Ｌ＝ｍ（＝０，２，４，６）とする。この場合、実施の形態２と同様の８バイト単位の比較処理をｎ−１回行うと共に、８＋ｍバイトの比較処理を１回行って、それらを集計すればよい。このときハミングウェイトの偏りを減らすためにランダム化の観点は、第１には実施の形態２と同様に、８バイト単位の比較処理におけるｎバイト（例えば２バイト）単位の分割部分同士の比較演算の処理順と、８＋ｍバイトの比較処理におけるｎバイト（例えば２バイト）単位の分割部分同士の比較演算の処理順である。第２には８バイト単位の比較処理系列に対して８＋ｍバイトの比較処理をどこで行うかの順番である。
【０１４４】
図１２にはランダム比較処理の第２の観点における８＋ｍバイトの比較処理順のランダム化方式について例示される。暗号化処理情報が格納されているメモリエリアの先頭アドレスをＡＤＲＳ、エンドアドレスをＡＤＲＥとする。処理先頭ポインタＳＰには暗号化処理情報が変化される毎に０からｎの間の任意の値がセットされる（０≦ＳＰ＜ｎ）。ＳＰにセットされる値は乱数に対する値ｎの剰余などとすればよい。例えばＳＰ＝３とすると、先頭から２４バイト目のアドレスを処理スタートアドレスとし、最初に、８＋ｍバイトの比較処理を行い、その後は順位８バイトごとに暗号化処理情報を一巡するように比較処理を行っていけばよい。
【０１４５】
ランダム比較処理の第１の観点におけるｎバイト（例えば２バイト）単位の分割部分同士の比較処理順のランダム化については実施の形態２で説明したランダムテーブルＲＴＢＬをから選択してリストＲＳＴを用いるようにすればよい。分割部分のバイト数が２バイト程度であればランダムテーブルＲＴＢＬのエントリ数は少なくて済むが、Ｍ＝１６で、ｎが８の場合には、テーブルエントリ数が激増し、ランダムテーブルＲＴＢＬの記憶容量が大きくなり過ぎる。そのような場合を想定すると、シャッフルアルゴリズムを用いてランダム化することも得策となる。尚、Ｍは８の倍数に限定されない。
【０１４６】
ランダム比較処理の第１の観点における８＋ｍバイトの比較処理におけるｎバイト（例えば２バイト）単位の分割部分同士の比較演算の処理順のランダム化については、ｍの値が固定でなければｍ＝０，２，４，６の場合のランダムテーブルを用意しなければならず不経済であるから、この場合にはランダムテーブルを使わずにシャッフルアルゴリズムを用いるのが得策である。
【０１４７】
前述に通り、任意バイト長Ｌ（Ｌは８の倍数とは限らない。ただし偶数とする）のデータを処理する場合には、Ｌ＝８×ｎ＋ｍ（ｎ，ｍは整数、ｍ＝Ｌ％８で偶数であることから０，２，４，６のいずれかの値)とすると、例えば、実施の形態２の比較処理をｎ−１回行うほかに、８＋ｍのデータに対する比較処理を行わなければならない。８＋ｍはｍの取り得る値により、８＋ｍの値は８，１０，１２，１４バイトのいずれかの値となるので、その値によって、２バイト比較の順番を決定するリストを生成するために、データシャッフルを行うことが得策である。シャッフルを行うアルゴリズムは、シャッフル結果に偏りがないものであれば何でもよい。例えば、フィッシャーイェーツシャッフル（Fisher-Yates shuffle）アルゴリズムを使用する。図１３にはフィッシャーイェーツシャッフルアルゴリズムの概念が概略的に示される。フィッシャーイェーツシャッフルアルゴリズムは、注目する配列インデックスをｉとし、ｉに配列終端のインデックスを代入する。配列の先頭からインデックスｉまでの間から１つのインデックスを選びｊとする。配列のインデックスｉとインデックスｊの位置の値を交換する。インデックスｉから１を引き、新たなインデックスｉとし、ふたたびインデックスｊをランダムに選び中身を交換する処理に戻る。これを、インデックスｉの値が配列の先頭に達するまで繰り返す。シャッフルされたリストの値は、常に一定になるということはない。
【０１４８】
フィッシャーイェーツシャッフルアルゴリズムについては、文献「Paul E. Black, "Fisher-Yates shuffle", in Dictionary of Algorithms and Data Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology. 23 May 2011. (accessed TODAY) Available from: http://www.nist.gov/dads/HTML/fisherYatesShuffle.html」がある。
【０１４９】
８＋ｍのデータに対する比較処理用のリストを生成後、まずそのリストを参照して８＋ｍのデータに対する比較処理を行う。その開始位置ＳＰは、0以上ｎ未満の整数であり、前述の通り乱数で決められる。８＋ｍのデータに対する比較処理が終わると、続けて８バイト単位の比較処理を行う。以降はサイクリックに処理を行うため、データの終りに達すると先頭に戻り、開始した位置に戻るまで合計ｎ−１回の処理を繰り返す。個々の比較結果を用いて最終結果のための集計処理は、図７及び図８に基づいて説明した処理手順を採用すればよい。
【０１５０】
実施の形態３によれば以下の作用効果がある。
【０１５１】
一般的な演算対象は常に８バイトの倍数あるいは固定バイト長とは限らないので、任意バイト長をサポートする実施の形態２によれば、比較処理に対して汎用的な機能を提供することができる。
【０１５２】
＜実施の形態４＞
図１４には暗号コプロセッサ１０４の更に具体的な例が示される。適用可能な暗号化復号アルゴリズムはＤＥＳ（Data Encryption Standard）に準拠する場合に限らず、ＡＥＳ (Advanced Encryption Standard)などに準拠するものであってもよい。例えばＡＥＳに準拠する場合は図１４に例示されるように、暗号コプロセッサ１０４は、ＡＥＳ鍵レジスタ（ＡＣＫＲ）６００、ＡＥＳコントロールレジスタ（ＡＣＣＲ）６０１、ＡＥＳ入出力データ暗号化レジスタ６０２、ＡＥＳ平文／暗号文レジスタ（ＡＣＭＲ）６０３、及びＡＥＳ初期化ベクトルレジスタ（ＡＣＶＲ）６０４を有する。更に、セレクタ６０５及びＡＥＳコプロセッシングユニット６０６を有する。
【０１５３】
ＡＥＳ鍵レジスタ６００にはＣＰＵ１０１から秘密鍵が転送される。鍵長は１２８ビット、１９６ビット、又は２５６ビットとされる。ＡＥＳコントロールレジスタ６０１はＣＰＵから制御データ予備制御コマンドがセットされる。ＡＥＳ平文／暗号文レジスタ６０３は暗号化対象とされる平文、暗号化された暗号文がセットされる。ＡＥＳ入出力データ暗号化レジスタ６０２は６０３の入出力データを暗号化するための鍵が設定される。ＡＥＳ初期化ベクトルレジスタ６０４はCBC（block cipher mode）モードおよびOFB（output feedback mod）モードで使用する初期化ベクトルがセットされる。ＡＥＳコプロセッシングユニット６０６は暗号鍵のデータや平分を受けとり、コマンドにしたがって暗号化演算とそのシーケンス制御を行い、必要に応じて復号演算を行う。ＡＥＳコプロセッシングユニット６０６は暗号演算に際して前記比較処理を行う。
【０１５４】
図１５にはサイドチャネルアタック対策の処理を含んだ暗号化処理の全体的な処理フローが例示される。図１５の処理については便宜上図４と整合させて説明する。
【０１５５】
秘密鍵（Ｋ）を演算レジスタＣＰＲＥＧ１にロードする（Ｓ１００）。入力データとしての平文（Ｍ）を演算レジスタＣＰＲＥＧ２にロードする（Ｓ１０１）。暗号化ロジックＥＣＲＰＴで暗号処理を実行する（Ｓ１０２）。暗号文（Ｃ）を演算レジスタＣＰＲＥＧ３に出力する（Ｓ１０３）。この後検算１を実行するかを判別する（Ｓ１０４）。
【０１５６】
検算１を実行する場合には、暗号文（Ｃ）を復号ロジックＤＣＲＰＴで復号し、復号された平文（Ｍ’）を演算レジスタＣＰＲＥＧ４に格納する（Ｓ１０５）。ＣＰＵ１０１は演算レジスタＣＰＲＥＧ４から復号された平文（Ｍ’）を読み込む（Ｓ１０６）。ＣＰＵ１０１は読み込んだ平文（Ｍ’）と元の平文（Ｍ）との比較処理を行う（Ｓ１０７）。ＣＰＵ１０１は比較処理結果に対して、ＭとＭ’が等しいか否かを判別する（Ｓ１０８）。両者が等しければ途中で暗号鍵又は平文の改竄が行われておらず、暗号化計算が正しく行われていることが確認できる。ステップＳ１０８の判別によって一致であったときは更に検算２を実行するか否かが判別される（Ｓ１０９）。
【０１５７】
検算２を実行する場合、ＣＰＵ１０１が演算レジスタＣＰＲＥＧ１から秘密鍵（Ｋ’）を読み込む（Ｓ１１０）。ＣＰＵ１０１は読み込んだ秘密鍵Ｋ’と元の鍵Ｋとの比較処理を行う（Ｓ１１１）。ＣＰＵ１０１は比較処理結果に対して、ＫとＫ’が等しいか否かを判別する（Ｓ１１２）。両者が等しければ途中で暗号鍵の改竄が行われておらず、暗号化計算が正しく行われていることが確認できる。ステップＳ１１２の判別によって一致であったときは更に検算２を実行するか否かが判別される（Ｓ１０９）。
【０１５８】
その判別結果が一致のときは演算レジスタＣＰＲＥＧ３の暗号文を外部に出力して正常終了する。
【０１５９】
ステップＳ１０８又はＳ１１２で不一致を判別したときは、リセットなどによってＣＰＵの動作を停止させ、或いは他の例外処理や割込み処理によって、上記不一致に係る別のエラー処理行う。
【０１６０】
本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１６１】
例えば秘密鍵はＤＥＳ又はＡＥＳに準拠するものに限定されない。データ処理装置はＩＣカードマイクロコンピュータ若しくはセキュアマイコンと称されるシングルチップのマイクロコンピュータに限定されない。マルチチップで単一パッケージに収容されたモジュール構成のマイクロコンピュータ、更にはその他のシングルチップ形態の半導体集積回路に広く適用する事が可能である。
【０１６２】
検証処理部はＣＰＵとその動作プログラムで構成されたプログラム処理部に限定されず、全部又は一部をハードロジックに置き換えて構成することも可能である。暗号化処理部は暗号コプロセッサに限定されない。これについても一部または全部をハードロジックに置き換えて構成することも可能である。
【０１６３】
１，０混在の定数は０ｘ５５５５又は０ｘＡＡＡＡに限定されず、その他任意の１，０を含むパターンであればよい。但し、ハミングウェイトの偏りという観点からすれば、上記が好適である。
【０１６４】
分割部分同士のＸＯＲ演算ではその上位又は下位に連数を付加したが、ハミングウェイトの偏りという観点をある程度犠牲にする場合には、その付加を要しない。一つの乱数に対するビットローテーションにつても同様である。また、判別のリターンコードの返し方についても図１１のような判別結果に応じて処理ステップを変更する場合においても、ダミーステップを採用してタイミング的なリークの虞を抑制するようにしてもよい。
【０１６５】
また、検証処理は復号やその他のデータ処理に際しても適用することが可能である。暗号化処理への適用が好適であるが、其れに限定されることはない。
【０１６６】
検証処理プログラムにおける制御手順は実施の形態２で説明した手順に限定されず、実施の形態３で説明した手順も当然採用可能である。検証処理プログラムはフラッシュメモリなどの不揮発性記憶装置に格納して提供するだけでなく、磁気記憶装置、光ディスクなどから読み込み、或いは、外部のネットワークからダウンロードするように、提供することも可能である。
【符号の説明】
【０１６７】
１００  マイクロコンピュータ（ＭＣＵ）
１０６  内部バス１０６
１０１  中央処理装置（ＣＰＵ）
１０２  ＲＡＭ１０２
１０３  不揮発性メモリ
１０４  暗号コプロセッサ（ＣＯＰＲＯ)
１０５乱数生成器
１０７  入出力回路
ＡＤＲ１，ＡＤＲ２  メモリアドレス
ＣＰＲＥＧ１，ＣＰＲＥＧ２  演算レジスタ
ＣＰＲＥＧ３  演算結果レジスタ
ＣＭＰ１、ＣＭＰ２，ＣＭＰ３  比較する処理
Ａｄａｔ、Ｂｄａｔ  比較対象とされる暗号化処理情報
Ａ［０］，Ａ［１］，Ａ［２］，Ａ［３］  暗号化処理情報Ａｄａｔの４分割のデータ
Ｂ［０］，Ｂ［１］，Ｂ［２］，Ｂ［３］  暗号化処理情報Ｂｄａｔの４分割のデータ
ＬＳＴ  リストＬＳＴ
２００  選択ロジック
３００  比較演算ロジック
ＲＴＢＬ  ランダムテーブル
Ｌ［０］，Ｌ［１］，Ｌ［２］，Ｌ［３］  リストＬＳＴの比較順序データ
３０１，３０２、３０３  ＣＰＵ１０１の汎用レジスタ
ｒ１、ｒ２、ｒ３  乱数
３１０、３１１  排他的論理（ＸＯＲ）
３０４  汎用レジスタ
ＲＳＬＴ  演算結果
Ｒ［０］，Ｒ［１］，Ｒ［２］，Ｒ［３］  演算結果のデータ
４０１  ＯＲ演算結果
４０２  ＡＮＤ演算結果
４０３  ８バイトの比較演算結果
４１０，４１１，４１２，４１３  論理和（ＯＲ）
４２０，４２１，４２２，４２３  論理積（ＡＮＤ）
４３０  論理積（ＡＮＤ）
５００＿１，５００＿２，５００＿３  ８バイト比較処理
ＲＳＬＴ＿１，ＲＳＬＴ＿２，ＲＳＬＴ＿３  ８バイト比較結果
５１０，５１１，５１２  論理和演算処理
５３０  ＯＲ演算結果（Ｒ＿ＯＲ）
５２０，５２１，５２２  論理積演算処理
５３１  ＡＮＤ演算結果（Ｒ＿ＡＮＤ）
６００  リターンコード生成処理
ＡＤＲＳ  先頭アドレス
ＡＤＲＥ  エンドアドレス
ＳＰ  処理先頭ポインタ
６００  ＡＥＳ鍵レジスタ（ＡＣＫＲ）
６０１  ＡＥＳコントロールレジスタ（ＡＣＣＲ）
６０２  ＡＥＳ入出力データ暗号化レジスタ
６０３  ＡＥＳ平文／暗号文レジスタ（ＡＣＭＲ）
６０４  ＡＥＳ初期化ベクトルレジスタ（ＡＣＶＲ）
６０５  セレクタ
６０６  ＡＥＳコプロセッシングユニット
【図１】
2013255157.tif 000003
【図２】
2013255157.tif 000004
【図３】
2013255157.tif 000005
【図４】
2013255157.tif 000006
【図５】
2013255157.tif 000007
【図６】
2013255157.tif 000008
【図７】
2013255157.tif 000009
【図８】
2013255157.tif 000010
【図９】
2013255157.tif 000011
【図１０】
2013255157.tif 000012
【図１１】
2013255157.tif 000013
【図１２】
2013255157.tif 000014
【図１３】
2013255157.tif 000015
【図１４】
2013255157.tif 000016
【図１５】
2013255157.tif 000017