(57)【要約】【課題】複数のハッシュ関数をハードウェア実装するに当り、可能な限り回路の共通化を行い、より小さな回路規模のハッシュ関数処理回路を構成する。【解決手段】メッセージ保持部と、メッセージ保持部から第１ハッシュ関数処理に必要となるメッセージデータを出力する第１メッセージ処理部と、メッセージ保持部から第２ハッシュ関数処理に必要となるメッセージデータを出力する第２メッセージ処理部と、第１ハッシュ関数処理を実行する第１ハッシュ演算部と、第２ハッシュ関数処理を実行する第２ハッシュ演算部と、第１ハッシュ演算部において演算される第１演算値と第２ハッシュ演算部とにおいて演算される第２演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部とを備える。【選択図】　　　図１
2004053716.tif 000002
【特許請求の範囲】
【請求項１】
第１ハッシュ関数処理と第２ハッシュ関数処理とを処理可能なハッシュ関数処理回路であって、
入力されるメッセージを保持するためのメッセージ保持部と、
前記メッセージ保持部から第１ハッシュ関数処理に必要となるメッセージデータを出力する第１メッセージ処理部と、
前記メッセージ保持部から第２ハッシュ関数処理に必要となるメッセージデータを出力する第２メッセージ処理部と、
前記第１メッセージ処理部からのメッセージデータに基づいて第１ハッシュ関数処理を実行する第１ハッシュ演算部と、
前記第２メッセージ処理部からのメッセージデータに基づいて第２ハッシュ関数処理を実行する第２ハッシュ演算部と、
前記第１ハッシュ演算部において演算される第１演算値と第２ハッシュ演算部とにおいて演算される第２演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部と、
を備えるハッシュ関数処理回路。
【請求項２】
前記出力部は、
セレクタを介して前記第１演算値および第２演算値のうちいずれか一方が選択的に入力される中間値保持部と、
初期値および演算処理されたハッシュ値を保持するためのハッシュ値保持部と、
前記中間値保持部に保持された中間値と前記ハッシュ値保持部に保持された初期値または演算処理されたハッシュ値との加算処理を行い演算結果を前記ハッシュ値保持部に出力する加算処理部と、
を備える請求項１に記載のハッシュ関数処理回路。
【請求項３】
前記第１ハッシュ関数処理はＭＤ５（Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　５）であり、前記第２ハッシュ関数処理はＳＨＡ−１（Ｓｅｃｕｒｅ　Ｈａｓｈ　Ａｌｇｏｒｉｔｈｍ　１）である、請求項１または２に記載のハッシュ関数処理回路。
【請求項４】
前記ハッシュ値保持部は、第１ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタと、第２ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタを共用するレジスタ回路で構成される、請求項３に記載のハッシュ関数処理回路。
【請求項５】
前記ハッシュ値保持部は、第１ハッシュ関数処理における初期値を保持するために４個の３２ビットレジスタと、第２ハッシュ関数処理における初期値を保持するために５個の３２ビットレジスタとを共用する５個の３２ビットレジスタで構成される、請求項４に記載のハッシュ関数処理回路。
【請求項６】
前記第１ハッシュ演算部および第２ハッシュ演算部は、５種類の非線形回路とその非線形回路のうちから１つを選択する選択回路とを備える非線形処理部を共用し、前記第１ハッシュ演算部による演算処理を行う場合に、前記非線形処理部はＭＤ５で用いられる４種類の非線形回路から１つを選択し、前記第２ハッシュ演算部による演算処理を行う場合に、前記非線形処理部はＳＨＡ−１で用いられる３種類の非線形回路から１つを選択する、請求項３〜５のいずれかに記載のハッシュ関数処理回路。
【請求項７】
前記メッセージ保持部は、５１２ビット分のメッセージを保持するためのレジスタ回路で構成される、請求項６に記載のハッシュ関数処理回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号装置に用いられるハッシュ関数処理回路に関する。
【０００２】
【従来の技術】
デジタル署名を行う際の公開鍵暗号の計算量を少なくするために可変長のデータを圧縮して固定長のデータに変換するハッシュ関数が用いられる。このハッシュ関数は１方向性の関数処理であり、変換された結果であるメッセージダイジェストは逆変換が極めて困難である必要がある。
現在広く使われているハッシュ関数として、ＭＤ５（Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　５）およびＳＨＡ−１（Ｓｅｃｕｒｅ　Ｈａｓｈ　Ａｌｇｏｒｉｔｈｍ　１）が知られている。ＭＤ５とＳＨＡ−１はどちらもＭＤ４（Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　４）を改良したハッシュ関数である。ＭＤ４は１９９０年Ｒ．Ｌ．　Ｒｉｖｅｓｔが”Ｔｈｅ　ＭＤ４　Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　Ａｌｇｏｒｉｔｈｍ”としてＣＲＹＰＴＯ９０で提案したもので、後にいくつかの問題点が指摘された。
【０００３】
ＭＤ５は、Ｒ．Ｌ．　ＲｉｖｅｓｔがＭＤ４の改良として提案し、１９９２年にＲＦＣ１３２２，　”Ｔｈｅ　ＭＤ５　Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　Ａｌｇｏｒｉｔｈｍ”として登録されたアルゴリズムである。なお、ＲＦＣ（Ｒｅｑｕｅｓｔ　ｆｏｒ　Ｃｏｍｍｅｎｔ）とはＩＥＴＦ（Ｔｈｅ　Ｉｎｔｅｒｎｅｔ　Ｅｎｇｉｎｅｅｒｉｎｇ　Ｔａｓｋ　Ｆｏｒｃｅ）より発行されるインターネット技術や仕様に関するデファクトスタンダードのことである。同様に、ＳＨＡ−１は米国政府の標準局ＮＩＳＴ（Ｎａｔｉｏｎａｌ　Ｉｎｓｔｉｔｕｔｅ　ｏｆ　Ｓｔａｎｄａｒｄ　Ｔｅｃｈｎｏｌｏｇｙ）がＭＤ４を基に改良を行い、ＦＩＰＳ（Ｆｅｄｅｒａｌ　Ｉｎｆｏｒｍａｔｉｏｎ　Ｐｒｏｃｅｓｓｉｎｇ　Ｓｔａｎｄａｒｄｓ）　１８０−１で定めた標準ハッシュ関数である。
【０００４】
ＭＤ５はメッセージブロック長が５１２−ｂｉｔ、ダイジェスト長（ハッシュ長）が１２８−ｂｉｔのハッシュ関数である。ＭＤ５をハードウェア実装した従来例としては、ＵＳＰ５６６４０１６があげられる。この従来例におけるＭＤ５の構成は、ＲＦＣ１３２２の仕様をそのままハードウェア化したものである。
一方ＳＨＡ−１は、メッセージブロック長が５１２−ｂｉｔ、ハッシュ長が１６０−ｂｉｔのハッシュ関数である。ＳＨＡ−１をハードウェア実装した従来例としては、ＵＳＰ５６２３５４５があげられる。この従来例におけるＳＨＡ−１の構成は、ＦＩＰＳ１８０−１の仕様をそのままハードウェア化したものである。
【０００５】
【発明が解決しようとする課題】
ＭＤ５とＳＨＡ−１のどちらのハッシュ関数も広く使用されているため、一般的なライブラリやハードウェアでは両方の関数を用意している場合が多い。そのため、特にハードウェアでは、２種類のハッシュ関数処理回路を実装する必要があり、回路規模が大きくなるという問題がある。
本発明は、複数のハッシュ関数をハードウェア実装するに当り、可能な限り回路の共通化を行い、より小さな回路規模のハッシュ関数処理回路を構成することを目的とする。
【０００６】
【課題を解決するための手段】
本発明に係るハッシュ関数処理回路は、第１ハッシュ関数処理と第２ハッシュ関数処理とを処理可能なハッシュ関数処理回路であって、入力されるメッセージを保持するためのメッセージ保持部と、メッセージ保持部から第１ハッシュ関数処理に必要となるメッセージデータを出力する第１メッセージ処理部と、メッセージ保持部から第２ハッシュ関数処理に必要となるメッセージデータを出力する第２メッセージ処理部と、第１メッセージ処理部からのメッセージデータに基づいて第１ハッシュ関数処理を実行する第１ハッシュ演算部と、第２メッセージ処理部からのメッセージデータに基づいて第２ハッシュ関数処理を実行する第２ハッシュ演算部と、第１ハッシュ演算部において演算される第１演算値と第２ハッシュ演算部とにおいて演算される第２演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部とを備える。
【０００７】
ここで、出力部を、セレクタを介して第１演算値および第２演算値のうちいずれか一方が選択的に入力される中間値保持部と、初期値および演算処理されたハッシュ値を保持するためのハッシュ値保持部と、中間値保持部に保持された中間値とハッシュ値保持部に保持された初期値または演算処理されたハッシュ値との加算処理を行い演算結果をハッシュ値保持部に出力する加算処理部とを備える構成とすることができる。
また、第１ハッシュ関数処理をＭＤ５（Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　５）とし、第２ハッシュ関数処理はＳＨＡ−１（Ｓｅｃｕｒｅ　Ｈａｓｈ　Ａｌｇｏｒｉｔｈｍ　１）とすることができる。
【０００８】
さらに、ハッシュ値保持部は、第１ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタと、第２ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタを共用するレジスタ回路で構成することができる。
この場合、ハッシュ値保持部は、第１ハッシュ関数処理における初期値を保持するために４個の３２ビットレジスタと、第２ハッシュ関数処理における初期値を保持するために５個の３２ビットレジスタとを共用する５個の３２ビットレジスタで構成することができる。
【０００９】
また、第１ハッシュ演算部および第２ハッシュ演算部は、５種類の非線形回路とその非線形回路のうちから１つを選択する選択回路とを備える非線形処理部を共用し、第１ハッシュ演算部による演算処理を行う場合に、非線形処理部はＭＤ５で用いられる４種類の非線形回路から１つを選択し、第２ハッシュ演算部による演算処理を行う場合に、非線形処理部はＳＨＡ−１で用いられる３種類の非線形回路から１つを選択するように構成できる。
さらに、メッセージ保持部は、５１２ビット分のメッセージを保持するためのレジスタ回路で構成することができる。
【００１０】
【発明の実施の形態】
〔概要構成〕
ＭＤ５およびＳＨＡ−１のいずれの場合もハードウェア実装する際には、図５〜図７に示すような基本構成となる。
ハッシュ関数回路１は、いずれの場合もメッセージが入力されハッシュ関数処理のためのメッセージデータを出力するメッセージ部２と、メッセージ部２から供給されるメッセージデータに基づいてハッシュ関数処理を実行するハッシュ処理部３とから構成される。
【００１１】
メッセージ部２は、入力されるメッセージを保持するメッセージ保持部２１と、メッセージ保持部２１に保持されたメッセージからハッシュ関数処理に必要となるメッセージデータを出力するメッセージ処理部２２とを備えている。
ハッシュ処理部３は、メッセージ部２から供給されるメッセージデータに基づいてハッシュ演算を実行するハッシュ演算部３５と、初期値および演算処理されたハッシュ値を保持するハッシュ保持部３１、ハッシュ演算部３５における演算処理された中間値を保持する中間値保持部３３、中間値保持部３３で保持しているデータを非線形関数処理してハッシュ演算部３５に入力する非線形関数部３４、中間値保持部３３で保持しているデータとハッシュ値保持部３１で保持しているデータとの加算処理を行う加算処理部３２などを備えている。
【００１２】
〈ＭＤ５ハードウェア実装モデル〉
ＭＤ５をハードウェア実装した場合の具体的な回路構成を図８および図９に示す。
図８に示すように、メッセージ部２はメッセージ保持部２１とメッセージ処理部２２で構成される。
メッセージ保持部２１は、１６個の３２ビットレジスタ２０１−０〜２０１−１５と、各３２ビットレジスタ２０１について１個右、３個右、５個右、７個右の３２ビットレジスタからの出力を選択的に入力する１６個のセレクタ２１１−０〜２１１−１５とを備えている。
【００１３】
図８下部に示すように、１つの３２ビットレジスタ２０１−ｋの出力は、１個左の３２ビットレジスタ２０１−ｋ−１、３個左の３２ビットレジスタ２０１−ｋ−３、５個左の３２ビットレジスタ２０１−ｋ−５、７個左の３２ビットレジスタ２０１−ｋ−７にそれぞれ対応するセレクタ２１１−ｋ−１，２１１−ｋ−３，２１１−ｋ−５，２１１−ｋ−７に入力されており、１ブロック左、３ブロック左、５ブロック左、７ブロック左の４種類の左シフト処理を行うことが可能となっている。左側に対応する３２ビットレジスタ２０１が存在しない場合には、１番左に位置する３２ビットレジスタ２０１−０の次が１番右の３２ビットレジスタ２０１−１５と見なして循環するように接続されている。
【００１４】
また、１番右に位置するセレクタ２１１−１５は、１番左に位置する３２ビットレジスタ２０１−０、左から３番目に位置する３２ビットレジスタ２０１−２、左から５番目に位置する３２ビットレジスタ２０１−４および左から７番目に位置する３２ビットレジスタ２０１−６の各出力の他に、外部から入力されるメッセージが入力されており、これらうちいずれかを３２ビットレジスタ２０１−１５に入力するように構成されている。したがって、入力されるメッセージは、一番右の３２ビットレジスタ２０１−１５から３２ビットずつ入力され、１６回で５１２ビットのメッセージが入力できるように構成されている。
【００１５】
メッセージ処理部２２は、１番左の３２ビットレジスタ２０１−０、左から２番目の３２ビットレジスタ２０１−１、左から６番目の３２ビットレジスタ２０１−５からの出力を選択的に出力するセレクタ２２１で構成されている。
図９に示すように、ハッシュ処理部３はハッシュ値保持部３１、加算処理部３２、中間値保持部３３およびハッシュ演算部３５で構成される。
ハッシュ値保持部３１は、初期値４０と加算処理部３２からの出力とを選択的に出力する４個のセレクタ３０１Ａ〜３０１Ｄと、セレクタ３０１を介して入力されるデータを保持する４個の３２ビットレジスタ３０２Ａ〜３０２Ｄとを備えている。初期値４０は、たとえばＲＯＭなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ３２ビットの初期値４０Ａ〜４０Ｄがセレクタ３０１Ａ〜３０１Ｄに入力される。最初の初期値セットの際には、セレクタ３０１Ａ〜３０１Ｄがそれぞれ初期値４０Ａ〜４０Ｄを選択して３２ビットレジスタ３０２Ａ〜３０２Ｄに初期値がセットされる。その後の演算処理においては、セレクタ３０１Ａ〜３０１Ｄは、加算処理部３２からの出力を選択して３２ビットレジスタ３０２Ａ〜３０２Ｄにその値をセットする。
【００１６】
加算処理部３２は、ハッシュ値保持部３１からの出力と中間値保持３３からの出力とを３２ビット毎に加算処理する４個の加算回路３１１Ａ〜３１１Ｄを備えている。
中間値保持部３３は、４個の３２ビットレジスタ３２２Ａ〜３２２Ｄと、各３２ビットレジスタ３２２Ａ〜３２２Ｄに対応するセレクタ３２１Ａ〜３２１Ｄとを備えている。
セレクタ３２１Ａは、ハッシュ値保持部３１の１番左に位置する３２ビットレジスタ３０２Ａの出力と中間値保持部３３の１番右に位置する３２ビットレジスタ３２２Ｄの出力を選択的に３２ビットレジスタ３２２Ａに入力する。セレクタ３２１Ｂは、ハッシュ演算部３５の出力とハッシュ値保持部３１の左から２番目に位置する３２ビットレジスタ３０２Ｂの出力とを選択的に３２ビットレジスタ３２２Ｂに入力する。セレクタ３２１Ｃは、左に隣接する３２ビットレジスタ３２２Ｂの出力とハッシュ値保持部３１の左から３番目に位置する３２ビットレジスタ３０２Ｃの出力とを選択的に３２ビットレジスタ３２２Ｃに入力する。セレクタ３２１Ｄは、左に隣接する３２ビットレジスタ３２２Ｃの出力とハッシュ値保持部３１の１番右に位置する３２ビットレジスタ３０２Ｄの出力とを選択的に３２ビットレジスタ３２２Ｄに入力する。
【００１７】
中間値保持部３３の一番左に位置する３２ビットレジスタ３２２Ａの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の一番左に位置する加算回路３１１Ａに入力される。中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２２Ｂの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の左から２番目に位置する加算回路３１１Ｂおよび中間値保持部３３の左から３番目に位置するセレクタ３２１Ｃに入力される。中間値保持部３３の左から３番目に位置する３２ビットレジスタ３２２Ｃの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の左から３番目に位置する加算回路３１１Ｃおよび中間値保持部３３の１番右に位置するセレクタ３２１Ｄに入力される。中間値保持部３３の１番右に位置する３２ビットレジスタ３２２Ｄの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の１番右に位置する加算回路３１１Ｄおよび中間値保持部３３の１番左に位置するセレクタ３２１Ａに入力される。
【００１８】
ハッシュ演算部３５は、中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２２Ｂ、左から３番目に位置する３２ビットレジスタ３２２Ｃ、１番右に位置する３２ビットレジスタ３２２Ｄの各出力が入力され４種類の非線形関数処理を実行可能な非線形関数部３４１と、非線形関数部３４１の出力と中間値保持３３の１番左の３２ビットレジスタ３２２Ａの出力とを加算処理する加算回路３３１と、加算回路３３１の出力とメッセージ部２から出力されるメッセージデータとを加算処理する加算回路３３２と、加算回路３３２の出力と定数テーブル３３４に予め用意されている定数Ｔのうちから選択された定数とを加算処理する加算回路３３３と、加算回路３３３の出力を定数ｓに基づくビットローテーション量でローテートシフトするローテーション回路３３５と、ローテーション回路３３５の出力と中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２２Ｂの出力とを加算処理する加算回路３３６とを備えている。加算回路３３６の出力は、中間値保持部３３の左から２番目のセレクタ３２１Ｂに入力される。
【００１９】
非線形関数部３４１は、４種類の非線形関数処理のうち１つを選択して処理できるように４つの非線形関数回路が構成されている。各非線形関数回路は、３つの入力を左からＸ，Ｙ，Ｚとした場合に次のような非線形関数を処理する構成となっている。
Ｆ＝（Ｘ＆Ｙ）｜（（〜Ｘ）＆Ｚ）　　・・・（Ｍ１関数）
Ｇ＝（Ｘ＆Ｚ）｜（Ｙ＆（〜Ｚ））　　・・・（Ｍ２関数）
Ｈ＝Ｘ＾Ｙ＾Ｚ　　　　　　　　　　　・・・（Ｍ３関数）
Ｉ＝Ｙ＾（Ｘ｜（〜Ｚ））　　　　　　・・・（Ｍ４関数）
ただし、”＆”は論理積、”｜”は論理和、”〜”は反転、”＾”は排他的論理和を示す。
【００２０】
定数テーブル３３４は、ＲＯＭなどのメモリやハードディスクなどの記憶装置の所定領域に格納されている定数Ｔのテーブルであり、６４個の３２ビット定数のテーブルを構成している。
また、ローテーション部３３５では、ビットローテーション量を決定するための１６種類の定数から選択される定数ｓが供給され、この定数ｓに基づいてデータのローテートシフト処理を実行する。
〈ＳＨＡ−１ハードウェア実装モデル〉
ＳＨＡ−１をハードウェア実装した場合の具体的な回路構成を図１０に示す。
【００２１】
図１０に示すように、メッセージ部２はメッセージ保持部２１とメッセージ処理部２２で構成される。
メッセージ保持部２１は、１６個の３２ビットレジスタ２０２−０〜２０２−１５と、入力されるメッセージとメッセージ処理部２２の出力とを選択的に１番右に位置する３２ビットレジスタ２０２−１５に入力するセレクタ２１２とを備えている。各３２ビットレジスタ２０２−ｋの出力はそれぞれ左に隣接する３２ビットレジスタ２０２−ｋ−１に入力されている。また、１番左に位置する３２ビットレジスタ２０２−０、左から３番目に位置する３２ビットレジスタ２０２−２、左から９番目に位置する３２ビットレジスタ２０２−８、左から１４番目に位置する３２ビットレジスタ２０２−１３の各出力はメッセージ処理部２２に入力されており、さらに１番左に位置する３２ビットレジスタの出力はハッシュ処理部３への出力となっている。
【００２２】
メッセージ処理部２２は、１番左に位置する３２ビットレジスタ２０２−０の出力と左から３番目に位置する３２ビットレジスタ２０２−２の出力との排他的論理和を演算するＸＯＲ回路２２２と、ＸＯＲ回路２２２の出力と左から９番目に位置する３２ビットレジスタ２０２−８の出力との排他的論理和を演算するＸＯＲ回路２２３と、ＸＯＲ回路２２３の出力と左から１４番目に位置する３２ビットレジスタ２０２−１３の出力との排他的論理和を演算するＸＯＲ回路２２４と、ＸＯＲ回路２２４の出力に対して１ビットローテーションシフトを行うローテーション部２２５とを備える。ローテーション部２２５の出力が、メッセージ保持部２１のセレクタ２１２に入力される。
【００２３】
ハッシュ処理部３はハッシュ値保持部３１、加算処理部３２、中間値保持部３３およびハッシュ演算部３５で構成される。
ハッシュ値保持部３１は、初期値４１と加算処理部３２からの出力とを選択的に出力する５個のセレクタ３０４Ａ〜３０４Ｅと、セレクタ３０４を介して入力されるデータを保持する５個の３２ビットレジスタ３０３Ａ〜３０３Ｅとを備えている。初期値４１は、たとえばＲＯＭなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ３２ビットの初期値４１Ａ〜４１Ｅがセレクタ３０４Ａ〜３０４Ｅに入力される。最初の初期値セットの際には、セレクタ３０４Ａ〜３０４Ｅがそれぞれ初期値４１Ａ〜４１Ｅを選択して３２ビットレジスタ３０３Ａ〜３０３Ｅに初期値がセットされる。その後の演算処理においては、セレクタ３０４Ａ〜３０４Ｅは、加算処理部３２からの出力を選択して３２ビットレジスタ３０３Ａ〜３０３Ｅにその値をセットする。
【００２４】
加算処理部３２は、ハッシュ値保持部３１からの出力と中間値保持３３からの出力とを３２ビット毎に加算処理する５個の加算回路３１２Ａ〜３１２Ｅを備えている。
中間値保持部３３は、５個の３２ビットレジスタ３２４Ａ〜３２４Ｅと、各３２ビットレジスタ３２４Ａ〜３２４Ｅに対応するセレクタ３２３Ａ〜３２３Ｅとを備えている。
セレクタ３２３Ａは、ハッシュ値保持部３１の１番左に位置する３２ビットレジスタ３０３Ａの出力とハッシュ演算部３５の出力を選択的に３２ビットレジスタ３２４Ａに入力する。セレクタ３２３Ｂは、ハッシュ値保持部３１の左から２番目の３２ビットレジスタ３０３Ｂの出力と中間値保持部３３の１番左に位置する３２ビットレジスタ３２４Ａの出力とを選択的に３２ビットレジスタ３２４Ｂに入力する。セレクタ３２３Ｃは、左に隣接する３２ビットレジスタ３２４Ｂの出力を３０ビット左にローテーションシフトするローテーション部３２５の出力とハッシュ値保持部３１の左から３番目に位置する３２ビットレジスタ３０３Ｃの出力とを選択的に３２ビットレジスタ３２４Ｃに入力する。セレクタ３２３Ｄは、左に隣接する３２ビットレジスタ３２４Ｃの出力とハッシュ値保持部３１の左から４番目に位置する３２ビットレジスタ３０３Ｄの出力とを選択的に３２ビットレジスタ３２４Ｄに入力する。セレクタ３２３Ｅは、左に隣接する３２ビットレジスタ３２４Ｄの出力とハッシュ値保持部３１の１番右に位置する３２ビットレジスタ３０３Ｅの出力とを選択的に３２ビットレジスタ３２４Ｅに入力する。
【００２５】
中間値保持部３３の一番左に位置する３２ビットレジスタ３２４Ａの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の一番左に位置する加算回路３１２Ａおよび右に隣接するセレクタ３２３Ｂに入力される。中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２４Ｂの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の左から２番目に位置する加算回路３１２Ｂおよびローテーション部３２５に入力される。中間値保持部３３の左から３番目に位置する３２ビットレジスタ３２４Ｃの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の左から３番目に位置する加算回路３１２Ｃおよび中間値保持部３３の左から４番目に位置するセレクタ３２３Ｄに入力される。中間値保持部３３の左から４番目に位置する３２ビットレジスタ３２４Ｄの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の左から４番目に位置する加算回路３１２Ｄおよび中間値保持部３３の１番右に位置するセレクタ３２３Ｅに入力される。中間値保持部３３の１番右に位置する３２ビットレジスタ３２４Ｅの出力は、ハッシュ演算部３５に入力されるとともに加算処理部３２の１番右に位置する加算回路３１２Ｅに入力される。
【００２６】
ハッシュ演算部３５は、中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２４Ｂ、左から３番目に位置する３２ビットレジスタ３２４Ｃ、左から４番目に位置する３２ビットレジスタ３２４Ｄの各出力が入力され３種類の非線形関数処理を実行可能な非線形関数部３４２と、非線形関数部３４２の出力と中間値保持３３の１番右の３２ビットレジスタ３２４Ｅの出力とを加算処理する加算回路３５１と、中間値保持部３３の１番左に位置する３２ビットレジスタ３２４Ａの出力を５ビット左にローテーションシフトするローテーション部３５６の出力と加算回路３５１の出力とを加算処理する加算回路３５２と、加算回路３５２の出力とメッセージ部２からのメッセージデータとを加算処理する加算回路３５３と、加算回路３５３の出力と定数テーブル３５５に予め用意されている定数Ｋのうちから選択された定数とを加算処理する加算回路３５４とを備えている。加算回路３５４の出力は、中間値保持部３３の１番左のセレクタ３２３Ａに入力される。
【００２７】
非線形関数部３４２において実行される関数ｆｔは、ループ回数ｔの値に応じて３種類の非線形関数処理のうち１つを選択して処理できるように３つの非線形関数回路が構成されている。各非線形関数回路は、３つの入力を左からＸ，Ｙ，Ｚとした場合に次のような非線形関数を処理する構成となっている。
ｆ０−１９＝（Ｘ＆Ｙ）｜（（〜Ｘ）＆Ｚ）　　・・・（Ｓ１関数）
ｆ２０−３９，６０−７９＝Ｘ＾Ｙ＾Ｚ　　　　　　　　　・・・（Ｓ２関数）
ｆ４０−５９＝（Ｘ＆Ｙ）｜（Ｚ＆Ｘ）｜（Ｙ＆Ｚ）・・・（Ｓ３関数）
ただし、”＆”は論理積、”｜”は論理和、”〜”は反転、”＾”は排他的論理和を示す。
【００２８】
定数テーブル３５５は、ＲＯＭなどのメモリやハードディスクなどの記憶装置の所定領域に格納されている定数Ｋのテーブルであり、４個の３２ビット定数のテーブルを構成している。
〈ＭＤ５とＳＨＡ−１のハードウェア共用化〉
本発明では、前述したＭＤ５をハードウェア実装した場合の回路構成とＳＨＡ−１をハードウェア実装した場合の回路構成のうち、可能な限り共用化を行って回路規模の縮小を図る。
【００２９】
たとえば、メッセージ保持部２１内の３２ビットレジスタ２０１−０〜２０１−１５と、３２ビットレジスタ２０２−０〜２０２−１５とを共用化することが考えられる。このことにより、図１に示すように、メッセージ部２は、共用化されたメッセージ保持部２１と、ＭＤ５用メッセージ処理部２３と、ＳＨＡ−１用メッセージ処理部２４と、ＭＤ５用メッセージ処理部２３の出力およびＳＨＡ−１用メッセージ処理部２４の出力を選択的にメッセージ保持部２１にフィードバックするセレクタ２５とで構成することができる。
また、ハッシュ値保持部３１、加算処理部３２、中間値処理３３の回路構成は、ＭＤ５とＳＨＡ−１とにおいて類似する点が多く、共用化を図ることが容易であると考えられる。さらに、ＭＤ５における非線形関数部３４１のＭ１関数およびＭ３関数が、ＳＨＡ−１における非線形関数部３４２のＳ１関数およびＳ２関数とそれぞれ同一の関数処理であり、これらを共用化することが考えられる。このことから、図２に示すように、ハッシュ処理部３は、共用化されたハッシュ値保持部３１、加算処理部３２、中間値保持部３３および非線形関数部３６と、ＭＤ５用ハッシュ演算部３７と、ＳＨＡ−１用ハッシュ演算部３８と、ＭＤ５用ハッシュ演算部３７の出力およびＳＨＡ−１用ハッシュ演算部３８の出力を選択的に中間値保持部３３にフィードバックするセレクタ３９とで構成することができる。
【００３０】
〔ＭＤ５とＳＨＡ−１のハードウェア実装〕
上述したような観点に基づいて、本発明の１実施形態が採用されるハッシュ関数処理回路を図３および図４に基づいて説明する。
メッセージ部２は、図３に示すように、メッセージ保持部２１と、ＭＤ５用メッセージ処理部２３と、ＳＨＡ−１用メッセージ処理部２４とを備えている。
メッセージ保持部２１は、図８に示すＭＤ５のハードウェア実装時のメッセージ保持部２１とほぼ同様の構成となっており、１６個の３２ビットレジスタ２０３−０〜２０３−１５と、各３２ビットレジスタ２０３について１個右、３個右、５個右、７個右の３２ビットレジスタからの出力を選択的に入力する１６個のセレクタ２１３−０〜２１３−１５とを備えている。
【００３１】
図３下部に示すように、１つの３２ビットレジスタ２０３−ｋの出力は、１個左の３２ビットレジスタ２０３−ｋ−１、３個左の３２ビットレジスタ２０３−ｋ−３、５個左の３２ビットレジスタ２０３−ｋ−５、７個左の３２ビットレジスタ２０３−ｋ−７にそれぞれ対応するセレクタ２１３−ｋ−１，２１３−ｋ−３，２１３−ｋ−５，２１３−ｋ−７に入力されており、１ブロック左、３ブロック左、５ブロック左、７ブロック左の４種類の左シフト処理を行うことが可能となっている。入力されるメッセージは、一番右の３２ビットレジスタ２０３−１５から３２ビットずつ入力され、１６回で５１２ビットのメッセージが入力できるように構成されている。
【００３２】
ＭＤ５用メッセージ処理部２３は、１番左の３２ビットレジスタ２０３−０、左から２番目の３２ビットレジスタ２０３−１、左から６番目の３２ビットレジスタ２０３−５からの出力を選択的に出力するセレクタ２３１で構成されている。
ＳＨＡ−１用メッセージ処理部２４は、１番左に位置する３２ビットレジスタ２０３−０の出力と左から３番目に位置する３２ビットレジスタ２０３−２の出力との排他的論理和を演算するＸＯＲ回路２４１と、ＸＯＲ回路２４１の出力と左から９番目に位置する３２ビットレジスタ２０３−８の出力との排他的論理和を演算するＸＯＲ回路２４２と、ＸＯＲ回路２４２の出力と左から１４番目に位置する３２ビットレジスタ２０３−１３の出力との排他的論理和を演算するＸＯＲ回路２４３と、ＸＯＲ回路２４３の出力に対して１ビットローテーションシフトを行うローテーション部２４４とを備える。
【００３３】
さらに、１番左に位置する３２ビットレジスタ２０３−０の出力とローテーション部２４４の出力を選択的に１番右に位置するセレクタ２１３−１５に入力するセレクタ２４５が設けられている。このセレクタ２４５は、ＭＤ５処理を実行する際に３２ビットレジスタ２０３−０の出力をセレクタ２１３−１５に入力し、ＳＨＡ−１処理を実行する際にローテーション部２４４の出力をセレクタ２１３−１５に入力するように構成される。
ＭＤ５用メッセージ処理部２３による処理を実行した後、セレクタ２３１からの出力がＭＤ５用メッセージデータＭ−ｏｕｔとなる。また、ＳＨＡ−１用メッセージ処理部２４による処理を実行した後、１番左に位置する３２ビットレジスタ２０３−０からの出力がＳＨＡ−１用メッセージデータＷ−ｏｕｔとなる。
【００３４】
図４に示すように、ハッシュ処理部３はハッシュ値保持部３１、加算処理部３２、中間値保持部３３およびハッシュ演算部３７＋３８で構成される。
ハッシュ値保持部３１は、初期値４２と加算処理部３２からの出力とを選択的に出力する５個のセレクタ３０６Ａ〜３０６Ｅと、セレクタ３０６を介して入力されるデータを保持する５個の３２ビットレジスタ３０５Ａ〜３０５Ｅとを備えている。初期値４２は、たとえばＲＯＭなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ３２ビットの初期値４２Ａ〜４２Ｅがセレクタ３０６Ａ〜３０６Ｅに入力される。最初の初期値セットの際には、セレクタ３０６Ａ〜３０６Ｅがそれぞれ初期値４２Ａ〜４２Ｅを選択して３２ビットレジスタ３０５Ａ〜３０５Ｅに初期値がセットされる。その後の演算処理においては、セレクタ３０６Ａ〜３０６Ｅは、加算処理部３２からの出力を選択して３２ビットレジスタ３０５Ａ〜３０５Ｅにその値をセットする。
【００３５】
加算処理部３２は、ハッシュ値保持部３１からの出力と中間値保持３３からの出力とを３２ビット毎に加算処理する５個の加算回路３１３Ａ〜３１３Ｅを備えている。
中間値保持部３３は、５個の３２ビットレジスタ３２６Ａ〜３２６Ｅと、各３２ビットレジスタ３２６Ａ〜３２６Ｅに対応するセレクタ３２５Ａ〜３２５Ｅとを備えている。
セレクタ３２５Ａは、ハッシュ値保持部３１の１番左に位置する３２ビットレジスタ３０５Ａの出力とハッシュ演算部３７＋３８からの出力を選択的に３２ビットレジスタ３２６Ａに入力する。セレクタ３２５Ｂは、ハッシュ値保持部３１の左から２番目の３２ビットレジスタ３０５Ｂの出力とハッシュ演算部３７＋３８からの出力とを選択的に３２ビットレジスタ３２６Ｂに入力する。セレクタ３２５Ｃは、ハッシュ値保持部３１の左から３番目に位置する３２ビットレジスタ３０５Ｃの出力とハッシュ演算部３７＋３８からの出力とを選択的に３２ビットレジスタ３２６Ｃに入力する。セレクタ３２５Ｄは、左に隣接する３２ビットレジスタ３２６Ｃの出力とハッシュ値保持部３１の左から４番目に位置する３２ビットレジスタ３０５Ｄの出力とを選択的に３２ビットレジスタ３２６Ｄに入力する。セレクタ３２５Ｅは、左に隣接する３２ビットレジスタ３２６Ｄの出力とハッシュ値保持部３１の１番右に位置する３２ビットレジスタ３０５Ｅの出力とを選択的に３２ビットレジスタ３２６Ｅに入力する。
【００３６】
中間値保持部３３の一番左に位置する３２ビットレジスタ３２６Ａの出力は、ハッシュ演算部３７＋３８に入力されるとともに加算処理部３２の一番左に位置する加算回路３１３Ａに入力される。中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２６Ｂの出力は、ハッシュ演算部３７＋３８に入力されるとともに加算処理部３２の左から２番目に位置する加算回路３１３Ｂに入力される。中間値保持部３３の左から３番目に位置する３２ビットレジスタ３２６Ｃの出力は、ハッシュ演算部３７＋３８に入力されるとともに加算処理部３２の左から３番目に位置する加算回路３１３Ｃおよび中間値保持部３３の左から４番目に位置するセレクタ３２５Ｄに入力される。中間値保持部３３の左から４番目に位置する３２ビットレジスタ３２６Ｄの出力は、ハッシュ演算部３７＋３８に入力されるとともに加算処理部３２の左から４番目に位置する加算回路３１３Ｄおよび中間値保持部３３の１番右に位置するセレクタ３２５Ｅに入力される。中間値保持部３３の１番右に位置する３２ビットレジスタ３２６Ｅの出力は、ハッシュ演算部３７＋３８に入力されるとともに加算処理部３２の１番右に位置する加算回路３１３Ｅに入力される。
【００３７】
ハッシュ演算部３７＋３８のうちＭＤ５用ハッシュ演算部３７は、中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２６Ｂ、左から３番目に位置する３２ビットレジスタ３２６Ｃ、左から４番目に位置する３２ビットレジスタ３２６Ｄの各出力が入力され５種類の非線形関数処理を実行可能な非線形関数部３４３と、非線形関数部３４３の出力と中間値保持３３の１番左の３２ビットレジスタ３２６Ａの出力とを加算処理する加算回路３７１（Ｍａｄｄ１）と、加算回路３７１の出力とメッセージ部２から出力されるＭＤ５用メッセージデータＭ−ｏｕｔとを加算処理する加算回路３７２（Ｍａｄｄ２）と、加算回路３７２の出力と定数テーブル３７５に予め用意されている定数Ｔのうちから選択された定数とを加算処理する加算回路３７３（Ｍａｄｄ３）と、加算回路３７３の出力を定数ｓに基づくビットローテーション量でローテートシフトするローテーション回路３７４と、ローテーション回路３７４の出力と中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２６Ｂの出力とを加算処理する加算回路３７６（Ｍａｄｄ４）とを備えている。
【００３８】
また、ハッシュ演算部３７＋３８のうちＳＨＡ−１用ハッシュ演算部３８は、中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２６Ｂ、左から３番目に位置する３２ビットレジスタ３２６Ｃ、左から４番目に位置する３２ビットレジスタ３２６Ｄの各出力が入力され５種類の非線形関数処理を実行可能な非線形関数部３４３と、非線形関数部３４３の出力と中間値保持３３の１番右の３２ビットレジスタ３２６Ｅの出力とを加算処理する加算回路３８１（Ｓａｄｄ１）と、中間値保持部３３の１番左に位置する３２ビットレジスタ３２６Ａの出力を５ビット左にローテーションシフトするローテーション部３８６の出力と加算回路３８１の出力とを加算処理する加算回路３８２（Ｓａｄｄ２）と、加算回路３８２の出力とメッセージ部２からのＳＨＡ−１用メッセージデータＷ−ｏｕｔとを加算処理する加算回路３８３（Ｓａｄｄ３）と、加算回路３８３の出力と定数テーブル３８５に予め用意されている定数Ｋのうちから選択された定数とを加算処理する加算回路３８４（Ｓａｄｄ４）とを備えている。
【００３９】
さらに、ハッシュ演算部３７＋３８には、中間値保持部３３の１番左に位置する３２ビットレジスタ３２６Ａの出力と加算回路３７６（Ｍａｄｄ４）の出力を選択的に中間値保持部３３の左から２番目のセレクタ３２５Ｂに入力するセレクタ３９１（ＭＳｓｅｌ１）と、中間値保持部３３の左から２番目に位置する３２ビットレジスタ３２６Ｂの出力とこの出力を３０ビット左にローテーションシフトするローテーション部３８７の出力とを選択的に中間値保持部３３の左から３番目に位置するセレクタ３２５Ｃに入力するセレクタ３９２（ＭＳｓｅｌ２）と、中間保持部３３の左から４番目に位置する３２ビットレジスタ３２６Ｄの出力と加算回路３８４（Ｓａｄｄ４）の出力とを選択的に中間値保持部３３の１番左に位置するセレクタ３２５Ａに入力するセレクタ３９３（ＭＳｓｅｌ３）とを備えている。
【００４０】
非線形関数部３４３は、５種類の非線形関数処理のうち１つを選択して処理できるように５つの非線形関数回路が構成されている。各非線形関数回路は、３つの入力を左からＸ，Ｙ，Ｚとした場合に次のような非線形関数を処理する構成となっている。
Ｆ＝ｆ０−１９＝（Ｘ＆Ｙ）｜（（〜Ｘ）＆Ｚ）　　　　・・・（Ｍ１：Ｓ１関数）
Ｇ＝（Ｘ＆Ｚ）｜（Ｙ＆（〜Ｚ））　　　　　　　・・・（Ｍ２関数）
Ｈ＝ｆ２０−３９，６０−７９＝Ｘ＾Ｙ＾Ｚ　　　　　　　　　　　・・・（Ｍ３：Ｓ２関数）
Ｉ＝Ｙ＾（Ｘ｜（〜Ｚ））　　　　　　　　　　　・・・（Ｍ４関数）
Ｊ＝ｆ４０−５９＝　（Ｘ＆Ｙ）｜（Ｚ＆Ｘ）｜（Ｙ＆Ｚ）・・・（Ｓ３関数）
ただし、”＆”は論理積、”｜”は論理和、”〜”は反転、”＾”は排他的論理和を示す。
【００４１】
〈ＭＤ５処理時の初期化シーケンス〉
前述した回路構成においてＭＤ５関数処理を実行する際の初期化シーケンスを表１に示す。
【００４２】
【表１】
2004053716.tif 000003
表１における各セレクタの対応は、ｓｅｌ−Ｍ（０−１４）：メッセージ保持部２１のセレクタ２０３−０〜２０３−１４、ｓｅｌ−Ｍ（１５）：メッセージ保持部２１のセレクタ２０３−１５、ｓｅｌ−Ｍ（１６）：ＭＤ５用メッセージ処理部２３のセレクタ２３１、ｓｅｌ（Ａ−Ｅ）：ハッシュ値保持部３１のセレクタ３０６Ａ−３０６Ｅ、ｓｅｌ（ａ−ｅ）：中間値保持部３３のセレクタ３２５Ａ−３２５Ｅ、ＭＳｓｅｌ（０）：メッセージ処理部２４のセレクタ２４５、ＭＳｓｅｌ（１−３）：ハッシュ演算部３７＋３８のセレクタ３９１−３９３である。また、セレクタ位置が任意である場合には、”＊”として記述する。
【００４３】
第１サイクルでは、ハッシュ値保持部３１のセレクタ３０６Ａ〜３０６Ｅを初期値４２側（ｉ）とすることにより、ハッシュ値保持部３１の３２ビットレジスタ３０５Ａ〜３０５ＤにＭＤ５用初期値４２Ａ〜４２Ｄがセットされる。第２サイクルでは、中間値保持部３３のセレクタ３２５Ａ〜３２５Ｅをハッシュ値保持部３１側（ｉ）とすることにより、中間値保持部３３の３２ビットレジスタ３２６Ａ〜３２６ＤにＭＤ５用初期値４２Ａ〜４２Ｄがセットされる。
〈ＳＨＡ−１処理時の初期化シーケンス〉
前述した回路構成においてＳＨＡ−１関数処理を実行する際の初期化シーケンスを表２に示す。
【００４４】
【表２】
2004053716.tif 000004
この場合も、ＭＤ５処理時と同様にして２サイクルで初期化処理を完了する。
〈メッセージ入力シーケンス〉
メッセージ部２へのメッセージ入力は、ＭＤ５処理およびＳＨＡ−１処理のいずれの場合も共通のシーケンスで行うことができ、これを表３に示す。
【００４５】
【表３】
2004053716.tif 000005
ここでは、メッセージ保持部２１のセレクタ２１３−０〜２１３−１５をそれぞれ隣接する３２ビットレジスタ２０３の出力を選択するようにして、１６サイクルで５１２ビットのメッセージ入力を完了する。
〈ＭＤ５処理シーケンス〉
ＭＤ５処理を実行する際のシーケンスを表４Ａ、表４Ｂに示す。
【００４６】
【表４Ａ】
2004053716.tif 000006
【００４７】
【表４Ｂ】
2004053716.tif 000007
ここでは、第１サイクル〜第１６サイクルにおいてＦ関数処理（Ｍ１関数）を行い、第１７サイクル〜第３２サイクルにおいてＧ関数処理（Ｍ２関数）を行い、第３３サイクル〜第４８サイクルにおいてＨ関数処理（Ｍ３関数）を行い、第４９サイクル〜第６４サイクルでＩ関数処理（Ｍ４関数）を行い、第６５サイクルおよび第６６サイクルで出力処理を行う。このようにして、６６サイクルでＭＤ５処理を完了することができる。
【００４８】
〈ＳＨＡ−１処理シーケンス〉
ＳＨＡ−１処理を実行する際のシーケンスを表５に示す。
【００４９】
【表５】
2004053716.tif 000008
ここでは、第１サイクル〜第２０サイクルにおいてＦ関数処理（Ｓ１関数）を行い、第２１サイクル〜第４０サイクルにおいてＨ関数処理（Ｓ２関数）を行い、第４１サイクル〜第６０サイクルにおいてＪ関数処理（Ｓ３関数）を行い、第６１サイクル〜第８０サイクルにおいてＨ関数処理（Ｓ２関数）を行い、第８１サイクルおよび第８２サイクルにおいて出力処理を行う。このようにして、８２サイクルでＳＨＡ−１処理を完了することができる。
【００５０】
〈処理手順〉
ＭＤ５処理を実行する場合には、まず、ＭＤ５用の初期化処理を実行し、ＭＤ５用初期値を中間値保持部３３の３２ビットレジスタ３２６Ａ〜３２６Ｄにセットする。さらに、メッセージを５１２ビット毎に分割し、分割された５１２ビットのメッセージを３２ビットずつ１６回繰り返すことでメッセージ保持部２１の３２ビットレジスタ２０３−０〜２０３−１５にセットする。この後、前述したようなＭＤ５処理を実行してハッシュ値保持部３１の３２ビットレジスタ３０５Ａ〜３０５Ｄに格納された実行結果を出力する。さらに次の５１２ビットのメッセージをメッセージ部２に入力し、同様にしてＭＤ５処理を実行し処理結果をハッシュ保持部３１を介して出力することを繰り返す。
【００５１】
ＳＨＡ−１処理を実行する場合も同様であって、まず、ＳＨＡ−１用の初期化処理を実行し、ＳＨＡ−１用初期値を中間値保持部３３の３２ビットレジスタ３２６Ａ〜３２６Ｅにセットする。さらに、メッセージを５１２ビット毎に分割し、分割された５１２ビットのメッセージを３２ビットずつ１６回繰り返すことでメッセージ保持部２１の３２ビットレジスタ２０３−０〜２０３−１５にセットする。この後、前述したようなＳＨＡ−１処理を実行してハッシュ値保持部３１の３２ビットレジスタ３０５Ａ〜３０５Ｅに格納された実行結果を出力する。さらに次の５１２ビットのメッセージをメッセージ部２に入力し、同様にしてＳＨＡ−１処理を実行し処理結果をハッシュ保持部３１を介して出力することを繰り返す。
【００５２】
〔他のハッシュ関数回路への適用〕
ＭＤ５とＳＨＡ−１はともＭＤ４をベースとするハッシュ関数であり、共通する処理回路が多く含まれている。したがって、前述の実施形態のような構成とすることで、ＭＤ５とＳＨＡ−１とを個別に実装した場合に比して、回路規模を７５％程度に削減することが可能となる。
ＭＤ４をベースとするハッシュ関数として、ＭＤ５やＳＨＡ−１以外に、ＲＩＰＥＭＤやＦＩＰＳ１８０−２（ＳＨＡ２５６，ＳＨＡ３８４，ＳＨＡ５１２）などが存在し、これらについても同様の手法で回路の共用化を行い、同時に実装して回路規模を削減することとが可能となる。
【００５３】
前述した実施形態では、ＭＤ５とＳＨＡ−１の２つのハッシュ関数処理回路を同時に実装する場合について説明したが、３つ以上ハッシュ関数処理回路を同時に実装する場合についても同様の手法を用いることが可能である。たとえば、ｎ個のハッシュ関数を同時実装する場合には、回路規模は１＋（１／３）（ｎ−１）〜１＋（１／２）（ｎ−１）程度にすることができ、同時に実装するハッシュ関数の種類が多いほど回路規模の削減率は大きくなる。
【００５４】
【発明の効果】
本発明によれば、複数のハッシュ関数を同時に実装したハッシュ関数処理回路の回路規模を大幅に縮小することが可能となる。
【図面の簡単な説明】
【図１】本発明の１実施形態の概略構成を示す機能ブロック図。
【図２】本発明の１実施形態の概略構成を示す機能ブロック図。
【図３】メッセージ部の回路図。
【図４】ハッシュ処理部の回路図。
【図５】ハッシュ関数処理回路の全体構成を示す概略構成図。
【図６】メッセージ部の概略構成図。
【図７】ハッシュ処理部の概略構成図。
【図８】従来例によるＭＤ５処理のためのメッセージ部の回路図。
【図９】従来例によるＭＤ５処理のためのハッシュ処理部の回路図。
【図１０】従来例によるＳＨＡ−１処理のための回路図。
【図１】
2004053716.tif 000009
【図２】
2004053716.tif 000010
【図３】
2004053716.tif 000011
【図４】
2004053716.tif 000012
【図５】
2004053716.tif 000013
【図６】
2004053716.tif 000014
【図７】
2004053716.tif 000015
【図８】
2004053716.tif 000016
【図９】
2004053716.tif 000017
【図１０】
2004053716.tif 000018