(57)【特許請求の範囲】
【請求項１】
第１ハッシュ関数処理であるMD5（Message Digest 5）と第２ハッシュ関数処理であるSHA-1（Secure Hash Algorithm 1）とを処理可能なハッシュ関数処理回路であって、
16個の32ビットレジスタを備え、前記各32ビットレジスタの出力を１ブロック左、３ブロック左、５ブロック左、７ブロック左の４種類の左シフト処理することが可能なように16個のセレクタが前記各32ビットレジスタに接続され、入力されるメッセージを保持するためのメッセージ保持部と、
前記メッセージ保持部から第１ハッシュ関数処理に必要となるメッセージデータを出力するために前記メッセージ保持部の32ビットレジスタの出力を選択的に出力するセレクタで構成される第１メッセージ処理部と、
前記メッセージ保持部から第２ハッシュ関数処理に必要となるメッセージデータを出力するために前記メッセージ保持部の32ビットレジスタの出力のうち所定のものが入力されそれぞれ直列に接続されて排他的論理和を演算する複数のXOR回路と最後のXOR回路の出力に対して１ビットローテーションシフトを行うローテーション部とを備える第２メッセージ処理部と、
前記第１メッセージ処理部からのメッセージデータに基づいて第１ハッシュ関数処理を実行する第１ハッシュ演算部と、
前記第２メッセージ処理部からのメッセージデータに基づいて第２ハッシュ関数処理を実行する第２ハッシュ演算部と、
前記第１ハッシュ演算部において演算される第１演算値と第２ハッシュ演算部とにおいて演算される第２演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部と、
を備えるハッシュ関数処理回路。
【請求項２】
前記出力部は、
セレクタを介して前記第１演算値および第２演算値のうちいずれか一方が選択的に入力される中間値保持部と、
初期値および演算処理されたハッシュ値を保持するためのハッシュ値保持部と、
前記中間値保持部に保持された中間値と前記ハッシュ値保持部に保持された初期値または演算処理されたハッシュ値との加算処理を行い演算結果を前記ハッシュ値保持部に出力する加算処理部と、
を備える請求項１に記載のハッシュ関数処理回路。
【請求項３】
前記ハッシュ値保持部は、第１ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタと、第２ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタを共用するレジスタ回路で構成される、請求項３に記載のハッシュ関数処理回路。
【請求項４】
前記ハッシュ値保持部は、第１ハッシュ関数処理における初期値を保持するために４個の32ビットレジスタと、第２ハッシュ関数処理における初期値を保持するために５個の32ビットレジスタとを共用する５個の32ビットレジスタで構成される、請求項４に記載のハッシュ関数処理回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号装置に用いられるハッシュ関数処理回路に関する。
【０００２】
【従来の技術】
デジタル署名を行う際の公開鍵暗号の計算量を少なくするために可変長のデータを圧縮して固定長のデータに変換するハッシュ関数が用いられる。このハッシュ関数は１方向性の関数処理であり、変換された結果であるメッセージダイジェストは逆変換が極めて困難である必要がある。
現在広く使われているハッシュ関数として、MD5（Message Digest 5）およびSHA-1（Secure Hash Algorithm 1）が知られている。MD5とSHA-1はどちらもMD4（Message Digest 4）を改良したハッシュ関数である。MD4は1990年R.L. Rivestが"The MD4 Message Digest Algorithm"としてCRYPTO90で提案したもので、後にいくつかの問題点が指摘された。
【０００３】
MD5は、R.L. RivestがMD4の改良として提案し、1992年にRFC1322, "The MD5 Message Digest Algorithm"として登録されたアルゴリズムである。なお、RFC(Request for Comment)とはIETF(The Internet Engineering Task Force)より発行されるインターネット技術や仕様に関するデファクトスタンダードのことである。同様に、SHA-1は米国政府の標準局NIST(National Institute of Standard Technology)がMD4を基に改良を行い、FIPS(Federal Information Processing Standards) 180-1で定めた標準ハッシュ関数である。
【０００４】
MD5はメッセージブロック長が512-bit、ダイジェスト長(ハッシュ長)が128-bitのハッシュ関数である。MD5をハードウェア実装した従来例としては、USP5664016があげられる。この従来例におけるMD5の構成は、RFC1322の仕様をそのままハードウェア化したものである。
一方SHA-1は、メッセージブロック長が512-bit、ハッシュ長が160-bitのハッシュ関数である。SHA-1をハードウェア実装した従来例としては、USP5623545があげられる。この従来例におけるSHA-1の構成は、FIPS180-1の仕様をそのままハードウェア化したものである。
【０００５】
【発明が解決しようとする課題】
MD5とSHA-1のどちらのハッシュ関数も広く使用されているため、一般的なライブラリやハードウェアでは両方の関数を用意している場合が多い。そのため、特にハードウェアでは、２種類のハッシュ関数処理回路を実装する必要があり、回路規模が大きくなるという問題がある。
本発明は、複数のハッシュ関数をハードウェア実装するに当り、可能な限り回路の共通化を行い、より小さな回路規模のハッシュ関数処理回路を構成することを目的とする。
【０００６】
【課題を解決するための手段】
本発明に係るハッシュ関数処理回路は、第１ハッシュ関数処理であるMD5（Message Digest 5）と第２ハッシュ関数処理であるSHA-1（Secure Hash Algorithm 1）とを処理可能なハッシュ関数処理回路であって、16個の32ビットレジスタを備え、各32ビットレジスタの出力を１ブロック左、３ブロック左、５ブロック左、７ブロック左の４種類の左シフト処理することが可能なように16個のセレクタが各32ビットレジスタに接続され、入力されるメッセージを保持するためのメッセージ保持部と、メッセージ保持部から第１ハッシュ関数処理に必要となるメッセージデータを出力するためにメッセージ保持部の32ビットレジスタの出力を選択的に出力するセレクタで構成される第１メッセージ処理部と、メッセージ保持部から第２ハッシュ関数処理に必要となるメッセージデータを出力するためにメッセージ保持部の32ビットレジスタの出力のうち所定のものが入力されそれぞれ直列接続されて排他的論理和を演算する複数のXOR回路と最後のXOR回路の出力に対して１ビットローテーションシフトを行うローテーション部とを備える第２メッセージ処理部と、第１メッセージ処理部からのメッセージデータに基づいて第１ハッシュ関数処理を実行する第１ハッシュ演算部と、第２メッセージ処理部からのメッセージデータに基づいて第２ハッシュ関数処理を実行する第２ハッシュ演算部と、第１ハッシュ演算部において演算される第１演算値と第２ハッシュ演算部とにおいて演算される第２演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部とを備える。
【０００７】
ここで、出力部を、セレクタを介して第１演算値および第２演算値のうちいずれか一方が選択的に入力される中間値保持部と、初期値および演算処理されたハッシュ値を保持するためのハッシュ値保持部と、中間値保持部に保持された中間値とハッシュ値保持部に保持された初期値または演算処理されたハッシュ値との加算処理を行い演算結果をハッシュ値保持部に出力する加算処理部とを備える構成とすることができる。
【０００８】
さらに、ハッシュ値保持部は、第１ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタと、第２ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタを共用するレジスタ回路で構成することができる。
この場合、ハッシュ値保持部は、第１ハッシュ関数処理における初期値を保持するために４個の32ビットレジスタと、第２ハッシュ関数処理における初期値を保持するために５個の32ビットレジスタとを共用する５個の32ビットレジスタで構成することができる。
【０００９】
また、第１ハッシュ演算部および第２ハッシュ演算部は、５種類の非線形回路とその非線形回路のうちから１つを選択する選択回路とを備える非線形処理部を共用し、第１ハッシュ演算部による演算処理を行う場合に、非線形処理部はMD5で用いられる４種類の非線形回路から１つを選択し、第２ハッシュ演算部による演算処理を行う場合に、非線形処理部はSHA-1で用いられる３種類の非線形回路から１つを選択するように構成できる。
さらに、メッセージ保持部は、512ビット分のメッセージを保持するためのレジスタ回路で構成することができる。
【００１０】
【発明の実施の形態】
〔概要構成〕
MD5およびSHA-1のいずれの場合もハードウェア実装する際には、図５〜図７に示すような基本構成となる。
ハッシュ関数回路１は、いずれの場合もメッセージが入力されハッシュ関数処理のためのメッセージデータを出力するメッセージ部２と、メッセージ部２から供給されるメッセージデータに基づいてハッシュ関数処理を実行するハッシュ処理部３とから構成される。
【００１１】
メッセージ部２は、入力されるメッセージを保持するメッセージ保持部21と、メッセージ保持部21に保持されたメッセージからハッシュ関数処理に必要となるメッセージデータを出力するメッセージ処理部22とを備えている。
ハッシュ処理部３は、メッセージ部２から供給されるメッセージデータに基づいてハッシュ演算を実行するハッシュ演算部35と、初期値および演算処理されたハッシュ値を保持するハッシュ保持部31、ハッシュ演算部35における演算処理された中間値を保持する中間値保持部33、中間値保持部33で保持しているデータを非線形関数処理してハッシュ演算部35に入力する非線形関数部34、中間値保持部33で保持しているデータとハッシュ値保持部31で保持しているデータとの加算処理を行う加算処理部32などを備えている。
【００１２】
〈MD5ハードウェア実装モデル〉
MD5をハードウェア実装した場合の具体的な回路構成を図８および図９に示す。
図８に示すように、メッセージ部２はメッセージ保持部21とメッセージ処理部22で構成される。
メッセージ保持部21は、16個の32ビットレジスタ201-0〜201-15と、各32ビットレジスタ201について１個右、３個右、５個右、７個右の32ビットレジスタからの出力を選択的に入力する16個のセレクタ211-0〜211-15とを備えている。
【００１３】
図８下部に示すように、１つの32ビットレジスタ201-kの出力は、１個左の32ビットレジスタ201-k-1、３個左の32ビットレジスタ201-k-3、５個左の32ビットレジスタ201-k-5、７個左の32ビットレジスタ201-k-7にそれぞれ対応するセレクタ211-k-1,211-k-3,211-k-5,211-k-7に入力されており、１ブロック左、３ブロック左、５ブロック左、７ブロック左の４種類の左シフト処理を行うことが可能となっている。左側に対応する32ビットレジスタ201が存在しない場合には、１番左に位置する32ビットレジスタ201-0の次が１番右の32ビットレジスタ201-15と見なして循環するように接続されている。
【００１４】
また、１番右に位置するセレクタ211-15は、１番左に位置する32ビットレジスタ201-0、左から３番目に位置する32ビットレジスタ201-2、左から５番目に位置する32ビットレジスタ201-4および左から７番目に位置する32ビットレジスタ201-6の各出力の他に、外部から入力されるメッセージが入力されており、これらうちいずれかを32ビットレジスタ201-15に入力するように構成されている。したがって、入力されるメッセージは、一番右の32ビットレジスタ201-15から32ビットずつ入力され、16回で512ビットのメッセージが入力できるように構成されている。
【００１５】
メッセージ処理部22は、１番左の32ビットレジスタ201-0、左から２番目の32ビットレジスタ201-1、左から６番目の32ビットレジスタ201-5からの出力を選択的に出力するセレクタ221で構成されている。
図９に示すように、ハッシュ処理部３はハッシュ値保持部31、加算処理部32、中間値保持部33およびハッシュ演算部35で構成される。
ハッシュ値保持部31は、初期値40と加算処理部32からの出力とを選択的に出力する４個のセレクタ301A〜301Dと、セレクタ301を介して入力されるデータを保持する４個の32ビットレジスタ302A〜302Dとを備えている。初期値40は、たとえばROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ32ビットの初期値40A〜40Dがセレクタ301A〜301Dに入力される。最初の初期値セットの際には、セレクタ301A〜301Dがそれぞれ初期値40A〜40Dを選択して32ビットレジスタ302A〜302Dに初期値がセットされる。その後の演算処理においては、セレクタ301A〜301Dは、加算処理部32からの出力を選択して32ビットレジスタ302A〜302Dにその値をセットする。
【００１６】
加算処理部32は、ハッシュ値保持部31からの出力と中間値保持33からの出力とを32ビット毎に加算処理する４個の加算回路311A〜311Dを備えている。
中間値保持部33は、４個の32ビットレジスタ322A〜322Dと、各32ビットレジスタ322A〜322Dに対応するセレクタ321A〜321Dとを備えている。
セレクタ321Aは、ハッシュ値保持部31の１番左に位置する32ビットレジスタ302Aの出力と中間値保持部33の１番右に位置する32ビットレジスタ322Dの出力を選択的に32ビットレジスタ322Aに入力する。セレクタ321Bは、ハッシュ演算部35の出力とハッシュ値保持部31の左から２番目に位置する32ビットレジスタ302Bの出力とを選択的に32ビットレジスタ322Bに入力する。セレクタ321Cは、左に隣接する32ビットレジスタ322Bの出力とハッシュ値保持部31の左から３番目に位置する32ビットレジスタ302Cの出力とを選択的に32ビットレジスタ322Cに入力する。セレクタ321Dは、左に隣接する32ビットレジスタ322Cの出力とハッシュ値保持部31の１番右に位置する32ビットレジスタ302Dの出力とを選択的に32ビットレジスタ322Dに入力する。
【００１７】
中間値保持部33の一番左に位置する32ビットレジスタ322Aの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の一番左に位置する加算回路311Aに入力される。中間値保持部33の左から２番目に位置する32ビットレジスタ322Bの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から２番目に位置する加算回路311Bおよび中間値保持部33の左から３番目に位置するセレクタ321Cに入力される。中間値保持部33の左から３番目に位置する32ビットレジスタ322Cの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から３番目に位置する加算回路311Cおよび中間値保持部33の１番右に位置するセレクタ321Dに入力される。中間値保持部33の１番右に位置する32ビットレジスタ322Dの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の１番右に位置する加算回路311Dおよび中間値保持部33の１番左に位置するセレクタ321Aに入力される。
【００１８】
ハッシュ演算部35は、中間値保持部33の左から２番目に位置する32ビットレジスタ322B、左から３番目に位置する32ビットレジスタ322C、１番右に位置する32ビットレジスタ322Dの各出力が入力され４種類の非線形関数処理を実行可能な非線形関数部341と、非線形関数部341の出力と中間値保持33の１番左の32ビットレジスタ322Aの出力とを加算処理する加算回路331と、加算回路331の出力とメッセージ部２から出力されるメッセージデータとを加算処理する加算回路332と、加算回路332の出力と定数テーブル334に予め用意されている定数Ｔのうちから選択された定数とを加算処理する加算回路333と、加算回路333の出力を定数ｓに基づくビットローテーション量でローテートシフトするローテーション回路335と、ローテーション回路335の出力と中間値保持部33の左から２番目に位置する32ビットレジスタ322Bの出力とを加算処理する加算回路336とを備えている。加算回路336の出力は、中間値保持部33の左から２番目のセレクタ321Bに入力される。
【００１９】
非線形関数部341は、４種類の非線形関数処理のうち１つを選択して処理できるように４つの非線形関数回路が構成されている。各非線形関数回路は、３つの入力を左からＸ，Ｙ，Ｚとした場合に次のような非線形関数を処理する構成となっている。
Ｆ＝（Ｘ＆Ｙ）｜（（〜Ｘ）＆Ｚ）    ・・・（M1関数）
Ｇ＝（Ｘ＆Ｚ）｜（Ｙ＆（〜Ｚ））    ・・・（M2関数）
Ｈ＝Ｘ＾Ｙ＾Ｚ                      ・・・（M3関数）
Ｉ＝Ｙ＾（Ｘ｜（〜Ｚ））            ・・・（M4関数）
ただし、”＆”は論理積、”｜”は論理和、”〜”は反転、”＾”は排他的論理和を示す。
【００２０】
定数テーブル334は、ROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納されている定数Ｔのテーブルであり、64個の32ビット定数のテーブルを構成している。
また、ローテーション部335では、ビットローテーション量を決定するための16種類の定数から選択される定数ｓが供給され、この定数ｓに基づいてデータのローテートシフト処理を実行する。
〈SHA-1ハードウェア実装モデル〉
SHA-1をハードウェア実装した場合の具体的な回路構成を図１０に示す。
【００２１】
図１０に示すように、メッセージ部２はメッセージ保持部21とメッセージ処理部22で構成される。
メッセージ保持部21は、16個の32ビットレジスタ202-0〜202-15と、入力されるメッセージとメッセージ処理部22の出力とを選択的に１番右に位置する32ビットレジスタ202-15に入力するセレクタ212とを備えている。各32ビットレジスタ202-kの出力はそれぞれ左に隣接する32ビットレジスタ202-k-1に入力されている。また、１番左に位置する32ビットレジスタ202-0、左から３番目に位置する32ビットレジスタ202-2、左から９番目に位置する32ビットレジスタ202-8、左から14番目に位置する32ビットレジスタ202-13の各出力はメッセージ処理部22に入力されており、さらに１番左に位置する32ビットレジスタの出力はハッシュ処理部３への出力となっている。
【００２２】
メッセージ処理部22は、１番左に位置する32ビットレジスタ202-0の出力と左から３番目に位置する32ビットレジスタ202-2の出力との排他的論理和を演算するXOR回路222と、XOR回路222の出力と左から９番目に位置する32ビットレジスタ202-8の出力との排他的論理和を演算するXOR回路223と、XOR回路223の出力と左から14番目に位置する32ビットレジスタ202-13の出力との排他的論理和を演算するXOR回路224と、XOR回路224の出力に対して１ビットローテーションシフトを行うローテーション部225とを備える。ローテーション部225の出力が、メッセージ保持部21のセレクタ212に入力される。
【００２３】
ハッシュ処理部３はハッシュ値保持部31、加算処理部32、中間値保持部33およびハッシュ演算部35で構成される。
ハッシュ値保持部31は、初期値41と加算処理部32からの出力とを選択的に出力する５個のセレクタ304A〜304Eと、セレクタ304を介して入力されるデータを保持する５個の32ビットレジスタ303A〜303Eとを備えている。初期値41は、たとえばROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ32ビットの初期値41A〜41Eがセレクタ304A〜304Eに入力される。最初の初期値セットの際には、セレクタ304A〜304Eがそれぞれ初期値41A〜41Eを選択して32ビットレジスタ303A〜303Eに初期値がセットされる。その後の演算処理においては、セレクタ304A〜304Eは、加算処理部32からの出力を選択して32ビットレジスタ303A〜303Eにその値をセットする。
【００２４】
加算処理部32は、ハッシュ値保持部31からの出力と中間値保持33からの出力とを32ビット毎に加算処理する５個の加算回路312A〜312Eを備えている。
中間値保持部33は、５個の32ビットレジスタ324A〜324Eと、各32ビットレジスタ324A〜324Eに対応するセレクタ323A〜323Eとを備えている。
セレクタ323Aは、ハッシュ値保持部31の１番左に位置する32ビットレジスタ303Aの出力とハッシュ演算部35の出力を選択的に32ビットレジスタ324Aに入力する。セレクタ323Bは、ハッシュ値保持部31の左から２番目の32ビットレジスタ303Bの出力と中間値保持部33の１番左に位置する32ビットレジスタ324Aの出力とを選択的に32ビットレジスタ324Bに入力する。セレクタ323Cは、左に隣接する32ビットレジスタ324Bの出力を30ビット左にローテーションシフトするローテーション部325の出力とハッシュ値保持部31の左から３番目に位置する32ビットレジスタ303Cの出力とを選択的に32ビットレジスタ324Cに入力する。セレクタ323Dは、左に隣接する32ビットレジスタ324Cの出力とハッシュ値保持部31の左から４番目に位置する32ビットレジスタ303Dの出力とを選択的に32ビットレジスタ324Dに入力する。セレクタ323Eは、左に隣接する32ビットレジスタ324Dの出力とハッシュ値保持部31の１番右に位置する32ビットレジスタ303Eの出力とを選択的に32ビットレジスタ324Eに入力する。
【００２５】
中間値保持部33の一番左に位置する32ビットレジスタ324Aの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の一番左に位置する加算回路312Aおよび右に隣接するセレクタ323Bに入力される。中間値保持部33の左から２番目に位置する32ビットレジスタ324Bの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から２番目に位置する加算回路312Bおよびローテーション部325に入力される。中間値保持部33の左から３番目に位置する32ビットレジスタ324Cの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から３番目に位置する加算回路312Cおよび中間値保持部33の左から４番目に位置するセレクタ323Dに入力される。中間値保持部33の左から４番目に位置する32ビットレジスタ324Dの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から４番目に位置する加算回路312Dおよび中間値保持部33の１番右に位置するセレクタ323Eに入力される。中間値保持部33の１番右に位置する32ビットレジスタ324Eの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の１番右に位置する加算回路312Eに入力される。
【００２６】
ハッシュ演算部35は、中間値保持部33の左から２番目に位置する32ビットレジスタ324B、左から３番目に位置する32ビットレジスタ324C、左から４番目に位置する32ビットレジスタ324Dの各出力が入力され３種類の非線形関数処理を実行可能な非線形関数部342と、非線形関数部342の出力と中間値保持33の１番右の32ビットレジスタ324Eの出力とを加算処理する加算回路351と、中間値保持部３３の１番左に位置する32ビットレジスタ324Aの出力を５ビット左にローテーションシフトするローテーション部356の出力と加算回路351の出力とを加算処理する加算回路352と、加算回路352の出力とメッセージ部２からのメッセージデータとを加算処理する加算回路353と、加算回路353の出力と定数テーブル355に予め用意されている定数Ｋのうちから選択された定数とを加算処理する加算回路354とを備えている。加算回路354の出力は、中間値保持部33の１番左のセレクタ323Aに入力される。
【００２７】
非線形関数部342において実行される関数ｆtは、ループ回数ｔの値に応じて３種類の非線形関数処理のうち１つを選択して処理できるように３つの非線形関数回路が構成されている。各非線形関数回路は、３つの入力を左からＸ，Ｙ，Ｚとした場合に次のような非線形関数を処理する構成となっている。
ｆ0-19＝（Ｘ＆Ｙ）｜（（〜Ｘ）＆Ｚ）    ・・・（S1関数）
ｆ20-39,60-79＝Ｘ＾Ｙ＾Ｚ                  ・・・（S2関数）
ｆ40-59＝（Ｘ＆Ｙ）｜（Ｚ＆Ｘ）｜（Ｙ＆Ｚ）・・・（S3関数）
ただし、”＆”は論理積、”｜”は論理和、”〜”は反転、”＾”は排他的論理和を示す。
【００２８】
定数テーブル355は、ROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納されている定数Ｋのテーブルであり、４個の32ビット定数のテーブルを構成している。
〈MD5とSHA-1のハードウェア共用化〉
本発明では、前述したMD5をハードウェア実装した場合の回路構成とSHA-1をハードウェア実装した場合の回路構成のうち、可能な限り共用化を行って回路規模の縮小を図る。
【００２９】
たとえば、メッセージ保持部21内の32ビットレジスタ201-0〜201-15と、32ビットレジスタ202-0〜202-15とを共用化することが考えられる。このことにより、図１に示すように、メッセージ部２は、共用化されたメッセージ保持部21と、MD5用メッセージ処理部23と、SHA-1用メッセージ処理部24と、MD5用メッセージ処理部23の出力およびSHA-1用メッセージ処理部24の出力を選択的にメッセージ保持部21にフィードバックするセレクタ25とで構成することができる。
また、ハッシュ値保持部31、加算処理部32、中間値処理33の回路構成は、MD5とSHA-1とにおいて類似する点が多く、共用化を図ることが容易であると考えられる。さらに、MD5における非線形関数部341のM1関数およびM3関数が、SHA-1における非線形関数部342のS1関数およびS2関数とそれぞれ同一の関数処理であり、これらを共用化することが考えられる。このことから、図２に示すように、ハッシュ処理部３は、共用化されたハッシュ値保持部31、加算処理部32、中間値保持部33および非線形関数部36と、MD5用ハッシュ演算部37と、SHA-1用ハッシュ演算部38と、MD5用ハッシュ演算部37の出力およびSHA-1用ハッシュ演算部38の出力を選択的に中間値保持部33にフィードバックするセレクタ39とで構成することができる。
【００３０】
〔MD5とSHA-1のハードウェア実装〕
上述したような観点に基づいて、本発明の１実施形態が採用されるハッシュ関数処理回路を図３および図４に基づいて説明する。
メッセージ部２は、図３に示すように、メッセージ保持部21と、MD5用メッセージ処理部23と、SHA-1用メッセージ処理部24とを備えている。
メッセージ保持部21は、図８に示すMD5のハードウェア実装時のメッセージ保持部21とほぼ同様の構成となっており、16個の32ビットレジスタ203-0〜203-15と、各32ビットレジスタ203について１個右、３個右、５個右、７個右の32ビットレジスタからの出力を選択的に入力する16個のセレクタ213-0〜213-15とを備えている。
【００３１】
図３下部に示すように、１つの32ビットレジスタ203-kの出力は、１個左の32ビットレジスタ203-k-1、３個左の32ビットレジスタ203-k-3、５個左の32ビットレジスタ203-k-5、７個左の32ビットレジスタ203-k-7にそれぞれ対応するセレクタ213-k-1,213-k-3,213-k-5,213-k-7に入力されており、１ブロック左、３ブロック左、５ブロック左、７ブロック左の４種類の左シフト処理を行うことが可能となっている。入力されるメッセージは、一番右の32ビットレジスタ203-15から32ビットずつ入力され、16回で512ビットのメッセージが入力できるように構成されている。
【００３２】
MD5用メッセージ処理部23は、１番左の32ビットレジスタ203-0、左から２番目の32ビットレジスタ203-1、左から６番目の32ビットレジスタ203-5からの出力を選択的に出力するセレクタ231で構成されている。
SHA-1用メッセージ処理部24は、１番左に位置する32ビットレジスタ203-0の出力と左から３番目に位置する32ビットレジスタ203-2の出力との排他的論理和を演算するXOR回路241と、XOR回路241の出力と左から９番目に位置する32ビットレジスタ203-8の出力との排他的論理和を演算するXOR回路242と、XOR回路242の出力と左から14番目に位置する32ビットレジスタ203-13の出力との排他的論理和を演算するXOR回路243と、XOR回路243の出力に対して１ビットローテーションシフトを行うローテーション部244とを備える。
【００３３】
さらに、１番左に位置する32ビットレジスタ203-0の出力とローテーション部244の出力を選択的に１番右に位置するセレクタ213-15に入力するセレクタ245が設けられている。このセレクタ245は、MD5処理を実行する際に32ビットレジスタ203-0の出力をセレクタ213-15に入力し、SHA-1処理を実行する際にローテーション部244の出力をセレクタ213-15に入力するように構成される。
MD5用メッセージ処理部23による処理を実行した後、セレクタ231からの出力がMD5用メッセージデータM-outとなる。また、SHA-1用メッセージ処理部24による処理を実行した後、１番左に位置する32ビットレジスタ203-0からの出力がSHA-1用メッセージデータW-outとなる。
【００３４】
図４に示すように、ハッシュ処理部３はハッシュ値保持部31、加算処理部32、中間値保持部33およびハッシュ演算部37+38で構成される。
ハッシュ値保持部31は、初期値42と加算処理部32からの出力とを選択的に出力する５個のセレクタ306A〜306Eと、セレクタ306を介して入力されるデータを保持する５個の32ビットレジスタ305A〜305Eとを備えている。初期値42は、たとえばROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ32ビットの初期値42A〜42Eがセレクタ306A〜306Eに入力される。最初の初期値セットの際には、セレクタ306A〜306Eがそれぞれ初期値42A〜42Eを選択して32ビットレジスタ305A〜305Eに初期値がセットされる。その後の演算処理においては、セレクタ306A〜306Eは、加算処理部32からの出力を選択して32ビットレジスタ305A〜305Eにその値をセットする。
【００３５】
加算処理部32は、ハッシュ値保持部31からの出力と中間値保持33からの出力とを32ビット毎に加算処理する５個の加算回路313A〜313Eを備えている。
中間値保持部33は、５個の32ビットレジスタ326A〜326Eと、各32ビットレジスタ326A〜326Eに対応するセレクタ325A〜325Eとを備えている。
セレクタ325Aは、ハッシュ値保持部31の１番左に位置する32ビットレジスタ305Aの出力とハッシュ演算部37+38からの出力を選択的に32ビットレジスタ326Aに入力する。セレクタ325Bは、ハッシュ値保持部31の左から２番目の32ビットレジスタ305Bの出力とハッシュ演算部37+38からの出力とを選択的に32ビットレジスタ326Bに入力する。セレクタ325Cは、ハッシュ値保持部31の左から３番目に位置する32ビットレジスタ305Cの出力とハッシュ演算部37+38からの出力とを選択的に32ビットレジスタ326Cに入力する。セレクタ325Dは、左に隣接する32ビットレジスタ326Cの出力とハッシュ値保持部31の左から４番目に位置する32ビットレジスタ305Dの出力とを選択的に32ビットレジスタ326Dに入力する。セレクタ325Eは、左に隣接する32ビットレジスタ326Dの出力とハッシュ値保持部31の１番右に位置する32ビットレジスタ305Eの出力とを選択的に32ビットレジスタ326Eに入力する。
【００３６】
中間値保持部33の一番左に位置する32ビットレジスタ326Aの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の一番左に位置する加算回路313Aに入力される。中間値保持部33の左から２番目に位置する32ビットレジスタ326Bの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の左から２番目に位置する加算回路313Bに入力される。中間値保持部33の左から３番目に位置する32ビットレジスタ326Cの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の左から３番目に位置する加算回路313Cおよび中間値保持部33の左から４番目に位置するセレクタ325Dに入力される。中間値保持部33の左から４番目に位置する32ビットレジスタ326Dの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の左から４番目に位置する加算回路313Dおよび中間値保持部33の１番右に位置するセレクタ325Eに入力される。中間値保持部33の１番右に位置する32ビットレジスタ326Eの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の１番右に位置する加算回路313Eに入力される。
【００３７】
ハッシュ演算部37+38のうちMD5用ハッシュ演算部37は、中間値保持部33の左から２番目に位置する32ビットレジスタ326B、左から３番目に位置する32ビットレジスタ326C、左から４番目に位置する32ビットレジスタ326Dの各出力が入力され５種類の非線形関数処理を実行可能な非線形関数部343と、非線形関数部343の出力と中間値保持33の１番左の32ビットレジスタ326Aの出力とを加算処理する加算回路371（Madd1）と、加算回路371の出力とメッセージ部２から出力されるMD5用メッセージデータM-outとを加算処理する加算回路372（Madd2）と、加算回路372の出力と定数テーブル375に予め用意されている定数Ｔのうちから選択された定数とを加算処理する加算回路373（Madd3）と、加算回路373の出力を定数ｓに基づくビットローテーション量でローテートシフトするローテーション回路374と、ローテーション回路374の出力と中間値保持部33の左から２番目に位置する32ビットレジスタ326Bの出力とを加算処理する加算回路376（Madd4）とを備えている。
【００３８】
また、ハッシュ演算部37+38のうちSHA-1用ハッシュ演算部38は、中間値保持部33の左から２番目に位置する32ビットレジスタ326B、左から３番目に位置する32ビットレジスタ326C、左から４番目に位置する32ビットレジスタ326Dの各出力が入力され５種類の非線形関数処理を実行可能な非線形関数部343と、非線形関数部343の出力と中間値保持33の１番右の32ビットレジスタ326Eの出力とを加算処理する加算回路381（Sadd1）と、中間値保持部３３の１番左に位置する32ビットレジスタ326Aの出力を５ビット左にローテーションシフトするローテーション部386の出力と加算回路381の出力とを加算処理する加算回路382（Sadd2）と、加算回路382の出力とメッセージ部２からのSHA-1用メッセージデータW-outとを加算処理する加算回路383（Sadd3）と、加算回路383の出力と定数テーブル385に予め用意されている定数Ｋのうちから選択された定数とを加算処理する加算回路384（Sadd4）とを備えている。
【００３９】
さらに、ハッシュ演算部37+38には、中間値保持部33の１番左に位置する32ビットレジスタ326Aの出力と加算回路376（Madd4）の出力を選択的に中間値保持部33の左から２番目のセレクタ325Bに入力するセレクタ391（MSsel1）と、中間値保持部33の左から２番目に位置する32ビットレジスタ326Bの出力とこの出力を30ビット左にローテーションシフトするローテーション部387の出力とを選択的に中間値保持部33の左から３番目に位置するセレクタ325Cに入力するセレクタ392（MSsel2）と、中間保持部33の左から４番目に位置する32ビットレジスタ326Dの出力と加算回路384（Sadd4）の出力とを選択的に中間値保持部33の１番左に位置するセレクタ325Aに入力するセレクタ393（MSsel3）とを備えている。
【００４０】
非線形関数部343は、５種類の非線形関数処理のうち１つを選択して処理できるように５つの非線形関数回路が構成されている。各非線形関数回路は、３つの入力を左からＸ，Ｙ，Ｚとした場合に次のような非線形関数を処理する構成となっている。
Ｆ＝ｆ0-19＝（Ｘ＆Ｙ）｜（（〜Ｘ）＆Ｚ）        ・・・（M1:S1関数）
Ｇ＝（Ｘ＆Ｚ）｜（Ｙ＆（〜Ｚ））              ・・・（M2関数）
Ｈ＝ｆ20-39,60-79＝Ｘ＾Ｙ＾Ｚ                      ・・・（M3:S2関数）
Ｉ＝Ｙ＾（Ｘ｜（〜Ｚ））                      ・・・（M4関数）
Ｊ＝ｆ40-59＝  （Ｘ＆Ｙ）｜（Ｚ＆Ｘ）｜（Ｙ＆Ｚ）・・・（S3関数）
ただし、”＆”は論理積、”｜”は論理和、”〜”は反転、”＾”は排他的論理和を示す。
【００４１】
〈MD5処理時の初期化シーケンス〉
前述した回路構成においてMD5関数処理を実行する際の初期化シーケンスを表１に示す。
【００４２】
【表１】
0003921424.tif 000002
表１における各セレクタの対応は、sel-M（0-14）：メッセージ保持部21のセレクタ203-0〜203-14、sel-M（15）：メッセージ保持部21のセレクタ203-15、sel-M（16）：MD5用メッセージ処理部23のセレクタ231、sel（A-E）：ハッシュ値保持部31のセレクタ306A-306E、sel（a-e）：中間値保持部33のセレクタ325A-325E、MSsel（0）：メッセージ処理部24のセレクタ245、MSsel(1-3)：ハッシュ演算部37+38のセレクタ391-393である。また、セレクタ位置が任意である場合には、”＊”として記述する。
【００４３】
第１サイクルでは、ハッシュ値保持部31のセレクタ306A〜306Eを初期値42側（i）とすることにより、ハッシュ値保持部31の32ビットレジスタ305A〜305DにMD5用初期値42A〜42Dがセットされる。第２サイクルでは、中間値保持部33のセレクタ325A〜325Eをハッシュ値保持部31側（i）とすることにより、中間値保持部33の32ビットレジスタ326A〜326DにMD5用初期値42A〜42Dがセットされる。
〈SHA-1処理時の初期化シーケンス〉
前述した回路構成においてSHA-1関数処理を実行する際の初期化シーケンスを表２に示す。
【００４４】
【表２】
0003921424.tif 000003
この場合も、MD5処理時と同様にして２サイクルで初期化処理を完了する。
〈メッセージ入力シーケンス〉
メッセージ部２へのメッセージ入力は、MD5処理およびSHA-1処理のいずれの場合も共通のシーケンスで行うことができ、これを表３に示す。
【００４５】
【表３】
0003921424.tif 000004
ここでは、メッセージ保持部21のセレクタ213-0〜213-15をそれぞれ隣接する32ビットレジスタ203の出力を選択するようにして、16サイクルで512ビットのメッセージ入力を完了する。
〈MD5処理シーケンス〉
MD5処理を実行する際のシーケンスを表４Ａ、表４Ｂに示す。
【００４６】
【表４Ａ】
0003921424.tif 000005
【００４７】
【表４Ｂ】
0003921424.tif 000006
ここでは、第１サイクル〜第16サイクルにおいてＦ関数処理（M1関数）を行い、第17サイクル〜第32サイクルにおいてＧ関数処理（M2関数）を行い、第33サイクル〜第48サイクルにおいてＨ関数処理（M3関数）を行い、第49サイクル〜第64サイクルでＩ関数処理（M4関数）を行い、第65サイクルおよび第66サイクルで出力処理を行う。このようにして、66サイクルでMD5処理を完了することができる。
【００４８】
〈SHA-1処理シーケンス〉
SHA-1処理を実行する際のシーケンスを表５に示す。
【００４９】
【表５】
0003921424.tif 000007
ここでは、第１サイクル〜第20サイクルにおいてＦ関数処理（S1関数）を行い、第21サイクル〜第40サイクルにおいてＨ関数処理（S2関数）を行い、第41サイクル〜第60サイクルにおいてＪ関数処理（S3関数）を行い、第61サイクル〜第80サイクルにおいてＨ関数処理（S2関数）を行い、第81サイクルおよび第82サイクルにおいて出力処理を行う。このようにして、82サイクルでSHA-1処理を完了することができる。
【００５０】
〈処理手順〉
MD5処理を実行する場合には、まず、MD5用の初期化処理を実行し、MD5用初期値を中間値保持部33の32ビットレジスタ326A〜326Dにセットする。さらに、メッセージを512ビット毎に分割し、分割された512ビットのメッセージを32ビットずつ16回繰り返すことでメッセージ保持部21の32ビットレジスタ203-0〜203-15にセットする。この後、前述したようなMD5処理を実行してハッシュ値保持部31の32ビットレジスタ305A〜305Dに格納された実行結果を出力する。さらに次の512ビットのメッセージをメッセージ部２に入力し、同様にしてMD5処理を実行し処理結果をハッシュ保持部31を介して出力することを繰り返す。
【００５１】
SHA-1処理を実行する場合も同様であって、まず、SHA-1用の初期化処理を実行し、SHA-1用初期値を中間値保持部33の32ビットレジスタ326A〜326Eにセットする。さらに、メッセージを512ビット毎に分割し、分割された512ビットのメッセージを32ビットずつ16回繰り返すことでメッセージ保持部21の32ビットレジスタ203-0〜203-15にセットする。この後、前述したようなSHA-1処理を実行してハッシュ値保持部31の32ビットレジスタ305A〜305Eに格納された実行結果を出力する。さらに次の512ビットのメッセージをメッセージ部２に入力し、同様にしてSHA-1処理を実行し処理結果をハッシュ保持部31を介して出力することを繰り返す。
【００５２】
〔他のハッシュ関数回路への適用〕
MD5とSHA-1はともMD4をベースとするハッシュ関数であり、共通する処理回路が多く含まれている。したがって、前述の実施形態のような構成とすることで、MD5とSHA-1とを個別に実装した場合に比して、回路規模を75％程度に削減することが可能となる。
MD4をベースとするハッシュ関数として、MD5やSHA-1以外に、RIPEMDやFIPS180-2（SHA256,SHA384,SHA512）などが存在し、これらについても同様の手法で回路の共用化を行い、同時に実装して回路規模を削減することとが可能となる。
【００５３】
前述した実施形態では、MD5とSHA-1の２つのハッシュ関数処理回路を同時に実装する場合について説明したが、３つ以上ハッシュ関数処理回路を同時に実装する場合についても同様の手法を用いることが可能である。たとえば、ｎ個のハッシュ関数を同時実装する場合には、回路規模は1+(1/3)(n-1)〜1+(1/2)(n-1)程度にすることができ、同時に実装するハッシュ関数の種類が多いほど回路規模の削減率は大きくなる。
【００５４】
【発明の効果】
本発明によれば、複数のハッシュ関数を同時に実装したハッシュ関数処理回路の回路規模を大幅に縮小することが可能となる。
【図面の簡単な説明】
【図１】本発明の１実施形態の概略構成を示す機能ブロック図。
【図２】本発明の１実施形態の概略構成を示す機能ブロック図。
【図３】メッセージ部の回路図。
【図４】ハッシュ処理部の回路図。
【図５】ハッシュ関数処理回路の全体構成を示す概略構成図。
【図６】メッセージ部の概略構成図。
【図７】ハッシュ処理部の概略構成図。
【図８】従来例によるMD5処理のためのメッセージ部の回路図。
【図９】従来例によるMD5処理のためのハッシュ処理部の回路図。
【図１０】従来例によるSHA-1処理のための回路図。
【図１】
0003921424.tif 000008
【図２】
0003921424.tif 000009
【図３】
0003921424.tif 000010
【図４】
0003921424.tif 000011
【図５】
0003921424.tif 000012
【図６】
0003921424.tif 000013
【図７】
0003921424.tif 000014
【図８】
0003921424.tif 000015
【図９】
0003921424.tif 000016
【図１０】
0003921424.tif 000017