(57)【要約】正のリヤプノフ指数もしくはカオス的挙動を示す数学的システムにおいて計算を実行する方法である。本方法はシステムのパラメータを変更するステップを有する。例えば、逐次暗号アルゴリズムの擬似乱数生成器や、ブロック暗号システムや、ＨＡＳＨ／ＭＡＣシステム、といった暗号法に用いることで、予測不可能性が向上される。類似のシステムにおいて、計算方法は、２つの数の乗算を行い、乗算より生じた数の、少なくとも１つの（最）上位ビットを操作して出力を作成するステップを有する。２つの数による除算により導出された値を用い、出力を導いてもよい。数の系列を生成するシステムでは、各計算ステップにおけるキャリー値を各カウンタに加算することにより、カウンタの配列を更新する。固定小数点演算を用いてもよい。識別値の決定法、ならびに、データのセットに対する同時的な暗号化、および／または、復号化の方法を開示する。
2005529364.tif 000002
【特許請求の範囲】
【請求項１】
正のリヤプノフ指数を示す数学的システムにおいて反復的に計算を実行する方法であって、
特定数の計算の後、少なくとも１つの、前記数学的システムのパラメータを変更するステップを有することを特徴とする方法。
【請求項２】
少なくとも１つの、前記数学的システムの変数を固定小数点数として表すことを特徴とする、請求項１に記載の方法。
【請求項３】
さらに、
−  前記数学的システムを離散項で表すステップ、
−  前記計算に前記少なくとも１つの固定小数点数として表された変数を含むようにして前記計算を実行するステップ、
−  前記計算より、生じる数を求めるステップであって、
ａ．少なくとも、前記数学的システムの解の一部、および、
ｂ．前記数学的システムの数値解法に含まれる別の計算で用いることができる数、
のうち、少なくとも１つを表している、生じる数を求めるステップ、を有することを特徴とする、請求項２に記載の方法。
【請求項４】
前記数学的システムは、少なくとも１つの非線形写像を有することを特徴とする、請求項１ないし３のいずれか１つに記載の方法。
【請求項５】
前記計算において、前記少なくとも１つのパラメータは、所定の間隔で反復的に変更されることを特徴とする、請求項１ないし４のいずれか１つに記載の方法。
【請求項６】
前記計算は、前記数学的システムにおいてイタレーションを実行するステップを有することを特徴とする、請求項１ないし５のいずれか１つに記載の方法。
【請求項７】
前記少なくとも１つのパラメータは、前記数学的システムに非従属的に変化するカウンタによって表されることを特徴とする、請求項１ないし６のいずれか１つに記載の方法。
【請求項８】
前記カウンタは、前記数学的システムにおける各イタレーションにおいて増加されることを特徴とする、請求項７に記載の方法。
【請求項９】
前記カウンタに対して最大値が定められ、
前記カウンタが前記最大値に達すると前記カウンタは最小値にリセットするステップを有し、よって、前記カウンタは、特定の周期で変化することを特徴とする、請求項７または８に記載の方法。
【請求項１０】
複数のカウンタを含むカウンタのセットを用いることを特徴とする、請求項７ないし９のいずれか１つに記載の方法。
【請求項１１】
前記カウンタのうち、第１のカウンタの前記変化は、前記カウンタのうち、第２のカウンタの前記変化に従属し、前記第１カウンタの前記周期は、前記第２カウンタの前記周期と異なっていることを特徴とする、請求項１０に記載の方法。
【請求項１２】
前記カウンタの個々の前記変化は、前記カウンタのうち、少なくとも１つの他のカウンタの前記変化に従属することによって、前記カウンタの周期が、個々のカウンタが他のカウンタの前記変化に従属しない場合の前記周期よりも長くなっていることを特徴とする、請求項１０または１１に記載の方法。
【請求項１３】
前記１つまたは複数のカウンタは、線形的に増加されることを特徴とする、請求項１ないし１２のいずれか１つに記載の方法。
【請求項１４】
請求項１ないし１３のいずれか１つに記載の方法により数学的演算を実行するステップを有することを特徴とする擬似乱数生成の方法。
【請求項１５】
請求項１ないし１３のいずれか１つに記載の方法により数学的演算を実行するステップを有することを特徴とする識別値生成の方法。
【請求項１６】
請求項１ないし１３のいずれか１つに記載の方法により数学的演算を実行するステップを有することを特徴とするデータの暗号化および／または復号化の方法。
【請求項１７】
暗号化および／または復号化に、請求項１４に記載の方法により擬似乱数を生成するステップが含まれることを特徴とする、請求項１５に記載の方法。
【請求項１８】
暗号化システムにおける第１のデータのセットを操作する方法であって、
前記第１のデータのセットは、それぞれ第１のビット・サイズＡおよび第２のビット・サイズＢを有する第１の数および第２の数を含み、
−  前記第１数と前記第２数を乗算して第３のビット・サイズＡ＋Ｂを有する第３の数を求めるステップであって、
前記第３数は、最上位Ｐビットおよび最下位Ｑビットで構成され、ここでは、Ａ＋Ｂ＝Ｐ＋Ｑであり、かつ、Ｑは、前記第１ビット・サイズＡと第２ビット・サイズＢのうち大なるサイズに等しいＱ＝ｍａｘ（Ａ，Ｂ）、第３の数を求めるステップ、
−  前記第３数を操作して前記第３数の前記最上位Ｐビットのうちの少なくとも１つのビットの関数である第４の数を求めるステップ、
−  前記第４数を用いて前記暗号化システムの出力を導くステップ、を有することを特徴とする方法。
【請求項１９】
前記第１数は、前記第２数と等しいことを特徴とする、請求項１８に記載の方法。
【請求項２０】
前記第１および第２数の少なくとも１つは、数学的システムの少なくとも１つの状態変数を表しており、
前記状態変数は、前記第４数の関数として更新されることを特徴とする、請求項１８または１９に記載の方法。
【請求項２１】
前記状態変数は、前記第４数のパーミュテーションの関数として更新されることを特徴とする、請求項２０に記載の方法。
【請求項２２】
前記パーミュテーションは、前記第４数の前記ビットのビット位置の規則的交代を含んでいることを特徴とする、請求項２１に記載の方法。
【請求項２３】
−  前記乗算ステップは、複数回実行され、
各乗算は、複数の状態変数の１つを表す数、または、前記複数の状態変数の１つの関数である数について実行され、
よって、前記乗算ステップが、複数の第３数をもたらし、
−  前記操作ステップは、複数の第４数を含む配列をもたらし、
−  少なくとも１つの状態変数は、少なくとも２つの前記第４数の関数として更新されることを特徴とする、請求項１８ないし２２のいずれか１つに記載の方法。
【請求項２４】
前記第１および第２数の少なくとも１つは、可変のパラメータ値が加えられる状態変数Ｘｉであることを特徴とする、請求項１８ないし２３のいずれか１つに記載の方法。
【請求項２５】
前記パラメータ値は、カウンタＣｉであることを特徴とする、請求項２４に記載の方法。
【請求項２６】
前記乗算ステップは、（Ｘｉ＋Ｃｉ）を二乗するステップを有し、
ここで、Ｘｉは、状態変数もしくは状態変数の配列を意味し、かつ、Ｃｉは、前記カウンタもしくは前記カウンタの配列を意味することを特徴とする、請求項２５に記載の方法。
【請求項２７】
前記少なくとも１つのパラメータは、前記計算において所定の間隔で繰り返し変化することを特徴とする、請求項２４ないし２６のいずれか１つに記載の方法。
【請求項２８】
カウンタＣｉは、前記第４数、または、前記第４数の関数である数に加えられ、更新された状態変数Ｘｉ＋１がもたらされることを特徴とする、請求項１８ないし２７のいずれか１つに記載の方法。
【請求項２９】
前記乗算ステップは、ｘｋを計算するステップを有し、ｘは前記第１数であり、ｋは指数であることを特徴とする、請求項１８ないし２８のいずれか１つに記載の方法。
【請求項３０】
ｋは、整数であることを特徴とする、請求項２９に記載の方法。
【請求項３１】
前記操作ステップは、前記第３数の、前記最上位ビットの１ビットおよび前記最下位ビットの１ビットについて実行される論理演算を少なくとも１つ含んでいることを特徴とする、請求項１８ないし３０のいずれか１つに記載の方法。
【請求項３２】
前記論理演算は、少なくとも１つの排他的論理和演算を含んでいることを特徴とする、請求項３１に記載の方法。
【請求項３３】
Ｐ＝Ｑであり、
前記少なくとも１つの排他的論理和演算は、Ｐ個の排他的論理和演算を有し、ビット・サイズＰの結果をもたらし、各排他的論理和演算は、前記第３数の前記最上位ビットのうちの１ビットと、前記第３数の前記最下位ビットのうちの１ビットについて実行されることを特徴とする、請求項３２に記載の方法。
【請求項３４】
前記操作ステップは、前記最上位ビットのうちの少なくとも１ビットと、前記最下位ビットのうちの少なくとも１ビットについて実行される算術演算を少なくとも１つ含んでいることを特徴とする、請求項１８ないし３３のいずれか１つに記載の方法。
【請求項３５】
前記乗算ステップは、複数のビット・サイズＡ＋Ｂの数をもたらす複数の乗算関数を有し、かつ、
前記乗算ステップは、前記複数の数のうち、第１数の前記ビットの少なくとも１つと、前記複数の数のうち、第２数の前記ビットの少なくとも１つと組み合わせるステップを有することを特徴とする、請求項１８ないし３４のいずれか１つに記載の方法。
【請求項３６】
前記複数の乗算関数は、少なくとも１つの二乗演算を有し、かつ、
前記操作ステップは、前記複数の数のうち、第１数の前記最上位Ｐビットのうちの少なくとも１ビットと、前記複数の数のうち、第２数の前記最下位Ｑビットのうちの少なくとも１ビットと組み合わせるステップを有することを特徴とする、請求項３５に記載の方法。
【請求項３７】
前記乗算ステップは、少なくとも１つの状態変数が逐次代入される数学的システムにおいて実行されることを特徴とする、請求項１８ないし３６のいずれか１つに記載の方法。
【請求項３８】
前記乗算ステップは、少なくとも２つの状態変数に関する逐次代入システムにおいて実行されることを特徴とする、請求項１８ないし３７のいずれか１つに記載の方法。
【請求項３９】
各計算シーケンスにおいて、前記少なくとも２つの状態変数にアサインされている値は、前記少なくとも２つの状態変数、および／または、前記少なくとも２つの状態変数以外の状態変数のうちの少なくとも１つの値の関数として更新されることを特徴とする、請求項３８に記載の方法。
【請求項４０】
前記第４数を用いて、前記暗号化システムの前記出力として擬似乱数を生成、または、更新することを特徴とする、請求項１８ないし３９のいずれか１つに記載の方法。
【請求項４１】
前記第１および第２数の少なくとも１つは、暗号化または復号化されるデータの第２セットから導出され、かつ、
前記第４数を用いて、前記データの第２セットの暗号化された、または、復号化された表現を生成することを特徴とする、請求項１８ないし４０のいずれか１つに記載の方法。
【請求項４２】
前記第１および第２数の少なくとも１つは、データの第２セットから導出され、かつ、
前記第４数を用いて、前記データの第２セットを識別するための識別値を生成することを特徴とする、請求項１８ないし４１のいずれか１つに記載の方法。
【請求項４３】
前記第１および第２数の少なくとも１つは、暗号鍵から導出されることを特徴とする、請求項１８ないし４２のいずれか１つに記載の方法。
【請求項４４】
暗号化システムにおいて、データの第１セットを操作する方法であって、
前記データの第１セットは、第１および第２数を含み、
−  前記第１数を前記第２数で除算し、商と余りを求めるステップ、
−  数学的演算により、前記商と前記余りを組み合わせて、生じる数を求めるステップ、
−  前記生じる数を用いて前記暗号化システムの出力を導出するステップ、を有することを特徴とする方法。
【請求項４５】
計算ステップを反復的に実行する暗号化システムにおいて、周期的な数のシーケンスを生成する方法であって、
各計算ステップｉにおいて、カウンタの配列を更新するステップを有し、前記カウンタは、論理、および／または、算術演算によって更新され、各計算ステップにおいて、キャリー値が、前記配列に含まれる各カウンタに加えられ、前記配列、ｃ０、に含まれる前記第１のカウンタに加えられるキャリーは、
−  カウンタの前記配列の値に関する、選択された計算と、
−  以前の計算ステップにおけるカウンタ値の関数である値と、
の少なくとも１つから求められることを特徴とする方法。
【請求項４６】
計算ステップが反復的に実行される暗号化システムにおいて、周期的な数のシーケンスを生成する方法であって、
各計算ステップｉにおいて、カウンタｃｊ，ｉの配列Ｃｉを更新するステップを有し、
前記カウンタは、
【数１】
2005529364.tif 000057
で更新され、
ここで、ｃｊ，ｉ＋１は、ステップｉ＋１において配列Ｃの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１であり、ｎは、前記配列Ｃの次元を意味し、
ｃｊ，ｉは、ステップｉにおいて配列Ｃの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１であり、
ａｊは、配列Ａの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１であり、
ｊ＞０に対し：ｂｊ−１，ｉ＋１は、前記ｃｊ−１，ｉ＋１に関する計算より生じたキャリー値であり、
Ｎｊは定数であり、ｊ＝０，．．．，ｎ−１であり、
ｉ＝０に対し：ｄｉ＝ｄ０は、初期値であり、
ｉ＞０に対し：ｄｉは、カウンタの前記配列Ｃｉの関数、および／または、Ｃｉの値に関する、選択された計算より求めたキャリー値であることを特徴とする方法。
【請求項４７】
各ａｊの値は、定数であることを特徴とする、請求項４６に記載の方法。
【請求項４８】
ｎ＝１であり、よって、
−  前記配列Ｃは、１つの値ｃ０，ｉを含み、
−  前記配列Ａは、１つの値ａ０を含んでいることを特徴とする、請求項４６または４７に記載の方法。
【請求項４９】
ｉ＞０なるｉに対し、ｄｉは、前記ｃｊ−１，ｉに関する計算より生じるキャリー値であることを特徴とする、請求項４６ないし４８のいずれか１つに記載の方法。
【請求項５０】
ｄｉは、前記ｃｊ−１，ｉ＋１に関する計算より生じるキャリー値であることを特徴とする、請求項４６ないし４８のいずれか１つに記載の方法。
【請求項５１】
前記暗号化システムにおいて実行される前記計算ステップは、逐次代入的手続きを有し、前記逐次代入的手続きにおいて状態変数の配列Ｘは、反復的に逐次代入され、よって、計算ステップｉ＋１における前記状態変数の配列Ｘのある位置にアサインされる少なくとも１つの値は、
−  計算ステップｉにおける前記状態変数の配列Ｘのある位置にアサインされた少なくとも１つの値、および、
−  計算ステップｉにおける前記カウンタの配列Ｃのある位置にアサインされた少なくとも１つの値、の関数であることを特徴とする、請求項４６ないし５０のいずれか１つに記載の方法。
【請求項５２】
前記状態変数の配列Ｘは、単一の変数を含んでいることを特徴とする、請求項５１に記載の方法。
【請求項５３】
計算ステップｉ＋１における前記状態変数の配列Ｘは、Ｘｉ＋Ｃｉの関数、Ｘｉ＋１＝ｆ（Ｘｉ＋Ｃｉ）であることを特徴とする、請求項５１または５２に記載の方法。
【請求項５４】
積（Ｎ０・Ｎ１・．．．・Ｎｎ−１）−１と、Ａについて連結された値とは、互いに素であることを特徴とする、請求項４６ないし５３のいずれか１つに記載の方法。
【請求項５５】
逐次代入的手続きとして計算ステップが実行される暗号化システムの出力を生成する方法であって、
状態変数の配列Ｘは、反復的に逐次代入されて、よって、
イタレーション・ステップｉ＋１における前記状態変数の配列Ｘは、
−  イタレーションｉにおける前記状態変数の配列Ｘの、ある位置にアサインされた少なくとも１つの値、および、
−  イタレーションｉにおける前記カウンタの配列Ｃの、ある位置にアサインされた少なくとも１つの値、の関数であり、
前記カウンタの配列は、各イタレーションにおいて、
【数２】
2005529364.tif 000058
で更新され、
ここで、ｃｊ，ｉ＋１は、ステップｉ＋１において配列Ｃの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１であり、ｎは、前記配列Ｃの次元を意味し、
ｃｊ，ｉは、ステップｉにおいて配列Ｃの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１であり、
ａｊは、配列Ａの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１であり、
ｊ＞０に対し：ｂｊ−１，ｉ＋１は、前記ｃｊ−１，ｉ＋１に関する計算より生じたキャリー値であり、
Ｎｊは定数であり、ｊ＝０，．．．，ｎ−１であり、
ｉ＝０に対し：ｄｉ＝ｄ０は、初期値であり、
ｉ＞０に対し：ｄｉは、カウンタの前記配列Ｃｉの関数、および／または、Ｃｉの値に関する選択された計算より求めたキャリー値であり、
各イタレーションは、
−  第１のビット・サイズＡの第１数と、第２のビット・サイズＢの第２数を乗算して第３のビット・サイズＡ＋Ｂの第３数を求めるステップであって、
前記第１および第２数の少なくとも１つは、イタレーションｉにおいて前記状態変数の配列Ｘのある位置にアサインされた少なくとも１つの値に等しいか、もしくは、イタレーションｉにおいて前記状態変数の配列Ｘのある位置にアサインされた少なくとも１つの値の関数であり、
前記第３数は、最上位Ｐビットおよび最下位Ｑビットで構成され、ここでは、Ａ＋Ｂ＝Ｐ＋Ｑであり、かつ、
Ｑは、前記第１ビット・サイズＡと第２ビット・サイズＢのうち大なるサイズ、Ｑ＝ｍａｘ（Ａ，Ｂ）、に等しい、ステップ、
−  前記第３数を操作し、前記第３数の前記最上位Ｐビットの少なくとも１ビットの関数である第４数を求めるステップ、
−  前記第４数を用いて前記暗号化システムの前記出力の導出、および／または、前記状態変数の配列Ｘの位置へ新しい値をアサインするステップ、を有することを特徴とする方法。
【請求項５６】
データのセットを識別し、ならびに、前記データのセットを同時的に暗号化および／または復号化するための識別値を決定する方法であって、
正のリヤプノフ指数を示す数学的システムにおいて数値計算を実行するステップを有することを特徴とする方法。
【請求項５７】
さらに、
−  前記数学的システムを離散項で表すステップ、
−  前記数学的システムの少なくとも１つの変数を、固定小数点数として表すステップ、
−  前記計算が、前記、固定小数点数として表された少なくとも１つの変数を含むようにして前記計算を実行するステップ、
−  前記計算より、生じる数を求めるステップであって、
ａ．少なくとも、前記数学的システムの解の一部、および、
ｂ．前記数学的システムの数値解法に含まれる別の計算で用いることができる数、
のうち、少なくとも１つを表している、生じる数を求めるステップ、を有することを特徴とする、請求項５６に記載の方法。
【請求項５８】
さらに、前記数学的システムにおいて、イタレーションとして数学的計算を反復的に実行するステップを有し、
前記データのセットの様々な部分、または、前記データの様々な部分の変形体を、前記計算に対する入力として用いることができることを特徴とする、請求項５６または５７に記載の方法。
【請求項５９】
さらに、
−  前記数学的システムにおいて、イタレーションとして数学的計算を反復的に実行するステップであって、ここでは、前記計算に対する入力として前記データのセットの様々な部分、または、前記データのセットの様々な部分の変形体を利用でき、
以下に記す各計算、または、幾つかの計算を行うステップ、
−  前記計算より生じる数を抽出するステップであって、前記生じる数は、
ａ．少なくとも、前記数学的システムに対する解の一部、および、
ｂ．前記数学的システムに対する数値解法に含まれる、別の計算で利用できる数、のうちの少なくとも１つを表している、生じる数を抽出するステップ、
−  前記生じる数に基づく前記識別値の更新値を決定するステップであって、ここでは、前記データのセットの様々な部分、または、前記データのセットの様々な部分の変形体を、前記決定ステップにおいて入力として利用できる、ステップ、
−  前記生じる数に基づいて前記データのセットの特定の部分を暗号化、および／または、復号化するステップ、を有し、
前記データのセット全体を暗号化、および／または、復号化するのに必要なイタレーションが実行されることを特徴とする、請求項５６ないし５８のいずれか１つに記載の方法。
【請求項６０】
さらに、
−  前記数学的システムを離散項で表すステップ、
−  前記数学的システムの少なくとも１つの変数を、固定小数点数として表すステップ、
−  前記計算が、前記、固定小数点数として表された少なくとも１つの変数を含む用にして、前記計算を実行するステップ、を有することを特徴とする、請求項５６ないし５９のいずれか１つに記載の方法。
【請求項６１】
前記識別値は、次の、前記データのセット全体の暗号化および／または復号化でさらに変形されることを特徴とする、請求項５６ないし６０のいずれか１つに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、擬似乱数の予測不可能性向上の点に関する。この擬似乱数は、少なくとも１つの関数、特に非線形関数を含んだ数学的システムにおいて数値計算により生成される。この数学的システムは、カオス的挙動を示す、微分方程式を有する非線形系であってよい。本発明は、例えば電子デバイスにおける暗号化および復号化に有用である。
【背景技術】
【０００２】
暗号化なる語は一般に、データ変換に関連する科学および技術を包含する。このデータ変換は、データへの不正なアクセスを防ぎつつ、データの蓄積および送信を可能とすることを目的として実施される。暗号化によって、データは意図した受信者以外の者が理解できないようになる。技術的な進歩により大量のデータの安全な送信および蓄積を求められるようになり、従って、暗号化は、著作権の保護を含む知的財産の保護においてますます重要な役割を果たすようになっている。
【０００３】
暗号化および復号化アルゴリズムにおいて、特定のデータ変換はアルゴリズムに対する入力、所謂、鍵、に依存する。データの送信者と受信者が適切な鍵のセットを有する場合、送信者と受信者はデータを正しく暗号化および復号化できる。一方、暗号化されたデータにアクセスしようとする第三者は、暗号化されたデータの適切に復号化されたバージョンを見ることができない。なぜなら、彼女または彼は適切な鍵を所有していないからである。
【０００４】
一般に、暗号化されるデータのセットを「平文」または「元データ」と称し、それに対し、データのセットの暗号化されたバージョンを「暗号文」または「暗号化データ」と称する。
【０００５】
２種の対称暗号アルゴリズムがあり、それぞれ、所謂、「ブロック暗号」と、所謂、「逐次暗号」である。両者とも、対称鍵を用いる。つまりは、暗号化に用いられる鍵と復号化に用いられる鍵は、同一であるか、または、些細な関連性を有する。ブロック暗号は、元データのセットを所与のサイズの複数ブロック、例えば、１ブロックあたり６４ビット、に分割する暗号アルゴリズムである。各ブロックに対し、数学的および論理的演算が行われ、元データ全体は、通常、擬ランダム・データを含むブロックに変換される。正しい復号化鍵で復号化を実施すれば、暗号化に用いた数学的および論理的操作の逆演算によって復元可能である。
【０００６】
（同期式）逐次暗号においては、擬似乱数生成器が、鍵に基づいて擬似乱数列を生成する。この乱数列は、鍵系列と称される。算術的および／または論理的演算によって、鍵系列は元データのセットの複数のサブセットと混合(mix)される。データのサブセットの総和(sum)は、暗号化されるべき元データを定める。混合(mixing)の結果は、暗号化データである。暗号化データは、擬似乱数列を暗号化データから抽出する(extract)手続き(procedure)を繰り返し、元データ、つまり、復号化データにまで帰着されるようにして復号化される。
【０００７】
平文はしばしば、論理演算子を用いて鍵系列と混合される。ほとんどの場合、所謂、ＸＯＲ演算子を用いる。これは、「排他的論理和(exclusive or)」とも称される。この演算子は、記号、
【数１】
2005529364.tif 000003
として表記される。ＸＯＲは、２つの１ビットの引数より、１つの１ビットの演算結果を与える。全ての生じ得る結果を以下に示す。
【数２】
2005529364.tif 000004
平文と擬似乱数鍵系列にＸＯＲ演算子を適用することで、暗号文を得る。復号化に際して同じ鍵系列が生成され、今度はその鍵系列と暗号文にＸＯＲ演算子が適用され元の平文を得る。この、同じ鍵系列は、当初、暗号化のための鍵系列が基づいた鍵を用いることによってのみ生成可能である。
【０００８】
また、所謂、公開鍵システム(public key system)も開発されており、このシステムは一対の非対称鍵、つまり、公開鍵(public key)と秘密鍵(private key)に特徴がある。この２つの鍵は、異なる。このようなシステムにおいては、通常、公開鍵を用いて暗号化を行い、秘密鍵を用いて復号化を行う。秘密鍵と公開鍵は、ある方法により互いに対応付けされる。暗号化に用いた鍵を用いて復号化を行うことはできず、その逆も同様である。従って、元データの取得容易性に関し、安全性を侵すことなく、公開鍵を公開することができる。よって、暗号化データを、コンピュータ通信網を介して送信する場合、データの受信者は、先ず、公開鍵と秘密鍵を含む一組の鍵を生成する。そして、公開鍵は、例えば、データの送信者に渡され、秘密鍵は安全な場所に保管される。データの送信者はその公開鍵を用いて元データを暗号化し、それから、暗号化データを受信者に送信する。受信者は暗号化データを受信すると、先に暗号化に用いた公開鍵に対応した秘密鍵を復号化システムに与え、システムが暗号化データを処理し、元の、復号化データを得る。公開鍵システムはそもそも、例えばブロックまたは逐次暗号において用いられる鍵を送信することに用いられたが、今や、データの暗号化と復号化に用いられる。
【０００９】
本発明に係る方法は、暗号化法および暗号化システム、特に、逐次暗号アルゴリズム、ブロック暗号アルゴリズム、ハッシュ関数、および、ＭＡＣ（メッセージ認証コード）関数に適用することができる。しかし、これらに限定されることはない。これらの方法、関数、および、アルゴリズムには、擬似乱数生成器が含まれる。この生成器は、再現可能に、つまり、異なる２つのサイクルにおいて同じ鍵を擬似乱数生成器に入力した場合、これら２つのサイクルにおいて同じ数を生成するようにして、擬似乱数を生成可能である。
【００１０】
擬似乱数生成器においては、カオス系、つまり、非線形微分方程式系、の数値解、または、カオス的挙動を示す写像が提案されている。「カオス的」なる語は、狭義の数学的意味においては、連続系における文脈でのみ用いられる。しかし、本明細書においては、少なくとも１つの正のリヤプノフ指数を有する離散(discrete)または有限系(finite systems)を「カオス的」と称する。
【００１１】
カオス系は通常、少なくとも１つの状態変数(state variable)Ｘを定める。このような系の数値的解法は、通例、逐次代入(iteration)または積分(integration)ステップを有する。カオス系においては、所与の瞬間における解Ｘｎは初期条件Ｘ０に依存する。それは、Ｘ０における僅かなずれが解Ｘｎにおける莫大なずれを生ずる程に依存する。このような系は、しばしば、初期条件に対する鋭敏性を示すと称される。よって、擬似乱数生成器、つまり、カオス系を数値的に解くアルゴリズムが、再現性を有する擬似乱数列を出力するには、正確な初期条件Ｘ０を知っている必要がある。従って、カオス系に依存した暗号化アルゴリズムにおいては、カオス系の数値解に用いる初期条件Ｘ０は、暗号化システムの使用者の入力する鍵から与えられる。そうすることで、例えば、データの暗号化や復号化のために同じ擬似乱数列を生成することができる。
【００１２】
リヤプノフ指数は２つの近接した軌道、つまり解曲線、の発散性または収束性の程度を評価し、様々なタイプの解の安定性を決定、つまり、解が、例えば、周期的であるかカオス的であるかを決定するのに用いることができる。リヤプノフ指数は、参照軌道(reference orbit)とずらされた軌道(displaced orbit)との比較から、このような測度を与える。初期条件ｘ０の逐次代入により、参照軌道が表され、ずらされた軌道は、初期条件ｘ０＋ｙ０への逐次代入により表される。ここで、ｙ０は、初期変位を表す無限小長のベクトルである。この初期変位の初期方向は、ｕ０＝ｙ０／｜ｙ０｜で与えられる。この表記法を用いると、リヤプノフ指数、ｈ（ｘ０，ｙ０）は、次式のように定義される。
【数３】
2005529364.tif 000005
ここで、ｙｎは、ｘ０に関するｎ番目の逐次代入により与えられる、ずらされた軌道の参照軌道からのずれである。１次元よりも多い次元を有する系に関しては、リヤプノフ指数の集合(set)またはスペクトル(spectrum)が存在し、そのそれぞれが軌道の特定方向への発散性または収束性を特徴づけている。よって、系がＮ自由度を有するなら、系はＮ個のリヤプノフ指数を有する。しかし、それらは必ずしも異なるとは限らない。実用上、正のリヤプノフ指数はカオスを示唆する。ハイパーカオスと称されるタイプの不規則な挙動は、２つまたはより多くの正のリヤプノフ指数により特徴づけられる。リヤプノフ指数の数値計算は、Ｔ．Ｓ．パーカー、Ｌ．Ｏ．チュア著のプラクティカル・ニューメリカル・アルゴリズム・フォー・カオティック・システム、７３−８１頁 (T. S. Parker and L. O. Chua: Practical Numerical Algorithms for Chaotic Systems, pp. 73-81) で推奨される方法により実施することができる。
【００１３】
ハイパーカオス的挙動を示す系よりもさらに不規則な系は、所謂、乱流(turbulence)を示す。乱流とは、正のリヤプノフ指数の連続スペクトルを有するシステムの示す挙動のタイプをいう。乱流は、例えば、周知のナビエ−ストークス方程式といった偏微分方程式によりモデル化可能である。
【００１４】
カオス系を解くこと、特に、カオス系に依存した逐次暗号アルゴリズムを含む、暗号化アルゴリズムで使用されるカオス系を解くことについて、多数の先行技術文献が存在する。背景技術に関する総論として、それらのいくつかを簡単に紹介する。
【００１５】
ローラル・エアロスペース・コーポレーション(Loral Aerospace Corp.)に譲渡された米国特許第５，００７，０８７号(US 5,007,087)は、カオスを用いて乱数を生成する方法および装置を開示する。この特許明細書は、乱数列を生成するためのカオス系の解法を記載しており、また、暗号化技術における使用可能性、特に、鍵生成および鍵管理の分野における可能性について言及する。本文献においては、数列の再現性、反復性(repeatability)は回避すべきものとして説明されている。
【００１６】
ヒューズ・エアクラフト・カンパニー(Hughes Aircraft Company)に譲渡された米国特許第５，０４８，０８６号(US 5,048,086)は、カオス理論に基づく暗号化システムに関する。このシステムは、ロジスティック方程式Ｘｎ＋１＝μＸｎ（１−Ｘｎ）を用いている。これは、特定のμ値に対してカオスを示す写像である。計算には、浮動小数点演算が用いられる。
【００１７】
アップルコンピュータ・インコーポレーテッド(Apple Computer, Inc.)に譲渡されたＰＣＴ出願、ＷＯ９８／３６５２３号は、カオス系を用いた公開鍵生成および秘密鍵から裏口（バック・ドア）(back door)を生成する方法を開示している。ここでは、カオス系を計算する上で、精度に関して規則を設ける必要性に触れている。例えば、明細書においては、丸め(round-off)に関して定められている水準に従い、規定の浮動小数点または固定小数点精度を定めることが可能であると、記されている。
【００１８】
本願の譲受人に譲渡されたＰＣＴ出願、ＷＯ０２／４７２７２号では、所謂、固定小数点数の利用を含めて、様々な態様の暗号化法が開示されている。
【００１９】
ハニーウェル・インコーポレイテッド(Honeywell Inc.)に譲渡されたＰＣＴ出願、ＷＯ０１／５０６７６号は、所謂、弱い鍵系列(vulnerable keystream)を、所謂、安全な鍵系列(protected keystream)に変換する非線形暗号アイソレータを開示する。この非線形フィルタによる暗号アイソレータは乗算器を有し、この乗算器は弱い鍵系列に対して乗算関数を実行し、下方部分積配列(lower partial product array)と上方部分積配列(upper partial product array)を与え、下方部分積配列と上方部分積配列とを組み合わせる(combining)ためのシンプルで偏りのない演算(simple unbiased operation)を行って安全な鍵系列を与える。
【００２０】
Ｄ．カハナー、Ｃ．モーラー、および、Ｓ．ナッシュによる「ニューメリカル・メソッズ・アンド・ソフトウェア」("Numerical Methods and Software" by D. Kahaner, C. Moler and S. Nash)(Prentice-Hall International Editions, 1989)に、（擬似）乱数の生成についての総論が述べられている。この本は、（擬似）乱数生成器の品質を検証するための規準が記されている。それらは以下のようなものである。
ａ）高品質：生成器は、あらゆる統計的試験にパスし、かつ、極めて長い周期性を有する。
ｂ）効率性：実行が迅速であり、かつ、必要な記憶容量が最小限である。
ｃ）反復性(repeatability)：同じ開始条件を定めれば、同じ数列を生成する。使用者は常に、生成器を再始動させることができ、かつ、明確な初期化(explicit initialization)を必要としない。始動時の手続き(starting procedure)における僅かな変更によって、異なる乱数列を発生させる。
ｄ）機器への非依存性および可搬性：異なる種類のコンピュータ上でアルゴリズムが作動する。とくに、プログラムを停止させるような演算処理を含まない。厳密に同一な方法で生成器を初期化することで、異なるコンピュータ上で同じ乱数列が生成される。
ｅ）単純性：アルゴリズムを実装および使用することが容易である。
また、本書は、これら全ての規準を満足する生成器は存在しない、と述べている。
【００２１】
また、例えば、インテルのマンデルブロー計算法においては、数値計算に固定小数点変数を使用することが知られている。インテルは、ＭＭＸテクノロジ（特定の計算を高速化するための、インテル製プロセッサへのアド・オン）を用いることで、如何にして高速にマンデルブロー集合（非線形系より導出される集合）を計算可能であるかを解説している。（ＭＭＸ（商標）テクノロジ・アプリケーション・ノーツ(MMXTM Technology Application Notes)、「ＭＭＸ（商標）テクノロジによるフラクタルの実現」("Implementing Fractals with MMXTM Technology")を参照。本内容は、２００３年６月現在、<http://cedar.intel.com/cgi-bin/ids.dll/content/content.jsp?cntKey=Legacy::irtm_MANDEL_10491&cntType=IDS_EDITORIAL&catCode=0> より、公衆にアクセス可能となっている。）これは、固定小数点演算により実施されている。
【００２２】
マンデルブロー集合は、次の写像を用いて計算される。
【数４】
2005529364.tif 000006
インテルは、この計算において一定の小数部セパレータ位置(constant decimal separator)を利用している。所謂、５．１１を用いている。つまり、５番目のビットの後に小数部セパレータの配された１６ビットの数を用いている。「５」は、小数部セパレータの前の５つのビットを指し、「１１」は、小数部セパレータの後の１１のビットを指している。
【発明の開示】
【発明が解決しようとする課題】
【００２３】
暗号化に用いられる擬似乱数生成器は一般に、擬似乱数列の再現性を確保しつつ、可能な限り予測不可能であるべきである。換言すれば、生成器を構成する数学的システムの内部状態(internal state)には、その数学的システムの別の内部状態に関わる情報をできる限り含まないことが望ましい。例えば、ｉ番目の逐次代入（イタレーション）における状態変数「Ｘ」において含まれる特定の値「Ｘｉ」の情報から、予測可能な方法論で、別の、ｊ番目の、イタレーションにおける変数「Ｘ」に含まれる変数「Ｘｊ」を導出しないことが望まれる。離散的な項で表されたイタレーションの数学的システムの場合、その数学的システムが周期性を有する場合にある程度の予測可能性が生起するという意味で、短周期性に関する問題が発生する。暗号化システムにおいては、この問題は深刻な問題である。なぜなら、データはセキュリティを担う擬似乱数データの同一のブロックを繰り返すことで暗号化される、という影響が及ぶからである。
【課題を解決するための手段】
【００２４】
本発明は、４つの態様を有する。本発明の好適な実施形態では、予測不可能性の向上によりセキュリティの向上をもたらす。
１．  数学的システムのパラメータの変動が、正のリヤプノフ指数を示す（請求項１ないし１７）。
２．  乗算演算より生じる数のうちで、（最）上位ビットの少なくとも１つを操作する（請求項１８ないし４３ならびに５５）。「ｇ関数」
３．  除算演算より生じる数の商と余りとを組み合わせる（請求項４４）。
４．  キャリー値(carry value)を用いてカウンタ値(counter value)を更新する（請求項４５ないし５５）。
【００２５】
計算速度の向上を目的とし、さらに本発明は次の非独立的な態様を有する。
５．同時的暗号化(concurrent encryption)、および、識別値(identification value)の生成（請求項５６ないし６１）。
【発明を実施するための最良の形態】
【００２６】
本発明の上記態様について以下のセクション１ないし５で議論する。本発明の全ての態様に当てはまる開示および議論は、以下のセクションＡないしＬに含まれる。
【００２７】
１    正のリヤプノフ指数を示す、数学的システムのパラメータの変動
本発明の第１の態様により、正のリヤプノフ指数を示す数学的システムにおいて反復的に計算を実行する方法が供される。本方法は、特定の回数の計算の後、少なくとも１つの、数学的システムのパラメータを変更するステップを含んでいる。そのパラメータは、例えば、カウンタであってよい。パラメータは、数学的システムとは独立して変化してよく、また、パラメータを変更しない場合よりも長い周期性を数学的システムが示すか、または、パラメータの変更によって、いかなる現実的用途においても、数学的システムが反復しない程度に長い周期を有する周期的挙動を数学的システムが示すようにすることができる。パラメータは、数学的システムにおける計算全体に渡って繰り返して変更されてよい。
【００２８】
正のリヤプノフ指数を有する系、すなわち、カオス的挙動を示す系に関連し、別の課題が存在する。その課題とは、２つの異なるプロセッサにおいて、浮動小数点数の丸めは必ずしも一致しないことである。そのような場合、リヤプノフ指数が正である故に、第１のプロセッサにおいて生成される擬似乱数列を、第２のプロセッサにおいて再現できないかもしれない。通例、コンピュータ上で実数は浮動小数点型の数として表現される。浮動小数点数は、仮数部および指数部を有する数と定義される。例えば、３１４１５・１０−４では、「３１４１５」が仮数部であって、「−４」が指数部である。コンピュータが浮動小数点変数を計算する場合、計算結果に合致するようにコンピュータが指数部を再計算する。「浮動小数点」という名は、指数部を変更することにより小数部セパレータが計算過程で移動することに由来している。だが、浮動小数点演算は、様々なプロセッサのアーキテクチャごとに異なる規定があり、精度や丸めの扱いに差違が生じている。本願発明者は、浮動小数点数の代りに固定小数点数を利用できることに気付いた。よって、本発明に係る方法の実施形態においては、通例少なくとも１つの関数を有し、かつ、離散項で表現される、数学的システムにおけるイタレーションのような計算は、少なくとも１つの固定小数点数によって実行される。全ての計算を固定小数点数演算または整数演算として実行してもよい。固定小数点数は、コンピュータにおいては整数型の数として表される。この場合、仮想的小数点もしくはセパレータ（架空の小数部セパレータ(imaginary decimal separator)とも称する。）は、「手動で(manually)」つまり、プログラマによって導入されて、実数の整数部と端数部とを分けている。よって、固定小数点数に関する計算は、シンプルな整数演算で行われる。この計算は、異なる２つのプロセッサで実行された同一の計算により、同一の結果をこれら２つのプロセッサ上で得る、という意味においてあらゆるプロセッサにおいて、負数の表現に差違が生じ得る点を除き、同一である。異なる表現が生じうるのは、あるプロセッサでは、第１の補数を用いており、他のプロセッサにおいては、第２の補数を用いているからである。また、これら演算は、通常、相当する浮動小数点演算よりも高速である。固定小数点変数の使用に関しては、後に、セクションＢでさらに詳しく議論する。
【００２９】
数学的システムは、少なくとも１つの非線形写像もしくは非線形方程式、または、非線形写像のセットもしくは非線形方程式のセットを備えてよい。これについては後で詳述する、特にセクションＣを参照されたい。
【００３０】
前に触れたカウンタは、数学的システムにおける各イタレーションにおいて増加する。この場合、カウンタの最大値を定めてもよい。よって、本方法では、カウンタ値が先述の最大値に達すると、カウンタを最小値に再設定してよく、これによって、カウンタはある周期性をもって変化する。しかしながら、このことは、必ずしも数学的システムも周期性をもって変化することを意味するのではない。カウンタの再設定は、システムにおけるオーバーフローを防止している。
【００３１】
予測不可能性を向上させるため、複数のパラメータを導入してもよい。これら複数のパラメータのうちの一部は、動的、つまり、変化し、その他の変数は、静的、つまり、定数であってよい。定数パラメータは、例えば、暗号化鍵といった数学的システムに与えられるシード値から生成されてよい。第１のパラメータ、例えば第１のカウンタ、の変動は、第２のカウンタの変動に従属的であってよい。ここでは、第１のカウンタの周期は、第２のカウンタの周期とは異なっている。カウンタ個々の変動は、少なくとも別の１つのカウンタの変動に従属的であってよく、それによって、個々のカウンタが他のカウンタに従属的で無い場合に存在するであろう周期よりも、もっと長い周期のカウンタが得られる。１つまたは複数のカウンタを線形的に、または、その他の関数によって増加させてもよい。
【００３２】
本発明に係る第１の態様により実行される計算を、擬似乱数の生成に用いることが望ましい。この計算は、あらゆる主の暗号化、および／または、識別値の生成に用いることができる。
【００３３】
２    乗算演算より得られる数のうちで（最）上位ビットの少なくとも１つに対する操作、「Ｇ関数」
第２の態様においては、本発明は、暗号化システムにおけるデータの第１セットを操作する方法を提供する。データの第１セットは、それぞれ第１および第２ビット・サイズＡおよびＢの、第１数および第２数を含んでいる。
−  第１数と第２数とを乗算し、第３ビット・サイズ、Ａ＋Ｂの第３数を得る。第３数は、Ｐ個の（最）上位ビットと、Ｑ個の（最）下位ビットを含む。ここで、Ａ＋Ｂ＝Ｐ＋Ｑであり、また、Ｑは、第１ビット・サイズＡと第２ビット・サイズＢのうち、大きいものに等しく、Ｑ＝ｍａｘ（Ａ，Ｂ）である。
−  第３数を操作し、第４数を得る。第４数は、第３数のＰ個の（最）上位ビットのうちの少なくとも１つの関数である。
−  第４数を用いて暗号化システムの出力を導出する。
さらに具体的には、第４数を、暗号化システムの出力として擬似乱数を生成または更新することに用いてもよい。
【００３４】
一般に、乗算関数は、暗号化の特性がよいことが知られている。これらの特性は、良好な混合(good mixing)、つまり、殆どの入力ビットがあらゆる出力ビットに影響し、線形近似性に乏しい(poor linear approximation)。また、乗算は、出力のビット数が入力のビット数の総数と等しい、つまり、ビット・サイズＡの数をビット・サイズＢの数で乗算すれば出力はビット・サイズＡ＋Ｂとなるという特性を有する。ビット・サイズがより大きなものとなることで、出力に対するさらなる操作を可能とする。よって、最終的な出力のビット・サイズはＡ＋Ｂよりも小さなもの、例えば、ＡまたはＢとすることができる。従い、操作の加えられた乗算関数の暗号化に関する特性を向上させることができる。つまり、全ての入力ビットが全ての出力ビットに影響を与え、いかなる線形近似性にも乏しい。
【００３５】
第１数および第２数は、異なるビット・サイズでよい。例えば、それらは、８ビットおよび１６ビットである。だが、実用上の理由により、第１数および第２数は、同一のビット・サイズであることが望ましい。例えば、第１数および第２数は、３２ビットの数でよい。この場合、第３数は、６４ビットの数となり、（最）上位３２ビットと、（最）下位３２ビットを含む。そして、例えば、第４数は、この６４ビットの数の（最）上位３２ビットを含むことができる。データの第１セットは、単一の数(a single number)を含んでよく、例えばそれは、変数にアサインされた数である。そして、第１数は、第２数と等しくともよく、よって、乗算のステップは、第１数を二乗するステップを含む。このような二乗ステップは、２つの異なる数の乗算を包含する、他の乗算関数との比較において、有利となることがある。なぜなら、本ステップでは単一の変数のみを処理すればよいからである。また、特定のビット・サイズＡの数を二乗すれば、前に第３数と称した、ビット・サイズ２・Ａの数になる。よって、第３数に操作を加えて例えばビット・サイズＡといった、別のビット・サイズからなる第４数を得ることで、本発明に係る第２の態様を包含する暗号化システムにさらなる複雑性が加えられる。二乗することには別の有利点もある。それは、小さなプロセッサ、例えば８ビットまたは１６ビットのプロセッサで実行する場合に２つの異なる数を乗算するよりも少ない演算で済み、よって、計算資源(computational resource)を節約できる。例えば、２つの異なる３２ビットの数を乗算するには、１６回の８ビット乗算が必要となるが、３２ビット数を二乗する場合、たった１０回の８ビット乗算でよい。また、暗号化システムに本方法を適用することにより、（予測不可能性に関して）満足のいく品質の鍵系列を、シンプルな演算、例えば、ＸＯＲ演算によって擬似ランダム出力として直接的に生成することができる。また、暗号化システムにおいては、二乗関数は普通、特定の結果をその他の結果よりも頻繁に生ずることがない。だが、２つの異なる数の乗算では、乗算される２つの数のうちの１つがゼロなる値を有する場合、常にゼロという結果になる。換言すれば、二乗関数は、その他の乗算関数と比較して特定の結果、特にゼロに対する偏り（バイアス）(bias)を少なくすることができる。このようなゼロに対する偏りは、この乗算への入力に関する情報の漏れを生ずることがある。なぜなら、乗算演算への２つの入力のうち１つは、十中八九、ゼロであることが明らかだからである。
【００３６】
第４数は、擬似乱数を表しており、この擬似乱数は、暗号化システムの出力として用いられる。あるいは、第４数を、数学的システムにおけるイタレーションといった、さらなる計算への入力として用いてもよい。そして、擬似乱数もしくはその他の暗号化システムの出力は、その後で導出される。
【００３７】
暗号化システムにおいては、１つまたは複数の状態変数を数学的システムにおいて逐次代入してよい。カウンタもしくは変数を、それぞれの、または、いくつかの逐次代入ステップにおける、状態変数のそれぞれ、または、いくつかに加えてもよい。乗算のステップには、各逐次代入ステップと同一の演算を備えてもよいし、あるいは、異なる演算を備えてもよい。例えば、第１の逐次代入ステップにおいては、乗算ステップは、変数ｘを二乗するステップを備え、それに対し、後続の逐次代入ステップの１つまたは複数においては、乗算ステップは、変数ｘを別の変数ｙと乗算するステップを備えてよい。
【００３８】
少なくとも２つの状態変数を逐次代入する場合、各状態変数に代入（アサイン）されている値は、同一の、および／または、別の状態変数の少なくとも１つの値の関数として更新されてよい。例えば、添え字ｉがｉ番目のイタレーションを示すとし、ｘおよびｙが状態変数を示すとして、一般形式は、ｘｉ＋１＝ｆ（ｘｉ、ｙｉ）と表される。
【００３９】
操作ステップは、第３数の（最）上位ビットおよび（最）下位ビットを用いるステップを含んでいることが望ましい。この操作には、論理演算または算術演算が含まれる。容易に用いることができる論理演算はＸＯＲ関数である。この関数は、例えば、幾つかの（最）上位ビット、および、それと同数の（最）下位ビットに適用されてよい。排他的論理和をとることは、ビットごとに(bitswise)行われる。ここでは、（最）上位ビットの各ビットはそれぞれ、（最）下位ビットのビットとで排他的論理和がとられる。よって、ＸＯＲ演算は、Ｎ回実行され、ビット・サイズＮの結果を得る。操作ステップは、２つ、または、より多くの異なる数のビットに対する演算を適用することで実行されてよい。例えば、１つまたは複数の状態変数に関するイタレーションに基づいて幾つかの数、ｘ１，．．．，ｘｎを生成するような暗号化システムにおいては、操作ステップは、ある数ｘｍのビットと別の数ｘｐのビットとの排他的論理和をとるステップを含んでいる。ここで、ｘｍおよびｘｐのうち１つ、または、両方は、第３数を表している。
【００４０】
同様、算術演算もビットごとに行ってよい。
【００４１】
暗号化システムにおいては、第１数および第２数は、暗号化または復号化するべきデータのセットから導出してもよい。この場合、例えば、ブロック暗号アルゴリズムやデータのセットを識別するための識別値を決定するアルゴリズムにおいて、第４数は、暗号文や平文といった、データの第２セットの暗号化された、または、復号化された表現を生成することに用いてよい。
【００４２】
本発明に係る第２の態様による方法は、データの第２セットを識別するための識別値の生成に用いてもよい。この場合、データの第２セットから第１数および第２数の少なくとも１つが導出され、よって、第４数は、データの第２セットを識別する識別値を生成するために用いられる。用語「識別値」は、データのセットを識別するハッシュ値もしくは暗号チェック・サムであってよい。例えば、ブルース・シュナイアー(Bruce Schneier)著、アプライド・クリプトグラフィ(Applied Cryptography)(Second Edition, John Wiley & Sons, 1996)を参照されたい。暗号化鍵を、計算のシード値として用いている場合、ハッシュ関数は通常、ＭＡＣ関数（メッセージ認証コード(Message Authentication Code)）と称される。
【００４３】
本方法が用いられる如何なる用途においても、第１数および第２数のうち少なくとも１つは暗号化鍵、つまり、イタレーションの初期化に用いられる暗号化システムのアルゴリズムへの入力値、から導出される。
【００４４】
本発明に係る第２の態様による方法においては、第１数は、第２数と等しくともよい。この場合、乗算ステップは、第１数を二乗するステップを有する。
【００４５】
数学的システムにおいては、状態変数が逐次代入され、状態変数は、第４数の関数として、または、第４数のパーミュテーション(permutation)の関数として更新される。このパーミュテーションには、例えば第４数のビットの、ビット位置の規則的交代(rotation)が含まれる。
【００４６】
良好な混合(good mixing)をもたらし、かつ、暗号化システムの出力ビットのそれぞれをできる限り多くの入力ビットに従属させることを目的として、乗算ステップは複数回実施されてよく、それら乗算のそれぞれは、複数の状態変数の１つを表しているか、または、複数の状態変数の１つに関する関数である数について実行され、よって、乗算ステップより複数の第３数を得る。従って、操作ステップは複数の第４数を含む配列を与え、少なくとも１つの状態変数は、少なくとも２つの第４数の関数として更新される。
【００４７】
第１数および第２数のうち少なくとも１つは、状態値Ｘｉであってよい。この値には、例えばカウンタＣｉといった可変パラメータ値が加えられることがある。よって、乗算ステップは、（Ｘｉ＋Ｃｉ）を二乗するステップを有する。ここで、Ｘｉは、状態変数または状態変数配列であり、Ｃｉは、カウンタまたはカウンタ配列を示す。少なくとも１つのパラメータは、計算過程において、所定の間隔で繰り返し変更されてよい。カウンタＣｉは、第４数、または、第４数の関数に加えられてよく、それによって更新された状態変数Ｘｉ＋１を得る。
【００４８】
乗算ステップは、複数の乗算関数を備えてよく、それによってビット・サイズＡ＋Ｂの数を複数与え、それら複数の数のうちの第１の数の少なくとも１つのビットと、それら複数の数のうちの第２の数の少なくとも１つのビットとを組み合わせる(combining)ステップを備えてもよい。この複数の乗算関数は、少なくとも１つの二乗演算を備え、それにより、操作ステップは、複数の数のうちの第１の数のＰ個の（最）上位ビットの少なくとも１つと、複数の数のうちの第２の数のＱ個の（最）下位ビットの少なくとも１つとを組み合わせるステップを備えてもよい。
【００４９】
乗算ステップは通例、数学的システムにおいて実行される。このシステムにおいて、少なくとも１つの状態変数は逐次代入される。殆ど場合、２つまたはより多くの状態変数が逐次代入されるシステムにおいて乗算ステップは実行される。各計算シーケンスにおいて、少なくとも２つの状態変数のそれぞれに代入（アサイン）された値は、同一の、および／または、別の状態変数の少なくとも１つの値の関数として更新されてよい。
【００５０】
暗号化用途においては、第１数および第２数の少なくとも１つは、暗号化または復号化されるべきデータのセットから導出されてよく、よって、第４数は、データのセットの暗号化された表現または復号化された表現を生成することに用いられてよい。同様、第４数は、データのセットを識別する、識別値を生成するために用いられてよい。第１数および第２数の少なくとも１つは、暗号化鍵から導出してよい。
【００５１】
本発明に係る第２の態様による方法は、データのセットを識別するための識別値が定められ、かつ、例えば、数学的システムにおいて数値計算が実行される擬似乱数生成器を用いてデータのセットが同時的に暗号化／復号化されるような、システム／方法に用いられることが望ましい。後に記した本発明の第５の態様に関する議論を参照されたい。
【００５２】
３    除算演算より生じる数の商と余りとを組み合わせる(combining)
第３の態様においては、本発明は、暗号化システムにおけるデータの第１セットを操作する方法を供する。データの第１セットには、第１数および第２数が含まれる。この方法は以下のステップを有する。
−  第１数を第２数で割って商と余りを求めるステップ。
−  数学的演算を用いて商と余りを組み合わせて(combining)、生じる数を求めるステップ。
−  その生じる数を用いて、暗号化システムの出力を導出するステップ。
【００５３】
このような操作は、本発明に係る第２の態様による方法において用いてよい。組み合わせステップは、本発明に係る第２の態様による方法に関連して先に議論したあらゆる操作、例えば、ＸＯＲ演算、または、算術演算を含んでよい。暗号化システムの出力は、本発明に係る第２の態様に関連して先に議論したあらゆる出力であってよい。
【００５４】
本発明に係る第３の態様により、暗号化システム、特に、擬似乱数生成器における数の混合度(mixing)が向上される。本方法は、本明細書に記された技術を含むあらゆる暗号化システムと併用することができる。
【００５５】
４    キャリー値を用いたカウンタ値の更新
暗号化システムにおける数の系列（シーケンス）に非常に長い周期性を確保するため、そして、それによる、予測不可能性およびセキュリティの向上を目的とし、本発明に係る第４の態様として計算ステップが反復して実行されるような暗号化システムにおける周期的な数の系列を生成する方法を供する。本方法は、各計算ステップｉにおいてカウンタの配列を更新するステップを有する。このカウンタは、論理的に、かつ／または、算術的関数により、更新される。従って、各計算ステップにおいて、キャリー値が配列内の各カウンタに加えられる。ここでは、配列内の第１のカウンタ、ｃ０に加えられるキャリー値は、次のうちの少なくとも１つから求められる。
−  選ばれた、カウンタの配列の値に関する計算。
−  以前の計算ステップにおけるカウンタ値の関数より得る値。
【００５６】
換言すれば、各計算ステップｉにおいて、カウンタｃｊ，ｉの配列Ｃｉを更新するステップを含む。カウンタは次式により更新される。
【数５】
2005529364.tif 000007
ここで、ｃｊ，ｉ＋１は、ステップｉ＋１において配列Ｃの位置ｊに代入（アサイン）された値であり、ｊ＝０，．．．，ｎ−１である。ｎは、配列Ｃの次元（ディメンジョン）を示す。つまり、配列の要素数である。
ｃｊ，ｉは、ステップｉにおいて配列Ｃの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１である。
ａｊは、一般に定数となる値であって、配列Ａの位置ｊにアサインされた値であり、ｊ＝０，．．．，ｎ−１である。
ｊ＞０なるｊに対し：ｂｊ−１，ｉ＋１は、ｃｊ−１，ｉ＋１の計算より得るキャリー値である。
Ｎｊは、定数であり、ｊ＝０，．．．，ｎ−１である。
ｉ＝０なるｉに対し：ｄｉ＝ｄ０は、初期値である。
ｉ＞０なるｉに対し：ｄｉは、カウンタの配列Ｃｉの値に関する選択された計算、および／または、Ｃｉの関数より得るキャリー値である。
【００５７】
キャリー値は、ゼロであってもよいと解すべきである。
【００５８】
以下で解説するように、カウンタ系（カウンタ・システム）の周期は非常に長いことが数学的に証明される。よって、上記のカウンタ系を用いて鍵系列を生成する擬似乱数生成器においては、鍵系列自体の反復による鍵系列の周期化を招くことなく、大量のデータを暗号化することができる。従い、予測不可能性およびセキュリティが向上する。
【００５９】
本発明に係る第４の態様による方法で生成された数列は、非常に長い周期性を備え、よって、殆どの実際の用途において、生成される数列は周期的ではない。つまり、生成されるあらゆる数の系列は、反復しない。
【００６０】
カウンタＣｉの配列は、通常の、ｃｉ＋１＝ｃｉ  ＋ａ   ｍｏｄ Ｎ の形で表されるカウンタと異なり、カウンタＣｉの配列は、「キャリー・フィードバックを備えたカウンタ」と称される。キャリー・フィードバックを備えたカウンタの効果を説明するため、先ず、通常のカウンタについて議論する。
【００６１】
次式により定められる系について考察する。
【数６】
2005529364.tif 000008
ここで、ｃｉは、ステップｉにおけるカウンタの値（配列Ｃｉは単一の要素ｃｉを有する。）であり、ｃｉ＋１は、ステップｉ＋１におけるカウンタの値であり、ａは、定数であり、Ｎは、通例、計算を実行する電子プロセッサのレジスタ・サイズにより規定される大きな数、すなわち、３２ビット・プロセッサに対しＮ＝２３２である。
【００６２】
ａ＝１の場合、ｃは値がＮ−１に達するまで、一定に、１ずつ増加（インクリメント）する。そして、次のイタレーションにおいてｃはゼロから再開始する。このような系においては、ｃの周期は、Ｎに等しい。だが、この数における１つのビットは、異なる周期を有する。（最）下位ビット、ｃ［０］は、連続的に１が加えられ、よって値０と１を繰り返す。つまり、周期は２である。２回の増加（インクリメント）ごとに、レジスタの次のビット、ｃ［１］に繰り上がり（キャリー(carry)）が生じる。よって、ｃ［１］は周期４である。位置ｊにあるビットに関し、その周期は２ｊ＋１となる。
【００６３】
このような系では、（最）上位ビットを除き、全てのビットは全体の周期Ｎよりも短い周期を有する、という不利点が生じる。他に、ビットの動的挙動がかなり予測できるという不利点を有する。例えば、（最）下位ビットは、イタレーションごとに変化する。よって、所与のイタレーションにおける値は知られずとも、次のイタレーションにおいてその値は、逆の値となる。また、（最）上位ビットの値は、周期Ｎの半分を経過した後にのみ変化する。このことは、（最）上位ビットの値は、長期間一定であることを意味し、よって、予測不可能性に関する特性について劣ることを意味する。このことは、暗号化システムにとって致命的である。
【００６４】
先に記したように、キャリー・フィードバックを備えたカウンタは、一次元系(single-dimensional system)においては次式で規定される。
【数７】
2005529364.tif 000009
ここで、ｃｉは、ステップｉにおけるカウンタ値であり、ｃｉ＋１は、ステップｉ＋１におけるカウンタ値であり、ａは、定数であり、ｄｉは、ステップｉにおけるフィードバックのキャリー値であり、Ｎは通例、２の、計算が実行されるプロセッサのレジスタ・サイズ乗に等しい大きな数である。
【００６５】
再度、ａ＝１である場合を考察してみる。ｃ０＝０から出発すると、ｃｉ＋ａ＋ｂｉがＮ以上になるまでは、通常のカウンタと類似した挙動を示す。そして、ｂｉ＋１が１になると、以降のイタレーションにおいてはカウンタ値に加えられる。よって、（最）下位ビットにおける周期２の挙動は遮られ、よって、通常のカウンタの場合よりも予測しにくいものとなる。また、このことは、（最）下位ビットおよびそれ以外のビットは全て、ｃの周期に等しい周期を有する周期的挙動を有することになる。この周期は、Ｎ−１である。
【００６６】
キャリー・フィードバックを備えたカウンタ系の周期は、以下のように示される。
【００６７】
上記のような再帰（リカレンス(recurrence)）の関係は、次の線形の合同な生成器(generator)と同等である。
【数８】
2005529364.tif 000010
Ａをｇｃｄ（Ａ，Ｎ−１）＝１となるように選べば、すなわち、ＡとＮ−１との最大公約数が１であるように選べば、この周期の長さは、Ｎ−１となる。Ｂ．シュナイアー(B. Schneier)著、アプライド・クリプトグラフィ(Applied Cryptography)、John Wiley & Sons, Inc. (1996) を参照されたい。
【００６８】
ＺがＣと同等であることを示すため、ここで、Ｚ０＞ＡなるＺ０に対し、初期値Ｃ０＝Ｚ０とする。Ｃｉの再帰性は、Ｚｉを用いて規定することができる。
【数９】
2005529364.tif 000011
Ａは、連結された値(concatenated value)、ａｎ−１．．．ａ０を示す。以降を参照されたい。
【数１０】
2005529364.tif 000012
よって、Ｃｉは、値Ａでなく、値Ｎ−１に達する点を除き、異なったオーダにおいてではあるが、Ｃｉは、Ｚｉと同じ数の集合（セット）になる。よって、再帰性の周期、Ｃは、線形の合同な生成器（ジェネレータ）、Ｚに関する場合と同じである。
【００６９】
要するに、このカウンタ系の目的とは、所与の長周期を有する数の列を生成することであって、ここでは、各ビット位置における各バイナリ値が、全系の周期と同じ周期性を有している。加えて、（最）下位ビットは、キャリー・フィードバックによって他の全てのビットの影響を受ける。このことは、フィードバックを用いない場合と異なる点である。
【００７０】
長い周期の数列を用いることで、逐次暗号の内部状態が長い周期性を備えることを確保している。
【００７１】
一定な増加値(incrementation value)Ａを適切に選択することで、Ｃの各ビット位置における値は比較的高い振動数を有する。つまり、頻繁に変化する。よって、カウンタのビット値を秘密のままで、例えば、これらを、内部状態を備えた逐次暗号への入力の部分として用いれば、逐次暗号の出力と、これらビット値との関係性を利用することでさらに複雑性を増す。なぜならばビット値は比較的頻繁に変化するからである。
【００７２】
Ａの値は、（Ｎ０×Ｎ２×・・・×Ｎｎ−１）−１の値とａｊ値の連結された値とが互いに素であるように、適切に選ぶことができる。ａｊ値の連結された値は、ビットａｎ−１ａｎ−２・・・ａ０なる１つのシーケンスとして求められる。以下の例を参照されたい。
【００７３】
３２ビットのレジスタ（すなわち、Ｎ＝２３２）で計算を実行する場合の、適切な定数の例を示す。
ａ０＝０ｘ４Ｄ３４Ｄ３４Ｄ
ａ１＝０ｘＤ３４Ｄ３４Ｄ３
ａ２＝０ｘ３４Ｄ３４Ｄ３４
ａ３＝０ｘ４Ｄ３４Ｄ３４Ｄ
ａ４＝０ｘＤ３４Ｄ３４Ｄ３
ａ５＝０ｘ３４Ｄ３４Ｄ３４
ａ６＝０ｘ４Ｄ３４Ｄ３４Ｄ
ａ７＝０ｘＤ３４Ｄ３４Ｄ３
ここで、０ｘは数が１６進数であることを示す。キャリー・フィードバックを備えた１つのカウンタ系への接続(connection)は容易である。それは、全ての定数を連結し、全てのカウンタ要素を連結し、そしてこれら２５６ビットの数について計算、つまり、２２５６を法（モジュロ）とする計算を行うことで行われる。上記の例において、Ａの連結された値は、ａ７ａ６ａ５ａ４ａ３ａ２ａ１ａ０＝０ｘＤ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄ３４Ｄである。
【００７４】
８ビットのレジスタを用いた計算を実行する場合の適切な定数の選択の別例を示す。
ａ０＝０ｘ２Ｃ
ａ１＝０ｘＣＢ
ａ２＝０ｘＢ２
ａ３＝０ｘ２Ｃ
ａ４＝０ｘＣＢ
ａ５＝０ｘＢ２
ａ６＝０ｘ２Ｃ
ａ７＝０ｘＣＢ
ここで、０ｘは数が１６進数であることを示す。キャリー・フィードバックを備えた１つのカウンタ系への接続(connection)は容易である。それは、全ての定数を連結し、全てのカウンタ要素を連結し、そしてこれら６４ビットの数について計算、つまり、２６４を法（モジュロ）とする計算を行うことで行われる。
【００７５】
上述の、キャリー・フィードバックを備えたカウンタ系を用いて、カウンタ値を暗号化関数に対する周期的入力として使用することができる。例えば、
−  カウンタ値を、内部状態を備えた擬似乱数生成器または逐次暗号への入力として使用する。
−  カウンタ値を、識別値の計算における入力の部分として使用する。
【００７６】
ある実施形態においては、暗号化システムの内部状態は、カウンタ値の関数として更新される。例えば、カウンタ値を内部状態に加えることにより更新される。このような更新は、次の状態の値の計算の前、または、次の状態の計算の次に行ってよい。それから、出力関数を現在または次の内部状態に作用させ、時には「鍵系列」と称される擬似ランダム出力を生成する。
【００７７】
以下の擬似コードは、複数のカウンタに関する計算の好ましい実施形態を示しており、この擬似コードは、カウンタに関する１回のイタレーションを示している。
// 古いカウンタ値をセーブする。
for i=0 to 2
c_old[i] = c[i]
end for
// カウンタを進める。
c[0] = (c[0] + a[0] + d) mod 232
if c[0] < c_old[0] then
b[0]=1
else
b[0]=0
end if
c[1] = (c[1] + a[1] + b[0]) mod 232
if c[1] < c_old[1] then
b[1]=1
else
b[1]=0
end if
c[2] = (c[2] + a[2] + b[1]) mod 232
if c[2] < c_old[2] then
d=1
else
d=0
end if
【００７８】
以下の擬似コードは、１つのカウンタに関する計算の好ましい実施形態を示す。
// 古いカウンタ値をセーブする。
c_old = c
// カウンタを進める。
c = (c + a + d) mod 232
if c < c_old then
d=1
else
d=0
end if
【００７９】
上記の擬似コードにおいては、ａの全ての値は２３２−１よりも小さいと仮定する。
【００８０】
上記議論からもわかるように、配列ＣおよびＡのサイズは、１、つまり、ｎ＝１でもよい。そのような場合、
−  配列Ｃは、１つの値、ｃ０，ｉを有する。
−  配列Ａは、１つの値、ａ０を有する。
カウンタｃ０，ｉは、
【数１１】
2005529364.tif 000013
のようにして更新される。
【００８１】
図４と関連して以下に記載するように、ｉ＞０に対し、ｄｉは、ｃｎ−１，ｉに関する計算より得るキャリー値でもよい。すなわち、先の逐次代入ステップにおいて計算された最新のキャリー値でよい。
【００８２】
配列Ｃが、１つの要素ｃのみを有する場合、数ｃは、定数ａ、および、キャリー・レジスタｄの値によって、逐次的に増加されてよい。ｃが、値Ｎよりも大きくなった場合、その数からＮを差し引く。すなわち、Ｎのモジュロをとる。そして、キャリー・レジスタにおける値は、１に設定される。Ｎよりも小さい場合、キャリー・レジスタにおける値は、０に設定される。この手続は以下のように定式化される。
【数１２】
2005529364.tif 000014
【００８３】
配列Ｃが複数の要素もしくは数を含む、Ｃ＝（ｃ０，ｃ１，ｃ２，．．．，ｃｎ−１）、場合、このような数は、定数のセット、Ａ＝（ａ０，ａ１，ａ２，．．．，ａｎ−１）、および、キャリー・レジスタのセット（ｂ０，ｂ１，ｂ２，．．．，ｂｎ−１）、ｂｎ−１＝ｄ、によって逐次的に増加されてよい。数のうちのいくつかが、値Ｎよりも大きくなれば、該当する数からＮを差し引く。つまり、Ｎのモジュロをとる。そして、対応するキャリー・レジスタの値を、１に設定する。加算に関与するキャリー・レジスタは、近接する数より生じたキャリーである。そして、この数のセットは、キャリー・レジスタによって結合され(coupled)、連鎖(chain)を形成する。最初の数には、先の増加における最後の数のキャリー・レジスタが加えられる。この手続は以下のように定式化される。
【数１３】
2005529364.tif 000015
残りの数は、以下のようにして決定される。
【数１４】
2005529364.tif 000016
図４に、上記の手続きを図示する。
【００８４】
あるいは、ｄｉは、同じイタレーションにおいて決定されるキャリー値でよい。つまり、先ず、最初のカウンタに定数を加え、この演算によるキャリーと定数とを、連鎖における次のカウンタに加える。以下同様である。この手続きは連鎖における最後のカウンタまで継続され、この最後の加算によるキャリーは最初のカウンタに加えられ、キャリーが生じれば、そのキャリーは次のカウンタに加えられる、等々である。この手続きは、以下の擬似コードに示される。
// 古いカウンタ値をセーブする。
for i=0 to 2
c_old[i] = c[i]
end for
// カウンタを進める。
c[0] = (c[0] + a[0]) mod 232
if c[0] < c_old[0] then
b[0]=1
else
b[0]=0
end if
c[1] = (c[1] + a[1] + b[0]) mod 232
if c[1] < c_old[1] then
b[1]=1
else
b[1]=0
end if
c[2] = (c[2] + a[2] + b[1]) mod 232
if c[2] < c_old[2] then
d=1
else
d=0
end if
// 最後のキャリーを加える。
c[0] = (c[0] + d) mod 232
if c[0] < c_old[0] then
b[0]=1
else
b[0]=0
end if
c[1] = (c[1] + b[0]) mod 232
if c[1] < c_old[1] then
b[1]=1
else
b[1]=0
end if
c[2] = (c[2] + b[1]) mod 232
【００８５】
上記の擬似コードにおいて、全ての値は、２３２−１よりも小さいと仮定する。
【００８６】
通例、暗号化システムにおいて実行される計算ステップは、逐次代入処理を含む。この処理において、状態変数配列Ｘは、反復的に逐次代入される。よって、計算ステップｉ＋１における状態変数配列Ｘのある位置にアサインされている値の少なくとも１つは、
−  計算ステップｉにおける状態変数配列Ｘのある位置にアサインされている値のうちの少なくとも１つ、および、
−  計算ステップｉにおけるカウンタ配列Ｃのある位置にアサインされている値のうちの少なくとも１つ、
の関数である。
【００８７】
例えば、Ｘｉ＋１は、一般式 Ｘｉ＋１＝ｆ（Ｘｉ，Ｃｉ） より、例えば、 Ｘｉ＋１＝ｆ（Ｘｉ＋Ｃｉ） のようにして、計算してよい。配列Ｘは、１つまたは複数の状態変数を含んでよいと解すべきである。
【００８８】
本発明の第２の態様による方法は、データのセットを識別するための識別値を決定し、データのセットは同時的に暗号化／復号化、例えば、数学的システムにおいて実行される数値計算が実行されている擬似乱数生成器によって同時的に暗号化／復号化が行われるようなシステム／方法で用いられることが望ましい。以下に記載の、本発明の第５の態様に関する議論を参照されたい。
【００８９】
カウンタのキャリーの更新と「ｇ関数」の組み合わせ
別の態様において、本発明は、暗号化システムにおける出力を生成する方法を供する。その方法は、本発明の第２および第５の態様に通底する一般概念を統合する。従い、本発明の第６の態様により、計算のシーケンスが逐次代入的手法で実行される。状態変数の配列、Ｘ、は繰り返し代入され、よって、イタレーション・ステップ、ｉ＋１、において状態変数の配列Ｘの、ある位置にアサインされている少なくとも１つの値は、以下に記すものの関数である。
−  イタレーション、ｉ、において状態変数の配列Ｘの、ある位置にアサインされた少なくとも１つの値、および、
−  イタレーション、ｉ、におけるカウンタの配列Ｃの、ある位置にアサインされた少なくとも１つの値。
カウンタの配列は、各イタレーションにおいて、次の関係により更新される。
【数１５】
2005529364.tif 000017
ここで、ｃｊ，ｉ＋１は、ステップｉ＋１において配列Ｃの位置ｊにアサインされた値であって、ｊは、ｊ＝０，．．．，ｎ−１である。ｎは、Ｃの次元（ディメンジョン）を示す。
ｃｊ，ｉは、ステップｉにおいて配列Ｃの位置ｊにアサインされた値であって、ｊは、ｊ＝０，．．．，ｎ−１である。
ａｊは、配列Ａの位置ｊにアサインされた値であって、ｊは、ｊ＝０，．．．，ｎ−１である。
ｂｊ−１，ｉ＋１は、ｊ＞０なるｊに対し、ｃｊ−１，ｉ＋１に関する計算より生じたキャリー値である。
Ｎｊは、定数である。ｊは、ｊ＝０，．．．，ｎ−１である。
ｉ＝０であるｉに対し、ｄｉは、ｄｉ＝ｄ０であり、これは、初期値である。
ｉ＞０であるｉに対し、ｄｉは、カウンタの配列Ｃｉの値に関して選択された計算、および／または、Ｃｉの関数より得たキャリー値である。
各イタレーションは次のステップを含む。
−  第１ビット・サイズ、Ａ、である第１数と、第２ビット・サイズ、Ｂ、である第２数とを乗算し、第３ビット・サイズ、Ａ＋Ｂ、である第３数を得る。第１数および第２数の少なくとも１つは、イタレーションｉにおいて状態変数配列Ｘのある位置にアサインされた少なくとも１つの値に等しいか、または、その値の関数であり、第３数は、Ｐ個の（最）上位ビットと、Ｑ個の（最）下位ビットを有する。ここで、Ａ＋Ｂ＝Ｐ＋Ｑであり、Ｑは、第１ビット・サイズＡおよび第２ビット・サイズＢのうち大きいものと等しく、Ｑ＝ｍａｘ（Ａ，Ｂ）である。
−  第３数を操作し、第４数を得る。これは、第３数のＰ個の（最）上位ビットの少なくとも１つの関数である。
第４数を用い、暗号化システムの出力の導出、および／または、状態変数配列Ｘに新しい値を代入（アサイン）する。
【００９０】
上記の方法により、本発明の第２の態様および第４の態様による方法の品質を兼ね備える。すなわち、予測不可能性の向上を目的とした、ビットの良好な混合(mixing)と、長いカウンタの周期性である。
【００９１】
本発明に係る第２および第４の態様に関連して上で述べた特徴および機能は、本発明に係る本態様において用いることができる。
【００９２】
本発明に係る本態様は、以下で、図１ないし図５に関連してさらに説明する。
【００９３】
５    同時的暗号化、および、識別値の生成
別の態様においては、本発明は、データのセットを識別するための識別値の決定、ならびに、データのセットの同時的暗号化、および／もしくは、同時的復号化の方法を供する。本方法は、正のリヤプノフ指数を示す数学的システムにおける数値計算を含むことが望ましい。さらには、以下のステップの少なくとも１つを含むことが望ましい。
−  数学的システムにおいて逐次代入的に数学的な計算を繰り返し実行する。ここでは、データのセットの様々な部分またはその変形物を計算への入力として用いてよく、
−  次の各計算、または、それらの幾つかの計算を行う。
−  計算により生じた数を抽出する。この数は、次のうちの少なくとも１つを表している。
ａ．数学的システムの解の少なくとも一部、および、
ｂ．数学的システムにおける数値解法に含まれる別の計算に利用可能な数。
−  任意で、得た数に基づいた識別値の更新値を決定する。ここでは、データのセットの様々な部分またはその変形物を、この決定ステップにおける入力として用いてよい。
−  生じる数に基づいてデータのセットの特定の部分を暗号化、および／または、復号化する。
ここでは、データのセット全体を暗号化、および／または、復号化するのに必要なイタレーションが実行される。
【００９４】
１つまたは複数の固定小数点変数を用いて再現性および計算速度に関連した有利性を備えてもよい。以下のセクションＢを参照されたい。暗号化／復号化の実行、および、識別値の同時的な生成におより、計算資源が節約される。
【００９５】
暗号化、および／または、復号化、ならびに、識別値の決定は、同一のプロセス、または、別個のプロセスで実行してよい。つまり、例えば、データのセット全体を処理して中間結果(intermediate result)を求めて、次にそれを用いて識別値、ならびに、暗号化された、および／もしくは、復号化されたバージョンを求める別の計算への入力とするような場合である。
【００９６】
本方法は、以下のステップを含むことができる。
−  離散的な項によって数学的システムを表現する。
−  数学的システムにおける少なくとも１つの変数を固定小数点数として表現する。
−  前記の計算を、その計算が、固定小数点数として表現された少なくとも１つの数を含む。固定小数点変数、および、数は、本発明に係る第１の態様に関連して先に議論され、また、セクションＢで議論されるものである。
【００９７】
データのセット全体の暗号化、および／または、復号化の後で、識別値に修正を加えてもよい。
【００９８】
暗号化／復号化、ならびに、識別値の決定は、同時的、または、並列的に行うことができる。識別値は、ハッシュ値、チェック・サム、または、ＭＡＣ（メッセージ認証コード）でよい。先の説明を参照されたい。ある場合には、識別値の計算と暗号化プロセスは逐次的に行われる。しかし、また、これらを１つの作業プロセス、または、並列的もしくは同時的インスタンスとして実行することも可能である。このことは、計算数の低減、ならびに／または、数学的システムを実現しているアルゴリズムが利用可能となった、もしくは、与えられた順に、データの系列の処理を可能とするか、または、より使いやすさを向上させるために行うことができる。識別値は、鍵を用いて計算することも、用いないで計算することも可能である。
【００９９】
識別値は、特定のメッセージに関連付けることができる。すなわち、メッセージは、アルゴリズムへの入力として使用されるべきである。先ずメッセージを暗号化してそれからメッセージ全体を再度読み取って識別値を計算する代りに、この２つの方法を組み合わせてもよい。すなわち、数学的システムにおける各イタレーションにおいて、擬似乱数を抽出し、メッセージと組み合わせて暗号化／復号化し、その後で識別値を更新することができる。各イタレーションの後、この中間的識別値が記録される。
【０１００】
本発明に係る本態様による方法においては、数学的システムを定めてよく、この数学的システムは、正のリヤプノフ指数を示すものである。本方法は、以下のステップを含んでよい。
１．鍵／シード(seed)の値を定める。
２．数学的システムに関する計算を実行する。および／または、
３．数学的システムおよびメッセージに関する計算を実行する。
４．擬似乱数を抽出する。
５．新しい、中間的識別値を算出する。
６．数学的システムおよびメッセージに関して実行する計算において、メッセージの全てを用いるまでステップ２ないし５を続ける。
７．中間的識別値に基づいて最終的識別値を算出する。
【０１０１】
別の実施形態においては、本方法は以下のステップを含んでよい。
１．鍵／シードの値を定める。
２．数学的システムおよびメッセージに関する計算を実行する。
３．擬似乱数を抽出する。
４．数学的システムおよびメッセージに関して実行する計算において、メッセージの全てを用いるまでステップ２と３とを続ける。
５．数学的システム内の変数から最終的識別値を定める。
【０１０２】
本方法においては、
−  メッセージは、平文、または、暗号文でよい。
−  メッセージを、全ての計算、または、計算の一部に、入力として用いてよい。
−  擬似乱数を用い、論理的、および／または、算術的演算によってメッセージを暗号化／復号化することができる。
−  少なくとも１つの変数は、固定小数点型で表現される。
【０１０３】
ブロック暗号の場合、擬似乱数は生成されない。その場合、上記のステップ３は、メッセージのブロックもしくは部分を操作して、それを暗号化／復号化するステップに置き換えられる。
【０１０４】
ある実施形態においては、識別値の算出は、鍵に依存する。
【０１０５】
正のリヤプノフ指数を示す数学的システムにおいて、計算は固定小数点演算により実行される。ここでは、（逐次暗号で言及したような）暗号化鍵は、初期値として用いられる。この、鍵、もしくは、その部分を用いて識別値も初期化される。
【０１０６】
その場合、識別値の決定、ならびに、データのセット、メッセージ、もしくは、平文の暗号化は以下のように行われる。
１．数学的システムについて逐次代入ステップを１ステップ実行する。
２．システムからｎビットの擬似乱数を抽出する。
３．データのセット、メッセージ、または、平文から次のｎビットを選抜する。
４．抽出されたビット、データから選抜されたビット、メッセージもしくは平文、ならびに識別値の古い値をもとに、関数ＦＨを用いて識別値の新しい値を求める。
５．ｎビットの擬似乱数と、選抜されたｎビットとに論理ＸＯＲ関数を用いる。それより、データのセット、メッセージ、もしくは、平文のｎビットを暗号化する。
６．全てのビットを暗号化するまで、ステップ１から５を繰り返す。
７．より多くの擬似ランダムなビットを抽出するために、さらにシステムに逐次代入ステップを用いてもよい。
８．識別値に関してさらなる計算を実行し、最終的識別値を求めてもよい。
【０１０７】
生成された識別値を暗号化メッセージと組み合わせることが可能である。そして、その結果を、例えば、インターネットを介して受信者へ送信することが可能である。
【０１０８】
復号化、および、識別値の再計算においては、暗号化の場合と同様、アルゴリズムを初期化する。このとき、以下のステップが実行される。
１．数学的システムにおける逐次代入ステップを１ステップ実行する。
２．数学的システムより、ｎ個の擬似ランダムビットを抽出する。
３．暗号化されているデータ／メッセージの次のｎビットを選抜する。
４．暗号化されているビットに論理ＸＯＲ関数を適用し、復号化する。
５．抽出されたビット、復号化すべきビット、および、古い識別値をもとに、関数ＦＨを用いて識別値の新しい値を求める。
６．全てのビットを暗号化するまで、ステップ１から５を繰り返す。
７．より多くの擬似ランダムなビットを抽出するために、さらにシステムに逐次代入ステップを用いてもよい。
識別値に関してさらなる計算を実行し、最終的識別値を求めてもよい。
セクション５終了。
【０１０９】
本発明は、本発明に係る全ての方法を実行する、デジタル・シグナル・プロセッサを備えた電子デバイスを含め、あらゆる装置、および、あらゆるコンピュータ・プログラムに及ぶ。本発明はまた、本発明に係るあらゆる方法、および／または、コンピュータ・プログラムによって導出されたデータに及び、また、そのようなデータを含んでいる信号（シグナル）もまた、添付の特許請求の範囲の範囲に含まれる。また、以下で議論する本発明に係る他の態様と関連して以下に記載するあらゆる特徴、方法ステップ、または機能性は、本発明に係る第１の態様による方法と組み合わせることができる。
【０１１０】
本発明に係る様々な態様で用いられる別の特徴および機能性、ならびに、本発明に係る態様に適用可能な定義について以下で議論する。以下の考察は、適切な範囲で、本発明に係る全ての態様／方法に適用される。
【０１１１】
Ａ          一般的定義および考察
本文においては、用語「擬似乱数」を用いる。この語は、再現可能な方法により、かつ／または、決定論的方法により生成される乱数を指す。すなわち、同一の鍵、または、シード値を、擬似乱数生成アルゴリズムの２つの実行において用いれば、擬似乱数生成アルゴリズムにおける２つの異なる実行において、同一の擬似乱数が得られる。
【０１１２】
一般に、数学的システムは、変数間の特定の関係性を表しているシステムを有することができる。例えば、この関係性は、２進（バイナリ）値といった、離散的な演算を含む数学的演算、および／または、論理演算により構成される。数学的演算は、乗算、除算、加算、減算、インボリューション(involution)、ＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴ、シフト（桁送り）演算、モジュラス（ｍｏｄ）（法）、打ち切り（トランケーション）、および／または、丸め（ラウンド・オフ）を含んでよい。
【０１１３】
数値計算は、数学的演算により数を処理する計算を含んでよい。
【０１１４】
ここでは、カウンタは、数学的システム内のパラメータとして働く変数と定義される。カウンタは、数学的関数によって継続的に逐次代入され、更新される。このような関数は、例えば、シンプルな加算、ｃｉ＋１＝ｃｉ  ＋ａ、であってよい。ここで、ｃｉ＋１は、イタレーション・ステップｉ＋１におけるカウンタ値であり、ｃｉは、イタレーション・ステップｉにおけるカウンタ値であり、ａは、ｃｉに加算される数である。あるいは、関数をより賢明なものとしてもよいし、また、関数に線形、および／もしくは、非線形演算、ならびに／または、論理演算を含んでよい。カウンタは、カウンタをパラメータとして用いる数学的システムから独立的に変化することが望ましい。
【０１１５】
ここでは、用語「データ・キャリア」または「コンピュータ読み取り可能なデータ・キャリア」は、コンピュータ、もしくは、コンピュータ・システムによりアクセス可能である、あらゆる、データを記録可能なデバイスもしくはメディアを指す。コンピュータ読み取り可能なデータ・キャリアは、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、もしくは、ＥＥＰＲＯＭといったメモリ、メモリー・スティック・カード(Memory Stick Card)、フロッピー、もしくは、ハード・ディスク・ドライブ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、データ・テープ、または、ＤＡＴテープを含んでよい。
【０１１６】
本発明にかかる方法により導出されたデータ、および、本方法で用いられるデータを含んでいる信号は、電線もしくは光ケーブル(optical wire)、無線もしくは光伝送を用いたワイヤレス通信手段といった、通信回線を介して送信される。例として、インターネット、ＬＡＮ（ｓ）(Local Area Network(s))、ＭＡＮ（ｓ）(Metropolitan Area Network(s))、ＷＡＮ（ｓ）(Wide Area Network(s))、電話回線、専用回線(leased lines)、専用回線(private lines)、ならびに、ケーブルもしくは衛星テレビジョン・ネットワーク、が挙げられる。
【０１１７】
ここでは、用語「電子デバイス」は、電子的または工学的インパルスによりデータ処理可能なあらゆるデバイスを指す。本発明に係る方法に適用可能な電子デバイスの例として、ＣＰＵといったプロセッサ、マイクロ・コントローラ、または、パーソナル・コンピュータやメインフレーム・コンピュータや携帯型デバイスやスマート・カード(smartcards)や例えば暗号化といった特定目的用に設計されたチップを含み数学的計算を実行するプロセッサもしくはその他の電子回路を備えたＤＳＰ（Digital Signal Processor）、コンピュータもしくはその他のあらゆるデバイス、が挙げられる。電子デバイスの別例として、計算および／もしくは演算を実行するように適化されたもしくは設計されたマイクロチップ、または、バイナリ演算を実行するチップが挙げられる。
【０１１８】
通例、プロセッサは次の項目により分類される。（ａ）処理するデータのサイズ。（ｂ）命令のサイズ。（ｃ）メモリモデル。これらの特性は通常、４ないし１２８ビットの間（例えば、１５、１６、３２、６４ビット）の様々なサイズでよい。また、２の冪に限らない。
【０１１９】
ここでは、用語「プロセッサ」は、あらゆるタイプのプロセッサを包含する。それは、以下のものを含み、また、それらに限定されるものではない。
−  「組み込みプロセッサ(embedded processor)」とも呼ばれる「マイクロ・コントローラ」。用語「マイクロ・コントローラ」および「組み込みプロセッサ」は通例、小さなプロセッサを指す。（通例大きなプロセッサよりも少ないプロセッサで構成され、消費電力も少ない。）マイクロ・コントローラ・アーキテクチャの例として以下のものがある。
−  Ｚ８０
−  ８０５１（例えば、インテル社製造）
−  ＣＰＵ８／６８００（例えば、モトローラ社製造の、例えば、６８ＨＣ０５、６８ＨＣ０８、および、６８ＨＣ１１）
−  ＣＰＵ３２／６８ｋ（例えば、モトローラ社製造の、６８０００ドラゴンボール(68000 Dragonball)）
−  一般的に、様々のコンピュータおよび制御系で用いられるその他のプロセッサ。アーキテクチャの例として以下のものがある。
−  アルファ(Alpha)  ２１ＸＸＸ（例えば、２１１６４、２１２６４、２１３６４）
−  ＡＭＤ  ｘ８６−６４（例えば、スレッジハンマー）
−  ＡＲＭ（例えば、ＡＲＭ１０、ストロングＡＲＭ(StrongARM)）
−  ＣＰＵ３２／６８ｋ（例えば、モトローラ社製造の、例えば、６８０００、６８０３０、６８０４０）
−  ＩＡ３２（例えば、インテル社製造（例えば、ｉ４８６、ペンティアム）、ＡＭＤ社製造（例えば、Ｋ６、Ｋ７）、および、サイリックス(Cyrix)社製造、ｘ８６ファミリー）
−  ＩＡ６４（例えば、ＨＰ／インテル社製造のイタニウム）
−  ＭＩＰＳ（例えば、ＳＧＩ社製造のＲ４０００、Ｒ１００００）
−  ＰＡ−ＲＩＳＣ（例えば、ＨＰ社製造の８０００）
−  パワーＰＣ（例えば、ＩＢＭ／モトローラ社製造のＧ３、Ｇ４）
−  スパーク（ＳＰＡＲＣ）（例えば、ＳＵＮ製造のウルトラ・スパークII(UltraSPARC II)、ウルトラ・スパークIII(UltraSPARC III)）
−  ＤＳＰ。その例として以下のものがある。
−  ＤＳＰ５６３００（モトローラ社製造）
−  ＭＳＣ８１００（モトローラ社製造）
−  ＴＩ  ＴＭＳ３２０Ｃ６７１１（テキサス・インスツルメンツ社製造）
【０１２０】
ここでは、用語「レジスタ」は、数のようなデータを記憶するメモリ空間を指す。例えば、メモリ空間には、ＣＰＵのレジスタ、ＲＡＭ、電子回路上のメモリ、または、ハード・ディスクやフロッピー・ディスクやコンパクト・ディスク（ＣＤ）やＤＶＤやデータ・テープやＤＡＴテープといったあらゆるデータ・キャリアがある。
【０１２１】
本発明はまた、独立した態様において、本発明に係る方法より導出したデータに関連している。方法に関連した発明においては、本発明はまた、独立した態様において、その方法を実行することに適したコンピュータ・プログラム、そのようなコンピュータ・プログラムがロードされているデータ・キャリアもしくはメモリ手段、ならびに／または、本方法を実行するコンピュータ・システムに関する。
【０１２２】
本発明に係る方法に含まれる、あらゆるそして全ての計算操作は、電子デバイスを用いて実行してよい。
【０１２３】
本発明にかかる独立した態様を含んだ、ある一の態様においては、数学的システムにおける数値計算を実行する方法が少なくとも１つの関数を有する。本方法は、以下のステップを有する。
−  離散項により数学的システムを表現する。
−  数学的システムの少なくとも１つの変数を固定小数点数として表現する。
−  前記の計算が、少なくとも１つの固定小数点数で表された変数を含んでいるようにして、前記計算を実行する。
−  前記計算より、生じる数を求める。この生じた数は、以下のうちの少なくとも１つを表す数である。
−  ａ．少なくとも、数学的システムに対する解の一部、および、
−  ｂ．数学的システムの数値的解法に含まれる別の計算で利用できる数。
本方法は、さらに以下のステップを有する。
−  データのセットを抽出する。このセットは、少なくとも以下のうちの１つを表している。
−    ｉ．生じた数の桁（デジット(digits)）の部分集合（サブセット）、および、
−  ｉｉ．生じた数から導出される数の桁のサブセット。
【０１２４】
数のサブセットは、その数の、ある部分とみなしてよく、必ずしもその数の全ての桁またはビットである必要はない。例えば、１６ビット数のうちの（最）下位の８つのビットは、１６ビット数のサブセットとみなしてよい。
【０１２５】
用語「抽出する」は以下を含み、かつ、それらに限定されるものではない。それらとは、例えば、鍵系列もしくは鍵系列の部分、または、計算過程における、その他のあらゆる最終的もしくは中間的結果といった、数またはサブセットを出力すること、例えば、サブセットに関する更なる計算のような、別途使用を可能にするために、数またはサブセットをレジスタに記録すること、である。
【０１２６】
数全体を抽出する代りに数の桁のサブセットを抽出することにより、例えば、暗号化および／もしくは復号化目的で、擬似乱数生成器において本方法を使用する場合、ランダムさの特性が向上する。さらには、サブセットだけが抽出されるので、数学的システムの内部状態に関し、より少ない情報が抽出されたデータのセットに含まれる。このことは、本方法を備えた暗号化／復号化システムのセキュリティを向上させる。
【０１２７】
数学的システムは、例えば、微分方程式系といった連続な系を有してもよいが、加えて、もしくは、その代りに、例えば写像(map)の場合のように、離散的な項で元々定義されている系を備えてもよい。数学的システムの関数の少なくとも１つが、非線形であってもよい。これについては、後にセクションＣで詳述する。
【０１２８】
通常、桁のサブセットは、ｍビットの数のｋビットを含んでいる（ｋ≦ｍ）。例えば、３２ビットの数から８つのビットを抽出する。サブセットが抽出される数、および／または、抽出されたデータのセットは、１つまたは複数の２進数、８進数、１０進数、１６進数等で表すことができる。ｋビットは、数の（最）下位ビットでもよいし、または、ビットが抽出される数に含まれる所定の位置もしくはランダムな位置から選抜されたｋ個のビットでもよい。例えば、６４ビットの数から、ビット番号４２番、４７番、５３番、５５番、５６番、５７番、６１番、および、６３番を抽出してもよいし、または、ビット番号４７番ないし５４番を抽出してもよい。
【０１２９】
本発明に係る方法においては、１つまたは複数の計算を浮動小数点演算で実行してもよい。従い、数学的システムの少なくとも１つの変数を固定小数点数で表すステップは、浮動小数点型の数を整数型の数に変換するステップと、任意的に、例えば、打ち切り（トランケート）のような、この整数に対する特定の操作を実行するステップと、この整数を浮動小数点型の数に戻すステップを備えてよい。
【０１３０】
本発明に係る方法は、暗号化および復号化、電波の変調、映像および音声信号におけるカオスの同期化によるノイズの低減、制御系における、データ圧縮、透かし、例えば、音声ファイルの（最）下位ビットに文書を記憶することでデジタル送信において文書を隠す、といった電子迷彩技術、に用いることができる。
【０１３１】
多くのＳＩＭカードやスマート・カードは電力解析攻撃に対する弱さを露呈する。これは、電力消費がプロセッサにより実行される算術関数と直接的に関係する、という事実を利用している。この攻撃を回避するには、本明細書に記載の方法の１つを実行するプログラムが、系統だった電力消費を乱れさせることを目的とした関数である、何らかの演算をランダムに実行すればよい。擬似乱数生成器を用いて実行する演算を決定することができる。
【０１３２】
擬似乱数生成器は、他の暗号化アルゴリズムの鍵生成に用いることができる。つまり、非対称、もしくは、公開鍵アルゴリズムである。例えば、少なくとも１つの素数を計算することに用いられる擬似乱数生成器を用いることができる。このように、ＲＳＡアルゴリズムにおいて用いられる公開鍵と秘密鍵のペアを生成することも可能である。
【０１３３】
ここでは、用語「生じる（生じた）数」は、計算で生じた、あらゆる数を指す。複数の生じる数を求めてもよい。上記のように、生じる数は、数学的システムに関する解、および／または、中間結果の一部であってよい。すなわち、数学的システムにおけるいずれかの変数もしくはパラメータにアサインされる数、または、その他の、計算に用いられる変数もしくはパラメータであってよい。数学的手法の実施に際し、生じる数もしくはその一部を抽出してもよい。例えば、暗号化／復号化システムで用いる擬似乱数として抽出してもよい。あるいは、１つもしくは複数の数学的、ならびに／または、論理的演算を、１つもしくは複数の、生じる数に対して実行し、別に、抽出される数を得てもよい。生じる数の２進数表現において、選抜された、全てのビット、または、ビットの一部を抽出してよい。計算で得た数のビットのうちから選抜されたビットで生成した数も、生じる数と称してよい。従い、用語「生じる（生じた）数」は、計算にて得られる数のあらゆる部分を含む。
【０１３４】
先に議論したように、本発明に係る方法は、暗号化技術において有用である。例えば以下のような実装例において有用である。対称暗号アルゴリズム、公開鍵（もしくは、非対称鍵）アルゴリズム、セキュアもしくは暗号化ハッシュ関数、または、メッセージ認証コード（ＭＡＣ）。これらアルゴリズムは、例えば、以下の１つまたは複数のタスクの遂行に用いられる。
−  デジタル・データの守秘性を確保し、未許可のアクセスからデータを保護する。
−  デジタル・データの完全性を確保し、情報の正確性、または、改ざんされていないこと、を保証する。
−  例えば、特定のタスク、または、操作の実行をゆるす、許可。
−  他の団体（パーティ）の身分（アイデンティティ）を検証するユーザ認証や、データの出所（オリジン）を検証するデータ発信元認証といった、認証。
−  電子取引への関与を証明する、否認防止。例えば、第１の人間Ａが第２の人間Ｂにメッセージを送り、その後でメッセージの送信を否定することを防止する。このことを目的として電子署名が用いられる。電子署名の生成には、公開鍵アルゴリズム、および、ハッシュ関数の使用が含まれることがある。
【０１３５】
本発明に係る方法は、所謂、ハッシュ関数にも用いることができる。ハッシュ関数は、一種の電子指紋を提供する。少量のデータにより、他のデータ、通例、当該少量のデータよりもかなり大きなデータのセットを識別する。ハッシュ関数は、通例、公開関数(public functions)であって、秘密鍵を含まない。また、ハッシュ関数は、認証および完全化の手段となる。この関数は、しばしば、電子署名アルゴリズムやパスワード保護に不可欠である。というのは、パスワードのハッシュ値を、パスワードそのものの代りとしてパスワードのコントロールに用いることができるからである。この場合、パスワードそのものは不要であって、ハッシュ値のみを、例えば、通信ネットワークを介して送信する必要がある。
【０１３６】
入力として秘密鍵を用いるハッシュ関数を、しばしばＭＡＣアルゴリズムもしくは「鍵付きハッシュ関数」と称される。ＭＡＣアルゴリズムは、認証性およびデータの完全性を保証するために用いられる。このアルゴリズムは、出所であることを主張している人間もしくは団体(entity)から、メッセージが送られていることを保証し（認証）、かつ、そのメッセージが送信の途中で改変されていないことを保証する（完全性）。これは、ＩＰｓｅｃプロトコルで用いられる。（ＲＦＣ２４０１参照。２００３年６月６日時点で、<http://www.rfc-editor.org>より入手可能。）これは、例えば、ＩＰパケットが、送信されてから最終目的地に到達する間に修正されていないことを保証する。また、あらゆる種類の銀行間転送プロトコルでも用いられる。
【０１３７】
先で議論したように、本発明に係る方法を、ハッシュもしくはＭＡＣアルゴリズムで実施してもよい。ハッシュもしくはＭＡＣアルゴリズムは、任意長のデータ量に関するチェック・サムを計算し、結果としてチェック・サムを出力する。この処理は非可逆的（一方向的）であり、かつ、入力値の小さな変化により著しく異なる出力がなされるべきである。従って、入力されるデータに対する鋭敏性は、高くあるべきである。ハッシュ関数は鍵をシード値として用いないが、ＭＡＣアルゴリズムはこの、アルゴリズムに関するシード値を表している、もしくは、決定する、鍵を用いるため、結果は鍵に従属する。鍵の代りに、ハッシュ関数は、例えば、数、πの、あるビット、といった定数値に依存する。あるいは、ハッシュ関数が適用されるデータの部分をシード値として用いてもよい。
【０１３８】
ハッシュ／ＭＡＣアルゴリズムは、以下のようにして実施される。
−  本アルゴリズムでは、ロジスティック写像の形をした数学的システムを用いる。このロジスティック写像は、ｘｎ＋１＝λｘｎ（１−ｘｎ）の形式を有し、ここで、λはパラメータである。別のカオス系（カオス・システム）、例えば後で詳述するローレンツ系を用いてもよい。
−  アルゴリズムの結果は、チェック・サムを計算するメッセージｍに依存するべきである。このメッセージは、システムの構成要素としてシステムに組み込まれる。例えば、メッセージと動的変数ｘとのある種のカップリングは、ｘｎ＋１＝λｘｎ（１−ｘｎ）＋ε（ｘｎ−ｍｎ）、のようにして実行される。
−  パラメータλおよびε、ならびに、初期値ｘ０は、予め定められ、かつ／または、メッセージから導出される。ＭＡＣアルゴリズムの場合、パラメータλおよびε、ならびに、初期値ｘ０は、秘密鍵より、完全に、または、部分的に決定される。
−  メッセージの最後に到達するまで、システムは逐次代入を行う。ｘの最後の計算値、または、（最）下位桁といった、ｘの最後の計算値の部分が、例えば、ハッシュ値、ＭＡＣ、または、チェック・サムとして示される。あるいは、生じた数を抽出する前に、さらに幾つかのイタレーションを実行してもよい。ｘの最後の計算値の抽出に加え、または、代りに、計算において無視されたビットをハッシュ値として抽出してもよい。
−  メッセージｍを動的システム(dynamical system)に導入する方法を変更することができる。例えば、各イタレーションにおいて、メッセージの一部をｘ変数に影響させてもよい。このような影響作用は、例えばメッセージのあるビットとｘの（最）下位桁とのＸＯＲをとることで実現することができる。
【０１３９】
ハッシュ／ＭＡＣ関数に関するさらなる詳細について、ブルース・シュナイアー著、アプライド・クリプトグラフィ、第２版(Applied Cryptography by Bruce Shneier, Second Edition, John Wiley & Sons, 1996)を参考文献に挙げておく。
【０１４０】
本発明に係る方法を利用可能な分野の１つは、非対称アルゴリズムとも称される公開鍵暗号の分野である。復号化に用いる鍵は、暗号化に用いる鍵とは異なる。例えば、鍵生成機能が一対の鍵を生成する。１つは暗号化のための鍵であり、もう１つは復号化のための鍵である。鍵の１つは、秘密状態で、もう１つは公開される。例えば、公開鍵はインターネットを介して暗号化されていない形で送信されてよい。暗号化の鍵には、カオス系に関するパラメータ、および／または、初期条件が含まれる。平文を用いてカオス系を調節する。この系は秘密鍵で始動させない限り、回復不可能である。復号化には、暗号化に用いた系の動力学とは逆の動力学を備えた数学的システムを用いる。
【０１４１】
Ｂ          固定小数点変数
先のセクション１において固定小数点変数について言及したが、ここで、さらに議論する。先ず、特定の暗号化方法と関連して現われる浮動小数点変数の不利点に関する短い議論から始める。
【０１４２】
数学的システムの数値解法において浮動小数点変数を用いることで、予測不可能な打ち切り（トランケーション）、および／または、丸め誤差（ラウンド・オフ・エラー）が生じることがある。解くべき数学的システムが非線形、特に、システムがカオス的であるような場合、全ての積分ステップ(integration step)において解の正確性が、決定的に重要となる。なぜなら、あるステップにおける僅かなずれによって、後続のステップでは非常に大きなずれがもたらされるからである。いかなる、そして、あらゆる計算においても同様の方法で首尾一貫的に打ち切り、および／または、丸め誤差が作られるならば、同じ初期条件に基づく２つの解は同一であり、よって、この計算は再現可能である。しかし、殆どの場合、浮動小数点数の打ち切り、および／または、丸め誤差は、ソフトウェアのみならずそのソフトウェアが実行されているハードウェアでも完全には制御されない。従って、打ち切り、および／または、丸め誤差は、ハードウェアに依存する。その結果、打ち切り、および／または、丸め誤差は、２つの異なるハードウェアのプロセッサでは異なって作られる。殆どの計算にとって、このことは重要なことではない。なぜならば、打ち切りや丸めによって作られる不正確性は、計算に要求されている精度よりもはるかに小さなオーダだからである。しかし、例えば、カオス系の解においては、打ち切りの実施による小さなずれが、後の計算ステップにおける解の大きなずれをもたらす。
【０１４３】
よって、ハードウェアが作る打ち切り、または、丸め誤差をソフトウェアによって制御可能とすることを目的として、本願の発明者は、固定小数点変数の利用を提案する。
【０１４４】
一般に、固定小数点数のタイプは、Φ（α．β）として示される。ここで、αは整数部を収納するために用いられるビット数で、βは、小数部を収納するために用いられるビット数である。αおよびβの値、ならびに、それによる小数点の位置は、通常、予め定められ、かつ、固定される。固定小数点数は、符号なしでも符号付きでもよく、それぞれの場合において、Φを、ＵまたはＳと示す。後者の場合、符号を収納するビットが必要で、よって、Ｓ（α．β）を収納するには、α＋β＋１ビットが必要である。Ｕ（α．β）の範囲は、［０；２α−２−β］であり、Ｓ（α．β）の範囲は、［−２α；２α−２−β］である。従って、固定小数点数の分解能は、２−βである。
【０１４５】
固定小数点数の小数部セパレータの位置は、数の整数部の桁と小数部の桁との間の重み付け(weighting)である。最良の計算結果を得るには、通常、小数部セパレータよりも後の桁を可能な限り多くとって最高の分解能を得ることが望まれる。しかし、整数部にも十分な桁を割り当てて、オーバーフローを起こさないことを保証することも重要となる場合もある。オーバーフローとは、ロードまたは計算される値が大きくてレジスタに収納できない値を、レジスタにロード、または、計算することである。オーバーフローによって、（最）上位ビット（桁）、および、起こりうる符号の変化が失われる。
【０１４６】
本発明に係る様々な態様においては、小数部セパレータの位置は、設計時(at design time)に割り当てられる。正しい位置を選択するために、小数部セパレータの位置を決定すべき数のとり得る範囲を分析することが望まれる。起こりうる最も大きな正の値と最も小さな負の値を決定し、それら２数の絶対値うちで大きい数を次式に代入し、αの値を決定する。
【数１６】
2005529364.tif 000018
【０１４７】
小数点の位置を、異なる固定小数点変数間で違えてもよい。しかし、加算および減算演算では、類似する位置を有する数の入力が要求される。よって、時には小数点の位置をずらす必要がある。ｎビットだけ右方向に桁送りする(shift)ことは、Φ（α．β）からΦ（α＋ｎ．β−ｎ）への変換に対応する。ｎビットだけ左方向に桁送りすることは、Φ（α．β）から、Φ（α−ｎ．β＋ｎ）への変換に対応する。符号を持たない数に対しては、論理桁送り演算(logical shift operation)によって変換が行われ、また、符号付きの数に対しては、算術桁送りによって変換が行われる。
【０１４８】
固定小数点数に対する数学的演算、加算、減算、乗算、および、除算は、平易な整数演算(plain integer operation)として実行される。加算および減算演算は、キャリー（繰り上がり）のため、Φ（α＋１．β）のサイズの数を生ずることがある。しかし、そのような結果も通常、打ち切られて入力と同じ形式の数にされる。
【０１４９】
乗算および除算は、小数部セパレータの類似の位置についての議論の必要はない。しかし、除算の前に、分子は、分母および結果の長さの２倍の長さを持たねばならないので、拡大される。結果は、次のような形式、Ｓ（α．β）・Ｓ（ｃ．ｄ）＝Ｓ（α＋ｃ＋１．β＋ｄ）、つまり、Ｓ（α＋ｃ＋１．β＋ｄ）／Ｓ（α．β）＝Ｓ（ｃ．ｄ）を有する。符号を持たない乗算および除算では、Ｓ（α＋ｃ＋１．β＋ｄ）は、Ｕ（α＋ｃ．β＋ｄ）に置き換えられる。予め定められている、結果の形式と比較して乗算で超過する桁は、対象となっているレジスタのサイズに適合するように切り取られる(cut off)。
【０１５０】
固定小数点数は、固定小数点数の整数部を一のレジスタで表し、別のレジスタで小数部を表し、取り扱ってもよい。
【０１５１】
さらなる、固定小数点演算に関する情報は、Ｒ．イェーツ著、「フィックスド・ポイント・アリスメティック：アン・イントロダクション」("Fixed-Point Arithmetic: An Introduction" by R. Yates)に存在する（本文は、２００３年６月６日現在、<http://personal.mia.bellsouth.net/lig/y/a/yatesc/fp.pdf> で見ることができる。）。
【０１５２】
ここでは、固定小数点変数は、架空の小数部セパレータを備えた整数型の数として定義される。整数は、小数部セパレータの後の桁を持たない数と定義される。よって、実数は、架空の小数部セパレータ（もしくは小数点）を、整数内の、固定されている所定の位置に挿入することで表される。この位置は、数に対する数学的演算の結果、変動してもよい。また、この位置は、論理演算を用いることで変更されてもよい。
【０１５３】
上の議論から想起されることだが、固定小数点数とは整数であって、それに架空の小数部セパレータが付けられている。この数は、小数部セパレータよりも前にあるビットを指す、所謂、「整数部」と、小数部セパレータよりも後にあるビットを指す、所謂、「小数部」を有する。ここでは、ビットも、桁とみなしており、また、その逆の場合も同様である。
【０１５４】
固定小数点数演算を含むコンピュータ・プログラム、または、固定小数点演算を実行する電子回路もしくはデバイスにおいては、小数部セパレータの適切な位置を決定するための手段を配してもよい。よって、プログラム、回路、または、デバイスは、演算の間、起こりうるオーバーフローを検知してよい。そして、起こりうるオーバーフローを検知した場合には、小数部セパレータの一方の側のビット数を変更してよい、すなわち、問題にしている変数もしくは複数の変数を記録しているレジスタにおける小数部セパレータの位置を変更してよい。この変更は、小数部セパレータの位置を、左、または、右へ、１つ、または、それよりも多く移動させることで行うことができる。小数部セパレータの右側にできる限り多くのビットを費やし、レジスタにおいて未使用となり得るビット数を最小限にとどめ、よって、計算において適切な精度を得ることが望ましい。小数部セパレータの位置を変更することによって、起こりうるオーバーフローを検出するための付加される演算が必要となるために幾分計算速度が損なわれるかもしれないが、このコンピュータ・プログラム、回路、または、デバイスの組み込まれた用例の設計者またはプログラマが、設計またはプログラミングの段階において精度およびオーバーフローについて考慮する必要性なしで、計算の精度が最適化され、同時にオーバーフローの危険性が取り除かれるか、もしくは、低減される。代りに、または、加えて、計算の中の、いつ、もしくは、どこでオーバーフローが起こるのか、または、起こりそうか、を求めるテスト・プログラムを備えてもよく、それによって、プログラムのプログラマまたは設計者は、オーバーフローを起こさないように、１つ、もしくは、より多くの変数の小数部セパレータの位置を修正することができる。それにより、最終的な実施においては、オーバーフローの可能性について判定する必要がなくなる。だが、最終的な実施においても、オーバーフローの可能性の判定を設け、さらなるセーフガード機構としてもよい。また、プログラマまたは設計者は、計算における、固定的な、所定の段階において、小数部セパレータの変更を実行することを選択してもよい。
【０１５５】
先の議論のように、実数は、１つ、または、複数の固定小数点数によって表現することができる。同様、複素数、ｃ＝ａ＋ｉｂ、ここでは、ｉ２＝−１、も、１つ、または、複数の固定小数点数によって表すことができる。例えば、実部ａ、および／または、虚部ｂを固定小数点数として表現する。実部、および、虚部のうち１つだけが固定小数点数として表されている場合、もう一方は、浮動小数点もしくは整数といった別のタイプの数で表してよい。
【０１５６】
本発明に係る方法においては、固定小数点数として表されている変数が含まれる計算は、別の型の変数についての計算も含むことがある。その、１つまたは複数の変数は、浮動小数点数や整数といった別種の数で表されている。
【０１５７】
固定小数点数の使用は、浮動小数点数に比べて、固定小数点数演算において発生する丸め、および／または、打ち切り誤差についてあらゆるプロセッサで同様に定義される点で有利である。固定小数点変数を使用することにより、小数(decimal number)は、数の中に架空の小数部セパレータが配された整数型の数として表すことができる。浮動小数点変数が使用される場合においては、打ち切り／丸め誤差は、別種のプロセッサでは等しく実行されない。
【０１５８】
打ち切り／丸め誤差の結果が制御可能、または、予測可能なため、打ち切り／丸め誤差に鋭敏な数学的システムにおける数値計算を再現的方法で実行することができる。よって、例えば非線形系、特にカオス系を、再現的方法で数値的に解くことができる。このことは、誤り(inaccuracies)を防ぐためにフィードバックもしくは訂正のアルゴリズムまたはレジスタを必要とせず、または、暗号化におけるシステムの解と復号化におけるシステムの解とを確実に等しくするための同期化技術を必要とせずに、暗号化／復号化アルゴリズムにおける擬似乱数生成器においてカオス系を用いることを可能とする。さらには、このことは、計算、擬似乱数生成、および／または、暗号化／復号化アルゴリズムを、フィードバックもしくは訂正アルゴリズムまたは同期化技術を備えたアルゴリズムと比較して高速化することに寄与する。また、暗号化データと共に同期化データを送信する必要がない。同期化データは解きに暗号化データに匹敵する大きさとなり、このことが、例えば、インターネットを介してデータを送信する際の帯域幅の不足に起因する大きな問題となることがある。また、このようなデータの送信は、システムのセキュリティを危険に晒している。問題にしている変数に浮動小数点変数を含んでいる方法における計算よりも、計算を高速に実行する。なぜならば、固定小数点数を含んでいる計算においては、ハードウェアのプロセッサは、演算を整数演算として実行する。整数に関する計算は、一般に浮動小数点数に関する計算よりも高速である。
【０１５９】
Ｃ          特に暗号化用途に関し、利用可能な数学的システムおよびそのコンピュータでの実施
ここに示す方法においては、数学的システムは、離散系、または、連続系でよい。様々なタイプの数学的システムを以下で議論する。
【０１６０】
計算には、少なくとも、第１および第２固定小数点数が含まれてよい。固定小数点数はそれぞれ小数部セパレータを有し、ここで、第１固定小数点数の小数部セパレータは、第２固定小数点数の小数部セパレータの位置とは異なる位置に配されている。第１および第２固定小数点数の小数部セパレータは、選択された位置に配することができる。
【０１６１】
生じる数は、以下の数で構成されるグループから選択された変数として表してよい。
整数、
浮動小数点数、および、
固定小数点数。
【０１６２】
一般に、数学的システムは、１つもしくは複数の微分方程式、または、１つもしくは複数の離散写像を含んでよい。微分方程式の場合、数学的システムは、１つもしくは複数の常微分方程式、および／または、１つもしくは複数の偏微分方程式を含んでよい。離散写像の場合、数学的システムは、１つもしくは複数の面積保存写像、または、１つもしくは複数の面積非保存写像を含んでよい。数学的システムの関数の少なくとも１つが非線形であってよい。
【０１６３】
本方法は、積分方程式を含む、他のタイプの関数または方程式に用いることもできる。少なくとも１つの非線形微分方程式または写像は、カオス的挙動を示してよい。すなわち、これは、少なくとも１つの正のリヤプノフ指数を有してよく、この場合、本方法は数学的計算の間に少なくとも１回、リヤプノフ指数を計算すればよい。カオス的挙動を示す数学的システムの場合、本方法を、例えば、暗号化／復号化法における擬似乱数生成法に有利に用いることができる。少なくとも１つのリヤプノフ指数は、数学的計算の間に少なくとも１度計算し、数学的システムがカオス的挙動を示すかどうかを判断すればよい。そうでない場合、例えば、算出したリヤプノフ指数が正でない場合、計算を遮断し、初期値および／または別のパラメータで再開すればよい。
【０１６４】
少なくとも非線形微分方程式または写像は、少なくとも１つの状態変数、Ｘ、について支配的であることが望ましい。Ｘは、少なくとも１つの従属変数、ｔ、の関数であってよい。
【０１６５】
より具体的には、数学的システムは、１つまたは複数の以下のシステムを含んでよい。
−  連続的微分方程式は、以下のものを含む。
−  ナビエ−ストークス方程式のような偏微分方程式。
−  以下のものを含む、常微分方程式。
−  散逸流のような、自立系。これには、ローレンツ系、結合ローレンツ系(coupled Lorenz system)、レスラー系、結合レスラー系(coupled Rossler system)、ハイパーカオス・レスラー系、ウエダ系、最も単純な二次の散逸性カオス流、最も単純な区分的線形散逸性カオス流、が含まれる。
−  天体力学からのＮ体問題（Ｎ≧３）を含む、ハミルトン系。
−  強制ダフィング方程式、強制負抵抗振動子、強制ブラッセレータ(forced Brusselator)、強制減衰振子方程式、結合振子、２つの谷にわたる強制振動子(forced double-well oscillator)、強制ファン・デア・ポール振動子といった強制系を含む、非自律系。
−  遅れを持つロジスティック方程式、人口モデルを含む、遅れを持つ微分方程式。
−  以下のものを含む、離散写像。
−  以下のものを含む、面積保存写像および面積非保存写像。
−  テント写像、非対称テント写像、２ｘモジュロ１写像(2x modulo 1 map)、ならびに、区分的線形写像の高次一般化および／もしくは結合(higher order generalizations and/or couplings of piecewise linear maps)。
−  ロジスティック写像、エノン写像、例えば、Ｎ結合ロジスティック写像、Ｎ結合エノン写像といった多項式写像の高次一般化および／もしくは結合を含む、多項式写像（二次または二次より高次）。
−  サイン−サークル写像(Sine circle map)、サイン写像(Sine map)、チリコフの標準写像(Chirikov standard map)、シナイ写像(Sinai map)、標準写像、ならびに、三角写像の高次一般化、および／もしくは、結合を含む、三角写像。
−  ベルヌーイ・シフト、小数シフト(decimal shift)、馬蹄写像、イケダ写像、パイこね写像(pastry map)、デジタル・フィルタのモデル、任意の一次元写像からの二次元エノン型写像の構成、デボゲレール写像(DeVogelaere map)を含む、その他の写像。
−  セルラー・オートマトン。
−  ニューラル・ネットワーク。
【０１６６】
上記のレスラー系は、以下に示す形式を有する。
【数１７】
2005529364.tif 000019
ここで、一般的なパラメータ値は、ａ＝ｂ＝０．２、ｃ＝５．７である。レスラー系については、Ｏ．Ｅ．レスラーの論文(O. E. Rossler, Phys. Lett. 57A, 397-398 (1976))にさらに詳しく記されている。
【０１６７】
上記のエノン写像は、以下に示す形式を有する。
【数１８】
2005529364.tif 000020
ここでの一般的なパラメータ値は、Ａ＝１．４、ｂ＝０．３である。さらなる詳細については、Ｍ．エノンの論文(M. Henon, Commun. Math. Phys. 50, 69-77 (1976))を参照されたい。
【０１６８】
ｘｎ＋１＝μｘｎ（１−ｘｎ）の形を有するロジスティック写像を用いてもよい。しばしば、以下に示す形式を有し、猫写像とも称されるアノソフ写像(Anosov map)を用いてもよい。
【数１９】
2005529364.tif 000021
【０１６９】
この写像は、次の２つのステップを有する。それらは、ｉ）線形行列乗算と、ｉｉ）非線形モジュロ（法）(modulo)演算である。アノソフ写像を任意の数の変数に一般化することが可能である。また、この行列は、面積の保存、および、系（システム）に関し少なくとも１つの正のリヤプノフ指数の存在、が要求されるという制約のみで限定される、任意の係数を有することができる。これらの指数は、このような系（システム）に対しては解析的に求めることができる。さらなる詳細については、Ａ．Ｊ．リヒテンベルグとＭ．Ａ．リーベルマンの共著である、レギュラー・アンド・カオティック・ダイナミクス、シュプリンガー  １９９２年  （頁３０５）(A. J. Lichtenberg and M. A. Lieberman, Regular and Chaotic Dynamics, Springer 1992 (p.305))にリファレンスが付されている。
【０１７０】
任意の高次元のシステムは、サブシステムと呼ばれる低次の結合システムで構成することができる。サブシステムは、同一であっても異なってもよい。これらサブシステムは、例えば様々なサブシステムにおいて異なるパラメータを用いることで違えてもよいし、かつ／または、異なる方程式を採用することで違えてもよい。結合（カップリング）は、個々のサブシステムにおける１つまたは複数の状態変数の関数とすることができる。局所的、および、大域的カップリングを含む、様々なタイプの結合（カップリング）が存在する。
【０１７１】
局所的結合とは、個々のサブシステムが結合により、全システムに含まれる、全てのではなく、幾つかのサブシステムから影響を被ることを意味する。局所的結合の例として、一方向結合と双方向結合がある。これらは、それぞれ、結合が、１つおよび２つのサブシステムの関数であることを意味する。これらのタイプを用いることで、マップ・ラティス(map lattice)を構成することができる。一方向結合を有するこのようなシステムの例に、次に示すＮ次元システムがある。
【数２０】
2005529364.tif 000022
ここで、ｆ１．．Ｎは、数学的関数であり、ε１．．Ｎは、結合定数である。数学的関数および結合定数は、各サブシステムに対して異なってよい。
【０１７２】
通常、拡散結合(diffusive coupling)となるように局所的結合を選択することができる。これは、２つのサブシステム間の際に比例する結合タイプを指す。これは、以下のように定義される。
【数２１】
2005529364.tif 000023
ここで、ＸとＹは、少なくとも一次元である２つのサブシステムであり、εは、結合定数の行列である。
【０１７３】
用語、大域的結合とは、全てのサブシステムが互いに結合している状態を指す。これは、時には、全対全結合(all-to-all coupling)と称される。例えば、これは、結合を平均場、すなわち、全てのサブシステムの平均、の関数とすることで実現可能である。これは、以下のように定義される。
【数２２】
2005529364.tif 000024
ここで、Ｘは、少なくとも一次元のサブシステムであり、εは、結合定数である。
【０１７４】
また、結合の関数は、あらゆる、サブシステムの線形または非線形関数でよい。
【０１７５】
局所的双方向結合の例は、次式で与えられる。
【数２３】
2005529364.tif 000025
【０１７６】
別のタイプの局所的結合は、一方向局所的結合である。ここでは、所与の状態が、隣接する状態の１つと結合されている。例えば、これは、次のように定義される。
【数２４】
2005529364.tif 000026
ここで、ｇは、線形または非線形関数のいずれかである。線形の場合には、システムは次のように簡単に定義される。
【数２５】
2005529364.tif 000027
【０１７７】
また、大域的結合を用いることもできる。つまり、個々のシステムそれぞれが、他の全てのシステムと結合している。このことは、次のようにして行われる。
【数２６】
2005529364.tif 000028
ここで、ｇは、システム内の全ての状態の関数であり、ｇは、線形または非線形関数でよい。また、ｇは、Ｍ個の状態のサブセットの、線形または非線形関数でもよい。
【０１７８】
また、結合写像の一種である、マップ・ラティスを用いてもよい。下に示す例においては、ｘｉは、（点（ポイント）のＮ次元配列で表される）ラティスの変数を示す。ラティスは、Ｍ個の点（ポイント）を有する一次元（１Ｄ）配列である。ラティス上の各ポイントは、→の右側の関数によって更新される。ここで、関数ｆは、例えば、ロジスティック写像でよい。見てとれるように、ラティス上の近隣の点は線形的に結合しており、線形結合が、パラメータγとεで調整される。境界条件は、ラティスの要素１とＭの取り扱い方について言及する。
【数２７】
2005529364.tif 000029
【０１７９】
最後には、ある単純な三次元の（３Ｄ）流れ方程式(flow equation)を用いてもよい。系は通常、ローレンツやレスラーの系よりも少ない項を有する。つまり、５つの項と２つの非線形性か、６つの項と１つの非線形性である。それに対し、ローレンツおよびレスラーの系は、それぞれ７つの項を有する。Ｊ．Ｃ．スプロットの論文(J. C. Sprott, Phys. Rev. E 50, R647-R650 (1994))を参照されたい。適切なシステムを、次のリストに与える。
dx/dt = y, dy/dt = -x+ yz, dz/dt = 1 - y2
dx/dt = yz, dy/dt = x - y, dz/dt = 1 - xy
dx/dt = yz, dy/dt = x - y, dz/dt = 1 - x2
dx/dt = -y, dy/dt = x + z, dz/dt = xz + 3y2
dx/dt = yz, dy/dt = x2 - y, dz/dt = 1 - 4x
dx/dt = y + z, dy/dt = -x + 0.5y, dz/dt = x2 - z
dx/dt = 0.4x + z, dy/dt = xz - y, dz/dt = -x + y
dx/dt = -y + z2, dy/dt = x + 0.5y, dz/dt = x - z
dx/dt = -0.2y, dy/dt = z+ z, dz/dt = x + y2 - z
dx/dt = 2z, dy/dt = -2y + z, dz/dt = -x + y + y2
dx/dt = xy - z, dy/dt = x - y, dz/dt = x + 0.3z
dx/dt = y + 3.9z, dy/dt = 0.9x2 - y, dz/dt = 1 - x
dx/dt = -z, dy/dt = -z2 - y, dz/dt = 1.7 + 1.7x + y
dx/dt = -2y, dy/dt = x + z2, dz/dt = 1 + y - 2x
dx/dt = y, dy/dt = x - z, dz/dt = x + xz + 2.7y
dx/dt = 2.7y + z, dy/dt = -x + y2, dz/dt = x + y
dx/dt = -z, dy/dt = x - y, dz/dt = 3.1x + y2 + 0.5z
dx/dt = 0.9 - y, dy/dt = 0.4 + z, dz/dt = xy - z
dx/dt = -x - 4y, dy/dt = x + z2, dz/dt = 1 + x
【０１８０】
別の数学的システムについては、以下で、図２８を参照して説明している。以下に記した図の説明を参照されたい。
【０１８１】
ローレンツ系は、以下に記す微分方程式を有する。
【数２８】
2005529364.tif 000030
ここで、Ｘ＝（ｘ，ｙ，ｚ）は、状態変数であり、ｔは、従属変数であり、σ、ｒ、および、ｂはパラメータである。
【０１８２】
次の条件を満足する場合、
【数２９】
2005529364.tif 000031
ローレンツ系の定常点(stationary points)は、安定ではない。この場合、ローレンツ系は、カオス的挙動を示す可能性が高い。パラメータは、定数でも変数でもよい。変数型パラメータは、例えば、擬似乱数生成法や暗号化／復号化法において有用と思われる、もっと予測不可能な計算結果に寄与する。
【０１８３】
非線形写像の場合、計算は、非線形関数の数値的な逐次代入（イタレーション）を含んでよい。このイタレーションは、状態変数Ｘの初期条件Ｘ０に基づく。
【０１８４】
計算を行うステップは、１つもしくは複数の前回までの解Ｘｍ、ｍ≦ｎ＋１、ならびに、従属変数ｔのステップ長さΔＴｎに基づいて解Ｘｎ＋１を繰り返し計算して非線形微分方程式を数値的に積分するステップを含んでよい。状態変数Ｘの、少なくとも１つの初期条件Ｘ０、および、初期のステップ長さΔＴ０は、与えられることが望ましい。ステップ長さは、計算が開始されるよりも前に与えてよい。または、計算が進むとともに、計算で求めてもよい。例えば、初期のステップ長さΔＴ０は、初期条件Ｘ０から計算してもよい。
【０１８５】
ステップ長さは、システムに含まれる方程式間で異なってもよい。例えば、１つの方程式と別の方程式とで異なってよい。ステップ長さベクトルΔＴを用い、システムに含まれる各方程式に対するステップ長さを表す。ベクトルΔＴは、システムと同一の次元を有する。
【０１８６】
ローレンツ系を離散化した式においては、ステップ長さΔＴ＝（Δｔｘ，ｎ，  Δｔｙ，ｎ，  Δｔｚ，ｎ）を用いて解Ｘｎ＋１を、以下のように計算することができる。
【数３０】
2005529364.tif 000032
ここで、
Δｔｘ，ｎは、ｘｎ＋１の計算で用いられるステップ長さ、
Δｔｙ，ｎは、ｙｎ＋１の計算で用いられるステップ長さ、
Δｔｚ，ｎは、ｚｎ＋１の計算で用いられるステップ長さ、である。
【０１８７】
先で述べたように、ステップ長さΔＴは定数でよく、また、計算途中で変化してもよい。例えば、積分ステップのそれぞれ、または、幾つかの積分ステップにおいて、ステップ長さΔＴの要素、（Δｔｘ，ｎ，  Δｔｙ，ｎ，  Δｔｚ，ｎ）、の少なくとも１つが、計算に含まれるかもしくは計算により導出された、少なくとも１つもしくは複数の数の関数であってもよい。また、各積分ステップにおいては、ステップ長さΔＴの要素、（Δｔｘ，ｎ，  Δｔｙ，ｎ，  Δｔｚ，ｎ）、の少なくとも１つが、数学的システムの現在もしくは以前の、少なくとも１つの解Ｘｍの関数であってもよい。少なくとも１つの積分ステップ、または、積分ステップの幾つかにおいて、ステップ長さΔＴの要素、（Δｔｘ，ｎ，  Δｔｙ，ｎ，  Δｔｚ，ｎ）、の少なくとも１つが、現在もしくは以前の、少なくとも１つのステップ長さΔＴｍの関数であってもよい。変化を有するステップ長さΔＴは、あらゆる微分方程式の数値解法に用いてもよい。それ故、可変ステップ長さを用いた微分方程式の数値的解法を開示する。暗号化／復号化法といった、擬似乱数を生成する方法においては、可変ステップ長さは、システムのセキュリティの向上に寄与する。つまり、結果生じる鍵系列をより予測不可能なものにする。
【０１８８】
擬似乱数を生成する方法においては、初期条件Ｘ０、および／または、初期ステップ長さΔＴ０は、シード値(seed value)から計算してもよいし、または、シード値を表していてもよい。暗号化／復号化方法においては、初期条件Ｘ０の少なくとも一部、および／または、初期ステップ長さΔＴ０の少なくとも一部は、暗号化鍵から計算してもよいし、または、暗号化鍵を表してもよい。また、数学的システムのパラメータの少なくとも幾つかの少なくとも一部は、シード値もしくは暗号化鍵から計算してもよいし、または、シード値もしくは暗号化鍵を表してもよい。鍵は、公開鍵でも秘密鍵でもよい。
【０１８９】
抽出されたデータのセットは、暗号化に用いる擬似乱数を含んでもよい。計算から生じる複数の数を抽出してもよい。抽出のステップは、生じる数のｋビットからなる数、例えば、生じる数もしくは複数の生じる数のｋ個の（最）下位ビット、から導出された１つもしくは複数の数を抽出するステップを含んでよい。これは、導出される数の予測不可能性に貢献する。抽出されるｋビットは、例えば、生じる数もしくは複数の生じる数への、法（モジュラス(modulus)）または論理「積」(logical "and")関数の適用により導出することができる。ｋ個の（最）下位ビットを抽出する代りとして、抽出のステップは、生じる数の、予め定められたもしくは可変的な位置からｋビットを抽出してもよい。数ｋは、８から１２８までの、例えば、１６から６４、例えば、２４から３２といった範囲内で選択される整数値でよい。複数の数が抽出される場合、抽出される数は、異なるｋ値を用いて導出されてもよい。このこともまた、導出される数の予測不可能性に貢献する。抽出される数もしくは複数の抽出される数を、算術的、および／または、論理的演算を用いて操作して組み合わされた（合成）(combined)データ・セットを得てもよい。１つまたは複数の抽出される数、および／または、組み合わされたデータ・セットを、算術的および／または論理的演算において元のデータと組み合わせて元のデータを暗号化してよい。同様に、１つまたは複数の抽出される数、および／または、組み合わされたデータ・セットを、算術的および／または論理的演算において暗号化されたデータと組み合わせて元のデータを得てもよい。算術的、および／または、論理的演算は、ＸＯＲ演算、乗算、もしくは、加算を含んでよい。例えば、算術的、および／または、論理的演算は、暗号化のための、元データと組み合わされたデータ・セットとの加算、および、復号化のための、暗号化されたデータからの組み合わされたデータ・セットの減算、を含んでよい。あるいは、算術的、および／または、論理的演算は、暗号化のための、元のデータからの組み合わされたデータ・セットの減算、および、復号化のための、組み合わされたデータ・セットと暗号化されたデータとの加算、を含んでよい。数の減算および加算においてモジュラス関数を用いる必要があってもよい。抽出されるデータ・セットは、複数の数から導出される。１つのビットのセットは、例えば、ある数のｋ個の（最）下位ビットから抽出してよく、また、別のビットは別の数から、例えば、６４ビットの数の４７番目から５４番目のビット、を抽出してもよい。
【０１９０】
ブロック暗号暗号化／復号化システムにおいては、計算は、平文のブロックを表すデータを備えて平文および鍵を、例えば、出力として暗号文を与える暗号化システムに入力してよい。抽出されるデータ・セットは、ブロック暗号暗号化／復号化システムにおける、平文のブロックに関する演算の少なくとも１つを定義することに用いてよい。ここに記載している方法は、ブロック暗号アルゴリズムにおいて用いてよい。平文のブロックは、２つのサブブロックに分割され、一方のサブブロックは他方に影響を及ぼすように用いられる。例えば、第１ブロックの変形バージョン(modified version)（またはその一部）を用いて他方（またはその一部）に、例えば、ＸＯＲ関数によって影響を及ぼすように用いる。このようなアルゴリズムは一般に、フェイステル・ネットワークと呼ばれる。ブルース・シュナイアー著、アプライド・クリプトグラフィ、第２版(Applied Cryptography by Bruce Schneier, Second Edition, John Wiley & Sons, 1996)を参照されたい。このような場合、第１サブブロックもしくはその変形バージョンを、本方法に依存するハッシュ関数で変換してもよい。ハッシュ関数は、入力に暗号鍵を用いる。ラウンド(round)ごとに、新しい暗号鍵を入力としてハッシュ関数に与えることができる。あるいは、全てのラウンドにおいて同一の暗号鍵をハッシュ関数に与えてもよい。また、あるいは、例えば、全てのラウンドにおいて、各ブロックに対して、暗号鍵を入力として与えたり、またあるいは、各ブロックおよび各ラウンドに対して異なる暗号鍵を入力として与えるなどして、暗号鍵を、ブロックごとに変化させてもよい。
【０１９１】
抽出されたデータ（抽出されるデータ）を、復号化または暗号化の鍵として用いることができる。２つの数学的システムにおいて計算が実行されている場合、一のシステムにおいて、一方のシステムから抽出されたデータ・セットを用いて鍵を生成、または、他方のシステムに対する鍵として使用してもよい。また、抽出されたデータは、電子署名を表すデータの生成、および／または、電子データの透かしに用いてもよい。
【０１９２】
ここに記載する方法においては、電子デバイスは、あるレジスタ幅(resister width)を有する電子処理装置(electronic processing unit)を備えてよい。その場合、本方法は、以下のステップを備えてよい。
−  前記のレジスタ幅よりも大きい、あるレジスタ幅の、少なくとも１つの整数を、たかだか前記のレジスタ幅に等しいビット幅を有する、少なくとも２つの区分数(sub-numbers)として表現する。
−  少なくとも１つの前記の計算を、各区分数について部分計算(sub-computation)として実行し、少なくとも２つの、部分結果(partial results)を得る。部分結果は、たかだか処理装置のレジスタ幅に等しい、小さなビット幅の整数として表現される。
−  部分結果を連結し(concatenating)、前記の少なくとも１つの計算の結果に相当する表現を得る。
同じように、プロセッサのレジスタ幅より小さな幅の数に関する計算を実行してよい。その場合、演算は、例えば、論理ＡＮＤは、例えば、３２ビット数についての計算では、６４ビット数の上位半分は使用されずに、実行されてよい。当該数の符号を保持するために、例えば、３２ビット数の、（最）上位ビットは、６４ビットレジスタの上位３２ビットにコピーしてよい。
【０１９３】
通常、整数は、計算において使用される固定小数点数もしくは複数の固定小数点数を含むか、または、表している。整数型の数で表されている固定小数点数が実数を表現することが可能である。
【０１９４】
Ｄ          周期的なふるまいの検出
少なくとも１つの従属変数に関する、少なくとも１つの状態変数を支配する、少なくとも１つの非線形関数を有する数学的システムの解における周期的挙動を検出する方法は、以下のステップを含んでいる。
−  数学的システムを離散項で表現する。
−  計算を実行して、生じる数を求める。この生じる数は、少なくとも、数学的システムの解の一部を表している。
−  電子デバイスのメモリ内の配列Ａ内の選ばれた解(selected solutions)を記録する。この配列は、有限個、ｎ＋１個、の解を記録できるようになっている。
−  以下のうちの少なくとも１つを決定する。配列に記録されている別の解と実質的に同一である、
−  現在の解、および、
−  配列に記録されている前記の解のうちの特定の１つの解、
のうちの少なくとも１つを決定する。
この方法は、本発明に係る従属的態様を構成する。
計算を実行するステップ、選ばれた解を記録するステップ、および、決定するステップは、計算過程において継続的に実行してよい。つまり、計算過程において、例えば、各計算ステップや、各イタレーションのように、繰り返し実行してよい。
【０１９５】
現在の解、または、配列に記録された特定の１つの解が、配列に記録された１つもしくは複数の解と実質的に同一であれば、この数学的システムの解は、周期的挙動を示している可能性がある。ここに記載する方法の１つが擬似乱数生成法に用いられる場合、特に、暗号化／復号化法で用いられる場合、このような周期的挙動は望ましくない。なぜなら、この挙動は、生成した擬似乱数もしくは鍵系列の予測不可能性に負の影響を及ぼすからである。上記の方法を用いることで、周期的挙動を検出することができる。
【０１９６】
現在の解もしくは配列に記録された特定の１つの解が、配列に記録された１つもしくは複数の解と実質的に同一であるかどうかを決定するステップは、その解が完全に同一であるかどうかを決定するステップを有することが望ましい。状態変数Ｘの配列を示す数学的システムを解く場合、決定するステップには、Ｘの内容(entries)の幾つかだけが実質的に同一であるかどうかを決定するステップを含んでよい。
【０１９７】
計算時間、および／または、メモリを節約するため、選ばれた解のみをメモリに記録してよい。
【０１９８】
本方法においては、配列の各内容(entry)は、配列のレベル、Ａｉ、０≦ｉ≦ｎ、ごとに増大する、世代(age)を有する解を含んでよい。また、本方法は、以下を含んでよい。
−  配列に、選択された解を記録するステップにおいて、現在の解を配列Ａの０番目のレベルＡ０に記録し、それによって、配列Ａの０番目のレベルに記録された古い値に上書きする。
−  ０番目の所定の規準（クライテリオン(criterion)）を満足する場合、０番目のレベルが現在の解によって上書きされる前に、配列Ａの１番目のレベルに古い値を移す。そして、
１番目のレベル、および、より上のレベル、ｉ、のそれぞれに対し、
−  ｉ番目のレベルに対する、ｉ番目の所定のクライテリオンを満足する場合、ｉ番目のレベルがｉ−１番目のレベルから移される値で上書きされる前に、ｉ番目のレベルに記録されている古い値を配列Ａのｉ＋１番目のレベルに移す。
ｎ番目のレベルが更新されるべきならば、以前からｎ番目のレベルに記録されている古い値を捨てる。
【０１９９】
配列において、レベルｉに対し、ｉ番目のレベルに記録された古い値が、古い値をｉ＋１番目のレベルに移すことなしに、新しい値で上書きされた回数をカウントしてもよい。ｉ番目の所定のクライテリオンは、所定の回数にわたって古い値が移されていない場合に、満足する。その所定の回数は、配列Ａの全てのレベルに対して同一であっても、または、レベル間で異なってもよい。配列Ａのｉ番目のレベルに対する所定の回数は、例えば、配列内に記録される１つもしくは複数の値に依存してよい。それは、例えば、１つまたは複数の値において符号の変化が生じた場合、である。
【０２００】
現在の解もしくは配列内に記録されている前記の解の特定の１つが、配列に記録されている１つまたは複数の別の解と実質的に同一であるかどうかを決定するステップは、試験規準（テスト・クライテリオン(test criterion)）を満足する場合にのみ実行してもよい。例えば、テスト・クライテリオンは、少なくとも１つの状態変数の符号が、＋から−へ、もしくは、−から＋へ、または、それらの両方の場合に満足される。また、テスト・クライテリオンは、少なくとも１つの従属変数に関して、少なくとも１つの状態変数の、少なくとも１つの導関数(derivative)の符号に変化が生じた場合に、満足されてもよい。この場合、本方法は、さらに、導関数を計算するステップを有する。
【０２０１】
本方法においては、テスト値(test value)は、少なくとも１つの状態変数、および／または、導関数より計算されればよい。テスト・クライテリオンは、このテスト値に基づく。テスト・クライテリオンは、例えば、テスト値もしくはテスト値の導関数の符号に変化が生じた場合、または、所定の値になった場合に、満足される。
【０２０２】
Ｅ          擬似乱数の生成、および、暗号化／復号化
擬似乱数を生成する方法は、以下のステップを有する。
I）数学的システムを離散項で表す。
II）少なくとも数学的システムの初期条件を表しているシード値を定める。
III）数学的システムの少なくとも１つの変数を、固定小数点数として表す。
IV）固定小数点数として表されている少なくとも１つの変数を含む計算を実行し、前記の計算より生じる数を求める。この生じる数は、以下のうち少なくとも１つを表している。
ａ．数学的システムの解の少なくとも一部、および、
ｂ．数学的システムの数値解法に含まれる別の計算で利用可能な数。
V）計算過程で生じた少なくとも１つの数から導出される数を、擬似乱数として抽出する。本方法は、本発明に係る非従属的態様を構成する。
【０２０３】
シード値は、ユーザ定義値(user-defined value)でよい。例えば、本方法が、暗号化／復号化法に用いられる場合には、暗号化／復号化鍵でよい。
【０２０４】
擬似乱数は、計算過程において生じた１つもしくは複数の数のｋ個の桁から導出される数として抽出してよい。例えば、ｋ個の（最）下位ビット、または、１つもしくは複数の数から選択されたｋ個のビットである。
【０２０５】
本方法は、ステップIV）およびV）を、所与の量の擬似乱数が生成されるまで繰り返すことを含んでよい。
【０２０６】
所与の量の擬似乱数を生成し、電子デバイスのメモリに、予備シード値（スペア・シード値(spare seed value)）として記録してよい。これは、例えば、上記の方法もしくはその他の方法で周期的挙動が検出された場合に用いることができる。擬似乱数に関する所与量は、アルゴリズムに、内的に記録してよい。
【０２０７】
本方法は、さらに、上述したように、周期的挙動を検出する方法を備えてよい。その場合、擬似乱数を生成するステップは、
現在の解もしくは配列に記録されている前記の解の特定の１つが、配列に記録されている１つもしくは複数の解と実質的に同一であるかどうかを決定するステップが、
現在の解もしくは特定の解が、１つもしくは複数の解と実質的に同一である、
ことを、明らかにした場合、
擬似乱数生成を遮断、つまり、ステップIV）およびV）の繰り返しを中断し、
ステップII）において、シード値として、スペア・シード値を用い、
擬似乱数生成を再開、つまり、ステップIV）およびV）の繰り返しを再開する。
【０２０８】
従い、例えば、暗号化／復号化法において、周期的挙動が検出された場合には、予備の（スペアの）暗号化／復号化鍵を用いてよい。
【０２０９】
擬似乱数生成を再開するステップに先だって、所与の量の擬似乱数を生成し、そして、新しいスペア・シード値として、電子デバイスのメモリに記録してよい。ステップII）において新しいシード値を備え、そして、ステップIV）およびV）が開始される場合、ステップIV）に先だって、配列Ａの各レベルは、リセットされることが望ましい。
【０２１０】
元のデータ・セットを、暗号化されたデータ・セットに暗号化する方法は、以下のステップを有する。
Ａ）次のステップを実行し、擬似乱数を生成する。
I）数学的システムを離散項で表す。
II）少なくとも１つの、数学的システムに関する初期条件を表している暗号化鍵を定義する。
III）少なくとも１つの、数学的システムに関する変数を、固定小数点数として表す。
IV）少なくとも１つの、固定小数点数として表されている変数を含んだ計算を実行し、その計算より、以下のうちの少なくとも１つを表している、生じる数を求める。
ａ．数学的システムの解の少なくとも一部、および、
ｂ．数学的システムに対する数値的解法に含まれる別の計算で利用可能な数。
V）計算過程で得た数の少なくとも１つから導出される数を、擬似乱数として抽出する。
Ｂ）元データおよび擬似乱数を、以下のうちの少なくとも１つを用いて操作する。
ｉ．算術演算、および、
ｉｉ．論理演算。
そして、組み合わされたデータのセットを得る。この組み合わされたデータ・セットは、暗号化されたデータである。
【０２１１】
ステップＡ）に先立ち、元データのサブセットをデータ・セットから分離してもよい。そして、ステップＢ）は、そのデータのサブセットに関して実行してよい。このステップは、元データ・セットの全体を、共同的に構成する複数のサブセットが暗号化されるまで繰り返してよい。
【０２１２】
擬似乱数は、計算過程で得た１つもしくは複数の数のｋ個のビットより導出される数として抽出してよい。それらは、例えば、ｋ個の（最）下位ビットや、ｋ個の選抜されたビットである。
【０２１３】
ステップIV）およびV）は、所与の量の擬似乱数を生成するまで繰り返してよい。
【０２１４】
所与の量の擬似乱数を生成し、電子デバイスのメモリに、予備の（スペアの）暗号化鍵として記録してよい。例えば、計算のイタレーション・ステップもしくは積分ステップの少なくとも１つで得たかもしくは生じた数を、スペア暗号化鍵として記録してよい。スペア暗号化鍵は、例えば、数学的システムの解に周期的挙動が発生したために暗号化か中断されたような場合に用いてよい。スペア暗号化鍵の出力が必要ない場合には、暗号化アルゴリズム内部に記録すればよい。復号化に方法を用いる際、このスペア鍵が復号化鍵となる。
【０２１５】
上記より明らかだが、本方法は、周期的挙動を検出する方法を備えてよい。この場合、暗号化法は、
現在の解もしくは配列に記録されている前記の解の特定の１つが実質的に、配列に記録されている１つもしくは複数の解と同一であるかを検出するステップが、
現在の解もしくは特定の解が、別の１つもしくは複数の解と同一であると示した場合、
擬似乱数生成を中断、つまり、ステップIV）およびステップV）の繰り返しを中断し、
ステップII）において、スペア暗号化鍵を暗号化鍵として用い、
擬似乱数の生成を再開、つまり、ステップIV）およびステップV）の繰り返しを再開する。
【０２１６】
擬似乱数生成を再開するステップに先立ち、所与の量の擬似乱数を生成し、電子デバイスのメモリに、新しい、スペア暗号化鍵として記録してよい。
【０２１７】
ステップIV）およびステップV）を、ステップII）における新しいシード値で開始する場合、配列Ａの各レベルは、ステップIV）に先だってリセットすることが望ましい。
【０２１８】
上で議論した方法で暗号化される、暗号化データのセットを復号化する方法は、以下のステップを有する。
ａ）暗号化法に関連して上で定めたステップＡ）を実行し、暗号化法のステップV）で抽出した擬似乱数と同じ擬似乱数を抽出し、
ｂ）暗号化されているデータおよび擬似乱数を算術演算、ならびに／または、論理演算で操作して、元のデータ、すなわち、復号化されたバージョンのデータを得る。
【０２１９】
ステップａ）に先立ち、暗号化されたデータのサブセットを、暗号化されたデータ・セットから分離してよい。その場合、データのサブセットは、上記の暗号化法により暗号化されており、復号化法は、データのサブセットについてステップａ）およびｂ）を実行してよい。このステップは、暗号化されたデータの全体を共同的に構成する複数のサブセットが復号化されるまで繰り返してよい。
【０２２０】
暗号化法の、いかなるステップも、元のデータの暗号化のシーケンスの過程と同様に、暗号化されたデータを復号化する際に適用してよい。
【０２２１】
Ｆ          複数インスタンス(INSTANCES)の並列的処理
擬似乱数生成法は、一のインスタンスにおいて、以下のステップを有する。
I）数学的システムを離散項で表す。
II）数学的システムの、少なくとも１つの初期条件を表しているシード値を定める。
III）数学的システムの少なくとも１つの変数を、固定小数点数として表す。
IV）固定小数点数として表されている少なくとも１つの変数を含んだ計算を実行し、生じる数を求める。この生じる数は、以下のうちの少なくとも１つを表している。
ａ．数学的システムの解の一部、および、
ｂ．数学的システムの数値的解法に含まれる、別の計算で利用可能な数。
V）計算過程において発生した、少なくとも１つの数から導出される数を、擬似乱数として抽出する。
ステップI）からV）を、複数のインスタンスにおいて並列的に実行する。この方法は、本発明に係る非従属的態様を構成する。
【０２２２】
２つもしくはそれよりも多くのインスタンスにおける計算は、同時的に、もしくは、逐次的に実行してよい。従い、２つもしくはそれよりも多くのインスタンスにおける計算は、同時的に複数の計算を処理する実行命令、または、一度に単一の計算のみを処理する実行命令によって実行されることができる。
【０２２３】
よって、複数のインスタンスにおいて並列的に行われる擬似乱数の生成は、場合によっては、ステップを一のインスタンスのみで実行するよりも高速になる場合がある。特に、本方法が実行されるハードウェアが、並列処理をサポートしている場合には、高速になる場合がある。また、２つ、もしくは、それよりも多くのインスタンスを結合（カップリング）することで、一のインスタンスのみを用いる場合よりも、より大きな暗号化の鍵を用いることができる。例えば、暗号化鍵の一部に、第１のインスタンスを用い、暗号化鍵の別の部分には、第２のインスタンスを用いてよい。
【０２２４】
任意の高次の数学的システムは、それよりも低次の、サブシステムと呼んでいるシステムを結合（カップリング）して構成してよい。例えば、Ｎ個のロジスティック写像を結合してＮ次元の系（システム）を得てよい。結合の仕組みは、Ｎ個の異なる変数に対応するＮ個の異なる写像において、線形もしくは非線形結合（カップリング）関数を導入することで構成される。１つの変数を支配する結合関数は、他の全ての変数に従属しても、しなくともよい。あるいは、この結合は、Ｎ個の変数の１つを、残りのＮ−１個の写像の１つもしくは複数に代入することで実現されてもよい。
【０２２５】
２つもしくはそれよりも多くのロジスティック写像は、線形結合項で結合することができる。以下に示す例においては、結合項の前のパラメータε１およびε２が、結合強度をコントロールする。すなわち、２つのロジスティック写像のうちの一方の、他の写像に対する影響度をコントロールする。
【数３１】
2005529364.tif 000033
少なくとも、各インスタンスに対してステップIV）を実行する間に、複数のインスタンス間で数またはデータの伝送を行ってよい。同様に、ステップV）も行ってよい。
【０２２６】
本方法は、算術演算および／または論理演算を用いて、各インスタンスにおいてステップV）で抽出される複数の擬似乱数を、共通の擬似乱数に統合する(combine)ステップを備えてよい。
【０２２７】
パラメータおよび／もしくは変数の値、または、その一部を、２つのインスタンスの間でやりとり（交換(exchange)）してよい。従い、例えば、一のインスタンスのｘｎ＋１と、他のインスタンスのｘｎ＋１を、各イタレーション・ステップの後でやりとりしてよい。または、一のインスタンスのｘｎ＋１を、他のインスタンスのｙｎ＋１とやりとりしてもよい。同様に、ステップ長さΔｔｎも、２つのインスタンス間でやりとりしてよい。変数もしくはパラメータの値のやりとりは、第２のインスタンスの値の修正に値を用いる前に、第１のインスタンスの値について論理および／または算術演算を実行することで実現されてもよい。
【０２２８】
Ｇ          数学的システムに対する入力としての暗号化鍵の利用
少なくとも１つの関数を含んだ数学的システムにおいて数値計算を実行する方法は、以下のステップを有してよい。
−  数学的システムを離散項で表す。
−  少なくとも１つの、数学的システムの変数を固定小数点数として表す。
−  前記の計算を行う。この計算は、少なくとも１つの、固定小数点数として表された変数を含んでいる。
−  前記の計算より、生じる数を得る。この生じる数は、以下のうちの少なくとも１つを表す。
ａ．少なくとも、数学的システムの解の一部、および、
ｂ．数学的システムの数値解法に含まれる別の計算で利用可能な数。
計算を実行するステップは、以下のステップを有する。
−  少なくとも１つの、以前の解Ｘｍ、ｍ≦ｎ＋１に基づいて、解Ｘｎ＋１を反復的に計算する。ここでは、計算を実行するステップは、少なくとも１つの、状態変数Ｘの初期条件Ｘ０に基づいて開始される。
本方法は、さらに以下のステップを有する。
−  前記の計算に対する入力として暗号化鍵を与える。ここでは、暗号化鍵を初期条件Ｘ０の生成に用いる。本方法は、本発明に係る非従属的態様を構成する。
【０２２９】
本明細書では、用語「以前の解」は、現在の解Ｘｎ＋１を含むと解すべきである。
【０２３０】
暗号化鍵はまた、数学的システムの初期化にも用いてよい。
【０２３１】
Ｈ          データ・セットの同一性確認を供するための、または、データ・セットの識別のための、識別値の生成
データ・セットの識別のための識別値の決定方法は、少なくとも１つの関数を有する数学的システムにおける数値計算を実行する。本方法は、以下のステップを有する。
−  数学的システムを離散項で表す。
−  少なくとも１つの、数学的システムの変数を、固定小数点数として表す。
−  前記の計算を実行する。この計算は、少なくとも１つの、固定小数点数として表された変数を含んでいる。
−  前記の計算より、生じる数を求める。この生じる数は、以下のうちの少なくとも１つを表している。
ａ．数学的システムに対する解の少なくとも一部、および、
ｂ．数学的システムの数値解法に含まれる、他の計算で利用可能な数。
ここでは、データ・セットの少なくとも一部に関する表現形を、前記の計算において用いる場合、本方法は、さらに以下のステップを有する。
−  前記の識別値として、前記の生じる数の少なくとも一部を抽出する。本方法は、本発明に係る非従属的態様を構成する。
【０２３２】
よって、上記の方法は、先に詳細に議論したハッシュ関数またはハッシュアルゴリズムと考えてもよい。識別値は、数値計算における異なる計算段階（計算ステージ）より抽出された、幾つかの抽出数で構成してよい。抽出は、各計算ステップもしくは各イタレーション・ステップ、または、選択した計算ステージのみで行われてよい。
【０２３３】
用語「識別値」は、データ・セットを識別する、ハッシュ値または暗号化チェック・サムでよい。例えば、ブルース・シュナイアー著のアプライド・クリプトグラフィ、第２版(Applied Cryptography by Bruce Schneier, Second Edition, John Wiley & Sons, 1996)を参照されたい。暗号化鍵を計算のためのシード値として用いる場合、ハッシュ関数は通常、ＭＡＣ関数（メッセージ認証コード）と称される。
【０２３４】
数学的システムは、微分方程式を有してよい。例えば、偏微分方程式もしくは常微分方程式、または、面積保存写像もしくは面積非保存写像といった離散写像を有してよい。数学的システムは、少なくとも１つの、少なくとも１つの状態変数Ｘを支配する非線形写像関数を有してよい。
【０２３５】
非線形写像関数は、例えば、ｘｎ＋１＝λｘｎ（１−ｘｎ）なる形式を有するロジスティック写像を有してよい。ここで、λはパラメータ、ｘｎ＋１は、計算の第（ｎ＋１）ステージにおける状態変数ｘの値であり、ｘｎは、計算の第ｎステージにおける状態変数ｘの値である。
【０２３６】
ロジスティック写像は、ｘｎ＋１＝λｘｎ（１−ｘｎ）＋ε（ｘｎ−ｍｎ）なる形式に修正してもよい。ここで、λおよびεはパラメータ、ｘｎ＋１は、計算の第（ｎ＋１）ステージにおける状態変数ｘの値であり、ｘｎは、計算の第ｎステージにおける状態変数ｘの対であり、ｍｎは、データ・セットの第ｎ部分の表現形を含んでいる。
【０２３７】
暗号化鍵は、少なくとも部分的に、λ、ε、および、状態変数ｘの初期値ｘ０のうちの少なくとも１つを決定するために用いてよい。
【０２３８】
数学的システムは、非線形写像関数のセットを備えてよい。それらは、例えば、
−  次の形式を有するアノソフ写像、または、
【数３２】
2005529364.tif 000034
−  次の形式を有するエノン写像。
【数３３】
2005529364.tif 000035
【０２３９】
数学的システムは、少なくとも１つの非線形微分方程式、および／または、非線形微分方程式のセットを備えてよい。
【０２４０】
数学的システムは、少なくとも１つの非線形微分方程式を有することが望ましく、この場合、ある程度の不規則な、または、カオス的な挙動が実現され、また、システムのランダムさに関する特性およびセキュリティが向上される。
【０２４１】
少なくとも１つのリヤプノフ指数を、数学的計算の際に、少なくとも１度計算してよく、それによって数学的システムが、カオス的挙動を示すかどうかを判断してよい。もし、カオス的挙動を示さないのであれば、例えば、算出されたリヤプノフ指数が正でないならば、計算を中断し、別の初期値、および／または、別のパラメータで再開してもよい。
【０２４２】
少なくとも、非線形微分方程式は、少なくとも１つの状態変数Ｘを支配していることが望ましい。Ｘは、少なくとも１つの従属変数ｔの関数である。非線形微分方程式のセットは、例えば、ローレンツ系を含んでもよい。
【０２４３】
Ｉ          オーバーフローの取り扱い、意図的なオーバーフローの生成
少なくとも１つの関数を有する、数学的システムにおける数値計算を実行する方法は、以下のステップを有する。
−  数学的システムを離散項で表す。
−  少なくとも、前記の関数に関する選択された変数の範囲（値域）を制限する。その範囲は、十分に狭く、よって、前記の関数の、選択された変数が、前記の範囲により制限を受けない場合にとり得る値を排除する。
−  計算を実行し、生じる数を求める。生じる数は、以下のうちの少なくとも１つを表している。
ａ．数学的システムの解の一部、および、
ｂ．数学的システムの数値解法に含まれる、別の計算で利用可能な数。
−  計算の結果、選択した変数に関する値が範囲を超えている場合、選択した変数に範囲に含まれる値をアサインする。本方法は、本発明に係る非従属的態様を構成する。
【０２４４】
例えば、値のうちの、範囲を超えている、上位ビットが切り捨て（トランケート(truncated)）られる。この、範囲内の値をアサインするステップは、モジュラス関数として表してもよい。よって、本方法の方法は、例えば、暗号化／復号化システムのランダムさに関する特性の向上、ならびに／または、暗号化されたデータから数学的システムの内部状態に関する情報を導くことをより困難にするために、意図的なオーバーフローを与えることもできる。
【０２４５】
従って、上記の方法は、擬似乱数生成法の一部としてよい。この方法は、例えば、暗号化および復号化の少なくとも一方に用いられる擬似乱数を生成する。数学的システムは、少なくとも１つ、正のリヤプノフ指数を有することが望ましい。
【０２４６】
Ｋ          架空の、または、仮の小数部セパレータの取り扱い
少なくとも１つの関数を有する数学的システムにおいて数値計算を実行する、別の方法は、以下のステップを有する。
−  数学的システムを離散項で表す。
−  数学的システムの少なくとも１つの変数を、整数として表す。
−  前記の整数に架空の小数部セパレータを配置する。これにより、整数は実数を表す。
−  整数として表されている変数を少なくとも１つ含む計算を実行し、生じる数を得る。この生じる数は、整数として表される。
−  以下に示すステップの少なくとも１つを実行することにより、生じる数の所定の位置に、架空の小数部セパレータを配置する。
−  整数の架空の小数部セパレータの位置を補正すること、および、
−  生じる数に、架空の小数部セパレータを配すること。
本方法は、本発明に係る非従属的態様を構成する。
【０２４７】
生じる数は通常、小数部セパレータの位置が固定された、固定小数点数である。あるいは、生じる数の小数部セパレータの位置は、計算が完了した後で補正されてもよい。第３の可能性は、計算の前後で、小数部セパレータの位置を補正することである。このことは、生じる数の小数部セパレータの左側の位置の全てが使用されていない場合に関連がある。生じる数の分解能（最小の変化量）よりも相対的に高い分解能を保持することが望ましい。例えば、生じる数は、Ｓ（１０．２１）形式を有することが望ましい。よって、例えば、２つのＳ（７．２４）形式の数の加算を、Ｓ（８．２３）形式で実行し、それから、この数をＳ（１０．２１）形式を有する生じる数に変換する。従い、項の２番目および３番目の（最）下位ビットからのキャリーが、結果に影響を与えることがある。
【０２４８】
最終的には、幾つかの計算に対しては、いかなる小数部セパレータの位置の補正も要求されない、もしくは、必要がないことがあり得る。
【０２４９】
小数部セパレータの位置の補正は通常、桁送り（シフト）演算によって実行される。
【０２５０】
最も一般的な形式においては、少なくとも１つの関数を有する数学的システムにおいて数値計算を実行する方法は、以下のステップを有する。
−  数学的システムを離散項で表す。
−  少なくとも１つの、数学的システムの変数を固定小数点数として表す。
−  少なくとも１つの、固定小数点数として表された変数が計算に含まれるようにして、前記の計算を実行する。
−  前記の計算より、生じる数を得る。この生じる数は、以下のうちの少なくとも１つを表している。
ａ．数学的システムの解の少なくとも一部、および、
ｂ．数学的システムに対する数値的解法に含まれる、別の計算で利用可能な数。
【０２５１】
Ｌ          架空の小数部セパレータの位置設定が不要である計算の代用
別の、本発明に係る非従属的態様を開示する。これは、少なくとも１つの関数を有する非線形数学的システムにおける数値計算を実行する回路である。この回路は、回路もしくはコンピュータ・プログラム・コードの数学的システムが修正された項で表されるように設計もしくはプログラムされている。数値計算の中から選択された少なくとも１つの計算には、整数演算が含まれており、このため、数学的システムの、修正されていない表現形式における前記の選択された数値計算は、１つもしくは複数の浮動小数点演算、または、１つもしくは複数の固定小数点数の小数部セパレータの位置のコントロールを必要とする。本回路は、前記の選択された計算を、少なくとも１つの、１つもしくは複数の整数についての代用計算で置き換え、よって、回路もしくはコンピュータ・プログラム・コードの数学的システムが、架空の小数部セパレータの位置設定を必要としない少なくとも１つの計算で表されるように、設計もしくはプログラムされている。
【０２５２】
この数学的システムは、カオス的挙動を示してもよい。
【０２５３】
例えば、次の計算は先ず、ｘｎ＋１を計算することから実行されてよい。
【数３４】
2005529364.tif 000036
それからｙｎ＋１に関する式を次のように計算してよい。
【数３５】
2005529364.tif 000037
こうすることにより、ｙｎに２をかける計算ステップを省略することができる。
【０２５４】
よって、代用計算を実行することで、計算時間を節約することができる。
【０２５５】
同様にして、電子回路において、少なくとも１つの関数を有する非線形数学的システムの数値計算を実行する方法を開示する。その回路において、または、その回路が作動することによる、コンピュータ・プログラムの部分（セグメント）において、本方法は、以下のステップを有する。
−  数値計算のうちから選択された少なくとも１つが、整数演算を含むように、数学的システムを修正された項で表す。ここで、数学的システムの修正されていない表現形式における前記の選択された数値計算は、１つもしくは複数の浮動小数点演算、または、１つもしくは複数の固定小数点数における小数部セパレータの位置のコントロールを必要とする。
−  前記の選択された計算を、少なくとも１つの、１つもしくは複数の整数についての代用計算で置き換える。ここで、回路またはコンピュータ・プログラム・コードの数学的システムは、少なくとも１つの代用計算が架空の小数部セパレータの位置設定を必要としないようにして、表現される。
前記の代用計算を実行する。
【０２５６】
これから、上記の方法を、図面を参照してさらに説明する。
図１ないし図５に、本発明に係る方法の、様々な態様および実施形態を例示する。先に議論したように、逐次暗号は、鍵によって定められる擬似ランダム・ビットのストリームを作成する。この、ビットのストリームは、鍵系列(keystream)と称されている。そして、暗号化は、平文と鍵系列の排他的論理和（ＸＯＲ）をビットごとにとって暗号文を作成することで実行される。
【０２５７】
鍵系列を生成するため、擬似乱数生成器（ＰＲＮＧ(Pseudo Random Number Generator)）に関する実施形態では、８つの３２ビット状態変数と、対応した８つの３２ビット・カウンタ変数に分割された５１２内部ビットに構成される。カウンタ変数は、各イタレーションにおいて増加し、また、状態変数に加えられる。ＰＲＮＧは、非線形関数に基づく８つの結合した方程式を有するシステムに逐次的に代入を行い、そして、各イタレーション（逐次代入）の後で８つの状態変数から１２８ビットを抽出することで動作する。
【０２５８】
１２８ビットの鍵を５１２ビットに展開(expand)することで、アルゴリズムは初期化（イニシャライズ）される。この５１２ビットは、８つの状態変数および８つのカウンタ値の設定に用いられる。そして、図１に示す、状態遷移関数(next-state function)で定められるシステムは、状態変数と鍵との相関性を低減させるため、４回、逐次的代入を行う。最後に、カウンタ値の状態変数との排他的論理和（ＸＯＲ）をとってカウンタ値を修正し、初期カウンタ値を得る。
【０２５９】
関数を用いることもできる。この関数は、以降、「ｇ関数」と呼ぶ。このｇ関数は、３２ビット数の二乗をとって６４ビット数を算出し、この６４ビット数からの上位３２ビットと下位３２ビットで排他的論理和（ＸＯＲ）をとる。図１を参照されたい。
【０２６０】
８つの結合した方程式を有するシステムで、ｇ関数が用いられ、システムは１度逐次代入を行い、新しい状態を生成し、それより、１２８ビットのランダムなデータを抽出する。各イタレーションの前に、カウンタ値は、後で説明するカウンタ系（カウンタ・システム）によって増加され、それから、新しい状態値を、次のシステムに逐次代入を行うことによって算出する。カウンタ増加を含んだシステムの例示する図２も併せて参照されたい。
【数３６】
2005529364.tif 000038
ここで、
【数３７】
2005529364.tif 000039
であり、ｘｊ，ｉはイタレーションｉにおける状態ｊの値である。（以降、
【数３８】
2005529364.tif 000040
を、本文中では、「（→付）Ｘｉ」と表し、太字のＭを「（太字）Ｍ」と表すこととする。）また、
【数３９】
2005529364.tif 000041
であり、ｃｊ，ｉはイタレーションｉにおけるカウンタｊの値である。
【数４０】
2005529364.tif 000042
は、（→付）Ｘｉについて評価するｇ関数である。つまり、（→付）Ｇ（（→付）Ｘ）＝（ｇ（ｘ０，ｉ），ｇ（ｘ１，ｉ），．．．，ｇ（ｘ７，ｉ））であり、（太字）Ｍは、次式で定義される結合行列（カップリング・マトリックス）である。
【数４１】
2005529364.tif 000043
ここで、ｋ８およびｋ１６は、結合（カップリング）が３２ビットのパーミュテーションを含んでいることを示す。すなわち、パーミュテーションｋに対し、式ｋ×ｇ（ｘｉ）は、数ｇ（ｘｉ）の全てのビットまたはビットの幾つかが混合(mix)されることを示す。ｋ８は、当該パーミュテーションが、８ビットの左回転(8-bit left rotation)を意味する。同様に、ｋ１６は、１６ビットの左回転(16-bit left rotation)を意味している。図３に、このような結合系（カップリング・システム）を例示する。
【０２６１】
カウンタの動力学は、
【数４２】
2005529364.tif 000044
で定義される。キャリーが生じた場合、保存されて、次のイタレーション・ステップで加えられる。（→付）Ａ＝（ａ０，ａ１，．．．，ａ７）は、例えば、８つの３２ビット整数に区分された２５６ビット定整数でよい。図４は、カウンタの増加について例示している。
【０２６２】
各イタレーション・ステップの後で、別々の状態変数で排他的論理和（ＸＯＲ）をとって、１２８ビットの鍵系列を抽出する。例えば、２つの異なる状態変数の上位１６ビットおよび下位１６ビットの排他的論理和（ＸＯＲ）をとって、全部で８つの１６ビットの組み合わせ（コンビネーション）を作り、１２８ビットのランダムなデータを得る。鍵系列と、平文／暗号文との排他的論理和（ＸＯＲ）をとって暗号化／復号化が行われる。図５は、このような、暗号化／復号化処理を例示している。
【０２６３】
多くの、擬似乱数生成器の実際の用途では、所謂、初期化ベクトル(Initialization Vector)（ＩＶ）を利用する必要がある。例えば、大量のデータを暗号化／復号化する場合、データの一端から開始して、データ全体に渡って、続ける必要がある。たとえ、データの端部の近くにあるデータの一部のみを復号化するのであっても、データの最初から適切な回数だけ逐次的に反復して復号化すべきデータに対応する出力に到達する必要がある。このことは、多くの、直接的に使用しない計算を必要とし、時間のかかることである。この問題は、ＩＶを利用することで解決可能である。ＩＶはまた、仮想私設通信網（仮想プライベート・ネットワーク）（ＶＰＮ）においても有用である。そのようなネットワークにおいては、データは、パッケージに分割されてよく、一意の（ユニークな）ＩＶが、各パッケージと一緒に送信され、たとえ、別のパッケージを失ったとしても（ロストしても）、各パッケージは、個別的に復号化可能である。暗号化／復号化されるべきデータは、部分（セクション）に分割され、各セクションは、ユニークなＩＶと関係を持つ。暗号は先ず、鍵を用いて準備され（セットアップされ）、それから、数学的システムの内部状態を、予測不可能な方法で、ＩＶの関数として、変化させる。この変化は、カウンタに対し、状態値に対し、または、両方に対して実行されてよい。しかるに、暗号の出力は、鍵とＩＶの両方の関数であり、よって、複数回の逐次的な反復（イタレーション）を行うことなく所与のセクションもしくはパッケージを暗号化／復号化可能である。
【０２６４】
ＩＶを用いる方法の一例として、数学的システムのマスタ状態は、通常のセットアップ手続きで作り出され、続いてカウンタ状態は、以下のようにして操作される。６４ビットＩＶは、２５６ビットに展開され、カウンタ値について排他的論理和（ＸＯＲ）がとられ、そして、状態の全てのビットがＩＶの全てのビットに依存するように、システムに、複数回の逐次的な反復代入（イタレーション）を行う。
【０２６５】
上記にて議論したアルゴリズムは、Ｍ．ベスガード、Ｍ．ベステレージャ、Ｔ．ペデルセン、Ｊ．クリスチャンセン、および、Ｏ．スカベニウスの共著、ラビット：  ア・ニュー・ハイ−パフォーマンス・ストリーム・サイファ、ファースト・ソフトウェア・エンクリプション（ＦＳＥ）のプロシーディング、２００３年、シュプリンガー、ベルリン(M. Boesgaard, M. Vesterager, T. Pedersen, J. Christiansen and O. Scavenius: Rabbit: A New High-Performance Stream Cipher, Proceedings of Fast Software Encryption (FSE) 2003, Springer, Berlin, (2003))、にさらに詳細に述べられている。
【０２６６】
図６は、デジタル・データの暗号化、送信、および、復号化のシーケンスに関する概略的例図である。図７は、ブロック暗号システムにおける暗号化シーケンスの例図である。また、図８は、逐次（ストリーム）暗号システムにおける暗号化シーケンスの例図である。ブロック暗号および逐次暗号システムは、先の、本発明の背景に関する議論において議論している。
【０２６７】
ここでは、データを暗号化／復号化する方法およびアルゴリズムについて説明する。本アルゴリズムは、データ暗号化／復号化における殆どの目的に利用可能である。しかし、本アルゴリズムは性質上、例えば、大きなファイル、ライブもしくは予め記録された音声(audio)／映像(video)、著作権のある素材（例えば、コンピュータ・ゲームもしくはその他のソフトウェア）、ならびに、記録しておきたいデータ（例えば、バックアップおよび／もしくは移送）のような、データ・ストリーム、または、その他の連続的データの暗号化に有利である。また、アルゴリズムの有する高速性により、これらの目的に適している。計算方法により、本アルゴリズムは、非常に小さなプロセッサでも利用可能である。
【０２６８】
本アルゴリズムは、擬似ランダム・シーケンス逐次暗号システム（ＰＲＳＳＣ(Pseudo-Random Sequence Stream Cipher system)）に基づいている。ＰＳＳＲＣシステムは、擬似乱数生成器によって特徴づけられる（図９の外側の四角）。この生成器が、２進鍵（バイナリ・キー）に基づいて擬似的にでたらめなデータ・シーケンスを生成する。このシーケンス、所謂、鍵系列、図９参照、を用いて暗号化および復号化が行われる。鍵系列は、可能な鍵に対してそれぞれ、一意的（ユニーク）である。
【０２６９】
排他的論理和（ＸＯＲ）関数（図面においては、記号、
【数４３】
2005529364.tif 000045
で記されている。）を平文に適用し、等量の鍵系列が平文を暗号化する。ＸＯＲ関数の出力は、暗号文である。同様の手法をもう一度暗号文に適用すれば、暗号文が平文に復号化される。復号化に用いた鍵が、暗号化に用いた鍵と完全に同一である場合に限り、復号化によって暗号化された平文が現われる。
【０２７０】
暗号化されたデータの完全性は、暗号文を復号化できる鍵に存在する。よって、鍵を推測することは困難でなければならない。このことを確実にするため、アルゴリズムの基本設計では、少なくとも１２８ビットの鍵を用いる。１２８ビットという鍵のサイズでは、およそ、３．４・１０３８通りの異なる鍵が存在する。
【０２７１】
本アルゴリズムは、カオス的なふるまいを示す系（システム）、例えば、ローレンツ系を用いている。この系は、以下に示す３つの常微分方程式を有する。
【数４４】
2005529364.tif 000046
ここで、σ、ｒ、ｂはパラメータであり、ｘ、ｙ、ｚは、状態変数である。
【０２７２】
図１０は、ローレンツ系の数値解の曲線を示す。
【０２７３】
システム（系）がカオス状態になるには、次に示すパラメータの規準（クライテリア）を満たす必要がある。
【数４５】
2005529364.tif 000047
この場合でも、全ての解がカオス的というわけではない。パラメータ空間においてパラメータの組み合わせによって、所謂、周期性の窓が存在する。これは、周期解を与える。本システムを実行する前に、パラメータ空間についての解析を、リヤプノフ指数を計算することで行う。一般に、正のリヤプノフ指数は、その数学的システムに対する解がカオス的である、ことを示唆している。エドワード・オット著、カオス・イン・ダイナミカル・システムズ、ケンブリッジ・ユニバーシティ・プレス  １９９３(Edward Ott, Chaos in Dynamical Systems, Cambridge University Press 1993)を参照されたい。
【０２７４】
パラメータは一般に、例えば、暗号化鍵や暗号化鍵の一部、のような、シード値から決定される。本発明に係る方法を実施するアルゴリズムは、所定の区間（インターバル）内のパラメータのみを利用可能に設計されることが好ましい。これによって、システムが、正のリヤプノフ指数を有する見込みが高くなる。よって、数学的システムは、カオス的なふるまい（挙動）を示す確率が高くなる。リヤプノフ指数は、追加的に、もしくは、代替的に、数学的な計算の最初、または、計算の途中で求めてよく、よって、数学的システムの解の非カオス的な挙動を検出することが可能となる。
【０２７５】
数学的システムは、例えば、その他の連続系（例えば、レスラー系）や、離散写像（例えば、エノン写像）でも、同様に可能である。
【０２７６】
積分は、数値積分ルーチンを用いて実行する。初期条件と積分ステップ長を与えれば、数値積分ルーチンは、例えば、オイラー法やルンゲ−クッタ法を用い、離散的なメッシュ・ポイントにおける解を算出する。オイラー法を用いてローレンツ方程式を離散項で表現すれば、解は、以下の方程式を計算することで求めることができる。
【数４６】
2005529364.tif 000048
【０２７７】
計算は、以下で説明する固定小数点数を用いて実行される。
【０２７８】
微分方程式を含んだシステムの数値積分の際、連続的な非従属変数（例えば、時間ｔや空間ｓ）が離散化される。この処理は、連続的区間［ａ；ｂ］の離散的な点のセット（集合）での置換と言える。このようなシステムにおいては、ΔＴ＝（Δｔｘ，Δｔｙ，Δｔｚ）は通常、積分のステップ長もしくは積分ステップと呼ばれる。
【０２７９】
図１２は、例えば、カオス系といった、同一もしくは異なる系の２つまたはそれよりも多くのインスタンス（段階）を同時的に計算することができる方法を例示している。本方法は、より高速な計算速度とセキュリティの向上をもたらし、さらに、より長い鍵の使用を可能にする。２つの系（システム）間で、例えば、Δｔｘ、Δｔｙ、および／または、Δｔｚの交換のような、ステップ長の交換といった、ある種の情報の伝達（コミュニケーション）もしくは結合（カップリング）があることが望ましい。
【０２８０】
内部変数は、基本設計においては、それぞれ３２ビット幅である。しかし、どのような変数幅であっても使用可能である。ローレンツ系を用いる場合、６つの内部変数（３つの状態変数および３つのパラメータ）が存在する。よって、（基本設計においては、）１９２ビットを用いて、内部変数によって与えられる生成器の内部状態を表す。１２８ビットの鍵を、１９２ビットまでパディング(padding)することは、禁じられた値(illegal value)を避けるようにして行われるべきである。つまり、全ての変数が、確実に、許されている値(allowed value)を備え、そして、鍵のビットが無視されないようにする。パディングは、ゼロおよびワンの所与の値の挿入、または、鍵から取ったビットの繰り返し、を含んでよい。図１１は、パディングによる鍵の伸張を例示する。
【０２８１】
積分を、可変的時間ステップで行ってもよい。これは、例えば、状態変数のいずれか１つから計算することができる。基本設計においては、ステップ長Δｔは、各積分ステップで変化可能である。この変化は、状態変数Ｘと関係する。
【０２８２】
鍵系列は、状態変数に関連した、いくつかのデータから抽出される。これは、変数ｙ(y variable)から８つの（最）下位ビットを抽出したり、または、例えば、１ステップの計算で実行される１つもしくは複数の乗算といった、計算で消去される(wiped out)データのうちのいくつかを集めることで、実現してよい。
【０２８３】
通常、カオス系に関する計算は、コンピュータ上で、浮動小数点変数を用いて実行される。しかし、そのような方法では、問題を持ち込んでしまう。その問題の１つには、浮動小数点変数を使用することで同一の鍵を用いても異なるコンピュータでは異なる鍵系列が生成されるおそれがある。それは、異なるコンピュータ・システムでは浮動小数点の実現の仕方に僅かな差違があるからである。
【０２８４】
よって、固定小数点変数を用いる。小手得小数点変数は、整数型データ・タイプを基にしている。これは、異なるコンピュータ・システムでも同じように実現される。例えば、実数のような、数を表現するには、小数点の後にも桁が必要である。この小数点は、数の最後以外のどこかに見かけ上設けられる（例えば、１２３４５の代りに、１２．３４５。）。
【０２８５】
アルゴリズムの適切な動作を確保するため、試験（テスト）を実施することが望ましい。これらのテストのうち、幾つかは実行時（ラン・タイム）に実行される。また、別のテストのうち、幾つかは設計時（デザイン・タイム）に実行される。周期解や定常点の検出により鍵をリロードしなければならなくなった場合に備えて、初期化処理の一部として、状態変数の全てのデータ容量（例えば、１９２ビット）、または、鍵の全て（例えば、１２８ビット）と等量の鍵系列を、アルゴリズムを用いて生成して保存する。このような場合には、保存したシーケンスを新しい鍵としてロードし、余分な鍵の抽出も含めて、初期化を再び行う。
【０２８６】
コンピュータ上で、数を有限的に表現するため、あらゆる数値解は、周期性を有する。しかし、ある鍵はかなり短い周期を有する鍵系列を作ることがある。このことは、システムのセキュリティを危険に晒すので望ましいものではない。よって、このような周期解を検出するアルゴリズムを提案する。このアルゴリズムは、変数の符号、または、変数の傾きの符号を監視する。ローレンツ系を用いる場合、このチェックはｘについて実行される。符号がマイナスからプラスへ変化（もしくはプラスからマイナスへ変化、もしくは、単に符号が変化）した際、このポジション・チェックが実行される（ポジション・チェックは、全てのイタレーションが終わった後に実行することもできる。）。ポジション・チェックは、状態変数のセット全てを、バッファされている、より以前のセットと比較する。完全な一致が発見された場合、周期解が検出される。
【０２８７】
動的システム(dynamical system)の定常点は、イタレーションの間、不変のまま留まる状態変数のセットである。このような定常点は、現在の状態変数のセットとすぐ前のセットとを比較、または、全ての変数の傾きがゼロであるかをチェックもしくはある１つの変数の現在の傾きとその変数の以前の傾きが両方ともゼロであるかをチェックすることで検出することができる。理由は確かではないが、カオス系は周期的な解を示すことがある。これを検出して補正し、システムのセキュリティを危険に晒さないようにする必要がある。もし、システムの解が、周期的になれば、暗号化は、中止されることが望ましい。なぜなら、数学的システムの解から抽出される数も周期的になり、よって擬似的なランダムさを失うからである。周期解に対するテストには、解の座標と以前に計算された座標との比較が含まれる。完全な一致が発見されれば、このシステムは周期解を示している。
【０２８８】
先に計算された座標を記録するために必要となるメモリの量を低減するため、よって、座標のテストに必要とされる処理時間を低減するため、選抜された座標のみを座標キャッシュに記録する。周期解のテストに必要とされるプロセッサ時間を低減するため、テストは、座標があるクライテリアを満足した場合にのみ、実行される。図１３は、周期解に対するチェックの実行に関する原理を示す。
【０２８９】
図１４は、周期解を有する数学的システムを示している。詳しくは、周期解を有する２次元非線形系である。このシステムは、解が、その初期条件により完全に定まる、という意味において決定的である。理論上は、解は連続的であって、よって、無限の点を含んでいる。このシステムを数値的に解く場合、時間の間隔が離散化され、これらの時点において解が計算される。数学的システムに対する数値解は、単なる座標のセットの系列（シーケンス）である。２次元系を考えれば、解は、図１４においては曲線上のドットで示された、幾つかの点（ｘ，ｙ）で特定される。本システムの決定論的な性質により、解が、以前にも訪れたことのあるポイント（点）に達すれば、解は周期的であって、その周期性を保持する。テストでは、この特性を利用している。
【０２９０】
数値積分の際に周期解に対するテストを行うために、計算された現在の座標のセットを以前の値と比較する必要がある。そのため、座標のセットを計算された際に記録する。この記録体は待ち行列（キュー(queue)）のように動作し、座標キャッシュと呼ばれる。計算された座標のセットを、座標キャッシュ内のあらゆる座標セットと比較する。完全な一致が発見されれば（２つの座標セットの全ての値が等しければ）、システムは周期的な状態にある。完全な一致がないままテストをパスすれば、周期的なふるまいは検出されず、計算が続行される。計算を続行する前に、テストされた座標を、次以降の比較のために、キャッシュに追加する。
【０２９１】
計算された、システムの座標のセットを全て保持するには、あまりに多くのメモリおよびプロセッサ時間を要する。そのため、図１５に示すように、選抜された座標のみを記録する。
【０２９２】
キャッシュは幾つかのレベルを備えている。各レベルは、レベルごとに増加する世代(age)に関する座標を含んでいる。各テストもしくは幾つかのテストの後、テストされた座標は、レベル０に挿入される。２回（もしくは、その他の回数）ごとに、座標はレベル０に挿入され、古い値は、上書きされる前にレベル１に挿入される。それ以外のレベルに座標を挿入する方法も同様である。２回ごとに、値がいずれかのレベルに挿入され、古い値は、今のレベルが上書きされる前に次のレベルへ移される。
【０２９３】
この方法によって、座標キャッシュは、急激に(exponentially)増大する、世代を備えた座標を備えることになる。レベル０は、世代１もしくは２の座標（前にチェックされた座標もしくは前にチェックされた座標の１つ前の座標）を記録し、レベル１は、世代３ないし６の座標（座標が挿入された後のテストにおいて３であって、そして、さらに座標が挿入される前に６まで増大する。）を記録し、レベル２は、世代７ないし１４の座標を記録し、以下同様である。
【０２９４】
例Ｉにおける擬似プログラム・コードは、キャッシュを実現する方法を示している。
【０２９５】
それらレベルの世代が変化していくため、即座には、周期解は発見されないかもしれない。１１回のテストだけの周期長を有する周期解は、キャッシュのレベル２において検出される。なぜなら、レベル２のデータの世代は、７から１４だからである。しかし、テストは、座標がきっちりと、テスト１１回だけ古くなるまで周期解を検出しない。よって、１２回のテストを行って初めて、周期的挙動が検出される。この場合、システムは、検出されるまでに、１１分の１２周期の間、テストをパスすることがある。
【０２９６】
上記アルゴリズムに対して可能な拡張に、変化する、トランスポート・エイジ(TransportAge)がある。例Ｉの擬似プログラム・コードを参照されたい。幾つかの座標が、その他の座標よりも、周期解に含まれる可能性が高いと認められる場合、例Ｉの擬似プログラム・コードを参照すれば、座標挿入手続き(InsertCoordinate procedure)がそれらを認識でき、これらに対して、トランスポート・エイジの値を小さくすることができる。これは、キャッシュ内の重要な座標に有利に働き、多くの重要な座標が記録されている場合にはキャッシュ内のデータをさらに若くする。キャッシュ内の、より若い世代のデータによって、周期解内部での、より少ない回数のイタレーションで周期解を検出可能になる。
【０２９７】
テストは、各イタレーションの後に実行してよい。このことは、解の新しい座標のセットが計算されるごとに行われることを意味する。しかし、プロセッサ資源を節約するため、周期的な間隔をおいてテストを実行してよい。テストがうまく機能するように、テストは、解が見分けやすい(recognizable)位置にあるときに実行されるべきである。テストが、毎回同様の位置において実行されることを確実にする１つの方法は、解のグラフ曲線において見分けやすい点を見つけることである。
【０２９８】
第１に可能な規準は、図１６に示すように、ｘの符号のマイナスからプラスへの変化である。つまり、ｘの符号がマイナスからプラスに変化すると、テストが実行される。第２の規準は、図１７に示すように、ｄｘの符号のプラスからマイナスへの変化である。第３の規準は、図１８に示すように、ｄｙの符号のプラスからマイナスへの変化である。
【０２９９】
規準の選択に際し、２つの点を考慮する必要がある。先ず第１には、あらゆる可能な周期解が、その規準を満たすことができなければならない点である。第２には、プロセッサへの負荷を少なくするため、行われるテストの数が最も少ない規準を選択すべき点である。
【０３００】
設計時においては、システムおよび選択されたパラメータ空間について幾つかの余分なテストを実行して、システムの効率性、安定性、および、正確性を確かめることができる。これらのテストは、鍵系列に関する統計的解析のみならず、グラム−シュミットの直交化法を用いたリヤプノフ指数の計算が含まれてよい。
【０３０１】
例Ｉ
以下に記す擬似プログラム・コードは、一度に１バイトの暗号化を行う、データの暗号化および復号化のプログラム例である。本プログラムは、図２０ないし図２７に示すフロー・チャートに従って動作する。本プログラムは、３２ビットのレジスタで動作する。図２０は、データを含むファイルを暗号化する方法を例示する。図２１ないし図２７は、以下の擬似コードに示される機能（関数）に対応する。これら機能は、周期解に関するチェックおよびローレンツ系を用いた逐次暗号と関係している。
【０３０２】
固定小数点ライブラリに関する擬似コード
FloatToFixedPoint  ：  浮動小数点数Ｘを固定小数点数に変換する。本関数の結果は、Ｓ（ａ．ｂ）またはＵ（ａ．ｂ）の形式である。
fixedpoint FloatToFixedPoint(float X)
{
return X*2b;
// ｂは、結果の固定小数点表現における小数部セ
// パレータよりも後のビット数。
}
【０３０３】
FixedPointToFloat  ：  Ｓ（ａ．ｂ）またはＵ（ａ．ｂ）の形式の固定小数点数Ｘを浮動小数点数に変換する。
float FixedPointToFloat(fixedpoint X)
{
return X*2-b;
// ｂは、ｘの固定小数点数表現における小数部セ
// パレータよりも後のビット数。
}
【０３０４】
ConvertFixedPoint  ：  入力された、Ｓ（ａ．ｂ）またはＵ（ａ．ｂ）の形式の固定小数点数Ｘを要求された形式、Ｓ（ｃ．ｄ）またはＵ（ｃ．ｄ）に変換する。引数Ｘに符号が付されていれば結果にも符号が付され、また、逆の場合も同様である。
fixedpoint ConvertFixedPoint(fixedpoint X)
{
return X*2d-b;
// ｂは、Ｘの固定小数点表現における小数部セパ
// レータよりも後のビット数。ｄは、結果の固定
//小数点表現における小数部セパレータよりも後の
// ビット数。
}
同一の形式の固定小数点数の加算および減算は、通常の、整数を加算および減算する関数を用いて実行される。
【０３０５】
MulFixedPoint  ：  ２つの固定小数点数ＸおよびＹの乗算。Ｘは、Ｓ（ａ．ｂ）またはＹ（ａ．ｂ）の形式を有し、Ｙは、Ｓ（ｃ．ｄ）またはＵ（ｃ．ｄ）の形式を有する。生じる固定小数点数は、Ｓ（ｅ．ｆ）またはＵ（ｅ．ｆ）の形式を有する。ＸおよびＹならびに結果は全て、符号付きもしくは符号なしの値のいずれかで、３２ビット・レジスタに記録される必要がある。「＞＞」は、符号付きの乗算に対しては、右方向算術シフトであり、符号のない乗算に対しては、右方向論理シフトである。
fixedpoint MulFixedPoint(fixedpoint X, fixedpoint Y)
{
fixedpoint64 Temp;
// 中間結果を保持するための６４ビット・レジス
// タ
Temp = X:Y;
// ２つの３２ビット値ＸおよびＹが乗算されて６
// ４ビットの中間結果になる。
return Temp >> b+d-f;
// ｂおよびｄはそれぞれ、ＸおよびＹの固定小数
// 点表現における小数部セパレータよりも後のビ
// ット数。ｆは、結果の固定小数点表現における
// 小数部セパレータよりも後のビット数。６４ビ
// ット・レジスタの値の３２ビット・レジスタへ
// の変換は、３２個の（最）上位ビットを無視し
// 、３２個の（最）下位ビットを目的レジスタ（
// デスティネーション・レジスタ）にコピーする
// ことで行われる。
}
【０３０６】
周期解をチェックするための擬似コード
周期解をチェックするための、サブシステムにおける大域的定数。本コードは、変曲部の数が、TransportAgeCacheDepth-1よりも少ないときに周期を検出可能である（イタレーションの半分の変曲部で可能となる。）。
const int CacheDepth = 32;
const int TransportAge = 2;
const int SpareSeedLength = 16;
【０３０７】
周期解をチェックするためのサブシステムは、幾つかの大域的変数を有する。この変数は、例えば、古い座標のキャッシュ、および、周期解が発見された場合にロードされるべきスペアの鍵を記録する。
fixedpoint xCache[CacheDepth];
fixedpoint yCache[CacheDepth];
fixedpoint zCache[CacheDepth];
int CoordinateAge[CacheDepth];
char SpareSeed[SpareSeedLength];
fixedpoint xOld, xOldOld;
【０３０８】
SetupCoordinateCheck  ：  周期解をチェックするためのサブシステムのセットアップ。座標キャッシュの位置を全て、（ｘ，ｙ，ｚ）＝（０，０，０）にリセットする。なぜなら、（０，０，０）は、ローレンツ系の定常点だからである。よって、これは、鍵のリロードが必要であることを示唆する座標値である。
void SetupCoordinateCheck()
{
int i;
// 座標キャッシュのクリア。
for (i=0; i<CacheDepth; i++)
{
xCache[i] = 0;
yCache[i] = 0;
zCache[i] = 0;
CoordinateAge[i] = 1;
}
xOld = 0;           // チェックをリセットするタイミングを検出する
xOldOld = 0;        // ための変数。
// スペア・シードの準備
for (i=0; i<SpareSeedLength ;i++)
SpareSeed[i] = 0;
// スペア鍵の生成。
Crypt(SpareSeed, SpareSeed+SpareSeedLength-1);
}
【０３０９】
InsertCoordinate  ：  あるレベルに記録されている以前の値の世代が、特定の閾値を超える（パスする）場合に、座標キャッシュのそのレベルに座標を挿入する。そのレベルの古い座標は、上書きされる前に次のレベルに挿入される。
void InsertCoordinate(fixedpoint x, fixedpoint y, fixedpoint z, int Level)
{
// もし世代(age)が「TransportAge」に等しければ、
// このレベルが可能な最高レベルでない限り、この
// レベル（「Level」）における現在の座標を次のレ
// ベル（「Level」＋１）に移す。
if ((CoordinateAge[Level] >= TransportAge) && (Level+1 < ChacheDepth))
{
InsertCoordinate(xCache[Level], yCache[Level], zCache[Level], Level+1);
CoordinateAge[Level] = 0;
}
xCache[Level] = x; // 新しい座標の挿入。
yCache[Level] = y;
zCache[Level] = z;
// このレベルの世代カウンタを増やす。
CoordinateAge[Level]++;
}
【０３１０】
CheckCoordinate  ：  変数ｘの解曲線が変曲部を有するかをチェックする。変曲部では、曲線の傾きの符号が、正から負に変化する。もし、なければ関数は終了する（exit）。そうでない場合、関数は、同じ座標が座標キャッシュに記録されていないかをチェックする。一致が見られれば、関数はスペア鍵をアルゴリズムにロードする。最後に、座標が座標キャッシュに挿入される。
void CheckCoordinate(fixedpoint x, fixedpoint y, fixedpoint z)
{
int i;
// もし、ｘの曲線の傾きが正から負に変化するよ
// うな変曲部があるならば、、、
if ((x <= XOld) && (xOldOld <= xOld))
{
// 記録された座標を全てチェックして、、、
for (i=0; i<Cachedepth; i++)
{
// もし一致が見られれば、、、
if ((xCache[i] == x) && (yCache[i] == y) && (zCache[i] == z))
{
// 周期性が見つかった！  −  スペア鍵をロード
// して初期化する。
Init128(SoareSeed);
break;
}
}
// 座標を座標キャッシュに挿入。
InsertCoordinate(x, y, z, 0);
}
// ｘの値を、後の比較のために記録する。
xOldOld = xOld;
xOld = x;
}
【０３１１】
ローレンツ系を用いた逐次暗号のための擬似コード
ここでは、モジュラス関数、ＭＯＤは、引数ｑをとって、［０；ｑ［の範囲の正の値を返す。
【０３１２】
ローレンツ方程式における変数σを「ｓ」と新たに命名する。
【０３１３】
固定小数点変数の形式を、表Ｉより定める。
表Ｉ
【表１】
2005529364.tif 000049
【０３１４】
暗号化関数において一時的に用いられる固定小数点変数の形式を、表ＩＩより定める。
表ＩＩ
【表２】
2005529364.tif 000050
【０３１５】
可能な、パラメータｒ、ｂ、および、ｓの値、ならびに、可能な、座標ｘ、ｙ、および、ｚの出発条件(starting conditions)を表ＩＩＩに示す。
表ＩＩＩ
【表３】
2005529364.tif 000051
【０３１６】
Crypt  ：  暗号化、復号化、および、ＰＲＮＧの関数。引数は、PData（暗号化／復号化すべき最初のバイトのポインタ）およびPEnd（暗号化／復号化すべき最後のバイトのポインタ）である。この関数が、擬似乱数を生成するのであれば、要求される擬似ランダム・データと同じサイズのデータ量の暗号化すべきデータ（例えば、ゼロ(zeroes)）を関数に与える。
void crypt(char* PData, char* PEnd)
{
fixedpoint dt;
while (PData <= PEnd)
{
// 時間ステップの計算。
dt = 10*2-11 + x MOD 2-11;
tx = s*(y-x); // 次の状態の計算。
ty = x*(r-z)-y;
tz = x*y-b*z;
x = x + tx*dt;
y = y + ty*dt;
z = z + tz*dt;
// 座標をチェックし、挿入する。
InsertCoordinate(x, y, z, 0);
// 抽出および暗号化。
*PData = *PData XOR ((y*224 XOR y*216) MOD 28);
PData = PData + 1; // 暗号化すべきデータのポインタを進める。
}
}
【０３１７】
MaskParameters  ：  展開された鍵もしくは擬似ランダム・シーケンスがロードされた後で、初期の状態およびパラメータの有効性を確保する。この状態およびパラメータは、この関数を用いて修正を受けなければならない。表ＩＩＩに定めた制限に従って訂正される。
void MaskParameters()
{
x = x*0.25;
y = y*0.25;
z = z*0.25;
b = (b MOD 4) + 1;
s = (s MOD 8) + 10 b;
r = (r MOD 8) + 12.5 + 2*b + 0.5*s;
}
【０３１８】
Init192  ：  １９２ビットのシード（ポインタPSeedにより参照される。）を、システムの状態へロードする。
void Init192(char* PSeed)
{
x = *PSeed;        // シードを状態にコピーする。
y = *(PSeed+4);
z = *(PSeed+8);
r = *(PSeed+12);
b = *(PSeed+16);
s = *(PSeed+20);
MaskParameters();  // 状態を訂正し、有効にする。
}
【０３１９】
Init128  ：  １２８ビットのシード（もしくは鍵）（ポインタPSeedにより参照される。）を、鍵のセットアップ手続きを行っているシステムの状態にロードする。
void Inint128(char* PSeed)
{
char Seed192[24]   // メモリの２４バイトをアロケート。
int i;
x = *PSeed;        // シードを状態に展開する。
y = *(PSeed+3);
z = *(PSeed+6);
r = *(PSeed+8);
b = *(PSeed+10);
s = *(PSeed+12);
MaskParameters();  // 状態を有効にする。
// 抽出の前に１６ラウンドのイタレーション。
Crypt(Seed192, Seed192+15);
for (i=0;i<24;i++) // シードのデータをゼロにリセット。
Seed192[i] = 0;
// ２４バイトの擬似ランダム・データの生成。
Crypt(Seed192, Seed192+23);
Init(Seed192);     // 状態に擬似ランダム・データをロード。
// アルゴリズムを使用する前に１６ラウンドのイ
// タレーション。
Crypt(Seed192, Seed192+15);
// 座標チェックアルゴリズムを開始する。
SetupCoordinateCheck();
}
【０３２０】
システムの出力、すなわち鍵系列、の統計学的特性を、ＮＩＳＴ（米国標準技術局(National Institute of Standards and Technology)）テスト・スイート(NIST Test Suite)によってテストしてもよい。ＮＩＳＴスペシャル・パブリケーション(NIST Special Publication)、８００−２２、「ア・スタティスティカル・テスト・スイート・フォー・ランダム・アンド・プスードランダム・ナンバー・ジェネレーターズ・フォー・クリプトグラフィック・アプリケーションズ('A Statistical test suite for random and pseudo-random number generators for cryptographic applications')」を参照されたい。また、<http://csrc.nist.gov/rng/rng2.html>も参照されたい。ＮＩＳＴテスト・スイートは、１６の異なるテストを含んでいる。これらについて、以下で概説する。テストは、例えば、上記、ローレンツ系を用いた逐次暗号のための擬似コードに類似したプログラムに対して実行可能である。
【０３２１】
テストは、殆ど重複していない、幾つかのランダムさに関する定義を与える。「どのような計算を行えば、真にランダムなシーケンスとなるのか、または、真にランダムなシーケンスを得るにはどのような計算が必要か？」という文言によって、確率論の複雑な概念を必要とする定義も紹介されているが、以下では、幾分シンプルな定義を記す。上記のＮＩＳＴの出版物は、適当な定義と、確率論に関する論文に対するリファレンスが記されている。
【０３２２】
一次元度数検定(Frequency monobit test)  ：  このテストは、鍵系列のシーケンス全体におけるゼロ（０）とワン（１）の比を求める。真にランダムな鍵系列のシーケンスに対しては、ワンの数は、ゼロの数とおよそ同じであると予想される。このテストでは、問題にしている鍵系列のシーケンスがこの性質を保持しているかどうかを調査する。
【０３２３】
ブロック単位の頻度検定(Frequency block test)  ：  このテストでは、鍵系列のシーケンスをＭビットのブロックに分割する。真にランダムな鍵系列のシーケンスにおいては、各ブロックのワン（１）の数は、およそ２分のＭになる。もし、このテストにより、試験される鍵系列のシーケンスが特徴づけられるならば、このテストは成功であるとみなされる。
【０３２４】
連の検定(Runs test)  ：  鍵系列シーケンス内部の連は、同じビットのサブシーケンスと定義される。本テストは、様々な長さの連をチェックする。長さｋの連は、連のビットと逆の値を有するビットによって区切られたｋ個の同じビットで構成される。異なる長さの連の発生を、真にランダムなシーケンスで予想される場合と比較する。
【０３２５】
最長連検定(Longest run of zeroes)  ：  本テストにおいては、シーケンスはそれぞれＭビットのブロックに分割され、各ブロックにおけるワン（１）の最長連が探索される。ブロックの連の長さ分布が、ランダムなシーケンスに対する分布と比較される。予想されるワンの最長連の長さの不規則性は、予想されるゼロの最長連の長さにも不規則性が存在することを示唆する。
【０３２６】
２値行列ランク検定(Binary matrix rank test)  ：  本テストにおいては、鍵系列のシーケンスからなる、固定長のサブシーケンスを用いて、Ｍ・ＱビットのセグメントからＭ×Ｑの行列を作って、幾つかの行列を形成する。これら行列のランクを計算することにより、本テストは、サブシーケンス間の線形従属性をチェックする。
【０３２７】
離散フーリエ変換検定(Discrete Fourier transform test)  ：  離散フーリエ変換を用い、本テストは、鍵系列のシーケンスの周期性に関する特性をチェックする。生じる周波数成分の高さを、真にランダムなシーケンスに対して定められた閾と比較する。
【０３２８】
重なりのないテンプレート適合検定(Non-overlapping template matching test)  ：  本テストを実施する場合、幾つかの、非周期的なｍビットのパターンが定められる。そして、この特定のパターンの存在をカウントする。
【０３２９】
重なりのあるテンプレート適合検定(Overlapping template matching test)  ：  本テストは、重なりのないテンプレート適合検定とよく似ている。両者の違いは、ｍビットのパターンの構造、および、パターンの探索を行う方法のみである。ここでは、ｍビットのパターンは、ｍ個のワンのシーケンスである。
【０３３０】
モーラーのユニバーサル統計検定(Maurer's universal statistical test)  ：  本テストは、鍵系列のシーケンスにおいて、一致するパターン間の距離を算出する。これにより、鍵系列のシーケンスの圧縮性に関する測度が得られる。高い圧縮性を示す鍵系列のシーケンスは、ランダムではないと判断される。
【０３３１】
レンペル−ジフ圧縮検定(Lempel-Ziv compression test)  ：  本テストにおいては、異なるパターンの数を累積的に求める。よって、鍵系列のシーケンスの圧縮性に関する測度を与える。結果は、ランダムなシーケンスと比較される。このランダムなシーケンスは、異なるパターンを特徴的な数だけ有する。
【０３３２】
線形複雑度検定(Linear complexity test)  ：  本テストは、線形フィードバック・シフト・レジスタの長さを求めて、シーケンスがランダムとみなすのに十分なほどに複雑であるか否かを判断する。
【０３３３】
系列検定(Serial test)  ：  本テストは、可能な、重なりのあるｍビットのパターン全てについて、シーケンス全体に渡り、頻度を求める。真にランダムな鍵系列のシーケンスに対しては、２のｍ乗個の可能な、ｍビット・パターンは全て、同じ確率で発生する。この確率からの偏差を、問題にしている鍵系列のシーケンスについて求める。
【０３３４】
近似エントロピー検定(Approximate entropy test)  ：  本テストは、系列検定と同じ点に関心を向けている。しかし、ｍビットおよびｍ＋１ビットのパターンの頻度を求めるという特徴が追加される。異なる長さのパターンに対して得られる結果を比較し、シーケンスがランダムである、および、ランダムではない、のいずれかの特徴付けを行う。
【０３３５】
累積和検定(Cumulative sums test)  ：  本テストにおいては、シーケンスを用い、ワン（１）とゼロ（０）をそれぞれ、＋１と−１に対応させたランダム・ウォークを定義する。部分的な鍵系列のシーケンスの累積和の大きさが、真にランダムな鍵系列のシーケンスに対して予想される場合と比較してあまりに大きいか、または、あまりに小さいか、どうかを判断する。
【０３３６】
ランダム偏差検定(Random excursions test)  ：  本テストにおいては、シーケンスは、累積和検定と類似して、ランダム・ウォークに変換される。ランダム・ウォークが通り抜ける可能性がある（累積和が保持する）特定の状態を訪れている数を用いてこのシーケンスがランダムであるか、または、ランダムでないか、のいずれかの特徴付けを行う。考慮される状態は、−４、−３、−２、−１、１、２、３、４、である。
【０３３７】
種々のランダム偏差検定(Random excursions variant test)  ：  ランダム偏差検定とほぼ同一である。このテストでは、１８の状態を用いる。
【０３３８】
各テストで、Ｐ値、Ｐｖａｌを算出する。この値は、実際のシーケンスと、仮定の真にランダムなシーケンスとの定量的な比較を与える。Ｐ値の定義は、実際のテストによる（ＮＩＳＴの文書を参照。）。Ｐｖａｌ＞αなる値は、ランダムさを示す。ここで、αは、区間０．００１≦α≦０．０１の値である。αの厳密な値は、テストごとに定められる。別に、非ランダムさも宣言される。
【０３３９】
ＮＩＳＴテスト・スイートは、それぞれのテストに対し、Ｐ値が規準（クライテリオン）Ｐｖａｌ＞αをパスするサンプルの比率を定めている。ランダム偏差検定を除く上記テストの全てにおいて、個々のＰ値、Ｐｖａｌが適切な規準をパスするサンプルの比率は、少なくとも０．９７２７６６であるべきである。ランダム偏差検定については、ＮＩＳＴの示した比率では、少なくとも０．９６７８１３であるべきである。
【０３４０】
本方法の好適な実施形態においては、以下に記した比率を達成することが望ましい。ランダムに選択した鍵を使用して求めた少なくとも１０の４乗個のサンプルの平均として、少なくとも０．９７５、例えば、少なくとも０．９８、例えば、少なくとも０．９８５、例えば、少なくとも０．９９、例えば、少なくとも０．９９５、例えば、少なくとも０．９９８であることが望ましい。
【０３４１】
ＮＩＳＴテスト・スイートへ入力するパラメータとして可能なパラメータを、ＮＩＳＴテスト・スイートに添付の文書で用いられる表記法で、以下の表ＩＶに示す。
表ＩＶ
【表４】
2005529364.tif 000052
【０３４２】
例ＩＩ
−  表Ｖは、本明細書において広く開示された方法（図１ないし図５参照。）によって得られる暗号化速度、ならびに、様々な周知の暗号化法の暗号化速度を示す。本発明に係る方法による暗号化の速度は、Ｍ．ベスガード、Ｍ．ベステレージャ、Ｔ．ペデルセン、Ｊ．クリスチャンセン、および、Ｏ．スカベニウスの共著、ラビット：  ア・ニュー・ハイ−パフォーマンス・ストリーム・サイファ、ファースト・ソフトウェア・エンクリプション（ＦＳＥ）のプロシーディング、２００３年、シュプリンガー、ベルリン(M. Boesgaard, M. Vesterager, T. Pedersen, J. Christiansen and O. Scavenius: Rabbit: A New High-Performance Stream Cipher, Proceedings of Fast Software Encryption (FSE) 2003, Springer, Berlin, (2003))、に記載のアルゴリズムに関して測定される。本アルゴリズムは、ＭＭＸ（）命令を用いたアセンブリ言語で実現された。
【０３４３】
測定結果から、速度は、４５０ＭＨｚのペンティアムＩＩＩプロセッサ上における９４７Ｍビット毎秒の暗号化／復号化速度に相当することが求められた。
表Ｖ
【表５】
2005529364.tif 000053
表Ｖつづき
【表６】
2005529364.tif 000054
速度の評価は、異なる出典による。表Ｖ内「速度［クロック／バイト］」列における上付き添え字は、以下に記す出典に関するリファレンスを指している。
１．クリプト＋＋４．０ベンチマーク(Crypto++ 4.0 Benchmarks)、２００３年６月６日現在<www.eskimo.com/~weidai/benchmarks.html>よりアクセス可能。ＭＳ  Ｃ＋＋（インテル  セレロン(Celeron)８５０ＭＨｚ）。
２．ブルース・シュナイアーら(Bruce Schneier et al.)  ：  ファースト・ソフトウェア・エンクリプション(Fast Software Encryption)  ：  デザイニング・エンクリプション・アルゴリズムス・フォー・オプティマル・ソフトウェア・スピード・オン・インテル・ペンティアム・プロセッサ(Designing Encryption Algorithms for Optimal Software Speed on the Intel Pentium Processor)。
３．カズマロ・アオキら(Kazumaro Aoki et al.)  ：  ファースト・インプリメンテーション・オブ・ＡＥＳカンディデート(Fast Implementation of AES Candidates)（１２８ビットの鍵、１２８ビットのブロック、ペンティアムＩＩ）。
４．パフォーマンス・オブ・オプティマイズド・インプリメンテーションズ・オブ・ザＮＥＳＳＩＥプリミティブス（バージョン２．０）(Performance of Optimized Implementations of the NESSIE Primitives (version 2.0))、２００３年６月６日現在<http://www.cosic.esat.kuleuven.ac.be/nessie/>よりアクセス可能。（数種のペンティアムＩＩＩを使用。）
一般に、速度とメモリは、多くの実装においては、交換可能である。例えば、より多くのメモリを要するルックアップ表(lookup tables)を使用すれば、処理時間を減じることができる。
例ＩＩ終了。
【０３４４】
２進数で表現された数について計算を実行する場合、例えば、２つの数を加算、または、減算する場合、加算、または、減算により生じる数のビットを省くかもしくは無視してもよいならば、加算、または、減算に含まれる計算の一部を省くことができる場合がある。よって、生じる数の最下位ビットが必要ないならば、または、生じる数の最上位ビットを無視してよいならば（擬似乱数生成器で起こる例であって、必要なのは計算の真の結果ではなく、単に擬似乱数が必要とされる場合にあたる。）、生じる数の最下位、および／または、最上位ビットを計算する必要はない。
【０３４５】
故に、あるビット幅を有する整数についての数学的演算を実行する方法を開示する。このビット幅は、計算が実行される処理装置のレジスタ幅よりも大きい。固定小数点数についての数学的演算もしくは計算は、整数演算として実行される。そのため、整数は、２進数として表される。整数の２進表現には、特定の、例えば、３２ビットのレジスタ幅が必要である。２進数を表現するのに必要な幅よりも小さなレジスタ幅、例えば、８ビット、を有する処理装置で、例えば、加算や乗算といった数学的演算を実行する場合、その２進数を、複数の２進部分数(binary sub-numbers)に分割し、その２進部分数それぞれを処理装置のレジスタ幅と等しいか、より小さな幅で表現すればよい。従い、２つの３２ビット数は、２セットの４つの８ビットの部分数に分割し、８ビットの部分数について、８ビットの処理装置を用いて乗算や加算を実行すればよい。
例えば、
数Ａ＝１１０１１００１１０１１０１０１０１１０１０１０１０１１０１１１と、
数Ｂ＝１００００１１１０１１１１０１１１１１１０１０１０１００１００１の加算の結果Ｒ＝Ａ＋Ｂを得るには、以下のステップを実行すればよい。
１．数ＡおよびＢはそれぞれ、４つの部分数、Ａ１、Ａ２、Ａ３、Ａ４、および、Ｂ１、Ｂ２、Ｂ３、Ｂ４、に分割される。Ａ１は、数Ａの最上位８ビットを表し、そして、Ａ４は、数Ａの最下位８ビットを表す。他も同様である。従い、上記例においては、部分数は、
Ａ１＝１１０１１００１、
Ａ２＝１０１１０１０１、
Ａ３＝０１１０１０１０、
Ａ４＝１０１１０１１１、
Ｂ１＝１００００１１１、
Ｂ２＝０１１１１０１１、
Ｂ３＝１１１１０１０１、
Ｂ４＝０１００１００１、
となる。
２．最下位の部分数、Ａ４およびＢ４を加算する。つまり、Ｒ４＝Ａ４＋Ｂ４とする。Ａ４とＢ４の加算により生じるあらゆるキャリー（繰り上がり）は、Ｃ４として記録する。
３．２番目に下位の部分数、Ａ３およびＢ３、ならびに、上記ステップ２からのキャリーＣ４を加算する。つまり、Ｒ３＝Ａ３＋Ｂ３＋Ｃ４とする。この加算により生じるあらゆるキャリーを、Ｃ３として記録する。
４．ステップ３と同様にしてＡ２およびＢ２の加算を行い、Ｒ２およびＣ２を得る。
５．ステップ３およびステップ４と同様にしてＡ１およびＢ１の加算を行い、Ｒ１を得る。この加算により生じるあらゆるキャリー、Ｃ１、は、オーバーフローとみなし、考慮しない。
６．ＡおよびＢの加算によって生じる数を、４つの部分数、Ｒ１、Ｒ２、Ｒ３、Ｒ４、として記録し、かつ／または、部分数、Ｒ１、Ｒ２、Ｒ３、Ｒ４、より作られる３２ビット幅のストリング（文字列）として表す。
【０３４６】
乗算で生じる数の全てのビットを以降の計算において使用しない場合、ならびに／または、以降の計算で、全てのビットが重要ではなく、無視してもよいような場合、数のビット幅よりも小さなレジスタ幅を有する処理装置上での乗算に関わる処理時間を、以下に記すような部分的乗算のみを行うことで、短くしてもよい。例えば、２つの１６ビット数、ＤおよびＥの乗算を８ビットの処理装置で行って３２ビット数Ｆを求めるには、以下のステップを実行してもよい。
ここで、
Ｄ＝１１０１１００１１０１１０１０１、および、
Ｅ＝０１１０１０１０１０１１０１１１、である。
１．  各数、ＤおよびＥ、を２つの部分数、Ｄ１、Ｄ２、および、Ｅ１、Ｅ２、に分割する。Ｄ１は、Ｄの最上位８ビットを表し、Ｄ２は、Ｄの最下位８ビットを表す。他も同様である。従い、上の例においては、部分数は以下のとおりになる。
Ｄ１＝１１０１１００１
Ｄ２＝１０１１０１０１
Ｅ１＝０１１０１０１０
Ｅ２＝１０１１０１１１
２．  Ｄ１をＥ１と乗算し、２つの８ビット数、Ｇ１およびＧ２で表された１６ビット数を得る。
３．  Ｄ１をＥ２と乗算し、２つの８ビット数、Ｈ１およびＨ２で表された１６ビット数を得る。
４．  Ｄ２をＥ１と乗算し、２つの８ビット数、Ｉ１およびＩ２で表された１６ビット数を得る。
５．  Ｄ２をＥ２と乗算し、２つの８ビット数、Ｊ１およびＪ２で表された１６ビット数を得る。
６．  結果として生じる３２ビット数Ｆは、４つの８ビット数、Ｆ１、Ｆ２、Ｆ３、および、Ｆ４で表される。図１９に示されるように、
Ｆ４＝ｊ２、
Ｆ３＝Ｈ２＋Ｉ２＋Ｊ１、
Ｆ２＝Ｇ２＋Ｈ１＋Ｉ１＋［Ｆ３に関する計算で生じる全てのキャリー］、
Ｆ１＝Ｇ１＋［Ｆ２に関する計算で生じる全てのキャリー］、
となる。ここで、ＭＳは、「最上位８ビット」、ＬＳは、「最下位８ビット」を指す。
Ｆ４、すなわち、乗算で生じる数の（最）下位ビット、を無視したり、Ｆ３を導出する加算においてＪ１を無視したりすることで、処理時間を短くすることが可能である。従い、ステップ５におけるＤ２とＥ２との乗算を省略でき、よって、さらに実行する数学的演算を減らして処理時間を短くできる。この省略は計算の結果に影響を及ぼすが、例えば、暗号化／復号化アルゴリズムにおける、例えば、擬似乱数生成器における全ての計算に渡って一貫してこの省略を行い、また、復号化および暗号化の両方でこの省略を行うのならば、この省略は許容可能である。通例、問題にしている状況、例えば、暗号化／復号化、において重要な数学的システムの特性、例えば、カオス的なふるまい、が、計算における１つまたは複数の計算ステップの省略の与える影響を受けても、維持されている事を、確かめることが望ましい。
【０３４７】
また、第１の２進数と第２の２進数との乗算を実行する方法を示す。本方法は、中間結果数を合計するステップを有する。中間結果の合計は、２つの数の積に等しい。各中間結果は、第１数の１つのビット（１または０）と第２数全体、α、との積で表される。この積およびそれによる中間数は、シンプルな「ｉｆ．．．ｔｈｅｎ」アルゴリズム、および／または、論理積（ＡＮＤ）で求めることができる。なぜなら、積、１・α＝αであり、また、積、０・α＝０だからである。
【０３４８】
中間数の計算に続き、中間数の位置を、左方向に幾つかシフトさせる。シフトさせる位置の数は、その中間数を計算するのに用いた第１数のビット位置に対応している。あるいは、第２数、または、第１数の特定のビットを左方向にシフトさせる。２つの数のうちの第１の数のうちの１つのビットを乗算するステップを、適宜、第１数の各ビットについて繰り返す。例えば、第１数、０１１０、と、第２数、１０１０との積は以下のようにして計算される。第１数の最下位ビット、０、を第２数１０１０と乗算し、第１中間数、００００、を得る。次に、第１数の２番目の最下位ビット、１、を第２数と乗算し、左方向に位置を１つシフトさせて第２中間数、１０１００、を得る。次に、第１数の３番目の最下位ビット、１、を第２数と乗算し、左方向に位置を２つシフトさせて第３中間数、１０１０００、を得る。最後に、第１数の最上位ビット、０、を第２数と乗算し、左方向に３つ位置をシフトさせて第４中間数、０００００００、を得る。生じる数を、これら４つの中間数の合計より求める。以下に示す例においては、下線が、各ステップで乗算に用いられるビットを示す。
【数４７】
2005529364.tif 000055
【０３４９】
図２８に、本発明に係る方法において用いることができる別の数学的システムを示す。このシステムは、結合した５つのサブシステムを有する。ここでは、サブシステムは、１次元写像である。写像のうちの３つは、定常なパラメータを有し、写像のうち２つには、カウンタが作用する。図２８は、本システムの構成を示す。
【０３５０】
このシステムのイタレーションのスキームは、以下の方程式で定める。
【数４８】
2005529364.tif 000056
ここで、ｘｎ，ｉは、システムｎのイタレーションｉにおける状態変数であり、ｐ０、ｐ１、および、ｐ２は、定常なパラメータであり、ｃ０，ｉ、および、ｃ１，ｉは、カウンタである。結合は、結合強度ｋで、一方向に作用する。パラメータ、ｐ０、ｐ１、および、ｐ２は、区間［０；１［の値がアサインされる。カウンタ、ｃ０，ｉ、および、ｃ１，ｉ、は、１に満たない数(fraction of 1)のインクリメントで区間［０；１［を循環する。ｃ０，ｉ、および、ｃ１，ｉのインクリメントは、同一でなくともよい。カウンタは、互いに非従属的に増加されてよい。別の実施形態においては、カウンタのうちの第１のカウンタは、第２のカウンタがある値に達した場合にのみ増加されてよい。第１のカウンタは、各イタレーションにおいて増加されてもよく、そのかわり、第２のカウンタは、第１のカウンタがその最大値に達した場合にのみ増加されてよい。あるいは、両カウンタを、各イタレーションにおいて増加しても、または、２者択一的に増加させることで、第１のカウンタは２回のイタレーションごとに増加され、第２のカウンタは第１のカウンタが増加されないイタレーションにおいて増加されてもよい。
【図面の簡単な説明】
【０３５１】
【図１】状態変数ｘについて二乗関数を用いる暗号化法の例図である。
【図２】カウンタ・インクリメントを含んでいる、状態遷移関数(next-state function)の例図である。
【図３】結合（カップリング）を有する、図１のシステムの例図である。
【図４】カウンタ・インクリメンテーションを有するシステムの例図である。
【図５】暗号化／復号化プロセスの例図である。
【図６】電子データの、暗号化、送信、および、復号化のシーケンスの例図である。
【図７】ブロック暗号システムにおける暗号化シーケンスの例図である。
【図８】逐次（ストリーム）暗号システムにおける暗号化シーケンスの例図である。
【図９】暗号化／復号化アルゴリズムにおける鍵要素（キー・エレメント）の例図である。
【図１０】ローレンツ系の数値解の曲線である。
【図１１】パディングによる鍵の伸張（キー・エクステンション）に関する例図である。
【図１２】同一のもしくは異なるカオス系に関する、２つもしくはそれよりも多くのインスタンスの同時的な計算に関し、可能な方法についての例図である。
【図１３】周期解のチェックの実行に関する原理の例図である。
【図１４】周期解を有する数学的システムの例図である。
【図１５】以前に計算された座標（コーオーディネイト）を記録する、座標キャッシュにおける、レベル間での移送に関する例図である。
【図１６】周期解検出のための様々な規準に関する例図である。
【図１７】周期解検出のための様々な規準に関する例図である。
【図１８】周期解検出のための様々な規準に関する例図である。
【図１９】８ビット・プロセッサ上で、１６ビット数の乗算を行う方法の例図である。
【図２０】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２１】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２２】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２３】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２４】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２５】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２６】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２７】暗号化法の、ある実施形態の動作を示すフロー・チャートである。
【図２８】本発明に係る方法において用いることができる数学的システムの例図である。
【図１】
2005529364.tif 000059
【図２】
2005529364.tif 000060
【図３】
2005529364.tif 000061
【図４】
2005529364.tif 000062
【図５】
2005529364.tif 000063
【図６】
2005529364.tif 000064
【図７】
2005529364.tif 000065
【図８】
2005529364.tif 000066
【図９】
2005529364.tif 000067
【図１０】
2005529364.tif 000068
【図１１】
2005529364.tif 000069
【図１２】
2005529364.tif 000070
【図１３】
2005529364.tif 000071
【図１４】
2005529364.tif 000072
【図１５】
2005529364.tif 000073
【図１６】
2005529364.tif 000074
【図１７】
2005529364.tif 000075
【図１８】
2005529364.tif 000076
【図１９】
2005529364.tif 000077
【図２０】
2005529364.tif 000078
【図２１】
2005529364.tif 000079
【図２２】
2005529364.tif 000080
【図２３】
2005529364.tif 000081
【図２４】
2005529364.tif 000082
【図２５】
2005529364.tif 000083
【図２６】
2005529364.tif 000084
【図２７】
2005529364.tif 000085
【図２８】
2005529364.tif 000086
【国際調査報告】
2005529364.tif 000087
2005529364.tif 000088
2005529364.tif 000089
2005529364.tif 000090
2005529364.tif 000091
2005529364.tif 000092
2005529364.tif 000093
2005529364.tif 000094