JP6113091B2 - ハッシュ値生成装置 - Google Patents
ハッシュ値生成装置 Download PDFInfo
- Publication number
- JP6113091B2 JP6113091B2 JP2014017413A JP2014017413A JP6113091B2 JP 6113091 B2 JP6113091 B2 JP 6113091B2 JP 2014017413 A JP2014017413 A JP 2014017413A JP 2014017413 A JP2014017413 A JP 2014017413A JP 6113091 B2 JP6113091 B2 JP 6113091B2
- Authority
- JP
- Japan
- Prior art keywords
- processing
- axis direction
- data
- bits
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09C—CIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
- G09C1/00—Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
- H04L2209/125—Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations
Landscapes
- Engineering & Computer Science (AREA)
- Power Engineering (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
- Storage Device Security (AREA)
- Multi Processors (AREA)
Description
本発明は、ハッシュ値を生成する技術に関するものである。
データの改ざんがないかを検証するために、暗号学的ハッシュアルゴリズムを用いて算出されるハッシュ値が利用されている。暗号学的ハッシュアルゴリズムであるSHA−1は安全性が確保できないことが既に証明されており、SHA−2ファミリー(SHA−224,SHA−256,SHA−384,SHA−512)も安全性が崩れる可能性が指摘されている。そこで、アメリカ国立標準技術研究所(NIST)は、次世代の暗号学的ハッシュアルゴリズム(SHA−3)を策定すべく新しいアルゴリズムを公募した。そして、2012年10月に、KECCAKアルゴリズム(非特許文献1)がSHA−3のアルゴリズムとして選定された。
SHA−3では、任意の長さの入力メッセージ(データ)に対して固定長の暗号学的ハッシュ値を出力する。KECCAKアルゴリズムにおいては、5つのステップ(θ、ρ、π、χ、ι)を順に適用するラウンド処理を24回繰り返す置換関数(permutation function)が用いられている。また、ラウンド処理は、”state”と呼ばれる1600ビット長のデータに対して実行される。
"The KECCAK reference", Version 3.0, January 14, 2011, (http://keccak.noekeon.org/Keccak−reference−3.0.pdf)
ところで、ラウンド処理の5つのステップのうち、θ処理とπ処理はそれぞれ行うために、先行する処理の結果をたくさん、一旦メモリに貯める必要がある。そのため、1回のラウンド処理において、2回、先行する処理の結果をたくさん、一旦メモリに貯める必要があり、高速化が困難であった。
本発明は、上述の問題点に鑑みなされたものであり、ハッシュ値生成のスループット向上を可能とする技術を提供することを目的としている。
上述の問題点を解決するため、本発明のハッシュ値生成装置は以下の構成を備える。すなわち、SHA−3アルゴリズムのラウンド処理に含まれるθ処理を実行するθ処理手段と、 前記ラウンド処理に含まれるρ処理を実行するρ処理手段と、前記ラウンド処理に含まれるπ処理を実行するπ処理手段と、前記ラウンド処理に含まれるχ処理を実行するχ処理手段と、前記ラウンド処理に含まれるι処理を実行するι処理手段を有し、 前記π処理手段は、plane単位でデータ入力し、sheet単位でデータ出力することを特徴とする。
本発明によれば、ハッシュ値生成のスループット向上を可能とする技術を提供することができる。
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
(第1実施形態)
本発明に係るハッシュ値生成装置の第1実施形態として、SHA−3(KECCAKアルゴリズム)のハッシュ値を生成する装置を例に挙げて以下に説明する。なお、以下の説明において、具体的なデータ長やビット値が示されている場合があるが、本発明はこれらの具体的な値に限定されるものでは無い。
本発明に係るハッシュ値生成装置の第1実施形態として、SHA−3(KECCAKアルゴリズム)のハッシュ値を生成する装置を例に挙げて以下に説明する。なお、以下の説明において、具体的なデータ長やビット値が示されている場合があるが、本発明はこれらの具体的な値に限定されるものでは無い。
まず、KECCAKアルゴリズムについて説明する。なお、より詳細な仕様については、背景技術で示した非特許文献1に記載されている。
図1(a)は、KECCAKアルゴリズムの全体の概要を示す図である。101は、メッセージブロック(m1〜mt)を表している。メッセージブロック(m1〜mt)は、ハッシュ値生成の対象となる入力メッセージを1024ビット毎に分割することにより生成される。
102と103は初期値を表しており、ここでは初期値は全ビットが0である。ここでは、初期値の全ビットが0である例で説明するが、これに限定されない。また、初期値102の長さは、上述のメッセージブロックの長さと同じ1024ビットであり、初期値102と初期値103の長さの合計は1600ビットである。104は、ビット単位の排他的論理和(XOR)演算部を表している。つまり、XOR演算部104は、2つの1024ビットの入力データに対し、各ビットで排他的論理和を計算した結果を1024ビットのデータとして出力する。
105は、置換関数(permutation function)であるKECCAK−fを表しており、2つの入力データを受け取り、2つのデータを出力する。105の詳細については図1(b)を参照して後述する。106は、切り取り部を表しており、1024ビットの入力データから、必要なサイズだけ切り出して、出力する。107は、このアルゴリズムの計算結果である暗号学的ハッシュ値(すなわち、ハッシュ値)を表している。
図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ビットである。
図1(c)は、ラウンド処理R201の概要を説明する図である。上述したように、ラウンド処理R201においては、入力データと出力データの長さは共に1600ビットである。ラウンド処理R201で、入力データに対し、後述する5つのステップの処理(θ処理301,ρ処理302,π処理303,χ処理304,ι処理305)を順に適用して出力データを生成する。
以下では、KECCAKアルゴリズムのラウンド処理で用いられるデータ構造及び上述の5つのステップの詳細について説明する。
図2(a)は、ラウンド処理R201の入出力時のデータ構造である”state”を説明する図である。上述したように入力データと出力データはともに1600ビットである。そして、当該1600ビットのデータは、3次元配列において、幅(x軸方向)5ビット、高さ(y軸方向)5ビット、奥行き(z軸方向)64ビットの直方体として表される。この直方体のデータ構造を”state”と呼ぶ。なお、詳細は、図2(f)を参照して後述するが、直方体として表されるstate構造に対して、1600ビットのデータは、z軸方向、x軸方向、y軸方向の順に割り当てられる。
図2(b)は、データ構造”plane”を説明する図である。plane構造は、x−z平面に平行な、幅5ビット、高さ1ビット、奥行き64ビットの平面構造として表される。つまり、上述のstate構造は、plane構造をy軸方向に5個重ねたものとして考えることができる。
図2(c)は、データ構造”sheet”を説明する図である。sheet構造は、y−z平面に平行な、幅1ビット、高さ5ビット、奥行き64ビットの平面構造として表される。つまり、上述のstate構造は、sheet構造をx軸方向に5個横に並べたものとして考えることができる。
図2(d)は、データ構造”lane”を説明する図である。lane構造は、z軸に平行な、幅1ビット、高さ1ビット、奥行き64ビットの直線構造として表される。つまり、上述のstate構造は、lane構造をx−y平面に沿って25個寄せ集めたものとして考えることができる。図2(f)は、1個のstate構造を構成する25個のlaneの順番を表す図である。
図2(e)は、データ構造”column”を説明する図である。column構造は、y軸に平行な、幅1ビット、高さ5ビット、奥行き1ビットの直線構造として表される。つまり、上述のsheet構造は、column構造をz軸方向に64個並べたものとして考えることができる。
なお、第1実施形態では、入力データが1600ビットである場合について説明するが、本発明はこれに限定されるものでは無い。また、state構造のデータを、幅(x軸方向)5ビット、高さ(y軸方向)5ビット、奥行き(z軸方向)64ビットの直方体のデータ構造として扱う例について説明するが、これに限定されない。例えば、入力データが800ビットであり、state構造のデータを、幅5ビット、高さ5ビット、奥行き32ビットの直方体のデータ構造として扱ってもよい。
また、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ビットの直線構造である。
次に、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を生成する方法についても同様であるため説明は省略する。
次に、ラウンド処理R201を構成する5つのステップ(ステップθ、ステップρ、ステップπ、ステップχ、ステップι)の処理について説明する。なお、各ステップにおいて、入力データと出力データのデータ構造は、state構造である。
図3(a)は、ステップθの処理(θ処理301)を説明する図である。ステップθは、各ビットに対して近傍の2つのcolumnの和を加える処理である。出力stateの各ビットは、入力stateのうち、”同じ場所にあるビットの値”と、”x軸方向で−1の場所にあるcolumnのビットの和”と、”x軸方向で+1かつz軸方向で−1の場所にあるcolumnのビットの和”との3つ値の和として計算される。ここで、和とは、GF(2)上での和のことであり、排他的論理和の演算と同一の結果になる。式で書くと、次のようになる。
ここで、xは0〜4、yは0〜4、zは0〜63である。
図3(b)は、端の部分(例えばx=0)のビットを求める場合におけるステップθの処理を説明する図である。x=0のビットを求めたい場合、”x軸方向で−1の場所にあるcolumn”は、stateの反対側、つまり”x=4の場所にあるcolumn”に相当する。このように、stateからはみ出す座標については、stateの反対側の位置になる。つまり、座標値は同一state内で循環シフトする。このルールは、x座標、y座標、z座標の何れも同じであり、また、他の4つのステップでも同様である。
図4は、ステップρの処理(ρ処理302)を説明する図である。ステップρは、z軸方向に各ビットの値をシフトする処理である。より具体的には、図4(a)に示すように、stateの各lane内の値を、指定されたビットだけz方向に循環シフトし出力する。各laneにおいてシフトするビット数は、予め定められており、図4(b)に示している数字の通りである。尚、ρ処理を実行するために、予め、保持部に、図4(c)に示すような、シフト量を示すテーブルを保持しておき、保持しているテーブルを用いて、ρ処理を実行する。
図5は、ステップπの処理(π処理303)を説明する図である。ステップπは、x−y平面内での各ビットの値の入れ替えを行う処理、つまり、同一state内の25個のlaneを入れ替える処理を行う。尚、x−y平面は、”slice”とも呼ばれる。より具体的には、入力stateの各laneに対し図5(a)の上段に示すように番号をふった場合、出力stateは下段に示すようになる。尚、π処理を実行するために、予め、保持部に、図5(b)に示すような、入替先を示すテーブルを保持しておき、保持しているテーブルを用いて、π処理を実行する。
図6は、ステップχの処理(χ処理304)を説明する図である。ステップχは、x軸方向(”row”とも呼ばれる)のビット列内での変換を行う処理であり、出力rowの各ビットの値は、同一の入力rowの3つのビットに基づき導出される。より具体的には、出力rowの各ビットの値は、入力rowの各ビットに対し、x軸方向で+1の場所にあるビットが0、かつ、x軸方向で+2の場所にあるビットが1の場合にビットの値が反転するように設定される。
図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のビット列として設定する。
上述した、各ステップ(ステップθ,ステップρ,ステップπ,ステップχ,ステップι)の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
・ステップθは、state内の各laneの計算において、x軸方向に関して−1のsheetと+1のsheetのデータを使用する。そのため、最初の3つ分のsheetが完全に揃う時、つまり、25個のlaneのうち23個のlaneを前段の処理から受け取った時、ステップθの処理を開始することができる。
・ステップρは、lane毎に独立した計算である。そのため、前段(ステップθ)の計算結果が1個のlane分出力された時点で、ステップρの処理を開始することができる。
・ステップπは、state内の各laneを入れ替える。そのため、前段(ステップρ)の計算結果が1個のstate全体、すなわち25個のlane分出力された時点で、ステップπの処理を開始することができる。
・ステップχは、state内の各laneの計算において、x軸方向で+1のlane及びx軸方向で+2のlaneを使用する。そのため、3個目のlaneのデータを受け取った時点で、ステップχの処理を開始することできる。
・ステップιは、lane毎に独立した計算である。そのため、前段(ステップχ)の計算結果が1個のlane分出力された時点で、ステップιの処理を開始することができる。
すなわち、ステップθ及びステップπ及びステップχにおいては、前段のステップの計算結果がそれぞれ23個、25個、3個のlane分出力されるまで、処理を開始することができない。このように、特にステップθ及びステップπの2処理の実行開始は、前段の処理開始から長い時間待った後でなければならない。
つまり、ステップθとステップπのどちらかの開始時間を早めることができれば、スループットが向上する。また、各ステップにおいて、lane単位で処理するのではなく、planeやsheet単位で処理することで、スループットが向上する。
<ラウンド処理R´801の説明>
次に、ラウンド処理R´801について説明する。ラウンド処理R´801は、本実施形態で用いる処理であり、ラウンド処理R201と同じ結果になるように設計されている。
次に、ラウンド処理R´801について説明する。ラウンド処理R´801は、本実施形態で用いる処理であり、ラウンド処理R201と同じ結果になるように設計されている。
図9(a)は、ラウンド処理R´801の概要を説明する図である。ラウンド処理R´801は、処理結果がラウンド処理R201と同じになるように設計されている。ラウンド処理R´801は、入力データに対し、6つのステップの処理(θ1処理802、θ2処理803、ρ処理804、π処理805、χ処理806、ι処理807)を適用して出力データを生成する。
ここで、ρ処理804、π処理805、χ処理806、ι処理807は、それぞれ、ラウンド処理R201におけるρ処理302、π処理303、χ処理304、ι処理305と、処理は同じである。θ1処理802とθ2処理803は、ラウンド処理R201におけるθ処理301の処理を分離したものである。
ラウンド処理R´801内の処理のうち、ρ処理、χ処理、ι処理はラウンド処理R201内のものと同じ処理であるため、説明は省略する。
π処理805は、ラウンド処理R201内のものと同じ処理であるが、stateデータを保持してから処理するのはなく、planeデータ入力し、sheetデータ出力を行う。詳細は後述する。
以下では、θ1処理、θ2処理について説明する。
図11は、ステップθ1の処理を説明する図である。ステップθ1は、ステップθの前半の演算に対応しており、column和算出処理を実行するステップである。具体的には、column毎に、”x軸方向で−1の場所にあるcolumnのビットの和”と、”x軸方向で+1かつz軸方向で−1の場所にあるcolumnのビットの和”の2つの値の和(θ中間値と呼ぶことにする)を計算するための処理である。5個のsheetデータを受け取った後に、各columnに対して1ビットずつ、合計5×64ビット分のθ中間値を出力する。θ中間値全体の構造は、x−z平面に平行な、幅5ビット、高さ1ビット、奥行き64ビットの平面構造として表される。
図12は、ステップθ2の処理を説明する図である。ステップθ2は、ステップθの後半の演算に対応しており、column和加算処理を実行するステップである。つまり、ステップθ2は、ステップθ1で求めたθ中間値を、各ビットに加算するステップである。
上述した、各ステップ(ステップθ1,ステップθ2)の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
・ステップθ1は、和の計算であるため、state内の各sheetが入力される毎に、計算途中のθ中間値を更新していく処理となる。そのため、前段の計算結果が1つのsheetデータが出力された時点で、ステップθ1の処理を開始することができる。
・ステップθ2は、state内の各planeの計算において、ステップθ1で計算したθ中間値を加算する。ステップθ2開始時点で、ステップθ1の実行は完了しているため、前段(レジスタ)の出力が1つのplaneデータが出力された時点で、ステップθ2の処理結果の出力を開始することができる。
・ステップρは、lane毎に独立した計算である。そのため、前段(ステップθ2)の計算結果が1つのplaneデータが出力された時点で、ステップρの処理を開始することができる。
・ステップπは、state内の各laneを入れ替える。ただし、1個のplane分の入力に対し、1つのsheet分の出力が得られる。そのため、前段(ステップρ)の計算結果が1個のplaneデータが出力された時点で、ステップπの処理を開始することができる。
・ステップχは、state内の各laneの計算において、x軸方向で+1のlane及びx軸方向で+2のlaneを使用する。そのため、3つのsheetのデータがそろった時点で、ステップχの処理を開始することできる。
・ステップιは、lane毎に独立した計算である。そのため、前段(ステップχ)の計算結果が1つのsheetデータが出力された時点で、ステップιの処理を開始することができる。
ステップπにおいて、planeデータ入力し、sheetデータ出力を行うことで、stateデータを保持する必要がなくなり、スループットが向上する。
さらに、ステップθ2、ステップρ及びステップπについてはplane単位で、ステップχ及びステップιについてはsheet単位で行うことで、スループットが向上する。
以下では、ステップπは、planeデータ入力し、sheetデータ出力し、ラウンド処理をステップθ2及びステップρ及びステップπについてはplane単位で、ステップχ及びステップιについてはsheet単位で行う構成について説明する。
<装置構成および動作>
図16は、第1実施形態に係るKECCAKアルゴリズムの実装例の概略構成を示す図である。1901は、入力データを表している。ここでは入力データは、lane構造を単位として入力される。ただし、あらかじめ(x,y)=(0,0),(0,1),(0,2),・・・のように、y方向の順番で入力されることとする。1908は、入力データ1901である、lane構造のデータを4個分保持し、5個目のlaneを受け取るタイミングで、sheet構造を単位として、データを出力するレジスタである。なお、少なくとも、1つ目のsheet構造のデータが生成できるデータが保持されれば、1つ目のsheet構造のデータを出力するようにしてよい。1907は、出力データを表しており、計算が完了したときに、sheet構造を単位として出力される。
図16は、第1実施形態に係るKECCAKアルゴリズムの実装例の概略構成を示す図である。1901は、入力データを表している。ここでは入力データは、lane構造を単位として入力される。ただし、あらかじめ(x,y)=(0,0),(0,1),(0,2),・・・のように、y方向の順番で入力されることとする。1908は、入力データ1901である、lane構造のデータを4個分保持し、5個目のlaneを受け取るタイミングで、sheet構造を単位として、データを出力するレジスタである。なお、少なくとも、1つ目のsheet構造のデータが生成できるデータが保持されれば、1つ目のsheet構造のデータを出力するようにしてよい。1907は、出力データを表しており、計算が完了したときに、sheet構造を単位として出力される。
1902は、排他的論理和(XOR)演算部を表しており、ラウンド処理を24回実行するたびに、メッセージブロックと内部データの排他的論理和を計算する。1903は内部データ全体を保持するレジスタである。尚、1903は、sheet構造の入力データを入力して保持し、plane構造の出力データを出力する。1904は、ステップθ2及びステップρ及びステップπを処理するための回路である。1904において、入力されるデータはplane構造のデータ、出力されるデータはsheet構造のデータとする。詳しくは後述する。1905は、ステップχ及びステップιを処理するための回路である。1906は、ステップθ1を処理するための回路である。
図17は、図16の構成をより詳細に示した図である。2001は、入力データを表しており、図16の入力データ1901と同じである。2009は、レジスタであり、入力データ2001のうち、少なくとも、1つ目のsheet構造のデータを保持して、sheet構造を単位として出力する。2009は、図19のレジスタ1908と同じである。また、2009は、1クロック毎に1個のsheet構造を単位として出力し、ここでは、x座標の小さいsheetから順に出力する。2002は、マルチプレクサを表しており、入力データと内部stateとの間で排他的論理和の計算をするときは入力データをそのまま出力し、それ以外のときは0を出力する。
2004は、内部データ全体を保持するレジスタであり、図16のレジスタ1903と同じである。2005はステップθ2及びステップρ及びステップπを計算するための回路(以下、θ2&ρ&π回路2005と呼ぶ)である。上述のように、θ2&ρ&π回路2005には、y座標の小さい順にplane構造のデータが入力され(y=0,1,2,3,4の順番)、x座標の小さい順にsheet構造のデータが出力される(x=0,1,2,3,4の順番)。
2006は、ステップχ及びステップιを処理するための回路(以下、χ&ι回路2006と呼ぶ)であり、1個のsheet構造を単位として結果を出力する。2007はマルチプレクサを表しており、ハッシュ値の計算開始時には初期化のため0を出力し、それ以外の時は計算途中のデータをそのまま出力する。
2008は、ステップθ1の処理を行う回路(以下、θ1回路2008と呼ぶ)であり、sheetデータを5個入力すると5×64ビットの中間値(θ中間値)を出力する。
図18は、レジスタ2004の実装例を示す図である。2101は入力データを表している。2102は入力データ2101である、1つのsheetデータを5つのlaneデータに分割し出力する組み合わせ回路である。2103はマルチプレクサを表しており、偶数ラウンドと奇数ラウンドでシフト方向を縦方向と横方向で交互に切り替える(図18内の同型記号の動作は全て2103と同様である)。2104は1段で1個のlaneの情報を記憶する5×5段のメッシュ構造のレジスタを表しており、1クロック毎に5個のlane分のデータ(1個のsheet分もしくはplane分のデータ)を入出力する。2105は2104の最終段から出力された5個のlane分のデータ(R0・R1・R2・R3・R4の5個、もしくはR0・R5・R10・R15・R20の5個)を1個のplane分のデータとして出力する組み合わせ回路である。2106は出力を表している。
図23は、ステップπの処理の特性を説明する図である。
図23(a)は、ステップπの処理を実行する前のデータの例である。なお、πの処理により、各laneがどの位置に並び替えられるかをわかりやすくするため、各laneに連続する番号を割り振ってある。図23(b)は、ステップπの処理を実行した後のデータの例である。ここでy=0の1個のplane分のデータ(図23(a)の231)が全てx=0の1個のsheet分のデータの位置(図23(b)の232)に並び替えられていることが分かる。また、同様の事がy=1,2,3,4のデータにも言える。つまり、ステップπの処理を実行すると、y=i(i=0,1,2,3,4)の1個のplane分のデータは、x=iの1個分のsheet分のデータとして出力される。
以上説明したステップπの処理の特性を用いることで、ステップπの処理を行う際に、全てのデータ(つまり、5つのplane構造のデータ)をレジスタに保持する必要はなく、1つのplane分の入力に対し、1個のsheet分の出力を得ることが可能となる。
図24は、レジスタ2004によるsheet−plane単位変換を説明する図である。レジスタ2004への入力データは、上述したように1クロックにつき1個のsheet分のデータである。図24(a)は、1クロック目のsheetデータが入力されたとき、図24(b)は、2クロック目のsheetデータが入力されたとき、図24(c)は、5クロック目のsheetデータが入力されたとき、の説明図である。図24(a)、(b)、(c)に示した通り、5クロックかけて5個のsheet分のデータ(1個のstate分のデータ)をy方向(x方向)に入力される。図24(d)は、5個のsheetデータが入力された後、1つ目のplaneデータが出力されたとき、図24(e)は、2つ目のplaneデータが出力されるとき、の説明図である。5個のsheet分のデータが入力された後、x方向(y方向)に1クロックにつき5個のlane分のデータを出力する事で、1個のplane分のデータを得る。レジスタ2004は以上の流れでsheet−plane変換を行っている。
尚、レジスタへのデータ入力は、例えば、y軸方向から5plane入力し、その後、x軸方向から5sheet入力するなど、入力方向を、x軸、y軸交互に変えて行う。
図19は、θ2&ρ&π回路2005の実装例を示す図である。θ2&ρ&π回路2005は、注目planeに対して2008であらかじめ計算しておいたθ中間値を使用して、出力データを算出する。ステップπの処理を含むため、出力データはsheetとなる。
2201は入力データを表している。上述したように、入力データとしては、1クロック毎に1個のplaneが入力される。2202は、θ1回路2008からの入力を表しており、θ中間値に相当する。
2203は、排他的論理和(XOR)演算部を表しており、この処理が上述したステップθ2の演算に相当する。2204は、ステップρの演算を行う論理回路(ρ回路)である。2205は、ステップπの演算を行う論理回路(π回路)であり、1個のplane分の入力に対し、1個のsheet分の出力を得る。2206は出力データを表しており、1クロック毎に1個のsheetが出力される。
図25は、π回路2205の実装例を示す図である。2601は、入力データを表している。上述したように、入力データとしては、1クロック毎に1個のplaneが入力される。2602は入力データ2601である、1個のplane分のデータを5個のlane分のデータに分割し出力する組み合わせ回路である。
2603は、ステップπの並び替えを行う組み合わせ回路である。x軸方向に並ぶ5個のlane分のデータを、図5(b)のテーブルに従い、y軸方向に並ぶ5個のlane分のデータに並び変え出力する。
2604は、5個のlane分のデータを1個のsheet分のデータとして出力する組み合わせ回路である。2605は出力データを表しており、1クロック毎に1個のsheetが出力される。
図20は、χ&ι回路2006の実装例を示す図である。χ&ι回路2006は、注目sheetと当該注目sheetに対してx軸方向に+1と+2にある2個のsheetを使用して、出力データを算出する。
2301は、入力データを表している。上述したように、入力データとしては、1クロック毎に1個のsheetが入力される。2302は、マルチプレクサを表しており、処理開始から最初の5クロックでは入力データ2301をそのまま出力し、引き続く2クロックは2304からのデータを出力する。
2303は、1段で1個のsheetの情報を記憶する2段構成のレジスタを表している。2304は、1段で1個のsheetの情報を記憶する2段構成のレジスタを表しており、ここでは、x=0とx=1のsheetの情報を記憶している。
2305は、組み合わせ回路を表しており、上述したステップχ及びステップιの演算を行う論理回路である。2306は、出力データを表しており、1個のsheetを単位として出力される。
上述したように、θ2&ρ&π回路2005をplane単位、χ&ι回路2006をsheet単位で処理することにより、θ2&ρ&π回路2005の出力からχ&ι回路2006の入力までの経路は組み合わせ回路のみ接続されている。すなわち、ラッチ回路を含まない構成であるため、1クロック内でデータを通過させることが可能な構成となっている。
以上説明したように、第1実施形態では、πの処理を行う際に、plane入力に対し、sheet出力とし、ラウンド内の処理単位をplaneとsheetにすることで、ラウンド内でのパイプライン化が可能となる。
また、以上説明したように、第1実施形態では、ラウンド開始時の入力処理単位はplane単位で、ラウンド終了時の出力処理単位はsheet単位である。が、レジスタ2004の入出力時にplane単位からsheet単位変換を行うことで、次のラウンド開始の入力処理単位をplane単位にすることができる。
尚、第1実施形態ではθ1回路2008への入力単位をsheet構造としたが、入力単位をplane構造としてもよい。その場合、θ1回路2008は、planeデータを5個入力すると5×64ビットのθ中間値を出力する。ただし、θ1回路2008への入力単位をsheet構造とした方が、入力される度に、順次、θ中間値を計算できる効果がある。
図14(a)は、第1実施形態に係る実装例における各モジュールの動作タイミングチャートである。なお、θ2&ρ&π回路2005及びχ&ι回路2006はパイプライン処理されるよう構成されている。θ1回路2008は、5個のsheetが入力されて、θ中間値が算出できるので、5クロックかかる。θ2&ρ&π回路2005は、1個のsheetを出力してから2クロック後に、χ&ι回路2006が1個のsheet出力できる。つまり、χ&ι回路2006は、3個のsheetが入力されたとき処理を開始でき、θ2&ρ&π回路2005とχ&ι回路2006との並列動作が実現できる。また、1回のラウンド処理にかかる時間が、7クロックである。
<仕様通りのアルゴリズムでlane単位で処理を行った場合の例>
以下では、上述の第1実施形態の実装例に対する比較対象として、仕様通りのアルゴリズムでlaneを単位として処理する実装例について説明する。
以下では、上述の第1実施形態の実装例に対する比較対象として、仕様通りのアルゴリズムでlaneを単位として処理する実装例について説明する。
図15は、KECCAKアルゴリズムを仕様通りにlaneを単位として処理する場合の実装例の概略構成を示す図である。なお、5つのステップ(θ,ρ,π,χ,ι)の処理は上述したものと同じであるため説明は省略する。
1801は、入力データを表している。入力データ1801から、1クロック毎に1個のlane(64ビット長のデータ)を受信する。なお、laneは、1個のstateの中から図2(f)に示される順に受信される。
1802は、排他的論理和の処理を表しており、ラウンド処理を24回実行するたびに、メッセージブロックと内部データの排他的論理和を計算する演算部である。
1803は、stateで表される内部データ全体を保持するレジスタである。1804は、ステップπを実行する処理ブロック(π回路)である。ただし、上述したように、ステップπの処理は、ステップρの処理を完了した後でのみ実行可能となる。1805は、ステップθを実行する処理ブロック(θ回路)、1806は、ステップρを実行する処理ブロック(ρ回路)である。
1807は、ステップχを実行する処理ブロック(χ回路)、1808は、ステップιを実行する処理ブロック(ι回路)である。1809は、マルチプレクサであり、ラウンド処理の前半は1806からのデータを出力し、後半は1808からのデータを出力する。1810は、出力データを表しており、計算が完了したときに、1個のlaneを単位として出力される。
図14(b)は、仕様通りのアルゴリズムでlaneを単位として処理する場合の各モジュールの動作タイミングチャートである。θ回路1805&ρ回路18064とχ回路1807&ι回路1808とは別々の期間に動作し、同時には動作しない。また、1回のラウンド処理にかかる時間は、51クロックである。
<比較>
図14(a)と図14(c)とを比較すると分かるように、第1実施形態の実装例の構成を用いることにより処理スループットが向上することがわかる。
図14(a)と図14(c)とを比較すると分かるように、第1実施形態の実装例の構成を用いることにより処理スループットが向上することがわかる。
すなわち、
・θ2&ρ&π回路及びχ&ι回路の2つの処理回路の並列動作により回路利用効率が向上可能となる。
・θ2&ρ&π回路及びχ&ι回路の2つの処理回路の並列動作により回路利用効率が向上可能となる。
・より少ないクロック数(時間)で1回のラウンド処理を実行することが可能となる。
(第2実施形態)
本発明に係るハッシュ値生成装置の第2実施形態として、SHA−3(KECCAKアルゴリズム)のハッシュ値を生成する装置を例に挙げて以下に説明する。なお、以下の説明において、具体的なデータ長やビット値が示されている場合があるが、本発明はこれらの具体的な値に限定されるものでは無い。KECCAKアルゴリズム、データ構造については第1実施形態と同様であり、以降では、第1実施形態と異なる箇所について説明する。
本発明に係るハッシュ値生成装置の第2実施形態として、SHA−3(KECCAKアルゴリズム)のハッシュ値を生成する装置を例に挙げて以下に説明する。なお、以下の説明において、具体的なデータ長やビット値が示されている場合があるが、本発明はこれらの具体的な値に限定されるものでは無い。KECCAKアルゴリズム、データ構造については第1実施形態と同様であり、以降では、第1実施形態と異なる箇所について説明する。
<ラウンド処理R´901の説明>
ラウンド処理R´901について説明する。ラウンド処理R´901は、本実施形態で用いる処理であり、ラウンド処理R201と同じ結果になるように設計されているが、KECCAKアルゴリズムの仕様とは処理内容が異なる。
ラウンド処理R´901について説明する。ラウンド処理R´901は、本実施形態で用いる処理であり、ラウンド処理R201と同じ結果になるように設計されているが、KECCAKアルゴリズムの仕様とは処理内容が異なる。
図9(b)は、ラウンド処理R´901の概要を説明する図である。ラウンド処理R´901は、処理結果がラウンド処理R201と同じになるように設計されている。ラウンド処理R´901は、入力データに対し、6つのステップの処理(θ1処理902、π処理903、θ2´処理904、ρ´処理905、χ処理906、ι処理907)を適用して出力データを生成する。
ここで、π処理903、χ処理906、ι処理907は、それぞれ、ラウンド処理R201におけるπ処理303、χ処理304、ι処理305と、処理は同じである。ρ´処理905は、ラウンド処理R201におけるρ処理302と同じように、z軸方向に各ビットをシフトする処理であるが、シフトするビット数が異なる。θ1処理902とθ2´処理904は、ラウンド処理R201におけるθ処理301の処理を分離したものである。
ラウンド処理R´901内の処理のうち、χ処理とι処理はラウンド処理R201内のものと同じ処理であるため、説明は省略する。
π処理905は、ラウンド処理R201内のものと同じ処理であるが、stateデータを保持してから処理するのはなく、planeデータ入力し、sheetデータ出力を行う。詳細は第1の実施形態と同じである。
また、ラウンド処理R´901のθ1処理は、ラウンド処理R´801のθ1処理と同じであるため、説明は省略する。以下では、ρ´処理、θ2´処理について説明する。
図10(a)は、ステップρ´の処理(ρ´処理905)を説明する図である。ステップρ´は、ステップρと同様に、z軸方向に各ビットの値を循環シフトする処理である。ただし、各laneにおいて循環シフトするビット数はステップρと異なり、図10(b)に示している数字の通りである。尚、ρ´処理を実行するために、予め、保持部に、図10(c)に示すような、シフト量を示すテーブルを保持しておき、保持しているテーブルを用いて、ρ´処理を実行する。このテーブルは、π処理を考慮したテーブルである。詳細は後述する。
ここで、ラウンド処理R´901の処理結果とラウンド処理R201の処理結果が同じであることを説明するために、まず、ラウンド処理R201の処理結果と、ラウンド処理R´´911の処理結果が同じであることを説明する。
図9(c)は、ラウンド処理R´´911の図である。ラウンド処理R´´911は、入力データに対し、5つのステップの処理(θ処理912、π処理913、ρ´処理915、χ処理916、ι処理917)を適用して出力データを生成するとする。ここで、θ処理912、π処理913、χ処理916、ι処理917は、ラウンド処理R201におけるθ処理301,π処理303,χ処理304,ι処理305と、それぞれ同じ処理である。ρ´処理915は、ラウンド処理R´901におけるρ´処理905と同じ処理である。
ラウンド処理R201とラウンド処理R´´911を比較すると、ラウンド処理R201では、ρ処理302、π処理303の順に実行するのに対し、ラウンド処理R´´911では、π処理303、ρ´処理905の順で実行する点が異なる。
ここで、ラウンド処理R201における、ステップρは、lane毎に決められたルールで、z軸方向にシフトするステップで、ステップπは、各laneを入れ替えるステップである。それに対して、ラウンド処理R´´911では、各laneを入れ替えるステップ(ステップπの処理)を先に行い、その後、入替処理を考慮したlane毎に決められたルールで、z軸方向にシフトするステップ(ステップρ´の処理)を行う。つまり、ラウンド処理R´´911では、ステップπを先に行うが、ステップρ´で、z軸方向にシフトするシフト量を、ステップπの処理を考慮して変更することで、ラウンド処理R´´911の処理結果とラウンド処理R201の処理結果が同じになる。
図10(c)は、ステップρ´を行う際に用いる各laneのシフト量を示すテーブルである。
図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の位置に移動する。
次に、ラウンド処理R´´911について考える。ラウンド処理R´´911では、π処理913とρ´処理915を順に行う。ρ´処理の前にπ処理が行われているので、ρ´処理において18bitシフトしなければならないlaneは、x=4,y=2の位置にあるlaneとなる。よって、図10(b)に示している数字の、x=4,y=2の位置にある数字は、18となる。他のlaneのシフト量も、同様にして求めることで、図10(b)に示している数字となる。
つまり、図10(c)が示す、ステップρ´を行う際の各laneのシフト量を示すテーブルは、π処理の入替処理を考慮したテーブルである。
次に、ラウンド処理R´´911の処理結果とラウンド処理R´901の処理結果が同じであることを説明する。
ここで、π処理903、ρ´処理905、χ処理906、ι処理907は、ラウンド処理R´´911におけるπ処理913、ρ´処理915、χ処理916、ι処理917と、それぞれ同じ処理である。θ1処理902、θ2´処理904は、θ処理912を分離した処理である。
ラウンド処理R´´911とラウンド処理R´901を比較すると、ラウンド処理R´´911では、θ処理912、π処理913の順に実行するのに対し、ラウンド処理R´901では、θ1処理902、π処理913、θ2´処理904の順で実行する点が異なる。
ここで、ラウンド処理R´´911において、ステップθは、各ビットに対して近傍の2つのcolumnの和を加えるステップであり、ステップπは、各laneを入れ替えるステップである。それに対して、ラウンド処理R´901では、各ビットに対して近傍の2つのcolumnの和を求める(ステップθ1の処理)。そして、その後、各laneを入れ替え(ステップπの処理)、各laneの入れ替えを考慮したビットにcolumnの和を加える処理(ステップθ2´の処理)を行う。
図13(a)は、ステップθ2´の処理を説明する図である。ステップθ2´は、ステップθの後半の演算に対応しており、column和加算処理を実行するステップである。つまり、ステップθ2´は、ステップθ1で求めたθ中間値を、各ビットに加算するステップである。
ただし、ステップθ2´においては、すでにステップπが実行されていることに注意する必要がある。具体的には、ラウンド処理R´´911のステップθ(つまり、ラウンド処理R201のステップθ)の場合は、各ビットのx座標と各ビットの計算に使用するθ中間値のx座標は等しいものとなる。しかし、ラウンド処理R´901のステップθ2´の場合は、各ビットのx座標と各ビットの計算に使用するθ中間値のx座標は異なり、ステップπの各laneの入れ替えを考慮したx座標となる。各ビットの計算に使用するθ中間値のx座標は、図13(b)に示している数字の通りである。尚、θ2´処理を実行するために、予め、保持部に、図13(c)に示すような、各ビットの計算に使用するθ中間値のx座標を示すテーブルを保持しておき、保持しているテーブルを用いて、θ2´処理を実行する。
図13(c)に示しているテーブルの生成方法について具体的に解説する。まず、ラウンド処理R´´911について考える。ステップθにおける各ビットの計算に必要なθ中間値のx座標は、各ビットのx座標と等しい。たとえば、ステップθにおいて、x=0,y=4の位置のビットは、x=0のθ中間値を使って演算を行う。次に、ステップπによるlaneの入れ替えを、図5を使って確認すると、x=0,y=4の位置のビットは、x=4,y=2の位置に移動する。
次に、ラウンド処理R´901について考える。ステップθ2´ではステップπがすでに行われているので、ステップθ2´において、x=4,y=2の位置にあるビットの計算に必要なθ中間値のx座標は、x=0であることがわかる。そのため、図13(b)に示している数字の、x=4,y=2の位置にある数字は、0となる。他のビットにおけるθ中間値のx座標も、同様にして求めることで、図13(b)に示している数字となる。
つまり、図13(c)が示す、ステップθ2´を行う際のθ中間値のx座標を示すテーブルは、π処理の入替処理を考慮したテーブルである。
以上説明したように、ラウンド処理R201の処理結果とラウンド処理R´´911の処理結果は同じであり、また、ラウンド処理R´´911の処理結果とラウンド処理R´901の処理結果は同じである。従って、ラウンド処理R´901の処理結果とラウンド処理R201の処理結果は同じとなる。
上述した、各ステップ(ステップθ1,ステップθ2´、ステップρ´)の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
・ステップθ1は、和の計算であるため、state内の各planeが入力される毎に、計算途中のθ中間値を更新していく処理となる。そのため、前段の計算結果が1個のplaneデータが出力された時点で、ステップθ1の処理を開始することができる。
・ステップθ2´は、state内の各planeの計算において、ステップθ1で計算したθ中間値を加算する。ステップθ2´開始時点で、ステップθ1の実行は完了しているため、前段(ステップπ)の計算結果が1個のplaneデータが出力された時点で、ステップθ2´の処理結果の出力を開始することができる。
・ステップρ´は、lane毎に独立した計算である。そのため、前段(ステップθ2´)の計算結果が1個のplaneデータが出力された時点で、ステップρ´の処理を開始することができる。
すなわち、ステップθ1及びステップθ2´及びステップρ´においては、前段のステップの計算結果のうち1個のplaneデータが出力された時点で、処理を開始することができる。
また、第2実施形態におけるステップπ、ステップχ、ステップιの処理内容は、第1実施形態で述べたものと同じであることから、各ステップの処理を開始するにあたり以下の制約があることが分かる。
・ステップπは、state内の各laneを入れ替える。ただし、1個のplane分の入力に対し、1個のsheet分の出力が得られる。そのため、前段(ステップι)の計算結果が1個のplane分出力された時点で、ステップπの処理を開始することができる。
・ステップχは、state内の各laneの計算において、x軸方向で+1のlane及びx軸方向で+2のlaneを使用する。そのため、前段(ステップρ´)の計算結果が1個のplaneデータが出力された時点で、ステップχの処理を開始することできる。
・ステップιは、lane毎に独立した計算である。そのため、前段(ステップχ)の計算結果が1個のplaneデータが出力された時点で、ステップιの処理を開始することができる。
ステップπにおいて、planeデータ入力し、sheetデータ出力を行うことで、stateデータを保持する必要がなくなり、スループットが向上する。
さらに、plane単位で処理を行い、さらに、ラウンド処理R201の代わりにラウンド処理R´901を用いることで、スループットが向上する。そこで、以下では、ステップπは、planeデータ入力し、sheetデータ出力し、ラウンド処理をplane単位で行う構成について説明する。
<装置構成および動作>
図21は、第2実施形態に係るKECCAKアルゴリズムの実装例の構成を示す図である。2401は、入力データを表している。ここでは入力データは、あらかじめ(x,y)=(0,0),(1,0),(2,0)・・・のように、x方向の順番で入力されることとする。2409は、レジスタであり、入力データ2401である、lane構造のデータを4個分保持し、5個目のlaneを受け取るタイミングで、plane構造を単位として、データを出力する。なお、レジスタ2409では、少なくとも、1つ目のplane構造のデータが生成できるデータが保持されれば、1つ目のplane構造のデータを出力するようにしてよい。2410は、出力データを表しており、計算が完了したときに、sheet構造を単位として出力される。
図21は、第2実施形態に係るKECCAKアルゴリズムの実装例の構成を示す図である。2401は、入力データを表している。ここでは入力データは、あらかじめ(x,y)=(0,0),(1,0),(2,0)・・・のように、x方向の順番で入力されることとする。2409は、レジスタであり、入力データ2401である、lane構造のデータを4個分保持し、5個目のlaneを受け取るタイミングで、plane構造を単位として、データを出力する。なお、レジスタ2409では、少なくとも、1つ目のplane構造のデータが生成できるデータが保持されれば、1つ目のplane構造のデータを出力するようにしてよい。2410は、出力データを表しており、計算が完了したときに、sheet構造を単位として出力される。
2402は、マルチプレクサを表しており、入力データと内部stateとの間で排他的論理和の計算をするときは入力データをそのまま出力し、それ以外のときは0を出力する。
2404は、ステップπを計算するための回路(以下、π回路2404と呼ぶ)である。π回路2404は、図19のπ回路2205と同じであり、plane構造のデータが入力され、sheet構造のデータが出力される。具体的には、y座標の小さい順にplane構造のデータが入力され(y=0,1,2,3,4の順番)、x座標の小さい順にsheet構造のデータが出力される(x=0,1,2,3,4の順番)。
2405は、内部データ全体を保持するレジスタである。レジスタ2405は、第1実施形態のレジスタ2004と同じものであるため、説明は省略する。
2406は、ステップθ2´及びステップρ´及びステップχ及びステップιを計算するための回路(以下、θ2´&ρ´&χ&ι回路2406と呼ぶ)であり、1個のplane構造を単位として結果を出力する。2407は、マルチプレクサを表しており、ハッシュ値の計算開始時には初期化のため0を出力し、それ以外の時は計算途中のデータをそのまま出力する。
2408は、ステップθ1の処理を行う回路(以下、θ1回路2408と呼ぶ)であり、planeデータを5個入力すると5×64ビットの中間値(θ中間値)を出力する。
図22は、θ2´&ρ´&χ&ι回路2406の実装例を示す図である。θ2´&ρ´&χ&ι回路2406は、注目planeに対して2408であらかじめ計算しておいたθ中間値を使用して、出力データを算出する。
2501は、入力データを表している。入力データとしては、1クロック毎に1個のplaneが入力される。2502はθ1回路2408からの入力を表しており、θ中間値に相当する。
2503は、排他的論理和(XOR)演算部を表しており、この処理が上述したステップθ2´の演算に相当する。2504は組み合わせ回路を表しており、上述したステップρ´及びステップχ及びステップιの演算を実際に行う論理回路であり、1クロック毎に1個のplaneが出力される。2505は出力データを表しており、1クロック毎に1個のplaneが出力される。
上述したように、π回路2404をplane単位で処理し、出力されたsheet構造のデータをレジスタでsheet構造へ変換し、θ2´&ρ´&χ&ι回路2406をplane単位で処理する。そして、θ2´&ρ´&χ&ι回路2406の出力からπ回路2404の入力までの経路は組み合わせ回路のみ接続されている。すなわち、ラッチ回路を含まない構成であるため、1クロック内でデータを通過させることが可能な構成となっている。
尚、第2実施形態ではθ1回路2408への入力単位をplane構造としているが、入力単位をsheet構造としてもよい。その場合、θ1回路2408は、sheetデータを5個入力すると5×64ビットのθ中間値を出力する。
図14(b)は、第2実施形態に係る実装例における各モジュールの動作タイミングチャートである。なお、θ2´&ρ´&χ&ι回路2406の出力からπ回路2404はパイプライン処理されるよう構成されている。ラウンド処理内の全てのステップの処理において、1個のplaneが入力されたとき処理を開始できる。つまり、ラウンド処理内の全てのステップの並列動作が実現可能である。また、1回のラウンド処理にかかる時間は、平均5クロックである。
<比較>
以下では、上述の第2実施形態の実装例に対する比較対象として、仕様通りのアルゴリズムでlaneを単位として処理する実装例について説明する。仕様通りのアルゴリズムでlaneを単位として処理する実装例については、第1実施形態の内容と重複するため説明は省略する。
以下では、上述の第2実施形態の実装例に対する比較対象として、仕様通りのアルゴリズムでlaneを単位として処理する実装例について説明する。仕様通りのアルゴリズムでlaneを単位として処理する実装例については、第1実施形態の内容と重複するため説明は省略する。
図14(c)は、仕様通りのアルゴリズムでlaneを単位として処理する場合における各モジュールの動作タイミングチャートである。
図14(b)と図14(c)とを比較すると分かるように、第2実施形態の実装例の構成を用いることにより処理スループットが向上することがわかる。
すなわち、
・π回路及びθ2´&ρ´&χ&ι回路の2つの処理回路の並列動作により回路利用効率が向上可能となる。
・π回路及びθ2´&ρ´&χ&ι回路の2つの処理回路の並列動作により回路利用効率が向上可能となる。
・より少ないクロック数(時間)で1回のラウンド処理を実行することが可能となる。
以上の本実施形態で説明したように、θ1処理を行っている間に、処理単位を変換することで、データ保持するための時間を削減することが可能である。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
Claims (19)
- SHA−3アルゴリズムのラウンド処理に含まれるθ処理を実行するθ処理手段と、
前記ラウンド処理に含まれるρ処理を実行するρ処理手段と、
前記ラウンド処理に含まれるπ処理を実行するπ処理手段と、
前記ラウンド処理に含まれるχ処理を実行するχ処理手段と、
前記ラウンド処理に含まれるι処理を実行するι処理手段を有し、
前記π処理手段は、plane単位でデータ入力し、sheet単位でデータ出力することを特徴とするハッシュ値生成装置。 - 処理されたデータを保持する保持手段を有し、
前記保持手段は、sheet単位でデータ入力、plane単位でデータ出力を行うことを特徴とする請求項1に記載のハッシュ値生成装置。 - 前記保持手段は、5つのsheetが保持されたら、1つのplaneを出力することを特徴とする請求項2に記載のハッシュ値生成装置。
- 前記θ処理手段は、column和算出処理を行うθ1処理手段と、column和加算処理を行うθ2処理手段とを有することを特徴とする請求項3に記載のハッシュ値生成装置。
- 前記保持手段に、5つのsheetが入力されている間に、前記θ1処理手段が実行されることを特徴とする請求項4に記載のハッシュ値生成装置。
- 前記保持手段は、前記π処理手段で処理されたデータを保持することを特徴とする請求項2に記載のハッシュ値生成装置。
- 前記ラウンド処理において、前記π処理手段は、前記θ2処理手段と前記ρ処理手段より前に、実行されることを特徴とする請求項4に記載のハッシュ値生成装置。
- 前記θ2処理手段、前記ρ処理手段、前記χ処理手段、前記ι処理手段は、plane単位で処理されることを特徴とする請求項7に記載のハッシュ値生成装置。
- 前記保持手段は、前記ι処理手段で処理されたデータを保持することを特徴とする請求項2に記載のハッシュ値生成装置。
- 前記θ2処理手段、前記ρ処理手段は、plane単位で処理され、
前記χ処理手段、前記ι処理手段は、sheet単位で処理することを特徴とする請求項4に記載のハッシュ値生成装置。 - 前記θ手段、前記ρ手段、前記π手段、前記χ手段、前記ι手段を用いて、前記ラウンド処理を実行して得られたハッシュ値を出力する出力手段を有することを特徴とする請求項1乃至10の何れか1項に記載のハッシュ値生成装置。
- 前記planeは、x軸方向にmビット、y軸方向に1ビット、z軸方向にsビットの構造として表されるデータであり、前記sheetは、x軸方向に1ビット、y軸方向にnビット、z軸方向にsビットの構造として表されるデータであることを特徴とする請求項1乃至11の何れか1項に記載のハッシュ値生成装置。
- 前記θ処理手段は、x軸方向のビットの和を算出し、算出した和を所定のビットに加算し、
前記ρ処理手段は、各ビットの値をz軸方向にシフトし、
前記π処理手段は、x−y平面内で各ビットの値を入れ替え、
前記χ処理手段は、x軸方向のビット列内での変換を行い、
前記ι処理手段は、各ビットに所定の値を加えることを特徴とする請求項1乃至12の何れか1項に記載のハッシュ値生成装置。 - x軸方向にmビット、y軸方向にnビット、z軸方向にsビットの構造を持つデータに対して処理を行うハッシュアルゴリズムのラウンド処理において、
x軸方向のビットの和を算出し、算出した和を所定のビットに加算する第1の処理手段と、
前記z軸方向にシフトする第2の処理手段と、
x−y平面内で各ビットの値の入替を行う第3の処理手段と、
x軸方向のビット列内での変換を行う第4の処理手段と、
各ビットに所定の値を加算する第5の処理手段を有し、
前記第3の処理手段は、x軸方向にmビット、y軸方向に1ビット、z軸方向にsビットの構造として表される単位でデータが入力され、x軸方向に1ビット、y軸方向にnビット、z軸方向にsビットの構造として表される単位でデータが出力されることを特徴とするハッシュ値生成装置。 - 処理されたデータを保持する保持手段を有し、
前記保持手段は、x軸方向に1ビット、y軸方向にnビット、z軸方向にsビットの構造として表される単位でデータ入力、x軸方向にmビット、y軸方向に1ビット、z軸方向にsビットの構造として表される単位でデータ出力を行うことを特徴とする請求項14に記載のハッシュ値生成装置。 - 前記保持手段は、x軸方向に1ビット、y軸方向にnビット、z軸方向にsビットの構造として表される単位のデータが5つ保持された後に、x軸方向にmビット、y軸方向に1ビット、z軸方向にsビットの構造として表される単位のデータを1つ出力することを特徴とする請求項15に記載のハッシュ値生成装置。
- 前記第1の処理手段は、x軸方向のビットの和を算出する第6の処理手段と、算出した和を所定のビットに加算する第7の処理手段とを有することを特徴とする請求項16に記載のハッシュ値生成装置。
- 前記保持手段に、x軸方向に1ビット、y軸方向にnビット、z軸方向にsビットの構造として表される単位のデータが5つ入力されている間に、前記第6の処理手段が実行されることを特徴とする請求項17に記載のハッシュ値生成装置。
- 前記θ手段、前記ρ手段、前記π手段、前記χ手段、前記ι手段を用いて、前記ラウンド処理を実行して得られたハッシュ値を出力する出力手段を有することを特徴とする請求項14乃至18の何れか1項に記載のハッシュ値生成装置。
Priority Applications (6)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2014017413A JP6113091B2 (ja) | 2013-03-07 | 2014-01-31 | ハッシュ値生成装置 |
| PCT/JP2014/054246 WO2014136594A1 (en) | 2013-03-07 | 2014-02-17 | Hash value generating device |
| CN201480012039.3A CN105009186B (zh) | 2013-03-07 | 2014-02-17 | 哈希值生成装置 |
| KR1020157027625A KR101964495B1 (ko) | 2013-03-07 | 2014-02-17 | 해시값 생성 장치 |
| US14/773,272 US9973336B2 (en) | 2013-03-07 | 2014-02-17 | Hash value generating device |
| EP14761031.5A EP2965305B1 (en) | 2013-03-07 | 2014-02-17 | Hash value generating device |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2013045574 | 2013-03-07 | ||
| JP2013045574 | 2013-03-07 | ||
| JP2014017413A JP6113091B2 (ja) | 2013-03-07 | 2014-01-31 | ハッシュ値生成装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2014197169A JP2014197169A (ja) | 2014-10-16 |
| JP6113091B2 true JP6113091B2 (ja) | 2017-04-12 |
Family
ID=51491116
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2014017413A Active JP6113091B2 (ja) | 2013-03-07 | 2014-01-31 | ハッシュ値生成装置 |
Country Status (6)
| Country | Link |
|---|---|
| US (1) | US9973336B2 (ja) |
| EP (1) | EP2965305B1 (ja) |
| JP (1) | JP6113091B2 (ja) |
| KR (1) | KR101964495B1 (ja) |
| CN (1) | CN105009186B (ja) |
| WO (1) | WO2014136594A1 (ja) |
Families Citing this family (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP6238774B2 (ja) | 2013-02-21 | 2017-11-29 | キヤノン株式会社 | ハッシュ値生成装置 |
| US9800403B1 (en) | 2016-09-30 | 2017-10-24 | International Business Machines Corporation | Message processing using extended output functions |
| EP3786927B1 (en) * | 2018-04-26 | 2023-06-14 | Nippon Telegraph And Telephone Corporation | System, apparatus, method and program for secure aggregate median computation |
| GB2582900A (en) * | 2019-03-18 | 2020-10-14 | Pqshield Ltd | Cryptography using a cryptographic state |
| GB201911802D0 (en) | 2019-08-16 | 2019-10-02 | Pqshield Ltd | Lattice Coprocessor |
| RU2747517C1 (ru) * | 2020-03-05 | 2021-05-06 | федеральное государственное автономное образовательное учреждение высшего образования "Национальный исследовательский ядерный университет МИФИ" (НИЯУ МИФИ) | Способ хеширования информации |
| GB2608999A (en) | 2021-07-15 | 2023-01-25 | Pqshield Ltd | Cryptographic system for post-quantum cryptographic operations |
| KR102696204B1 (ko) * | 2021-12-03 | 2024-08-19 | 국민대학교산학협력단 | Sha-3 처리를 위한 그래픽 처리 장치 및 방법 |
Family Cites Families (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH04148372A (ja) * | 1990-10-11 | 1992-05-21 | Fujitsu Ltd | ハッシュ値算出処理方式 |
| WO2001029777A1 (en) * | 1999-10-18 | 2001-04-26 | Stamps.Com | Role assignments in a cryptographic module for secure processing of value-bearing items |
| US7489779B2 (en) * | 2001-03-22 | 2009-02-10 | Qstholdings, Llc | Hardware implementation of the secure hash standard |
| US7249255B2 (en) * | 2001-06-13 | 2007-07-24 | Corrent Corporation | Apparatus and method for a hash processing system using multiple hash storage areas |
| JP5055993B2 (ja) | 2006-12-11 | 2012-10-24 | ソニー株式会社 | 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム |
| US8290146B2 (en) | 2007-01-19 | 2012-10-16 | Mitsubishi Electric Corporation | Ciphertext generating apparatus, cryptographic communication system, and group parameter generating apparatus |
| US8275125B2 (en) * | 2008-04-21 | 2012-09-25 | Tata Consultancy Services Ltd | Method for designing a secure hash function and a system thereof |
| JP5414346B2 (ja) | 2009-04-28 | 2014-02-12 | 三菱電機株式会社 | データ処理装置 |
| WO2010131563A1 (ja) * | 2009-05-11 | 2010-11-18 | 日本電気株式会社 | タグ生成装置、タグ検証装置、通信システム、タグ生成方法、タグ検証方法および記録媒体 |
| US20110040977A1 (en) * | 2009-08-11 | 2011-02-17 | Apple Inc. | Sponge and hash functions using a rubik's cube puzzle process |
| WO2011068996A1 (en) * | 2009-12-04 | 2011-06-09 | Cryptography Research, Inc. | Verifiable, leak-resistant encryption and decryption |
| US8441391B2 (en) * | 2010-05-05 | 2013-05-14 | Roundtrip Llc | Ultra-secure communication methods and apparatus |
| CN101872338B (zh) * | 2010-06-04 | 2012-08-29 | 杭州电子科技大学 | 一种认证协议中得到安全消息摘要的方法 |
| JP5269137B2 (ja) | 2011-04-07 | 2013-08-21 | 三菱電機株式会社 | 演算装置 |
| US9772845B2 (en) * | 2011-12-13 | 2017-09-26 | Intel Corporation | Method and apparatus to process KECCAK secure hashing algorithm |
| WO2013095521A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Instructions processors, methods, and systems to process blake secure hashing algorithm |
| JP6238774B2 (ja) | 2013-02-21 | 2017-11-29 | キヤノン株式会社 | ハッシュ値生成装置 |
-
2014
- 2014-01-31 JP JP2014017413A patent/JP6113091B2/ja active Active
- 2014-02-17 EP EP14761031.5A patent/EP2965305B1/en active Active
- 2014-02-17 WO PCT/JP2014/054246 patent/WO2014136594A1/en not_active Ceased
- 2014-02-17 CN CN201480012039.3A patent/CN105009186B/zh active Active
- 2014-02-17 US US14/773,272 patent/US9973336B2/en active Active
- 2014-02-17 KR KR1020157027625A patent/KR101964495B1/ko active Active
Also Published As
| Publication number | Publication date |
|---|---|
| EP2965305B1 (en) | 2020-10-28 |
| JP2014197169A (ja) | 2014-10-16 |
| US20160013932A1 (en) | 2016-01-14 |
| EP2965305A1 (en) | 2016-01-13 |
| CN105009186A (zh) | 2015-10-28 |
| KR20150128836A (ko) | 2015-11-18 |
| KR101964495B1 (ko) | 2019-04-01 |
| EP2965305A4 (en) | 2016-11-16 |
| CN105009186B (zh) | 2018-03-02 |
| WO2014136594A1 (en) | 2014-09-12 |
| US9973336B2 (en) | 2018-05-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP6113091B2 (ja) | ハッシュ値生成装置 | |
| JP6238774B2 (ja) | ハッシュ値生成装置 | |
| KR20160106570A (ko) | 블록 마이닝 방법 및 장치 | |
| JP5141910B2 (ja) | Sms4暗号アルゴリズムを実現する暗号化および復号化処理方法とそのシステム | |
| JP6139859B2 (ja) | ハッシュ値生成装置およびハッシュ値生成方法 | |
| CN108959168B (zh) | 基于片上内存的sha512全流水电路及其实现方法 | |
| KR102587719B1 (ko) | 해시 알고리즘을 수행하는 회로, 컴퓨팅 칩, 데이터 처리 장치 및 방법 | |
| US20140237013A1 (en) | Pseudo-random bit sequence generator | |
| JP5269137B2 (ja) | 演算装置 | |
| CN107885486B (zh) | 一种基于查找树的复合有限域求逆装置 | |
| JP2015114429A (ja) | ハッシュ値生成装置およびその制御方法 | |
| US20160119132A1 (en) | Method and device for generating a hash value | |
| JP6067596B2 (ja) | ペアリング演算装置、マルチペアリング演算装置、プログラム | |
| CN115934092B (zh) | 一种基于sha-256算法的并行调度实现方法、系统、介质及设备 | |
| JP4990843B2 (ja) | 暗号演算装置、その方法、及びプログラム | |
| Hoang et al. | An efficient hardware implementation of number theoretic transform for CRYSTALS-Kyber post-quantum cryptography | |
| Júnior et al. | Application-Specific System Processor for the SHA-1 Hash Algorithm | |
| CN119323040A (zh) | 有限域不可约多项式的生成方法、电子设备及存储介质 | |
| Rajagopal | Hardware Acceleration of Hashing Functions for Cryptocurrency Mining Using ZYNQ SoC | |
| CN115622691A (zh) | 一种密钥的序列化方法、反序列化方法和装置 | |
| JP2005208400A (ja) | ハッシュ値算出装置及び演算装置 | |
| KR20160090646A (ko) | 고속 메시지 해싱을 위한 압축함수를 제공하는 연산 방법 및 그 장치 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20170127 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20170214 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170314 |
|
| R151 | Written notification of patent or utility model registration |
Ref document number: 6113091 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |