(57)【要約】【課題】  シンプルな構成でありながら強力な情報攪乱を実現する。【解決手段】  複数のカオスノイズ生成単位１１−１〜１１−Ｍと、各カオスノイズ生成単位に具備されている各カオスノイズ抽出部１５−１〜１５−Ｍの出力に対し順次に排他的論理和演算を行う第１の論理和演算部１６−２〜１６−Ｍとを具備する１次累計部１と、与えられる鍵データに対してカオス演算を行い、得られたカオスノイズから１次累計部１の初段におけるパラメータ可変部１３−１へ与える初期可変情報を作成する初期位相生成部２５と、カオスノイズ生成単位２０を備え、第１の論理和演算部１６−Ｍの出力を用いてカオスノイズを生成する２次拡散部２と、１次累計部１の出力と２次拡散部２の出力の排他的論理和演算を行う第２の論理和演算部２８とを備え、ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割されたブロックのデータをそれぞれ１次累計部１の各カオス生成単位１１−１〜１１−Ｍへ与えてハッシュ値を生成する。【選択図】  図１
2005292482.tif 000002
【特許請求の範囲】
【請求項１】
与えられるデータに基づきカオス演算を行うカオス演算部と、このカオス演算部が実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変部と、前記カオス演算部による演算結果に基づきカオスノイズを抽出するカオスノイズ抽出部とを、それぞれが具備する複数のカオスノイズ生成単位と、
前記各カオスノイズ生成単位に具備されている各カオスノイズ抽出部の出力に対し順次に排他的論理和演算を行う第１の論理和演算部と、
を具備する１次累計部と、
与えられる鍵データに対してカオス演算を行い、得られたカオスノイズから前記１次累計部の初段におけるパラメータ可変部へ与える初期可変情報を作成する初期位相生成部と、
与えられるデータに基づきカオス演算を行うカオス演算部と、このカオス演算部が実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変部と、前記カオス演算部による演算結果に基づきカオスノイズを抽出するカオスノイズ抽出部とを具備する１つのカオスノイズ生成単位を備え、前記第１の論理和演算部の出力を用いてカオスノイズを生成する２次拡散部と、
前記１次累計部の出力と前記２次拡散部の出力の排他的論理和演算を行う第２の論理和演算部とを具備し、
ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割されたブロックのデータをそれぞれ前記１次累計部の各カオス生成単位へ与えると共に、鍵データを前記初期位相生成部及び前記１次累計部及び前記２次拡散部における全てのパラメータ可変部へ与えてハッシュ値を生成することを特徴とするＭＡＣ生成装置。
【請求項２】
前記１次累計部における各カオスノイズ生成単位のパラメータ可変部はカスケード接続されており、前段のカオスノイズ生成単位のパラメータ可変部から出力されるパラメータ値を後段のカオスノイズ生成単位のパラメータ可変部へ伝達して、後段のカオスノイズ生成単位のパラメータ可変部においては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする請求項１に記載のＭＡＣ生成装置。
【請求項３】
前記１次累計部における最終段のカオスノイズ生成単位のパラメータ可変部は２次拡散部におけるパラメータ可変部と接続されており、最終段のカオスノイズ生成単位のパラメータ可変部から出力されるパラメータ値を２次拡散部のパラメータ可変部へ伝達して、２次拡散部のパラメータ可変部においては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする請求項２に記載のＭＡＣ生成装置。
【請求項４】
前記１次累計部における各カオスノイズ生成単位のカオス演算部はカスケード接続されており、前段のカオスノイズ生成単位のカオス演算部から出力されるカオス演算結果を後段のカオスノイズ生成単位のカオス演算部へ伝達して、後段のカオスノイズ生成単位のカオス演算部においては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする請求項１に記載のＭＡＣ生成装置。
【請求項５】
前記１次累計部における最終段のカオスノイズ生成単位のカオス演算部は２次拡散部におけるカオス演算部と接続されており、最終段のカオスノイズ生成単位のカオス演算部から出力されるカオス演算結果を前記２次拡散部のカオス演算部へ伝達して、前記２次拡散部のカオス演算部においては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする請求項４に記載のＭＡＣ生成装置。
【請求項６】
ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割された各ブロックのデータを用いて、カオス演算を行うカオス演算ステップと、このカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する複数のカオスノイズ生成単位処理ステップと、
前記各カオスノイズ生成単位処理ステップにおいて行われる各カオスノイズ抽出ステップにより抽出されたカオスノイズに対し順次に排他的論理和演算を行う第１の論理和演算ステップと、
により構成される１次累計処理ステップと、
鍵データに対してカオス演算を行い、得られたカオスノイズから前記１次累計処理ステップの初段におけるパラメータ可変ステップへ与える初期可変情報を作成する初期位相生成ステップと、
前記第１の論理和演算ステップにより得られる値に基づきカオス演算を行うカオス演算ステップと、このカオス演算ステップが実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する単一のカオスノイズ生成単位処理ステップにより構成される２次拡散処理ステップと、
前記１次累計処理ステップの結果と前記２次拡散処理ステップの結果の排他的論理和演算を行う第２の論理和演算ステップとを備え、
前記鍵データを前記初期位相生成ステップ及び前記１次累計処理ステップ及び前記２次拡散処理ステップにおける全てのパラメータ可変ステップへ与えることを特徴とするＭＡＣ生成方法。
【請求項７】
前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのパラメータ可変ステップでは、前段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにて得られるパラメータ値を後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする請求項６に記載のＭＡＣ生成方法。
【請求項８】
前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのパラメータ可変ステップによるパラメータ値は２次拡散処理ステップにおけるパラメータ可変ステップへ伝達され、該２次拡散処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする請求項７に記載のＭＡＣ生成方法。
【請求項９】
前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのカオス演算ステップでは、前段のカオスノイズ生成単位処理ステップのカオス演算ステップから出力されるカオス演算結果を後段のカオスノイズ生成単位処理ステップのカオス演算ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのカオス演算ステップにおいては、前記伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする請求項６に記載のＭＡＣ生成方法。
【請求項１０】
前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのカオス演算ステップにより得られるカオス演算結果は、２次拡散処理ステップにおけるカオス演算ステップへ伝達され、前記２次拡散処理ステップのカオス演算ステップにおいては、前記伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする請求項９に記載のＭＡＣ生成方法。
【請求項１１】
プログラムにより動作するプロセッサにより実行されることにより、鍵データ及びハッシュ値算出の対象となる対象データからハッシュ値を生成するＭＡＣ生成プログラムであって、
ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割された各ブロックのデータを用いて、カオス演算を行うカオス演算ステップと、このカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する複数のカオスノイズ生成単位処理ステップと、
前記各カオスノイズ生成単位処理ステップにおいて行われる各カオスノイズ抽出ステップにより抽出されたカオスノイズに対し順次に排他的論理和演算を行う第１の論理和演算ステップと、
により構成される１次累計処理ステップと、
与えられる鍵データに対してカオス演算を行い、得られたカオスノイズから前記１次累計処理ステップの初段におけるパラメータ可変ステップへ与える初期可変情報を作成する初期位相生成ステップと、
前記第１の論理和演算ステップにより得られる値に基づきカオス演算を行うカオス演算ステップと、このカオス演算ステップが実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する単一のカオスノイズ生成単位処理ステップにより構成される２次拡散処理ステップと、
前記１次累計処理ステップの結果と前記２次拡散処理ステップの結果の排他的論理和演算を行う第２の論理和演算ステップとを備え、
鍵データを前記初期位相生成ステップ及び前記１次累計処理ステップ及び前記２次拡散処理ステップにおける全てのパラメータ可変ステップへ与えることを特徴とするＭＡＣ生成プログラム。
【請求項１２】
前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのパラメータ可変ステップでは、前段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにて得られるパラメータ値を後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする請求項１１に記載のＭＡＣ生成プログラム。
【請求項１３】
前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのパラメータ可変ステップによるパラメータ値は２次拡散処理ステップにおけるパラメータ可変ステップへ伝達され、該２次拡散処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする請求項１２に記載のＭＡＣ生成プログラム。
【請求項１４】
前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのカオス演算ステップでは、前段のカオスノイズ生成単位処理ステップのカオス演算ステップから出力されるカオス演算結果を後段のカオスノイズ生成単位処理ステップのカオス演算ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのカオス演算ステップにおいては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする請求項１１に記載のＭＡＣ生成プログラム。
【請求項１５】
前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのカオス演算ステップにより得られるカオス演算結果は、２次拡散処理ステップにおけるカオス演算ステップへ伝達され、前記２次拡散処理ステップのカオス演算ステップにおいては、前記伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする請求項１４に記載のＭＡＣプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、電子署名、電子証明書、電子認証、メッセージ改竄防止、改竄検知ないしウイルスチェック及びファイル管理などの情報セキュリティに用いると好適な鍵付のハッシュ値を生成するためのＭＡＣ生成装置、ＭＡＣ生成方法及びＭＡＣ生成プログラムに関するものである。
【背景技術】
【０００２】
情報セキュリティに用いられるハッシュ関数は、証拠生成側と認証側のように対向する複数の装置間で使用される関係上、暗号方式と同様に、いかなるアーキテクチャにおいても全く同一の結果が得られることを要請される。一般的なハッシュ値生成は、ブロック暗号を得る構成と同様の構造を有しており、例えば特許文献１、２に見られるように多段に渡るデータ拡散処理が用いられる。
【０００３】
【特許文献１】特開２００２−１６２９０２号公報
【特許文献２】特開２００２−１６２９０４号公報
【０００４】
一方、情報の秘匿化という観点からはカオス暗号が注目されている。カオス生成については、一般的に浮動小数点演算が用いられることが多い。しかしながら、浮動小数点演算を用いる場合には、プロセッサアーキテクチャの相違などにより、対向する複数の装置間で同一の値を得ることは困難である。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は上記のような従来におけるハッシュ値生成における問題点を解決せんとしてなされたもので、その目的は、シンプルな構成でありながら強力な情報攪乱を実現するＭＡＣ（鍵付ハッシュ値）生成装置を提供することである。また、特殊な演算補正手法などを用いることなく、いかなるプロセッサアーキテクチャによっても演算互換性を保つことができ、しかもコプロセッサ類を用いる必要がなく、汎用のプロセッサによる基本演算のみで実現可能なＭＡＣ生成装置及びその方法を提供する。また、このＭＡＣ生成をプロセッサにより実現させるためのＭＡＣ生成プログラムを提供する。
【課題を解決するための手段】
【０００６】
本発明のＭＡＣ生成装置は、与えられるデータに基づきカオス演算を行うカオス演算部と、このカオス演算部が実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変部と、前記カオス演算部による演算結果に基づきカオスノイズを抽出するカオスノイズ抽出部とを、それぞれが具備する複数のカオスノイズ生成単位と、前記各カオスノイズ生成単位に具備されている各カオスノイズ抽出部の出力に対し順次に排他的論理和演算を行う第１の論理和演算部と、を具備する１次累計部と、与えられる鍵データに対してカオス演算を行い、得られたカオスノイズから前記１次累計部の初段におけるパラメータ可変部へ与える初期可変情報を作成する初期位相生成部と、与えられるデータに基づきカオス演算を行うカオス演算部と、このカオス演算部が実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変部と、前記カオス演算部による演算結果に基づきカオスノイズを抽出するカオスノイズ抽出部とを具備する１つのカオスノイズ生成単位を備え、前記第１の論理和演算部の出力を用いてカオスノイズを生成する２次拡散部と、前記１次累計部の出力と前記２次拡散部の出力の排他的論理和演算を行う第２の論理和演算部とを具備し、ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割されたブロックのデータをそれぞれ前記１次累計部の各カオス生成単位へ与えると共に、鍵データを前記初期位相生成部及び前記１次累計部及び前記２次拡散部における全てのパラメータ可変部へ与えてハッシュ値を生成することを特徴とする。
【０００７】
本発明のＭＡＣ生成装置は、前記１次累計部における各カオスノイズ生成単位のパラメータ可変部はカスケード接続されており、前段のカオスノイズ生成単位のパラメータ可変部から出力されるパラメータ値を後段のカオスノイズ生成単位のパラメータ可変部へ伝達して、後段のカオスノイズ生成単位のパラメータ可変部においては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする。
【０００８】
本発明のＭＡＣ生成装置は、前記１次累計部における最終段のカオスノイズ生成単位のパラメータ可変部は２次拡散部におけるパラメータ可変部と接続されており、最終段のカオスノイズ生成単位のパラメータ可変部から出力されるパラメータ値を２次拡散部のパラメータ可変部へ伝達して、２次拡散部のパラメータ可変部においては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする。
【０００９】
本発明のＭＡＣ生成装置は、前記１次累計部における各カオスノイズ生成単位のカオス演算部はカスケード接続されており、前段のカオスノイズ生成単位のカオス演算部から出力されるカオス演算結果を後段のカオスノイズ生成単位のカオス演算部へ伝達して、後段のカオスノイズ生成単位のカオス演算部においては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴としている。
【００１０】
本発明のＭＡＣ生成装置は、前記１次累計部における最終段のカオスノイズ生成単位のカオス演算部は２次拡散部におけるカオス演算部と接続されており、最終段のカオスノイズ生成単位のカオス演算部から出力されるカオス演算結果を前記２次拡散部のカオス演算部へ伝達して、前記２次拡散部のカオス演算部においては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴としている。
【００１１】
本発明のＭＡＣ生成方法は、ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割された各ブロックのデータを用いて、カオス演算を行うカオス演算ステップと、このカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する複数のカオスノイズ生成単位処理ステップと、前記各カオスノイズ生成単位処理ステップにおいて行われる各カオスノイズ抽出ステップにより抽出されたカオスノイズに対し順次に排他的論理和演算を行う第１の論理和演算ステップと、により構成される１次累計処理ステップと、鍵データに対してカオス演算を行い、得られたカオスノイズから前記１次累計処理ステップの初段におけるパラメータ可変ステップへ与える初期可変情報を作成する初期位相生成ステップと、前記第１の論理和演算ステップにより得られる値に基づきカオス演算を行うカオス演算ステップと、このカオス演算ステップが実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する単一のカオスノイズ生成単位処理ステップにより構成される２次拡散処理ステップと、前記１次累計処理ステップの結果と前記２次拡散処理ステップの結果の排他的論理和演算を行う第２の論理和演算ステップとを備え、前記鍵データを前記初期位相生成ステップ及び前記１次累計処理ステップ及び前記２次拡散処理ステップにおける全てのパラメータ可変ステップへ与えることを特徴とする。
【００１２】
本発明のＭＡＣ生成方法は、前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのパラメータ可変ステップでは、前段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにて得られるパラメータ値を後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする。
【００１３】
本発明のＭＡＣ生成方法は、前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのパラメータ可変ステップによるパラメータ値は２次拡散処理ステップにおけるパラメータ可変ステップへ伝達され、該２次拡散処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする。
【００１４】
本発明のＭＡＣ生成方法は、前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのカオス演算ステップでは、前段のカオスノイズ生成単位処理ステップのカオス演算ステップから出力されるカオス演算結果を後段のカオスノイズ生成単位処理ステップのカオス演算ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのカオス演算ステップにおいては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする。
【００１５】
本発明のＭＡＣ生成方法は、前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのカオス演算ステップにより得られるカオス演算結果は、２次拡散処理ステップにおけるカオス演算ステップへ伝達され、前記２次拡散処理ステップのカオス演算ステップにおいては、前記伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする。
【００１６】
本発明のＭＡＣ生成プログラムは、プログラムにより動作するプロセッサにより実行されることにより、鍵データ及びハッシュ値算出の対象となる対象データからハッシュ値を生成するＭＡＣ生成プログラムであって、ハッシュ値算出の対象となる対象データを複数のブロックに分割して分割された各ブロックのデータを用いて、カオス演算を行うカオス演算ステップと、このカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する複数のカオスノイズ生成単位処理ステップと、前記各カオスノイズ生成単位処理ステップにおいて行われる各カオスノイズ抽出ステップにより抽出されたカオスノイズに対し順次に排他的論理和演算を行う第１の論理和演算ステップと、により構成される１次累計処理ステップと、与えられる鍵データに対してカオス演算を行い、得られたカオスノイズから前記１次累計処理ステップの初段におけるパラメータ可変ステップへ与える初期可変情報を作成する初期位相生成ステップと、前記第１の論理和演算ステップにより得られる値に基づきカオス演算を行うカオス演算ステップと、このカオス演算ステップが実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変ステップと、前記カオス演算ステップによる演算結果に基づきカオスノイズを抽出するカオスノイズ抽出ステップとを実行する単一のカオスノイズ生成単位処理ステップにより構成される２次拡散処理ステップと、前記１次累計処理ステップの結果と前記２次拡散処理ステップの結果の排他的論理和演算を行う第２の論理和演算ステップとを備え、鍵データを前記初期位相生成ステップ及び前記１次累計処理ステップ及び前記２次拡散処理ステップにおける全てのパラメータ可変ステップへ与えることを特徴とする。
【００１７】
本発明のＭＡＣ生成プログラムは、前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのパラメータ可変ステップでは、前段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにて得られるパラメータ値を後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする。
【００１８】
本発明のＭＡＣ生成プログラムは、前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのパラメータ可変ステップによるパラメータ値は２次拡散処理ステップにおけるパラメータ可変ステップへ伝達され、該２次拡散処理ステップのパラメータ可変ステップにおいては、伝達されたパラメータ値を用いてパラメータ変化を生じさせることを特徴とする
【００１９】
本発明のＭＡＣ生成プログラムは、前記１次累計処理ステップにおいて、各カオスノイズ生成単位処理ステップのカオス演算ステップでは、前段のカオスノイズ生成単位処理ステップのカオス演算ステップから出力されるカオス演算結果を後段のカオスノイズ生成単位処理ステップのカオス演算ステップへ伝達して、後段のカオスノイズ生成単位処理ステップのカオス演算ステップにおいては、伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする。
【００２０】
本発明のＭＡＣ生成プログラムは、前記１次累計処理ステップにおける最終段のカオスノイズ生成単位処理ステップのカオス演算ステップにより得られるカオス演算結果は、２次拡散処理ステップにおけるカオス演算ステップへ伝達され、前記２次拡散処理ステップのカオス演算ステップにおいては、前記伝達されたカオス演算結果を用いてカオス演算を行うことを特徴とする。
【発明の効果】
【００２１】
本発明によれば、整数演算によるカオス演算を利用しているが、パラメータ可変を行っているので、シンプルな構成でありながら強力な情報攪乱を実現できる。また、特殊な演算補正手法などを用いることなく、いかなるプロセッサアーキテクチャによっても演算互換性を保つことができ、しかもコプロセッサ類を用いる必要がなく、汎用のプロセッサによる基本演算のみで実現可能である利点を有する。
【発明を実施するための最良の形態】
【００２２】
以下添付図面を参照して、本発明のＭＡＣ装置、ＭＡＣ方法及びＭＡＣ生成プログラムの実施例を説明する。各図において、同一の構成要素には同一の符号を付し、重複する説明を省略する。
【実施例１】
【００２３】
図１に、本発明に係るＭＡＣ生成装置の第１の実施例を示す。この実施例に係るＭＡＣ生成装置は、初期位相生成部２５と１次累計部１と２次拡散部２とを備えている。上記初期位相生成部２５は、１次累計部１による処理の前に、パラメータＡの初期位相（初期値）を決定するもので、予めｚ回のＭＡＣ鍵によるカオスの算出期間を設け、算出結果における最後のカオスノイズからｗ個のカオスノイズを初期値Ａ［ｊA ］（１≦ｊA ≦Ｗ）として用いる。そして、鍵データの鍵長は、２の羃乗であるＷバイトを想定する。初期位相生成部２５による処理は、後に説明する。初期位相生成部２５による処理結果である上記初期値Ａ［ｊA ］（１≦ｊA ≦Ｗ）は、初段のカオス生成単位１１−１におけるパラメータ可変部１３−１へ与えられる。また、ＭＡＣ鍵データ２４は初期位相生成部２５及び１次累計部１及び２次拡散部２における全てのパラメータ可変部１３−１〜１３−Ｍ、２２及びカオス演算部２１へ与えられる。
【００２４】
１次累計部１には、Ｍ個のカオスノイズ生成単位１１−１〜１１−Ｍが備えられている。カオスノイズ生成単位１１−１〜１１−Ｍは同一の構成であるため、カオスノイズ生成単位１１−１を代表として説明する。カオスノイズ生成単位１１−１には、与えられるデータに基づきカオス演算を行うカオス演算部１４−１と、このカオス演算部１４−１が実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変部１３−１と、上記カオス演算による演算結果に基づきカオスノイズを抽出するカオスノイズ抽出部１５−１とが具備されている。
【００２５】
このハッシュ値を生成するＭＡＣ生成装置においては、ハッシュ値算出の対象となるＬバイトの対象データを、Ｎバイトずつの複数（Ｍ個）のブロックに分割して、分割されたブロックのデータをそれぞれ１次累計部１の各カオス生成単位１１−１〜１１−Ｍへ与えてハッシュ値を生成する。初段のカオス生成単位１１−１に対しては、Ｌバイトである対象データの最初のブロックのデータ（Ｎバイト）１２−１が与えられる。対象データ長がＬバイトであり、必ずしもＮバイトで割り切れるとは限らない。つまり、Ｍ分割された第Ｍブロック目（最終ブロック）のデータは、Ｎバイトであるとは限らない。そこで、第Ｍブロック目においては、Ｎバイトに満たない部分にＮバイトとなるまで所定のデータ（例えば、オール０或いはオール１）をパディングする。最終段のカオス生成単位１１−Ｍに対しては、上記のように、必要な場合にパディングを行ったＮバイトのデータ１２−Ｍが与えられる。
【００２６】
カオス演算部１４−１〜１４−Ｍでは、整数演算によりカオス生成を行う。ここで、整数演算化拡大設計された写像であれば、どのようなカオス写像を用いても良いのであるが、整数演算によりカオスの量子化状態総数が大幅に減少することに基づく短周期性を補完するため、第１条件として、パラメータを定期変動させる手法を採用し、第２条件として、連続した幅広いカオス領域の確保が可能な写像を設計して用いる。これらについては、本願発明者が提案した特願２００１−３４６６５８に開示の関数群と手法を用いることができる。つまり、特願２００１−３４６６５８においては、第１条件として、整数演算化カオス関数とパラメータスケジューリング関数の併用を行っており、第２条件として、例えばロジスティック写像のように、幅広い連続したカオス領域が得られない写像を用いないようにしている。
【００２７】
ここでは簡単のために、「変形テント写像」を例示して説明する。図２に示されるように、写像範囲［０，２Ｓ］、写像中心Ｓとした場合に、右側の写像［Ｓ，２Ｓ］は、ｘ＝２Ｓ−ｘなる処理を行うことにより、左側の写像［０，Ｓ］と同等となるので、
ｘ＝Ａ／Ｓｘ＋Ｂ                              （１）
と表すことができる。
【００２８】
上記において、Ｓ＝２K であれば（Ｓが２の羃乗であれば）、
ｘ＝（（Ａ×ｘ）>>Ｋ）＋Ｂ                    （２）
（>>は、右ビットシフト演算）
のように、ビット演算によって表すことができる。この演算がカオス演算部１４−１〜１４−Ｍにより行われる。１次累計部１における各カオスノイズ生成単位１１−１〜１１−Ｍのカオス演算部１４−１〜１４−Ｍはカスケード接続されており、前段のカオスノイズ生成単位のカオス演算部から出力されるカオス演算結果を後段のカオスノイズ生成単位のカオス演算部へ伝達して、後段のカオスノイズ生成単位のカオス演算部においては、伝達されたカオス演算結果を用いてカオス演算を行う。従って、（２）式における右辺のｘは、伝達されたカオス演算結果を示している。そして、初段のカオスノイズ生成単位１１−１において用いるｘの初期値は、写像範囲内の任意の所定値を採用するものとする。
【００２９】
また、写像の最大値が２Ｓであるから、Ｓ＝２K を考慮して、２Ｓ＝２(K+1) となり、カオス信号は（Ｋ＋１）ビットである。
【００３０】
従って、（２）式（（１）式）では、１サイクル毎に（Ｋ＋１）ビットのカオス信号が生成され、その生成されたカオス信号の内の下位８ビットを有効乱数値として抽出することを考えると、該下位８ビットの有効乱数値（noise）は、
noise＝ｘ＆２５５                              （３）
（＆はビット毎のＡＮＤ演算）
である。なお、上記の下位８ビットが乱数値として有効であることは、先に挙げた特願２００１−３４６６５８において述べた通りである。この下位８ビットの抽出は、カオスノイズ抽出部１５−１〜１５−Ｍが実行する。
【００３１】
上記（１）式において、Ａ、Ｂの値が任意に指定可能なパラメータ範囲を示し、Ａ、Ｂの指定幅をそれぞれΔＡ、ΔＢとし、Ｂの基底値をＢ０とすると、
２Ｓ−ΔＢ−Ｂ０−ΔＡ≦Ａ＜２Ｓ−ΔＢ−Ｂ０              （４）
Ｂ０≦Ｂ＜Ｂ０＋ΔＢ                                      （５）
の範囲となる。つまり、パラメータスケジューリング関数は、（４）式及び（５）式の範囲でパラメータの変動及びスケジューリングを行うための関数である。なお、本発明では、パラメータを変動させるための情報（可変情報）をＭＡＣ鍵データ２４及びハッシュ生成の対象データ１２−１〜１２−Ｍから得る。上記において、写像範囲を２Ｓ乃至２16とすると、前述のようにＳ＝２K であるから、Ｋ＝１５となり、パラメータに関しては、ΔＡ、ΔＢとして４０９６前後の素数を指定し、Ｂ０として１以上の数を指定すれば良い。
【００３２】
パラメータ可変部１３−１〜１３−Ｍは、パラメータスケジューリングを行う。このパラメータスケジューリングにおいては、パラメータをカオス演算の１サイクル毎に変動させることを基本とする。また、パラメータの可変範囲は前述の（４）式及び（５）式により与えられる範囲であり、パラメータを変動させるための情報である可変情報をＭＡＣ鍵データ２４及びハッシュ生成の対象データ１２−１〜１２−Ｍから得るものである。
【００３３】
ここで、カオス演算の１サイクルにおいて８ビット（１バイト）のＭＡＣ鍵データと８ビット（１バイト）の対象データを扱い、８ビット（１バイト）のカオス乱数を生成するものとすると、パラメータを変動させるための情報である可変情報はＭＡＣ鍵データ（１バイト）に対象データ（１バイト）を加えた合計２バイトである。そして、パラメータＡとしてＭＡＣ鍵データを使用し、パラメータＢとして対象データを使用することとする。パラメータＡに対応する可変情報ＫＡとしては、ＭＡＣ鍵データの先頭から順に１バイト単位で抽出を行って、対象データの１バイトのバイナリ値をそのまま使用する。また、この可変情報が短期間に広範囲を巡回するようにするため、補正値ＫＡ０（２５６≦ＫＡ０＜ΔＡ−２５６）を加えて可変情報ＫＡを作成すると、
ＫＡ＝Ｋｅｙ＋ＫＡ０                            （６）
（Ｋｅｙは、ＭＡＣ鍵データの１バイトのバイナリ値(0≦Key<255))
である。
【００３４】
上記において、
Ａ０＝２Ｓ−ΔＢ−Ｂ０−ΔＡ：パラメータＡ基底値      （７）
ΔＡ（素数値）        ：パラメータ指定可能範囲        （８）
とすると、上記（４）式は、
Ａ０≦Ａ＜Ａ０＋ΔＡ                                  （９）
と表すことができる。
【００３５】
そこで、パラメータＡに関するスケジューリング関数を次のように与える。
Ａ＝fmod（Ａ＋ＫＡ，ΔＡ）＋Ａ０                （１０）
又はＡ＝fmod（Ａ＋Ｋｅｙ＋ＫＡ０，ΔＡ）＋Ａ０    （１０’）
ここにおいて、fmod（ａ，ｂ）は、ａをｂにより割り算した場合の余りであり、例えば、fmod（７，３）は７÷３を示し、その演算結果は１である。
一方、パラメータＢに対する可変情報ＫＢは、対象データのバイナリ値ｉｎｎをそのまま使用する。また、この可変情報が短期間に広範囲を巡回するようにするため、補正値ＫＢ０（２５６≦ＫＢ０＜ΔＢ−２５６）を加えて可変情報ＫＢを作成すると、
ＫＢ＝ｉｎｎ＋ＫＢ０                            （１１）
（ｉｎｎは、対象データの１バイトのバイナリ値(0≦inn≦255))
である。
そこで、パラメータＢに関するスケジューリング関数を次のように与える。
Ｂ＝fmod（Ｂ＋ＫＢ，ΔＢ）＋Ｂ０                （１２）
又はＢ＝fmod（Ｂ＋ｉｎｎ＋ＫＢ０，ΔＢ）＋Ｂ０    （１２’）
【００３６】
また、ＫＡ０、ΔＡ、Ａ０、ＫＢ０、ΔＢ、Ｂ０は、特にここでは定数値扱いであるから、
Ａ＝ｇA （Ａ，Ｋｅｙ）
Ｂ＝ｇB （Ｂ，ｉｎｎ）                              （１３）
により示される関数ｇA 、ｇB により表現することとする。
【００３７】
なお、本実施例では、ハッシュ生成のＭＡＣ鍵データがＷバイトであるから、１バイト単位に分割してＷ個のパラメータＡ［１］、Ａ［２］、Ａ［３］、・・・、Ａ［Ｗ］を用意し、これを
Ａ［ｊA ］    （１≦ｊA ≦Ｗ）                      （１４）
とする。
従って、（１０）式、（１０’）式により、ｊA 番目のパラメータＡ［ｊA ］は、
Ａ［ｊA ］＝fmod（Ａ［ｊA ］＋ＫＡ［ｊA ］，ΔＡ）＋Ａ０  （１５）
又は
Ａ［ｊA ］＝fmod（Ａ［ｊA ］＋ｋｅｙ［ｊA ］＋ＫＡ０，ΔＡ）＋Ａ０
（１５’）
と表す。
また、本実施例では、ハッシュ生成の対象データをＮバイト単位に分割したブロックのデータとして扱うため、Ｎ個のパラメータＢ［１］、Ｂ［２］、Ｂ［３］、・・・、Ｂ［Ｎ］を用意し、これを
Ｂ［ｊB ］    （１≦ｊB ≦Ｎ）                      （１6）
とする。
【００３８】
ここで、１次累計部１における各カオスノイズ生成単位１１−１〜１１−Ｍのパラメータ可変部１３−１〜１３−Ｍはカスケード接続されており、前段のカオスノイズ生成単位のパラメータ可変部から出力されるパラメータ値を後段のカオスノイズ生成単位のパラメータ可変部へ伝達して、後段のカオスノイズ生成単位のパラメータ可変部においては、伝達されたパラメータ値を用いてパラメータ変化を生じさせている。
【００３９】
また前述の通り、各カオスノイズ生成単位１１−１〜１１−Ｍにおいて、前段のカオスノイズ生成単位のパラメータＢ［ｊB ］は後段のカオスノイズ生成単位へ伝達され、後段のカオスノイズ生成単位が実行する同じサイクルにおいてパラメータ可変部が伝達されたパラメータ値を用いてパラメータ変化を生じさせている。従って、上記（１２）式（１２’）式は、
Ｂ［ｊB ］＝fmod（Ｂ［ｊB ］＋ＫＢ［ｊB ］，ΔＢ）＋Ｂ０  （１７）
又は
Ｂ［ｊB ］＝fmod（Ｂ［ｊB ］＋ｉｎｎ［ｊB ］＋ＫＢ０，ΔＢ）＋Ｂ０
（１７’）
と表す。同じく、（１２）式は、
Ａ［ｊA ］＝ｇA （Ａ［ｊA ］，Ｋｅｙ［ｊA ］）
Ｂ［ｊB ］＝ｇB （Ｂ［ｊB ］，ｉｎｎ［ｊB ］）            （１８）
という関数形式で表すことができる。式の右辺におけるＡ［ｊA ］やＢ［ｊB ］は、前段から伝達されたパラメータを示す。
【００４０】
カオス関数である（２）式を次のように関数ｆを用いて表すと、ノイズ抽出式である（３）式は次のようになる。
ｘ＝ｆ（Ａ［ｊA ］，Ｂ［ｊB ］，ｘ）
noise［ｊB ］＝ｆ（Ａ［ｊA ］，Ｂ［ｊB ］，ｘ）＆２５５                                                            （１９）
【００４１】
上記表現により、各カオスノイズ生成単位１１−１〜１１−Ｍでは第ｊA サイクル目、第ｊB サイクル目においては、次の通りの処理が実行される。
／／パラメータＡスケジューリング／／の処理では、
Ａ［ｊA ］＝ｇA （Ａ［ｊA ］，Ｋｅｙ［ｊA ］）
／／パラメータＢスケジューリング／／の処理では、
Ｂ［ｊB ］＝ｇB （Ｂ［ｊB ］，ｉｎｎ［ｊB ］）
／／カオス演算、ノイズ抽出、ハッシュ値生成／／の処理では、
ｈ１［ｊB ］＝ｈ１［ｊB ］＾（ｆ（Ａ［ｊA ］，Ｂ［ｊB ］，ｘ）＆２５５）                                                            （２０）
（＾はビット毎のＸＯＲ、ｈ１［ｊB ］は１バイトハッシュ値）
この（２０）式における排他的論理和演算は、第１の論理和演算部１６−２〜１６−Ｍにおいて行われる。つまり、各カオスノイズ抽出部１５−１〜１５−Ｍにおいては、１サイクル毎に得られる noise［ｊB ］を順次につなぎ合わせてＮバイトのハッシュ値を出力する。
【００４２】
第１の論理和演算部１６−２〜１６−Ｍにおいては、前段のカオスノイズ生成単位から出力されたＮバイトのハッシュ値（（２０）式の右辺におけるｈ１［ｊB ］をつなぎ合わせたＮバイトのデータ）と、当該第１の論理和演算部に対応するカオスノイズ生成単位から出力されたＮバイトのノイズ値（ noise［ｊB ］を順次につなぎ合わせたＮバイトのデータ）との排他的論理和演算を行う。この処理結果が上記（２０）式により１バイト単位で表現されている。
【００４３】
上記の（１８）式から明らかなように、Ｂ［ｊB ］は、パラメータ値として後段のカオスノイズ生成単位に送られる。また、初段のカオスノイズ生成単位１１−１におけるＡ［ｊA ］とＢ［ｊB ］とｈ１［ｊB ］は初期値であり、次に示すように与えられる。
Ａ［ｊA ］（１≦ｊA ≦Ｎ）  ：ＭＡＣ鍵固有のカオス演算初期値。
Ｂ［ｊB ］（１≦ｊB ≦Ｎ）  ：（５）式で与えられる範囲内の任意値。簡単のために、基底値Ｂ０を用いても良い。
ｈ１［ｊB ］（１≦ｊB ≦Ｎ）：全て０をセット              （２１）
【００４４】
次に、２次拡散部２について説明する。この２次拡散部２は、カオス初期条件敏感性により隣接データの拡散効果をもたらすために設けられている。２次拡散部２には、与えられるデータに基づきカオス演算を行うカオス演算部２１、カオス演算部２１が実行するカオス演算に用いる関数についてパラメータ変化を生じさせるパラメータ可変部２２、カオス演算による演算結果に基づきカオスノイズを抽出するカオスノイズ抽出部２３を備えるカオスノイズ生成単位２０が設けられている。
【００４５】
カオス演算部２１には、１次累計部１により得られた１次累計ＭＡＣ値１６１（ｈ１［ｊB ］をつなぎ合わせたＮバイトのデータ）、１次累計部１における最終段のカオスノイズ生成単位１１−Ｍに備えられているカオス演算部１４−Ｍのカオス演算結果（ｘ）、最終段のカオスノイズ生成単位１１−Ｍに備えられているパラメータ可変部１３−Ｍにより得られたパラメータ値（Ｂ［ｊB ］）、及びＭＡＣ鍵データＫｅｙ［ｊA ］が与えられる。
【００４６】
また、パラメータ可変部２２には、１次累計部１により得られた１次累計ＭＡＣ値１６１、１次累計部１における最終段のカオスノイズ生成単位１１−Ｍに備えられているパラメータ可変部１３−Ｍにより得られたパラメータ値（Ｂ［ｊB ］）及びＭＡＣ鍵データＫｅｙ［ｊA ］が与えられる。
【００４７】
以上の通りの構成によって、２次拡散部２では、１次累計部１において生成した１次累計ＭＡＣ値１６１をパラメータ可変情報として利用する。１次累計ＭＡＣ値１６１はｈ１［ｊB ］（１≦ｊB≦Ｎ）がつなぎ合わされたＮバイトの値であるから、各１バイトを取り出して、これをｈ１［ｊB ］として利用する。上記ｈ１［ｊB ］を利用する２次拡散部２においては、（１１）式は、
ＫＢ＝ｈ１＋ＫＢ０                                    （２２）
となる。
【００４８】
１次累計部１における（１７）式及び（１７’）式で示されるパラメータスケジューリング関数は、２次拡散部２については、
Ｂ［ｊB ］＝fmod（Ｂ［ｊB ］＋ＫＢ［ｊB ］，ΔＢ）＋Ｂ０  （２３）
又は
Ｂ［ｊB ］＝fmod（Ｂ［ｊB ］＋ｈ１［ｊB ］＋ＫＢ０，ΔＡ）＋Ｂ０
（２３’）
と変更される。上記（２２）式と（２３）、（２３’）式の右辺におけるＢ［ｊB ］、ｈ１［ｊB ］は、１次累計部１から伝達された値を示す。
【００４９】
また、同じく、（２０）式により示した処理は、
／／パラメータＡスケジューリング／／の処理では、
Ａ［ｊA ］＝ｇA （Ａ［ｊA ］，Ｋｅｙ［ｊA ］）
／／パラメータＢスケジューリング／／の処理では、
Ｂ［ｊB ］＝ｇB （Ｂ［ｊB ］，ｉｎｎ［ｊB ］）
／／カオス演算、ノイズ抽出、ハッシュ値生成／／の処理では、
ｈ２［ｊB ］＝ｈ２［ｊB ］＾（ｆ（Ａ［ｊA ］，Ｂ［ｊB ］，ｘ）＆２５５）                                                      （２４）
（＾はビット毎のＸＯＲ、ｈ２［ｊB ］は２次拡散ＭＡＣ値（１バイト））と変更される。係る処理を２次拡散部２のカオスノイズ生成単位２０において所定回数ＭａｘＺだけ反復を行い、その結果として得られるｈ２［ｊB ］をカオスノイズ抽出部２３においてつなぎ合わせ、Ｎバイトの値である２次拡散ＭＡＣ値２９とする。
【００５０】
この２次拡散部２に与える各初期値は次の通りである。
Ａ［ｊA ］（１≦ｊA≦Ｗ）：１次累計部の算出結果をそのまま利用。
Ｂ［ｊB ］（１≦ｊB ≦Ｎ）：１次累計部の算出結果をそのまま利用。
ｈ２［ｊB ］（１≦ｊB ≦Ｎ）：ｈ２［ｊB ］＝ｈ１［ｊB ］。つまり、１次累計ＭＡＣ値をそのまま代入する。
ｘ：１次累計部１の算出結果をそのまま利用する。
【００５１】
上記の１次累計部１の出力と２次拡散部２の出力は、排他的論理和演算を行う第２の論理和演算部２８へ送られる。この第２の論理和演算部２８による処理は、次の通りである。１次累計ＭＡＣ値１６１（ｈａｓｈ１）、２次拡散ＭＡＣ値２９（ｈａｓｈ２）について、それぞれビット毎の排他的論理和演算（ＸＯＲ）を行い、最終的に得られるＭＡＣ値１９をＭＡＣとすると、
ＭＡＣ＝ｈａｓｈ１＾ｈａｓｈ２                    （２５）
（ＭＡＣ：Ｎバイトハッシュ値）
【００５２】
初期位相生成部２５においては、既に述べた通り、１次累計部１による処理の前に、パラメータＡの初期位相（初期値）を決定する。ここでは、予めｚ回のＭＡＣ鍵によるカオスの算出期間を設け、算出結果における最後のカオスノイズからｗ個のカオスノイズを初期値Ａ［ｊA ］（１≦ｊA ≦Ｗ）を得る。パラメータＢについては、スケジューリングを行うことなく、規定固定値を用いる。すなわち、
／／パラメータＡスケジューリング／／の処理では、
Ａ［ｊA ］＝ｇA （Ａ［ｊA ］，Ｋｅｙ［ｊA ］）
であり、
／／カオス演算、ノイズ抽出、／／の処理では、
noise［ｊA ］＝ｆ（Ａ［ｊA ］，Ｂ０，ｘ）＆２５５）        （２６）
を実行し、結果の最終値からＷ個を得て、Ａ［ｊA ］とする。
この初期位相生成部２５の処理で、初期値は以下の通りである。
Ａ［ｊA ］（１≦ｊA ≦Ｗ）：基底値Ａ０
ｘ                        ：写像範囲内の任意値
【００５３】
上記構成のＭＡＣ生成装置は、実際には例えば、図３に示されるようなコンピュータにより実現することができる。図３に示すコンピュータは、ＣＰＵ（中央処理装置）１００が主メモリ１０１に記憶されたプログラムを実行することにより上記ＭＡＣ生成装置として動作を行うように構成されている。ＣＰＵ１００は、入力ポート１０２を介してハッシュ値算出の対象となる対象データや初期値等を取り込み、ハッシュ値を生成して出力ポート１０３から送出する。
【００５４】
主メモリ１０１に記憶されるプログラムは図４〜図７に示すフローチャートに対応するプログラムであり、このプログラムをＣＰＵ１００が実行することにより図１に示すＭＡＣ生成装置の各部が実現されるので、以下においては、上記フローチャートに基づきハッシュ生成装置の動作を説明する。
【００５５】
ＣＰＵ１００に対してＭＡＣ値生成の指示及びＭＡＣ値算出の対象となる対象データ及びＭＡＣ鍵データ２４が与えられると、図４に示すフローチャートのプログラムが起動され、前処理が行われる（Ｓ１）。この前処理にあっては、Ｎレジスタに対し、この度或いは予め定められた鍵付ハッシュ長をセットし、Ｌレジスタに対して上記で与えられた対象データのデータ長をセットし、Ｍレジスタに「Ｌ≦Ｎ×Ｍ」を満たす最小の整数値をセットし、ハッシュ値ｈ１［ｊB ］（１≦ｊB ≦Ｎ）として０をセットし、ハッシュ値ｈ２［ｊB ］（１≦ｊB ≦Ｎ）として０をセットし、パラメータＡ［ｊA ］（１≦ｊA ≦Ｗ）として例えば予め設定されている任意固定値Ａ０をセットし、パラメータＢ［ｊB ］（１≦ｊB ≦Ｎ）として例えば予め設定されている任意固定値Ｂ０をセットし、ＫＡ０として予め設定されている任意固定値をセットし、Ｚレジスタに初期カオス演算助走期間のループ値をセットし、２次拡散ループ回数ＭａｘＺとして例えば予め設定されている任意固定値をセットする。なお、前述の各初期値は、予め主メモリ１０１にセットされているか、或いはハッシュ生成処理の都度入力ポート１０２を介して与える。
【００５６】
次に、ｋカウンタ、ｊカウンタ及びｉカウンタの値にそれぞれ１がセットされ（Ｓ２）、Ｋｅｙ［ｊ］レジスタにＭＡＣ鍵データの１バイト（最初においては、ｊ＝１により、最初の１バイト）がセットされる（Ｓ３）。次に、（２６）式によりカオスノイズの算出が行われると共に、ｊカウンタのカウントアップが行われ（Ｓ４）、ｉカウンタの値と「Ｚ−Ｗ」の比較により算出結果の最後からＷ個の取り出しの回数（ｉ＞（Ｚ−Ｗ））となったか否かについての検出が行われる（Ｓ５）。
【００５７】
ステップＳ５においてｉ＞（Ｚ−Ｗ）とならなければ、ｉカウンタのカウントアップがなされ（Ｓ６）、（２６）式によりカオスノイズの算出が行われると共に、ｊカウンタのカウントアップが行われる（Ｓ４）。ステップＳ５においてｉ＞（Ｚ−Ｗ）となると、（２６）式によりノイズ抽出を行い（Ｓ７）、Ｗ個のｎｏｉｓｅ［ｊA ］をＡ［ｊA ］（１≦ｊA ≦Ｗ）として求める（Ｓ４，Ｓ５，Ｓ７，Ｓ８，Ｓ６）。そして、ｉカウンタの値がＺを超えると、図５に示されるフローチャートに示される処理へ進む。
【００５８】
図５に示されるフローチャートにおいて、ｊA カウンタ及びｊB カウンタは「１」へ初期化され（Ｓ１１）、Ｌバイト分の対象データについて処理が終了されたかを検出して（Ｓ１２）、終了となっていなければ対象データについて１バイトづつの取り込みを行う（Ｓ１３）。
【００５９】
当初においてまず、Ｍ分割された最初のＮバイト中の１バイトの対象データが処理される。Ｎバイト中の最初の１バイトを取り込み、そのバイナリ値をｉｎｎ［ｊ］レジスタにセットする（Ｓ１３）。次に、可変情報ＫＡ［ｊA ］へＫｅｙ［ｊA ］＋ＫＡ０をセットすると共に、可変情報ＫＢ［ｊB ］へｉｎｎ［ｊB ］＋ＫＢ０をセットしてパラメータ変位を決定し（Ｓ１４）、上記ＫＡ［ｊA ］とＡ［ｊA ］（Ａ［ｊA ］はここでは初期値Ａ０）とＫＢ［ｊB ］とＢ［ｊB ］（Ｂ［ｊB ］はここでは初期値Ｂ０）とを用いて（１５’）式と（１７’）式を用いてパラメータＡ［ｊA ］、Ｂ［ｊB ］を決定する（Ｓ１５）。上記ステップＳ１４とステップＳ１５によりパラメータ可変ステップを構成している。
【００６０】
次に、（１９）式によりカオス演算と、１バイトノイズ抽出を行う（Ｓ１６）。このステップＳ１６によりカオス演算ステップ及びカオスノイズ抽出ステップを構成している。次に上記で求めたノイズ値（noise）を noise［ｊ］に格納する（Ｓ１７）。
【００６１】
次に、ｊA カウンタ及びｊB カウンタを１カウントアップし（Ｓ１８）、ｊB カウンタが０となってハッシュ長Ｎと等しいノイズ値が得られたかを検出し（Ｓ１９）、ハッシュ長Ｎに達していなければ、ステップＳ１２及びステップＳ１３へ戻って次の１バイトのデータについてハッシュ生成処理を続ける。つまり、第２番目の１バイトの対象データに対する処理へ進む。以下ステップＳ１３からステップＳ１９までの処理を繰り返し、最初のＮバイトデータについて処理がなされると、ｊB カウンタの値は０となっており、ステップＳ１９からステップＳ２０へ進んで、（２０）式によりハッシュ値ｈ１［ｊB ］（１≦ｊB ≦Ｎ）を得て、これらをつなぎ合わせたＮバイトのハッシュ値（ｈ１［１］，ｈ１［２］，ｈ１［３］，・・・，ｈ１［Ｎ］がつながったデータ）を得てステップＳ１２へ戻る。この処理は、第１の論理和演算ステップを構成している。最初のブロックのデータに対する処理では、（２０）式における右辺のｈ１［ｊB ］（１≦ｊB ≦Ｎ）は０である。このようにして最初のブロックのデータに対する処理に続く次の処理では、第２番目のブロックに係る対象データについてステップＳ１３からステップＳ２０による処理が行われる。以降第３番目のブロックに係る対象データ、第４番目のブロックに係る対象データ、・・・と処理が進み、Ｌバイトの対象データについて処理を終了すると、ステップＳ１２から図６に示されるステップＳ２１へ進む。
【００６２】
ステップＳ２１は、パディングしたデータについての前処理である。このステップＳ２１において、Ｍａｘレジスタに要パディングバイト数（Ｍ×Ｎ−Ｌ）がセットされると共にｋカウンタに１をセットする。次に、ＫＡ［ｊA ］に対しＫｅｙ［ｊA ］＋ＫＡ０をセットすると共に、ＫＡ［ｊB ］に対し「パディング値＋ＫＢ０」をセットすることによるパラメータ変位の決定処理を行う（Ｓ２２）。次に、上記ＫＡ［ｊA ］とＡ［ｊA ］（Ａ［ｊA ］はここでは初期値Ａ０）とＫＢ［ｊB ］とＢ［ｊB ］（Ｂ［ｊB ］はここでは初期値Ｂ０）とを用いて（１５’）式と（１７’）式を用いてパラメータＡ［ｊA ］、Ｂ［ｊB ］を決定する（Ｓ２３）。
【００６３】
次に、（１９）式によりカオス演算と、１バイトノイズ抽出を行う（Ｓ２４）。このステップＳ２４によりカオス演算ステップ及びカオスノイズ抽出ステップを構成している。次に上記で求めたノイズ値（noise）を noise［ｊ］に格納する（Ｓ２５）。
【００６４】
次に、ｊA カウンタ及びｊB カウンタ及びｋカウンタを１カウントアップし（Ｓ２６）、ｋカウンタがＭａｘとなってハッシュ長Ｎと等しいノイズ値が得られたかを検出し（Ｓ２７）、ハッシュ長Ｎに達していなければ、ステップＳ２２へ戻って次の１バイトのデータについてハッシュ生成処理を続ける。つまり、次の１バイトのパディングデータに対する処理へ進む。以下ステップＳ２２からステップＳ２７までの処理を繰り返し、パディングデータを含むＮバイトのデータについて処理がなされると、ｋカウンタの値はＭａｘとなっており、ステップＳ２７からステップＳ２８へ進んで、（２０）式によりハッシュ値ｈ１［ｊB ］（１≦ｊB ≦Ｎ）を得て、これらをつなぎ合わせたＮバイトのハッシュ値（ｈ１［１］，ｈ１［２］，ｈ１［３］，・・・，ｈ１［Ｎ］がつながったデータ）を得て図７に示されるフローチャートのステップＳ３１へ進む。この（２０）式による処理は、第１の論理和演算ステップを構成している。
【００６５】
図７に示すフローチャートは、２次拡散処理ステップを表している。この処理においては、ｉカウンタに１をセットする処理を行い、２次拡散ＭＡＣ値ｈ２［ｊB ］に１次累計ＭＡＣ値ｈ１［ｊB ］をそのままセットする前処理を行う（Ｓ３１）。つまり、Ｎバイトのハッシュ値（ｈ１［１］，ｈ１［２］，ｈ１［３］，・・・，ｈ１［Ｎ］がつながったデータ）を、２次拡散ハッシュ値ｈ２［ｊB ］（ｈ２［１］，ｈ２［２］，ｈ２［３］，・・・，ｈ２［Ｎ］）の初期値としてそのままセットする。そして、ステップＳ３２からステップＳ３７の処理を行う。
【００６６】
ステップＳ３２では、可変情報ＫＡ［ｊA ］へＫｅｙ［ｊA ］＋ＫＡ０をセットすると共に、可変情報ＫＢ［ｊB ］へｈ１［ｊB ］＋ＫＢ０をセットしてパラメータ変位を決定し（Ｓ３２）、ＫＡ［ｊA ］とＡ［ｊA ］（Ａ［ｊA ］はここでは１次累計部処理ステップによる計算結果）とＫＢ［ｊB ］とＢ［ｊB ］（Ｂ［ｊB ］はここでは１次累計部処理ステップによる計算結果）とを用いて（１５）式と（１７）式を用いてパラメータＡ［ｊA ］、Ｂ［ｊB ］を決定する（Ｓ３３）。上記ステップＳ３２とステップＳ３３によりパラメータ可変ステップを構成している。
【００６７】
次に、（１９）式によりカオス演算と、１バイトノイズ抽出を行う（Ｓ３４）。このステップＳ３４によりカオス演算ステップ及びカオスノイズ抽出ステップを構成している。次に上記で求めたノイズ値（noise）を noise［ｊ］に格納する（Ｓ３５）。
【００６８】
次に、ｊA カウンタ及びｊB カウンタ及びｉカウンタを１カウントアップし（Ｓ３６）、ｉカウンタが２次拡散ループ数ＭａｘＺとなったかを検出し（Ｓ３７）、２次拡散ループ数ＭａｘＺに達していなければ、ステップＳ３２へ戻って次の１バイトのデータについてハッシュ生成処理を続ける。つまり、次の１バイトの１次累計部１による計算結果に対する処理へ進む。以下ステップＳ３２からステップＳ３７までの処理を繰り返し、ｉカウンタが２次拡散ループ数ＭａｘＺを超えると、ステップＳ３７からステップＳ３８へ進んで、（２５）式によりＭＡＣ値ｈ１［ｊB ］（１≦ｊB ≦Ｎ）をつなぎ合わせたＮバイトのハッシュ値（ｈ１［１］，ｈ１［２］，ｈ１［３］，・・・，ｈ１［Ｎ］がつながったデータ）とＭＡＣ値ｈ２［ｊB ］（１≦ｊB ≦Ｎ）をつなぎ合わせたＮバイトのハッシュ値（ｈ２［１］，ｈ２［２］，ｈ２［３］，・・・，ｈ２［Ｎ］がつながったデータ）とを得て、これらの各ビットを排他的論理和演算して最終のＭａｃ［ｊB ］を得る。この（２５）式による処理は、第２の論理和演算ステップを構成している。
【００６９】
以上の通り本発明は、カオスの特徴である初期条件敏感性、一方向性及び乱雑性を利用し、ハッシュ値を生成する手法であり、対象データ及びＭＡＣ鍵データをカオスパラメータの変化パターン（カオス関数の変化パターン）として利用し、対象データ及びＭＡＣ鍵データに固有のカオス乱雑波形に置き換え（カオスコード変換）、その後有限範囲へ波を畳み込み合成してＭＡＣ値を得ている。
【００７０】
また、本発明では汎用性を追及した手法が採用されている。カオス発生は、浮動小数点演算を用いた高精度での再現が常識とされている。本発明は、カオス写像関数の整数演算化を行い、整数演算とビット演算で記述され、いかなるプロセッサアーキテクチャによっても又特殊な演算補正を行う必要なく、必ず同じ結果が得られる特徴を持つ。これによって、特殊コプロセッサ類を必要とせず、プロセッサの基本演算処理のみでコンパクトに実現可能である。
【００７１】
さらに、発明では、最終的に固定長のＭＡＣ値を生成するものであるから、対象データをＭＡＣ長単位にブロック分割したブロック構造のように見えるが、カオス演算において前段の出力を後段に伝達し、それを利用したカオス演算を連鎖的に行う単純フィードバック構造であり、ストリーム的な構造と言える。
【００７２】
なお、１次累計部１における初期値は、常に固定初期値を用いるのではなく、固定初期値をテーブル変換を行って新たな初期値を得て、この初期値を用いても良い。
【実施例２】
【００７３】
また、上記の実施例では、カオスノイズ生成単位１１−１〜１１−Ｍ及びカオスノイズ生成単位２０からＮバイトのハッシュ値を出力するようにしたが、図８示す第２の実施例に係る構成を採用することもできる。つまり、カオスノイズ生成単位１１Ａ−１〜１１Ａ−Ｍ及びカオスノイズ生成単位２０Ａのカオスノイズ抽出部１５Ａ−１〜１５Ａ−Ｍとカオスノイズ抽出部２３Ａは１バイトのノイズを出力する。第１の論理和演算部１６Ａ−２〜１６Ａ−Ｍでは、１バイトのノイズについて排他的論理和演算を行う。蓄積部１７Ａは、与えられる１バイトのハッシュ値ｈ１［ｊB ］を順次つないでＮバイトのハッシュ値とする。また、蓄積部２９Ａは、与えられる１バイトのハッシュ値ｈ２［ｊB ］を順次つないでＮバイトのハッシュ値とする。従って、図８の構成例では、カオスノイズ生成単位１１Ａ−１が処理を行い、カオスノイズ生成単位１１Ａ−２が処理を行って第１の論理和演算部１６Ａ−２が１バイトのハッシュ値を得て、次に、カオスノイズ生成単位１１Ａ−３が処理を行って第１の論理和演算部１６Ａ−３が１バイトのハッシュ値を得て、・・・、最終的にカオスノイズ生成単位１１Ａ−Ｍが処理を行って第１の論理和演算部１６Ａ−Ｍが１バイトのハッシュ値を得て、蓄積部１７に１バイトのデータが蓄積される。次に、カオスノイズ生成単位２０Ａが処理を行って１バイトのハッシュ値を得て、蓄積部２９Ａに１バイトのデータが蓄積される。上記処理が、Ｎ回繰り返されることにより、蓄積部１７と蓄積部２９ＡにＮバイトのＭＡＣ値が蓄積されてつなぎ合わされる。
【図面の簡単な説明】
【００７４】
【図１】本発明に係るＭＡＣ生成装置の第１の実施例を示すブロック図。
【図２】本発明に係るＭＡＣ生成装置、ＭＡＣ生成方法、ＭＡＣ生成プログラムに用いる１次の整数演算化設計写像関数の一例を示す図。
【図３】本発明に係るＭＡＣ生成プログラムを用いてＭＡＣ生成方法を実現するコンピュータの構成例を示す図。
【図４】本発明に係るＭＡＣ生成プログラムに対応するフローチャートを示す図。
【図５】本発明に係るＭＡＣ生成プログラムに対応するフローチャートを示す図。
【図６】本発明に係るＭＡＣ生成プログラムに対応するフローチャートを示す図。
【図７】本発明に係るＭＡＣ生成プログラムに対応するフローチャートを示す図。
【図８】本発明に係るＭＡＣ生成装置の第２の実施例を示すブロック図。
【符号の説明】
【００７５】
１  １次累計部
２  ２次拡散部
１１−１〜１１−Ｍ  カオスノイズ生成単位
１１Ａ−１〜１１Ａ−Ｍ  カオスノイズ生成単位
１２−１〜１２−Ｍ  対象データ
１３−１〜１３−Ｍ  パラメータ可変部
１４−１〜１４−Ｍ  カオス演算部
１５−１〜１５−Ｍ  カオスノイズ抽出部
１５Ａ−１〜１５Ａ−Ｍ  カオスノイズ抽出部
１６−２〜１６−Ｍ  第１の論理和演算部
１６Ａ−２〜１６Ａ−Ｍ  第１の論理和演算部
２０  カオスノイズ生成単位
２１  カオス演算部
２２  パラメータ可変部
２３  カオスノイズ抽出部
２５  初期位相生成部
２８  第２の論理和演算部
【図１】
2005292482.tif 000003
【図２】
2005292482.tif 000004
【図３】
2005292482.tif 000005
【図４】
2005292482.tif 000006
【図５】
2005292482.tif 000007
【図６】
2005292482.tif 000008
【図７】
2005292482.tif 000009
【図８】
2005292482.tif 000010