次に、本発明の実施の形態を図面に基づいて説明する。図1は本発明の一実施形態である耐タンパ性評価装置10の構成の概略を示す構成図である。図示するように、耐タンパ性評価装置10は、制御部12と、記憶部14と、表示部16と、操作部18とを備えている。この耐タンパ性評価装置10は、例えば汎用のコンピューターであり、暗号処理回路の耐タンパ性を評価する装置としての機能を有する。
制御部12は、耐タンパ性評価装置10全体の制御を司るものであり、CPU,ROM,RAMなどを備えたプロセッサーとして構成されている。制御部12は、記憶部14に記憶された耐タンパ性評価プログラム20を実行したり、表示部16に表示データを出力して画面を表示するよう制御したり、操作部18からの操作信号を入力したりする。
表示部16は、例えば液晶ディスプレイとして構成されており、制御部12から出力された表示データに基づく画像を表示して各種情報をユーザーに表示する機能を有している。操作部18は、例えばキーボードやマウス等の入力装置として構成されており、ユーザーから入力された操作に基づく操作信号を制御部12に出力する機能を有している。
記憶部14は、例えばHDDなどの大容量記憶装置として構成され各種アプリケーションプログラムや各種データファイルを記憶するものである。この記憶部14は、耐タンパ性評価プログラム20と、テストベンチデータ27と、回路データ31とを備えている。
耐タンパ性評価プログラム20は、評価用回路データ生成部21と、評価用回路データ変換部22と、評価用データ導出部23と、サイドチャネル情報取得部25と、評価部26と、を備えている。評価用回路データ生成部21は、記憶部14の回路データ31に記憶されたデータを読み出して、耐タンパ性を評価する対象となる暗号処理回路32のデータから、暗号処理回路32が行う複数段のラウンド処理のうち最終段の処理を含む暗号処理回路32の一部の処理を行う評価用回路32aのデータを作成する評価用回路作成処理を行う機能を有する。なお、暗号処理回路32や評価用回路32aの詳細については後述する。評価用回路データ変換部22は、評価用回路データ生成部21が生成した評価用回路32aのデータをサイドチャネル情報取得部25が利用できるデータ形式に変換する機能を有する。評価用データ導出部23は、サイドチャネル情報取得部25が行うシミュレーションにおいて評価用回路32aの入力となるデータである評価用データを複数導出する評価用データ導出処理を行う機能を有する。サイドチャネル情報取得部25は、評価用回路データ変換部22に変換された評価用回路32aのデータと評価用データ導出部23に生成された評価用データとを取得して、評価用回路32aに評価用データを入力したときの回路動作をシミュレーションし、シミュレーション結果に基づいて評価用回路32aのサイドチャネル情報としての消費電力波形などを複数取得するサイドチャネル情報取得処理を行う機能を有する。本実施形態では、サイドチャネル情報取得部25は電子回路のアナログ動作をシミュレーションするソフトウェアであるSPICE (Simulation Program with Integrated Circuit Emphasis)を用いたシミュレーションを行うものとした。評価部26は、サイドチャネル情報取得部25が取得した複数のサイドチャネル情報などのデータに基づいて、暗号処理回路32の耐タンパ性を評価する機能を有する。なお、制御部12が耐タンパ性評価プログラム20を実行することにより、評価用回路データ生成部21、評価用回路データ変換部22、評価用データ導出部23、サイドチャネル情報取得部25、評価部26の上述した機能が実現される。
テストベンチデータ27は、耐タンパ性の評価を行う際に、評価対象の暗号処理回路32へ入力するデータであり、複数(例えば数千〜数十万)パターンの入力データ(平文)や暗号鍵データが含まれている。
回路データ31は、耐タンパ性の評価の対象となる暗号処理回路32を備えた、例えばLSIなどの回路を記述したデータである。回路データ31は、本実施形態では、レジスタ転送レベル(RTL)で記述された回路であるものとした。暗号処理回路32は、暗号方式の1つであるAES(Advanced Encryption Standard)の暗号化処理を行う回路であり、AESのラウンド処理に含まれる各処理を含む処理を実行する暗号化コア部33と、暗号化コア部33の各処理の実行順及び実行タイミングを制御するラウンド制御部90とを備えている。AESの暗号化処理は、128ビットの入力データ(平文)と128ビットの暗号鍵データとを入力し、入力データに対して暗号鍵データを用いた10段のラウンド処理を行って128ビットの出力データ(暗号文)を出力する処理である。図2は、暗号処理回路32が実行するAESの暗号化処理の概略を示す説明図である。図示するように、暗号処理回路32では、入力データが入力されると、まず、前処理としてAddRoundKey処理を行う(ラウンド0)。続いて、SubBytes処理,ShiftRows処理,MixColumns処理,AddRoundKey処理をこの順で行う処理を1段のラウンド処理として、これを9回繰り返す(ラウンド1〜9)。そして、SubBytes処理,ShiftRows処理,AddRoundKey処理をこの順で行い(ラウンド10)、ラウンド10の処理後のデータを出力データとして出力する。このように、暗号処理回路32では、ラウンド1〜10の10段のラウンド処理を行って入力データを暗号化する。なお、ラウンド1〜9は共通の処理であり、ラウンド10はMixColumns処理がない点以外はラウンド1〜9と共通の処理を行う。また、暗号処理回路32に入力された暗号鍵データは、ラウンド0のAddRoundKey処理に用いられるほか、暗号鍵データから鍵スケジュール処理によってラウンド毎の鍵データ(ラウンド鍵)が導出され、1〜10の各ラウンドのAddRoundKey処理に用いられる。
暗号処理回路32の回路構成について詳細に説明する。暗号処理回路32の暗号化コア部33は、図2に示したSubBytes処理,ShiftRows処理,MixColumns処理,AddRoundKey処理の各処理を行うラウンド処理モジュール40と、鍵スケジュール処理を行う鍵スケジュール処理モジュール60と、を備えている(図1参照)。図3はラウンド処理モジュール40の回路構成を示す説明図、図4は鍵スケジュール処理モジュール60の回路構成を示す説明図である。また、図5は暗号処理回路32のラウンド制御部90の回路構成を示す説明図である。
ラウンド処理モジュール40の回路構成について図3を用いて説明する。ラウンド処理モジュール40は、SubBytes処理モジュール42と、ShiftRows処理モジュール43と、MixColumns処理モジュール44と、AddRounKey処理モジュール47と、レジスター群51と、を備えている。このラウンド処理モジュール40は、ラウンド1〜10の処理に用いられるSubBytes処理、ShiftRows処理、MixColumns処理、AddRounKey処理を行うモジュールとして、SubBytes処理モジュール42,ShiftRows処理モジュール43,MixColumns処理モジュール44,AddRounKey処理モジュール47をそれぞれ1つずつ備えており、これを繰り返し用いることで10段のラウンド処理を行うループアーキテクチャ構成のモジュールとして構成されている。
SubBytes処理モジュール42は、ラウンド1〜10のSubBytes処理を行うモジュールであり、8ビットのデータに対してSubBytes処理を行うSubBytes回路を16個備えたSubBytes回路群により構成されている。なお、図3では、1つのSubBytes回路を「SB」と表記されたボックスで表し、8個のみ図示しているが、図示しない残りの8個も同様の構成である。SubBytes回路は、入力された8ビットのデータに対してAESにおける非線形変換であるSubBytes処理を行うものであり、入力された値に対応して所定の真理値表により定められた出力値(8ビット)を出力するように構成された論理回路である。SubBytes処理モジュール42は、レジスター群51の各レジスターからの出力(1つのレジスターからの出力は8ビット)をレジスターと1対1にSubBytes回路に入力して、各SubBytes回路からのSubBytes処理後の値をShiftRows処理モジュール43に出力する。
ShiftRows処理モジュール43は、ラウンド1〜10のShiftRows処理を行うモジュールである。このShiftRows処理モジュール43は、SubBytes処理モジュール42の出力である8ビット×16個のデータを入力し、このデータを並び替えて32ビット×4個のデータにするShiftRows処理を行って、処理後のデータをMixColumns処理モジュール44に出力する。
MixColumns処理モジュール44は、ラウンド1〜9のMixColumns処理を行うモジュールであり、32ビットのデータに対してMixColumns処理を行うMixColumns回路4個からなるMixColumns回路群45と、4個のセレクターからなるセレクター群46とにより構成されている。なお、図3では、1つのMixColumns回路を「MC」と表記されたボックスで表し、2個のみ図示している。同様に、セレクター群46のセレクターも2個のみ図示している。MixColumns回路及びセレクターの図示しない残りの各2個も図示したものと同様の構成である。MixColumns回路は、入力された32ビットのデータに対してAESにおける線形変換であるMixColumns処理を行うものであり、MixColumns処理後の値(32ビット)をセレクター群46の対応するセレクターに出力するように構成された論理回路である。セレクター群46を構成するセレクターは、MixColumns回路群45のMixColumns回路と1対1に対応している。各セレクターは、対応するMixColumns回路の入力データと出力データとがそれぞれ入力され、選択信号Round10の値に応じて入力した値の一方を出力する。より具体的には、各セレクターは、選択信号Round10が値0のときにMixColumns回路からの出力データをセレクターの出力として出力し、選択信号Round10が値1のときにMixColumns回路への入力データをセレクターの出力として出力する。セレクター信号Round10は、ラウンド制御部90から暗号化コア部33に入力されるCoreRoundRegの値(図5参照)が10ラウンド目を表す値である「10'h001」のときに値1となるように構成されている。なお、「10'h001」における「10'h」は、これに続く数値「001」が10ビットの数値を16進数で表記したものであることを意味する。すなわち、「10'h001」は2進数で表記すると「0000000001」である。以降の説明でも同様である。これにより、MixColumns処理モジュール44は、選択信号Round10が値0であるときにはMixColumns回路の出力値すなわちMixColumns処理後の値をAddRounKey処理モジュール47へ出力する。一方、選択信号Round10が値1であるときには、MixColumns回路への入力データすなわちShiftRows処理モジュール43の出力データをそのままAddRounKey処理モジュール47へ出力する。
AddRounKey処理モジュール47は、ラウンド0のAddRounKey処理を行ったり、MixColumns処理モジュール44からの出力データに対してラウンド1〜10のAddRounKey処理を行ったりするモジュールであり、EXOR回路48と、16個のEXOR回路からなる排他的論理和(EXOR)回路群49と、16個のセレクターからなるセレクター群50とを備えている。なお、図3では、EXOR回路群49のEXOR回路とセレクター群50のセレクターとをそれぞれ8個のみ図示しているが、図示しない残りの各8個も図示したものと同様の構成である。EXOR回路48は、ラウンド0のAddRoundKey処理を行うものであり、暗号処理回路32に入力された128ビットの入力データであるPlaintext[127:0]と128ビットの暗号鍵データであるKey[127:0]とを入力して、両者の排他的論理和をとった値(128ビット)をラウンド0のAddRounKey処理後の値として出力する。なお、図中及び文中の[x:y]はデータのうちyビット目〜xビット目の部分であることを示す。例えばPlaintext[127:0]は、暗号処理回路32の入力データ(Plaintext)の0ビット目から127ビット目のデータを意味する。以降の説明でも同様である。
EXOR回路群49は、16個のEXOR回路からなり、入力されたデータとラウンド鍵との排他的論理和を出力する。EXOR回路群49のEXOR回路は、入力された8ビットのデータと鍵スケジュール処理モジュール60において導出されたラウンド鍵の一部である部分ラウンド鍵(Key0〜Key15:各8ビット)のうち1つとの排他的論理和を演算した結果を出力する。これにより、EXOR回路群49全体としては、MixColumns処理モジュール44から入力された128ビットのデータと128ビットのラウンド鍵との排他的論理和を出力するラウンド1〜10のAddRounKey処理を行う。ここで、ラウンド鍵は鍵スケジュール処理モジュール60によりラウンド毎に導出される128ビットのデータであり、これを8ビットずつに分割した16個の部分ラウンド鍵(Key0〜Key15)が16個のEXOR回路にそれぞれ入力される。
セレクター群50を構成するセレクターは、EXOR回路群49のEXOR回路と1対1に対応している。各セレクターは、対応するEXOR回路群49のEXOR回路からの出力データと、EXOR回路48からの出力データのうち8ビットのデータとが入力され、選択信号Round0の値に応じて入力したデータの一方を出力する。より具体的には、各セレクターは、選択信号Round0が値0のときにEXOR回路群49のEXOR回路からの出力データをセレクターの出力として出力し、選択信号Round0が値1のときにEXOR回路48からの出力データをセレクターの出力として出力する。セレクター信号Round0は、ラウンド処理のスタートタイミングとなる信号Start(図4,5参照)が値1であるとき(暗号処理回路32による処理開始時)に値1となるように構成されている。これにより、AddRounKey処理モジュール47は、選択信号Round0が値0であるときにはMixColumns処理モジュール44の出力データをレジスター群51へ出力する。一方、選択信号Round0が値1であるときには、暗号処理回路32に入力された128ビットの入力データであるPlaintext[127:0]と128ビットの暗号鍵データであるKey[127:0]との排他的論理和をとった値(128ビット)をレジスター群51へ出力する。
レジスター群51は、16個のレジスターからなり、各レジスターはセレクター群50のセレクターと1対1に対応し、SubBytes処理モジュール42のSubBytes回路とも1対1に対応している。なお、図3では、レジスター群51のレジスターを9個のみ図示しているが、図示しない残りの各7個も図示したものと同様の構成である。レジスター群51の各レジスターは、セレクター群50の対応するセレクターからの出力データ(8ビット)が入力されており、信号LatchEnableが値1且つクロック信号の立ち上がりが入力されたときの入力データ(セレクターの出力データ)を出力して保持する。各レジスターの出力はラウンド処理モジュール40の外部に出力されると共に、SubBytes処理モジュール42の対応するSubBytes回路に出力される。これにより、レジスター群51としては、信号LatchEnableが値1且つクロック信号の立ち上がりが入力されたときのAddRounKey処理モジュール47から入力したデータを128ビットの出力データ(図中のReg00[7:0]〜Reg33[7:0])としてラウンド処理モジュール40の外部やSubBytes処理モジュール42に出力して保持する。なお、信号LatchEnableは、ラウンド制御部90から入力される信号である。
鍵スケジュール処理モジュール60は、図4に示すように、セレクター61と、Key_schedule回路70と、レジスター62とを備えている。セレクター61には、データとして暗号処理回路32に入力された暗号鍵データであるKey[127:0]とレジスター62の出力データであるラウンド鍵RoundKey[127:0]とが入力され、選択信号として信号Startが入力されている。このセレクター61は、信号Startが値1のときにはKey[127:0]をKey_schedule回路70に出力し、信号Startが値0のときにはラウンド鍵RoundKey[127:0]をKey_schedule回路70に出力する。Key_schedule回路70は、AESの鍵スケジュール処理を行って、AddRounKey処理モジュール47のEXOR回路群49に入力されるラウンド鍵RoundKey[127:0]を導出するための回路である。Key_schedule回路70は、セレクター61からの出力データを入力鍵Kin[127:0]として入力するとともに、ラウンド制御部90から出力される10ビットの値であるCoreRoundReg[9:0]をround[9:0]として入力する。CoreRoundReg[9:0]は現在の処理が何ラウンド目であるかを表す情報であり、この値に基づいてKey_schedule回路70は現在のラウンド毎に異なる値である所定のラウンド定数rcon[7:0]を導出し、このrcon[7:0]と入力した鍵入力Kin[127:0]とに基づいてラウンド鍵RoundKey[127:0]となる鍵出力kout[127:0]を導出して出力する。レジスター62には、Key_schedule回路70からの鍵出力kout[127:0]が入力されており、クロック信号の立ち上がりが入力されたときの入力値をRoundKey[127:0]として出力して保持する。レジスター62から出力されたRoundKey[127:0]は、セレクター61に入力される。また、このラウンド鍵RoundKey[127:0]は8ビット×16個の部分ラウンド鍵(Key0〜Key15)として、図3のラウンド処理モジュール40のEXOR回路群49の各EXOR回路に入力される。なお、RoundKey[127:120]=Key0,RoundKey[119:112]=Key1,・・・,RoundKey[7:0]=Key15である。
ラウンド制御部90は、ローテートシフト方式の制御回路として構成されており、図5に示すように、Shift回路91と、論理和(OR)回路92と、セレクター93と、セレクター94と、レジスター95と、Busy生成回路98と、論理和(OR)回路99とを備えている。Shift回路91は、現在の処理が何ラウンド目であるかを表す上述したRoundReg[9:0]及びCoreRoundReg[9:0]の値をラウンド毎に更新する回路であり、レジスター95からの出力データであるRoundReg[9:0]が入力されている。Shift回路91は、入力したRoundReg[9:0]を左に1ビットシフトさせた値をShiftRoundReg[9:0]として出力する。例えば、RoundReg[0](=RoundReg[9:0]の0ビット目)の値をShiftRoundReg[1](ShiftRoundReg[9:0]の1ビット目)の値として出力する。OR回路92は、信号Startと、レジスター95から出力されるRoundReg[9:0]の0ビット目(RoundReg[0])の否定の値と、が入力され、これらの論理和を信号Shiftcontrolとして出力する。セレクター93は、データとしてレジスター95から出力されるRoundReg[9:0]とShift回路91から出力されるShiftRoundReg[9:0]とが入力され、セレクター信号としてOR回路92から出力される信号Shiftcontrolが入力されている。このセレクター93は、信号Shiftcontrolが値1のとき、すなわち、信号Startが値1であるか又はRoundReg[0]が値0であるときには、入力したShiftRoundReg[9:0]の値をそのまま出力する。一方、信号Shiftcontrolが値0のとき、すなわち、信号Startが値0であり且つRoundReg[0]が値1であるときには、入力したRoundReg[9:0]の値をそのまま出力する。セレクター94は、データとしてセレクター93からの出力データとRoundReg[9:0]の初期値であり10ラウンド目を表す値でもある「10'h001」とが入力され、セレクター信号として暗号処理回路32のリセット信号RSTnが入力されている。また、リセット信号RSTnは、暗号処理回路32のリセット時に値0となり、暗号処理回路32が暗号化を行う間は値1となる。このセレクター94は、リセット信号RSTnが値1であるときにはセレクター93からの出力データをそのまま出力し、リセット信号RSTnが値0であるときには固定値「10'h001」をそのまま出力する。レジスター95には、セレクター94からの出力データが入力されており、クロック信号の立ち上がりが入力されたときの入力値をRoundReg[127:0]として出力して保持する。このレジスター95の出力は、Shift回路91に入力される。また、レジスター95の出力は、CoreRoundReg[9:0]として鍵スケジュール処理モジュール60のKey_schedule回路70に出力されると共に、CoreRoundReg[9:0]としてラウンド処理モジュール40に出力される。なお、RoundReg[9:0]とCoreRoundReg[9:0]とは同じ値である。Busy生成回路98は、ラウンド1〜10までの処理区間を表す信号Busyを生成してOR回路99に出力する回路である。このBusy生成回路98には、リセット信号RSTnと、信号Startと、RoundReg[9:0]とが入力されている。Busy生成回路98は、リセット信号RSTnとして値0が入力されているときには信号Busyとして値0を出力する。また、リセット信号RSTnとして値1が入力され且つStart信号として値1が入力されると、次のクロックの立ち上がり時以降は信号Busyとして値1を出力する。そして、信号Busyが値1のときにRounReg[9:0]として値「10'h001」が入力されると、次のクロックの立ち上がり時以降は信号Busyとして値0を出力する。OR回路99は、信号Startと信号Busyとが入力されており、これらの論理和をとった値を信号LatchEnableとして出力する。信号LatchEnableは、ラウンド処理モジュール40のレジスター群51の各レジスターに入力される。
このように構成されたラウンド制御部90は、例えば、信号LatchEnableを出力することによってラウンド処理モジュール40のレジスター群51からのデータの出力の可否を制御するなどラウンド処理モジュール40の処理の実行タイミングを制御する。また、現在の処理が何ラウンド目であるかを表すCoreRoundReg[9:0]を出力することによってラウンド処理モジュール40や鍵スケジュール処理モジュール60が各ラウンドに即した処理を行うよう制御するなど、ラウンド処理モジュール40や鍵スケジュール処理モジュール60の処理の実行順を制御する。
ここで、暗号処理回路32が暗号化処理を行う際の暗号化コア部33及びラウンド制御部90の動作について説明する。図6は、暗号処理回路32が暗号化処理を行う様子の一例を示すタイムチャートである。まず、時刻t1以前においては、暗号処理回路32が処理を行っておらずリセット信号RSTnが値0であったとすると、ラウンド制御部90のセレクター94は常に固定値「10h'001」を出力するため、RoundReg[9:0]及びCoreRoundReg[9:0]の値は共に「10h'001」となっている。また、Shift回路91にはレジスター95の出力としてRoundReg[9:0]の値である「10h'001」が入力されるから、Shift回路91の出力であるShiftRoundReg[9:0]の値は「10h'001」を1ビット左にシフトした「10h'002」となっている。また、時刻t1以前では信号Startが入力されておらず、RoundReg[9:0]の値は初期値「10'h001」でありRoundReg[0]の否定は値0であるため、ShiftControlは値0となっている。また、リセット信号RSTnが値0であるため信号Busyも値0となっている。
次に、時刻t1のクロックの立ち上がりにおいて、リセット信号RSTnが値1となり、ラウンド0の入力として暗号処理回路32の入力データ(平文)であるPlaintext[127:0]と暗号鍵データであるKey[127:0]とが暗号化コア部33のAddRounKey処理モジュール47に入力され、信号Startとして値1が入力されたとする。すると、時刻t1〜t2の間に、ラウンド制御部90では、信号startが値1となったためOR回路92の出力であるShiftControlが値1となり、セレクター93はShiftRoundReg[9:0](=「10'h002」)を出力する。また、リセット信号RSTnが値1となっているため、セレクター94の出力は固定値「10h'001」から1ラウンド目を表すShiftRoundReg[9:0]の値(=「10'h002」)に切り替わり、レジスター95に入力された状態になる。また、信号Startが値1になったため、時刻t1でOR回路99から出力される信号LatchEnableが値0から値1となり、信号Startが値1である時刻t1〜t2の間の信号LatchEnableは継続して値1となる。また、鍵スケジュール処理モジュール60では、信号Startが値1であるので、セレクター61は入力されたKey[127:0]の値をそのままKey_schedule回路70に出力する。そして、Key_schedule回路70は、Kin[127:0]として入力されたKey[127:0]の値と、round[9:0]として入力されたCoreRoundReg[9:0](=「10h'001」)と、に基づいてラウンド1用のラウンド鍵をKout[127:0]としてレジスター62に出力する。また、ラウンド処理モジュール40では、EXOR回路48によりPlaintext[127:0]とKey[127:0]とのEXORが導出され、信号Startが値1であるのでセレクター群50の各セレクターからはEXOR回路48が導出した値が出力されて、ラウンド0のAddRoundKey処理後の値がレジスター群51の各レジスターに入力される。
そして、時刻t2のクロックの立ち上がりと共に信号Startが値0になると、ラウンド制御部90では、レジスター95の入力である「10'h002」がRoundReg[9:0]及びCoreRoundReg[9:0]の値として出力される。また、RounReg[9:0]の値が「10'h001」から「10'h002」に変わったため、Shift回路91の出力であるShiftRoundReg[9:0]の値が「10'h004」(「10'h002」を1ビット左にシフトした値)となり、ShiftControl及びリセット信号RSTnも値1のままであるため、レジスター95にはこの「10'h004」の値が入力される。また、時刻t1で信号Startが値1になったため、次のクロックの立ち上がり時である時刻t2でBusy生成回路98から出力される信号Busyが値1となる。これにより、時刻t1〜t2に引き続き時刻t2以降においてもOR回路99から出力される信号LatchEnableは値1となる。鍵スケジュール処理モジュール60では、時刻t2のクロックの立ち上がりにより、レジスター62の入力であるラウンド1用のラウンド鍵がRoundKey[127:0]としてレジスター62から出力されてAddRounKey処理モジュール47のEXOR回路群49に入力される。また、レジスター62の出力はセレクター61に入力され、信号Startが値0であるので、Key_schedule回路70にはラウンド1用のラウンド鍵RoundKey[127:0]がkin[127:0]として入力されると共に、ラウンド制御部90からのCoreRoundReg[9:0](=「10'h002」)がround[9:0]として入力される。そして、Key_schedule回路70はこれらの入力値に基づいてラウンド2用のラウンド鍵を導出しKout[127:0]としてレジスター62に出力する。ラウンド処理モジュール40では、時刻t2のクロックの立ち上がりにより、レジスター群51の各レジスタからは入力値であるラウンド0の出力値が出力されて、SubBytes処理モジュール42にラウンド1の入力値として入力される。そして、この入力値に対してSubBytes処理モジュール42でSubBytes処理が行われ、ShiftRows処理モジュール43でShiftRows処理が行われて、MixColumns処理モジュール44に入力される。MixColumns処理モジュール44では、時刻t2〜t3でのCoreRoundReg[9:0]の値が1ラウンド目を表す「10'h002」であり10ラウンド目を表す値ではないため、セレクター群46の各セレクターには値0が入力されて、MixColumns回路群45によるMixColumns処理後の値がセレクター群46から出力される。AddRounKey処理モジュール47では、EXOR回路群49により、鍵スケジュール処理モジュール60から入力したラウンド1用のラウンド鍵RoundKey[127:0]と、MixColumns回路群45から入力した値とのAddRoundKey処理が行われる。また、時刻t2〜t3での信号Startは値0であるため、セレクター群50の各セレクターには値0が入力されて、EXOR回路群49によるAddRoundKey処理後の値がセレクター群50から出力される。
続く時刻t3のクロックが立ち上がると、このラウンド1の処理後の値がレジスター群51から出力され、ラウンド2の入力となる。ラウンド制御部90では、時刻t3のクロックの立ち上がりにより、レジスター95の出力すなわちRoundReg[9:0]やCoreRoundReg[9:0]が、時刻t2〜t3間のShiftRoundReg[9:0]の値である「10'h004」となる。鍵スケジュール処理モジュール60では、時刻t3のクロックの立ち上がりによりラウンド2のラウンド鍵RoundKey[127:0]をAddRounKey処理モジュール47に出力すると共に、次のラウンド3のラウンド鍵をKey_schedule回路70が導出する。以降、ラウンド9の処理後の値が出力される時刻t11までは、同様の処理を繰り返し、ラウンド処理モジュール40は順次ラウンド2〜ラウンド9の処理を行う。そして、時刻t11のクロックの立ち上がりにより、RoundReg[9:0]及びCoreRoundReg[9:0]の値は初期値と同じ値であり10ラウンド目であることを表す値でもある「10'h001」に戻る(初期値「10'h001」が時刻t2〜t11間で10回左シフトされることによる)ため、ShiftControlが時刻t1以前と同様に値0となる。これにより、以降のレジスター95の出力は「10'h001」となる。また、ラウンド処理モジュール40では、時刻t11のクロックの立ち上がり後において、セレクター群46の各セレクターへのセレクター信号が値1となるから、MixColumns処理モジュール44ではMixColumns処理を行わずにShiftRows処理モジュール43から入力した値をそのままAddRounKey処理モジュール47へ出力する。これにより、時刻t11〜t12間ではSubBytes処理、ShiftRows処理、AddRounKey処理モジュール47のみが行われ、AESのラウンド10の規格に沿った処理が行われる。そして、時刻t12のクロックの立ち上がりにより、レジスター群51からラウンド10の処理後の値、すなわち最初の入力データ(平文)をAESにより暗号化した出力データ(暗号文)が出力される。また、時刻t11〜t12においてRounReg[9:0]が値「10'h001」となったため、次のクロックの立ち上がり時である時刻t12でBusy生成回路98から出力される信号Busyが値0となる。これにより、信号Startと信号Busyが共に値0となるから、OR回路99から出力される信号LatchEnableも値0となる。
このように、暗号処理回路32では、ラウンド制御部90がクロックの立ち上がり毎にRoundReg[9:0]やCoreRoundReg[9:0]の値を1ビットずつシフトした値に更新していき、この値に基づいて鍵スケジュール処理モジュール60が各ラウンドのラウンド鍵を導出したり、ラウンド処理モジュール40が各ラウンドの処理を行う。
次に、こうして構成された耐タンパ性評価装置10の動作、特に、暗号処理回路32の耐タンパ性を評価する際の動作について説明する。図7は、耐タンパ性評価ルーチンの一例を示すフローチャートである。このルーチンは、ユーザーが操作部18を操作して耐タンパ性を評価する対象となる暗号処理回路を指定し、耐タンパ性の評価を行うよう指示したときに制御部12が耐タンパ性評価プログラム20を実行することにより行われる。以降は、回路データ31の暗号処理回路32が評価対象に指定された場合について説明する。
この耐タンパ性評価ルーチンが実行されると、評価用回路データ生成部21は、まず、ユーザーに指定された暗号処理回路32に基づいて、耐タンパ性評価に用いる評価用回路32aの回路データを作成する評価用回路作成処理を行う(ステップS100)。図8は、評価用回路32aの構成及び暗号化処理の概略を示す説明図であり、図9は、評価用回路32aのラウンド制御部90aの回路構成を示す説明図である。なお、図8(a)は、評価用回路32aの構成の概略を示す説明図であり、図8(b)は、評価用回路32aの暗号化処理の概略を示す説明図である。図8(a)に示すように、評価用回路32aは、暗号処理回路32にラウンド制御部90aを加えた回路である。また、図9に示すように、ラウンド制御部90aは、ラウンド制御部90の一部を変更した回路である。そこで、評価用回路32aのうち暗号処理回路32と同一の回路については同じ符号を付して、詳細な説明を省略する。このラウンド制御部90とラウンド制御部90aとは、いずれが暗号化コア部33を制御するかを選択可能に構成されており、ラウンド制御部90が暗号化コア部33を制御する場合を通常モード、ラウンド制御部90aが暗号化コア部33を制御する場合を短縮モードと表記する。評価用回路32aの通常モードは、暗号化処理に関する回路構成は暗号処理回路32と全く同じとなる。一方、評価用回路32aの短縮モード、すなわちラウンド制御部90aが暗号化コア部33を制御するときには、図3に示した暗号処理回路32のラウンド1〜10のうちラウンド1〜8を省略して、図8(b)に示すように最終段の処理であるラウンド10の処理を含むラウンド0,9,10の処理を行う回路となる。
ラウンド制御部90aについて詳細に説明する。ラウンド制御部90aは、図9に示すように、セレクター91aと、OR回路92と、セレクター93と、セレクター94と、レジスター95と、セレクター96aと、セレクター97aと、Busy生成回路98と、OR回路99と、を備えている。セレクター91aは、ラウンド制御部90のShift回路91の代わりにShiftRoundReg[9:0]を出力するものであり、9ラウンド目を示す値「10'h200」と、ShiftRoundReg[9:0]の初期値且つ10ラウンド目を示す値「10'h001」と、が入力データとして入力されている。また、セレクター91aには、セレクター信号として信号Startが入力されており、信号Startが値1のときには値「10'h200」をセレクター93に出力し、値0のときには値「10'h001」をセレクター93に出力する。セレクター96aは、レジスター95の出力側とラウンド制御部90aのCoreRoundReg[9:0]の出力との間に挿入された回路であり、入力データとして、レジスター95からの出力データの8ビット目と、値「1b'1」とが入力されている。また、セレクター96aには、セレクター信号として信号Startが入力されており、信号Startが値1のときには値「1'b1」をCoreRoundReg[9:0]の8ビット目の値として出力し、値0のときにはレジスター95からの出力データの8ビット目の値をCoreRoundReg[9:0]の8ビット目の値として出力する。セレクター97aは、レジスター95の出力側とラウンド制御部90aのCoreRoundReg[9:0]の出力との間に挿入された回路であり、入力データとして、レジスター95からの出力データの0ビット目と、値「1'b0」とが入力されている。また、セレクター97aには、セレクター信号として信号Startが入力されており、信号Startが値1のときには値「1'b0」をCoreRoundReg[9:0]の0ビット目の値として出力し、値0のときにはレジスター95からの出力データの0ビット目の値をCoreRoundReg[9:0]の0ビット目の値として出力する。なお、「1'b1」における「1'b」は、これに続く数値「1」が1ビットの数値を2進数で表記したものであることを意味する。すなわち、「1'b1」は2進数で表記すると「1」である。
図7の耐タンパ性評価ルーチンのステップS100では、このように暗号処理回路32に対し図9に示したラウンド制御部90aを追加した評価用回路32aを作成する。なお、この評価用回路32aは、暗号処理回路32と同じRTLで記述されているものとした。また、このステップS100において、評価用回路データ生成部21は、評価用回路32aの中に図示しないShortModeというノードを仕込んでおく。ShortModeについては後述する。
続いて、評価用回路データ変換部22は、評価用回路データ生成部21が作成した評価用回路32aのデータを、サイドチャネル情報取得部25が利用できるようSPICEのデータ形式(ゲートネットリスト)に変換する(ステップS110)。次に、評価用回路データ変換部22は、評価用回路32aの通常モードと短縮モードとのいずれで耐タンパ性の評価を行うかの指示をユーザーから入力する(ステップS120)。この処理は、例えば図示しないモード選択画面を表示部16に表示し、操作部18を介してユーザーからの指示を入力することにより行う。
そして、ステップS120で通常モードで耐タンパ性の評価を行う旨を入力したときには、評価用回路データ変換部22は、評価用回路32aを通常モードに設定する(ステップS130)。この処理は、ステップS100で評価用回路32aに仕込んだShorModeの記述を修正することで行う。図10は、ShortModeの記述を変更する様子を示す説明図であり、図10(a)が変更前、図10(b)が変更後の様子である。なお、図10は、ステップS110で変換された後の評価用回路32aのゲートネットリストの一部を示している。図10(a)において波線枠100で囲まれた部分はShortModeなどの評価用回路32aの入力ピンの宣言であり、波線枠101の「input ShortMode」はShortModeの定義部分である。ステップS120では、図10(b)の波線枠100aで示すように、この波線枠100で囲まれた部分のうち「ShortMode」を削除する。また、図10(b)の波線枠101aで示すように、波線枠101の「input ShortMode」の行頭にその行の記述を無視することを意味する「//」を追加して、「input ShortMode」を削除する。また、波線枠102aに「wire ShortMode;」,「assign ShortMode = 1'b0;」を挿入して、ShortModeというwireを宣言する。なお、本実施形態の評価用回路32aでは、このとき、「assign ShortMode = 1'b0;」を挿入すると通常モードとなり、「assign ShortMode = 1'b1;」を挿入すると短縮モードとなる。このようにすることで、本実施形態の評価用回路32aは、仕込んでおいたShortModeを値0(=1'b0)とするか値1(=1'b1)とするかを変更することで、通常モードと短縮モードとのいずれも選択できるようになっている。
評価用回路データ変換部22が通常モードを設定すると、サイドチャネル情報取得部25は、通常モードの評価用回路32aにテストベンチデータ27を入力したときの評価用回路32aの動作をシミュレーションし、サイドチャネル情報としての消費電力データを含む消費電力テーブルを取得する(ステップS140)。より具体的には、次のような処理を行う。まず、テストベンチデータ27の1つの入力データ(平文)と暗号鍵データとを読み出し、Plaintext[127:0]とKey[127:0]として評価用回路32aに入力する。また、クロックの立ち上がりに合わせて評価用回路32aに入力するリセット信号RSTn及び信号Startを値1にする。そして、このときの評価用回路32aの回路動作をSPICE (Simulation Program with Integrated Circuit Emphasis)を用いてシミュレーションする。なお、信号Startは次のクロックの立ち上がりに合わせて値0にする。このシミュレーションにより、図6で説明したようにラウンド0及びラウンド1〜10のラウンド処理により通常のAESの暗号化処理が行われて、入力データ(平文)を暗号鍵データで暗号化した出力データ(暗号文)がレジスター群51から出力される。このとき、サイドチャネル情報取得部25は、最終ラウンドである10ラウンド目のラウンド処理の出力データ(図6の場合における時刻t12のクロックの立ち上がりによるレジスター群51の出力)を取得する。また、評価用回路32aの動作内容に基づいて消費電力波形を演算し、サイドチャネル攻撃の所定の攻撃タイミングにおける評価用回路32aの消費電力の値を消費電力データとして取得する。本実施形態では、所定の攻撃タイミングは、ラウンド10の処理後の出力データ(暗号文)の出力時のクロック立ち上がり(図6の場合における時刻t12)から所定時間(例えば0.5nsec)経過後の消費電力の値を消費電力データとして取得するものとした。そして、取得した出力データと消費電力データとを対応付けて消費電力テーブルとして記憶部14に記憶する。同様に、テストベンチデータ27に含まれる1つの暗号鍵データと複数の入力データ(平文)との組み合わせに対してシミュレーションを行い、ラウンド10の出力データと消費電力データとの組み合わせを複数取得し、記憶部14に消費電力テーブルとして記憶していく。
一方、ステップS120で短縮モードで耐タンパ性の評価を行う旨を入力したときには、評価用回路データ変換部22は、評価用回路32aを短縮モードに設定する(ステップS150)。この処理は、ShortModeを値1(=1'b1)とする点以外は、上述したステップS130と同様に行う。
続いて、評価用データ導出部23は、テストベンチデータ27に基づいて評価用回路32a(短縮モード)の入力となる評価用データを複数導出する評価用データ導出処理を行う(ステップS160)。この評価用データは、テストベンチデータ27の入力データ(平文)と暗号鍵データとを暗号処理回路32に入力したときの暗号処理回路32の出力データ(暗号文)と、評価用データを入力したときの評価用回路32a(短縮モード)の出力データ(暗号文)と、が同じ値になるような評価用回路32aの入力データ(平文)と暗号鍵データとのペアとして導出する。具体的には、まず、テストベンチデータ27の1つの入力データ(平文)と暗号鍵データとを読み出し、読み出した暗号鍵データからラウンド8用のラウンド鍵RoundKey[127:0]を導出する(以下、この値をラウンド鍵RK8とも表記する)。次に、テストベンチデータ27から読み出した入力データ(平文)と暗号鍵データとをPlaintext[127:0]とKey[127:0]として暗号処理回路32に入力したときの、8ラウンド目の出力データ(レジスター群51の出力データ)を導出する(以下、この値をデータRD9とも表記する)。そして、求めたラウンド鍵RK8とデータRD9との排他的論理和を導出する。そして、この排他的論理和で導出した値であるデータRD9Aと、ラウンド鍵RK8とを、評価用回路32aの入力データ(平文)と暗号鍵とのペアすなわち評価用データとする。同様に、テストベンチデータ27に含まれる1つの暗号鍵データと複数の入力データ(平文)との組み合わせに対してそれぞれデータRD9Aとラウンド鍵RK8とのペアを求め、評価用データを複数取得する。取得した評価用データは、記憶部14に記憶しておく。なお、本実施形態では、ラウンド鍵RK8やデータRD9,RD9Aの値は、暗号処理回路32を用いて導出するものとした。なお、AESの規格に沿った演算を行って入力データ(平文)と暗号鍵データとからラウンド鍵RK8やデータRD9,RD9Aを導出すればよいため、暗号処理回路32を用いなくともよい。
次に、サイドチャネル情報取得部25は、短縮モードの評価用回路32aにステップS160で取得した評価用データを入力したときの評価用回路32aの動作をシミュレーションし、サイドチャネル情報としての消費電力データを含む消費電力テーブルを取得するサイドチャネル情報取得処理を行う(ステップS170)。この処理は、評価用回路32aが短縮モードであること、評価用回路32aに入力する入力データ(平文)と暗号鍵データとがテストベンチデータ27のデータではなく評価用データであること、以外はステップS140と同様にして行うことができる。より具体的には、次のような処理を行う。まず、ステップS160で導出した複数の評価用データのうち、1つの評価用データすなわちデータRD9Aとラウンド鍵RK8とのペアを記憶部14から読み出す。そして、データRD9Aを入力データ(平文)すなわちPlaintext[127:0]とし、ラウンド鍵RK8を暗号鍵データすなわちKey[127:0]として、評価用回路32aに入力する。また、クロックの立ち上がりに合わせて評価用回路32aに入力するリセット信号RSTn及び信号Startを値1にする。そして、このときの評価用回路32aの回路動作をSPICE (Simulation Program with Integrated Circuit Emphasis)を用いてシミュレーションする。信号Startは次のクロックの立ち上がりに合わせて値0にする。このシミュレーションにより、図8(b)で示したようにラウンド0及びラウンド9〜10のラウンド処理により暗号化処理が行われて、入力データ(平文)を暗号鍵データで暗号化した出力データ(暗号文)がレジスター群51から出力される。このとき、サイドチャネル情報取得部25は、最終ラウンドである10ラウンド目のラウンド処理の出力データを取得する。また、評価用回路32aの動作内容に基づいて消費電力波形を演算し、サイドチャネル攻撃の所定の攻撃タイミングにおける評価用回路32aの消費電力の値を消費電力データとして取得する。本実施形態では、所定の攻撃タイミングは、ステップS140と同じラウンド10の処理後の出力データ(暗号文)の出力時のクロック立ち上がりから所定時間(例えば0.5nsec)経過後の消費電力の値を消費電力データとして取得するものとした。そして、ステップS160で導出した複数の評価用データについて、同様にシミュレーションを行い、ラウンド10の出力データと消費電力データとの組み合わせを複数取得して記憶部14の消費電力テーブルに記憶していく。
ここで、短縮モードの評価用回路32aが暗号化処理を行う際の暗号化コア部33及びラウンド制御部90aの動作について説明する。図11は、短縮モードの評価用回路32aが暗号化処理を行う様子の一例を示すタイムチャートである。
まず、時刻t1以前においては、評価用回路32aが処理を行っておらずリセット信号RSTnが値0であり、ラウンド制御部90aのセレクター94は常に固定値「10h'001」を出力するため、RoundReg[9:0]の値は「10h'001」となっている。また、信号Startが入力されておらず値0であるため、セレクター96a,97aはレジスター95からの出力データの8ビット目,0ビット目の値をCoreRoundReg[9:0]の8ビット目,0ビット目の値として出力する。そのためCoreRoundReg[9:0]の値もRoundReg[9:0]の値と同じ「10h'001」となっている。また、信号Startが値0であるため、セレクター91aの出力すなわちShiftRoundReg[9:0]の値も「10'h001」となっている。また、信号Start,リセット信号RSTn,RoundReg[9:0]の状態(値)は図6の時刻t1以前と同じであるため、図6と同様にShiftControl及び信号Busyは値0となっている。
次に、時刻t1のクロックの立ち上がりにおいて、サイドチャネル情報取得部25は、リセット信号RSTnを値1とし、評価用データのうちデータRD9AをPlaintext[127:0]とし、ラウンド鍵RK8をKey[127:0]として暗号化コア部33のAddRounKey処理モジュール47に入力し、信号Startとして値1を入力する。すると、時刻t1〜t2の間に、ラウンド制御部90aでは、信号startが値1となったためセレクター91aの出力すなわちShiftRoundReg[9:0]の値が「10'h200」となる。また、信号startが値1となったためOR回路92の出力であるShiftControlが値1となり、セレクター93はShiftRoundReg[9:0](=「10'h200」)を出力する。また、リセット信号RSTnが値1となっているため、セレクター94の出力は固定値「10h'001」から9ラウンド目を表す値(=「10'h200」)に切り替わり、レジスター95に入力された状態になる。また、信号Startが値1であるため、セレクター96aは、値「1'b1」をCoreRoundReg[9:0]の8ビット目の値として出力する。同様に、セレクター97aは、信号Startが値1であるため、値「1'b0」をCoreRoundReg[9:0]の0ビット目の値として出力する。これらにより、レジスター95の出力すなわちRoundReg[9:0]は値「10'b001」であるが、CoreRoundReg[9:0]の値は「10'b001」の8ビット目を値1,0ビット目を値0とした値「10'b100」となる。この値「10'b100」は、8ラウンド目を表す値である。また、信号Startが値1になったため、時刻t1でOR回路99から出力される信号LatchEnableが値0から値1となり、信号Startが値1である時刻t1〜t2の間の信号LatchEnableは継続して値1となる。また、鍵スケジュール処理モジュール60では、信号Startが値1であるので、セレクター61は入力されたKey[127:0]の値をそのままKey_schedule回路70に出力する。そして、Key_schedule回路70は、Kin[127:0]として入力されたKey[127:0](=鍵RK8)の値と、round[9:0]として入力されたCoreRoundReg[9:0](=「10h'100」)と、に基づいてラウンド9用のラウンド鍵をKout[127:0]としてレジスター62に出力する。また、ラウンド処理モジュール40では、EXOR回路48によりPlaintext[127:0]とKey[127:0]とのEXORが導出され、信号Startが値1であるのでセレクター群50の各セレクターからはEXOR回路48が導出した値が出力されて、ラウンド0のAddRoundKey処理後の値がレジスター群51の各レジスターに入力される。
そして、時刻t2のクロックの立ち上がりと共に信号Startが値0になると、ラウンド制御部90aでは、レジスター95の入力である値「10'h200」がRoundReg[9:0]の値として出力される。Startが値0であるので、CoreRoundReg[9:0]の値もRoundReg[9:0]と同じ値「10'h200」となる。また、信号Startが値0であるためセレクター91aの出力であるShiftRoundReg[9:0]の値が「10'h001」となり、ShiftControl及びリセット信号RSTnは値1のままであるため、レジスター95にはこの「10'h001」の値が入力される。また、時刻t1で信号Startが値1になったため、次のクロックの立ち上がり時である時刻t2でBusy生成回路98から出力される信号Busyが値1となる。これにより、時刻t1〜t2に引き続き時刻t2以降においてもOR回路99から出力される信号LatchEnableは値1となる。鍵スケジュール処理モジュール60では、時刻t2のクロックの立ち上がりにより、レジスター62の入力であるラウンド9用のラウンド鍵がRoundKey[127:0]としてレジスター62から出力されてAddRounKey処理モジュール47のEXOR回路群49に入力される。また、レジスター62の出力はセレクター61に入力され、信号Startが値0であるので、Key_schedule回路70にはラウンド9用のラウンド鍵RoundKey[127:0]がkin[127:0]として入力されると共に、ラウンド制御部90aからのCoreRoundReg[9:0](=「10'h200」)がround[9:0]として入力される。そして、Key_schedule回路70はこれらの入力値に基づいてラウンド10用のラウンド鍵を導出しKout[127:0]としてレジスター62に出力する。ラウンド処理モジュール40では、時刻t2のクロックの立ち上がりにより、レジスター群51の各レジスターからは入力値であるラウンド0の出力値が出力されて、SubBytes処理モジュール42にラウンド9の入力値として入力される。そして、この入力値に対してSubBytes処理モジュール42でSubBytes処理が行われ、ShiftRows処理モジュール43でShiftRows処理が行われて、MixColumns処理モジュール44に入力される。MixColumns処理モジュール44では、時刻t2〜t3でのCoreRoundReg[9:0]の値が9ラウンド目を表す「10'h200」であり10ラウンド目を表す値ではないため、セレクター群46の各セレクターには値0が入力されて、MixColumns回路群45によるMixColumns処理後の値がセレクター群46から出力される。AddRounKey処理モジュール47では、EXOR回路群49により、鍵スケジュール処理モジュール60から入力したラウンド9用のラウンド鍵RoundKey[127:0]と、MixColumns回路群45から入力した値とのAddRoundKey処理が行われる。また、時刻t2〜t3での信号Startは値0であるため、セレクター群50の各セレクターには値0が入力されて、EXOR回路群49によるAddRoundKey処理後の値がセレクター群50から出力される。
続く時刻t3のクロックが立ち上がると、このラウンド9の処理後の値がレジスター群51から出力され、ラウンド10の入力となる。ラウンド制御部90aでは、時刻t3のクロックの立ち上がりにより、RoundReg[9:0]やCoreRoundReg[9:0]が、時刻t2〜t3間のShiftRoundReg[9:0]の値である「10'h001」、すなわちラウンド10を表す値となる。そして、RoundReg[9:0]の値が「10'h001」になったため、ShiftControlが時刻t1以前と同様に値0となる。これにより、以降のレジスター95の出力は「10'h001」となる。鍵スケジュール処理モジュール60では、時刻t3のクロックの立ち上がりによりラウンド10のラウンド鍵RoundKey[127:0]がレジスター62からAddRounKey処理モジュール47に出力される。また、ラウンド処理モジュール40では、時刻t3のクロックの立ち上がり後において、CoreRoundReg[9:0]が「10'h001」であるため、セレクター群46の各セレクターへのセレクター信号が値1となるから、MixColumns処理モジュール44ではMixColumns処理を行わずにShiftRows処理モジュール43から入力した値をそのままAddRounKey処理モジュール47へ出力する。これにより、時刻t3〜t4間ではSubBytes処理、ShiftRows処理、AddRounKey処理モジュール47のみが行われ、AESのラウンド10の規格に沿った処理が行われる。そして、時刻t4のクロックの立ち上がりにより、レジスター群51からラウンド10の処理後の出力データ(暗号文)が出力される。また、時刻t3〜t4においてRounReg[9:0]が値「10'h001」となったため、次のクロックの立ち上がり時である時刻t4でBusy生成回路98から出力される信号Busyが値0となる。これにより、信号Startと信号Busyが共に値0となるから、OR回路99から出力される信号LatchEnableも値0となる。
以上のように、ラウンド制御部90aでは、時刻t1で処理が開始されると、クロックの立ち上がり毎にCoreRoundReg[9:0]の値が「10'h100」(=ラウンド8を表す値),「10'h200」(=ラウンド9を表す値),「10'h001」(=ラウンド10を表す値)の順で切り替わる。これにより、評価用回路32aは、時刻t1〜t2間ではラウンド0の処理が行われ、時刻t2〜t3間ではラウンド9の処理が行われ、時刻t3〜t4間ではラウンド10の処理が行われる。このように、短縮モードの評価用回路32aでは、ラウンド制御部90aが出力する制御信号であるCoreRoundReg[9:0]の値を通常モードと異ならせることで、ラウンド1〜8のラウンド処理を省略できるようになっている。
また、本実施形態では、短縮モードの評価用回路32aに入力する入力データ(平文)及び暗号鍵データを、テストベンチデータ27の入力データ(平文)及び暗号鍵データから導出したデータRD9A及びラウンド鍵RK8としている。そして、短縮モードの評価用回路32aではまず最初にラウンド0の処理としてRD9Aとラウンド鍵RK8との排他的論理和が導出されるため、ラウンド0の処理後の値は、評価用データの導出時に用いたデータRD9の値に戻る。そして、短縮モードの評価用回路32aでは、このデータRD9の値とラウンド鍵RK8とを用いてラウンド9,10の処理が行われる。ここで、データRD9は暗号処理回路32における8ラウンド目の出力データであり、ラウンド鍵RK8はラウンド8用のラウンド鍵であるから、これを入力してラウンド9,10の処理を行ったときの処理は、データRD9及びラウンド鍵RK8の導出に用いたテストベンチデータ27の入力データ(平文)及び暗号鍵データを暗号処理回路32に入力したときのラウンド9,10の処理と入出力値を含め全く同じとなり、暗号化コア部33の回路動作も全く同じとなる。これにより、評価用回路32aにテストベンチデータ27の入力データ(平文)及び暗号鍵データから導出した評価用データを入力したときに得られる消費電力テーブルは、暗号処理回路32にテストベンチデータ27の入力データ(平文)及び暗号鍵データを入力したときに得られる消費電力テーブルと、ほぼ同じとなる。より具体的には、消費電力テーブルのうちラウンド10の出力データは全く同じとなる。消費電力テーブルのうち消費電力データについては、ラウンド制御部90とラウンド制御部90aとの回路動作の異なる部分に起因する消費電力の分だけ異なるが、暗号化コア部33については全く同じであり、消費電力データ全体としてはほぼ同じ値となる。そして、短縮モードの評価用回路32aは暗号処理回路32と比べてステップ1〜8の処理を省略しているため、暗号処理回路32を用いて消費電力テーブルを取得する場合と比較して、短縮モードの評価用回路32aを用いて消費電力テーブルを取得する方がより短時間で消費電力テーブルを取得することができる。
ステップS140又はステップS170で消費電力テーブルを取得すると、評価部26は、この消費電力テーブルに基づいて差分電力解析を行って、暗号処理回路32の耐タンパ性を評価し(ステップS180)、評価結果を出力して(ステップS190)、本ルーチンを終了する。耐タンパ性の評価は、例えば、次のように行う。まず、暗号処理回路32の入力となる暗号鍵データ(=Key[127:0])を16個に分割したByte0〜Byte15(各8ビット)を考え、このうちのByte0を特定値に仮定する。次に、消費電力テーブルのうちラウンド10の出力データのByte0に対応するビット(上位8ビット)の値と、仮定したByte0の特定値と、に基づいてラウンド10の入力データのByte0に対応するビットの値を演算により導出し、ラウンド10の入力データのByte0に対応するビットの値と出力データByte0に対応するビットの値とのハミング距離を導出する(これを仮定ハミング距離と表記する)。そして、この仮定ハミング距離を、消費電力テーブルのすべてのラウンド10の出力データに対して導出し、仮定ハミング距離の値に基づいて消費電力テーブルの消費電力データを2つのグループに分ける。例えば、入出力データのByte0に対応するビットは8ビットであり、仮定ハミング距離は0〜8のいずれかの値をとるから、仮定ハミング距離が4未満であるラウンド10の出力データに対応する消費電力データのグループと、仮定ハミング距離が4以上であるラウンド10の出力データに対応する消費電力データのグループと、に分ける。なお、グループ分けのハミング距離の基準は4未満と5以上とするなど、これに限られない。そして、グループ毎の消費電力データの平均波形を求めて2つのグループの平均波形の差分を求める。続いて、この差分をByte0の取り得る全ての値(256通り)について求め、Byte0の仮定値を平均波形の差分の大きい順に並べて仮定値を順位付けする。続いて、暗号鍵データの正解値(消費電力テーブルの導出に用いた暗号鍵データ)のByte0の値の順位を調べる。Byte1〜Byte15についても同様に順位付けを行い、正解値の順位を調べる。評価結果の出力としては、例えばByte0〜Byte15の正解値の順位を出力したり、順位が1位であれば差分電力解析が成功しており耐タンパ性が低い旨の表示を出力したりする。なお、この順位が高いほど、消費電力データとラウンド10のハミング距離との相関が高く、耐タンパ性が低いことを意味する。また、評価結果の出力は、例えば表示部16にデータ表示することにより行ってもよいし、記憶部14や図示しない外付けの記憶媒体にデータを記憶することにより行ってもよい。
ここで、本実施形態の構成要素と本発明の構成要素との対応関係を明らかにする。本実施形態の耐タンパ性評価装置10が本発明の耐タンパ性評価装置に相当し、サイドチャネル情報取得部25がサイドチャネル情報取得手段に相当し、評価部26が評価手段に相当する。また、短縮モードの評価用回路32aが評価用回路に相当する。なお、本実施形態では、耐タンパ性評価装置10の動作を説明することにより本発明の耐タンパ性評価方法の一例も明らかにしている。
以上詳述した本実施形態の耐タンパ性評価装置10によれば、暗号処理回路32が処理を行う際の消費電力データを取得する代わりに、暗号処理回路32が所定の順序で行う10段のラウンド処理のうち最終段の処理を含むラウンド9,10の処理を行う短縮モードの評価用回路32aを用いて、短縮モードの評価用回路32aに評価用データを入力したときの消費電力データを複数取得する。そして、この複数の消費電力データに基づいて暗号処理回路32の耐タンパ性の評価を行う。こうすることで、データを入力してからデータが出力されるまでの処理時間は暗号処理回路32よりもその一部の処理を行う短縮モードの評価用回路32aの方が短いため、短時間で複数の消費電力データを取得することができる。そのため、暗号処理回路32の耐タンパ性の評価をより効率的に行うことができる。なお、上述したステップS160では評価用データを導出しているが、これに際しては、消費電力データを導出する必要がない。そのため、評価用データの導出と短縮モードの評価用回路32aに基づく消費電力データの導出との処理時間の合計は、暗号処理回路32にデータを入力して消費電力データを導出する際の処理時間(=通常モードの評価用回路32aにより消費電力データを導出する際の処理時間)より短い時間となる。
また、暗号処理回路に入力するテストベンチデータ27の入力データと暗号鍵データとに基づいて、入力データと暗号鍵データとを入力したときの暗号処理回路32の出力データと、評価用データを入力したときの短縮モードの評価用回路32aの出力データと、が同じ値になるような評価用データを導出して、これを短縮モードの評価用回路32aに入力している。そのため、暗号処理回路32に入力データと暗号鍵データとを入力したときの処理結果と、短縮モードの評価用回路32aに評価用データを入力したときの処理結果とが同じになるため、暗号処理回路32から得られる消費電力データとより近い消費電力データを評価用回路32aから取得することができる。また、短縮モードの評価用回路32aが暗号処理回路32の10段のラウンド処理のうち9段目から10段目までのラウンド処理を行う回路であるところ、暗号処理回路32に入力するテストベンチデータ27の入力データ(平文)と暗号鍵データとに基づいて、暗号処理回路32の1段目から8段目までのラウンド処理を行ったあとの出力データ(データRD9)と暗号鍵データ(ラウンド鍵RK8)とに基づいて評価用データを導出しているため、適切な評価用データを容易に導出することができる。
さらに、短縮モードの評価用回路32aは、暗号処理回路32のうち暗号化コア部33を変更せずラウンド制御部90をラウンド制御部90aに変更した回路である。そのため、暗号処理回路32のラウンド処理に含まれる各処理を行う回路自体は短縮モードの評価用回路32aにおいても変更されないから、暗号処理回路32と評価用回路32aとで得られる消費電力データの差異をより小さくすることができる。
さらにまた、評価用データに基づく処理を行う際の短縮モードの評価用回路32aにおける最終段(ラウンド10)の処理の消費電力データと、短縮モードの評価用回路32aの最終段の処理の出力データと、を対応付けた消費電力テーブルを取得し、消費電力テーブルに基づいて、暗号処理回路32の耐タンパ性の評価を行う。このため、消費電力テーブルに基づいて耐タンパ性を適切に評価することができる。
なお、本発明は上述した実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の態様で実施し得ることはいうまでもない。
例えば、上述した実施形態では、短縮モードの評価用回路32aは、暗号処理回路32のラウンド制御部90を図9のラウンド制御部90aに変更した回路であるものとしたが、暗号処理回路32の10段のラウンド処理のうち、9段目から10段目までのラウンド処理を含む処理を行うものであれば、評価用回路32aを他の回路構成としてもよい。例えば、ラウンド制御部90aを他の回路構成としてもよい。図12は、変形例のラウンド制御部90bの回路構成を示す説明図である。ラウンド制御部90bは、図示するように、セレクター91aのかわりにShift回路91bを備える点以外は、ラウンド制御部90aと同様の構成である。そこで、ラウンド制御部90bのうちラウンド制御部90aと同一の構成要素については同じ符号を付して詳細な説明を省略する。ラウンド制御部90bは、Shift回路91bと、OR回路92と、セレクター93と、セレクター94と、レジスター95と、セレクター96aと、セレクター97aと、Busy生成回路98と、OR回路99と、を備えている。Shift回路91bは、図5に示したラウンド制御部90のShift回路91を一部修正したものである。Shift回路91bは、基本的には入力したRoundReg[9:0]を左に1ビットシフトさせた値をShiftRoundReg[9:0]として出力する。ただし、入力したRoundReg[9:0]のうち0ビット目であるRoundReg[0]の値についてはShiftRoundReg[1]ではなくShiftRoundReg[9]の値として出力する。また、入力したRoundReg[9:0]のうち8ビット目であるRoundReg[8]の値についてはShiftRoundReg[9]ではなくShiftRoundReg[1]の値として出力する。次に、このように構成されたラウンド制御部90bの動作について説明する。図13は、ラウンド制御部90bの動作の様子を示すタイムチャートである。図示するように、信号Start及びリセット信号RSTnが値1となる時刻t1より前の状態では、RoundReg[9:0]及びCoreRoundReg[9:0]の値は、図11の時刻t1以前と同様に値「10'h001」となっている。また、Shift回路91bは、RoundReg[9:0]の値「10'h001」が入力されているため、ShiftRoundReg[9:0]としてラウンド値「10'h200」を出力している。また、信号Start,リセット信号RSTn,RoundReg[9:0]の状態(値)は図11の時刻t1以前と同じであるため、図11と同様にShiftControl及び信号Busyは値0となっている。この状態で時刻t1のクロックの立ち上がりで信号Start及びリセット信号RSTnが値1となると、時刻t1〜t2の間に、信号startが値1となったためOR回路92の出力であるShiftControlが値1となり、セレクター93はShiftRoundReg[9:0](=「10'h200」)を出力する。また、リセット信号RSTnが値1となっているため、セレクター94の出力は固定値「10h'001」から9ラウンド目を表す値(=「10'h200」)に切り替わり、レジスター95に入力された状態になる。また、信号Startが値1であるため、レジスター95の出力すなわちRoundReg[9:0]は値「10'b001」のままであるが、CoreRoundReg[9:0]の値は「10'b001」の8ビット目を値1,0ビット目を値0とした値「10'b100」となる。また、RoundReg[9:0]の値はShiftRoundReg[9:0]は「10'b001」のままであるため、ShiftRoundReg[9:0]の出力は「10'h200」のままとなる。また、信号Startが値1になったため、時刻t1でOR回路99から出力される信号LatchEnableが値0から値1となり、信号Startが値1である時刻t1〜t2の間の信号LatchEnableは継続して値1となる。次に、時刻t2のクロックの立ち上がりと共に信号Startが値0になると、ラウンド制御部90bでは、レジスター95の入力である「10'h200」がRoundReg[9:0]及びCoreRoundReg[9:0]の値として出力される。また、RounReg[9:0]の値が「10'h001」から「10'h200」に変わったため、Shift回路91bの出力であるShiftRoundReg[9:0]の値が「10'h001」となり、ShiftControl及びリセット信号RSTnも値1のままであるため、レジスター95にはこの「10'h001」の値が入力される。また、時刻t1で信号Startが値1になったため、次のクロックの立ち上がり時である時刻t2でBusy生成回路98から出力される信号Busyが値1となる。これにより、時刻t1〜t2に引き続き時刻t2以降においてもOR回路99から出力される信号LatchEnableは値1となる。続いて、時刻t3のクロックの立ち上がりにより、ラウンド制御部90bでは、レジスター95の入力である「10'h001」がRoundReg[9:0]及びCoreRoundReg[9:0]の値として出力される。そして、RoundReg[9:0]の値が「10'h001」になったため、ShiftControlが時刻t1以前と同様に値0となる。これにより、以降のレジスター95の出力は「10'h001」となる。また、RounReg[9:0]の値が「10'h200」から「10'h001」に変わったため、Shift回路91bの出力であるShiftRoundReg[9:0]の値が「10'h200」となる。また、時刻t3〜t4においてRounReg[9:0]が値「10'h001」となったため、次のクロックの立ち上がり時である時刻t4でBusy生成回路98から出力される信号Busyが値0となる。これにより、信号Startと信号Busyが共に値0となるから、OR回路99から出力される信号LatchEnableも値0となる。このようにラウンド制御部90bが動作することで、時刻t1のクロックの立ち上がり以降、CoreRoundReg[9:0]の値は「10'h001」からクロックの立ち上がり毎に「10'h100」,「10'h200」,「10'h001」の順で切り替わる。これは、図11に示したラウンド制御部90aと同じ動作である。これにより、ラウンド制御部90aの代わりに図12のラウンド制御部90bを用いた評価用回路を作成しても、本実施形態と同様に短縮モードの評価用回路はラウンド0,9,10の処理を行う回路となる。
上述した実施形態では、短縮モードの評価用回路32aは、暗号処理回路32の10段のラウンド処理のうち、9段目から10段目までのラウンド処理を含む処理を行うものとしたが、最終段であるラウンド10の処理を含む暗号処理回路32の一部の処理を行うものであれば、評価用回路32aを他の回路構成としてもよい。評価用回路32aは、10段のラウンド処理のうち、n段目(nは2以上10以下)から10段目までのラウンド処理を含む処理を行う回路としてもよい。この場合、評価用データは、暗号処理回路に入力する入力データと暗号鍵データとに基づいて、暗号処理回路の10段のラウンド処理のうち1段目から(n−1)段目までのラウンド処理を行ったあとの出力データと暗号鍵データとに基づく値として導出してもよい。図14は、変形例のラウンド制御部90cの回路構成を示す説明図である。ラウンド制御部90cは、図示するように、セレクター91aを備えない点、及びセレクター96aのかわりにセレクター96cを備える点以外は、ラウンド制御部90aと同様の構成である。そこで、ラウンド制御部90cのうちラウンド制御部90aと同一の構成要素については同じ符号を付して詳細な説明を省略する。ラウンド制御部90cは、OR回路92と、セレクター93と、セレクター94と、レジスター95と、セレクター96cと、セレクター97aと、Busy生成回路98と、OR回路99と、を備えている。セレクター93には、ShiftRoundReg[9:0]として常に値「10'h001」が入力されている。セレクター96cは、レジスター95の出力側とラウンド制御部90cのCoreRoundReg[9:0]の出力との間に挿入された回路であり、入力データとして、レジスター95からの出力データの9ビット目と、値「1b'1」とが入力されている。セレクター96cには、セレクター信号として信号Startが入力されており、信号Startが値1のときには値「1'b1」をCoreRoundReg[9:0]の9ビット目の値として出力し、値0のときにはレジスター95からの出力データの9ビット目の値をCoreRoundReg[9:0]の9ビット目の値として出力する。次に、このように構成されたラウンド制御部90cの動作について説明する。図15は、ラウンド制御部90cの動作の様子を示すタイムチャートである。図示するように、信号Start及びリセット信号RSTnが値1となる時刻t1より前の状態では、セレクター94は固定値である値「10'h001」を出力するため、RoundReg[9:0]及びCoreRoundReg[9:0]は値「10'h001」となっている。また、ShiftRoundReg[9:0]の値は「10'h001」に固定されている。また、信号Start,リセット信号RSTn,RoundReg[9:0]の状態(値)は図11の時刻t1以前と同じであるため、図11と同様にShiftControl及び信号Busyは値0となっている。この状態で時刻t1のクロックの立ち上がりで信号Start及びリセット信号RSTnが値1となると、時刻t1〜t2の間に、信号startが値1となったためOR回路92の出力であるShiftControlが値1となり、セレクター93はShiftRoundReg[9:0](=「10'h001」)を出力する。また、リセット信号RSTnが値1となっているため、セレクター94の出力は固定値「10h'001」から10ラウンド目を表す値(=「10'h001」)に切り替わり、レジスター95に入力された状態になる。また、レジスター95の出力すなわちRoundReg[9:0]は値「10'b001」のままであるが、信号Startが値1であるため、CoreRoundReg[9:0]の値は「10'b001」の9ビット目を値1,0ビット目を値0とした値「10'b200」となる。また、信号Startが値1になったため、時刻t1でOR回路99から出力される信号LatchEnableが値0から値1となり、信号Startが値1である時刻t1〜t2の間の信号LatchEnableは継続して値1となる。次に、時刻t2のクロックの立ち上がりと共に信号Startが値0になると、ラウンド制御部90cでは、レジスター95の入力である「10'h001」がRoundReg[9:0]の値として出力される。また、信号Startが値0であるのでCoreRoundReg[9:0]も同じ値「10'h001」となる。そして、RoundReg[9:0]の値が「10'h001」であり信号Startも値0であるため、ShiftControlが時刻t2において値0となる。これにより、以降のレジスター95の出力は「10'h001」となる。また、時刻t1で信号Startが値1になったため、次のクロックの立ち上がり時である時刻t2でBusy生成回路98から出力される信号Busyが値1となる。これにより、時刻t1〜t2に引き続き時刻t2以降においてもOR回路99から出力される信号LatchEnableは値1となる。また、時刻t2〜t3において信号Busyが値1でありRounReg[9:0]が値「10'h001」であるため、次のクロックの立ち上がり時である時刻t3でBusy生成回路98から出力される信号Busyが値0となる。これにより、信号Startと信号Busyが共に値0であるから、OR回路99から出力される信号LatchEnableも時刻t3で値0となる。このようにラウンド制御部90cが動作することで、時刻t1のクロックの立ち上がり以降、CoreRoundReg[9:0]の値は「10'h001」からクロックの立ち上がり毎に「10'h200」(=ラウンド9を表す値),「10'h001」(=ラウンド10を表す値)の順で切り替わる。これにより、ラウンド制御部90aの代わりに図14のラウンド制御部90cを用いた評価用回路を作成すると、時刻t1〜t2間ではラウンド0の処理が行われ、時刻t2〜t3間ではラウンド10の処理が行われる。すなわち、ラウンド制御部90cを用いた短縮モードの評価用回路はラウンド0,10の処理を行う回路となる。この場合でも、本実施形態と同様にサイドチャネル情報取得部25によりラウンド10の処理の前後の消費電力データを含む消費電力テーブルを短時間で取得することができる。なお、このラウンド制御部90cを用いる場合には、ステップS160において以下のように評価用データを導出する。まず、テストベンチデータ27の1つの入力データ(平文)と暗号鍵データとを読み出し、読み出した暗号鍵データからラウンド9用のラウンド鍵RoundKey[127:0]を導出する(以下、この値をラウンド鍵RK9とも表記する)。次に、テストベンチデータ27から読み出した入力データ(平文)と暗号鍵データとをPlaintext[127:0]とKey[127:0]として暗号処理回路32に入力したときの、9ラウンド目の出力データ(レジスター群51の出力データ)を導出する(以下、この値をデータRD10とも表記する)。そして、求めたラウンド鍵RK9とデータRD10との排他的論理和を導出する。そして、この排他的論理和で導出した値であるデータRD10Aと、ラウンド鍵RK9とを、評価用回路の入力データ(平文)と暗号鍵とのペアすなわち評価用データとする。こうすることで、ラウンド制御部90cを用いた評価用回路を用いて、暗号処理回路32にテストベンチデータ27の入力データ(平文)及び暗号鍵データを入力したときに得られる消費電力テーブルと、ほぼ同じ(ラウンド10の出力データは全く同じ)消費電力テーブルを得ることができる。
上述したラウンド制御部90cの他に、図16に示す変形例のラウンド制御部90dを用いてもよい。ラウンド制御部90dは、図示するように、Shift回路91dを備える点以外は、ラウンド制御部90cと同様の構成である。そこで、ラウンド制御部90dのうちラウンド制御部90cと同一の構成要素については同じ符号を付して詳細な説明を省略する。ラウンド制御部90dは、Shift回路91dと、OR回路92と、セレクター93と、セレクター94と、レジスター95と、セレクター96cと、セレクター97aと、Busy生成回路98と、OR回路99と、を備えている。Shift回路91dは、図5に示したラウンド制御部90のShift回路91を一部修正したものである。Shift回路91dは、基本的には入力したRoundReg[9:0]を左に1ビットシフトさせた値をShiftRoundReg[9:0]として出力する。ただし、入力したRoundReg[9:0]のうち0ビット目であるRoundReg[0]の値についてはShiftRoundReg[1]ではなくShiftRoundReg[0]の値として出力する。また、入力したRoundReg[9:0]のうち9ビット目であるRoundReg[9]の値についてはShiftRoundReg[0]ではなくShiftRoundReg[1]の値として出力する。このように構成されたラウンド制御部90dでは、RoundReg[9:0],ShiftRoundReg[9:0],CoreRoundReg[9:0],Shiftcontrol,信号Busy,信号LatchEnableの値はラウンド制御部90cと同じように変化する。すなわち、ラウンド制御部90dの動作も、図15に示した通りとなる。そのため、ラウンド制御部90dを用いた短縮モードの評価用回路も、ラウンド0,10の処理を行う回路となり、本実施形態と同様にサイドチャネル情報取得部25によりラウンド10の処理の前後の消費電力データを含む消費電力テーブルを短時間で取得することができる。なお、ラウンド制御部90dを用いた短縮モードの評価用回路に入力する評価用データを、ラウンド制御部90cと同様にデータRD10A及びラウンド鍵RK9とすることで、ラウンド制御部90cを用いた場合と同様に、暗号処理回路32にテストベンチデータ27の入力データ(平文)及び暗号鍵データを入力したときに得られる消費電力テーブルとほぼ同じ消費電力テーブルを得ることができる。
上述した実施形態では、評価用回路32aは、ラウンド制御部90とラウンド制御部90aとを備え、通常モードと短縮モードとを切替可能としたが、ラウンド制御部90を備えない、すなわち常に短縮モードの評価用回路32aの動作をするものとしてもよい。この場合、ShortModeのノードを仕込んでおく必要はない。
上述した実施形態では、評価用回路32aを暗号処理回路32から生成する際にShortModeのノードを仕込んでおき、このShortModeを値0(=1'b0)とするか値1(=1'b1)とするかを変更することで、通常モードと短縮モードとを選択可能としたが、これに限られない。他の構成により通常モードと短縮モードとを選択可能としてもよい。
上述した実施形態では、サイドチャネル情報取得部25はSPICEを用いたシミュレーションを行って消費電力テーブルを取得するものとしたが、評価用回路32aのサイドチャネル情報を取得するものであればこれに限られない。例えば、サイドチャネル情報取得部25が論理シミュレータと消費電力解析ツールとを用いて消費電力テーブルを取得するものとしてもよい。
上述した実施形態では、サイドチャネル情報取得部25は、サイドチャネル情報として評価用回路32aの消費電力データを取得するものとしたが、評価用回路32aのサイドチャネル情報を取得するものであればこれに限られない。例えば、サイドチャネル情報として、評価用回路32aが発する電磁波,評価用回路32aが発する音,評価用回路32aの処理時間の少なくともいずれか1つに関する情報を取得してもよい。また、サイドチャネル情報取得部25がサイドチャネル情報を取得する攻撃タイミングは、ラウンド10の処理後の出力データ(暗号文)の出力時のクロック立ち上がりから所定時間経過後としたが、評価用回路32aの処理時のサイドチャネル情報を取得するものであればこれに限られない。例えば、ラウンド10の入力データの入力時のクロック立ち上がりから所定時間経過後など、評価用回路32aの最終段の処理のサイドチャネル情報としてもよい。
上述した実施形態では、サイドチャネル情報取得部25は、サイドチャネルテーブルとして消費電力データと、ラウンド10の処理の出力データを取得するものとしたが、出力データに限らずサイドチャネル情報と相関がある値を取得するものであればよい。
上述した実施形態では、評価部26は、消費電力テーブルに基づいて、消費電力テーブルのラウンド10の出力データからハミング距離(仮定ハミング距離)を導出して、差分電力解析を行うものとしたが、ハミング距離に限らず消費電力テーブルを用いて導出でき暗号鍵データと関連のある中間値を導出して差分電力解析を行うものであればよい。例えば、ラウンド10の出力データから導出したラウンド10の入力データのハミング重みを中間値として導出して差分電力解析を行うものとしてもよい。また、評価部26は、差分電力解析に限らず、相関電力解析など、サイドチャネル情報に基づく耐タンパ性の評価を行うものであればよい。
上述した実施形態では、評価用回路データ生成部21は、暗号処理回路32から暗号化コア部33を変更せずラウンド制御部90のみを変更した評価用回路32aを作成するものとしたが、暗号処理回路32の複数段の処理のうち最終段の処理を含む暗号処理回路32の一部の処理を行う評価用回路を作成するものであればよい。例えば、暗号化コア部33を変更するものとしてもよい。例えば、ラウンド処理モジュール40においてEXOR回路48を削除してPlaintext[127:0]が直接セレクター群50のセレクターに入力されるようにした評価用回路を作成してもよい。こうすれば、評価用回路はラウンド0を行わずラウンド9,10のみを行う回路とすることができる。この場合、評価用データ導出部23は、評価用データとして、8ラウンド目の出力データRD9と9ラウンド目のラウンド鍵RK9とのペアを導出するものとしてもよい。
上述した実施形態では、評価用データ導出部23がテストベンチデータ27に基づいて導出した評価用データを短縮モードの評価用回路32aに入力するものとしたが、これに限らずどのような値の評価用データを入力してもよい。例えばランダムな入力データ(平文)と暗号鍵データとを評価用データとして評価用回路32aに入力してもよいし、テストベンチデータ27の入力データ(平文)と暗号鍵データとを評価用データとして評価用回路32aに入力してもよい。あるいは、予めテストベンチデータ27に基づいて導出した評価用データが記憶部14などに記憶されているものとし、図7のステップS160を省略するものとしてもよい。
上述した実施形態では、暗号処理回路32は、10段のラウンド処理を行うものとしたが、これに限らずm段(mは2以上の整数)のラウンド処理を行うものであればよい。また、暗号処理回路は、ラウンド処理に限らず複数段の処理を行うものであってもよい。この場合、評価用回路は、複数段の処理のうち最終段の処理を含む暗号処理回路の一部の処理を行う評価用回路であればよい。
上述した実施形態では、暗号処理回路32は、128ビットの入力データ(平文)と128ビットの暗号鍵データとに基づくAESの暗号化処理を行うものとしたが、暗号鍵データは128ビットに限らず192ビットや256ビットとしてもよい。なお、暗号鍵データを192ビットとする場合には、12段のラウンド処理を行う(ラウンド0のあと、ラウンド1〜12を行う)ものとすればよい。暗号鍵データを256ビットとする場合には、14段のラウンド処理を行う(ラウンド0のあと、ラウンド1〜14を行う)ものとすればよい。また、暗号処理回路32は、AESに限らず他の方式の暗号化処理を行うものとしてもよい。
上述した実施形態では、評価用回路データ生成部21が暗号処理回路32から評価用回路32aを作成するものとしたが、これに限られない。例えば、ユーザーが暗号処理回路32のデータから評価用回路32aのデータを作成するものとしてもよい。あるいは、予め評価用回路32aのデータが記憶部14などに記憶されているものとし、図7のステップS100を省略するものとしてもよい。
上述した実施形態では、ステップS100で評価用回路32aを作成してからステップS110の処理を行って暗号処理回路32aのデータ形式を変換するものとしたが、これに限られない。例えば、暗号処理回路32に対してステップS110の処理を行ってデータ形式を変換したあとに、変換後の暗号処理回路32のデータに基づいて評価用回路32aを作成してもよい。回路データ31が最初からサイドチャネル情報取得部25が利用できるデータ形式で記述されており、データ形式の変換を行わないものとしてもよい。
以下には、耐タンパ性評価プログラム及び耐タンパ性評価装置を実際に作成した例を実施例として説明する。
[実施例1]
実施例1として、上述した実施形態の耐タンパ性評価プログラム20を作成した。そして、CPUがXeon W3565(3.2GHz)でありRAMの容量が16GBである制御部を有するコンピューターのハードディスクにこれを記憶して、実施例1の耐タンパ性評価装置10とした。なお、サイドチャネル情報取得部25が消費電力テーブルを取得する際の消費電力データを取得するタイミング(攻撃タイミング)は、任意に設定できるものとした。
[実施例2]
実施例2として、評価用回路データ生成部21が生成する評価用回路32aがラウンド制御部90aのかわりに図14に示したラウンド制御部90cを備える点以外は、実施例1と同様の耐タンパ性評価プログラム20を作成した。この耐タンパ性評価プログラム20を実施例1と同様のコンピューターのハードディスクに記憶して、実施例2の耐タンパ性評価装置10とした。
なお、実施例1,2の耐タンパ性評価装置10において短縮モードで耐タンパ性の評価を行う場合が本発明の耐タンパ性評価方法に該当し、通常モードで耐タンパ性の評価を行う場合は、比較例に相当する。
[評価試験1:シミュレーション時の回路動作の比較]
実施例1の耐タンパ性評価装置10について、上述した実施形態と同じ暗号処理回路32に対して耐タンパ性評価プログラム20を実行した。そして、評価用回路データ生成部21により暗号処理回路32から作成された評価用回路32aの動作をサイドチャネル情報取得部25がシミュレーションしたときの、評価用回路32aの処理値(レジスター群51の出力値及びRoundKey[127:0]の値)を取得した。処理値の取得は通常モードの評価用回路32aの動作をシミュレーションしたとき(図7のステップS140を行ったとき)と、短縮モードの評価用回路32aの動作をシミュレーションしたとき(図7のステップS170を行ったとき)とについて行った。なお、通常モードの評価用回路32aのシミュレーションでは、テストベンチデータ27の入力データ(平文)として所定値A[127:0](=16進数表記で「759f02211f85e5ff2f904a780f58006f」)を入力し、暗号鍵データとして所定値B[127:0](=16進数表記で「2923be84e16cd6ae529049f1f1bbe9eb」)を入力するものとした。また、短縮モードのシミュレーションでは、入力データ(平文)としてこの所定値A[127:0],所定値B[127:0]から導出したデータRD9A(=16進数表記で「5fbf6bdc870912d50edc0cc55c2eb683」)を入力し、暗号鍵データとして所定値B[127:0]から導出したラウンド鍵RK8(=16進数表記で「51d5a6072ca36be0c4c154bf681d7e56」)を入力した。実施例2の耐タンパ性評価装置10についても、同様に通常モード及び短縮モードの評価用回路32aについてシミュレーションを行って、処理値(レジスター群51の出力値及びRoundKey[127:0]の値)を取得した。なお、実施例2においても通常モードの評価用回路32aのシミュレーションでは、入力データ(平文)として所定値A[127:0]を入力し、暗号鍵データとして所定値B[127:0]を入力するものとした。また、短縮モードのシミュレーションでは、入力データ(平文)としてこの所定値A[127:0],所定値B[127:0]から導出したデータRD10A(=16進数表記で「cb55d62662abdd839da377d55a071833」)を入力し、暗号鍵データとして所定値B[127:0]から導出したラウンド鍵RK9(=16進数表記で「ee261742c2857ca20644281d6e59564b」)を入力した。
評価試験1の結果を図17,18に示す。図17は評価試験1における実施例1の評価用回路32aの処理値の説明図であり、図18は評価試験1における実施例2の評価用回路32aの処理値の説明図である。図17,18のいずれも、上段が通常モードの場合を示し下段が短縮モードの場合を示している。図17に示すように、レジスター群51の出力値を比較すると、ラウンド9の入力データ,ラウンド10の入力データ(=ラウンド9の出力データ),暗号文(=ラウンド10の出力データ)のいずれも、通常モードと短縮モードとで値は同じであった。また、RoundKey[127:0]の値を比較すると、ラウンド9のラウンド鍵,ラウンド10のラウンド鍵のいずれも、通常モードと短縮モードとで値は同じであった。このことから、例えばラウンド10の入力時のクロックの立ち上がりから所定時間経過後のタイミングである攻撃タイミングAや、ラウンド10の出力時のクロックの立ち上がりから所定時間経過後のタイミングである攻撃タイミングBなどを攻撃タイミングとする場合、短縮モードであっても通常モードと暗号化コア部33の回路動作が同じであるので、通常モードとほぼ同じ消費電力データが得られることがわかる。図18においても、ラウンド10の入力データ(=ラウンド9の出力データ),暗号文(=ラウンド10の出力データ),ラウンド10のラウンド鍵のいずれも、通常モードと短縮モードとで値は同じであった。このことから、例えばラウンド10の出力時のクロックの立ち上がりから所定時間経過後のタイミングである攻撃タイミングCなどを攻撃タイミングとする場合、短縮モードであっても通常モードほぼ同じ消費電力データが得られることがわかる。なお、図17,18においてレジスター群51の出力値及びRoundKey[127:0]の値は4桁の16進数で表記されている箇所があるが(例えば図17のラウンド9の入力データ「0E6A」など)、これは実際の値である32桁の16進数(=128ビット)の値のうち上位4桁のみを表示したものである。
[評価試験2:消費電力データ取得時間の比較]
実施例1,2の耐タンパ性評価装置10について、予め用意したテストベンチデータ27を用いて、上述した実施形態と同じ暗号処理回路32について耐タンパ性評価プログラム20を実行して耐タンパ性の評価を行った。テストベンチデータ27としては、1つの暗号鍵データと複数の入力データ(平文)とを用いた。そして、実施例1の耐タンパ性評価装置10を用いて暗号処理回路32から作成した通常モードの評価用回路32aで耐タンパ性の評価を行った場合と、短縮モードの評価用回路32aで耐タンパ性の評価を行った場合と、実施例2の耐タンパ性評価装置10を用いて暗号処理回路32から作成した短縮モードの評価用回路32aで耐タンパ性の評価を行った場合とで、サイドチャネル情報取得部25がシミュレーションにより消費電力データを取得するのに要した時間を測定した。時間の測定は、テストベンチデータ27の入力データ(平文)の数を千パターン,1万パターン,5万パターンとした場合についてそれぞれ行った。攻撃タイミングは、実施例1では暗号文(ラウンド10の出力データ)が出力されるクロックの立ち上がりエッジから1.4nsec経過時のタイミングとした。また、実施例2では、暗号文が出力されるクロックの立ち上がりエッジから1.3nsec経過時のタイミングを攻撃タイミングとした。結果を表1に示す。なお、表1では、入力データ(平文)の数が1万パターン,5万パターンの場合の時間に基づいて予測した、10万パターン,100万パターンの場合の時間についても併せて示した。表1に示すように、通常モードに比べて実施例1,2の短縮モードでは、消費電力データの取得に要した時間はいずれも短く、実施例1で約3分の1、実施例2では約5分の1の時間で消費電力データの取得が可能であった。
[評価試験3:消費電力データの比較]
評価試験2と同様に、実施例1,2の耐タンパ性評価装置10について、予め用意したテストベンチデータ27を用いて、上述した実施形態と同じ暗号処理回路32について耐タンパ性評価プログラム20を実行し、サイドチャネル情報取得部25が取得した消費電力データの波形の比較を行った。なお、テストベンチデータ27としては、1つの暗号鍵データと3パターンの入力データ(平文)(以下、Text1〜Text3とも表記する)を用いた。図19は、実施例1において通常モードの評価用回路32aについてシミュレーションを行って、サイドチャネル情報取得部25が取得した消費電力データの波形を示すグラフである。図20は、実施例1において短縮モードの評価用回路32aについてシミュレーションを行ってサイドチャネル情報取得部25が取得した消費電力データの波形を示すグラフである。図21は、実施例1において通常モードの評価用回路32aについてシミュレーションを行って、サイドチャネル情報取得部25が取得した消費電力データの波形を示すグラフである。図22は、実施例1において短縮モードの評価用回路32aについてシミュレーションを行ってサイドチャネル情報取得部25が取得した消費電力データの波形を示すグラフである。図23は、実施例2において通常モードの評価用回路32aについてシミュレーションを行って、サイドチャネル情報取得部25が取得した消費電力データの波形を示すグラフである。図24は、実施例2において短縮モードの評価用回路32aについてシミュレーションを行ってサイドチャネル情報取得部25が取得した消費電力データの波形を示すグラフである。なお、図19,20,23,24では、暗号文(ラウンド10の出力データ)が出力されるクロックの立ち上がりエッジを時刻0nsecとして、時刻0nsec〜10nsecまでの期間の消費電力データを示した。また、図21,22では、ラウンド10の入力データが入力されるクロックの立ち上がりエッジを時刻0nsecとして、時刻0nsec〜10nsecまでの期間の消費電力データを示した。
図19,20の比較からわかるように、実施例1の通常モードと短縮モードとで、Text1~3のいずれについても、時刻0nsec〜10nsecの間にわたって、ほぼ同じ値,同じ傾向の消費電力データが得られた。図19,20とは消費電力データを取得するタイミングの異なる図21,22においても、両者の消費電力データはほぼ同じ値,同じ傾向となった。また、実施例2の通常モードと短縮モードとにおいても、図23,24からわかるように両者の消費電力データはほぼ同じ値,同じ傾向となった。
[評価試験4:耐タンパ性の評価結果の比較]
評価試験2と同様に、実施例1,2の耐タンパ性評価装置10について、予め用意したテストベンチデータ27を用いて、上述した実施形態と同じ暗号処理回路32について耐タンパ性評価プログラム20を実行して耐タンパ性の評価を行い、評価結果を比較した。なお、テストベンチデータ27としては、1つの暗号鍵データと5万パターンの入力データ(平文)とを用いた。図25〜図30は、評価に用いた入力データ(平文)の総数(=消費電力データの波形数)と暗号鍵データであるByte0〜Byte15の正解値(正解鍵)の順位との関係を示すグラフである。図25は、実施例1の通常モードの評価用回路32aにおいて、暗号文(ラウンド10の出力データ)が出力されるクロックの立ち上がりエッジから1.4nsec経過時点を攻撃タイミングとしたときの様子を示している。図26は、実施例1の短縮モードの評価用回路32aにおいて、暗号文(ラウンド10の出力データ)が出力されるクロックの立ち上がりエッジから1.4nsec経過時点を攻撃タイミングとしたときの様子を示している。図27は、実施例1の通常モードの評価用回路32aにおいて、ラウンド10の入力データ(ラウンド9の出力データ)が入力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。図28は、実施例1の短縮モードの評価用回路32aにおいて、ラウンド10の入力データ(ラウンド9の出力データ)が入力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。図29は、実施例2の通常モードの評価用回路32aにおいて、暗号文(ラウンド10の出力データ)が出力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。図30は、実施例2の短縮モードの評価用回路32aにおいて、暗号文(ラウンド10の出力データ)が出力されるクロックの立ち上がりエッジから1.3nsec経過時点を攻撃タイミングとしたときの様子を示している。
図25,26,29,30のいずれにおいても、消費電力データの波形数が多いほどByte0〜Byte15の正解値の順位が高くなる傾向にあった。そして、図25と図26とでは、Byte0〜Byte15の正解値の順位が同様の傾向を示しており、実施例1の短縮モードでも実施例1の通常モードと同様の評価結果が得られることが確認できた。同様に、図29と図30とでは、Byte0〜Byte15の正解値の順位が同様の傾向を示しており、実施例2の短縮モードでも実施例2の通常モードと同様の評価結果が得られることが確認できた。また図27,28では、消費電力データの波形数が多くなってもByte0〜Byte15の正解値の順位が高くならず、Byte0〜Byte15のいずれも正解値が1位にはならなかった。これは、暗号処理回路32の暗号化コア部33において、ラウンド10の出力データが出力されるタイミングの消費電力波形とラウンド10の入出力データ間のハミング距離との相関と比べて、ラウンド10の入力データが入力されるタイミングの消費電力波形とラウンド10の入出力データ間のハミング距離との相関が低いことが原因と考えられる。そして、図27と図28とでは、Byte0〜Byte15の正解値の順位が同様の傾向を示しており、この攻撃タイミングにおいても実施例1の短縮モードは実施例1の通常モードと同様の評価結果が得られることが確認できた。