(57)【要約】【課題】本発明は、５１２ビットのメッセージと、５１２ビットの連鎖変数データとを受信して１２８ビットのレジスタベースの段階関数を繰り返し演算し、ハッシュ値の基となる更新された５１２ビットの連鎖変数データを算出するための、高速メッセージのハッシュアルゴリズムにおける圧縮演算を行うための装置および方法を開示する。【解決手段】このために、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置は、メッセージを受信して複数の拡張メッセージを生成するメッセージ拡張部と、連鎖変数データを受信して初期状態データに変換する連鎖変数初期変換部と、初期状態データと、複数の拡張メッセージとに基づいて段階関数を繰り返し演算し、最終状態データを算出する段階関数演算部と、最終状態データを用いて、連鎖変数データから更新された連鎖変数データを生成して出力する連鎖変数最終変換部とを含む。【選択図】図１
2014232301.tif 000002
【特許請求の範囲】
【請求項１】
メッセージを受信して複数の拡張メッセージを生成するメッセージ拡張部と、
連鎖変数データを受信して初期状態データに変換する連鎖変数初期変換部と、
前記初期状態データと、前記複数の拡張メッセージとに基づいて段階関数を繰り返し演算し、最終状態データを算出する段階関数演算部と、
前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力する連鎖変数最終変換部とを含むことを特徴とする、ハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項２】
前記メッセージ拡張部は、
１６個の３２ビットのサブメッセージ（
【数１】
2014232301.tif 000139
）が連接されて構成された５１２ビットのメッセージ（
【数２】
2014232301.tif 000140
）を受信し、
【数３】
2014232301.tif 000141
に基づいてそれぞれ１２個の３２ビットのサブ拡張メッセージ（
【数４】
2014232301.tif 000142
）が連接されて構成される３２個の３８４ビットの拡張メッセージ（
【数５】
2014232301.tif 000143
）を生成することを特徴とする、請求項１に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。（ここで、ｒは
【数６】
2014232301.tif 000144
の整数であり、
【数７】
2014232301.tif 000145
はｘを１６で割った時の余りを出力する演算を意味する。）
【請求項３】
前記連鎖変数初期変換部は、
１６個の３２ビットのサブ連鎖変数データ（
【数８】
2014232301.tif 000146
）が連接されて構成された５１２ビットの連鎖変数データ（
【数９】
2014232301.tif 000147
）を受信し、
【数１０】
2014232301.tif 000148
に基づいて１６個の３２ビットの初期サブ状態データ（
【数１１】
2014232301.tif 000149
）が連接されて構成される５１２ビットの初期状態データ（
【数１２】
2014232301.tif 000150
）に変換することを特徴とする、請求項２に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項４】
前記段階関数演算部は、
前記５１２ビットの初期状態データ（
【数１３】
2014232301.tif 000151
）と、前記３２個の３８４ビットの拡張メッセージ（
【数１４】
2014232301.tif 000152
）とに基づいて前記段階関数を繰り返し演算し、前記最終状態データを算出し、
前記段階関数は、下記の数式１〜５を演算する関数であることを特徴とする、請求項３に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
（数式１）
【数１５】
2014232301.tif 000153
（数式２）
【数１６】
2014232301.tif 000154
（数式３）
【数１７】
2014232301.tif 000155
（数式４）
【数１８】
2014232301.tif 000156
（数式５）
【数１９】
2014232301.tif 000157
（ここで、
【数２０】
2014232301.tif 000158
はそれぞれ３２ビットのｘ、ｙの論理的排他和を出力する演算、
【数２１】
2014232301.tif 000159
はそれぞれ３２ビットのｘ、ｙを正の整数で表した値の和を２３２で割った時の余りを３２ビットとして出力する演算、
【数２２】
2014232301.tif 000160
は３２ビットのｘを左にａビットだけ循環移動させて出力する演算を意味する。）
【請求項５】
前記段階関数演算部は、
前記段階関数を、ｒに対して０から３１まで３２回繰り返し演算し、１６個の３２ビットの最終サブ状態データ（
【数２３】
2014232301.tif 000161
）が連接されて構成される５１２ビットの最終状態データ（
【数２４】
2014232301.tif 000162
）を算出することを特徴とする、請求項４に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項６】
前記連鎖変数最終変換部は、
【数２５】
2014232301.tif 000163
に基づいて５１２ビットの連鎖変数データ（
【数２６】
2014232301.tif 000164
）を更新し、更新された５１２ビットの連鎖変数データ（
【数２７】
2014232301.tif 000165
）を出力することを特徴とする、請求項５に記載のハッシュアルゴリズムにおける圧縮演算を行うための装置。
【請求項７】
メッセージを受信して複数の拡張メッセージを生成するステップと、
連鎖変数データを受信して初期状態データに変換するステップと、
前記初期状態データと、前記複数の拡張メッセージとに基づいて段階関数を繰り返し演算し、最終状態データを算出するステップと、
前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力するステップとを含むことを特徴とする、ハッシュアルゴリズムにおける圧縮演算を行うための方法。
【請求項８】
前記複数の拡張メッセージを生成するステップは、
１６個の３２ビットのサブメッセージ（
【数２８】
2014232301.tif 000166
）が連接されて構成された５１２ビットのメッセージ（
【数２９】
2014232301.tif 000167
）を受信し、
【数３０】
2014232301.tif 000168
に基づいてそれぞれ１２個の３２ビットのサブ拡張メッセージ（
【数３１】
2014232301.tif 000169
）が連接されて構成される３２個の３８４ビットの拡張メッセージ（
【数３２】
2014232301.tif 000170
）を生成することを特徴とする、請求項７に記載のハッシュアルゴリズムにおける圧縮演算を行うための方法。（ここで、ｒは
【数３３】
2014232301.tif 000171
の整数であり、
【数３４】
2014232301.tif 000172
はｘを１６で割った時の余りを出力する演算を意味する。）
【請求項９】
前記連鎖変数データを受信して前記初期状態データに変換するステップは、
１６個の３２ビットのサブ連鎖変数データ（
【数３５】
2014232301.tif 000173
）が連接されて構成された５１２ビットの連鎖変数データ（
【数３６】
2014232301.tif 000174
）を受信し、
【数３７】
2014232301.tif 000175
に基づいて１６個の３２ビットの初期サブ状態データ（
【数３８】
2014232301.tif 000176
）が連接されて構成される５１２ビットの初期状態データ（
【数３９】
2014232301.tif 000177
）に変換することを特徴とする、請求項８に記載のハッシュアルゴリズムにおける圧縮演算を行うための方法。
【請求項１０】
前記段階関数を繰り返し演算し、前記最終状態データを算出するステップは、
前記５１２ビットの初期状態データ（
【数４０】
2014232301.tif 000178
）と、前記３２個の３８４ビットの拡張メッセージ（
【数４１】
2014232301.tif 000179
）とに基づいて前記段階関数を繰り返し演算し、前記最終状態データを算出し、
前記段階関数は、下記の数式１〜５を演算する関数であることを特徴とする、請求項９に記載のハッシュアルゴリズムにおける圧縮演算を行うための方法。
（数式１）
【数４２】
2014232301.tif 000180
（数式２）
【数４３】
2014232301.tif 000181
（数式３）
【数４４】
2014232301.tif 000182
（数式４）
【数４５】
2014232301.tif 000183
（数式５）
【数４６】
2014232301.tif 000184
（ここで、
【数４７】
2014232301.tif 000185
はそれぞれ３２ビットのｘ、ｙの論理的排他和を出力する演算、
【数４８】
2014232301.tif 000186
はそれぞれ３２ビットのｘ、ｙを正の整数で表した値の和を２３２で割った時の余りを３２ビットとして出力する演算、
【数４９】
2014232301.tif 000187
は３２ビットのｘを左にａビットだけ循環移動させて出力する演算を意味する。）
【請求項１１】
前記段階関数を繰り返し演算し、前記最終状態データを算出するステップは、
前記段階関数を、ｒに対して０から３１まで３２回繰り返し演算し、１６個の３２ビットの最終サブ状態データ（
【数５０】
2014232301.tif 000188
）が連接されて構成される５１２ビットの最終状態データ（
【数５１】
2014232301.tif 000189
）を算出することを特徴とする、請求項１０に記載のハッシュアルゴリズムにおける圧縮演算を行うための方法。
【請求項１２】
前記連鎖変数データから更新された連鎖変数データを生成して出力するステップは、
【数５２】
2014232301.tif 000190
に基づいて５１２ビットの連鎖変数データ（
【数５３】
2014232301.tif 000191
）を更新し、更新された５１２ビットの連鎖変数データ（
【数５４】
2014232301.tif 000192
）を出力することを特徴とする、請求項１１に記載のハッシュアルゴリズムにおける圧縮演算を行うための方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハッシュアルゴリズムにおける圧縮演算を行うための装置および方法に関するものであって、より具体的には、５１２ビットのメッセージと、５１２ビットの連鎖変数データとを受信して１２８ビットのレジスタベースの段階関数を繰り返し演算し、ハッシュ値の基となる更新された５１２ビットの連鎖変数データを算出する、高速メッセージのハッシュアルゴリズムにおける圧縮演算を行うための装置および方法に関するものである。
【背景技術】
【０００２】
メッセージに対する無欠性の提供は、各種機器の通信および資料格納のための暗号アプリケーションの主な機能である。ハッシュ（Ｈａｓｈ）関数は、このようなメッセージの無欠性を保障するための関数であって、メッセージの署名、認証などにおいて広く活用される。一般的に、ハッシュ関数では、連鎖変数（Ｃｈａｉｎ  ｖａｒｉａｂｌｅ）データが用いられ、メッセージを特定の長さ単位に分割した後、各メッセージ単位を連鎖変数データと共に圧縮関数に入力して連鎖変数データを更新する。圧縮関数から出力される最終連鎖変数データは、多様なアルゴリズムによって加工され、当該メッセージのハッシュ値となる。
【０００３】
これに関連し、「２５６ビットの出力を有するハッシュアルゴリズム」を発明の名称とする韓国登録特許第１０−０９１６８０５号は、任意の長さのメッセージのビット列を受信してワード列に変換し、入力されたメッセージを予め設定されたビットに変換して圧縮演算を行うことによって、連鎖変数を算出するハッシュアルゴリズム手法を提示している。
【０００４】
このような、ハッシュ関数の速度効率性を高めるためには、ハッシュ関数の核心アルゴリズムである圧縮関数が暗号アプリケーションに特化されたチップまたはＣＰＵに最適な実現が可能となるように設計される必要がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】韓国登録特許第１０−０９１６８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、５１２ビットの出力値を有し、既存の攻撃に対する安定性を保障しながら、高速メッセージのハッシングが可能なハッシュ関数に適用される１２８ビットのレジスタベースの圧縮関数を演算する手法を提供することである。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置は、メッセージを受信して複数の拡張メッセージを生成するメッセージ拡張部と、連鎖変数データを受信して初期状態データに変換する連鎖変数初期変換部と、前記初期状態データと、前記複数の拡張メッセージとに基づいて段階関数を繰り返し演算し、最終状態データを算出する段階関数演算部と、前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力する連鎖変数最終変換部とを含むことを特徴とする。
【０００８】
この時、前記メッセージ拡張部は、１６個の３２ビットのサブメッセージ（
【数１】
2014232301.tif 000003
【０００９】
）が連接されて構成された５１２ビットのメッセージ（
【数２】
2014232301.tif 000004
【００１０】
）を受信し、
【数３】
2014232301.tif 000005
【００１１】
に基づいてそれぞれ１２個の３２ビットのサブ拡張メッセージ（
【数４】
2014232301.tif 000006
【００１２】
）が連接されて構成される３２個の３８４ビットの拡張メッセージ（
【数５】
2014232301.tif 000007
【００１３】
）を生成することができる。ここで、ｒは
【数６】
2014232301.tif 000008
【００１４】
の整数であり、
【数７】
2014232301.tif 000009
【００１５】
はｘを１６で割った時の余りを出力する演算を意味する。
【００１６】
この時、前記連鎖変数初期変換部は、１６個の３２ビットのサブ連鎖変数データ（
【数８】
2014232301.tif 000010
【００１７】
）が連接されて構成された５１２ビットの連鎖変数データ（
【数９】
2014232301.tif 000011
【００１８】
）を受信し、
【数１０】
2014232301.tif 000012
【００１９】
に基づいて１６個の３２ビットの初期サブ状態データ（
【数１１】
2014232301.tif 000013
【００２０】
）が連接されて構成される５１２ビットの初期状態データ（
【数１２】
2014232301.tif 000014
【００２１】
）に変換することができる。
【００２２】
この時、前記段階関数演算部は、前記５１２ビットの初期状態データ（
【数１３】
2014232301.tif 000015
【００２３】
）と、前記３２個の３８４ビットの拡張メッセージ（
【数１４】
2014232301.tif 000016
【００２４】
）とに基づいて
【数１５】
2014232301.tif 000017
【数１６】
2014232301.tif 000018
【数１７】
2014232301.tif 000019
【数１８】
2014232301.tif 000020
【数１９】
2014232301.tif 000021
【００２５】
を演算する段階関数を繰り返し演算し、最終状態データを算出することができる。ここで、
【数２０】
2014232301.tif 000022
【００２６】
はそれぞれ３２ビットのｘ、ｙの論理的排他和を出力する演算、
【数２１】
2014232301.tif 000023
【００２７】
はそれぞれ３２ビットのｘ、ｙを正の整数で表した値の和を２３２で割った時の余りを３２ビットとして出力する演算、
【数２２】
2014232301.tif 000024
【００２８】
は３２ビットのｘを左にａビットだけ循環移動させて出力する演算を意味する。
【００２９】
この時、前記段階関数演算部は、前記段階関数を、ｒに対して０から３１まで３２回繰り返し演算し、１６個の３２ビットの最終サブ状態データ（
【数２３】
2014232301.tif 000025
【００３０】
）が連接されて構成される５１２ビットの最終状態データ（
【数２４】
2014232301.tif 000026
【００３１】
）を算出することができる。
【００３２】
この時、前記連鎖変数最終変換部は、
【数２５】
2014232301.tif 000027
【００３３】
に基づいて５１２ビットの連鎖変数データ（
【数２６】
2014232301.tif 000028
【００３４】
）を更新し、更新された５１２ビットの連鎖変数データ（
【数２７】
2014232301.tif 000029
【００３５】
）を出力することができる。
【００３６】
また、上記の目的を達成するための、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法は、メッセージを受信して複数の拡張メッセージを生成するステップと、連鎖変数データを受信して初期状態データに変換するステップと、前記初期状態データと、前記複数の拡張メッセージとに基づいて段階関数を繰り返し演算し、最終状態データを算出するステップと、前記最終状態データを用いて、前記連鎖変数データから更新された連鎖変数データを生成して出力するステップとを含むことを特徴とする。
【００３７】
この時、前記複数の拡張メッセージを生成するステップでは、１６個の３２ビットのサブメッセージ（
【数２８】
2014232301.tif 000030
【００３８】
）が連接されて構成された５１２ビットのメッセージ（
【数２９】
2014232301.tif 000031
【００３９】
）を受信し、
【数３０】
2014232301.tif 000032
【００４０】
に基づいてそれぞれ１２個の３２ビットのサブ拡張メッセージ（
【数３１】
2014232301.tif 000033
【００４１】
）が連接されて構成される３２個の３８４ビットの拡張メッセージ（
【数３２】
2014232301.tif 000034
【００４２】
）を生成することができる。ここで、ｒは
【数３３】
2014232301.tif 000035
【００４３】
の整数であり、
【数３４】
2014232301.tif 000036
【００４４】
はｘを１６で割った時の余りを出力する演算を意味する。
【００４５】
この時、前記連鎖変数データを受信して前記初期状態データに変換するステップでは、１６個の３２ビットのサブ連鎖変数データ（
【数３５】
2014232301.tif 000037
【００４６】
）が連接されて構成された５１２ビットの連鎖変数データ（
【数３６】
2014232301.tif 000038
【００４７】
）を受信し、
【数３７】
2014232301.tif 000039
【００４８】
に基づいて１６個の３２ビットの初期サブ状態データ（
【数３８】
2014232301.tif 000040
【００４９】
）が連接されて構成される５１２ビットの初期状態データ（
【数３９】
2014232301.tif 000041
【００５０】
）に変換することができる。
【００５１】
この時、前記段階関数を繰り返し演算し、前記最終状態データを算出するステップでは、前記５１２ビットの初期状態データ（
【数４０】
2014232301.tif 000042
【００５２】
）と、前記３２個の３８４ビットの拡張メッセージ（
【数４１】
2014232301.tif 000043
【００５３】
）とに基づいて
【数４２】
2014232301.tif 000044
【数４３】
2014232301.tif 000045
【数４４】
2014232301.tif 000046
【数４５】
2014232301.tif 000047
【数４６】
2014232301.tif 000048
【００５４】
を演算する段階関数を繰り返し演算し、最終状態データを算出することができる。ここで、
【数４７】
2014232301.tif 000049
【００５５】
はそれぞれ３２ビットのｘ、ｙの論理的排他和を出力する演算、
【数４８】
2014232301.tif 000050
【００５６】
はそれぞれ３２ビットのｘ、ｙを正の整数で表した値の和を２３２で割った時の余りを３２ビットとして出力する演算、
【数４９】
2014232301.tif 000051
【００５７】
は３２ビットのｘを左にａビットだけ循環移動させて出力する演算を意味する。
【００５８】
この時、前記段階関数を繰り返し演算し、前記最終状態データを算出するステップでは、前記段階関数を、ｒに対して０から３１まで３２回繰り返し演算し、１６個の３２ビットの最終サブ状態データ（
【数５０】
2014232301.tif 000052
【００５９】
）が連接されて構成される５１２ビットの最終状態データ（
【数５１】
2014232301.tif 000053
【００６０】
）を算出することができる。
【００６１】
この時、前記連鎖変数データから更新された連鎖変数データを生成して出力するステップでは、
【数５２】
2014232301.tif 000054
【００６２】
に基づいて５１２ビットの連鎖変数データ（
【数５３】
2014232301.tif 000055
【００６３】
）を更新し、更新された５１２ビットの連鎖変数データ（
【数５４】
2014232301.tif 000056
【００６４】
）を出力することができる。
【発明の効果】
【００６５】
本発明によれば、単純なメッセージ拡張アルゴリズムを提供する一方、大部分のＣＰＵで普遍的に用いられるビット加算（Ａｄｄｉｔｉｏｎ）、ビット循環移動（Ｒｏｔａｔｉｏｎ）、ビット論理的排他和（ＸＯＲ：ｅＸｃｌｕｓｉｖｅ−ＯＲ）演算子のみを組み合わせた圧縮演算アルゴリズムを提供することによって、１２８ビットのレジスタを用いた高速並列処理が可能であり、これによって、ＣＰＵが少ない演算量だけによっても圧縮演算を行うことができる効果がある。
【図面の簡単な説明】
【００６６】
【図１】本発明の実施形態にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置の構成を説明するためのブロック図である。
【図２】図１に示された段階関数演算部で行われる段階関数の演算を図式化した図である。
【図３】本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法を説明するためのフローチャートである。
【図４】図３に示された本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法において、段階関数を繰り返し演算する過程をより具体的に説明するためのフローチャートである。
【発明を実施するための形態】
【００６７】
以下、本発明を添付した図面を参照して詳細に説明する。ここで、繰り返される説明、本発明の要旨を不明にする可能性がある公知の機能、および構成に関する詳細な説明は省略する。本発明の実施形態は、当業界における平均的な知識を有する者に本発明をより完全に説明するために提供されるものである。したがって、図面における要素の形状および大きさなどはより明確な説明のために誇張されることがある。
【００６８】
以下では、図１および図２を参照して、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置の構成およびその動作について説明する。
【００６９】
図１は、本発明の実施形態にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置の構成を説明するためのブロック図である。
【００７０】
図１を参照すれば、本発明にかかる圧縮演算実行装置１０は、外部からメッセージ（Ｍ）２０を受信して複数の拡張メッセージを生成するメッセージ拡張部１００と、外部から連鎖変数データ（ＣＶ）３０を受信して段階関数の初期状態データに変換する連鎖変数初期変換部２００と、メッセージ拡張部１００によって生成された複数の拡張メッセージと、連鎖変数初期変換部２００によって変換された初期状態データとに基づいて段階関数を繰り返し演算し、最終状態データを算出する段階関数演算部３００と、段階関数演算部３００によって算出された最終状態データを用いて、連鎖変数初期変換部２００に入力された連鎖変数データ（ＣＶ）３０を更新した連鎖変数データ（ＣＶ’）４０を出力する連鎖変数最終変換部４００とを含む。
【００７１】
メッセージ拡張部１００は、圧縮演算実行装置１０に別途に具備されるインタフェース（図示せず）を介してユーザから５１２ビット数を有するメッセージ（Ｍ）を受信し、それから３２個の３８４ビット数を有する拡張メッセージ（
【数５５】
2014232301.tif 000057
【００７２】
）を生成する。この時、メッセージ拡張部１００に入力される５１２ビットのメッセージ（Ｍ）は、下記の数式１で表されるように、それぞれ３２ビット数を有する１６個のサブメッセージ（
【数５６】
2014232301.tif 000058
【００７３】
）が連接されて構成される。
【００７４】
（数式１）
【数５７】
2014232301.tif 000059
【００７５】
メッセージ拡張部１００は、入力された５１２ビットのメッセージ（
【数５８】
2014232301.tif 000060
【００７６】
）から、下記の数式２で表されるように、１２個の３２ビット数を有するサブ拡張メッセージ（
【数５９】
2014232301.tif 000061
【００７７】
）が連接されて構成される３８４ビット数を有する拡張メッセージ（
【数６０】
2014232301.tif 000062
【００７８】
）を生成する。
【００７９】
（数式２）
【数６１】
2014232301.tif 000063
【００８０】
この時、メッセージ拡張部１００は、下記の数式３に基づいて５１２ビットのメッセージ（
【数６２】
2014232301.tif 000064
【００８１】
）から計３２個の３８４ビットの拡張メッセージ（
【数６３】
2014232301.tif 000065
【００８２】
）を生成する。
【００８３】
（数式３）
【数６４】
2014232301.tif 000066
【００８４】
ここで、
【数６５】
2014232301.tif 000067
【００８５】
は（１２ｒ＋１）を１６で割った時の余りを出力する演算を意味する。一方、メッセージ拡張部１００は、入力された５１２ビットのメッセージ（
【数６６】
2014232301.tif 000068
【００８６】
）から生成した３２個の３８４ビットの拡張メッセージ（
【数６７】
2014232301.tif 000069
【００８７】
）を段階関数演算部３００に出力する。
【００８８】
連鎖変数初期変換部２００は、圧縮演算実行装置１０に別途に具備されるインタフェースまたは外部に位置する連鎖変数生成手段（図示せず）から５１２ビット数を有する連鎖変数データ（ＣＶ）を受信し、これを５１２ビット数を有する初期状態データ（Ｘ０）に変換する。この時、連鎖変数初期変換部２００に入力される５１２ビットの連鎖変数データ（ＣＶ）は、下記の数式４で表されるように、それぞれ３２ビット数を有する１６個のサブ連鎖変数データ（
【数６８】
2014232301.tif 000070
【００８９】
）が連接されて構成される。
【００９０】
（数式４）
【数６９】
2014232301.tif 000071
【００９１】
連鎖変数初期変換部２００は、入力された５１２ビットの連鎖変数データ（
【数７０】
2014232301.tif 000072
【００９２】
）を、下記の数式５で表されるように、１６個の３２ビット数を有する初期サブ状態データ（
【数７１】
2014232301.tif 000073
【００９３】
）が連接されて構成される５１２ビット数を有する初期状態データ（Ｘ０）に変換する。
【００９４】
（数式５）
【数７２】
2014232301.tif 000074
【００９５】
この時、連鎖変数初期変換部２００は、下記の数式６に基づいて５１２ビットの連鎖変数データ（
【数７３】
2014232301.tif 000075
【００９６】
）を５１２ビットの初期状態データ（
【数７４】
2014232301.tif 000076
【００９７】
）に変換する。
【００９８】
（数式６）
【数７５】
2014232301.tif 000077
【００９９】
連鎖変数初期変換部２００は、入力された５１２ビットの連鎖変数データ（
【数７６】
2014232301.tif 000078
【０１００】
）から変換した５１２ビットの初期状態データ（
【数７７】
2014232301.tif 000079
【０１０１】
）を段階関数演算部３００に出力する。
【０１０２】
段階関数演算部３００は、連鎖変数初期変換部２００から入力された５１２ビットの初期状態データ（
【数７８】
2014232301.tif 000080
【０１０３】
）を初期値とし、メッセージ拡張部１００から入力された３２個の３８４ビットの拡張メッセージ（
【数７９】
2014232301.tif 000081
【０１０４】
）を用いて、下記の数式７〜数式１１の演算が行われる段階関数を繰り返し演算し、最終状態データを算出する。
【０１０５】
（数式７）
【数８０】
2014232301.tif 000082
【０１０６】
（数式８）
【数８１】
2014232301.tif 000083
【０１０７】
（数式９）
【数８２】
2014232301.tif 000084
【０１０８】
（数式１０）
【数８３】
2014232301.tif 000085
【０１０９】
（数式１１）
【数８４】
2014232301.tif 000086
【０１１０】
ここで、
【数８５】
2014232301.tif 000087
【０１１１】
はそれぞれ３２ビットのｘ、ｙの論理的排他和を出力する演算を意味し、
【数８６】
2014232301.tif 000088
【０１１２】
はそれぞれ３２ビットのｘ、ｙを正の整数で表した値の和を２３２で割った時の余りを３２ビットとして出力する演算を意味し、
【数８７】
2014232301.tif 000089
【０１１３】
は３２ビットのｘを左にａビットだけ循環移動させて出力する演算を意味する。この時、段階関数演算部３００は、ｎ（
【数８８】
2014232301.tif 000090
【０１１４】
）回目の段階関数において、数式７による演算を先に行った後、数式８〜数式１１による演算を並列的に行うことができる。段階関数演算部３００は、前記数式７〜数式１１のような段階関数を３２回繰り返し演算し、段階関数を３２回目演算した結果値（
【数８９】
2014232301.tif 000091
【０１１５】
）を、下記の数式１２のように連接して最終状態データ（Ｘ３２）を算出する。段階関数演算部３００は、段階関数を繰り返し演算して算出した最終状態データ（Ｘ３２）を連鎖変数最終変換部４００に出力する。
【０１１６】
（数式１２）
【数９０】
2014232301.tif 000092
【０１１７】
一方、段階関数演算部３００が、サブ状態データ（
【数９１】
2014232301.tif 000093
【０１１８】
）と、サブ拡張メッセージ（
【数９２】
2014232301.tif 000094
【０１１９】
）とを入力値とし、（ｒ＋１）回目の段階関数を演算することによって、サブ状態データ（
【数９３】
2014232301.tif 000095
【０１２０】
）を算出する演算は、図２に示されているように表すことができる。
【０１２１】
連鎖変数最終変換部４００は、段階関数演算部３００から入力された最終状態データ（
【数９４】
2014232301.tif 000096
【０１２２】
）を用いて、連鎖変数初期変換部２００に入力される連鎖変数データ（
【数９５】
2014232301.tif 000097
【０１２３】
）を更新し、更新された連鎖変数データ（
【数９６】
2014232301.tif 000098
【０１２４】
）を出力する。この時、連鎖変数最終変換部４００は、下記の数式１３に基づいて５１２ビット数を有する連鎖変数データ（
【数９７】
2014232301.tif 000099
【０１２５】
）を更新した連鎖変数データ（
【数９８】
2014232301.tif 000100
【０１２６】
）を生成する。
【０１２７】
（数式１３）
【数９９】
2014232301.tif 000101
【０１２８】
連鎖変数最終変換部４００から出力される更新された５１２ビットの連鎖変数データ（
【数１００】
2014232301.tif 000102
【０１２９】
）は、すでに公知の多様なアルゴリズムによって加工され、メッセージ拡張部１００に入力される５１２ビットのメッセージ（
【数１０１】
2014232301.tif 000103
【０１３０】
）に対するハッシュ値として用いられる。
【０１３１】
以下では、図３および図４を参照して、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための装置によって行われる圧縮演算実行方法について説明する。前記図１および図２を参照して説明した本発明にかかる圧縮演算実行装置１０の動作と一部重複する部分は省略して説明する。
【０１３２】
図３は、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法を説明するためのフローチャートである。
【０１３３】
図３を参照すれば、本発明にかかる圧縮演算実行方法は、まず、メッセージ拡張部１００がユーザインタフェースを介して圧縮および暗号化の対象となる５１２ビットのメッセージ（
【数１０２】
2014232301.tif 000104
【０１３４】
）を受信する（Ｓ１００）。
【０１３５】
次に、メッセージ拡張部１００は、数式３に基づいて１６個の３２ビットのサブメッセージ（
【数１０３】
2014232301.tif 000105
【０１３６】
）が連接されて構成された５１２ビットのメッセージ（
【数１０４】
2014232301.tif 000106
【０１３７】
）からそれぞれ１２個の３２ビットのサブ拡張メッセージ（
【数１０５】
2014232301.tif 000107
【０１３８】
）が連接されて構成される３２個の３８４ビットの拡張メッセージ（
【数１０６】
2014232301.tif 000108
【０１３９】
）を生成する（Ｓ２００）。この時、メッセージ拡張部１００は、生成した３２個の３８４ビットの拡張メッセージ（
【数１０７】
2014232301.tif 000109
【０１４０】
）を段階関数演算部３００に出力する。
【０１４１】
一方、連鎖変数初期変換部２００は、ユーザインタフェースまたは外部の連鎖変数生成手段から１６個の３２ビットのサブ連鎖変数データ（
【数１０８】
2014232301.tif 000110
【０１４２】
）が連接されて構成された５１２ビットの連鎖変数データ（
【数１０９】
2014232301.tif 000111
【０１４３】
）を受信し、数式６に基づいて５１２ビットの連鎖変数データ（
【数１１０】
2014232301.tif 000112
【０１４４】
）を１６個の３２ビットの初期サブ状態データ（
【数１１１】
2014232301.tif 000113
【０１４５】
）が連接されて構成される５１２ビットの初期状態データ（
【数１１２】
2014232301.tif 000114
【０１４６】
）に変換する（Ｓ３００）。この時、連鎖変数初期変換部２００は、変換した５１２ビットの初期状態データ（
【数１１３】
2014232301.tif 000115
【０１４７】
）を段階関数演算部３００に出力する。
【０１４８】
次に、段階関数演算部３００は、メッセージ拡張部１００から受信した３２個の３８４ビットの拡張メッセージ（
【数１１４】
2014232301.tif 000116
【０１４９】
）と、連鎖変数初期変換部２００から受信した５１２ビットの初期状態データ（
【数１１５】
2014232301.tif 000117
【０１５０】
）とに基づいて、数式７〜数式１１のように表される段階関数を繰り返し演算する（Ｓ４００）。この時、段階関数演算部３００は、それぞれ３２ビット数を有する１６個の初期サブ状態データ（
【数１１６】
2014232301.tif 000118
【０１５１】
）を１回目の段階関数の入力値とし、（ｒ＋１）回目の段階関数の演算時にそれぞれ３２ビット数を有する１２個のサブ拡張メッセージ（
【数１１７】
2014232301.tif 000119
【０１５２】
）を適用して段階関数を３２回繰り返し演算する。
【０１５３】
そして、段階関数演算部３００は、最後に演算された段階関数の結果値（すなわち、３２回目に演算された段階関数の結果値
【数１１８】
2014232301.tif 000120
【０１５４】
）を連接して５１２ビットの最終状態データ（
【数１１９】
2014232301.tif 000121
【０１５５】
）を算出する（Ｓ５００）。この時、段階関数演算部３００は、算出した５１２ビットの最終状態データ（
【数１２０】
2014232301.tif 000122
【０１５６】
）を連鎖変数最終変換部４００に出力する。
【０１５７】
最後に、連鎖変数最終変換部４００は、段階関数演算部３００から受信した５１２ビットの最終状態データ（
【数１２１】
2014232301.tif 000123
【０１５８】
）を用いて、連鎖変数初期変換部２００に入力される５１２ビットの連鎖変数データ（
【数１２２】
2014232301.tif 000124
【０１５９】
）を更新して出力する（Ｓ６００）。この時、連鎖変数最終変換部４００は、数式１３に基づいて連鎖変数初期変換部２００に入力される５１２ビットの連鎖変数データ（
【数１２３】
2014232301.tif 000125
【０１６０】
）を更新し、更新された５１２ビットの連鎖変数データ（
【数１２４】
2014232301.tif 000126
【０１６１】
）を生成して出力する（Ｓ６００）。
【０１６２】
図４は、図３に示された本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法を示したフローチャートにおいて、段階関数を繰り返し演算するＳ４００ステップをより具体的に説明するためのフローチャートである。
【０１６３】
図４を参照すれば、段階関数を繰り返し演算するＳ４００ステップは、まず、段階関数演算部３００がメッセージ拡張部１００から３２個の３８４ビットの拡張メッセージ（
【数１２５】
2014232301.tif 000127
【０１６４】
）を受信する一方、連鎖変数初期変換部２００から５１２ビットの初期状態データ（
【数１２６】
2014232301.tif 000128
【０１６５】
）を受信する（Ｓ４１０）。
【０１６６】
次に、段階関数演算部３００は、ｒ値を０に設定した後、初期サブ状態データ（
【数１２７】
2014232301.tif 000129
【０１６７】
）を入力値とし、１回目の段階関数の演算を開始する（Ｓ４２０）。
【０１６８】
そして、（ｒ＋１）回目の段階関数の演算において、段階関数演算部３００は、数式７（
【数１２８】
2014232301.tif 000130
【０１６９】
）に従って
【数１２９】
2014232301.tif 000131
【０１７０】
値を先に計算し（Ｓ４３０）、数式８（
【数１３０】
2014232301.tif 000132
【０１７１】
）、数式９（
【数１３１】
2014232301.tif 000133
【０１７２】
）、数式１０（
【数１３２】
2014232301.tif 000134
【０１７３】
）、数式１１（
【数１３３】
2014232301.tif 000135
【０１７４】
）に従って結果値（
【数１３４】
2014232301.tif 000136
【０１７５】
）を算出する（Ｓ４４０）。
【０１７６】
前記Ｓ４３０〜Ｓ４４０ステップにより（ｒ＋１）回目の段階関数の演算が行われたた後、ｒ値が３１であるか否かを確認する（Ｓ４５０）。
【０１７７】
前記Ｓ４５０ステップでの確認の結果、ｒ値が３１でなければ（すなわち、ｒ値が３１より小さければ）、段階関数演算部３００はｒ値を１増加させ（Ｓ４６０）、前記Ｓ４３０〜Ｓ４４０ステップにより段階関数を繰り返し演算する。
【０１７８】
反面、前記Ｓ４５０ステップでの確認の結果、ｒ値が３１であれば、３２回目の段階関数の演算から出力された結果値（
【数１３５】
2014232301.tif 000137
【０１７９】
）を連接して５１２ビットの最終状態データ（
【数１３６】
2014232301.tif 000138
【０１８０】
）を出力する（Ｓ４７０）。
【０１８１】
一方、本発明にかかるハッシュアルゴリズムにおける圧縮演算を行うための方法は、多様なコンピュータ手段を介して実行可能なプログラム命令形態で実現され、コンピュータで読み取り可能な記録媒体に記録されるとよい。前記コンピュータで読み取り可能な記録媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせて含むことができる。前記記録媒体に記録されるプログラム命令は、本発明のために特別に設計されて構成されたものであるか、コンピュータソフトウェア当業者に公知されて使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例には、ハードディスク、プロッピィーディスクおよび磁気テープのような磁気媒体（ｍａｇｎｅｔｉｃ  ｍｅｄｉａ）、ＣＤ−ＲＯＭ、ＤＶＤのような光記録媒体（ｏｐｔｉｃａｌ  ｍｅｄｉａ）、フロプティカルディスク（ｆｌｏｐｔｉｃａｌ  ｄｉｓｋ）のような磁気−光媒体（ｍａｇｎｅｔｏ−ｏｐｔｉｃａｌ  ｍｅｄｉａ）、およびＲＯＭ、ＲＡＭ、フラッシュメモリなどのようなプログラム命令を格納し実行するように特別に構成されたすべての形態のハードウェア装置が含まれる。プログラム命令の例には、コンパイラによって作られるような機械語コードだけでなく、インタプリタなどを用いてコンピュータによって実行可能な高級言語コードを含む。
【０１８２】
以上、図面と明細書で最適な実施形態が開示された。ここで、特定の用語が使われたが、これは単に本発明を説明するための目的で使われたものであり、意味の限定や特許請求の範囲に記載された本発明の範囲を制限するために使われたものではない。そのため、本技術分野における通常の知識を有する者であれば、これより多様な変形および均等な他の実施形態が可能である点を理解することができる。したがって、本発明の真の技術的保護範囲は、添付した特許請求の範囲の技術的思想によって定められなければならない。
【符号の説明】
【０１８３】
１０：圧縮演算実行装置
１００：メッセージ拡張部
２００：連鎖変数初期変換部
３００：段階関数演算部
４００：連鎖変数最終変換部
【図１】
2014232301.tif 000193
【図２】
2014232301.tif 000194
【図３】
2014232301.tif 000195
【図４】
2014232301.tif 000196