(57)【特許請求の範囲】
【請求項１】
前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段と、
平文情報を所定の長さに分割した分割平文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を生成する暗号生成手段と、
初期状態において暗号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段と、
前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段と
を具備したことを特徴とする暗号生成装置。
【請求項２】
前記次関数決定手段は、カオスノイズ発生手段により発生されたカオスノイズが所定値より大きいか否かを検出し、カオスノイズが所定値以下であるときには、当初の写像関数によるカオスノイズの発生を行い、カオスノイズが所定値より大きい場合には、その写像関数を別の写像関数に変更することを特徴とする請求項１に記載の暗号生成装置。
【請求項３】
初期関数生成手段は、複数の関数パターンと複数の初期値を予め用意し、暗号化を開始するに際して鍵データによって前記複数の関数パターンと複数の初期値の中から関数パターンと初期値を選択することを特徴とする請求項１または請求項２に記載の暗号生成装置。
【請求項４】
カオスノイズ発生手段は、写像関数を用いた整数演算によりカオスノイズを得ることを特徴とする請求項１乃至３のいずれか１項に記載の暗号生成装置。
【請求項５】
カオスノイズ発生手段は、一次微分値が１以上である関数を写像関数として用いることを特徴とする請求項１乃至４のいずれか１項に記載の暗号生成装置。
【請求項６】
プログラムを実行することにより暗号生成を行うコンピュータと、前記コンピュータを次の（ａ）〜（ｄ）に記載の各手段として機能させる暗号生成プログラムを記憶した記憶媒体と、を具備する電子機器。
（ａ）前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段、
（ｂ）平文情報を所定の長さに分割した分割平文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を生成する暗号生成手段、
（ｃ）初期状態において暗号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段、
（ｄ）前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段。
【請求項７】
前記次関数決定手段は、カオスノイズ発生手段により発生されたカオスノイズが所定値より大きいか否かを検出し、カオスノイズが所定値以下であるときには、当初の写像関数によるカオスノイズの発生を行い、カオスノイズが所定値より大きい場合には、その写像関数を別の写像関数に変更することを特徴とする請求項６に記載の電子機器。
【請求項８】
初期関数生成手段は、複数の関数パターンと複数の初期値を予め用意し、暗号化を開始するに際して鍵データによって前記複数の関数パターンと複数の初期値の中から関数パターンと初期値を選択することを特徴とする請求項６または請求項７に記載の電子機器。
【請求項９】
カオスノイズ発生手段は、写像関数を用いた整数演算によりカオスノイズを得ることを特徴とする請求項６乃至８のいずれか１項に記載の電子機器。
【請求項１０】
カオスノイズ発生手段は、一次微分値が１以上である関数を写像関数として用いることを特徴とする請求項６乃至９のいずれか１項に記載の電子機器。
【請求項１１】
プログラムを実行することにより暗号生成を行うコンピュータを、次の（ａ）〜（ｄ）に記載の各手段として機能させる暗号生成プログラムを記憶した記憶媒体。
（ａ）前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段、
（ｂ）平文情報を所定の長さに分割した分割平文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を生成する暗号生成手段、
（ｃ）初期状態において暗号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段、
（ｄ）前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段。
【請求項１２】
前記次関数決定手段は、カオスノイズ発生手段により発生されたカオスノイズが所定値より大きいか否かを検出し、カオスノイズが所定値以下であるときには、当初の写像関数によるカオスノイズの発生を行い、カオスノイズが所定値より大きい場合には、その写像関数を別の写像関数に変更することを特徴とする請求項１１に記載の記憶媒体。
【請求項１３】
初期関数生成手段は、複数の関数パターンと複数の初期値を予め用意し、暗号化を開始するに際して鍵データによって前記複数の関数パターンと複数の初期値の中から関数パターンと初期値を選択することを特徴とする請求項１１または請求項１２に記載の記憶媒体。
【請求項１４】
カオスノイズ発生手段は、写像関数を用いた整数演算によりカオスノイズを得ることを特徴とする請求項１１乃至１３のいずれか１項に記載の記憶媒体。
【請求項１５】
カオスノイズ発生手段は、一次微分値が１以上である関数を写像関数として用いることを特徴とする請求項１１乃至１４のいずれか１項に記載の記憶媒体。
【請求項１６】
前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段と、平文情報を所定の長さに分割した分割平文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を生成する暗号生成手段と、初期状態において暗号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段と、前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段とを具備する暗号生成装置により生成された暗号文を復号化する暗号文復号装置において、
前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段と、
暗号文情報を所定の長さに分割した分割暗号文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を復号する復号手段と、
初期状態において復号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段と、
前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段と
を具備することを特徴とする暗号文復号装置。
【請求項１７】
前記次関数決定手段は、カオスノイズ発生手段により発生されたカオスノイズが所定値より大きいか否かを検出し、カオスノイズが所定値以下であるときには、当初の写像関数によるカオスノイズの発生を行い、カオスノイズが所定値より大きい場合には、その写像関数を別の写像関数に変更することを特徴とする請求項１６に記載の暗号文復号装置。
【請求項１８】
初期関数生成手段は、複数の関数パターンと複数の初期値を予め用意し、暗号化を開始するに際して鍵データによって前記複数の関数パターンと複数の初期値の中から関数パターンと初期値を選択することを特徴とする請求項１６または請求項１７に記載の暗号文復号装置。
【請求項１９】
プログラムを実行することにより暗号文復号を行うコンピュータを、請求項１６乃至請求項１８のいずれか１項に記載の暗号文復号装置に具備された各手段として機能させる暗号復号プログラムを記憶した記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はカオス信号を用いて暗号化を行う暗号生成装置、同暗号化を行う暗号生成プログラムを使用する電子機器、同プログラムを記憶した記憶媒体に関するものである。
【０００２】
【従来の技術】
近年、デジタルデータの安全性確保の理由より、暗号化技術は飛躍的に発展してきた。これと共に、暗号化処理が複雑化する傾向がある。例えば、ＤＥＳ（Data Encryption Standard）に代表されるブロック型暗号では、一般的に鍵長の増加により関数処理の増加及び複雑化が生じ、処理の低速化を招来する。また、ＲＳＡ（Riverst Shamir Adleman）や楕円曲線暗号のように、自然原理的に難解であることを応用した優れた暗号方式もあるが、暗号化処理の高速化がなされているとは言い難い。暗号により実現される安全面と暗号化処理の高速化は、一般的に相反する要素と考えられるが、通信データの暗号化等、高速性と安全性の両方を求められるようになってきたこともまた事実である。
【０００３】
ところで、カオスは初期値のわずかな違いで全くでたらめな軌道を描くことから、暗号作成の分野への応用が期待されている。従来の代表的な暗号方式には、カオスのような「偶然性」が備えるある意味無責任な振るまいがもたらす根本的な「複雑さ」を暗号化へ応用するという発想はなかったと言える。また、カオスは、未来へは決定論的であるが過去へは予測困難という一方向性を持ち、データからの逆解析やカオスパラメータの推測を困難にしている。更に、写像関数系のカオスは、非常に高速なストリーム性を呈し、ブロック型のような多段処理の必要性がないという特徴を有する。カオスは安全面と高速面から、暗号応用には最適のメカニズムを持ち合わせていると考えられる。
【０００４】
ロジスティック写像を例に挙げると、写像関数（カオス関数）は、
X n+1 =aXn(1-Xn)(0<Xn<1,3.6<a<4(制限あり))              （式ａ）
のように与えられ、（式ａ）の反復使用によりカオス乱数列<Xn>を得ることができる。そして、（式ａ）の反復毎に得たカオス信号Xnを256 段階に量子化し、平文1byeに付加する暗号ノイズとして使用する。この操作を平文がなくなるまで繰り返すことにより１つの平文を暗号化することができる。
【０００５】
（式ａ）は、係数ａの微小な差異、例えば、倍精度実数型（浮動小数点演算）においては、表現しうる最小〜1.0E-15 の差異で、全く異なる乱数列を生成する。例えば、図３に示されるように初期値の僅かな差によってそれぞれ異なる軌跡を描き、これがカオスの初期条件敏感性などと称されている。ここで生成されるパターンと係数ａの関連性はつかめないこと、X の初期値X0の推測が困難なことがカオスの性質であり、係るカオスの性質こそが暗号応用の着眼点であり、係数ａおよびX0を鍵で与える手法が採られる。
【０００６】
【発明が解決しようとする課題】
以上の通りカオスは初期条件に非常に敏感であり、倍精度実数型演算では、仮数部が表現し得る限界、つまり 1.OE-15( 1.0 ×10-15 （以下同様の表記を用いる。）程度の誤差が計算を反復する毎に指数関数的に広がっていくものである。係る点がカオスの暗号応用の着眼点となっている。一方、異なるプロセッサ間の演算特性差にも非常に敏感に反応し、誤差発生以降、全く異なる軌道を歩むことになる。例えば、SPARC （Scalable Process Architecture ）で暗号化したデータがAlpha,Intel x86 では復号できないという現象が生じる。このため汎用性をもたせるには、何らかのイコライズ操作が必要となる。
【０００７】
そこでソフトウェア的に最も簡単に実現する方法として、例えば、ステップ毎に（倍精度実数型）から（単精度実数型）への型変換操作を行うことが考えられる。しかし、単精度実数型では 1.0E-7 が表現の限界であるため、倍精度実数型に比べ８桁分（１０進表記）の精度が失われる。従って、状態数は大幅に減少するという問題点がある。
【０００８】
このような少数ビット量子化表現においては、カオスの縮退問題を考慮に入れる必要性が生じる。「縮退」は、以前算出した値に偶然に戻ることで周期性を生じる原因となる。また、大幅な桁落し操作により、理論解では与えられない個所に周期点が発生する可能性がある。確率的にも「縮退」の頻度は大きくなり、特に早い周期性を与えてしまう。
【０００９】
カオスの本質はアナログ量である。このため、デジタルでの正確な再現には無限ビット演算装置が必要となる。しかし現実的に無限ビット演算は不可能なため、カオス信号の量子化過程が必須となる。特に整数演算化、少数ビット量子化表現を行う場合には、カオスの歩む軌道数を大きく減少させ、パターン数の減少ばかりでなく、「縮退」発生によるパターンの単一化、少数化、およびこれに起因する周期の現れの早期化等、暗号応用には致命的になり兼ねない問題が顕著化する。
【００１０】
本発明は上記のような問題を解決せんとしてなされたもので、その目的は、隣接軌道が縮退を起こすことなく、従って発生されるカオスノイズのパターンに周期性が表れにくく、適切な暗号化を行うことのできる暗号生成装置、暗号生成プログラムを使用する電子機器、記憶媒体を提供することである。
【００１１】
【課題を解決するための手段】
本発明に係る暗号生成装置は、前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段、平文情報を所定の長さに分割した分割平文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を生成する暗号生成手段、初期状態において暗号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段、前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段とを具備し、また、本発明に係る電子機器は、コンピュータと、このコンピュータを上記各手段として機能させる暗号生成プログラムを記憶した記憶媒体を具備することを特徴とする。これにより、カオスノイズを発生する写像関数の周期が拡散される。
【００１２】
本発明に係る暗号生成装置や暗号生成プログラムを使用する電子機器、記憶媒体では、前記次関数決定手段は、カオスノイズ発生手段により発生されたカオスノイズが所定値より大きいか否かを検出し、カオスノイズが所定値以下であるときには、当初の写像関数によるカオスノイズの発生を行い、カオスノイズが所定値より大きい場合には、その写像関数を別の写像関数に変更することを特徴とする。これによって、写像関数が変更される。
【００１３】
本発明に係る暗号生成装置や暗号生成プログラムを使用する電子機器、記憶媒体では、初期関数生成手段は、複数の関数パターンと複数の初期値を予め用意し、暗号化を開始するに際して鍵データによって前記複数の関数パターンと複数の初期値の中から関数パターンと初期値を選択することを特徴とする。これにより、複数の写像関数と複数の初期値の中から写像関数と初期値が選択される。
【００１４】
本発明に係る暗号生成装置や暗号生成プログラムを使用する電子機器、記憶媒体では、カオスノイズ発生手段は、写像関数を用いた整数演算によりカオスノイズを得ることを特徴とする。これにより、整数演算においてカオスノイズが得られる。
【００１５】
本発明に係る暗号生成装置や暗号生成プログラムを使用する電子機器、記憶媒体では、カオスノイズ発生手段は、一次微分値が１以上である関数を写像関数として用いることを特徴とする。これにより、隣接軌道が縮退を起こさない写像関数によりカオスノイズが得られる。
【００１６】
本発明に係る暗号文復号装置は、前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段と、平文情報を所定の長さに分割した分割平文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を生成する暗号生成手段と、初期状態において暗号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段と、前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段とを具備する暗号生成装置により生成された暗号文を復号化する暗号文復号装置において、
前回のカオスノイズと関数パターンの値とに対し写像関数を適用してカオスノイズを発生し、発生毎に前記関数パターンの変数を歩進するステップを繰り返すカオスノイズ発生手段と、暗号文情報を所定の長さに分割した分割暗号文情報に対し、前記カオスノイズ発生手段により各ステップで発生されたカオスノイズを適用する演算を行って暗号を復号する復号手段と、初期状態において復号化の鍵データに基づき前記写像関数に対し当初に適用するカオスノイズ初期値及び初期関数パターンを決定し、当該カオスノイズ初期値及び初期関数パターンを前記カオスノイズ発生手段に与えてカオスノイズ発生を行わせる初期関数生成手段と、前記カオスノイズ発生手段によるカオスノイズ発生のステップ数をカウントし、カウントしたステップ数がそのとき使用している関数パターンの１周期となったかを検出し、１周期を検出する毎に当該関数パターンに基づき新たな写像関数を発生し、前記カオスノイズ発生手段に与えて次のカオスノイズ発生を行わせる次関数決定手段とを具備することを特徴とする。これにより、カオスノイズを発生する写像関数の周期が拡散される。
【００１７】
本発明に係る記憶媒体は、プログラムを実行することにより暗号文復号を行うコンピュータを、請求項１６乃至請求項１８のいずれか１項に記載の暗号文復号装置に具備された各手段として機能させる暗号生成プログラムを記憶したものである。これにより、カオスノイズを発生する写像関数の周期が拡散される。
【００１８】
【発明の実施の形態】
以下本発明の実施の形態に係る暗号生成装置、暗号生成プログラムを使用する電子機器、記憶媒体を説明する。本実施の形態では、整数演算によりカオスノイズを発生する。
［整数演算化］
ロジスティック写像関数を示す（式ａ）は、図４に示すような幾何学的な反復構造を備えている。このロジスティック写像関数を縦、横ともに等倍した２次元空間においても反復構造は保たれる。そこで本実施の形態では、整数演算可能な範囲までロジスティック写像関数を拡大し、整数値への量子化を図る。これが整数演算化の原理である。例えば、本実施の形態において用いる32-bitプロセッサの場合には、２次式を計算する関係上、16-bit範囲:1〜65535までを写像範囲として扱っている。また、64-bitプロセッサの場合では、32-bit範囲:1〜4,294,967,295 までが写像範囲として有効である。このように64-bit演算では32-bit演算より多くのカオス状態数を用いることが可能となるため有利である。
【００１９】
整数演算化の利点は、異なるプロセッサ間の浮動小数点演算特性差を意識しなくてよい点にある。従って、イコライズ操作過程が不要となり、汎用性が保てるなどの利点もある。また、整数演算による暗号生成装置（ディバイス）はＬＳＩ化が容易であり、比較的低コストでありながらセキュリティのレベルが高いチップへ応用すること等が見込めるものである。
【００２０】
［原理］
本発明のような整数演算化、少数ビット演算化では、（式ａ）に示すロジスティック写像関数の係数ａを固定した場合には（関数形を固定した場合には）、式（ａ）のｘは「縮退」を起こし、最終的に数個のアトラクターに引き込まれる。つまり、少数パターン化を招くと共に早期周期性が顕著化する。また、整数値量子化過程（小数点以下切り捨て）による不意な周期点発生等が懸念される。従って、整数演算化では、［カオス暗号原理］で述べた手法をそのまま用いた暗号応用は見込めない。
【００２１】
そこで、写像関数形をある時間間隔で変化させ、カオス軌道を積極的に交叉、撹乱する手法を本発明において採用する。つまり、写像関数の可変パターンを鍵より求めるという手法を用いる。カオス発生は、領域の「引き延ばし」と領域内への「折り畳み」の繰り返しを原理としている。一般に、「引き延ばし」過程では隣接間距離が離れ、一方「折り畳み」過程において離れた場所からの「縮退」を生じる。特にロジスティック写像では、「折り畳み縮退」以外に「隣接軌道の縮退」を起こす領域が存在する。
【００２２】
「引き延ばし」過程での縮退は免れ得ないが、「隣接軌道の縮退」は、関数形を選ぶことより回避できる。従って、本実施の形態に係る整数演算型の暗号化処理では、縮退や早期周期性の発生を極力避ける意味でロジスティック写像関数の利用を避ける。また、ロジスティック写像には周期窓が多く存在するため、関数可変化にあたり、カオスコントロールパラメータ（ロジスティック写像の場合では（式ａ）における係数ａの値）を連続的に配置できないため、関数を可変する場合のパラメータの配置（設定）が複雑になる。
【００２３】
更に整数演算型では、写像範囲内においてX が取りうる状態数が極めて少ない。例えば、32-bitＣＰＵを用いた演算の場合を考察すると、一般的に上記ＣＰＵを用いて数段の演算を行うことによって写像範囲を広げることができるのであるが、演算の段数を増やすことは処理ステップ数の増加を意味し、処理速度の低下を招くことになる。そこで本例では、できるだけ写像範囲を広くとるという要請と処理速度の低下をもたらさないという要請に鑑み、２段の演算によって16-bit範囲である１〜65535 までを考えることにより、処理速度の大きな低下がなく、且つできる限り広いカオス領域を持つ関数を採用する。上記の留意点を元に、（Ａ−１）隣接軌道が縮退を起こさない、（Ａ−２）可変化パラメータの配置(alloction) が容易である、（Ａ−３）カオス領域ができるだけ広い、という（Ａ−１）〜（Ａ−３）からなる３つの命題を満たすような関数を選択し、整数演算型可変化設計を行う。
【００２４】
［関数設計例］
「隣接軌道の縮退」は、写像関数の１階微分値が｜ｆ’｜＜１の領域で起こる。図５を参照するとロジスティック写像の場合には、隣接軌道の縮退発生領域は全体の２５％以上にまでに及ぶことが概ね理解できる。従って、必ず｜ｆ’｜≧１を満たすような写像関数の設計を行う必要がある。これよりリアプノフ指数（後述(h1)〜(h3))は反復毎で正となり、隣接軌道は発散関係を維持できる。
【００２５】
設計関数において｜ｆ’｜＜１の領域を省くと、例えば図６に示すように頂点を境に１次導関数が不連続となる。ここで本実施の形態では、頂点を境に左側関数（左側）、右側関数（右側）と呼ぶことにする。次に具体的に一般解を求める。ここでは簡単のため、（式ｂ１）のような２次の写像関数を考える。（式ｂ１）の１次導関数は（式ｂ２）に示される通りである。
f(x)=ax2 +bx+c                 （式ｂ１）
f´(x)=2a+b                      （式ｂ２）
【００２６】
有効写像区間を０＜ｘ＜２k+1 とし、頂点座標を（ｐ，ｈ）に取り、１次導関数f´(p)=ｒとすると、｜ｆ’｜≧１を満たす条件は以下のようである。
（１）上に凸の２次関数の場合
（左側関数）
ｆ(0) ＝０
f´(p) ≧１
ｆ(p) ＝ｈ
ａ＜０            （式ｃ１）
（右側関数）
ｆ(p) ＝ｈ
f´(p) ≦−１
ｆ(2k+1 )=0
ａ＜０            （式ｃ２）
（２）下に凸の２次関数の場合
（左側関数）
ｆ(0) ＝０
f´(p) ≧１
ｆ(p) ＝ｈ
ａ＞０            （式ｃ３）
（右側関数）
ｆ(p) ＝ｈ
f´(2k+1 ) ≦−１
ｆ(2k+1 )=0
ａ＜０            （式ｃ４）
【００２７】
上記（式ｃ１〜ｃ４）それぞれの連立方程式の解（不等式）が、係数ａ，ｂ，ｃの取りうる範囲である。特に、上に凸の左側関数では、r=rr/pとした場合には、（ｒ≧１より、ｒｒ≧ｐ) が成り立ち、
ａ＝−（ｈ−ｒＲ／ｐ2 ）                    （式ｄ１）
ｂ=  (２ｈ−ｒｒ)/ｐ                        （式ｄ２）
ｃ＝０                                      （式ｄ３）
ｒｒ≧ｐ   (ｒ= ｒｒ/ ｐ≧１より）          （式ｄ４）
ｈ＞ｒｒ   (ａ＜０より)                      (式ｄ５）
を得る。尚、ｒｒはｒとは別の１個のパラメータであり、１次導関数f´(p)=ｒの２乗等を意味するものではない。
【００２８】
上記（式ｄ１）〜（式ｄ５）を用いて関数ｆを表現すると、
f(x,p,h,rr) ＝-{(h-rr)/p2 }x2 +{(2h-rr)/p}x       （式ｅ１)
ｈ＞ｒｒ≧ｐ                                      （式ｅ２）
なる関数形（式ｅ１）および条件式（式ｅ２）を得る。
【００２９】
この解を満たす全ての(p,h,rr)の組み合わせ（整数格子点の組）が有効関数形である。（式ｅ２）（式ｄ４）（｜関数の傾き｜≧１）により、ｐ、ｈの取り得る範囲を示すと図７の網かけ表示の部分となる。
【００３０】
上記に対応した右側関数は、左側関数と幾何学的に線対称を成すという理由によって
ｘ＝２k+1 −ｘ                                            （式ｆ）
の変換後、ｆ(0)=0 となる左側関数形と同様に扱える。
【００３１】
ここに、左側関数と右側関数は、共にパラメータｐは共通であるが、h,rrはそれぞれ左側(h1,rr1)、右側(h2,rr2)のように個別の値を採っても構わない。従って、以上をまとめて、関数形は以下の（式ｇ）により表されるf(x,p,h1,rrl、h2,rr2）のように整理することができる。
（ｘ＜ｐの場合：左側関数）
f(x,p,h1,rr1,h2,rr2)=-{(h1-rr1 )/p2 }x2 +{(2h1-rr1)/p}x
(ｘ＞ｐの場合：右側関数)
x= xk+1 -1
f(x,p,h1,rr1,h2,rr2)=-{(h2-rr2 )/p2 }x2 +{(2h2-rr2)/p}x
ただし写像範囲は (０＜x ＜２(k+1) ）                以上（式ｇ）
【００３２】
［設計関数例の評価］
ここで（式ｇ）に係る整数演算型設計関数について考察を与える。分岐図(bifuration Diagram)  、およびリアプノフ指数(Lyapunov Index)  より、ロジスティック写像関数との比較を試みる。整数演算化設計を行った（式ｇ）において、写像範囲は16-bit:1〜65535の場合について考える。関数形は、（式ｇ）が特に単純形式を取る場合を考察する。つまり、左右関数の分離点を写像範囲の中心（ｐ＝２15）に置き、関数の左右で、h,rrを同値にした場合(h1=h2,rr=rr2)のｈに対する分岐図を図８に示す。ｒｒは、ｒ=3/2＊２15に固定した。
【００３３】
図９には、図８に対応した整数演算型ロジスティック写像の分岐図を示す。整数演算型設計関数のｒｒに対する分岐図（ｈ＝２16に固定）を図１０に示す。範囲は、（式ｅ２）を考慮に入れ、２15＜ｒｒ＜(3/2）＊２15としてある。分岐図の横軸は、本設計関数では可変パラメータｈ（図８）およびｒ（図１０）であり、図９のロジスティック関数では（式ａ）の係数ａを意味し、複数点プロットされ黒く表されている個所がカオス領域を示す。図８、図９を参照することにより、本整数演算化設計関数はロジスティック写像関数と比較し、カオス領域が広くなっており、周期窓の存在も見られないことが判る。よって、本整数演算化設計関数においては、可変化パラメータの再配置がより容易である。従って命題（Ａ−２）を満たしていることが理解できる。
【００３４】
次にリアプノフ指数について考える。本整数演算型設計関数（式ｇ）のリアプノフ指数は図１１に示される通りであり、これに対応する整数演算型ロジスティック写像関数でのリアプノフ指数は図１２に示される通りである。これら、図１１、図１２のリアプノフ指数グラフは、分岐図と同じ範囲について算出し、示してある。
【００３５】
リアプノフ指数は、近接する２点間の広がり具合（発散関係または収束関係）を示したもので、分岐図と同様にカオス状態を裏付ける指標である。
ｆ（ｘn ＋Δｘ）−ｆ（ｘn ）＝Δｘｅλ                  （式ｈ１)
λ＝ln｜｛ｆ（ｘn ＋Δｘ）−ｆ（ｘn ）｝／Δｘ｜      （式ｈ２）
上記において（式ｈ１）は１回の写像（反復）後に近接する２点、ｘおよびｘ＋ΔｘがΔｘ−ｅλ  だけ広がったことを意味し、（式ｈ１）を変形した（式ｈ２）におけるλがその広がり具合を表す。
【００３６】
λ＞０   (２点は広がる関係：発散関係)
λ＜０   (２点は狭まる関係：収束関係)
これを十分大きいステップに対し、（式ｈ３）のように相加平均を取った値がリアプノフ指数であり、図１１、図１２のグラフのようになる。
0003953253.tif 000002
【００３７】
上記図８、図９、図１０の分岐図、及び図１１、図１２のリアプノフ指数グラフより、分岐図でのカオス領域ではリアプノフ指数は正であり、非カオス領域では負となる様子がわかる。図１１と図１２より、本設計関数は写像範囲内で常に正となる。これは、初期の隣接２点は必ず広がっていく（発散する）ことを意味し、カオスの特徴を裏付ける重要な指標である。これより、隣接軌道は常に発散関係を維持するため、命題（Ａ−１）を満たしていることが理解できる。更に、上記分岐図とリアプノフ指数より、本設計関数は、ロジスティック写像関数に比べカオス領域は非常に広く、整数演算化（少数状態数）には特に貴重なパターン数の確保が可能となることが理解できる。この点は命題（Ａ−３）を満たしていることを示す。
【００３８】
［設計関数例の状態数］
次に本関数の状態数（関数形の数）を見積もることにする。特に、ここでは簡単のため、それぞれ、p,h,rrの条件を与える（式ｅ２）を以下のように割り振って考えることにする。
特にΔｗ＝２k ／５とした場合
２k −１×Δｗ＜ｐ＜２k ＋１×Δｗ       (幅２×Δｗ）    （式ｉ１）
２k ＋１×Δｗ＜ｒｒ≦２k ＋３×Δｗ     (幅２×Δw)      （式ｉ２）
２k ＋３×Δｗ＜ｈ≦２k ＋５×Δｗ       (幅２×Δw)      （式ｉ３）
とし、（式ｇ）にて表される関数のパラメータ(p,h1,rr1,h2,rr2) が取り得る状態数Ｌ（関数形の総数）は、最大で
Ｌ＝（２×Δｗ）5                 （式ｉ４）
である。
特に32-bit演算では、ｋ=15 の場合に相当し、写像範囲は０＜ｘ＜２k+1 、従って写像範囲が０＜ｘ＜２16の場合には、
Ｌ=(２×２15) ／５）5 >>（２13）5 ＝２65［個］        （式ｊ１）
におよぶ。
【００３９】
鍵より２13の生成が困難な場合において、２12( ＝２8+4 ）に範囲を制限した場合にあっても、
Ｌ＝（２12）5 ＝２60［個］                （式ｊ２）
におよぶ。
【００４０】
（式ｊ１）、（式ｊ２）は、本整数演算型の設計関数の総数（状態総数）である。暗号生成の過程における時間方向には、これら設計関数の組み合わせパターンは無限であり、これら設計関数というリソースを効率よく再配置（Re-Allocation ）していけば常に適切な暗号化を図ることができる。また、鍵より（式ｊ１）による数の設計関数を算出することが困難な場合には、（式ｊ２）のように設計関数の算出が容易な範囲内に制限しても同様の効果を得ることができる。
【００４１】
［設計関数例での可変化原理］
整数演算型で［カオス暗号原理］をそのまま適用した場合には、少数パターン化、早期周期化を招くことは既に述べた通りである。従って、（式ｇ）に示されるような隣接軌道が縮退を起こさない設計関数と、（式ｉ１）〜（式ｉ３）に示される条件に従って、ある時間間隔で写像関数を変化させ積極的に軌道を交叉し撹乱させる手法が［本発明の原理］と言える。これら関数の可変パターンは鍵より求める。
【００４２】
本整数演算型の設計関数の遷移は、（式ｇ）により与えられる設計関数についてパラメータ(p,h1,rr1,h2,rr2) の組を変位することにより実現される。ここにそれぞれの可変範囲は（式ｉ１）〜（式ｉ３）に示される通りである。特にステップ毎に関数形を変化させる場合、ｎステツプ目の関数は
f(xn,p[n],h1[n],rr1[n],h2[n],rr2[n] ）と表され、（式ｇ）より、
（ｘ＜ｐの場合：左側関数）
ｘn+1=-{(h1[n]-rr1[n])/p[n] 2 } xn2 +{(2h1[n]-rr1[n])/p}xn
（ｘ＞ｐの場合：右側関数）
xn＝ｐ−ｘn の変換後
ｘn+1=-{(h2[n]-rr2[n])/p[n] 2 } xn2 +{(2h2[n]-rr2[n])/p}xn
以上（式ｋ）
と表せられる。
【００４３】
特に，ｎステップ目の関数パラメータを
(p[n],h1[n],rr1[n],h2[n],rr2[n])ΞA[n]          （式ｌ）
のようにベクトル表記すると、写像関数は
ｘn+1 ＝ｆ（ｘn ，A[n]）              （式ｍ）
のように整理される。
【００４４】
関数可変化は、ステップ毎（またはある時間間隔）で写像関数を以下の（式ｎ）のように変化させる。
A[1],A[2],...,A[n]...A[m]               （式ｎ）
上記において、A[i]Ξ（p[i],h1[i],rr1[i],h2[i],rr2[i]))であり、ここではA[ ]のｍ変調を考えている。そして，A[ ]の可変パターンA[i] (i=1 〜m)を鍵より導く。
【００４５】
本実施の形態では１ステップで、1byte 毎の平文を暗号化する。平文は通常においてA[ ]の最大周期ｍよりも多いバイト数を有するであろう。従って、関数可変化パターンＡが最大のｍに達したとき、A[i](i= 1〜m)の基本変調形を保持しつつ、A[i]＋δＡの変化を与えて単一パターンに陥らないよう対策を施すものである。つまり、
A[i]=A[i] ＋δA(i:1 〜m:A の１周期以降)           （式ｏ）
ここに、δA Ξ (δp,δh1, δrr1,δh2, δrr2)である。このようにA に対する変化の与え方は、単純に線形的に変化させても良い。その理由は、写像関数形の微妙な変位はカオス初期条件敏感性に相当するからである。
【００４６】
また，A[i]の採り得る状態総数値を超えた場合を考えて、A[i]を以下のようにする。
0003953253.tif 000003
上記（式ｏ´)において、AMaxは、A[ ]の取りうる状態総数値を示す。このようにA[i]与え、δA を例えば素数値、かつ、AMax値（A[ ]の取りうる状態総数値）の因数でない値を与えることで、A[ ]の全ての状態値を効率よく走査できる。上記において、fmod(A,B) は、ＡをＢで割った余りを意味する関数で、例えば、fmod(8,3)=2, fmod(13,6)=1 である。
【００４７】
次に上記の原理に基づく暗号生成装置、暗号生成プログラムを使用する電子機器の実施の形態を説明する。この暗号生成装置、暗号生成プログラムを使用する電子機器は、例えば、パーソナルコンピュータ、ワークステーション等の各種電子計算機やＬＳＩ或いはネットワークによるシステムなどとして実現され、図１に示される機能ブロック図にて表すことができる。
【００４８】
暗号生成装置または暗号生成プログラムを使用する電子機器は、カオスノイズ発生手段１、暗号生成手段２、次関数決定手段３を具備する。カオスノイズ発生手段１は、カオスノイズを発生する写像関数を用いて暗号化の鍵データに基づきカオスノイズを発生するものであり、鍵発生部１１、初期関数生成部１２、カオスノイズ発生部１３を備える。暗号生成手段２は、平文情報を所定の長さに分割した分割平文情報に対し、カオスノイズ発生手段１により発生されたカオスノイズを適用する演算を行って暗号を生成するものであり、平文分割部２１と暗号文生成部２２とを具備する。次関数決定手段３は、分割平文情報に適用するカオスノイズを発生する写像関数を第１の周期毎に変更するものであり、周期検出部３１と関数変更制御部３２とを具備する。
【００４９】
鍵発生部１１は、鍵発生指示入力を受けて鍵情報を発生するものである。初期関数生成部１２は、鍵発生部１１により発生された鍵情報を用いて（式ｇ）に係る関数の初期関数を生成してカオスノイズ発生部１３へ送るものである。カオスノイズ発生部１３は、上記初期関数を用いてカオスノイズを発生して出力するものである。
【００５０】
平文分割部２１は、平文（暗号化される以前の文）データを入力し１バイト単位に分割して出力する。暗号文生成部２２は、分割された平文を平文分割部２１から得ると共に、カオスノイズをカオスノイズ発生部１３から受け取り、これらを演算により暗号化して出力する。
【００５１】
周期検出部３１は、A[i]のｍ変調分の周期を検出するものであり、関数変更制御部３２は、周期検出部３１がｍ変調分の周期を検出する毎に（式ｏ´)による処理によりA[i]に変更を加えて写像関数自体を変更し、カオスノイズ発生部１３へ提供するものである。カオスノイズ発生部１３は、次の１サイクルについて変更された写像関数を用いてカオスノイズを発生することになる。
【００５２】
以上のように構成される暗号生成装置、暗号生成プログラムを使用する電子機器は、実際には図２に示されているフローチャートに対応するプログラムにより動作するので、このフローチャートを用いて動作を説明する。尚、このプログラムは、ＲＯＭ等のメモリ、ＣＤ−ＲＯＭやフロッピーディスク、その他の記憶媒体に記憶されてプロセッサに供される。
【００５３】
さて、図２の処理が起動されると、鍵よりｘの初期値及びA[i]の初期関数パターンを決定する（Ｓ１）。例えば、ｘが採り得る全ての値とA[i]が採り得る全てのパラメータを組み合わせて初期値候補（Ｍ個の候補）を用意する。一方、０〜９の数字、大小の英字、＃，＋，＝等の記号により６４キャラクタを定めて、この６４キャラクタをいくつか組み合わせてＭパターンのキャラクタ組み合わせを作り、Ｍパターンのキャラクタ組み合わせのいずれかと上記Ｍ個の候補のいずれかとを１対１に対応させたメモリテーブルを用意し、鍵発生部１１とする。暗号作成に当たり、オペレータが６４キャラクタのいくつかのキャラクタを選択入力すると、鍵発生部１１はこれを受けて上記メモリテーブルから対応する１つの初期値候補を出力する。
【００５４】
次に、ｉを１とすると共にｘを初期値とし（式ｇ）に適用して初期関数を生成する（Ｓ２）。さらに、平文の１バイトを読み込みレジスタｃへセットし（Ｓ３）、ステップＳ２にて生成した（式ｇ）の初期関数を用いてカオスノイズ値Ｘの算出を行い（Ｓ４）、算出したカオスノイズ値Ｘの下位１バイトを得て情報落ち１バイトノイズ（ｘａｄｄ）を生成する（Ｓ５）。このステップＳ５における演算をｘａｄｄ＝ｆｒｅｄ（ｘ）と表記している。
【００５５】
次に、レジスタｃにセットした平文の１バイトと、情報落ち１バイトノイズ（ｘａｄｄ）との排他的論理和演算を行って１バイトの暗号文を生成する（Ｓ６）。更に、A[i]におけるｉがA[i]の周期ｍより小さいかを検出し（Ｓ７）、小さい場合には、ｉを１インクリメントして写像関数を変調し（Ｓ８）、暗号化すべき平文が終了したか否かを検出する（Ｓ９）。ここで未終了であることが検出されると、ステップＳ３へ戻って平文の次の１バイトを読み出してレジスタｃへセットし、以下ステップＳ４〜Ｓ９を繰り返す。このように動作を継続するうちに、A[i]におけるｉがA[i]の周期ｍ以上となり、ステップＳ７においてＮＯへ分岐して、（式ｏ´)であるA[i]=g(A[i])より、次の関数パターンを生成する（Ｓ１０）。そして、ｉを１として（Ｓ１１）、ステップＳ９へ進み以降の動作を続けることにより平文の全てを暗号化してステップＳ９にてＹＥＳへ分岐して処理を終了する。
【００５６】
以上のようにして作成された暗号文は受側において復号され元の平文へ戻される。この復号装置の構成例を図１３に示す。図１と同一構成要素には同一符号を付して示すように、暗号生成装置に用いられたと同一構成のカオスノイズ発生手段１、次関数決定手段２が用いられる。復号化装置においては、復号化手段４が備えられる。
【００５７】
復号化手段４は、暗号文分割部４１と復号部４２とを具備する。暗号文分割部４１は暗号化された暗号文データを入力し１バイト単位に分割して出力する。復号部４２は、分割された暗号文を暗号文分割部４１から得ると共に、カオスノイズをカオスノイズ発生部１３から受け取り、これらを演算して暗号文を復号化して出力する。
【００５８】
以上のように構成される暗号文の復号装置は、実際には図１４に示されているフローチャートに対応するプログラムにより動作するので、このフローチャートを用いて動作を説明する。尚、このプログラムは、ＲＯＭ等のメモリ、ＣＤ−ＲＯＭやフロッピーディスク、その他の記憶媒体に記憶されてプロセッサに供される。
【００５９】
図１４の処理が起動されると、鍵よりｘの初期値及びA[i]の初期関数パターンを決定する（Ｓ２１）。この場合、鍵は暗号化の際の鍵が選択される。鍵発生の構成は暗号生成装置等の構成と同様である。次に、ｉを１とすると共にｘを初期値とし（式ｇ）に適用して初期関数を生成する（Ｓ２２）。さらに、暗号文の１バイトを読み込みレジスタｄへセットし（Ｓ２３）、ステップＳ２２にて生成した（式ｇ）の初期関数を用いてカオスノイズ値Ｘの算出を行い（Ｓ２４）、算出したカオスノイズ値Ｘの下位１バイトを得て情報落ち１バイトノイズ（ｘａｄｄ）を生成する（Ｓ２５）。
【００６０】
次に、レジスタｄにセットした暗号文の１バイトと、情報落ち１バイトノイズ（ｘａｄｄ）との排他的論理和演算を行って１バイトの平文を生成する（Ｓ２６）。更に、A[i]におけるｉがA[i]の周期ｍより小さいかを検出し（Ｓ２７）、小さい場合には、ｉを１インクリメントして写像関数を変調し（Ｓ２８）、復号化すべき暗号文が終了したか否かを検出する（Ｓ２９）。ここで未終了であることが検出されると、ステップＳ３へ戻って暗号文の次の１バイトを読み出してレジスタｄへセットし、以下ステップＳ２４〜Ｓ２９を繰り返す。このように動作を継続するうちに、A[i]におけるｉがA[i]の周期ｍ以上となり、ステップＳ２７においてＮＯへ分岐して、（式ｏ´)であるA[i]=g(A[i])より、次の関数パターンを生成する（Ｓ３０）。そして、ｉを１として（Ｓ３１）、ステップＳ９へ進み以降の動作を続けることにより暗号文の全てを複号化してステップＳ２９にてＹＥＳへ分岐して処理を終了する。
【００６１】
上記暗号化及び復号化において、（式ｇ）の設計関数式および（式ｉ１）〜（式ｉ３）のパラメータ割り当て条件下において、関数形総数（状態総数）は、ｋ=15 、つまり写像範囲が０＜ｘ＜２16の場合には、（式ｊ１）、（式ｊ２）より、最大でＬ＝２65個となる。特に（式ｊ２）の場合には、関数の総数はＬ＝２60である。従って、単純に関数可変べクトルA[ ]のｍ変調では、（２60）m の暗号化パターンを有し、m=17変調では1024bit を超える暗号化パターンを有することになる。このように、暗号化と復号化において処理が進行するにつれて所定周期毎にに関数の可変パターンを与える方式では、ｍを大きく取ることで、原理的に莫大数乃至無限の暗号化パターンを発生できるポテンシャルを有している。実際にはA[ ]のｍ＝９変調で512bit暗号化パターン、ｍ＝５変調で256bit暗号化パターンなど、強度を調整し使用する。また、本アルゴリズムの構成上、ｍの値を多くとっても（鍵長を増加させても）処理の低速化を生じることはない。
【００６２】
しかし、同じA[ ]の状態を連続して与えることは、（式ａ）の係数ａを固定する場合と変わらないので、左右の関数を独立した変位方式を与えるなどの対策が必要となる。またδＡの与え方にも工夫が必要となる。具体的なパラメータ変動手法を次に示す。
【００６３】
[具体事例１]
前述の［設計関数例での可変化原理］に従い、δA の変調方式を与える。以下、例を挙げ説明する。ここでは、A[ ]を１次元パラメータと考え（実際には（式ｇ）より、（p,h1,rr1,h2,rr2 ）の５つのパラメータが存在）て、
A[1] ＝１
A[2] ＝２
A[3] ＝３
A[4] ＝４
のように、16階調、ｍ＝４可変周期、とした場合、５番目（ｉ＝５）以降８番目（ｉ＝８）までを、A[i+4]=A[i]+δA   (i=1〜４) とさせる。このとき、δA ＝１とすると、
A[5] ＝２
A[6] ＝３
A[7] ＝４
A[8] ＝５
となる。
【００６４】
しかし、別途指定のA´[i] 系列のｉ=1〜４を
A´[1]＝２
A´[2]＝３
A´[3]＝４
A´[4]＝５
とした場合には、上記A[５〜８] と、A´ [１〜４] が一致することになる。このように例え一致しても、（式ｇ）におけるｘの値が異なれば別の軌道をたどることになるのであるが、写像範囲１／２k+1 の確率で軌道が一致する。更には、δA=δA´の条件が重なった場合、A[i]軌道とA´[i] 軌道は全く同軌道を歩むことになり、独立性を保てなくなる。
【００６５】
そこで，新たにδA を次に示す（式ｐ）により与え、A[i]の初期のパターンA0[i] に依存させる。
δA[i]ΞA0[i](i=1 〜m )     (A0[i]  は初期の変位←鍵より求める)
0003953253.tif 000004
以上（式ｐ）
上記において、 fmod は既に説明した関数である。これより初期のA[i]パターンのオリジナリティーを保ちつつ変形できる。
【００６６】
つまり、A[i]、A´[i] は以下のように変位し、しだいに離れていく。
A[i]：１２３４  ２４６８  ３６９ｃ  ・・・
これは、δA[i]が１２３４であることによっている。
A´[i]:２４６８  ４８ａ０  ・・・・
これはδA´[i] が２４６８であることによっている。
【００６７】
しかし，δA が  １，３，５など，状態総数 (ここでは16) の因数でない場合、最大の１６の周期をもつが、例えばδA が１６の因数である２、４、８を指定した場合には、
２→４→  ６→  ８→ａ→  ｃ→  ｅ→  ０→  ２   (８の周期)
４→  ８→  ｃ→  ０→４                         (４の周期)
８→  ０→  ８                                   (２の周期)
のように、早いうちに元に戻り、周期にムラが生じる。
【００６８】
従って、（式ｇ）により示される設計関数（式ｇ）の状態総数（関数形の総数）には素数値を与えることとする。つまり、（式ｇ）により示される設計関数（式ｇ）の状態総数（関数形の総数）の最大値を全て鍵として割り当てずに、（式ｊ２）に示されるようにパラメータ配置範囲に余裕を持たせておき、例えば、変調数ｍが１６より上の素数を用い、関数の最大可変周期を変調数ｍが１７である場合とする。尚、この拡張領域は、直接鍵で指定することは不可能とする。
【００６９】
従って、
要請：パラメータの状態総数は素数を起用                （文ｑ）
という要請を満たすように（式ｇ）により示される設計関数の状態総数（関数形の総数）を採用する。斯して、素数はそれ以下の数に因数をもたないために、全てのA[i]が１６の周期をもつこととなる。図１５に、A[1]とδA[i]による上記の例を示した。このように、関数の可変手法は（式ｐ）に示した如く極めて単純である。これは、カオスのパラメータ及び初期値の推定困難性という初期条件敏感性を利用した結果である。つまり、カオスによれば、単純な関数を可変する手法を推測することが困難となるのである。これにより最小限の計算ステップの増加で処理が可能となる利点を有する。
【００７０】
これよりベクトルA に関する１６階調、つまり全て１６の周期（１７番目は使わない）を持つベクトルA を得ることができ、効率よくパラメータ配置範囲内を走査できるようになる。上記では例として１次元パラメータで考えたが、実際に（式ｇ）では可変パラメータは(p,h1,rr1,h2,rr2という) ５つが存在する。従って個々のパラメータについて上記をあてはめる。
【００７１】
より具体的には、（式ｉ１）〜（式ｉ４）より、２×Δｗ＝２12程度としたとき、パラメータ(p,h1,rr1,h2,rr2) のそれぞれ個々の状態総数は２×Δｗ＝２12個ということである。２12＝4096以上の素数は順に4099,4111,4127,4129,4133であり、上述（文ｑ）に示された「パラメータ状態総数は素数であること」という要請に従って、上記各パラメータを
ｐ Max =4099
h1 Max =4111
rr1  Max =4127
h2 Max=4129
rr2  Max=4133
以上    （式ｒ）
のように確保する。
【００７２】
これら組み合わせより、初期変調（鍵）のオリジナリティーを保ちつつ莫大周期の乱数列を確保できる。（式ｒ）の場合には、概算でｐ Max ×h1 Max ×  rr1  Max ×h2 Max ×rr2  Max ×ｍが1.18E+18という長周期を確保できることになる。
【００７３】
ところで、３２−bit 演算の場合には、写像関数はステップ毎に16-bitのカオス乱数（ノイズ）ｘを生成する。
xadd＝fred(x) =x & 255   (& はビットごとのAND 演算)       （式ｓ）
ｄ= ｃ(XOR)xadd      (ｃ：平文，ｄ：暗号文)               （式ｔ）
のように下位8-bit(1byte)を抽出し、平文１byteとXOR （排他的論理和）を取り暗号文とする。暗号ノイズxaddは，元のカオス信号から上位8-bit の情報が落ちているため、平文、暗号文のペアからでも，正しいカオス信号は得られない。
【００７４】
上記の [具体事例１] において説明した処理を盛り込んで、図２に示した暗号化のフローチャート及び図１４に示した復号化のフローチャートを変更すると、それぞれ図１６と図１７に示されるようになる。図２、図１４と異なる部分を説明する。まず、ステップＳ１−Ａ（Ｓ２１−Ａ）では、鍵よりｘの初期値及びA[i]の初期関数パターンを決定するのであるが、ここで決定した初期関数パターンの各パラメータの値を、後のステップＳ１０−Ａ（Ｓ３０−Ａ）におけるfmodによる計算のために、p[i],h1[i],rr1[i],h2[i],rr2[i]として保持する。
【００７５】
次に、ステップＳ２−Ａ（Ｓ２２−Ａ）では、ｉを１としｘを初期値とし（式ｇ）に適用して初期関数を生成し、後のステップＳ１０−Ａ（Ｓ３０−Ａ）におけるfmodによる計算のために、上記ステップＳ１−Ａ（Ｓ２１−Ａ）で求めたパラメータ値p[i],h1[i],rr1[i],h2[i],rr2[i]を、δp[i], δh1[i],δrr1[i], δh2[i],δrr2[i]として保持する。
【００７６】
そして、次の関数パターン生成するステップＳ１０−Ａ（Ｓ３０−Ａ）においては、各パラメータ状態数を素数として（式ｒ）に示されるように確保し、（式ｐ）による計算を行ってパラメータを得て、これを用いて次の関数パターンを生成する。
【００７７】
[具体事例２]
この具体事例２では、左右の関数可変化方式に、それぞれ独立した可変方式を与える。左側関数については［具体事例１］と同様に与える。一方、右側は左側と関連性なしにステップ毎に一様なδright の変位を与える。従って、（式ｇ）、（式ｋ）のパラメータ(p,h1,rr1,h2,rr2) を次に示すように左右側の関数で分ける。
左側関数:f left(x,p,h1[ ],rr1[ ])=f left(x,A[ ])，また、
A[ ]=(p,h1[ ],rr1[ ]) ←鍵より求める。
右側関数:f right(x,p,h2,rr2)= f right(x,B), また、
B=(p,h2,rr2)←左側とは独立。
係る手法によって左側関数の初期パターンA[i]のｉ（１〜m ）に全て同じ値が入った場合、つまり、鍵で同じ値を指定された場合にあっても、単調化、または、不意の周期点発生等を避け、積極的に軌道を交叉、撹乱させる効果がある。
【００７８】
右側関数のδright=δB の与え方としては、素数かつ右側の各パラメータ状態総数の因数でない値を与えることとする。これより右側関数の取りうる関数変調領域全体を効率的に走査できる。
【００７９】
［具体事例２］での関数設計例を以下に示す。
＜１＞（式ｇ）におけるパラメータ（p,h1[ ],rr1[ ],h2,rr2[ ]）
ｐ＝２15固定
h1[ ],rr1[ ]（左側関数パラメータ：初期変調）←鍵より指定
h2,rr2（右側関数パラメータ）←左側とは独立
＜２＞関数の状態総数Δｗ／２＝４０９６(12-bit)を想定
h1 max=4099（素数）            範囲:32768+32768*3/5〜上の4099個分
rr1  max=4111（素数）          範囲:32768+32768*1/5〜上の4111個分
h2 max=8192（左側とは独立）    範囲:32768+32768*3/5〜上の8192個分
rr2  max=8192（左側とは独立）  範囲:32768+32768*1/5〜上の8192個分
＜３＞左側関数パラメータA[ ]は１１変調周期とし、各初期変位を次の通りにする。
h1[i](i=1 〜11）δh1[i]=h10 [i] （初期のh1の意味）
rr1[i](i=1〜11) δrr1[i]=rr10 [i] （初期のrr1 の意味）
＜４＞右側関数パラメータB[ ]は、ここでは、h2=h1[1],rr2=rr1[1] とし、δh2＝１7 （素数），δrr2=19（素数）とした。
【００８０】
以上のように設計した場合における暗号化ノイズ（（式ｓ）、（式ｔ）におけるxadd）のデータを図１８、図１９に示す。両者は、鍵値（初期変位パターン）を１だけずらした場合（h1[10]成分のみ、わずかに１だけずらしたものを使用した場合）の例である。
【００８１】
次に、上記［具体事例２］における関数設計例の評価を行う。上記［具体事例２］での関数設計例の場合、h1 max=4099、rr1  max=4111、初期の変調：１１変調／周期より、
(4099×4111) 11>>(4096×4096) 11=(２12×２12）11＝２264     （式ｕ）
なので、256-bit 以上の暗号化パターンをもつ。また、最低限保証できる乱数周期は、
4099×4111×10=168,509,890= 約160MByteである。              （式ｖ）
ここでは、（式ｇ）中の２つのパラメータ（h1[ ],rr1[ ]）を用いたが、更にｐを可変することが可能である。
【００８２】
ｐを可変する場合には、
(p Max ×h1 Max ×rr1  Max ）m の暗号化パターン        （式ｗ）
および
p Max ×h1 Max ×rr1  Max ×m の乱数周期              （式ｘ）
をもつ。
【００８３】
具体的には、
p Max =4099(＞２12)
h1 Max =4111(＞２12)
rr1  Max =4127(＞２12)
m＝１０変調周期
の場合、
（式ｗ）の(p Max ×h1 Max ×rr1  Max ）m が（２36）10となることから、360-bit を超える暗号化パターンとなる。
また、（式ｘ）の p Max ×h1 Max ×rr1  Max ×m が640.0×109 となるから、約640GByteの乱数周期となる。
【００８４】
そして、ｍ＝２９変調周期で1024-bitを超える暗号化パターン、ｍ＝１１４変調周期で4096-bitを超える暗号化パターンとなり、本方式は初期の大きな変調パターンｍを与えることで、暗号化を進める場合に莫大な暗号化パターンを発生できるポテンシャルを持つと共に、パラメータの最大変動範囲（関数状態総数）内を効率よく変化させることで、同時に長周期化を図り得る構成を有している。また、本アルゴリズムの構成上、ｍの値を多くとっても（鍵長を増加させても）処理の低速化を生じることはない。
【００８５】
［具体事例２］による暗号化のフローチャートを図２０に示し、復号化のフローチャートを図２１に示した。ここでは簡略表記のため、左側関数について具体事例１と同様に５つのパラメータをＡ［ ]とべクトル表記した。また、右側関数のパラメータをＢとべクトル表記した。左右関数とも、（式ｇ）及び（式ｋ）に基づいている。
【００８６】
さて、図２０の処理が起動されると、鍵よりｘの初期値及びA[i]の初期関数パターンを決定する（Ｓ４１）。ここで［具体事例２］についての鍵設計例を示す。
［具体事例２］の設計例において（式ｇ）の写像関数形は、
f(x,p,h1[ ],rr1[ ], h2,rr2）であり、鍵は
ｘの初期値                （12-bit段階(4096)）
h1[ ] 初期可変パターン    （12-bit段階）
rr1[ ]初期可変パターン    （12-bit段階）
を与える。ここで（文ｑ）の条件より、h1[ ] は4099個、rr1[ ]は4111個の関数形をもつが、鍵で指定できる最大値は12-bit（4096個）である。
例えば、ｎ変調周期を考える場合、
x,h1[1],rr1[1],h1[2],rr2[2],...,h1[n],rr1[n]            （式ｙ）
例示すると、3914,1021,534,1313,3127,...,4001,2731 の如き順に12-bit段階の数値を入れていく。これを例えば０〜９、ａ〜ｚ、Ａ〜Ｚ、／、＋の６４段階からなる文字列より鍵を構成し、（式ｙ）のような初期値／可変パターンへの数値変換操作を行う。その際に、既に説明した別途用意されたメモリテーブルからテーブル変換を行うとよい。
【００８７】
次に、図２０の処理においては、ｉを１とすると共にｘを初期値とし（式ｇ）に適用して初期関数を生成すると共に、δA[i]と右側関数のためＢを用意する（Ｓ４２）。さらに、平文の１バイトを読み込みレジスタｃへセットし（Ｓ４３）、ｘの範囲が２15より小さいか否かを検出し（Ｓ４４）、ｘの範囲が２15より小さい場合には、ステップＳ４２にて生成した（式ｇ）の初期関数の内の左関数を用いてカオスノイズ値ｘの算出を行い（Ｓ４５）、更に、A[i]におけるｉがA[i]の周期ｍより小さいかを検出し（Ｓ４６）、小さい場合には、ｉを１インクリメントして写像関数を変調し（Ｓ４７）、算出したカオスノイズ値ｘの下位１バイトを得て情報落ち１バイトノイズ（ｘａｄｄ）を生成する（Ｓ４８）。
【００８８】
次に、レジスタｃにセットした平文の１バイトと、情報落ち１バイトノイズ（ｘａｄｄ）との排他的論理和演算を行って１バイトの暗号文を生成する（Ｓ４９）。更に、暗号化すべき平文が終了したか否かを検出する（Ｓ５０）。ここで未終了であることが検出されると、ステップＳ４３へ戻って平文の次の１バイトを読み出してレジスタｃへセットし、以下ステップＳ４４〜Ｓ５０を繰り返す。このように動作を継続するうちに、A[i]におけるｉがA[i]の周期ｍ以上となり、ステップＳ４６においてＮＯへ分岐して、（式ｏ´)であるA[i]=g(A[i])より、次の関数パターンを生成する（Ｓ５１）。そして、ｉを１として（Ｓ５２）、ステップＳ４８へ進み以降の動作を続ける。
【００８９】
また、上記ステップＳ４４においてｘの範囲が２15以上であることが検出された場合には、ステップＳ４２にて生成した（式ｇ）の初期関数の内の右側関数を用いてカオスノイズ値ｘの算出を行い（Ｓ５３）、ＢにδＢ（既述のδright)の変位を与えて（Ｓ５４）ステップＳ４８へ進む。このような処理を継続することにより平文の全てを暗号化してステップＳ５０にてＹＥＳへ分岐して処理を終了する。
【００９０】
また、図２１に示す復号化の処理が起動されると、鍵よりｘの初期値及びA[i]の初期関数パターンを決定する（Ｓ６１）。この場合、鍵は暗号化の際の鍵が選択される。鍵発生の構成は図２０のステップＳ４１にて説明の構成と同様である。次に、ｉを１とすると共にｘを初期値とし（式ｇ）に適用して初期関数を生成すると共に、δA[i]と右側関数のためＢを用意する（Ｓ６２）。さらに、暗号文の１バイトを読み込みレジスタｄへセットし（Ｓ６３）、ｘの範囲が２15より小さいか否かを検出し（Ｓ６４）、ｘの範囲が２15より小さい場合には、ステップＳ６２にて生成した（式ｇ）の初期関数の内の左側関数を用いてカオスノイズ値ｘの算出を行い（Ｓ６５）、更に、A[i]におけるｉがA[i]の周期ｍより小さいかを検出し（Ｓ６６）、小さい場合には、ｉを１インクリメントして写像関数を変調し（Ｓ６７）、算出したカオスノイズ値ｘの下位１バイトを得て情報落ち１バイトノイズ（ｘａｄｄ）を生成する（Ｓ６８）。
【００９１】
次に、レジスタｄにセットした平文の１バイトと、情報落ち１バイトノイズ（ｘａｄｄ）との排他的論理和演算を行って１バイトの暗号文を復号化する（Ｓ６９）。更に、復号化すべき暗号文が終了したか否かを検出する（Ｓ７０）。ここで未終了であることが検出されると、ステップＳ６３へ戻って暗号文の次の１バイトを読み出してレジスタｄへセットし、以下ステップＳ６４〜Ｓ７０を繰り返す。このように動作を継続するうちに、A[i]におけるｉがA[i]の周期ｍ以上となり、ステップＳ６６においてＮＯへ分岐して、（式ｏ´)であるA[i]=g(A[i])より、次の関数パターンを生成する（Ｓ７１）。そして、ｉを１として（Ｓ７２）、ステップＳ４８へ進み以降の動作を続ける。
【００９２】
また、上記ステップＳ６４においてｘの範囲が２15以上であることが検出された場合には、ステップＳ６２にて生成した（式ｇ）の初期関数の内の右側関数を用いてカオスノイズ値ｘの算出を行い（Ｓ７３）、ＢにδＢ（既述のδright)の変位を与えて（Ｓ７４）ステップＳ４８へ進む。このような処理を継続することにより暗号文の全てを復号化してステップＳ７０にてＹＥＳへ分岐して処理を終了する。
【００９３】
【発明の効果】
以上説明した通り本発明によれば、発生されるカオスノイズのパターンに周期性が表れにくく、また、隣接軌道が縮退を起こすことのない関数を設計することにより、連続的なカオス領域が確保でき写像関数の周期毎の変更が可能となり、適切な暗号化を行うことができる。
【００９４】
また、本発明によれば一次微分値が１以上である関数を写像関数として用いるので、隣接軌道が縮退を起こさない写像関数によりカオスノイズが得られ、適切な暗号化を行うことができる。
【図面の簡単な説明】
【図１】本発明に係る暗号生成装置のブロック図。
【図２】本発明に係る暗号生成装置が採用する基本アルゴリズムを示すフローチャート。
【図３】カオスの初期条件敏感性を説明するための図であり、初期のごく微少のずれから出発した２つの軌道差を示した図。
【図４】ロジスティック写像の反復の幾何学的構造を説明するための図。
【図５】ロジスティック写像の隣接軌道縮退領域を示す図。
【図６】隣接軌道が縮退を起こさないような写像関数の例を示した図。
【図７】本発明による設計関数例における整数演算型関数での(p,h）の取りうる範囲を示す図。
【図８】関数設計例における整数演算型関数での分岐図。
【図９】ロジスティック写像関数（整数演算）の分岐図。
【図１０】関数設計例における整数演算型関数でのｒｒ分岐図。
【図１１】関数設計例における整数演算型関数のリアプノフ指数を示す図。
【図１２】ロジスティック写像関数（整数演算）のリアプノフ指数を示す図。
【図１３】本発明に係る暗号文の復号装置のブロック図。
【図１４】本発明に係る復号装置の基本アルゴリズムを示すフローチャート。
【図１５】本発明の暗号生成装置において用いられる関数のパラメータの状態数の時間遷移を示す図。
【図１６】具体事例１における暗号化のフローチャート。
【図１７】具体事例１における復号化のフローチャート。
【図１８】具体事例２の暗号化ノイズ発生例Ａを示す図。
【図１９】具体事例２の暗号化ノイズ発生例Ｂを示す図。
【図２０】具体事例２における暗号化のフローチャート。
【図２１】具体事例２における復号化のフローチャート。
【符号の説明】
１  カオスノイズ発生手段              ２  暗号生成手段
３  次関数決定手段                    ４  復号手段
１１  鍵発生部                        １２  初期関数生成部
１３  カオスノイズ生成部              ２１  平文分割部
２２  暗号文生成部                    ３１  同期検出部
３２  関数変更制御部                  ４１  暗号分割部
４２  復号部
【図１】
0003953253.tif 000005
【図２】
0003953253.tif 000006
【図３】
0003953253.tif 000007
【図４】
0003953253.tif 000008
【図５】
0003953253.tif 000009
【図６】
0003953253.tif 000010
【図７】
0003953253.tif 000011
【図８】
0003953253.tif 000012
【図９】
0003953253.tif 000013
【図１０】
0003953253.tif 000014
【図１１】
0003953253.tif 000015
【図１２】
0003953253.tif 000016
【図１３】
0003953253.tif 000017
【図１４】
0003953253.tif 000018
【図１５】
0003953253.tif 000019
【図１６】
0003953253.tif 000020
【図１７】
0003953253.tif 000021
【図１８】
0003953253.tif 000022
【図１９】
0003953253.tif 000023
【図２０】
0003953253.tif 000024
【図２１】
0003953253.tif 000025