【文献】
Kavun, E. B. and Yalcin, T.,A Lightweight Implementation of Keccak Hash Function for Radio-Frequency Identification Applications,Lecure Notes in Computer Science,2010年 6月,Vol.6370,p.258-269
【文献】
Bertoni, G. et al.,KECCAK implementation overview,[online],インターネット,2012年 5月29日,Ver. 3.2,[2016年8月9日検索],URL,http://keccak.noekeon.org/files.html
【文献】
Kerckhof, S. et al.,Compact FPGA Implementations of the Five SHA-3 Finalists,Lecure Notes in Computer Science,2011年 9月,Vol.7079,p.217-233
【文献】
Kaps, J.-P. et al.,Lightweight Implementations of SHA-3 Candidates on FPGAs,Lecture Notes in Computer Science,2011年12月,p.270-289
【文献】
San, I. and At, N.,Compact Keccak Hardware Architecure for Data Integrity and Authentication on FPGAs,Information Security Journal: A Global Perspective,2012年 8月16日,Vol.21 No.5,p.231-242
【文献】
Latif, K. et al.,Novel Arithmetic Architecture for High Performance Implementation of SHA-3 Finalist Keccak on FPGA P,Lecture Notes in Computer Science,2012年 3月,Vol.7199,p.372-378
(58)【調査した分野】(Int.Cl.,DB名)
前記θ1処理手段、前記θ2処理手段、前記ρ処理手段、前記χ処理手段、前記ι処理手段は、lane単位で処理することを特徴とする請求項1乃至5の何れか1項に記載のハッシュ値生成装置。
前記θ手段、前記ρ手段、前記π手段、前記χ手段、前記ι手段を用いて、前記ラウンド処理を実行して得られたハッシュ値を出力する出力手段を有することを特徴とする請求項1乃至7の何れか1項に記載のハッシュ値生成装置。
前記第3の処理手段は、x軸方向に1ビット、y軸方向にnビット、z軸方向に1ビットの構造であるデータが25個、保持手段に保持されてから、処理を行うことを特徴とする請求項10に記載のハッシュ値生成装置。
前記保持手段に前記x軸方向に1ビット、y軸方向にnビット、z軸方向に1ビットの構造であるデータを保持している間に、前記第6の処理手段の処理が行われることを特徴とする請求項11に記載のハッシュ値生成装置。
前記第7の処理手段は、前記第3の処理手段の処理を考慮したテーブルを用いて処理を行うことを特徴とする請求項10乃至12の何れか1項に記載のハッシュ値生成装置。
前記第2の処理手段は、前記第3の処理手段の処理を考慮したテーブルを用いて処理を行うことを特徴とする請求項10乃至13の何れか1項に記載のハッシュ値生成装置。
前記θ手段、前記ρ手段、前記π手段、前記χ手段、前記ι手段を用いて、前記ラウンド処理を実行して得られたハッシュ値を出力する出力手段を有することを特徴とする請求項10乃至14の何れか1項に記載のハッシュ値生成装置。
【発明を実施するための形態】
【0010】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【0011】
(第1実施形態)
本発明に係るハッシュ値生成装置の第1実施形態として、SHA−3(KECCAKアルゴリズム)のハッシュ値を生成する装置を例に挙げて以下に説明する。なお、以下の説明において、具体的なデータ長やビット値が示されている場合があるが、本発明はこれらの具体的な値に限定されるものでは無い。
【0012】
まず、KECCAKアルゴリズムについて説明する。なお、より詳細な仕様については、背景技術で示した非特許文献1に記載されている。
【0013】
図1(a)は、KECCAKアルゴリズムの全体の概要を示す図である。101は、メッセージブロック(m
1〜m
t)を表している。メッセージブロック(m
1〜m
t)は、ハッシュ値生成の対象となる入力メッセージを1024ビット毎に分割することにより生成される。
【0014】
102と103は初期値を表しており、ここでは初期値は全ビットが0である。ここでは、初期値の全ビットが0である例で説明するが、これに限定されない。また、初期値102の長さは、上述のメッセージブロックの長さと同じ1024ビットであり、初期値102と初期値103の長さの合計は1600ビットである。104は、ビット単位の排他的論理和(XOR)演算部を表している。つまり、XOR演算部104は、2つの1024ビットの入力データに対し、各ビットで排他的論理和を計算した結果を1024ビットのデータとして出力する。
【0015】
105は、置換関数(permutation function)であるKECCAK−fを表しており、2つの入力データを受け取り、2つのデータを出力する。105の詳細については
図1(b)を参照して後述する。106は、切り取り部を表しており、1024ビットの入力データから、必要なサイズだけ切り出して、出力する。107は、このアルゴリズムの計算結果である暗号学的ハッシュ値(すなわち、ハッシュ値)を表している。
【0016】
図1(b)は、置換関数であるKECCAK−f105の概要を説明する図である。201はラウンド処理Rを表しており、24回実行される。ラウンド処理Rの詳細は後述する。202と203は、入力データを表している。入力データ202の長さは、1024ビットである。また、入力データ202と入力データ203の長さの合計は、1600ビットである。入力データ202及び入力データ203の2つが結合されて、ラウンド処理R201に入力される。204と205は、出力データを表している。出力データ204の長さは、1024ビットである。また、出力データ204と出力データ205の長さの合計は、1600ビットである。
【0017】
図1(c)は、ラウンド処理R201の概要を説明する図である。上述したように、ラウンド処理R201においては、入力データと出力データの長さは共に1600ビットである。ラウンド処理R201で、入力データに対し、後述する5つのステップの処理(θ処理301,ρ処理302,π処理303,χ処理304,ι処理305)を順に適用して出力データを生成する。
【0018】
以下では、KECCAKアルゴリズムのラウンド処理で用いられるデータ構造及び上述の5つのステップの詳細について説明する。
【0019】
図2(a)は、ラウンド処理R201の入出力時のデータ構造である”state”を説明する図である。上述したように入力データと出力データはともに1600ビットである。そして、当該1600ビットのデータは、3次元配列において、幅(x軸方向)5ビット、高さ(y軸方向)5ビット、奥行き(z軸方向)64ビットの直方体として表される。この直方体のデータ構造を”state”と呼ぶ。なお、詳細は、
図2(f)を参照して後述するが、直方体として表されるstate構造に対して、1600ビットのデータは、z軸方向、x軸方向、y軸方向の順に割り当てられる。
【0020】
図2(b)は、データ構造”plane”を説明する図である。plane構造は、x−z平面に平行な、幅5ビット、高さ1ビット、奥行き64ビットの平面構造として表される。つまり、上述のstate構造は、plane構造をy軸方向に5個重ねたものとして考えることができる。
【0021】
図2(c)は、データ構造”sheet”を説明する図である。sheet構造は、y−z平面に平行な、幅1ビット、高さ5ビット、奥行き64ビットの平面構造として表される。つまり、上述のstate構造は、sheet構造をx軸方向に5個横に並べたものとして考えることができる。
【0022】
図2(d)は、データ構造”lane”を説明する図である。lane構造は、z軸に平行な、幅1ビット、高さ1ビット、奥行き64ビットの直線構造として表される。つまり、上述のstate構造は、lane構造をx−y平面に沿って25個寄せ集めたものとして考えることができる。
図2(f)は、1個のstate構造を構成する25個のlaneの順番を表す図である。
【0023】
図2(e)は、データ構造”column”を説明する図である。column構造は、y軸に平行な、幅1ビット、高さ5ビット、奥行き1ビットの直線構造として表される。つまり、上述のsheet構造は、column構造をz軸方向に64個並べたものとして考えることができる。
【0024】
なお、第1実施形態では、入力データが1600ビットである場合について説明するが、本発明はこれに限定されるものでは無い。また、state構造のデータを、幅(x軸方向)5ビット、高さ(y軸方向)5ビット、奥行き(z軸方向)64ビットの直方体のデータ構造として扱う例について説明するが、これに限定されない。例えば、入力データが800ビットであり、state構造のデータを、幅5ビット、高さ5ビット、奥行き32ビットの直方体のデータ構造として扱ってもよい。
【0025】
また、plane構造、sheet構造、lane構造、column構造は、state構造の幅(x軸方向)、高さ(y軸方向)、奥行き(z軸方向)の各ビット数に応じて変更される。すなわち、state構造のデータが、x軸方向にmビット、y軸方向にnビット、z軸方向にsビットである場合、plane構造は、x軸方向にmビット、y軸方向に1ビット、z軸方向にsビットである平面構造である。sheet構造は、x軸方向に1ビット、y軸方向にnビット、z軸方向にsビットである平面構造である。lane構造は、x軸方向に1ビット、y軸方向に1ビット、z軸方向にsビットの直線構造である。column構造は、x軸方向に1ビット、y軸方向にnビット、z軸方向に1ビットの直線構造である。
【0026】
次に、KECCAK−f105に入力される入力データ202及び入力データ203から、1回目のラウンド処理R201の入力データを作成する方法について説明する。まず、入力データ202及び入力データ203を順に連結して、1600ビットのデータブロックを生成する。次に、1600ビットのデータを、64ビット毎に分割し、25個のlaneを生成する。最後に、25個のlaneを、
図2(f)に示す番号順にx−y平面に沿って配列し1個のstateとして組み上げる。このようにして、生成したstate構造がラウンド処理R201に入力されることになる。なお、24回目のラウンド処理R201の出力データから、出力データ204及び出力データ205を生成する方法についても同様であるため説明は省略する。
【0027】
次に、ラウンド処理R201を構成する5つのステップ(ステップθ、ステップρ、ステップπ、ステップχ、ステップι)の処理について説明する。なお、各ステップにおいて、入力データと出力データのデータ構造は、state構造である。
【0028】
図3(a)は、ステップθの処理(θ処理301)を説明する図である。ステップθは、各ビットに対して近傍の2つのcolumnの和を加える処理である。より具体的には、出力stateの各ビットは、次のように計算される。入力stateのうち、”同じ場所にあるビットの値”と、”x軸方向で−1の場所にあるcolumnのビットの和”と、”x軸方向で+1かつz軸方向で−1の場所にあるcolumnのビットの和”との3つ値の和として計算される。ここで、和とは、GF(2)上での和のことであり、排他的論理和の演算と同一の結果になる。式で書くと、次のようになる。
【0030】
ここで、xは0〜4、yは0〜4、zは0〜63である。
【0031】
図3(b)は、端の部分(例えばx=0)のビットを求める場合におけるステップθの処理を説明する図である。x=0のビットを求めたい場合、”x軸方向で−1の場所にあるcolumn”は、stateの反対側、つまり”x=4の場所にあるcolumn”に相当する。このように、stateからはみ出す座標については、stateの反対側の位置になる。つまり、座標値は同一state内で循環シフトする。このルールは、x座標、y座標、z座標の何れも同じであり、また、他の4つのステップでも同様である。
【0032】
図4は、ステップρの処理(ρ処理302)を説明する図である。ステップρは、z軸方向に各ビットの値をシフトする処理である。より具体的には、
図4(a)に示すように、stateの各lane内の値を、指定されたビットだけz方向に循環シフトし出力する。各laneにおいてシフトするビット数は、予め定められており、
図4(b)に示している数字の通りである。尚、ρ処理を実行するために、予め、保持部に、
図4(c)に示すような、シフト量を示すテーブルを保持しておき、保持しているテーブルを用いて、ρ処理を実行する。
【0033】
図5は、ステップπの処理(π処理303)を説明する図である。ステップπは、x−y平面(”slice”とも呼ばれる)内での各ビットの値の入れ替えを行う処理、つまり、同一state内の25個のlaneを入れ替える処理を行う。より具体的には、入力stateの各laneに対し
図5(a)の上段に示すように番号をふった場合、出力stateは下段に示すようになる。尚、π処理を実行するために、予め、保持部に、
図5(b)に示すような、入替先を示すテーブルを保持しておき、保持しているテーブルを用いて、π処理を実行する。
【0034】
図6は、ステップχの処理(χ処理304)を説明する図である。ステップχは、x軸方向(”row”とも呼ばれる)のビット列内での変換を行う処理であり、出力rowの各ビットの値は、同一の入力rowの3つのビットに基づき導出される。より具体的には、出力rowの各ビットの値は、入力rowの各ビットに対し、x軸方向で+1の場所にあるビットが0、かつ、x軸方向で+2の場所にあるビットが1の場合にビットの値が反転するように設定される。
【0035】
図7は、ステップιの処理(ι処理305)を説明する図である。ステップιは、各ビットにラウンド定数を加える処理である。また、
図8は、ステップιにおけるラウンド定数を示す図である。ステップιは、x=y=0のlaneのビット列に対して、ラウンド毎に予め定められたラウンド定数(64ビット値)との排他的論理和(XOR)を適用する。具体的には、x=y=0のlaneの64ビット値(z=63のビットをMSB、z=0のビットをLSBとする)と、
図8に示されるラウンド定数とのビット毎の排他的論理和を計算する。そして、その結果を、出力stateにおけるx=y=0のlaneのビット列として設定する。
【0036】
上述した、各ステップ(ステップθ,ステップρ,ステップπ,ステップχ,ステップι)の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
【0037】
・ステップθは、state内の各laneの計算において、x軸方向に関して−1のsheetと+1のsheetのデータを使用する。そのため、最初の3つ分のsheetが完全に揃う時、つまり、25個のlaneのうち23個のlaneを前段の処理から受け取った時、ステップθの処理を開始することができる。
【0038】
・ステップρは、lane毎に独立した計算である。そのため、前段(ステップθ)の計算結果が1個のlane分出力された時点で、ステップρの処理を開始することができる。
【0039】
・ステップπは、state内の各laneを入れ替える。そのため、前段(ステップρ)の計算結果が1個のstate全体、すなわち25個のlane分出力された時点で、ステップπの処理を開始することができる。
【0040】
・ステップχは、state内の各laneの計算において、x軸方向で+1のlane及びx軸方向で+2のlaneを使用する。そのため、3個目のlaneのデータを受け取った時点で、ステップχの処理を開始することできる。
【0041】
・ステップιは、lane毎に独立した計算である。そのため、前段(ステップχ)の計算結果が1個のlane分出力された時点で、ステップιの処理を開始することができる。
【0042】
すなわち、ステップθ及びステップπ及びステップχにおいては、前段のステップの計算結果がそれぞれ23個、25個、3個のlane分出力されるまで、処理を開始することができない。このように、特にステップθ及びステップπの2処理の実行開始は、前段の処理開始から長い時間待った後でなければならない。
【0043】
つまり、ステップθとステップπのどちらかの開始時間を早めることができれば、スループットが向上する。しかし、KECCAKアルゴリズムの仕様と同一の演算順序では早めることができない。そのため、スループットを向上するためには、演算順序をKECCAKアルゴリズムとは別のものに変更する必要がある。
【0044】
次に、ラウンド処理R´901について説明する。ラウンド処理R´901は、本実施形態で用いる処理であり、ラウンド処理R201と同じ結果になるように設計されているが、KECCAKアルゴリズムの仕様とは処理内容が異なる。
【0045】
図9(a)は、ラウンド処理R´901の概要を説明する図である。ラウンド処理R´901は、処理結果がラウンド処理R201と同じになるように設計されている。ラウンド処理R´901は、入力データに対し、6つのステップの処理(θ1処理902、π処理903、θ2処理904、ρ´処理905、χ処理906、ι処理907)を適用して出力データを生成する。
【0046】
ここで、π処理903、χ処理906、ι処理907は、それぞれ、ラウンド処理R201におけるπ処理303、χ処理304、ι処理305と、処理は同じである。ρ´処理905は、ラウンド処理R201におけるρ処理302と同じように、z軸方向に各ビットをシフトする処理であるが、シフトするビット数が異なる。θ1処理902とθ2処理904は、ラウンド処理R201におけるθ処理301の処理を分離したものである。
【0047】
ラウンド処理R´901内の処理のうち、π処理とχ処理とι処理はラウンド処理R201内のものと同じ処理であるため、説明は省略する。以下では、ρ´処理、θ1処理、θ2処理について説明する。
【0048】
図10(a)は、ステップρ´の処理(ρ´処理905)を説明する図である。ステップρ´は、ステップρと同様に、z軸方向に各ビットの値を循環シフトする処理である。ただし、各laneにおいて循環シフトするビット数はステップρと異なり、
図10(b)に示している数字の通りである。尚、ρ´処理を実行するために、予め、保持部に、
図10(c)に示すような、シフト量を示すテーブルを保持しておき、保持しているテーブルを用いて、ρ´処理を実行する。このテーブルは、π処理を考慮したテーブルである。詳細は後述する。
【0049】
ここで、ラウンド処理R´901の処理結果とラウンド処理R201の処理結果が同じであることを説明するために、まず、ラウンド処理R201の処理結果と、ラウンド処理R´´911の処理結果が同じであることを説明する。
【0050】
図9(b)は、ラウンド処理R´´911の図である。ラウンド処理R´´911は、入力データに対し、5つのステップの処理(θ処理912、π処理913、ρ´処理915、χ処理916、ι処理917)を適用して出力データを生成するとする。ここで、θ処理912、π処理913、χ処理916、ι処理917は、ラウンド処理R201におけるθ処理301,π処理303,χ処理304,ι処理305と、それぞれ同じ処理である。ρ´処理915は、ラウンド処理R´901におけるρ´処理905と同じ処理である。
【0051】
ラウンド処理R201とラウンド処理R´´911を比較すると、ラウンド処理R201では、ρ処理302、π処理303の順に実行するのに対し、ラウンド処理R´´911では、π処理913、ρ´処理915の順で実行する点が異なる。
【0052】
ここで、ラウンド処理R201における、ステップρは、lane毎に決められたルールで、z軸方向にシフトするステップで、ステップπは、各laneを入れ替えるステップである。それに対して、ラウンド処理R´´911では、各laneを入れ替えるステップ(ステップπの処理)を先に行い、その後、入替処理を考慮したlane毎に決められたルールで、z軸方向にシフトするステップ(ステップρ´の処理)を行う。つまり、ラウンド処理R´´911では、ステップπを先に行うが、ステップρ´で、z軸方向にシフトするシフト量を、ステップπの処理を考慮して変更することで、ラウンド処理R´´911の処理結果とラウンド処理R201の処理結果が同じになる。
【0053】
図10(c)は、ステップρ´を行う際に用いる各laneのシフト量を示すテーブルである。
【0054】
図10(c)に示しているテーブルの生成方法について具体的に解説する。まず、ラウンド処理R201について考える。ラウンド処理R201では、ρ処理302とπ処理303を順に行う。
図4(b)に示している数字は、ステップρにおけるシフト量であり、たとえば、x=0,y=4の位置のlaneのシフト量は18bitであることを表している。次に、π処理によるlaneの入れ替えを、
図5を使って確認すると、x=0,y=4の位置のlaneは、x=4,y=2の位置に移動する。
【0055】
次に、ラウンド処理R´´911について考える。ラウンド処理R´´911では、π処理913とρ´処理915を順に行う。ρ´処理の前にπ処理が行われているので、ρ´処理において18bitシフトしなければならないlaneは、x=4,y=2の位置にあるlaneとなる。よって、
図10(b)に示している数字の、x=4,y=2の位置にある数字は、18となる。他のlaneのシフト量も、同様にして求めることで、
図10(b)に示している数字となる。
【0056】
つまり、
図10(c)が示す、ステップρ´を行う際の各laneのシフト量を示すテーブルは、π処理の入替処理を考慮したテーブルである。
【0057】
次に、ラウンド処理R´´911の処理結果とラウンド処理R´901の処理結果が同じであることを説明する。
【0058】
ここで、π処理903、ρ´処理905、χ処理906、ι処理907は、ラウンド処理R´´911におけるπ処理913、ρ´処理915、χ処理916、ι処理917と、それぞれ同じ処理である。θ1処理902、θ2処理904は、θ処理912を分離した処理である。
【0059】
ラウンド処理R´´911とラウンド処理R´901を比較すると、ラウンド処理R´´911では、θ処理912、π処理913の順に実行するのに対し、ラウンド処理R´901では、θ1処理902、π処理903、θ2処理904の順で実行する点が異なる。
【0060】
ここで、ラウンド処理R´´911において、ステップθは、各ビットに対して近傍の2つのcolumnの和を加えるステップであり、ステップπは、各laneを入れ替えるステップである。それに対して、ラウンド処理R´901は、各ビットに対して近傍の2つのcolumnの和を求め(ステップθ1)、その後、各laneを入れ替え(ステップπ)、各laneの入れ替えを考慮したビットにcolumnの和を加える(ステップθ2)。
【0061】
図11は、ステップθ1の処理を説明する図である。ステップθ1は、ステップθの前半の演算に対応しており、column和算出処理を実行するステップである。具体的には、column毎に、”x軸方向で−1の場所にあるcolumnのビットの和”と、”x軸方向で+1かつz軸方向で−1の場所にあるcolumnのビットの和”の2つの値の和(θ中間値と呼ぶことにする)を計算するための処理である。25個のlaneデータを受け取った後に、各columnに対して1ビットずつ、合計5×64ビット分のθ中間値を出力する。θ中間値全体の構造は、x−z平面に平行な、幅5ビット、高さ1ビット、奥行き64ビットの平面構造として表される。
【0062】
図12(a)は、ステップθ2の処理を説明する図である。ステップθ2は、ステップθの後半の演算に対応しており、column和加算処理を実行するステップである。つまり、ステップθ2は、ステップθ1で求めたθ中間値を、各ビットに加算するステップである。
【0063】
ただし、ステップθ2においては、すでにステップπが実行されていることに注意する必要がある。具体的には、ラウンド処理R´´911のステップθ(つまり、ラウンド処理R201のステップθ)の場合は、各ビットのx座標と各ビットの計算に使用するθ中間値のx座標は等しいものとなる。しかし、ラウンド処理R´901のステップθ2の場合は、各ビットのx座標と各ビットの計算に使用するθ中間値のx座標は異なり、ステップπの各laneの入れ替えを考慮したx座標となる。各ビットの計算に使用するθ中間値のx座標は、
図12(b)に示している数字の通りである。尚、θ2処理を実行するために、予め、保持部に、
図12(c)に示すような、各ビットの計算に使用するθ中間値のx座標を示すテーブルを保持しておき、保持しているテーブルを用いて、θ2処理を実行する。
【0064】
図12(c)に示しているテーブルの生成方法について具体的に解説する。まず、ラウンド処理R´´911について考える。ステップθにおける各ビットの計算に必要なθ中間値のx座標は、各ビットのx座標と等しい。たとえば、ステップθにおいて、x=0,y=4の位置のビットは、x=0のθ中間値を使って演算を行う。次に、ステップπによるlaneの入れ替えを、
図5を使って確認すると、x=0,y=4の位置のビットは、x=4,y=2の位置に移動する。
【0065】
次に、ラウンド処理R´901について考える。ステップθ2ではステップπがすでに行われているので、ステップθ2において、x=4,y=2の位置にあるビットの計算に必要なθ中間値のx座標は、x=0であることがわかる。そのため、
図12(b)に示している数字の、x=4,y=2の位置にある数字は、0となる。他のビットにおけるθ中間値のx座標も、同様にして求めることで、
図12(b)に示している数字となる。
【0066】
つまり、
図12(c)が示す、ステップθ2を行う際のθ中間値のx座標を示すテーブルは、π処理の入替処理を考慮したテーブルである。
【0067】
以上説明したように、ラウンド処理R201の処理結果とラウンド処理R´´911の処理結果は同じであり、また、ラウンド処理R´´911の処理結果とラウンド処理R´901の処理結果は同じである。従って、ラウンド処理R´901の処理結果とラウンド処理R201の処理結果は同じとなる。
【0068】
上述した、各ステップ(ステップθ1,ステップθ2、ステップρ´)の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
【0069】
・ステップθ1は、和の計算であるため、state内の各laneが入力される毎に、計算途中のθ中間値を更新していく処理となる。そのため、前段の計算結果が1個のlane分出力された時点で、ステップθ1の処理を開始することができる。
【0070】
・ステップθ2は、state内の各laneの計算において、ステップθ1で計算したθ中間値を加算する。ステップθ2開始時点で、ステップθ1の実行は完了しているため、前段(ステップπ)の計算結果が1個のlane分出力された時点で、ステップθ2の処理結果の出力を開始することができる。
【0071】
・ステップρ´は、lane毎に独立した計算である。そのため、前段(ステップθ2)の計算結果が1個のlane分出力された時点で、ステップρ´の処理を開始することができる。
【0072】
すなわち、ステップθ1及びステップθ2及びステップρ´においては、前段のステップの計算結果のうち1個のlane分出力された時点で、処理を開始することができる。
【0073】
また、ステップπ、ステップχ,ステップιの処理内容から、各ステップの処理を開始するにあたり以下の制約がある。
【0074】
・ステップπは、state内の各laneを入れ替える。そのため、前段(ステップρ)の計算結果が1個のstate全体、すなわち25個のlane分出力された時点で、ステップπの処理を開始することができる。
【0075】
・ステップχは、state内の各laneの計算において、x軸方向で+1のlane及びx軸方向で+2のlaneを使用する。そのため、3個目のlaneのデータを受け取った時点で、ステップχの処理を開始することできる。
【0076】
・ステップιは、lane毎に独立した計算である。そのため、前段(ステップχ)の計算結果が1個のlane分出力された時点で、ステップιの処理を開始することができる。
【0077】
すなわち、ステップπにおいては、前段のステップの計算結果が25個分出力されるまで、処理を開始することができない。しかしながら、ステップχ及びステップιにおいては、前段のステップの計算結果のうち、それぞれ、3個のlane分、1個のlane分出力された時点で、処理を開始することができる。
【0078】
つまり、ステップπ以外では、処理の実行開始前に、前段の処理開始から長い時間待つ必要はない。
【0079】
そのため、ラウンド処理R201の代わりにラウンド処理R´901を用いることで、スループットが向上する。そこで、以下では、ラウンド処理R´901の構成について説明する。
【0080】
<装置構成および動作>
図13は、第1実施形態に係るKECCAKアルゴリズムの実装例の概略構成を示す図である。2101は、入力データを表している。ここでは、lane単位で入力される。2102は、排他的論理和(XOR)演算部を表しており、ラウンド処理を24回実行するたびに、メッセージブロックと内部データの排他的論理和を計算する。2103は、stateで表される内部データ全体を保持するレジスタを表している。
【0081】
2104は、ステップθ1を処理するための回路(θ1回路)を表している本実施形態では、laneが入力されるたびに、columnの加算を行い、結果として、25個のlaneが入力された後に、5×64ビットのθ中間値を出力する。
【0082】
2105は、ステップπを処理するための回路(π回路)を表している。π回路2105は、レジスタ2103に、25個のlane、すなわち、stateが保持された後に、処理が実行される。入出力のデータ幅は、1600bitとする。
【0083】
2106は、ステップθ2を処理するための回路(θ2回路)を表している。2107は、ステップρ´を処理するための回路(ρ´回路)を表している。2108は、ステップχを処理するための回路(χ回路)を表している。2109は、ステップιを処理するための回路(ι回路)を表している。θ2回路2106、ρ´回路2107、ι回路2109は、それぞれ、lane単位で処理され、laneが入力されるたびに処理を実行する。χ回路2108は、3個のlaneが入力されてから処理が実行されるが、3個のlaneが入力された以降は、laneが入力されるたびに処理を実行する。
【0084】
図14(a)は、第一実施形態に係る実装例における各モジュールの出力タイミングチャートである。
図14(a)は、ラウンド処理R´901を2回実行した場合のものである。1回のラウンド処理にかかる時間が、平均28クロックとなる。
【0085】
<仕様通りのアルゴリズムでlane単位で処理を行った場合の例>
以下では、上述の第1実施形態の実装例に対する比較対象として、仕様通りのアルゴリズムでlaneを単位として処理する実装例について説明する。
【0086】
図15は、KECCAKアルゴリズムを仕様通りにlaneを単位として処理する場合の実装例の概略構成を示す図である。なお、5つのステップ(θ,ρ,π,χ,ι)の処理は上述したものと同じであるため説明は省略する。
【0087】
1801は、入力データを表している。入力データ1801から、1クロック毎に1個のlane(64ビット長のデータ)を受信する。なお、laneは、1個のstateの中から
図2(f)に示される順に受信される。
【0088】
1802は、排他的論理和の処理を表しており、ラウンド処理を24回実行するたびに、メッセージブロックと内部データの排他的論理和を計算する演算部である。
【0089】
1803は、stateで表される内部データ全体を保持するレジスタである。1804は、ステップπを実行する処理ブロック(π回路)である。ただし、上述したように、ステップπの処理は、ステップρの処理を完了した後でのみ実行可能となる。1805は、ステップθを実行する処理ブロック(θ回路)、1806は、ステップρを実行する処理ブロック(ρ回路)である。
【0090】
1807は、ステップχを実行する処理ブロック(χ回路)、1808は、ステップιを実行する処理ブロック(ι回路)である。1809は、マルチプレクサであり、ラウンド処理の前半は1806からのデータを出力し、後半は1808からのデータを出力する。1810は、出力データを表しており、計算が完了したときに、1個のlaneを単位として出力される。
【0091】
図14(b)は、仕様通りのアルゴリズムでlaneを単位として処理する場合の各モジュールの出力タイミングチャートである。θ回路1805&ρ回路18064とχ回路1807&ι回路1808とのは別々の期間に動作し、同時には動作しない。また、1回のラウンド処理にかかる時間は、51クロックである。
【0092】
<比較>
図14(a)と
図14(b)とを比較すると分かるように、第1実施形態の実装例の構成を用いることにより処理スループットが向上することがわかる。
【0093】
すなわち、
・π処理以外の処理回路の並列動作により回路利用効率が向上可能となる。
【0094】
・より少ないクロック数(時間)で1回のラウンド処理を実行することが可能となる。
【0095】
ことが分かる。その結果、処理スループットを向上させることが可能となっている。
以上説明したように、上記実施形態では、θ2処理とρ処理より前に、π処理が実行され、θ1処理中に、π処理をするためのデータ保持を行うことで、従来のように、データ保持するための時間を削減している。尚、
図13では、θ2処理の後に、ρ処理を行う例を示したが、θ2処理の前に、ρ処理を行っても同様の効果が得られる。θ2処理の前に、ρ処理を行う場合は、θ2処理で加算するビットを、ρ処理されたことを考慮して決定すればよい。
【0096】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。