(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0018】
(第1の実施形態)
以下、
図1〜
図7を参照して、暗号処理装置の第1の実施形態について説明する。以下では、AES(Advance Encryption Standard)を用いる暗号処理装置への適用例として説明する。なお、適用可能な暗号処理装置はAESを用いる暗号処理装置に限定されるものではなく、暗号処理において乗算を用いた線形処理を行う暗号処理装置に広く適用可能である。
【0019】
(AESの概要)
図1及び
図2に示されるように、暗号処理装置は、AES暗号方式を用いる。AESでは、まず1バイト単位での非線形な変換を行うSubBytes(以降、SBと表す)という処理を行う。続いて、1バイト単位で順序の入れ替えを行うShiftRows(以降、SRと表す)という処理を行う。続いて、4バイト単位で線形な変換を行うMixColumns(以降、MCと表す)という処理を行う。続いて、暗号鍵から生成される秘密データ(拡大鍵)との排他的論理和を行うAddRoundKey(以降、AKと表す)という処理を行う。すなわち、AESでは、これらの4つの処理(SB、SR、MC、AK)を繰り返し行う。
【0020】
繰り返しの順番は、まず初めに平文データに対してAKを行い、続いてSB、SR、MC、AKの順序を1ラウンドとして規定回数繰り返し、さらにSB、SR、AKを行った結果を暗号文として出力する。
【0021】
AESでは、暗号鍵のサイズとして16バイト(128ビット)、24バイト(192ビット)、32バイト(256ビット)のいずれかから選択可能である。そして、それぞれの暗号鍵のサイズに対して前記1ラウンドの繰り返しの規定回数が規定されている。すなわち、暗号鍵のサイズが16バイトでは10ラウンド、暗号鍵のサイズが24バイトでは12ラウンド、暗号鍵のサイズが32バイトでは14ラウンドと規定されている。
【0022】
AKで用いる秘密データは、図示しない鍵スケジュール部において暗号鍵を入力として出力される複数個の副鍵のことであり、拡大鍵と呼ばれる。
AESで行われるSB、SR、MC、AKのうち、SBのみ非線形変換であって、SR、MC、AKは線形変換である。SBにおける1バイト単位の変換は、S−boxと呼ばれる。
【0023】
S−boxは、非特許文献1の仕様で規定されており、例えば入力バイトXが「00」ならば出力バイトYは「63」、入力バイトXが「01」ならば出力バイトYは「7C」を出力する。以降では、このS−boxをY=S[X]と表す。
【0024】
また、MCは、中間値を4バイト毎に分割し、式(1)に示す行列演算を、多項式G(x)=x
8+x
4+x
3+x+1を法としたガロア体上の演算で行う。ガロア体は、有限個の元からなる体であって、四則演算が閉じている有限集合のことである。
【0025】
ここで、式(1)中の記号x
0〜x
3はそれぞれ入力の1バイトを表す。また、y
0〜y
3は出力の1バイトを表す。
【0026】
【数1】
MCでは、入力バイトの2倍や3倍のガロア体上の定数倍演算が含まれる。ここで、MCでは式(2)の関係がある。
【0027】
【数2】
すなわち、マスクで秘匿したままのデータに対してそのままMCを行うことでマスクによって秘匿された出力が得られる。また、出力時のマスクは、入力時のマスクに対してMCを行ったものとなる。
【0028】
以下では、AESのうち、特に暗号化のみを行う暗号処理装置を例として説明する。
(事前準備)
マスク値の候補(マスク候補値Ms)を、式(3)に示す4候補に限定した場合について説明する。マスク候補値Msは、全てのビットが1である符号語(ここではFF)を含む線形符号である。
【0029】
【数3】
これらのマスク候補値Msは、いくつかの候補を抽出して排他的論理和を計算した結果が必ず候補値となること、かつ各マスク候補値Msの反転値もまた候補値となることを条件として選択している。すなわち、マスク候補値Msは、線形符号であるため、いくつかの候補を抽出して排他的論理和を計算した結果が必ず候補値となる。また、マスク候補値Msは、全てのビットが1である符号語を含む線形符号であるため、各マスク候補値Msの反転値もまた候補値となる。
【0030】
この条件下では、マスクされた1バイトデータの1値のハミング重みや、マスクされた1バイトデータの2値のハミング距離の期待値が、マスク前のデータに依存せず4となる。このため、統計的な解析を行う差分電力解析(DPA:Differential Power Analysis)や相関電力解析(CPA:Correlation Power Analysis)といった解析が困難となる。
【0031】
式(4)〜(6)に示すように、S−boxを4つのマスク付テーブルS′1〜S′4として事前計算する。ここで、これらマスク付テーブルS′1〜S′4は、候補を限定したマスク値に応じて事前計算されたテーブルである。
【0032】
【数4】
例えば、36でマスクされたデータをS−boxする場合には、テーブルS′2を使って変換すると、S−boxした上でFFをマスクしたデータが得られる。
【0033】
(暗号化手順)
まず初めに、
図3に示されるように、平文データP(0)〜P(15)とマスク候補値Msからランダムに選択したマスク値Mask(0)〜Mask(15)との排他的論理和を計算する。続いて、計算したものと拡大鍵バイトK(0)〜K(15)との排他的論理和を計算して、結果M(0)〜M(15)を出力する。
【0034】
このとき、平文データP(0)〜P(15)は、16バイトの平文データをバイト単位で表したものであり、平文データP(0)を最上位バイト(MSB:Most Significant Byte)側とする。
【0035】
次に、
図4に示されるように、各中間値バイトのマスク値Mask(0)〜Mask(15)の値に応じて、参照するテーブルを決定する。すなわち、マスク値Mask(i)の値に応じて使うテーブルを選択する。また、使ったテーブルに応じてマスク値Mask′(i)の値が決まる。ここで、iは16バイトの各バイトを示し、i=0〜15である。
【0036】
例えば、式(8)であれば、結果M(0)を入力バイトとして、テーブルS′2を用いて変換する。
【0037】
【数5】
この結果をM′(0)とすると、この中間値M′(0)はテーブルS′2の定義から、マスク値FFでマスクされたものとなる。この新たなマスク値をMask′(0)とする。他のバイトも同様に変換を行う。
【0038】
SBに続いて、SRとMCとを行う。MCの出力バイトを、M″(0)〜M″(15)と表し、それぞれのバイトのマスク値をMask″(0)〜Mask″(15)と表す。出力バイトM″(0)、M″(1)、M″(2)、M″(3)の4バイトは、SRにより入力バイトM′(0)、M′(5)、M′(10)、M′(15)を用いて計算する。
【0039】
(比較例)
式(2)の関係から、マスクされた出力バイトM″(0)とそのマスク値Mask″(0)とは、それぞれ式(9)及び式(10)によって計算される。
【0040】
【数6】
ここで、式(10)の計算過程では、入力バイトM′(0)の2倍演算の結果である2M′(0)の中間値と入力バイトM′(5)の3倍演算の結果である3M′(5)の中間値とを計算する必要がある。この入力バイトM′(0)の2倍演算の結果である2M′(0)のマスク値は、2Mask′(0)で計算され、その集合Ms′は式(11)となる。
【0041】
【数7】
集合Ms′からランダムに選択した値でマスクされた1バイトデータの1値のハミング重みは、マスク前のデータ値に依存して変動するため、統計的な解析を行う差分電力解析(DPA)や相関電力解析(CPA)といった解析が成立する恐れがある。
【0042】
(実施例)
暗号処理装置は、マスク値Mask′(0)でマスクされたMCの入力バイトM′(0)に対してガロア体上の2倍演算を下記手順で行う。
【0043】
図5に示されるように、まず、暗号処理装置は、ランダムな1バイト値Rd(0)を生成する(ステップS1)。このランダムな1バイト値Rd(0)は、候補を限定しない値である(00,01,02,…,FE,FF)の候補からランダムに選択した値である。
【0044】
次に、暗号処理装置は、入力バイトM′(0)とランダムな1バイト値Rd(0)との排他的論理和を計算する(ステップS2)。ここで、入力バイトM′(0)のマスク値Mask′(0)は、候補が限定されたマスク値であって、(00,36,C9,FF)のいずれかの値である。また、ステップS2の結果A2のマスク値は、ランダムな1バイト値Rd(0)とマスク値Mask′(0)とを排他的論理和した値(Rd(0)(+)Mask′(0))である。この排他的論理和した値(Rd(0)(+)Mask′(0))は、候補を限定しない値(00,01,02,…,FE,FF)のいずれかと、候補が限定された値(00,36,C9,FF)のいずれかとの排他的論理和である。この結果は、(00,01,02,…,FE,FF)のいずれかとなり、すなわち候補を限定しない値(ランダムな1バイト値)となる。なお、「(+)」は、排他的論理和を示している。
【0045】
続いて、暗号処理装置は、ステップS2の結果A2とマスク値Mask′(0)との排他的論理和を計算する(ステップS3)。ここで、ステップS3の結果A3のマスク値は、ランダムな1バイト値Rd(0)である。
【0046】
暗号処理装置は、ステップS3の結果A3に対して、ガロア体上の2倍演算を行う(ステップS4)。ここで、ステップS4の結果A4のマスク値は、ランダムな1バイト値Rd(0)をガロア体上の2倍演算した値(2・Rd(0))である。
【0047】
暗号処理装置は、ステップS4の結果A4と集合Msからランダムに選んだ値Mask′_d(0)との排他的論理和を計算する(ステップS5)。ここで、ステップS5の結果A5のマスク値(2・Rd(0)(+)Mask′_d(0))は、ステップS2の結果A2のマスク値と同様に、ランダムな1バイト値である。
【0048】
暗号処理装置は、ランダムな1バイト値Rd(0)に対して、ガロア体上の2倍演算する(ステップS6)。
暗号処理装置は、ステップS5の結果A5とステップS6の結果A6との排他的論理和を計算する(ステップS7)。ここで、ステップS7の結果A7のマスク値は、候補が限定されたマスク値Mask′_d(0)である。この候補が限定されたマスク値Mask′_d(0)は、(00,36,C9,FF)のいずれかである。ステップS7で得られた結果A7を2M′(0)とする。
【0049】
この手順で得られる結果2M′(0)は、マスク値Mask′_d(0)でマスクされた値となる。またこの計算過程では、中間値を秘匿するマスク値が、候補が限定されたマスク値Mask′(0)と、候補を限定しないマスク値Mask′_d(0)とのいずれかであって、偏りのある集合となることはない。
【0050】
同様に、マスク値Mask′(5)でマスクされたMCの入力バイトM′(5)に対してガロア体上の3倍演算を下記手順で行う。
図6に示されるように、まず、暗号処理装置は、ランダムな1バイト値Rt(5)を生成する(ステップS11)。このランダムな1バイト値Rt(5)は、候補を限定しない値である(00,01,02,…,FE,FF)の候補からランダムに選択した値である。
【0051】
次に、暗号処理装置は、入力バイトM′(5)とランダムな1バイト値Rt(5)との排他的論理和を計算する(ステップS12)。ここで、入力バイトM′(5)のマスク値は、候補が限定されたマスク値Rt(5)とマスク値Mask′(5)とを排他的論理和した値(Rt(5)(+)Mask′(5))である。この排他的論理和した値(Rt(5)(+)Mask′(5))は、ステップS2の結果A2のマスク値と同様に、候補を限定しない値(ランダムな1バイト値)となる。
【0052】
暗号処理装置は、ステップS12の結果A12とMask′(5)との排他的論理和を計算する(ステップS13)。ここで、ステップS13の結果A13のマスク値は、ランダムな1バイト値Rt(5)である。
【0053】
暗号処理装置は、ステップS13の結果A13に対して、ガロア体上の3倍演算を行う(ステップS14)。ここで、ステップS13の結果A13のマスク値は、ランダムな1バイト値Rt(5)をガロア体上の3倍演算した値(3・Rt(5))である。
【0054】
暗号処理装置は、ステップS14の結果A14と集合Msからランダムに選んだ値Mask′_t(5)との排他的論理和を計算する(ステップS15)。ここで、ステップS15の結果A15のマスク値(3・Rt(5)(+)Mask′_t(5))は、ランダムな1バイト値である。
【0055】
暗号処理装置は、ランダムな1バイト値Rt(5)に対して、ガロア体上の3倍演算する(ステップS16)。
暗号処理装置は、ステップS15の結果A15とステップS16の結果A16との排他的論理和を計算する(ステップS17)。ここで、ステップS17の結果A17のマスク値は、候補が限定されたマスク値Mask′_t(5)である。この候補が限定されたマスク値Mask′_t(5)は、(00,36,C9,FF)のいずれかである。ステップS17の結果A17を3M′(5)とする。
【0056】
この手順で得られる結果3M′(5)は、マスク値Mask′_t(5)でマスクされた値となる。またこの計算過程では、中間値を秘匿するマスク値が、候補が限定されたマスク値Mask′(5)と、候補を限定しないマスク値Mask′_t(5)とのいずれかであって、偏りのある集合となることはない。
【0057】
図7に示されるように、暗号処理装置は、計算した結果である入力バイト2M′(0)、3M′(5)を用いて、MCの出力のうちの1バイトである出力バイトM″(0)を式(12)にて計算する。また、暗号処理装置は、出力バイトM″(0)のマスク値であるMask″(0)を式(13)にて計算する。
【0058】
【数8】
暗号処理装置は、マスク値Mask′_d(0)、Mask′_t(5)、Mask′(10)、Mask′(15)は全て集合Msの要素である。集合Msは線形符号となるように選択したので、式(12)の計算過程でのマスク値の変化もまた必ず集合Msの要素である。
【0059】
従って、差分電力解析(DPA)や相関電力解析(CPA)といった解析を困難とすることができる。
以上では、入力バイトM′(0)の2倍演算と入力バイトM′(5)の3倍演算とを例として説明したが、SBの出力の任意の各バイトM′(i)に対して、同様の手順で2倍、3倍を計算し、MCの出力を計算することができる。残りの処理は、AK、SB、SR、MCで構成されているため、同様の手順を繰り返し、最終的な出力の前にマスクを外すことで、AESの処理を完了することができる。
【0060】
以上説明したように、第1の実施形態によれば、以下の効果を奏することができる。
(1)ガロア体上の定数倍演算の前段におけるマスク値は候補が限定されていない。このため、ガロア体上の定数倍演算の後段でも候補が限定されていないマスク値でマスクされることとなる。よって、線形変換におけるマスク値変化による秘匿性の低下を防ぐことができる。
【0061】
(第2の実施形態)
以下、
図8を参照して、暗号処理装置の第2の実施形態について説明する。この実施形態の暗号化装置は、2のべき乗倍のみを計算して、その結果から必要なもののみの排他的論理和を計算する点が上記第1の実施形態と異なっている。以下、第1の実施形態との相違点のみを説明する。
【0062】
第1の実施形態では、MCにおける2倍演算と3倍演算とのマスクを、それぞれ独立で行うようにした。しかしながら、AESの復号化を行う場合には、9倍、11倍、13倍、14倍を行う必要があり、それぞれを独立で行うことで処理効率が低下する可能性がある。
【0063】
ところで、ガロア体上の定数倍は線形変換であり、式(14)の関係がある。
【0064】
【数9】
そこで、ガロア体上の任意の定数倍を行いたい場合には、2のべき乗倍(2倍、4倍、8倍・・・)のみを計算して、その結果から必要なもののみの排他的論理和を計算すれば求められる。
【0065】
図8に示されるように、暗号処理装置は、入力バイトM′(0)とランダムな1バイト値R(0)との排他的論理和を計算する(ステップS21)。ここで、入力バイトM′(0)のマスク値は、Mask′(0)である。
【0066】
暗号処理装置は、ステップS21の結果とマスク値Mask′(0)との排他的論理和を計算する(ステップS22)。暗号処理装置は、ステップS22の結果に対して2倍演算する(ステップS23)。
【0067】
暗号処理装置は、ステップS23の結果と、集合Msからランダムに選択されたマスク値Mask′_d(0)との排他的論理和を計算する(ステップS24)。暗号処理装置は、ランダムな1バイト値R(0)に対して2倍演算する(ステップS25)。暗号処理装置は、ステップS24の結果とステップS25の結果との排他的論理和を計算する(ステップS26)。ここで、ステップS26の結果2M′(0)のマスク値は、Mask′_d(0)である。
【0068】
暗号処理装置は、ステップS23の結果に対して2倍演算する(ステップS27)。暗号処理装置は、ステップS27の結果と、集合Msからランダムに選択されたマスク値Mask′_q(0)との排他的論理和を計算する(ステップS28)。
【0069】
暗号処理装置は、ステップS25の結果に対して2倍演算する(ステップS29)。暗号処理装置は、ステップS28の結果とステップS29の結果との排他的論理和を計算する(ステップS30)。ここで、ステップS30の結果4M′(0)のマスク値は、Mask′_q(0)である。
【0070】
暗号処理装置は、ステップS27の結果に対して2倍演算する(ステップS31)。暗号処理装置は、ステップS31の結果と、集合Msからランダムに選択されたマスク値Mask′_o(0)との排他的論理和を計算する(ステップS32)。
【0071】
暗号処理装置は、ステップS29に対して2倍演算する(ステップS33)。暗号処理装置は、ステップS32の結果とステップS33の結果との排他的論理和を計算する(ステップS34)。ここで、ステップS34の結果8M′(0)のマスク値は、Mask′_o(0)である。
【0072】
以上説明したように、第2の実施形態によれば、第1の実施形態の効果に加えて、以下の効果を奏することができる。
(2)2のべき乗倍(2倍、4倍、8倍、…)のみを計算して、その結果から必要なもののみの排他的論理和を行うことでマスク値が求められる。このため、MCにおいて9倍、11倍、13倍、14倍のそれぞれを独立で計算するよりも処理効率を向上させることができる。
【0073】
(第3の実施形態)
以下、
図9を参照して、暗号処理装置の第3の実施形態について説明する。この実施形態の暗号化装置は、ガロア体の定数倍演算時にランダムな値の生成を1度だけに限定し、このランダムな値を他でも再利用する点が上記第1の実施形態と異なっている。以下、第1の実施形態との相違点のみを説明する。
【0074】
第1の実施形態では、ガロア体の定数倍演算を行うバイト毎に乱数を生成した。しかしながら、第3の実施形態は、ガロア体の定数倍演算時にランダムな値の生成を1度だけに限定し、このランダムな値を他でも再利用する。
【0075】
平文データからSBの出力M′(0)〜M′(15)と、そのマスク値Mask′(0)〜Mask′(15)を生成する過程は、第1の実施例と同じである。
図9に示されるように、暗号処理装置は、MCに含まれるガロア体の2倍演算を行うにあたって、ランダムな1バイト値Rを生成する(ステップS41)。
【0076】
暗号処理装置は、SBの出力M′(0)〜M′(15)それぞれと、ランダムな1バイト値Rとの排他的論理和を計算する(ステップS42−0,S42−1,S42−2,…)。暗号処理装置は、ステップS42の各バイトの結果に対して、ガロア体上の2倍演算を行う(ステップS43−0,S43−1,S43−2,…)。
【0077】
暗号処理装置は、ステップS43の各バイトの結果と、バイト毎に独立に集合Msから選択したマスク値Mask′_d(0)〜Mask′_d(15)との排他的論理和を計算する(ステップS44−0,S44−1,S44−2,…)。
【0078】
暗号処理装置は、マスク値Mask′(0)〜Mask′(15)とランダムな1バイト値Rとの排他的論理和をそれぞれ計算する(ステップS45−0,S45−1,S45−2,…)。暗号処理装置は、ステップS45の結果に対してガロア体上の2倍演算を行う(ステップS46−0,S46−1,S46−2,…)。
【0079】
暗号処理装置は、ステップS44の各バイトの結果と、ステップS46の各バイトの結果との排他的論理和を計算する(ステップS47)。ステップS47の結果を、2M′(0)〜2M′(15)とする。
【0080】
上記手順で計算した結果2M′(0)〜2M′(15)は、それぞれステップS44で使用したマスク値Mask′_d(0)〜Mask′_d(15)によって秘匿された値となる。
【0081】
このように、ランダムな1バイト値の生成をランダムな1バイト値Rだけに限定することができる。このため、ソフトウェアで乱数を生成する場合等の乱数生成負荷が高い場合に、全体の処理負荷を軽減することができる。
【0082】
以上説明したように、第3の実施形態によれば、第1の実施形態の効果に加え、以下の効果を奏することができる。
(3)暗号化毎に生成した1値のみをマスク値として、ガロア体上の定数倍演算の全てで同一の値(R)を使用する。このため、全て異なる値を使用するよりも処理効率を向上させることができる。
【0083】
なお、上記実施形態は、これを適宜変更した以下の形態にて実施することもができる。
・上記各実施形態では、マスク値の候補を4値としたが、これらに限らずすべてのビットが1である符号語を含む線形符号であれば、4値よりも大きい2の累乗数である、8,16,32,64,128,256でも良い。なお、上記各実施形態で示したAESの場合は、8値、16値、64値、128値のものが採用可能である。
【0084】
・上記第3の実施形態では、ランダムな1バイト値Rの共有範囲を全MCで共通とした。しかしながら、ランダムな1バイト値Rの共有範囲を特定の数バイトに限定することも可能である。