以下に添付図面を参照して、この発明にかかる暗号処理装置の好適な実施形態を詳細に説明する。
DPAおよびCPAの対策としては、マスク法が知られている。マスク法は、暗号処理中のデータに対してマスクと呼ばれる乱数または固定値に対して加算および乗算などの処理を実行して暗号処理を続けることで、消費電力と暗号処理中のデータとの相関をなくす。なお、暗号処理とは、平文を暗号化して暗号文を出力する暗号化処理、および、暗号文を復号して平文を出力する復号処理を含む。平文および暗号文は、暗号処理装置に入力される入力文の一例である。
2次DPAおよび2次CPA、並びに、これらの拡張である高次DPAおよび高次CPAを用いると、マスク法を施した暗号回路からも暗号鍵を解析することができる。2次DPAとは、消費電力波形上の2点の電力を利用して、マスクの影響を考慮した上で、消費電力と暗号処理中のデータとの相関の有無を判定する攻撃手法である。消費電力波形上の2点としては、例えば、暗号処理の中間データに対するマスク付きデータを処理する点と、マスク付きデータに付されるマスクを処理する点の消費電力を用いる場合、および、同一のマスクが付いた2つのデータを処理する点の消費電力を用いる場合がある。n次の攻撃は(n-1)次対策を無効にする。
DLPAは、高次のマスク対策を無効化する。n次DPAおよびn次CPAは、n点の電力を選択して攻撃するが、DLPAでは電力の複数点(n以上)をニューラルネットワークの入力ノードに入力する。なお、1点の電力値が入力ノードの1つに対応する。ニューラルネットワークの学習で、攻撃に用いる重みの大きい入力ノードが決定される。ニューラルネットワークのハイパーパラメータとして、層数、層のノード数、活性化関数、および、最適化関数等を与える必要がある。入力ノードの個数が大きいほど、鍵の導出を可能にするハイパーパラメータの探索が困難になる。
そこで、以下の実施形態では、入力ノードの個数が大きくなるようにするため、マスクを適用する処理単位となるデータが時間的に分散して出現するように構成する。例えば各実施形態の暗号処理装置は、処理単位のデータをさらに分割したデータと同じサイズの複数の分割マスクが、相互に異なるタイミングで演算に用いられるように構成される。(n+1)点以上の電力が必要になるようにマスクを分割すれば、n次DPAおよびn次CPAの対策にもなりうる。
(AESの説明)
以下では、鍵長を128ビットとしたAES(Advanced Encryption Standard)方式の暗号処理装置(暗号化装置、復号装置)に適用した例について説明する。鍵長は128ビットに限られず、196ビットおよび256ビットの鍵長でも同様に適用できる。また、DES(Data Encryption Standard)およびHierocryptなど、他の非線形変換を用いる暗号アルゴリズムを処理する装置にも適用できる。
鍵長を128ビットとしたAESでは、128ビットの固定長のデータ(ブロックと呼ばれる場合もある)を単位として暗号処理が実行される。例えば、128ビットのブロックに対して、ラウンド関数を用いたラウンド処理が規定ラウンド数繰り返される。AESのラウンド関数は、SubByte、ShiftRow、MixColumn、および、AddRoundKeyを含む。例えばAESでは、1ラウンドから10ラウンドまでの10個のラウンドが実行される。10ラウンドが最終ラウンドとなる。10ラウンド目のラウンド関数はSubByte、ShiftRow、および、AddRoundKeyを含む。
AESに対してマスクを用いる場合、固定長のデータ(例えば128ビット)を分割したデータのサイズに相当する予め定められたサイズの処理単位でマスクが適用される。処理単位のサイズは、例えば(8×L)ビット(Lは1以上の整数)とすることができるが、これに限られるものではない。以下では、処理単位のサイズが8ビットである場合を例に説明する。
ここで、AES方式の暗号化装置および復号装置の構成例について説明する。図1は、暗号化装置100の構成の一例を示すブロック図である。図1に示すように、暗号化装置100は、入力部101aと、出力部101bと、鍵記憶部102と、ラウンド鍵生成部103と、AddRoundKey104a~104kと、SubByte105b~105kと、ShiftRow106b~106kと、MixColumn107b~107jと、を備える。
入力部101aは、外部から平文の入力を受け付ける。出力部101bは、処理結果である暗号文を外部に出力する。なお暗号化装置100は、入力部101aと出力部101bの機能を共に有する入出力部を備えるように構成してもよい。
鍵記憶部102は、128ビットの秘密鍵を記憶する。鍵記憶部102は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
ラウンド鍵生成部103は、鍵記憶部102が記憶する秘密鍵から11個の128ビットのラウンド鍵d103a~d103kを計算し、AddRoundKey104a~104kに供給する。ラウンド鍵d103a~d103kは、AddRoundKey104aが実行される以前に予め計算されてもよいし、AddRoundKey104a~104kと並行に計算されてもよい。
AddRoundKey104aに入力されるデータd101aは、入力された平文と同一である。AddRoundKey104a~104kは、データd101a、d107b~d107j、d106kに対してAES暗号で定められているAddRoundKey変換処理を行い、データd104a~d104kを出力する。データd104a~d104jは、SubByte105b~105jに入力される。データd104kは、暗号文と同一である。
SubByte105b~105kは、データd104a~d104jを、8ビットごとに非線形変換し、データd105b~d105kを出力する。データd105b~d105kは、ShiftRow106b~106kに入力される。
ShiftRow106b~106kは、データd105b~d105kを、8ビットを処理単位として並べ替え、データd106b~d106kを出力する。データd106b~d106jは、MixColmun107b~107jに入力される。データd106kは、AddRoundKey104kに入力される。
MixColmun107b~107jは、データd107b~d107jを32ビットごとに線形変換し、データd107b~d107jを出力する。データd107b~d107jは、AddRoundKey104b~104jに入力される。
図2は、復号装置200の構成の一例を示すブロック図である。図2に示すように、復号装置200は、入力部201aと、出力部201bと、鍵記憶部202と、ラウンド鍵生成部203と、AddRoundKey204a~204kと、InvShiftRow205a~205jと、InvSubByte206a~206jと、InvMixColumn207b~207jと、を備える。
入力部201aは、外部から暗号文の入力を受け付ける。出力部201bは、処理結果である平文を外部に出力する。なお復号装置200は、入力部201aと出力部201bの機能を共に有する入出力部を備えるように構成してもよい。
鍵記憶部202は、128ビットの秘密鍵を記憶する。鍵記憶部202は、HDD、光ディスク、メモリカード、RAMなどの一般的に利用されているあらゆる記憶媒体により構成することができる。
ラウンド鍵生成部203は、鍵記憶部202が記憶する秘密鍵から11個の128ビットのラウンド鍵d203a~d203kを計算し、AddRoundKey204a~204kに供給する。ラウンド鍵d203a~d203kは、AddRoundKey204aが実行される以前に予め計算されてもよいし、AddRoundKey204a~204kと並行に計算されてもよい。
AddRoundKey204aに入力されるデータd201aは、入力された暗号文と同一である。
AddRoundKey204a~204kは、データd201a、d206a~d206jに対してAES暗号で定められているAddRoundKey変換処理を行い、データd204a~204kを出力する。データd204aは、InvShiftRow205aに入力される。データd204b~204jは、InvMixColmun207b~207jに入力される。データd204kは、出力される平文と同一である。
InvShiftRow205a~205jは、データd204a、d207b~d207jを、8ビットを処理単位として並べ替え、データd205a~d205jを出力する。データd205a~d205jは、InvSubByte206a~206jに入力される。
InvSubByte206a~206jは、データd205a~d205jを8ビットごとに非線形変換し、データd206a~d206jを出力する。データd206a~d206jは、AddRoundKey204b~204jに入力される。
InvMixColmun207b~207jは、データd204b~d204jを32ビットごとに線形変換し、データd207b~d207jを出力する。データd207b~d207jは、InvShiftRow205b~205jに入力される。
なお、図1および図2では、各ラウンドの処理を実行する処理部を分けて記載しているが、同一番号の処理部はそれぞれ共通の機能および構成を備えている。アルファベットが異なる同一番号の処理部を共通化し、共通化した1つの処理部が各ラウンドの処理を実行するように構成してもよい。例えば、AddRoundKey204a~204kを1つのAddRoundKey204として構成してもよい。
以下の各実施形態は、図1および図2の構成に対して、さらにマスクを分割して適用する機能が備えられる。以下、各実施形態で追加される機能について詳細に説明する。
(用語定義)
最初に、各実施形態で用いられる用語を定義する。
暗号処理の中間データとは、暗号アルゴリズムで定められた処理中に計算されるデータである。AESの暗号化処理の場合には、AddRoundKey、SubByte、ShiftRow、および、MixColumnに入出力されるデータおよび内部で取り扱われるデータが中間データに相当する。
マスクとは、暗号処理の中間データと消費電力との相関を取り除くため、暗号処理の中間データに対する排他的論理和などの演算で処理されるデータである。SubByteに入力される入力データにかかるマスクを入力マスクとし、SubByteから出力される出力データにかかるマスクを出力マスクとする。実施形態の説明では、排他的論理和で処理されるマスクを例に説明する。
暗号処理は16バイト(128ビット)単位で行われる。SubByte入力の中間データ、SubByte出力の中間データ、入力マスク、および、出力マスクはそれぞれ16バイトである。実施形態では、入力マスクと出力マスクは各バイトで異なり、各ラウンドで同一として説明する。入力マスクと出力マスクとは、各バイトで同一でもよい。各ラウンドで、同一のマスク(16バイト)の少なくとも一部のバイトを入れ替えた値を、入力マスクおよび出力マスクとして用いてもよい。各ラウンドで、それぞれ異なる入力マスクを用いてもよい。同様に、各ラウンドで、それぞれ異なる出力マスクを用いてもよい。
実施形態では、1バイトすなわち8ビットの中間データにかかる8ビットのマスクを、4ビット単位で2つに分割して扱う。2つに分割されたマスクが分割マスクに相当する。分割方法はこれに限らず、例えば2ビット単位で4つに分割してもよいし、1ビット単位で8つに分割してもよい。
im0Lは、0バイト目の入力マスクの左4ビットを意味する。im0Rは、0バイト目の入力マスクの右4ビットを意味する。om0Lは、0バイト目の出力マスクの左4ビットを意味する。om0Rは、0バイト目の出力マスクの右4ビットを意味する。実施形態では、ある1バイトのデータの左を上位ビット、右を下位ビットとして扱う。これに限らず逆でもよい。
各マスクは、0バイト目から15バイト目までの各16バイトを含む。imLは、入力マスクの0バイト目から15バイト目の左4ビットをまとめて表す場合の表記である。imRは、入力マスクの0バイト目から15バイト目の右4ビットをまとめて表す場合の表記である。omLは、出力マスクの0バイト目から15バイト目の左4ビットをまとめて表す場合の表記である。omRは、出力マスクの0バイト目から15バイト目の右4ビットをまとめて表す場合の表記である。
(第1の実施形態)
以下、第1の実施形態の暗号化装置および復号装置の構成例について説明する。図1および図2と重複する機能については同一の符号を付し、説明は省略する。
図3Aおよび図3Bは、本実施形態の暗号化装置の構成の一例を示すブロック図である。本実施形態の暗号化装置は、入力部101aと、出力部101bと、鍵記憶部102と、ラウンド鍵生成部103と、AddRoundKey104a~104kと、SubByte105b~105kと、ShiftRow106b~106kと、MixColumn107b~107jと、マスク記憶部131と、マスク処理部121aと、アンマスク処理部125k(演算部の一例)と、マスク変換部123b~123j(演算部の一例)と、マスク変換用データ生成部122b~122j(生成部の一例)と、アンマスク用データ生成部124k(生成部の一例)と、を備える。
マスク記憶部131は、入力マスクの1バイトすなわち8ビットを左4ビットと右4ビットの2つに分割して分割マスクとして記憶する。同様にマスク記憶部131は、出力マスクの左4ビットと右4ビットの2つに分割して分割マスクとして記憶する。各バイトの入力マスクおよび出力マスクは、同一としてもよいし、相互に異なる値としてもよい。
マスク処理部121aは、入力マスクの各バイトの左4ビットと、入力部101aから受けとった平文の各バイトの左4ビットとの排他的論理和を計算する。また、マスク処理部121aは、左4ビットの排他的論理和とは異なるタイミングで、入力マスクの各バイトの右4ビットと、入力部101aから受けとった平文の各バイトの右4ビットとの排他的論理和を計算する。左側の計算と右側の計算は、順序が入れ替わってもよいし、バイトごとおよびラウンドごとの少なくとも一方で、順序が変わってもよい。
SubByte105bは、AddRoundKey104aの出力である16バイトのマスク付きの中間データを入力される。SubByte105bは、例えば中間データの0バイト目については、マスク付きSboxの0バイト目(MSB0)のルックアップテーブルを用いることにより、マスク付きSboxの出力の0バイト目を計算する。SubByte105bは、15バイト目まで同様にして、マスク付きSboxの出力を計算する。
図4は、SubByte105b~105k内で用いられるマスク付きSboxの構成の一例を示すブロック図である。マスク付きSboxは、1バイトを入力して1バイトを出力するルックアップテーブルとして機能する。入出力値は、ともに0から255の値をとる。図4の記号「^」は、排他的論理和を表す。jは、0~15の値をとる。imjは、jバイト目(0≦j≦15)の入力マスク(8ビット)を表す。omjは、jバイト目の出力マスク(8ビット)を表す。xは、マスク付きSboxの入力を表し、s(x)はマスク付きboxの出力を表す。
マスク付きSboxの0バイト目であるMSB0のルックアップテーブルは、入力値と入力マスクim0の排他的論理和をSboxに入力し、Sboxの出力と出力マスクom0の排他的論理和を出力値とする。他の15バイト(MSB1~MSB15)も同様である。
実施形態では、16個のマスク付きSboxの入出力マスクは相互に異なる。また、各バイトのマスク付きSboxは、複数回の暗号処理を実行する場合であっても毎回同一であり、各ラウンドでも同一である。マスク付きSboxの構成はこれに限られず、例えば、暗号処理の実行ごと、または、ラウンドごとに、用意した16個のマスク付きSboxをシャッフルして用いてもよい。また、16個より少ないマスク付きSboxを用意して、バイト間で重複して用いてもよい。1個のマスク付きSboxを用意してすべてのバイトで同一のマスク付きSboxを用いてもよい。16個より多いマスク付きSboxを用意して、各ラウンドで異なるマスク付きSboxを用いてもよい。
図3に戻り、ShiftRow106bは、マスク付きSbox出力に対してShiftRow処理を行う。
MixColumn107bは、ShiftRow106bの出力に対してMixColumn処理を行う。
マスク変換用データ生成部122bは、マスク記憶部131から16個の出力マスクの左4ビットom0L~om15Lを読み出し、それぞれ4ビットを上位4ビットとし下位4ビットは0として1個のマスクを8ビットとして扱う。マスク変換用データ生成部122bは、16個の出力マスクに対してShiftRow処理を行う。マスク変換用データ生成部122bは、ShiftRow出力値に対して、MixColumn処理を行う。
さらにマスク変換用データ生成部122bは、MixColumn出力値の0バイト目と、次のラウンドのマスク付きSboxの入力マスクの左4ビットim0Lを上位4ビットとして下位4ビットを0とした1バイトの値と、の排他的論理和を計算する。なお、各ラウンドで同一のマスクを用いる場合は、次のラウンドのマスク付きSboxの入力マスクは、現在のラウンドの入力マスクと同一である。各ラウンドで異なるマスクを用いる場合は、次のラウンドのマスク付きSboxの入力マスクは、現在のラウンドの入力マスクと異なる。以下同様である。マスク変換用データ生成部122bは、15バイト目まで同様に計算し、16個のマスク変換用データMDL(第1マスクの一例)を出力する。
同様に、マスク変換用データ生成部122bは、マスク記憶部131から16個の出力マスクの右4ビットom0R~om15Rを読み出し、その4ビットを下位4ビットとして上位4ビットは0として1個のマスクを8ビットとして扱う。マスク変換用データ生成部122bは、16個の出力マスクに対してShiftRow処理を行う。マスク変換用データ生成部122bは、ShiftRow出力値に対して、MixColumn処理を行う。
さらにマスク変換用データ生成部122bは、MixColumn出力値の0バイト目と、次のラウンドのマスク付きSboxの入力マスク右4ビットim0Rを下位4ビットとして排他的論理和を計算する。マスク変換用データ生成部122bは、15バイト目まで同様に計算し、16個のマスク変換用データMDR(第1マスクの一例)を出力する。
マスク変換用データ生成部122bは、マスク変換用データMDLとマスク変換用データMDRとを、それぞれ異なるタイミングで計算する。
マスク変換用データ生成部122bは、マスク変換用データMDLのMixColumn出力値を以下の方法で生成してもよい。すなわち、マスク変換用データ生成部122bは、マスク記憶部131から16個の出力マスクの左4ビットom0L~om15Lを読み出し、それぞれ4ビットを下位4ビットとし上位4ビットは0として1個のマスクを8ビットとして扱う。マスク変換用データ生成部122bは、16個の出力マスクに対してShiftRow処理を行う。マスク変換用データ生成部122bは、ShiftRow出力値に対して、MixColumn処理を行い、その処理結果を16倍する。計算結果が同一であれば、実装上0でパディングしたビットのデータが無くてもよい。
マスク変換部123bは、マスク変換用データを用いたマスク変換処理(演算処理の一例)を実行する。例えばマスク変換部123bは、それぞれ16バイトである、MixColumn107bの出力値とマスク変換用データMDLとマスク変換用データMDRとが入力される。マスク変換部123bは、MixColumn107bの出力値とマスク変換用データMDLとの排他的論理和を計算し、その結果とマスク変換用データMDRとの排他的論理和を計算して出力する。マスク変換用データMDLと、マスク変換用データMDRの計算順序が入れ替わってもよい。マスク変換部123bによる処理の前にAddRoundKey処理が行なわれてもよい。
マスク変換用データMDLとマスク変換用データMDRとは、異なるタイミングで入力され、排他的論理和の計算が実行される。一方の計算が完了した後に、他方のマスク変換用データが入力され、排他的論理和の計算が実行される。
AESの最終ラウンド以外は、上記と同様の処理が実行される。マスク変換用データ生成部122b~122jは、iラウンド(1≦i≦規定ラウンド数、規定ラウンド数は例えば10)のラウンド処理の中間データに対するマスク処理で用いられた複数のマスクを変換するための複数のマスク変換用データを生成すると解釈することができる。また、マスク変換部123b~123jは、iラウンドのラウンド処理の中間データに対して、生成されたマスク変換用データそれぞれを相互に異なるタイミングで用いたマスク変換処理を実行すると解釈することができる。
AESの最終ラウンドでは、MixColumn処理は実行されない。すなわち、SubByte105k、ShiftRow106k、および、AddRoundKey104kの処理のみが実行される。
アンマスク用データ生成部124kは、マスク記憶部131から16個の出力マスクの左4ビットom0L~om15Lを読み出し、それぞれ4ビットを上位4ビットとし下位4ビットは0として1個のマスクを8ビットとして扱う。アンマスク用データ生成部124kは、16個の出力マスクに対してShiftRow処理を行う。アンマスク用データ生成部124kは、ShiftRow出力値をアンマスク用データUMDL(第1マスクの一例)として出力する。
同様に、アンマスク用データ生成部124kは、マスク記憶部131から16個の出力マスクの右4ビットom0R~om15Rを読み出し、その4ビットを下位4ビットとして上位4ビットは0として1個のマスクを8ビットとして扱う。アンマスク用データ生成部124kは、16個の出力マスクに対してShiftRow処理を行う。アンマスク用データ生成部124kは、ShiftRow出力値をアンマスク用データUMDR(第1マスクの一例)として出力する。アンマスク用データ生成部124kは、アンマスク用データUMDLとアンマスク用データUMDRを、それぞれ異なるタイミングで計算する。
アンマスク処理部125kは、アンマスク用データを用いたアンマスク処理(演算処理の一例)を実行する。例えばアンマスク処理部125kは、それぞれ16バイトのShiftRow106kの出力値とアンマスク用データUMDLとアンマスク用データUMDRを入力される。アンマスク処理部125kは、ShiftRow106kの出力値とアンマスク用データUMDLとの排他的論理和を計算し、その結果とアンマスク用データUMDRとの排他的論理和を計算して出力する。アンマスク用データUMDLと、アンマスク用データUMDRの計算順序が入れ替わってもよい。バイトごとおよびラウンドごとの少なくとも一方で、順序が変わってもよい。アンマスク処理部125kによる処理の前にAddRoundKey処理が行われてもよい。
各マスクは、予め用意された値でもよい。暗号化装置が乱数生成部を備え、乱数生成部が生成した乱数をマスクとして用いるように構成してもよい。
次に、このように構成された第1の実施形態にかかる暗号化装置による暗号化処理について説明する。図5は、第1の実施形態における暗号化処理の一例を示すフローチャートである。
まず、入力部101aは平文を受け付ける(ステップS101)。次に、ラウンド鍵生成部103は、鍵記憶部102に記憶される秘密鍵を用いて11個の128ビットのラウンド鍵d103a~d103kを計算する(ステップS102)。
マスク処理部121aは、左4ビットおよび右4ビットに分割されたマスク(分割マスク)を用いて、相互に異なるタイミングで、左右のビットそれぞれの排他的論理和を算出する(ステップS103)。例えばマスク処理部121aは、入力マスクの各バイトの左4ビットimLと、平文の各バイトの左4ビットとの排他的論理和を計算する。また、マスク処理部121aは、左4ビットの排他的論理和とは異なるタイミングで、入力マスクの各バイトの右4ビットimRと、平文の各バイトの右4ビットとの排他的論理和を計算する。
AddRoundKey104aは、マスク処理部121aによりマスク処理が行われた平文に対してAddRoundKey変換処理を行う(ステップS104)。SubByte105bは、AddRoundKey104aの出力である16バイトのマスク付きの中間データを入力とし、マスク付きSboxの出力値を出力する(ステップS105)。ShiftRow106bは、マスク付きSbox出力に対してShiftRow処理を行う(ステップS106)。
暗号化装置100は、ラウンドが最終ラウンドか否かを判定する(ステップS107)。ラウンドが最終ラウンドでない場合(ステップS107:No)、MixColumn107bによる処理が実行される(ステップS108)。
マスク変換用データ生成部122bは、左4ビットおよび右4ビットに分割されたマスク(分割マスク)を用いて、相互に異なるタイミングで、左右のビットに対応するマスク変換用データMDLおよびマスク変換用データMDRを生成する(ステップS109)。
マスク変換部123bは、マスク変換用データMDLおよびマスク変換用データMDRを用いたマスク変換処理を、それぞれ異なるタイミングで実行する(ステップS110)。
なお、ステップS109、ステップS110は、以下の(A1)、(A2)、(A3)、(A4)の順序で実行するように処理順序を変更してもよい。さらに、左右を入れ替えた順序、すなわち、(A3)、(A4)、(A1)、(A2)の順序で実行するように構成されてもよい。
(A1)マスク変換用データMDLを生成
(A2)マスク変換用データMDLを用いたマスク変換処理を実行
(A3)マスク変換用データMDRを生成
(A4)マスク変換用データMDRを用いたマスク変換処理を実行
AddRoundKey104aは、マスク変換処理の結果に対してAddRoundKeyの処理を実行する(ステップS111)。この後、ステップS105に戻り、次のラウンドについて同様の処理が繰り返される。
ステップS107でラウンドが最終ラウンドであると判定された場合(ステップS107:Yes)、以下のように最終ラウンドの処理が実行される。
まず、アンマスク用データ生成部124kは、左4ビットおよび右4ビットに分割されたマスク(分割マスク)を用いて、相互に異なるタイミングで、左右のビットに対応するアンマスク用データUMDLおよびアンマスク用データUMDRを生成する(ステップS112)。
アンマスク処理部125kは、アンマスク用データUMDLおよびアンマスク用データUMDRを用いたアンマスク処理を、それぞれ異なるタイミングで実行する(ステップS113)。AddRoundKey104kは、アンマスク処理の結果に対してAddRoundKeyの処理を実行する(ステップS114)。出力部101bは、AddRoundKey104kの処理結果であるデータを出力し(ステップS115)、暗号化処理を終了する。
次に、第1の実施形態の復号装置について説明する。図6Aおよび図6Bは、本実施形態の復号装置の構成の一例を示すブロック図である。復号装置は、入力部201aと、出力部201bと、鍵記憶部202と、ラウンド鍵生成部203と、AddRoundKey204a~204kと、InvShiftRow205a~205jと、InvSubByte206a~206jと、InvMixColumn207b~207jと、マスク記憶部231と、マスク処理部221aと、アンマスク処理部225kと、マスク変換部223b~223jと、マスク変換用データ生成部222b~222jと、を備える。
マスク記憶部231、マスク処理部221a、および、マスク変換部223b~223jは、暗号化装置のマスク記憶部131、マスク処理部121a、および、マスク変換部123b~123jと同様の構成とすることができる。
アンマスク処理部225kは、アンマスク用データUMDLおよびUMDRの代わりに、マスク記憶部231から読み出した16個の出力マスクの左4ビットomL、および、右4ビットomRを用いる点が、暗号化装置のアンマスク処理部125kと異なっている。
マスク変換用データ生成部222b~222jは、マスク変換用データ生成部122b~122j内のShiftRowおよびMixColumnの代わりに、それぞれInvMixColumnおよびInvShiftRowを備える。
図7は、復号装置のInvSubByte206a~206j内で用いられるマスク付きSbox(InvMSBi、iは0~15)の構成の一例を示すブロック図である。InvMSBiでは、図4のSboxの代わりに、InvSboxが用いられる。
次に、このように構成された第1の実施形態にかかる復号装置による復号処理について説明する。図8は、第1の実施形態における復号処理の一例を示すフローチャートである。
まず、入力部201aは暗号文を受け付ける(ステップS201)。次に、ラウンド鍵生成部203は、鍵記憶部202に記憶される秘密鍵を用いて11個の128ビットのラウンド鍵d203a~d203kを計算する(ステップS202)。
暗号文に対して、AddRoundKey204aによる処理、および、InvShiftRow205aによる処理が実行される(ステップS203)。
マスク処理部221aは、左4ビットおよび右4ビットに分割されたマスク(分割マスク)を用いて、相互に異なるタイミングで、左右のビットそれぞれの排他的論理和を算出する(ステップS204)。
InvSubByte206aは、マスク処理部221aの出力である16バイトのマスク付きの中間データを入力とし、マスク付きのInvSboxの出力値を出力する(ステップS205)。
復号装置200は、ラウンドが最終ラウンドか否かを判定する(ステップS206)。ラウンドが最終ラウンドでない場合(ステップS206:No)、AddRoundKey204b、InvMixColumn207b、および、InvShiftRow205bによる処理、が順に実行される(ステップS207)。
マスク変換用データ生成部222bは、左4ビットおよび右4ビットに分割されたマスク(分割マスク)を用いて、相互に異なるタイミングで、左右のビットに対応するマスク変換用データMDLおよびマスク変換用データMDRを生成する(ステップS208)。
マスク変換部223bは、マスク変換用データMDLおよびマスク変換用データMDRを用いたマスク変換処理を、それぞれ異なるタイミングで実行する(ステップS209)。
暗号化処理(図5)と同様に、ステップS208、ステップS209は、上記の(A1)、(A2)、(A3)、(A4)の順序、または、(A3)、(A4)、(A1)、(A2)の順序で実行されるように構成してもよい。
InvSubByte206bは、マスク変換処理の出力である16バイトのマスク付きの中間データを入力とし、マスク付きのInvSboxの出力値を出力する(ステップS210)。この後、ステップS206に戻り、次のラウンドについて同様の処理が繰り返される。
ステップS206でラウンドが最終ラウンドであると判定された場合(ステップS206:Yes)、以下のように最終ラウンドの処理が実行される。
まず、AddRoundKey204kによる処理が実行される(ステップS211)。アンマスク処理部225kは、出力マスクの左4ビットomL、および、右4ビットomRを用いたアンマスク処理を、それぞれ異なるタイミングで実行する(ステップS212)。出力部210bは、アンマスク処理の結果であるデータを出力し(ステップS213)、復号処理を終了する。
(第2の実施形態)
第2の実施形態は、第1の実施形態と異なるマスク対策を行う。本実施形態でも、マスクを分割した分割マスクが、相互に異なるタイミングで演算に用いられる。本実施形態で用いられる用語は、特に記載がない限り第1の実施形態と同じである。
本実施形態では、SubByteに入力される入力データにかかるマスクが2種類存在する。2種類の入力マスクの一方を入力マスクA(ima)とし、他方を入力マスクB(imb)とする。入力データが16バイトであるため、各入力マスクも16バイトである。入力マスクAの各バイトを、ima0~ima15と表す。入力マスクBの各バイトを、imb0~imb15と表す。
同様に、SubByteから出力される出力データにかかるマスクが2種類存在する。2種類の出力マスクの一方を出力マスクA(oma)とし、他方を出力マスクB(omb)とする。出力マスクも16バイトである。出力マスクAの各バイトを、oma0~oma15と表す。出力マスクBの各バイトを、omb0~omb15と表す。
入力マスクima0をビット反転した値がimb0である。出力マスクoma0をビット反転した値がomb0である。他の15バイトについても同様である。
0バイト目の入力マスクA(ima0)の左4ビットをima0Lと表し、右4ビットをima0Rと表す。0バイト目の入力マスクB(imb0)の左4ビットをimb0Lと表し、右4ビットをimb0Rと表す。
0バイト目の出力マスクA(oma0)の左4ビットをoma0Lと表し、右4ビットをoma0Rと表す。0バイト目の出力マスクB(omb0)の左4ビットをomb0Lと表し、右4ビットをomb0Rと表す。
選択部(後述)は、入力マスクima0Lと入力マスクimb0Lのいずれかを選択する。選択された入力マスクをims0Lと表す。選択部は、入力マスクima0Rと入力マスクimb0Rのいずれかを選択する。選択された入力マスクをims0Rと表す。選択部は、出力マスクoma0Lと出力マスクomb0Lのいずれかを選択する。選択された出力マスクをoms0Lと表す。選択部は、出力マスクoma0Rと出力マスクomb0Rのいずれかを選択する。選択された出力マスクをoms0Rと表す。他の15バイトについても同様である。
各マスクのバイトをまとめる場合、それぞれ以下のように表される。
・入力マスクAの0から15バイト目の左4ビット:imaL
・入力マスクAの0から15バイト目の右4ビット:imaR
・入力マスクBの0から15バイト目の左4ビット:imbL
・入力マスクBの0から15バイト目の右4ビット:imbR
・出力マスクAの0から15バイト目の左4ビット:omaL
・出力マスクAの0から15バイト目の右4ビット:omaR
・出力マスクBの0から15バイト目の左4ビット:ombL
・出力マスクBの0から15バイト目の右4ビット:ombR
・選択された入力マスクの0から15バイト目の左4ビット:imsL
・選択された入力マスクの0から15バイト目の右4ビット:imsR
・選択された出力マスクの0から15バイト目の左4ビット:omsL
・選択された出力マスクの0から15バイト目の右4ビット:omsR
各ラウンドのSbox以外の処理には、各ラウンドおよび各バイトで異なるマスクがかかる。このマスクは、ランダムマスクとする。iラウンド目のjバイト目のSubByte出力にかかるランダムマスクを、ri_jと表記する。このランダムマスクは(i+1)ラウンド目のjバイト目のSubByteに入力する前に除去する必要がある。ランダムマスクri_jを除去するためのデータをr’i_jと表記する。ri_0~ri_15をまとめてriと表記する。
ランダムマスクri_jの左4ビットをri_jLと表し、ランダムマスクri_jの右4ビットをri_jRと表す。ランダムマスクri_0L~ri_15LをまとめてriLと表す。ランダムマスクri_0R~ri_15RをまとめてriRと表す。
本実施形態も第1の実施形態と同様に、1バイトすなわち8ビットの中間データにかかる8ビットのマスクを、4ビット単位で2つに分割して扱う。分割方法はこれに限らず、例えば2ビット単位で4つ、1ビット単位で8つに分割してもよい。
以下、本実施形態の暗号化装置および復号装置の構成例について説明する。図1、図2、および、第1の実施形態と重複する機能については同一の符号を付し、説明は省略する。
図9、図10A、および、図10Bは、本実施形態の暗号化装置の構成の一例を示すブロック図である。図9、図10A、および、図10Bは、一部共通する要素があるが、本実施形態の暗号化装置は、各図に記載された要素を備えるように構成される。
図9に示すように、本実施形態の暗号化装置は、マスク記憶部131-2と、選択部142-2L-0、142-2R-0、143-2L-0、143-2R-0と、SubByte105-2と、入力マスク変換部126-2と、出力マスク変換部127-2と、を備えている。
なお、図9では説明の便宜のため、0バイト目の処理に関連する構成のみを記載しているが、1バイト目から15バイト目の処理に対する構成も同様に備えられる。例えば、選択部142-2L-0、142-2R-0、143-2L-0、143-2R-0の「0」を1~15に置き換えた符号で識別される15個の選択部が、それぞれ暗号化装置内に備えられる。以下では、各バイトで区別する必要がない場合は、選択部142-2L、142-2R、143-2L、143-2Rとして説明する。
また、図9では、図10A、図10Bに記載されたSubByte105-2b~105-2kが共通化されてSubByte105-2として記載されている。同様に、入力マスク変換部126-2b~126-2kが共通化されて入力マスク変換部126-2として記載されている。また、出力マスク変換部127-2b~127-2kが共通化されて出力マスク変換部127-2として記載されている。以下では、各ラウンドで区別する必要がない場合は、SubByte105-2、入力マスク変換部126-2、および、出力マスク変換部127-2として説明する。
なお、図10A、図10B内の各部で用いられる入力マスク(imsL、imsR)、出力マスク(omsL、omsR)、および、ランダムマスク(riL、riR)は、図9で示す機能によりマスク記憶部131-2から読み出され、各部に入力される。
図10A、図10Bに示すように、本実施形態の暗号化装置は、入力部101-2aと、出力部101bと、鍵記憶部102と、ラウンド鍵生成部103と、AddRoundKey104a~104kと、SubByte105-2b~105-2kと、ShiftRow106b~106kと、MixColumn107b~107jと、マスク処理部121-2aと、アンマスク処理部125-2k(演算部の一例)と、入力マスク変換部126-2b~126-2k(演算部の一例)と、出力マスク変換部127-2b~127-2k(演算部の一例)と、マスク変換用データ生成部122-2b~122-2j(生成部の一例)と、アンマスク用データ生成部124-2k(生成部の一例)と、を備える。以下では、各ラウンドで区別する必要がない場合は、マスク変換用データ生成部122-2b~122-2jをマスク変換用データ生成部122-2として説明する。
マスク記憶部131-2(図9)は、1バイトすなわち8ビットのマスクを、以下のように分割して記憶する。以下では0バイト目のマスクの例を記載するが、他の15バイトも同様である。
・入力マスクima0:左4ビットima0L、および、右4ビットima0R
・入力マスクimb0:左4ビットimb0L、および、右4ビットimb0R
・出力マスクoma0:左4ビットoma0L、および、右4ビットoma0R
・出力マスクomb0:左4ビットomb0L、および、右4ビットomb0R
・ランダムマスクri_0:左4ビットri_0L、および、右4ビットri_0R
なお、マスク付きSboxが16個より少ないk個(1≦k≦15)の場合は、マスク記憶部131-2は、対応する入力マスクと出力マスクもそれぞれk個記憶する。
マスク記憶部131-2は、暗号処理のすべての時間ですべてのマスクを記憶しなくてもよい。例えばマスク記憶部131-2は、暗号処理のうち一部の時間のみ、必要なマスクを記憶し、使用したマスクを削除してもよい。マスク記憶部131-2は、例えば、ラウンド1用のランダムマスクは、ラウンド1の処理時とラウンド2の処理時のみ記憶してもよい。
入力部101-2a(図10A)は、外部から平文を受け付ける。入力部101-2aは、ランダムマスクを受け付けてマスク記憶部131-2に記憶してもよい。入力部101-2aは、選択用データを受け付けてもよい。選択用データは、選択部142-2L、142-2R、143-2L、143-2Rが、2種類のマスクのいずれを選択するかを指定するためのデータである。選択用データは、2種類のマスクそれぞれに対応する2種類のマスク付きSbox(マスクA付きSbox、マスクB付きSbox)のいずれか一方の出力値(Sbox出力値)を選択するためにも用いられる。
マスク処理部121-2a(図10A)は、ランダムマスクr0と、平文の各バイトとの排他的論理和を計算する。マスク処理部121-2aは、AddRoundKey104aの後にあってもよい。
選択部142-2L、142-2R(図9)は、入力マスク変換部126-2に入力するためのマスクを選択する。例えば選択部142-2Lは、選択用データselを入力され、選択用データselの値に応じて、imaLおよびimbLのいずれかを入力マスクimsLとして選択する。選択部142-2Rは、選択用データselを入力され、選択用データselの値に応じて、imaRおよびimbRのいずれかを入力マスクimsRとして選択する。
選択部143-2L、143-2R(図9)は、出力マスク変換部127-2に入力するためのマスクを選択する。例えば選択部143-2Lは、選択用データselを入力され、選択用データselの値に応じて、omaLおよびombLのいずれかを出力マスクomsLとして選択する。選択部143-2Rは、選択用データselを入力され、選択用データselの値に応じて、omaRおよびombRのいずれかを出力マスクomsRとして選択する。
選択用データselはどのような値が指定されてもよいが、例えば、選択用データselが0の場合に、入力マスクA(ima)および出力マスクA(oma)が選択され、selが1の場合に、入力マスクB(imb)および出力マスクB(omb)が選択されるように構成することができる。
各選択部は、マスクの左4ビットの選択、および、右4ビットの選択を、異なるタイミングで行う。例えば、選択部142-2Lが入力マスクimaLとimbLのいずれかを選択して選択した入力マスクimsLを出力する処理と、選択部142-2Rが入力マスクimaRとimbRのいずれかを選択して選択した入力マスクimsRを出力する処理とは、相互に異なるタイミングで実行される。
選択用データselの値は、バイトごと、ラウンドごと、および、暗号処理ごとに変更されてもよい。選択用データselの値は、上述のように入力部101-2aから入力されてもよい。暗号化装置が乱数生成部を備え、乱数生成部が生成した乱数に応じた選択用データを用いるように構成してもよい。
入力マスク変換部126-2は、暗号処理の中間データと、選択された入力マスクims0Lおよびims0Rと、ランダムマスク除去用データr’i_0Lおよびr’i_0R(i=1~10の場合。i=0のときはri_0Lおよびri_0R)と、が入力される。なお、ランダムマスク除去用データは、マスク変換用データ(第1マスク)の一例である。
入力マスク変換部126-2は、暗号処理の中間データと入力マスクims0Lの排他的論理和を計算し、その結果と入力マスクims0Rの排他的論理和を計算し、その結果とランダムマスク除去用データri_0Lの排他的論理和を計算し、その結果とマスク除去用データri_0Rの排他的論理和を計算して出力する。他の15バイトも同様である。
入力マスク変換部126-2は、入力マスクims0Lの入力および計算と、入力マスクims0Rの入力および計算とを、それぞれ異なるタイミングで行う。同様に入力マスク変換部126-2は、ランダムマスク除去用データri_0Lの入力および計算と、ri_0の入力および計算とを、それぞれ異なるタイミングで行う。
入力マスクims0Lとims0Rの計算順序は入れ替わってもよい。ランダムマスク除去用データr’i_0Lとランダムマスク除去用データr’i_0Rの計算順序は入れ替わってもよい。バイトごとおよびラウンドごとの少なくとも一方で、計算順序が変わってもよい。
SubByte105-2は、バイトごとに2種類のマスク付きSbox(MSBa0~MSBa15、MSBb0~MSBb15)を備えること、および、2種類のマスク付きSboxの出力値のいずれかを選択するための選択部141-2-0~141-2-15を備えることが、第1の実施形態のSubByte105b~105kと異なっている。
SubByte105-2は、AddRoundKey104a~104jの出力である16バイトのマスク付き中間データが入力される。中間データの0バイト目は、0バイト目のマスク付きSboxであるMSBa0に入力され、ルックアップテーブルからMSBa0の出力値の0バイト目が出力される。中間データの0バイト目は、0バイト目のマスク付きSboxであるMSBb0に入力され、ルックアップテーブルからMSBb0の出力値の0バイト目が出力される。
選択部141-2-0は、選択用データselに基づいてMSBa0の出力値とMSBb0の出力値の一方を選択して出力する。選択用データselはどのような値が指定されてもよいが、入力マスクおよび出力マスクの選択と連動する値とすることができる。例えば、選択用データselが0の場合に、入力マスクA(ima)、出力マスクA(oma)、および、MSBa0の出力値が選択され、selが1の場合に、入力マスクB(imb)、出力マスクB(omb)、および、MSBb0の出力値が選択されるように構成することができる。
SubByte105-2は、他の15バイトについても同様に計算し、マスク付きSboxの出力値を出力する。
図11は、SubByte105-2内で用いられるマスク付きSbox(MSBa0、MSBb0)の構成の一例を示すブロック図である。マスク付きSboxは、1バイト入力1バイト出力のルックアップテーブルとして機能する。入出力値はともに0から255をとる。
マスク付きSboxの0バイト目であるMSBa0のルックアップテーブルは、入力値と入力マスクima0の排他的論理和をSboxに入力し、Sboxの出力と出力マスクoma0の排他的論理和を出力値とする。
マスク付きSboxの0バイト目であるMSBb0のルックアップテーブルは、入力値と入力マスクimb0の排他的論理和をSboxに入力し、Sboxの出力と出力マスクomb0の排他的論理和を出力値とする。他の15バイト(MSBa1~MSBa15、MSBb1~MSBb15)も同様である。
実施形態では、16個のマスク付きSboxの入出力マスクは相互に異なる。また、各バイトのマスク付きSboxは、複数回の暗号処理を実行する場合であっても毎回同一であり、各ラウンドでも同一である。マスク付きSboxの構成はこれに限られず、例えば、暗号処理の実行ごと、または、ラウンドごとに、用意した16個のマスク付きSboxをシャッフルして用いてもよい。また、16個より少ないマスク付きSboxを用意して、バイト間で重複して用いてもよい。1個のマスク付きSboxを用意してすべてのバイトで同一のマスク付きSboxを用いてもよい。
図10A、図10Bに戻り、出力マスク変換部127-2は、暗号処理の中間データ(SubByte105-2の出力値)と、選択された出力マスクoms0Lとoms0Rと、ランダムマスクri_0Lとri_0R(i=1~10)とが入力される。
出力マスク変換部127-2は、暗号処理の中間データとランダムマスクri_0Lの排他的論理和を計算し、その結果とランダムマスクri_0Rの排他的論理和を計算して出力し、その結果と出力マスクoms0Lの排他的論理和を計算し、その結果と出力マスクoms0Rの排他的論理和を計算する。他の15バイトも同様である。
出力マスク変換部127-2は、出力マスクoms0Lの入力および計算と、出力マスクoms0Rの入力および計算とを、それぞれ異なるタイミングで行う。また出力マスク変換部127-2は、ランダムマスクri_0Lの入力および計算と、ランダムマスクri_0Rの入力および計算とを、それぞれ異なるタイミングで行う。異なるタイミングで行うことの意味は、入力マスク変換部126-2と同様である。
入力マスクims0Lとims0Rの計算順序は入れ替わってもよい。ランダムマスクri_0Lとランダムマスクri_0の計算順序は入れ替わってもよい。バイトごとおよびラウンドごとの少なくとも一方で、計算順序が変わってもよい。
マスク変換用データ生成部122-2は、マスク記憶部131-2から16個のランダムマスクの左4ビットri_0L~ri_15Lを読み出し、それぞれ4ビットを上位4ビットとし下位4ビットは0として1個のマスクを8ビットとして、16バイトのデータにする。マスク変換用データ生成部122-2は、その16バイトのデータに対してShiftRow処理を行う。マスク変換用データ生成部122-2は、ShiftRow出力値に対して、MixColumn処理を行う。マスク変換用データ生成部122-2は、MixColumn出力値をランダムマスク除去用データr’i_0L~r’i_15Lとする。
同様に、マスク変換用データ生成部122-2は、マスク記憶部131-2から16個のランダムマスク右4ビットri_0R~ri_15Rを読み出し、その4ビットを下位4ビットとして上位4ビットは0として1個のマスクを8ビットとして、16バイトのデータにする。マスク変換用データ生成部122-2は、その16バイトのデータに対してShiftRow処理を行う。マスク変換用データ生成部122-2は、ShiftRow出力値に対して、MixColumn処理を行う。マスク変換用データ生成部122-2は、MixColumn出力値をランダムマスク除去用データr’i_0R~r’i_15Rとする。
マスク変換用データ生成部122-2は、ランダムマスク除去用データr’i_0L~r’i_15Lとランダムマスク除去用データr’i_0R~r’i_15Rとを、それぞれ異なるタイミングで計算および出力する。
マスク変換用データ生成部122-2は、ランダムマスク除去用データr’i_0L~r’i_15LのMixColumn出力値を、以下の方法で生成してもよい。まずマスク変換用データ生成部122-2は、マスク記憶部131-2から16個の出力マスクの左4ビットri_0L~ri_15Lを読み出し、それぞれ4ビットを下位4ビットとし上位4ビットは0として1個のマスクを8ビットとして扱う。マスク変換用データ生成部122-2は、16個の出力マスクに対してShiftRow処理を行う。マスク変換用データ生成部122-2は、ShiftRow出力値に対して、MixColumn処理を行い、その結果を16倍する。
AESの最終ラウンド以外は、上記と同様の処理が実行される。AESの最終ラウンドでは、MixColumn処理は実行されない。すなわち、SubByte105-2k、ShiftRow106k、および、AddRoundKey104kの処理のみが実行される。
アンマスク用データ生成部124-2kは、マスク記憶部131-2から16個のランダムマスクの左4ビットr10_0L~r10_15Lを読み出し、それぞれ4ビットを上位4ビットとし下位4ビットは0として1個のマスクを8ビットとして、16バイトのデータにする。アンマスク用データ生成部124-2kは、その16バイトのデータに対してShiftRow処理を行う。アンマスク用データ生成部124-2kは、ShiftRow出力値をアンマスク用データr’10_0L~r’10_15Lとする。
同様に、アンマスク用データ生成部124-2kは、マスク記憶部131-2から16個のランダムマスクの右4ビットr10_0R~r10_15Rを読み出し、その4ビットを下位4ビットとして上位4ビットは0として1個のマスクを8ビットとして16バイトのデータにする。アンマスク用データ生成部124-2kは、その16バイトのデータに対してShiftRow処理を行う。アンマスク用データ生成部124-2kは、ShiftRow出力値をアンマスク用データr’10_0R~r’10_15Rとする。
アンマスク用データ生成部124-2kは、アンマスク用データr’10_0L~r’10_15Lと、アンマスク用データr’10_0R~r’10_15Rとを、それぞれ異なるタイミングで計算および出力する。
アンマスク処理部125-2kは、16バイトのマスク付き暗号文とアンマスク用データr’10_0L~r’10_15Lとアンマスク用データr’10_0R~r’10_15Rとが入力される。アンマスク処理部125-2kは、マスク付き暗号文とアンマスク用データr’10_0L~r’10_15Lとの排他的論理和を計算し、その結果とアンマスク用データr’10_0R~r’10_15Rとの排他的論理和を計算し、その結果である暗号文を出力部101bに入力する。
アンマスク用データr’10_0L~r’10_15Lと、アンマスク用データr’10_0R~r’10_15Rの計算順序は入れ替わってもよい。アンマスク処理部125-2kの後にAddRoundKey処理が実行されてもよい。
次に、このように構成された第2の実施形態にかかる暗号化装置による暗号化処理について説明する。図12は、第2の実施形態における暗号化処理の一例を示すフローチャートである。
ステップS301、ステップS302は、第1の実施形態の暗号化処理を示す図5のステップS101、ステップS102と同様である。
マスク処理部121-2aは、ランダムマスクr0と、平文の各バイトとの排他的論理和を計算する(ステップS303)。
AddRoundKey104aは、マスク処理部121-2aによりマスク処理が行われた平文に対してAddRoundKey変換処理を行う(ステップS304)。
入力マスク変換部126-2bは、分割マスク(入力マスクimsL、imsR)それぞれの変換を、相互に異なるタイミングで実行する(ステップS305)。なお、この処理の前までに、選択用データselの値に応じてimaLおよびimbLのいずれかが入力マスクimsLとして選択される。同様に、選択用データselの値に応じてimaRおよびimbRのいずれかが入力マスクimsRとして選択される。
SubByte105-2bは、AddRoundKey104aの出力である16バイトのマスク付きの中間データを入力とし、マスク付きSboxの出力値を出力する。このとき、SubByte105-2b内の選択部141-2は、選択用データselに基づいてMSBa0の出力値とMSBb0の出力値の一方を選択して出力する(ステップS306)。
出力マスク変換部127-2bは、分割マスク(出力マスクomsL、omsR)それぞれの変換を、相互に異なるタイミングで実行する(ステップS307)。なお、この処理の前までに、選択用データselの値に応じてomaLおよびombLのいずれかが入力マスクomsLとして選択される。同様に、選択用データselの値に応じてomaRおよびombRのいずれかが入力マスクomsRとして選択される。入力マスクの選択と、出力マスクの選択とは、異なるタイミングで実行される。
暗号化装置は、ラウンドが最終ラウンドか否かを判定する(ステップS308)。ラウンドが最終ラウンドでない場合(ステップS308:No)、ShiftRow106bによる処理、MixColumn107bによる処理、および、AddRoundKey104bによる処理が順に実行される(ステップS309)。
マスク変換用データ生成部122-2bは、分割マスク(ランダムマスクの左4ビット、ランダムマスクの右4ビット)を用いて、ランダムマスク除去用データr’i_0L~r’i_15Lとランダムマスク除去用データr’i_0R~r’i_15Rとを、それぞれ異なるタイミングで計算および出力する(ステップS310)。この後、ステップS305に戻り、次のラウンドについて同様の処理が繰り返される。
ステップS308でラウンドが最終ラウンドであると判定された場合(ステップS308:Yes)、以下のように最終ラウンドの処理が実行される。
まず、ShiftRow106kによる処理、および、AddRoundKey104kによる処理が順に実行される(ステップS311)。アンマスク用データ生成部124-2kは、分割マスクを用いて、アンマスク用データr’10_0L~r’10_15Lと、アンマスク用データr’10_0R~r’10_15Rとを、それぞれ異なるタイミングで計算および出力する(ステップS312)。
アンマスク処理部125-2kは、アンマスク用データr’10_0L~r’10_15Lを用いたアンマスク処理と、アンマスク用データr’10_0R~r’10_15Rを用いたアンマスク処理とを、それぞれ異なるタイミングで実行する(ステップS313)。出力部110bは、アンマスク処理部125-2kの処理結果であるデータを出力し(ステップS314)、暗号化処理を終了する。
暗号化装置は、ランダムマスクr0_0R~r0_15Rと、r10_0R~r10_15Rとを用いないように構成してもよい。図13A、図13Bは、このように構成される変形例の暗号化装置の一例を示すブロック図である。変形例の暗号化装置は、マスク処理部121-2a、アンマスク用データ生成部124-2k、および、アンマスク処理部125-2kが削除されること、並びに、入力マスク変換部126-2’bおよび出力マスク変換部127-2’kの機能が、第2の実施形態と異なっている。
入力マスク変換部126-2’bは、ランダムマスクr0_0R~r0_15Rを用いた排他的論理和を実行しない点が、第2の実施形態の入力マスク変換部126-2bと異なる。
出力マスク変換部127-2’kは、ランダムマスクr10_0R~r10_15Rを用いた排他的論理和を実行しない点が、第2の実施形態の出力マスク変換部127-2kと異なる。
次に、第2の実施形態の復号装置について説明する。図14Aおよび図14Bは、本実施形態の復号装置の構成の一例を示すブロック図である。第1の実施形態の復号装置と同様の構成については同一の符号を付し、説明を省略する。
第2の実施形態の復号装置は、入力部201aと、出力部201bと、鍵記憶部202と、ラウンド鍵生成部203と、AddRoundKey204a~204kと、InvShiftRow205a~205jと、InvSubByte206-2b~206-2kと、InvMixColumn207b~207jと、マスク記憶部231-2と、マスク処理部221-2aと、アンマスク処理部225-2kと、入力マスク変換部226-2b~226-2kと、出力マスク変換部227-2b~227-2kと、マスク変換用データ生成部222-2b~222-2jと、を備える。
InvSubByte206-2b~206-2k、マスク記憶部231-2、マスク処理部221-2a、入力マスク変換部226-2b~226-2k、および、出力マスク変換部227-2b~227-2kは、暗号化装置のSubByte105-2b~105-2k、マスク記憶部131-2、マスク処理部121-2a、入力マスク変換部126-2b~126-2k、および、出力マスク変換部127-2b~127-2kと同様の構成とすることができる。
アンマスク処理部225-2kは、アンマスク用データr’10_0L~r’10_15Lとアンマスク用データr’10_0R~r’10_15Rの代わりに、マスク記憶部231から読み出したランダムマスクの左4ビットr10_0L~r10_15Lと、ランダムマスクの右4ビットr10_0R~r10_15Rと、を用いる点が、暗号化装置のアンマスク処理部125-2kと異なっている。
マスク変換用データ生成部222-2b~222-2jは、マスク変換用データ生成部122-2b~122-2j内のShiftRowおよびMixColumnの代わりに、それぞれInvMixColumnおよびInvShiftRowを備える。
次に、このように構成された第2の実施形態にかかる復号装置による復号処理について説明する。図15は、第2の実施形態における復号処理の一例を示すフローチャートである。
まず、入力部201aは暗号文を受け付ける(ステップS401)。次に、ラウンド鍵生成部203は、鍵記憶部202に記憶される秘密鍵を用いて11個の128ビットのラウンド鍵d203a~d203kを計算する(ステップS402)。
マスク処理部221-2aは、ランダムマスクr0と、暗号文の各バイトとの排他的論理和を計算する(ステップS403)。
暗号文に対して、AddRoundKey204aによる処理、および、InvShiftRow205aによる処理が実行される(ステップS404)。
入力マスク変換部226-2bは、分割マスク(入力マスクimsL、imsR)それぞれの変換を、相互に異なるタイミングで実行する(ステップS405)。なお、この処理の前までに、選択用データselの値に応じてimaLおよびimbLのいずれかが入力マスクimsLとして選択される。同様に、選択用データselの値に応じてimaRおよびimbRのいずれかが入力マスクimsRとして選択される。
InvSubByte206-2bは、AddRoundKey204aの出力である16バイトのマスク付きの中間データを入力とし、マスク付きSboxの出力値を出力する。このとき、InvSubByte206-2b内の選択部は、選択用データselに基づいてMSBa0の出力値とMSBb0の出力値の一方を選択して出力する(ステップS406)。
出力マスク変換部227-2bは、分割マスク(出力マスクomsL、omsR)それぞれの変換を、相互に異なるタイミングで実行する(ステップS407)。なお、この処理の前までに、選択用データselの値に応じてomaLおよびombLのいずれかが入力マスクomsLとして選択される。同様に、選択用データselの値に応じてomaRおよびombRのいずれかが入力マスクomsRとして選択される。入力マスクの選択と、出力マスクの選択とは、異なるタイミングで実行される。
復号装置は、ラウンドが最終ラウンドか否かを判定する(ステップS408)。ラウンドが最終ラウンドでない場合(ステップS408:No)、AddRoundKey204bによる処理、InvMixColumn207bによる処理、および、InvShiftRow205bによる処理が順に実行される(ステップS409)。
マスク変換用データ生成部222-2bは、分割マスク(ランダムマスクの左4ビット、ランダムマスクの右4ビット)を用いて、ランダムマスク除去用データr’i_0L~r’i_15Lとランダムマスク除去用データr’i_0R~r’i_15Rとを、それぞれ異なるタイミングで計算および出力する(ステップS410)。この後、ステップS405に戻り、次のラウンドについて同様の処理が繰り返される。
ステップS408でラウンドが最終ラウンドであると判定された場合(ステップS408:Yes)、以下のように最終ラウンドの処理が実行される。
まず、AddRoundKey204kによる処理が実行される(ステップS411)。アンマスク処理部225-2kは、ランダムマスクの左4ビットr10_0L~r10_15Lを用いたアンマスク処理と、ランダムマスクの右4ビットr10_0R~r10_15Rを用いたアンマスク処理とを、それぞれ異なるタイミングで実行する(ステップS412)。出力部110bは、アンマスク処理の結果であるデータを出力し(ステップS413)、復号処理を終了する。
(第3の実施形態)
第3の実施形態は、さらに、第1の実施形態および第2の実施形態と異なるマスク対策を行う。本実施形態では、前のラウンドでマスク変換部により生成されたマスクを用いて、次のラウンドのマスク変換用データが生成される。本実施形態でも、マスクを分割した分割マスクが、相互に異なるタイミングで演算に用いられる。本実施形態で用いられる用語は、特に記載がない限り第1の実施形態と同じである。
1バイト入出力の線形変換をΦと表す。Φの逆変換をΦ-1と表す。Φ(a)+Φ(b)=Φ(a+b)が成立し、Φ-1(Φ(a))=aが成立する。暗号処理の中間データ16バイトに対して、線形変換Φ0~Φ15が定められる。線形変換Φ0~Φ15は、相互に異なる線形変換でもよいし、一部または全部に重複があってもよい。以下では、線形変換Φ0~Φ15は、相互に異なる線形変換であるものとして説明する。線形変換Φ0に対して、マスク付きSboxが定められる。このマスク付きSboxを、MSB0と表す。f0L、f0Rは、4ビット入出力の任意の関数である。f0L、f0Rは、4ビット入力、8ビット出力の関数であってもよい。他の15バイトについても同様である。
16バイトのランダムマスクをr0_0~r0_15と表す。また、これらをまとめてr0と表す。iラウンド目のjバイト目のランダムマスクをri_jと表す。ri_0~ri_15をまとめてriと表記する。
ランダムマスクri_jの左4ビットをri_jLと表し、ランダムマスクri_jの右4ビットをri_jRと表す。ランダムマスクri_0L~ri_15LをまとめてriLと表す。ランダムマスクri_0R~ri_15RをまとめてriRと表す。
本実施形態も第1の実施形態と同様に、1バイトすなわち8ビットの中間データにかかる8ビットのマスクを、4ビット単位で2つに分割して扱う。分割方法はこれに限らず、例えば2ビット単位で4つ、1ビット単位で8つに分割してもよい。
以下、本実施形態の暗号化装置および復号装置の構成例について説明する。図1、図2、第1の実施形態、第2の実施形態と重複する機能については同一の符号を付し、説明は省略する。
図16Aおよび図16Bは、本実施形態の暗号化装置の構成の一例を示すブロック図である。本実施形態の暗号化装置は、入力部101-2aと、出力部101bと、鍵記憶部102と、ラウンド鍵生成部103と、AddRoundKey104a~104kと、SubByte105-3b~105-3kと、ShiftRow106b~106kと、MixColumn107b~107jと、マスク記憶部131-3と、マスク処理部121-2aと、アンマスク処理部125-3k(演算部の一例)と、マスク変換部128-3b~128-3j(演算部の一例)と、マスク変換用データ生成部122-3b~122-3j(生成部の一例)と、アンマスク用データ生成部124-3k(生成部の一例)と、を備える。
以下では、各ラウンドで区別する必要がない場合は、SubByte105-3b~105-3kをSubByte105-3と記載し、マスク変換部128-3b~128-3jをマスク変換部128-3と記載し、マスク変換用データ生成部122-3b~122-3jをマスク変換用データ生成部122-3と記載する。
マスク記憶部131-3は、1バイトすなわち8ビットのマスクr0_0を左4ビットr0_0Lと右4ビットr0_0Rに分割して記憶する。他の15バイトも同様である。マスク記憶部131-3は、マスクの計算途中のデータを記憶してもよい。
マスク記憶部131-3は、暗号処理のすべての時間ですべてのマスクを記憶しなくてもよい。例えばマスク記憶部131-3は、暗号処理のうち一部の時間のみ、必要なマスクを記憶し、使用したマスクを削除してもよい。マスク記憶部131-3は、例えば、マスクr0_0をラウンド2の処理後に削除してもよい。
マスク変換部128-3は、暗号処理の中間データを線形変換Φ0で変換する。マスク変換部128-3は、その結果と入力されたマスクr0_0Lを線形変換Φ0で変換した結果の排他的論理和を計算する。マスク変換部128-3は、その結果と入力されたマスクr0_0Rを線形変換Φ0で変換した結果の排他的論理和を計算する。以下では、その結果をΦ0(x)と表す。
マスク変換部128-3は、Φ0(x)をSubByte105-3に入力する。以下では、Φ0(x)の左4ビットをΦ0(x)Lと表し、右4ビットをΦ0(x)Rと表す。マスク変換部128-3は、Φ0(x)LとΦ0(x)Rをそれぞれ区別してマスク記憶部131-3に記憶する。マスク変換部128-3の計算結果であるΦ0(x)LとΦ0(x)Rは、次のラウンドで用いられる分割マスクに相当すると解釈することができる。マスク変換部128-3は、マスクr0_0Lとマスクr0_0Rの読み出しおよび計算を、それぞれ異なるタイミングで行う。他の15バイトも同様である。
マスクr0_0L~r0_15Lの読み出しおよび計算は、同一のタイミングで行われてもよい。マスクr0_0R~r0_15Rの読み出しおよび計算は、同一のタイミングで行われてもよい。
SubByte105-3は、線形変換された暗号処理の中間データが入力される。中間データの0バイト目は、0バイト目のマスク付きSboxであるMSB0に入力され、ルックアップテーブルからMSB0の出力値の0バイト目が出力される。
図17は、SubByte105-3内で用いられるマスク付きSbox(MSB0)の構成の一例を示すブロック図である。図18は、マスク付きSboxの入出力の関係を示す図である。マスク付きSboxは、1バイト入力1バイト出力のルックアップテーブルとして機能する。入出力値はともに0から255をとる。
マスク付きSboxの0バイト目であるMSB0のルックアップテーブルは以下のように機能する。線形変換Φ0の逆変換により入力値を計算した結果がマスク付きSboxに入力される。Sbox出力と、入力値を関数f0Lで計算した結果の排他的論理和が計算される。その結果と、入力値を関数f0Rで計算した結果の排他的論理和が計算される。その結果が入力値に対するMSB0の出力値とされる。他の15バイトも同様である。
実施形態では、16個のマスク付きSboxの入出力マスクは相互に異なる。また、各バイトのマスク付きSboxは、複数回の暗号処理を実行する場合であっても毎回同一であり、各ラウンドでも同一である。マスク付きSboxの構成はこれに限られず、例えば、暗号処理の実行ごと、または、ラウンドごとに、用意した16個のマスク付きSboxをシャッフルして用いてもよい。また、16個より少ないマスク付きSboxを用意して、バイト間で重複して用いてもよい。1個のマスク付きSboxを用意してすべてのバイトで同一のマスク付きSboxを用いてもよい。
マスク変換用データ生成部122-3は、次のラウンドのマスク変換部128-3に入力するマスク変換用データ(第1マスクの一例)を生成する。例えばマスク変換用データ生成部122-3は、マスク記憶部131-3からΦ0(x)L~Φ15(x)Lを読み出し、読み出した16個の4ビットのデータごとに関数f0Lの計算を行う。マスク変換用データ生成部122-3は、関数f0Lの結果をそれぞれ上位4ビットにし、下位4ビットを0とした16バイトのデータを生成し、そのデータに対してShiftRow処理を行う。f0Lが4ビット入力、8ビット出力の関数の場合、マスク変換用データ生成部122-3は、16個のf0Lの出力を含む16バイトのデータに対して、ShiftRow処理を行うことができる。マスク変換用データ生成部122-3は、ShiftRow出力値に対して、MixColumn処理を行う。マスク変換用データ生成部122-3は、MixColumn出力値を次のマスク変換部128-3の入力r1_0L~r1_15Lとする。
マスク変換用データ生成部122-3は、マスク記憶部131-3からΦ0(x)R~Φ15(x)Rを読み出し、読み出した16個の4ビットのデータごとに関数f0Rの計算を行う。マスク変換用データ生成部122-3は、関数f0Rの結果をそれぞれ下位4ビットにし上位4ビットを0とした16バイトのデータを生成し、そのデータに対してShiftRow処理を行う。f0Rが4ビット入力、8ビット出力の関数の場合、マスク変換用データ生成部122-3は、16個のf0Rの出力を含む16バイトのデータに対して、ShiftRow処理を行うことができる。マスク変換用データ生成部122-3は、ShiftRow出力値に対して、MixColumn処理を行う。マスク変換用データ生成部122-3は、MixColumn出力値を次のマスク変換部128-3の入力r1_0R~r1_15Rとする。
マスク変換用データ生成部122-3は、r1_0L~r1_15Lの計算と、r1_0R~r1_15Rの計算とを、それぞれ異なるタイミングで行う。
AESの最終ラウンド以外は、上記と同様の処理が実行される。AESの最終ラウンドでは、MixColumn処理は実行されない。すなわち、SubByte105-3k、ShiftRow106k、および、AddRoundKey104kの処理のみが実行される。
アンマスク用データ生成部124-3kは、アンマスク処理部125-3kに入力するアンマスク用データ(第1マスクの一例)を生成する。例えばアンマスク用データ生成部124-3kは、マスク記憶部131-3からΦ0(x)L~Φ15(x)Lを読み出し、読み出した16個の4ビットのデータごとに関数f0Lの計算を行う。マスク変換用データ生成部122-3kは、関数f0Lの結果をそれぞれ上位4ビットにし、下位4ビットを0とした16バイトのデータを生成し、そのデータに対してShiftRow処理を行う。f0Lが4ビット入力、8ビット出力の関数の場合、アンマスク用データ生成部124-3kは、16個のf0Lの出力を含む16バイトのデータに対して、ShiftRow処理を行うことができる。アンマスク用データ生成部124-3kは、ShiftRow出力値をアンマスク処理部125-3kへの入力r10_0L~r10_15Lとして出力する。
アンマスク用データ生成部124-3kは、マスク記憶部131-3からΦ0(x)R~Φ15(x)Rを読み出し、読み出した16個の4ビットのデータごとに関数f0Rの計算を行う。マスク変換用データ生成部122-3kは、関数f0Rの結果をそれぞれ下位4ビットにし上位4ビットを0とした16バイトのデータを生成し、そのデータに対してShiftRow処理を行う。f0Rが4ビット入力、8ビット出力の関数の場合、アンマスク用データ生成部124-3kは、16個のf0Rの出力を含む16バイトのデータに対して、ShiftRow処理を行うことができる。アンマスク用データ生成部124-3kは、ShiftRow出力値を次のマスク変換部128-3の入力r10_0R~r10_15Rとして出力する。
アンマスク用データ生成部124-3kは、r10_0L~r10_15Lの計算と、r10_0R~r10_15Rの計算とを、それぞれ異なるタイミングで行う。
アンマスク処理部125-3kは、16バイトのマスク付き暗号文とアンマスク用データr10_0L~r10_15Lとアンマスク用データr10_0R~r10_15Rと、を入力される。アンマスク処理部125-3kは、マスク付き暗号文とアンマスク用データr10_0L~r10_15Lとの排他的論理和を計算し、その結果とアンマスク用データr10_0R~r10_15Rとの排他的論理和を計算し、その結果である暗号文を出力部101bに入力する。
アンマスク用データr10_0L~r10_15Lと、アンマスク用データr10_0R~r10_15Rの計算順序が入れ替わってもよい。アンマスク処理部125-3kの後にAddRoundKey処理が実行されてもよい。
アンマスク処理部125-3kは、アンマスク用データr10_0L~r10_15Lの計算と、アンマスク用データr10_0R~r10_15Rの計算とを、異なるタイミングで行わなくてもよい。また、アンマスク処理部125-3kの前に、各バイトのアンマスク用データr10_0L~r10_15Lと、アンマスク用データr10_0R~r10_15Rとの排他的論理和が計算されてもよい。この場合、アンマスク処理部125-3kは、この排他的論理和の結果と、マスク付き暗号文との排他的論理和を計算し、その結果を暗号文としてもよい。
次に、このように構成された第3の実施形態にかかる暗号化装置による暗号化処理について説明する。図19は、第3の実施形態における暗号化処理の一例を示すフローチャートである。
ステップS501~ステップS504は、第2の実施形態の暗号化処理を示す図12のステップS301~ステップS304と同様である。
マスク変換部128-3bは、分割マスク(マスクr0_0L~r0_15L、マスクr0_0R~r0_15R)それぞれの変換を、相互に異なるタイミングで実行する(ステップS505)。
SubByte105-3bは、マスク変換部128-3bの出力である16バイトのマスク付きの中間データを入力とし、マスク付きSboxの出力値を出力する(ステップS506)。
暗号化装置は、ラウンドが最終ラウンドか否かを判定する(ステップS507)。ラウンドが最終ラウンドでない場合(ステップS507:No)、ShiftRow106bによる処理、MixColumn107bによる処理、および、AddRoundKey104bによる処理が順に実行される(ステップS508)。
マスク変換用データ生成部122-3bは、分割マスク(Φ0(x)L~Φ15(x)L、Φ0(x)R~Φ15(x)R)を用いて、次のマスク変換処理で用いられるマスクr1_0L~r1_15Lと、r1_0R~r1_15Rとを、それぞれ異なるタイミングで計算および出力する(ステップS509)。この後、ステップS505に戻り、次のラウンドについて同様の処理が繰り返される。
ステップS507でラウンドが最終ラウンドであると判定された場合(ステップS507:Yes)、以下のように最終ラウンドの処理が実行される。
まず、ShiftRow106kによる処理、および、AddRoundKey104kによる処理が順に実行される(ステップS510)。アンマスク用データ生成部124-3kは、分割マスクを用いて、アンマスク用データr10_0L~r10_15Lと、アンマスク用データr10_0R~r10_15Rとを、それぞれ異なるタイミングで計算および出力する(ステップS511)。
アンマスク処理部125-3kは、アンマスク用データr10_0L~r10_15Lを用いたアンマスク処理と、アンマスク用データr10_0R~r10_15Rを用いたアンマスク処理とを、それぞれ異なるタイミングで実行する(ステップS512)。出力部110bは、アンマスク処理部125-3kの処理結果であるデータを出力し(ステップS513)、暗号化処理を終了する。
次に、第3の実施形態の復号装置について説明する。図20Aおよび図20Bは、本実施形態の復号装置の構成の一例を示すブロック図である。第1の実施形態および第2の実施形態の復号装置と同様の構成については同一の符号を付し、説明を省略する。
第3の実施形態の復号装置は、入力部201aと、出力部201bと、鍵記憶部202と、ラウンド鍵生成部203と、AddRoundKey204a~204kと、InvShiftRow205a~205jと、InvSubByte206-3b~206-3kと、InvMixColumn207b~207jと、マスク記憶部231-3と、マスク処理部221-2aと、アンマスク処理部225-3kと、マスク変換部228-3b~228-3kと、マスク変換用データ生成部222-3b~222-3jと、を備える。
マスク記憶部231-2、マスク処理部221-2a、および、マスク変換部228-3b~228-3kは、暗号化装置のマスク記憶部131-3、マスク処理部121-2a、および、マスク変換部128-3b~128-3kと同様の構成とすることができる。
アンマスク処理部225-3kは、アンマスク用データr10_0L~r10_15Lとアンマスク用データr10_0R~r10_15Rの代わりに、これらのデータに基づいてマスク変換用データ生成部222-3により計算されたアンマスク用データを用いる点が、暗号化装置のアンマスク処理部125-3kと異なっている。
マスク変換用データ生成部222-3b~222-3jは、マスク変換用データ生成部122-3b~122-3j内のShiftRowおよびMixColumnの代わりに、それぞれInvMixColumnおよびInvShiftRowを備える。
なお、SubByte205-3内で用いられるマスク付きSboxの構成は、Sboxの代わりにInvSboxが用いられる以外は、暗号化装置のSubByte105-3内で用いられるマスク付きSboxと同様である。
次に、このように構成された第3の実施形態にかかる復号装置による復号処理について説明する。図21は、第3の実施形態における復号処理の一例を示すフローチャートである。
ステップS601~ステップS604は、第2の実施形態の復号処理を示す図15のステップS401~ステップS404と同様である。
マスク変換部228-3bは、分割マスク(マスクr1_0L~r1_15L、マスクr1_0R~r1_15R)それぞれの変換を、相互に異なるタイミングで実行する(ステップS605)。
InvSubByte206-3bは、AddRoundKey204aの出力である16バイトのマスク付きの中間データを入力とし、マスク付きSboxの出力値を出力する(ステップS606)。
復号装置は、ラウンドが最終ラウンドか否かを判定する(ステップS607)。ラウンドが最終ラウンドでない場合(ステップS607:No)、AddRoundKey204bによる処理、InvMixColumn207bによる処理、および、InvShiftRow205bによる処理が順に実行される(ステップS608)。
マスク変換用データ生成部222-3bは、分割マスク(Φ0(x)L~Φ15(x)L、Φ0(x)R~Φ15(x)R)を用いて、次のマスク変換処理で用いられるマスクr2_0L~r2_15Lと、r2_0R~r2_15Rとを、それぞれ異なるタイミングで計算および出力する(ステップS609)。この後、ステップS605に戻り、次のラウンドについて同様の処理が繰り返される。
ステップS607でラウンドが最終ラウンドであると判定された場合(ステップS607:Yes)、以下のように最終ラウンドの処理が実行される。
まず、AddRoundKey204kによる処理が実行される(ステップS610)。アンマスク用データ生成部224-3kは、分割マスクを用いて、左4ビット用のアンマスク用データと、右4ビット用のアンマスク用データとを、それぞれ異なるタイミングで計算および出力する(ステップS611)。
アンマスク処理部225-3kは、左4ビット用のアンマスク用データを用いたアンマスク処理と、右4ビット用のアンマスク用データを用いたアンマスク処理とを、それぞれ異なるタイミングで実行する(ステップS612)。出力部110bは、アンマスク処理の結果であるデータを出力し(ステップS613)、復号処理を終了する。
(変形例)
異なるタイミングで実行する複数の処理の実行順序は、固定である必要はなく、例えば暗号処理の実行ごとにランダムに入れ替えてもよい。例えば、左4ビットと右4ビットとに2分割する構成の場合、いずれを先に実行するかがランダムに決定されてもよい。マスク変換用データ生成部の内部に含まれる複数のMixColumn(複数のInvMixColumn)の処理順序がランダムに決定されてもよい。
(ハードウェア構成)
暗号処理装置の各部は、例えば、1または複数のプロセッサにより実現される。例えば上記各部は、CPU(Central Processing Unit)などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のIC(Integrated Circuit)などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち1つを実現してもよいし、各部のうち2以上を実現してもよい。
各部をハードウェアにより実現する場合、異なるタイミングでの処理は、異なるクロックで行うように構成すればよい。
次に、第1から第3の実施形態にかかる暗号処理装置のハードウェア構成について図22を用いて説明する。図22は、第1から第3の実施形態にかかる暗号処理装置のハードウェア構成例を示す説明図である。
第1から第3の実施形態にかかる暗号処理装置は、CPU(Central Processing Unit)51などの制御装置と、ROM(Read Only Memory)52およびRAM(Random Access Memory)53などの記憶装置と、ネットワークに接続して通信を行う通信I/F54と、各部を接続するバス61を備えている。
第1から第3の実施形態にかかる暗号処理装置で実行されるプログラムは、ROM52等に予め組み込まれて提供される。
第1から第3の実施形態にかかる暗号処理装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD-R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、第1から第3の実施形態にかかる暗号処理装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第1から第3の実施形態にかかる暗号処理装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
第1から第3の実施形態にかかる暗号処理装置で実行されるプログラムは、コンピュータを上述した暗号処理装置の各部として機能させうる。このコンピュータは、CPU51がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
以上説明したとおり、第1から第3の実施形態によれば、高次DPA、CPA、および、DLPAを含む電力解析に耐性を持つ暗号処理装置を提供することができる。上記実施形態によれば、1バイトのマスク付き中間データにかかる1バイトのマスクは、分割されて記憶および処理される。これにより、電力解析でマスク1バイト分の情報を得るためには、複数点の電力値が必要となる。DPAおよびCPAでは、攻撃の次数を上げる必要があり、攻撃へのコストが増す。DLPAでは、入力ノード数が増加するため、ハイパーパラメータの探索が困難になり、攻撃へのコストが増す。分割マスクの演算順序を暗号処理の各実行で入れ替えた場合、ある1ビットに着目した攻撃で1ビット分の情報を得たいときに複数点の電力値が必要となり攻撃コストが増す。またその場合、ある1点の電力にリークする情報は各暗号処理の実行で異なり、例えば1回目の暗号処理では分割マスクM1の情報がリークして2回目の暗号処理では分割マスクM2の情報がリークし、ある1点の電力から分割マスクM1の情報が得たい場合に分割マスクM2の情報がノイズとなり、ノイズの多い電力を用いると攻撃が困難になる。また、メモリ領域の大きいマスク付きSboxを増やさず、コストのかかる乱数量を増大させずに、ShiftRow処理およびMixColumn処理等の増加のみで対策が可能である。このため、高次DPA対策およびCPA対策より効率的に、サイドチャネル攻撃への対策を実現することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。