JP2009169316A - ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法 - Google Patents

ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法 Download PDF

Info

Publication number
JP2009169316A
JP2009169316A JP2008010014A JP2008010014A JP2009169316A JP 2009169316 A JP2009169316 A JP 2009169316A JP 2008010014 A JP2008010014 A JP 2008010014A JP 2008010014 A JP2008010014 A JP 2008010014A JP 2009169316 A JP2009169316 A JP 2009169316A
Authority
JP
Japan
Prior art keywords
parallel
bit string
serial
unit
bit
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.)
Pending
Application number
JP2008010014A
Other languages
English (en)
Inventor
Yusuke Naito
祐介 内藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2008010014A priority Critical patent/JP2009169316A/ja
Publication of JP2009169316A publication Critical patent/JP2009169316A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】SPR性あるいはpSPR性を満たす圧縮関数を用いて、eTCR性を満たすハッシュ関数を構成する。
【解決手段】並列圧縮関数演算部150及び直列圧縮関数演算部180は、圧縮関数を計算する。並列処理部130は、メッセージ入力部110が入力した入力メッセージMと、ハッシュ鍵入力部120が入力した並列ハッシュ鍵Kとに基づいて、並列圧縮関数演算部150を呼び出して、複数の圧縮ビット列hを生成する。直列処理部160は、並列処理部130が生成した複数の圧縮ビット列hと、ハッシュ鍵入力部120が入力した直列ハッシュ鍵Kとに基づいて、直列圧縮関数演算部180を呼び出して、ハッシュ値Hを算出する。
【選択図】図5

Description

この発明は、電子署名などに利用されるハッシュ関数を演算するハッシュ関数演算装置に関する。
電子署名などに利用されるハッシュ関数は、CR(Collision Resistance)性を満たすことが要求される。近年、従来使われてきたMD(Message Digest Algorithm)5やSHA(Secure Hash Algorithm)−1などのハッシュ関数は、CR性を満たさないことが判明し、CR性を満たすハッシュ関数を構成することが困難であることが認識された。
そこで、電子署名などにおいては、CR性を満たすハッシュ関数を用いる代わりに、TCR(Target Collision Resistance)性あるいはeTCR(enhanced−TCR)性を満たす鍵付きハッシュ関数を用いることが提案されている。ここで、eTCR性を満たす鍵付きハッシュ関数のほうが、TCR性を満たす鍵付きハッシュ関数よりも効率的である。
ハッシュ関数は、通常、圧縮関数を用いて構成される。
非特許文献1には、eSPR(evaluated−SPR)性を満たす圧縮関数を用いて、eTCR性を満たす鍵付きハッシュ関数を構成する方法が開示されている。
非特許文献2、非特許文献3、非特許文献4、非特許文献5には、TCR性を満たす圧縮関数を用いて、TCR性を満たす鍵付きハッシュ関数を構成する方法が開示されている。
また、非特許文献3には、SPR(Second Pre−image Resistance)性を満たす圧縮関数を用いて、TCR性を満たす鍵付きハッシュ関数を構成する方法が開示されている。
S.Halevi、H.Krawczyk「Strengthening Digital Signatures via Randomized Hashing」CRYPTO 2006、41〜59ページ。 M.Bellare、P.Rogaway「Collision−Resistant Hashing: Toward Making UWOHFs Practical」CRYPTO’97、470〜484ページ。 V.Shoup「A Composition Theorem for Universal One−Way Hash Functions」EUROCRYPT 2000、445〜452ページ。 W.Lee、D.Chang、S.Lee、S.H.Sung、M.Nandi「New Parallel Domain Extenders for UOWHF」ASIACRYPT 2003、208〜227ページ。 N.Nandi「A Sufficient Condition for Optimal Domain Extender of UOWHFs」SAC 2004、341〜354ページ。 M.Naor、M.Yung「Universal One−Way Hash Functions and their Cryptgraphic Applications」STOC’89、33−43ページ。 P.Sarkar「Masking Based Domain Extenders for UOWHFs: Bounds and Constructions」ASIACRYPT 2004、187〜200ページ。
一般に、eSPR性を満たす圧縮関数を構成することは、SPR性あるいはpSPR(partial−SPR)性を満たす圧縮関数を構成するよりも難しい。
この発明は、例えば、上記のような課題を解決するためになされたものであり、SPR性あるいはpSPR性を満たす圧縮関数を用いて、eTCR性を満たすハッシュ関数を構成することを目的とする。
この発明にかかるハッシュ関数演算装置は、
データを処理する処理装置と、並列圧縮関数演算部と、直列圧縮関数演算部と、メッセージ入力部と、並列処理部と、直列処理部と、ハッシュ値出力部とを有し、
上記並列圧縮関数演算部は、上記処理装置を用いて、aビット(ただし、aは2以上の所定の整数。)の入力ビット列を入力し、入力した入力ビット列に基づいてbビット(ただし、bは1以上a未満の所定の整数。)の並列出力ビット列を生成し、
上記直列圧縮関数演算部は、上記処理装置を用いて、aビット(ただし、aは1以上の所定の整数。)の第一ビット列を入力し、bビット(ただし、bは1以上の所定の整数。)の第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とに基づいて、上記bビットの直列出力ビット列を生成し、
上記メッセージ入力部は、上記処理装置を用いて、Lビット(ただし、Lは1以上の任意の整数。)のビット列を入力して入力メッセージMとし、
上記並列処理部は、上記処理装置を用いて、上記メッセージ入力部が入力した入力メッセージMに基づいて、上記aビットの複数の並列ビット列m”を生成し、生成した複数の並列ビット列m”それぞれを上記入力ビット列として上記並列圧縮関数演算部に入力し、上記並列圧縮関数演算部が入力した複数の並列ビット列m”それぞれに対して生成した複数の並列出力ビット列を取得して複数の圧縮ビット列hとし、
上記直列処理部は、上記処理装置を用いて、上記並列処理部が取得した複数の圧縮ビット列hに基づいて、上記aビットの複数の直列ビット列yを生成し、生成した複数の直列ビット列yのうち少なくともいずれかの直列ビット列yと、上記直列ビット列yと異なる他の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算部に入力し、上記直列圧縮関数演算部が入力した直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記直列ビット列yに基づいて生成された中間ビット列cとし、取得した中間ビット列cのうちのいずれかをハッシュ値Hとし、
上記ハッシュ値出力部は、上記処理装置を用いて、上記直列処理部が取得したハッシュ値Hを出力することを特徴とする。
この発明にかかるハッシュ関数演算装置によれば、並列圧縮関数演算部及び直列圧縮関数演算部が計算する圧縮関数がSPR性あるいはpSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
実施の形態1.
実施の形態1について、図1〜図10を用いて説明する。
ハッシュ関数演算装置100は、任意のビット数のビット列(以下「入力メッセージ」と呼ぶ。)と、所定のビット数のビット列(以下「ハッシュ鍵」と呼ぶ。)とを入力し、入力した入力メッセージとハッシュ鍵とに基づいて、所定のビット数のビット列(以下「鍵付きハッシュ値」と呼ぶ。)を算出する装置である。
ハッシュ関数演算装置100は、例えば、署名装置や署名検証装置で用いられる。この実施の形態では、ハッシュ関数演算装置100を署名装置や署名検証装置に用いる場合について説明するが、ハッシュ関数演算装置100は、署名装置や署名検証装置以外のシステムで利用してもよい。
図1は、この実施の形態における署名装置810の構成の一例を示す全体構成図である。
署名装置810は、署名対象メッセージ入力部811、ハッシュ鍵生成部812、ハッシュ関数演算装置100、署名関数演算部813、署名出力部814を有する。
署名対象メッセージ入力部811は、署名の対象であるビット列M(以下「署名対象メッセージ」と呼ぶ。)を入力する。
ハッシュ鍵生成部812は、所定のビット数のハッシュ鍵Kをランダムに生成する。
ハッシュ関数演算装置100は、署名対象メッセージ入力部811が入力した署名対象メッセージMと、ハッシュ鍵生成部812が生成したハッシュ鍵Kとに基づいて、鍵付きハッシュ値Hを算出する。
署名関数演算部813は、ハッシュ関数演算装置100が算出した鍵付きハッシュ値Hに基づいて、署名sを生成する。例えば、署名関数演算部813は、署名者の秘密鍵を用いて、鍵付きハッシュ値Hを暗号化し、署名sとする。
署名出力部814は、ハッシュ鍵生成部812が生成したハッシュ鍵Kと、署名関数演算部813が生成した署名sとを、署名対象メッセージMに対する署名として出力する。
図2は、この実施の形態における署名検証装置820の構成の一例を示す全体構成図である。
署名検証装置820は、署名対象メッセージ入力部821、署名入力部822、ハッシュ関数演算装置100、署名復号演算部823、署名比較部824を有する。
署名対象メッセージ入力部821は、署名装置810により署名を付された署名対象メッセージMを入力する。
署名入力部822は、署名装置810が署名対象メッセージMに対する署名として出力したハッシュ鍵K及び署名sを入力する。
ハッシュ関数演算装置100は、署名対象メッセージ入力部821が入力した署名対象メッセージMと署名入力部822が入力したハッシュ鍵Kとに基づいて、鍵付きハッシュ値Hを算出する。
署名復号演算部823は、署名入力部822が入力した署名sに基づいて、復号ビット列H’を生成する。例えば、署名復号演算部823は、署名装置810が用いた署名者の秘密鍵に対応する公開鍵を用いて、署名sを復号し、復号ビット列H’とする。
署名比較部824は、ハッシュ関数演算装置100が算出した鍵付きハッシュ値Hと、署名復号演算部823が生成した復号ビット列H’とを比較して、一致するか否かを判定する。鍵付きハッシュ値Hと復号ビット列H’とが一致した場合、署名比較部824は、署名が有効であると判定する。鍵付きハッシュ値Hと復号ビット列H’とが一致しない場合、署名比較部824は、署名が有効でないと判定する。署名比較部824は、判定結果を出力する。
図3は、この実施の形態における署名装置810、署名検証装置820あるいはハッシュ関数演算装置100の外観の一例を示す図である。
署名装置810、署名検証装置820あるいはハッシュ関数演算装置100は、システムユニット910、CRT(Cathode・Ray・Tube)やLCD(液晶)の表示画面を有する表示装置901、キーボード902(Key・Board:K/B)、マウス903、FDD904(Flexible・Disk・Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット910は、コンピュータであり、ファクシミリ機932、電話器931とケーブルで接続され、また、ローカルエリアネットワーク942(LAN)、ゲートウェイ941を介してインターネット940に接続されている。
図4は、この実施の形態における署名装置810、署名検証装置820あるいはハッシュ関数演算装置100のハードウェア資源の一例を示す図である。
署名装置810、署名検証装置820あるいはハッシュ関数演算装置100は、プログラムを実行するCPU911(Central・Processing・Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。CPU911は、バス912を介してROM913、RAM914、通信装置915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、スキャナ装置907、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信装置915、キーボード902、スキャナ装置907、FDD904などは、入力部、入力装置の一例である。
また、通信装置915、表示装置901、プリンタ装置906などは、出力部、出力装置の一例である。
通信装置915は、ファクシミリ機932、電話器931、LAN942等に接続されている。通信装置915は、LAN942に限らず、インターネット940、ISDN等のWAN(ワイドエリアネットワーク)などに接続されていても構わない。インターネット940或いはISDN等のWANに接続されている場合、ゲートウェイ941は不用となる。
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
図5は、この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成の一例を示すブロック構成図である。
ハッシュ関数演算装置100は、メッセージ入力部110、ハッシュ鍵入力部120、並列処理部130、並列圧縮関数演算部150、直列処理部160、直列圧縮関数演算部180、ハッシュ値出力部190を有する。
並列圧縮関数演算部150は、CPU911を用いて、並列処理部130から呼び出されて、圧縮関数を計算する。
並列圧縮関数演算部150は、CPU911を用いて、aビット(ただし、aは2以上の所定の整数。)のビット列(以下「入力ビット列」と呼ぶ。)を入力し、入力した入力ビット列に基づいて、bビット(ただし、b1は1以上の所定の整数。)のビット列(以下「並列出力ビット列」と呼ぶ。)を生成する。並列圧縮関数演算部150は、CPU911を用いて、所定の圧縮関数により、入力ビット列を圧縮して並列出力ビット列を生成する。並列圧縮関数演算部150は、CPU911を用いて、生成した並列出力ビット列を出力する。
直列圧縮関数演算部180は、CPU911を用いて、直列処理部160から呼び出されて、圧縮関数を計算する。
直列圧縮関数演算部180は、CPU911を用いて、aビット(ただし、aは1以上の所定の整数。)のビット列(以下「第一ビット列」と呼ぶ。)と、bビット(ただし、bは1以上の所定の整数。)を入力し、入力した第一ビット列と入力した第二ビット列とに基づいて、bビットのビット列(以下「直列出力ビット列」と呼ぶ。)を生成する。直列圧縮関数演算部180は、CPU911を用いて、第一ビット列と第二ビット列とを結合してa+bビットのビット列(以下「第三ビット列」と呼ぶ。)を生成し、所定の圧縮関数により、生成した第三ビット列を圧縮して直列出力ビット列を生成する。直列圧縮関数演算部180は、CPU911を用いて、生成した直列出力ビット列を出力する。
ここで、並列圧縮関数演算部150が使用する所定の圧縮関数と、直列圧縮関数演算部180が使用する所定の圧縮関数は、同じであってもよいし、異なっていてもよい。二つの圧縮関数が同じである場合、直列圧縮関数演算部180は、並列圧縮関数演算部150を呼び出すことにより、直列出力ビット列を生成してもよい。すなわち、直列圧縮関数演算部180は、CPU911を用いて、生成した第三ビット列を並列圧縮関数演算部150に入力し、並列圧縮関数演算部150が入力した第三ビット列に対して出力した並列出力ビット列を取得して、直列出力ビット列としてもよい。
メッセージ入力部110は、CPU911を用いて、入力メッセージMを入力する。メッセージ入力部110は、RAM914を用いて、入力した入力メッセージMを記憶する。
ハッシュ鍵入力部120は、CPU911を用いて、a+a−kビット(ただし、kは1以上a未満の所定の整数。)のハッシュ鍵Kを入力する。ハッシュ鍵入力部120が入力するハッシュ鍵Kは、a−kビットのビット列K(以下「並列ハッシュ鍵」と呼ぶ。)と、aビットのビット列K(以下「直列ハッシュ鍵」)とが結合したビット列である。ハッシュ鍵入力部120は、CPU911を用いて、並列ハッシュ鍵Kと直列ハッシュ鍵Kとを入力する。ハッシュ鍵入力部120は、RAM914を用いて、入力した並列ハッシュ鍵K及び直列ハッシュ鍵Kを記憶する。
並列処理部130は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMと、ハッシュ鍵入力部120が記憶した並列ハッシュ鍵Kとを入力する。並列処理部130は、入力した入力メッセージMと並列ハッシュ鍵Kとに基づいて、複数の圧縮ビット列h(ただし、iは1以上n以下の整数。nは並列処理部130が生成する圧縮ビット列の数。)を生成する。並列処理部130は、CPU911を用いて、入力メッセージM及び並列ハッシュ鍵Kから並列圧縮関数演算部150に入力する入力ビット列を生成し、生成した入力ビット列を並列圧縮関数演算部150に入力する。並列処理部130は、CPU911を用いて、入力した入力ビット列に対して並列圧縮関数演算部150が出力した並列出力ビット列を取得する。並列処理部130は、CPU911を用いて、取得した並列出力ビット列に基づいて、n個の圧縮ビット列hを生成する。並列処理部130は、RAM914を用いて、生成したn個の圧縮ビット列hを記憶する。
直列処理部160は、CPU911を用いて、並列処理部130が記憶したn個の圧縮ビット列hと、ハッシュ鍵入力部120が記憶した直列ハッシュ鍵Kとを入力する。直列処理部160は、CPU911を用いて、入力したn個の圧縮ビット列hと直列ハッシュ鍵Kとに基づいて、ハッシュ値Hを生成する。直列処理部160は、CPU911を用いて、圧縮ビット列h及び直列ハッシュ鍵Kから直列圧縮関数演算部180に入力する第一ビット列及び第二ビット列を生成し、生成した第一ビット列及び第二ビット列を直列圧縮関数演算部180に入力する。直列処理部160は、CPU911を用いて、入力した第一ビット列及び第二ビット列に対して直列圧縮関数演算部180が出力した直列出力ビット列を取得する。直列処理部160は、CPU911を用いて、取得した直列出力ビット列に基づいて、ハッシュ値Hを生成する。直列処理部160は、RAM914を用いて、生成したハッシュ値Hを記憶する。
ハッシュ値出力部190は、CPU911を用いて、直列処理部160が記憶したハッシュ値Hを入力する。ハッシュ値出力部190は、CPU911を用いて、入力したハッシュ値Hを出力する。
図6は、この実施の形態における並列処理部130の内部ブロックの構成の一例を示す詳細ブロック構成図である。
並列処理部130は、並列詰め物生成部131、並列詰め物結合部132、並列分割部134、並列生成部135、並列圧縮部136を有する。
また、ハッシュ鍵入力部120は、並列ハッシュ鍵入力部121を有する。
また、ハッシュ関数演算装置100は、並列固定記憶部143を有する。
並列ハッシュ鍵入力部121は、CPU911を用いて、並列ハッシュ鍵Kを入力する。並列ハッシュ鍵入力部121は、RAM914を用いて、入力した並列ハッシュ鍵Kを記憶する。
並列固定記憶部143は、ROM913を用いて、kビットのビット列F(以下「並列固定ビット列」と呼ぶ。)をあらかじめ記憶している。並列固定ビット列Fは、あらかじめ定められた所定のビット列である。並列固定ビット列Fは、例えば、1ビットのビット列であり、「1」もしくは「0」である。
並列詰め物生成部131は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMを入力する。並列詰め物生成部131は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。並列詰め物生成部131は、CPU911を用いて、算出したビット数Lに基づいて、以下の条件を満たす整数nを算出する。並列詰め物生成部131は、CPU911を用いて、整数nがa−kより大きく、かつ、整数nとビット数Lとの和n+Lがa−kの整数倍となる整数nのうち、最小の整数nを算出する。なお、aは、並列圧縮関数演算部150が入力する入力ビット列のビット数である。
並列詰め物生成部131は、CPU911を用いて、算出した整数nに基づいて、nビットのビット列P(以下「並列詰め物」と呼ぶ。)を生成する。例えば、並列詰め物生成部131は、CPU911を用いて、最初のビットを「1」、残りのビットを「0」にした並列詰め物Pを生成する。
なお、並列詰め物生成部131が生成する並列詰め物Pは、最後からa−kビットが「0」であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
並列詰め物生成部131は、RAM914を用いて、生成した並列詰め物Pを記憶する。
並列詰め物結合部132は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMと、並列詰め物生成部131が記憶した並列詰め物Pとを入力する。並列詰め物結合部132は、入力した入力メッセージMと並列詰め物Pとに基づいて、入力メッセージMと並列詰め物Pとを結合したビット列(以下「並列結合ビット列M」と呼ぶ。)を生成する。例えば、並列詰め物結合部132は、CPU911を用いて、入力メッセージMの後に、並列詰め物Pを結合して、並列結合ビット列Mを生成する。並列詰め物結合部132は、RAM914を用いて、生成した並列結合ビット列Mを記憶する。
並列分割部134は、CPU911を用いて、並列詰め物結合部132が記憶した並列結合ビット列Mを入力する。並列分割部134は、CPU911を用いて、入力した並列結合ビット列Mに基づいて、並列結合ビット列Mをa−kビットごとに分割した複数のビット列m(以下「並列分割ビット列」と呼ぶ。)(ただし、iは1以上n以下の整数。nは並列分割ビット列mの数。)を生成する。並列分割部134は、RAM914を用いて、生成したn個の並列分割ビット列mを記憶する。
並列生成部135は、CPU911を用いて、並列ハッシュ鍵入力部121が記憶した並列ハッシュ鍵Kと、並列固定記憶部143が記憶した並列固定ビット列Fと、並列分割部134が記憶したn個の並列分割ビット列mとを入力する。並列生成部135は、CPU911を用いて、入力した並列ハッシュ鍵Kとn個の並列分割ビット列mとに基づいて、並列ハッシュ鍵Kとn個の並列分割ビット列mそれぞれとの間のビットごとの排他的論理和を取り、n個のビット列m’(以下「並列撹乱ビット列」と呼ぶ。)(ただし、iは1以上n以下の整数。)を生成する。ここで、並列ハッシュ鍵K及びn個の並列分割ビット列mは、それぞれa−kビットのビット列であり、並列生成部135が生成するn個の並列撹乱ビット列m’も同じく、a−kビットのビット列である。
並列生成部135は、CPU911を用いて、生成したn個の並列撹乱ビット列m’と、入力した並列固定ビット列Fとに基づいて、n個の並列撹乱ビット列m’それぞれと並列固定ビット列Fとを結合したn個のビット列m”(以下「並列ビット列」と呼ぶ。)(ただし、iは1以上n以下の整数。)を生成する。例えば、並列生成部135は、CPU911を用いて、n個の並列撹乱ビット列m’それぞれの後に、並列固定ビット列Fを結合して、n個の並列ビット列m”を生成する。並列生成部135が生成するn個の並列ビット列m”のビット数は、aビットである。
並列生成部135は、RAM914を用いて、生成したn個の並列ビット列m”を記憶する。
並列圧縮部136は、CPU911を用いて、並列生成部135が記憶したn個の並列ビット列m”を入力する。並列圧縮部136は、CPU911を用いて、入力したn個の並列ビット列m”に基づいて、n個の並列ビット列m”それぞれを入力ビット列として並列圧縮関数演算部150に入力する。並列圧縮部136は、CPU911を用いて、入力したn個の並列ビット列m”に対して並列圧縮関数演算部150が出力したn個の並列出力ビット列を取得して、n個の圧縮ビット列h(ただし、iは1以上n以下の整数。)とする。ここで、並列圧縮部136が取得するn個の圧縮ビット列hは、それぞれbビットのビット列である。並列圧縮部136は、RAM914を用いて、取得したn個の圧縮ビット列hを記憶する。
図7は、この実施の形態における直列処理部160の内部ブロックの一例を示す詳細ブロック構成図である。
直列処理部160は、直列詰め物生成部161、直列詰め物結合部162、直列分割部163、直列圧縮部166を有する。
また、ハッシュ鍵入力部120は、直列ハッシュ鍵入力部122を有する。
また、ハッシュ関数演算装置100は、直列初期値記憶部142を有する。
直列ハッシュ鍵入力部122は、CPU911を用いて、直列ハッシュ鍵Kを入力する。直列ハッシュ鍵入力部122は、RAM914を用いて、入力した直列ハッシュ鍵Kを記憶する。
直列初期値記憶部142は、ROM913を用いて、bビットのビット列IV(以下「直列初期値ビット列」と呼ぶ。)をあらかじめ記憶している。直列初期値ビット列IVは、あらかじめ定められた所定のビット列である。
直列詰め物生成部161は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMと、並列圧縮部136が記憶した圧縮ビット列hの数nとを入力する。直列詰め物生成部161は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。なお、直列詰め物生成部161は、入力メッセージMのビット数Lを算出する代わりに、並列詰め物生成部131が算出した入力メッセージMのビット数Lを取得してもよい。
直列詰め物生成部161は、CPU911を用いて、入力した圧縮ビット列hの数nに基づいて、n個の圧縮ビット列hのビット数を合計した整数Lを算出する。すなわち、直列詰め物生成部161は、CPU911を用いて、圧縮ビット列hのビット数bと圧縮ビット列hの数nとの積を算出して、整数Lとする。
直列詰め物生成部161は、CPU911を用いて、算出した整数Lに基づいて、以下の条件を満たす整数nを算出する。直列詰め物生成部161は、CPU911を用いて、整数nがa+eより大きく、かつ、整数nと整数Lとの和n+Lがaの整数倍となる整数nのうち、最小の整数nを算出する。なお、aは、直列圧縮関数演算部180が入力する第一ビット列のビット数である。また、eは、1以上の所定の整数であり、例えば、64である。
直列詰め物生成部161は、CPU911を用いて、算出した整数nに基づいて、nビットのビット列P(以下「直列詰め物」と呼ぶ。)を生成する。例えば、直列詰め物生成部161は、CPU911を用いて、aビットのビット列(以下「直列第一詰め物ビット列」と呼ぶ。)と、n−aビットのビット列(以下「直列第二詰め物ビット列」と呼ぶ。)とからなる直列詰め物Pを生成する。直列詰め物生成部161は、CPU911を用いて、直列第一詰め物ビット列として、すべてのビットが「0」であるビット列を生成する。直列詰め物生成部161は、CPU911を用いて、直列第二詰め物ビット列として、最初のビットを「1」、残りのビットを、入力メッセージMのビット数Lを二進数で表現したビット列としたビット列を生成する。ここで、直列詰め物生成部161が整数nを算出する際の条件より、直列第二詰め物ビット列は、eビットより長い。
なお、直列詰め物生成部161が生成する直列第二詰め物ビット列は、最後からeビットが入力メッセージMのビット数Lを表わす二進数であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
直列詰め物生成部161は、RAM914を用いて、生成した直列第一詰め物ビット列と直列第二詰め物ビット列とを記憶する。
直列詰め物結合部162は、CPU911を用いて、並列圧縮部136が記憶したn個の圧縮ビット列hと、直列詰め物生成部161が生成した直列第一詰め物ビット列及び直列第二詰め物ビット列とを入力する。直列詰め物結合部162は、CPU911を用いて、入力したn個の圧縮ビット列hと直列第一詰め物ビット列と直列第二詰め物ビット列とに基づいて、直列第一詰め物ビット列と、n個の圧縮ビット列hと、直列第二詰め物ビット列とをすべて結合したビット列(以下「直列結合ビット列H」と呼ぶ。)を生成する。例えば、直列詰め物結合部162は、CPU911を用いて、直列第一詰め物ビット列の後に、n個の圧縮ビット列hを順番に結合し、更にその後に、直列第二詰め物ビット列を結合して、直列結合ビット列Hを生成する。直列詰め物結合部162は、RAM914を用いて、生成した直列結合ビット列Hを記憶する。
直列分割部163は、分割部164、直列生成部165を有する。
分割部164は、CPU911を用いて、直列詰め物結合部162が記憶した直列結合ビット列Hを入力する。分割部164は、CPU911を用いて、入力した直列結合ビット列Hに基づいて、直列結合ビット列Hをaビットごとに分割した複数のビット列x(以下「直列分割ビット列」と呼ぶ。)(ただし、iは1以上s以下の整数。sは直列分割ビット列の数。)を生成する。分割部164は、RAM914を用いて、生成したs個の直列分割ビット列xを記憶する。
直列生成部165は、CPU911を用いて、直列ハッシュ鍵入力部122が記憶した直列ハッシュ鍵Kと、分割部164が記憶したs個の直列分割ビット列xとを入力する。直列生成部165は、CPU911を用いて、入力した直列ハッシュ鍵Kとs個の直列分割ビット列xとに基づいて、直列ハッシュ鍵Kとs個の直列分割ビット列xそれぞれとの間の排他的論理和を取り、s個のビット列y(以下「直列ビット列」と呼ぶ。)(ただし、iは1以上s以下の整数。)を生成する。ここで、直列ハッシュ鍵K及びs個の直列分割ビット列xは、それぞれaビットのビット列であり、直列生成部165が生成するs個の直列ビット列yも同じく、aビットのビット列である。
直列生成部165は、RAM914を用いて、生成したs個の直列ビット列yを記憶する。
直列圧縮部166は、CPU911を用いて、直列初期値記憶部142が記憶した直列初期値ビット列IVと、直列生成部165が記憶したs個の直列ビット列yとを入力する。直列圧縮部166は、CPU911を用いて、入力した直列初期値ビット列IVとs個の直列ビット列yとに基づいて、鍵付きハッシュ値Hを算出する。
まず、直列圧縮部166は、CPU911を用いて、s個の直列ビット列yのうち最初の直列ビット列yを第一ビット列として直列圧縮関数演算部180に入力し、直列初期値ビット列IVを第二ビット列として直列圧縮関数演算部180に入力する。直列圧縮部166は、CPU911を用いて、入力した直列ビット列y及び直列初期値ビット列IVに対して直列圧縮関数演算部180が出力した直列出力ビット列を取得して、最初の中間ビット列cとする。
次に、直列圧縮部166は、CPU911を用いて、s個の直列ビット列yのうち2番目の直列ビット列yを第一ビット列として直列圧縮関数演算部180に入力し、取得した最初の中間ビット列cを第二ビット列として直列圧縮関数演算部180に入力する。直列圧縮部166は、CPU911を用いて、入力した直列ビット列y及び中間ビット列cに対して直列圧縮関数演算部180が出力した直列出力ビット列を取得して、2番目の中間ビット列cとする。
以下、これを繰り返す。すなわち、直列圧縮部166は、CPU911を用いて、i番目の直列ビット列yを第一ビット列として直列圧縮関数演算部180に入力し、i−1番目の中間ビット列ci−1を第二ビット列として直列圧縮関数演算部180に入力する。直列圧縮部166は、CPU911を用いて、入力した直列ビット列y及び中間ビット列ci−1に対して直列圧縮関数演算部180が出力した直列出力ビット列を取得して、i番目の中間ビット列cとする。
s番目の中間ビット列cを取得した場合、直列圧縮部166は、RAM914を用いて、取得したs番目の中間ビット列cを、鍵付きハッシュ値Hとして記憶する。
次に、動作について説明する。
図8は、この実施の形態におけるハッシュ関数演算装置100が鍵付きハッシュ値を算出するハッシュ関数演算処理の流れの一例を示すフローチャート図である。
ハッシュ関数演算処理は、メッセージ入力工程S710、ハッシュ鍵入力工程S720、並列処理工程S730、直列処理工程S760、ハッシュ値出力工程S790を有する。
メッセージ入力工程S710において、メッセージ入力部110は、CPU911を用いて、入力メッセージMを入力する。
ハッシュ鍵入力工程S720において、ハッシュ鍵入力部120は、CPU911を用いて、ハッシュ鍵K(並列ハッシュ鍵K及び直列ハッシュ鍵K)を入力する。
並列処理工程S730において、並列処理部130は、CPU911を用いて、メッセージ入力工程S710でメッセージ入力部110が入力した入力メッセージMと、ハッシュ鍵入力工程S720でハッシュ鍵入力部120が入力した並列ハッシュ鍵Kとに基づいて、n個の圧縮ビット列hを生成する。
直列処理工程S760において、直列処理部160は、CPU911を用いて、並列処理工程S730で並列処理部130が生成したn個の圧縮ビット列hと、ハッシュ鍵入力工程S720でハッシュ鍵入力部120が入力した直列ハッシュ鍵Kとに基づいて、鍵付きハッシュ値Hを生成する。
ハッシュ値出力工程S790において、ハッシュ値出力部190は、CPU911を用いて、直列処理工程S760で直列処理部160が生成した鍵付きハッシュ値Hを出力する。
図9は、この実施の形態における並列処理部130が並列処理をする並列処理工程S730の流れの一例を示すフローチャート図である。
並列処理工程S730は、並列詰め物生成工程S731、並列詰め物結合工程S732、並列分割工程S734、並列生成工程S735、並列圧縮工程S736を有する。
並列詰め物生成工程S731において、並列詰め物生成部131は、CPU911を用いて、メッセージ入力工程S710でメッセージ入力部110が入力した入力メッセージMに基づいて、並列詰め物Pを生成する。
並列詰め物結合工程S732において、並列詰め物結合部132は、CPU911を用いて、メッセージ入力工程S710でメッセージ入力部110が入力した入力メッセージMと、並列詰め物生成工程S731で並列詰め物生成部131が生成した並列詰め物Pとに基づいて、並列結合ビット列Mを生成する。
次に、並列処理部130は、CPU911を用いて、並列分割工程S734〜並列圧縮工程S736をn回繰り返す。なお、この段落において、iは何回目の繰り返しであるかを示す1以上n以下の整数を表わす。
並列分割工程S734において、並列分割部134は、CPU911を用いて、並列詰め物結合工程S732で並列詰め物結合部132が生成した並列結合ビット列Mに基づいて、i番目の並列分割ビット列mを生成する。
並列生成工程S735において、並列生成部135は、CPU911を用いて、並列分割工程S734で並列分割部134が生成したi番目の並列分割ビット列mと、ハッシュ鍵入力工程S720でハッシュ鍵入力部120が入力した並列ハッシュ鍵Kと、並列固定記憶部143があらかじめ記憶した並列固定ビット列Fとに基づいて、i番目の並列ビット列m”を生成する。
並列圧縮工程S736において、並列圧縮部136は、CPU911を用いて、並列生成工程S735で並列生成部135が生成したi番目の並列ビット列m”に基づいて、並列圧縮関数演算部150を呼び出し、i番目の圧縮ビット列hを生成する。
図10は、この実施の形態における直列処理部160が直列処理をする直列処理工程S760の流れの一例を示すフローチャート図である。
直列処理工程S760は、直列詰め物生成工程S761、直列詰め物結合工程S762、直列分割工程S764、直列生成工程S765、直列圧縮工程S766を有する。
直列詰め物生成工程S761において、直列詰め物生成部161は、CPU911を用いて、メッセージ入力工程S710でメッセージ入力部110が入力した入力メッセージMに基づいて、直列詰め物P(直列第一詰め物ビット列及び直列第二詰め物ビット列)を生成する。
直列詰め物結合工程S762において、直列詰め物結合部162は、CPU911を用いて、n回の並列圧縮工程S736で並列圧縮部136が生成したn個の圧縮ビット列hと、直列詰め物生成工程S761で直列詰め物生成部161が生成した直列詰め物Pとに基づいて、直列結合ビット列Hを生成する。
次に、直列処理部160は、CPU911を用いて、直列分割工程S764〜直列圧縮工程S766をs回繰り返す。なお、この段落において、iは何回目の繰り返しであるかを示す1以上s以下の整数を表わす。
直列分割工程S764において、分割部164は、CPU911を用いて、直列詰め物結合工程S762で直列詰め物結合部162が生成した直列結合ビット列Hに基づいて、i番目の直列分割ビット列xを生成する。
直列生成工程S765において、直列生成部165は、CPU911を用いて、分割工程S764で分割部164が生成したi番目の直列分割ビット列xと、ハッシュ鍵入力工程S720でハッシュ鍵入力部120が入力した直列ハッシュ鍵Kとに基づいて、i番目の直列ビット列yを生成する。
直列圧縮工程S766において、直列圧縮部166は、CPU911を用いて、直列生成工程S765で直列生成部165が生成したi番目の直列ビット列yと、前回の直列圧縮工程S766で直列圧縮部166が生成したi−1番目の中間ビット列ci−1とに基づいて、直列圧縮関数演算部180を呼び出し、i番目の中間ビット列cを生成する。なお、1回目の直列圧縮工程S766において、直列圧縮部166は、CPU911を用いて、中間ビット列cの代わりとして、直列初期値記憶部142があらかじめ記憶した直列初期値ビット列IVを使用する。また、s回目の直列圧縮工程S766において、直列圧縮部166は、RAM914を用いて、生成した中間ビット列cを鍵付きハッシュ値Hとして記憶する。
ハッシュ関数演算装置100は、以上のようにして、鍵付きハッシュ値Hを算出する。
証明は省略するが、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす場合、ハッシュ関数演算装置100が計算するハッシュ関数はeTCR性を満たす。
したがって、構成するのが難しいeSPR性を満たす圧縮関数を構成する必要はなく、並列圧縮関数演算部150及び直列圧縮関数演算部180が、比較的容易に構成できるSPR性を満たす圧縮関数を計算するよう構成すれば、eTCR性を満たすハッシュ関数を計算するハッシュ関数演算装置100を構成できる。このため、ハッシュ関数演算装置100が算出したハッシュ値を用いて、攻撃に対する耐性が強く安全な電子署名システムを構築することができる。
なお、圧縮関数のSPR性とは、以下のように定義される。
圧縮関数が入力するビット列のビット数をa、出力するビット列のビット数をbとし、bビットのビット列cとa−bビットのビット列mとを結合したビット列を入力した場合に、圧縮関数が出力するビット列をh(c,m)とする。
攻撃者には、bビットのランダムなビット列cと、a−bビットのランダムなビット列mとが与えられる。攻撃者は、h(c,m)=h(c’,m’)となるbビットのビット列c’とa−bビットのビット列m’との組(ただし、c≠cまたはm≠m’。)を見つけようとする。総当り攻撃よりも速くビット列c’とビット列m’との組を見つけることができる攻撃者が存在しない場合に、その圧縮関数はSPR性を満たす。
また、ハッシュ関数のeTCR性とは、以下のように定義される。
ハッシュ関数が入力するビット列をM、ハッシュ鍵をkとした場合に、ハッシュ関数が出力するビット列をH(M)とする。
攻撃者は、自由にビット列Mを決定する。その後、攻撃者には、ランダムなハッシュ鍵kが与えられる。攻撃者は、H(M)=Hk’(M’)となるビット列M’とハッシュ鍵k’との組(ただし、M≠M’またはk≠k’。)を見つけようとする。総当り攻撃よりも速くビット列M’とハッシュ鍵k’との組を見つけることができる攻撃者が存在しない場合に、そのハッシュ関数はeTCR性を満たす。
この実施の形態におけるハッシュ関数演算装置100は、データを処理する処理装置(CPU911)と、並列圧縮関数演算部150と、直列圧縮関数演算部180と、メッセージ入力部110と、並列処理部130と、直列処理部160と、ハッシュ値出力部190とを有する。
上記並列圧縮関数演算部150は、上記処理装置(CPU911)を用いて、aビット(ただし、aは2以上の所定の整数。)の入力ビット列を入力し、入力した入力ビット列に基づいてbビット(ただし、bは1以上a未満の所定の整数。)の並列出力ビット列を生成する。
上記直列圧縮関数演算部180は、上記処理装置(CPU911)を用いて、aビット(ただし、aは1以上の所定の整数。)の第一ビット列を入力し、bビット(ただし、bは1以上の所定の整数。)の第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とに基づいて、上記bビットの直列出力ビット列を生成する。
上記メッセージ入力部110は、上記処理装置(CPU911)を用いて、Lビット(ただし、Lは1以上の任意の整数。)のビット列を入力して入力メッセージMとする。
上記並列処理部130は、上記処理装置(CPU911)を用いて、上記メッセージ入力部110が入力した入力メッセージMに基づいて、上記aビットの複数の並列ビット列m”を生成し、生成した複数の並列ビット列m”それぞれを上記入力ビット列として上記並列圧縮関数演算部150に入力し、上記並列圧縮関数演算部150が入力した複数の並列ビット列m”それぞれに対して生成した複数の並列出力ビット列を取得して複数の圧縮ビット列hとする。
上記直列処理部160は、上記処理装置(CPU911)を用いて、上記並列処理部130が取得した複数の圧縮ビット列hに基づいて、上記aビットの複数の直列ビット列yを生成し、生成した複数の直列ビット列yのうち少なくともいずれかの直列ビット列yと、上記直列ビット列yと異なる他の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算部180に入力し、上記直列圧縮関数演算部180が入力した直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記直列ビット列yに基づいて生成された中間ビット列cとし、取得した中間ビット列cのうちのいずれかをハッシュ値Hとする。
上記ハッシュ値出力部190は、上記処理装置(CPU911)を用いて、上記直列処理部160が取得したハッシュ値Hを出力する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態におけるハッシュ関数演算装置100は、更に、データを記憶する記憶装置(ROM913)と、直列初期値記憶部142とを有する。
上記直列初期値記憶部142は、上記記憶装置(ROM913)を用いて、上記bビットのビット列を直列初期ビット列IVとして記憶する。
上記直列処理部160は、上記処理装置(CPU911)を用いて、生成した複数の直列ビット列yのうち最初の直列ビット列yと、上記直列初期値記憶部142が記憶した直列初期ビット列IVとに基づいて、上記最初の直列ビット列yを上記第一ビット列とし上記直列初期ビット列IVを上記第二ビット列として上記直列圧縮関数演算部180に入力し、上記直列圧縮関数演算部180が入力した最初の直列ビット列y及び直列初期ビット列IVに対して生成した直列出力ビット列を取得して上記最初の直列ビット列yに基づいて生成された中間ビット列cとし、生成した複数の直列ビット列yのうち最初以外の直列ビット列yと、上記最初以外の直列ビット列yより一つ前の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記最初以外の直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算部180に入力し、上記直列圧縮関数演算部180が入力した最初以外の直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記最初以外の直列ビット列yに基づいて生成された中間ビット列cとし、上記複数の直列ビット列yのうち最後の直列ビット列yに基づいて生成された中間ビット列cをハッシュ値Hとする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における並列処理部130は、並列詰め物生成部131と、並列詰め物結合部132と、並列分割部134と、並列生成部135とを有する。
上記並列詰め物生成部131は、上記処理装置(CPU911)を用いて、上記メッセージ入力部110が入力した入力メッセージMに基づいて、nビット(ただし、nは1以上の整数で、n+Lが整数dの整数倍。Lは上記入力メッセージMのビット数。上記整数dは1以上の所定の整数。)のビット列を生成して並列詰め物Pとする。
上記並列詰め物結合部132は、上記処理装置(CPU911)を用いて、上記メッセージ入力部110が入力した入力メッセージMと、上記並列詰め物生成部131が生成した並列詰め物Pとに基づいて、上記入力メッセージMと上記並列詰め物Pとを結合したビット列を生成して並列結合ビット列Mとする。
上記並列分割部134は、上記処理装置(CPU911)を用いて、上記並列詰め物結合部132が生成した並列結合ビット列Mに基づいて、上記並列結合ビット列Mを上記dビットごとに分割した複数のビット列を生成して複数の並列分割ビット列mとする。
上記並列生成部135は、上記処理装置(CPU911)を用いて、上記並列分割部134が生成した複数の並列分割ビット列mそれぞれに基づいて、上記複数の並列ビット列m”を生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態におけるハッシュ関数演算装置100は、更に、並列ハッシュ鍵入力部121を有する。
上記並列ハッシュ鍵入力部121は、上記処理装置(CPU911)を用いて、上記dビットのビット列を入力して並列ハッシュ鍵Kとする。
上記並列生成部135は、上記処理装置(CPU911)を用いて、上記並列ハッシュ鍵入力部121が入力した並列ハッシュ鍵Kと、上記並列分割部134が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記複数の並列ビット列m”を生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における並列生成部135は、上記処理装置(CPU911)を用いて、上記並列ハッシュ鍵入力部121が入力したハッシュ鍵Kと、上記並列分割部134が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記ハッシュ鍵Kと上記並列分割ビット列mとの排他的論理和をそれぞれ算出して複数の並列撹乱ビット列m’とし、算出した複数の並列撹乱ビット列m’それぞれに基づいて、上記複数の並列撹乱ビット列m’と所定の並列固定ビット列とを結合したビット列をそれぞれ生成して上記複数の並列ビット列m”とする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における並列生成部135は、上記処理装置(CPU911)を用いて、上記複数の並列撹乱ビット列m’と1ビットの並列固定ビット列とを結合したビット列をそれぞれ生成して上記複数の並列ビット列m”とする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における並列詰め物生成部131は、上記処理装置(CPU911)を用いて、上記d個の連続した「0」を含む並列詰め物Pを生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列処理部160は、直列詰め物生成部161と、直列詰め物結合部162と、直列分割部163とを有する。
上記直列詰め物生成部161は、上記処理装置(CPU911)を用いて、上記メッセージ入力部110が入力した入力メッセージMに基づいて、nビット(ただし、nは1以上の整数で、n+Lが整数dの整数倍。Lは上記複数の圧縮ビット列hのビット数を合計した整数。上記整数dは1以上の所定の整数。)のビット列を生成して直列詰め物Pとする。
上記直列詰め物結合部162は、上記処理装置(CPU911)を用いて、上記並列処理部130が取得した複数の圧縮ビット列hと、上記直列詰め物生成部161が生成した直列詰め物Pとに基づいて、上記複数の圧縮ビット列hと上記直列詰め物Pとを結合したビット列を生成して直列結合ビット列Hとする。
上記直列分割部163は、上記処理装置(CPU911)を用いて、上記直列詰め物結合部162が生成した直列結合ビット列Hに基づいて、上記複数の直列ビット列yを生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態におけるハッシュ関数演算装置100は、更に、直列ハッシュ鍵入力部122を有する。
上記直列ハッシュ鍵入力部122は、上記処理装置(CPU911)を用いて、上記dビットのビット列を入力して直列ハッシュ鍵Kとする。
上記直列分割部163は、上記処理装置(CPU911)を用いて、上記直列詰め物結合部162が生成した直列結合ビット列Hに基づいて、上記直列結合ビット列Hを上記dビットごとに分割した複数のビット列を生成して複数の直列分割ビット列xとし、上記直列ハッシュ鍵入力部122が入力した直列ハッシュ鍵Kと、生成した複数の直列分割ビット列xそれぞれとに基づいて、上記複数の直列ビット列yを生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列分割部163は、上記処理装置(CPU911)を用いて、上記直列ハッシュ鍵入力部122が入力したハッシュ鍵Kと、生成した複数の直列分割ビット列xそれぞれとに基づいて、上記ハッシュ鍵Kと上記直列分割ビット列xとの排他的論理和をそれぞれ算出して複数の直列ビット列yとする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列詰め物生成部161は、上記処理装置(CPU911)を用いて、上記d個の連続した「0」を含む直列詰め物Pを生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列詰め物生成部161は、上記処理装置(CPU911)を用いて、上記d個の連続した「0」を含む直列第一詰め物ビット列と、上記入力メッセージMのビット数Lをeビット(ただし、eは1以上の所定の整数。)の二進数で表現したビット列を含む直列第二詰め物ビット列とからなる直列詰め物Pを生成する。
上記直列詰め物結合部162は、上記処理装置(CPU911)を用いて、上記並列処理部130が取得した複数の圧縮ビット列hと、上記直列詰め物生成部161が生成した直列詰め物Pに含まれる直列第一詰め物ビット列及び直列第二詰め物ビット列とに基づいて、上記直列第一詰め物ビット列と上記複数の圧縮ビット列hと上記直列第二詰め物ビット列とを結合したビット列を生成して直列結合ビット列Hとする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列圧縮関数演算部180は、上記処理装置(CPU911)を用いて、aビット(ただし、a=a−b。)の第一ビット列を入力し、bビットの第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とを結合したビット列を生成して第三ビット列とし、生成した第三ビット列を上記入力ビット列として上記並列圧縮関数演算部150に入力し、上記並列圧縮関数演算部150が入力した第三ビット列に対して出力した並列出力ビット列を取得して上記直列出力ビット列とする。
この実施の形態におけるハッシュ関数演算装置100によれば、圧縮関数を計算する演算部が一つで済むので、ハッシュ関数演算装置100を論理回路を用いて実現する場合には、回路が小さくなり、ハッシュ関数演算装置100をプログラムを用いて実現する場合には、プログラムコードが短くなるという効果を奏する。
この実施の形態における並列圧縮関数演算部150は、上記処理装置(CPU911)を用いて、SPR性圧縮関数を演算することにより、上記入力ビット列に基づいて上記並列出力ビット列を生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における署名装置810は、ハッシュ関数演算装置100と、署名関数演算部813と、署名出力部814とを有する。
上記ハッシュ関数演算装置100は、署名の対象である署名対象メッセージを上記入力メッセージMとして入力する。
上記署名関数演算部813は、上記ハッシュ値出力部190が出力したハッシュ値Hに基づいて、署名sを生成する。
上記署名出力部814は、上記署名関数演算部813が生成した署名sを、上記署名対象メッセージに対する署名として出力する。
この実施の形態における署名装置810によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、攻撃に対する耐性が強く安全な電子署名を実現することができるという効果を奏する。
この実施の形態における署名装置810は、並列ハッシュ鍵生成部(ハッシュ鍵生成部812)と、ハッシュ関数演算装置100と、署名関数演算部813と、署名出力部814とを有する。
上記並列ハッシュ鍵生成部812は、上記dビットのビット列kをランダムに生成する。
上記メッセージ入力部110は、署名の対象である署名対象メッセージを上記入力メッセージMとして入力する。
上記並列ハッシュ鍵入力部121は、上記並列ハッシュ鍵生成部(ハッシュ鍵生成部812)が生成したビット列kを上記並列ハッシュ鍵Kとして入力する。
上記署名関数演算部813は、上記ハッシュ値出力部190が出力したハッシュ値Hに基づいて、署名sを生成する。
上記署名出力部814は、上記並列ハッシュ鍵生成部812が生成したビット列kと、上記署名関数演算部813が生成した署名sとの組を、上記署名対象メッセージに対する署名として出力する。
この実施の形態における署名装置810によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、攻撃に対する耐性が強く安全な電子署名を実現することができるという効果を奏する。
この実施の形態における署名装置810は、直列ハッシュ鍵生成部(ハッシュ鍵生成部812)と、ハッシュ関数演算装置100と、署名関数演算部813と、署名出力部814とを有する。
上記直列ハッシュ鍵生成部(ハッシュ鍵生成部812)は、上記dビットのビット列kをランダムに生成する。
上記メッセージ入力部110は、署名の対象である署名対象メッセージを上記入力メッセージMとして入力する。
上記直列ハッシュ鍵入力部122は、上記直列ハッシュ鍵生成部(ハッシュ鍵生成部812)が生成したビット列kを上記直列ハッシュ鍵Kとして入力する。
上記署名関数演算部813は、上記ハッシュ値出力部190が出力したハッシュ値Hに基づいて、署名sを生成する。
上記署名出力部814は、上記直列ハッシュ鍵生成部812が生成したビット列kと、上記署名関数演算部813が生成した署名sとの組を、上記署名対象メッセージに対する署名として出力する。
この実施の形態における署名装置810によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、攻撃に対する耐性が強く安全な電子署名を実現することができるという効果を奏する。
この実施の形態におけるハッシュ関数演算装置100は、データを処理する処理装置(CPU911)を有するコンピュータをハッシュ関数演算装置100として機能させるプログラムを、コンピュータが実行することにより実現することができる。
この実施の形態におけるコンピュータプログラムによれば、SPR性を満たす圧縮関数に基づいて、eTCR性を満たすハッシュ関数を演算するハッシュ関数演算装置100を実現することができるという効果を奏する。
この実施の形態におけるハッシュ関数演算装置100がハッシュ値を計算するハッシュ関数演算方法は、並列圧縮関数演算工程と、直列圧縮関数演算工程とを有する。
並列圧縮関数演算工程において、上記処理装置(CPU911)が、aビット(ただし、aは2以上の所定の整数。)の入力ビット列を入力し、入力した入力ビット列に基づいてbビット(ただし、bは1以上a以下の所定の整数。)の並列出力ビット列を生成する。
上記直列圧縮関数演算工程において、上記処理装置(CPU911)が、aビット(ただし、aは1以上の所定の整数。)の第一ビット列を入力し、bビット(ただし、bは1以上の所定の整数。)の第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とに基づいて、上記bビットの直列出力ビット列を生成する。
上記ハッシュ関数演算方法は、更に、以下の工程を有する。
上記処理装置(CPU911)が、Lビット(ただし、Lは1以上の任意の整数。)のビット列を入力して入力メッセージMとする。
上記処理装置(CPU911)が、入力した入力メッセージMに基づいて、上記aビットの複数の並列ビット列m”を生成する。
上記処理装置(CPU911)が、生成した複数の並列ビット列m”それぞれを上記入力ビット列として上記並列圧縮関数演算工程を実行し、上記並列圧縮関数演算工程で入力した複数の並列ビット列m”それぞれに対して生成した複数の並列出力ビット列を取得して複数の圧縮ビット列hとする。
上記処理装置(CPU911)が、取得した複数の圧縮ビット列hに基づいて、上記aビットの複数の直列ビット列yを生成する。
上記処理装置(CPU911)が、生成した複数の直列ビット列yのうち少なくともいずれかの直列ビット列yと、上記直列ビット列yと異なる他の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算工程を実行し、上記直列圧縮関数演算工程で入力した直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記直列ビット列yに基づいて生成された中間ビット列cとし、取得した中間ビット列cのうち少なくともいずれかをハッシュ値Hとする。
上記処理装置(CPU911)が、取得したハッシュ値Hを出力する。
この実施の形態におけるハッシュ関数演算方法によれば、並列圧縮関数演算工程及び直列圧縮関数演算工程で計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
以上説明したハッシュ関数演算装置100は、ランダムな固定鍵K‖K(ハッシュ鍵K)を生成する固定鍵装置(ハッシュ鍵生成部812)と、前記固定鍵装置の出力の一部K(並列ハッシュ鍵)と任意長のメッセージM(入力メッセージ)を受け、任意長のメッセージ(入力メッセージM)の長さに依存した長さの値(複数の圧縮ビット列h)を出力する並列処理装置(並列処理部130)と、並列処理装置の出力(複数の圧縮ビット列h)と固定鍵装置の出力の一部K(直列ハッシュ鍵)を受け、固定長の値(ハッシュ値H)を出力する直列処理装置(直列処理部160)を有する。
並列処理装置(並列処理部130)は、任意長メッセージM(入力メッセージ)を受け、Mにある値(並列詰め物P)をパディングし、ある長さごとにこの値(並列結合ビット列M)を分割する装置(並列分割部134)と、この装置の出力値(複数の並列分割ビット列m)と鍵の一部K(並列ハッシュ鍵)を受け、この値ごとにKを排他的論理和する装置(並列生成部135)と、その装置の出力(複数の並列ビット列m”)を受け、その値それぞれをSPR性圧縮関数で計算する装置(並列圧縮部136)と、この装置の出力(複数の圧縮ビット列h)を受け、値を結合する装置(直列詰め物結合部162)を有する。
直列処理装置(並列圧縮関数演算部150)は、並列処理装置(並列処理部130)の出力(複数の圧縮ビット列h)を受け、この値にある値(直列詰め物P)をパディングし、ある長さごとにこの値(直列結合ビット列H)を分割する装置(分割部164)と、この装置の出力値(複数の直列分割ビット列x)と鍵の一部K(直列ハッシュ鍵)を受け、装置の出力値をそれぞれKと排他的論理和する装置(直列生成部165)と、この装置の出力(複数の直列ビット列y)を受け、SPR性圧縮関数をMD構造につないだ関数を計算する装置(直列圧縮部166)を有する。
以上説明したハッシュ関数演算装置100によれば、SPR性圧縮関数からeTCR性ハッシュ関数を構成することができる。
以上説明した署名装置810は、以下の動作をする。
Mを署名をつけたいメッセージとする。並列圧縮関数演算部150及び直列圧縮関数演算部180は、aビットのビット列を入力しbビットのビット列を出力するSPR性圧縮関数を計算する。ハッシュ鍵生成部812は、ランダムな2a−b−1ビットの鍵K‖K(ただし、|K|=a−1。)を生成する。並列詰め物結合部132は、長さがa−b−1ビットの倍数となる値M=M‖0‖0a−b−1を生成する。ただし、uの長さが最小となるようにする。並列分割部134は、a−b−1ビットごとにMを分割し、M=m‖m‖…‖mとする。並列生成部135は、m(i=1,2,…,n)とKとを排他的論理和し、m’=m XOR K(i=1,2,…,n)とする。並列圧縮部136は、m’‖1(i=1,2,…,n)を圧縮関数の入力として並列圧縮関数演算部150に計算させ、その出力値をhとする。直列詰め物結合部162は、h,h,…,hをビット結合し、長さがa−bの倍数の値H=0a−b‖h‖h‖…‖h‖1‖0‖<M>を生成する。ただし、vの長さが最小となるようにする。分割部164は、Hをa−bビットごとに分割し、H=x‖x‖…‖xとする。直列生成部165は、x(i=1,2,…,s)とKとを排他的論理和し、y=x XOR K(i=1,2,…,s)とする。直列圧縮部166は、ci−1‖y(i=1,2,…,s)を圧縮関数の入力として直列圧縮関数演算部180に計算させ、cとする。ここでc=IVで、IVはbビットの固定値である。署名関数演算部813は、σ(c)(ただし、σは署名関数。)を計算する。署名出力部814は、Mに対する署名として(K,K,σ(c))を出力する。
以上説明した署名装置810によれば、安全かつ効率的な署名を構成することができる。
以上説明したハッシュ関数演算方法は、SPR性圧縮関数を並列に並べ、圧縮関数への入力にランダムな鍵(並列ハッシュ鍵K)を排他的論理和する処理と、SPR性圧縮関数の出力に別のランダムな鍵(直列ハッシュ鍵K)を排他的論理和する処理とを、SPR性圧縮関数を直列に並べるMD構造に加えたものである。
以上説明したハッシュ関数演算方法によれば、SPR性圧縮関数からeTCR性ハッシュ関数を構成することができる。
以上のように、圧縮関数の繰り返し構造に対して、圧縮関数の並列処理部分とハッシュ鍵を加えることにより、比較的簡易に構成できるSPR性圧縮関数から、短い長さのハッシュ鍵を用い、署名関数との親和性が高いeTCR性ハッシュ関数を構成できる。
また、メッセージ長にかかわらず、ハッシュ鍵の長さが一定なので、メッセージが長い場合でも署名が長くならず、署名の計算量が少なくて済む。
実施の形態2.
実施の形態2について、図11〜図13を用いて説明する。
図11は、この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成の一例を示すブロック構成図である。
なお、実施の形態1で説明したハッシュ関数演算装置100と共通する部分については、同一の符号を付し、ここでは説明を省略する。
ハッシュ鍵入力部120は、CPU911を用いて、aビットのハッシュ鍵Kを入力する。ハッシュ鍵入力部120が入力するハッシュ鍵Kは、aビットの並列ハッシュ鍵Kからなる。ハッシュ鍵入力部120は、RAM914を用いて、入力した並列ハッシュ鍵Kを記憶する。
直列処理部160は、CPU911を用いて、並列処理部130が記憶したn個の圧縮ビット列hを入力する。直列処理部160は、入力したn個の圧縮ビット列hと直列ハッシュ鍵Kとに基づいて、ハッシュ値Hを生成する。直列処理部160は、RAM914を用いて、生成したハッシュ値Hを記憶する。
図12は、この実施の形態における並列処理部130の内部ブロックの構成の一例を示す詳細ブロック構成図である。
なお、実施の形態1で説明したハッシュ関数演算装置100と共通する部分については、同一の符号を付し、ここでは説明を省略する。
並列詰め物生成部131は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMを入力する。並列詰め物生成部131は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。並列詰め物生成部131は、CPU911を用いて、算出したビット数Lに基づいて、以下の条件を満たす整数nを算出する。並列詰め物生成部131は、CPU911を用いて、整数nがaよりも大きく、かつ、整数nとビット数Lとの和n+Lがaの整数倍となる整数nのうち、最小の整数nを算出する。
並列詰め物生成部131は、CPU911を用いて、算出した整数nに基づいて、nビットの並列詰め物Pを生成する。例えば、並列詰め物生成部131は、CPU911を用いて、最初のビットを「1」、残りのビットを「0」にした並列詰め物Pを生成する。
なお、並列詰め物生成部131が生成する並列詰め物Pは、最後からaビットが「0」であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
並列詰め物生成部131は、RAM914を用いて、生成した並列詰め物Pを記憶する。
並列分割部134は、CPU911を用いて、並列詰め物結合部132が記憶した並列結合ビット列Mを入力する。並列分割部134は、CPU911を用いて、入力した並列結合ビット列Mに基づいて、並列結合ビット列Mをaビットごとに分割した複数の並列分割ビット列m(ただし、iは1以上n以下の整数。nは並列分割ビット列mの数。)を生成する。並列分割部134は、RAM914を用いて、生成したn個の並列分割ビット列mを記憶する。
並列生成部135は、CPU911を用いて、並列ハッシュ鍵入力部121が記憶した並列ハッシュ鍵Kと、並列分割部134が記憶したn個の並列分割ビット列mとを入力する。並列生成部135は、CPU911を用いて、入力した並列ハッシュ鍵Kとn個の並列分割ビット列mとに基づいて、並列ハッシュ鍵Kとn個の並列分割ビット列mそれぞれとの間のビットごとの排他的論理和を取り、n個の並列ビット列m”を生成する。ここで、並列ハッシュ鍵K及びn個の並列分割ビット列mは、それぞれaビットのビット列であり、並列生成部135が生成する並列ビット列m”も同じく、aビットのビット列である。
図13は、この実施の形態における直列処理部160の内部ブロックの構成の一例を示す詳細ブロック構成図である。
なお、実施の形態1で説明したハッシュ関数演算装置100と共通する部分については、同一の符号を付し、ここでは説明を省略する。
直列詰め物生成部161は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMと、並列圧縮部136が記憶した圧縮ビット列hの数nとを入力し、CPU911を用いて、入力メッセージMのビット数Lと、n個の圧縮ビット列hのビット数を合計した整数Lとを算出する。
直列詰め物生成部161は、CPU911を用いて、算出した整数Lに基づいて、以下の条件を満たす整数nを算出する。直列詰め物生成部161は、CPU911を用いて、整数nがa+eより大きく、かつ、整数nと整数Lとの和n+Lがaの整数倍となる整数nのうち、最小の整数nを算出する。
直列詰め物生成部161は、CPU911を用いて、算出した整数nに基づいて、nビットの直列詰め物Pを生成する。例えば、直列詰め物生成部161は、CPU911を用いて、最初のビットを「1」、残りのビットを、入力メッセージMのビット数Lを二進数で表現したビット列とした直列詰め物Pを生成する。
なお、直列詰め物生成部161が生成する直列詰め物Pは、最後からeビットが入力メッセージMのビット数Lを表わす二進数であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
直列詰め物生成部161は、RAM914を用いて、生成した直列詰め物Pを記憶する。
直列詰め物結合部162は、CPU911を用いて、並列圧縮部136が記憶したn個の圧縮ビット列hと、直列詰め物生成部161が生成した直列詰め物Pとを入力する。直列詰め物結合部162は、CPU911を用いて、入力したn個の圧縮ビット列hと直列詰め物Pとに基づいて、n個の圧縮ビット列hと直列詰め物Pとをすべて結合した直列結合ビット列Hを生成する。例えば、直列詰め物結合部162は、CPU911を用いて、n個の圧縮ビット列hを順番に結合し、その後に直列詰め物Pを結合して、直列結合ビット列Hを生成する。直列詰め物結合部162は、RAM914を用いて、生成した直列結合ビット列Hを記憶する。
直列分割部163は、分割部164を有する。
分割部164は、CPU911を用いて、直列詰め物結合部162が記憶した直列結合ビット列Hを入力する。分割部164は、CPU911を用いて、入力した直列結合ビット列Hに基づいて、直列結合ビット列Hをaビットごとに分割した複数の直列ビット列y(ただし、iは1以上s以下の整数。sは直列分割ビット列の数。)を生成する。分割部164は、RAM914を用いて、生成したs個の直列ビット列yを記憶する。
以上のような構成とした場合も、実施の形態1と同様、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす場合、ハッシュ関数演算装置100が計算するハッシュ関数はeTCR性を満たす。
また、実施の形態1と比較して、ハッシュ鍵Kのビット数が少ないので、署名装置810が出力する署名のビット数が少なくなり、記憶装置が署名を記憶するために必要となる記憶容量や、通信装置が署名を送受信するために必要となる通信回線の容量を削減できる。
更に、実施の形態1と比較して、並列生成部135の処理や直列分割部163の処理が少ないので、ハッシュ関数演算装置100がハッシュ値を算出する処理にかかる時間が短くなる。また、並列生成部135や直列分割部163を論理回路を用いて実現する場合には、回路が小さくなり、並列生成部135や直列分割部163をプログラムを用いて実現する場合には、プログラムコードが短くなる。
この実施の形態における並列生成部135は、上記処理装置(CPU911)を用いて、上記並列ハッシュ鍵入力部121が入力したハッシュ鍵Kと、上記並列分割部134が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記ハッシュ鍵Kと上記並列分割ビット列mとの排他的論理和をそれぞれ算出して複数の並列ビット列m”とする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列分割部163は、上記処理装置(CPU911)を用いて、上記直列詰め物結合部162が生成した直列結合ビット列Hに基づいて、上記直列結合ビット列Hを上記dビットごとに分割した複数のビット列を生成して上記複数の直列ビット列yとする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における直列詰め物生成部161は、上記処理装置(CPU911)を用いて、上記入力メッセージMのビット数Lをeビット(ただし、eは1以上の所定の整数。)の二進数で表現したビット列を含む直列詰め物Pを生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
以上説明したハッシュ関数演算装置100は、ランダムな固定鍵K(並列ハッシュ鍵)を生成する固定鍵装置(ハッシュ鍵生成部812)と、前記固定鍵装置の出力K(並列ハッシュ鍵)と任意長のメッセージM(入力メッセージ)を受け、任意長のメッセージ(入力メッセージM)の長さ(ビット数L)に依存した長さの値(複数の圧縮ビット列h)を出力する並列処理装置(並列処理部130)と、並列処理装置(並列処理部130)の出力(複数の圧縮ビット列h)を受け、固定長の値(ハッシュ値H)を出力する直列処理装置(直列処理部160)を有する。
並列処理装置(並列処理部130)は、任意長メッセージM(入力メッセージ)を受け、Mにある値(並列詰め物P)をパディングし、ある長さごとにこの値(並列結合ビット列M)を分割する装置(並列分割部134)と、この装置の出力値(複数の並列分割ビット列m)と鍵K(並列ハッシュ鍵)を受け、この値ごとにKを排他的論理和する装置(並列生成部135)と、その装置の出力(複数の並列ビット列m”)を受け、その値それぞれをSPR性圧縮関数で計算する装置(並列圧縮部136)と、この装置の出力(複数の圧縮ビット列h)を受け、値を結合する装置(直列詰め物結合部162)を有する。
直列処理装置(直列処理部160)は、並列処理装置(並列処理部130)の出力(複数の圧縮ビット列h)を受け、この値にある値(直列詰め物P)をパディングし、ある長さごとにこの値(直列結合ビット列H)を分割する装置(分割部164)と、この装置の出力値(複数の直列ビット列y)を受け、SPR性圧縮関数をMD構造につないだ関数を計算する装置(直列圧縮部166)を有する。
以上説明したハッシュ関数演算装置100によれば、SPR性圧縮関数からeTCR性ハッシュ関数を構成することができる。また、以上説明したハッシュ関数演算装置100を用いれば、安全かつ効率的な署名を構成することができる。
以上説明したハッシュ関数演算装置100を用いた署名装置810は、以下の動作をする。
Mを署名をつけたいメッセージとする。並列圧縮関数演算部150及び直列圧縮関数演算部180は、aビットのビット列を入力しbビットのビット列を出力するSPR性圧縮関数を計算する。ハッシュ鍵生成部812は、ランダムなaビットの鍵K(並列ハッシュ鍵)を生成する。並列詰め物結合部132は、長さがaビットの倍数となる値M=M‖1‖0‖0を生成する。ただし、uの長さが最小となるようにする。並列分割部134は、aビットごとにMを分割し、M=m‖m‖…‖mとする。並列生成部135は、m(i=1,2,…,n)とKとを排他的論理和し、m”=m XOR K(i=1,2,…,n)とする。並列圧縮部136は、m”(i=1,2,…,n)を圧縮関数の入力として並列圧縮関数演算部150に計算させ、その出力値をhとする。直列詰め物結合部162は、h,h,…,hをビット結合し、長さがa−bの倍数の値H=h‖h‖…‖h‖1‖0‖<M>を生成する。ただし、vの長さが最小となるようにする。分割部164は、Hをa−bビットごとに分割し、H=y‖y‖…‖yとする。直列圧縮部166は、ci−1‖y(i=1,2,…,s)を圧縮関数の入力として直列圧縮関数演算部180に計算させ、cとする。ここで、c=IVで、IVはbビットの固定値である。署名関数演算部813は、σ(c)(ただし、σは署名関数。)を計算する。署名出力部814は、Mに対する署名として(K,σ(c))を出力する。
以上説明したハッシュ関数演算方法は、SPR性圧縮関数を並列に並べ、SPR性圧縮関数への入力にランダムな鍵(並列ハッシュ鍵K)を排他的論理和する処理を、SPR性圧縮関数を直列に並べるMD構造に加えたものである。
実施の形態3.
実施の形態3について、説明する。
この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成、並列処理部130及び直列処理部160の内部ブロックの構成は、実施の形態2で説明したものと同様なので、図11〜図13を参照しつつ、実施の形態2と異なる部分について説明する。
並列詰め物生成部131は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMを入力する。並列詰め物生成部131は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。並列詰め物生成部131は、CPU911を用いて、算出したビット数Lに基づいて、以下の条件を満たす整数nを算出する。並列詰め物生成部131は、CPU911を用いて、整数nがa+eよりも大きく、かつ、整数nとビット数Lとの和n+Lがaの整数倍となる整数nのうち、最小の整数nを算出する。なお、eは、1以上の所定の整数であり、例えば、64である。
並列詰め物生成部131は、CPU911を用いて、算出した整数nに基づいて、nビットの並列詰め物Pを生成する。例えば、並列詰め物生成部131は、CPU911を用いて、最初のビットを「1」、最後からaビットを「0」、残りのビットを、入力メッセージMのビット数Lを二進数で表現したビット列とした並列詰め物Pを生成する。
なお、並列詰め物生成部131が生成する並列詰め物Pは、最後からaビットが「0」、その前のeビットが入力メッセージMのビット数Lを表わす二進数であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
並列詰め物生成部131は、RAM914を用いて、生成した並列詰め物Pを記憶する。
直列詰め物生成部161は、CPU911を用いて、並列圧縮部136が記憶した圧縮ビット列hの数nを入力し、CPU911を用いて、n個の圧縮ビット列hのビット数を合計した整数Lを算出する。
直列詰め物生成部161は、CPU911を用いて、算出した整数Lに基づいて、以下の条件を満たす整数nを算出する。直列詰め物生成部161は、CPU911を用いて、整数nと整数Lとの和n+Lがaの整数倍となる1以上の整数nのうち、最小の整数nを算出する。
直列詰め物生成部161は、CPU911を用いて、算出した整数nに基づいて、nビットの直列詰め物Pを生成する。例えば、直列詰め物生成部161は、CPU911を用いて、最初のビットを「1」、残りのビットを「0」とした直列詰め物Pを生成する。
なお、直列詰め物生成部161が生成する直列詰め物Pは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
以上のような構成とした場合も、実施の形態2と同様、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす場合、ハッシュ関数演算装置100が計算するハッシュ関数はeTCR性を満たす。
この実施の形態における並列詰め物生成部131は、上記処理装置(CPU911)を用いて、上記入力メッセージMのビット数Lをeビット(ただし、eは1以上の所定の整数。)の二進数で表現したビット列を含む並列詰め物Pを生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
以上説明したハッシュ関数演算装置100を用いた署名装置810は、以下の動作をする。
Mを署名をつけたいメッセージとする。並列圧縮関数演算部150及び直列圧縮関数演算部180は、aビットのビット列を入力しbビットのビット列を出力するSPR性圧縮関数を計算する。ハッシュ鍵生成部812は、ランダムなaビットの鍵K(並列ハッシュ鍵)を生成する。並列詰め物結合部132は、長さがaビットの倍数となる値M=M‖0‖<M>‖0a−bを生成する。ただし、uの長さが最小となるようにする。並列分割部134は、aビットごとにMを分割し、M=m‖m‖…‖mとする。並列生成部135は、m(i=1,2,…,n)とKとを排他的論理和し、m”=m XOR K(i=1,2,…,n)とする。並列圧縮部136は、m”(i=1,2,…,n)を圧縮関数の入力として並列圧縮関数演算部150に計算させ、その出力値をh(i=1,2,…,n)とする。直列詰め物結合部162は、h,h,…,hをビット結合し、長さがa−bの倍数の値H=0a−b‖h‖h‖…‖h‖1‖0を生成する。ただし、vの長さが最小となるようにする。分割部164は、Hをa−bビットごとに分割し、H=y‖y‖…‖yとする。直列圧縮部166は、ci−1‖y(i=1,2,…,s)を圧縮関数の入力として直列圧縮関数演算部180に計算させ、cとする。ここでc=IVで、IVはbビットの固定値である。署名関数演算部813は、σ(c)(ただし、σは署名関数。)を計算する。署名出力部814は、Mに対する署名(K,σ(c))を出力する。
実施の形態4.
実施の形態4について、図14を用いて説明する。
この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成は、実施の形態3で説明したものと同様なので、図11を参照しつつ、実施の形態3と異なる部分について説明する。
ハッシュ鍵入力部120は、CPU911を用いて、a−bビットのハッシュ鍵Kを入力する。ハッシュ鍵入力部120が入力するハッシュ鍵Kは、a−bビットの並列ハッシュ鍵Kからなる。ハッシュ鍵入力部120は、RAM914を用いて、入力した並列ハッシュ鍵Kを記憶する。
図14は、この実施の形態における並列処理部130の内部ブロックの構成の一例を示す詳細ブロック構成図である。
なお、実施の形態1で説明したハッシュ関数演算装置100と共通する部分については、同一の符号を付し、ここでは説明を省略する。
ハッシュ関数演算装置100は、並列初期値記憶部141を有する。
並列初期値記憶部141は、ROM913を用いて、bビットのビット列IV’(以下「並列初期値ビット列」と呼ぶ。)をあらかじめ記憶している。並列初期値ビット列IV’は、あらかじめ定められた所定のビット列である。なお、並列初期値ビット列IV’は、直列初期値記憶部142が記憶した直列初期値ビット列IVと同じであってもよいし、異なっていてもよい。並列初期値ビット列IV’と直列初期値ビット列IVとが同じ場合には、一つの初期値記憶部が、並列初期値記憶部141と直列初期値記憶部142とを兼ねる構成としてもよい。
並列詰め物生成部131は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMを入力する。並列詰め物生成部131は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。並列詰め物生成部131は、CPU911を用いて、算出したビット数Lに基づいて、以下の条件を満たす整数nを算出する。並列詰め物生成部131は、CPU911を用いて、整数nがa+eよりも大きく、かつ、整数nとビット数Lとの和n+Lがa−bの整数倍となる整数nのうち、最小の整数nを算出する。
並列詰め物生成部131は、CPU911を用いて、算出した整数nに基づいて、nビットの並列詰め物Pを生成する。例えば、並列詰め物生成部131は、CPU911を用いて、最初のビットを「1」、最後からaビットを「0」、残りのビットを、入力メッセージMのビット数Lを二進数で表現したビット列とした並列詰め物Pを生成する。
なお、並列詰め物生成部131が生成する並列詰め物Pは、最後からaビットが「0」、その前のeビットが入力メッセージMのビット数Lを表わす二進数であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
並列詰め物生成部131は、RAM914を用いて、生成した並列詰め物Pを記憶する。
並列分割部134は、CPU911を用いて、並列詰め物結合部132が記憶した並列結合ビット列Mを入力する。並列分割部134は、CPU911を用いて、入力した並列結合ビット列Mに基づいて、並列結合ビット列Mをa−bビットごとに分割した複数の並列分割ビット列m(ただし、iは1以上n以下の整数。nは並列分割ビット列mの数。)を生成する。並列分割部134は、RAM914を用いて、生成したn個の並列分割ビット列mを記憶する。
並列生成部135は、CPU911を用いて、並列ハッシュ鍵入力部121が記憶した並列ハッシュ鍵Kと、並列初期値記憶部141が記憶した並列初期値ビット列IV’と、並列分割部134が記憶したn個の並列分割ビット列mとを入力する。並列生成部135は、CPU911を用いて、入力した並列ハッシュ鍵Kとn個の並列分割ビット列mとに基づいて、並列ハッシュ鍵Kとn個の並列分割ビット列mそれぞれとの間の排他的論理和を取り、n個の並列撹乱ビット列m’(ただし、iは1以上n以下の整数。)を生成する。ここで、並列ハッシュ鍵K及びn個の並列分割ビット列mは、それぞれa−bビットのビット列であり、並列生成部135が生成する並列撹乱ビット列m’も同じく、a−bビットのビット列である。
並列生成部135は、CPU911を用いて、生成したn個の並列撹乱ビット列m’と、入力した並列初期値ビット列IV’とに基づいて、n個の並列撹乱ビット列m’それぞれと、並列初期値ビット列IV’とを結合したn個の並列ビット列m”(ただし、iは1以上n以下の整数。)を生成する。例えば、並列生成部135は、CPU911を用いて、n個の並列撹乱ビット列m’それぞれの後に、並列初期値ビット列IV’を結合して、n個の並列ビット列m”を生成する。並列生成部135が生成するn個の並列ビット列m”のビット数は、aビットである。
並列生成部135は、RAM914を用いて、生成したn個の並列ビット列m”を記憶する。
この実施の形態における直列処理部160の内部ブロックの構成は、実施の形態3で説明したものと同様なので、ここでは説明を省略する。
証明は省略するが、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がpSPR性を満たす場合、ハッシュ関数演算装置100が計算するハッシュ関数はeTCR性を満たす。
一般に、pSPR性を満たす圧縮関数を構成するほうが、SPR性を満たす圧縮関数を構成するよりも容易であり、SPR性を満たさない圧縮関数であっても、pSPR性を満たす場合がある。
したがって、並列圧縮関数演算部150及び直列圧縮関数演算部180がSPR性を満たさない場合であっても、pSPR性さえ満たしていれば、eTCR性を満たすハッシュ関数を計算するハッシュ関数演算装置100を構成できる。例えば、並列圧縮関数演算部150及び直列圧縮関数演算部180がSPR性を満たすと考えられる圧縮関数を計算するよう構成したが、のちに、この圧縮関数がSPR性を満たさないことが判定した場合であっても、pSPR性を満たしていれば、ハッシュ関数演算装置100が計算するハッシュ関数のeTCR性を確保できる。このため、ハッシュ関数演算装置100が算出したハッシュ値を用いて、攻撃に対する耐性が強く安全な電子署名システムを構築することができる。
なお、圧縮関数のpSPR性とは、以下のように定義される。
圧縮関数が入力するビット列のビット数をa、出力するビット列のビット数をbとし、bビットのビット列cと、a−bビットのビット列mとを結合したビット列を入力した場合に、圧縮関数が出力するビット列をh(c,m)とする。
攻撃者には、あらかじめ定められたbビットの固定ビット列cと、a−bビットのランダムなビット列mとが与えられる。攻撃者は、h(c,m)=h(c,m’)となるa−bビットのビット列m’(ただし、m≠m’。)を見つけようとする。総当り攻撃よりも速くビット列m’を見つけることができる攻撃者が存在しない場合に、その圧縮関数は、pSPR性を満たす。
圧縮関数のpSPR性を破る攻撃者が存在すると仮定すると、固定ビット列cと、その攻撃者が見つけたビット列m’との組は、圧縮関数のSPR性を破る。
しかし、圧縮関数のSPR性を破る攻撃者が存在すると仮定しても、その攻撃者が見つけたビット列m’は、c=c’でない限り、圧縮関数のpSPR性を破らない。
したがって、攻撃者にとって、pSPR性を破るほうがSPR性を破るより難しい。圧縮関数を構成する側の立場から言うと、pSPR性を満たす圧縮関数を構成するほうがSPR性を満たす圧縮関数を構成するよりも容易である。
この実施の形態における並列生成部135は、上記処理装置(CPU911)を用いて、上記並列ハッシュ鍵入力部121が入力したハッシュ鍵Kと、上記並列分割部134が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記ハッシュ鍵Kと上記並列分割ビット列mとの排他的論理和をそれぞれ算出して複数の並列撹乱ビット列m’とし、算出した複数の並列撹乱ビット列m’それぞれに基づいて、上記複数の並列撹乱ビット列m’と所定の並列固定ビット列(並列初期値ビット列IV’)とを結合したビット列をそれぞれ生成して上記複数の並列ビット列m”とする。
この実施の形態におけるハッシュ関数演算装置100によれば、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がpSPR性を満たす圧縮関数であれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
この実施の形態における並列圧縮関数演算部150は、上記処理装置(CPU911)を用いて、pSPR性圧縮関数を演算することにより、上記入力ビット列に基づいて上記並列出力ビット列を生成する。
この実施の形態におけるハッシュ関数演算装置100によれば、eTCR性を満たすハッシュ関数を演算することができるという効果を奏する。
以上説明したハッシュ関数演算装置100は、ランダムな固定鍵K(並列ハッシュ鍵)を生成する固定鍵装置(ハッシュ鍵生成部812)と、前記固定鍵装置の出力Kと任意長のメッセージM(入力メッセージ)を受け、任意長のメッセージ(入力メッセージM)の長さ(ビット数L)に依存した長さの値(複数の圧縮ビット列h)を出力する並列処理装置(並列処理部130)と、並列処理装置の出力(複数の圧縮ビット列h)を受け、固定長の値(ハッシュ値H)を出力する直列処理装置(直列処理部160)を有するeTCR性ハッシュ関数装置である。
並列処理装置(並列処理部130)は、任意長メッセージM(入力メッセージ)を受け、Mにある値(並列詰め物P)をパディングし、ある長さごとにこの値(並列結合ビット列M)を分割する装置(並列分割部134)と、この装置の出力値(複数の並列分割ビット列m)と鍵K(並列ハッシュ鍵)を受け、この値ごとにKを排他的論理和する装置(直列生成部165)と、その装置の出力(複数の並列ビット列m”)を受け、その値それぞれをpSPR性圧縮関数で計算する装置(直列圧縮部166)と、この装置の出力(複数の圧縮ビット列h)を受け、値を結合する装置(直列詰め物結合部162)を有する。
直列処理装置(直列処理部160)は、並列処理装置(並列処理部130)の出力(複数の圧縮ビット列h)を受け、この値にある値(直列詰め物P)をパディングし、ある長さごとにこの値(直列結合ビット列H)を分割する装置(分割部164)と、この装置の出力値(複数の直列ビット列y)を受け、pSPR性圧縮関数をMD構造につないだ関数を計算する装置(直列圧縮部166)を有する。
以上説明したハッシュ関数演算装置100によれば、pSPR性圧縮関数からeTCR性ハッシュ関数を構成することができる。
以上説明したハッシュ関数演算装置100を用いた署名装置810は、以下の動作をする。
Mを署名をつけたいメッセージとする。並列圧縮関数演算部150及び直列圧縮関数演算部180は、aビットのビット列を入力してbビットのビット列を出力するpSPR性圧縮関数を計算する。ハッシュ鍵生成部812は、ランダムなa−bビットの鍵K(並列ハッシュ鍵)を生成する。並列詰め物結合部132は、長さがa−bビットの倍数となる値M=M‖0‖<M>‖0a−bを生成する。ただし、uの長さが最小となるようにする。並列分割部134は、a−bビットごとにMを分割し、M=m‖m‖…‖mとする。並列生成部135は、m(i=1,2,…,n)とKとを排他的論理和し、m’=m XOR K(i=1,2,…,n)とする。並列圧縮部136は、IV’‖m’(i=1,2,…,n)を圧縮関数の入力として並列圧縮関数演算部150に計算させ、その出力値をh(i=1,2,…,n)とする。ここで、IV’はあらかじめ定められたbビットの固定値である。直列詰め物結合部162は、h,h,…,hをビット結合し、長さがa−bの倍数の値H=0a−b‖h‖h‖…‖h‖1‖0を生成する。ただし、vの長さが最小となるようにする。分割部164は、Hをa−bビットごとに分割し、H=x‖x‖…‖xとする。直列生成部165は、x(i=1,2,…,s)とKとを排他的論理和し、y=x XOR Kとする。直列圧縮部166は、ci−1‖y(i=1,2,…,s)を圧縮関数の入力として直列圧縮関数演算部180に計算させ、cとする。ここで、c=IVで、IVはIV’と異なるbビットの固定値である。署名関数演算部813は、σ(c)(ただし、σは署名関数。)を計算する。署名出力部814は、Mに対する署名(K,σ(c))を出力する。
以上説明したハッシュ関数演算装置100を用いた署名装置810によれば、安全かつ効率的な署名を構成することができる。
以上説明したハッシュ関数演算方法は、pSPR性圧縮関数を並列に並べ、pSPR性圧縮関数への入力にランダムな鍵(並列ハッシュ鍵K)を排他的論理和する処理を、pSPR性圧縮関数を直列に並べるMD構造に加えたものである。
以上説明したハッシュ関数演算方法によれば、pSPR性圧縮関数からeTCR性ハッシュ関数を構成することができる。
以上のように、圧縮関数の繰り返し構造に対して、圧縮関数の並列処理部分とハッシュ鍵を加えることにより、比較的簡易に構成できるpSPR性圧縮関数から、短い長さのハッシュ鍵を用い、署名関数との親和性が高いeTCR性ハッシュ関数を構成できる。
実施の形態5.
実施の形態5について、説明する。
この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成、並列処理部130及び直列処理部160の内部ブロックの構成は、実施の形態4で説明したものと同様なので、図11、図13、図14を参照しつつ、実施の形態4と異なる部分について説明する。
並列詰め物生成部131は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMを入力する。並列詰め物生成部131は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。並列詰め物生成部131は、CPU911を用いて、算出したビット数Lに基づいて、以下の条件を満たす整数nを算出する。並列詰め物生成部131は、CPU911を用いて、整数nがa−bよりも大きく、かつ、整数nとビット数Lとの和n+Lがa−bの整数倍となる整数nのうち、最小の整数nを算出する。
並列詰め物生成部131は、CPU911を用いて、算出した整数nに基づいて、nビットの並列詰め物Pを生成する。例えば、並列詰め物生成部131は、CPU911を用いて、最初のビットを「1」、残りのビットを「0」とした並列詰め物Pを生成する。
なお、並列詰め物生成部131が生成する並列詰め物Pは、最後からa−bビットが「0」であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
並列詰め物生成部131は、RAM914を用いて、生成した並列詰め物Pを記憶する。
直列詰め物生成部161は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMと、並列圧縮部136が記憶した圧縮ビット列hの数nとを入力し、CPU911を用いて、入力メッセージMのビット数Lと、n個の圧縮ビット列hのビット数を合計した整数Lとを算出する。
直列詰め物生成部161は、CPU911を用いて、算出した整数Lに基づいて、以下の条件を満たす整数nを算出する。直列詰め物生成部161は、CPU911を用いて、整数nがa+eより大きく、かつ、整数nと整数Lとの和n+Lがaの整数倍となる整数nのうち、最小の整数nを算出する。
直列詰め物生成部161は、CPU911を用いて、算出した整数nに基づいて、nビットの直列詰め物Pを生成する。例えば、直列詰め物生成部161は、CPU911を用いて、最初のビットを「1」、残りのビットを、入力メッセージMのビット数Lを二進数で表現したビット列とした直列詰め物Pを生成する。
なお、直列詰め物生成部161が生成する直列詰め物Pは、最後からeビットが入力メッセージMのビット数Lを表わす二進数であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
直列詰め物生成部161は、RAM914を用いて、生成した直列詰め物Pを記憶する。
以上のような構成とした場合も、実施の形態4と同様、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がpSPR性を満たす場合、ハッシュ関数演算装置100が計算するハッシュ関数はeTCR性を満たす。
以上説明したハッシュ関数演算装置100を用いた署名装置810は、以下の動作をする。
Mを署名をつけたいメッセージとする。並列圧縮関数演算部150及び直列圧縮関数演算部180は、aビットのビット列を入力しbビットのビット列を出力するpSPR性圧縮関数を計算する。ハッシュ鍵生成部812は、ランダムなa−bビットの鍵K(並列ハッシュ鍵)を生成する。並列詰め物結合部132は、長さがa−bビットの倍数となる値M=M‖1‖0‖0a−bを生成する。ただし、uの長さが最小となるようにする。並列分割部134は、a−bビットごとにMを分割し、M=m‖m‖…‖mとする。並列生成部135は、m(i=1,2,…,n)とKとを排他的論理和し、m”=m XOR K(i=1,2,…,n)とする。並列圧縮部136は、IV’‖m”(i=1,2,…,n)を圧縮関数の入力として並列圧縮関数演算部150に計算させ、その出力値をhとする。ここで、IV’はあらかじめ定められたbビットの固定値である。直列詰め物結合部162は、h,h,…,hをビット結合し、長さがa−bの倍数の値H=h‖h‖…‖h‖1‖0‖<M>を生成する。ただし、vの長さが最小となるようにする。分割部164は、Hをa−bビットごとに分割し、H=y‖y‖…‖yとする。直列圧縮部166は、ci−1‖y(i=1,2,…,s)を圧縮関数の入力として直列圧縮関数演算部180に計算させ、cとする。ここでc=IVで、IVはIV’と異なるbビットの固定値である。署名関数演算部813は、σ(c)(ただし、σは署名関数。)を計算する。署名出力部814は、Mに対する署名として(K,σ(c))を出力する。
実施の形態6.
実施の形態6について、説明する。
この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成は、実施の形態1で説明したものと同様なので、図5及び図6を参照しつつ、実施の形態1と異なる部分について説明する。
ハッシュ鍵入力部120は、CPU911を用いて、a+a−bビットのハッシュ鍵Kを入力する。ハッシュ鍵入力部120が入力するハッシュ鍵Kは、a−bビットの並列ハッシュ鍵Kと、aビットの直列ハッシュ鍵Kとが結合したビット列である。ハッシュ鍵入力部120は、CPU911を用いて、並列ハッシュ鍵Kと直列ハッシュ鍵Kとを入力する。ハッシュ鍵入力部120は、RAM914を用いて、入力した並列ハッシュ鍵K及び直列ハッシュ鍵Kを記憶する。
この実施の形態における並列処理部130の内部ブロックの構成は、実施の形態4で説明したものと同様なので、図14を参照しつつ、実施の形態4と異なる部分について説明する。
並列初期値記憶部141は、ROM913を用いて、直列初期値記憶部142が記憶した直列初期値ビット列IVとは異なる並列初期値ビット列IV’をあらかじめ記憶している。
並列詰め物生成部131は、CPU911を用いて、メッセージ入力部110が記憶した入力メッセージMを入力する。並列詰め物生成部131は、CPU911を用いて、入力した入力メッセージMに基づいて、入力メッセージMのビット数Lを算出する。並列詰め物生成部131は、CPU911を用いて、算出したビット数Lに基づいて、以下の条件を満たす整数nを算出する。並列詰め物生成部131は、CPU911を用いて、整数nがa−bより大きく、かつ、整数nとビット数Lとの和n+Lがa−bの整数倍となる整数nのうち、最小の整数nを算出する。
並列詰め物生成部131は、CPU911を用いて、算出した整数nに基づいて、nビットの並列詰め物Pを生成する。例えば、並列詰め物生成部131は、CPU911を用いて、最初のビットを「1」、残りのビットを「0」とした並列詰め物Pを生成する。
なお、並列詰め物生成部131が生成する並列詰め物Pは、最後からa−bビットが「0」であればよく、残りのビットは、あらかじめ定めた所定のパターンにしたがっていれば、他の値であってもよい。
並列詰め物生成部131は、RAM914を用いて、生成した並列詰め物Pを記憶する。
この実施の形態における直列処理部160の内部ブロックの構成は、実施の形態1で説明したものと同様なので、ここでは説明を省略する。
以上のような構成とした場合も、実施の形態4及び実施の形態5と同様、並列圧縮関数演算部150及び直列圧縮関数演算部180が計算する圧縮関数がpSPR性を満たす場合、ハッシュ関数演算装置100が計算するハッシュ関数はeTCR性を満たす。
以上説明したハッシュ関数演算装置100は、ランダムな固定鍵K‖K(ハッシュ鍵K)を生成する固定鍵装置(ハッシュ鍵生成部812)と、前記固定鍵装置の出力の一部K(並列ハッシュ鍵)と任意長のメッセージM(入力メッセージ)を受け、任意長のメッセージ(入力メッセージM)の長さ(ビット数L)に依存した長さの値(複数の圧縮ビット列h)を出力する並列処理装置(並列処理部130)と、並列処理装置の出力(複数の圧縮ビット列h)と固定鍵装置の出力の一部K(直列ハッシュ鍵)を受け、固定長の値(ハッシュ値H)を出力する直列処理装置(直列処理部160)を有するeTCR性ハッシュ関数装置である。
並列処理装置(並列処理部130)は、任意長メッセージM(入力メッセージ)を受け、Mにある値(並列詰め物P)をパディングし、ある長さごとにこの値(並列結合ビット列M)を分割する装置(並列分割部134)と、この装置の出力値(複数の並列分割ビット列m)と鍵の一部K(並列ハッシュ鍵)を受け、この値ごとにKを排他的論理和する装置(並列生成部135)と、その装置の出力(複数の並列ビット列m”)を受け、その値それぞれをpSPR性圧縮関数で計算する装置(並列圧縮部136)と、この装置の出力(複数の圧縮ビット列h)を受け、値を結合する装置(直列詰め物結合部162)とを有する。
直列処理装置(直列処理部160)は、並列処理装置(並列処理部130)の出力を受け、この値(複数の圧縮ビット列h)にある値(直列詰め物P)をパディングし、ある長さごとにこの値(直列結合ビット列H)を分割する装置(分割部164)と、この装置の出力値(複数の直列分割ビット列x)と鍵の一部K(直列ハッシュ鍵)を受け、装置の出力値をそれぞれKと排他的論理和する装置(直列生成部165)と、この装置の出力(複数の直列ビット列y)を受け、pSPR性圧縮関数をMD構造につないだ関数を計算する装置(直列圧縮部166)とを有する。
以上説明したハッシュ関数演算装置100によれば、pSPR性圧縮関数からeTCR性ハッシュ関数を構成することができる。
以上説明したハッシュ関数演算装置100を用いた署名装置810は、以下の動作をする。
Mを署名をつけたいメッセージとする。並列圧縮関数演算部150及び直列圧縮関数演算部180は、aビットのビット列を入力してbビットのビット列を出力するpSPR性圧縮関数を計算する。ハッシュ鍵生成部812は、ランダムな2(a−b)ビットの鍵K‖K(ただし、|K|=a−b。|K|=a−b。)を生成する。並列詰め物結合部132は、長さがa−bビットの倍数となる値M=M‖0‖0a−bを生成する。ただし、uの長さが最小となるようにする。並列分割部134は、a−bビットごとにMを分割し、M=m‖m‖…‖mとする。並列生成部135は、m(i=1,2,…,n)とKとを排他的論理和し、m’=m XOR K(i=1,2,…,n)とする。並列圧縮部136は、IV’‖m’(i=1,2,…,n)を圧縮関数の入力として並列圧縮関数演算部150に計算させ、その出力値をh(i=1,2,…,n)とする。ここで、IV’はあらかじめ定められたbビットの固定値である。直列詰め物結合部162は、h,h,…,hをビット結合し、長さがa−bの倍数となる値H=0a−b‖h‖h‖…‖h‖1‖0‖<M>を生成する。ただし、vの長さが最小となるようにする。分割部164は、Hをa−bビットごとに分割し、H=x‖x‖…‖xとする。直列生成部165は、x(i=1,2,…,s)とKとを排他的論理和し、y=x XOR K(i=1,2,…,s)とする。直列圧縮部166は、ci−1‖y(i=1,2,…,s)を圧縮関数の入力として直列圧縮関数演算部180に計算させ、cとする。ここで、c=IVで、IVはIV’と異なるbビットの固定値である。署名関数演算部813は、σ(c)(ただし、σは署名関数。)を計算する。署名出力部814は、Mに対する署名(K,K,σ(c))を出力する。
以上説明したハッシュ関数演算装置100を用いた署名装置810によれば、安全かつ効率的な署名を構成することができる。
以上説明したハッシュ関数演算方法は、pSPR性圧縮関数を並列に並べ、圧縮関数への入力にランダムな鍵(並列ハッシュ鍵K)を排他的論理和する処理と、pSPR性圧縮関数の出力に別のランダムな鍵(直列ハッシュ鍵K)を排他的論理和する処理とを、pSPR性圧縮関数を直列に並べるMD構造に加えたものである。
実施の形態7.
実施の形態7について、図15を用いて説明する。
実施の形態2または実施の形態5で説明したハッシュ関数演算装置100のうち、直列処理部160の構成は、MD5やSHA−1を計算する既存のハッシュ関数演算装置の構成と共通している。
この実施の形態では、MD5やSHA−1を計算する既存のハッシュ関数演算装置を利用して、ハッシュ関数演算装置を構成する方式について説明する。
図15は、この実施の形態におけるハッシュ関数演算装置100の機能ブロックの構成の一例を示すブロック構成図である。
なお、実施の形態2または実施の形態5で説明したハッシュ関数演算装置100と共通する部分については、同一の符号を付し、ここでは説明を省略する。
ハッシュ関数演算装置100は、圧縮結合部170、ハッシュ関数演算装置200を有する。
ハッシュ関数演算装置200は、MD5やSHA−1を計算する既存のハッシュ関数演算装置である。ハッシュ関数演算装置200は、任意のビット数のビット列を入力し、所定のビット数のビット列を算出して、出力する。
圧縮結合部170は、CPU911を用いて、並列処理部130が記憶したn個の圧縮ビット列hを入力する。圧縮結合部170は、CPU911を用いて、入力したn個の圧縮ビット列hに基づいて、n個の圧縮ビット列hをすべて結合したビット列(以下「圧縮結合ビット列M’」と呼ぶ。)を生成する。圧縮結合部170は、CPU911を用いて、生成した圧縮結合ビット列M’を、ハッシュ関数演算装置200に入力する。
ハッシュ値出力部190は、CPU911を用いて、ハッシュ関数演算装置200が入力した圧縮結合ビット列M’に対するハッシュ値として算出したビット列を取得して、ハッシュ値Hとする。ハッシュ値出力部190は、CPU911を用いて、取得したハッシュ値Hを出力する。
以上のように構成することにより、既存のハッシュ関数演算装置200を利用して、ハッシュ関数演算装置100を構成することができる。特に、ハッシュ関数演算装置100を論理回路を用いて構成する場合、論理回路を用いて構成された既存のハッシュ関数演算装置200に、他の機能ブロックを実現する論理回路を付加すればよく、ハッシュ関数演算装置100の製造コストを低くすることができる。また、既存のハッシュ関数演算装置200を再利用するので、資源を無駄にせず、環境への負荷を減らすことができる。
このように、並列圧縮関数演算部150が計算する圧縮関数がSPR性あるいはpSPR性を満たすよう構成すれば、直列圧縮関数演算部180が計算する圧縮関数としてMD5やSHA−1を計算するハッシュ関数が使用している圧縮関数を使用しても、eTCR性を満たすハッシュ関数を計算するハッシュ関数演算装置100を構成できる。このため、ハッシュ関数演算装置100が算出したハッシュ値を用いて、攻撃に対する耐性が強く安全な電子署名システムを構築することができる。
実施の形態1における署名装置810の構成の一例を示す全体構成図。 実施の形態1における署名検証装置820の構成の一例を示す全体構成図。 実施の形態1における署名装置810、署名検証装置820あるいはハッシュ関数演算装置100の外観の一例を示す図。 実施の形態1における署名装置810、署名検証装置820あるいはハッシュ関数演算装置100のハードウェア資源の一例を示す図。 実施の形態1におけるハッシュ関数演算装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態1における並列処理部130の内部ブロックの構成の一例を示す詳細ブロック構成図。 実施の形態1における直列処理部160の内部ブロックの一例を示す詳細ブロック構成図。 実施の形態1におけるハッシュ関数演算装置100が鍵付きハッシュ値を算出するハッシュ関数演算処理の流れの一例を示すフローチャート図。 実施の形態1における並列処理部130が並列処理をする並列処理工程S730の流れの一例を示すフローチャート図。 実施の形態1における直列処理部160が直列処理をする直列処理工程S760の流れの一例を示すフローチャート図。 実施の形態2におけるハッシュ関数演算装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態2における並列処理部130の内部ブロックの構成の一例を示す詳細ブロック構成図。 実施の形態2における直列処理部160の内部ブロックの構成の一例を示す詳細ブロック構成図。 実施の形態4における並列処理部130の内部ブロックの構成の一例を示す詳細ブロック構成図。 実施の形態7におけるハッシュ関数演算装置100の機能ブロックの構成の一例を示すブロック構成図。
符号の説明
100 ハッシュ関数演算装置、110 メッセージ入力部、120 ハッシュ鍵入力部、121 並列ハッシュ鍵入力部、122 直列ハッシュ鍵入力部、130 並列処理部、131 並列詰め物生成部、132 並列詰め物結合部、134 並列分割部、135 並列生成部、136 並列圧縮部、141 並列初期値記憶部、142 直列初期値記憶部、143 並列固定記憶部、150 並列圧縮関数演算部、160 直列処理部、161 直列詰め物生成部、162 直列詰め物結合部、163 直列分割部、164 分割部、165 直列生成部、166 直列圧縮部、170 圧縮結合部、180 直列圧縮関数演算部、190 ハッシュ値出力部、200 ハッシュ関数演算装置、810 署名装置、811,821 署名対象メッセージ入力部、812 ハッシュ鍵生成部、813 署名関数演算部、814 署名出力部、820 署名検証装置、822 署名入力部、823 署名復号演算部、824 署名比較部、901 表示装置、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ装置、907 スキャナ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信装置、920 磁気ディスク装置、921 OS、922 ウィンドウシステム、923 プログラム群、924 ファイル群、931 電話器、932 ファクシミリ機、940 インターネット、941 ゲートウェイ、942 LAN。

Claims (23)

  1. データを処理する処理装置と、並列圧縮関数演算部と、直列圧縮関数演算部と、メッセージ入力部と、並列処理部と、直列処理部と、ハッシュ値出力部とを有し、
    上記並列圧縮関数演算部は、上記処理装置を用いて、aビット(ただし、aは2以上の所定の整数。)の入力ビット列を入力し、入力した入力ビット列に基づいてbビット(ただし、bは1以上a未満の所定の整数。)の並列出力ビット列を生成し、
    上記直列圧縮関数演算部は、上記処理装置を用いて、aビット(ただし、aは1以上の所定の整数。)の第一ビット列を入力し、bビット(ただし、bは1以上の所定の整数。)の第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とに基づいて、上記bビットの直列出力ビット列を生成し、
    上記メッセージ入力部は、上記処理装置を用いて、Lビット(ただし、Lは1以上の任意の整数。)のビット列を入力して入力メッセージMとし、
    上記並列処理部は、上記処理装置を用いて、上記メッセージ入力部が入力した入力メッセージMに基づいて、上記aビットの複数の並列ビット列m”を生成し、生成した複数の並列ビット列m”それぞれを上記入力ビット列として上記並列圧縮関数演算部に入力し、上記並列圧縮関数演算部が入力した複数の並列ビット列m”それぞれに対して生成した複数の並列出力ビット列を取得して複数の圧縮ビット列hとし、
    上記直列処理部は、上記処理装置を用いて、上記並列処理部が取得した複数の圧縮ビット列hに基づいて、上記aビットの複数の直列ビット列yを生成し、生成した複数の直列ビット列yのうち少なくともいずれかの直列ビット列yと、上記直列ビット列yと異なる他の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算部に入力し、上記直列圧縮関数演算部が入力した直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記直列ビット列yに基づいて生成された中間ビット列cとし、取得した中間ビット列cのうちのいずれかをハッシュ値Hとし、
    上記ハッシュ値出力部は、上記処理装置を用いて、上記直列処理部が取得したハッシュ値Hを出力する
    ことを特徴とするハッシュ関数演算装置。
  2. 上記ハッシュ関数演算装置は、更に、データを記憶する記憶装置と、直列初期値記憶部とを有し、
    上記直列初期値記憶部は、上記記憶装置を用いて、上記bビットのビット列を直列初期ビット列IVとして記憶し、
    上記直列処理部は、上記処理装置を用いて、生成した複数の直列ビット列yのうち最初の直列ビット列yと、上記直列初期値記憶部が記憶した直列初期ビット列IVとに基づいて、上記最初の直列ビット列yを上記第一ビット列とし上記直列初期ビット列IVを上記第二ビット列として上記直列圧縮関数演算部に入力し、上記直列圧縮関数演算部が入力した最初の直列ビット列y及び直列初期ビット列IVに対して生成した直列出力ビット列を取得して上記最初の直列ビット列yに基づいて生成された中間ビット列cとし、生成した複数の直列ビット列yのうち最初以外の直列ビット列yと、上記最初以外の直列ビット列yより一つ前の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記最初以外の直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算部に入力し、上記直列圧縮関数演算部が入力した最初以外の直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記最初以外の直列ビット列yに基づいて生成された中間ビット列cとし、上記複数の直列ビット列yのうち最後の直列ビット列yに基づいて生成された中間ビット列cをハッシュ値Hとする
    ことを特徴とする請求項1に記載のハッシュ関数演算装置。
  3. 上記並列処理部は、並列詰め物生成部と、並列詰め物結合部と、並列分割部と、並列生成部とを有し、
    上記並列詰め物生成部は、上記処理装置を用いて、上記メッセージ入力部が入力した入力メッセージMに基づいて、nビット(ただし、nは1以上の整数で、n+Lが整数dの整数倍。Lは上記入力メッセージMのビット数。上記整数dは1以上の所定の整数。)のビット列を生成して並列詰め物Pとし、
    上記並列詰め物結合部は、上記処理装置を用いて、上記メッセージ入力部が入力した入力メッセージMと、上記並列詰め物生成部が生成した並列詰め物Pとに基づいて、上記入力メッセージMと上記並列詰め物Pとを結合したビット列を生成して並列結合ビット列Mとし、
    上記並列分割部は、上記処理装置を用いて、上記並列詰め物結合部が生成した並列結合ビット列Mに基づいて、上記並列結合ビット列Mを上記dビットごとに分割した複数のビット列を生成して複数の並列分割ビット列mとし、
    上記並列生成部は、上記処理装置を用いて、上記並列分割部が生成した複数の並列分割ビット列mそれぞれに基づいて、上記複数の並列ビット列m”を生成する
    ことを特徴とする請求項1または請求項2に記載のハッシュ関数演算装置。
  4. 上記ハッシュ関数演算装置は、更に、並列ハッシュ鍵入力部を有し、
    上記並列ハッシュ鍵入力部は、上記処理装置を用いて、上記dビットのビット列を入力して並列ハッシュ鍵Kとし、
    上記並列生成部は、上記処理装置を用いて、上記並列ハッシュ鍵入力部が入力した並列ハッシュ鍵Kと、上記並列分割部が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記複数の並列ビット列m”を生成する
    ことを特徴とする請求項3に記載のハッシュ関数演算装置。
  5. 上記並列生成部は、上記処理装置を用いて、上記並列ハッシュ鍵入力部が入力したハッシュ鍵Kと、上記並列分割部が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記ハッシュ鍵Kと上記並列分割ビット列mとの排他的論理和をそれぞれ算出して複数の並列撹乱ビット列m’とし、算出した複数の並列撹乱ビット列m’それぞれに基づいて、上記複数の並列撹乱ビット列m’と所定の並列固定ビット列とを結合したビット列をそれぞれ生成して上記複数の並列ビット列m”とする
    ことを特徴とする請求項4に記載のハッシュ関数演算装置。
  6. 上記並列生成部は、上記処理装置を用いて、上記複数の並列撹乱ビット列m’と1ビットの並列固定ビット列とを結合したビット列をそれぞれ生成して上記複数の並列ビット列m”とする
    ことを特徴とする請求項5に記載のハッシュ関数演算装置。
  7. 上記並列生成部は、上記処理装置を用いて、上記並列ハッシュ鍵入力部が入力したハッシュ鍵Kと、上記並列分割部が生成した複数の並列分割ビット列mそれぞれとに基づいて、上記ハッシュ鍵Kと上記並列分割ビット列mとの排他的論理和をそれぞれ算出して複数の並列ビット列m”とする
    ことを特徴とする請求項4に記載のハッシュ関数演算装置。
  8. 上記並列詰め物生成部は、上記処理装置を用いて、上記d個の連続した「0」を含む並列詰め物Pを生成する
    ことを特徴とする請求項3乃至請求項7のいずれかに記載のハッシュ関数演算装置。
  9. 上記並列詰め物生成部は、上記処理装置を用いて、上記入力メッセージMのビット数Lをeビット(ただし、eは1以上の所定の整数。)の二進数で表現したビット列を含む並列詰め物Pを生成する
    ことを特徴とする請求項3乃至請求項8のいずれかに記載のハッシュ関数演算装置。
  10. 上記直列処理部は、直列詰め物生成部と、直列詰め物結合部と、直列分割部とを有し、
    上記直列詰め物生成部は、上記処理装置を用いて、上記メッセージ入力部が入力した入力メッセージMに基づいて、nビット(ただし、nは1以上の整数で、n+Lが整数dの整数倍。Lは上記複数の圧縮ビット列hのビット数を合計した整数。上記整数dは1以上の所定の整数。)のビット列を生成して直列詰め物Pとし、
    上記直列詰め物結合部は、上記処理装置を用いて、上記並列処理部が取得した複数の圧縮ビット列hと、上記直列詰め物生成部が生成した直列詰め物Pとに基づいて、上記複数の圧縮ビット列hと上記直列詰め物Pとを結合したビット列を生成して直列結合ビット列Hとし、
    上記直列分割部は、上記処理装置を用いて、上記直列詰め物結合部が生成した直列結合ビット列Hに基づいて、上記複数の直列ビット列yを生成する
    ことを特徴とする請求項1乃至請求項9のいずれかに記載のハッシュ関数演算装置。
  11. 上記直列分割部は、上記処理装置を用いて、上記直列詰め物結合部が生成した直列結合ビット列Hに基づいて、上記直列結合ビット列Hを上記dビットごとに分割した複数のビット列を生成して上記複数の直列ビット列yとする
    ことを特徴とする請求項10に記載のハッシュ関数演算装置。
  12. 上記ハッシュ関数演算装置は、更に、直列ハッシュ鍵入力部を有し、
    上記直列ハッシュ鍵入力部は、上記処理装置を用いて、上記dビットのビット列を入力して直列ハッシュ鍵Kとし、
    上記直列分割部は、上記処理装置を用いて、上記直列詰め物結合部が生成した直列結合ビット列Hに基づいて、上記直列結合ビット列Hを上記dビットごとに分割した複数のビット列を生成して複数の直列分割ビット列xとし、上記直列ハッシュ鍵入力部が入力した直列ハッシュ鍵Kと、生成した複数の直列分割ビット列xそれぞれとに基づいて、上記複数の直列ビット列yを生成する
    ことを特徴とする請求項10に記載のハッシュ関数演算装置。
  13. 上記直列分割部は、上記処理装置を用いて、上記直列ハッシュ鍵入力部が入力したハッシュ鍵Kと、生成した複数の直列分割ビット列xそれぞれとに基づいて、上記ハッシュ鍵Kと上記直列分割ビット列xとの排他的論理和をそれぞれ算出して複数の直列ビット列yとする
    ことを特徴とする請求項12に記載のハッシュ関数演算装置。
  14. 上記直列詰め物生成部は、上記処理装置を用いて、上記d個の連続した「0」を含む直列詰め物Pを生成する
    ことを特徴とする請求項10乃至請求項13のいずれかに記載のハッシュ関数演算装置。
  15. 上記直列詰め物生成部は、上記処理装置を用いて、上記入力メッセージMのビット数Lをeビット(ただし、eは1以上の所定の整数。)の二進数で表現したビット列を含む直列詰め物Pを生成する
    ことを特徴とする請求項10乃至請求項14のいずれかに記載のハッシュ関数演算装置。
  16. 上記直列詰め物生成部は、上記処理装置を用いて、上記d個の連続した「0」を含む直列第一詰め物ビット列と、上記入力メッセージMのビット数Lをeビット(ただし、eは1以上の所定の整数。)の二進数で表現したビット列を含む直列第二詰め物ビット列とからなる直列詰め物Pを生成し、
    上記直列詰め物結合部は、上記処理装置を用いて、上記並列処理部が取得した複数の圧縮ビット列hと、上記直列詰め物生成部が生成した直列詰め物Pに含まれる直列第一詰め物ビット列及び直列第二詰め物ビット列とに基づいて、上記直列第一詰め物ビット列と上記複数の圧縮ビット列hと上記直列第二詰め物ビット列とを結合したビット列を生成して直列結合ビット列Hとする
    ことを特徴とする請求項10乃至請求項13のいずれかに記載のハッシュ関数演算装置。
  17. 上記直列圧縮関数演算部は、上記処理装置を用いて、aビット(ただし、a=a−b。)の第一ビット列を入力し、bビット(ただし、b=b。)の第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とを結合したビット列を生成して第三ビット列とし、生成した第三ビット列を上記入力ビット列として上記並列圧縮関数演算部に入力し、上記並列圧縮関数演算部が入力した第三ビット列に対して出力した並列出力ビット列を取得して上記直列出力ビット列とする
    ことを特徴とする請求項1乃至請求項16のいずれかに記載のハッシュ関数演算装置。
  18. 上記並列圧縮関数演算部は、上記処理装置を用いて、SPR(Second Preimage Resistance)性圧縮関数及びpSPR(partial−SPR)性圧縮関数のいずれかを演算することにより、上記入力ビット列に基づいて上記並列出力ビット列を生成する
    ことを特徴とする請求項1乃至請求項17のいずれかに記載のハッシュ関数演算装置。
  19. 請求項1乃至請求項18のいずれかに記載のハッシュ関数演算装置と、署名関数演算部と、署名出力部とを有し、
    上記ハッシュ関数演算装置は、署名の対象である署名対象メッセージを上記入力メッセージMとして入力し、
    上記署名関数演算部は、上記ハッシュ値出力部が出力したハッシュ値Hに基づいて、署名sを生成し、
    上記署名出力部は、上記署名関数演算部が生成した署名sを、上記署名対象メッセージに対する署名として出力する
    ことを特徴とする署名装置。
  20. 並列ハッシュ鍵生成部と、請求項4乃至請求項7のいずれかに記載のハッシュ関数演算装置と、署名関数演算部と、署名出力部とを有し、
    上記並列ハッシュ鍵生成部は、上記dビットのビット列kをランダムに生成し、
    上記メッセージ入力部は、署名の対象である署名対象メッセージを上記入力メッセージMとして入力し、
    上記並列ハッシュ鍵入力部は、上記並列ハッシュ鍵生成部が生成したビット列kを上記並列ハッシュ鍵Kとして入力し、
    上記署名関数演算部は、上記ハッシュ値出力部が出力したハッシュ値Hに基づいて、署名sを生成し、
    上記署名出力部は、上記並列ハッシュ鍵生成部が生成したビット列kと、上記署名関数演算部が生成した署名sとの組を、上記署名対象メッセージに対する署名として出力する
    ことを特徴とする署名装置。
  21. 直列ハッシュ鍵生成部と、請求項12または請求項13に記載のハッシュ関数演算装置と、署名関数演算部と、署名出力部とを有し、
    上記直列ハッシュ鍵生成部は、上記dビットのビット列kをランダムに生成し、
    上記メッセージ入力部は、署名の対象である署名対象メッセージを上記入力メッセージMとして入力し、
    上記直列ハッシュ鍵入力部は、上記直列ハッシュ鍵生成部が生成したビット列kを上記直列ハッシュ鍵Kとして入力し、
    上記署名関数演算部は、上記ハッシュ値出力部が出力したハッシュ値Hに基づいて、署名sを生成し、
    上記署名出力部は、上記直列ハッシュ鍵生成部が生成したビット列kと、上記署名関数演算部が生成した署名sとの組を、上記署名対象メッセージに対する署名として出力する
    ことを特徴とする署名装置。
  22. データを処理する処理装置を有するコンピュータを、請求項1乃至請求項17のいずれかに記載のハッシュ関数演算装置として機能させることを特徴とするプログラム。
  23. データを処理する処理装置を有するハッシュ関数演算装置がハッシュ値を計算するハッシュ関数演算方法において、
    上記処理装置が、aビット(ただし、aは2以上の所定の整数。)の入力ビット列を入力し、入力した入力ビット列に基づいてbビット(ただし、bは1以上a以下の所定の整数。)の並列出力ビット列を生成する並列圧縮関数演算工程と、
    上記処理装置が、aビット(ただし、aは1以上の所定の整数。)の第一ビット列を入力し、bビット(ただし、bは1以上の所定の整数。)の第二ビット列を入力し、入力した第一ビット列と入力した第二ビット列とに基づいて、上記bビットの直列出力ビット列を生成する直列圧縮関数演算工程とを有し、
    上記処理装置が、Lビット(ただし、Lは1以上の任意の整数。)のビット列を入力して入力メッセージMとし、
    上記処理装置が、入力した入力メッセージMに基づいて、上記aビットの複数の並列ビット列m”を生成し、
    上記処理装置が、生成した複数の並列ビット列m”それぞれを上記入力ビット列として上記並列圧縮関数演算工程を実行し、上記並列圧縮関数演算工程で入力した複数の並列ビット列m”それぞれに対して生成した複数の並列出力ビット列を取得して複数の圧縮ビット列hとし、
    上記処理装置が、取得した複数の圧縮ビット列hに基づいて、上記aビットの複数の直列ビット列yを生成し、
    上記処理装置が、生成した複数の直列ビット列yのうち少なくともいずれかの直列ビット列yと、上記直列ビット列yと異なる他の直列ビット列yに基づいて生成された中間ビット列cとに基づいて、上記直列ビット列yを上記第一ビット列とし上記中間ビット列cを上記第二ビット列として上記直列圧縮関数演算工程を実行し、上記直列圧縮関数演算工程で入力した直列ビット列y及び中間ビット列cに対して生成した直列出力ビット列を取得して上記直列ビット列yに基づいて生成された中間ビット列cとし、取得した中間ビット列cのうち少なくともいずれかをハッシュ値Hとし、
    上記処理装置が、取得したハッシュ値Hを出力する
    ことを特徴とするハッシュ関数演算方法。
JP2008010014A 2008-01-21 2008-01-21 ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法 Pending JP2009169316A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008010014A JP2009169316A (ja) 2008-01-21 2008-01-21 ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008010014A JP2009169316A (ja) 2008-01-21 2008-01-21 ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法

Publications (1)

Publication Number Publication Date
JP2009169316A true JP2009169316A (ja) 2009-07-30

Family

ID=40970511

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008010014A Pending JP2009169316A (ja) 2008-01-21 2008-01-21 ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法

Country Status (1)

Country Link
JP (1) JP2009169316A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011259389A (ja) * 2010-06-11 2011-12-22 Nippon Telegr & Teleph Corp <Ntt> メッセージ認証子生成装置、メッセージ認証子検証装置、メッセージ認証子生成方法、メッセージ認証子検証方法、およびプログラム
JP2013074322A (ja) * 2011-09-26 2013-04-22 Oki Electric Ind Co Ltd メッセージ認証システム、通信装置及び通信プログラム
JP2013157777A (ja) * 2012-01-30 2013-08-15 Ntt Electornics Corp 情報処理システム及び情報処理方法
KR101649128B1 (ko) * 2015-03-06 2016-08-19 인하대학교 산학협력단 충돌이 없는 해시 함수를 이용한 빅데이터 분석 방법 및 장치
CN106934293A (zh) * 2015-12-29 2017-07-07 航天信息股份有限公司 数字摘要的碰撞计算装置及碰撞计算方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011259389A (ja) * 2010-06-11 2011-12-22 Nippon Telegr & Teleph Corp <Ntt> メッセージ認証子生成装置、メッセージ認証子検証装置、メッセージ認証子生成方法、メッセージ認証子検証方法、およびプログラム
JP2013074322A (ja) * 2011-09-26 2013-04-22 Oki Electric Ind Co Ltd メッセージ認証システム、通信装置及び通信プログラム
JP2013157777A (ja) * 2012-01-30 2013-08-15 Ntt Electornics Corp 情報処理システム及び情報処理方法
KR101649128B1 (ko) * 2015-03-06 2016-08-19 인하대학교 산학협력단 충돌이 없는 해시 함수를 이용한 빅데이터 분석 방법 및 장치
CN106934293A (zh) * 2015-12-29 2017-07-07 航天信息股份有限公司 数字摘要的碰撞计算装置及碰撞计算方法
CN106934293B (zh) * 2015-12-29 2020-04-24 航天信息股份有限公司 数字摘要的碰撞计算装置及碰撞计算方法

Similar Documents

Publication Publication Date Title
JP5079204B2 (ja) 対称鍵暗号のための線形変換
US7908641B2 (en) Modular exponentiation with randomized exponent
JP5000365B2 (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
AU1132199A (en) A non-deterministic public key encryption system
WO1998031122A1 (en) A method and apparatus for generating secure hash functions
JP6305642B2 (ja) メッセージ認証子生成装置、メッセージ認証子生成方法及びメッセージ認証子生成プログラム
WO2013065241A1 (ja) インクリメンタルmacタグ生成装置、方法及びプログラム並びにメッセージ認証装置
Dumas et al. Foundations of coding: compression, encryption, error correction
CN115804061A (zh) 生成共享私钥
JP2009169316A (ja) ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法
US20070277043A1 (en) Methods for Generating Identification Values for Identifying Electronic Messages
JP2003535362A (ja) 暗号多項式の解読
JP5427117B2 (ja) メッセージ認証子生成装置、メッセージ認証子検証装置、メッセージ認証子生成方法、メッセージ認証子検証方法、およびプログラム
KR102211648B1 (ko) 신드롬을 기반으로 한 전자 서명을 통해 데이터 통신이 가능한 전자 장치 및 그 동작 방법
CN112184441A (zh) 数据处理方法、装置、节点设备及存储介质
JP2010044251A (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
CN114221753B (zh) 密钥数据处理方法和电子设备
CN117795901A (zh) 生成数字签名份额
JP4914381B2 (ja) メッセージ認証子生成装置、メッセージ認証子検証装置、メッセージ認証子生成方法、メッセージ認証子検証方法、プログラム、および記録媒体
JP4914329B2 (ja) メッセージ認証子生成装置、メッセージ認証子検証装置、メッセージ認証子生成方法、メッセージ認証子検証方法、プログラム、および記録媒体
JP6033504B1 (ja) メッセージ認証子生成装置
US11893122B2 (en) Shapeshift data encryption methods and systems
JP5726394B2 (ja) 非線形関数器、ストリーム暗号の暗号化装置、復号化装置、mac生成装置
JPH1152850A (ja) 暗号変換方法および装置
RU2140716C1 (ru) Способ криптографического преобразования блоков цифровых данных