JP3921424B2 - ハッシュ関数処理回路 - Google Patents
ハッシュ関数処理回路 Download PDFInfo
- Publication number
- JP3921424B2 JP3921424B2 JP2002207932A JP2002207932A JP3921424B2 JP 3921424 B2 JP3921424 B2 JP 3921424B2 JP 2002207932 A JP2002207932 A JP 2002207932A JP 2002207932 A JP2002207932 A JP 2002207932A JP 3921424 B2 JP3921424 B2 JP 3921424B2
- Authority
- JP
- Japan
- Prior art keywords
- hash
- unit
- message
- output
- holding unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
本発明は、暗号装置に用いられるハッシュ関数処理回路に関する。
【0002】
【従来の技術】
デジタル署名を行う際の公開鍵暗号の計算量を少なくするために可変長のデータを圧縮して固定長のデータに変換するハッシュ関数が用いられる。このハッシュ関数は1方向性の関数処理であり、変換された結果であるメッセージダイジェストは逆変換が極めて困難である必要がある。
現在広く使われているハッシュ関数として、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で提案したもので、後にいくつかの問題点が指摘された。
【0003】
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で定めた標準ハッシュ関数である。
【0004】
MD5はメッセージブロック長が512-bit、ダイジェスト長(ハッシュ長)が128-bitのハッシュ関数である。MD5をハードウェア実装した従来例としては、USP5664016があげられる。この従来例におけるMD5の構成は、RFC1322の仕様をそのままハードウェア化したものである。
一方SHA-1は、メッセージブロック長が512-bit、ハッシュ長が160-bitのハッシュ関数である。SHA-1をハードウェア実装した従来例としては、USP5623545があげられる。この従来例におけるSHA-1の構成は、FIPS180-1の仕様をそのままハードウェア化したものである。
【0005】
【発明が解決しようとする課題】
MD5とSHA-1のどちらのハッシュ関数も広く使用されているため、一般的なライブラリやハードウェアでは両方の関数を用意している場合が多い。そのため、特にハードウェアでは、2種類のハッシュ関数処理回路を実装する必要があり、回路規模が大きくなるという問題がある。
本発明は、複数のハッシュ関数をハードウェア実装するに当り、可能な限り回路の共通化を行い、より小さな回路規模のハッシュ関数処理回路を構成することを目的とする。
【0006】
【課題を解決するための手段】
本発明に係るハッシュ関数処理回路は、第1ハッシュ関数処理であるMD5(Message Digest 5)と第2ハッシュ関数処理であるSHA-1(Secure Hash Algorithm 1)とを処理可能なハッシュ関数処理回路であって、16個の32ビットレジスタを備え、各32ビットレジスタの出力を1ブロック左、3ブロック左、5ブロック左、7ブロック左の4種類の左シフト処理することが可能なように16個のセレクタが各32ビットレジスタに接続され、入力されるメッセージを保持するためのメッセージ保持部と、メッセージ保持部から第1ハッシュ関数処理に必要となるメッセージデータを出力するためにメッセージ保持部の32ビットレジスタの出力を選択的に出力するセレクタで構成される第1メッセージ処理部と、メッセージ保持部から第2ハッシュ関数処理に必要となるメッセージデータを出力するためにメッセージ保持部の32ビットレジスタの出力のうち所定のものが入力されそれぞれ直列接続されて排他的論理和を演算する複数のXOR回路と最後のXOR回路の出力に対して1ビットローテーションシフトを行うローテーション部とを備える第2メッセージ処理部と、第1メッセージ処理部からのメッセージデータに基づいて第1ハッシュ関数処理を実行する第1ハッシュ演算部と、第2メッセージ処理部からのメッセージデータに基づいて第2ハッシュ関数処理を実行する第2ハッシュ演算部と、第1ハッシュ演算部において演算される第1演算値と第2ハッシュ演算部とにおいて演算される第2演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部とを備える。
【0007】
ここで、出力部を、セレクタを介して第1演算値および第2演算値のうちいずれか一方が選択的に入力される中間値保持部と、初期値および演算処理されたハッシュ値を保持するためのハッシュ値保持部と、中間値保持部に保持された中間値とハッシュ値保持部に保持された初期値または演算処理されたハッシュ値との加算処理を行い演算結果をハッシュ値保持部に出力する加算処理部とを備える構成とすることができる。
【0008】
さらに、ハッシュ値保持部は、第1ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタと、第2ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタを共用するレジスタ回路で構成することができる。
この場合、ハッシュ値保持部は、第1ハッシュ関数処理における初期値を保持するために4個の32ビットレジスタと、第2ハッシュ関数処理における初期値を保持するために5個の32ビットレジスタとを共用する5個の32ビットレジスタで構成することができる。
【0009】
また、第1ハッシュ演算部および第2ハッシュ演算部は、5種類の非線形回路とその非線形回路のうちから1つを選択する選択回路とを備える非線形処理部を共用し、第1ハッシュ演算部による演算処理を行う場合に、非線形処理部はMD5で用いられる4種類の非線形回路から1つを選択し、第2ハッシュ演算部による演算処理を行う場合に、非線形処理部はSHA-1で用いられる3種類の非線形回路から1つを選択するように構成できる。
さらに、メッセージ保持部は、512ビット分のメッセージを保持するためのレジスタ回路で構成することができる。
【0010】
【発明の実施の形態】
〔概要構成〕
MD5およびSHA-1のいずれの場合もハードウェア実装する際には、図5〜図7に示すような基本構成となる。
ハッシュ関数回路1は、いずれの場合もメッセージが入力されハッシュ関数処理のためのメッセージデータを出力するメッセージ部2と、メッセージ部2から供給されるメッセージデータに基づいてハッシュ関数処理を実行するハッシュ処理部3とから構成される。
【0011】
メッセージ部2は、入力されるメッセージを保持するメッセージ保持部21と、メッセージ保持部21に保持されたメッセージからハッシュ関数処理に必要となるメッセージデータを出力するメッセージ処理部22とを備えている。
ハッシュ処理部3は、メッセージ部2から供給されるメッセージデータに基づいてハッシュ演算を実行するハッシュ演算部35と、初期値および演算処理されたハッシュ値を保持するハッシュ保持部31、ハッシュ演算部35における演算処理された中間値を保持する中間値保持部33、中間値保持部33で保持しているデータを非線形関数処理してハッシュ演算部35に入力する非線形関数部34、中間値保持部33で保持しているデータとハッシュ値保持部31で保持しているデータとの加算処理を行う加算処理部32などを備えている。
【0012】
〈MD5ハードウェア実装モデル〉
MD5をハードウェア実装した場合の具体的な回路構成を図8および図9に示す。
図8に示すように、メッセージ部2はメッセージ保持部21とメッセージ処理部22で構成される。
メッセージ保持部21は、16個の32ビットレジスタ201-0〜201-15と、各32ビットレジスタ201について1個右、3個右、5個右、7個右の32ビットレジスタからの出力を選択的に入力する16個のセレクタ211-0〜211-15とを備えている。
【0013】
図8下部に示すように、1つの32ビットレジスタ201-kの出力は、1個左の32ビットレジスタ201-k-1、3個左の32ビットレジスタ201-k-3、5個左の32ビットレジスタ201-k-5、7個左の32ビットレジスタ201-k-7にそれぞれ対応するセレクタ211-k-1,211-k-3,211-k-5,211-k-7に入力されており、1ブロック左、3ブロック左、5ブロック左、7ブロック左の4種類の左シフト処理を行うことが可能となっている。左側に対応する32ビットレジスタ201が存在しない場合には、1番左に位置する32ビットレジスタ201-0の次が1番右の32ビットレジスタ201-15と見なして循環するように接続されている。
【0014】
また、1番右に位置するセレクタ211-15は、1番左に位置する32ビットレジスタ201-0、左から3番目に位置する32ビットレジスタ201-2、左から5番目に位置する32ビットレジスタ201-4および左から7番目に位置する32ビットレジスタ201-6の各出力の他に、外部から入力されるメッセージが入力されており、これらうちいずれかを32ビットレジスタ201-15に入力するように構成されている。したがって、入力されるメッセージは、一番右の32ビットレジスタ201-15から32ビットずつ入力され、16回で512ビットのメッセージが入力できるように構成されている。
【0015】
メッセージ処理部22は、1番左の32ビットレジスタ201-0、左から2番目の32ビットレジスタ201-1、左から6番目の32ビットレジスタ201-5からの出力を選択的に出力するセレクタ221で構成されている。
図9に示すように、ハッシュ処理部3はハッシュ値保持部31、加算処理部32、中間値保持部33およびハッシュ演算部35で構成される。
ハッシュ値保持部31は、初期値40と加算処理部32からの出力とを選択的に出力する4個のセレクタ301A〜301Dと、セレクタ301を介して入力されるデータを保持する4個の32ビットレジスタ302A〜302Dとを備えている。初期値40は、たとえばROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ32ビットの初期値40A〜40Dがセレクタ301A〜301Dに入力される。最初の初期値セットの際には、セレクタ301A〜301Dがそれぞれ初期値40A〜40Dを選択して32ビットレジスタ302A〜302Dに初期値がセットされる。その後の演算処理においては、セレクタ301A〜301Dは、加算処理部32からの出力を選択して32ビットレジスタ302A〜302Dにその値をセットする。
【0016】
加算処理部32は、ハッシュ値保持部31からの出力と中間値保持33からの出力とを32ビット毎に加算処理する4個の加算回路311A〜311Dを備えている。
中間値保持部33は、4個の32ビットレジスタ322A〜322Dと、各32ビットレジスタ322A〜322Dに対応するセレクタ321A〜321Dとを備えている。
セレクタ321Aは、ハッシュ値保持部31の1番左に位置する32ビットレジスタ302Aの出力と中間値保持部33の1番右に位置する32ビットレジスタ322Dの出力を選択的に32ビットレジスタ322Aに入力する。セレクタ321Bは、ハッシュ演算部35の出力とハッシュ値保持部31の左から2番目に位置する32ビットレジスタ302Bの出力とを選択的に32ビットレジスタ322Bに入力する。セレクタ321Cは、左に隣接する32ビットレジスタ322Bの出力とハッシュ値保持部31の左から3番目に位置する32ビットレジスタ302Cの出力とを選択的に32ビットレジスタ322Cに入力する。セレクタ321Dは、左に隣接する32ビットレジスタ322Cの出力とハッシュ値保持部31の1番右に位置する32ビットレジスタ302Dの出力とを選択的に32ビットレジスタ322Dに入力する。
【0017】
中間値保持部33の一番左に位置する32ビットレジスタ322Aの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の一番左に位置する加算回路311Aに入力される。中間値保持部33の左から2番目に位置する32ビットレジスタ322Bの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から2番目に位置する加算回路311Bおよび中間値保持部33の左から3番目に位置するセレクタ321Cに入力される。中間値保持部33の左から3番目に位置する32ビットレジスタ322Cの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から3番目に位置する加算回路311Cおよび中間値保持部33の1番右に位置するセレクタ321Dに入力される。中間値保持部33の1番右に位置する32ビットレジスタ322Dの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の1番右に位置する加算回路311Dおよび中間値保持部33の1番左に位置するセレクタ321Aに入力される。
【0018】
ハッシュ演算部35は、中間値保持部33の左から2番目に位置する32ビットレジスタ322B、左から3番目に位置する32ビットレジスタ322C、1番右に位置する32ビットレジスタ322Dの各出力が入力され4種類の非線形関数処理を実行可能な非線形関数部341と、非線形関数部341の出力と中間値保持33の1番左の32ビットレジスタ322Aの出力とを加算処理する加算回路331と、加算回路331の出力とメッセージ部2から出力されるメッセージデータとを加算処理する加算回路332と、加算回路332の出力と定数テーブル334に予め用意されている定数Tのうちから選択された定数とを加算処理する加算回路333と、加算回路333の出力を定数sに基づくビットローテーション量でローテートシフトするローテーション回路335と、ローテーション回路335の出力と中間値保持部33の左から2番目に位置する32ビットレジスタ322Bの出力とを加算処理する加算回路336とを備えている。加算回路336の出力は、中間値保持部33の左から2番目のセレクタ321Bに入力される。
【0019】
非線形関数部341は、4種類の非線形関数処理のうち1つを選択して処理できるように4つの非線形関数回路が構成されている。各非線形関数回路は、3つの入力を左からX,Y,Zとした場合に次のような非線形関数を処理する構成となっている。
F=(X&Y)|((〜X)&Z) ・・・(M1関数)
G=(X&Z)|(Y&(〜Z)) ・・・(M2関数)
H=X^Y^Z ・・・(M3関数)
I=Y^(X|(〜Z)) ・・・(M4関数)
ただし、”&”は論理積、”|”は論理和、”〜”は反転、”^”は排他的論理和を示す。
【0020】
定数テーブル334は、ROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納されている定数Tのテーブルであり、64個の32ビット定数のテーブルを構成している。
また、ローテーション部335では、ビットローテーション量を決定するための16種類の定数から選択される定数sが供給され、この定数sに基づいてデータのローテートシフト処理を実行する。
〈SHA-1ハードウェア実装モデル〉
SHA-1をハードウェア実装した場合の具体的な回路構成を図10に示す。
【0021】
図10に示すように、メッセージ部2はメッセージ保持部21とメッセージ処理部22で構成される。
メッセージ保持部21は、16個の32ビットレジスタ202-0〜202-15と、入力されるメッセージとメッセージ処理部22の出力とを選択的に1番右に位置する32ビットレジスタ202-15に入力するセレクタ212とを備えている。各32ビットレジスタ202-kの出力はそれぞれ左に隣接する32ビットレジスタ202-k-1に入力されている。また、1番左に位置する32ビットレジスタ202-0、左から3番目に位置する32ビットレジスタ202-2、左から9番目に位置する32ビットレジスタ202-8、左から14番目に位置する32ビットレジスタ202-13の各出力はメッセージ処理部22に入力されており、さらに1番左に位置する32ビットレジスタの出力はハッシュ処理部3への出力となっている。
【0022】
メッセージ処理部22は、1番左に位置する32ビットレジスタ202-0の出力と左から3番目に位置する32ビットレジスタ202-2の出力との排他的論理和を演算するXOR回路222と、XOR回路222の出力と左から9番目に位置する32ビットレジスタ202-8の出力との排他的論理和を演算するXOR回路223と、XOR回路223の出力と左から14番目に位置する32ビットレジスタ202-13の出力との排他的論理和を演算するXOR回路224と、XOR回路224の出力に対して1ビットローテーションシフトを行うローテーション部225とを備える。ローテーション部225の出力が、メッセージ保持部21のセレクタ212に入力される。
【0023】
ハッシュ処理部3はハッシュ値保持部31、加算処理部32、中間値保持部33およびハッシュ演算部35で構成される。
ハッシュ値保持部31は、初期値41と加算処理部32からの出力とを選択的に出力する5個のセレクタ304A〜304Eと、セレクタ304を介して入力されるデータを保持する5個の32ビットレジスタ303A〜303Eとを備えている。初期値41は、たとえばROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ32ビットの初期値41A〜41Eがセレクタ304A〜304Eに入力される。最初の初期値セットの際には、セレクタ304A〜304Eがそれぞれ初期値41A〜41Eを選択して32ビットレジスタ303A〜303Eに初期値がセットされる。その後の演算処理においては、セレクタ304A〜304Eは、加算処理部32からの出力を選択して32ビットレジスタ303A〜303Eにその値をセットする。
【0024】
加算処理部32は、ハッシュ値保持部31からの出力と中間値保持33からの出力とを32ビット毎に加算処理する5個の加算回路312A〜312Eを備えている。
中間値保持部33は、5個の32ビットレジスタ324A〜324Eと、各32ビットレジスタ324A〜324Eに対応するセレクタ323A〜323Eとを備えている。
セレクタ323Aは、ハッシュ値保持部31の1番左に位置する32ビットレジスタ303Aの出力とハッシュ演算部35の出力を選択的に32ビットレジスタ324Aに入力する。セレクタ323Bは、ハッシュ値保持部31の左から2番目の32ビットレジスタ303Bの出力と中間値保持部33の1番左に位置する32ビットレジスタ324Aの出力とを選択的に32ビットレジスタ324Bに入力する。セレクタ323Cは、左に隣接する32ビットレジスタ324Bの出力を30ビット左にローテーションシフトするローテーション部325の出力とハッシュ値保持部31の左から3番目に位置する32ビットレジスタ303Cの出力とを選択的に32ビットレジスタ324Cに入力する。セレクタ323Dは、左に隣接する32ビットレジスタ324Cの出力とハッシュ値保持部31の左から4番目に位置する32ビットレジスタ303Dの出力とを選択的に32ビットレジスタ324Dに入力する。セレクタ323Eは、左に隣接する32ビットレジスタ324Dの出力とハッシュ値保持部31の1番右に位置する32ビットレジスタ303Eの出力とを選択的に32ビットレジスタ324Eに入力する。
【0025】
中間値保持部33の一番左に位置する32ビットレジスタ324Aの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の一番左に位置する加算回路312Aおよび右に隣接するセレクタ323Bに入力される。中間値保持部33の左から2番目に位置する32ビットレジスタ324Bの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から2番目に位置する加算回路312Bおよびローテーション部325に入力される。中間値保持部33の左から3番目に位置する32ビットレジスタ324Cの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から3番目に位置する加算回路312Cおよび中間値保持部33の左から4番目に位置するセレクタ323Dに入力される。中間値保持部33の左から4番目に位置する32ビットレジスタ324Dの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の左から4番目に位置する加算回路312Dおよび中間値保持部33の1番右に位置するセレクタ323Eに入力される。中間値保持部33の1番右に位置する32ビットレジスタ324Eの出力は、ハッシュ演算部35に入力されるとともに加算処理部32の1番右に位置する加算回路312Eに入力される。
【0026】
ハッシュ演算部35は、中間値保持部33の左から2番目に位置する32ビットレジスタ324B、左から3番目に位置する32ビットレジスタ324C、左から4番目に位置する32ビットレジスタ324Dの各出力が入力され3種類の非線形関数処理を実行可能な非線形関数部342と、非線形関数部342の出力と中間値保持33の1番右の32ビットレジスタ324Eの出力とを加算処理する加算回路351と、中間値保持部33の1番左に位置する32ビットレジスタ324Aの出力を5ビット左にローテーションシフトするローテーション部356の出力と加算回路351の出力とを加算処理する加算回路352と、加算回路352の出力とメッセージ部2からのメッセージデータとを加算処理する加算回路353と、加算回路353の出力と定数テーブル355に予め用意されている定数Kのうちから選択された定数とを加算処理する加算回路354とを備えている。加算回路354の出力は、中間値保持部33の1番左のセレクタ323Aに入力される。
【0027】
非線形関数部342において実行される関数ftは、ループ回数tの値に応じて3種類の非線形関数処理のうち1つを選択して処理できるように3つの非線形関数回路が構成されている。各非線形関数回路は、3つの入力を左からX,Y,Zとした場合に次のような非線形関数を処理する構成となっている。
f0-19=(X&Y)|((〜X)&Z) ・・・(S1関数)
f20-39,60-79=X^Y^Z ・・・(S2関数)
f40-59=(X&Y)|(Z&X)|(Y&Z)・・・(S3関数)
ただし、”&”は論理積、”|”は論理和、”〜”は反転、”^”は排他的論理和を示す。
【0028】
定数テーブル355は、ROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納されている定数Kのテーブルであり、4個の32ビット定数のテーブルを構成している。
〈MD5とSHA-1のハードウェア共用化〉
本発明では、前述したMD5をハードウェア実装した場合の回路構成とSHA-1をハードウェア実装した場合の回路構成のうち、可能な限り共用化を行って回路規模の縮小を図る。
【0029】
たとえば、メッセージ保持部21内の32ビットレジスタ201-0〜201-15と、32ビットレジスタ202-0〜202-15とを共用化することが考えられる。このことにより、図1に示すように、メッセージ部2は、共用化されたメッセージ保持部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関数とそれぞれ同一の関数処理であり、これらを共用化することが考えられる。このことから、図2に示すように、ハッシュ処理部3は、共用化されたハッシュ値保持部31、加算処理部32、中間値保持部33および非線形関数部36と、MD5用ハッシュ演算部37と、SHA-1用ハッシュ演算部38と、MD5用ハッシュ演算部37の出力およびSHA-1用ハッシュ演算部38の出力を選択的に中間値保持部33にフィードバックするセレクタ39とで構成することができる。
【0030】
〔MD5とSHA-1のハードウェア実装〕
上述したような観点に基づいて、本発明の1実施形態が採用されるハッシュ関数処理回路を図3および図4に基づいて説明する。
メッセージ部2は、図3に示すように、メッセージ保持部21と、MD5用メッセージ処理部23と、SHA-1用メッセージ処理部24とを備えている。
メッセージ保持部21は、図8に示すMD5のハードウェア実装時のメッセージ保持部21とほぼ同様の構成となっており、16個の32ビットレジスタ203-0〜203-15と、各32ビットレジスタ203について1個右、3個右、5個右、7個右の32ビットレジスタからの出力を選択的に入力する16個のセレクタ213-0〜213-15とを備えている。
【0031】
図3下部に示すように、1つの32ビットレジスタ203-kの出力は、1個左の32ビットレジスタ203-k-1、3個左の32ビットレジスタ203-k-3、5個左の32ビットレジスタ203-k-5、7個左の32ビットレジスタ203-k-7にそれぞれ対応するセレクタ213-k-1,213-k-3,213-k-5,213-k-7に入力されており、1ブロック左、3ブロック左、5ブロック左、7ブロック左の4種類の左シフト処理を行うことが可能となっている。入力されるメッセージは、一番右の32ビットレジスタ203-15から32ビットずつ入力され、16回で512ビットのメッセージが入力できるように構成されている。
【0032】
MD5用メッセージ処理部23は、1番左の32ビットレジスタ203-0、左から2番目の32ビットレジスタ203-1、左から6番目の32ビットレジスタ203-5からの出力を選択的に出力するセレクタ231で構成されている。
SHA-1用メッセージ処理部24は、1番左に位置する32ビットレジスタ203-0の出力と左から3番目に位置する32ビットレジスタ203-2の出力との排他的論理和を演算するXOR回路241と、XOR回路241の出力と左から9番目に位置する32ビットレジスタ203-8の出力との排他的論理和を演算するXOR回路242と、XOR回路242の出力と左から14番目に位置する32ビットレジスタ203-13の出力との排他的論理和を演算するXOR回路243と、XOR回路243の出力に対して1ビットローテーションシフトを行うローテーション部244とを備える。
【0033】
さらに、1番左に位置する32ビットレジスタ203-0の出力とローテーション部244の出力を選択的に1番右に位置するセレクタ213-15に入力するセレクタ245が設けられている。このセレクタ245は、MD5処理を実行する際に32ビットレジスタ203-0の出力をセレクタ213-15に入力し、SHA-1処理を実行する際にローテーション部244の出力をセレクタ213-15に入力するように構成される。
MD5用メッセージ処理部23による処理を実行した後、セレクタ231からの出力がMD5用メッセージデータM-outとなる。また、SHA-1用メッセージ処理部24による処理を実行した後、1番左に位置する32ビットレジスタ203-0からの出力がSHA-1用メッセージデータW-outとなる。
【0034】
図4に示すように、ハッシュ処理部3はハッシュ値保持部31、加算処理部32、中間値保持部33およびハッシュ演算部37+38で構成される。
ハッシュ値保持部31は、初期値42と加算処理部32からの出力とを選択的に出力する5個のセレクタ306A〜306Eと、セレクタ306を介して入力されるデータを保持する5個の32ビットレジスタ305A〜305Eとを備えている。初期値42は、たとえばROMなどのメモリやハードディスクなどの記憶装置の所定領域に格納された初期値を用いることができ、それぞれ32ビットの初期値42A〜42Eがセレクタ306A〜306Eに入力される。最初の初期値セットの際には、セレクタ306A〜306Eがそれぞれ初期値42A〜42Eを選択して32ビットレジスタ305A〜305Eに初期値がセットされる。その後の演算処理においては、セレクタ306A〜306Eは、加算処理部32からの出力を選択して32ビットレジスタ305A〜305Eにその値をセットする。
【0035】
加算処理部32は、ハッシュ値保持部31からの出力と中間値保持33からの出力とを32ビット毎に加算処理する5個の加算回路313A〜313Eを備えている。
中間値保持部33は、5個の32ビットレジスタ326A〜326Eと、各32ビットレジスタ326A〜326Eに対応するセレクタ325A〜325Eとを備えている。
セレクタ325Aは、ハッシュ値保持部31の1番左に位置する32ビットレジスタ305Aの出力とハッシュ演算部37+38からの出力を選択的に32ビットレジスタ326Aに入力する。セレクタ325Bは、ハッシュ値保持部31の左から2番目の32ビットレジスタ305Bの出力とハッシュ演算部37+38からの出力とを選択的に32ビットレジスタ326Bに入力する。セレクタ325Cは、ハッシュ値保持部31の左から3番目に位置する32ビットレジスタ305Cの出力とハッシュ演算部37+38からの出力とを選択的に32ビットレジスタ326Cに入力する。セレクタ325Dは、左に隣接する32ビットレジスタ326Cの出力とハッシュ値保持部31の左から4番目に位置する32ビットレジスタ305Dの出力とを選択的に32ビットレジスタ326Dに入力する。セレクタ325Eは、左に隣接する32ビットレジスタ326Dの出力とハッシュ値保持部31の1番右に位置する32ビットレジスタ305Eの出力とを選択的に32ビットレジスタ326Eに入力する。
【0036】
中間値保持部33の一番左に位置する32ビットレジスタ326Aの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の一番左に位置する加算回路313Aに入力される。中間値保持部33の左から2番目に位置する32ビットレジスタ326Bの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の左から2番目に位置する加算回路313Bに入力される。中間値保持部33の左から3番目に位置する32ビットレジスタ326Cの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の左から3番目に位置する加算回路313Cおよび中間値保持部33の左から4番目に位置するセレクタ325Dに入力される。中間値保持部33の左から4番目に位置する32ビットレジスタ326Dの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の左から4番目に位置する加算回路313Dおよび中間値保持部33の1番右に位置するセレクタ325Eに入力される。中間値保持部33の1番右に位置する32ビットレジスタ326Eの出力は、ハッシュ演算部37+38に入力されるとともに加算処理部32の1番右に位置する加算回路313Eに入力される。
【0037】
ハッシュ演算部37+38のうちMD5用ハッシュ演算部37は、中間値保持部33の左から2番目に位置する32ビットレジスタ326B、左から3番目に位置する32ビットレジスタ326C、左から4番目に位置する32ビットレジスタ326Dの各出力が入力され5種類の非線形関数処理を実行可能な非線形関数部343と、非線形関数部343の出力と中間値保持33の1番左の32ビットレジスタ326Aの出力とを加算処理する加算回路371(Madd1)と、加算回路371の出力とメッセージ部2から出力されるMD5用メッセージデータM-outとを加算処理する加算回路372(Madd2)と、加算回路372の出力と定数テーブル375に予め用意されている定数Tのうちから選択された定数とを加算処理する加算回路373(Madd3)と、加算回路373の出力を定数sに基づくビットローテーション量でローテートシフトするローテーション回路374と、ローテーション回路374の出力と中間値保持部33の左から2番目に位置する32ビットレジスタ326Bの出力とを加算処理する加算回路376(Madd4)とを備えている。
【0038】
また、ハッシュ演算部37+38のうちSHA-1用ハッシュ演算部38は、中間値保持部33の左から2番目に位置する32ビットレジスタ326B、左から3番目に位置する32ビットレジスタ326C、左から4番目に位置する32ビットレジスタ326Dの各出力が入力され5種類の非線形関数処理を実行可能な非線形関数部343と、非線形関数部343の出力と中間値保持33の1番右の32ビットレジスタ326Eの出力とを加算処理する加算回路381(Sadd1)と、中間値保持部33の1番左に位置する32ビットレジスタ326Aの出力を5ビット左にローテーションシフトするローテーション部386の出力と加算回路381の出力とを加算処理する加算回路382(Sadd2)と、加算回路382の出力とメッセージ部2からのSHA-1用メッセージデータW-outとを加算処理する加算回路383(Sadd3)と、加算回路383の出力と定数テーブル385に予め用意されている定数Kのうちから選択された定数とを加算処理する加算回路384(Sadd4)とを備えている。
【0039】
さらに、ハッシュ演算部37+38には、中間値保持部33の1番左に位置する32ビットレジスタ326Aの出力と加算回路376(Madd4)の出力を選択的に中間値保持部33の左から2番目のセレクタ325Bに入力するセレクタ391(MSsel1)と、中間値保持部33の左から2番目に位置する32ビットレジスタ326Bの出力とこの出力を30ビット左にローテーションシフトするローテーション部387の出力とを選択的に中間値保持部33の左から3番目に位置するセレクタ325Cに入力するセレクタ392(MSsel2)と、中間保持部33の左から4番目に位置する32ビットレジスタ326Dの出力と加算回路384(Sadd4)の出力とを選択的に中間値保持部33の1番左に位置するセレクタ325Aに入力するセレクタ393(MSsel3)とを備えている。
【0040】
非線形関数部343は、5種類の非線形関数処理のうち1つを選択して処理できるように5つの非線形関数回路が構成されている。各非線形関数回路は、3つの入力を左からX,Y,Zとした場合に次のような非線形関数を処理する構成となっている。
F=f0-19=(X&Y)|((〜X)&Z) ・・・(M1:S1関数)
G=(X&Z)|(Y&(〜Z)) ・・・(M2関数)
H=f20-39,60-79=X^Y^Z ・・・(M3:S2関数)
I=Y^(X|(〜Z)) ・・・(M4関数)
J=f40-59= (X&Y)|(Z&X)|(Y&Z)・・・(S3関数)
ただし、”&”は論理積、”|”は論理和、”〜”は反転、”^”は排他的論理和を示す。
【0041】
〈MD5処理時の初期化シーケンス〉
前述した回路構成においてMD5関数処理を実行する際の初期化シーケンスを表1に示す。
【0042】
【表1】
表1における各セレクタの対応は、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である。また、セレクタ位置が任意である場合には、”*”として記述する。
【0043】
第1サイクルでは、ハッシュ値保持部31のセレクタ306A〜306Eを初期値42側(i)とすることにより、ハッシュ値保持部31の32ビットレジスタ305A〜305DにMD5用初期値42A〜42Dがセットされる。第2サイクルでは、中間値保持部33のセレクタ325A〜325Eをハッシュ値保持部31側(i)とすることにより、中間値保持部33の32ビットレジスタ326A〜326DにMD5用初期値42A〜42Dがセットされる。
〈SHA-1処理時の初期化シーケンス〉
前述した回路構成においてSHA-1関数処理を実行する際の初期化シーケンスを表2に示す。
【0044】
【表2】
この場合も、MD5処理時と同様にして2サイクルで初期化処理を完了する。
〈メッセージ入力シーケンス〉
メッセージ部2へのメッセージ入力は、MD5処理およびSHA-1処理のいずれの場合も共通のシーケンスで行うことができ、これを表3に示す。
【0045】
【表3】
ここでは、メッセージ保持部21のセレクタ213-0〜213-15をそれぞれ隣接する32ビットレジスタ203の出力を選択するようにして、16サイクルで512ビットのメッセージ入力を完了する。
〈MD5処理シーケンス〉
MD5処理を実行する際のシーケンスを表4A、表4Bに示す。
【0046】
【表4A】
【0047】
【表4B】
ここでは、第1サイクル〜第16サイクルにおいてF関数処理(M1関数)を行い、第17サイクル〜第32サイクルにおいてG関数処理(M2関数)を行い、第33サイクル〜第48サイクルにおいてH関数処理(M3関数)を行い、第49サイクル〜第64サイクルでI関数処理(M4関数)を行い、第65サイクルおよび第66サイクルで出力処理を行う。このようにして、66サイクルでMD5処理を完了することができる。
【0048】
〈SHA-1処理シーケンス〉
SHA-1処理を実行する際のシーケンスを表5に示す。
【0049】
【表5】
ここでは、第1サイクル〜第20サイクルにおいてF関数処理(S1関数)を行い、第21サイクル〜第40サイクルにおいてH関数処理(S2関数)を行い、第41サイクル〜第60サイクルにおいてJ関数処理(S3関数)を行い、第61サイクル〜第80サイクルにおいてH関数処理(S2関数)を行い、第81サイクルおよび第82サイクルにおいて出力処理を行う。このようにして、82サイクルでSHA-1処理を完了することができる。
【0050】
〈処理手順〉
MD5処理を実行する場合には、まず、MD5用の初期化処理を実行し、MD5用初期値を中間値保持部33の32ビットレジスタ326A〜326Dにセットする。さらに、メッセージを512ビット毎に分割し、分割された512ビットのメッセージを32ビットずつ16回繰り返すことでメッセージ保持部21の32ビットレジスタ203-0〜203-15にセットする。この後、前述したようなMD5処理を実行してハッシュ値保持部31の32ビットレジスタ305A〜305Dに格納された実行結果を出力する。さらに次の512ビットのメッセージをメッセージ部2に入力し、同様にしてMD5処理を実行し処理結果をハッシュ保持部31を介して出力することを繰り返す。
【0051】
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ビットのメッセージをメッセージ部2に入力し、同様にしてSHA-1処理を実行し処理結果をハッシュ保持部31を介して出力することを繰り返す。
【0052】
〔他のハッシュ関数回路への適用〕
MD5とSHA-1はともMD4をベースとするハッシュ関数であり、共通する処理回路が多く含まれている。したがって、前述の実施形態のような構成とすることで、MD5とSHA-1とを個別に実装した場合に比して、回路規模を75%程度に削減することが可能となる。
MD4をベースとするハッシュ関数として、MD5やSHA-1以外に、RIPEMDやFIPS180-2(SHA256,SHA384,SHA512)などが存在し、これらについても同様の手法で回路の共用化を行い、同時に実装して回路規模を削減することとが可能となる。
【0053】
前述した実施形態では、MD5とSHA-1の2つのハッシュ関数処理回路を同時に実装する場合について説明したが、3つ以上ハッシュ関数処理回路を同時に実装する場合についても同様の手法を用いることが可能である。たとえば、n個のハッシュ関数を同時実装する場合には、回路規模は1+(1/3)(n-1)〜1+(1/2)(n-1)程度にすることができ、同時に実装するハッシュ関数の種類が多いほど回路規模の削減率は大きくなる。
【0054】
【発明の効果】
本発明によれば、複数のハッシュ関数を同時に実装したハッシュ関数処理回路の回路規模を大幅に縮小することが可能となる。
【図面の簡単な説明】
【図1】本発明の1実施形態の概略構成を示す機能ブロック図。
【図2】本発明の1実施形態の概略構成を示す機能ブロック図。
【図3】メッセージ部の回路図。
【図4】ハッシュ処理部の回路図。
【図5】ハッシュ関数処理回路の全体構成を示す概略構成図。
【図6】メッセージ部の概略構成図。
【図7】ハッシュ処理部の概略構成図。
【図8】従来例によるMD5処理のためのメッセージ部の回路図。
【図9】従来例によるMD5処理のためのハッシュ処理部の回路図。
【図10】従来例によるSHA-1処理のための回路図。
Claims (4)
- 第1ハッシュ関数処理である MD5 ( Message Digest 5 )と第2ハッシュ関数処理である SHA-1 ( Secure Hash Algorithm 1 )とを処理可能なハッシュ関数処理回路であって、
16 個の 32 ビットレジスタを備え、前記各 32 ビットレジスタの出力を1ブロック左、3ブロック左、5ブロック左、7ブロック左の4種類の左シフト処理することが可能なように 16 個のセレクタが前記各 32 ビットレジスタに接続され、入力されるメッセージを保持するためのメッセージ保持部と、
前記メッセージ保持部から第1ハッシュ関数処理に必要となるメッセージデータを出力するために前記メッセージ保持部の 32 ビットレジスタの出力を選択的に出力するセレクタで構成される第1メッセージ処理部と、
前記メッセージ保持部から第2ハッシュ関数処理に必要となるメッセージデータを出力するために前記メッセージ保持部の 32 ビットレジスタの出力のうち所定のものが入力されそれぞれ直列に接続されて排他的論理和を演算する複数の XOR 回路と最後の XOR 回路の出力に対して1ビットローテーションシフトを行うローテーション部とを備える第2メッセージ処理部と、
前記第1メッセージ処理部からのメッセージデータに基づいて第1ハッシュ関数処理を実行する第1ハッシュ演算部と、
前記第2メッセージ処理部からのメッセージデータに基づいて第2ハッシュ関数処理を実行する第2ハッシュ演算部と、
前記第1ハッシュ演算部において演算される第1演算値と第2ハッシュ演算部とにおいて演算される第2演算値が選択的に入力され、各演算値に基づくハッシュ値を出力する出力部と、
を備えるハッシュ関数処理回路。 - 前記出力部は、
セレクタを介して前記第1演算値および第2演算値のうちいずれか一方が選択的に入力される中間値保持部と、
初期値および演算処理されたハッシュ値を保持するためのハッシュ値保持部と、
前記中間値保持部に保持された中間値と前記ハッシュ値保持部に保持された初期値または演算処理されたハッシュ値との加算処理を行い演算結果を前記ハッシュ値保持部に出力する加算処理部と、
を備える請求項1に記載のハッシュ関数処理回路。 - 前記ハッシュ値保持部は、第1ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタと、第2ハッシュ関数処理における初期値および演算処理されたハッシュ値を保持するためのレジスタを共用するレジスタ回路で構成される、請求項3に記載のハッシュ関数処理回路。
- 前記ハッシュ値保持部は、第1ハッシュ関数処理における初期値を保持するために4個の32ビットレジスタと、第2ハッシュ関数処理における初期値を保持するために5個の32ビットレジスタとを共用する5個の32ビットレジスタで構成される、請求項4に記載のハッシュ関数処理回路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002207932A JP3921424B2 (ja) | 2002-07-17 | 2002-07-17 | ハッシュ関数処理回路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002207932A JP3921424B2 (ja) | 2002-07-17 | 2002-07-17 | ハッシュ関数処理回路 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004053716A JP2004053716A (ja) | 2004-02-19 |
JP3921424B2 true JP3921424B2 (ja) | 2007-05-30 |
Family
ID=31932212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002207932A Expired - Fee Related JP3921424B2 (ja) | 2002-07-17 | 2002-07-17 | ハッシュ関数処理回路 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3921424B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102138170A (zh) * | 2008-08-25 | 2011-07-27 | 索尼公司 | 数据转换器、数据转换方法和程序 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4991223B2 (ja) | 2006-09-08 | 2012-08-01 | ルネサスエレクトロニクス株式会社 | データ処理装置 |
JP4308840B2 (ja) * | 2006-11-08 | 2009-08-05 | Okiセミコンダクタ株式会社 | Sha演算方法およびsha演算装置 |
JP2010128392A (ja) | 2008-11-28 | 2010-06-10 | Canon Inc | ハッシュ処理装置及びその方法 |
KR101210607B1 (ko) * | 2008-12-08 | 2012-12-11 | 한국전자통신연구원 | 해시 암호 장치 및 방법 |
JP5952239B2 (ja) * | 2013-08-30 | 2016-07-13 | 日本電信電話株式会社 | トラヒック走査方法および装置 |
-
2002
- 2002-07-17 JP JP2002207932A patent/JP3921424B2/ja not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102138170A (zh) * | 2008-08-25 | 2011-07-27 | 索尼公司 | 数据转换器、数据转换方法和程序 |
CN102138170B (zh) * | 2008-08-25 | 2013-12-18 | 索尼公司 | 数据转换器、数据转换方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2004053716A (ja) | 2004-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Koziel et al. | SIKE’d up: Fast hardware architectures for supersingular isogeny key encapsulation | |
JP4870932B2 (ja) | 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 | |
JP2004534266A (ja) | ハードウェアにおいて算術演算を効率的に行う方法および装置 | |
Provelengios et al. | FPGA-based design approaches of keccak hash function | |
Ahmad et al. | Hardware implementation analysis of SHA-256 and SHA-512 algorithms on FPGAs | |
JP4783382B2 (ja) | モンゴメリ法用乗算剰余計算装置 | |
WO2006098015A1 (ja) | データ変換装置及びデータ変換方法 | |
JP3921424B2 (ja) | ハッシュ関数処理回路 | |
Rebeiro et al. | High speed compact elliptic curve cryptoprocessor for FPGA platforms | |
Großschädl | A bit-serial unified multiplier architecture for finite fields GF (p) and GF (2 m) | |
Liu et al. | Efficient multiplication architecture over truncated polynomial ring for NTRUEncrypt system | |
Choi et al. | ECC coprocessor over a NIST prime field using fast partial Montgomery reduction | |
JP2022151492A (ja) | 暗号処理装置、暗号処理方法、及び暗号処理プログラム | |
TW200413954A (en) | Information processing method | |
Cui et al. | High-throughput polynomial multiplier for accelerating saber on FPGA | |
Aguilar-Melchor et al. | CDT-based Gaussian sampling: From multi to double precision | |
Ghoreishi et al. | High speed RSA implementation based on modified Booth's technique and Montgomery's multiplication for FPGA platform | |
JP2001051832A (ja) | 乗算剰余演算方法および乗算剰余回路 | |
Guptha et al. | RL-BLED: A Reversible Logic Design of Bit Level Encryption/Decryption Algorithm for Secure Mammogram Data Transmission | |
JPH11212456A (ja) | モンゴメリ法による乗算剰余計算装置 | |
JP2010044251A (ja) | ハッシュ値生成装置、プログラム及びハッシュ値生成方法 | |
Farzam et al. | Fast supersingular isogeny Diffie–Hellman and key encapsulation using a customized pipelined montgomery multiplier | |
Nti et al. | Asic design of low area rsa cryptocore based on montgomery multiplier | |
CN110275693B (zh) | 用于随机计算的多加数加法电路 | |
CN115276960B (zh) | 一种sm2蒙哥马利域上的快速模逆芯片实现装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040922 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061121 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070122 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070213 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070219 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110223 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110223 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120223 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130223 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140223 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |