説明

ハッシュ値演算装置及びハッシュ値演算方法及びハッシュ値演算プログラム

【課題】ハッシュ関数に入力するメッセージのパディング後の長さを短くして、ハッシュ関数の計算量を少なくすることを目的とする。
【解決手段】演算部104は、n個の演算器C,・・・,Cを有する。演算部104は、演算器C(i=1,・・・,n)への入力としてビット列Mの入力を受け付け、ビット列M,・・・,MからなるメッセージM´のハッシュ値を、演算器C,・・・,Cを用いて演算する。ビット列Mは演算器Cごとに予め定められたビット長をもつ。パディング部102は、nを表すビット列と所定のビットパターンとを組み合わせてビット列Pを生成し、ビット列Pを、入力部101により入力されたメッセージMの所定の位置に付加してメッセージM´を生成する。ビット列Sは予め定められたビット長をもつが、ビット列P全体のビット長はメッセージMのビット長に応じて設定される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ハッシュ値演算装置及びハッシュ値演算方法及びハッシュ値演算プログラムに関するものである。本発明は、特に、ハッシュ関数の入力値を加工する方式(ハッシュ関数パディング方式)に関するものである。
【背景技術】
【0002】
ハッシュ関数は入力長が任意で、出力長が固定の関数である。ハッシュ関数Hには衝突困難性が要求される。衝突困難性とは、H(M)=H(M´)となる異なる2つの値M、M´を求めることは難しいという性質である。
【0003】
ハッシュ関数の入力長は任意であるが、ハッシュ関数の中ではある長さの倍数に変換してから用いられる。通常の変換方式は入力値の後ろに“1”と“0・・・0”(“0”のビット列)と64ビットの入力長の符号語が付加されるパディング処理が一般的である(例えば、非特許文献1参照)。
【0004】
ハッシュ関数は小さな部品を組み合わせて構成される。この部品とはブロック暗号や圧縮関数と呼ばれる、入力長、出力長が固定された関数である。
【0005】
ハッシュ関数の構成法にstrength・Merkle−Damgaard(sMD)構造がある。ここで、圧縮関数の入力長をaビット、出力長をbビットとおく。bビットの固定値をIV(Initialization・Vector)とおく。MD構造への入力をMとおく。中身の処理では、まずMから、ビット長がa−bビットの倍数となるM´を、Mの後ろに“1”と“0・・・0”(“0”のビット列)とMのビット長を表す64ビットの符号語を付加することにより生成する。即ち、
M´=M||1||0・・・0||<|M|>
とする。なお、“||”はビット(列)の連結を表記したものである。“|M|”はMのビット長を表記したものである。“<|M|>”はMのビット長を表す固定長(ここでは64ビット)の符号語を表記したものである。Mに付加する“0・・・0”は、0を付加する個数が最小となるようにする。次にM´をa−bビットごとに分割する。即ち、
M´=(m[1],m[2],・・・,m[n])
とする。c[1]=IVとおき、c[i+1]=h(c[i],m[i])をi=1,・・・,n(nはn>1となる整数)について計算する。なお、h(c[i],m[i])はc[i]を入力、m[i]を出力とする圧縮関数を表記したものである。最後にc[n+1]をハッシュ関数の出力値とする。
【0006】
ハッシュ関数の入力値の後ろに“1”を付加せず、“0・・・0”(“0”のビット列)と64ビットの入力長の符号語のみを付加するパディング方式もある(例えば、非特許文献2参照)。
【非特許文献1】National Institute of Standards and Technology, “Secure Hash Standard (SHS),” Federal Information Processing Standards Publication 180−2, August 1, 2002
【非特許文献2】Don B. Johnson, Entrust CygnaCom, “Improving Hash Function Padding,” First Cryptographic Hash Workshop, National Institute of Standards and Technology, November 1, 2005
【発明の開示】
【発明が解決しようとする課題】
【0007】
非特許文献2の方式では、一般的なパディング方式(M´=M||1||0・・・0||<M>)よりもパディングされたデータの長さが短くなるものの、1ビットしか短くできないため、ハッシュ関数の計算量が依然多いという課題があった。
【0008】
本発明は、例えば、ハッシュ関数に入力するメッセージのパディング後の長さを短くして、ハッシュ関数の計算量を少なくすることを目的とする。
【課題を解決するための手段】
【0009】
本発明の一の態様に係るハッシュ値演算装置は、
少なくとも圧縮関数の演算を行うn(nはn>1となる整数)個の演算器C,・・・,Cを有し、演算器C(i=1,・・・,n)への入力として予め定められたビット長をもつビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値を、前記n個の演算器C,・・・,Cを用いて演算する演算部を具備するハッシュ値演算装置であって、
メッセージMを入力する入力部と、
nを表すビット列と所定のビットパターンとを組み合わせてビット列Pを生成し、生成したビット列Pを、前記入力部により入力されたメッセージMの所定の位置に付加して前記メッセージM´を生成するパディング部と、
前記パディング部により生成されたメッセージM´をn分割してビット列M,・・・,Mを生成し、生成したビット列M,・・・,Mを前記演算部へ入力して前記演算部に前記メッセージM´のハッシュ値を演算させる分割部と、
前記演算部により演算されたメッセージM´のハッシュ値を出力する出力部とを備えることを特徴とする。
【発明の効果】
【0010】
本発明の一の態様によれば、n個の演算器C,・・・,Cを有し、演算器Cへの入力として予め定められたビット長をもつビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値を、前記n個の演算器C,・・・,Cを用いて演算する演算部を具備するハッシュ値演算装置において、パディング部が、nを表すビット列と所定のビットパターンとを組み合わせてビット列Pを生成し、生成したビット列Pを、入力部により入力されたメッセージMの所定の位置に付加して前記メッセージM´を生成することにより、メッセージMのパディング後の長さを短くして、ハッシュ関数の計算量を少なくすることが可能となる。
【発明を実施するための最良の形態】
【0011】
以下、本発明の実施の形態について、図を用いて説明する。
【0012】
実施の形態1.
図1は、本実施の形態に係るハッシュ値演算装置100の構成を示すブロック図である。
【0013】
図1において、ハッシュ値演算装置100は、入力部101、パディング部102、分割部103、演算部104、出力部105を備える。
【0014】
演算部104は、n(nはn>1となる整数)個の演算器C,・・・,Cを有する。演算部104は、それぞれの演算器C(i=1,・・・,n)への入力としてビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値H(M´)を、上記n個の演算器C,・・・,Cを用いて演算する。ビット列Mは演算器Cごとに予め定められたビット長をもつ。以下では、ビット列Mのビット長をm(mはm>0となる整数)と表記する。
【0015】
入力部101は、ハッシュ関数の入力値であるメッセージMを入力する。メッセージMは任意のビット長をもつ。以下では、メッセージMのビット長をm(mはm>1となる整数)と表記する。
【0016】
パディング部102は、入力部101により入力されたメッセージMに対し、所定のパディングを行って上記メッセージM´を生成する。具体的には、パディング部102は、nを表すビット列Sと所定のビットパターンTとを組み合わせて(さらに、他のビットあるいはビット列と組み合わせてもよい)ビット列Pを生成する。そして、パディング部102は、生成したビット列Pを、入力部101により入力されたメッセージMの所定の位置に付加して上記メッセージM´を生成する。ビット列Sは予め定められたビット長をもつが、ビット列P全体のビット長はメッセージMのビット長に応じてパディング部102により設定される。以下では、ビット列Pのビット長をp(pはp>0となる整数)と表記する。なお、pは可変であるが、メッセージM´のビット長はΣmであるから、常にp=Σm−mが成り立つ。
【0017】
本実施の形態では、パディング部102は、ビットパターンTとして、“10・・・0”(開始ビットが“1”、それ以外がオール“0”)を生成するものとする。なお、パディング部102は、これ以外にも、“0・・・0”(オール“0”)、“1・・・1”(オール“1”)、“01・・・1”(開始ビットが“0”、それ以外がオール“1”)といった任意のパターンを用いることができるが、ハッシュ関数の衝突困難性を高めるため、“10”又は“01”で始まるものを用いることが望ましい。どのようなパターンを用いるかは予め定義されており、パディング部102は、その定義に従ってビットパターンTを生成する。予め複数のパターンが定義されている場合には、パディング部102が、それらのパターンのうち、外部から指定されたものを用いるようにしてもよいし、用途等に応じていずれかのパターンを選択し、選択したものを用いるようにしてもよい。
【0018】
本実施の形態では、パディング部102は、ビット列PをメッセージMの後(所定の位置の一例)に連結してメッセージM´を生成するものとする。なお、パディング部102は、ビット列PをメッセージMの先頭に追加して(即ち、ビット列Pの後にメッセージMを連結して)メッセージM´を生成してもよいし、ビット列PをメッセージMの所定の位置に挿入してメッセージM´を生成してもよい。どの位置にビット列Pを追加するかは予め定義されており、パディング部102は、その定義に従ってビット列PをメッセージMに追加する。予め複数の位置が定義されている場合には、パディング部102が、外部から指定された位置にビット列Pを追加するようにしてもよいし、用途等に応じていずれかの位置を選択し、選択した位置にビット列Pを追加するようにしてもよい。
【0019】
分割部103は、パディング部102により生成されたメッセージM´をn分割してビット列M,・・・,Mを生成する。そして、分割部103は、生成したビット列M,・・・,Mを演算部104へ入力して演算部104にメッセージM´のハッシュ値H(M´)を演算させる。
【0020】
出力部105は、演算部104により演算されたメッセージM´のハッシュ値H(M´)を出力する。
【0021】
図2は、演算部104の構成の一例を示すブロック図である。
【0022】
図2において、演算部104が備えるn個の演算器C,・・・,Cは、それぞれ圧縮関数hの演算を行う回路(ハードウェアで実装される場合)、関数(ソフトウェアで実装される場合)等である(ハードウェアとソフトウェアとの組み合わせで実装されてもよい)。なお、演算器C,・・・,Cの個数nは、入力部101により入力されるメッセージMのビット長mに応じて決まるものである。単純な例として、ビット列M,・・・,Mが、いずれも同じビット長をもつとすると、そのビット長でmを割ったときの商がnとなる。なお、このときの余りがパディング部102により生成されるビット列Pのビット長pとなる。以上より、演算部104は、実際には所定数の演算器を備えておき、その中から、メッセージMのビット長mに応じてn個の演算器C,・・・,Cを選択して用いることが望ましい。
【0023】
それぞれの演算器C(i=1,・・・,n)は、ビット列Mを含むビット列Aの入力を受け付け、入力されたビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成する。i<nの場合、演算器Cは、生成したビット列Bを他の演算器C(jはi<j≦nとなる整数)へビット列Aの一部として入力する。図1に示したように、本実施の形態では、演算部104のn個の演算器C,・・・,Cは、順番に直列に接続されているものとする。そして、それぞれの演算器Cは、i<nの場合(即ち、演算器C,・・・,Cn−1は)、生成したビット列Bを他の演算器Cである演算器Ci+1へビット列Ai+1の一部として入力するものとする。演算器Cは、生成したビット列BをメッセージM´のハッシュ値H(M´)として出力部105に返す。
【0024】
例えば、演算器Cは、所定の固定値であるIVとパディング部102により生成されたビット列Mとからなるビット列Aが入力されると、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。演算器Cは、演算器Cから出力されたビット列Bとパディング部102により生成されたビット列Mとからなるビット列Aが入力されると、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成する。演算器C以降については、演算器Cと同様である。この例では、出力部105は、演算器Cにより生成されたビット列BをメッセージM´のハッシュ値H(M´)として出力することになる。
【0025】
他の実施の形態については後述するが、演算部104の構成としては、ハッシュ関数の演算が可能なものであれば、図2に示したもの以外にも様々な構成を採用することができる。また、例えば、ビット列M,・・・,Mが、いずれも同じビット長をもち、さらに、ビット列A,・・・,Aが、いずれも同じビット長をもつように構成してもよいし、同様に、ビット列B,・・・,Bが、いずれも同じビット長をもつように構成してもよい。この場合、実装が容易になるという効果を奏する。
【0026】
図3は、ハッシュ値演算装置100のハードウェア構成の一例を示す図である。
【0027】
図3において、ハッシュ値演算装置100は、コンピュータであり、LCD901(Liquid・Crystal・Display)、キーボード902(K/B)、マウス903、FDD904(Flexible・Disk・Drive)、CDD905(Compact・Disc・Drive)、プリンタ906といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。LCD901の代わりに、CRT(Cathode・Ray・Tube)、あるいは、その他の表示装置が用いられてもよい。マウス903の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【0028】
ハッシュ値演算装置100は、プログラムを実行するCPU911(Central・Processing・Unit)を備えている。CPU911は、処理装置の一例である。CPU911は、バス912を介してROM913(Read・Only・Memory)、RAM914(Random・Access・Memory)、通信ボード915、LCD901、キーボード902、マウス903、FDD904、CDD905、プリンタ906、HDD920(Hard・Disk・Drive)と接続され、これらのハードウェアデバイスを制御する。HDD920の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ又はその他の記憶媒体が用いられてもよい。
【0029】
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、HDD920は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード915、キーボード902、マウス903、FDD904、CDD905は、入力装置の一例である。また、通信ボード915、LCD901、プリンタ906は、出力装置の一例である。
【0030】
通信ボード915は、LAN(Local・Area・Network)等に接続されている。通信ボード915は、LANに限らず、IP−VPN(Internet・Protocol・Virtual・Private・Network)、広域LAN、ATM(Asynchronous・Transfer・Mode)ネットワークといったWAN(Wide・Area・Network)、あるいは、インターネットに接続されていても構わない。LAN、WAN、インターネットは、ネットワークの一例である。
【0031】
HDD920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。プログラム群923には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、CPU911により読み出され実行される。ファイル群924には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ID(識別子)」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、RAM914やHDD920等の記憶媒体に記憶される。RAM914やHDD920等の記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったCPU911の処理(動作)に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったCPU911の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【0032】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、RAM914等のメモリ、FDD904のフレキシブルディスク(FD)、CDD905のコンパクトディスク(CD)、HDD920の磁気ディスク、光ディスク、DVD(Digital・Versatile・Disc)、あるいは、その他の記録媒体に記録される。また、データや信号は、バス912、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【0033】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【0034】
図4は、ハッシュ値演算装置100の動作(本実施の形態に係るハッシュ値演算方法、本実施の形態に係るハッシュ値演算プログラムの処理手順)を示すフローチャートである。
【0035】
ステップS101(入力処理)において、入力部101は、mビットのメッセージMを記憶装置や入力装置から入力する(例えば、RAM914やHDD920から読み込んだり、通信ボード915によりネットワークから受信したり、キーボード902やマウス903を介してユーザから入力を受け付けたりする)。
【0036】
ステップS102(パディング処理)において、パディング部102は、nを表すビット列Sのビット長をq(qはq>lognとなる整数であり、例えば55とする)ビットに設定する。また、パディング部102は、ビットパターンTとして“10・・・0”を生成する。このとき、パディング部102は、ビットパターンTのビット長を、t=Σm−m−qを満たすtビットに設定する。そして、パディング部102は、qビットのビット列Sをtビットの“10・・・0”と所定の順番で連結してpビットのビット列Pを生成する。ここでは、パディング部102は、ビット列Sを“10・・・0”の後(所定の順番の一例)に連結してビット列Pを生成するものとする。即ち、
P=T||S=1||0・・・0||<n>
とする。なお、前述したように、“||”はビット(列)の連結を表記したものである。“<n>”はnを表す固定長(ここではqビット)の符号語を表記したものである。p=t+qであり、t=Σm−m−qであるから、前述したように、p=Σm−mが成り立つ。
【0037】
パディング部102は、上記のように生成したビット列Pを、ステップS101で入力されたメッセージMの後に連結してΣmビットのメッセージM´を生成する。即ち、
M´=M||P=M||1||0・・・0||<n>
とする。
【0038】
従来技術では、メッセージMにパディングがなされたメッセージM´は、M´=M||1||0・・・0||<|M|>であった。<|M|>を一般的な64ビットの符号語であるとすると、従来技術では、最大264−1ビットのメッセージMの入力を受け付けられることになる。一方、本実施の形態では、上記のように、メッセージMにパディングがなされたメッセージM´は、M´=M||P=M||1||0・・・0||<n>となる。n個の演算器C,・・・,Cに入力されるビット列M,・・・,Mのビット長がいずれも一般的な512ビットに定められているとすると、<n>が55ビットの符号語であれば、ハッシュ値演算装置100は、最大264−1ビットのメッセージMの入力を受け付けられることになる。このように、本実施の形態によれば、メッセージMのパディング後の長さを短くして、ハッシュ関数の計算量を少なくすることが可能となる。
【0039】
上記のように、ステップS102では、パディング部102が、ハッシュ関数への入力値Mに対して、後述するハッシュ値導出関数に使われる圧縮関数の数を示す値nを求め、ハッシュ値導出関数の入力条件を満たしかつnを含む値M´を出力するパディング関数の処理を実行する。パディング関数の処理では、Mをハッシュ関数の演算に使える長さに加工するために、Mの後に“1”と“0・・・0”(“0”のビット列)とnを表す例えば55ビットの符号語を、“0・・・0”のビット長が最小となるように付加し(即ち、パディングし)、M´を作る。前述したように、パディングされる“0”と“1”はそれぞれ反転させてもよい。
【0040】
ステップS103(分割処理)において、分割部103は、ステップS102で生成されたメッセージM´をn分割してビット列M,・・・,Mを生成する。そして、分割部103は、生成したビット列M,・・・,Mを演算部104へ入力する。
【0041】
ステップS104(演算処理)において、演算部104は、ステップS103におけるビット列M,・・・,Mの入力を受け付ける。演算部104は、ビット列Mと予め定められた固定値であるIVとをビット列Aとして演算器Cへ入力する。演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。演算部104は、ビット列Mと演算器Cから出力されたビット列Bとをビット列Aとして演算器Cへ入力する。演算器Cと同様に、演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。これ以降、同様の演算手順が演算器Cn−1まで実行される。その後、演算部104は、ビット列Mと演算器Cn−1から出力されたビット列Bn−1とをビット列Aとして演算器Cへ入力する。演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、メッセージM´のハッシュ値H(M´)として出力する。
【0042】
上記のように、ステップS103及びS104では、分割部103及び演算部104が、前述したパディング関数の出力値M´を入力し、そのハッシュ値H(M´)を求めるハッシュ値導出関数の処理を実行し、その出力値H(M´)をハッシュ関数の出力値として出力する。
【0043】
なお、図4ではパディング関数とハッシュ値導出関数を分けて記述しているが、これらは同時に行う場合が一般的である。即ち、2つの関数が1つになっており、ハッシュ値導出関数内でパディング値が計算に必要になった場合にパディング関数を呼び出して、パディング処理を行うという形態が実施可能である。例えば、上記のパディング方式(M´=M||P=M||1||0・・・0||<n>)をMD構造(図2参照)に適用した場合、ハッシュ関数の入力値M=(m[1],・・・,m[x])に対して、c[i+1]=h(c[i],m[i])をi=1,・・・,x−1について計算する。i=nのときにパディング関数を呼び出しm´[x]=m[x]||1||0・・・0||<n>とし、c[x+1]=h(c[x],m´[x])を計算し、c[x+1]をハッシュ値として出力する。
【0044】
ステップS105(出力処理)において、出力部105は、ステップS104で演算されたメッセージM´のハッシュ値H(M´)を記憶装置や出力装置へ出力する(例えば、RAM914やHDD920に書き出したり、通信ボード915によりネットワークに送信したり、LCD901で画面表示したり、プリンタ906で印刷したりする)。
【0045】
以下では、本実施の形態でも、ハッシュ関数が従来技術と同様の衝突困難性をもつことについての証明を行う。
【0046】
ハッシュ関数Hとしては、MD構造と上記のパディング方式(M´=M||P=M||1||0・・・0||<n>)を用いることにする。なお、他の構造に対しても同様に衝突困難性の証明を行うことができる。
【0047】
以下、圧縮関数hが衝突困難性を満たすならばハッシュ関数Hは衝突困難性を満たすことを証明する。
【0048】
証明:
上記の対偶を取ることにより証明を行う。即ち、ハッシュ関数Hが衝突困難性を満たさないならば圧縮関数hが衝突困難性を満たさないことを示すことにより、証明を行う。そのため、まずハッシュ関数Hの衝突困難性が破れたと仮定する。即ち、H(Ma)=H(Mb)となるMa、Mbが見つかったと仮定する。このとき、H(Ma)、H(Mb)の中で起きている事象は以下の3パターンに分けることができ、全てのパターンで圧縮関数hの衝突困難性が破れていることを示す。
【0049】
1.|Ma|=|Mb|の場合
|Ma|=|Mb|なので、H(Ma)とH(Mb)の中で用いる圧縮関数hの数は同じである。Ma≠MbかつH(Ma)=H(Mb)なので、出力部分の圧縮関数hからIV側にバックワードサーチを行っていくとH(Ma)、H(Mb)の圧縮関数hで入力が異なりかつ出力が等しいものが存在する。即ち、圧縮関数hの衝突困難性が破れている。
【0050】
2.|Ma|≠|Mb|かつBa≠Bbの場合(ここで、BaはH(Ma)の中で用いる圧縮関数hの数、BbはH(Mb)の中で用いる圧縮関数hの数とする)
Ba≠Bbなので、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0051】
3.|Ma|≠|Mb|かつBa=Bbの場合
Ma、Mbのパディング後の値をMa´、Mb´とする。即ち、Ma´=Ma||10・・・0||<Ba>、Mb´=Mb||10・・・0||<Bb>となる。ここで、|Ma|≠|Mb|かつBa=Bbなので、0をパディングする数が異なる。H(Ma)とH(Mb)の中で用いる最後の圧縮関数hの入力が異なりかつH(Ma)=H(Mb)なので、H(Ma)とH(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0052】
以上全パターンで圧縮関数hの衝突困難性が破れているので、ハッシュ関数Hが衝突困難性を満たさないならば圧縮関数hが衝突困難性を満たさないことが示せた。よって、この対偶により、圧縮関数hが衝突困難性を満たすならばハッシュ関数Hは衝突困難性を満たす。
【0053】
以上のように、本実施の形態に係るハッシュ関数演算装置(ハッシュ値演算装置100)は、任意の値Mを入力として受けたとき、その値のハッシュ関数の計算に必要な圧縮関数hの個数の情報を含む値nを生成し、Mにある方法を用いてnを含む値に変換することを特徴とする。
【0054】
また、上記ハッシュ関数演算装置は、さらに、M、nともに2進表現で用いることを特徴とする。
【0055】
また、上記ハッシュ関数演算装置は、さらに、パディングされた値M´がM´=M||1||0・・・0||<n>となることを特徴とする。
【0056】
また、上記ハッシュ関数演算装置は、圧縮関数の入力長をa(aはa>1となる整数)、出力長をb(bはa>b>1となる整数)としたときに、パディングされた値M´の長さがa−bの倍数となり、nの長さが固定長となることを特徴とする。
【0057】
また、上記ハッシュ関数演算装置は、パディングにより加工された値M´で“0”をパディングする個数が最小となることを特徴とする。
【0058】
実施の形態2.
本実施の形態について、主に実施の形態1との差異を説明する。
【0059】
図4を用いて、本実施の形態に係るハッシュ値演算装置100の動作(本実施の形態に係るハッシュ値演算方法、本実施の形態に係るハッシュ値演算プログラムの処理手順)を説明する。
【0060】
ステップS101(入力処理)については、実施の形態1と同様であるため、説明を省略する。
【0061】
ステップS102(パディング処理)において、n≦2(qはq>0となる整数であり、例えば32とする)の場合、パディング部102は、nを表すビット列Sのビット長をqビットに設定する。また、パディング部102は、ビットパターンTとして“10・・・0”を生成する。このとき、パディング部102は、ビットパターンTのビット長を、t=Σm−m−q−1を満たすtビットに設定する。そして、パディング部102は、qビットのビット列Sと値が“0”(又は“1”)であるビットDとをtビットの“10・・・0”と所定の順番で連結してpビットのビット列Pを生成する。ここでは、パディング部102は、ビット列SとビットDとを“10・・・0”の後(所定の順番の一例)に連結してビット列Pを生成するものとする。即ち、
P=T||S||D=1||0・・・0||<n>||0
とする。なお、前述したように、“||”はビット(列)の連結を表記したものである。“<n>”はnを表す固定長(ここではqビット)の符号語を表記したものである。p=t+q+1であり、t=Σm−m−q−1であるから、前述したように、p=Σm−mが成り立つ。
【0062】
一方、ステップS102(パディング処理)において、n>2の場合、パディング部102は、nを表すビット列Sのビット長をr(rはr>qとなる整数であり、例えば55とする)ビットに設定する。また、パディング部102は、ビットパターンTとして“10・・・0”を生成する。このとき、パディング部102は、ビットパターンTのビット長を、t=Σm−m−r−1を満たすtビットに設定する。そして、パディング部102は、rビットのビット列Sと値がビットDと異なる(ビットDが“0”であれば“1”)であるビットDとをtビットの“10・・・0”と所定の順番で連結してpビットのビット列Pを生成する。ここでは、n≦2の場合と同様に、パディング部102は、ビット列SとビットDとを“10・・・0”の後(所定の順番の一例)に連結してビット列Pを生成することになる。即ち、
P=T||S||D=1||0・・・0||<n>||1
となる。なお、前述したように、“||”はビット(列)の連結を表記したものである。“<n>”はnを表す固定長(ここではrビット)の符号語を表記したものである。p=t+r+1であり、t=Σm−m−r−1であるから、前述したように、p=Σm−mが成り立つ。
【0063】
パディング部102は、上記のように生成したビット列Pを、ステップS101で入力されたメッセージMの後に連結してΣmビットのメッセージM´を生成する。即ち、
M´=M||P=M||1||0・・・0||<n>||0(n≦2の場合)
M´=M||P=M||1||0・・・0||<n>||1(n>2の場合)
とする。なお、前述したように、n≦2の場合、“<n>”のビット長はqであり、n>2の場合、“<n>”のビット長はr>qを満たすrである。
【0064】
上記のように、ステップS102では、パディング部102が、ハッシュ関数の入力値Mに対して、Mをハッシュ関数の演算に使える長さに加工するために、Mの後に“1”と“0・・・0”(“0”のビット列)とnを表す例えば32ビット又は55ビットの符号語と“0”又は“1”を(n≦232ならばnを表す符号語は32ビット、最後のビットは“0”となり、n>232ならばnを表す符号語は55ビット、最後のビットは“1”となる)、“0・・・0”のビット長が最小となるように付加し(即ち、パディングし)、M´を作る。M’=M||1||0・・・0||<B>||0またはM’=M||1||0・・・0||<B>||1。前述したように、パディングされる“0”と“1”はそれぞれ反転させてもよい。
【0065】
ステップS103(分割処理)以降については、実施の形態1と同様であるため、説明を省略する。
【0066】
以下では、本実施の形態でも、ハッシュ関数が従来技術と同様の衝突困難性をもつことについての証明を行う。
【0067】
ハッシュ関数Hとしては、MD構造と上記のパディング方式(M´=M||P=M||1||0・・・0||<n>||0、又は、M´=M||P=M||1||0・・・0||<n>||1)を用いることにする。なお、他の構造に対しても同様に衝突困難性の証明を行うことができる。
【0068】
以下、圧縮関数hが衝突困難性を満たすならばハッシュ関数Hは衝突困難性を満たすことを証明する。
【0069】
証明:
上記の対偶を取ることにより証明を行う。即ち、ハッシュ関数Hが衝突困難性を満たさないならば圧縮関数hが衝突困難性を満たさないことを示すことにより、証明を行う。そのため、まずハッシュ関数Hの衝突困難性が破れたと仮定する。即ち、H(Ma)=H(Mb)となるMa、Mbが見つかったと仮定する。このとき、H(Ma)、H(Mb)の中で起きている事象は以下の5パターンに分けることができ、全てのパターンで圧縮関数hの衝突困難性が破れていることを示す。
【0070】
1.|Ma|=|Mb|の場合
|Ma|=|Mb|なので、H(Ma)とH(Mb)の中で用いる圧縮関数hの数は同じである。Ma≠MbかつH(Ma)=H(Mb)なので、出力部分の圧縮関数hからIV側にバックワードサーチを行っていくとH(Ma)、H(Mb)の圧縮関数hで入力が異なりかつ出力が等しいものが存在する。即ち、圧縮関数hの衝突困難性が破れている。
【0071】
2.|Ma|≠|Mb|かつBa≠BbかつBa≦2かつBb>2の場合(ここで、BaはH(Ma)の中で用いる圧縮関数hの数、BbはH(Mb)の中で用いる圧縮関数hの数とする)
最後のチェックビットが異なるので、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0072】
3.|Ma|≠|Mb|かつBa≠BbかつBa≦2かつBb≦2の場合
Ba≠Bbなので、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0073】
4.|Ma|≠|Mb|かつBa≠BbかつBa>2かつBb>2の場合
Ba≠Bbなので、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0074】
5.|Ma|≠|Mb|かつBa=Bbの場合
Ma、Mbのパディング後の値をMa´、Mb´とする。即ち、Ma´=Ma||10・・・0||<Ba>||d、Mb´=Mb||10・・・0||<Bb>||dとなる(dはBa、Bbの長さによって異なってくる)。ここで、|Ma|≠|Mb|かつBa=Bbなので、0をパディングする数が異なる。H(Ma)とH(Mb)の中で用いる最後の圧縮関数hの入力が異なりかつH(Ma)=H(Mb)なので、H(Ma)とH(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0075】
以上全パターンで圧縮関数hの衝突困難性が破れているので、ハッシュ関数Hが衝突困難性を満たさないならば圧縮関数hが衝突困難性を満たさないことが示せた。よって、この対偶により、圧縮関数hが衝突困難性を満たすならばハッシュ関数Hは衝突困難性を満たす。
【0076】
以上のように、本実施の形態に係るハッシュ関数演算装置(ハッシュ値演算装置100)は、実施の形態1と異なり、qをある整数としたときに、nが2以下ならば、<n>の長さをqビットとし、M´=M||1||0・・・0||<n>||0とし、nが2より上ならば<n>の長さをqビットより長いrビットとし、M´=M||1||0・・・0||<n>||1とすることを特徴とする。
【0077】
また、上記ハッシュ関数演算装置は、“0”をパディングする個数が最小となることを特徴とする。
【0078】
実施の形態3.
本実施の形態について、主に実施の形態1及び2との差異を説明する。
【0079】
本実施の形態に係るハッシュ値演算装置100の構成は、図1に示した実施の形態1及び2のものと同様である。
【0080】
本実施の形態では、パディング部102は、nではなくmを表すビット列Sと所定のビットパターンTと所定のビットD又はDとを組み合わせてビット列Pを生成する。そして、パディング部102は、生成したビット列Pを、入力部101により入力されたメッセージMの所定の位置に付加してメッセージM´を生成する。実施の形態1及び2と同様に、ビット列Sは予め定められたビット長をもつが、ビット列P全体のビット長はメッセージMのビット長に応じてパディング部102により設定される。
【0081】
図4を用いて、本実施の形態に係るハッシュ値演算装置100の動作(本実施の形態に係るハッシュ値演算方法、本実施の形態に係るハッシュ値演算プログラムの処理手順)を説明する。
【0082】
ステップS101(入力処理)については、実施の形態1及び2と同様であるため、説明を省略する。
【0083】
ステップS102(パディング処理)において、m≦2(qはq>0となる整数であり、例えば32とする)の場合、パディング部102は、mを表すビット列Sのビット長をqビットに設定する。また、パディング部102は、ビットパターンTとして“10・・・0”を生成する。このとき、パディング部102は、ビットパターンTのビット長を、t=Σm−m−q−1を満たすtビットに設定する。そして、パディング部102は、qビットのビット列Sと値が“0”(又は“1”)であるビットDとをtビットの“10・・・0”と所定の順番で連結してpビットのビット列Pを生成する。ここでは、パディング部102は、ビット列SとビットDとを“10・・・0”の後(所定の順番の一例)に連結してビット列Pを生成するものとする。即ち、
P=T||S||D=1||0・・・0||<m>||0
とする。なお、前述したように、“||”はビット(列)の連結を表記したものである。“<m>”はmを表す固定長(ここではqビット)の符号語を表記したものである。p=t+q+1であり、t=Σm−m−q−1であるから、前述したように、p=Σm−mが成り立つ。
【0084】
一方、ステップS102(パディング処理)において、m>2の場合、パディング部102は、mを表すビット列Sのビット長をr(rはr>qとなる整数であり、例えば63とする)ビットに設定する。また、パディング部102は、ビットパターンTとして“10・・・0”を生成する。このとき、パディング部102は、ビットパターンTのビット長を、t=Σm−m−r−1を満たすtビットに設定する。そして、パディング部102は、rビットのビット列Sと値がビットDと異なる(ビットDが“0”であれば“1”)であるビットDとをtビットの“10・・・0”と所定の順番で連結してpビットのビット列Pを生成する。ここでは、m≦2の場合と同様に、パディング部102は、ビット列SとビットDとを“10・・・0”の後(所定の順番の一例)に連結してビット列Pを生成することになる。即ち、
P=T||S||D=1||0・・・0||<m>||1
となる。なお、前述したように、“||”はビット(列)の連結を表記したものである。“<m>”はmを表す固定長(ここではrビット)の符号語を表記したものである。p=t+r+1であり、t=Σm−m−r−1であるから、前述したように、p=Σm−mが成り立つ。
【0085】
パディング部102は、上記のように生成したビット列Pを、ステップS101で入力されたメッセージMの後に連結してΣmビットのメッセージM´を生成する。即ち、
M´=M||P=M||1||0・・・0||<m>||0(m≦2の場合)
M´=M||P=M||1||0・・・0||<m>||1(m>2の場合)
とする。なお、前述したように、m≦2の場合、“<m>”のビット長はqであり、m>2の場合、“<m>”のビット長はr>qを満たすrである。
【0086】
上記のように、ステップS102では、パディング部102が、ハッシュ関数の入力値Mに対して、Mをハッシュ関数の演算に使える長さに加工するために、Mの後に“1”と“0・・・0”(“0”のビット列)とmを表す例えば32ビット又は63ビットの符号語と“0”又は“1”を(m≦232ならばmを表す符号語は32ビット、最後のビットは“0”となり、m>232ならばmを表す符号語は63ビット、最後のビットは“1”となる)、“0・・・0”のビット長が最小となるように付加し(即ち、パディングし)、M´を作る。M’=M||1||0・・・0||<B>||0またはM’=M||1||0・・・0||<B>||1。前述したように、パディングされる“0”と“1”はそれぞれ反転させてもよい。
【0087】
ステップS103(分割処理)以降については、実施の形態1及び2と同様であるため、説明を省略する。
【0088】
以下では、本実施の形態でも、ハッシュ関数が従来技術と同様の衝突困難性をもつことについての証明を行う。
【0089】
ハッシュ関数Hとしては、MD構造と上記のパディング方式(M´=M||P=M||1||0・・・0||<m>||0、又は、M´=M||P=M||1||0・・・0||<m>||1)を用いることにする。なお、他の構造に対しても同様に衝突困難性の証明を行うことができる。
【0090】
以下、圧縮関数hが衝突困難性を満たすならばハッシュ関数Hは衝突困難性を満たすことを証明する。
【0091】
証明:
上記の対偶を取ることにより証明を行う。即ち、ハッシュ関数Hが衝突困難性を満たさないならば圧縮関数hが衝突困難性を満たさないことを示すことにより、証明を行う。そのため、まずハッシュ関数Hの衝突困難性が破れたと仮定する。即ち、H(Ma)=H(Mb)となるMa、Mbが見つかったと仮定する。このとき、H(Ma)、H(Mb)の中で起きている事象は以下の4パターンに分けることができ、全てのパターンで圧縮関数hの衝突困難性が破れていることを示す。
【0092】
1.|Ma|=|Mb|の場合
|Ma|=|Mb|なので、H(Ma)とH(Mb)の中で用いる圧縮関数hの数は同じである。Ma≠MbかつH(Ma)=H(Mb)なので、出力部分の圧縮関数hからIV側にバックワードサーチを行っていくとH(Ma)、H(Mb)の圧縮関数hで入力が異なりかつ出力が等しいものが存在する。即ち、圧縮関数hの衝突困難性が破れている。
【0093】
2.|Ma|≠|Mb|かつ|Ma|≦2かつ|Ma|>2の場合
最後のチェックビットが異なるので、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0094】
3.|Ma|≠|Mb|かつ|Ma|≦2かつ|Ma|≦2の場合
Ma´=Ma||1||0・・・0||<|Ma|>||0、Mb´=Mb||1||0・・・0||<|Mb|>||0とする。<|Ma|>と<|Mb|>のビット数は同じなので、sMDの証明と同様に、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0095】
4.|Ma|≠|Mb|かつ|Ma|>2かつ|Ma|>2の場合
Ma´=Ma||1||0・・・0||<|Ma|>||1、Mb´=Mb||1||0・・・0||<|Mb|>||1とする。<|Ma|>と<|Mb|>のビット数は同じなので、sMDの証明と同様に、H(Ma)、H(Mb)の最後の圧縮関数hの入力は必ず異なる。また、H(Ma)=H(Mb)なので、H(Ma)、H(Mb)の最後の圧縮関数hの衝突困難性が破れている。
【0096】
以上全パターンで圧縮関数hの衝突困難性が破れているので、ハッシュ関数Hが衝突困難性を満たさないならば圧縮関数hが衝突困難性を満たさないことが示せた。よって、この対偶により、圧縮関数hが衝突困難性を満たすならばハッシュ関数Hは衝突困難性を満たす。
【0097】
以上のように、本実施の形態に係るハッシュ関数演算装置(ハッシュ値演算装置100)は、実施の形態1及び2と異なり、任意の値Mを入力として受けたとき、Mのビット長がある値qに対して、2以下ならば、Mをqビットの、Mのビット長情報が入った符号語<M>を含む値に変換し、2より大きいならばqビットより長いrビットの、Mのビット長情報が入った符号語<M>を含む値に変換することを特徴とする。
【0098】
また、上記ハッシュ関数演算装置は、任意の値Mを入力として受けたとき、Mのビット長が2以下ならば、qビットの、Mのビット長情報が入った符号語<M>に対して、MをM||1||0・・・0||<M>||0に変換し、2より大きいならばqビットより長いrビットの、Mのビット長情報が入った符号語<M>に対して、MをM||1||0・・・0||<M>||1に変換することを特徴とする。
【0099】
また、上記ハッシュ関数演算装置は、“0”をパディングする個数が最小となることを特徴とする。
【0100】
実施の形態4.
本実施の形態について、主に実施の形態1から3までとの差異を説明する。
【0101】
本実施の形態に係るハッシュ値演算装置100の構成は、図1に示した実施の形態1から3までのものと同様である。
【0102】
図5は、演算部104の構成の一例を示すブロック図である。
【0103】
図5において、演算器C,・・・,Cn−1については、実施の形態1から3までと同様である。本実施の形態では、演算器Cは、演算器Cn−1から出力されたビット列Bn−1とパディング部102により生成されたビット列Mとに加えて、所定の固定値であるビット列Vの入力を受け付ける。演算器Cは、ビット列Bn−1とビット列Mとビット列Vとからなるビット列Aが入力されると、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、生成したビット列BをメッセージM´のハッシュ値H(M´)として出力部105に返す。
【0104】
上記のような構成によっても、実施の形態1から3までと同様の効果が得られる。
【0105】
実施の形態5.
本実施の形態について、主に実施の形態1から3までとの差異を説明する。
【0106】
本実施の形態に係るハッシュ値演算装置100の構成は、図1に示した実施の形態1から3までのものと同様である。
【0107】
図6は、演算部104の構成の一例を示すブロック図である。
【0108】
図6において、演算器C,・・・,Cn−1については、実施の形態1から3までと同様である。本実施の形態では、演算器Cは、演算器Cn−1から出力されたビット列Bn−1に対して1対1写像の置換πを行ってから、当該置換πの結果とパディング部102により生成されたビット列Mとを圧縮関数hに入力する。そして、演算器Cは、ビット列Bn−1の置換πの結果とビット列Mとからなるデータに対して圧縮関数hの演算を行ってビット列Bを生成し、生成したビット列BをメッセージM´のハッシュ値H(M´)として出力部105に返す。
【0109】
上記のような構成によっても、実施の形態1から3までと同様の効果が得られる。
【0110】
実施の形態6.
本実施の形態について、主に実施の形態1から3までとの差異を説明する。
【0111】
本実施の形態に係るハッシュ値演算装置100の構成は、図1に示した実施の形態1から3までのものと同様である。
【0112】
図7は、演算部104の構成の一例を示すブロック図である。
【0113】
図7において、演算部104が備えるn個の演算器C,・・・,Cは、それぞれ圧縮関数の一例としてブロック暗号Eの演算を行う回路(ハードウェアで実装される場合)、関数(ソフトウェアで実装される場合)等である(ハードウェアとソフトウェアとの組み合わせで実装されてもよい)。
【0114】
上記のような構成によっても、実施の形態1から3までと同様の効果が得られる。
【0115】
実施の形態7.
本実施の形態について、主に実施の形態6との差異を説明する。
【0116】
図8は、演算部104の構成の一例を示すブロック図である。
【0117】
図8において、それぞれの演算器C(i=1,・・・,n)は、ビット列Mを含むビット列Aの入力を受け付け、入力されたビット列Aに対してブロック暗号Eの演算を行った後、当該演算の結果とビット列Aのうちビット列M以外のデータとの排他的論理和(XOR)を演算する。そして、演算器Cは、当該XORの演算結果をビット列Bとして出力する。
【0118】
例えば、演算器Cは、所定の固定値であるIVとパディング部102により生成されたビット列Mとからなるビット列Aが入力されると、ビット列Aに対してブロック暗号Eの演算を行った後、当該演算の結果とIVとのXORを演算し、その結果をビット列Bとして出力する。演算器Cは、演算器Cから出力されたビット列Bとパディング部102により生成されたビット列Mとからなるビット列Aが入力されると、ビット列Aに対してブロック暗号Eの演算を行った後、当該演算の結果とビット列BとのXORを演算し、その結果をビット列Bとして生成する。演算器C以降については、演算器Cと同様である。
【0119】
上記のような構成によっても、実施の形態6と同様の効果が得られる。
【0120】
実施の形態8.
本実施の形態について、主に実施の形態1から3までとの差異を説明する。
【0121】
図9は、本実施の形態に係るハッシュ値演算装置100の構成を示すブロック図である。
【0122】
図9において、演算部104のn個の演算器C,・・・,Cは、並列に接続されている。
【0123】
図4を用いて、本実施の形態に係るハッシュ値演算装置100の動作(本実施の形態に係るハッシュ値演算方法、本実施の形態に係るハッシュ値演算プログラムの処理手順)を説明する。
【0124】
ステップS103(分割処理)までについては、実施の形態1から3までと同様であるため、説明を省略する。
【0125】
ステップS104(演算処理)において、演算部104は、ステップS103におけるビット列M,・・・,Mの入力を受け付ける。演算部104は、ビット列Mと予め定められた固定値であるIV(図9には示していないが、図2等と同様である)とをビット列Aとして演算器Cへ入力する。演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。演算部104は、ビット列Mと予め定められた固定値であるIV(演算器Cへ入力されるものとは異なる値でもよい)とをビット列Aとして演算器Cへ入力する。演算器Cと同様に、演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。演算部104は、ビット列Mと演算器Cから出力されたビット列Bとをビット列Aとして演算器Cへ入力する。演算器Cと同様に、演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。演算部104は、ビット列Mと演算器Cから出力されたビット列Bとをビット列Aとして演算器Cへ入力する。演算器Cと同様に、演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、出力する。これ以降、同様の演算手順が演算器Cn−1まで実行される。その後、演算部104は、ビット列Mと演算器Cn−2から出力されたビット列Bn−2と演算器Cn−1から出力されたビット列Bn−1とをビット列Aとして演算器Cへ入力する。演算器Cは、ビット列Aに対して圧縮関数hの演算を行ってビット列Bを生成し、メッセージM´のハッシュ値H(M´)として出力する。
【0126】
ステップS105(出力処理)については、実施の形態1から3までと同様であるため、説明を省略する。
【0127】
上記のような構成によっても、実施の形態1から3までと同様の効果が得られる。
【0128】
以上、本発明の実施の形態について説明したが、これらのうち、2つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、1つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、2つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【図面の簡単な説明】
【0129】
【図1】実施の形態1に係るハッシュ値演算装置の構成を示すブロック図である。
【図2】実施の形態1に係る演算部の構成の一例を示すブロック図である。
【図3】実施の形態1に係るハッシュ値演算装置のハードウェア構成の一例を示す図である。
【図4】実施の形態1に係るハッシュ値演算装置の動作を示すフローチャートである。
【図5】実施の形態4に係る演算部の構成の一例を示すブロック図である。
【図6】実施の形態5に係る演算部の構成の一例を示すブロック図である。
【図7】実施の形態6に係る演算部の構成の一例を示すブロック図である。
【図8】実施の形態7に係る演算部の構成の一例を示すブロック図である。
【図9】実施の形態8に係るハッシュ値演算装置の構成を示すブロック図である。
【符号の説明】
【0130】
100 ハッシュ値演算装置、101 入力部、102 パディング部、103 分割部、104 演算部、105 出力部、901 LCD、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 HDD、921 オペレーティングシステム、922 ウィンドウシステム、923 プログラム群、924 ファイル群。

【特許請求の範囲】
【請求項1】
少なくとも圧縮関数の演算を行うn(nはn>1となる整数)個の演算器C,・・・,Cを有し、演算器C(i=1,・・・,n)への入力として予め定められたビット長をもつビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値を、前記n個の演算器C,・・・,Cを用いて演算する演算部を具備するハッシュ値演算装置であって、
メッセージMを入力する入力部と、
nを表すビット列と所定のビットパターンとを組み合わせてビット列Pを生成し、生成したビット列Pを、前記入力部により入力されたメッセージMの所定の位置に付加して前記メッセージM´を生成するパディング部と、
前記パディング部により生成されたメッセージM´をn分割してビット列M,・・・,Mを生成し、生成したビット列M,・・・,Mを前記演算部へ入力して前記演算部に前記メッセージM´のハッシュ値を演算させる分割部と、
前記演算部により演算されたメッセージM´のハッシュ値を出力する出力部とを備えることを特徴とするハッシュ値演算装置。
【請求項2】
前記パディング部は、n≦2(qはq>0となる整数)の場合、nを表すqビットのビット列と値が0又は1であるビットDとを前記所定のビットパターンと所定の順番で連結して前記ビット列Pを生成し、n>2の場合、nを表すr(rはr>qとなる整数)ビットのビット列と値が前記ビットDと異なるビットDとを前記所定のビットパターンと前記所定の順番で連結して前記ビット列Pを生成することを特徴とする請求項1に記載のハッシュ値演算装置。
【請求項3】
前記パディング部は、nを表すq(qはq>lognとなる整数)ビットのビット列を前記所定のビットパターンと所定の順番で連結して前記ビット列Pを生成することを特徴とする請求項1に記載のハッシュ値演算装置。
【請求項4】
少なくとも圧縮関数の演算を行うn(nはn>1となる整数)個の演算器C,・・・,Cを有し、演算器C(i=1,・・・,n)への入力として予めビット長が固定されたビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値を、前記n個の演算器C,・・・,Cを用いて演算する演算部を具備するハッシュ値演算装置であって、
m(mはm>1となる整数)ビットのビット列であるメッセージMを入力する入力部と、
m≦2(qはq>0となる整数)の場合、mを表すqビットのビット列と値が0又は1であるビットDとを所定のビットパターンと所定の順番で連結してビット列Pを生成し、生成したビット列Pを、前記入力部により入力されたメッセージMの所定の位置に付加して前記メッセージM´を生成し、m>2の場合、mを表すr(rはr>qとなる整数)ビットのビット列と値が前記ビットDと異なるビットDとを前記所定のビットパターンと前記所定の順番で連結してビット列Pを生成し、生成したビット列Pを、前記入力部により入力されたメッセージMの前記所定の位置に付加して前記メッセージM´を生成するパディング部と、
前記パディング部により生成されたメッセージM´をn分割してビット列M,・・・,Mを生成し、生成したビット列M,・・・,Mを前記演算部へ入力して前記演算部に前記メッセージM´のハッシュ値を演算させる分割部と、
前記演算部により演算されたメッセージM´のハッシュ値を出力する出力部とを備えることを特徴とするハッシュ値演算装置。
【請求項5】
前記演算部の演算器C(i=1,・・・,n)は、ビット列Mを含むビット列Aの入力を受け付け、入力されたビット列Aに対して少なくとも圧縮関数の演算を行ってビット列Bを生成し、i<nの場合、生成したビット列Bを他の演算器C(jはi<j≦nとなる整数)へビット列Aの一部として入力し、
前記出力部は、前記演算部の演算器Cにより生成されたビット列Bを前記メッセージM´のハッシュ値として出力することを特徴とする請求項1から4までのいずれかに記載のハッシュ値演算装置。
【請求項6】
前記演算部のn個の演算器C,・・・,Cは、順番に直列に接続されており、
前記演算部の演算器C(i=1,・・・,n)は、i<nの場合、生成したビット列Bを他の演算器Cである演算器Ci+1へビット列Ai+1の一部として入力することを特徴とする請求項5に記載のハッシュ値演算装置。
【請求項7】
ビット列M,・・・,Mは、いずれも同じビット長をもつことを特徴とする請求項1から6までのいずれかに記載のハッシュ値演算装置。
【請求項8】
前記所定のビットパターンは、10又は01で始まることを特徴とする請求項1から7までのいずれかに記載のハッシュ値演算装置。
【請求項9】
前記演算部のn個の演算器C,・・・,Cは、圧縮関数の演算としてブロック暗号の演算を行うことを特徴とする請求項1から8までのいずれかに記載のハッシュ値演算装置。
【請求項10】
少なくとも圧縮関数の演算を行うn(nはn>1となる整数)個の演算器C,・・・,Cを有し、演算器C(i=1,・・・,n)への入力として予め定められたビット長をもつビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値を、前記n個の演算器C,・・・,Cを用いて演算する演算部を具備するハッシュ値演算装置を利用するハッシュ値演算方法であって、
前記ハッシュ値演算装置の入力部が、メッセージMを入力し、
前記ハッシュ値演算装置のパディング部が、nを表すビット列と所定のビットパターンとを組み合わせてビット列Pを生成し、生成したビット列Pを、前記入力部により入力されたメッセージMの所定の位置に付加して前記メッセージM´を生成し、
前記ハッシュ値演算装置の分割部が、前記パディング部により生成されたメッセージM´をn分割してビット列M,・・・,Mを生成し、生成したビット列M,・・・,Mを前記演算部へ入力して前記演算部に前記メッセージM´のハッシュ値を演算させ、
前記ハッシュ値演算装置の出力部が、前記演算部により演算されたメッセージM´のハッシュ値を出力することを特徴とするハッシュ値演算方法。
【請求項11】
少なくとも圧縮関数の演算を行うn(nはn>1となる整数)個の演算手順C,・・・,Cを有し、演算手順C(i=1,・・・,n)への入力として予め定められたビット長をもつビット列Mそれぞれの入力を受け付け、入力されたビット列M,・・・,MからなるメッセージM´のハッシュ値を、前記n個の演算手順C,・・・,Cを用いて演算する演算処理をCPU(Central・Processing・Unit)により実行するハッシュ値演算プログラムであって、
メッセージMを入力する入力処理と、
nを表すビット列と所定のビットパターンとを組み合わせてビット列Pを生成し、生成したビット列Pを、前記入力処理により入力されたメッセージMの所定の位置に付加して前記メッセージM´をCPUにより生成するパディング処理と、
前記パディング処理により生成されたメッセージM´をn分割してビット列M,・・・,Mを生成し、生成したビット列M,・・・,Mを前記演算処理へ入力して前記演算処理に前記メッセージM´のハッシュ値を演算させる分割処理と、
前記演算処理により演算されたメッセージM´のハッシュ値を出力する出力処理とをコンピュータに実行させることを特徴とするハッシュ値演算プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate