(57)【要約】【課題】従来よりも少ないハードウェアリソースを用いて、ハッシュ関数におけるラウンド処理を高速に実行するハッシュ関数処理装置を提供する。【解決手段】ハッシュ関数処理装置１０は、フィードバックデータを格納する４個のレジスタ１０１〜１０４と、演算の中間結果を格納する１個のレジスタ１０５とを用いて、ＳＨＡ１アルゴリズムにおけるラウンド処理を行う。入力データＷおよび定数値Ｋは、本来読み込むべきタイミングよりも１クロックサイクル前に読み込まれ、第１の演算処理部１６１と第２の演算処理部１６２とレジスタ１０５とにより、２段のパイプライン処理が行われる。これにより、ハッシュ関数におけるラウンド処理を、外見上１ラウンドあたり１クロックサイクルで高速に実行できる。また、フィードバックデータ格納用のレジスタの１つを、中間結果格納用のレジスタと兼用することにより、従来よりもレジスタの個数を削減できる。【選択図】        図１
2004240299.tif 000002
【特許請求の範囲】
【請求項１】
入力データに対して、ハッシュ関数で定められた繰り返し処理を行うハッシュ関数処理装置であって、
フィードバックデータを格納する第１から第４のレジスタと、
所定長の入力データを供給する入力データ供給部と、
ハッシュ関数で定められた定数値を供給する定数値供給部と、
前記第４のレジスタの値と、前記入力データ供給部から供給される入力データと、前記定数値供給部から供給される定数値とに対して、所定の演算処理を行う第１の演算処理部と、
前記第１の演算処理部による演算結果を格納する中間値格納レジスタと、
前記第１から第４のレジスタの値と、前記中間値格納レジスタの値とに対して、所定の演算処理を行う第２の演算処理部とを備え、
前記第１および第２の演算処理部は並列に動作し、かつ、前記中間値格納レジスタが前記第１の演算処理部による演算結果を取り込む動作と、前記第１のレジスタが前記第２の演算処理部による演算結果を取り込む動作と、前記第２のレジスタが前記第１のレジスタの値を取り込む動作と、前記第３のレジスタが前記第２のレジスタの値を巡回シフトした値を取り込む動作と、前記第４のレジスタが前記第３のレジスタの値を取り込む動作と、前記入力データ供給部が次の入力データを取得する動作と、前記定数値供給部が次の定数値を取り込む動作とが、１つのクロックサイクル内で並列に行われることを特徴とする、ハッシュ関数処理装置。
【請求項２】
前記第１の演算処理部は、前記第４のレジスタの値と、前記入力データ供給部から供給される入力データと、前記定数値供給部から供給される定数値とを加算することを特徴とする、請求項１に記載のハッシュ関数処理装置。
【請求項３】
前記第２の演算処理部は、前記第２から第４のレジスタの値に対して所定の論理演算を行い、当該演算結果と、前記中間値格納レジスタの値と、前記第１のレジスタの値を巡回シフトした値とを加算することを特徴とする、請求項１に記載のハッシュ関数処理装置。
【請求項４】
前記ハッシュ関数がＳＨＡ１（Ｔｈｅ  Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １  ）であることを特徴とする、請求項１〜３のいずれかに記載のハッシュ関数処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ハッシュ関数処理装置に関し、より特定的には、情報通信等の分野においてセキュリティを保護するために、任意長のデータから、逆変換が困難な固定長の値（ハッシュ値）を求めるハッシュ関数処理装置に関する。
【０００２】
【従来の技術】
近年、ＦＴＴＨ（Ｆｉｂｅｒ  Ｔｏ  Ｔｈｅ  Ｈｏｍｅ  ）やＡＤＳＬ（Ａｓｙｍｍｅｔｒｉｃ  Ｄｉｇｉｔａｌ  Ｓｕｂｓｃｒｉｂｅｒ  Ｌｉｎｅ）に代表される広帯域なＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ）インフラが、家庭等にも普及している。これに伴い、高速性が要求されるＩＰ伝送路上においても、メッセージの改竄防止等、セキュリティ技術に対する需要が高まっている。メッセージ改竄防止技術の代表例として、例えば、ハッシュ関数を用いる方法が知られている。ハッシュ関数とは、任意長のメッセージから、そのメッセージに固有な固定長の値（以下、ハッシュ値という）を求める関数である。ハッシュ関数を用いて得られたハッシュ値には、極めて高いランダム性がある。すなわち、異なるメッセージに対しては、極めて高い確率で異なるハッシュ値が得られる。このような特徴を有するハッシュ関数は、メッセージの改竄を検出するための手段として利用することができる。
【０００３】
従来、ハッシュ関数の処理装置としては、例えば、特許文献１に記載された演算回路が知られている。特許文献１には、ハッシュ関数の一種であるＴｈｅ  ＳｅｃｕｒｅＨａｓｈ  Ａｌｇｏｒｉｔｈｍ  における繰り返し処理（以下、ラウンド処理という）を行う演算回路が記載されている。この演算回路は、２段のパイプライン処理を行うことにより、ラウンド処理を高速に行う。
【０００４】
【特許文献１】
特開２００２−２８７６３５号公報
【０００５】
【発明が解決しようとする課題】
しかしながら、上記従来の演算回路は、ハッシュ関数におけるラウンド処理を行うために、フィードバックデータを格納する５個のレジスタと、演算の中間結果を格納する１個以上のレジスタとを備えている。このように、この演算回路には、回路規模の増大やコストの増加という課題がある。
【０００６】
それ故に、本発明は、より少ないハードウェアリソースを用いて、ハッシュ関数におけるラウンド処理を高速に実行するハッシュ関数処理装置を提供することを目的とする。
【０００７】
【課題を解決するための手段および発明の効果】
第１の発明は、入力データに対して、ハッシュ関数で定められた繰り返し処理を行うハッシュ関数処理装置であって、フィードバックデータを格納する第１から第４のレジスタと、所定長の入力データを供給する入力データ供給部と、ハッシュ関数で定められた定数値を供給する定数値供給部と、第４のレジスタの値と、入力データ供給部から供給される入力データと、定数値供給部から供給される定数値とに対して、所定の演算処理を行う第１の演算処理部と、第１の演算処理部による演算結果を格納する中間値格納レジスタと、第１から第４のレジスタの値と、中間値格納レジスタの値とに対して、所定の演算処理を行う第２の演算処理部とを備え、第１および第２の演算処理部は並列に動作し、かつ、中間値格納レジスタが第１の演算処理部による演算結果を取り込む動作と、第１のレジスタが第２の演算処理部による演算結果を取り込む動作と、第２のレジスタが第１のレジスタの値を取り込む動作と、第３のレジスタが第２のレジスタの値を巡回シフトした値を取り込む動作と、第４のレジスタが第３のレジスタの値を取り込む動作と、入力データ供給部が次の入力データを取得する動作と、定数値供給部が次の定数値を取り込む動作とが、１つのクロックサイクル内で並列に行われることを特徴とする。
このような第１の発明によれば、第１および第２の演算回路は並列に動作し、第１の演算回路の出力は中間値格納レジスタに書き込まれ、第２の演算回路の入力は中間値格納レジスタ等から供給される。これにより、第１および第２の演算回路と中間値格納レジスタとにより、２段のパイプライン処理が行われる。また、パイプラインに適切なタイミングでデータを供給するために、繰り返し処理で使用される入力データおよび定数値は、本来取得すべきタイミングよりも１クロックサイクル前に取得される。したがって、ハッシュ関数における繰り返し処理を、外見上１ラウンドあたり１クロックサイクルで高速に実行することができる。これに加えて、フィードバックデータを格納するレジスタの数を削減し、従来よりも少ないハードウェアリソースを用いて、ハッシュ関数における繰り返し処理を高速に実行することができる。
【０００８】
第２の発明は、第１の発明において、第１の演算処理部は、第４のレジスタの値と、入力データ供給部から供給される入力データと、定数値供給部から供給される定数値とを加算することを特徴とする。
【０００９】
第３の発明は、第１の発明において、第２の演算処理部は、第２から第４のレジスタの値に対して所定の論理演算を行い、当該演算結果と、中間値格納レジスタの値と、第１のレジスタの値を巡回シフトした値とを加算することを特徴とする。
【００１０】
第４の発明は、第１ないし第３のいずれかの発明において、ハッシュ関数がＳＨＡ１（Ｔｈｅ  Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １  ）であることを特徴とする。
このような第２ないし第４の発明によれば、ＳＨＡ１アルゴリズムにおける繰り返し処理を、外見上１ラウンドあたり１クロックサイクルで高速に実行することができる。
【００１１】
【発明の実施の形態】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るハッシュ関数処理装置の論理回路図である。図１に示すハッシュ関数処理装置１０は、ハッシュ関数の一種であるＴｈｅ  Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １  （以下、ＳＨＡ１という）におけるラウンド処理を行う。ＳＨＡ１は、任意長の入力データから、１６０ビットのハッシュ値を求める関数である。ＳＨＡ１アルゴリズムでは、入力データは、先頭から順に５１２ビットずつに分割される。５１２ビットに分割された入力データは、さらに１６個の語（１語は３２ビット）に分割され、１６個の語に対して所定の論理演算を行うことにより、８０個の語が求められる。その上で、求めた８０個の語を１つの単位（以下、ブロックデータという）として、以下に示す処理（以下、８０ラウンド処理という）が順次行われる。
【００１２】
８０ラウンド処理では、３２ビットの変数Ａ、Ｂ、Ｃ、ＤおよびＥが使用される。各ブロックデータに対して８０ラウンド処理を行う前に、変数Ａ〜Ｅには、所定の初期値Ａｓ〜Ｅｓ（最初のブロックデータである場合）、または、これまでのブロックデータに対する８０ラウンド処理で求めた変数Ａ〜Ｅの値（最初のブロックデータでない場合）のいずれかが設定される。その上で、変数ｉを０から７９まで１ずつ順に増加させながら、次式（１）に示す演算が８０回行われ、これと同時に、変数Ｅには変数Ｄの値が、変数Ｄには変数Ｃの値が、変数Ｃには変数Ｂの値を左に３０ビット巡回シフトした値が、変数Ｂには変数Ａの値がそれぞれ代入される。
Ｅ＝（Ａ＜＜＜５）＋Ｆｉ（Ｂ，Ｃ，Ｄ）＋Ｅ＋Ｗｉ＋Ｋｉ  …（１）
ただし、上式（１）において、＜＜＜  は左巡回シフトを表し、Ｆｉ、ＷｉおよびＫｉは、それぞれ、ｉ回目の演算における論理演算、３２ビットの入力データ、および３２ビットの定数値を表す。なお、ＳＨＡ１アルゴリズムの詳細は、例えば、米国商務省：”Ｓｅｃｕｒｅ  Ｈａｓｈ  Ｓｔａｎｄａｒｄ”，  Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｅ  ｏｆ  Ｓｔａｎｄａｒｄｓａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ，  Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄ  （ＦＩＰＳ）  １８０−１，  Ａｐｒｉｌ  １７，  １９９５．  に記載されている。
【００１３】
図１に示すハッシュ関数処理装置１０は、レジスタ１０１〜１０７および１１１〜１１５、加算器１２１〜１２９、セレクタ１３０〜１３９、巡回シフト演算ブロック１４１および１４２、並びに論理演算ブロック１５１〜１５４を備えている。このうち、加算器１２６および１２７は、第１の演算処理部１６１を構成している。また、加算器１２８および１２９、セレクタ１３０、巡回シフト演算ブロック１４１、並びに論理演算ブロック１５１〜１５４は、第２の演算処理部１６２を構成している。
【００１４】
図１に示す信号線のデータ幅は、１６０ビットの出力信号ＨＶを除き、いずれも３２ビットである。また、図１では、ＳＨＡ１アルゴリズムにおけるラウンド処理を制御するための制御信号や制御回路は、図面の簡単化のために省略されている。なお、この記法は、後述する図３にも適用される。
【００１５】
図１において、レジスタ１０１〜１０４は、それぞれ、ＳＨＡ１アルゴリズムにおけるラウンド処理で使用されるフィードバックデータを格納する。レジスタ１０１〜１０４は、順に、第１のレジスタＲ１、第２のレジスタＲ２、第３のレジスタＲ３、および第４のレジスタＲ４とも呼ばれる。レジスタ１０５は、ＳＨＡ１アルゴリズムにおけるラウンド処理を行うときの中間データを格納する。レジスタ１０６は、ＳＨＡ１アルゴリズムにおけるラウンド処理で処理される、３２ビットの入力データＷｉを格納する。入力データＷｉは、ハッシュ処理の対象となる元の入力データを３２ビットずつに分割したデータ、または、このデータ４個の排他的論理和を左に１ビット巡回シフトしたデータのいずれかである。レジスタ１０７は、ＳＨＡ１アルゴリズムにおけるラウンド処理で各ラウンド毎に予め定められた定数値Ｋｉを格納する。レジスタ１１１〜１１５は、それぞれ、ＳＨＡ１アルゴリズムにおける、これまでのブロックデータに対する８０ラウンド処理で求めた値を格納する。
【００１６】
加算器１２１は、レジスタ１０１の値とレジスタ１１１の値とを加算する。加算器１２２は、レジスタ１０２の値とレジスタ１１２の値とを加算する。加算器１２３は、レジスタ１０３の値とレジスタ１１３の値とを加算する。加算器１２４は、レジスタ１０４の値とレジスタ１１４の値とを加算する。加算器１２５は、レジスタ１０４の値とレジスタ１１５の値とを加算する。加算器１２６は、レジスタ１０６の値とレジスタ１０７の値とを加算する。加算器１２７は、レジスタ１０４の値と加算器１２６の出力とを加算する。加算器１２８は、セレクタ１３０の出力と巡回シフト演算ブロック１４１の出力とを加算する。加算器１２９は、レジスタ１０５の値と加算器１２８の出力とを加算する。
【００１７】
セレクタ１３１は、ＳＨＡ１アルゴルリズムにおけるラウンド処理開始前の初期値Ａｓと、加算器１２１の出力とから、適切な値を選択して出力する。セレクタ１３２は、ＳＨＡ１アルゴルリズムにおけるラウンド処理開始前の初期値Ｂｓと、加算器１２２の出力とから、適切な値を選択して出力する。セレクタ１３３は、ＳＨＡ１アルゴルリズムにおけるラウンド処理開始前の初期値Ｃｓと、加算器１２３の出力とから、適切な値を選択して出力する。セレクタ１３４は、ＳＨＡ１アルゴルリズムにおけるラウンド処理開始前の初期値Ｄｓと、加算器１２４の出力とから、適切な値を選択して出力する。セレクタ１３５は、ＳＨＡ１アルゴルリズムにおけるラウンド処理開始前の初期値Ｅｓと、加算器１２５の出力とから、適切な値を選択して出力する。
【００１８】
セレクタ１３６は、レジスタ１１１の値と、加算器１２９の出力とから、適切な値を選択して出力する。セレクタ１３７は、レジスタ１１２の値と、レジスタ１０１の値とから、適切な値を選択して出力する。セレクタ１３８は、レジスタ１１３の値と、巡回シフト演算ブロック１４２の出力とから、適切な値を選択して出力する。セレクタ１３９は、レジスタ１１４の値と、レジスタ１１５の値と、レジスタ１０３の値とから、適切な値を選択して出力する。セレクタ１３０は、論理演算ブロック１５１〜１５４の出力から、適切な値を選択して出力する。
なお、セレクタ１３０〜１３９は、後述するラウンド処理等を正しく行えるように、適切な値を選択して出力する。
【００１９】
巡回シフト演算ブロック１４１および１４２は、ＳＨＡ１アルゴリズムに従い、巡回シフト演算を行う。より詳細には、巡回シフト演算ブロック１４１は、入力を左に５ビット巡回シフトする。巡回シフト演算ブロック１４２は、入力を左に３０ビット巡回シフトする。なお、巡回シフト演算ブロック１４１および１４２におけるシフト方向は、入力に含まれる各ビットを左側が上位となるように並べたときの左方向である。
【００２０】
論理演算ブロック１５１〜１５４は、ＳＨＡ１アルゴリズムにおけるラウンド処理で予め定められた４種類の論理演算のうち、いずれかを行う。具体的には、論理演算ブロック１５１は、第０〜第１９ラウンドにおける論理演算を行う。論理演算ブロック１５２は、第２０〜第３９ラウンドにおける論理演算を行う。論理演算ブロック１５３は、第４０〜第５９ラウンドにおける論理演算を行う。論理演算ブロック１５４は、第６０〜第７９ラウンドにおける論理演算を行う。より詳細には、レジスタ１０２の値をＸ、レジスタ１０３の値をＹ、レジスタ１０４の値をＺとし、論理和、論理積、否定および排他的論理和の各論理演算を、それぞれ、ａｎｄ、ｏｒ、ｎｏｔおよびｘｏｒと表すとき、論理演算ブロック１５１は、「（ＸａｎｄＹ）ｏｒ（（ｎｏｔＸ）ａｎｄＺ）」なる論理演算を行う。
論理演算ブロック１５２および１５４は、「ＸｘｏｒＹｘｏｒＺ」なる論理演算を行う。論理演算ブロック１５３は、「（ＸａｎｄＹ）ｏｒ（ＸａｎｄＺ）ｏｒ（ＹａｎｄＺ）」なる論理演算を行う。なお、ハッシュ関数処理装置１０は論理演算ブロック１５４を備えず、論理演算ブロック１５２が第６０〜第７９ラウンドにおける論理演算を行うこととしてもよい。
【００２１】
ハッシュ関数処理装置１０は、入力データに対して、まずハッシュ前処理を行い、次にラウンド処理を行い、最後にハッシュ後処理を行う。ハッシュ前処理では、最初のブロックデータを扱う前にレジスタに適切な値を設定する処理が行われる。ラウンド処理では、各ブロックデータに対して、ＳＨＡ１アルゴリズムにおける第０〜第７８ラウンドの処理と、ラウンド終端処理とが行われる。ラウンド終端処理では、（ａ）ＳＨＡ１アルゴリズムにおける第７９ラウンドの処理と、（ｂ）今回求めた値と前回までに求めた値とを加算する処理と、（ｃ）次のブロックデータを扱う前に各レジスタに適切な値を設定する処理とが行われる。ただし、最後のブロックデータに対しては、ラウンド終端処理は行われない。ハッシュ後処理では、上記（ａ）および（ｂ）の処理が行われる。
【００２２】
図２は、ハッシュ前処理、ラウンド処理、およびハッシュ後処理によって、レジスタ１０１〜１０７および１１１〜１１５の値が変化する様子を示す図である。図２において、マイナス記号は、レジスタの値が不定であることを表し、矢印は、レジスタの値が１つ前のクロックサイクルと同じであることを表す。なお、この記法は、後述する図４にも適用される。
【００２３】
以下、図２を適宜参照しながら、ハッシュ関数処理装置１０の動作を説明する。なお、以下の説明では、２つのレジスタＡとＢとが同じクロックサイクルでそれぞれある値を取り込むことを、レジスタＡとＢとは同時に値を取り込む、と表現する場合がある。
【００２４】
（１）ハッシュ前処理
ハッシュ前処理は、レジスタ１１１〜１１５にＳＨＡ１アルゴリズムで定められた初期値（図２ではＡｓ〜Ｅｓ）が格納された状態で、２クロックサイクルをかけて行われる。第１のクロックサイクルでは、レジスタ１０４は、レジスタ１１５の値（図２ではＥｓ）を取り込む。同時に、レジスタ１０１〜１０３は、それぞれ、レジスタ１１１〜１１３の値（図２ではＡｓ〜Ｃｓ）を取り込む。同時に、レジスタ１０６および１０７は、それぞれ、外部から与えられた第０ラウンドで使用される入力データおよび定数値（図２ではＷ０およびＫ０）を取り込む。
【００２５】
次に、第２のクロックサイクルでは、レジスタ１０５は、加算器１２７の出力（図２では（Ｅｓ＋Ｗ０＋Ｋ０））を取り込む。同時に、レジスタ１０４は、レジスタ１１４の値（図２ではＤｓ）を取り込む。同時に、レジスタ１０６および１０７は、それぞれ、外部から与えられた第１ラウンドで使用される入力データおよび定数値（図２ではＷ１およびＫ１）を取り込む。
【００２６】
（２）ラウンド処理
第０〜第７８ラウンドの処理は、１ラウンドあたり１クロックサイクルをかけて（すなわち、各ブロックデータに対して７９クロックサイクルをかけて）行われる。第０〜第７８ラウンドの処理では、各クロックサイクルにおいて、レジスタ１０４は、レジスタ１０３の値を取り込む。同時に、レジスタ１０３は、巡回シフト演算ブロック１４２の出力を取り込む。同時に、レジスタ１０２は、レジスタ１０１の値を取り込む。同時に、レジスタ１０１は、加算器１２９の出力を取り込む。同時に、レジスタ１０５は、加算器１２７の出力を取り込む。同時に、レジスタ１０６および１０７は、それぞれ、外部から与えられた、次の入力データおよび定数値を取り込む。ただし、第７８ラウンドの処理では、レジスタ１０６および１０７は、任意の値を取り込んでもよい。
【００２７】
例として、図２に示す第５ラウンドの処理を説明する。第０〜第４ラウンドの処理で求めた値を、順にＥ０、Ｄ０、Ｃ０、Ｂ０およびＡ０とするとき、第４ラウンドの処理を完了した時点で、レジスタ１０１〜１０４の値はそれぞれＡ０〜Ｄ０、レジスタ１０５の値は（Ｅ０＋Ｗ５＋Ｋ５）、レジスタ１０６の値はＷ６、レジスタ１０７の値はＫ６となっている。そこで、第５ラウンドの処理では、レジスタ１０４は、レジスタ１０３の値Ｃ０を取り込む。同時に、レジスタ１０３は、レジスタ１０２の値Ｂ０を左に３０ビット巡回シフトした値（図２では、巡回シフト前と同じくＢ０と記載；以下、同様の記法を用いる）を取り込む。同時に、レジスタ１０２は、レジスタ１０１の値Ａ０を取り込む。同時に、レジスタ１０１は、加算器１２９の出力Ｅ１を取り込む。ここで、Ｅ１は、式（１）において、Ａ〜ＥにＡ０〜Ｅ０を、ＷｉにＷ５を、ＫｉにＫ５を代入したときに得られる値である。同時に、レジスタ１０５は、加算器１２７の出力（Ｄ０＋Ｗ６＋Ｋ６）を取り込む。同時に、レジスタ１０６および１０７は、それぞれ、次の入力データＷ７および次の定数値Ｋ７を取り込む。
【００２８】
一方、ラウンド終端処理は、各ブロックデータに対して４クロックサイクルをかけて行われる。第１のクロックサイクルでは、レジスタ１１５は、加算器１２５の出力（図２ではＥｍ）を取り込む。同時に、レジスタ１０４は、レジスタ１０３の値（図２ではＤ１５）を取り込む。同時に、レジスタ１０３は、巡回シフト演算ブロック１４２の出力（図２ではＣ１５）を取り込む。同時に、レジスタ１０２は、レジスタ１０１の値（図２ではＢ１５）を取り込む。同時に、レジスタ１０１は、加算器１２９の出力（図２ではＡ１５）を取り込む。
【００２９】
次に、第２のクロックサイクルでは、レジスタ１１１〜１１４は、それぞれ、加算器１２１〜１２４の出力（図２ではＡｍ〜Ｄｍ）を取り込む。なお、レジスタ１０１〜１０４は、任意の値を取り込んでもよく、ここでは１つ前のクロックサイクルの値を保持するものとする。
【００３０】
次に、第３のクロックサイクルでは、レジスタ１０１〜１０３は、それぞれ、レジスタ１１１〜１１３の値（図２ではＡｍ〜Ｃｍ）を取り込む。同時に、レジスタ１０４は、レジスタ１１５の値（図２ではＥｍ）を取り込む。同時に、レジスタ１０６および１０７は、それぞれ、外部から与えられた第０ラウンドで使用される入力データおよび定数値（図２ではＷ０およびＫ０）を取り込む。
【００３１】
次に、第４のクロックサイクルでは、レジスタ１０５は、加算器１２７の出力（図２では（Ｅｍ＋Ｗ０＋Ｋ０））を取り込む。同時に、レジスタ１０４は、レジスタ１１４の値（図２ではＤｍ）を取り込む。同時に、レジスタ１０６および１０７は、それぞれ、外部から与えられた第１ラウンドで使用される入力データおよび定数値（図２ではＷ１およびＫ１）を取り込む。なお、第３および第４のクロックサイクルでレジスタ１０６に取り込まれる入力データは、次のブロックデータに含まれるデータである。
【００３２】
（３）ハッシュ後処理
ハッシュ後処理は、２クロックサイクルをかけて行われる。第１のクロックサイクルでは、レジスタ１１５は、加算器１２５の出力（図２ではＥｅ）を取り込む。同時に、レジスタ１０４は、レジスタ１０３の値（図２ではＤ１５）を取り込む。同時に、レジスタ１０３は、巡回シフト演算ブロック１４２の出力（図２ではＣ１５）を取り込む。同時に、レジスタ１０２は、レジスタ１０１の値（図２ではＢ１５）を取り込む。同時に、レジスタ１０１は、加算器１２９の出力（図２ではＡ１５）を取り込む。
【００３３】
次に、第２のクロックサイクルでは、レジスタ１１１〜１１４は、それぞれ、加算器１２１〜１２４の出力（図２ではＡｅ〜Ｄｅ）を取り込む。なお、レジスタ１０１〜１０４は、任意の値を取り込んでもよく、ここでは１つ前のクロックサイクルの値を保持するものとする。
【００３４】
第２のクロックサイクルが完了した時点でレジスタ１１１〜１１５に格納されている値（図２ではＡｅ〜Ｅｅ）が、求めるべきハッシュ値となる。したがって、図示しない手段を用いてレジスタ１１１〜１１５の値を読み出すことにより、入力データ全体に対するハッシュ値を得ることができる。
【００３５】
また、第２のクロックサイクルが完了する前の、レジスタ１１５および加算器１２１〜１２４の出力（図１に示す出力信号ＨＶ）は、求めるべきハッシュ値に一致する。したがって、ハッシュ関数処理装置１０の外部に１６０ビットのレジスタを設け、設けたレジスタがこのときの出力信号ＨＶを取り込むことにより、入力データ全体に対するハッシュ値を得ることができる。
【００３６】
以下、ハッシュ関数処理装置１０が奏する効果について説明する。式（１）に示すように、ＳＨＡ１アルゴリズムにおけるラウンド処理では、入力データおよび定数値はフィードバックデータに依存しない。したがって、式（１）に示す演算は、次式（２）および（３）に示すように、２つの演算に分解することができる。ただし、式（２）および（３）では、Ｑは３２ビットの変数である。
Ｑ＝Ｅ＋Ｗｉ＋Ｋｉ                …（２）
Ｅ＝（Ａ＜＜＜５）＋Ｆｉ（Ｂ，Ｃ，Ｄ）＋Ｑ  …（３）
【００３７】
これに対応して、ハッシュ関数処理装置１０は、式（２）に示す演算処理を行う第１の演算処理部１６１と、式（３）に示す演算処理を行う第２の演算処理部１６２と、第１の演算処理部１６１の出力を格納するレジスタ１０５とを備えている。また、第１の演算処理部１６１と第２の演算処理部１６２とは並列に動作し、第２の演算処理部１６２の出力はレジスタ１０５等から供給される。これにより、第１の演算処理部１６１と、第２の演算処理部１６２と、レジスタ１０５とよって、２段のパイプライン処理が行われる。また、パイプラインに適切なタイミングでデータを供給するために、各ラウンドで使用される入力データＷｉおよび定数値Ｋｉは、本来読み込むべきタイミングよりも１クロックサイクル前に読み込まれる。
【００３８】
また、ハッシュ関数処理装置１０は、ＳＨＡ１アルゴリズムにおけるラウンド処理を行うために、フィードバックデータを格納する４個のレジスタ１０１〜１０４と、演算の中間結果を格納する１個のレジスタ１０５とを備えている。つまり、ハッシュ関数処理装置１０は、フィードバックデータを格納する５個のレジスタのうち１つを、演算の中間結果を格納するレジスタと兼用している。したがって、ハッシュ関数処理装置１０によれば、従来よりも少ない個数のレジスタを用いて、従来と同様のパイプライン処理を行うことができる。
【００３９】
以上のことから、本実施形態に係るハッシュ関数処理装置によれば、従来よりも少ないハードウェアリソースを用いて、ＳＨＡ１アルゴリズムにおけるラウンド処理を、外見上１ラウンドあたり１クロックサイクルで高速に実行することができる。
【００４０】
（第２の実施形態）
図３は、本発明の第２の実施形態に係るハッシュ関数処理装置の論理回路図である。図３に示すハッシュ関数処理装置２０は、第１の実施形態に係るハッシュ関数処理装置１０に含まれる回路の一部を変更したものである。図３に示すハッシュ関数処理装置２０は、レジスタ２０１〜２０７および２１１〜２１５、加算器２２１〜２２９、セレクタ２３０〜２３９、巡回シフト演算ブロック２４１および２４２、並びに論理演算ブロック２５１〜２５４を備えている。このうち、加算器２２６および２２７は、第１の演算処理部２６１を構成している。また、加算器２２８および２２９、セレクタ２３０、巡回シフト演算ブロック２４１、並びに論理演算ブロック２５１〜２５４は、第２の演算処理部２６２を構成している。
【００４１】
ハッシュ関数処理装置２０の回路構成は、第１の実施形態に係るハッシュ関数処理装置１０の回路構成と、次の４つの点で相違する。第１に、セレクタ２３６は、レジスタ２１１の値と、加算器２２９の出力と、加算器２２１の出力とから、適切な値を選択して出力する。第２に、セレクタ２３７は、レジスタ２１２の値と、レジスタ２０１の値と、加算器２２２の出力とから、適切な値を選択して出力する。第３に、セレクタ２３８は、レジスタ２１３の値と、巡回シフト演算ブロック２４２の出力と、加算器２２３の出力とから、適切な値を選択して出力する。セレクタ２３９は、レジスタ２１４の値と、レジスタ２１５の値と、レジスタ２０３の値と、加算器２２５の出力とから、適切な値を選択して出力する。
【００４２】
ハッシュ関数処理装置２０は、第１の実施形態に係るハッシュ関数処理装置１０と同様に、入力データに対して、まずハッシュ前処理を行い、次にラウンド処理を行い、最後にハッシュ後処理を行う。これら３つの処理の内容は、ハッシュ関数処理装置１０と同じである。図４は、これら３つの処理によって、レジスタ２０１〜２０７および２１１〜２１５の値が変化する様子を示す図である。以下、図４を適宜参照しながら、ハッシュ関数処理装置２０の動作を説明する。
【００４３】
（１）ハッシュ前処理
ハッシュ関数処理装置２０におけるハッシュ前処理は、第１の実施形態に係るハッシュ関数処理装置１０における処理と同じである。
【００４４】
（２）ラウンド処理
ハッシュ関数処理装置２０における第０〜第７８ラウンドの処理は、第１の実施形態に係るハッシュ関数処理装置１０における処理と同じである。第０〜第７８ラウンドの処理は、１ラウンドあたり１クロックサイクルをかけて（すなわち、各ブロックデータに対して７９クロックサイクルをかけて）行われる。
【００４５】
一方、ラウンド終端処理は、各ブロックデータに対して２クロックサイクルをかけて行われる。第１のクロックサイクルでは、レジスタ２０４および２１５は、いずれも、加算器２２５の出力（図４ではＥｍ）を取り込む。同時に、レジスタ２１４は、加算器２２４の出力（図４ではＤｍ）を取り込む。同時に、レジスタ２０３は、巡回シフト演算ブロック２４２の出力（図４ではＣ１５）を取り込む。同時に、レジスタ２０２は、レジスタ２０１の値（図４ではＢ１５）を取り込む。同時に、レジスタ２０１は、加算器２２９の出力（図４ではＡ１５）を取り込む。同時に、レジスタ２０６および２０７は、それぞれ、外部から与えられた第０ラウンドで使用される入力データおよび定数値（図４ではＷ０およびＫ０）を取り込む。
【００４６】
次に、第２のクロックサイクルでは、レジスタ２０１および２１１は、いずれも、加算器２２１の出力（図４ではＡｍ）を取り込む。同時に、レジスタ２０２および２１２は、いずれも、加算器２２２の出力（図４ではＢｍ）を取り込む。
同時に、レジスタ２０３および２１３は、いずれも、加算器２２３の出力（図４ではＣｍ）を取り込む。同時に、レジスタ２０４は、レジスタ２１４の値（図４ではＤｍ）を取り込む。同時に、レジスタ２０５は、加算器２２７の出力（図４では（Ｅｍ＋Ｗ０＋Ｋ０））を取り込む。同時に、レジスタ２０６および２０７は、それぞれ、外部から与えられた第０ラウンドで使用される入力データおよび定数値（図４ではＷ１およびＫ１）を取り込む。なお、第１および第２のクロックサイクルでレジスタ２０６に取り込まれる入力データは、次のブロックデータに含まれるデータである。
【００４７】
（３）ハッシュ後処理
ハッシュ後処理は、２クロックサイクルをかけて行われる。第１のクロックサイクルでは、レジスタ２１４および２１５は、加算器２２４および２２５の出力（図４ではＤｅおよびＥｅ）を取り込む。同時に、レジスタ２０３は、巡回シフト演算ブロック２４２の出力（図４ではＣ１５）を取り込む。レジスタ２０２は、レジスタ２０１の値（図４ではＢ１５）を取り込む。同時に、レジスタ２０１は、加算器２２９の出力（図４ではＡ１５）を取り込む。レジスタ２０４は、任意の値を取り込んでもよく、ここでは加算器２２５の出力を取り込むものとする。
【００４８】
次に、第２のクロックサイクルでは、レジスタ２１１〜２１３は、それぞれ、加算器２２１〜２２３の出力（図４ではＡｅ〜Ｃｅ）を取り込む。レジスタ２０１〜２０４は、任意の値を取り込んでもよく、ここでは、レジスタ２０４は、レジスタ２１４の値を取り込み、レジスタ２０１〜２０３は、それぞれ、加算器２２１〜２２３の出力を取り込むものとする。
【００４９】
第２のクロックサイクルが完了した時点でレジスタ２１１〜２１５に格納されている値（図４ではＡｅ〜Ｅｅ）が、求めるべきハッシュ値となる。したがって、図示しない手段を用いてレジスタ２１１〜２１５の値を読み出すことにより（あるいは、外部に設けたレジスタがハッシュ後処理の第２のクロックサイクルにおける出力信号ＨＶの値を取り込むことにより）、入力データ全体に対するハッシュ値を得ることができる。
【００５０】
このようにハッシュ関数処理装置２０は、上述した４つの点で第１の実施形態に係るハッシュ関数処理装置１０と異なるにも関わらず、ＳＨＡ１アルゴリズムにおけるラウンド処理を正しく実行することができる。また、第１の実施形態に係るハッシュ関数処理装置１０は、４クロックサイクルをかけてラウンド終端処理を行うのに対して、ハッシュ関数処理装置２０は、２クロックサイクルをかけてラウンド終端処理を行う。
【００５１】
以上のことから、本実施形態に係るハッシュ関数処理装置によれば、第１の実施形態に係るハッシュ関数処理装置が奏する効果に加えて、ラウンド終端処理にかかるクロックサイクル数を減らし、ラウンド処理をより高速に実行できるという効果がある。
【００５２】
なお、本発明のハッシュ関数処理装置は、上述したパイプライン処理によって第０〜第７８ラウンドの処理を行うものであればよく、上記各実施形態で示した装置以外の変形例を構成することができる。例えば、第１の実施形態に係るハッシュ関数処理装置１０について言えば、初期値Ａｓ〜Ｅｓをレジスタ１１１〜１１５に設定するタイミング、ハッシュ前処理、ラウンド終端処理、およびハッシュ後処理におけるレジスタ１０１〜１０４の更新タイミング、レジスタ１１１〜１１５の更新タイミング、任意の値を取り込んでよいレジスタに設定される値等については、種々の設計が可能である。第２の実施形態に係るハッシュ関数処理装置２０についても、これと同様である。
【００５３】
また、上記各実施形態では、ハッシュ関数としてＳＨＡ１を使用することとしたが、ハッシュ関数として他のアルゴリズムを使用してもよいことは言うまでもない。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係るハッシュ関数処理装置の論理回路図である。
【図２】本発明の第１の実施形態に係るハッシュ関数処理装置に含まれるレジスタの値が変化する様子を示す図である。
【図３】本発明の第２の実施形態に係るハッシュ関数処理装置の論理回路図である。
【図４】本発明の第２の実施形態に係るハッシュ関数処理装置に含まれるレジスタの値が変化する様子を示す図である。
【符号の説明】
１０、２０…ハッシュ関数処理装置
１０１〜１０７、１１１〜１１５、２０１〜２０７、２１１〜２１５…レジスタ
１２１〜１２９、２２１〜２２９…加算器
１３０〜１３９、２３０〜２３９…セレクタ
１４１、１４２、２４１、２４２…巡回シフト演算ブロック
１５１〜１５４、２５１〜２５４…論理演算ブロック
１６１、２６１…第１の演算処理部
１６２、２６２…第２の演算処理部
【図１】
2004240299.tif 000003
【図２】
2004240299.tif 000004
【図３】
2004240299.tif 000005
【図４】
2004240299.tif 000006