以下に添付図面を参照して、この発明にかかる暗号化装置の好適な実施形態を詳細に説明する。
以下では、鍵長を128ビットとしたAES(Advanced Encryption Standard)方式の暗号化装置に適用した例について説明するが、196ビットや256ビットの鍵長でも同様に適用できる。また、DES(Data Encryption Standard)やHierocryptなど、他の非線形変換を用いる暗号アルゴリズムを処理する装置にも適用できる。また、非線形変換を用いるハッシュ関数にも同様に適用できる。
ここで、AES方式の暗号化装置および復号装置の構成例について説明する。図1は、暗号化装置1000の構成の一例を示すブロック図である。図1に示すように、暗号化装置1000は、入力部1001aと、出力部1001bと、鍵記憶部1002と、ラウンド鍵生成部1003と、AddRoundKey1004a〜1004kと、SubByte1005b〜1005kと、ShiftRow1006b〜1006kと、MixColumn1007b〜1007jと、を備える。
入力部1001aは、外部から平文の入力を受け付ける。出力部1001bは、処理結果の暗号文を外部に出力する。なお、入力部1001aと出力部1001bの機能を共に有する入出力部1001を備えるように構成しても良い。
鍵記憶部1002は、128ビットの秘密鍵を記憶する。鍵記憶部1002は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
ラウンド鍵生成部1003は、鍵記憶部1002が記憶する秘密鍵から11個の128ビットのラウンド鍵d1003a〜d1003kを計算し、AddRoundKey1004a〜1004kに供給する。ラウンド鍵d1003a〜d1003kは、AddRoundKey1004aが実行される以前に予め計算しても良いし、AddRoundKey1004a〜1004kと並行に計算しても良い。
AddRoundKey1004aに入力されるデータd1001aは、入力された平文と同一である。AddRoundKey1004a〜1004kは、データd1001a、d1007b〜d1007j、d1006kに対してAES暗号で定められているAddRoundKey変換処理を行い、データd1004a〜d1004kを出力する。データd1004a〜d1004jは、SubByte1005b〜1005jに入力される。データd1004kは、暗号文と同一である。
SubByte1005b〜1005kは、データd1004a〜d1004jを、8ビットごとに非線形変換し、データd1005b〜d1005kを出力する。データd1005b〜d1005kは、ShiftRow1006b〜1006kに入力される。
ShiftRow1006b〜1006kは、データd1005b〜d1005kを、8ビットをブロック単位として並べ替え、データd1006b〜d1006kを出力する。データd1006b〜d1006jは、MixColumn1007b〜1007jに入力される。データd1006kは、AddRoundKey1004kに入力される。
MixColumn1007b〜1007jは、データd1007b〜d1007jを32ビットごとに線形変換を実行し、データd1007b〜d1007jを出力する。データd1007b〜d1007jは、AddRoundKey1004b〜1004jに入力される。
図2は、復号装置1100の構成の一例を示すブロック図である。図2に示すように、復号装置1100は、入力部1101aと、出力部1101bと、鍵記憶部1102と、ラウンド鍵生成部1103と、InvAddRoundKey1104a〜1104kと、InvShiftRow1105a〜1105jと、InvSubByte1106a〜1106jと、InvMixColumn1107b〜1107jと、を備える。
入力部1101aは、外部から暗号文の入力を受け付ける。出力部1101bは、処理結果の平文を外部に出力する。なお、入力部1101aと出力部1101bの機能を共に有する入出力部1101を備えるように構成しても良い。
鍵記憶部1102は、128ビットの秘密鍵を記憶する。鍵記憶部1102は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
ラウンド鍵生成部1103は、鍵記憶部1102が記憶する秘密鍵から11個の128ビットのラウンド鍵d1103a〜d1103kを計算し、InvAddRoundKey1104a〜1104kに供給する。ラウンド鍵d1103a〜d1103kは、InvAddRoundKey1104aが実行される以前に予め計算しても良いし、InvAddRoundKey1104a〜1104kと並行に計算しても良い。
InvAddRoundKey1104aに入力されるデータd1101aは、入力された暗号文と同一である。
InvAddRoundKey1104a〜1104kは、データd1101a、d1106a〜d1106jに対してAES暗号で定められているInvAddRoundKey変換処理を行い、データd1104a〜1104kを出力する。データd1104aは、InvShiftRow1105aに入力される。データd1104b〜1104jは、InvMixColumn1107b〜1107jに入力される。データd1104kは、出力される平文と同一である。
InvShiftRow1105a〜1105jは、データd1104a、d1107b〜d1107jを、8ビットをブロック単位として並べ替え、データd1105a〜d1105jを出力する。データd1105a〜d1105jは、InvSubByte1106a〜1106jに入力される。
InvSubByte1106a〜1106jは、データd1105a〜d1105jを8ビットごとに非線形変換し、データd1106a〜d1106jを出力する。データd1106a〜d1106jは、InvAddRoundKey1104b〜1104kに入力される。
InvMixColumn1107b〜1107jは、データd1104b〜d1104jを32ビットごとに線形変換を実行し、データd1107b〜d1107jを出力する。データd1107b〜d1107jは、InvShiftRow1105b〜1105jに入力される。
(第1の実施形態)
以下では、本発明を暗号化処理(暗号化装置1000等)に適用した場合について説明するが、復号処理(復号装置1100等)にも同様に適用できる。
次に、用語を定義する。暗号化処理の中間データとは、暗号アルゴリズムで定められた処理中に計算されるデータである。AES暗号化の場合には、AddRoundKey、SubByte、ShiftRow、および、MixColumnに入出力されるデータおよび内部で取り扱われるデータが中間データに相当する。
マスクとは、暗号化処理の中間データと消費電力との相関を取り除くため、暗号化処理の中間データに排他的加算算術的加算、および乗算などで処理されるデータである。SubByteに入力される入力データにかかるマスクを入力マスク(第1マスク)とし、SubByteから出力される出力データにかかるマスクを出力マスク(第2マスク)とする。実施形態の説明では、排他的加算で処理されるマスクを例に説明する。
図3は、第1の実施形態の説明で用いる、暗号化アルゴリズムAESを処理する暗号化装置100の構成例を示すブロック図である。暗号化装置100は、入力部101aと、出力部101bと、鍵記憶部102と、ラウンド鍵生成部103と、分割用データ生成部104(第1生成部)と、マスク生成部105と、マスク処理部107と、アンマスク処理部108と、データ分割部109と、データ統合部110と、AddRoundKey111a〜111kと、SubByte処理部112b〜112kと、ShiftRow113bl〜113klと、ShiftRow113br〜113krと、MixColumn114bl〜114jlと、MixColumn114br〜114jrと、マスク付替部115b〜115jと、を備える。
SubByte処理部112b〜112kから出力される2つのデータを処理するShiftRow113bl〜113kl、ShiftRow113br〜113kr、MixColumn114bl〜114jl、MixColumn114br〜114jr、マスク付替部115b〜115jが、第2生成部に相当する。
入力部101aは、外部から128ビットの平文d101aを受け付け、平文d101aをマスク処理部107に供給する。出力部101bは、処理結果の暗号文d108を入力され外部に出力する。鍵記憶部102は、128ビットの秘密鍵を記憶する。
ラウンド鍵生成部103は、鍵記憶部102が記憶する秘密鍵から11個の128ビットのラウンド鍵d103a〜d103kを計算し、AddRoundKey111a〜111kに供給する。ラウンド鍵d103a〜d103kは、AddRoundKey111aが実行される以前に予め計算しても良いし、AddRoundKey111a〜111kと並行に計算しても良い。
分割用データ生成部104は、128ビットの分割用データd104を生成し、データ分割部109に供給する。分割用データd104は、予め用意された値でも良いし、分割用データ生成部104が乱数生成部を備え、この乱数生成部が生成した乱数を用いても良い。
マスク生成部105は、入力マスクd120b〜d120kと、出力マスクd121b〜d121kを生成する。マスク生成部105は、入力マスクd120c〜d120kと、出力マスクd121b〜d121jとから付替マスクd122b〜d122jを生成する。マスク生成部105は、入力マスクd120bをマスク処理部107に供給し、入力マスクd120b〜d120kと、出力マスクd121b〜d121kとをそれぞれSubByte処理部112b〜112kに供給する。マスク生成部105は、出力マスクd121kをアンマスク処理部108に供給し、付替マスクd122b〜d122jをそれぞれマスク付替部115b〜115jに供給する。
各マスクは、予め用意された値でも良いし、マスク生成部105が乱数生成部を備え、乱数生成部が生成した乱数を用いても良い。マスク生成部105が備える乱数生成部は、分割用データ生成部104が備える乱数生成部と同一でも良い。
マスク生成部105は、例えば、d122b=d120b^d121bにより付替マスクd122bを計算する。なお、「A^B」はAとBとの排他的論理和を意味する。
マスク処理部107は、入力マスクd120bと平文d101aとの排他的論理和を計算し、マスク付き平文d107としてデータ分割部109に出力する。
データ分割部109は、分割用データd104に基づいて、128ビットのマスク付き平文d107を、128ビットの2つの分割データd109lおよびd109rを、d109lとd109rとの排他的論理和が、マスク付き平文d107と一致するように分割して出力する。例えば、分割データd109lとして分割用データd104を用い、分割データd109rとして分割用データd104とマスク付き平文d107との排他的論理和を用いることができる。
このように、本実施形態では、あるデータから、排他的論理和が当該データと一致するような複数のデータを生成することを、当該データを分割するといい、生成した各データを分割データという。
AddRoundKey111aは、入力されたデータd109lとラウンド鍵d103aとの排他的論理和であるデータd111aを計算し、SubByte処理部112bに出力する。AddRoundKey111b〜111kも同様に、入力されたデータとラウンド鍵との排他的論理和を計算し出力する。
SubByte処理部112bは、2つのデータd111aおよびd109rを入力され、2つのデータd112blおよびd112brを出力する。データd111aおよびd109rは、その排他的論理和が、図1のSubByte1005bに入力されるデータd1004aと入力マスクd120bとの排他的論理和となる関係を有する。データd112blおよびd112brは、その排他的論理和が、図1のSubByte1105bから出力されるデータd1005bと出力マスクd121bとの排他的論理和となる関係を有する。
ShiftRow113bl〜113kl、ShiftRow113br〜113kr、MixColumn114bl〜114jl、ShiftRow114br〜114jrは、入力されたデータを攪拌する。
マスク付替部115bは、入力されたデータd114brと付替マスクd122bとの排他的論理和であるデータd115bを計算し出力する。マスク付替部115c〜115jも同様に入力されたデータd114cr〜d114jrと付替マスクd122c〜d122jとの排他的論理和を計算し出力する。
データ統合部110は、データd111kとデータd113krとの排他的論理和であるデータd110を計算し出力する。アンマスク処理部108は、データd110と出力マスクd121kとの排他的論理和である暗号文d108を計算し出力する。出力部101bは、暗号文d108を受けつけ、外部に出力する。
次に、SubByte処理部112bの構成例について説明する。図4は、SubByte処理部112bの構成例を示すブロック図である。SubByte処理部112c〜112kの構成は、SubByte処理部112bと同様であるため説明を省略する。
SubByte処理部112bは、16個のマスク付き拡張S−box(以下、MES(Masked and Extended S−box))2200〜2215を備えている。
SubByte処理部112bは、128ビットのデータd21lをd21l=d2100l||・・・||d2115l(||は連結を意味する)を満たす8ビットのデータd2100l〜d2115lに分け、それぞれMES2200〜2215に入力する。同様に、SubByte処理部112bは、128ビットのデータd21rをd21r=d2100r||・・・||d2115rを満たす8ビットのデータd2100r〜d2115rに分け、それぞれMES2200〜2215に入力する。
SubByte処理部112bは、MES2200〜2215が出力した8ビットのデータd2200l〜d2215lを、d22l=d2200l||・・・||d2215lを満たすd22lに連結して出力する。同様に、SubByte処理部112bは、MES2200〜2215が出力した8ビットのデータd2200r〜d2215rをd22r=d2200r||・・・||d2215rを満たすd22rに連結して出力する。
MES2200は、2つのデータd2100lとd2100rとを入力され、2つのデータd2200lとd2200rとを出力する。MES2201〜2215も同様である。
図5は、MES2200の構成例を示すブロック図である。以下では8ビット単位のデータを処理する例を説明する。
MES2200は、変換部301lと、変換部301rと、変換部303と、変換部304と、排他的論理和演算部302とを備えている。MES2200は、入力されたデータd300lを変換部301lに入力し、データd300rを変換部301rに入力し、変換部301lの出力したデータd301lと変換部301rの出力したデータd301rとの排他的論理和であるデータd302を計算する。MES2200は、データd302を変換部303と変換部304とに入力し、変換部303が変換したデータd303を出力し、変換部304が変換したデータd304を出力する。
変換部301lは、データd300lを入力として、線形変換を含む変換処理により変換したデータd301lを出力する。変換部301lは、例えば、入力されたデータd300lを後述する関数φで線形変換したデータに変換用データd301aを排他的加算した結果であるデータd301lを出力するような変換として構成される。変換部301lが、入力されたデータd300lを線形変換したデータd301lを出力するように構成してもよい。
変換部301rは、データd300rを入力として、線形変換を含む変換処理により変換したデータd301rを出力する。変換部301rは、例えば、入力されたデータd300rを関数φで線形変換したデータに変換用データd301bを排他的加算した結果であるデータd301rを出力するような変換として構成される。変換部301rが、入力されたデータd300rを線形変換したデータd301rを出力するように構成してもよい。
関数φは、8ビット入出力の関数であり、例えば以下の(1)式を用いることができる。x
i、y
i(0≦i≦7)はそれぞれ1ビットのデータを表し、関数φの入力がx
iで出力がy
iである。
関数φは、(1)式に限られるものではなく、例えば恒等変換であっても良い。恒等変換の場合は、関数φによる変換処理を行わなくても良い。変換用データd301aは0でも良く、その場合は排他的加算を行わなくても良い。変換用データd301bは0でも良く、その場合は排他的加算を行わなくても良い。なお、変換用データd301a=0かつ変換用データd301b=0の場合、変換部301lと変換部301rとは等しくなる。
変換部304は、入力されたデータd302を所定の変換を用いてd304に変換し出力する。変換部304は、AESのSubByte(S−box)のような非線形変換でも良いし、関数φのような線形変換でも良く、任意の変換を用いることができる。変換部304は、恒等変換でも良く、この場合変換処理を行わなくても良い。
変換部301l、変換部301r、および変換部304は、予め変換表を用意し、用意した変換表を参照して変換処理を行うように構成してもよい。
図6は、変換部303の構成例を示すブロック図である。変換部303は、変換部401と、排他的論理和演算部402と、S−box403と、変換部404と、排他的論理和演算部405と、排他的論理和演算部406と、を備えている。変換部303は、データd302、d400a、d400bが入力される。データd302は、変換部401に入力される。変換部401は、データd302をデータd401に変換する。排他的論理和演算部402は、データd401とデータd400aとの排他的論理和であるデータd402を計算しS−box403に入力する。変換部404は、データd302をデータd404に変換する。排他的論理和演算部405は、S−box403が出力したデータd403とd404との排他的論理和であるデータd405を計算する。排他的論理和演算部406は、データd405とd400bとの排他的論理和であるデータd303を計算し、出力する。
データd400aは、マスク生成部105が出力した128ビットの入力マスクd120bを8ビットずつ区切って16個に分けたデータの1つである。データd400bは、マスク生成部105が出力した128ビットの出力マスクd121bを8ビットずつ区切って16個に分けたデータの1つである。
変換部401は、例えば、入力されたデータd302に、変換用データd301aと変換用データd301bを排他的加算した結果を、関数φの逆関数φ
−1でデータd401に変換し、出力するように構成される。関数φの逆変換φ
−1は、例えば以下の(2)式で表される。
S−box403は、AESのSubByte(S−box)と同様の非線形変換であり、入力されたデータd402をデータd403に変換する。
変換部404は、図5の変換部304と同一の変換であり、入力されたデータd302をデータd404に変換する。
変換部303は、S−box変換をS、変換部404をh、変換部401をg−1と表記すると、以下の(3)式の関係を満たす。
d303=S(g−1(d302)^d400a)^h(d302)^d400b
・・・(3)
(3)式を満たしていれば、上述の計算手順でなくても良い。そのため変換部303は、入力されるデータd302が0から255までの場合について、出力されるデータd303を予め計算し、変換表記憶部410にデータd302とデータd303とを対応づけた変換表T2200として保持することもできる。この場合、変換部303は、データd302を受け付け、変換表T2200を参照して受け付けたデータd302に対応するデータd303を出力する。図7は、変換表記憶部410に記憶される変換表T2200の一例を示す図である。
SubByte処理部112bが、128ビットのデータを8ビットずつ処理する構成例を説明したが、処理単位は8ビットに限られず、16ビットや128ビットとしても良いし、ビット数が異なる処理単位としても良い。処理単位を128ビットとする場合は、例えばSubByte処理部112bが1つのMES2200を備えるように構成すれば良い。
SubByte処理部112bが有するMES2200〜MES2215は同じ構成でも良い。SubByte処理部112c〜112kについても同様で、同じ構成のMESを有していても良い。また、SubByte処理部112b〜112kが同じ構成でも良い。
AddRoundKey111b〜111kは、図3では、分割されたデータの左の系列に配置されているが、右に配置されても良い。この場合、AddRoundKey111bは、マスク付替部115bの出力したデータd115bを入力され、ラウンド鍵d103bとデータd115bとの排他的論理和であるデータd111bを計算し、SubByte処理部112cに出力する。このとき、MixColumn114blはSubByte処理部112cにデータd114blを出力する。同一の数字で表される装置は、同一の装置を用いて構成されても良い。
次に、暗号化装置100の処理手順を図8のフローチャートを用いて説明する。図8は、第1の実施形態の暗号化装置100で同一の数字の装置に同一の装置を用いた場合の暗号化処理の全体の流れの一例を示すフローチャートである。
暗号化装置100の入力部101aは、128ビットの平文d101aを受け付ける(ST101)。ラウンド鍵生成部103は、鍵記憶部102から供給された暗号化鍵d102に基づいて、ラウンド鍵d103a〜d103kを生成し、それぞれAddRoundKey111a〜111kに供給する(ST102)。
マスク生成部105は、入力マスクd120b〜d120k、出力マスクd121b〜d121k、および付替マスクd122b〜d122jを生成する(ST103)。マスク処理部107は、平文d101aに入力マスクd120bを処理し、マスク付き平文d107を出力する(ST104)。マスク付き平文d107は、平文d101aと入力マスクd120bの排他的論理和である。
データ分割部109は、分割用データ生成部104から供給された分割用データd104に基づいて、マスク付き平文d107を2つのデータd109lおよびデータd109rに分割する(ST105)。データd109lとデータd109rとの排他的論理和はd107である。例えばd109l=d104、d109r=d107^d104のように計算することができる。
AddRoundKey111aは、ラウンド鍵生成部103から供給されたラウンド鍵d103aとデータd109lとの排他的論理和であるデータd111aを計算して出力する(ST106)。
SubByte処理部112bは、AddRoundKey111aの出力したデータd111aと、データ分割部109が出力したデータd109rと、入力マスクd120bと出力マスクd121bとを入力され、マスクが施されたまま非線形変換処理を行い、2つのデータd112blおよびデータd112brを出力する(ST107)。
ShiftRow113blは、SubByte処理部112bが出力したデータd112blを、8ビットをブロック単位として並び替える(ST108)。
暗号化装置100は、ラウンド数が10ラウンド目か否かを判定する(ST109)。ラウンド数が1〜9ラウンド目の場合(ST109:No)、MixColumn114blは、ShiftRow113blが出力したデータd113blを32ビット毎に線形変換し、変換後のデータd114blをAddRoundKey111bに出力する(ST110)。
ShiftRow113brは、SubByte処理部112bが出力したデータd112brを、8ビットをブロック単位として並び替える(ST111)。
暗号化装置100は、ラウンド数が10ラウンド目か否かを判定する(ST112)。
ラウンド数が1〜9ラウンド目の場合(ST112:No)、MixColumn114brは、ShiftRow113brが出力したデータd113brを32ビット毎に線形変換し、変換後のデータd114brをマスク付替部115bに出力する(ST113)。
マスク付替部115bは、MixColumn114brが出力したデータd114brと、マスク生成部105から供給された付替マスクd122bとの排他的論理和であるデータd115bを計算し、SubByte処理部112cに出力する(ST114)。
SubByte処理部112cは、AddRoundKey111bの出力したデータd111bと、マスク付替部115bの出力したデータd115bを入力され、マスクが施されたまま非線形変換処理を行い、2つのデータd112clおよびデータd112crを出力する(ST107)。
1〜10ラウンド目のAddRoundKey111b〜111jは、AddRoundKey111aと同様の処理、2〜10ラウンド目のSubByte処理部112c〜112kは、SubByte処理部112bと同様の処理、2〜10ラウンド目のShiftRow113cl〜113klおよびShiftRow113cr〜113krは、ShiftRow113blおよびShiftRow113brと同様の処理、2〜9ラウンド目のMixColumn114cl〜114jlおよびMixColumn114cr〜114jrは、MixColumn114blおよびMixColumn114brと同様の処理、2〜9ラウンド目のマスク付替部115c〜115jは、マスク付替部115bと同様の処理を行うため説明は省略する。
ラウンド数が10ラウンド目の場合(ST109:Yes、ST112:Yes)、AddRoundKey111kは、ラウンド鍵生成部103から供給されたラウンド鍵d103kと、ShiftRow113klが出力したデータd113klとの排他的論理和であるデータd111kをデータ統合部110に出力する(ST115)。
データ統合部110は、マスク付き暗号文としてShiftRow113krが出力したデータd113krと、AddRoundKey111kが出力したデータd111kとの排他的論理和であるデータd110を計算し、アンマスク処理部108に出力する(ST116)。
アンマスク処理部108は、マスク付き暗号文d110から出力マスクd121kを除去し、暗号文d108を計算する(ST117)。暗号文d108は、マスク付き暗号文d110と出力マスクd121kとの排他的論理和である。出力部101bは、暗号文d108を出力する(ST118)。
MES2200が予め変換表T2200を生成しているときの、MES2200の処理手順を図9を用いて説明する。図9は、変換表を用いる場合のMES2200の処理手順の一例を示すフローチャートである。
MES2200は、2つのデータd300lおよびデータd300rを受け付ける(ST201)。変換部301lは、データd300lを変換してd301lを出力し、変換部301rは、データd300rを変換してd301rを出力する(ST202)。
MES2200は、データd301lとデータd301rとの排他的論理和を計算し、変換部303と変換部304に供給する(ST203)。変換部303は、変換表T2200を参照し、データd302に対応するデータd303を得る(ST204)。変換部304は、データd302を所定の変換を用いてd304に変換する(ST205)。MES2200は、データd303およびデータd304を出力する(ST206)。
本実施形態によれば、MES2200の入出力は、以下の(4)式の関係を満たす。
(d303^d304)^d400b=S((d300l^d300r)^d400a)
・・・(4)
MES2200は、暗号化処理のマスク付きの中間データを分割した2つのデータを入力として、マスクを付けたまま非線形変換を行い、正しい演算結果の分割データを出力することができる。
2次DPAは、暗号化処理のマスク付きの中間データと、マスクの2点の消費電力を用いて、または同一のマスクが付いた2つの暗号化処理の中間データの消費電力を用いて秘密鍵を特定する。本実施形態では、暗号化処理のマスク付きの中間データは分割されたまま暗号化処理が実行されるため、暗号化処理のマスク付きの中間データを処理する時点の消費電力を測定することができない。そのため2次DPAに耐性を有する。また、暗号化処理の中間データを処理する時点の消費電力も測定することができない。暗号化処理の中間データと消費電力との相関が取り除かれ、電力解析に対する耐性を持つ。
SubByte処理部112b〜112kが全て同じ構成の場合には、入力マスクd120b〜d120kを同一データにすることができ、出力マスクd121b〜d121kを同一データにすることができ、付替マスクd122b〜d122kを同一データにすることができる。
SubByte処理部112bが有するMES2200〜2215が全て同じ構成の場合には、全てのMESに同じ入力マスクと出力マスクを用いることができるため、128ビットの入力マスクd120bを8ビットのデータにすることができ、128ビットの出力マスクd121bを8ビットのデータにすることができる。SubByte処理部112c〜112kについても同様に、入力マスクと出力マスクを8ビットにした場合は、128ビットの付替マスクd122b〜d122jを8ビットのデータにすることができる。
SubByte処理部112b〜112kが全て同じ構成で、SubByte処理部112b〜112kが有するMESが全て同じ構成の場合に、暗号化装置100は、1つのMESを用いて暗号化処理を行うことができる。変換表を用いた実装の場合、暗号化装置100は、1つの変換表を生成、記憶するだけでSubByteの計算を行うことができるため、2次DPAへの耐性を有しつつ、回路規模、記憶容量、処理時間、および消費電力を削減できる。
(第1の実施形態の変形例)
図10は、MES2200の変形例であるMES2200−2の構成例を示すブロック図である。以下では8ビット単位のデータを処理する例を説明する。
MES2200−2は、変換部1201lと、変換部1201cと、変換部1201rと、変換部1203と、変換部1204と、変換部1205と、排他的論理和演算部1202を備えている。
MES2200−2は、入力されたデータd1200lを変換部1201lに入力し、データd1200cを変換部1201cに入力し、データd1200rを変換部1201rに入力する。MES2200−2は、変換部1201lの出力したデータd1201lと、変換部1201cの出力したデータd1201cと、変換部1201rの出力したデータd1201rとの排他的論理和であるデータd1202を計算する。MES2200−2は、データd1202を変換部1203と変換部1204と変換部1205とに入力する。MES2200−2は、変換部1203が変換したデータd1203を出力し、変換部1204が変換したデータd1204を出力し、変換部1205が変換したデータd1205を出力する。
変換部1201lは、データd1200lを入力として、データd1201lを出力する。変換部1201lは、例えば、入力されたデータd1200lを関数φで変換したデータに変換用データd301aを排他的加算した結果であるデータd1201lを出力するような変換として構成される。この変換用データは0でも良く、その場合は排他的加算を行わなくても良い。
変換部1201cは、データd1200cを入力として、データd1201cを出力する。変換部1201cは、例えば、入力されたデータd1200cを関数φで変換したデータに変換用データd301bを排他的加算した結果であるデータd1201cを出力するような変換として構成される。この変換用データは0でも良く、その場合は排他的加算を行わなくても良い。
変換部1201rは、データd1200rを入力として、データd1201rを出力する。変換部1201rは、例えば、入力されたデータd1200rを関数φで変換したデータに変換用データd301cを排他的加算した結果であるデータd1201rを出力するような変換として構成される。この変換用データは0でも良く、その場合は排他的加算を行わなくても良い。
変換部1204は、入力されたデータd1202を所定の変換を用いてデータd1204に変換し出力する。変換部1204は、AESのSubByte(S−box)のような非線形変換でも良いし、関数φのような線形変換でも良く、任意の変換を用いることができる。変換部1204は、恒等変換でも良く、この場合変換処理を行わなくても良い。
変換部1205は、入力されたデータd1202を所定の変換を用いてデータd1205に変換し出力する。変換部1205は、AESのSubByte(S−box)のような非線形変換でも良いし、関数φのような線形変換でも良く、任意の変換を用いることができる。変換部1205は、恒等変換でも良く、この場合変換処理を行わなくても良い。
変換部1201l、変換部1201c、変換部1201r、変換部1203、変換部1204、および、変換部1205は、予め変換表を用意し、用意した変換表を参照することでMES2200−2を計算しても良い。
図11は、変換部1203の構成例を示すブロック図である。変換部1203は、変換部1301と、排他的論理和演算部1302と、S−box1303と、変換部1304と、排他的論理和演算部1305と、排他的論理和演算部1306と、変換部1307と、排他的論理和演算部1308と、を備えている。
変換部1203は、データd1202、d400a、d400bを入力する。変換部1203は、データd1202を変換部1301に入力し、変換部1301の出力データd1301とデータd400aとの排他的論理和であるデータd1302を計算してS−box1303に入力する。変換部1203は、データd1202を変換部1304でデータd1304に変換する。変換部1203は、S−box1303の出力したデータd1303と変換部1304が出力したデータd1304との排他的論理和であるデータd1305を計算する。変換部1203は、データd1305とデータd400bとの排他的論理和であるデータd1306を計算する。変換部1203は、データd1202を変換部1307でデータd1307に変換する。変換部1203は、データd1306と変換部1307が出力したデータd1307との排他的論理和であるデータd1203を計算し、出力する。
データd400aは、マスク生成部105が出力した128ビットの入力マスクd120bを8ビットずつ区切って16個に分けたデータの1つである。データd400bは、マスク生成部105が出力した128ビットの出力マスクd121bを8ビットずつ区切って16個に分けたデータの1つである。変換部1301は、例えば、入力されたデータd1202に、変換用データd301aと変換用データd301bを排他的加算した結果を、関数φの逆関数φ−1でデータd1301に変換し、出力するように構成される。
S−box1303は、AESのSubByte(S−box)と同様の非線形変換であり、入力されたデータd1302をd1303に変換する。
変換部1304は、変換部1204と同一の変換であり、入力されたデータd1202をd1304に変換する。変換部1307は、変換部1205と同一の変換であり、入力されたデータd1202をd1307に変換する。
変換部1203は、S−box変換をS、変換部1301をg−1、変換部1304をh1、変換部1307をh2と表記すると以下の(5)式の関係を満たす。
d1203=S(g−1(d1202)^d400a)^h1(d1202)^d400b^h2(d1307) ・・・(5)
(5)式を満たしていれば、上述の計算手順でなくても良い。そのため変換部1203は、入力されるデータd1202が0から255までの場合について、出力されるデータd1203を予め計算し図7のような変換表T2200として保持することもできる。この場合、変換部1203は、データd1202を受け付け、変換表T2200を参照して受け付けたデータd1202に対応するデータd1203を出力する。
このように、第1の実施形態にかかる暗号化装置では、暗号化処理のマスク付きの中間データを分割したまま暗号化処理を実行できる。このため、暗号化処理のマスク付きの中間データを処理する時点の消費電力を測定することができず、2次DPAに耐性を有する。
(第2の実施形態)
第2の実施形態は、MES2200〜2215の代わりにMES600〜615を備える点が第1の実施形態と異なる。図12は、MES600の構成例を示すブロック図である。なお、MES601〜MES615はMES600と同様の構成を備えるため説明を省略する。
MES600は、変換部601と、変換部602と、変換部603と、変換部604と、変換部605と、変換部606と、を備えている。
MES600は、2つの8ビットのデータd600lとd600rを受け付け、データd600lを変換部601と変換部603に入力し、データd600rを変換部602と変換部604に入力する。MES600は、変換部601が出力したデータd601と変換部602が出力したデータd602とを変換部605に入力する。MES600は、変換部603が出力したデータd603と変換部604が出力したデータd604とを変換部606に入力する。MES600は、変換部605が出力したデータd605と変換部606が出力したデータd606とを出力する。
変換部601は、逆変換を有する変換でデータd600lをd601に変換する。変換部602は、逆変換を有する変換でデータd600rをd602に変換する。変換部603は、逆変換を有する変換でデータd600lをd603に変換する。変換部604は、逆変換を有する変換でデータd600rをd604に変換する。
変換部601、変換部602、変換部603、および変換部604としては、例えば、第1の実施形態で説明した関数φやAESのS−boxや恒等変換を用いて構成できる。恒等変換を用いる場合は変換処理を行わなくても良い。
図13は、変換部605の構成例を示すブロック図である。図14は、変換部606の構成例を示すブロック図である。
変換部605は、排他的論理和演算部701と、排他的論理和演算部702と、S−box703と、変換部707と、変換部708と、変換部704と、排他的論理和演算部705と、排他的論理和演算部706と、を備えている。
変換部605は、データd601、d602、d700a、d700bが入力され、データd601を変換部707に入力し、データd602を変換部708に入力する。変換部605は、変換部707が出力したデータd707と変換部708が出力したデータd708との排他的論理和であるデータd701を計算する。変換部605は、データd701とデータd700aとの排他的論理和であるデータd702を計算してS−box703に入力する。変換部605は、変換部707が出力したデータd707と変換部708が出力したデータd708とを変換部704に入力する。変換部605は、S−box703が出力したデータd703と変換部704が出力したデータd704との排他的論理和であるデータd705を計算する。変換部605は、データd705とデータd700bとの排他的論理和であるデータd605を計算し出力する。
データd700aは、マスク生成部105が出力した128ビットの入力マスクd120bを8ビットずつ区切って16個に分けたデータの1つである。データd700bは、マスク生成部105が出力した128ビットの出力マスクd121bを8ビットずつ区切って16個に分けたデータの1つである。
S−box703は、AESのS−boxと同様の非線形変換であり、入力されたデータd702をd703に変換する。
変換部707は、入力されたデータd601に対して変換部601の逆変換を行った結果d707を出力する。変換部708は、入力されたデータd602に対して変換部602の逆変換を行った結果d708を出力する。変換部704は、入力された8ビットのデータd707とデータd708を所定の変換を用いて8ビットのデータd704に変換し出力する。変換部704は、16ビット入力8ビット出力である任意の変換を用いることができる。
変換部601が恒等変換である場合には、変換部707も恒等変換であり、その場合には、変換部707の変換処理を行わなくても良い。変換部708についても同様である。変換部704が恒等変換である場合にも、変換処理を行わなくても良い。
変換部606は、変換部710と、変換部711と、変換部712と、を備えている。変換部606は、2つの8ビットのデータd603とデータd604を受け付け、データd603を変換部710に入力し、データd604を変換部711に入力する。変換部606は、変換部710が出力したデータd710と変換部711が出力したデータd711を変換部712に入力し、変換部712が出力したデータd606を出力する。変換部712は、入力されたデータd710に対して、変換部704と同一の変換を行った結果d606を出力する。
MES600の入出力データは、S−box変換をSと表記すると、以下の(6)式の関係を満たす。
d605^d606^d700b
=S(d600l^d600r^d700a) ・・・(6)
変換部605は、入力されるデータd601およびデータd602に対して出力されるデータd605を予め計算し、変換表として保持することもできる。この場合、変換部605は、入力されたデータd601およびデータd602を受け付け、この変換表を参照して対応するデータd605を出力する。
変換部606は、入力されるデータd603およびデータd604に対して出力されるデータd606を予め計算し、変換表として保持することもできる。この場合、変換部606は、入力されたデータd603およびデータd604を受け付け、この変換表を参照して対応するデータd606を出力する。
MES600は、入力されるデータd600lおよびデータd600rに対して出力されるデータd605およびデータd606を予め計算し、変換表として保持することもできる。この場合、MES600は入力データd600lおよびデータd600rを受け付け、この変換表を参照して対応するデータd605およびデータd606を出力する。
(第3の実施形態)
第3の実施形態は、MES2200〜2215の代わりにMES1600〜1615を備える点が第1の実施形態と異なる。図15は、MES1600の構成例を示すブロック図である。なお、MES1601〜MES1615はMES1600と同様の構成を備えるため説明を省略する。
MES1600は、変換部1601と、変換部1602と、変換部1603と、を備えている。MES1600は、マスク付き暗号化処理中のデータの分割データであるデータd1600lとデータd1600rが入力され、データd1600lとデータd1600rを変換部1601に入力する。MES1600は、変換部1601が出力したデータd1601を変換部1602と変換部1603とに入力する。MES1600は、変換部1602が出力したデータd1602と、変換部1603が出力したデータd1603とを出力する。
変換部1601は、8ビットのデータd1600lとデータd1600rとを受け付け、データd1600lとd1600rと変換用データd1601aを排他的加算した結果を、関数ψを用いて8ビットのデータに変換し、変換結果に、変換用データd1601bを排他的加算した結果d1601を出力する。関数ψは逆関数ψ−1を持つ。関数ψは恒等変換でも良く、その場合は変換処理を行わなくても良い。
変換用データd1601aおよび変換用データd1601bは0でも良く、その場合は排他的加算を行わなくても良い。
変換部1601は、予め計算された変換表を参照することで計算されても良い。この変換表は、入力されるデータd1600lおよびデータd1600rと、出力されるデータd1601との対応関係を表し、関数ψと変換用データd1601aに応じて生成される。
変換部1603は、変換部1601が出力したデータd1601を所定の変換を用いてデータd1603に変換し、出力する。変換部1603は、S−boxのような非線形変換でも良いし、第1の実施形態で説明した関数φのような線形変換でも良く、任意の変換を用いることができる。変換部1603は、恒等変換でも良く、この場合変換処理を行わなくても良い。
図16は、変換部1602の構成例を示すブロック図である。変換部1602は、変換部1701と、排他的論理和演算部1702と、変換部1704と、S−box1703と、排他的論理和演算部1705と、排他的論理和演算部1706と、を備えている。
変換部1602は、データd1601、d1700a、d1700bが入力され、データd1601を変換部1701に入力する。変換部1602は、変換部1701が出力したデータd1701とデータd1700aとの排他的論理和であるデータd1702を計算してS−box1703に入力する。変換部1602は、データd1601を変換部1704でデータd1704に変換する。変換部1602は、S−box1703が出力したデータd1703と、変換部1704が出力したデータd1704との排他的論理和であるデータd1705を計算する。変換部1602は、データd1705とd1700bとの排他的論理和であるデータd1602を計算し、出力する。
データd1700aは、マスク生成部105が出力した128ビットの入力マスクd120bを8ビットずつ区切って16個に分けたデータの1つである。データd1700bは、マスク生成部105が出力した128ビットの出力マスクd121bを8ビットずつ区切って16個に分けたデータの1つである。
変換部1701は、入力されたデータd1601に変換用データd1601bを排他的加算した結果を関数ψの逆関数ψ−1で変換した結果に変換用データd1601aを排他的加算した結果d1701を出力する。
S−box1703は、AESのS−boxと同様の非線形変換であり、入力されたデータd1702をd1703に変換する。変換部1704は、変換部1603と同一の変換であり、入力されたデータd1601をd1704に変換する。変換部1602は、入力されるデータd1601が0から255までの場合について、出力されるデータd1602を予め計算し、変換表として保持することもできる。この場合、変換部1602は、データd1601を受け付け、この変換表を参照して受け付けたデータd1601に対応するデータd1602を出力する。
MES1600の入出力データは、S−box変換をSと表記すると、以下の(7)式の関係を満たす。
d1602^d1603^d1700b=S(d1600l^d1600r^d1700a) ・・・(7)
これまでは128ビットのデータを8ビットずつ処理する構成例を説明したが、処理単位は8ビットに限られず、16ビットや128ビットとしても良いし、ビット数が異なる処理単位としても良い。SubByte処理部112bが有するMES1600〜1615は同じ構成でも良い。
(第4の実施形態)
第4の実施形態は、MES2200〜2215の代わりにMES1800〜1815を備える点が第1の実施形態と異なる。図17は、MES1800の構成例を示すブロック図である。なお、MES1801〜MES1815はMES1800と同様の構成を備えるため説明を省略する。
MES1800は、排他的論理和演算部1801と、排他的論理和演算部1802と、排他的論理和演算部1804と、排他的論理和演算部1806と、暗号アルゴリズムで定められたS−box1803と、変換部1805と、を備えている。
MES1800は、マスク付き暗号化処理中のデータの分割データであるデータd1800lおよびデータd1800rと、データd1806aおよびデータd1806bが入力される。MES1800は、データd1800lとデータd1800rとの排他的論理和であるデータd1801を計算する。MES1800は、データd1801とデータd1806aとの排他的論理和であるデータd1802を計算してS−box1803に入力する。MES1800は、S−box1803が出力したデータd1803とデータd1806bとの排他的論理和であるデータd1804を計算する。MES1800は、入力されたデータd1800rを変換部1805に入力する。MES1800は、変換部1805が出力したデータd1805rと、データd1804との排他的論理和であるデータd1805lを出力する。
変換部1805は、データd1800rを所定の変換を用いてデータd1805rに変換し、出力する。変換部1805は、S−boxのような非線形変換でも良いし、第1の実施形態で説明した関数φのような線形変換でも良く、任意の変換を用いることができる。
MES1800は、入力データに対して出力されるデータを予め計算し、変換表として保持することもできる。この場合、MES1800は入力されたデータd1800lおよびデータd1800rを受け付け、この変換表を参照してデータd1805lおよびデータd1805rを出力する。
MES1800の入出力データは、S−box変換をSと表記すると、以下の(8)式の関係を満たす。
d1805l^d1805r^d1806b
=S(d1800l^d1800r^d1806a) ・・・(8)
これまでは、128ビットのデータを8ビットずつ処理する構成例を説明したが、処理単位は8ビットに限られず、16ビットや128ビットとしても良いし、ビット数が異なる処理単位としても良い。SubByte処理部112bが有するMES1800〜1815は同じ構成でも良い。
(第5の実施形態)
図18は、第5の実施形態の暗号化装置500の構成例を示すブロック図である。第1の実施形態の暗号化装置100のブロック図である図3と同様の処理部およびデータについては、図3と同一の符号を付し、説明は省略する。
暗号化装置500は、排他的論理和演算部1901l〜1910lと1901r〜1910rをさらに備える。
排他的論理和演算部1901lは、データ分割部109が出力したデータd109rとSubByte処理部112bが出力したデータd112blとを排他的加算した結果であるデータd1901lをShiftRow113blに入力する。
排他的論理和演算部1901rは、データ分割部109が出力したデータd109rとSubByte処理部112bが出力したデータd112brとを排他的加算した結果であるデータd1901rをShiftRow113brに入力する。
排他的論理和演算部1901lは、データ分割部109が出力したデータd109lとSubByte処理部112bが出力したデータd112blとを排他的加算した結果であるデータd1901lをShiftRow113blに入力しても良い。
このとき、排他的論理和演算部1901rは、データ分割部109が出力したデータd109lとSubByte処理部112bが出力したデータd112brとを排他的加算した結果であるデータd1901rをShiftRow113brに入力する。
排他的論理和演算部1901lは、データ分割部109が出力したデータd109lまたはデータd109rと、ShiftRow113blが出力したデータd113blとを排他的加算した結果であるデータd1901lをMixColumn114blに入力しても良い。
排他的論理和演算部1901rは、データ分割部109が出力したデータd109lまたはd109rと、ShiftRow113brが出力したデータd113brとを排他的加算した結果であるデータd1901rをMixColumn114brに入力しても良い。
排他的論理和演算部1902l〜1910lは、MixColumn114bl〜114jlが出力したデータd114bl〜d114jlまたはMixColumn114br〜114jrが出力したデータd114br〜d114jrと、SubByte処理部112c〜112kが出力したデータd112cl〜d112klとを排他的加算した結果であるデータd1902l〜d1910lをShiftRow113cl〜113klに入力する。
排他的論理和演算部1902r〜1910rは、MixColumn114bl〜114jlが出力したデータd114bl〜d114jlまたはMixColumn114br〜114jrが出力したデータd114br〜d114jrと、SubByte処理部112c〜112kが出力したデータd112cr〜d112krとを排他的加算した結果であるデータd1902r〜d1910rをShiftRow113cr〜113krに入力する。
排他的論理和演算部1902l〜1910lは、MixColumn114bl〜114jlが出力したデータd114bl〜d114jlまたはMixColumn114br〜114jrが出力したデータd114br〜d114jrと、ShiftRow113cl〜113klが出力したデータd113cl〜d113klとを排他的加算した結果であるデータd1902l〜d1910lをMixColumn114cl〜114jl、およびAddRoundKey111kに入力しても良い。
排他的論理和演算部1902r〜1910rは、MixColumn114bl〜114jlが出力したデータd114bl〜d114jlまたはMixColumn114br〜114jrが出力したデータd114br〜d114jrと、ShiftRow113cr〜113krが出力したデータd113cr〜d113krとを排他的加算した結果であるデータd1902r〜d1910rをMixColumn114cr〜114jr、およびデータ統合部110に入力しても良い。
(第6の実施形態)
図19は、第6の実施形態の暗号化装置6000の構成例を示すブロック図である。第1の実施形態の暗号化装置100のブロック図である図3と同様の処理部およびデータについては、図3と同一の符号を付し、説明は省略する。
暗号化装置6000は、マスク生成部2001を備え、マスク処理部2002とアンマスク処理部2003をさらに備える。
マスク生成部2001は、入力マスクd2012b〜d2012kと、入力マスクの分割データd2010b〜d2010k、および、入力マスクの分割データd2011b〜d2011kを生成する。入力マスクd2012b〜d2012kは、入力マスクの分割データd2010b〜d2010kとd2011b〜d2011kとを排他的加算した結果である。
マスク生成部2001は、出力マスクd2015b〜d2015kと、出力マスクの分割データd2013b〜d2013k、および、出力マスクの分割データd2014b〜d2014kを生成する。出力マスクd2015b〜d2015kは、出力マスクの分割データd2013b〜d2013kとd2014b〜d2014kとを排他的加算した結果である。
マスク生成部2001は、付替マスクd2016b〜d2016jを生成する。付替マスクd2016b〜d2016jは、入力マスクd2012c〜d2012kと出力マスクd2015b〜d2015jとを排他的加算した結果である。
マスク生成部2001は、入力マスクの分割データd2010bをマスク処理部107に供給し、入力マスクの分割データd2011bをマスク処理部2002に供給し、入力マスクd2012b〜d2012kをSubByte処理部112b〜112kに供給する。
マスク生成部2001は、入力マスクd2012b〜d2012kとして、入力マスクの分割データd2010b〜d2010kとd2011b〜d2011kとを連結したデータをSubByte処理部112b〜112kに供給しても良い。
マスク生成部2001は、出力マスクの分割データd2013kをアンマスク処理部2003に供給し、出力マスクの分割データd2014kをアンマスク処理部108に供給し、出力マスクd2015b〜d2015kをSubByte処理部112b〜112kに供給する。
マスク生成部2001は、出力マスクd2015b〜d2015kとして、出力マスクの分割データd2013b〜d2013kとd2014b〜d2014kとを連結したデータをSubByte処理部112b〜112kに供給しても良い。
マスク生成部2001は、付替マスクd2016b〜d2016jをマスク付替部115b〜115jに供給する。マスク生成部2001は、付替マスクd2016b〜d2016jとして、入力マスクの分割データd2010c〜d2010k、d2011c〜d2011kと、出力マスクの分割データd2013b〜d2013jとd2014b〜d2014jとを連結したデータを供給しても良い。
マスク処理部2002は、データ分割部109が出力したデータd109rと入力マスクの分割データd2011bとを排他的加算した結果d2002をSubByte処理部112bに入力する。
マスク処理部2002は、データ分割部109が出力したデータd109lと入力マスクの分割データd2011bとを排他的加算した結果d2002をAddRoundKey111aに入力しても良い。
マスク処理部2002は、マスク処理部107が出力したデータd107と入力マスクの分割データd2011とを排他的加算した結果d2002をデータ分割部109に入力しても良い。
アンマスク処理部2003は、ShiftRow113krが出力したデータd113krと出力マスクの分割データd2013kとを排他的加算した結果d2003をデータ統合部110に入力する。
アンマスク処理部2003は、AddRoundKey111kが出力したデータd111kと出力マスクの分割データd2013kとを排他的加算した結果d2003をデータ統合部110に入力しても良い。
アンマスク処理部2003は、データ統合部110が出力したデータd110と出力マスクの分割データd2013kとを排他的加算した結果d2003をアンマスク処理部108に入力しても良い。
SubByte処理部112bで、S−box変換をSと表記し、SubByte処理部112bの2つの入力データを排他的加算した結果をd2020bと表記すると、SubByte処理部112bの入出力データは、以下の(9)式の関係を満たす。
d112bl^d112br^d2015b
=S(d2020b^d2012b) ・・・(9)
(9)式を満たしていれば、上述の計算手順でなくても良い。
先に説明したとおり、マスク生成部2001が、SubByte処理部112bに入力マスクの分割データd2010bとd2011bを供給する場合には、SubByte処理部112bの入出力データは、以下の(10)式の関係を満たす。
d112bl^d112br^d2015b=S(d2020b^d2012b)
=S(d2020b^d2010b^d2011b) ・・・(10)
(10)式を満たしていれば、上述の計算手順でなくても良い。
同様に、マスク生成部2001が、SubByte処理部112bに出力マスクの分割データd2013bとd2014bを供給する場合には、SubByte処理部112bの入出力データは、以下の(11)式の関係を満たす。
d112bl^d112br^d2015b
=d112bl^d112br^d2013b^d2014b
=S(d2020b^d2012b) ・・・(11)
(11)式を満たしていれば、上述の計算手順でなくても良い。SubByte処理部112c〜112kに付いても同様に上記の関係が成り立つ。
マスク生成部2001が、マスク付替部115bに入力マスクの分割データd2010cとd2011cおよび出力マスクの分割データd2013bとd2014bを供給する場合には、マスク付替部115bの入出力データは、以下の(12)式の関係を満たす。
d115b=d114br^d2010c^d2011c^d2013b^d2014b ・・・(12)
(12)式を満たしていれば、上述の計算手順でなくても良い。マスク付替部115c〜115jに付いても同様に上記の関係が成り立つ。
以上説明したとおり、第1から第6の実施形態によれば、非線形変換を用いた暗号モジュールで、高次DPAを含む電力解析に耐性を持つ暗号化装置を提供することができる。すなわち、上記実施形態によれば、MESはマスク付きの暗号化処理の中間データを分割した複数のデータを入力として、マスクを付けたまま非線形変換を行い、正しい非線形変換結果を分割した複数のデータを出力することができる。これにより、暗号化処理の中間データと消費電力との相関が取り除かれ、電力解析に対する耐性を持つ。また、1回の暗号化処理で1種類のMESを用いた場合は、2次DPA対策への耐性を有しつつ、従来の2次DPA対策技術であるランダムマスク法に比較して回路規模、記憶容量、処理時間、および消費電力を削減することが可能になる。
次に、第1〜第6の実施形態にかかる暗号化装置のハードウェア構成について図20を用いて説明する。図20は、第1〜第6の実施形態にかかる暗号化装置のハードウェア構成を示す説明図である。
第1〜第6の実施形態にかかる暗号化装置は、CPU(Central Processing Unit)51などの制御装置と、ROM(Read Only Memory)52やRAM(Random Access Memory)53などの記憶装置と、ネットワークに接続して通信を行う通信I/F54と、HDD(Hard Disk Drive)、CD(Compact Disc)ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバス61を備えており、通常のコンピュータを利用したハードウェア構成となっている。
第1〜第6の実施形態にかかる暗号化装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
また、第1〜第6の実施形態にかかる暗号化装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、第1〜第6の実施形態にかかる暗号化装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
また、第1〜第6の実施形態のプログラムを、ROM等に予め組み込んで提供するように構成しても良い。
第1〜第6の実施形態にかかる暗号化装置で実行されるプログラムは、上述した各部を含むモジュール構成となっており、実際のハードウェアとしてはCPU51(プロセッサ)が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
なお、本発明の実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除しても良い。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。