(57)【要約】【課題】  ハッシュ値生成のスループット向上を可能とする技術を提供する。【解決手段】  ＳＨＡ−３アルゴリズムのラウンド処理に含まれるθ処理を実行するθ処理手段と、  前記ラウンド処理に含まれるρ処理を実行するρ処理手段と、  前記ラウンド処理に含まれるπ処理を実行するπ処理手段と、前記ラウンド処理に含まれるχ処理を実行するχ処理手段と、前記ラウンド処理に含まれるι処理を実行するι処理手段を有し、  前記θ処理手段は、ｃｏｌｕｍｎ和を算出するθ１処理手段と、前記算出されたｃｏｌｕｍｎ和を所定のビットに加算するθ２処理手段とを有し、前記ラウンド処理において、前記π処理手段は、前記θ２処理手段と前記ρ処理手段より前に、実行される。【選択図】  図１３
2014186310.tif 000002
【特許請求の範囲】
【請求項１】
ＳＨＡ−３アルゴリズムのラウンド処理に含まれるθ処理を実行するθ処理手段と、
前記ラウンド処理に含まれるρ処理を実行するρ処理手段と、
前記ラウンド処理に含まれるπ処理を実行するπ処理手段と、
前記ラウンド処理に含まれるχ処理を実行するχ処理手段と、
前記ラウンド処理に含まれるι処理を実行するι処理手段を有し、
前記θ処理手段は、ｃｏｌｕｍｎ和を算出するθ１処理手段と、前記算出されたｃｏｌｕｍｎ和を所定のビットに加算するθ２処理手段とを有し、
前記ラウンド処理において、前記π処理手段は、前記θ２処理手段と前記ρ処理手段より前に、実行されることを特徴としたハッシュ生成装置。
【請求項２】
前記π処理手段は、２５個のｌａｎｅが保持手段に保持されてから、処理を行うことを特徴とする請求項１に記載のハッシュ値生成装置。
【請求項３】
前記保持手段に前記ｌａｎｅを保持している間に、前記θ１処理手段の処理が行われることを特徴とする請求項２に記載のハッシュ値生成装置。
【請求項４】
前記θ２処理手段は、前記π処理手段の処理を考慮したテーブルを用いて処理を行うことを特徴とする請求項１乃至３の何れか１項に記載のハッシュ値生成装置。
【請求項５】
前記ρ処理手段は、前記π処理手段の処理を考慮したテーブルを用いて処理を行うことを特徴とする請求項１乃至４の何れか１項に記載のハッシュ値生成装置。
【請求項６】
前記θ１処理手段、前記θ２処理手段、前記ρ処理手段、前記χ処理手段、前記ι処理手段は、ｌａｎｅ単位で処理することを特徴とする請求項１乃至５の何れか１項に記載のハッシュ値生成装置。
【請求項７】
前記π処理手段の処理後、前記θ２処理手段と前記ρ処理手段の処理を行うことを特徴とする請求項１乃至６の何れか１項に記載のハッシュ値生成装置。
【請求項８】
前記θ手段、前記ρ手段、前記π手段、前記χ手段、前記ι手段を用いて、前記ラウンド処理を実行して得られたハッシュ値を出力する出力手段を有することを特徴とする請求項１乃至７の何れか１項に記載のハッシュ値生成装置。
【請求項９】
前記θ処理手段は、ｘ軸方向のビットの和を算出し、算出した和を所定のビットに加算し、   
前記ρ処理手段は、各ビットの値をｚ軸方向にシフトし、
前記π処理手段は、ｘ−ｙ平面内で各ビットの値を入れ替え、     
前記χ処理手段は、ｘ軸方向のビット列内での変換を行い、     
前記ι処理手段は、各ビットに所定の値を加えることを特徴とする請求項１乃至８の何れか１項に記載のハッシュ値生成装置。
【請求項１０】
ｘ軸方向にｍビット、ｙ軸方向にｎビット、ｚ軸方向にｓビットの構造を持つデータに対して処理を行うハッシュアルゴリズムのラウンド処理において、
ｘ軸方向のビットの和を算出し、算出した和を所定のビットに加算する第１の処理手段と、  
前記ｚ軸方向にシフトする第２の処理手段と、
ｘ−ｙ平面内で各ビットの値の入替を行う第３の処理手段と、
ｘ軸方向のビット列内での変換を行う第４の処理手段と、
各ビットに所定の値を加算する第５の処理手段を有し、
前記第１処理手段は、ｘ軸方向のビットの和を算出する第６の処理手段と、前記算出された和を所定のビットに加算する第７の処理手段とを有し、
前記ラウンド処理において、前記第３の処理手段は、前記第７の処理手段と前記第２の処理手段より前に、実行されることを特徴とするハッシュ値生成装置。
【請求項１１】
前記第３の処理手段は、ｘ軸方向に１ビット、ｙ軸方向にｎビット、ｚ軸方向に１ビットの構造であるデータが２５個、保持手段に保持されてから、処理を行うことを特徴とする請求項１０に記載のハッシュ値生成装置。
【請求項１２】
前記保持手段に前記ｘ軸方向に１ビット、ｙ軸方向にｎビット、ｚ軸方向に１ビットの構造であるデータを保持している間に、前記第６の処理手段の処理が行われることを特徴とする請求項１１に記載のハッシュ値生成装置。
【請求項１３】
前記第７の処理手段は、前記第３の処理手段の処理を考慮したテーブルを用いて処理を行うことを特徴とする請求項１０乃至１２の何れか１項に記載のハッシュ値生成装置。
【請求項１４】
前記第２の処理手段は、前記第３の処理手段の処理を考慮したテーブルを用いて処理を行うことを特徴とする請求項１０乃至１３の何れか１項に記載のハッシュ値生成装置。
【請求項１５】
前記θ手段、前記ρ手段、前記π手段、前記χ手段、前記ι手段を用いて、前記ラウンド処理を実行して得られたハッシュ値を出力する出力手段を有することを特徴とする請求項１０乃至１４の何れか１項に記載のハッシュ値生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハッシュ値を生成する技術に関するものである。
【背景技術】
【０００２】
データの改ざんがないかを検証するために、暗号学的ハッシュアルゴリズムを用いて算出されるハッシュ値が利用されている。暗号学的ハッシュアルゴリズムであるＳＨＡ−１は安全性が確保できないことが既に証明されており、ＳＨＡ−２ファミリー（ＳＨＡ−２２４，ＳＨＡ−２５６，ＳＨＡ−３８４，ＳＨＡ−５１２）も安全性が崩れる可能性が指摘されている。そこで、アメリカ国立標準技術研究所（ＮＩＳＴ）は、次世代の暗号学的ハッシュアルゴリズム（ＳＨＡ−３）を策定すべく新しいアルゴリズムを公募した。そして、２０１２年１０月に、ＫＥＣＣＡＫアルゴリズム（非特許文献１）がＳＨＡ−３のアルゴリズムとして選定された。
【０００３】
ＳＨＡ−３では、任意の長さの入力メッセージ（データ）に対して固定長の暗号学的ハッシュ値を出力する。ＫＥＣＣＡＫアルゴリズムにおいては、５つのステップ（θ、ρ、π、χ、ι）を順に適用するラウンド処理を２４回繰り返す置換関数（ｐｅｒｍｕｔａｔｉｏｎ  ｆｕｎｃｔｉｏｎ）が用いられている。また、ラウンド処理は、”ｓｔａｔｅ”と呼ばれる１６００ビット長のデータに対して実行される。  
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“Ｔｈｅ  ＫＥＣＣＡＫ  ｒｅｆｅｒｅｎｃｅ”，  Ｖｅｒｓｉｏｎ  ３．０，  Ｊａｎｕａｒｙ  １４，  ２０１１，  （ｈｔｔｐ：／／ｋｅｃｃａｋ．ｎｏｅｋｅｏｎ．ｏｒｇ／Ｋｅｃｃａｋ−ｒｅｆｅｒｅｎｃｅ−３．０．ｐｄｆ）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ラウンド処理の５つのステップのうち、θ処理とπ処理はそれぞれ行うために、先行する処理の結果をたくさん、一旦メモリに貯める必要がある。そのため、θ、ρ、π、χ、ιのステップ順にラウンド処理を行うと、１回のラウンド処理において、２回、先行する処理の結果をたくさん、一旦メモリに貯める必要があり、高速化が困難であった。
【０００６】
本発明は、上述の問題点に鑑みなされたものであり、ハッシュ値生成のスループット向上を可能とする技術を提供することを目的としている。
【課題を解決するための手段】
【０００７】
上述の問題点を解決するため、本発明のハッシュ値生成装置は以下の構成を備える。すなわち、
ＳＨＡ−３アルゴリズムのラウンド処理に含まれるθ処理を実行するθ処理手段と、  前記ラウンド処理に含まれるρ処理を実行するρ処理手段と、  前記ラウンド処理に含まれるπ処理を実行するπ処理手段と、前記ラウンド処理に含まれるχ処理を実行するχ処理手段と、前記ラウンド処理に含まれるι処理を実行するι処理手段を有し、  前記θ処理手段は、ｃｏｌｕｍｎ和を算出するθ１処理手段と、前記算出されたｃｏｌｕｍｎ和を所定のビットに加算するθ２処理手段とを有し、前記ラウンド処理において、前記π処理手段は、前記θ２処理手段と前記ρ処理手段より前に、実行されることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、ハッシュ値生成のスループット向上を可能とする技術を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】ＫＥＣＣＡＫアルゴリズムを説明するための図である。
【図２】データ構造を説明する図である。
【図３】ステップθの処理を説明する図である。
【図４】ステップρの処理を説明する図である。
【図５】ステップπの処理を説明する図である。
【図６】ステップχの処理を説明する図である。
【図７】ステップιの処理を説明する図である。
【図８】ステップιにおけるラウンド定数を示す図である。
【図９】ラウンド処理Ｒ´の概要を説明する図である。
【図１０】ステップρ´の処理を説明する図である。
【図１１】ステップθ１の処理を説明する図である。
【図１２】ステップθ２の処理を説明する図である。
【図１３】第１実施形態に係るＫＥＣＣＡＫアルゴリズムの実装例の概略構成を示す図である。
【図１４】出力タイミングチャートである。
【図１５】ＫＥＣＣＡＫアルゴリズムをｌａｎｅを単位として処理する場合の実装例の概略構成を示す図である。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１１】
（第１実施形態）
本発明に係るハッシュ値生成装置の第１実施形態として、ＳＨＡ−３（ＫＥＣＣＡＫアルゴリズム）のハッシュ値を生成する装置を例に挙げて以下に説明する。なお、以下の説明において、具体的なデータ長やビット値が示されている場合があるが、本発明はこれらの具体的な値に限定されるものでは無い。
【００１２】
まず、ＫＥＣＣＡＫアルゴリズムについて説明する。なお、より詳細な仕様については、背景技術で示した非特許文献１に記載されている。
【００１３】
図１（ａ）は、ＫＥＣＣＡＫアルゴリズムの全体の概要を示す図である。１０１は、メッセージブロック（ｍ１〜ｍｔ）を表している。メッセージブロック（ｍ１〜ｍｔ）は、ハッシュ値生成の対象となる入力メッセージを１０２４ビット毎に分割することにより生成される。
【００１４】
１０２と１０３は初期値を表しており、ここでは初期値は全ビットが０である。ここでは、初期値の全ビットが０である例で説明するが、これに限定されない。また、初期値１０２の長さは、上述のメッセージブロックの長さと同じ１０２４ビットであり、初期値１０２と初期値１０３の長さの合計は１６００ビットである。１０４は、ビット単位の排他的論理和（ＸＯＲ）演算部を表している。つまり、ＸＯＲ演算部１０４は、２つの１０２４ビットの入力データに対し、各ビットで排他的論理和を計算した結果を１０２４ビットのデータとして出力する。
【００１５】
１０５は、置換関数（ｐｅｒｍｕｔａｔｉｏｎ  ｆｕｎｃｔｉｏｎ）であるＫＥＣＣＡＫ−ｆを表しており、２つの入力データを受け取り、２つのデータを出力する。１０５の詳細については図１（ｂ）を参照して後述する。１０６は、切り取り部を表しており、１０２４ビットの入力データから、必要なサイズだけ切り出して、出力する。１０７は、このアルゴリズムの計算結果である暗号学的ハッシュ値（すなわち、ハッシュ値）を表している。
【００１６】
図１（ｂ）は、置換関数であるＫＥＣＣＡＫ−ｆ１０５の概要を説明する図である。２０１はラウンド処理Ｒを表しており、２４回実行される。ラウンド処理Ｒの詳細は後述する。２０２と２０３は、入力データを表している。入力データ２０２の長さは、１０２４ビットである。また、入力データ２０２と入力データ２０３の長さの合計は、１６００ビットである。入力データ２０２及び入力データ２０３の２つが結合されて、ラウンド処理Ｒ２０１に入力される。２０４と２０５は、出力データを表している。出力データ２０４の長さは、１０２４ビットである。また、出力データ２０４と出力データ２０５の長さの合計は、１６００ビットである。
【００１７】
図１（ｃ）は、ラウンド処理Ｒ２０１の概要を説明する図である。上述したように、ラウンド処理Ｒ２０１においては、入力データと出力データの長さは共に１６００ビットである。ラウンド処理Ｒ２０１で、入力データに対し、後述する５つのステップの処理（θ処理３０１，ρ処理３０２，π処理３０３，χ処理３０４，ι処理３０５）を順に適用して出力データを生成する。
【００１８】
以下では、ＫＥＣＣＡＫアルゴリズムのラウンド処理で用いられるデータ構造及び上述の５つのステップの詳細について説明する。
【００１９】
図２（ａ）は、ラウンド処理Ｒ２０１の入出力時のデータ構造である”ｓｔａｔｅ”を説明する図である。上述したように入力データと出力データはともに１６００ビットである。そして、当該１６００ビットのデータは、３次元配列において、幅（ｘ軸方向）５ビット、高さ（ｙ軸方向）５ビット、奥行き（ｚ軸方向）６４ビットの直方体として表される。この直方体のデータ構造を”ｓｔａｔｅ”と呼ぶ。なお、詳細は、図２（ｆ）を参照して後述するが、直方体として表されるｓｔａｔｅ構造に対して、１６００ビットのデータは、ｚ軸方向、ｘ軸方向、ｙ軸方向の順に割り当てられる。
【００２０】
図２（ｂ）は、データ構造”ｐｌａｎｅ”を説明する図である。ｐｌａｎｅ構造は、ｘ−ｚ平面に平行な、幅５ビット、高さ１ビット、奥行き６４ビットの平面構造として表される。つまり、上述のｓｔａｔｅ構造は、ｐｌａｎｅ構造をｙ軸方向に５個重ねたものとして考えることができる。
【００２１】
図２（ｃ）は、データ構造”ｓｈｅｅｔ”を説明する図である。ｓｈｅｅｔ構造は、ｙ−ｚ平面に平行な、幅１ビット、高さ５ビット、奥行き６４ビットの平面構造として表される。つまり、上述のｓｔａｔｅ構造は、ｓｈｅｅｔ構造をｘ軸方向に５個横に並べたものとして考えることができる。
【００２２】
図２（ｄ）は、データ構造”ｌａｎｅ”を説明する図である。ｌａｎｅ構造は、ｚ軸に平行な、幅１ビット、高さ１ビット、奥行き６４ビットの直線構造として表される。つまり、上述のｓｔａｔｅ構造は、ｌａｎｅ構造をｘ−ｙ平面に沿って２５個寄せ集めたものとして考えることができる。図２（ｆ）は、１個のｓｔａｔｅ構造を構成する２５個のｌａｎｅの順番を表す図である。
【００２３】
図２（ｅ）は、データ構造”ｃｏｌｕｍｎ”を説明する図である。ｃｏｌｕｍｎ構造は、ｙ軸に平行な、幅１ビット、高さ５ビット、奥行き１ビットの直線構造として表される。つまり、上述のｓｈｅｅｔ構造は、ｃｏｌｕｍｎ構造をｚ軸方向に６４個並べたものとして考えることができる。
【００２４】
なお、第１実施形態では、入力データが１６００ビットである場合について説明するが、本発明はこれに限定されるものでは無い。また、ｓｔａｔｅ構造のデータを、幅（ｘ軸方向）５ビット、高さ（ｙ軸方向）５ビット、奥行き（ｚ軸方向）６４ビットの直方体のデータ構造として扱う例について説明するが、これに限定されない。例えば、入力データが８００ビットであり、ｓｔａｔｅ構造のデータを、幅５ビット、高さ５ビット、奥行き３２ビットの直方体のデータ構造として扱ってもよい。
【００２５】
また、ｐｌａｎｅ構造、ｓｈｅｅｔ構造、ｌａｎｅ構造、ｃｏｌｕｍｎ構造は、ｓｔａｔｅ構造の幅（ｘ軸方向）、高さ（ｙ軸方向）、奥行き（ｚ軸方向）の各ビット数に応じて変更される。すなわち、ｓｔａｔｅ構造のデータが、ｘ軸方向にｍビット、ｙ軸方向にｎビット、ｚ軸方向にｓビットである場合、ｐｌａｎｅ構造は、ｘ軸方向にｍビット、ｙ軸方向に１ビット、ｚ軸方向にｓビットである平面構造である。ｓｈｅｅｔ構造は、ｘ軸方向に１ビット、ｙ軸方向にｎビット、ｚ軸方向にｓビットである平面構造である。ｌａｎｅ構造は、ｘ軸方向に１ビット、ｙ軸方向に１ビット、ｚ軸方向にｓビットの直線構造である。ｃｏｌｕｍｎ構造は、ｘ軸方向に１ビット、ｙ軸方向にｎビット、ｚ軸方向に１ビットの直線構造である。
【００２６】
次に、ＫＥＣＣＡＫ−ｆ１０５に入力される入力データ２０２及び入力データ２０３から、１回目のラウンド処理Ｒ２０１の入力データを作成する方法について説明する。まず、入力データ２０２及び入力データ２０３を順に連結して、１６００ビットのデータブロックを生成する。次に、１６００ビットのデータを、６４ビット毎に分割し、２５個のｌａｎｅを生成する。最後に、２５個のｌａｎｅを、図２（ｆ）に示す番号順にｘ−ｙ平面に沿って配列し１個のｓｔａｔｅとして組み上げる。このようにして、生成したｓｔａｔｅ構造がラウンド処理Ｒ２０１に入力されることになる。なお、２４回目のラウンド処理Ｒ２０１の出力データから、出力データ２０４及び出力データ２０５を生成する方法についても同様であるため説明は省略する。
【００２７】
次に、ラウンド処理Ｒ２０１を構成する５つのステップ（ステップθ、ステップρ、ステップπ、ステップχ、ステップι）の処理について説明する。なお、各ステップにおいて、入力データと出力データのデータ構造は、ｓｔａｔｅ構造である。
【００２８】
図３（ａ）は、ステップθの処理（θ処理３０１）を説明する図である。ステップθは、各ビットに対して近傍の２つのｃｏｌｕｍｎの和を加える処理である。より具体的には、出力ｓｔａｔｅの各ビットは、次のように計算される。入力ｓｔａｔｅのうち、”同じ場所にあるビットの値”と、”ｘ軸方向で−１の場所にあるｃｏｌｕｍｎのビットの和”と、”ｘ軸方向で＋１かつｚ軸方向で−１の場所にあるｃｏｌｕｍｎのビットの和”との３つ値の和として計算される。ここで、和とは、ＧＦ（２）上での和のことであり、排他的論理和の演算と同一の結果になる。式で書くと、次のようになる。
【００２９】
【数１】
2014186310.tif 000003
【００３０】
ここで、ｘは０〜４、ｙは０〜４、ｚは０〜６３である。
【００３１】
図３（ｂ）は、端の部分（例えばｘ＝０）のビットを求める場合におけるステップθの処理を説明する図である。ｘ＝０のビットを求めたい場合、”ｘ軸方向で−１の場所にあるｃｏｌｕｍｎ”は、ｓｔａｔｅの反対側、つまり”ｘ＝４の場所にあるｃｏｌｕｍｎ”に相当する。このように、ｓｔａｔｅからはみ出す座標については、ｓｔａｔｅの反対側の位置になる。つまり、座標値は同一ｓｔａｔｅ内で循環シフトする。このルールは、ｘ座標、ｙ座標、ｚ座標の何れも同じであり、また、他の４つのステップでも同様である。
【００３２】
図４は、ステップρの処理（ρ処理３０２）を説明する図である。ステップρは、ｚ軸方向に各ビットの値をシフトする処理である。より具体的には、図４（ａ）に示すように、ｓｔａｔｅの各ｌａｎｅ内の値を、指定されたビットだけｚ方向に循環シフトし出力する。各ｌａｎｅにおいてシフトするビット数は、予め定められており、図４（ｂ）に示している数字の通りである。尚、ρ処理を実行するために、予め、保持部に、図４（ｃ）に示すような、シフト量を示すテーブルを保持しておき、保持しているテーブルを用いて、ρ処理を実行する。
【００３３】
図５は、ステップπの処理（π処理３０３）を説明する図である。ステップπは、ｘ−ｙ平面（”ｓｌｉｃｅ”とも呼ばれる）内での各ビットの値の入れ替えを行う処理、つまり、同一ｓｔａｔｅ内の２５個のｌａｎｅを入れ替える処理を行う。より具体的には、入力ｓｔａｔｅの各ｌａｎｅに対し図５（ａ）の上段に示すように番号をふった場合、出力ｓｔａｔｅは下段に示すようになる。尚、π処理を実行するために、予め、保持部に、図５（ｂ）に示すような、入替先を示すテーブルを保持しておき、保持しているテーブルを用いて、π処理を実行する。
【００３４】
図６は、ステップχの処理（χ処理３０４）を説明する図である。ステップχは、ｘ軸方向（”ｒｏｗ”とも呼ばれる）のビット列内での変換を行う処理であり、出力ｒｏｗの各ビットの値は、同一の入力ｒｏｗの３つのビットに基づき導出される。より具体的には、出力ｒｏｗの各ビットの値は、入力ｒｏｗの各ビットに対し、ｘ軸方向で＋１の場所にあるビットが０、かつ、ｘ軸方向で＋２の場所にあるビットが１の場合にビットの値が反転するように設定される。
【００３５】
図７は、ステップιの処理（ι処理３０５）を説明する図である。ステップιは、各ビットにラウンド定数を加える処理である。また、図８は、ステップιにおけるラウンド定数を示す図である。ステップιは、ｘ＝ｙ＝０のｌａｎｅのビット列に対して、ラウンド毎に予め定められたラウンド定数（６４ビット値）との排他的論理和（ＸＯＲ）を適用する。具体的には、ｘ＝ｙ＝０のｌａｎｅの６４ビット値（ｚ＝６３のビットをＭＳＢ、ｚ＝０のビットをＬＳＢとする）と、図８に示されるラウンド定数とのビット毎の排他的論理和を計算する。そして、その結果を、出力ｓｔａｔｅにおけるｘ＝ｙ＝０のｌａｎｅのビット列として設定する。
【００３６】
上述した、各ステップ（ステップθ，ステップρ，ステップπ，ステップχ，ステップι）の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
【００３７】
・ステップθは、ｓｔａｔｅ内の各ｌａｎｅの計算において、ｘ軸方向に関して−１のｓｈｅｅｔと＋１のｓｈｅｅｔのデータを使用する。そのため、最初の３つ分のｓｈｅｅｔが完全に揃う時、つまり、２５個のｌａｎｅのうち２３個のｌａｎｅを前段の処理から受け取った時、ステップθの処理を開始することができる。
【００３８】
・ステップρは、ｌａｎｅ毎に独立した計算である。そのため、前段（ステップθ）の計算結果が１個のｌａｎｅ分出力された時点で、ステップρの処理を開始することができる。
【００３９】
・ステップπは、ｓｔａｔｅ内の各ｌａｎｅを入れ替える。そのため、前段（ステップρ）の計算結果が１個のｓｔａｔｅ全体、すなわち２５個のｌａｎｅ分出力された時点で、ステップπの処理を開始することができる。
【００４０】
・ステップχは、ｓｔａｔｅ内の各ｌａｎｅの計算において、ｘ軸方向で＋１のｌａｎｅ及びｘ軸方向で＋２のｌａｎｅを使用する。そのため、３個目のｌａｎｅのデータを受け取った時点で、ステップχの処理を開始することできる。
【００４１】
・ステップιは、ｌａｎｅ毎に独立した計算である。そのため、前段（ステップχ）の計算結果が１個のｌａｎｅ分出力された時点で、ステップιの処理を開始することができる。
【００４２】
すなわち、ステップθ及びステップπ及びステップχにおいては、前段のステップの計算結果がそれぞれ２３個、２５個、３個のｌａｎｅ分出力されるまで、処理を開始することができない。このように、特にステップθ及びステップπの２処理の実行開始は、前段の処理開始から長い時間待った後でなければならない。
【００４３】
つまり、ステップθとステップπのどちらかの開始時間を早めることができれば、スループットが向上する。しかし、ＫＥＣＣＡＫアルゴリズムの仕様と同一の演算順序では早めることができない。そのため、スループットを向上するためには、演算順序をＫＥＣＣＡＫアルゴリズムとは別のものに変更する必要がある。
【００４４】
次に、ラウンド処理Ｒ´９０１について説明する。ラウンド処理Ｒ´９０１は、本実施形態で用いる処理であり、ラウンド処理Ｒ２０１と同じ結果になるように設計されているが、ＫＥＣＣＡＫアルゴリズムの仕様とは処理内容が異なる。
【００４５】
図９（ａ）は、ラウンド処理Ｒ´９０１の概要を説明する図である。ラウンド処理Ｒ´９０１は、処理結果がラウンド処理Ｒ２０１と同じになるように設計されている。ラウンド処理Ｒ´９０１は、入力データに対し、６つのステップの処理（θ１処理９０２、π処理９０３、θ２処理９０４、ρ´処理９０５、χ処理９０６、ι処理９０７）を適用して出力データを生成する。
【００４６】
ここで、π処理９０３、χ処理９０６、ι処理９０７は、それぞれ、ラウンド処理Ｒ２０１におけるπ処理３０３、χ処理３０４、ι処理３０５と、処理は同じである。ρ´処理９０５は、ラウンド処理Ｒ２０１におけるρ処理３０２と同じように、ｚ軸方向に各ビットをシフトする処理であるが、シフトするビット数が異なる。θ１処理９０２とθ２処理９０４は、ラウンド処理Ｒ２０１におけるθ処理３０１の処理を分離したものである。
【００４７】
ラウンド処理Ｒ´９０１内の処理のうち、π処理とχ処理とι処理はラウンド処理Ｒ２０１内のものと同じ処理であるため、説明は省略する。以下では、ρ´処理、θ１処理、θ２処理について説明する。
【００４８】
図１０（ａ）は、ステップρ´の処理（ρ´処理９０５）を説明する図である。ステップρ´は、ステップρと同様に、ｚ軸方向に各ビットの値を循環シフトする処理である。ただし、各ｌａｎｅにおいて循環シフトするビット数はステップρと異なり、図１０（ｂ）に示している数字の通りである。尚、ρ´処理を実行するために、予め、保持部に、図１０（ｃ）に示すような、シフト量を示すテーブルを保持しておき、保持しているテーブルを用いて、ρ´処理を実行する。このテーブルは、π処理を考慮したテーブルである。詳細は後述する。
【００４９】
ここで、ラウンド処理Ｒ´９０１の処理結果とラウンド処理Ｒ２０１の処理結果が同じであることを説明するために、まず、ラウンド処理Ｒ２０１の処理結果と、ラウンド処理Ｒ´´９１１の処理結果が同じであることを説明する。
【００５０】
図９（ｂ）は、ラウンド処理Ｒ´´９１１の図である。ラウンド処理Ｒ´´９１１は、入力データに対し、５つのステップの処理（θ処理９１２、π処理９１３、ρ´処理９１５、χ処理９１６、ι処理９１７）を適用して出力データを生成するとする。ここで、θ処理９１２、π処理９１３、χ処理９１６、ι処理９１７は、ラウンド処理Ｒ２０１におけるθ処理３０１，π処理３０３，χ処理３０４，ι処理３０５と、それぞれ同じ処理である。ρ´処理９１５は、ラウンド処理Ｒ´９０１におけるρ´処理９０５と同じ処理である。
【００５１】
ラウンド処理Ｒ２０１とラウンド処理Ｒ´´９１１を比較すると、ラウンド処理Ｒ２０１では、ρ処理３０２、π処理３０３の順に実行するのに対し、ラウンド処理Ｒ´´９１１では、π処理９１３、ρ´処理９１５の順で実行する点が異なる。
【００５２】
ここで、ラウンド処理Ｒ２０１における、ステップρは、ｌａｎｅ毎に決められたルールで、ｚ軸方向にシフトするステップで、ステップπは、各ｌａｎｅを入れ替えるステップである。それに対して、ラウンド処理Ｒ´´９１１では、各ｌａｎｅを入れ替えるステップ（ステップπの処理）を先に行い、その後、入替処理を考慮したｌａｎｅ毎に決められたルールで、ｚ軸方向にシフトするステップ（ステップρ´の処理）を行う。つまり、ラウンド処理Ｒ´´９１１では、ステップπを先に行うが、ステップρ´で、ｚ軸方向にシフトするシフト量を、ステップπの処理を考慮して変更することで、ラウンド処理Ｒ´´９１１の処理結果とラウンド処理Ｒ２０１の処理結果が同じになる。
【００５３】
図１０（ｃ）は、ステップρ´を行う際に用いる各ｌａｎｅのシフト量を示すテーブルである。
【００５４】
図１０（ｃ）に示しているテーブルの生成方法について具体的に解説する。まず、ラウンド処理Ｒ２０１について考える。ラウンド処理Ｒ２０１では、ρ処理３０２とπ処理３０３を順に行う。図４（ｂ）に示している数字は、ステップρにおけるシフト量であり、たとえば、ｘ＝０，ｙ＝４の位置のｌａｎｅのシフト量は１８ｂｉｔであることを表している。次に、π処理によるｌａｎｅの入れ替えを、図５を使って確認すると、ｘ＝０，ｙ＝４の位置のｌａｎｅは、ｘ＝４，ｙ＝２の位置に移動する。
【００５５】
次に、ラウンド処理Ｒ´´９１１について考える。ラウンド処理Ｒ´´９１１では、π処理９１３とρ´処理９１５を順に行う。ρ´処理の前にπ処理が行われているので、ρ´処理において１８ｂｉｔシフトしなければならないｌａｎｅは、ｘ＝４，ｙ＝２の位置にあるｌａｎｅとなる。よって、図１０（ｂ）に示している数字の、ｘ＝４，ｙ＝２の位置にある数字は、１８となる。他のｌａｎｅのシフト量も、同様にして求めることで、図１０（ｂ）に示している数字となる。
【００５６】
つまり、図１０（ｃ）が示す、ステップρ´を行う際の各ｌａｎｅのシフト量を示すテーブルは、π処理の入替処理を考慮したテーブルである。
【００５７】
次に、ラウンド処理Ｒ´´９１１の処理結果とラウンド処理Ｒ´９０１の処理結果が同じであることを説明する。
【００５８】
ここで、π処理９０３、ρ´処理９０５、χ処理９０６、ι処理９０７は、ラウンド処理Ｒ´´９１１におけるπ処理９１３、ρ´処理９１５、χ処理９１６、ι処理９１７と、それぞれ同じ処理である。θ１処理９０２、θ２処理９０４は、θ処理９１２を分離した処理である。
【００５９】
ラウンド処理Ｒ´´９１１とラウンド処理Ｒ´９０１を比較すると、ラウンド処理Ｒ´´９１１では、θ処理９１２、π処理９１３の順に実行するのに対し、ラウンド処理Ｒ´９０１では、θ１処理９０２、π処理９０３、θ２処理９０４の順で実行する点が異なる。
【００６０】
ここで、ラウンド処理Ｒ´´９１１において、ステップθは、各ビットに対して近傍の２つのｃｏｌｕｍｎの和を加えるステップであり、ステップπは、各ｌａｎｅを入れ替えるステップである。それに対して、ラウンド処理Ｒ´９０１は、各ビットに対して近傍の２つのｃｏｌｕｍｎの和を求め（ステップθ１）、その後、各ｌａｎｅを入れ替え（ステップπ）、各ｌａｎｅの入れ替えを考慮したビットにｃｏｌｕｍｎの和を加える（ステップθ２）。
【００６１】
図１１は、ステップθ１の処理を説明する図である。ステップθ１は、ステップθの前半の演算に対応しており、ｃｏｌｕｍｎ和算出処理を実行するステップである。具体的には、ｃｏｌｕｍｎ毎に、”ｘ軸方向で−１の場所にあるｃｏｌｕｍｎのビットの和”と、”ｘ軸方向で＋１かつｚ軸方向で−１の場所にあるｃｏｌｕｍｎのビットの和”の２つの値の和（θ中間値と呼ぶことにする）を計算するための処理である。２５個のｌａｎｅデータを受け取った後に、各ｃｏｌｕｍｎに対して１ビットずつ、合計５×６４ビット分のθ中間値を出力する。θ中間値全体の構造は、ｘ−ｚ平面に平行な、幅５ビット、高さ１ビット、奥行き６４ビットの平面構造として表される。
【００６２】
図１２（ａ）は、ステップθ２の処理を説明する図である。ステップθ２は、ステップθの後半の演算に対応しており、ｃｏｌｕｍｎ和加算処理を実行するステップである。つまり、ステップθ２は、ステップθ１で求めたθ中間値を、各ビットに加算するステップである。
【００６３】
ただし、ステップθ２においては、すでにステップπが実行されていることに注意する必要がある。具体的には、ラウンド処理Ｒ´´９１１のステップθ（つまり、ラウンド処理Ｒ２０１のステップθ）の場合は、各ビットのｘ座標と各ビットの計算に使用するθ中間値のｘ座標は等しいものとなる。しかし、ラウンド処理Ｒ´９０１のステップθ２の場合は、各ビットのｘ座標と各ビットの計算に使用するθ中間値のｘ座標は異なり、ステップπの各ｌａｎｅの入れ替えを考慮したｘ座標となる。各ビットの計算に使用するθ中間値のｘ座標は、図１２（ｂ）に示している数字の通りである。尚、θ２処理を実行するために、予め、保持部に、図１２（ｃ）に示すような、各ビットの計算に使用するθ中間値のｘ座標を示すテーブルを保持しておき、保持しているテーブルを用いて、θ２処理を実行する。
【００６４】
図１２（ｃ）に示しているテーブルの生成方法について具体的に解説する。まず、ラウンド処理Ｒ´´９１１について考える。ステップθにおける各ビットの計算に必要なθ中間値のｘ座標は、各ビットのｘ座標と等しい。たとえば、ステップθにおいて、ｘ＝０，ｙ＝４の位置のビットは、ｘ＝０のθ中間値を使って演算を行う。次に、ステップπによるｌａｎｅの入れ替えを、図５を使って確認すると、ｘ＝０，ｙ＝４の位置のビットは、ｘ＝４，ｙ＝２の位置に移動する。
【００６５】
次に、ラウンド処理Ｒ´９０１について考える。ステップθ２ではステップπがすでに行われているので、ステップθ２において、ｘ＝４，ｙ＝２の位置にあるビットの計算に必要なθ中間値のｘ座標は、ｘ＝０であることがわかる。そのため、図１２（ｂ）に示している数字の、ｘ＝４，ｙ＝２の位置にある数字は、０となる。他のビットにおけるθ中間値のｘ座標も、同様にして求めることで、図１２（ｂ）に示している数字となる。
【００６６】
つまり、図１２（ｃ）が示す、ステップθ２を行う際のθ中間値のｘ座標を示すテーブルは、π処理の入替処理を考慮したテーブルである。
【００６７】
以上説明したように、ラウンド処理Ｒ２０１の処理結果とラウンド処理Ｒ´´９１１の処理結果は同じであり、また、ラウンド処理Ｒ´´９１１の処理結果とラウンド処理Ｒ´９０１の処理結果は同じである。従って、ラウンド処理Ｒ´９０１の処理結果とラウンド処理Ｒ２０１の処理結果は同じとなる。
【００６８】
上述した、各ステップ（ステップθ１，ステップθ２、ステップρ´）の処理内容から、各ステップの処理を開始するにあたり以下の制約があることが分かる。
【００６９】
・ステップθ１は、和の計算であるため、ｓｔａｔｅ内の各ｌａｎｅが入力される毎に、計算途中のθ中間値を更新していく処理となる。そのため、前段の計算結果が１個のｌａｎｅ分出力された時点で、ステップθ１の処理を開始することができる。
【００７０】
・ステップθ２は、ｓｔａｔｅ内の各ｌａｎｅの計算において、ステップθ１で計算したθ中間値を加算する。ステップθ２開始時点で、ステップθ１の実行は完了しているため、前段（ステップπ）の計算結果が１個のｌａｎｅ分出力された時点で、ステップθ２の処理結果の出力を開始することができる。
【００７１】
・ステップρ´は、ｌａｎｅ毎に独立した計算である。そのため、前段（ステップθ２）の計算結果が１個のｌａｎｅ分出力された時点で、ステップρ´の処理を開始することができる。
【００７２】
すなわち、ステップθ１及びステップθ２及びステップρ´においては、前段のステップの計算結果のうち１個のｌａｎｅ分出力された時点で、処理を開始することができる。
【００７３】
また、ステップπ、ステップχ，ステップιの処理内容から、各ステップの処理を開始するにあたり以下の制約がある。
【００７４】
・ステップπは、ｓｔａｔｅ内の各ｌａｎｅを入れ替える。そのため、前段（ステップρ）の計算結果が１個のｓｔａｔｅ全体、すなわち２５個のｌａｎｅ分出力された時点で、ステップπの処理を開始することができる。
【００７５】
・ステップχは、ｓｔａｔｅ内の各ｌａｎｅの計算において、ｘ軸方向で＋１のｌａｎｅ及びｘ軸方向で＋２のｌａｎｅを使用する。そのため、３個目のｌａｎｅのデータを受け取った時点で、ステップχの処理を開始することできる。
【００７６】
・ステップιは、ｌａｎｅ毎に独立した計算である。そのため、前段（ステップχ）の計算結果が１個のｌａｎｅ分出力された時点で、ステップιの処理を開始することができる。
【００７７】
すなわち、ステップπにおいては、前段のステップの計算結果が２５個分出力されるまで、処理を開始することができない。しかしながら、ステップχ及びステップιにおいては、前段のステップの計算結果のうち、それぞれ、３個のｌａｎｅ分、１個のｌａｎｅ分出力された時点で、処理を開始することができる。
【００７８】
つまり、ステップπ以外では、処理の実行開始前に、前段の処理開始から長い時間待つ必要はない。
【００７９】
そのため、ラウンド処理Ｒ２０１の代わりにラウンド処理Ｒ´９０１を用いることで、スループットが向上する。そこで、以下では、ラウンド処理Ｒ´９０１の構成について説明する。
【００８０】
＜装置構成および動作＞
図１３は、第１実施形態に係るＫＥＣＣＡＫアルゴリズムの実装例の概略構成を示す図である。２１０１は、入力データを表している。ここでは、ｌａｎｅ単位で入力される。２１０２は、排他的論理和（ＸＯＲ）演算部を表しており、ラウンド処理を２４回実行するたびに、メッセージブロックと内部データの排他的論理和を計算する。２１０３は、ｓｔａｔｅで表される内部データ全体を保持するレジスタを表している。
【００８１】
２１０４は、ステップθ１を処理するための回路（θ１回路）を表している本実施形態では、ｌａｎｅが入力されるたびに、ｃｏｌｕｍｎの加算を行い、結果として、２５個のｌａｎｅが入力された後に、５×６４ビットのθ中間値を出力する。
【００８２】
２１０５は、ステップπを処理するための回路（π回路）を表している。π回路２１０５は、レジスタ２１０３に、２５個のｌａｎｅ、すなわち、ｓｔａｔｅが保持された後に、処理が実行される。入出力のデータ幅は、１６００ｂｉｔとする。
【００８３】
２１０６は、ステップθ２を処理するための回路（θ２回路）を表している。２１０７は、ステップρ´を処理するための回路（ρ´回路）を表している。２１０８は、ステップχを処理するための回路（χ回路）を表している。２１０９は、ステップιを処理するための回路（ι回路）を表している。θ２回路２１０６、ρ´回路２１０７、ι回路２１０９は、それぞれ、ｌａｎｅ単位で処理され、ｌａｎｅが入力されるたびに処理を実行する。χ回路２１０８は、３個のｌａｎｅが入力されてから処理が実行されるが、３個のｌａｎｅが入力された以降は、ｌａｎｅが入力されるたびに処理を実行する。
【００８４】
図１４（ａ）は、第一実施形態に係る実装例における各モジュールの出力タイミングチャートである。図１４（ａ）は、ラウンド処理Ｒ´９０１を２回実行した場合のものである。１回のラウンド処理にかかる時間が、平均２８クロックとなる。
【００８５】
＜仕様通りのアルゴリズムでｌａｎｅ単位で処理を行った場合の例＞
以下では、上述の第１実施形態の実装例に対する比較対象として、仕様通りのアルゴリズムでｌａｎｅを単位として処理する実装例について説明する。
【００８６】
図１５は、ＫＥＣＣＡＫアルゴリズムを仕様通りにｌａｎｅを単位として処理する場合の実装例の概略構成を示す図である。なお、５つのステップ（θ，ρ，π，χ，ι）の処理は上述したものと同じであるため説明は省略する。
【００８７】
１８０１は、入力データを表している。入力データ１８０１から、１クロック毎に１個のｌａｎｅ（６４ビット長のデータ）を受信する。なお、ｌａｎｅは、１個のｓｔａｔｅの中から図２（ｆ）に示される順に受信される。
【００８８】
１８０２は、排他的論理和の処理を表しており、ラウンド処理を２４回実行するたびに、メッセージブロックと内部データの排他的論理和を計算する演算部である。
【００８９】
１８０３は、ｓｔａｔｅで表される内部データ全体を保持するレジスタである。１８０４は、ステップπを実行する処理ブロック（π回路）である。ただし、上述したように、ステップπの処理は、ステップρの処理を完了した後でのみ実行可能となる。１８０５は、ステップθを実行する処理ブロック（θ回路）、１８０６は、ステップρを実行する処理ブロック（ρ回路）である。
【００９０】
１８０７は、ステップχを実行する処理ブロック（χ回路）、１８０８は、ステップιを実行する処理ブロック（ι回路）である。１８０９は、マルチプレクサであり、ラウンド処理の前半は１８０６からのデータを出力し、後半は１８０８からのデータを出力する。１８１０は、出力データを表しており、計算が完了したときに、１個のｌａｎｅを単位として出力される。
【００９１】
図１４（ｂ）は、仕様通りのアルゴリズムでｌａｎｅを単位として処理する場合の各モジュールの出力タイミングチャートである。θ回路１８０５＆ρ回路１８０６４とχ回路１８０７＆ι回路１８０８とのは別々の期間に動作し、同時には動作しない。また、１回のラウンド処理にかかる時間は、５１クロックである。
【００９２】
＜比較＞
図１４（ａ）と図１４（ｂ）とを比較すると分かるように、第１実施形態の実装例の構成を用いることにより処理スループットが向上することがわかる。
【００９３】
すなわち、
・π処理以外の処理回路の並列動作により回路利用効率が向上可能となる。
【００９４】
・より少ないクロック数（時間）で１回のラウンド処理を実行することが可能となる。
【００９５】
ことが分かる。その結果、処理スループットを向上させることが可能となっている。
以上説明したように、上記実施形態では、θ２処理とρ処理より前に、π処理が実行され、θ１処理中に、π処理をするためのデータ保持を行うことで、従来のように、データ保持するための時間を削減している。尚、図１３では、θ２処理の後に、ρ処理を行う例を示したが、θ２処理の前に、ρ処理を行っても同様の効果が得られる。θ２処理の前に、ρ処理を行う場合は、θ２処理で加算するビットを、ρ処理されたことを考慮して決定すればよい。
【００９６】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2014186310.tif 000004
【図２】
2014186310.tif 000005
【図３】
2014186310.tif 000006
【図４】
2014186310.tif 000007
【図５】
2014186310.tif 000008
【図６】
2014186310.tif 000009
【図７】
2014186310.tif 000010
【図８】
2014186310.tif 000011
【図９】
2014186310.tif 000012
【図１０】
2014186310.tif 000013
【図１１】
2014186310.tif 000014
【図１２】
2014186310.tif 000015
【図１３】
2014186310.tif 000016
【図１４】
2014186310.tif 000017
【図１５】
2014186310.tif 000018