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