(57)【特許請求の範囲】
【請求項１】
ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなるハッシュ関数装置であって、
初段のストリーム暗号器が、鍵系列を出力する鍵系列出力手段と、
入力メッセージをブロックの段数で分割し、該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成するメッセージデータ生成手段と、
前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵（ＩＶ）とを入力してハッシュ値を演算するハッシュ値演算手段と、
を備え、
前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成した鍵系列と前記分割した入力メッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とすることを特徴とするハッシュ関数装置。
【請求項２】
通常のハッシュ関数として用いる場合に、各ストリーム暗号器の内部状態が固定値となることを特徴とする請求項１に記載のハッシュ関数装置。
【請求項３】
鍵付きハッシュ関数として用いる場合に、各ストリーム暗号器に鍵を入力することを特徴とする請求項１に記載のハッシュ関数装置。
【請求項４】
前記ストリーム暗号器が、鍵系列を出力するたびに、異なる新たな鍵系列を出力することを特徴とする請求項１から請求項３に記載のハッシュ関数装置。
【請求項５】
入力する鍵系列の長さが所定の長さよりも短い場合に、前記メッセージデータ生成手段が不足したデータ分、固定パターンのパディング処理を行うことを特徴とする請求項１から請求項４に記載のハッシュ関数装置。
【請求項６】
ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、通常のハッシュ関数として用いられるハッシュ関数装置の処理方法であって、
初段のストリーム暗号器が、鍵系列を出力する第１のステップと、
入力メッセージをブロックの段数で分割する第２のステップと、
該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第３のステップと、
前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵（ＩＶ）とを入力してハッシュ値を演算する第４のステップと、
前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成した鍵系列と前記分割した入力メッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第５のステップと、
最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第６のステップと、
を備えたことを特徴とするハッシュ関数装置の処理方法。
【請求項７】
入力する鍵系列の長さが所定の長さよりも短い場合に、前記第３のステップにおいて、不足したデータ分、固定パターンのパディング処理を行うことを特徴とする請求項６に記載のハッシュ関数装置の処理方法。
【請求項８】
ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、鍵付きハッシュ関数として用いられるハッシュ関数装置の処理方法であって、
各ストリーム暗号器に鍵を入力し、初期化処理を行う第１のステップと、
初段のストリーム暗号器が、鍵系列を出力する第２のステップと、
入力メッセージをブロックの段数で分割する第３のステップと、
該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第４のステップと、
前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵（ＩＶ）とを入力してハッシュ値を演算する第５のステップと、
前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成した鍵系列と前記分割した入力メッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第６のステップと、
最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第７のステップと、
を備えたことを特徴とするハッシュ関数装置の処理方法。
【請求項９】
入力する鍵系列の長さが所定の長さよりも短い場合に、前記第４のステップにおいて、不足したデータ分、固定パターンのパディング処理を行うことを特徴とする請求項８に記載のハッシュ関数装置の処理方法。
【請求項１０】
ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、通常のハッシュ関数として用いられるハッシュ関数装置の処理方法をコンピュータに実行させるためのプログラムであって、
初段のストリーム暗号器が、鍵系列を出力する第１のステップと、
入力メッセージをブロックの段数で分割する第２のステップと、
該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第３のステップと、
前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵（ＩＶ）とを入力してハッシュ値を演算する第４のステップと、
前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成した鍵系列と前記分割した入力メッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第５のステップと、
最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第６のステップと、
をコンピュータに実行させるためのプログラム。
【請求項１１】
ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、鍵付きハッシュ関数として用いられるハッシュ関数装置の処理方法をコンピュータに実行させるためのプログラムであって、
各ストリーム暗号器に鍵を入力し、初期化処理を行う第１のステップと、
初段のストリーム暗号器が、鍵系列を出力する第２のステップと、
入力メッセージをブロックの段数で分割する第３のステップと、
該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第４のステップと、
前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵（ＩＶ）とを入力してハッシュ値を演算する第５のステップと、
前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成した鍵系列と前記分割した入力メッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第６のステップと、
最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第７のステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、従来よりも安全性の高いハッシュ関数装置、ハッシュ関数装置の処理方法およびプログラムに関する。
【背景技術】
【０００２】
近年、コンピュータを利用した様々なサービスが提供されている。そのうち、多くのサービスにおいては、通信の完全性を実現するため、メッセージ認証子が利用されており、このメッセージ認証子には、ハッシュ関数アルゴリズムが利用される（例えば、非特許文献１参照。）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】ＦＩＰＳ  ＰＵＢ  １８０−１，  ＳＥＣＵＲＥ  ＨＡＳＨ  ＳＴＡＮＤＡＲＤ、１９９５、４、１７
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、近年ハッシュ関数に対する攻撃が提案され、その安全性が毀損されている。一方、安全性の高い新たなハッシュ関数も設計されているが、従来型のハッシュ関数と比べて数倍の処理時間がかかるという問題がある。
【０００５】
そこで、本発明は、上述の課題に鑑みてなされたものであり、安全性の高いハッシュ関数を実現するハッシュ関数装置、ハッシュ関数装置の処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００７】
（１）本発明は、ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなるハッシュ関数装置であって、初段のストリーム暗号器（例えば、図１のストリーム暗号器１０ａに相当）が、鍵系列を出力する鍵系列出力手段を備え、初段のハッシュ関数器（例えば、図１のハッシュ関数器２０ａに相当）の入力メッセージをブロックの段数で分割し、該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成するメッセージデータ生成手段と、前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算するハッシュ値演算手段と、前記初段以降のハッシュ関数器（例えば、図１のハッシュ関数器２０ｂ、２０ｃに相当）が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器（例えば、図１のハッシュ関数器２０ｃに相当）のハッシュ値を出力ハッシュ値とすることを特徴とするハッシュ関数装置を提案している。
【０００８】
この発明によれば、初段のストリーム暗号器の鍵系列出力手段は、鍵系列を出力する。メッセージデータ生成手段は、初段のハッシュ関数器の入力メッセージをブロックの段数で分割し、その分割された入力メッセージにその出力された鍵系列を結合してメッセージデータを生成する。初段のハッシュ関数器のハッシュ値演算手段は、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する。そして、初段以降のハッシュ関数器は、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする。したがって、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
【０００９】
（２）本発明は、（１）のハッシュ関数装置について、通常のハッシュ関数として用いる場合に、各ストリーム暗号器の内部状態が固定値となることを特徴とするハッシュ関数装置を提案している。
【００１０】
この発明によれば、通常のハッシュ関数として用いる場合に、各ストリーム暗号器の内部状態が固定値となる。したがって、同じメッセージについては、同じハッシュ値が出力される。
【００１１】
（３）本発明は、（１）のハッシュ関数装置について、鍵付きハッシュ関数として用いる場合に、各ストリーム暗号器に鍵を入力することを特徴とするハッシュ関数装置を提案している。
【００１２】
この発明によれば、鍵付きハッシュ関数として用いる場合に、各ストリーム暗号器に鍵を入力する。これにより、初期化処理が行われ、通常のハッシュ関数と同様に、同じメッセージについては、同じハッシュ値が出力される。
【００１３】
（４）本発明は、（１）から（３）のハッシュ関数装置について、前記ストリーム暗号器が、鍵系列を出力するたびに、異なる新たな鍵系列を出力することを特徴とするハッシュ関数装置を提案している。
【００１４】
この発明によれば、ストリーム暗号器が、鍵系列を出力するたびに、異なる新たな鍵系列を出力する。したがって、これにより、さらに、安全性を高めることができる。
【００１５】
（５）本発明は、（１）から（４）のハッシュ関数装置について、入力する鍵系列の長さが所定の長さよりも短い場合に、前記メッセージデータ生成手段が不足したデータ分、固定パターンのパディング処理を行うことを特徴とするハッシュ関数装置を提案している。
【００１６】
この発明によれば、メッセージデータ生成手段が、入力する鍵系列の長さが所定の長さよりも短い場合に、不足したデータ分、固定パターンのパディング処理を行う。したがって、同じメッセージについては、同じハッシュ値が出力される。
【００１７】
（６）本発明は、ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、通常のハッシュ関数として用いられるハッシュ関数装置の処理方法であって、初段のストリーム暗号器が、鍵系列を出力する第１のステップ（例えば、図３のステップＳ１０１に相当）と、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する第２のステップ（例えば、図３のステップＳ１０１に相当）と、該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第３のステップ（例えば、図３のステップＳ１０１に相当）と、前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する第４のステップ（例えば、図３のステップＳ１０１に相当）と、前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第５のステップ（例えば、図３のステップＳ１０１に相当）と、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第６のステップ（例えば、図３のステップＳ１０１に相当）と、を備えたことを特徴とするハッシュ関数装置の処理方法を提案している。
【００１８】
この発明によれば、初段のストリーム暗号器が、鍵系列を出力し、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する。次に、分割された入力メッセージに出力された鍵系列を結合してメッセージデータを生成し、前記初段のハッシュ関数器が、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する。そして、初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする。したがって、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
【００１９】
（７）本発明は、（６）のハッシュ関数装置の処理方法について、入力する鍵系列の長さが所定の長さよりも短い場合に、前記第３のステップにおいて、不足したデータ分、固定パターンのパディング処理を行うことを特徴とするハッシュ関数装置の処理方法を提案している。
【００２０】
この発明によれば、入力する鍵系列の長さが所定の長さよりも短い場合に、第３のステップにおいて、不足したデータ分、固定パターンのパディング処理を行う。したがって、同じメッセージについては、同じハッシュ値が出力される。
【００２１】
（８）本発明は、ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、鍵付きハッシュ関数として用いられるハッシュ関数装置の処理方法であって、各ストリーム暗号器に鍵を入力し、初期化処理を行う第１のステップ（例えば、図５のステップＳ２０１に相当）と、初段のストリーム暗号器が、鍵系列を出力する第２のステップ（例えば、図５のステップＳ２０２に相当）と、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する第３のステップ（例えば、図５のステップＳ２０３に相当）と、該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第４のステップ（例えば、図５のステップＳ２０４に相当）と、前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する第５のステップ（例えば、図５のステップＳ２０５に相当）と、前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第６のステップ（例えば、図５のステップＳ２０６に相当）と、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第７のステップ（例えば、図５のステップＳ２０７に相当）と、を備えたことを特徴とするハッシュ関数装置の処理方法を提案している。
【００２２】
この発明によれば、各ストリーム暗号器に鍵を入力し、初期化処理を行い、初段のストリーム暗号器が、鍵系列を出力し、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する。次に、分割された入力メッセージに出力された鍵系列を結合してメッセージデータを生成し、初段のハッシュ関数器が、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する。そして、初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする。したがって、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
【００２３】
（９）本発明は、（８）のハッシュ関数装置の処理方法について、入力する鍵系列の長さが所定の長さよりも短い場合に、前記第４のステップにおいて、不足したデータ分、固定パターンのパディング処理を行うことを特徴とするハッシュ関数装置の処理方法を提案している。
【００２４】
この発明によれば、入力する鍵系列の長さが所定の長さよりも短い場合に、第４のステップにおいて、不足したデータ分、固定パターンのパディング処理を行う。したがって、同じメッセージについては、同じハッシュ値が出力される。
【００２５】
（１０）本発明は、ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、通常のハッシュ関数として用いられるハッシュ関数装置の処理方法をコンピュータに実行させるためのプログラムであって、初段のストリーム暗号器が、鍵系列を出力する第１のステップ（例えば、図３のステップＳ１０１に相当）と、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する第２のステップ（例えば、図３のステップＳ１０１に相当）と、該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第３のステップ（例えば、図３のステップＳ１０１に相当）と、前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する第４のステップ（例えば、図３のステップＳ１０１に相当）と、前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第５のステップ（例えば、図３のステップＳ１０１に相当）と、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第６のステップ（例えば、図３のステップＳ１０１に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２６】
この発明によれば、初段のストリーム暗号器が、鍵系列を出力し、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する。次に、分割された入力メッセージに出力された鍵系列を結合してメッセージデータを生成し、前記初段のハッシュ関数器が、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する。そして、初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする。したがって、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
【００２７】
（１１）本発明は、ストリーム暗号器とハッシュ関数器とからなるブロックを多段に接続してなり、鍵付きハッシュ関数として用いられるハッシュ関数装置の処理方法をコンピュータに実行させるためのプログラムであって、各ストリーム暗号器に鍵を入力し、初期化処理を行う第１のステップ（例えば、図５のステップＳ２０１に相当）と、初段のストリーム暗号器が、鍵系列を出力する第２のステップ（例えば、図５のステップＳ２０２に相当）と、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する第３のステップ（例えば、図５のステップＳ２０３に相当）と、該分割された入力メッセージに該出力された鍵系列を結合してメッセージデータを生成する第４のステップ（例えば、図５のステップＳ２０４に相当）と、前記初段のハッシュ関数器が、前記生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する第５のステップ（例えば、図５のステップＳ２０５に相当）と、前記初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力する第６のステップ（例えば、図５のステップＳ２０６に相当）と、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする第７のステップ（例えば、図５のステップＳ２０７に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２８】
この発明によれば、各ストリーム暗号器に鍵を入力し、初期化処理を行い、初段のストリーム暗号器が、鍵系列を出力し、初段のハッシュ関数器の入力メッセージをブロックの段数で分割する。次に、分割された入力メッセージに出力された鍵系列を結合してメッセージデータを生成し、初段のハッシュ関数器が、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する。そして、初段以降のハッシュ関数器が、前段のハッシュ関数器が生成したハッシュ値とストリーム暗号器が生成するメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し、最終段のハッシュ関数器のハッシュ値を出力ハッシュ値とする。したがって、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
【発明の効果】
【００２９】
本発明によれば、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できるという効果がある。
【図面の簡単な説明】
【００３０】
【図１】本発明の第１の実施形態に係るハッシュ関数装置の構成を示す図である。
【図２】本発明の第１の実施形態に係るハッシュ関数装置における入力メッセージデータの生成について説明する図である。
【図３】本発明の第１の実施形態に係るハッシュ関数装置の処理フローを示す図である。
【図４】本発明の第２の実施形態に係るハッシュ関数装置の構成を示す図である。
【図５】本発明の第２の実施形態に係るハッシュ関数装置の処理フローを示す図である。
【発明を実施するための形態】
【００３１】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
＜第１の実施形態＞
【００３２】
本発明の第１の実施形態について、図１から図３を用いて説明する。
【００３３】
本実施形態に係るハッシュ関数装置は、図１に示すように、ストリーム暗号器１０ａ等とハッシュ関数器２０ａ等から構成される機能ブロックが多段に結合されて構成されている。なお、本実施形態については、上記機能ブロックが３段結合されてなるハッシュ関数装置を示したが結合されるブロック数は、これに限定されるものではない。
【００３４】
まず、初段の機能ブロックでは、通常のメッセージを段数により分割したメッセージにストリーム暗号器１０ａが生成する鍵系列が連結されて入力メッセージを構成する。ここで、図２に示すように、分割したメッセージと鍵系列とを連結したデータ長が所定のデータ長よりも短い場合には、固定のパターン（図２の「Ｘ・・Ｘ」）を用いて、パディング処理を行う。上記の処理は、次段以降の機能ブロックでも同様である。
【００３５】
なお、ストリーム暗号器１０ａは、鍵系列を出力するたびに更新され、異なる鍵系列を出力する。また、本実施形態のように、通常のハッシュ関数として用いる場合には、ストリーム暗号器１０ａの内部状態は、固定値となる。上記の内容に関しては、次段以降のストリーム暗号器１０ｂ、１０ｃにおいても同様である。
【００３６】
ハッシュ関数器２０ａは、上述の入力メッセージと初期値ＩＶとを入力してハッシュ値を出力する。出力されたハッシュ値は、次段のハッシュ関数器２０ｂに入力される。
【００３７】
次段の機能ブロックでは、通常のメッセージを段数により分割したメッセージにストリーム暗号器１０ｂが生成する鍵系列が連結されて入力メッセージを構成する。ハッシュ関数器２０ｂは、上述の入力メッセージとハッシュ関数器２０ａから入力するハッシュ値とを入力してハッシュ値を出力する。出力されたハッシュ値は、次段のハッシュ関数器２０ｃに入力される。
【００３８】
最終段の機能ブロックでは、通常のメッセージを段数により分割したメッセージにストリーム暗号器１０ｃが生成する鍵系列が連結されて入力メッセージを構成する。ハッシュ関数器２０ｃは、上述の入力メッセージとハッシュ関数器２０ｂから入力するハッシュ値とを入力してハッシュ値を出力する。そして、このハッシュ値が、ハッシュ関数装置の出力値となる。
【００３９】
＜ハッシュ関数装置の処理＞
図３を用いて、本実施形態に係るハッシュ関数装置の処理について説明する。
【００４０】
まず、初段のストリーム暗号器１０ａが、鍵系列を出力し（ステップＳ１０１）、初段のハッシュ関数器２０ａの入力メッセージをブロックの段数で分割する（ステップＳ１０２）。
【００４１】
分割された入力メッセージに出力された鍵系列を結合してメッセージデータを生成し（ステップＳ１０３）、初段のハッシュ関数器２０ａが、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する（ステップＳ１０４）。
【００４２】
そして、初段以降のハッシュ関数器２０ｂ、２０ｃが、前段のハッシュ関数器２０ａが生成したハッシュ値とストリーム暗号器が生成した鍵系列と分割したメッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し（ステップＳ１０５）、最終段のハッシュ関数器２０ｃのハッシュ値を出力ハッシュ値とする（ステップＳ１０６）。
【００４３】
以上、説明したように、本実施形態によれば、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
＜第２の実施形態＞
【００４４】
本発明の第２の実施形態について、図４および図５を用いて説明する。
【００４５】
本実施形態のハッシュ関数装置の基本構成は、第１の実施形態と同様であるが、本実施形態においては、ハッシュ関数装置を鍵付きハッシュ関数として用いる場合を示している。したがって、第１の実施形態と同一の部分については、詳細な説明を省略する。
【００４６】
本実施形態に係るストリーム暗号器１１ａ〜１１ｃは、外部から鍵を入力し、鍵系列の生成を行う前に、初期化処理を実行する。その他の動作については、第１の実施形態と同様である。
【００４７】
＜ハッシュ関数装置の処理＞
図５を用いて、本実施形態に係るハッシュ関数装置の処理について説明する。
【００４８】
まず、各ストリーム暗号器１１ａ、１１ｂ、１１ｃに鍵を入力し、初期化処理を行う（ステップＳ２０１）。次に、初段のストリーム暗号器１１ａが、鍵系列を出力し（ステップＳ２０２）、初段のハッシュ関数器２０ｂの入力メッセージをブロックの段数で分割する（ステップＳ２０３）。
【００４９】
分割された入力メッセージに出力された鍵系列を結合してメッセージデータを生成し（ステップＳ２０４）、初段のハッシュ関数器２０ａが、生成されたメッセージデータと初期鍵とを入力してハッシュ値を演算する（ステップＳ２０５）。
【００５０】
そして、初段以降のハッシュ関数器２０ｂ、２０ｃが、前段のハッシュ関数器２０ａが生成したハッシュ値とストリーム暗号器が生成した鍵系列と分割したメッセージとを結合したメッセージデータとを入力して、演算したハッシュ値を後段のハッシュ関数器に出力し（ステップＳ２０６）、最終段のハッシュ関数器２０ｃのハッシュ値を出力ハッシュ値とする（ステップＳ２０７）。
【００５１】
以上、説明したように、本実施形態によれば、従来型のハッシュ関数とストリーム暗号を組み合わせることにより、高速な処理を実現するとともに、安全性の高いハッシュ関数装置を実現できる。また、メッセージと鍵系列とを結合してハッシュ関数器に入力することにより、第三者がアルゴリズムを推定できないため、安全性が高まる。
【００５２】
なお、ハッシュ関数装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをハッシュ関数装置に読み込ませ、実行することによって本発明のハッシュ関数装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００５３】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００５４】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００５５】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００５６】
１０ａ；ストリーム暗号器
１０ｂ；ストリーム暗号器
１０ｃ；ストリーム暗号器
１１ａ；ストリーム暗号器
１１ｂ；ストリーム暗号器
１１ｃ；ストリーム暗号器
２０ａ；ハッシュ関数器
２０ｂ；ハッシュ関数器
２０ｃ；ハッシュ関数器
【図１】
0005624491.tif 000002
【図２】
0005624491.tif 000003
【図３】
0005624491.tif 000004
【図４】
0005624491.tif 000005
【図５】
0005624491.tif 000006