(57)【要約】【課題】暗号処理回路の耐タンパ性の評価をより効率的に行う。【解決手段】暗号処理回路が処理を行う際の消費電力データを取得する代わりに、暗号処理回路が所定の順序で行う１０段のラウンド処理のうち最終段の処理を含むラウンド９，１０の処理を行う短縮モードの評価用回路を作成し（ステップＳ１００）、暗号処理回路に入力するテストベンチデータから評価用データを導出し（ステップＳ１６０）、これらを用いて短縮モードの評価用回路に評価用データを入力したときの消費電力データを含む消費電力テーブルを複数取得する（ステップＳ１７０）。そして、この複数の消費電力テーブルに基づいて暗号処理回路の耐タンパ性の評価を行う（ステップＳ１８０）。【選択図】図７
2013247511.tif 000002
【特許請求の範囲】
【請求項１】
所定の順序で行う複数段の処理を含む処理を行う暗号処理回路の耐タンパ性評価方法であって、
（ａ）前記複数段の処理のうち最終段の処理を含む前記暗号処理回路の一部の処理を行う評価用回路に入力データと暗号鍵データとからなる評価用データを入力して、該評価用データに基づく処理を行う際の該評価用回路におけるサイドチャネル情報を取得するサイドチャネル情報取得処理を行い、該サイドチャネル情報取得処理を複数の前記評価用データについて行って複数のサイドチャネル情報を取得するステップと、
（ｂ）前記複数のサイドチャネル情報に基づいて、前記暗号処理回路の耐タンパ性の評価を行うステップと、
を含む耐タンパ性評価方法。
【請求項２】
前記ステップ（ａ）では、前記暗号処理回路に入力する入力データと暗号鍵データとに基づいて、該入力データと暗号鍵データとを入力したときの該暗号処理回路の出力データと、前記評価用データを入力したときの前記評価用回路の出力データと、が同じ値になるような前記評価用データを導出する評価用データ導出処理を行い、該評価用データ導出処理を複数の前記入力データについて行って複数の評価用データを導出し、前記サイドチャネル情報取得処理を前記導出された複数の評価用データについて行って複数のサイドチャネル情報を取得する、
請求項１に記載の耐タンパ性評価方法。
【請求項３】
前記複数段の処理は、ｍ段（ｍは２以上の整数）のラウンド処理であり、
前記評価用回路は、前記ｍ段のラウンド処理のうち、ｎ段目（ｎは２以上ｍ以下）からｍ段目までのラウンド処理を含む処理を行う回路であり、
前記ステップ（ａ）では、前記暗号処理回路に入力する入力データと暗号鍵データとに基づいて、前記暗号処理回路のｍ段のラウンド処理のうち１段目から（ｎ−１）段目までのラウンド処理を行ったあとの出力データと暗号鍵データとに基づく前記評価用データを導出する前記評価用データ導出処理を行う、
請求項２に記載の耐タンパ性評価方法。
【請求項４】
ｎ＝ｍ−１である、
請求項３に記載の耐タンパ性評価方法。
【請求項５】
ｎ＝ｍである、
請求項３に記載の耐タンパ性評価方法。
【請求項６】
前記暗号処理回路は、前記ラウンド処理に含まれる各処理を実行する暗号化コア部と、前記暗号化コア部による前記各処理の実行順及び実行タイミングを制御するラウンド制御部と、を有する回路であり、
前記評価用回路は、前記暗号処理回路のうち前記暗号化コア部を変更せず前記ラウンド制御部を変更した回路である、
請求項３〜５のいずれか１項に記載の耐タンパ性評価方法。
【請求項７】
前記暗号処理回路は、ＡＥＳ暗号の暗号化処理を行う回路であり、
前記暗号化コア部は、SubBytes処理モジュール，MixColumns処理モジュール，ShiftRows処理モジュール，AddRoundKey処理モジュール，鍵スケジュール処理モジュールを含んでおり、
前記ラウンド制御部は、前記暗号化コア部の各モジュールの実行順及び実行タイミングを制御する、
請求項６に記載の耐タンパ性評価方法。
【請求項８】
前記ステップ（ａ）では、前記評価用データを前記評価用回路に入力し、該評価用データに基づく処理を行う際の該評価用回路における前記最終段の処理のサイドチャネル情報と、該評価用回路の該最終段の処理の出力データと、を対応付けたサイドチャネルテーブルを取得する前記サイドチャネル情報取得処理を行い、
前記ステップ（ｂ）では、前記サイドチャネルテーブルに基づいて、前記暗号処理回路の耐タンパ性の評価を行う、
請求項１〜７のいずれか１項に記載の耐タンパ性評価方法。
【請求項９】
前記ステップ（ａ）では、前記複数段の処理のうち最終段の処理を含む処理を行う評価用回路を作成する評価用回路作成処理を行い、該作成された評価用回路に前記評価用データを入力して前記サイドチャネル情報取得処理を行う、
請求項１〜８のいずれか１項に記載の耐タンパ性評価方法。
【請求項１０】
前記サイドチャネル情報は、前記評価用回路の消費電力，該評価用回路が発する電磁波，該評価用回路が発する音，該評価用回路の処理時間の少なくともいずれか１つに関する情報である、
請求項１〜９のいずれか１項に記載の耐タンパ性評価方法。
【請求項１１】
請求項１〜１０のいずれか１項に記載の耐タンパ性評価方法の各ステップを１又は複数のコンピューターに実現させるプログラム。
【請求項１２】
所定の順序で行う複数段の処理を含む処理を行う暗号処理回路の耐タンパ性評価装置であって、
前記複数段の処理のうち最終段の処理を含む前記暗号処理回路の一部の処理を行う評価用回路に入力データと暗号鍵データとからなる評価用データを入力して、該評価用データに基づく処理を行う際の該評価用回路におけるサイドチャネル情報を取得するサイドチャネル情報取得処理を行い、該サイドチャネル情報取得処理を複数の前記評価用データについて行って複数のサイドチャネル情報を取得するサイドチャネル情報取得手段と、
前記複数のサイドチャネル情報に基づいて、前記暗号処理回路の耐タンパ性の評価を行う評価手段と、
を備えた耐タンパ性評価装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、耐タンパ性評価方法，そのプログラム及び耐タンパ性評価装置に関する。
【背景技術】
【０００２】
暗号処理回路に対して内部の秘密鍵情報を探るための攻撃手法が存在する。そこで，このような攻撃を困難なものとし，暗号処理の秘匿性を保証する性能のことを耐タンパ性という。特に暗号処理回路が動作中にそのアルゴリズムとは関係なく，物理的に漏洩してしまう情報（サイドチャネル情報）を使って攻撃する手法をサイドチャネル攻撃と総称している。サイドチャネル情報としては、例えば消費電力，電磁波，音，処理時間に関する情報などが挙げられる。中でも，暗号処理中の消費電力情報を用いて鍵を推定する攻撃手法は電力解析攻撃と言われ，攻撃に必要な情報が比較的得やすいことから十分な対策をしておくことが望まれている。電力解析攻撃にもいくつかの種類があるが，標準暗号として広く利用されているＡＥＳのような暗号を攻撃する場合では，複数の暗号文とそれに対応した消費電力波形情報を取得して統計処理により鍵推定を行う。通常，耐タンパ性を評価するには、このような攻撃を実際に試み、秘密鍵情報の推定に成功したか否か，成功するのにどの程度の数の暗号と波形データのペアを必要としたか，によって判断する。電力解析攻撃の代表的な手法として電力差分解析や相関電力解析が知られている。
【０００３】
電力差分解析とは、暗号回路の多数の消費電力データからその平均値を求め、これを２つにグループ分けしたときの両者の差分の大小に基づいて秘密情報を取得する攻撃手法である。電力差分解析は例えば次のように行う。まず、暗号処理回路の出力である暗号文と，その暗号化時の消費電力波形のペアを多数取得する。続いて、取得したい秘密情報（秘密鍵）を特定値に仮定し、その仮定の下で暗号化処理内部で秘密鍵情報を演算の入力として含む秘密鍵関連回路のある中間値を予測する。この値は求めたい秘密鍵の値に対して一意に定まるものであり，正しい秘密鍵に対応する中間値は一通りである。この正しい中間値とあるタイミングにおける消費電力値に何らかの特徴的な関係が生じる性質を利用して，特徴的な関係が検出できたときに正しい鍵を使って予測を行った，つまり仮定した鍵が正しいものであったとみなす。ここで着目する回路部分のことを電力差分解析では選択関数と称する。仮に，回路中の秘密鍵に関連したあるビットに着目したとする。このビットの値が０か１かによって、消費電力波形データを２つのグループに分ける。あるビットの値を関数の引数とし，電力波形選択用グループ番号を関数の出力とすることから選択関数と称している。選択関数にはビットの値に着目するハミング重みとビットの遷移の有無に着目するハミング距離の2種類がよく使われる。次にグループ毎の消費電力の平均波形を求めてさらに２つのグループの平均波形の差分を求める。このような平均波形の差分を秘密鍵の取り得る全てのパターン（例えば８ビットの秘密鍵の場合には２５６パターン）について求める。十分な回数の暗号化処理から得られた暗号文と消費電力波形をもとに統計的に求めたこの平均電力波形差分値は、秘密鍵に関連しない回路動作の消費電力が平均化されてゼロに近くなり，それに対して秘密鍵に関連した回路と消費電力波形間のある特徴的な関係による成分が強調されてくる。つまり差分の振幅が大きくなる。この結果は仮定した鍵が正しいときのみに見られる。このような性質を利用して、平均波形の差分が最大となるときの秘密情報の仮定値が正解の値であると推定して、秘密情報を取得することができる。
【０００４】
次にもう一つの代表的な攻撃手法である相関電力解析について説明する。さきほどの電力差分解析では暗号処理中のある中間値を予測して，その値により消費電力波形を2つのグループに分類した。つまり，中間値の値と消費電力波形のレベルの大きさに相関があることを前提としている。相関電力解析ではこの関係を中間値と消費電力波形との間の相関係数（相関係数には種類があるが，一般に相関係数という場合にはPeasonの積率相関係数を指す）として求め，その大きさを各仮定鍵値間で比較する。このときに用いる中間値は，通常次のようなものを用いる。まず，ある攻撃対象となるタイミングにおいて，秘密鍵の一部分（部分鍵，ＡＥＳの場合は8bit幅）に関連する複数のビット中間値に着目する。それらの中の１の総数（ハミング重み），またはそれらのビット中で遷移があったビットの総数（ハミング距離）が消費電力と相関を持つ可能性があるとして用いられる。これら，ハミング重みまたはハミング距離を仮定鍵から予測する。電力差分解析と同様，仮定した鍵値が正しく，従って中間値の予測が正しかった場合に相関係数が最大化することになる。このように相関係数の算出によって鍵を推定する手法が相関電力解析である。
【０００５】
このような攻撃に対する耐性を評価しておくことは暗号回路の設計において必要不可欠であり，例えば、特許文献１には、論理回路の信号が変化した回数に基づいて消費電力を算出し、電力差分解析を行って耐タンパ性を評価することが記載されている。また、特許文献２には、耐タンパ対策回路の機能を有効にした場合と有効にしない場合とで電力差分解析の結果を比較して、耐タンパ対策回路の評価をすることが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開２００６−００６１９８号公報
【特許文献２】特許第４５９４６６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ここで、暗号処理回路に対して電力差分解析や相関電力解析などの攻撃を実際に行って耐タンパ性を評価するにあたっては，十分な回数の暗号化処理を実行し，統計に用いる暗号文データと消費電力波形情報を取得しなければならない。例えば、少ない場合では数千波形，攻撃に対する対策を施した回路を使った場合には百万波形程度の消費電力波形情報を取得して攻撃の可否を評価する必要がある。暗号処理回路の消費電力波形を取得する場合には、消費電力波形をオシロスコープで測定したり、シミュレーションにより消費電力波形を求めたりするが、このような多数のサイドチャネル情報を取得するには時間がかかるという問題がある。しかも、回路を修正する度にこのような消費電力波形の取得をやり直す必要が生じるので，設計工程に占めるこのような作業の負荷は非常に大きなものとなる。そのため、評価工数削減の為には、消費電力波形をより高速に取得して効率的に耐タンパ性を評価する手法が望まれていた。また，以上の説明は電力解析攻撃に関するものであるが，電力解析攻撃に限らずサイドチャネル攻撃に対する耐タンパ性を評価する場合には、多数のサイドチャネル情報を取得する必要があり、この処理に時間がかかるという同様の問題がある。
【０００８】
本発明は、上述した課題に鑑みなされたものであり、暗号処理回路の耐タンパ性の評価をより効率的に行うことを主目的とする。
【課題を解決するための手段】
【０００９】
本発明の耐タンパ性評価方法は、
所定の順序で行う複数段の処理を含む処理を行う暗号処理回路の耐タンパ性評価方法であって、
（ａ）前記複数段の処理のうち最終段の処理を含む前記暗号処理回路の一部の処理を行う評価用回路に入力データと暗号鍵データとからなる評価用データを入力して、該評価用データに基づく処理を行う際の該評価用回路におけるサイドチャネル情報を取得するサイドチャネル情報取得処理を行い、該サイドチャネル情報取得処理を複数の前記評価用データについて行って複数のサイドチャネル情報を取得するステップと、
（ｂ）前記複数のサイドチャネル情報に基づいて、前記暗号処理回路の耐タンパ性の評価を行うステップと、
を含むものである。
【００１０】
この本発明の耐タンパ性評価方法では、暗号処理回路が処理を行う際のサイドチャネル情報を取得する代わりに、暗号処理回路が所定の順序で行う複数段の処理のうち最終段の処理を含む一部の処理を行う評価用回路を用いて、この評価用回路に評価用データを入力したときのサイドチャネル情報を複数取得する。そして、この複数のサイドチャネル情報に基づいて暗号処理回路の耐タンパ性の評価を行う。こうすることで、データを入力してからデータが出力されるまでの処理時間は暗号処理回路よりもその一部の処理を行う評価用回路の方が短いため、短時間で複数のサイドチャネル情報を取得することができる。そのため、暗号処理回路の耐タンパ性の評価をより効率的に行うことができる。なお、一般にサイドチャネル攻撃は暗号処理回路が最終段の処理を行う際のサイドチャネル情報に基づいて行われるため、暗号処理回路の最終段の処理を含む処理を行う評価用回路を用いて取得したサイドチャネル情報を用いて暗号処理回路の耐タンパ性の評価を行っても、評価結果の精度への影響は少ない。ここで、暗号処理回路はＡＥＳによる暗号化を行う処理としてもよい。暗号処理回路の「最終段の処理」は、例えば、暗号処理回路における入力値と出力値との少なくとも一部が異なる処理のうちで最後に行われる処理としてもよいし、暗号鍵と入力値とを用いた演算を行う処理のうちで最後に行われる処理としてもよい。評価用回路は、暗号処理回路の複数段の処理のうち最終段の処理を含む暗号処理回路の一部の処理を行うものであればよく、暗号処理回路の一部の処理のみを行うものに限られない。例えば暗号処理回路が行う処理以外の処理も行う回路であってもよい。ステップ（ｂ）におけるサイドチャネル情報の取得は、暗号処理回路の実機を動作させて取得してもよいし、暗号処理回路の動作をシミュレーションすることにより取得してもよい。ステップ（ｂ）で取得するサイドチャネル情報は、最終段の処理に関するサイドチャネル情報としてもよく、例えば最終段の処理開始時（データ入力時）又は処理終了時（データ出力時）から所定時間経過後のタイミングのサイドチャネル情報としてもよい。暗号処理回路は、複数段の処理としてｍ段（ｍは２以上の整数）のラウンド処理を行うものとしてもよいし、この場合、前記評価用回路は、前記ｍ段のラウンド処理のうち、ｎ段目（ｎは２以上ｍ以下）からｍ段目までのラウンド処理を含む処理を行う回路としてもよい。
【００１１】
本発明の耐タンパ性評価装置において、前記ステップ（ａ）では、前記暗号処理回路に入力する入力データと暗号鍵データとに基づいて、前記複数段の処理のうち最終段の処理を含む前記暗号処理回路の一部の処理を行う評価用回路の入力となる評価用データを導出する処理を行い、該処理を複数の前記入力データについて行って複数の評価用データを導出するものとしてもよい。
【００１２】
本発明の耐タンパ性評価方法において、前記ステップ（ａ）では、前記暗号処理回路に入力する入力データと暗号鍵データとに基づいて、該入力データと暗号鍵データとを入力したときの該暗号処理回路の出力データと、前記評価用データを入力したときの前記評価用回路の出力データと、が同じ値になるような前記評価用データを導出する評価用データ導出処理を行い、該評価用データ導出処理を複数の前記入力データについて行って複数の評価用データを導出し、前記サイドチャネル情報取得処理を前記導出された複数の評価用データについて行って複数のサイドチャネル情報を取得するものとしてもよい。こうすれば、暗号処理回路に入力データと暗号鍵データとを入力したときの処理結果と、評価用回路に評価用データを入力したときの処理結果とが同じになるため、暗号処理回路から得られるサイドチャネル情報とより近いサイドチャネル情報を評価用回路から取得することができる。そのため、評価用回路を用いて耐タンパ性の評価を効率化しつつ評価の精度の低下をより抑制することができる。
【００１３】
本発明の耐タンパ性評価方法において、前記複数段の処理は、ｍ段（ｍは２以上の整数）のラウンド処理であり、前記評価用回路は、前記ｍ段のラウンド処理のうち、ｎ段目（ｎは２以上ｍ以下）からｍ段目までのラウンド処理を含む処理を行う回路であり、前記ステップ（ａ）では、前記暗号処理回路に入力する入力データと暗号鍵データとに基づいて、前記暗号処理回路のｍ段のラウンド処理のうち１段目から（ｎ−１）段目までのラウンド処理を行ったあとの出力データと暗号鍵データとに基づく前記評価用データを導出する前記評価用データ導出処理を行うものとしてもよい。こうすれば、複数段のラウンド処理を行う暗号処理回路について、適切な評価用データを容易に導出することができる。なお、この場合、ｍ段目の処理が最終段の処理に相当する。ここで、複数段のラウンド処理における各段のラウンド処理は、互いに同じ処理であってもよいし、一部が互いに共通の処理であってもよい。この場合において、ｎ＝ｍ−１としてもよいし、ｎ＝ｍとしてもよい。
【００１４】
上述した暗号処理回路がｍ段のラウンド処理を行う態様の本発明の耐タンパ性評価方法において、前記暗号処理回路は、前記ラウンド処理に含まれる各処理を実行する暗号化コア部と、前記暗号化コア部による前記各処理の実行順及び実行タイミングを制御するラウンド制御部と、を有する回路であり、前記評価用回路は、前記暗号処理回路のうち前記暗号化コア部を変更せず前記ラウンド制御部を変更した回路としてもよい。こうすれば、暗号処理回路のラウンド処理に含まれる各処理を行う回路自体は評価用回路においても変更されないから、暗号処理回路と評価用回路とで得られるサイドチャネル情報の差異をより小さくすることができる。そのため、評価用回路を用いて耐タンパ性の評価を効率化しつつ評価の精度の低下をより抑制することができる。この場合において、前記暗号処理回路は、ＡＥＳ暗号の暗号化処理を行う回路であり、前記暗号化コア部は、SubBytes処理モジュール，MixColumns処理モジュール，ShiftRows処理モジュール，AddRoundKey処理モジュール，鍵スケジュール処理モジュールを含んでおり、前記ラウンド制御部は、前記暗号化コア部の各モジュールの実行順及び実行タイミングを制御するものとしてもよい。なお、SubBytes処理モジュールは、ＡＥＳのSubBytes処理を行うモジュールであり、SubBytes処理を含む処理を行うモジュールとしてもよい。MixColumns処理モジュールは、ＡＥＳのMixColumns処理を行うモジュールであり、MixColumns処理を含む処理を行うモジュールとしてもよい。ShiftRows処理モジュールは、ＡＥＳのShiftRows処理を行うモジュールであり、ShiftRows処理を含む処理を行うモジュールとしてもよい。AddRoundKey処理モジュールは、ＡＥＳのAddRoundKey処理を行うモジュールであり、AddRoundKey処理を含む処理を行うモジュールとしてもよい。鍵スケジュール処理モジュールは、ＡＥＳの鍵スケジュール処理を行うモジュールであり、鍵スケジュール処理を含む処理を行うモジュールとしてもよい。
【００１５】
本発明の耐タンパ性評価方法において、前記ステップ（ａ）では、前記評価用データを前記評価用回路に入力し、該評価用データに基づく処理を行う際の該評価用回路における前記最終段の処理のサイドチャネル情報と、該評価用回路の該最終段の処理の出力データと、を対応付けたサイドチャネルテーブルを取得する前記サイドチャネル情報取得処理を行い、前記ステップ（ｂ）では、前記サイドチャネルテーブルに基づいて、前記暗号処理回路の耐タンパ性の評価を行うものとしてもよい。こうすれば、サイドチャネルテーブルに基づいて耐タンパ性を適切に評価することができる。ここで、前記ステップ（ｂ）では、前記最終段の処理の出力データから導出される、該評価用回路の該最終段の処理の入力データと、該最終段の処理の入力データと出力データとのハミング距離と、の少なくともいずれかを含む処理データ情報を選択関数としてサイドチャネル情報のグループ分けを行って電力差分解析等の差分解析を行うものとしてもよいし、処理データ情報とサイドチャネル情報との相関係数を導出して相関電力解析等の相関解析を行うものとしてもよい。
【００１６】
本発明の耐タンパ性評価方法において、前記ステップ（ａ）では、前記複数段の処理のうち最終段の処理を含む処理を行う評価用回路を作成する評価用回路作成処理を行い、該作成された評価用回路に前記評価用データを入力して前記サイドチャネル情報取得処理を行ってもよい。
【００１７】
本発明の耐タンパ性評価方法において、前記サイドチャネル情報は、前記評価用回路の消費電力，該評価用回路が発する電磁波，該評価用回路が発する音，該評価用回路の処理時間の少なくともいずれか１つに関する情報としてもよい。
【００１８】
本発明のプログラムは、上述した耐タンパ性評価方法の各ステップを１又は複数のコンピューターに実現させるためのものである。このプログラムをコンピューターに実行させれば、上述した本発明の耐タンパ性評価方法が実現されるため、本発明の耐タンパ性評価方法と同様の作用効果が得られる。本発明のプログラムは、コンピューターが読み取り可能な記録媒体（例えばハードディスク、ＲＯＭ、ＦＤ、ＣＤ、ＤＶＤなど）に記録されていてもよいし、伝送媒体（インターネットやＬＡＮなどの通信網）を介してあるコンピューターから別のコンピューターに配信されてもよいし、その他どのような形で授受されてもよい。
【００１９】
本発明の耐タンパ性評価装置は、
所定の順序で行う複数段の処理を含む処理を行う暗号処理回路の耐タンパ性評価装置であって、
前記複数段の処理のうち最終段の処理を含む前記暗号処理回路の一部の処理を行う評価用回路に入力データと暗号鍵データとからなる評価用データを入力して、該評価用データに基づく処理を行う際の該評価用回路におけるサイドチャネル情報を取得するサイドチャネル情報取得処理を行い、該サイドチャネル情報取得処理を複数の前記評価用データについて行って複数のサイドチャネル情報を取得するサイドチャネル情報取得手段と、
前記複数のサイドチャネル情報に基づいて、前記暗号処理回路の耐タンパ性の評価を行う評価手段と、
を備えたものである。
【００２０】
この本発明の耐タンパ性評価装置は、上述した本発明の耐タンパ性評価方法と同様に、評価用回路を用いてサイドチャネル情報を複数取得するから、暗号処理回路を用いて取得する場合に比べて短時間で複数のサイドチャネル情報を取得することができる。そのため、暗号処理回路の耐タンパ性の評価をより効率的に行うことができる。なお、この耐タンパ性評価装置において、上述した耐タンパ性評価方法の種々の態様を採用してもよいし、上述した耐タンパ性評価方法のステップを実現するような構成を追加してもよい。
【図面の簡単な説明】
【００２１】
【図１】耐タンパ性評価装置１０の構成の概略を示す構成図。
【図２】ＡＥＳの暗号化処理の概略を示す説明図。
【図３】ラウンド処理モジュール４０の回路構成を示す説明図。
【図４】鍵スケジュール処理モジュール６０の回路構成を示す説明図。
【図５】暗号処理回路３２のラウンド制御部９０の回路構成を示す説明図。
【図６】暗号処理回路３２が暗号化処理を行う様子の一例を示すタイムチャート。
【図７】耐タンパ性評価ルーチンの一例を示すフローチャート。
【図８】評価用回路３２ａの構成及び暗号化処理の概略を示す説明図。
【図９】評価用回路３２ａのラウンド制御部９０ａの回路構成を示す説明図。
【図１０】ShortModeの記述を変更する様子を示す説明図。
【図１１】短縮モードの評価用回路３２ａが処理を行う様子を示すタイムチャート。
【図１２】変形例のラウンド制御部９０ｂの回路構成を示す説明図。
【図１３】ラウンド制御部９０ｂの動作の様子を示すタイムチャート。
【図１４】変形例のラウンド制御部９０ｃの回路構成を示す説明図。
【図１５】ラウンド制御部９０ｃの動作の様子を示すタイムチャート。
【図１６】変形例のラウンド制御部９０ｄの回路構成を示す説明図。
【図１７】評価試験１における実施例１の評価用回路３２ａの処理値の説明図。
【図１８】評価試験１における実施例２の評価用回路３２ａの処理値の説明図。
【図１９】実施例１で通常モードにより取得した消費電力データのグラフ。
【図２０】実施例１で短縮モードにより取得した消費電力データのグラフ。
【図２１】実施例１で通常モードにより取得した消費電力データのグラフ。
【図２２】実施例１で短縮モードにより取得した消費電力データのグラフ。
【図２３】実施例２で通常モードにより取得した消費電力データのグラフ。
【図２４】実施例２で短縮モードにより取得した消費電力データのグラフ。
【図２５】実施例１での通常モードによる耐タンパ性の評価結果のグラフ。
【図２６】実施例１での短縮モードによる耐タンパ性の評価結果のグラフ。
【図２７】実施例１での通常モードによる耐タンパ性の評価結果のグラフ。
【図２８】実施例１での短縮モードによる耐タンパ性の評価結果のグラフ。
【図２９】実施例２での通常モードによる耐タンパ性の評価結果のグラフ。
【図３０】実施例２での短縮モードによる耐タンパ性の評価結果のグラフ。
【発明を実施するための形態】
【００２２】
次に、本発明の実施の形態を図面に基づいて説明する。図１は本発明の一実施形態である耐タンパ性評価装置１０の構成の概略を示す構成図である。図示するように、耐タンパ性評価装置１０は、制御部１２と、記憶部１４と、表示部１６と、操作部１８とを備えている。この耐タンパ性評価装置１０は、例えば汎用のコンピューターであり、暗号処理回路の耐タンパ性を評価する装置としての機能を有する。
【００２３】
制御部１２は、耐タンパ性評価装置１０全体の制御を司るものであり、ＣＰＵ，ＲＯＭ，ＲＡＭなどを備えたプロセッサーとして構成されている。制御部１２は、記憶部１４に記憶された耐タンパ性評価プログラム２０を実行したり、表示部１６に表示データを出力して画面を表示するよう制御したり、操作部１８からの操作信号を入力したりする。
【００２４】
表示部１６は、例えば液晶ディスプレイとして構成されており、制御部１２から出力された表示データに基づく画像を表示して各種情報をユーザーに表示する機能を有している。操作部１８は、例えばキーボードやマウス等の入力装置として構成されており、ユーザーから入力された操作に基づく操作信号を制御部１２に出力する機能を有している。
【００２５】
記憶部１４は、例えばＨＤＤなどの大容量記憶装置として構成され各種アプリケーションプログラムや各種データファイルを記憶するものである。この記憶部１４は、耐タンパ性評価プログラム２０と、テストベンチデータ２７と、回路データ３１とを備えている。
【００２６】
耐タンパ性評価プログラム２０は、評価用回路データ生成部２１と、評価用回路データ変換部２２と、評価用データ導出部２３と、サイドチャネル情報取得部２５と、評価部２６と、を備えている。評価用回路データ生成部２１は、記憶部１４の回路データ３１に記憶されたデータを読み出して、耐タンパ性を評価する対象となる暗号処理回路３２のデータから、暗号処理回路３２が行う複数段のラウンド処理のうち最終段の処理を含む暗号処理回路３２の一部の処理を行う評価用回路３２ａのデータを作成する評価用回路作成処理を行う機能を有する。なお、暗号処理回路３２や評価用回路３２ａの詳細については後述する。評価用回路データ変換部２２は、評価用回路データ生成部２１が生成した評価用回路３２ａのデータをサイドチャネル情報取得部２５が利用できるデータ形式に変換する機能を有する。評価用データ導出部２３は、サイドチャネル情報取得部２５が行うシミュレーションにおいて評価用回路３２ａの入力となるデータである評価用データを複数導出する評価用データ導出処理を行う機能を有する。サイドチャネル情報取得部２５は、評価用回路データ変換部２２に変換された評価用回路３２ａのデータと評価用データ導出部２３に生成された評価用データとを取得して、評価用回路３２ａに評価用データを入力したときの回路動作をシミュレーションし、シミュレーション結果に基づいて評価用回路３２ａのサイドチャネル情報としての消費電力波形などを複数取得するサイドチャネル情報取得処理を行う機能を有する。本実施形態では、サイドチャネル情報取得部２５は電子回路のアナログ動作をシミュレーションするソフトウェアであるＳＰＩＣＥ （Simulation Program with Integrated Circuit Emphasis）を用いたシミュレーションを行うものとした。評価部２６は、サイドチャネル情報取得部２５が取得した複数のサイドチャネル情報などのデータに基づいて、暗号処理回路３２の耐タンパ性を評価する機能を有する。なお、制御部１２が耐タンパ性評価プログラム２０を実行することにより、評価用回路データ生成部２１、評価用回路データ変換部２２、評価用データ導出部２３、サイドチャネル情報取得部２５、評価部２６の上述した機能が実現される。
【００２７】
テストベンチデータ２７は、耐タンパ性の評価を行う際に、評価対象の暗号処理回路３２へ入力するデータであり、複数（例えば数千〜数十万）パターンの入力データ（平文）や暗号鍵データが含まれている。
【００２８】
回路データ３１は、耐タンパ性の評価の対象となる暗号処理回路３２を備えた、例えばＬＳＩなどの回路を記述したデータである。回路データ３１は、本実施形態では、レジスタ転送レベル（ＲＴＬ）で記述された回路であるものとした。暗号処理回路３２は、暗号方式の１つであるＡＥＳ（Advanced Encryption Standard）の暗号化処理を行う回路であり、ＡＥＳのラウンド処理に含まれる各処理を含む処理を実行する暗号化コア部３３と、暗号化コア部３３の各処理の実行順及び実行タイミングを制御するラウンド制御部９０とを備えている。ＡＥＳの暗号化処理は、１２８ビットの入力データ（平文）と１２８ビットの暗号鍵データとを入力し、入力データに対して暗号鍵データを用いた１０段のラウンド処理を行って１２８ビットの出力データ（暗号文）を出力する処理である。図２は、暗号処理回路３２が実行するＡＥＳの暗号化処理の概略を示す説明図である。図示するように、暗号処理回路３２では、入力データが入力されると、まず、前処理としてAddRoundKey処理を行う（ラウンド０）。続いて、SubBytes処理，ShiftRows処理，MixColumns処理，AddRoundKey処理をこの順で行う処理を１段のラウンド処理として、これを９回繰り返す（ラウンド１〜９）。そして、SubBytes処理，ShiftRows処理，AddRoundKey処理をこの順で行い（ラウンド１０）、ラウンド１０の処理後のデータを出力データとして出力する。このように、暗号処理回路３２では、ラウンド１〜１０の１０段のラウンド処理を行って入力データを暗号化する。なお、ラウンド１〜９は共通の処理であり、ラウンド１０はMixColumns処理がない点以外はラウンド１〜９と共通の処理を行う。また、暗号処理回路３２に入力された暗号鍵データは、ラウンド０のAddRoundKey処理に用いられるほか、暗号鍵データから鍵スケジュール処理によってラウンド毎の鍵データ（ラウンド鍵）が導出され、１〜１０の各ラウンドのAddRoundKey処理に用いられる。
【００２９】
暗号処理回路３２の回路構成について詳細に説明する。暗号処理回路３２の暗号化コア部３３は、図２に示したSubBytes処理，ShiftRows処理，MixColumns処理，AddRoundKey処理の各処理を行うラウンド処理モジュール４０と、鍵スケジュール処理を行う鍵スケジュール処理モジュール６０と、を備えている（図１参照）。図３はラウンド処理モジュール４０の回路構成を示す説明図、図４は鍵スケジュール処理モジュール６０の回路構成を示す説明図である。また、図５は暗号処理回路３２のラウンド制御部９０の回路構成を示す説明図である。
【００３０】
ラウンド処理モジュール４０の回路構成について図３を用いて説明する。ラウンド処理モジュール４０は、SubBytes処理モジュール４２と、ShiftRows処理モジュール４３と、MixColumns処理モジュール４４と、AddRounKey処理モジュール４７と、レジスター群５１と、を備えている。このラウンド処理モジュール４０は、ラウンド１〜１０の処理に用いられるSubBytes処理、ShiftRows処理、MixColumns処理、AddRounKey処理を行うモジュールとして、SubBytes処理モジュール４２，ShiftRows処理モジュール４３，MixColumns処理モジュール４４，AddRounKey処理モジュール４７をそれぞれ１つずつ備えており、これを繰り返し用いることで１０段のラウンド処理を行うループアーキテクチャ構成のモジュールとして構成されている。
【００３１】
SubBytes処理モジュール４２は、ラウンド１〜１０のSubBytes処理を行うモジュールであり、８ビットのデータに対してSubBytes処理を行うSubBytes回路を１６個備えたSubBytes回路群により構成されている。なお、図３では、１つのSubBytes回路を「SB」と表記されたボックスで表し、８個のみ図示しているが、図示しない残りの８個も同様の構成である。SubBytes回路は、入力された８ビットのデータに対してＡＥＳにおける非線形変換であるSubBytes処理を行うものであり、入力された値に対応して所定の真理値表により定められた出力値（８ビット）を出力するように構成された論理回路である。SubBytes処理モジュール４２は、レジスター群５１の各レジスターからの出力（１つのレジスターからの出力は８ビット）をレジスターと１対１にSubBytes回路に入力して、各SubBytes回路からのSubBytes処理後の値をShiftRows処理モジュール４３に出力する。
【００３２】
ShiftRows処理モジュール４３は、ラウンド１〜１０のShiftRows処理を行うモジュールである。このShiftRows処理モジュール４３は、SubBytes処理モジュール４２の出力である８ビット×１６個のデータを入力し、このデータを並び替えて３２ビット×４個のデータにするShiftRows処理を行って、処理後のデータをMixColumns処理モジュール４４に出力する。
【００３３】
MixColumns処理モジュール４４は、ラウンド１〜９のMixColumns処理を行うモジュールであり、３２ビットのデータに対してMixColumns処理を行うMixColumns回路４個からなるMixColumns回路群４５と、４個のセレクターからなるセレクター群４６とにより構成されている。なお、図３では、１つのMixColumns回路を「ＭＣ」と表記されたボックスで表し、２個のみ図示している。同様に、セレクター群４６のセレクターも２個のみ図示している。MixColumns回路及びセレクターの図示しない残りの各２個も図示したものと同様の構成である。MixColumns回路は、入力された３２ビットのデータに対してＡＥＳにおける線形変換であるMixColumns処理を行うものであり、MixColumns処理後の値（３２ビット）をセレクター群４６の対応するセレクターに出力するように構成された論理回路である。セレクター群４６を構成するセレクターは、MixColumns回路群４５のMixColumns回路と１対１に対応している。各セレクターは、対応するMixColumns回路の入力データと出力データとがそれぞれ入力され、選択信号Round10の値に応じて入力した値の一方を出力する。より具体的には、各セレクターは、選択信号Round10が値０のときにMixColumns回路からの出力データをセレクターの出力として出力し、選択信号Round10が値１のときにMixColumns回路への入力データをセレクターの出力として出力する。セレクター信号Round10は、ラウンド制御部９０から暗号化コア部３３に入力されるCoreRoundRegの値（図５参照）が１０ラウンド目を表す値である「10'h001」のときに値１となるように構成されている。なお、「10'h001」における「10'h」は、これに続く数値「００１」が１０ビットの数値を１６進数で表記したものであることを意味する。すなわち、「10'h001」は２進数で表記すると「０００００００００１」である。以降の説明でも同様である。これにより、MixColumns処理モジュール４４は、選択信号Round10が値０であるときにはMixColumns回路の出力値すなわちMixColumns処理後の値をAddRounKey処理モジュール４７へ出力する。一方、選択信号Round10が値１であるときには、MixColumns回路への入力データすなわちShiftRows処理モジュール４３の出力データをそのままAddRounKey処理モジュール４７へ出力する。
【００３４】
AddRounKey処理モジュール４７は、ラウンド０のAddRounKey処理を行ったり、MixColumns処理モジュール４４からの出力データに対してラウンド１〜１０のAddRounKey処理を行ったりするモジュールであり、EXOR回路４８と、１６個のEXOR回路からなる排他的論理和（EXOR）回路群４９と、１６個のセレクターからなるセレクター群５０とを備えている。なお、図３では、EXOR回路群４９のEXOR回路とセレクター群５０のセレクターとをそれぞれ８個のみ図示しているが、図示しない残りの各８個も図示したものと同様の構成である。EXOR回路４８は、ラウンド０のAddRoundKey処理を行うものであり、暗号処理回路３２に入力された１２８ビットの入力データであるPlaintext［127:0]と１２８ビットの暗号鍵データであるKey[127:0]とを入力して、両者の排他的論理和をとった値（１２８ビット）をラウンド０のAddRounKey処理後の値として出力する。なお、図中及び文中の［x:y]はデータのうちyビット目〜xビット目の部分であることを示す。例えばPlaintext［127:0]は、暗号処理回路３２の入力データ（Plaintext）の０ビット目から１２７ビット目のデータを意味する。以降の説明でも同様である。
【００３５】
EXOR回路群４９は、１６個のEXOR回路からなり、入力されたデータとラウンド鍵との排他的論理和を出力する。EXOR回路群４９のEXOR回路は、入力された８ビットのデータと鍵スケジュール処理モジュール６０において導出されたラウンド鍵の一部である部分ラウンド鍵（Key0〜Key15：各８ビット）のうち１つとの排他的論理和を演算した結果を出力する。これにより、EXOR回路群４９全体としては、MixColumns処理モジュール４４から入力された１２８ビットのデータと１２８ビットのラウンド鍵との排他的論理和を出力するラウンド１〜１０のAddRounKey処理を行う。ここで、ラウンド鍵は鍵スケジュール処理モジュール６０によりラウンド毎に導出される１２８ビットのデータであり、これを８ビットずつに分割した１６個の部分ラウンド鍵（Key0〜Key15）が１６個のEXOR回路にそれぞれ入力される。
【００３６】
セレクター群５０を構成するセレクターは、EXOR回路群４９のEXOR回路と１対１に対応している。各セレクターは、対応するEXOR回路群４９のEXOR回路からの出力データと、EXOR回路４８からの出力データのうち８ビットのデータとが入力され、選択信号Round0の値に応じて入力したデータの一方を出力する。より具体的には、各セレクターは、選択信号Round0が値０のときにEXOR回路群４９のEXOR回路からの出力データをセレクターの出力として出力し、選択信号Round0が値１のときにEXOR回路４８からの出力データをセレクターの出力として出力する。セレクター信号Round0は、ラウンド処理のスタートタイミングとなる信号Start（図４，５参照）が値１であるとき（暗号処理回路３２による処理開始時）に値１となるように構成されている。これにより、AddRounKey処理モジュール４７は、選択信号Round0が値０であるときにはMixColumns処理モジュール４４の出力データをレジスター群５１へ出力する。一方、選択信号Round0が値１であるときには、暗号処理回路３２に入力された１２８ビットの入力データであるPlaintext［127:0]と１２８ビットの暗号鍵データであるKey[127:0]との排他的論理和をとった値（１２８ビット）をレジスター群５１へ出力する。
【００３７】
レジスター群５１は、１６個のレジスターからなり、各レジスターはセレクター群５０のセレクターと１対１に対応し、SubBytes処理モジュール４２のSubBytes回路とも１対１に対応している。なお、図３では、レジスター群５１のレジスターを９個のみ図示しているが、図示しない残りの各７個も図示したものと同様の構成である。レジスター群５１の各レジスターは、セレクター群５０の対応するセレクターからの出力データ（８ビット）が入力されており、信号LatchEnableが値１且つクロック信号の立ち上がりが入力されたときの入力データ（セレクターの出力データ）を出力して保持する。各レジスターの出力はラウンド処理モジュール４０の外部に出力されると共に、SubBytes処理モジュール４２の対応するSubBytes回路に出力される。これにより、レジスター群５１としては、信号LatchEnableが値１且つクロック信号の立ち上がりが入力されたときのAddRounKey処理モジュール４７から入力したデータを１２８ビットの出力データ（図中のReg00[7:0]〜Reg33[7:0]）としてラウンド処理モジュール４０の外部やSubBytes処理モジュール４２に出力して保持する。なお、信号LatchEnableは、ラウンド制御部９０から入力される信号である。
【００３８】
鍵スケジュール処理モジュール６０は、図４に示すように、セレクター６１と、Key_schedule回路７０と、レジスター６２とを備えている。セレクター６１には、データとして暗号処理回路３２に入力された暗号鍵データであるKey[127:0]とレジスター６２の出力データであるラウンド鍵RoundKey[127:0]とが入力され、選択信号として信号Startが入力されている。このセレクター６１は、信号Startが値１のときにはKey[127:0]をKey_schedule回路７０に出力し、信号Startが値０のときにはラウンド鍵RoundKey[127:0]をKey_schedule回路７０に出力する。Key_schedule回路７０は、ＡＥＳの鍵スケジュール処理を行って、AddRounKey処理モジュール４７のEXOR回路群４９に入力されるラウンド鍵RoundKey[127:0]を導出するための回路である。Key_schedule回路７０は、セレクター６１からの出力データを入力鍵Kin[127:0]として入力するとともに、ラウンド制御部９０から出力される１０ビットの値であるCoreRoundReg[9:0]をround[9:0]として入力する。CoreRoundReg[9:0]は現在の処理が何ラウンド目であるかを表す情報であり、この値に基づいてKey_schedule回路７０は現在のラウンド毎に異なる値である所定のラウンド定数rcon[7:0]を導出し、このrcon[7:0]と入力した鍵入力Kin[127:0]とに基づいてラウンド鍵RoundKey[127:0]となる鍵出力kout[127:0]を導出して出力する。レジスター６２には、Key_schedule回路７０からの鍵出力kout[127:0]が入力されており、クロック信号の立ち上がりが入力されたときの入力値をRoundKey[127:0]として出力して保持する。レジスター６２から出力されたRoundKey[127:0]は、セレクター６１に入力される。また、このラウンド鍵RoundKey[127:0]は８ビット×１６個の部分ラウンド鍵（Key0〜Key15）として、図３のラウンド処理モジュール４０のEXOR回路群４９の各EXOR回路に入力される。なお、RoundKey[127:120]＝Key0，RoundKey[119:112]＝Key1，・・・，RoundKey[7:0]＝Key15である。
【００３９】
ラウンド制御部９０は、ローテートシフト方式の制御回路として構成されており、図５に示すように、Shift回路９１と、論理和（ＯＲ）回路９２と、セレクター９３と、セレクター９４と、レジスター９５と、Busy生成回路９８と、論理和（OR）回路９９とを備えている。Shift回路９１は、現在の処理が何ラウンド目であるかを表す上述したRoundReg[9:0]及びCoreRoundReg[9:0]の値をラウンド毎に更新する回路であり、レジスター９５からの出力データであるRoundReg[9:0]が入力されている。Shift回路９１は、入力したRoundReg[9:0]を左に１ビットシフトさせた値をShiftRoundReg[9:0]として出力する。例えば、RoundReg[0]（＝RoundReg[9:0]の０ビット目）の値をShiftRoundReg[1]（ShiftRoundReg[9:0]の１ビット目）の値として出力する。ＯＲ回路９２は、信号Startと、レジスター９５から出力されるRoundReg[9:0]の０ビット目（RoundReg[0]）の否定の値と、が入力され、これらの論理和を信号Shiftcontrolとして出力する。セレクター９３は、データとしてレジスター９５から出力されるRoundReg[9:0]とShift回路９１から出力されるShiftRoundReg[9:0]とが入力され、セレクター信号としてＯＲ回路９２から出力される信号Shiftcontrolが入力されている。このセレクター９３は、信号Shiftcontrolが値１のとき、すなわち、信号Startが値１であるか又はRoundReg[0]が値０であるときには、入力したShiftRoundReg[9:0]の値をそのまま出力する。一方、信号Shiftcontrolが値０のとき、すなわち、信号Startが値０であり且つRoundReg[0]が値１であるときには、入力したRoundReg[9:0]の値をそのまま出力する。セレクター９４は、データとしてセレクター９３からの出力データとRoundReg[9:0]の初期値であり１０ラウンド目を表す値でもある「10'h001」とが入力され、セレクター信号として暗号処理回路３２のリセット信号RSTnが入力されている。また、リセット信号RSTnは、暗号処理回路３２のリセット時に値０となり、暗号処理回路３２が暗号化を行う間は値１となる。このセレクター９４は、リセット信号RSTnが値１であるときにはセレクター９３からの出力データをそのまま出力し、リセット信号RSTnが値０であるときには固定値「10'h001」をそのまま出力する。レジスター９５には、セレクター９４からの出力データが入力されており、クロック信号の立ち上がりが入力されたときの入力値をRoundReg[127:0]として出力して保持する。このレジスター９５の出力は、Shift回路９１に入力される。また、レジスター９５の出力は、CoreRoundReg[9:0]として鍵スケジュール処理モジュール６０のKey_schedule回路７０に出力されると共に、CoreRoundReg[9:0]としてラウンド処理モジュール４０に出力される。なお、RoundReg[9:0]とCoreRoundReg[9:0]とは同じ値である。Busy生成回路９８は、ラウンド１〜１０までの処理区間を表す信号Busyを生成してOR回路９９に出力する回路である。このBusy生成回路９８には、リセット信号RSTnと、信号Startと、RoundReg[9:0]とが入力されている。Busy生成回路９８は、リセット信号RSTnとして値０が入力されているときには信号Busyとして値０を出力する。また、リセット信号RSTnとして値１が入力され且つStart信号として値１が入力されると、次のクロックの立ち上がり時以降は信号Busyとして値１を出力する。そして、信号Busyが値１のときにRounReg[9:0]として値「10'h001」が入力されると、次のクロックの立ち上がり時以降は信号Busyとして値０��出力する。OR回路９９は、信号Startと信号Busyとが入力されており、これらの論理和をとった値を信号LatchEnableとして出力する。信号LatchEnableは、ラウンド処理モジュール４０のレジスター群５１の各レジスターに入力される。
【００４０】
このように構成されたラウンド制御部９０は、例えば、信号LatchEnableを出力することによってラウンド処理モジュール４０のレジスター群５１からのデータの出力の可否を制御するなどラウンド処理モジュール４０の処理の実行タイミングを制御する。また、現在の処理が何ラウンド目であるかを表すCoreRoundReg[9:0]を出力することによってラウンド処理モジュール４０や鍵スケジュール処理モジュール６０が各ラウンドに即した処理を行うよう制御するなど、ラウンド処理モジュール４０や鍵スケジュール処理モジュール６０の処理の実行順を制御する。
【００４１】
ここで、暗号処理回路３２が暗号化処理を行う際の暗号化コア部３３及びラウンド制御部９０の動作について説明する。図６は、暗号処理回路３２が暗号化処理を行う様子の一例を示すタイムチャートである。まず、時刻ｔ１以前においては、暗号処理回路３２が処理を行っておらずリセット信号RSTnが値０であったとすると、ラウンド制御部９０のセレクター９４は常に固定値「10h'001」を出力するため、RoundReg[9:0]及びCoreRoundReg[9:0]の値は共に「10h'001」となっている。また、Shift回路９１にはレジスター９５の出力としてRoundReg[9:0]の値である「10h'001」が入力されるから、Shift回路９１の出力であるShiftRoundReg[9:0]の値は「10h'001」を１ビット左にシフトした「10h'002」となっている。また、時刻ｔ１以前では信号Startが入力されておらず、RoundReg[9:0]の値は初期値「10'h001」でありRoundReg[0]の否定は値０であるため、ShiftControlは値０となっている。また、リセット信号RSTnが値０であるため信号Busyも値０となっている。
【００４２】
次に、時刻ｔ１のクロックの立ち上がりにおいて、リセット信号RSTnが値１となり、ラウンド０の入力として暗号処理回路３２の入力データ（平文）であるPlaintext［127:0]と暗号鍵データであるKey[127:0]とが暗号化コア部３３のAddRounKey処理モジュール４７に入力され、信号Startとして値１が入力されたとする。すると、時刻ｔ１〜ｔ２の間に、ラウンド制御部９０では、信号startが値１となったためＯＲ回路９２の出力であるShiftControlが値１となり、セレクター９３はShiftRoundReg[9:0](=「10'h002」）を出力する。また、リセット信号RSTnが値１となっているため、セレクター９４の出力は固定値「10h'001」から１ラウンド目を表すShiftRoundReg[9:0]の値(=「10'h002」）に切り替わり、レジスター９５に入力された状態になる。また、信号Startが値１になったため、時刻ｔ１でOR回路９９から出力される信号LatchEnableが値０から値１となり、信号Startが値１である時刻ｔ１〜ｔ２の間の信号LatchEnableは継続して値１となる。また、鍵スケジュール処理モジュール６０では、信号Startが値１であるので、セレクター６１は入力されたKey[127:0]の値をそのままKey_schedule回路７０に出力する。そして、Key_schedule回路７０は、Kin[127:0]として入力されたKey[127:0]の値と、round[9:0]として入力されたCoreRoundReg[9:0]（＝「10h'001」）と、に基づいてラウンド１用のラウンド鍵をKout[127:0]としてレジスター６２に出力する。また、ラウンド処理モジュール４０では、EXOR回路４８によりPlaintext［127:0]とKey[127:0]とのEXORが導出され、信号Startが値１であるのでセレクター群５０の各セレクターからはEXOR回路４８が導出した値が出力されて、ラウンド０のAddRoundKey処理後の値がレジスター群５１の各レジスターに入力される。
【００４３】
そして、時刻ｔ２のクロックの立ち上がりと共に信号Startが値０になると、ラウンド制御部９０では、レジスター９５の入力である「10'h002」がRoundReg[9:0]及びCoreRoundReg[9:0]の値として出力される。また、RounReg[9:0]の値が「10'h001」から「10'h002」に変わったため、Shift回路９１の出力であるShiftRoundReg[9:0]の値が「10'h004」（「10'h002」を１ビット左にシフトした値）となり、ShiftControl及びリセット信号RSTnも値１のままであるため、レジスター９５にはこの「10'h004」の値が入力される。また、時刻ｔ１で信号Startが値１になったため、次のクロックの立ち上がり時である時刻ｔ２でBusy生成回路９８から出力される信号Busyが値１となる。これにより、時刻ｔ１〜ｔ２に引き続き時刻ｔ２以降においてもOR回路９９から出力される信号LatchEnableは値１となる。鍵スケジュール処理モジュール６０では、時刻ｔ２のクロックの立ち上がりにより、レジスター６２の入力であるラウンド１用のラウンド鍵がRoundKey[127:0]としてレジスター６２から出力されてAddRounKey処理モジュール４７のEXOR回路群４９に入力される。また、レジスター６２の出力はセレクター６１に入力され、信号Startが値０であるので、Key_schedule回路７０にはラウンド１用のラウンド鍵RoundKey[127:0]がkin[127:0]として入力されると共に、ラウンド制御部９０からのCoreRoundReg[9:0]（＝「10'h002」）がround[9:0]として入力される。そして、Key_schedule回路７０はこれらの入力値に基づいてラウンド２用のラウンド鍵を導出しKout[127:0]としてレジスター６２に出力する。ラウンド処理モジュール４０では、時刻ｔ２のクロックの立ち上がりにより、レジスター群５１の各レジスタからは入力値であるラウンド０の出力値が出力されて、SubBytes処理モジュール４２にラウンド１の入力値として入力される。そして、この入力値に対してSubBytes処理モジュール４２でSubBytes処理が行われ、ShiftRows処理モジュール４３でShiftRows処理が行われて、MixColumns処理モジュール４４に入力される。MixColumns処理モジュール４４では、時刻ｔ２〜ｔ３でのCoreRoundReg[9:0]の値が１ラウンド目を表す「10'h002」であり１０ラウンド目を表す値ではないため、セレクター群４６の各セレクターには値０が入力されて、MixColumns回路群４５によるMixColumns処理後の値がセレクター群４６から出力される。AddRounKey処理モジュール４７では、EXOR回路群４９により、鍵スケジュール処理モジュール６０から入力したラウンド１用のラウンド鍵RoundKey[127:0]と、MixColumns回路群４５から入力した値とのAddRoundKey処理が行われる。また、時刻ｔ２〜ｔ３での信号Startは値０であるため、セレクター群５０の各セレクターには値０が入力されて、EXOR回路群４９によるAddRoundKey処理後の値がセレクター群５０から出力される。
【００４４】
続く時刻ｔ３のクロックが立ち上がると、このラウンド１の処理後の値がレジスター群５１から出力され、ラウンド２の入力となる。ラウンド制御部９０では、時刻ｔ３のクロックの立ち上がりにより、レジスター９５の出力すなわちRoundReg[9:0]やCoreRoundReg[9:0]が、時刻ｔ２〜ｔ３間のShiftRoundReg[9:0]の値である「10'h004」となる。鍵スケジュール処理モジュール６０では、時刻ｔ３のクロックの立ち上がりによりラウンド２のラウンド鍵RoundKey[127:0]をAddRounKey処理モジュール４７に出力すると共に、次のラウンド３のラウンド鍵をKey_schedule回路７０が導出する。以降、ラウンド９の処理後の値が出力される時刻ｔ１１までは、同様の処理を繰り返し、ラウンド処理モジュール４０は順次ラウンド２〜ラウンド９の処理を行う。そして、時刻ｔ１１のクロックの立ち上がりにより、RoundReg[9:0]及びCoreRoundReg[9:0]の値は初期値と同じ値であり１０ラウンド目であることを表す値でもある「10'h001」に戻る（初期値「10'h001」が時刻ｔ２〜ｔ１１間で１０回左シフトされることによる）ため、ShiftControlが時刻ｔ１以前と同様に値０となる。これにより、以降のレジスター９５の出力は「10'h001」となる。また、ラウンド処理モジュール４０では、時刻ｔ１１のクロックの立ち上がり後において、セレクター群４６の各セレクターへのセレクター信号が値１となるから、MixColumns処理モジュール４４ではMixColumns処理を行わずにShiftRows処理モジュール４３から入力した値をそのままAddRounKey処理モジュール４７へ出力する。これにより、時刻ｔ１１〜ｔ１２間ではSubBytes処理、ShiftRows処理、AddRounKey処理モジュール４７のみが行われ、ＡＥＳのラウンド１０の規格に沿った処理が行われる。そして、時刻ｔ１２のクロックの立ち上がりにより、レジスター群５１からラウンド１０の処理後の値、すなわち最初の入力データ（平文）をＡＥＳにより暗号化した出力データ（暗号文）が出力される。また、時刻ｔ１１〜ｔ１２においてRounReg[9:0]が値「10'h001」となったため、次のクロックの立ち上がり時である時刻ｔ１２でBusy生成回路９８から出力される信号Busyが値０となる。これにより、信号Startと信号Busyが共に値０となるから、OR回路９９から出力される信号LatchEnableも値０となる。
【００４５】
このように、暗号処理回路３２では、ラウンド制御部９０がクロックの立ち上がり毎にRoundReg[9:0]やCoreRoundReg[9:0]の値を１ビットずつシフトした値に更新していき、この値に基づいて鍵スケジュール処理モジュール６０が各ラウンドのラウンド鍵を導出したり、ラウンド処理モジュール４０が各ラウンドの処理を行う。
【００４６】
次に、こうして構成された耐タンパ性評価装置１０の動作、特に、暗号処理回路３２の耐タンパ性を評価する際の動作について説明する。図７は、耐タンパ性評価ルーチンの一例を示すフローチャートである。このルーチンは、ユーザーが操作部１８を操作して耐タンパ性を評価する対象となる暗号処理回路を指定し、耐タンパ性の評価を行うよう指示したときに制御部１２が耐タンパ性評価プログラム２０を実行することにより行われる。以降は、回路データ３１の暗号処理回路３２が評価対象に指定された場合について説明する。
【００４７】
この耐タンパ性評価ルーチンが実行されると、評価用回路データ生成部２１は、まず、ユーザーに指定された暗号処理回路３２に基づいて、耐タンパ性評価に用いる評価用回路３２ａの回路データを作成する評価用回路作成処理を行う（ステップＳ１００）。図８は、評価用回路３２ａの構成及び暗号化処理の概略を示す説明図であり、図９は、評価用回路３２ａのラウンド制御部９０ａの回路構成を示す説明図である。なお、図８（ａ）は、評価用回路３２ａの構成の概略を示す説明図であり、図８（ｂ）は、評価用回路３２ａの暗号化処理の概略を示す説明図である。図８（ａ）に示すように、評価用回路３２ａは、暗号処理回路３２にラウンド制御部９０ａを加えた回路である。また、図９に示すように、ラウンド制御部９０ａは、ラウンド制御部９０の一部を変更した回路である。そこで、評価用回路３２ａのうち暗号処理回路３２と同一の回路については同じ符号を付して、詳細な説明を省略する。このラウンド制御部９０とラウンド制御部９０ａとは、いずれが暗号化コア部３３を制御するかを選択可能に構成されており、ラウンド制御部９０が暗号化コア部３３を制御する場合を通常モード、ラウンド制御部９０ａが暗号化コア部３３を制御する場合を短縮モードと表記する。評価用回路３２ａの通常モードは、暗号化処理に関する回路構成は暗号処理回路３２と全く同じとなる。一方、評価用回路３２ａの短縮モード、すなわちラウンド制御部９０ａが暗号化コア部３３を制御するときには、図３に示した暗号処理回路３２のラウンド１〜１０のうちラウンド１〜８を省略して、図８（ｂ）に示すように最終段の処理であるラウンド１０の処理を含むラウンド０，９，１０の処理を行う回路となる。
【００４８】
ラウンド制御部９０ａについて詳細に説明する。ラウンド制御部９０ａは、図９に示すように、セレクター９１ａと、ＯＲ回路９２と、セレクター９３と、セレクター９４と、レジスター９５と、セレクター９６ａと、セレクター９７ａと、Busy生成回路９８と、OR回路９９と、を備えている。セレクター９１ａは、ラウンド制御部９０のShift回路９１の代わりにShiftRoundReg[9:0]を出力するものであり、９ラウンド目を示す値「10'h200」と、ShiftRoundReg[9:0]の初期値且つ１０ラウンド目を示す値「10'h001」と、が入力データとして入力されている。また、セレクター９１ａには、セレクター信号として信号Startが入力されており、信号Startが値１のときには値「10'h200」をセレクター９３に出力し、値０のときには値「10'h001」をセレクター９３に出力する。セレクター９６ａは、レジスター９５の出力側とラウンド制御部９０ａのCoreRoundReg[9:0]の出力との間に挿入された回路であり、入力データとして、レジスター９５からの出力データの８ビット目と、値「1b'1」とが入力されている。また、セレクター９６ａには、セレクター信号として信号Startが入力されており、信号Startが値１のときには値「1'b1」をCoreRoundReg[9:0]の８ビット目の値として出力し、値０のときにはレジスター９５からの出力データの８ビット目の値をCoreRoundReg[9:0]の８ビット目の値として出力する。セレクター９７ａは、レジスター９５の出力側とラウンド制御部９０ａのCoreRoundReg[9:0]の出力との間に挿入された回路であり、入力データとして、レジスター９５からの出力データの０ビット目と、値「1'b0」とが入力されている。また、セレクター９７ａには、セレクター信号として信号Startが入力されており、信号Startが値１のときには値「1'b0」をCoreRoundReg[9:0]の０ビット目の値として出力し、値０のときにはレジスター９５からの出力データの０ビット目の値をCoreRoundReg[9:0]の０ビット目の値として出力する。なお、「1'b1」における「1'b」は、これに続く数値「１」が１ビットの数値を２進数で表記したものであることを意味する。すなわち、「1'b1」は２進数で表記すると「１」である。
【００４９】
図７の耐タンパ性評価ルーチンのステップＳ１００では、このように暗号処理回路３２に対し図９に示したラウンド制御部９０ａを追加した評価用回路３２ａを作成する。なお、この評価用回路３２ａは、暗号処理回路３２と同じＲＴＬで記述されているものとした。また、このステップＳ１００において、評価用回路データ生成部２１は、評価用回路３２ａの中に図示しないShortModeというノードを仕込んでおく。ShortModeについては後述する。
【００５０】
続いて、評価用回路データ変換部２２は、評価用回路データ生成部２１が作成した評価用回路３２ａのデータを、サイドチャネル情報取得部２５が利用できるようＳＰＩＣＥのデータ形式（ゲートネットリスト）に変換する（ステップＳ１１０）。次に、評価用回路データ変換部２２は、評価用回路３２ａの通常モードと短縮モードとのいずれで耐タンパ性の評価を行うかの指示をユーザーから入力する（ステップＳ１２０）。この処理は、例えば図示しないモード選択画面を表示部１６に表示し、操作部１８を介してユーザーからの指示を入力することにより行う。
【００５１】
そして、ステップＳ１２０で通常モードで耐タンパ性の評価を行う旨を入力したときには、評価用回路データ変換部２２は、評価用回路３２ａを通常モードに設定する（ステップＳ１３０）。この処理は、ステップＳ１００で評価用回路３２ａに仕込んだShorModeの記述を修正することで行う。図１０は、ShortModeの記述を変更する様子を示す説明図であり、図１０（ａ）が変更前、図１０（ｂ）が変更後の様子である。なお、図１０は、ステップＳ１１０で変換された後の評価用回路３２ａのゲートネットリストの一部を示している。図１０（ａ）において波線枠１００で囲まれた部分はShortModeなどの評価用回路３２ａの入力ピンの宣言であり、波線枠１０１の「input ShortMode」はShortModeの定義部分である。ステップＳ１２０では、図１０（ｂ）の波線枠１００ａで示すように、この波線枠１００で囲まれた部分のうち「ShortMode」を削除する。また、図１０（ｂ）の波線枠１０１ａで示すように、波線枠１０１の「input ShortMode」の行頭にその行の記述を無視することを意味する「//」を追加して、「input ShortMode」を削除する。また、波線枠１０２ａに「wire  ShortMode;」，「assign ShortMode = 1'b0;」を挿入して、ShortModeというwireを宣言する。なお、本実施形態の評価用回路３２ａでは、このとき、「assign ShortMode = 1'b0;」を挿入すると通常モードとなり、「assign ShortMode = 1'b1;」を挿入すると短縮モードとなる。このようにすることで、本実施形態の評価用回路３２ａは、仕込んでおいたShortModeを値０(=1'b0）とするか値１(=1'b1）とするかを変更することで、通常モードと短縮モードとのいずれも選択できるようになっている。
【００５２】
評価用回路データ変換部２２が通常モードを設定すると、サイドチャネル情報取得部２５は、通常モードの評価用回路３２ａにテストベンチデータ２７を入力したときの評価用回路３２ａの動作をシミュレーションし、サイドチャネル情報としての消費電力データを含む消費電力テーブルを取得する（ステップＳ１４０）。より具体的には、次のような処理を行う。まず、テストベンチデータ２７の１つの入力データ（平文）と暗号鍵データとを読み出し、Plaintext［127:0]とKey[127:0]として評価用回路３２ａに入力する。また、クロックの立ち上がりに合わせて評価用回路３２ａに入力するリセット信号RSTn及び信号Startを値１にする。そして、このときの評価用回路３２ａの回路動作をＳＰＩＣＥ （Simulation Program with Integrated Circuit Emphasis）を用いてシミュレーションする。なお、信号Startは次のクロックの立ち上がりに合わせて値０にする。このシミュレーションにより、図６で説明したようにラウンド０及びラウンド１〜１０のラウンド処理により通常のＡＥＳの暗号化処理が行われて、入力データ（平文）を暗号鍵データで暗号化した出力データ（暗号文）がレジスター群５１から出力される。このとき、サイドチャネル情報取得部２５は、最終ラウンドである１０ラウンド目のラウンド処理の出力データ（図６の場合における時刻ｔ１２のクロックの立ち上がりによるレジスター群５１の出力）を取得する。また、評価用回路３２ａの動作内容に基づいて消費電力波形を演算し、サイドチャネル攻撃の所定の攻撃タイミングにおける評価用回路３２ａの消費電力の値を消費電力データとして取得する。本実施形態では、所定の攻撃タイミングは、ラウンド１０の処理後の出力データ（暗号文）の出力時のクロック立ち上がり（図６の場合における時刻ｔ１２）から所定時間（例えば0.5nsec）経過後の消費電力の値を消費電力データとして取得するものとした。そして、取得した出力データと消費電力データとを対応付けて消費電力テーブルとして記憶部１４に記憶する。同様に、テストベンチデータ２７に含まれる１つの暗号鍵データと複数の入力データ（平文）との組み合わせに対してシミュレーションを行い、ラウンド１０の出力データと消費電力データとの組み合わせを複数取得し、記憶部１４に消費電力テーブルとして記憶していく。
【００５３】
一方、ステップＳ１２０で短縮モードで耐タンパ性の評価を行う旨を入力したときには、評価用回路データ変換部２２は、評価用回路３２ａを短縮モードに設定する（ステップＳ１５０）。この処理は、ShortModeを値１(=1'b1）とする点以外は、上述したステップＳ１３０と同様に行う。
【００５４】
続いて、評価用データ導出部２３は、テストベンチデータ２７に基づいて評価用回路３２ａ（短縮モード）の入力となる評価用データを複数導出する評価用データ導出処理を行う（ステップＳ１６０）。この評価用データは、テストベンチデータ２７の入力データ（平文）と暗号鍵データとを暗号処理回路３２に入力したときの暗号処理回路３２の出力データ（暗号文）と、評価用データを入力したときの評価用回路３２ａ（短縮モード）の出力データ（暗号文）と、が同じ値になるような評価用回路３２ａの入力データ（平文）と暗号鍵データとのペアとして導出する。具体的には、まず、テストベンチデータ２７の１つの入力データ（平文）と暗号鍵データとを読み出し、読み出した暗号鍵データからラウンド８用のラウンド鍵RoundKey[127:0]を導出する（以下、この値をラウンド鍵RK8とも表記する）。次に、テストベンチデータ２７から読み出した入力データ（平文）と暗号鍵データとをPlaintext［127:0]とKey[127:0]として暗号処理回路３２に入力したときの、８ラウンド目の出力データ（レジスター群５１の出力データ）を導出する（以下、この値をデータRD9とも表記する）。そして、求めたラウンド鍵RK8とデータRD9との排他的論理和を導出する。そして、この排他的論理和で導出した値であるデータRD9Aと、ラウンド鍵RK8とを、評価用回路３２ａの入力データ（平文）と暗号鍵とのペアすなわち評価用データとする。同様に、テストベンチデータ２７に含まれる１つの暗号鍵データと複数の入力データ（平文）との組み合わせに対してそれぞれデータRD9Aとラウンド鍵RK8とのペアを求め、評価用データを複数取得する。取得した評価用データは、記憶部１４に記憶しておく。なお、本実施形態では、ラウンド鍵RK8やデータRD9，RD9Aの値は、暗号処理回路３２を用いて導出するものとした。なお、ＡＥＳの規格に沿った演算を行って入力データ（平文）と暗号鍵データとからラウンド鍵RK8やデータRD9，RD9Aを導出すればよいため、暗号処理回路３２を用いなくともよい。
【００５５】
次に、サイドチャネル情報取得部２５は、短縮モードの評価用回路３２ａにステップS１６０で取得した評価用データを入力したときの評価用回路３２ａの動作をシミュレーションし、サイドチャネル情報としての消費電力データを含む消費電力テーブルを取得するサイドチャネル情報取得処理を行う（ステップＳ１７０）。この処理は、評価用回路３２ａが短縮モードであること、評価用回路３２ａに入力する入力データ（平文）と暗号鍵データとがテストベンチデータ２７のデータではなく評価用データであること、以外はステップＳ１４０と同様にして行うことができる。より具体的には、次のような処理を行う。まず、ステップＳ１６０で導出した複数の評価用データのうち、１つの評価用データすなわちデータRD9Aとラウンド鍵RK8とのペアを記憶部１４から読み出す。そして、データRD9Aを入力データ（平文）すなわちPlaintext［127:0]とし、ラウンド鍵RK8を暗号鍵データすなわちKey[127:0]として、評価用回路３２ａに入力する。また、クロックの立ち上がりに合わせて評価用回路３２ａに入力するリセット信号RSTn及び信号Startを値１にする。そして、このときの評価用回路３２ａの回路動作をＳＰＩＣＥ （Simulation Program with Integrated Circuit Emphasis）を用いてシミュレーションする。信号Startは次のクロックの立ち上がりに合わせて値０にする。このシミュレーションにより、図８（ｂ）で示したようにラウンド０及びラウンド９〜１０のラウンド処理により暗号化処理が行われて、入力データ（平文）を暗号鍵データで暗号化した出力データ（暗号文）がレジスター群５１から出力される。このとき、サイドチャネル情報取得部２５は、最終ラウンドである１０ラウンド目のラウンド処理の出力データを取得する。また、評価用回路３２ａの動作内容に基づいて消費電力波形を演算し、サイドチャネル攻撃の所定の攻撃タイミングにおける評価用回路３２ａの消費電力の値を消費電力データとして取得する。本実施形態では、所定の攻撃タイミングは、ステップＳ１４０と同じラウンド１０の処理後の出力データ（暗号文）の出力時のクロック立ち上がりから所定時間（例えば0.5nsec）経過後の消費電力の値を消費電力データとして取得するものとした。そして、ステップＳ１６０で導出した複数の評価用データについて、同様にシミュレーションを行い、ラウンド１０の出力データと消費電力データとの組み合わせを複数取得して記憶部１４の消費電力テーブルに記憶していく。
【００５６】
ここで、短縮モードの評価用回路３２ａが暗号化処理を行う際の暗号化コア部３３及びラウンド制御部９０ａの動作について説明する。図１１は、短縮モードの評価用回路３２ａが暗号化処理を行う様子の一例を示すタイムチャートである。
【００５７】
まず、時刻ｔ１以前においては、評価用回路３２ａが処理を行っておらずリセット信号RSTnが値０であり、ラウンド制御部９０ａのセレクター９４は常に固定値「10h'001」を出力するため、RoundReg[9:0]の値は「10h'001」となっている。また、信号Startが入力されておらず値０であるため、セレクター９６ａ，９７ａはレジスター９５からの出力データの８ビット目，０ビット目の値をCoreRoundReg[9:0]の８ビット目，０ビット目の値として出力する。そのためCoreRoundReg[9:0]の値もRoundReg[9:0]の値と同じ「10h'001」となっている。また、信号Startが値０であるため、セレクター９１ａの出力すなわちShiftRoundReg[9:0]の値も「10'h001」となっている。また、信号Start，リセット信号RSTn，RoundReg[9:0]の状態（値）は図６の時刻ｔ１以前と同じであるため、図６と同様にShiftControl及び信号Busyは値０となっている。
【００５８】
次に、時刻ｔ１のクロックの立ち上がりにおいて、サイドチャネル情報取得部２５は、リセット信号RSTnを値１とし、評価用データのうちデータRD9AをPlaintext［127:0]とし、ラウンド鍵RK8をKey[127:0]として暗号化コア部３３のAddRounKey処理モジュール４７に入力し、信号Startとして値１を入力する。すると、時刻ｔ１〜ｔ２の間に、ラウンド制御部９０ａでは、信号startが値１となったためセレクター９１ａの出力すなわちShiftRoundReg[9:0]の値が「10'h200」となる。また、信号startが値１となったためＯＲ回路９２の出力であるShiftControlが値１となり、セレクター９３はShiftRoundReg[9:0](=「10'h200」）を出力する。また、リセット信号RSTnが値１となっているため、セレクター９４の出力は固定値「10h'001」から９ラウンド目を表す値(=「10'h200」）に切り替わり、レジスター９５に入力された状態になる。また、信号Startが値１であるため、セレクター９６ａは、値「1'b1」をCoreRoundReg[9:0]の８ビット目の値として出力する。同様に、セレクター９７ａは、信号Startが値１であるため、値「1'b0」をCoreRoundReg[9:0]の０ビット目の値として出力する。これらにより、レジスター９５の出力すなわちRoundReg[9:0]は値「10'b001」であるが、CoreRoundReg[9:0]の値は「10'b001」の８ビット目を値１，０ビット目を値０とした値「10'b100」となる。この値「10'b100」は、８ラウンド目を表す値である。また、信号Startが値１になったため、時刻ｔ１でOR回路９９から出力される信号LatchEnableが値０から値１となり、信号Startが値１である時刻ｔ１〜ｔ２の間の信号LatchEnableは継続して値１となる。また、鍵スケジュール処理モジュール６０では、信号Startが値１であるので、セレクター６１は入力されたKey[127:0]の値をそのままKey_schedule回路７０に出力する。そして、Key_schedule回路７０は、Kin[127:0]として入力されたKey[127:0]（＝鍵RK8)の値と、round[9:0]として入力されたCoreRoundReg[9:0]（＝「10h'100」）と、に基づいてラウンド９用のラウンド鍵をKout[127:0]としてレジスター６２に出力する。また、ラウンド処理モジュール４０では、EXOR回路４８によりPlaintext［127:0]とKey[127:0]とのEXORが導出され、信号Startが値１であるのでセレクター群５０の各セレクターからはEXOR回路４８が導出した値が出力されて、ラウンド０のAddRoundKey処理後の値がレジスター群５１の各レジスターに入力される。
【００５９】
そして、時刻ｔ２のクロックの立ち上がりと共に信号Startが値０になると、ラウンド制御部９０ａでは、レジスター９５の入力である値「10'h200」がRoundReg[9:0]の値として出力される。Startが値０であるので、CoreRoundReg[9:0]の値もRoundReg[9:0]と同じ値「10'h200」となる。また、信号Startが値０であるためセレクター９１ａの出力であるShiftRoundReg[9:0]の値が「10'h001」となり、ShiftControl及びリセット信号RSTnは値１のままであるため、レジスター９５にはこの「10'h001」の値が入力される。また、時刻ｔ１で信号Startが値１になったため、次のクロックの立ち上がり時である時刻ｔ２でBusy生成回路９８から出力される信号Busyが値１となる。これにより、時刻ｔ１〜ｔ２に引き続き時刻ｔ２以降においてもOR回路９９から出力される信号LatchEnableは値１となる。鍵スケジュール処理モジュール６０では、時刻ｔ２のクロックの立ち上がりにより、レジスター６２の入力であるラウンド９用のラウンド鍵がRoundKey[127:0]としてレジスター６２から出力されてAddRounKey処理モジュール４７のEXOR回路群４９に入力される。また、レジスター６２の出力はセレクター６１に入力され、信号Startが値０であるので、Key_schedule回路７０にはラウンド９用のラウンド鍵RoundKey[127:0]がkin[127:0]として入力されると共に、ラウンド制御部９０ａからのCoreRoundReg[9:0]（＝「10'h200」）がround[9:0]として入力される。そして、Key_schedule回路７０はこれらの入力値に基づいてラウンド１０用のラウンド鍵を導出しKout[127:0]としてレジスター６２に出力する。ラウンド処理モジュール４０では、時刻ｔ２のクロックの立ち上がりにより、レジスター群５１の各レジスターからは入力値であるラウンド０の出力値が出力されて、SubBytes処理モジュール４２にラウンド９の入力値として入力される。そして、この入力値に対してSubBytes処理モジュール４２でSubBytes処理が行われ、ShiftRows処理モジュール４３でShiftRows処理が行われて、MixColumns処理モジュール４４に入力される。MixColumns処理モジュール４４では、時刻ｔ２〜ｔ３でのCoreRoundReg[9:0]の値が９ラウンド目を表す「10'h200」であり１０ラウンド目を表す値ではないため、セレクター群４６の各セレクターには値０が入力されて、MixColumns回路群４５によるMixColumns処理後の値がセレクター群４６から出力される。AddRounKey処理モジュール４７では、EXOR回路群４９により、鍵スケジュール処理モジュール６０から入力したラウンド９用のラウンド鍵RoundKey[127:0]と、MixColumns回路群４５から入力した値とのAddRoundKey処理が行われる。また、時刻ｔ２〜ｔ３での信号Startは値０であるため、セレクター群５０の各セレクターには値０が入力されて、EXOR回路群４９によるAddRoundKey処理後の値がセレクター群５０から出力される。
【００６０】
続く時刻ｔ３のクロックが立ち上がると、このラウンド９の処理後の値がレジスター群５１から出力され、ラウンド１０の入力となる。ラウンド制御部９０ａでは、時刻ｔ３のクロックの立ち上がりにより、RoundReg[9:0]やCoreRoundReg[9:0]が、時刻ｔ２〜ｔ３間のShiftRoundReg[9:0]の値である「10'h001」、すなわちラウンド１０を表す値となる。そして、RoundReg[9:0]の値が「10'h001」になったため、ShiftControlが時刻ｔ１以前と同様に値０となる。これにより、以降のレジスター９５の出力は「10'h001」となる。鍵スケジュール処理モジュール６０では、時刻ｔ３のクロックの立ち上がりによりラウンド１０のラウンド鍵RoundKey[127:0]がレジスター６２からAddRounKey処理モジュール４７に出力される。また、ラウンド処理モジュール４０では、時刻ｔ３のクロックの立ち上がり後において、CoreRoundReg[9:0]が「10'h001」であるため、セレクター群４６の各セレクターへのセレクター信号が値１となるから、MixColumns処理モジュール４４ではMixColumns処理を行わずにShiftRows処理モジュール４３から入力した値をそのままAddRounKey処理モジュール４７へ出力する。これにより、時刻ｔ３〜ｔ４間ではSubBytes処理、ShiftRows処理、AddRounKey処理モジュール４７のみが行われ、ＡＥＳのラウンド１０の規格に沿った処理が行われる。そして、時刻ｔ４のクロックの立ち上がりにより、レジスター群５１からラウンド１０の処理後の出力データ（暗号文）が出力される。また、時刻ｔ３〜ｔ４においてRounReg[9:0]が値「10'h001」となったため、次のクロックの立ち上がり時である時刻ｔ４でBusy生成回路９８から出力される信号Busyが値０となる。これにより、信号Startと信号Busyが共に値０となるから、OR回路９９から出力される信号LatchEnableも値０となる。
【００６１】
以上のように、ラウンド制御部９０ａでは、時刻ｔ１で処理が開始されると、クロックの立ち上がり毎にCoreRoundReg[9:0]の値が「10'h100」（＝ラウンド８を表す値），「10'h200」（＝ラウンド９を表す値），「10'h001」（＝ラウンド１０を表す値）の順で切り替わる。これにより、評価用回路３２ａは、時刻ｔ１〜ｔ２間ではラウンド０の処理が行われ、時刻ｔ２〜ｔ３間ではラウンド９の処理が行われ、時刻ｔ３〜ｔ４間ではラウンド１０の処理が行われる。このように、短縮モードの評価用回路３２ａでは、ラウンド制御部９０ａが出力する制御信号であるCoreRoundReg[9:0]の値を通常モードと異ならせることで、ラウンド１〜８のラウンド処理を省略できるようになっている。
【００６２】
また、本実施形態では、短縮モードの評価用回路３２ａに入力する入力データ（平文）及び暗号鍵データを、テストベンチデータ２７の入力データ（平文）及び暗号鍵データから導出したデータRD9A及びラウンド鍵RK8としている。そして、短縮モードの評価用回路３２ａではまず最初にラウンド０の処理としてRD9Aとラウンド鍵RK8との排他的論理和が導出されるため、ラウンド０の処理後の値は、評価用データの導出時に用いたデータRD9の値に戻る。そして、短縮モードの評価用回路３２ａでは、このデータRD9の値とラウンド鍵RK8とを用いてラウンド９，１０の処理が行われる。ここで、データRD9は暗号処理回路３２における８ラウンド目の出力データであり、ラウンド鍵RK8はラウンド８用のラウンド鍵であるから、これを入力してラウンド９，１０の処理を行ったときの処理は、データRD9及びラウンド鍵RK8の導出に用いたテストベンチデータ２７の入力データ（平文）及び暗号鍵データを暗号処理回路３２に入力したときのラウンド９，１０の処理と入出力値を含め全く同じとなり、暗号化コア部３３の回路動作も全く同じとなる。これにより、評価用回路３２ａにテストベンチデータ２７の入力データ（平文）及び暗号鍵データから導出した評価用データを入力したときに得られる消費電力テーブルは、暗号処理回路３２にテストベンチデータ２７の入力データ（平文）及び暗号鍵データを入力したときに得られる消費電力テーブルと、ほぼ同じとなる。より具体的には、消費電力テーブルのうちラウンド１０の出力データは全く同じとなる。消費電力テーブルのうち消費電力データについては、ラウンド制御部９０とラウンド制御部９０ａとの回路動作の異なる部分に起因する消費電力の分だけ異なるが、暗号化コア部３３については全く同じであり、消費電力データ全体としてはほぼ同じ値となる。そして、短縮モードの評価用回路３２ａは暗号処理回路３２と比べてステップ１〜８の処理を省略しているため、暗号処理回路３２を用いて消費電力テーブルを取得する場合と比較して、短縮モードの評価用回路３２ａを用いて消費電力テーブルを取得する方がより短時間で消費電力テーブルを取得することができる。
【００６３】
ステップＳ１４０又はステップＳ１７０で消費電力テーブルを取得すると、評価部２６は、この消費電力テーブルに基づいて差分電力解析を行って、暗号処理回路３２の耐タンパ性を評価し（ステップＳ１８０）、評価結果を出力して（ステップＳ１９０）、本ルーチンを終了する。耐タンパ性の評価は、例えば、次のように行う。まず、暗号処理回路３２の入力となる暗号鍵データ（＝Key[127:0]）を１６個に分割したByte0〜Byte15（各８ビット）を考え、このうちのByte0を特定値に仮定する。次に、消費電力テーブルのうちラウンド１０の出力データのByte0に対応するビット（上位８ビット）の値と、仮定したByte0の特定値と、に基づいてラウンド１０の入力データのByte0に対応するビットの値を演算により導出し、ラウンド１０の入力データのByte0に対応するビットの値と出力データByte0に対応するビットの値とのハミング距離を導出する（これを仮定ハミング距離と表記する）。そして、この仮定ハミング距離を、消費電力テーブルのすべてのラウンド１０の出力データに対して導出し、仮定ハミング距離の値に基づいて消費電力テーブルの消費電力データを２つのグループに分ける。例えば、入出力データのByte0に対応するビットは８ビットであり、仮定ハミング距離は０〜８のいずれかの値をとるから、仮定ハミング距離が４未満であるラウンド１０の出力データに対応する消費電力データのグループと、仮定ハミング距離が４以上であるラウンド１０の出力データに対応する消費電力データのグループと、に分ける。なお、グループ分けのハミング距離の基準は４未満と５以上とするなど、これに限られない。そして、グループ毎の消費電力データの平均波形を求めて２つのグループの平均波形の差分を求める。続いて、この差分をByte0の取り得る全ての値（２５６通り）について求め、Byte0の仮定値を平均波形の差分の大きい順に並べて仮定値を順位付けする。続いて、暗号鍵データの正解値（消費電力テーブルの導出に用いた暗号鍵データ）のByte0の値の順位を調べる。Byte1〜Byte15についても同様に順位付けを行い、正解値の順位を調べる。評価結果の出力としては、例えばByte0〜Byte15の正解値の順位を出力したり、順位が１位であれば差分電力解析が成功しており耐タンパ性が低い旨の表示を出力したりする。なお、この順位が高いほど、消費電力データとラウンド１０のハミング距離との相関が高く、耐タンパ性が低いことを意味する。また、評価結果の出力は、例えば表示部１６にデータ表示することにより行ってもよいし、記憶部１４や図示しない外付けの記憶媒体にデータを記憶することにより行ってもよい。
【００６４】
ここで、本実施形態の構成要素と本発明の構成要素との対応関係を明らかにする。本実施形態の耐タンパ性評価装置１０が本発明の耐タンパ性評価装置に相当し、サイドチャネル情報取得部２５がサイドチャネル情報取得手段に相当し、評価部２６が評価手段に相当する。また、短縮モードの評価用回路３２ａが評価用回路に相当する。なお、本実施形態では、耐タンパ性評価装置１０の動作を説明することにより本発明の耐タンパ性評価方法の一例も明らかにしている。
【００６５】
以上詳述した本実施形態の耐タンパ性評価装置１０によれば、暗号処理回路３２が処理を行う際の消費電力データを取得する代わりに、暗号処理回路３２が所定の順序で行う１０段のラウンド処理のうち最終段の処理を含むラウンド９，１０の処理を行う短縮モードの評価用回路３２ａを用いて、短縮モードの評価用回路３２ａに評価用データを入力したときの消費電力データを複数取得する。そして、この複数の消費電力データに基づいて暗号処理回路３２の耐タンパ性の評価を行う。こうすることで、データを入力してからデータが出力されるまでの処理時間は暗号処理回路３２よりもその一部の処理を行う短縮モードの評価用回路３２ａの方が短いため、短時間で複数の消費電力データを取得することができる。そのため、暗号処理回路３２の耐タンパ性の評価をより効率的に行うことができる。なお、上述したステップＳ１６０では評価用データを導出しているが、これに際しては、消費電力データを導出する必要がない。そのため、評価用データの導出と短縮モードの評価用回路３２ａに基づく消費電力データの導出との処理時間の合計は、暗号処理回路３２にデータを入力して消費電力データを導出する際の処理時間（＝通常モードの評価用回路３２ａにより消費電力データを導出する際の処理時間）より短い時間となる。
【００６６】
また、暗号処理回路に入力するテストベンチデータ２７の入力データと暗号鍵データとに基づいて、入力データと暗号鍵データとを入力したときの暗号処理回路３２の出力データと、評価用データを入力したときの短縮モードの評価用回路３２ａの出力データと、が同じ値になるような評価用データを導出して、これを短縮モードの評価用回路３２ａに入力している。そのため、暗号処理回路３２に入力データと暗号鍵データとを入力したときの処理結果と、短縮モードの評価用回路３２ａに評価用データを入力したときの処理結果とが同じになるため、暗号処理回路３２から得られる消費電力データとより近い消費電力データを評価用回路３２ａから取得することができる。また、短縮モードの評価用回路３２ａが暗号処理回路３２の１０段のラウンド処理のうち９段目から１０段目までのラウンド処理を行う回路であるところ、暗号処理回路３２に入力するテストベンチデータ２７の入力データ（平文）と暗号鍵データとに基づいて、暗号処理回路３２の１段目から８段目までのラウンド処理を行ったあとの出力データ（データRD9）と暗号鍵データ（ラウンド鍵RK8）とに基づいて評価用データを導出しているため、適切な評価用データを容易に導出することができる。
【００６７】
さらに、短縮モードの評価用回路３２ａは、暗号処理回路３２のうち暗号化コア部３３を変更せずラウンド制御部９０をラウンド制御部９０ａに変更した回路である。そのため、暗号処理回路３２のラウンド処理に含まれる各処理を行う回路自体は短縮モードの評価用回路３２ａにおいても変更されないから、暗号処理回路３２と評価用回路３２ａとで得られる消費電力データの差異をより小さくすることができる。
【００６８】
さらにまた、評価用データに基づく処理を行う際の短縮モードの評価用回路３２ａにおける最終段（ラウンド１０）の処理の消費電力データと、短縮モードの評価用回路３２ａの最終段の処理の出力データと、を対応付けた消費電力テーブルを取得し、消費電力テーブルに基づいて、暗号処理回路３２の耐タンパ性の評価を行う。このため、消費電力テーブルに基づいて耐タンパ性を適切に評価することができる。
【００６９】
なお、本発明は上述した実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の態様で実施し得ることはいうまでもない。
【００７０】
例えば、上述した実施形態では、短縮モードの評価用回路３２ａは、暗号処理回路３２のラウンド制御部９０を図９のラウンド制御部９０ａに変更した回路であるものとしたが、暗号処理回路３２の１０段のラウンド処理のうち、９段目から１０段目までのラウンド処理を含む処理を行うものであれば、評価用回路３２ａを他の回路構成としてもよい。例えば、ラウンド制御部９０ａを他の回路構成としてもよい。図１２は、変形例のラウンド制御部９０ｂの回路構成を示す説明図である。ラウンド制御部９０ｂは、図示するように、セレクター９１ａのかわりにShift回路９１ｂを備える点以外は、ラウンド制御部９０ａと同様の構成である。そこで、ラウンド制御部９０ｂのうちラウンド制御部９０ａと同一の構成要素については同じ符号を付して詳細な説明を省略する。ラウンド制御部９０ｂは、Shift回路９１ｂと、ＯＲ回路９２と、セレクター９３と、セレクター９４と、レジスター９５と、セレクター９６ａと、セレクター９７ａと、Busy生成回路９８と、OR回路９９と、を備えている。Shift回路９１ｂは、図５に示したラウンド制御部９０のShift回路９１を一部修正したものである。Shift回路９１ｂは、基本的には入力したRoundReg[9:0]を左に１ビットシフトさせた値をShiftRoundReg[9:0]として出力する。ただし、入力したRoundReg[9:0]のうち０ビット目であるRoundReg[0]の値についてはShiftRoundReg[1]ではなくShiftRoundReg[9]の値として出力する。また、入力したRoundReg[9:0]のうち８ビット目であるRoundReg[8]の値についてはShiftRoundReg[9]ではなくShiftRoundReg[1]の値として出力する。次に、このように構成されたラウンド制御部９０ｂの動作について説明する。図１３は、ラウンド制御部９０ｂの動作の様子を示すタイムチャートである。図示するように、信号Start及びリセット信号RSTnが値１となる時刻ｔ１より前の状態では、RoundReg[9:0]及びCoreRoundReg[9:0]の値は、図１１の時刻ｔ１以前と同様に値「10'h001」となっている。また、Shift回路９１ｂは、RoundReg[9:0]の値「10'h001」が入力されているため、ShiftRoundReg[9:0]としてラウンド値「10'h200」を出力している。また、信号Start，リセット信号RSTn，RoundReg[9:0]の状態（値）は図１１の時刻ｔ１以前と同じであるため、図１１と同様にShiftControl及び信号Busyは値０となっている。この状態で時刻ｔ１のクロックの立ち上がりで信号Start及びリセット信号RSTnが値１となると、時刻ｔ１〜ｔ２の間に、信号startが値１となったためＯＲ回路９２の出力であるShiftControlが値１となり、セレクター９３はShiftRoundReg[9:0](=「10'h200」）を出力する。また、リセット信号RSTnが値１となっているため、セレクター９４の出力は固定値「10h'001」から９ラウンド目を表す値(=「10'h200」）に切り替わり、レジスター９５に入力された状態になる。また、信号Startが値１であるため、レジスター９５の出力すなわちRoundReg[9:0]は値「10'b001」のままであるが、CoreRoundReg[9:0]の値は「10'b001」の８ビット目を値１，０ビット目を値０とした値「10'b100」となる。また、RoundReg[9:0]の値はShiftRoundReg[9:0]は「10'b001」のままであるため、ShiftRoundReg[9:0]の出力は「10'h200」のままとなる。また、信号Startが値１になったため、時刻ｔ１でOR回路９９から出力される信号LatchEnableが値０から値１となり、信号Startが値１である時刻ｔ１〜ｔ２の間の信号LatchEnableは継続して値１となる。次に、時刻ｔ２のクロックの立ち上がりと共に信号Startが値０になると、ラウンド制御部９０ｂでは、レジスター９５の入力である「10'h200」がRoundReg[9:0]及びCoreRoundReg[9:0]の値として出力される。また、RounReg[9:0]の値が「10'h001」から「10'h200」に変わったため、Shift回路９１ｂの出力であるShiftRoundReg[9:0]の値が「10'h001」となり、ShiftControl及びリセット信号RSTnも値１のままであるため、レジスター９５にはこの「10'h001」の値が入力される。また、時刻ｔ１で信号Startが値１になったため、次のクロックの立ち上がり時である時刻ｔ２でBusy生成回路９８から出力される信号Busyが値１となる。これにより、時刻ｔ１〜ｔ２に引き続き時刻ｔ２以降においてもOR回路９９から出力される信号LatchEnableは値１となる。続いて、時刻ｔ３のクロックの立ち上がりにより、ラウンド制御部９０ｂでは、レジスター９５の入力である「10'h001」がRoundReg[9:0]及びCoreRoundReg[9:0]の値として出力される。そして、RoundReg[9:0]の値が「10'h001」になったため、ShiftControlが時刻ｔ１以前と同様に値０となる。これにより、以降のレジスター９５の出力は「10'h001」となる。また、RounReg[9:0]の値が「10'h200」から「10'h001」に変わったため、Shift回路９１ｂの出力であるShiftRoundReg[9:0]の値が「10'h200」となる。また、時刻ｔ３〜ｔ４においてRounReg[9:0]が値「10'h001」となったため、次のクロックの立ち上がり時である時刻ｔ４でBusy生成回路９８から出力される信号Busyが値０となる。これにより、信号Startと信号Busyが共に値０となるから、OR回路９９から出力される信号LatchEnableも値０となる。このようにラウンド制御部９０ｂが動作することで、時刻ｔ１のクロックの立ち上がり以降、CoreRoundReg[9:0]の値は「10'h001」からクロックの立ち上がり毎に「10'h100」,「10'h200」，「10'h001」の順で切り替わる。これは、図１１に示したラウンド制御部９０ａと同じ動作である。これにより、ラウンド制御部９０ａの代わりに図１２のラウンド制御部９０ｂを用いた評価用回路を作成しても、本実施形態と同様に短縮モードの評価用回路はラウンド０，９，１０の処理を行う回路となる。
【００７１】
上述した実施形態では、短縮モードの評価用回路３２ａは、暗号処理回路３２の１０段のラウンド処理のうち、９段目から１０段目までのラウンド処理を含む処理を行うものとしたが、最終段であるラウンド１０の処理を含む暗号処理回路３２の一部の処理を行うものであれば、評価用回路３２ａを他の回路構成としてもよい。評価用回路３２ａは、１０段のラウンド処理のうち、ｎ段目（ｎは２以上１０以下）から１０段目までのラウンド処理を含む処理を行う回路としてもよい。この場合、評価用データは、暗号処理回路に入力する入力データと暗号鍵データとに基づいて、暗号処理回路の１０段のラウンド処理のうち１段目から（ｎ−１）段目までのラウンド処理を行ったあとの出力データと暗号鍵データとに基づく値として導出してもよい。図１４は、変形例のラウンド制御部９０ｃの回路構成を示す説明図である。ラウンド制御部９０ｃは、図示するように、セレクター９１ａを備えない点、及びセレクター９６ａのかわりにセレクター９６ｃを備える点以外は、ラウンド制御部９０ａと同様の構成である。そこで、ラウンド制御部９０ｃのうちラウンド制御部９０ａと同一の構成要素については同じ符号を付して詳細な説明を省略する。ラウンド制御部９０ｃは、ＯＲ回路９２と、セレクター９３と、セレクター９４と、レジスター９５と、セレクター９６ｃと、セレクター９７ａと、Busy生成回路９８と、OR回路９９と、を備えている。セレクター９３には、ShiftRoundReg[9:0]として常に値「10'h001」が入力されている。セレクター９６ｃは、レジスター９５の出力側とラウンド制御部９０ｃのCoreRoundReg[9:0]の出力との間に挿入された回路であり、入力データとして、レジスター９５からの出力データの９ビット目と、値「1b'1」とが入力されている。セレクター９６ｃには、セレクター信号として信号Startが入力されており、信号Startが値１のときには値「1'b1」をCoreRoundReg[9:0]の９ビット目の値として出力し、値０のときにはレジスター９５からの出力データの９ビット目の値をCoreRoundReg[9:0]の９ビット目の値として出力する。次に、このように構成されたラウンド制御部９０ｃの動作について説明する。図１５は、ラウンド制御部９０ｃの動作の様子を示すタイムチャートである。図示するように、信号Start及びリセット信号RSTnが値１となる時刻ｔ１より前の状態では、セレクター９４は固定値である値「10'h001」を出力するため、RoundReg[9:0]及びCoreRoundReg[9:0]は値「10'h001」となっている。また、ShiftRoundReg[9:0]の値は「10'h001」に固定されている。また、信号Start，リセット信号RSTn，RoundReg[9:0]の状態（値）は図１１の時刻ｔ１以前と同じであるため、図１１と同様にShiftControl及び信号Busyは値０となっている。この状態で時刻ｔ１のクロックの立ち上がりで信号Start及びリセット信号RSTnが値１となると、時刻ｔ１〜ｔ２の間に、信号startが値１となったためＯＲ回路９２の出力であるShiftControlが値１となり、セレクター９３はShiftRoundReg[9:0](=「10'h001」）を出力する。また、リセット信号RSTnが値１となっているため、セレクター９４の出力は固定値「10h'001」から１０ラウンド目を表す値(=「10'h001」）に切り替わり、レジスター９５に入力された状態になる。また、レジスター９５の出力すなわちRoundReg[9:0]は値「10'b001」のままであるが、信号Startが値１であるため、CoreRoundReg[9:0]の値は「10'b001」の９ビット目を値１，０ビット目を値０とした値「10'b200」となる。また、信号Startが値１になったため、時刻ｔ１でOR回路９９から出力される信号LatchEnableが値０から値１となり、信号Startが値１である時刻ｔ１〜ｔ２の間の信号LatchEnableは継続して値１となる。次に、時刻ｔ２のクロックの立ち上がりと共に信号Startが値０になると、ラウンド制御部９０ｃでは、レジスター９５の入力である「10'h001」がRoundReg[9:0]の値として出力される。また、信号Startが値０であるのでCoreRoundReg[9:0]も同じ値「10'h001」となる。そして、RoundReg[9:0]の値が「10'h001」であり信号Startも値０であるため、ShiftControlが時刻ｔ２において値０となる。これにより、以降のレジスター９５の出力は「10'h001」となる。また、時刻ｔ１で信号Startが値１になったため、次のクロックの立ち上がり時である時刻ｔ２でBusy生成回路９８から出力される信号Busyが値１となる。これにより、時刻ｔ１〜ｔ２に引き続き時刻ｔ２以降においてもOR回路９９から出力される信号LatchEnableは値１となる。また、時刻ｔ２〜ｔ３において信号Busyが値１でありRounReg[9:0]が値「10'h001」であるため、次のクロックの立ち上がり時である時刻ｔ３でBusy生成回路９８から出力される信号Busyが値０となる。これにより、信号Startと信号Busyが共に値０であるから、OR回路９９から出力される信号LatchEnableも時刻ｔ３で値０となる。このようにラウンド制御部９０ｃが動作することで、時刻ｔ１のクロックの立ち上がり以降、CoreRoundReg[9:0]の値は「10'h001」からクロックの立ち上がり毎に「10'h200」（＝ラウンド９を表す値）,「10'h001」（＝ラウンド１０を表す値）の順で切り替わる。これにより、ラウンド制御部９０ａの代わりに図１４のラウンド制御部９０ｃを用いた評価用回路を作成すると、時刻ｔ１〜ｔ２間ではラウンド０の処理が行われ、時刻ｔ２〜ｔ３間ではラウンド１０の処理が行われる。すなわち、ラウンド制御部９０ｃを用いた短縮モードの評価用回路はラウンド０，１０の処理を行う回路となる。この場合でも、本実施形態と同様にサイドチャネル情報取得部２５によりラウンド１０の処理の前後の消費電力データを含む消費電力テーブルを短時間で取得することができる。なお、このラウンド制御部９０ｃを用いる場合には、ステップＳ１６０において以下のように評価用データを導出する。まず、テストベンチデータ２７の１つの入力データ（平文）と暗号鍵データとを読み出し、読み出した暗号鍵データからラウンド９用のラウンド鍵RoundKey[127:0]を導出する（以下、この値をラウンド鍵RK9とも表記する）。次に、テストベンチデータ２７から読み出した入力データ（平文）と暗号鍵データとをPlaintext［127:0]とKey[127:0]として暗号処理回路３２に入力したときの、９ラウンド目の出力データ（レジスター群５１の出力データ）を導出する（以下、この値をデータRD10とも表記する）。そして、求めたラウンド鍵RK9とデータRD10との排他的論理和を導出する。そして、この排他的論理和で導出した値であるデータRD10Aと、ラウンド鍵RK9とを、評価用回路の入力データ（平文）と暗号鍵とのペアすなわち評価用データとする。こうすることで、ラウンド制御部９０ｃを用いた評価用回路を用いて、暗号処理回路３２にテストベンチデータ２７の入力データ（平文）及び暗号鍵データを入力したときに得られる消費電力テーブルと、ほぼ同じ（ラウンド１０の出力データは全く同じ）消費電力テーブルを得ることができる。
【００７２】
上述したラウンド制御部９０ｃの他に、図１６に示す変形例のラウンド制御部９０ｄを用いてもよい。ラウンド制御部９０ｄは、図示するように、Shift回路９１ｄを備える点以外は、ラウンド制御部９０ｃと同様の構成である。そこで、ラウンド制御部９０ｄのうちラウンド制御部９０ｃと同一の構成要素については同じ符号を付して詳細な説明を省略する。ラウンド制御部９０ｄは、Shift回路９１ｄと、ＯＲ回路９２と、セレクター９３と、セレクター９４と、レジスター９５と、セレクター９６ｃと、セレクター９７ａと、Busy生成回路９８と、OR回路９９と、を備えている。Shift回路９１ｄは、図５に示したラウンド制御部９０のShift回路９１を一部修正したものである。Shift回路９１ｄは、基本的には入力したRoundReg[9:0]を左に１ビットシフトさせた値をShiftRoundReg[9:0]として出力する。ただし、入力したRoundReg[9:0]のうち０ビット目であるRoundReg[0]の値についてはShiftRoundReg[1]ではなくShiftRoundReg[0]の値として出力する。また、入力したRoundReg[9:0]のうち９ビット目であるRoundReg[9]の値についてはShiftRoundReg[0]ではなくShiftRoundReg[1]の値として出力する。このように構成されたラウンド制御部９０ｄでは、RoundReg[9:0]，ShiftRoundReg[9:0]，CoreRoundReg[9:0]，Shiftcontrol，信号Busy，信号LatchEnableの値はラウンド制御部９０ｃと同じように変化する。すなわち、ラウンド制御部９０ｄの動作も、図１５に示した通りとなる。そのため、ラウンド制御部９０ｄを用いた短縮モードの評価用回路も、ラウンド０，１０の処理を行う回路となり、本実施形態と同様にサイドチャネル情報取得部２５によりラウンド１０の処理の前後の消費電力データを含む消費電力テーブルを短時間で取得することができる。なお、ラウンド制御部９０ｄを用いた短縮モードの評価用回路に入力する評価用データを、ラウンド制御部９０ｃと同様にデータRD10A及びラウンド鍵RK9とすることで、ラウンド制御部９０ｃを用いた場合と同様に、暗号処理回路３２にテストベンチデータ２７の入力データ（平文）及び暗号鍵データを入力したときに得られる消費電力テーブルとほぼ同じ消費電力テーブルを得ることができる。
【００７３】
上述した実施形態では、評価用回路３２ａは、ラウンド制御部９０とラウンド制御部９０ａとを備え、通常モードと短縮モードとを切替可能としたが、ラウンド制御部９０を備えない、すなわち常に短縮モードの評価用回路３２ａの動作をするものとしてもよい。この場合、ShortModeのノードを仕込んでおく必要はない。
【００７４】
上述した実施形態では、評価用回路３２ａを暗号処理回路３２から生成する際にShortModeのノードを仕込んでおき、このShortModeを値０(=1'b0）とするか値１(=1'b1）とするかを変更することで、通常モードと短縮モードとを選択可能としたが、これに限られない。他の構成により通常モードと短縮モードとを選択可能としてもよい。
【００７５】
上述した実施形態では、サイドチャネル情報取得部２５はＳＰＩＣＥを用いたシミュレーションを行って消費電力テーブルを取得するものとしたが、評価用回路３２ａのサイドチャネル情報を取得するものであればこれに限られない。例えば、サイドチャネル情報取得部２５が論理シミュレータと消費電力解析ツールとを用いて消費電力テーブルを取得するものとしてもよい。
【００７６】
上述した実施形態では、サイドチャネル情報取得部２５は、サイドチャネル情報として評価用回路３２ａの消費電力データを取得するものとしたが、評価用回路３２ａのサイドチャネル情報を取得するものであればこれに限られない。例えば、サイドチャネル情報として、評価用回路３２ａが発する電磁波，評価用回路３２ａが発する音，評価用回路３２ａの処理時間の少なくともいずれか１つに関する情報を取得してもよい。また、サイドチャネル情報取得部２５がサイドチャネル情報を取得する攻撃タイミングは、ラウンド１０の処理後の出力データ（暗号文）の出力時のクロック立ち上がりから所定時間経過後としたが、評価用回路３２ａの処理時のサイドチャネル情報を取得するものであればこれに限られない。例えば、ラウンド１０の入力データの入力時のクロック立ち上がりから所定時間経過後など、評価用回路３２ａの最終段の処理のサイドチャネル情報としてもよい。
【００７７】
上述した実施形態では、サイドチャネル情報取得部２５は、サイドチャネルテーブルとして消費電力データと、ラウンド１０の処理の出力データを取得するものとしたが、出力データに限らずサイドチャネル情報と相関がある値を取得するものであればよい。
【００７８】
上述した実施形態では、評価部２６は、消費電力テーブルに基づいて、消費電力テーブルのラウンド１０の出力データからハミング距離（仮定ハミング距離）を導出して、差分電力解析を行うものとしたが、ハミング距離に限らず消費電力テーブルを用いて導出でき暗号鍵データと関連のある中間値を導出して差分電力解析を行うものであればよい。例えば、ラウンド１０の出力データから導出したラウンド１０の入力データのハミング重みを中間値として導出して差分電力解析を行うものとしてもよい。また、評価部２６は、差分電力解析に限らず、相関電力解析など、サイドチャネル情報に基づく耐タンパ性の評価を行うものであればよい。
【００７９】
上述した実施形態では、評価用回路データ生成部２１は、暗号処理回路３２から暗号化コア部３３を変更せずラウンド制御部９０のみを変更した評価用回路３２ａを作成するものとしたが、暗号処理回路３２の複数段の処理のうち最終段の処理を含む暗号処理回路３２の一部の処理を行う評価用回路を作成するものであればよい。例えば、暗号化コア部３３を変更するものとしてもよい。例えば、ラウンド処理モジュール４０においてEXOR回路４８を削除してPlaintext[127:0]が直接セレクター群５０のセレクターに入力されるようにした評価用回路を作成してもよい。こうすれば、評価用回路はラウンド０を行わずラウンド９，１０のみを行う回路とすることができる。この場合、評価用データ導出部２３は、評価用データとして、８ラウンド目の出力データRD9と９ラウンド目のラウンド鍵RK9とのペアを導出するものとしてもよい。
【００８０】
上述した実施形態では、評価用データ導出部２３がテストベンチデータ２７に基づいて導出した評価用データを短縮モードの評価用回路３２ａに入力するものとしたが、これに限らずどのような値の評価用データを入力してもよい。例えばランダムな入力データ（平文）と暗号鍵データとを評価用データとして評価用回路３２ａに入力してもよいし、テストベンチデータ２７の入力データ（平文）と暗号鍵データとを評価用データとして評価用回路３２ａに入力してもよい。あるいは、予めテストベンチデータ２７に基づいて導出した評価用データが記憶部１４などに記憶されているものとし、図７のステップＳ１６０を省略するものとしてもよい。
【００８１】
上述した実施形態では、暗号処理回路３２は、１０段のラウンド処理を行うものとしたが、これに限らずｍ段（ｍは２以上の整数）のラウンド処理を行うものであればよい。また、暗号処理回路は、ラウンド処理に限らず複数段の処理を行うものであってもよい。この場合、評価用回路は、複数段の処理のうち最終段の処理を含む暗号処理回路の一部の処理を行う評価用回路であればよい。
【００８２】
上述した実施形態では、暗号処理回路３２は、１２８ビットの入力データ（平文）と１２８ビットの暗号鍵データとに基づくＡＥＳの暗号化処理を行うものとしたが、暗号鍵データは１２８ビットに限らず１９２ビットや２５６ビットとしてもよい。なお、暗号鍵データを１９２ビットとする場合には、１２段のラウンド処理を行う（ラウンド０のあと、ラウンド１〜１２を行う）ものとすればよい。暗号鍵データを２５６ビットとする場合には、１４段のラウンド処理を行う（ラウンド０のあと、ラウンド１〜１４を行う）ものとすればよい。また、暗号処理回路３２は、ＡＥＳに限らず他の方式の暗号化処理を行うものとしてもよい。
【００８３】
上述した実施形態では、評価用回路データ生成部２１が暗号処理回路３２から評価用回路３２ａを作成するものとしたが、これに限られない。例えば、ユーザーが暗号処理回路３２のデータから評価用回路３２ａのデータを作成するものとしてもよい。あるいは、予め評価用回路３２ａのデータが記憶部１４などに記憶されているものとし、図７のステップＳ１００を省略するものとしてもよい。
【００８４】
上述した実施形態では、ステップＳ１００で評価用回路３２ａを作成してからステップＳ１１０の処理を行って暗号処理回路３２ａのデータ形式を変換するものとしたが、これに限られない。例えば、暗号処理回路３２に対してステップＳ１１０の処理を行ってデータ形式を変換したあとに、変換後の暗号処理回路３２のデータに基づいて評価用回路３２ａを作成してもよい。回路データ３１が最初からサイドチャネル情報取得部２５が利用できるデータ形式で記述されており、データ形式の変換を行わないものとしてもよい。
【実施例】
【００８５】
以下には、耐タンパ性評価プログラム及び耐タンパ性評価装置を実際に作成した例を実施例として説明する。
【００８６】
［実施例１］
実施例１として、上述した実施形態の耐タンパ性評価プログラム２０を作成した。そして、ＣＰＵがＸｅｏｎ  Ｗ３５６５（３．２ＧＨｚ）でありＲＡＭの容量が１６ＧＢである制御部を有するコンピューターのハードディスクにこれを記憶して、実施例１の耐タンパ性評価装置１０とした。なお、サイドチャネル情報取得部２５が消費電力テーブルを取得する際の消費電力データを取得するタイミング（攻撃タイミング）は、任意に設定できるものとした。
【００８７】
［実施例２］
実施例２として、評価用回路データ生成部２１が生成する評価用回路３２ａがラウンド制御部９０ａのかわりに図１４に示したラウンド制御部９０ｃを備える点以外は、実施例１と同様の耐タンパ性評価プログラム２０を作成した。この耐タンパ性評価プログラム２０を実施例１と同様のコンピューターのハードディスクに記憶して、実施例２の耐タンパ性評価装置１０とした。
【００８８】
なお、実施例１，２の耐タンパ性評価装置１０において短縮モードで耐タンパ性の評価を行う場合が本発明の耐タンパ性評価方法に該当し、通常モードで耐タンパ性の評価を行う場合は、比較例に相当する。
【００８９】
［評価試験１：シミュレーション時の回路動作の比較］
実施例１の耐タンパ性評価装置１０について、上述した実施形態と同じ暗号処理回路３２に対して耐タンパ性評価プログラム２０を実行した。そして、評価用回路データ生成部２１により暗号処理回路３２から作成された評価用回路３２ａの動作をサイドチャネル情報取得部２５がシミュレーションしたときの、評価用回路３２ａの処理値（レジスター群５１の出力値及びRoundKey[127:0]の値）を取得した。処理値の取得は通常モードの評価用回路３２ａの動作をシミュレーションしたとき（図７のステップＳ１４０を行ったとき）と、短縮モードの評価用回路３２ａの動作をシミュレーションしたとき（図７のステップＳ１７０を行ったとき）とについて行った。なお、通常モードの評価用回路３２ａのシミュレーションでは、テストベンチデータ２７の入力データ（平文）として所定値Ａ[127:0]（＝１６進数表記で「759f02211f85e5ff2f904a780f58006f」）を入力し、暗号鍵データとして所定値Ｂ[127:0]（＝１６進数表記で「2923be84e16cd6ae529049f1f1bbe9eb」）を入力するものとした。また、短縮モードのシミュレーションでは、入力データ（平文）としてこの所定値Ａ[127:0]，所定値Ｂ[127:0]から導出したデータRD9A（＝１６進数表記で「5fbf6bdc870912d50edc0cc55c2eb683」）を入力し、暗号鍵データとして所定値Ｂ[127:0]から導出したラウンド鍵RK8（＝１６進数表記で「51d5a6072ca36be0c4c154bf681d7e56」）を入力した。実施例２の耐タンパ性評価装置１０についても、同様に通常モード及び短縮モードの評価用回路３２ａについてシミュレーションを行って、処理値（レジスター群５１の出力値及びRoundKey[127:0]の値）を取得した。なお、実施例２においても通常モードの評価用回路３２ａのシミュレーションでは、入力データ（平文）として所定値Ａ[127:0]を入力し、暗号鍵データとして所定値Ｂ[127:0]を入力するものとした。また、短縮モードのシミュレーションでは、入力データ（平文）としてこの所定値Ａ[127:0]，所定値Ｂ[127:0]から導出したデータRD10A（＝１６進数表記で「cb55d62662abdd839da377d55a071833」）を入力し、暗号鍵データとして所定値Ｂ[127:0]から導出したラウンド鍵RK9（＝１６進数表記で「ee261742c2857ca20644281d6e59564b」）を入力した。
【００９０】
評価試験１の結果を図１７，１８に示す。図１７は評価試験１における実施例１の評価用回路３２ａの処理値の説明図であり、図１８は評価試験１における実施例２の評価用回路３２ａの処理値の説明図である。図１７，１８のいずれも、上段が通常モードの場合を示し下段が短縮モードの場合を示している。図１７に示すように、レジスター群５１の出力値を比較すると、ラウンド９の入力データ，ラウンド１０の入力データ（＝ラウンド９の出力データ），暗号文（＝ラウンド１０の出力データ）のいずれも、通常モードと短縮モードとで値は同じであった。また、RoundKey[127:0]の値を比較すると、ラウンド９のラウンド鍵，ラウンド１０のラウンド鍵のいずれも、通常モードと短縮モードとで値は同じであった。このことから、例えばラウンド１０の入力時のクロックの立ち上がりから所定時間経過後のタイミングである攻撃タイミングＡや、ラウンド１０の出力時のクロックの立ち上がりから所定時間経過後のタイミングである攻撃タイミングＢなどを攻撃タイミングとする場合、短縮モードであっても通常モードと暗号化コア部３３の回路動作が同じであるので、通常モードとほぼ同じ消費電力データが得られることがわかる。図１８においても、ラウンド１０の入力データ（＝ラウンド９の出力データ），暗号文（＝ラウンド１０の出力データ），ラウンド１０のラウンド鍵のいずれも、通常モードと短縮モードとで値は同じであった。このことから、例えばラウンド１０の出力時のクロックの立ち上がりから所定時間経過後のタイミングである攻撃タイミングＣなどを攻撃タイミングとする場合、短縮モードであっても通常モードほぼ同じ消費電力データが得られることがわかる。なお、図１７，１８においてレジスター群５１の出力値及びRoundKey[127:0]の値は４桁の１６進数で表記されている箇所があるが（例えば図１７のラウンド９の入力データ「0E6A」など）、これは実際の値である３２桁の１６進数（＝１２８ビット）の値のうち上位４桁のみを表示したものである。
【００９１】
［評価試験２：消費電力データ取得時間の比較］
実施例１，２の耐タンパ性評価装置１０について、予め用意したテストベンチデータ２７を用いて、上述した実施形態と同じ暗号処理回路３２について耐タンパ性評価プログラム２０を実行して耐タンパ性の評価を行った。テストベンチデータ２７としては、１つの暗号鍵データと複数の入力データ（平文）とを用いた。そして、実施例１の耐タンパ性評価装置１０を用いて暗号処理回路３２から作成した通常モードの評価用回路３２ａで耐タンパ性の評価を行った場合と、短縮モードの評価用回路３２ａで耐タンパ性の評価を行った場合と、実施例２の耐タンパ性評価装置１０を用いて暗号処理回路３２から作成した短縮モードの評価用回路３２ａで耐タンパ性の評価を行った場合とで、サイドチャネル情報取得部２５がシミュレーションにより消費電力データを取得するのに要した時間を測定した。時間の測定は、テストベンチデータ２７の入力データ（平文）の数を千パターン，１万パターン，５万パターンとした場合についてそれぞれ行った。攻撃タイミングは、実施例１では暗号文（ラウンド１０の出力データ）が出力されるクロックの立ち上がりエッジから１．４ｎｓｅｃ経過時のタイミングとした。また、実施例２では、暗号文が出力されるクロックの立ち上がりエッジから１．３ｎｓｅｃ経過時のタイミングを攻撃タイミングとした。結果を表１に示す。なお、表１では、入力データ（平文）の数が１万パターン，５万パターンの場合の時間に基づいて予測した、１０万パターン，１００万パターンの場合の時間についても併せて示した。表１に示すように、通常モードに比べて実施例１，２の短縮モードでは、消費電力データの取得に要した時間はいずれも短く、実施例１で約３分の１、実施例２では約５分の１の時間で消費電力データの取得が可能であった。
【００９２】
【表１】
2013247511.tif 000003
【００９３】
［評価試験３：消費電力データの比較］
評価試験２と同様に、実施例１，２の耐タンパ性評価装置１０について、予め用意したテストベンチデータ２７を用いて、上述した実施形態と同じ暗号処理回路３２について耐タンパ性評価プログラム２０を実行し、サイドチャネル情報取得部２５が取得した消費電力データの波形の比較を行った。なお、テストベンチデータ２７としては、１つの暗号鍵データと３パターンの入力データ（平文）（以下、Text1〜Text3とも表記する）を用いた。図１９は、実施例１において通常モードの評価用回路３２ａについてシミュレーションを行って、サイドチャネル情報取得部２５が取得した消費電力データの波形を示すグラフである。図２０は、実施例１において短縮モードの評価用回路３２ａについてシミュレーションを行ってサイドチャネル情報取得部２５が取得した消費電力データの波形を示すグラフである。図２１は、実施例１において通常モードの評価用回路３２ａについてシミュレーションを行って、サイドチャネル情報取得部２５が取得した消費電力データの波形を示すグラフである。図２２は、実施例１において短縮モードの評価用回路３２ａについてシミュレーションを行ってサイドチャネル情報取得部２５が取得した消費電力データの波形を示すグラフである。図２３は、実施例２において通常モードの評価用回路３２ａについてシミュレーションを行って、サイドチャネル情報取得部２５が取得した消費電力データの波形を示すグラフである。図２４は、実施例２において短縮モードの評価用回路３２ａについてシミュレーションを行ってサイドチャネル情報取得部２５が取得した消費電力データの波形を示すグラフである。なお、図１９，２０，２３，２４では、暗号文（ラウンド１０の出力データ）が出力されるクロックの立ち上がりエッジを時刻0nsecとして、時刻0nsec〜10nsecまでの期間の消費電力データを示した。また、図２１，２２では、ラウンド１０の入力データが入力されるクロックの立ち上がりエッジを時刻0nsecとして、時刻0nsec〜10nsecまでの期間の消費電力データを示した。
【００９４】
図１９，２０の比較からわかるように、実施例１の通常モードと短縮モードとで、Text1~3のいずれについても、時刻0nsec〜10nsecの間にわたって、ほぼ同じ値，同じ傾向の消費電力データが得られた。図１９，２０とは消費電力データを取得するタイミングの異なる図２１，２２においても、両者の消費電力データはほぼ同じ値，同じ傾向となった。また、実施例２の通常モードと短縮モードとにおいても、図２３，２４からわかるように両者の消費電力データはほぼ同じ値，同じ傾向となった。
【００９５】
［評価試験４：耐タンパ性の評価結果の比較］
評価試験２と同様に、実施例１，２の耐タンパ性評価装置１０について、予め用意したテストベンチデータ２７を用いて、上述した実施形態と同じ暗号処理回路３２について耐タンパ性評価プログラム２０を実行して耐タンパ性の評価を行い、評価結果を比較した。なお、テストベンチデータ２７としては、１つの暗号鍵データと５万パターンの入力データ（平文）とを用いた。図２５〜図３０は、評価に用いた入力データ（平文）の総数（＝消費電力データの波形数）と暗号鍵データであるByte0〜Byte15の正解値（正解鍵）の順位との関係を示すグラフである。図２５は、実施例１の通常モードの評価用回路３２ａにおいて、暗号文（ラウンド１０の出力データ）が出力されるクロックの立ち上がりエッジから1.4nsec経過時点を攻撃タイミングとしたときの様子を示している。図２６は、実施例１の短縮モードの評価用回路３２ａにおいて、暗号文（ラウンド１０の出力データ）が出力されるクロックの立ち上がりエッジから1.4nsec経過時点を攻撃タイミングとしたときの様子を示している。図２７は、実施例１の通常モードの評価用回路３２ａにおいて、ラウンド１０の入力データ（ラウンド９の出力データ）が入力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。図２８は、実施例１の短縮モードの評価用回路３２ａにおいて、ラウンド１０の入力データ（ラウンド９の出力データ）が入力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。図２９は、実施例２の通常モードの評価用回路３２ａにおいて、暗号文（ラウンド１０の出力データ）が出力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。図３０は、実施例２の短縮モードの評価用回路３２ａにおいて、暗号文（ラウンド１０の出力データ）が出力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。
【００９６】
図２５，２６，２９，３０のいずれにおいても、消費電力データの波形数が多いほどByte0〜Byte15の正解値の順位が高くなる傾向にあった。そして、図２５と図２６とでは、Byte0〜Byte15の正解値の順位が同様の傾向を示しており、実施例１の短縮モードでも実施例１の通常モードと同様の評価結果が得られることが確認できた。同様に、図２９と図３０とでは、Byte0〜Byte15の正解値の順位が同様の傾向を示しており、実施例２の短縮モードでも実施例２の通常モードと同様の評価結果が得られることが確認できた。また図２７，２８では、消費電力データの波形数が多くなってもByte0〜Byte15の正解値の順位が高くならず、Byte0〜Byte15のいずれも正解値が１位にはならなかった。これは、暗号処理回路３２の暗号化コア部３３において、ラウンド１０の出力データが出力されるタイミングの消費電力波形とラウンド１０の入出力データ間のハミング距離との相関と比べて、ラウンド１０の入力データが入力されるタイミングの消費電力波形とラウンド１０の入出力データ間のハミング距離との相関が低いことが原因と考えられる。そして、図２７と図２８とでは、Byte0〜Byte15の正解値の順位が同様の傾向を示しており、この攻撃タイミングにおいても実施例１の短縮モードは実施例１の通常モードと同様の評価結果が得られることが確認できた。
【符号の説明】
【００９７】
１０  耐タンパ性評価装置、１２  制御部、１４  記憶部、１６  表示部、１８  操作部、２０  耐タンパ性評価プログラム、２１  評価用回路データ生成部、２２  評価用回路データ変換部、２３  評価用データ導出部、２５  サイドチャネル情報取得部、２６  評価部、２７  テストベンチデータ、３１  回路データ、３２  暗号処理回路、３２ａ  評価用回路、３３  暗号化コア部、４０  ラウンド処理モジュール、４２  SubBytes処理モジュール、４３  ShiftRows処理モジュール、４４  MixColumns処理モジュール、４５  MixColumns回路群、４６  セレクター群、４７  AddRoundKey処理モジュール、４８  排他的論理和（EXOR）回路、４９  排他的論理和（EXOR）回路群、５０  セレクター群、５１  レジスター群、６０  鍵スケジュール処理モジュール、６１  セレクター、６２  レジスター、７０  Key_schedule回路、９０，９０ａ〜９０ｄ  ラウンド制御部、９１，９１ｂ，９１ｄ  Shift回路、９１ａ  セレクター、９２  論理和（ＯＲ）回路、９３，９４  セレクター、９５  レジスター、９６ａ，９６ｃ，９７ａ  セレクター、９８  Busy生成回路、９９  論理和（OR）回路、１００，１０１，１００ａ，１０１ａ，１０２ａ  波線枠。
【図１】
2013247511.tif 000004
【図２】
2013247511.tif 000005
【図７】
2013247511.tif 000006
【図８】
2013247511.tif 000007
【図１２】
2013247511.tif 000008
【図１４】
2013247511.tif 000009
【図１６】
2013247511.tif 000010
【図３】
2013247511.tif 000011
【図４】
2013247511.tif 000012
【図５】
2013247511.tif 000013
【図６】
2013247511.tif 000014
【図９】
2013247511.tif 000015
【図１０】
2013247511.tif 000016
【図１１】
2013247511.tif 000017
【図１３】
2013247511.tif 000018
【図１５】
2013247511.tif 000019
【図１７】
2013247511.tif 000020
【図１８】
2013247511.tif 000021
【図１９】
2013247511.tif 000022
【図２０】
2013247511.tif 000023
【図２１】
2013247511.tif 000024
【図２２】
2013247511.tif 000025
【図２３】
2013247511.tif 000026
【図２４】
2013247511.tif 000027
【図２５】
2013247511.tif 000028
【図２６】
2013247511.tif 000029
【図２７】
2013247511.tif 000030
【図２８】
2013247511.tif 000031
【図２９】
2013247511.tif 000032
【図３０】
2013247511.tif 000033