(57)【特許請求の範囲】
【請求項１】
メッセージおよび連鎖変数データを外部から受信するインタフェース部と、
前記メッセージから、複数の拡張メッセージを生成するメッセージ拡張部と、
前記連鎖変数データを、圧縮関数に対する初期状態データに変換する連鎖変数初期変換部と、
前記初期状態データおよび前記複数の拡張メッセージに基づいて拡張メッセージ結合関数と段階関数とを繰り返した後、最終拡張メッセージと結合して最終状態データを算出する圧縮関数演算部と、
前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力する連鎖変数最終変換部とを含み、
前記メッセージ拡張部は、
３２個の３２ビットまたは６４ビットのサブメッセージ（Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）が連接されて構成された１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）を受信し、下記の数式３に基づいて、それぞれ１６個の３２ビットまたは６４ビットのサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）が連接されて構成される２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を生成することを特徴とするハッシュアルゴリズムにおける圧縮演算を行うための装置。
【数１】
0005869053.tif 000033
【請求項２】
前記連鎖変数初期変換部は、
１６個の３２ビットまたは６４ビットのサブ連鎖変数データ（ＣＶ［０］，ＣＶ［１］，…，ＣＶ［１５］）が連接されて構成された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を受信し、数式Ｘ＿０［ｉ］＝ＣＶ［ｉ］、０≦ｉ≦１５に基づいて、１６個の３２ビットまたは６４ビットの初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に変換することを特徴とする、請求項１に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項３】
前記圧縮関数演算部は、
前記５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）および前記２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］；０≦ｒ≦２６）に基づいて前記最終状態データを算出するが、
前記拡張メッセージ結合関数である下記の数式７と、前記段階関数である下記の数式８とを繰り返し演算した後、最終拡張メッセージと結合する下記の数式９を行うことで、前記最終状態データを算出することを特徴とする、請求項２に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【数２】
0005869053.tif 000034
【数３】
0005869053.tif 000035
(ここで、ｒが偶数の時、ａは５、ｂは２３であり、奇数の時、ａは２５、ｂは１９である。ｃは、３２ビット単位の場合に８、６４ビットの場合に１６である。また、ここで、２５６ビットまたは５１２ビットのデータ（Ｃ＿ｒ＝Ｃ＿ｒ［０］｜｜Ｃ＿ｒ［１］｜｜…｜｜Ｃ＿ｒ［７］）は、固定して用いる定数を意味する。)
【数４】
0005869053.tif 000036
（ここで、
【数５】
0005869053.tif 000037
は、それぞれ３２ビットまたは６４ビットのｘ、ｙの排他的論理和を出力する演算、
【数６】
0005869053.tif 000038
は、それぞれ３２ビットまたは６４ビットのｘ、ｙを正の整数で表した値の和を、２３２または２６４で割った時の余りを、３２ビットまたは６４ビットとして出力する演算、ＲＯＴＬ（ｘ，ｊ）は、３２ビットまたは６４ビットのｘを左にｊビットだけ循環移動させて出力する演算を意味する。）
【請求項４】
前記圧縮関数演算部は、
前記拡張メッセージ結合関数と段階関数とを、ｒに対して０から２５まで２６回繰り返し演算した後、最終拡張メッセージと結合して、１６個の３２ビットまたは６４ビットの最終サブ状態データ（Ｘ＿２６［０］，Ｘ＿２６［１］，…，Ｘ＿２６［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を算出することを特徴とする、請求項３に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項５】
前記連鎖変数最終変換部は、
数式ＣＶ’［ｉ］＝Ｘ＿２６［ｉ］、０≦ｉ≦１５に基づいて、５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新し、更新された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）を出力することを特徴とする、請求項４に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項６】
メッセージおよび連鎖変数データを受信するステップと、
前記メッセージから、複数の拡張メッセージを生成するステップと、
前記連鎖変数データを、圧縮関数に対する初期状態データに変換するステップと、
前記初期状態データおよび前記複数の拡張メッセージに基づいて拡張メッセージ結合関数と段階関数とを繰り返し演算した後、最終拡張メッセージと結合して最終状態データを算出するステップと、
前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力するステップとを含み、
前記複数の拡張メッセージを生成するステップは、
３２個の３２ビットまたは６４ビットのサブメッセージ（Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）が連接されて構成された１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）を受信し、下記の数式３に基づいて、それぞれ１６個の３２ビットまたは６４ビットのサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）が連接されて構成される２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を生成することを特徴とするハッシュアルゴリズムにおける圧縮演算を行うための方法。
【数１】
0005869053.tif 000039
【請求項７】
前記拡張メッセージ結合関数と段階関数とを繰り返し演算した後、最終拡張メッセージと結合して前記最終状態データを算出するステップは、
５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）および前記２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］；０≦ｒ≦２６）に基づいて前記最終状態データを算出するが、
前記拡張メッセージ結合関数である下記の数式７と、前記段階関数である下記の数式８とを繰り返し演算した後、最終拡張メッセージと結合する下記の数式９を行うことで、前記最終状態データを算出することを特徴とする、請求項６に記載のハッシュアルゴリズムにおける圧縮演算を行うための方法。
【数２】
0005869053.tif 000040
【数３】
0005869053.tif 000041
（ここで、ｒが偶数の時、ａは５、ｂは２３であり、奇数の時、ａは２５、ｂは１９である。ｃは、３２ビット単位の場合に８、６４ビットの場合に１６である。また、２５６ビットまたは５１２ビットのデータ（Ｃ＿ｒ＝Ｃ＿ｒ［０］｜｜Ｃ＿ｒ［１］｜｜…｜｜Ｃ＿ｒ［７］）は、固定して用いる定数を意味する。）
【数４】
0005869053.tif 000042
（ここで、
【数５】
0005869053.tif 000043
は、それぞれ３２ビットまたは６４ビットのｘ、ｙの排他的論理和を出力する演算、
【数６】
0005869053.tif 000044
は、それぞれ３２ビットまたは６４ビットのｘ、ｙを正の整数で表した値の和を、２３２または２６４で割った時の余りを、３２ビットまたは６４ビットとして出力する演算、ＲＯＴＬ（ｘ，ｊ）は、３２ビットまたは６４ビットのｘを左にｊビットだけ循環移動させて出力する演算を意味する。）
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハッシュアルゴリズムにおける圧縮演算を行うための装置および方法に関するものであって、より具体的には、１０２４ビットのメッセージおよび５１２ビットの連鎖変数データ、または２０４８ビットのメッセージおよび１０２４ビットの連鎖変数データを受信し、２５６ビットのレジスタ基盤の拡張メッセージ結合関数と段階関数とを繰り返し演算した後、最終拡張メッセージと結合して、ハッシュ値の基となる更新された５１２ビットまたは１０２４ビットの連鎖変数データを算出する、高速メッセージのハッシュアルゴリズムにおける圧縮演算を行うための装置および方法に関するものである。
【背景技術】
【０００２】
メッセージに対する無欠性の提供は、各種機器の通信および資料格納のための暗号アプリケーションの主な機能である。ハッシュ（Ｈａｓｈ）関数は、このようなメッセージの無欠性を保障するための関数であって、メッセージの署名、認証などにおいて広く活用される。一般的に、ハッシュ関数では、連鎖変数（Ｃｈａｉｎ  ｖａｒｉａｂｌｅ）データが用いられ、メッセージを特定の長さ単位に分割した後、各メッセージ単位を連鎖変数データと共に圧縮関数に入力して連鎖変数データを更新する。圧縮関数から出力される最終連鎖変数データは、多様なアルゴリズムによって加工され、当該メッセージのハッシュ値となる。
【０００３】
これに関連し、「２５６ビットの出力を有するハッシュアルゴリズム」を発明の名称とする韓国登録特許第１０−０９１６８０５号は、任意の長さのメッセージのビット列を受信してワード列に変換し、入力されたメッセージを予め設定されたビットに変換して圧縮演算を行うことにより、連鎖変数を算出するハッシュアルゴリズム手法を提示している。
【０００４】
このような、ハッシュ関数の速度効率性を高めるためには、ハッシュ関数の核心アルゴリズムである圧縮関数が暗号アプリケーションに特化したチップまたはＣＰＵに最適な実現が可能となるように設計される必要がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】韓国登録特許第１０−０９１６８０５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、５１２ビットまたは１０２４ビットの出力値を有し、従来の攻撃に対する安全性を保障しながら、高速メッセージのハッシングが可能なハッシュ関数に適用される２５６ビットのレジスタ基盤の圧縮関数を演算する手法を提供することである。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置は、メッセージおよび連鎖変数データを外部から受信するインタフェース部と、前記メッセージから、複数の拡張メッセージを生成するメッセージ拡張部と、連鎖変数データを、圧縮関数に対する初期状態データに変換する連鎖変数初期変換部と、初期状態データおよび複数の拡張メッセージに基づいて拡張メッセージ結合関数と段階関数とを繰り返した後、最終拡張メッセージと結合して最終状態データを算出する圧縮関数演算部と、最終状態データを用いて、連鎖変数データから更新された連鎖変数データを生成して出力する連鎖変数最終変換部とを含むことを特徴とする。
【０００８】
メッセージ拡張部は、３２個の３２ビットまたは６４ビットのサブメッセージ（Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）が連接されて構成された１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）を受信し、下記の数式３に基づいて、それぞれ１６個の３２ビットまたは６４ビットのサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）が連接されて構成される２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を生成することを特徴とし、ここで、数式３は、Ｗ＿０［ｉ］＝Ｍ［ｉ］、０≦ｉ≦１５；Ｗ＿１［ｉ−１６］＝Ｍ［ｉ］、１６≦ｉ≦３１；Ｗ＿ｒ［ｉ］＝Ｗ＿（ｒ−２）［τ（ｉ）］
0005869053.tif 000002
Ｗ＿（ｒ−１）［ｉ］、２≦ｒ≦２６、０≦ｉ≦１５；τ（０）＝３、τ（１）＝２、τ（２）＝０、τ（３）＝１、τ（４）＝７、τ（５）＝４、τ（６）＝５、τ（７）＝６、τ（８）＝１１、τ（９）＝１０、τ（１０）＝８、τ（１１）＝９、τ（１２）＝１５、τ（１３）＝１２、τ（１４）＝１３、τ（１５）＝１４であり得る。
【０００９】
連鎖変数初期変換部は、１６個の３２ビットまたは６４ビットのサブ連鎖変数データ（ＣＶ［０］，ＣＶ［１］，…，ＣＶ［１５］）が連接されて構成された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を受信し、数式Ｘ＿０［ｉ］＝ＣＶ［ｉ］、０≦ｉ≦１５に基づいて、１６個の３２ビットまたは６４ビットの初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に変換することを特徴とする。
【００１０】
圧縮関数演算部は、前記５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）および前記２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］；０≦ｒ≦２６）に基づいて前記最終状態データを算出するが、前記拡張メッセージ結合関数である下記の数式７と、前記段階関数である下記の数式８とを繰り返し演算した後、最終拡張メッセージと結合する下記の数式９を行うことで、前記最終状態データを算出することを特徴とする。ここで、数式７は、Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000003
Ｗ＿ｒ［ｉ］、０≦ｉ≦１５であり、数式８は、Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000004
Ｘ＿ｒ［ｉ＋８］、０≦ｉ≦７；Ｘ＿ｒ［ｉ］＝ＲＯＴＬ（Ｘ＿ｒ［ｉ］，ａ）、０≦ｉ≦７；Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000005
Ｃ＿ｒ［ｉ］、０≦ｉ≦７；Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ−８］
0005869053.tif 000006
Ｘ＿ｒ［ｉ］、８≦ｉ≦１５；Ｘ＿ｒ［ｉ］＝ＲＯＴＬ（Ｘ＿ｒ［ｉ］，ｂ）、８≦ｉ≦１５；Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000007
Ｘ＿ｒ［ｉ＋８］、０≦ｉ≦７；Ｘ＿ｒ［９］＝ＲＯＴＬ（Ｘ＿ｒ［９］，ｃ）；Ｘ＿ｒ［１０］＝ＲＯＴＬ（Ｘ＿ｒ［１０］，２ｃ）；Ｘ＿ｒ［１１］＝ＲＯＴＬ（Ｘ＿ｒ［１１］，３ｃ）；Ｘ＿ｒ［１３］＝ＲＯＴＬ（Ｘ＿ｒ［１３］，ｃ）；Ｘ＿ｒ［１４］＝ＲＯＴＬ（Ｘ＿ｒ［１４］，２ｃ）；Ｘ＿ｒ［１５］＝ＲＯＴＬ（Ｘ＿ｒ［１６］，３ｃ）；Ｘ＿（ｒ＋１）［ｉ］＝Ｘ＿ｒ［σ（ｉ）］、０≦ｉ≦１５；σ（０）＝６、σ（１）＝４、σ（２）＝５、σ（３）＝７、σ（４）＝１２、σ（５）＝１５、σ（６）＝１４、σ（７）＝１３、σ（８）＝２、σ（９）＝０、σ（１０）＝１、σ（１１）＝３、σ（１２）＝８、σ（１３）＝１１、σ（１４）＝１０、σ（１５）＝９；であり、数式９は、Ｘ＿２６［ｉ］＝Ｘ＿２６［ｉ］
0005869053.tif 000008
Ｗ＿２６［ｉ］、０≦ｉ≦１５；を意味する。ここで、
0005869053.tif 000009
は、それぞれ３２ビットまたは６４ビットのｘ、ｙの排他的論理和を出力する演算、
0005869053.tif 000010
は、それぞれ３２ビットまたは６４ビットのｘ、ｙを正の整数で表した値の和を、２３２または２６４で割った時の余りを、３２ビットまたは６４ビットとして出力する演算、ＲＯＴＬ（ｘ，ｊ）は、３２ビットまたは６４ビットのｘを左にｊビットだけ循環移動させて出力する演算を意味する。
【００１１】
圧縮関数演算部は、前記拡張メッセージ結合関数と段階関数とを、ｒに対して０から２５まで２６回繰り返し演算した後、最終拡張メッセージと結合して、１６個の３２ビットまたは６４ビットの最終サブ状態データ（Ｘ＿２６［０］，Ｘ＿２６［１］，…，Ｘ＿２６［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を算出することを特徴とする。
【００１２】
連鎖変数最終変換部は、数式ＣＶ’［ｉ］＝Ｘ＿２６［ｉ］、０≦ｉ≦１５に基づいて、５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新し、更新された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）を出力することを特徴とする。
【００１３】
上記の目的を達成するための、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法は、メッセージおよび連鎖変数データを受信するステップと、前記メッセージから、複数の拡張メッセージを生成するステップと、前記連鎖変数データを、圧縮関数に対する初期状態データに変換するステップと、前記初期状態データおよび前記複数の拡張メッセージに基づいて拡張メッセージ結合関数と段階関数とを繰り返し演算した後、最終拡張メッセージと結合して最終状態データを算出するステップと、前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力するステップとを含むことを特徴とする。
【００１４】
複数の拡張メッセージを生成するステップは、３２個の３２ビットまたは６４ビットのサブメッセージ（Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）が連接されて構成された１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）を受信し、下記の数式３に基づいて、それぞれ１６個の３２ビットまたは６４ビットのサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）が連接されて構成される２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を生成することを特徴とする。ここで、数式３は、Ｗ＿０［ｉ］＝Ｍ［ｉ］、０≦ｉ≦１５；Ｗ＿１［ｉ−１６］＝Ｍ［ｉ］、１６≦ｉ≦３１；Ｗ＿ｒ［ｉ］＝Ｗ＿（ｒ−２）［τ（ｉ）］
0005869053.tif 000011
Ｗ＿（ｒ−１）［ｉ］、２≦ｒ≦２６、０≦ｉ≦１５；τ（０）＝３、τ（１）＝２、τ（２）＝０、τ（３）＝１、τ（４）＝７、τ（５）＝４、τ（６）＝５、τ（７）＝６、τ（８）＝１１、τ（９）＝１０、τ（１０）＝８、τ（１１）＝９、τ（１２）＝１５、τ（１３）＝１２、τ（１４）＝１３、τ（１５）＝１４であり得る。
【００１５】
連鎖変数データを、前記圧縮関数に対する前記初期状態データに変換するステップは、１６個の３２ビットまたは６４ビットのサブ連鎖変数データ（ＣＶ［０］，ＣＶ［１］，…，ＣＶ［１５］）が連接されて構成された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を受信し、数式Ｘ＿０［ｉ］＝ＣＶ［ｉ］、０≦ｉ≦１５に基づいて、１６個の３２ビットまたは６４ビットの初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に変換することを特徴とする。
【００１６】
拡張メッセージ結合関数と段階関数とを繰り返し演算した後、最終拡張メッセージと結合して前記最終状態データを算出するステップは、前記５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）および前記２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］；０≦ｒ≦２６）に基づいて前記最終状態データを算出するが、前記拡張メッセージ結合関数である下記の数式７と、前記段階関数である下記の数式８とを繰り返し演算した後、最終拡張メッセージと結合する下記の数式９を行うことで、前記最終状態データを算出することを特徴とする。ここで、数式７は、Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000012
Ｗ＿ｒ［ｉ］、０≦ｉ≦１５；であり、数式８は、Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000013
Ｘ＿ｒ［ｉ＋８］、０≦ｉ≦７；Ｘ＿ｒ［ｉ］＝ＲＯＴＬ（Ｘ＿ｒ［ｉ］，ａ）、０≦ｉ≦７；Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000014
Ｃ＿ｒ［ｉ］、０≦ｉ≦７；Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ−８］
0005869053.tif 000015
Ｘ＿ｒ［ｉ］、８≦ｉ≦１５；Ｘ＿ｒ［ｉ］＝ＲＯＴＬ（Ｘ＿ｒ［ｉ］，ｂ）、８≦ｉ≦１５；Ｘ＿ｒ［ｉ］＝Ｘ＿ｒ［ｉ］
0005869053.tif 000016
Ｘ＿ｒ［ｉ＋８］、０≦ｉ≦７；Ｘ＿ｒ［９］＝ＲＯＴＬ（Ｘ＿ｒ［９］，ｃ）；Ｘ＿ｒ［１０］＝ＲＯＴＬ（Ｘ＿ｒ［１０］，２ｃ）；Ｘ＿ｒ［１１］＝ＲＯＴＬ（Ｘ＿ｒ［１１］，３ｃ）；Ｘ＿ｒ［１３］＝ＲＯＴＬ（Ｘ＿ｒ［１３］，ｃ）；Ｘ＿ｒ［１４］＝ＲＯＴＬ（Ｘ＿ｒ［１４］，２ｃ）；Ｘ＿ｒ［１５］＝ＲＯＴＬ（Ｘ＿ｒ［１６］，３ｃ）；Ｘ＿（ｒ＋１）［ｉ］＝Ｘ＿ｒ［σｉ）］、０≦ｉ≦１５；σ（０）＝６、σ（１）＝４、σ（２）＝５、σ（３）＝７、σ（４）＝１２、σ（５）＝１５、σ（６）＝１４、σ（７）＝１３、σ（８）＝２、σ（９）＝０、σ（１０）＝１、σ（１１）＝３、σ（１２）＝８、σ（１３）＝１１、σ（１４）＝１０、σ（１５）＝９；であり、数式９は、Ｘ＿２６［ｉ］＝Ｘ＿２６［ｉ］
0005869053.tif 000017
Ｗ＿２６［ｉ］、０≦ｉ≦１５；を意味する。ここで、
0005869053.tif 000018
は、それぞれ３２ビットまたは６４ビットのｘ、ｙの排他的論理和を出力する演算、
0005869053.tif 000019
は、それぞれ３２ビットまたは６４ビットのｘ、ｙを正の整数で表した値の和を、２３２または２６４で割った時の余りを、３２ビットまたは６４ビットとして出力する演算、ＲＯＴＬ（ｘ，ｊ）は、３２ビットまたは６４ビットのｘを左にｊビットだけ循環移動させて出力する演算を意味する。
【００１７】
段階関数を繰り返し演算して前記最終状態データを算出するステップは、拡張メッセージ結合関数と段階関数とを、ｒに対して０から２５まで２６回繰り返し演算した後、最終拡張メッセージと結合して、１６個の３２ビットまたは６４ビットの最終サブ状態データ（Ｘ＿２６［０］，Ｘ＿２６［１］，…，Ｘ＿２６［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を算出することを特徴とする。
【００１８】
連鎖変数データから更新された連鎖変数データを生成して出力するステップは、数式ＣＶ’［ｉ］＝Ｘ＿２６［ｉ］、０≦ｉ≦１５に基づいて、５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新し、更新された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）を出力することを特徴とする。
【発明の効果】
【００１９】
本発明によれば、単純なメッセージ拡張アルゴリズムを提供する一方、大部分のＣＰＵにおいて普遍的に用いられるビット加算（Ａｄｄｉｔｉｏｎ）、ビット循環移動（Ｒｏｔａｔｉｏｎ）、ビット排他的論理和（ＸＯＲ：ｅＸｃｌｕｓｉｖｅ−ＯＲ）演算子のみを組み合わせた圧縮演算アルゴリズムを提供することにより、２５６ビットのレジスタを用いた高速並列処理が可能であり、これにより、ＣＰＵが少ない演算量だけでも圧縮演算を行うことができる効果がある。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置の構成を説明するためのブロック図である。
【図２】図１に示された拡張メッセージ結合関数および圧縮関数演算部で行われる演算を図式化した図である。
【図３】本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法を説明するためのフローチャートである。
【図４】図３に示された本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法において、拡張メッセージ結合関数と段階関数とを繰り返し演算する過程をより具体的に説明するためのフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明を添付した図面を参照して詳細に説明する。ここで、繰り返される説明、本発明の要旨を不明にする可能性がある公知の機能、および構成に関する詳細な説明は省略する。本発明の実施形態は、当業界における平均的な知識を有する者に本発明をより完全に説明するために提供されるものである。したがって、図面における要素の形状および大きさなどは、より明確な説明のために誇張されることがある。
【００２２】
以下、図１および図２を参照して、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置の構成およびその動作について説明する。
【００２３】
図１は、本発明の実施形態にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置の構成を説明するためのブロック図である。
【００２４】
図１を参照すれば、本発明にかかる圧縮演算実行装置１０は、外部からメッセージ（Ｍ）２０および連鎖変数データ（ＣＶ）３０を受信するインタフェース部１００と、メッセージ（Ｍ）２０から、複数の拡張メッセージを生成するメッセージ拡張部２００と、連鎖変数データ（ＣＶ）３０を、圧縮関数に対する初期状態データに変換する連鎖変数初期変換部３００と、メッセージ拡張部２００によって生成された複数の拡張メッセージと連鎖変数データ（ＣＶ）３０との結合により連鎖変数データを更新する拡張メッセージ結合関数と、連鎖変数データ（ＣＶ）３０を直接更新する段階関数とを繰り返し演算した後、連鎖変数データ（ＣＶ）３０を最終拡張メッセージと結合して最終状態データを算出する圧縮関数演算部４００と、圧縮関数演算部４００によって算出された最終状態データを用いて、インタフェース部１００に入力された連鎖変数データ（ＣＶ）３０を更新した連鎖変数データ（ＣＶ’）４０を出力する連鎖変数最終変換部５００とを含む。
【００２５】
インタフェース部１００は、使用者から、圧縮および暗号化の対象になるメッセージとして、１０２４ビット数または２０４８ビット数を有するメッセージ（Ｍ）２０を受信する。また、インタフェース部１００は、本発明にかかる圧縮演算実行装置１０の外部に位置する連鎖変数生成手段（図示せず）から、５１２ビット数または１０２４ビットを有する連鎖変数データ（ＣＶ）３０を受信する。この時、インタフェース部１００は、入力されたメッセージ（Ｍ）２０をメッセージ拡張部２００に伝達する一方、連鎖変数データ（ＣＶ）３０を連鎖変数初期変換部３００に伝達する。
【００２６】
メッセージ拡張部２００は、インタフェース部１００から伝達された１０２４ビット数または２０４８ビット数を有するメッセージ（Ｍ）から、２７個の５１２ビット数または１０２４ビット数を有する拡張メッセージ（Ｗ＿０，Ｗ＿１，…，Ｗ＿２６；Ｗ＿ｒ、０≦ｒ≦２６）を生成する。この時、メッセージ拡張部２００に入力される１０２４ビットまたは２０４８ビットのメッセージ（Ｍ）は、下記の数式１で表されるように、それぞれ３２ビット数または６４ビット数を有する３２個のサブメッセージ（Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）が連接されて構成される。
【数１】
0005869053.tif 000020
【００２７】
メッセージ拡張部２００は、入力された１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）から、下記の数式２で表されるように、１６個の３２ビット数または６４ビット数を有するサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）が連接されて構成される５１２ビット数または１０２４ビット数を有する２７個の拡張メッセージ（Ｗ＿ｒ、０≦ｒ≦２６）を生成する。
【数２】
0005869053.tif 000021
【００２８】
この時、メッセージ拡張部２００は、下記の数式３に基づいて、１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）から、計２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿０，Ｗ＿１，…，Ｗ＿２６；Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を生成する。
【数３】
0005869053.tif 000022
【００２９】
また、メッセージ拡張部２００は、１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）から生成した２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿０，Ｗ＿１，…，Ｗ＿２６；Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を圧縮関数演算部４００に出力する。
【００３０】
連鎖変数初期変換部３００は、インタフェース部１００から伝達された５１２ビット数または１０２４ビット数を有する連鎖変数データ（ＣＶ）を、５１２ビット数または１０２４ビット数を有する初期状態データ（Ｘ＿０）に変換する。この時、連鎖変数初期変換部３００に入力される５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ）は、下記の数式４で表されるように、それぞれ３２ビット数または６４ビット数を有する１６個のサブ連鎖変数データ（ＣＶ［０］，ＣＶ［１］，…，ＣＶ［１５］）が連接されて構成される。
【数４】
0005869053.tif 000023
連鎖変数初期変換部３００は、入力された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を、下記の数式５で表されるように、１６個の３２ビット数または６４ビット数を有する初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）が連接されて構成される５１２ビット数または１０２４ビット数を有する初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に変換する。
【数５】
0005869053.tif 000024
【００３１】
この時、連鎖変数初期変換部３００は、下記の数式６に基づいて、５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を、５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に変換する。
【数６】
0005869053.tif 000025
【００３２】
連鎖変数初期変換部３００は、入力された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）から変換した５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）を圧縮関数演算部４００に出力する。
【００３３】
圧縮関数演算部４００は、連鎖変数初期変換部３００から入力された５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）を初期値として、メッセージ拡張部２００から入力された２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿０，Ｗ＿１，…，Ｗ＿２６；Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を用いて、下記の拡張メッセージ結合関数である数式７と、段階関数である数式８との演算を順次に繰り返し行った後、数式９を行うことで、最終状態データを算出する。
【数７】
0005869053.tif 000026
【００３４】
【数８】
0005869053.tif 000027
【００３５】
ここで、ｒが偶数の時、ａは５、ｂは２３であり、奇数の時、ａは２５、ｂは１９である。ｃは、３２ビット単位の場合に８、６４ビットの場合に１６である。また、ここで、２５６ビットまたは５１２ビットのデータ（Ｃ＿ｒ＝Ｃ＿ｒ［０］｜｜Ｃ＿ｒ［１］｜｜…｜｜Ｃ＿ｒ［７］）は、固定して用いる定数を意味する。
【数９】
0005869053.tif 000028
【００３６】
ここで、
0005869053.tif 000029
は、それぞれ３２ビットまたは６４ビットのｘ、ｙの排他的論理和を出力する演算を意味し、
0005869053.tif 000030
は、それぞれ３２ビットまたは６４ビットのｘ、ｙを正の整数で表した値の和を、２３２または２６４で割った時の余りを、３２ビットまたは６４ビットとして出力する演算を意味し、ＲＯＴＬ（ｘ，ｊ）は、３２ビットまたは６４ビットのｘを左にｊビットだけ循環移動させて出力する演算を意味する。
【００３７】
圧縮関数演算部４００は、数式７と数式８とを順次に２６回繰り返し演算した後、数式９を行う。圧縮関数を演算した結果値（Ｘ＿２６［０］，Ｘ＿２６［１］，…，Ｘ＿２６［１５］）を、下記の数式１０のように連接して最終状態データ（Ｘ＿２６）を算出する。圧縮関数演算部４００は、最終状態データ（Ｘ＿２６）を連鎖変数最終変換部５００に出力する。
【数１０】
0005869053.tif 000031
【００３８】
一方、圧縮関数演算部４００が、サブ状態データ（Ｘ＿ｒ［０］，Ｘ＿ｒ［１］，…，Ｘ＿ｒ［１５］）およびサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］；０≦ｒ≦２６）を入力値として、拡張メッセージ結合関数と段階関数とを演算することにより、サブ状態データ（Ｘ＿（ｒ＋１）［０］，Ｘ＿（ｒ＋１）［１］，…，Ｘ＿（ｒ＋１）［１５］）を算出する演算は、図２のように示すことができる。
【００３９】
連鎖変数最終変換部５００は、圧縮関数演算部４００から入力された最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を用いて、インタフェース部１００に入力される連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新し、更新された連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）を出力する。この時、連鎖変数最終変換部５００は、下記の数式１２に基づいて、５１２ビット数を有する連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新した連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）を生成する。
【数１１】
0005869053.tif 000032
【００４０】
連鎖変数最終変換部５００から出力される更新された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）は、すでに公知の多様なアルゴリズムによって加工され、インタフェース部１００に入力される１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）に対するハッシュ値として用いられる。
【００４１】
以下、図３および図４を参照して、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置によって行われる圧縮演算実行方法について説明する。前述の、図１および図２を参照して説明した本発明にかかる圧縮演算実行装置１０の動作と一部重複する部分は省略して説明する。
【００４２】
図３は、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法を説明するためのフローチャートである。
【００４３】
図３を参照すれば、本発明にかかる圧縮演算実行方法は、まず、インタフェース部１００が、外部から１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）および５１２ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を受信する（Ｓ１００）。この時、インタフェース部１００は、入力された５１２ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）をメッセージ拡張部２００に伝達する一方、５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を連鎖変数初期変換部３００に伝達する。
【００４４】
そして、メッセージ拡張部２００は、数式３に基づいて、３２個の３２ビットまたは６４ビットのサブメッセージ（Ｍ［０］，Ｍ［１］，…，Ｍ［３１］）が連接されて構成された１０２４ビットまたは２０４８ビットのメッセージ（Ｍ＝Ｍ［０］｜｜Ｍ［１］｜｜…｜｜Ｍ［３１］）から、それぞれ１６個の３２ビットまたは６４ビットのサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）が連接されて構成される２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿０，Ｗ＿１，…，Ｗ＿２６；Ｗ＿ｒ＝Ｗ＿ｒ［０］｜｜Ｗ＿ｒ［１］｜｜…｜｜Ｗ＿ｒ［１５］、０≦ｒ≦２６）を生成する（Ｓ２００）。この時、メッセージ拡張部２００は、生成した２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ、０≦ｒ≦２６）を圧縮関数演算部４００に出力する。
【００４５】
一方、連鎖変数初期変換部３００は、インタフェース部１００から伝達された１６個の３２ビットまたは６４ビットのサブ連鎖変数データ（ＣＶ［０］，ＣＶ［１］，…，ＣＶ［１５］）が連接されて構成された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を、数式６に基づいて、１６個の３２ビットの初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）が連接されて構成される５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に変換する（Ｓ３００）。この時、連鎖変数初期変換部３００は、変換した５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）を圧縮関数演算部４００に出力する。
【００４６】
次に、圧縮関数演算部４００は、メッセージ拡張部２００から受信した２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ、０≦ｒ≦２６）および連鎖変数初期変換部３００から受信した５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）に基づいて数式７および数式８による演算を順次に繰り返し行い、最終的に数式９を行う圧縮関数を演算する（Ｓ４００）。この時、圧縮関数演算部４００は、それぞれ３２ビット数または６４ビット数を有する１６個の初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）を１回目の圧縮関数の入力値とし、（ｒ＋１）回目の段階関数の演算時に、それぞれ３２ビット数または６４ビット数を有する１６個のサブ拡張メッセージ（Ｗ＿ｒ［０］，Ｗ＿ｒ［１］，…，Ｗ＿ｒ［１５］）を適用して演算する。
【００４７】
そして、圧縮関数演算部４００は、最後に演算された結果値（すなわち、Ｘ＿２６［０］，Ｘ＿２６［１］，…，Ｘ＿２６［１５］）を連接して５１２ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を算出する（Ｓ５００）。この時、圧縮関数演算部４００は、算出した５１２ビットまたは１０２４ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を連鎖変数最終変換部５００に出力する。
【００４８】
最後に、連鎖変数最終変換部５００は、圧縮関数演算部４００から受信した５１２ビットまたは１０２４ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を用いて、インタフェース部１００に入力される５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新して出力する（Ｓ６００）。この時、連鎖変数最終変換部５００は、数式１１に基づいて、インタフェース部１００に入力される５１２ビットの連鎖変数データ（ＣＶ＝ＣＶ［０］｜｜ＣＶ［１］｜｜…｜｜ＣＶ［１５］）を更新し、更新された５１２ビットまたは１０２４ビットの連鎖変数データ（ＣＶ’＝ＣＶ’［０］｜｜ＣＶ’［１］｜｜…｜｜ＣＶ’［１５］）を生成して出力する。
【００４９】
図４は、図３に示された本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法を示したフローチャートにおいて、拡張メッセージ結合関数と段階関数とを繰り返し演算するＳ４００ステップをより具体的に説明するためのフローチャートである。
【００５０】
図４を参照すれば、拡張メッセージ結合関数と段階関数とを繰り返し演算するＳ４００ステップは、まず、圧縮関数演算部４００が、メッセージ拡張部２００から２７個の５１２ビットまたは１０２４ビットの拡張メッセージ（Ｗ＿ｒ、０≦ｒ≦２６）を受信する一方、連鎖変数初期変換部３００から５１２ビットまたは１０２４ビットの初期状態データ（Ｘ＿０＝Ｘ＿０［０］｜｜Ｘ＿０［１］｜｜…｜｜Ｘ＿０［１５］）を受信する（Ｓ４１０）。
【００５１】
次に、圧縮関数演算部４００は、ｒ値を０に設定した後、初期サブ状態データ（Ｘ＿０［０］，Ｘ＿０［１］，…，Ｘ＿０［１５］）を入力値として、１回目の拡張メッセージ結合関数と段階関数との演算を開始する（Ｓ４２０）。
【００５２】
そして、（ｒ＋１）回目の演算において、圧縮関数演算部４００は、数式７を先に計算し（Ｓ４３０）、次に、数式８を計算する（Ｓ４４０）。そして、圧縮関数演算部４００は、前記Ｓ４４０ステップで計算した値を用いて、最終的に（ｒ＋１）回目の段階関数での結果値（Ｘ＿（ｒ＋１）［０］，Ｘ＿（ｒ＋１）［１］，…，Ｘ＿（ｒ＋１）［１５］）を算出する（Ｓ４５０）。
【００５３】
次に、前記Ｓ４３０〜Ｓ４５０ステップによって（ｒ＋１）回目の段階関数の演算が行われた後、圧縮関数演算部４００は、ｒ値が２５であるか否かを確認する（Ｓ４６０）。
【００５４】
前記Ｓ４６０ステップでの確認の結果、ｒ値が２５でない場合（すなわち、ｒ値が２５より小さい場合）、圧縮関数演算部４００は、ｒ値を１増加させ（Ｓ４７０）、前記Ｓ４３０〜Ｓ４５０ステップによる関数を繰り返し演算する。
【００５５】
反面、前記Ｓ４６０ステップでの確認の結果、ｒ値が２５であれば、圧縮関数演算部４００は、２６回目の段階関数の演算から出力された結果値（Ｘ＿２５［０］，Ｘ＿２５［１］，…，Ｘ＿２５［１５］）に最終的に数式９を行うことで、５１２ビットまたは１０２４ビットの最終状態データ（Ｘ＿２６＝Ｘ＿２６［０］｜｜Ｘ＿２６［１］｜｜…｜｜Ｘ＿２６［１５］）を連鎖変数最終変換部５００に出力する（Ｓ４８０）。
【００５６】
一方、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法は、多様なコンピュータ手段により実行可能なプログラム命令形態で実現され、コンピュータ読み取り可能な記録媒体に記録できる。前記コンピュータ読み取り可能な記録媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせて含むことができる。前記記録媒体に記録されるプログラム命令は、本発明のために特別に設計されて構成されたものであるか、コンピュータソフトウェア当業者に公知されて使用可能なものであってもよい。コンピュータ読み取り可能な記録媒体の例には、ハードディスク、フロッピィーディスクおよび磁気テープのような磁気媒体（ｍａｇｎｅｔｉｃ  ｍｅｄｉａ）、ＣＤ−ＲＯＭ、ＤＶＤのような光記録媒体（ｏｐｔｉｃａｌ  ｍｅｄｉａ）、フロプティカルディスク（ｆｌｏｐｔｉｃａｌ  ｄｉｓｋ）のような光磁気媒体（ｍａｇｎｅｔｏ−ｏｐｔｉｃａｌ  ｍｅｄｉａ）、およびＲＯＭ、ＲＡＭ、フラッシュメモリなどのようなプログラム命令を格納し実行するように特別に構成されたあらゆる形態のハードウェア装置が含まれる。プログラム命令の例には、コンパイラによって作られるような機械語コードだけでなく、インタプリタなどを用いてコンピュータによって実行可能な高級言語コードを含む。
【００５７】
以上、図面および明細書で最適な実施形態が開示された。ここで、特定の用語が使用されたが、これは単に本発明を説明するための目的で使用されたものであり、意味の限定や特許請求の範囲に記載された本発明の範囲を制限するために使用されたものではない。そのため、本技術分野における通常の知識を有する者であれば、これから多様な変形および均等な他の実施形態が可能であることを理解することができる。したがって、本発明の真の技術的保護範囲は、添付した特許請求の範囲の技術的思想によって定められなければならない。
【符号の説明】
【００５８】
１０：圧縮演算実行装置
１００：インタフェース部
２００：メッセージ拡張部
３００：連鎖変数初期変換部
４００：圧縮関数演算部
５００：連鎖変数最終変換部
【図１】
0005869053.tif 000045
【図２】
0005869053.tif 000046
【図３】
0005869053.tif 000047
【図４】
0005869053.tif 000048