JP2005529364A - 擬似乱数生成器の出力の予測不可能性を向上させる方法 - Google Patents
擬似乱数生成器の出力の予測不可能性を向上させる方法 Download PDFInfo
- Publication number
- JP2005529364A JP2005529364A JP2004511973A JP2004511973A JP2005529364A JP 2005529364 A JP2005529364 A JP 2005529364A JP 2004511973 A JP2004511973 A JP 2004511973A JP 2004511973 A JP2004511973 A JP 2004511973A JP 2005529364 A JP2005529364 A JP 2005529364A
- Authority
- JP
- Japan
- Prior art keywords
- calculation
- value
- array
- counter
- numbers
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/582—Pseudo-random number generators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/08—Computing arrangements based on specific mathematical models using chaos models or non-linear system models
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/001—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using chaotic signals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/065—Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
- H04L9/0656—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
- H04L9/0662—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
- H04L9/0668—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator producing a non-linear pseudorandom sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/582—Pseudo-random number generators
- G06F7/586—Pseudo-random number generators using an integer algorithm, e.g. using linear congruential method
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Nonlinear Science (AREA)
- Mathematical Analysis (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Algebra (AREA)
- Storage Device Security (AREA)
- Complex Calculations (AREA)
Abstract
正のリヤプノフ指数もしくはカオス的挙動を示す数学的システムにおいて計算を実行する方法である。本方法はシステムのパラメータを変更するステップを有する。例えば、逐次暗号アルゴリズムの擬似乱数生成器や、ブロック暗号システムや、HASH/MACシステム、といった暗号法に用いることで、予測不可能性が向上される。類似のシステムにおいて、計算方法は、2つの数の乗算を行い、乗算より生じた数の、少なくとも1つの(最)上位ビットを操作して出力を作成するステップを有する。2つの数による除算により導出された値を用い、出力を導いてもよい。数の系列を生成するシステムでは、各計算ステップにおけるキャリー値を各カウンタに加算することにより、カウンタの配列を更新する。固定小数点演算を用いてもよい。識別値の決定法、ならびに、データのセットに対する同時的な暗号化、および/または、復号化の方法を開示する。
Description
本発明は、擬似乱数の予測不可能性向上の点に関する。この擬似乱数は、少なくとも1つの関数、特に非線形関数を含んだ数学的システムにおいて数値計算により生成される。この数学的システムは、カオス的挙動を示す、微分方程式を有する非線形系であってよい。本発明は、例えば電子デバイスにおける暗号化および復号化に有用である。
暗号化なる語は一般に、データ変換に関連する科学および技術を包含する。このデータ変換は、データへの不正なアクセスを防ぎつつ、データの蓄積および送信を可能とすることを目的として実施される。暗号化によって、データは意図した受信者以外の者が理解できないようになる。技術的な進歩により大量のデータの安全な送信および蓄積を求められるようになり、従って、暗号化は、著作権の保護を含む知的財産の保護においてますます重要な役割を果たすようになっている。
暗号化および復号化アルゴリズムにおいて、特定のデータ変換はアルゴリズムに対する入力、所謂、鍵、に依存する。データの送信者と受信者が適切な鍵のセットを有する場合、送信者と受信者はデータを正しく暗号化および復号化できる。一方、暗号化されたデータにアクセスしようとする第三者は、暗号化されたデータの適切に復号化されたバージョンを見ることができない。なぜなら、彼女または彼は適切な鍵を所有していないからである。
一般に、暗号化されるデータのセットを「平文」または「元データ」と称し、それに対し、データのセットの暗号化されたバージョンを「暗号文」または「暗号化データ」と称する。
2種の対称暗号アルゴリズムがあり、それぞれ、所謂、「ブロック暗号」と、所謂、「逐次暗号」である。両者とも、対称鍵を用いる。つまりは、暗号化に用いられる鍵と復号化に用いられる鍵は、同一であるか、または、些細な関連性を有する。ブロック暗号は、元データのセットを所与のサイズの複数ブロック、例えば、1ブロックあたり64ビット、に分割する暗号アルゴリズムである。各ブロックに対し、数学的および論理的演算が行われ、元データ全体は、通常、擬ランダム・データを含むブロックに変換される。正しい復号化鍵で復号化を実施すれば、暗号化に用いた数学的および論理的操作の逆演算によって復元可能である。
(同期式)逐次暗号においては、擬似乱数生成器が、鍵に基づいて擬似乱数列を生成する。この乱数列は、鍵系列と称される。算術的および/または論理的演算によって、鍵系列は元データのセットの複数のサブセットと混合(mix)される。データのサブセットの総和(sum)は、暗号化されるべき元データを定める。混合(mixing)の結果は、暗号化データである。暗号化データは、擬似乱数列を暗号化データから抽出する(extract)手続き(procedure)を繰り返し、元データ、つまり、復号化データにまで帰着されるようにして復号化される。
平文はしばしば、論理演算子を用いて鍵系列と混合される。ほとんどの場合、所謂、XOR演算子を用いる。これは、「排他的論理和(exclusive or)」とも称される。この演算子は、記号、
として表記される。XORは、2つの1ビットの引数より、1つの1ビットの演算結果を与える。全ての生じ得る結果を以下に示す。
平文と擬似乱数鍵系列にXOR演算子を適用することで、暗号文を得る。復号化に際して同じ鍵系列が生成され、今度はその鍵系列と暗号文にXOR演算子が適用され元の平文を得る。この、同じ鍵系列は、当初、暗号化のための鍵系列が基づいた鍵を用いることによってのみ生成可能である。
また、所謂、公開鍵システム(public key system)も開発されており、このシステムは一対の非対称鍵、つまり、公開鍵(public key)と秘密鍵(private key)に特徴がある。この2つの鍵は、異なる。このようなシステムにおいては、通常、公開鍵を用いて暗号化を行い、秘密鍵を用いて復号化を行う。秘密鍵と公開鍵は、ある方法により互いに対応付けされる。暗号化に用いた鍵を用いて復号化を行うことはできず、その逆も同様である。従って、元データの取得容易性に関し、安全性を侵すことなく、公開鍵を公開することができる。よって、暗号化データを、コンピュータ通信網を介して送信する場合、データの受信者は、先ず、公開鍵と秘密鍵を含む一組の鍵を生成する。そして、公開鍵は、例えば、データの送信者に渡され、秘密鍵は安全な場所に保管される。データの送信者はその公開鍵を用いて元データを暗号化し、それから、暗号化データを受信者に送信する。受信者は暗号化データを受信すると、先に暗号化に用いた公開鍵に対応した秘密鍵を復号化システムに与え、システムが暗号化データを処理し、元の、復号化データを得る。公開鍵システムはそもそも、例えばブロックまたは逐次暗号において用いられる鍵を送信することに用いられたが、今や、データの暗号化と復号化に用いられる。
本発明に係る方法は、暗号化法および暗号化システム、特に、逐次暗号アルゴリズム、ブロック暗号アルゴリズム、ハッシュ関数、および、MAC(メッセージ認証コード)関数に適用することができる。しかし、これらに限定されることはない。これらの方法、関数、および、アルゴリズムには、擬似乱数生成器が含まれる。この生成器は、再現可能に、つまり、異なる2つのサイクルにおいて同じ鍵を擬似乱数生成器に入力した場合、これら2つのサイクルにおいて同じ数を生成するようにして、擬似乱数を生成可能である。
擬似乱数生成器においては、カオス系、つまり、非線形微分方程式系、の数値解、または、カオス的挙動を示す写像が提案されている。「カオス的」なる語は、狭義の数学的意味においては、連続系における文脈でのみ用いられる。しかし、本明細書においては、少なくとも1つの正のリヤプノフ指数を有する離散(discrete)または有限系(finite systems)を「カオス的」と称する。
カオス系は通常、少なくとも1つの状態変数(state variable)Xを定める。このような系の数値的解法は、通例、逐次代入(iteration)または積分(integration)ステップを有する。カオス系においては、所与の瞬間における解Xnは初期条件X0に依存する。それは、X0における僅かなずれが解Xnにおける莫大なずれを生ずる程に依存する。このような系は、しばしば、初期条件に対する鋭敏性を示すと称される。よって、擬似乱数生成器、つまり、カオス系を数値的に解くアルゴリズムが、再現性を有する擬似乱数列を出力するには、正確な初期条件X0を知っている必要がある。従って、カオス系に依存した暗号化アルゴリズムにおいては、カオス系の数値解に用いる初期条件X0は、暗号化システムの使用者の入力する鍵から与えられる。そうすることで、例えば、データの暗号化や復号化のために同じ擬似乱数列を生成することができる。
リヤプノフ指数は2つの近接した軌道、つまり解曲線、の発散性または収束性の程度を評価し、様々なタイプの解の安定性を決定、つまり、解が、例えば、周期的であるかカオス的であるかを決定するのに用いることができる。リヤプノフ指数は、参照軌道(reference orbit)とずらされた軌道(displaced orbit)との比較から、このような測度を与える。初期条件x0の逐次代入により、参照軌道が表され、ずらされた軌道は、初期条件x0+y0への逐次代入により表される。ここで、y0は、初期変位を表す無限小長のベクトルである。この初期変位の初期方向は、u0=y0/|y0|で与えられる。この表記法を用いると、リヤプノフ指数、h(x0,y0)は、次式のように定義される。
ここで、ynは、x0に関するn番目の逐次代入により与えられる、ずらされた軌道の参照軌道からのずれである。1次元よりも多い次元を有する系に関しては、リヤプノフ指数の集合(set)またはスペクトル(spectrum)が存在し、そのそれぞれが軌道の特定方向への発散性または収束性を特徴づけている。よって、系がN自由度を有するなら、系はN個のリヤプノフ指数を有する。しかし、それらは必ずしも異なるとは限らない。実用上、正のリヤプノフ指数はカオスを示唆する。ハイパーカオスと称されるタイプの不規則な挙動は、2つまたはより多くの正のリヤプノフ指数により特徴づけられる。リヤプノフ指数の数値計算は、T.S.パーカー、L.O.チュア著のプラクティカル・ニューメリカル・アルゴリズム・フォー・カオティック・システム、73−81頁 (T. S. Parker and L. O. Chua: Practical Numerical Algorithms for Chaotic Systems, pp. 73-81) で推奨される方法により実施することができる。
ハイパーカオス的挙動を示す系よりもさらに不規則な系は、所謂、乱流(turbulence)を示す。乱流とは、正のリヤプノフ指数の連続スペクトルを有するシステムの示す挙動のタイプをいう。乱流は、例えば、周知のナビエ−ストークス方程式といった偏微分方程式によりモデル化可能である。
カオス系を解くこと、特に、カオス系に依存した逐次暗号アルゴリズムを含む、暗号化アルゴリズムで使用されるカオス系を解くことについて、多数の先行技術文献が存在する。背景技術に関する総論として、それらのいくつかを簡単に紹介する。
ローラル・エアロスペース・コーポレーション(Loral Aerospace Corp.)に譲渡された米国特許第5,007,087号(US 5,007,087)は、カオスを用いて乱数を生成する方法および装置を開示する。この特許明細書は、乱数列を生成するためのカオス系の解法を記載しており、また、暗号化技術における使用可能性、特に、鍵生成および鍵管理の分野における可能性について言及する。本文献においては、数列の再現性、反復性(repeatability)は回避すべきものとして説明されている。
ヒューズ・エアクラフト・カンパニー(Hughes Aircraft Company)に譲渡された米国特許第5,048,086号(US 5,048,086)は、カオス理論に基づく暗号化システムに関する。このシステムは、ロジスティック方程式Xn+1=μXn(1−Xn)を用いている。これは、特定のμ値に対してカオスを示す写像である。計算には、浮動小数点演算が用いられる。
アップルコンピュータ・インコーポレーテッド(Apple Computer, Inc.)に譲渡されたPCT出願、WO98/36523号は、カオス系を用いた公開鍵生成および秘密鍵から裏口(バック・ドア)(back door)を生成する方法を開示している。ここでは、カオス系を計算する上で、精度に関して規則を設ける必要性に触れている。例えば、明細書においては、丸め(round-off)に関して定められている水準に従い、規定の浮動小数点または固定小数点精度を定めることが可能であると、記されている。
本願の譲受人に譲渡されたPCT出願、WO02/47272号では、所謂、固定小数点数の利用を含めて、様々な態様の暗号化法が開示されている。
ハニーウェル・インコーポレイテッド(Honeywell Inc.)に譲渡されたPCT出願、WO01/50676号は、所謂、弱い鍵系列(vulnerable keystream)を、所謂、安全な鍵系列(protected keystream)に変換する非線形暗号アイソレータを開示する。この非線形フィルタによる暗号アイソレータは乗算器を有し、この乗算器は弱い鍵系列に対して乗算関数を実行し、下方部分積配列(lower partial product array)と上方部分積配列(upper partial product array)を与え、下方部分積配列と上方部分積配列とを組み合わせる(combining)ためのシンプルで偏りのない演算(simple unbiased operation)を行って安全な鍵系列を与える。
D.カハナー、C.モーラー、および、S.ナッシュによる「ニューメリカル・メソッズ・アンド・ソフトウェア」("Numerical Methods and Software" by D. Kahaner, C. Moler and S. Nash)(Prentice-Hall International Editions, 1989)に、(擬似)乱数の生成についての総論が述べられている。この本は、(擬似)乱数生成器の品質を検証するための規準が記されている。それらは以下のようなものである。
a)高品質:生成器は、あらゆる統計的試験にパスし、かつ、極めて長い周期性を有する。
b)効率性:実行が迅速であり、かつ、必要な記憶容量が最小限である。
c)反復性(repeatability):同じ開始条件を定めれば、同じ数列を生成する。使用者は常に、生成器を再始動させることができ、かつ、明確な初期化(explicit initialization)を必要としない。始動時の手続き(starting procedure)における僅かな変更によって、異なる乱数列を発生させる。
d)機器への非依存性および可搬性:異なる種類のコンピュータ上でアルゴリズムが作動する。とくに、プログラムを停止させるような演算処理を含まない。厳密に同一な方法で生成器を初期化することで、異なるコンピュータ上で同じ乱数列が生成される。
e)単純性:アルゴリズムを実装および使用することが容易である。
また、本書は、これら全ての規準を満足する生成器は存在しない、と述べている。
a)高品質:生成器は、あらゆる統計的試験にパスし、かつ、極めて長い周期性を有する。
b)効率性:実行が迅速であり、かつ、必要な記憶容量が最小限である。
c)反復性(repeatability):同じ開始条件を定めれば、同じ数列を生成する。使用者は常に、生成器を再始動させることができ、かつ、明確な初期化(explicit initialization)を必要としない。始動時の手続き(starting procedure)における僅かな変更によって、異なる乱数列を発生させる。
d)機器への非依存性および可搬性:異なる種類のコンピュータ上でアルゴリズムが作動する。とくに、プログラムを停止させるような演算処理を含まない。厳密に同一な方法で生成器を初期化することで、異なるコンピュータ上で同じ乱数列が生成される。
e)単純性:アルゴリズムを実装および使用することが容易である。
また、本書は、これら全ての規準を満足する生成器は存在しない、と述べている。
また、例えば、インテルのマンデルブロー計算法においては、数値計算に固定小数点変数を使用することが知られている。インテルは、MMXテクノロジ(特定の計算を高速化するための、インテル製プロセッサへのアド・オン)を用いることで、如何にして高速にマンデルブロー集合(非線形系より導出される集合)を計算可能であるかを解説している。(MMX(商標)テクノロジ・アプリケーション・ノーツ(MMXTM Technology Application Notes)、「MMX(商標)テクノロジによるフラクタルの実現」("Implementing Fractals with MMXTM Technology")を参照。本内容は、2003年6月現在、<http://cedar.intel.com/cgi-bin/ids.dll/content/content.jsp?cntKey=Legacy::irtm_MANDEL_10491&cntType=IDS_EDITORIAL&catCode=0> より、公衆にアクセス可能となっている。)これは、固定小数点演算により実施されている。
暗号化に用いられる擬似乱数生成器は一般に、擬似乱数列の再現性を確保しつつ、可能な限り予測不可能であるべきである。換言すれば、生成器を構成する数学的システムの内部状態(internal state)には、その数学的システムの別の内部状態に関わる情報をできる限り含まないことが望ましい。例えば、i番目の逐次代入(イタレーション)における状態変数「X」において含まれる特定の値「Xi」の情報から、予測可能な方法論で、別の、j番目の、イタレーションにおける変数「X」に含まれる変数「Xj」を導出しないことが望まれる。離散的な項で表されたイタレーションの数学的システムの場合、その数学的システムが周期性を有する場合にある程度の予測可能性が生起するという意味で、短周期性に関する問題が発生する。暗号化システムにおいては、この問題は深刻な問題である。なぜなら、データはセキュリティを担う擬似乱数データの同一のブロックを繰り返すことで暗号化される、という影響が及ぶからである。
本発明は、4つの態様を有する。本発明の好適な実施形態では、予測不可能性の向上によりセキュリティの向上をもたらす。
1. 数学的システムのパラメータの変動が、正のリヤプノフ指数を示す(請求項1ないし17)。
2. 乗算演算より生じる数のうちで、(最)上位ビットの少なくとも1つを操作する(請求項18ないし43ならびに55)。「g関数」
3. 除算演算より生じる数の商と余りとを組み合わせる(請求項44)。
4. キャリー値(carry value)を用いてカウンタ値(counter value)を更新する(請求項45ないし55)。
1. 数学的システムのパラメータの変動が、正のリヤプノフ指数を示す(請求項1ないし17)。
2. 乗算演算より生じる数のうちで、(最)上位ビットの少なくとも1つを操作する(請求項18ないし43ならびに55)。「g関数」
3. 除算演算より生じる数の商と余りとを組み合わせる(請求項44)。
4. キャリー値(carry value)を用いてカウンタ値(counter value)を更新する(請求項45ないし55)。
計算速度の向上を目的とし、さらに本発明は次の非独立的な態様を有する。
5.同時的暗号化(concurrent encryption)、および、識別値(identification value)の生成(請求項56ないし61)。
5.同時的暗号化(concurrent encryption)、および、識別値(identification value)の生成(請求項56ないし61)。
本発明の上記態様について以下のセクション1ないし5で議論する。本発明の全ての態様に当てはまる開示および議論は、以下のセクションAないしLに含まれる。
1 正のリヤプノフ指数を示す、数学的システムのパラメータの変動
本発明の第1の態様により、正のリヤプノフ指数を示す数学的システムにおいて反復的に計算を実行する方法が供される。本方法は、特定の回数の計算の後、少なくとも1つの、数学的システムのパラメータを変更するステップを含んでいる。そのパラメータは、例えば、カウンタであってよい。パラメータは、数学的システムとは独立して変化してよく、また、パラメータを変更しない場合よりも長い周期性を数学的システムが示すか、または、パラメータの変更によって、いかなる現実的用途においても、数学的システムが反復しない程度に長い周期を有する周期的挙動を数学的システムが示すようにすることができる。パラメータは、数学的システムにおける計算全体に渡って繰り返して変更されてよい。
本発明の第1の態様により、正のリヤプノフ指数を示す数学的システムにおいて反復的に計算を実行する方法が供される。本方法は、特定の回数の計算の後、少なくとも1つの、数学的システムのパラメータを変更するステップを含んでいる。そのパラメータは、例えば、カウンタであってよい。パラメータは、数学的システムとは独立して変化してよく、また、パラメータを変更しない場合よりも長い周期性を数学的システムが示すか、または、パラメータの変更によって、いかなる現実的用途においても、数学的システムが反復しない程度に長い周期を有する周期的挙動を数学的システムが示すようにすることができる。パラメータは、数学的システムにおける計算全体に渡って繰り返して変更されてよい。
正のリヤプノフ指数を有する系、すなわち、カオス的挙動を示す系に関連し、別の課題が存在する。その課題とは、2つの異なるプロセッサにおいて、浮動小数点数の丸めは必ずしも一致しないことである。そのような場合、リヤプノフ指数が正である故に、第1のプロセッサにおいて生成される擬似乱数列を、第2のプロセッサにおいて再現できないかもしれない。通例、コンピュータ上で実数は浮動小数点型の数として表現される。浮動小数点数は、仮数部および指数部を有する数と定義される。例えば、31415・10−4では、「31415」が仮数部であって、「−4」が指数部である。コンピュータが浮動小数点変数を計算する場合、計算結果に合致するようにコンピュータが指数部を再計算する。「浮動小数点」という名は、指数部を変更することにより小数部セパレータが計算過程で移動することに由来している。だが、浮動小数点演算は、様々なプロセッサのアーキテクチャごとに異なる規定があり、精度や丸めの扱いに差違が生じている。本願発明者は、浮動小数点数の代りに固定小数点数を利用できることに気付いた。よって、本発明に係る方法の実施形態においては、通例少なくとも1つの関数を有し、かつ、離散項で表現される、数学的システムにおけるイタレーションのような計算は、少なくとも1つの固定小数点数によって実行される。全ての計算を固定小数点数演算または整数演算として実行してもよい。固定小数点数は、コンピュータにおいては整数型の数として表される。この場合、仮想的小数点もしくはセパレータ(架空の小数部セパレータ(imaginary decimal separator)とも称する。)は、「手動で(manually)」つまり、プログラマによって導入されて、実数の整数部と端数部とを分けている。よって、固定小数点数に関する計算は、シンプルな整数演算で行われる。この計算は、異なる2つのプロセッサで実行された同一の計算により、同一の結果をこれら2つのプロセッサ上で得る、という意味においてあらゆるプロセッサにおいて、負数の表現に差違が生じ得る点を除き、同一である。異なる表現が生じうるのは、あるプロセッサでは、第1の補数を用いており、他のプロセッサにおいては、第2の補数を用いているからである。また、これら演算は、通常、相当する浮動小数点演算よりも高速である。固定小数点変数の使用に関しては、後に、セクションBでさらに詳しく議論する。
数学的システムは、少なくとも1つの非線形写像もしくは非線形方程式、または、非線形写像のセットもしくは非線形方程式のセットを備えてよい。これについては後で詳述する、特にセクションCを参照されたい。
前に触れたカウンタは、数学的システムにおける各イタレーションにおいて増加する。この場合、カウンタの最大値を定めてもよい。よって、本方法では、カウンタ値が先述の最大値に達すると、カウンタを最小値に再設定してよく、これによって、カウンタはある周期性をもって変化する。しかしながら、このことは、必ずしも数学的システムも周期性をもって変化することを意味するのではない。カウンタの再設定は、システムにおけるオーバーフローを防止している。
予測不可能性を向上させるため、複数のパラメータを導入してもよい。これら複数のパラメータのうちの一部は、動的、つまり、変化し、その他の変数は、静的、つまり、定数であってよい。定数パラメータは、例えば、暗号化鍵といった数学的システムに与えられるシード値から生成されてよい。第1のパラメータ、例えば第1のカウンタ、の変動は、第2のカウンタの変動に従属的であってよい。ここでは、第1のカウンタの周期は、第2のカウンタの周期とは異なっている。カウンタ個々の変動は、少なくとも別の1つのカウンタの変動に従属的であってよく、それによって、個々のカウンタが他のカウンタに従属的で無い場合に存在するであろう周期よりも、もっと長い周期のカウンタが得られる。1つまたは複数のカウンタを線形的に、または、その他の関数によって増加させてもよい。
本発明に係る第1の態様により実行される計算を、擬似乱数の生成に用いることが望ましい。この計算は、あらゆる主の暗号化、および/または、識別値の生成に用いることができる。
2 乗算演算より得られる数のうちで(最)上位ビットの少なくとも1つに対する操作、「G関数」
第2の態様においては、本発明は、暗号化システムにおけるデータの第1セットを操作する方法を提供する。データの第1セットは、それぞれ第1および第2ビット・サイズAおよびBの、第1数および第2数を含んでいる。
− 第1数と第2数とを乗算し、第3ビット・サイズ、A+Bの第3数を得る。第3数は、P個の(最)上位ビットと、Q個の(最)下位ビットを含む。ここで、A+B=P+Qであり、また、Qは、第1ビット・サイズAと第2ビット・サイズBのうち、大きいものに等しく、Q=max(A,B)である。
− 第3数を操作し、第4数を得る。第4数は、第3数のP個の(最)上位ビットのうちの少なくとも1つの関数である。
− 第4数を用いて暗号化システムの出力を導出する。
さらに具体的には、第4数を、暗号化システムの出力として擬似乱数を生成または更新することに用いてもよい。
第2の態様においては、本発明は、暗号化システムにおけるデータの第1セットを操作する方法を提供する。データの第1セットは、それぞれ第1および第2ビット・サイズAおよびBの、第1数および第2数を含んでいる。
− 第1数と第2数とを乗算し、第3ビット・サイズ、A+Bの第3数を得る。第3数は、P個の(最)上位ビットと、Q個の(最)下位ビットを含む。ここで、A+B=P+Qであり、また、Qは、第1ビット・サイズAと第2ビット・サイズBのうち、大きいものに等しく、Q=max(A,B)である。
− 第3数を操作し、第4数を得る。第4数は、第3数のP個の(最)上位ビットのうちの少なくとも1つの関数である。
− 第4数を用いて暗号化システムの出力を導出する。
さらに具体的には、第4数を、暗号化システムの出力として擬似乱数を生成または更新することに用いてもよい。
一般に、乗算関数は、暗号化の特性がよいことが知られている。これらの特性は、良好な混合(good mixing)、つまり、殆どの入力ビットがあらゆる出力ビットに影響し、線形近似性に乏しい(poor linear approximation)。また、乗算は、出力のビット数が入力のビット数の総数と等しい、つまり、ビット・サイズAの数をビット・サイズBの数で乗算すれば出力はビット・サイズA+Bとなるという特性を有する。ビット・サイズがより大きなものとなることで、出力に対するさらなる操作を可能とする。よって、最終的な出力のビット・サイズはA+Bよりも小さなもの、例えば、AまたはBとすることができる。従い、操作の加えられた乗算関数の暗号化に関する特性を向上させることができる。つまり、全ての入力ビットが全ての出力ビットに影響を与え、いかなる線形近似性にも乏しい。
第1数および第2数は、異なるビット・サイズでよい。例えば、それらは、8ビットおよび16ビットである。だが、実用上の理由により、第1数および第2数は、同一のビット・サイズであることが望ましい。例えば、第1数および第2数は、32ビットの数でよい。この場合、第3数は、64ビットの数となり、(最)上位32ビットと、(最)下位32ビットを含む。そして、例えば、第4数は、この64ビットの数の(最)上位32ビットを含むことができる。データの第1セットは、単一の数(a single number)を含んでよく、例えばそれは、変数にアサインされた数である。そして、第1数は、第2数と等しくともよく、よって、乗算のステップは、第1数を二乗するステップを含む。このような二乗ステップは、2つの異なる数の乗算を包含する、他の乗算関数との比較において、有利となることがある。なぜなら、本ステップでは単一の変数のみを処理すればよいからである。また、特定のビット・サイズAの数を二乗すれば、前に第3数と称した、ビット・サイズ2・Aの数になる。よって、第3数に操作を加えて例えばビット・サイズAといった、別のビット・サイズからなる第4数を得ることで、本発明に係る第2の態様を包含する暗号化システムにさらなる複雑性が加えられる。二乗することには別の有利点もある。それは、小さなプロセッサ、例えば8ビットまたは16ビットのプロセッサで実行する場合に2つの異なる数を乗算するよりも少ない演算で済み、よって、計算資源(computational resource)を節約できる。例えば、2つの異なる32ビットの数を乗算するには、16回の8ビット乗算が必要となるが、32ビット数を二乗する場合、たった10回の8ビット乗算でよい。また、暗号化システムに本方法を適用することにより、(予測不可能性に関して)満足のいく品質の鍵系列を、シンプルな演算、例えば、XOR演算によって擬似ランダム出力として直接的に生成することができる。また、暗号化システムにおいては、二乗関数は普通、特定の結果をその他の結果よりも頻繁に生ずることがない。だが、2つの異なる数の乗算では、乗算される2つの数のうちの1つがゼロなる値を有する場合、常にゼロという結果になる。換言すれば、二乗関数は、その他の乗算関数と比較して特定の結果、特にゼロに対する偏り(バイアス)(bias)を少なくすることができる。このようなゼロに対する偏りは、この乗算への入力に関する情報の漏れを生ずることがある。なぜなら、乗算演算への2つの入力のうち1つは、十中八九、ゼロであることが明らかだからである。
第4数は、擬似乱数を表しており、この擬似乱数は、暗号化システムの出力として用いられる。あるいは、第4数を、数学的システムにおけるイタレーションといった、さらなる計算への入力として用いてもよい。そして、擬似乱数もしくはその他の暗号化システムの出力は、その後で導出される。
暗号化システムにおいては、1つまたは複数の状態変数を数学的システムにおいて逐次代入してよい。カウンタもしくは変数を、それぞれの、または、いくつかの逐次代入ステップにおける、状態変数のそれぞれ、または、いくつかに加えてもよい。乗算のステップには、各逐次代入ステップと同一の演算を備えてもよいし、あるいは、異なる演算を備えてもよい。例えば、第1の逐次代入ステップにおいては、乗算ステップは、変数xを二乗するステップを備え、それに対し、後続の逐次代入ステップの1つまたは複数においては、乗算ステップは、変数xを別の変数yと乗算するステップを備えてよい。
少なくとも2つの状態変数を逐次代入する場合、各状態変数に代入(アサイン)されている値は、同一の、および/または、別の状態変数の少なくとも1つの値の関数として更新されてよい。例えば、添え字iがi番目のイタレーションを示すとし、xおよびyが状態変数を示すとして、一般形式は、xi+1=f(xi、yi)と表される。
操作ステップは、第3数の(最)上位ビットおよび(最)下位ビットを用いるステップを含んでいることが望ましい。この操作には、論理演算または算術演算が含まれる。容易に用いることができる論理演算はXOR関数である。この関数は、例えば、幾つかの(最)上位ビット、および、それと同数の(最)下位ビットに適用されてよい。排他的論理和をとることは、ビットごとに(bitswise)行われる。ここでは、(最)上位ビットの各ビットはそれぞれ、(最)下位ビットのビットとで排他的論理和がとられる。よって、XOR演算は、N回実行され、ビット・サイズNの結果を得る。操作ステップは、2つ、または、より多くの異なる数のビットに対する演算を適用することで実行されてよい。例えば、1つまたは複数の状態変数に関するイタレーションに基づいて幾つかの数、x1,...,xnを生成するような暗号化システムにおいては、操作ステップは、ある数xmのビットと別の数xpのビットとの排他的論理和をとるステップを含んでいる。ここで、xmおよびxpのうち1つ、または、両方は、第3数を表している。
同様、算術演算もビットごとに行ってよい。
暗号化システムにおいては、第1数および第2数は、暗号化または復号化するべきデータのセットから導出してもよい。この場合、例えば、ブロック暗号アルゴリズムやデータのセットを識別するための識別値を決定するアルゴリズムにおいて、第4数は、暗号文や平文といった、データの第2セットの暗号化された、または、復号化された表現を生成することに用いてよい。
本発明に係る第2の態様による方法は、データの第2セットを識別するための識別値の生成に用いてもよい。この場合、データの第2セットから第1数および第2数の少なくとも1つが導出され、よって、第4数は、データの第2セットを識別する識別値を生成するために用いられる。用語「識別値」は、データのセットを識別するハッシュ値もしくは暗号チェック・サムであってよい。例えば、ブルース・シュナイアー(Bruce Schneier)著、アプライド・クリプトグラフィ(Applied Cryptography)(Second Edition, John Wiley & Sons, 1996)を参照されたい。暗号化鍵を、計算のシード値として用いている場合、ハッシュ関数は通常、MAC関数(メッセージ認証コード(Message Authentication Code))と称される。
本方法が用いられる如何なる用途においても、第1数および第2数のうち少なくとも1つは暗号化鍵、つまり、イタレーションの初期化に用いられる暗号化システムのアルゴリズムへの入力値、から導出される。
本発明に係る第2の態様による方法においては、第1数は、第2数と等しくともよい。この場合、乗算ステップは、第1数を二乗するステップを有する。
数学的システムにおいては、状態変数が逐次代入され、状態変数は、第4数の関数として、または、第4数のパーミュテーション(permutation)の関数として更新される。このパーミュテーションには、例えば第4数のビットの、ビット位置の規則的交代(rotation)が含まれる。
良好な混合(good mixing)をもたらし、かつ、暗号化システムの出力ビットのそれぞれをできる限り多くの入力ビットに従属させることを目的として、乗算ステップは複数回実施されてよく、それら乗算のそれぞれは、複数の状態変数の1つを表しているか、または、複数の状態変数の1つに関する関数である数について実行され、よって、乗算ステップより複数の第3数を得る。従って、操作ステップは複数の第4数を含む配列を与え、少なくとも1つの状態変数は、少なくとも2つの第4数の関数として更新される。
第1数および第2数のうち少なくとも1つは、状態値Xiであってよい。この値には、例えばカウンタCiといった可変パラメータ値が加えられることがある。よって、乗算ステップは、(Xi+Ci)を二乗するステップを有する。ここで、Xiは、状態変数または状態変数配列であり、Ciは、カウンタまたはカウンタ配列を示す。少なくとも1つのパラメータは、計算過程において、所定の間隔で繰り返し変更されてよい。カウンタCiは、第4数、または、第4数の関数に加えられてよく、それによって更新された状態変数Xi+1を得る。
乗算ステップは、複数の乗算関数を備えてよく、それによってビット・サイズA+Bの数を複数与え、それら複数の数のうちの第1の数の少なくとも1つのビットと、それら複数の数のうちの第2の数の少なくとも1つのビットとを組み合わせる(combining)ステップを備えてもよい。この複数の乗算関数は、少なくとも1つの二乗演算を備え、それにより、操作ステップは、複数の数のうちの第1の数のP個の(最)上位ビットの少なくとも1つと、複数の数のうちの第2の数のQ個の(最)下位ビットの少なくとも1つとを組み合わせるステップを備えてもよい。
乗算ステップは通例、数学的システムにおいて実行される。このシステムにおいて、少なくとも1つの状態変数は逐次代入される。殆ど場合、2つまたはより多くの状態変数が逐次代入されるシステムにおいて乗算ステップは実行される。各計算シーケンスにおいて、少なくとも2つの状態変数のそれぞれに代入(アサイン)された値は、同一の、および/または、別の状態変数の少なくとも1つの値の関数として更新されてよい。
暗号化用途においては、第1数および第2数の少なくとも1つは、暗号化または復号化されるべきデータのセットから導出されてよく、よって、第4数は、データのセットの暗号化された表現または復号化された表現を生成することに用いられてよい。同様、第4数は、データのセットを識別する、識別値を生成するために用いられてよい。第1数および第2数の少なくとも1つは、暗号化鍵から導出してよい。
本発明に係る第2の態様による方法は、データのセットを識別するための識別値が定められ、かつ、例えば、数学的システムにおいて数値計算が実行される擬似乱数生成器を用いてデータのセットが同時的に暗号化/復号化されるような、システム/方法に用いられることが望ましい。後に記した本発明の第5の態様に関する議論を参照されたい。
3 除算演算より生じる数の商と余りとを組み合わせる(combining)
第3の態様においては、本発明は、暗号化システムにおけるデータの第1セットを操作する方法を供する。データの第1セットには、第1数および第2数が含まれる。この方法は以下のステップを有する。
− 第1数を第2数で割って商と余りを求めるステップ。
− 数学的演算を用いて商と余りを組み合わせて(combining)、生じる数を求めるステップ。
− その生じる数を用いて、暗号化システムの出力を導出するステップ。
第3の態様においては、本発明は、暗号化システムにおけるデータの第1セットを操作する方法を供する。データの第1セットには、第1数および第2数が含まれる。この方法は以下のステップを有する。
− 第1数を第2数で割って商と余りを求めるステップ。
− 数学的演算を用いて商と余りを組み合わせて(combining)、生じる数を求めるステップ。
− その生じる数を用いて、暗号化システムの出力を導出するステップ。
このような操作は、本発明に係る第2の態様による方法において用いてよい。組み合わせステップは、本発明に係る第2の態様による方法に関連して先に議論したあらゆる操作、例えば、XOR演算、または、算術演算を含んでよい。暗号化システムの出力は、本発明に係る第2の態様に関連して先に議論したあらゆる出力であってよい。
本発明に係る第3の態様により、暗号化システム、特に、擬似乱数生成器における数の混合度(mixing)が向上される。本方法は、本明細書に記された技術を含むあらゆる暗号化システムと併用することができる。
4 キャリー値を用いたカウンタ値の更新
暗号化システムにおける数の系列(シーケンス)に非常に長い周期性を確保するため、そして、それによる、予測不可能性およびセキュリティの向上を目的とし、本発明に係る第4の態様として計算ステップが反復して実行されるような暗号化システムにおける周期的な数の系列を生成する方法を供する。本方法は、各計算ステップiにおいてカウンタの配列を更新するステップを有する。このカウンタは、論理的に、かつ/または、算術的関数により、更新される。従って、各計算ステップにおいて、キャリー値が配列内の各カウンタに加えられる。ここでは、配列内の第1のカウンタ、c0に加えられるキャリー値は、次のうちの少なくとも1つから求められる。
− 選ばれた、カウンタの配列の値に関する計算。
− 以前の計算ステップにおけるカウンタ値の関数より得る値。
暗号化システムにおける数の系列(シーケンス)に非常に長い周期性を確保するため、そして、それによる、予測不可能性およびセキュリティの向上を目的とし、本発明に係る第4の態様として計算ステップが反復して実行されるような暗号化システムにおける周期的な数の系列を生成する方法を供する。本方法は、各計算ステップiにおいてカウンタの配列を更新するステップを有する。このカウンタは、論理的に、かつ/または、算術的関数により、更新される。従って、各計算ステップにおいて、キャリー値が配列内の各カウンタに加えられる。ここでは、配列内の第1のカウンタ、c0に加えられるキャリー値は、次のうちの少なくとも1つから求められる。
− 選ばれた、カウンタの配列の値に関する計算。
− 以前の計算ステップにおけるカウンタ値の関数より得る値。
換言すれば、各計算ステップiにおいて、カウンタcj,iの配列Ciを更新するステップを含む。カウンタは次式により更新される。
ここで、cj,i+1は、ステップi+1において配列Cの位置jに代入(アサイン)された値であり、j=0,...,n−1である。nは、配列Cの次元(ディメンジョン)を示す。つまり、配列の要素数である。
cj,iは、ステップiにおいて配列Cの位置jにアサインされた値であり、j=0,...,n−1である。
ajは、一般に定数となる値であって、配列Aの位置jにアサインされた値であり、j=0,...,n−1である。
j>0なるjに対し:bj−1,i+1は、cj−1,i+1の計算より得るキャリー値である。
Njは、定数であり、j=0,...,n−1である。
i=0なるiに対し:di=d0は、初期値である。
i>0なるiに対し:diは、カウンタの配列Ciの値に関する選択された計算、および/または、Ciの関数より得るキャリー値である。
cj,iは、ステップiにおいて配列Cの位置jにアサインされた値であり、j=0,...,n−1である。
ajは、一般に定数となる値であって、配列Aの位置jにアサインされた値であり、j=0,...,n−1である。
j>0なるjに対し:bj−1,i+1は、cj−1,i+1の計算より得るキャリー値である。
Njは、定数であり、j=0,...,n−1である。
i=0なるiに対し:di=d0は、初期値である。
i>0なるiに対し:diは、カウンタの配列Ciの値に関する選択された計算、および/または、Ciの関数より得るキャリー値である。
キャリー値は、ゼロであってもよいと解すべきである。
以下で解説するように、カウンタ系(カウンタ・システム)の周期は非常に長いことが数学的に証明される。よって、上記のカウンタ系を用いて鍵系列を生成する擬似乱数生成器においては、鍵系列自体の反復による鍵系列の周期化を招くことなく、大量のデータを暗号化することができる。従い、予測不可能性およびセキュリティが向上する。
本発明に係る第4の態様による方法で生成された数列は、非常に長い周期性を備え、よって、殆どの実際の用途において、生成される数列は周期的ではない。つまり、生成されるあらゆる数の系列は、反復しない。
カウンタCiの配列は、通常の、ci+1=ci +a mod N の形で表されるカウンタと異なり、カウンタCiの配列は、「キャリー・フィードバックを備えたカウンタ」と称される。キャリー・フィードバックを備えたカウンタの効果を説明するため、先ず、通常のカウンタについて議論する。
次式により定められる系について考察する。
ここで、ciは、ステップiにおけるカウンタの値(配列Ciは単一の要素ciを有する。)であり、ci+1は、ステップi+1におけるカウンタの値であり、aは、定数であり、Nは、通例、計算を実行する電子プロセッサのレジスタ・サイズにより規定される大きな数、すなわち、32ビット・プロセッサに対しN=232である。
a=1の場合、cは値がN−1に達するまで、一定に、1ずつ増加(インクリメント)する。そして、次のイタレーションにおいてcはゼロから再開始する。このような系においては、cの周期は、Nに等しい。だが、この数における1つのビットは、異なる周期を有する。(最)下位ビット、c[0]は、連続的に1が加えられ、よって値0と1を繰り返す。つまり、周期は2である。2回の増加(インクリメント)ごとに、レジスタの次のビット、c[1]に繰り上がり(キャリー(carry))が生じる。よって、c[1]は周期4である。位置jにあるビットに関し、その周期は2j+1となる。
このような系では、(最)上位ビットを除き、全てのビットは全体の周期Nよりも短い周期を有する、という不利点が生じる。他に、ビットの動的挙動がかなり予測できるという不利点を有する。例えば、(最)下位ビットは、イタレーションごとに変化する。よって、所与のイタレーションにおける値は知られずとも、次のイタレーションにおいてその値は、逆の値となる。また、(最)上位ビットの値は、周期Nの半分を経過した後にのみ変化する。このことは、(最)上位ビットの値は、長期間一定であることを意味し、よって、予測不可能性に関する特性について劣ることを意味する。このことは、暗号化システムにとって致命的である。
先に記したように、キャリー・フィードバックを備えたカウンタは、一次元系(single-dimensional system)においては次式で規定される。
ここで、ciは、ステップiにおけるカウンタ値であり、ci+1は、ステップi+1におけるカウンタ値であり、aは、定数であり、diは、ステップiにおけるフィードバックのキャリー値であり、Nは通例、2の、計算が実行されるプロセッサのレジスタ・サイズ乗に等しい大きな数である。
再度、a=1である場合を考察してみる。c0=0から出発すると、ci+a+biがN以上になるまでは、通常のカウンタと類似した挙動を示す。そして、bi+1が1になると、以降のイタレーションにおいてはカウンタ値に加えられる。よって、(最)下位ビットにおける周期2の挙動は遮られ、よって、通常のカウンタの場合よりも予測しにくいものとなる。また、このことは、(最)下位ビットおよびそれ以外のビットは全て、cの周期に等しい周期を有する周期的挙動を有することになる。この周期は、N−1である。
キャリー・フィードバックを備えたカウンタ系の周期は、以下のように示される。
上記のような再帰(リカレンス(recurrence))の関係は、次の線形の合同な生成器(generator)と同等である。
Aをgcd(A,N−1)=1となるように選べば、すなわち、AとN−1との最大公約数が1であるように選べば、この周期の長さは、N−1となる。B.シュナイアー(B. Schneier)著、アプライド・クリプトグラフィ(Applied Cryptography)、John Wiley & Sons, Inc. (1996) を参照されたい。
ZがCと同等であることを示すため、ここで、Z0>AなるZ0に対し、初期値C0=Z0とする。Ciの再帰性は、Ziを用いて規定することができる。
Aは、連結された値(concatenated value)、an−1...a0を示す。以降を参照されたい。
よって、Ciは、値Aでなく、値N−1に達する点を除き、異なったオーダにおいてではあるが、Ciは、Ziと同じ数の集合(セット)になる。よって、再帰性の周期、Cは、線形の合同な生成器(ジェネレータ)、Zに関する場合と同じである。
要するに、このカウンタ系の目的とは、所与の長周期を有する数の列を生成することであって、ここでは、各ビット位置における各バイナリ値が、全系の周期と同じ周期性を有している。加えて、(最)下位ビットは、キャリー・フィードバックによって他の全てのビットの影響を受ける。このことは、フィードバックを用いない場合と異なる点である。
長い周期の数列を用いることで、逐次暗号の内部状態が長い周期性を備えることを確保している。
一定な増加値(incrementation value)Aを適切に選択することで、Cの各ビット位置における値は比較的高い振動数を有する。つまり、頻繁に変化する。よって、カウンタのビット値を秘密のままで、例えば、これらを、内部状態を備えた逐次暗号への入力の部分として用いれば、逐次暗号の出力と、これらビット値との関係性を利用することでさらに複雑性を増す。なぜならばビット値は比較的頻繁に変化するからである。
Aの値は、(N0×N2×・・・×Nn−1)−1の値とaj値の連結された値とが互いに素であるように、適切に選ぶことができる。aj値の連結された値は、ビットan−1an−2・・・a0なる1つのシーケンスとして求められる。以下の例を参照されたい。
32ビットのレジスタ(すなわち、N=232)で計算を実行する場合の、適切な定数の例を示す。
a0=0x4D34D34D
a1=0xD34D34D3
a2=0x34D34D34
a3=0x4D34D34D
a4=0xD34D34D3
a5=0x34D34D34
a6=0x4D34D34D
a7=0xD34D34D3
ここで、0xは数が16進数であることを示す。キャリー・フィードバックを備えた1つのカウンタ系への接続(connection)は容易である。それは、全ての定数を連結し、全てのカウンタ要素を連結し、そしてこれら256ビットの数について計算、つまり、2256を法(モジュロ)とする計算を行うことで行われる。上記の例において、Aの連結された値は、a7a6a5a4a3a2a1a0=0xD34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34Dである。
a0=0x4D34D34D
a1=0xD34D34D3
a2=0x34D34D34
a3=0x4D34D34D
a4=0xD34D34D3
a5=0x34D34D34
a6=0x4D34D34D
a7=0xD34D34D3
ここで、0xは数が16進数であることを示す。キャリー・フィードバックを備えた1つのカウンタ系への接続(connection)は容易である。それは、全ての定数を連結し、全てのカウンタ要素を連結し、そしてこれら256ビットの数について計算、つまり、2256を法(モジュロ)とする計算を行うことで行われる。上記の例において、Aの連結された値は、a7a6a5a4a3a2a1a0=0xD34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34Dである。
8ビットのレジスタを用いた計算を実行する場合の適切な定数の選択の別例を示す。
a0=0x2C
a1=0xCB
a2=0xB2
a3=0x2C
a4=0xCB
a5=0xB2
a6=0x2C
a7=0xCB
ここで、0xは数が16進数であることを示す。キャリー・フィードバックを備えた1つのカウンタ系への接続(connection)は容易である。それは、全ての定数を連結し、全てのカウンタ要素を連結し、そしてこれら64ビットの数について計算、つまり、264を法(モジュロ)とする計算を行うことで行われる。
a0=0x2C
a1=0xCB
a2=0xB2
a3=0x2C
a4=0xCB
a5=0xB2
a6=0x2C
a7=0xCB
ここで、0xは数が16進数であることを示す。キャリー・フィードバックを備えた1つのカウンタ系への接続(connection)は容易である。それは、全ての定数を連結し、全てのカウンタ要素を連結し、そしてこれら64ビットの数について計算、つまり、264を法(モジュロ)とする計算を行うことで行われる。
上述の、キャリー・フィードバックを備えたカウンタ系を用いて、カウンタ値を暗号化関数に対する周期的入力として使用することができる。例えば、
− カウンタ値を、内部状態を備えた擬似乱数生成器または逐次暗号への入力として使用する。
− カウンタ値を、識別値の計算における入力の部分として使用する。
− カウンタ値を、内部状態を備えた擬似乱数生成器または逐次暗号への入力として使用する。
− カウンタ値を、識別値の計算における入力の部分として使用する。
ある実施形態においては、暗号化システムの内部状態は、カウンタ値の関数として更新される。例えば、カウンタ値を内部状態に加えることにより更新される。このような更新は、次の状態の値の計算の前、または、次の状態の計算の次に行ってよい。それから、出力関数を現在または次の内部状態に作用させ、時には「鍵系列」と称される擬似ランダム出力を生成する。
以下の擬似コードは、複数のカウンタに関する計算の好ましい実施形態を示しており、この擬似コードは、カウンタに関する1回のイタレーションを示している。
// 古いカウンタ値をセーブする。
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
// 古いカウンタ値をセーブする。
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
以下の擬似コードは、1つのカウンタに関する計算の好ましい実施形態を示す。
// 古いカウンタ値をセーブする。
c_old = c
// カウンタを進める。
c = (c + a + d) mod 232
if c < c_old 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
上記の擬似コードにおいては、aの全ての値は232−1よりも小さいと仮定する。
上記議論からもわかるように、配列CおよびAのサイズは、1、つまり、n=1でもよい。そのような場合、
− 配列Cは、1つの値、c0,iを有する。
− 配列Aは、1つの値、a0を有する。
カウンタc0,iは、
のようにして更新される。
− 配列Cは、1つの値、c0,iを有する。
− 配列Aは、1つの値、a0を有する。
カウンタc0,iは、
図4と関連して以下に記載するように、i>0に対し、diは、cn−1,iに関する計算より得るキャリー値でもよい。すなわち、先の逐次代入ステップにおいて計算された最新のキャリー値でよい。
配列Cが、1つの要素cのみを有する場合、数cは、定数a、および、キャリー・レジスタdの値によって、逐次的に増加されてよい。cが、値Nよりも大きくなった場合、その数からNを差し引く。すなわち、Nのモジュロをとる。そして、キャリー・レジスタにおける値は、1に設定される。Nよりも小さい場合、キャリー・レジスタにおける値は、0に設定される。この手続は以下のように定式化される。
配列Cが複数の要素もしくは数を含む、C=(c0,c1,c2,...,cn−1)、場合、このような数は、定数のセット、A=(a0,a1,a2,...,an−1)、および、キャリー・レジスタのセット(b0,b1,b2,...,bn−1)、bn−1=d、によって逐次的に増加されてよい。数のうちのいくつかが、値Nよりも大きくなれば、該当する数からNを差し引く。つまり、Nのモジュロをとる。そして、対応するキャリー・レジスタの値を、1に設定する。加算に関与するキャリー・レジスタは、近接する数より生じたキャリーである。そして、この数のセットは、キャリー・レジスタによって結合され(coupled)、連鎖(chain)を形成する。最初の数には、先の増加における最後の数のキャリー・レジスタが加えられる。この手続は以下のように定式化される。
残りの数は、以下のようにして決定される。
図4に、上記の手続きを図示する。
あるいは、diは、同じイタレーションにおいて決定されるキャリー値でよい。つまり、先ず、最初のカウンタに定数を加え、この演算によるキャリーと定数とを、連鎖における次のカウンタに加える。以下同様である。この手続きは連鎖における最後のカウンタまで継続され、この最後の加算によるキャリーは最初のカウンタに加えられ、キャリーが生じれば、そのキャリーは次のカウンタに加えられる、等々である。この手続きは、以下の擬似コードに示される。
// 古いカウンタ値をセーブする。
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
// 古いカウンタ値をセーブする。
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
上記の擬似コードにおいて、全ての値は、232−1よりも小さいと仮定する。
通例、暗号化システムにおいて実行される計算ステップは、逐次代入処理を含む。この処理において、状態変数配列Xは、反復的に逐次代入される。よって、計算ステップi+1における状態変数配列Xのある位置にアサインされている値の少なくとも1つは、
− 計算ステップiにおける状態変数配列Xのある位置にアサインされている値のうちの少なくとも1つ、および、
− 計算ステップiにおけるカウンタ配列Cのある位置にアサインされている値のうちの少なくとも1つ、
の関数である。
− 計算ステップiにおける状態変数配列Xのある位置にアサインされている値のうちの少なくとも1つ、および、
− 計算ステップiにおけるカウンタ配列Cのある位置にアサインされている値のうちの少なくとも1つ、
の関数である。
例えば、Xi+1は、一般式 Xi+1=f(Xi,Ci) より、例えば、 Xi+1=f(Xi+Ci) のようにして、計算してよい。配列Xは、1つまたは複数の状態変数を含んでよいと解すべきである。
本発明の第2の態様による方法は、データのセットを識別するための識別値を決定し、データのセットは同時的に暗号化/復号化、例えば、数学的システムにおいて実行される数値計算が実行されている擬似乱数生成器によって同時的に暗号化/復号化が行われるようなシステム/方法で用いられることが望ましい。以下に記載の、本発明の第5の態様に関する議論を参照されたい。
カウンタのキャリーの更新と「g関数」の組み合わせ
別の態様において、本発明は、暗号化システムにおける出力を生成する方法を供する。その方法は、本発明の第2および第5の態様に通底する一般概念を統合する。従い、本発明の第6の態様により、計算のシーケンスが逐次代入的手法で実行される。状態変数の配列、X、は繰り返し代入され、よって、イタレーション・ステップ、i+1、において状態変数の配列Xの、ある位置にアサインされている少なくとも1つの値は、以下に記すものの関数である。
− イタレーション、i、において状態変数の配列Xの、ある位置にアサインされた少なくとも1つの値、および、
− イタレーション、i、におけるカウンタの配列Cの、ある位置にアサインされた少なくとも1つの値。
カウンタの配列は、各イタレーションにおいて、次の関係により更新される。
ここで、cj,i+1は、ステップi+1において配列Cの位置jにアサインされた値であって、jは、j=0,...,n−1である。nは、Cの次元(ディメンジョン)を示す。
cj,iは、ステップiにおいて配列Cの位置jにアサインされた値であって、jは、j=0,...,n−1である。
ajは、配列Aの位置jにアサインされた値であって、jは、j=0,...,n−1である。
bj−1,i+1は、j>0なるjに対し、cj−1,i+1に関する計算より生じたキャリー値である。
Njは、定数である。jは、j=0,...,n−1である。
i=0であるiに対し、diは、di=d0であり、これは、初期値である。
i>0であるiに対し、diは、カウンタの配列Ciの値に関して選択された計算、および/または、Ciの関数より得たキャリー値である。
各イタレーションは次のステップを含む。
− 第1ビット・サイズ、A、である第1数と、第2ビット・サイズ、B、である第2数とを乗算し、第3ビット・サイズ、A+B、である第3数を得る。第1数および第2数の少なくとも1つは、イタレーションiにおいて状態変数配列Xのある位置にアサインされた少なくとも1つの値に等しいか、または、その値の関数であり、第3数は、P個の(最)上位ビットと、Q個の(最)下位ビットを有する。ここで、A+B=P+Qであり、Qは、第1ビット・サイズAおよび第2ビット・サイズBのうち大きいものと等しく、Q=max(A,B)である。
− 第3数を操作し、第4数を得る。これは、第3数のP個の(最)上位ビットの少なくとも1つの関数である。
第4数を用い、暗号化システムの出力の導出、および/または、状態変数配列Xに新しい値を代入(アサイン)する。
別の態様において、本発明は、暗号化システムにおける出力を生成する方法を供する。その方法は、本発明の第2および第5の態様に通底する一般概念を統合する。従い、本発明の第6の態様により、計算のシーケンスが逐次代入的手法で実行される。状態変数の配列、X、は繰り返し代入され、よって、イタレーション・ステップ、i+1、において状態変数の配列Xの、ある位置にアサインされている少なくとも1つの値は、以下に記すものの関数である。
− イタレーション、i、において状態変数の配列Xの、ある位置にアサインされた少なくとも1つの値、および、
− イタレーション、i、におけるカウンタの配列Cの、ある位置にアサインされた少なくとも1つの値。
カウンタの配列は、各イタレーションにおいて、次の関係により更新される。
cj,iは、ステップiにおいて配列Cの位置jにアサインされた値であって、jは、j=0,...,n−1である。
ajは、配列Aの位置jにアサインされた値であって、jは、j=0,...,n−1である。
bj−1,i+1は、j>0なるjに対し、cj−1,i+1に関する計算より生じたキャリー値である。
Njは、定数である。jは、j=0,...,n−1である。
i=0であるiに対し、diは、di=d0であり、これは、初期値である。
i>0であるiに対し、diは、カウンタの配列Ciの値に関して選択された計算、および/または、Ciの関数より得たキャリー値である。
各イタレーションは次のステップを含む。
− 第1ビット・サイズ、A、である第1数と、第2ビット・サイズ、B、である第2数とを乗算し、第3ビット・サイズ、A+B、である第3数を得る。第1数および第2数の少なくとも1つは、イタレーションiにおいて状態変数配列Xのある位置にアサインされた少なくとも1つの値に等しいか、または、その値の関数であり、第3数は、P個の(最)上位ビットと、Q個の(最)下位ビットを有する。ここで、A+B=P+Qであり、Qは、第1ビット・サイズAおよび第2ビット・サイズBのうち大きいものと等しく、Q=max(A,B)である。
− 第3数を操作し、第4数を得る。これは、第3数のP個の(最)上位ビットの少なくとも1つの関数である。
第4数を用い、暗号化システムの出力の導出、および/または、状態変数配列Xに新しい値を代入(アサイン)する。
上記の方法により、本発明の第2の態様および第4の態様による方法の品質を兼ね備える。すなわち、予測不可能性の向上を目的とした、ビットの良好な混合(mixing)と、長いカウンタの周期性である。
本発明に係る第2および第4の態様に関連して上で述べた特徴および機能は、本発明に係る本態様において用いることができる。
本発明に係る本態様は、以下で、図1ないし図5に関連してさらに説明する。
5 同時的暗号化、および、識別値の生成
別の態様においては、本発明は、データのセットを識別するための識別値の決定、ならびに、データのセットの同時的暗号化、および/もしくは、同時的復号化の方法を供する。本方法は、正のリヤプノフ指数を示す数学的システムにおける数値計算を含むことが望ましい。さらには、以下のステップの少なくとも1つを含むことが望ましい。
− 数学的システムにおいて逐次代入的に数学的な計算を繰り返し実行する。ここでは、データのセットの様々な部分またはその変形物を計算への入力として用いてよく、
− 次の各計算、または、それらの幾つかの計算を行う。
− 計算により生じた数を抽出する。この数は、次のうちの少なくとも1つを表している。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムにおける数値解法に含まれる別の計算に利用可能な数。
− 任意で、得た数に基づいた識別値の更新値を決定する。ここでは、データのセットの様々な部分またはその変形物を、この決定ステップにおける入力として用いてよい。
− 生じる数に基づいてデータのセットの特定の部分を暗号化、および/または、復号化する。
ここでは、データのセット全体を暗号化、および/または、復号化するのに必要なイタレーションが実行される。
別の態様においては、本発明は、データのセットを識別するための識別値の決定、ならびに、データのセットの同時的暗号化、および/もしくは、同時的復号化の方法を供する。本方法は、正のリヤプノフ指数を示す数学的システムにおける数値計算を含むことが望ましい。さらには、以下のステップの少なくとも1つを含むことが望ましい。
− 数学的システムにおいて逐次代入的に数学的な計算を繰り返し実行する。ここでは、データのセットの様々な部分またはその変形物を計算への入力として用いてよく、
− 次の各計算、または、それらの幾つかの計算を行う。
− 計算により生じた数を抽出する。この数は、次のうちの少なくとも1つを表している。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムにおける数値解法に含まれる別の計算に利用可能な数。
− 任意で、得た数に基づいた識別値の更新値を決定する。ここでは、データのセットの様々な部分またはその変形物を、この決定ステップにおける入力として用いてよい。
− 生じる数に基づいてデータのセットの特定の部分を暗号化、および/または、復号化する。
ここでは、データのセット全体を暗号化、および/または、復号化するのに必要なイタレーションが実行される。
1つまたは複数の固定小数点変数を用いて再現性および計算速度に関連した有利性を備えてもよい。以下のセクションBを参照されたい。暗号化/復号化の実行、および、識別値の同時的な生成におより、計算資源が節約される。
暗号化、および/または、復号化、ならびに、識別値の決定は、同一のプロセス、または、別個のプロセスで実行してよい。つまり、例えば、データのセット全体を処理して中間結果(intermediate result)を求めて、次にそれを用いて識別値、ならびに、暗号化された、および/もしくは、復号化されたバージョンを求める別の計算への入力とするような場合である。
本方法は、以下のステップを含むことができる。
− 離散的な項によって数学的システムを表現する。
− 数学的システムにおける少なくとも1つの変数を固定小数点数として表現する。
− 前記の計算を、その計算が、固定小数点数として表現された少なくとも1つの数を含む。固定小数点変数、および、数は、本発明に係る第1の態様に関連して先に議論され、また、セクションBで議論されるものである。
− 離散的な項によって数学的システムを表現する。
− 数学的システムにおける少なくとも1つの変数を固定小数点数として表現する。
− 前記の計算を、その計算が、固定小数点数として表現された少なくとも1つの数を含む。固定小数点変数、および、数は、本発明に係る第1の態様に関連して先に議論され、また、セクションBで議論されるものである。
データのセット全体の暗号化、および/または、復号化の後で、識別値に修正を加えてもよい。
暗号化/復号化、ならびに、識別値の決定は、同時的、または、並列的に行うことができる。識別値は、ハッシュ値、チェック・サム、または、MAC(メッセージ認証コード)でよい。先の説明を参照されたい。ある場合には、識別値の計算と暗号化プロセスは逐次的に行われる。しかし、また、これらを1つの作業プロセス、または、並列的もしくは同時的インスタンスとして実行することも可能である。このことは、計算数の低減、ならびに/または、数学的システムを実現しているアルゴリズムが利用可能となった、もしくは、与えられた順に、データの系列の処理を可能とするか、または、より使いやすさを向上させるために行うことができる。識別値は、鍵を用いて計算することも、用いないで計算することも可能である。
識別値は、特定のメッセージに関連付けることができる。すなわち、メッセージは、アルゴリズムへの入力として使用されるべきである。先ずメッセージを暗号化してそれからメッセージ全体を再度読み取って識別値を計算する代りに、この2つの方法を組み合わせてもよい。すなわち、数学的システムにおける各イタレーションにおいて、擬似乱数を抽出し、メッセージと組み合わせて暗号化/復号化し、その後で識別値を更新することができる。各イタレーションの後、この中間的識別値が記録される。
本発明に係る本態様による方法においては、数学的システムを定めてよく、この数学的システムは、正のリヤプノフ指数を示すものである。本方法は、以下のステップを含んでよい。
1.鍵/シード(seed)の値を定める。
2.数学的システムに関する計算を実行する。および/または、
3.数学的システムおよびメッセージに関する計算を実行する。
4.擬似乱数を抽出する。
5.新しい、中間的識別値を算出する。
6.数学的システムおよびメッセージに関して実行する計算において、メッセージの全てを用いるまでステップ2ないし5を続ける。
7.中間的識別値に基づいて最終的識別値を算出する。
1.鍵/シード(seed)の値を定める。
2.数学的システムに関する計算を実行する。および/または、
3.数学的システムおよびメッセージに関する計算を実行する。
4.擬似乱数を抽出する。
5.新しい、中間的識別値を算出する。
6.数学的システムおよびメッセージに関して実行する計算において、メッセージの全てを用いるまでステップ2ないし5を続ける。
7.中間的識別値に基づいて最終的識別値を算出する。
別の実施形態においては、本方法は以下のステップを含んでよい。
1.鍵/シードの値を定める。
2.数学的システムおよびメッセージに関する計算を実行する。
3.擬似乱数を抽出する。
4.数学的システムおよびメッセージに関して実行する計算において、メッセージの全てを用いるまでステップ2と3とを続ける。
5.数学的システム内の変数から最終的識別値を定める。
1.鍵/シードの値を定める。
2.数学的システムおよびメッセージに関する計算を実行する。
3.擬似乱数を抽出する。
4.数学的システムおよびメッセージに関して実行する計算において、メッセージの全てを用いるまでステップ2と3とを続ける。
5.数学的システム内の変数から最終的識別値を定める。
本方法においては、
− メッセージは、平文、または、暗号文でよい。
− メッセージを、全ての計算、または、計算の一部に、入力として用いてよい。
− 擬似乱数を用い、論理的、および/または、算術的演算によってメッセージを暗号化/復号化することができる。
− 少なくとも1つの変数は、固定小数点型で表現される。
− メッセージは、平文、または、暗号文でよい。
− メッセージを、全ての計算、または、計算の一部に、入力として用いてよい。
− 擬似乱数を用い、論理的、および/または、算術的演算によってメッセージを暗号化/復号化することができる。
− 少なくとも1つの変数は、固定小数点型で表現される。
ブロック暗号の場合、擬似乱数は生成されない。その場合、上記のステップ3は、メッセージのブロックもしくは部分を操作して、それを暗号化/復号化するステップに置き換えられる。
ある実施形態においては、識別値の算出は、鍵に依存する。
正のリヤプノフ指数を示す数学的システムにおいて、計算は固定小数点演算により実行される。ここでは、(逐次暗号で言及したような)暗号化鍵は、初期値として用いられる。この、鍵、もしくは、その部分を用いて識別値も初期化される。
その場合、識別値の決定、ならびに、データのセット、メッセージ、もしくは、平文の暗号化は以下のように行われる。
1.数学的システムについて逐次代入ステップを1ステップ実行する。
2.システムからnビットの擬似乱数を抽出する。
3.データのセット、メッセージ、または、平文から次のnビットを選抜する。
4.抽出されたビット、データから選抜されたビット、メッセージもしくは平文、ならびに識別値の古い値をもとに、関数FHを用いて識別値の新しい値を求める。
5.nビットの擬似乱数と、選抜されたnビットとに論理XOR関数を用いる。それより、データのセット、メッセージ、もしくは、平文のnビットを暗号化する。
6.全てのビットを暗号化するまで、ステップ1から5を繰り返す。
7.より多くの擬似ランダムなビットを抽出するために、さらにシステムに逐次代入ステップを用いてもよい。
8.識別値に関してさらなる計算を実行し、最終的識別値を求めてもよい。
1.数学的システムについて逐次代入ステップを1ステップ実行する。
2.システムからnビットの擬似乱数を抽出する。
3.データのセット、メッセージ、または、平文から次のnビットを選抜する。
4.抽出されたビット、データから選抜されたビット、メッセージもしくは平文、ならびに識別値の古い値をもとに、関数FHを用いて識別値の新しい値を求める。
5.nビットの擬似乱数と、選抜されたnビットとに論理XOR関数を用いる。それより、データのセット、メッセージ、もしくは、平文のnビットを暗号化する。
6.全てのビットを暗号化するまで、ステップ1から5を繰り返す。
7.より多くの擬似ランダムなビットを抽出するために、さらにシステムに逐次代入ステップを用いてもよい。
8.識別値に関してさらなる計算を実行し、最終的識別値を求めてもよい。
生成された識別値を暗号化メッセージと組み合わせることが可能である。そして、その結果を、例えば、インターネットを介して受信者へ送信することが可能である。
復号化、および、識別値の再計算においては、暗号化の場合と同様、アルゴリズムを初期化する。このとき、以下のステップが実行される。
1.数学的システムにおける逐次代入ステップを1ステップ実行する。
2.数学的システムより、n個の擬似ランダムビットを抽出する。
3.暗号化されているデータ/メッセージの次のnビットを選抜する。
4.暗号化されているビットに論理XOR関数を適用し、復号化する。
5.抽出されたビット、復号化すべきビット、および、古い識別値をもとに、関数FHを用いて識別値の新しい値を求める。
6.全てのビットを暗号化するまで、ステップ1から5を繰り返す。
7.より多くの擬似ランダムなビットを抽出するために、さらにシステムに逐次代入ステップを用いてもよい。
識別値に関してさらなる計算を実行し、最終的識別値を求めてもよい。
セクション5終了。
1.数学的システムにおける逐次代入ステップを1ステップ実行する。
2.数学的システムより、n個の擬似ランダムビットを抽出する。
3.暗号化されているデータ/メッセージの次のnビットを選抜する。
4.暗号化されているビットに論理XOR関数を適用し、復号化する。
5.抽出されたビット、復号化すべきビット、および、古い識別値をもとに、関数FHを用いて識別値の新しい値を求める。
6.全てのビットを暗号化するまで、ステップ1から5を繰り返す。
7.より多くの擬似ランダムなビットを抽出するために、さらにシステムに逐次代入ステップを用いてもよい。
識別値に関してさらなる計算を実行し、最終的識別値を求めてもよい。
セクション5終了。
本発明は、本発明に係る全ての方法を実行する、デジタル・シグナル・プロセッサを備えた電子デバイスを含め、あらゆる装置、および、あらゆるコンピュータ・プログラムに及ぶ。本発明はまた、本発明に係るあらゆる方法、および/または、コンピュータ・プログラムによって導出されたデータに及び、また、そのようなデータを含んでいる信号(シグナル)もまた、添付の特許請求の範囲の範囲に含まれる。また、以下で議論する本発明に係る他の態様と関連して以下に記載するあらゆる特徴、方法ステップ、または機能性は、本発明に係る第1の態様による方法と組み合わせることができる。
本発明に係る様々な態様で用いられる別の特徴および機能性、ならびに、本発明に係る態様に適用可能な定義について以下で議論する。以下の考察は、適切な範囲で、本発明に係る全ての態様/方法に適用される。
A 一般的定義および考察
本文においては、用語「擬似乱数」を用いる。この語は、再現可能な方法により、かつ/または、決定論的方法により生成される乱数を指す。すなわち、同一の鍵、または、シード値を、擬似乱数生成アルゴリズムの2つの実行において用いれば、擬似乱数生成アルゴリズムにおける2つの異なる実行において、同一の擬似乱数が得られる。
本文においては、用語「擬似乱数」を用いる。この語は、再現可能な方法により、かつ/または、決定論的方法により生成される乱数を指す。すなわち、同一の鍵、または、シード値を、擬似乱数生成アルゴリズムの2つの実行において用いれば、擬似乱数生成アルゴリズムにおける2つの異なる実行において、同一の擬似乱数が得られる。
一般に、数学的システムは、変数間の特定の関係性を表しているシステムを有することができる。例えば、この関係性は、2進(バイナリ)値といった、離散的な演算を含む数学的演算、および/または、論理演算により構成される。数学的演算は、乗算、除算、加算、減算、インボリューション(involution)、AND、OR、XOR、NOT、シフト(桁送り)演算、モジュラス(mod)(法)、打ち切り(トランケーション)、および/または、丸め(ラウンド・オフ)を含んでよい。
数値計算は、数学的演算により数を処理する計算を含んでよい。
ここでは、カウンタは、数学的システム内のパラメータとして働く変数と定義される。カウンタは、数学的関数によって継続的に逐次代入され、更新される。このような関数は、例えば、シンプルな加算、ci+1=ci +a、であってよい。ここで、ci+1は、イタレーション・ステップi+1におけるカウンタ値であり、ciは、イタレーション・ステップiにおけるカウンタ値であり、aは、ciに加算される数である。あるいは、関数をより賢明なものとしてもよいし、また、関数に線形、および/もしくは、非線形演算、ならびに/または、論理演算を含んでよい。カウンタは、カウンタをパラメータとして用いる数学的システムから独立的に変化することが望ましい。
ここでは、用語「データ・キャリア」または「コンピュータ読み取り可能なデータ・キャリア」は、コンピュータ、もしくは、コンピュータ・システムによりアクセス可能である、あらゆる、データを記録可能なデバイスもしくはメディアを指す。コンピュータ読み取り可能なデータ・キャリアは、RAM、ROM、EPROM、もしくは、EEPROMといったメモリ、メモリー・スティック・カード(Memory Stick Card)、フロッピー、もしくは、ハード・ディスク・ドライブ、コンパクト・ディスク(CD)、DVD、データ・テープ、または、DATテープを含んでよい。
本発明にかかる方法により導出されたデータ、および、本方法で用いられるデータを含んでいる信号は、電線もしくは光ケーブル(optical wire)、無線もしくは光伝送を用いたワイヤレス通信手段といった、通信回線を介して送信される。例として、インターネット、LAN(s)(Local Area Network(s))、MAN(s)(Metropolitan Area Network(s))、WAN(s)(Wide Area Network(s))、電話回線、専用回線(leased lines)、専用回線(private lines)、ならびに、ケーブルもしくは衛星テレビジョン・ネットワーク、が挙げられる。
ここでは、用語「電子デバイス」は、電子的または工学的インパルスによりデータ処理可能なあらゆるデバイスを指す。本発明に係る方法に適用可能な電子デバイスの例として、CPUといったプロセッサ、マイクロ・コントローラ、または、パーソナル・コンピュータやメインフレーム・コンピュータや携帯型デバイスやスマート・カード(smartcards)や例えば暗号化といった特定目的用に設計されたチップを含み数学的計算を実行するプロセッサもしくはその他の電子回路を備えたDSP(Digital Signal Processor)、コンピュータもしくはその他のあらゆるデバイス、が挙げられる。電子デバイスの別例として、計算および/もしくは演算を実行するように適化されたもしくは設計されたマイクロチップ、または、バイナリ演算を実行するチップが挙げられる。
通例、プロセッサは次の項目により分類される。(a)処理するデータのサイズ。(b)命令のサイズ。(c)メモリモデル。これらの特性は通常、4ないし128ビットの間(例えば、15、16、32、64ビット)の様々なサイズでよい。また、2の冪に限らない。
ここでは、用語「プロセッサ」は、あらゆるタイプのプロセッサを包含する。それは、以下のものを含み、また、それらに限定されるものではない。
− 「組み込みプロセッサ(embedded processor)」とも呼ばれる「マイクロ・コントローラ」。用語「マイクロ・コントローラ」および「組み込みプロセッサ」は通例、小さなプロセッサを指す。(通例大きなプロセッサよりも少ないプロセッサで構成され、消費電力も少ない。)マイクロ・コントローラ・アーキテクチャの例として以下のものがある。
− Z80
− 8051(例えば、インテル社製造)
− CPU8/6800(例えば、モトローラ社製造の、例えば、68HC05、68HC08、および、68HC11)
− CPU32/68k(例えば、モトローラ社製造の、68000ドラゴンボール(68000 Dragonball))
− 一般的に、様々のコンピュータおよび制御系で用いられるその他のプロセッサ。アーキテクチャの例として以下のものがある。
− アルファ(Alpha) 21XXX(例えば、21164、21264、21364)
− AMD x86−64(例えば、スレッジハンマー)
− ARM(例えば、ARM10、ストロングARM(StrongARM))
− CPU32/68k(例えば、モトローラ社製造の、例えば、68000、68030、68040)
− IA32(例えば、インテル社製造(例えば、i486、ペンティアム)、AMD社製造(例えば、K6、K7)、および、サイリックス(Cyrix)社製造、x86ファミリー)
− IA64(例えば、HP/インテル社製造のイタニウム)
− MIPS(例えば、SGI社製造のR4000、R10000)
− PA−RISC(例えば、HP社製造の8000)
− パワーPC(例えば、IBM/モトローラ社製造のG3、G4)
− スパーク(SPARC)(例えば、SUN製造のウルトラ・スパークII(UltraSPARC II)、ウルトラ・スパークIII(UltraSPARC III))
− DSP。その例として以下のものがある。
− DSP56300(モトローラ社製造)
− MSC8100(モトローラ社製造)
− TI TMS320C6711(テキサス・インスツルメンツ社製造)
− 「組み込みプロセッサ(embedded processor)」とも呼ばれる「マイクロ・コントローラ」。用語「マイクロ・コントローラ」および「組み込みプロセッサ」は通例、小さなプロセッサを指す。(通例大きなプロセッサよりも少ないプロセッサで構成され、消費電力も少ない。)マイクロ・コントローラ・アーキテクチャの例として以下のものがある。
− Z80
− 8051(例えば、インテル社製造)
− CPU8/6800(例えば、モトローラ社製造の、例えば、68HC05、68HC08、および、68HC11)
− CPU32/68k(例えば、モトローラ社製造の、68000ドラゴンボール(68000 Dragonball))
− 一般的に、様々のコンピュータおよび制御系で用いられるその他のプロセッサ。アーキテクチャの例として以下のものがある。
− アルファ(Alpha) 21XXX(例えば、21164、21264、21364)
− AMD x86−64(例えば、スレッジハンマー)
− ARM(例えば、ARM10、ストロングARM(StrongARM))
− CPU32/68k(例えば、モトローラ社製造の、例えば、68000、68030、68040)
− IA32(例えば、インテル社製造(例えば、i486、ペンティアム)、AMD社製造(例えば、K6、K7)、および、サイリックス(Cyrix)社製造、x86ファミリー)
− IA64(例えば、HP/インテル社製造のイタニウム)
− MIPS(例えば、SGI社製造のR4000、R10000)
− PA−RISC(例えば、HP社製造の8000)
− パワーPC(例えば、IBM/モトローラ社製造のG3、G4)
− スパーク(SPARC)(例えば、SUN製造のウルトラ・スパークII(UltraSPARC II)、ウルトラ・スパークIII(UltraSPARC III))
− DSP。その例として以下のものがある。
− DSP56300(モトローラ社製造)
− MSC8100(モトローラ社製造)
− TI TMS320C6711(テキサス・インスツルメンツ社製造)
ここでは、用語「レジスタ」は、数のようなデータを記憶するメモリ空間を指す。例えば、メモリ空間には、CPUのレジスタ、RAM、電子回路上のメモリ、または、ハード・ディスクやフロッピー・ディスクやコンパクト・ディスク(CD)やDVDやデータ・テープやDATテープといったあらゆるデータ・キャリアがある。
本発明はまた、独立した態様において、本発明に係る方法より導出したデータに関連している。方法に関連した発明においては、本発明はまた、独立した態様において、その方法を実行することに適したコンピュータ・プログラム、そのようなコンピュータ・プログラムがロードされているデータ・キャリアもしくはメモリ手段、ならびに/または、本方法を実行するコンピュータ・システムに関する。
本発明に係る方法に含まれる、あらゆるそして全ての計算操作は、電子デバイスを用いて実行してよい。
本発明にかかる独立した態様を含んだ、ある一の態様においては、数学的システムにおける数値計算を実行する方法が少なくとも1つの関数を有する。本方法は、以下のステップを有する。
− 離散項により数学的システムを表現する。
− 数学的システムの少なくとも1つの変数を固定小数点数として表現する。
− 前記の計算が、少なくとも1つの固定小数点数で表された変数を含んでいるようにして、前記計算を実行する。
− 前記計算より、生じる数を求める。この生じた数は、以下のうちの少なくとも1つを表す数である。
− a.少なくとも、数学的システムに対する解の一部、および、
− b.数学的システムの数値的解法に含まれる別の計算で利用できる数。
本方法は、さらに以下のステップを有する。
− データのセットを抽出する。このセットは、少なくとも以下のうちの1つを表している。
− i.生じた数の桁(デジット(digits))の部分集合(サブセット)、および、
− ii.生じた数から導出される数の桁のサブセット。
− 離散項により数学的システムを表現する。
− 数学的システムの少なくとも1つの変数を固定小数点数として表現する。
− 前記の計算が、少なくとも1つの固定小数点数で表された変数を含んでいるようにして、前記計算を実行する。
− 前記計算より、生じる数を求める。この生じた数は、以下のうちの少なくとも1つを表す数である。
− a.少なくとも、数学的システムに対する解の一部、および、
− b.数学的システムの数値的解法に含まれる別の計算で利用できる数。
本方法は、さらに以下のステップを有する。
− データのセットを抽出する。このセットは、少なくとも以下のうちの1つを表している。
− i.生じた数の桁(デジット(digits))の部分集合(サブセット)、および、
− ii.生じた数から導出される数の桁のサブセット。
数のサブセットは、その数の、ある部分とみなしてよく、必ずしもその数の全ての桁またはビットである必要はない。例えば、16ビット数のうちの(最)下位の8つのビットは、16ビット数のサブセットとみなしてよい。
用語「抽出する」は以下を含み、かつ、それらに限定されるものではない。それらとは、例えば、鍵系列もしくは鍵系列の部分、または、計算過程における、その他のあらゆる最終的もしくは中間的結果といった、数またはサブセットを出力すること、例えば、サブセットに関する更なる計算のような、別途使用を可能にするために、数またはサブセットをレジスタに記録すること、である。
数全体を抽出する代りに数の桁のサブセットを抽出することにより、例えば、暗号化および/もしくは復号化目的で、擬似乱数生成器において本方法を使用する場合、ランダムさの特性が向上する。さらには、サブセットだけが抽出されるので、数学的システムの内部状態に関し、より少ない情報が抽出されたデータのセットに含まれる。このことは、本方法を備えた暗号化/復号化システムのセキュリティを向上させる。
数学的システムは、例えば、微分方程式系といった連続な系を有してもよいが、加えて、もしくは、その代りに、例えば写像(map)の場合のように、離散的な項で元々定義されている系を備えてもよい。数学的システムの関数の少なくとも1つが、非線形であってもよい。これについては、後にセクションCで詳述する。
通常、桁のサブセットは、mビットの数のkビットを含んでいる(k≦m)。例えば、32ビットの数から8つのビットを抽出する。サブセットが抽出される数、および/または、抽出されたデータのセットは、1つまたは複数の2進数、8進数、10進数、16進数等で表すことができる。kビットは、数の(最)下位ビットでもよいし、または、ビットが抽出される数に含まれる所定の位置もしくはランダムな位置から選抜されたk個のビットでもよい。例えば、64ビットの数から、ビット番号42番、47番、53番、55番、56番、57番、61番、および、63番を抽出してもよいし、または、ビット番号47番ないし54番を抽出してもよい。
本発明に係る方法においては、1つまたは複数の計算を浮動小数点演算で実行してもよい。従い、数学的システムの少なくとも1つの変数を固定小数点数で表すステップは、浮動小数点型の数を整数型の数に変換するステップと、任意的に、例えば、打ち切り(トランケート)のような、この整数に対する特定の操作を実行するステップと、この整数を浮動小数点型の数に戻すステップを備えてよい。
本発明に係る方法は、暗号化および復号化、電波の変調、映像および音声信号におけるカオスの同期化によるノイズの低減、制御系における、データ圧縮、透かし、例えば、音声ファイルの(最)下位ビットに文書を記憶することでデジタル送信において文書を隠す、といった電子迷彩技術、に用いることができる。
多くのSIMカードやスマート・カードは電力解析攻撃に対する弱さを露呈する。これは、電力消費がプロセッサにより実行される算術関数と直接的に関係する、という事実を利用している。この攻撃を回避するには、本明細書に記載の方法の1つを実行するプログラムが、系統だった電力消費を乱れさせることを目的とした関数である、何らかの演算をランダムに実行すればよい。擬似乱数生成器を用いて実行する演算を決定することができる。
擬似乱数生成器は、他の暗号化アルゴリズムの鍵生成に用いることができる。つまり、非対称、もしくは、公開鍵アルゴリズムである。例えば、少なくとも1つの素数を計算することに用いられる擬似乱数生成器を用いることができる。このように、RSAアルゴリズムにおいて用いられる公開鍵と秘密鍵のペアを生成することも可能である。
ここでは、用語「生じる(生じた)数」は、計算で生じた、あらゆる数を指す。複数の生じる数を求めてもよい。上記のように、生じる数は、数学的システムに関する解、および/または、中間結果の一部であってよい。すなわち、数学的システムにおけるいずれかの変数もしくはパラメータにアサインされる数、または、その他の、計算に用いられる変数もしくはパラメータであってよい。数学的手法の実施に際し、生じる数もしくはその一部を抽出してもよい。例えば、暗号化/復号化システムで用いる擬似乱数として抽出してもよい。あるいは、1つもしくは複数の数学的、ならびに/または、論理的演算を、1つもしくは複数の、生じる数に対して実行し、別に、抽出される数を得てもよい。生じる数の2進数表現において、選抜された、全てのビット、または、ビットの一部を抽出してよい。計算で得た数のビットのうちから選抜されたビットで生成した数も、生じる数と称してよい。従い、用語「生じる(生じた)数」は、計算にて得られる数のあらゆる部分を含む。
先に議論したように、本発明に係る方法は、暗号化技術において有用である。例えば以下のような実装例において有用である。対称暗号アルゴリズム、公開鍵(もしくは、非対称鍵)アルゴリズム、セキュアもしくは暗号化ハッシュ関数、または、メッセージ認証コード(MAC)。これらアルゴリズムは、例えば、以下の1つまたは複数のタスクの遂行に用いられる。
− デジタル・データの守秘性を確保し、未許可のアクセスからデータを保護する。
− デジタル・データの完全性を確保し、情報の正確性、または、改ざんされていないこと、を保証する。
− 例えば、特定のタスク、または、操作の実行をゆるす、許可。
− 他の団体(パーティ)の身分(アイデンティティ)を検証するユーザ認証や、データの出所(オリジン)を検証するデータ発信元認証といった、認証。
− 電子取引への関与を証明する、否認防止。例えば、第1の人間Aが第2の人間Bにメッセージを送り、その後でメッセージの送信を否定することを防止する。このことを目的として電子署名が用いられる。電子署名の生成には、公開鍵アルゴリズム、および、ハッシュ関数の使用が含まれることがある。
− デジタル・データの守秘性を確保し、未許可のアクセスからデータを保護する。
− デジタル・データの完全性を確保し、情報の正確性、または、改ざんされていないこと、を保証する。
− 例えば、特定のタスク、または、操作の実行をゆるす、許可。
− 他の団体(パーティ)の身分(アイデンティティ)を検証するユーザ認証や、データの出所(オリジン)を検証するデータ発信元認証といった、認証。
− 電子取引への関与を証明する、否認防止。例えば、第1の人間Aが第2の人間Bにメッセージを送り、その後でメッセージの送信を否定することを防止する。このことを目的として電子署名が用いられる。電子署名の生成には、公開鍵アルゴリズム、および、ハッシュ関数の使用が含まれることがある。
本発明に係る方法は、所謂、ハッシュ関数にも用いることができる。ハッシュ関数は、一種の電子指紋を提供する。少量のデータにより、他のデータ、通例、当該少量のデータよりもかなり大きなデータのセットを識別する。ハッシュ関数は、通例、公開関数(public functions)であって、秘密鍵を含まない。また、ハッシュ関数は、認証および完全化の手段となる。この関数は、しばしば、電子署名アルゴリズムやパスワード保護に不可欠である。というのは、パスワードのハッシュ値を、パスワードそのものの代りとしてパスワードのコントロールに用いることができるからである。この場合、パスワードそのものは不要であって、ハッシュ値のみを、例えば、通信ネットワークを介して送信する必要がある。
入力として秘密鍵を用いるハッシュ関数を、しばしばMACアルゴリズムもしくは「鍵付きハッシュ関数」と称される。MACアルゴリズムは、認証性およびデータの完全性を保証するために用いられる。このアルゴリズムは、出所であることを主張している人間もしくは団体(entity)から、メッセージが送られていることを保証し(認証)、かつ、そのメッセージが送信の途中で改変されていないことを保証する(完全性)。これは、IPsecプロトコルで用いられる。(RFC2401参照。2003年6月6日時点で、<http://www.rfc-editor.org>より入手可能。)これは、例えば、IPパケットが、送信されてから最終目的地に到達する間に修正されていないことを保証する。また、あらゆる種類の銀行間転送プロトコルでも用いられる。
先で議論したように、本発明に係る方法を、ハッシュもしくはMACアルゴリズムで実施してもよい。ハッシュもしくはMACアルゴリズムは、任意長のデータ量に関するチェック・サムを計算し、結果としてチェック・サムを出力する。この処理は非可逆的(一方向的)であり、かつ、入力値の小さな変化により著しく異なる出力がなされるべきである。従って、入力されるデータに対する鋭敏性は、高くあるべきである。ハッシュ関数は鍵をシード値として用いないが、MACアルゴリズムはこの、アルゴリズムに関するシード値を表している、もしくは、決定する、鍵を用いるため、結果は鍵に従属する。鍵の代りに、ハッシュ関数は、例えば、数、πの、あるビット、といった定数値に依存する。あるいは、ハッシュ関数が適用されるデータの部分をシード値として用いてもよい。
ハッシュ/MACアルゴリズムは、以下のようにして実施される。
− 本アルゴリズムでは、ロジスティック写像の形をした数学的システムを用いる。このロジスティック写像は、xn+1=λxn(1−xn)の形式を有し、ここで、λはパラメータである。別のカオス系(カオス・システム)、例えば後で詳述するローレンツ系を用いてもよい。
− アルゴリズムの結果は、チェック・サムを計算するメッセージmに依存するべきである。このメッセージは、システムの構成要素としてシステムに組み込まれる。例えば、メッセージと動的変数xとのある種のカップリングは、xn+1=λxn(1−xn)+ε(xn−mn)、のようにして実行される。
− パラメータλおよびε、ならびに、初期値x0は、予め定められ、かつ/または、メッセージから導出される。MACアルゴリズムの場合、パラメータλおよびε、ならびに、初期値x0は、秘密鍵より、完全に、または、部分的に決定される。
− メッセージの最後に到達するまで、システムは逐次代入を行う。xの最後の計算値、または、(最)下位桁といった、xの最後の計算値の部分が、例えば、ハッシュ値、MAC、または、チェック・サムとして示される。あるいは、生じた数を抽出する前に、さらに幾つかのイタレーションを実行してもよい。xの最後の計算値の抽出に加え、または、代りに、計算において無視されたビットをハッシュ値として抽出してもよい。
− メッセージmを動的システム(dynamical system)に導入する方法を変更することができる。例えば、各イタレーションにおいて、メッセージの一部をx変数に影響させてもよい。このような影響作用は、例えばメッセージのあるビットとxの(最)下位桁とのXORをとることで実現することができる。
− 本アルゴリズムでは、ロジスティック写像の形をした数学的システムを用いる。このロジスティック写像は、xn+1=λxn(1−xn)の形式を有し、ここで、λはパラメータである。別のカオス系(カオス・システム)、例えば後で詳述するローレンツ系を用いてもよい。
− アルゴリズムの結果は、チェック・サムを計算するメッセージmに依存するべきである。このメッセージは、システムの構成要素としてシステムに組み込まれる。例えば、メッセージと動的変数xとのある種のカップリングは、xn+1=λxn(1−xn)+ε(xn−mn)、のようにして実行される。
− パラメータλおよびε、ならびに、初期値x0は、予め定められ、かつ/または、メッセージから導出される。MACアルゴリズムの場合、パラメータλおよびε、ならびに、初期値x0は、秘密鍵より、完全に、または、部分的に決定される。
− メッセージの最後に到達するまで、システムは逐次代入を行う。xの最後の計算値、または、(最)下位桁といった、xの最後の計算値の部分が、例えば、ハッシュ値、MAC、または、チェック・サムとして示される。あるいは、生じた数を抽出する前に、さらに幾つかのイタレーションを実行してもよい。xの最後の計算値の抽出に加え、または、代りに、計算において無視されたビットをハッシュ値として抽出してもよい。
− メッセージmを動的システム(dynamical system)に導入する方法を変更することができる。例えば、各イタレーションにおいて、メッセージの一部をx変数に影響させてもよい。このような影響作用は、例えばメッセージのあるビットとxの(最)下位桁とのXORをとることで実現することができる。
ハッシュ/MAC関数に関するさらなる詳細について、ブルース・シュナイアー著、アプライド・クリプトグラフィ、第2版(Applied Cryptography by Bruce Shneier, Second Edition, John Wiley & Sons, 1996)を参考文献に挙げておく。
本発明に係る方法を利用可能な分野の1つは、非対称アルゴリズムとも称される公開鍵暗号の分野である。復号化に用いる鍵は、暗号化に用いる鍵とは異なる。例えば、鍵生成機能が一対の鍵を生成する。1つは暗号化のための鍵であり、もう1つは復号化のための鍵である。鍵の1つは、秘密状態で、もう1つは公開される。例えば、公開鍵はインターネットを介して暗号化されていない形で送信されてよい。暗号化の鍵には、カオス系に関するパラメータ、および/または、初期条件が含まれる。平文を用いてカオス系を調節する。この系は秘密鍵で始動させない限り、回復不可能である。復号化には、暗号化に用いた系の動力学とは逆の動力学を備えた数学的システムを用いる。
B 固定小数点変数
先のセクション1において固定小数点変数について言及したが、ここで、さらに議論する。先ず、特定の暗号化方法と関連して現われる浮動小数点変数の不利点に関する短い議論から始める。
先のセクション1において固定小数点変数について言及したが、ここで、さらに議論する。先ず、特定の暗号化方法と関連して現われる浮動小数点変数の不利点に関する短い議論から始める。
数学的システムの数値解法において浮動小数点変数を用いることで、予測不可能な打ち切り(トランケーション)、および/または、丸め誤差(ラウンド・オフ・エラー)が生じることがある。解くべき数学的システムが非線形、特に、システムがカオス的であるような場合、全ての積分ステップ(integration step)において解の正確性が、決定的に重要となる。なぜなら、あるステップにおける僅かなずれによって、後続のステップでは非常に大きなずれがもたらされるからである。いかなる、そして、あらゆる計算においても同様の方法で首尾一貫的に打ち切り、および/または、丸め誤差が作られるならば、同じ初期条件に基づく2つの解は同一であり、よって、この計算は再現可能である。しかし、殆どの場合、浮動小数点数の打ち切り、および/または、丸め誤差は、ソフトウェアのみならずそのソフトウェアが実行されているハードウェアでも完全には制御されない。従って、打ち切り、および/または、丸め誤差は、ハードウェアに依存する。その結果、打ち切り、および/または、丸め誤差は、2つの異なるハードウェアのプロセッサでは異なって作られる。殆どの計算にとって、このことは重要なことではない。なぜならば、打ち切りや丸めによって作られる不正確性は、計算に要求されている精度よりもはるかに小さなオーダだからである。しかし、例えば、カオス系の解においては、打ち切りの実施による小さなずれが、後の計算ステップにおける解の大きなずれをもたらす。
よって、ハードウェアが作る打ち切り、または、丸め誤差をソフトウェアによって制御可能とすることを目的として、本願の発明者は、固定小数点変数の利用を提案する。
一般に、固定小数点数のタイプは、Φ(α.β)として示される。ここで、αは整数部を収納するために用いられるビット数で、βは、小数部を収納するために用いられるビット数である。αおよびβの値、ならびに、それによる小数点の位置は、通常、予め定められ、かつ、固定される。固定小数点数は、符号なしでも符号付きでもよく、それぞれの場合において、Φを、UまたはSと示す。後者の場合、符号を収納するビットが必要で、よって、S(α.β)を収納するには、α+β+1ビットが必要である。U(α.β)の範囲は、[0;2α−2−β]であり、S(α.β)の範囲は、[−2α;2α−2−β]である。従って、固定小数点数の分解能は、2−βである。
固定小数点数の小数部セパレータの位置は、数の整数部の桁と小数部の桁との間の重み付け(weighting)である。最良の計算結果を得るには、通常、小数部セパレータよりも後の桁を可能な限り多くとって最高の分解能を得ることが望まれる。しかし、整数部にも十分な桁を割り当てて、オーバーフローを起こさないことを保証することも重要となる場合もある。オーバーフローとは、ロードまたは計算される値が大きくてレジスタに収納できない値を、レジスタにロード、または、計算することである。オーバーフローによって、(最)上位ビット(桁)、および、起こりうる符号の変化が失われる。
本発明に係る様々な態様においては、小数部セパレータの位置は、設計時(at design time)に割り当てられる。正しい位置を選択するために、小数部セパレータの位置を決定すべき数のとり得る範囲を分析することが望まれる。起こりうる最も大きな正の値と最も小さな負の値を決定し、それら2数の絶対値うちで大きい数を次式に代入し、αの値を決定する。
小数点の位置を、異なる固定小数点変数間で違えてもよい。しかし、加算および減算演算では、類似する位置を有する数の入力が要求される。よって、時には小数点の位置をずらす必要がある。nビットだけ右方向に桁送りする(shift)ことは、Φ(α.β)からΦ(α+n.β−n)への変換に対応する。nビットだけ左方向に桁送りすることは、Φ(α.β)から、Φ(α−n.β+n)への変換に対応する。符号を持たない数に対しては、論理桁送り演算(logical shift operation)によって変換が行われ、また、符号付きの数に対しては、算術桁送りによって変換が行われる。
固定小数点数に対する数学的演算、加算、減算、乗算、および、除算は、平易な整数演算(plain integer operation)として実行される。加算および減算演算は、キャリー(繰り上がり)のため、Φ(α+1.β)のサイズの数を生ずることがある。しかし、そのような結果も通常、打ち切られて入力と同じ形式の数にされる。
乗算および除算は、小数部セパレータの類似の位置についての議論の必要はない。しかし、除算の前に、分子は、分母および結果の長さの2倍の長さを持たねばならないので、拡大される。結果は、次のような形式、S(α.β)・S(c.d)=S(α+c+1.β+d)、つまり、S(α+c+1.β+d)/S(α.β)=S(c.d)を有する。符号を持たない乗算および除算では、S(α+c+1.β+d)は、U(α+c.β+d)に置き換えられる。予め定められている、結果の形式と比較して乗算で超過する桁は、対象となっているレジスタのサイズに適合するように切り取られる(cut off)。
固定小数点数は、固定小数点数の整数部を一のレジスタで表し、別のレジスタで小数部を表し、取り扱ってもよい。
さらなる、固定小数点演算に関する情報は、R.イェーツ著、「フィックスド・ポイント・アリスメティック:アン・イントロダクション」("Fixed-Point Arithmetic: An Introduction" by R. Yates)に存在する(本文は、2003年6月6日現在、<http://personal.mia.bellsouth.net/lig/y/a/yatesc/fp.pdf> で見ることができる。)。
ここでは、固定小数点変数は、架空の小数部セパレータを備えた整数型の数として定義される。整数は、小数部セパレータの後の桁を持たない数と定義される。よって、実数は、架空の小数部セパレータ(もしくは小数点)を、整数内の、固定されている所定の位置に挿入することで表される。この位置は、数に対する数学的演算の結果、変動してもよい。また、この位置は、論理演算を用いることで変更されてもよい。
上の議論から想起されることだが、固定小数点数とは整数であって、それに架空の小数部セパレータが付けられている。この数は、小数部セパレータよりも前にあるビットを指す、所謂、「整数部」と、小数部セパレータよりも後にあるビットを指す、所謂、「小数部」を有する。ここでは、ビットも、桁とみなしており、また、その逆の場合も同様である。
固定小数点数演算を含むコンピュータ・プログラム、または、固定小数点演算を実行する電子回路もしくはデバイスにおいては、小数部セパレータの適切な位置を決定するための手段を配してもよい。よって、プログラム、回路、または、デバイスは、演算の間、起こりうるオーバーフローを検知してよい。そして、起こりうるオーバーフローを検知した場合には、小数部セパレータの一方の側のビット数を変更してよい、すなわち、問題にしている変数もしくは複数の変数を記録しているレジスタにおける小数部セパレータの位置を変更してよい。この変更は、小数部セパレータの位置を、左、または、右へ、1つ、または、それよりも多く移動させることで行うことができる。小数部セパレータの右側にできる限り多くのビットを費やし、レジスタにおいて未使用となり得るビット数を最小限にとどめ、よって、計算において適切な精度を得ることが望ましい。小数部セパレータの位置を変更することによって、起こりうるオーバーフローを検出するための付加される演算が必要となるために幾分計算速度が損なわれるかもしれないが、このコンピュータ・プログラム、回路、または、デバイスの組み込まれた用例の設計者またはプログラマが、設計またはプログラミングの段階において精度およびオーバーフローについて考慮する必要性なしで、計算の精度が最適化され、同時にオーバーフローの危険性が取り除かれるか、もしくは、低減される。代りに、または、加えて、計算の中の、いつ、もしくは、どこでオーバーフローが起こるのか、または、起こりそうか、を求めるテスト・プログラムを備えてもよく、それによって、プログラムのプログラマまたは設計者は、オーバーフローを起こさないように、1つ、もしくは、より多くの変数の小数部セパレータの位置を修正することができる。それにより、最終的な実施においては、オーバーフローの可能性について判定する必要がなくなる。だが、最終的な実施においても、オーバーフローの可能性の判定を設け、さらなるセーフガード機構としてもよい。また、プログラマまたは設計者は、計算における、固定的な、所定の段階において、小数部セパレータの変更を実行することを選択してもよい。
先の議論のように、実数は、1つ、または、複数の固定小数点数によって表現することができる。同様、複素数、c=a+ib、ここでは、i2=−1、も、1つ、または、複数の固定小数点数によって表すことができる。例えば、実部a、および/または、虚部bを固定小数点数として表現する。実部、および、虚部のうち1つだけが固定小数点数として表されている場合、もう一方は、浮動小数点もしくは整数といった別のタイプの数で表してよい。
本発明に係る方法においては、固定小数点数として表されている変数が含まれる計算は、別の型の変数についての計算も含むことがある。その、1つまたは複数の変数は、浮動小数点数や整数といった別種の数で表されている。
固定小数点数の使用は、浮動小数点数に比べて、固定小数点数演算において発生する丸め、および/または、打ち切り誤差についてあらゆるプロセッサで同様に定義される点で有利である。固定小数点変数を使用することにより、小数(decimal number)は、数の中に架空の小数部セパレータが配された整数型の数として表すことができる。浮動小数点変数が使用される場合においては、打ち切り/丸め誤差は、別種のプロセッサでは等しく実行されない。
打ち切り/丸め誤差の結果が制御可能、または、予測可能なため、打ち切り/丸め誤差に鋭敏な数学的システムにおける数値計算を再現的方法で実行することができる。よって、例えば非線形系、特にカオス系を、再現的方法で数値的に解くことができる。このことは、誤り(inaccuracies)を防ぐためにフィードバックもしくは訂正のアルゴリズムまたはレジスタを必要とせず、または、暗号化におけるシステムの解と復号化におけるシステムの解とを確実に等しくするための同期化技術を必要とせずに、暗号化/復号化アルゴリズムにおける擬似乱数生成器においてカオス系を用いることを可能とする。さらには、このことは、計算、擬似乱数生成、および/または、暗号化/復号化アルゴリズムを、フィードバックもしくは訂正アルゴリズムまたは同期化技術を備えたアルゴリズムと比較して高速化することに寄与する。また、暗号化データと共に同期化データを送信する必要がない。同期化データは解きに暗号化データに匹敵する大きさとなり、このことが、例えば、インターネットを介してデータを送信する際の帯域幅の不足に起因する大きな問題となることがある。また、このようなデータの送信は、システムのセキュリティを危険に晒している。問題にしている変数に浮動小数点変数を含んでいる方法における計算よりも、計算を高速に実行する。なぜならば、固定小数点数を含んでいる計算においては、ハードウェアのプロセッサは、演算を整数演算として実行する。整数に関する計算は、一般に浮動小数点数に関する計算よりも高速である。
C 特に暗号化用途に関し、利用可能な数学的システムおよびそのコンピュータでの実施
ここに示す方法においては、数学的システムは、離散系、または、連続系でよい。様々なタイプの数学的システムを以下で議論する。
ここに示す方法においては、数学的システムは、離散系、または、連続系でよい。様々なタイプの数学的システムを以下で議論する。
計算には、少なくとも、第1および第2固定小数点数が含まれてよい。固定小数点数はそれぞれ小数部セパレータを有し、ここで、第1固定小数点数の小数部セパレータは、第2固定小数点数の小数部セパレータの位置とは異なる位置に配されている。第1および第2固定小数点数の小数部セパレータは、選択された位置に配することができる。
生じる数は、以下の数で構成されるグループから選択された変数として表してよい。
整数、
浮動小数点数、および、
固定小数点数。
整数、
浮動小数点数、および、
固定小数点数。
一般に、数学的システムは、1つもしくは複数の微分方程式、または、1つもしくは複数の離散写像を含んでよい。微分方程式の場合、数学的システムは、1つもしくは複数の常微分方程式、および/または、1つもしくは複数の偏微分方程式を含んでよい。離散写像の場合、数学的システムは、1つもしくは複数の面積保存写像、または、1つもしくは複数の面積非保存写像を含んでよい。数学的システムの関数の少なくとも1つが非線形であってよい。
本方法は、積分方程式を含む、他のタイプの関数または方程式に用いることもできる。少なくとも1つの非線形微分方程式または写像は、カオス的挙動を示してよい。すなわち、これは、少なくとも1つの正のリヤプノフ指数を有してよく、この場合、本方法は数学的計算の間に少なくとも1回、リヤプノフ指数を計算すればよい。カオス的挙動を示す数学的システムの場合、本方法を、例えば、暗号化/復号化法における擬似乱数生成法に有利に用いることができる。少なくとも1つのリヤプノフ指数は、数学的計算の間に少なくとも1度計算し、数学的システムがカオス的挙動を示すかどうかを判断すればよい。そうでない場合、例えば、算出したリヤプノフ指数が正でない場合、計算を遮断し、初期値および/または別のパラメータで再開すればよい。
少なくとも非線形微分方程式または写像は、少なくとも1つの状態変数、X、について支配的であることが望ましい。Xは、少なくとも1つの従属変数、t、の関数であってよい。
より具体的には、数学的システムは、1つまたは複数の以下のシステムを含んでよい。
− 連続的微分方程式は、以下のものを含む。
− ナビエ−ストークス方程式のような偏微分方程式。
− 以下のものを含む、常微分方程式。
− 散逸流のような、自立系。これには、ローレンツ系、結合ローレンツ系(coupled Lorenz system)、レスラー系、結合レスラー系(coupled Rossler system)、ハイパーカオス・レスラー系、ウエダ系、最も単純な二次の散逸性カオス流、最も単純な区分的線形散逸性カオス流、が含まれる。
− 天体力学からのN体問題(N≧3)を含む、ハミルトン系。
− 強制ダフィング方程式、強制負抵抗振動子、強制ブラッセレータ(forced Brusselator)、強制減衰振子方程式、結合振子、2つの谷にわたる強制振動子(forced double-well oscillator)、強制ファン・デア・ポール振動子といった強制系を含む、非自律系。
− 遅れを持つロジスティック方程式、人口モデルを含む、遅れを持つ微分方程式。
− 以下のものを含む、離散写像。
− 以下のものを含む、面積保存写像および面積非保存写像。
− テント写像、非対称テント写像、2xモジュロ1写像(2x modulo 1 map)、ならびに、区分的線形写像の高次一般化および/もしくは結合(higher order generalizations and/or couplings of piecewise linear maps)。
− ロジスティック写像、エノン写像、例えば、N結合ロジスティック写像、N結合エノン写像といった多項式写像の高次一般化および/もしくは結合を含む、多項式写像(二次または二次より高次)。
− サイン−サークル写像(Sine circle map)、サイン写像(Sine map)、チリコフの標準写像(Chirikov standard map)、シナイ写像(Sinai map)、標準写像、ならびに、三角写像の高次一般化、および/もしくは、結合を含む、三角写像。
− ベルヌーイ・シフト、小数シフト(decimal shift)、馬蹄写像、イケダ写像、パイこね写像(pastry map)、デジタル・フィルタのモデル、任意の一次元写像からの二次元エノン型写像の構成、デボゲレール写像(DeVogelaere map)を含む、その他の写像。
− セルラー・オートマトン。
− ニューラル・ネットワーク。
− 連続的微分方程式は、以下のものを含む。
− ナビエ−ストークス方程式のような偏微分方程式。
− 以下のものを含む、常微分方程式。
− 散逸流のような、自立系。これには、ローレンツ系、結合ローレンツ系(coupled Lorenz system)、レスラー系、結合レスラー系(coupled Rossler system)、ハイパーカオス・レスラー系、ウエダ系、最も単純な二次の散逸性カオス流、最も単純な区分的線形散逸性カオス流、が含まれる。
− 天体力学からのN体問題(N≧3)を含む、ハミルトン系。
− 強制ダフィング方程式、強制負抵抗振動子、強制ブラッセレータ(forced Brusselator)、強制減衰振子方程式、結合振子、2つの谷にわたる強制振動子(forced double-well oscillator)、強制ファン・デア・ポール振動子といった強制系を含む、非自律系。
− 遅れを持つロジスティック方程式、人口モデルを含む、遅れを持つ微分方程式。
− 以下のものを含む、離散写像。
− 以下のものを含む、面積保存写像および面積非保存写像。
− テント写像、非対称テント写像、2xモジュロ1写像(2x modulo 1 map)、ならびに、区分的線形写像の高次一般化および/もしくは結合(higher order generalizations and/or couplings of piecewise linear maps)。
− ロジスティック写像、エノン写像、例えば、N結合ロジスティック写像、N結合エノン写像といった多項式写像の高次一般化および/もしくは結合を含む、多項式写像(二次または二次より高次)。
− サイン−サークル写像(Sine circle map)、サイン写像(Sine map)、チリコフの標準写像(Chirikov standard map)、シナイ写像(Sinai map)、標準写像、ならびに、三角写像の高次一般化、および/もしくは、結合を含む、三角写像。
− ベルヌーイ・シフト、小数シフト(decimal shift)、馬蹄写像、イケダ写像、パイこね写像(pastry map)、デジタル・フィルタのモデル、任意の一次元写像からの二次元エノン型写像の構成、デボゲレール写像(DeVogelaere map)を含む、その他の写像。
− セルラー・オートマトン。
− ニューラル・ネットワーク。
上記のレスラー系は、以下に示す形式を有する。
ここで、一般的なパラメータ値は、a=b=0.2、c=5.7である。レスラー系については、O.E.レスラーの論文(O. E. Rossler, Phys. Lett. 57A, 397-398 (1976))にさらに詳しく記されている。
上記のエノン写像は、以下に示す形式を有する。
ここでの一般的なパラメータ値は、A=1.4、b=0.3である。さらなる詳細については、M.エノンの論文(M. Henon, Commun. Math. Phys. 50, 69-77 (1976))を参照されたい。
この写像は、次の2つのステップを有する。それらは、i)線形行列乗算と、ii)非線形モジュロ(法)(modulo)演算である。アノソフ写像を任意の数の変数に一般化することが可能である。また、この行列は、面積の保存、および、系(システム)に関し少なくとも1つの正のリヤプノフ指数の存在、が要求されるという制約のみで限定される、任意の係数を有することができる。これらの指数は、このような系(システム)に対しては解析的に求めることができる。さらなる詳細については、A.J.リヒテンベルグとM.A.リーベルマンの共著である、レギュラー・アンド・カオティック・ダイナミクス、シュプリンガー 1992年 (頁305)(A. J. Lichtenberg and M. A. Lieberman, Regular and Chaotic Dynamics, Springer 1992 (p.305))にリファレンスが付されている。
任意の高次元のシステムは、サブシステムと呼ばれる低次の結合システムで構成することができる。サブシステムは、同一であっても異なってもよい。これらサブシステムは、例えば様々なサブシステムにおいて異なるパラメータを用いることで違えてもよいし、かつ/または、異なる方程式を採用することで違えてもよい。結合(カップリング)は、個々のサブシステムにおける1つまたは複数の状態変数の関数とすることができる。局所的、および、大域的カップリングを含む、様々なタイプの結合(カップリング)が存在する。
局所的結合とは、個々のサブシステムが結合により、全システムに含まれる、全てのではなく、幾つかのサブシステムから影響を被ることを意味する。局所的結合の例として、一方向結合と双方向結合がある。これらは、それぞれ、結合が、1つおよび2つのサブシステムの関数であることを意味する。これらのタイプを用いることで、マップ・ラティス(map lattice)を構成することができる。一方向結合を有するこのようなシステムの例に、次に示すN次元システムがある。
ここで、f1..Nは、数学的関数であり、ε1..Nは、結合定数である。数学的関数および結合定数は、各サブシステムに対して異なってよい。
通常、拡散結合(diffusive coupling)となるように局所的結合を選択することができる。これは、2つのサブシステム間の際に比例する結合タイプを指す。これは、以下のように定義される。
ここで、XとYは、少なくとも一次元である2つのサブシステムであり、εは、結合定数の行列である。
用語、大域的結合とは、全てのサブシステムが互いに結合している状態を指す。これは、時には、全対全結合(all-to-all coupling)と称される。例えば、これは、結合を平均場、すなわち、全てのサブシステムの平均、の関数とすることで実現可能である。これは、以下のように定義される。
ここで、Xは、少なくとも一次元のサブシステムであり、εは、結合定数である。
また、結合の関数は、あらゆる、サブシステムの線形または非線形関数でよい。
別のタイプの局所的結合は、一方向局所的結合である。ここでは、所与の状態が、隣接する状態の1つと結合されている。例えば、これは、次のように定義される。
ここで、gは、線形または非線形関数のいずれかである。線形の場合には、システムは次のように簡単に定義される。
また、大域的結合を用いることもできる。つまり、個々のシステムそれぞれが、他の全てのシステムと結合している。このことは、次のようにして行われる。
ここで、gは、システム内の全ての状態の関数であり、gは、線形または非線形関数でよい。また、gは、M個の状態のサブセットの、線形または非線形関数でもよい。
また、結合写像の一種である、マップ・ラティスを用いてもよい。下に示す例においては、xiは、(点(ポイント)のN次元配列で表される)ラティスの変数を示す。ラティスは、M個の点(ポイント)を有する一次元(1D)配列である。ラティス上の各ポイントは、→の右側の関数によって更新される。ここで、関数fは、例えば、ロジスティック写像でよい。見てとれるように、ラティス上の近隣の点は線形的に結合しており、線形結合が、パラメータγとεで調整される。境界条件は、ラティスの要素1とMの取り扱い方について言及する。
最後には、ある単純な三次元の(3D)流れ方程式(flow equation)を用いてもよい。系は通常、ローレンツやレスラーの系よりも少ない項を有する。つまり、5つの項と2つの非線形性か、6つの項と1つの非線形性である。それに対し、ローレンツおよびレスラーの系は、それぞれ7つの項を有する。J.C.スプロットの論文(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
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
別の数学的システムについては、以下で、図28を参照して説明している。以下に記した図の説明を参照されたい。
次の条件を満足する場合、
ローレンツ系の定常点(stationary points)は、安定ではない。この場合、ローレンツ系は、カオス的挙動を示す可能性が高い。パラメータは、定数でも変数でもよい。変数型パラメータは、例えば、擬似乱数生成法や暗号化/復号化法において有用と思われる、もっと予測不可能な計算結果に寄与する。
非線形写像の場合、計算は、非線形関数の数値的な逐次代入(イタレーション)を含んでよい。このイタレーションは、状態変数Xの初期条件X0に基づく。
計算を行うステップは、1つもしくは複数の前回までの解Xm、m≦n+1、ならびに、従属変数tのステップ長さΔTnに基づいて解Xn+1を繰り返し計算して非線形微分方程式を数値的に積分するステップを含んでよい。状態変数Xの、少なくとも1つの初期条件X0、および、初期のステップ長さΔT0は、与えられることが望ましい。ステップ長さは、計算が開始されるよりも前に与えてよい。または、計算が進むとともに、計算で求めてもよい。例えば、初期のステップ長さΔT0は、初期条件X0から計算してもよい。
ステップ長さは、システムに含まれる方程式間で異なってもよい。例えば、1つの方程式と別の方程式とで異なってよい。ステップ長さベクトルΔTを用い、システムに含まれる各方程式に対するステップ長さを表す。ベクトルΔTは、システムと同一の次元を有する。
ローレンツ系を離散化した式においては、ステップ長さΔT=(Δtx,n, Δty,n, Δtz,n)を用いて解Xn+1を、以下のように計算することができる。
ここで、
Δtx,nは、xn+1の計算で用いられるステップ長さ、
Δty,nは、yn+1の計算で用いられるステップ長さ、
Δtz,nは、zn+1の計算で用いられるステップ長さ、である。
Δtx,nは、xn+1の計算で用いられるステップ長さ、
Δty,nは、yn+1の計算で用いられるステップ長さ、
Δtz,nは、zn+1の計算で用いられるステップ長さ、である。
先で述べたように、ステップ長さΔTは定数でよく、また、計算途中で変化してもよい。例えば、積分ステップのそれぞれ、または、幾つかの積分ステップにおいて、ステップ長さΔTの要素、(Δtx,n, Δty,n, Δtz,n)、の少なくとも1つが、計算に含まれるかもしくは計算により導出された、少なくとも1つもしくは複数の数の関数であってもよい。また、各積分ステップにおいては、ステップ長さΔTの要素、(Δtx,n, Δty,n, Δtz,n)、の少なくとも1つが、数学的システムの現在もしくは以前の、少なくとも1つの解Xmの関数であってもよい。少なくとも1つの積分ステップ、または、積分ステップの幾つかにおいて、ステップ長さΔTの要素、(Δtx,n, Δty,n, Δtz,n)、の少なくとも1つが、現在もしくは以前の、少なくとも1つのステップ長さΔTmの関数であってもよい。変化を有するステップ長さΔTは、あらゆる微分方程式の数値解法に用いてもよい。それ故、可変ステップ長さを用いた微分方程式の数値的解法を開示する。暗号化/復号化法といった、擬似乱数を生成する方法においては、可変ステップ長さは、システムのセキュリティの向上に寄与する。つまり、結果生じる鍵系列をより予測不可能なものにする。
擬似乱数を生成する方法においては、初期条件X0、および/または、初期ステップ長さΔT0は、シード値(seed value)から計算してもよいし、または、シード値を表していてもよい。暗号化/復号化方法においては、初期条件X0の少なくとも一部、および/または、初期ステップ長さΔT0の少なくとも一部は、暗号化鍵から計算してもよいし、または、暗号化鍵を表してもよい。また、数学的システムのパラメータの少なくとも幾つかの少なくとも一部は、シード値もしくは暗号化鍵から計算してもよいし、または、シード値もしくは暗号化鍵を表してもよい。鍵は、公開鍵でも秘密鍵でもよい。
抽出されたデータのセットは、暗号化に用いる擬似乱数を含んでもよい。計算から生じる複数の数を抽出してもよい。抽出のステップは、生じる数のkビットからなる数、例えば、生じる数もしくは複数の生じる数のk個の(最)下位ビット、から導出された1つもしくは複数の数を抽出するステップを含んでよい。これは、導出される数の予測不可能性に貢献する。抽出されるkビットは、例えば、生じる数もしくは複数の生じる数への、法(モジュラス(modulus))または論理「積」(logical "and")関数の適用により導出することができる。k個の(最)下位ビットを抽出する代りとして、抽出のステップは、生じる数の、予め定められたもしくは可変的な位置からkビットを抽出してもよい。数kは、8から128までの、例えば、16から64、例えば、24から32といった範囲内で選択される整数値でよい。複数の数が抽出される場合、抽出される数は、異なるk値を用いて導出されてもよい。このこともまた、導出される数の予測不可能性に貢献する。抽出される数もしくは複数の抽出される数を、算術的、および/または、論理的演算を用いて操作して組み合わされた(合成)(combined)データ・セットを得てもよい。1つまたは複数の抽出される数、および/または、組み合わされたデータ・セットを、算術的および/または論理的演算において元のデータと組み合わせて元のデータを暗号化してよい。同様に、1つまたは複数の抽出される数、および/または、組み合わされたデータ・セットを、算術的および/または論理的演算において暗号化されたデータと組み合わせて元のデータを得てもよい。算術的、および/または、論理的演算は、XOR演算、乗算、もしくは、加算を含んでよい。例えば、算術的、および/または、論理的演算は、暗号化のための、元データと組み合わされたデータ・セットとの加算、および、復号化のための、暗号化されたデータからの組み合わされたデータ・セットの減算、を含んでよい。あるいは、算術的、および/または、論理的演算は、暗号化のための、元のデータからの組み合わされたデータ・セットの減算、および、復号化のための、組み合わされたデータ・セットと暗号化されたデータとの加算、を含んでよい。数の減算および加算においてモジュラス関数を用いる必要があってもよい。抽出されるデータ・セットは、複数の数から導出される。1つのビットのセットは、例えば、ある数のk個の(最)下位ビットから抽出してよく、また、別のビットは別の数から、例えば、64ビットの数の47番目から54番目のビット、を抽出してもよい。
ブロック暗号暗号化/復号化システムにおいては、計算は、平文のブロックを表すデータを備えて平文および鍵を、例えば、出力として暗号文を与える暗号化システムに入力してよい。抽出されるデータ・セットは、ブロック暗号暗号化/復号化システムにおける、平文のブロックに関する演算の少なくとも1つを定義することに用いてよい。ここに記載している方法は、ブロック暗号アルゴリズムにおいて用いてよい。平文のブロックは、2つのサブブロックに分割され、一方のサブブロックは他方に影響を及ぼすように用いられる。例えば、第1ブロックの変形バージョン(modified version)(またはその一部)を用いて他方(またはその一部)に、例えば、XOR関数によって影響を及ぼすように用いる。このようなアルゴリズムは一般に、フェイステル・ネットワークと呼ばれる。ブルース・シュナイアー著、アプライド・クリプトグラフィ、第2版(Applied Cryptography by Bruce Schneier, Second Edition, John Wiley & Sons, 1996)を参照されたい。このような場合、第1サブブロックもしくはその変形バージョンを、本方法に依存するハッシュ関数で変換してもよい。ハッシュ関数は、入力に暗号鍵を用いる。ラウンド(round)ごとに、新しい暗号鍵を入力としてハッシュ関数に与えることができる。あるいは、全てのラウンドにおいて同一の暗号鍵をハッシュ関数に与えてもよい。また、あるいは、例えば、全てのラウンドにおいて、各ブロックに対して、暗号鍵を入力として与えたり、またあるいは、各ブロックおよび各ラウンドに対して異なる暗号鍵を入力として与えるなどして、暗号鍵を、ブロックごとに変化させてもよい。
抽出されたデータ(抽出されるデータ)を、復号化または暗号化の鍵として用いることができる。2つの数学的システムにおいて計算が実行されている場合、一のシステムにおいて、一方のシステムから抽出されたデータ・セットを用いて鍵を生成、または、他方のシステムに対する鍵として使用してもよい。また、抽出されたデータは、電子署名を表すデータの生成、および/または、電子データの透かしに用いてもよい。
ここに記載する方法においては、電子デバイスは、あるレジスタ幅(resister width)を有する電子処理装置(electronic processing unit)を備えてよい。その場合、本方法は、以下のステップを備えてよい。
− 前記のレジスタ幅よりも大きい、あるレジスタ幅の、少なくとも1つの整数を、たかだか前記のレジスタ幅に等しいビット幅を有する、少なくとも2つの区分数(sub-numbers)として表現する。
− 少なくとも1つの前記の計算を、各区分数について部分計算(sub-computation)として実行し、少なくとも2つの、部分結果(partial results)を得る。部分結果は、たかだか処理装置のレジスタ幅に等しい、小さなビット幅の整数として表現される。
− 部分結果を連結し(concatenating)、前記の少なくとも1つの計算の結果に相当する表現を得る。
同じように、プロセッサのレジスタ幅より小さな幅の数に関する計算を実行してよい。その場合、演算は、例えば、論理ANDは、例えば、32ビット数についての計算では、64ビット数の上位半分は使用されずに、実行されてよい。当該数の符号を保持するために、例えば、32ビット数の、(最)上位ビットは、64ビットレジスタの上位32ビットにコピーしてよい。
− 前記のレジスタ幅よりも大きい、あるレジスタ幅の、少なくとも1つの整数を、たかだか前記のレジスタ幅に等しいビット幅を有する、少なくとも2つの区分数(sub-numbers)として表現する。
− 少なくとも1つの前記の計算を、各区分数について部分計算(sub-computation)として実行し、少なくとも2つの、部分結果(partial results)を得る。部分結果は、たかだか処理装置のレジスタ幅に等しい、小さなビット幅の整数として表現される。
− 部分結果を連結し(concatenating)、前記の少なくとも1つの計算の結果に相当する表現を得る。
同じように、プロセッサのレジスタ幅より小さな幅の数に関する計算を実行してよい。その場合、演算は、例えば、論理ANDは、例えば、32ビット数についての計算では、64ビット数の上位半分は使用されずに、実行されてよい。当該数の符号を保持するために、例えば、32ビット数の、(最)上位ビットは、64ビットレジスタの上位32ビットにコピーしてよい。
通常、整数は、計算において使用される固定小数点数もしくは複数の固定小数点数を含むか、または、表している。整数型の数で表されている固定小数点数が実数を表現することが可能である。
D 周期的なふるまいの検出
少なくとも1つの従属変数に関する、少なくとも1つの状態変数を支配する、少なくとも1つの非線形関数を有する数学的システムの解における周期的挙動を検出する方法は、以下のステップを含んでいる。
− 数学的システムを離散項で表現する。
− 計算を実行して、生じる数を求める。この生じる数は、少なくとも、数学的システムの解の一部を表している。
− 電子デバイスのメモリ内の配列A内の選ばれた解(selected solutions)を記録する。この配列は、有限個、n+1個、の解を記録できるようになっている。
− 以下のうちの少なくとも1つを決定する。配列に記録されている別の解と実質的に同一である、
− 現在の解、および、
− 配列に記録されている前記の解のうちの特定の1つの解、
のうちの少なくとも1つを決定する。
この方法は、本発明に係る従属的態様を構成する。
計算を実行するステップ、選ばれた解を記録するステップ、および、決定するステップは、計算過程において継続的に実行してよい。つまり、計算過程において、例えば、各計算ステップや、各イタレーションのように、繰り返し実行してよい。
少なくとも1つの従属変数に関する、少なくとも1つの状態変数を支配する、少なくとも1つの非線形関数を有する数学的システムの解における周期的挙動を検出する方法は、以下のステップを含んでいる。
− 数学的システムを離散項で表現する。
− 計算を実行して、生じる数を求める。この生じる数は、少なくとも、数学的システムの解の一部を表している。
− 電子デバイスのメモリ内の配列A内の選ばれた解(selected solutions)を記録する。この配列は、有限個、n+1個、の解を記録できるようになっている。
− 以下のうちの少なくとも1つを決定する。配列に記録されている別の解と実質的に同一である、
− 現在の解、および、
− 配列に記録されている前記の解のうちの特定の1つの解、
のうちの少なくとも1つを決定する。
この方法は、本発明に係る従属的態様を構成する。
計算を実行するステップ、選ばれた解を記録するステップ、および、決定するステップは、計算過程において継続的に実行してよい。つまり、計算過程において、例えば、各計算ステップや、各イタレーションのように、繰り返し実行してよい。
現在の解、または、配列に記録された特定の1つの解が、配列に記録された1つもしくは複数の解と実質的に同一であれば、この数学的システムの解は、周期的挙動を示している可能性がある。ここに記載する方法の1つが擬似乱数生成法に用いられる場合、特に、暗号化/復号化法で用いられる場合、このような周期的挙動は望ましくない。なぜなら、この挙動は、生成した擬似乱数もしくは鍵系列の予測不可能性に負の影響を及ぼすからである。上記の方法を用いることで、周期的挙動を検出することができる。
現在の解もしくは配列に記録された特定の1つの解が、配列に記録された1つもしくは複数の解と実質的に同一であるかどうかを決定するステップは、その解が完全に同一であるかどうかを決定するステップを有することが望ましい。状態変数Xの配列を示す数学的システムを解く場合、決定するステップには、Xの内容(entries)の幾つかだけが実質的に同一であるかどうかを決定するステップを含んでよい。
計算時間、および/または、メモリを節約するため、選ばれた解のみをメモリに記録してよい。
本方法においては、配列の各内容(entry)は、配列のレベル、Ai、0≦i≦n、ごとに増大する、世代(age)を有する解を含んでよい。また、本方法は、以下を含んでよい。
− 配列に、選択された解を記録するステップにおいて、現在の解を配列Aの0番目のレベルA0に記録し、それによって、配列Aの0番目のレベルに記録された古い値に上書きする。
− 0番目の所定の規準(クライテリオン(criterion))を満足する場合、0番目のレベルが現在の解によって上書きされる前に、配列Aの1番目のレベルに古い値を移す。そして、
1番目のレベル、および、より上のレベル、i、のそれぞれに対し、
− i番目のレベルに対する、i番目の所定のクライテリオンを満足する場合、i番目のレベルがi−1番目のレベルから移される値で上書きされる前に、i番目のレベルに記録されている古い値を配列Aのi+1番目のレベルに移す。
n番目のレベルが更新されるべきならば、以前からn番目のレベルに記録されている古い値を捨てる。
− 配列に、選択された解を記録するステップにおいて、現在の解を配列Aの0番目のレベルA0に記録し、それによって、配列Aの0番目のレベルに記録された古い値に上書きする。
− 0番目の所定の規準(クライテリオン(criterion))を満足する場合、0番目のレベルが現在の解によって上書きされる前に、配列Aの1番目のレベルに古い値を移す。そして、
1番目のレベル、および、より上のレベル、i、のそれぞれに対し、
− i番目のレベルに対する、i番目の所定のクライテリオンを満足する場合、i番目のレベルがi−1番目のレベルから移される値で上書きされる前に、i番目のレベルに記録されている古い値を配列Aのi+1番目のレベルに移す。
n番目のレベルが更新されるべきならば、以前からn番目のレベルに記録されている古い値を捨てる。
配列において、レベルiに対し、i番目のレベルに記録された古い値が、古い値をi+1番目のレベルに移すことなしに、新しい値で上書きされた回数をカウントしてもよい。i番目の所定のクライテリオンは、所定の回数にわたって古い値が移されていない場合に、満足する。その所定の回数は、配列Aの全てのレベルに対して同一であっても、または、レベル間で異なってもよい。配列Aのi番目のレベルに対する所定の回数は、例えば、配列内に記録される1つもしくは複数の値に依存してよい。それは、例えば、1つまたは複数の値において符号の変化が生じた場合、である。
現在の解もしくは配列内に記録されている前記の解の特定の1つが、配列に記録されている1つまたは複数の別の解と実質的に同一であるかどうかを決定するステップは、試験規準(テスト・クライテリオン(test criterion))を満足する場合にのみ実行してもよい。例えば、テスト・クライテリオンは、少なくとも1つの状態変数の符号が、+から−へ、もしくは、−から+へ、または、それらの両方の場合に満足される。また、テスト・クライテリオンは、少なくとも1つの従属変数に関して、少なくとも1つの状態変数の、少なくとも1つの導関数(derivative)の符号に変化が生じた場合に、満足されてもよい。この場合、本方法は、さらに、導関数を計算するステップを有する。
本方法においては、テスト値(test value)は、少なくとも1つの状態変数、および/または、導関数より計算されればよい。テスト・クライテリオンは、このテスト値に基づく。テスト・クライテリオンは、例えば、テスト値もしくはテスト値の導関数の符号に変化が生じた場合、または、所定の値になった場合に、満足される。
E 擬似乱数の生成、および、暗号化/復号化
擬似乱数を生成する方法は、以下のステップを有する。
I)数学的システムを離散項で表す。
II)少なくとも数学的システムの初期条件を表しているシード値を定める。
III)数学的システムの少なくとも1つの変数を、固定小数点数として表す。
IV)固定小数点数として表されている少なくとも1つの変数を含む計算を実行し、前記の計算より生じる数を求める。この生じる数は、以下のうち少なくとも1つを表している。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムの数値解法に含まれる別の計算で利用可能な数。
V)計算過程で生じた少なくとも1つの数から導出される数を、擬似乱数として抽出する。本方法は、本発明に係る非従属的態様を構成する。
擬似乱数を生成する方法は、以下のステップを有する。
I)数学的システムを離散項で表す。
II)少なくとも数学的システムの初期条件を表しているシード値を定める。
III)数学的システムの少なくとも1つの変数を、固定小数点数として表す。
IV)固定小数点数として表されている少なくとも1つの変数を含む計算を実行し、前記の計算より生じる数を求める。この生じる数は、以下のうち少なくとも1つを表している。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムの数値解法に含まれる別の計算で利用可能な数。
V)計算過程で生じた少なくとも1つの数から導出される数を、擬似乱数として抽出する。本方法は、本発明に係る非従属的態様を構成する。
シード値は、ユーザ定義値(user-defined value)でよい。例えば、本方法が、暗号化/復号化法に用いられる場合には、暗号化/復号化鍵でよい。
擬似乱数は、計算過程において生じた1つもしくは複数の数のk個の桁から導出される数として抽出してよい。例えば、k個の(最)下位ビット、または、1つもしくは複数の数から選択されたk個のビットである。
本方法は、ステップIV)およびV)を、所与の量の擬似乱数が生成されるまで繰り返すことを含んでよい。
所与の量の擬似乱数を生成し、電子デバイスのメモリに、予備シード値(スペア・シード値(spare seed value))として記録してよい。これは、例えば、上記の方法もしくはその他の方法で周期的挙動が検出された場合に用いることができる。擬似乱数に関する所与量は、アルゴリズムに、内的に記録してよい。
本方法は、さらに、上述したように、周期的挙動を検出する方法を備えてよい。その場合、擬似乱数を生成するステップは、
現在の解もしくは配列に記録されている前記の解の特定の1つが、配列に記録されている1つもしくは複数の解と実質的に同一であるかどうかを決定するステップが、
現在の解もしくは特定の解が、1つもしくは複数の解と実質的に同一である、
ことを、明らかにした場合、
擬似乱数生成を遮断、つまり、ステップIV)およびV)の繰り返しを中断し、
ステップII)において、シード値として、スペア・シード値を用い、
擬似乱数生成を再開、つまり、ステップIV)およびV)の繰り返しを再開する。
現在の解もしくは配列に記録されている前記の解の特定の1つが、配列に記録されている1つもしくは複数の解と実質的に同一であるかどうかを決定するステップが、
現在の解もしくは特定の解が、1つもしくは複数の解と実質的に同一である、
ことを、明らかにした場合、
擬似乱数生成を遮断、つまり、ステップIV)およびV)の繰り返しを中断し、
ステップII)において、シード値として、スペア・シード値を用い、
擬似乱数生成を再開、つまり、ステップIV)およびV)の繰り返しを再開する。
従い、例えば、暗号化/復号化法において、周期的挙動が検出された場合には、予備の(スペアの)暗号化/復号化鍵を用いてよい。
擬似乱数生成を再開するステップに先だって、所与の量の擬似乱数を生成し、そして、新しいスペア・シード値として、電子デバイスのメモリに記録してよい。ステップII)において新しいシード値を備え、そして、ステップIV)およびV)が開始される場合、ステップIV)に先だって、配列Aの各レベルは、リセットされることが望ましい。
元のデータ・セットを、暗号化されたデータ・セットに暗号化する方法は、以下のステップを有する。
A)次のステップを実行し、擬似乱数を生成する。
I)数学的システムを離散項で表す。
II)少なくとも1つの、数学的システムに関する初期条件を表している暗号化鍵を定義する。
III)少なくとも1つの、数学的システムに関する変数を、固定小数点数として表す。
IV)少なくとも1つの、固定小数点数として表されている変数を含んだ計算を実行し、その計算より、以下のうちの少なくとも1つを表している、生じる数を求める。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムに対する数値的解法に含まれる別の計算で利用可能な数。
V)計算過程で得た数の少なくとも1つから導出される数を、擬似乱数として抽出する。
B)元データおよび擬似乱数を、以下のうちの少なくとも1つを用いて操作する。
i.算術演算、および、
ii.論理演算。
そして、組み合わされたデータのセットを得る。この組み合わされたデータ・セットは、暗号化されたデータである。
A)次のステップを実行し、擬似乱数を生成する。
I)数学的システムを離散項で表す。
II)少なくとも1つの、数学的システムに関する初期条件を表している暗号化鍵を定義する。
III)少なくとも1つの、数学的システムに関する変数を、固定小数点数として表す。
IV)少なくとも1つの、固定小数点数として表されている変数を含んだ計算を実行し、その計算より、以下のうちの少なくとも1つを表している、生じる数を求める。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムに対する数値的解法に含まれる別の計算で利用可能な数。
V)計算過程で得た数の少なくとも1つから導出される数を、擬似乱数として抽出する。
B)元データおよび擬似乱数を、以下のうちの少なくとも1つを用いて操作する。
i.算術演算、および、
ii.論理演算。
そして、組み合わされたデータのセットを得る。この組み合わされたデータ・セットは、暗号化されたデータである。
ステップA)に先立ち、元データのサブセットをデータ・セットから分離してもよい。そして、ステップB)は、そのデータのサブセットに関して実行してよい。このステップは、元データ・セットの全体を、共同的に構成する複数のサブセットが暗号化されるまで繰り返してよい。
擬似乱数は、計算過程で得た1つもしくは複数の数のk個のビットより導出される数として抽出してよい。それらは、例えば、k個の(最)下位ビットや、k個の選抜されたビットである。
ステップIV)およびV)は、所与の量の擬似乱数を生成するまで繰り返してよい。
所与の量の擬似乱数を生成し、電子デバイスのメモリに、予備の(スペアの)暗号化鍵として記録してよい。例えば、計算のイタレーション・ステップもしくは積分ステップの少なくとも1つで得たかもしくは生じた数を、スペア暗号化鍵として記録してよい。スペア暗号化鍵は、例えば、数学的システムの解に周期的挙動が発生したために暗号化か中断されたような場合に用いてよい。スペア暗号化鍵の出力が必要ない場合には、暗号化アルゴリズム内部に記録すればよい。復号化に方法を用いる際、このスペア鍵が復号化鍵となる。
上記より明らかだが、本方法は、周期的挙動を検出する方法を備えてよい。この場合、暗号化法は、
現在の解もしくは配列に記録されている前記の解の特定の1つが実質的に、配列に記録されている1つもしくは複数の解と同一であるかを検出するステップが、
現在の解もしくは特定の解が、別の1つもしくは複数の解と同一であると示した場合、
擬似乱数生成を中断、つまり、ステップIV)およびステップV)の繰り返しを中断し、
ステップII)において、スペア暗号化鍵を暗号化鍵として用い、
擬似乱数の生成を再開、つまり、ステップIV)およびステップV)の繰り返しを再開する。
現在の解もしくは配列に記録されている前記の解の特定の1つが実質的に、配列に記録されている1つもしくは複数の解と同一であるかを検出するステップが、
現在の解もしくは特定の解が、別の1つもしくは複数の解と同一であると示した場合、
擬似乱数生成を中断、つまり、ステップIV)およびステップV)の繰り返しを中断し、
ステップII)において、スペア暗号化鍵を暗号化鍵として用い、
擬似乱数の生成を再開、つまり、ステップIV)およびステップV)の繰り返しを再開する。
擬似乱数生成を再開するステップに先立ち、所与の量の擬似乱数を生成し、電子デバイスのメモリに、新しい、スペア暗号化鍵として記録してよい。
ステップIV)およびステップV)を、ステップII)における新しいシード値で開始する場合、配列Aの各レベルは、ステップIV)に先だってリセットすることが望ましい。
上で議論した方法で暗号化される、暗号化データのセットを復号化する方法は、以下のステップを有する。
a)暗号化法に関連して上で定めたステップA)を実行し、暗号化法のステップV)で抽出した擬似乱数と同じ擬似乱数を抽出し、
b)暗号化されているデータおよび擬似乱数を算術演算、ならびに/または、論理演算で操作して、元のデータ、すなわち、復号化されたバージョンのデータを得る。
a)暗号化法に関連して上で定めたステップA)を実行し、暗号化法のステップV)で抽出した擬似乱数と同じ擬似乱数を抽出し、
b)暗号化されているデータおよび擬似乱数を算術演算、ならびに/または、論理演算で操作して、元のデータ、すなわち、復号化されたバージョンのデータを得る。
ステップa)に先立ち、暗号化されたデータのサブセットを、暗号化されたデータ・セットから分離してよい。その場合、データのサブセットは、上記の暗号化法により暗号化されており、復号化法は、データのサブセットについてステップa)およびb)を実行してよい。このステップは、暗号化されたデータの全体を共同的に構成する複数のサブセットが復号化されるまで繰り返してよい。
暗号化法の、いかなるステップも、元のデータの暗号化のシーケンスの過程と同様に、暗号化されたデータを復号化する際に適用してよい。
F 複数インスタンス(INSTANCES)の並列的処理
擬似乱数生成法は、一のインスタンスにおいて、以下のステップを有する。
I)数学的システムを離散項で表す。
II)数学的システムの、少なくとも1つの初期条件を表しているシード値を定める。
III)数学的システムの少なくとも1つの変数を、固定小数点数として表す。
IV)固定小数点数として表されている少なくとも1つの変数を含んだ計算を実行し、生じる数を求める。この生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムの解の一部、および、
b.数学的システムの数値的解法に含まれる、別の計算で利用可能な数。
V)計算過程において発生した、少なくとも1つの数から導出される数を、擬似乱数として抽出する。
ステップI)からV)を、複数のインスタンスにおいて並列的に実行する。この方法は、本発明に係る非従属的態様を構成する。
擬似乱数生成法は、一のインスタンスにおいて、以下のステップを有する。
I)数学的システムを離散項で表す。
II)数学的システムの、少なくとも1つの初期条件を表しているシード値を定める。
III)数学的システムの少なくとも1つの変数を、固定小数点数として表す。
IV)固定小数点数として表されている少なくとも1つの変数を含んだ計算を実行し、生じる数を求める。この生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムの解の一部、および、
b.数学的システムの数値的解法に含まれる、別の計算で利用可能な数。
V)計算過程において発生した、少なくとも1つの数から導出される数を、擬似乱数として抽出する。
ステップI)からV)を、複数のインスタンスにおいて並列的に実行する。この方法は、本発明に係る非従属的態様を構成する。
2つもしくはそれよりも多くのインスタンスにおける計算は、同時的に、もしくは、逐次的に実行してよい。従い、2つもしくはそれよりも多くのインスタンスにおける計算は、同時的に複数の計算を処理する実行命令、または、一度に単一の計算のみを処理する実行命令によって実行されることができる。
よって、複数のインスタンスにおいて並列的に行われる擬似乱数の生成は、場合によっては、ステップを一のインスタンスのみで実行するよりも高速になる場合がある。特に、本方法が実行されるハードウェアが、並列処理をサポートしている場合には、高速になる場合がある。また、2つ、もしくは、それよりも多くのインスタンスを結合(カップリング)することで、一のインスタンスのみを用いる場合よりも、より大きな暗号化の鍵を用いることができる。例えば、暗号化鍵の一部に、第1のインスタンスを用い、暗号化鍵の別の部分には、第2のインスタンスを用いてよい。
任意の高次の数学的システムは、それよりも低次の、サブシステムと呼んでいるシステムを結合(カップリング)して構成してよい。例えば、N個のロジスティック写像を結合してN次元の系(システム)を得てよい。結合の仕組みは、N個の異なる変数に対応するN個の異なる写像において、線形もしくは非線形結合(カップリング)関数を導入することで構成される。1つの変数を支配する結合関数は、他の全ての変数に従属しても、しなくともよい。あるいは、この結合は、N個の変数の1つを、残りのN−1個の写像の1つもしくは複数に代入することで実現されてもよい。
2つもしくはそれよりも多くのロジスティック写像は、線形結合項で結合することができる。以下に示す例においては、結合項の前のパラメータε1およびε2が、結合強度をコントロールする。すなわち、2つのロジスティック写像のうちの一方の、他の写像に対する影響度をコントロールする。
少なくとも、各インスタンスに対してステップIV)を実行する間に、複数のインスタンス間で数またはデータの伝送を行ってよい。同様に、ステップV)も行ってよい。
本方法は、算術演算および/または論理演算を用いて、各インスタンスにおいてステップV)で抽出される複数の擬似乱数を、共通の擬似乱数に統合する(combine)ステップを備えてよい。
パラメータおよび/もしくは変数の値、または、その一部を、2つのインスタンスの間でやりとり(交換(exchange))してよい。従い、例えば、一のインスタンスのxn+1と、他のインスタンスのxn+1を、各イタレーション・ステップの後でやりとりしてよい。または、一のインスタンスのxn+1を、他のインスタンスのyn+1とやりとりしてもよい。同様に、ステップ長さΔtnも、2つのインスタンス間でやりとりしてよい。変数もしくはパラメータの値のやりとりは、第2のインスタンスの値の修正に値を用いる前に、第1のインスタンスの値について論理および/または算術演算を実行することで実現されてもよい。
G 数学的システムに対する入力としての暗号化鍵の利用
少なくとも1つの関数を含んだ数学的システムにおいて数値計算を実行する方法は、以下のステップを有してよい。
− 数学的システムを離散項で表す。
− 少なくとも1つの、数学的システムの変数を固定小数点数として表す。
− 前記の計算を行う。この計算は、少なくとも1つの、固定小数点数として表された変数を含んでいる。
− 前記の計算より、生じる数を得る。この生じる数は、以下のうちの少なくとも1つを表す。
a.少なくとも、数学的システムの解の一部、および、
b.数学的システムの数値解法に含まれる別の計算で利用可能な数。
計算を実行するステップは、以下のステップを有する。
− 少なくとも1つの、以前の解Xm、m≦n+1に基づいて、解Xn+1を反復的に計算する。ここでは、計算を実行するステップは、少なくとも1つの、状態変数Xの初期条件X0に基づいて開始される。
本方法は、さらに以下のステップを有する。
− 前記の計算に対する入力として暗号化鍵を与える。ここでは、暗号化鍵を初期条件X0の生成に用いる。本方法は、本発明に係る非従属的態様を構成する。
少なくとも1つの関数を含んだ数学的システムにおいて数値計算を実行する方法は、以下のステップを有してよい。
− 数学的システムを離散項で表す。
− 少なくとも1つの、数学的システムの変数を固定小数点数として表す。
− 前記の計算を行う。この計算は、少なくとも1つの、固定小数点数として表された変数を含んでいる。
− 前記の計算より、生じる数を得る。この生じる数は、以下のうちの少なくとも1つを表す。
a.少なくとも、数学的システムの解の一部、および、
b.数学的システムの数値解法に含まれる別の計算で利用可能な数。
計算を実行するステップは、以下のステップを有する。
− 少なくとも1つの、以前の解Xm、m≦n+1に基づいて、解Xn+1を反復的に計算する。ここでは、計算を実行するステップは、少なくとも1つの、状態変数Xの初期条件X0に基づいて開始される。
本方法は、さらに以下のステップを有する。
− 前記の計算に対する入力として暗号化鍵を与える。ここでは、暗号化鍵を初期条件X0の生成に用いる。本方法は、本発明に係る非従属的態様を構成する。
本明細書では、用語「以前の解」は、現在の解Xn+1を含むと解すべきである。
暗号化鍵はまた、数学的システムの初期化にも用いてよい。
H データ・セットの同一性確認を供するための、または、データ・セットの識別のための、識別値の生成
データ・セットの識別のための識別値の決定方法は、少なくとも1つの関数を有する数学的システムにおける数値計算を実行する。本方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 少なくとも1つの、数学的システムの変数を、固定小数点数として表す。
− 前記の計算を実行する。この計算は、少なくとも1つの、固定小数点数として表された変数を含んでいる。
− 前記の計算より、生じる数を求める。この生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムに対する解の少なくとも一部、および、
b.数学的システムの数値解法に含まれる、他の計算で利用可能な数。
ここでは、データ・セットの少なくとも一部に関する表現形を、前記の計算において用いる場合、本方法は、さらに以下のステップを有する。
− 前記の識別値として、前記の生じる数の少なくとも一部を抽出する。本方法は、本発明に係る非従属的態様を構成する。
データ・セットの識別のための識別値の決定方法は、少なくとも1つの関数を有する数学的システムにおける数値計算を実行する。本方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 少なくとも1つの、数学的システムの変数を、固定小数点数として表す。
− 前記の計算を実行する。この計算は、少なくとも1つの、固定小数点数として表された変数を含んでいる。
− 前記の計算より、生じる数を求める。この生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムに対する解の少なくとも一部、および、
b.数学的システムの数値解法に含まれる、他の計算で利用可能な数。
ここでは、データ・セットの少なくとも一部に関する表現形を、前記の計算において用いる場合、本方法は、さらに以下のステップを有する。
− 前記の識別値として、前記の生じる数の少なくとも一部を抽出する。本方法は、本発明に係る非従属的態様を構成する。
よって、上記の方法は、先に詳細に議論したハッシュ関数またはハッシュアルゴリズムと考えてもよい。識別値は、数値計算における異なる計算段階(計算ステージ)より抽出された、幾つかの抽出数で構成してよい。抽出は、各計算ステップもしくは各イタレーション・ステップ、または、選択した計算ステージのみで行われてよい。
用語「識別値」は、データ・セットを識別する、ハッシュ値または暗号化チェック・サムでよい。例えば、ブルース・シュナイアー著のアプライド・クリプトグラフィ、第2版(Applied Cryptography by Bruce Schneier, Second Edition, John Wiley & Sons, 1996)を参照されたい。暗号化鍵を計算のためのシード値として用いる場合、ハッシュ関数は通常、MAC関数(メッセージ認証コード)と称される。
数学的システムは、微分方程式を有してよい。例えば、偏微分方程式もしくは常微分方程式、または、面積保存写像もしくは面積非保存写像といった離散写像を有してよい。数学的システムは、少なくとも1つの、少なくとも1つの状態変数Xを支配する非線形写像関数を有してよい。
非線形写像関数は、例えば、xn+1=λxn(1−xn)なる形式を有するロジスティック写像を有してよい。ここで、λはパラメータ、xn+1は、計算の第(n+1)ステージにおける状態変数xの値であり、xnは、計算の第nステージにおける状態変数xの値である。
ロジスティック写像は、xn+1=λxn(1−xn)+ε(xn−mn)なる形式に修正してもよい。ここで、λおよびεはパラメータ、xn+1は、計算の第(n+1)ステージにおける状態変数xの値であり、xnは、計算の第nステージにおける状態変数xの対であり、mnは、データ・セットの第n部分の表現形を含んでいる。
暗号化鍵は、少なくとも部分的に、λ、ε、および、状態変数xの初期値x0のうちの少なくとも1つを決定するために用いてよい。
数学的システムは、少なくとも1つの非線形微分方程式、および/または、非線形微分方程式のセットを備えてよい。
数学的システムは、少なくとも1つの非線形微分方程式を有することが望ましく、この場合、ある程度の不規則な、または、カオス的な挙動が実現され、また、システムのランダムさに関する特性およびセキュリティが向上される。
少なくとも1つのリヤプノフ指数を、数学的計算の際に、少なくとも1度計算してよく、それによって数学的システムが、カオス的挙動を示すかどうかを判断してよい。もし、カオス的挙動を示さないのであれば、例えば、算出されたリヤプノフ指数が正でないならば、計算を中断し、別の初期値、および/または、別のパラメータで再開してもよい。
少なくとも、非線形微分方程式は、少なくとも1つの状態変数Xを支配していることが望ましい。Xは、少なくとも1つの従属変数tの関数である。非線形微分方程式のセットは、例えば、ローレンツ系を含んでもよい。
I オーバーフローの取り扱い、意図的なオーバーフローの生成
少なくとも1つの関数を有する、数学的システムにおける数値計算を実行する方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 少なくとも、前記の関数に関する選択された変数の範囲(値域)を制限する。その範囲は、十分に狭く、よって、前記の関数の、選択された変数が、前記の範囲により制限を受けない場合にとり得る値を排除する。
− 計算を実行し、生じる数を求める。生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムの解の一部、および、
b.数学的システムの数値解法に含まれる、別の計算で利用可能な数。
− 計算の結果、選択した変数に関する値が範囲を超えている場合、選択した変数に範囲に含まれる値をアサインする。本方法は、本発明に係る非従属的態様を構成する。
少なくとも1つの関数を有する、数学的システムにおける数値計算を実行する方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 少なくとも、前記の関数に関する選択された変数の範囲(値域)を制限する。その範囲は、十分に狭く、よって、前記の関数の、選択された変数が、前記の範囲により制限を受けない場合にとり得る値を排除する。
− 計算を実行し、生じる数を求める。生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムの解の一部、および、
b.数学的システムの数値解法に含まれる、別の計算で利用可能な数。
− 計算の結果、選択した変数に関する値が範囲を超えている場合、選択した変数に範囲に含まれる値をアサインする。本方法は、本発明に係る非従属的態様を構成する。
例えば、値のうちの、範囲を超えている、上位ビットが切り捨て(トランケート(truncated))られる。この、範囲内の値をアサインするステップは、モジュラス関数として表してもよい。よって、本方法の方法は、例えば、暗号化/復号化システムのランダムさに関する特性の向上、ならびに/または、暗号化されたデータから数学的システムの内部状態に関する情報を導くことをより困難にするために、意図的なオーバーフローを与えることもできる。
従って、上記の方法は、擬似乱数生成法の一部としてよい。この方法は、例えば、暗号化および復号化の少なくとも一方に用いられる擬似乱数を生成する。数学的システムは、少なくとも1つ、正のリヤプノフ指数を有することが望ましい。
K 架空の、または、仮の小数部セパレータの取り扱い
少なくとも1つの関数を有する数学的システムにおいて数値計算を実行する、別の方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 数学的システムの少なくとも1つの変数を、整数として表す。
− 前記の整数に架空の小数部セパレータを配置する。これにより、整数は実数を表す。
− 整数として表されている変数を少なくとも1つ含む計算を実行し、生じる数を得る。この生じる数は、整数として表される。
− 以下に示すステップの少なくとも1つを実行することにより、生じる数の所定の位置に、架空の小数部セパレータを配置する。
− 整数の架空の小数部セパレータの位置を補正すること、および、
− 生じる数に、架空の小数部セパレータを配すること。
本方法は、本発明に係る非従属的態様を構成する。
少なくとも1つの関数を有する数学的システムにおいて数値計算を実行する、別の方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 数学的システムの少なくとも1つの変数を、整数として表す。
− 前記の整数に架空の小数部セパレータを配置する。これにより、整数は実数を表す。
− 整数として表されている変数を少なくとも1つ含む計算を実行し、生じる数を得る。この生じる数は、整数として表される。
− 以下に示すステップの少なくとも1つを実行することにより、生じる数の所定の位置に、架空の小数部セパレータを配置する。
− 整数の架空の小数部セパレータの位置を補正すること、および、
− 生じる数に、架空の小数部セパレータを配すること。
本方法は、本発明に係る非従属的態様を構成する。
生じる数は通常、小数部セパレータの位置が固定された、固定小数点数である。あるいは、生じる数の小数部セパレータの位置は、計算が完了した後で補正されてもよい。第3の可能性は、計算の前後で、小数部セパレータの位置を補正することである。このことは、生じる数の小数部セパレータの左側の位置の全てが使用されていない場合に関連がある。生じる数の分解能(最小の変化量)よりも相対的に高い分解能を保持することが望ましい。例えば、生じる数は、S(10.21)形式を有することが望ましい。よって、例えば、2つのS(7.24)形式の数の加算を、S(8.23)形式で実行し、それから、この数をS(10.21)形式を有する生じる数に変換する。従い、項の2番目および3番目の(最)下位ビットからのキャリーが、結果に影響を与えることがある。
最終的には、幾つかの計算に対しては、いかなる小数部セパレータの位置の補正も要求されない、もしくは、必要がないことがあり得る。
小数部セパレータの位置の補正は通常、桁送り(シフト)演算によって実行される。
最も一般的な形式においては、少なくとも1つの関数を有する数学的システムにおいて数値計算を実行する方法は、以下のステップを有する。
− 数学的システムを離散項で表す。
− 少なくとも1つの、数学的システムの変数を固定小数点数として表す。
− 少なくとも1つの、固定小数点数として表された変数が計算に含まれるようにして、前記の計算を実行する。
− 前記の計算より、生じる数を得る。この生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムに対する数値的解法に含まれる、別の計算で利用可能な数。
− 数学的システムを離散項で表す。
− 少なくとも1つの、数学的システムの変数を固定小数点数として表す。
− 少なくとも1つの、固定小数点数として表された変数が計算に含まれるようにして、前記の計算を実行する。
− 前記の計算より、生じる数を得る。この生じる数は、以下のうちの少なくとも1つを表している。
a.数学的システムの解の少なくとも一部、および、
b.数学的システムに対する数値的解法に含まれる、別の計算で利用可能な数。
L 架空の小数部セパレータの位置設定が不要である計算の代用
別の、本発明に係る非従属的態様を開示する。これは、少なくとも1つの関数を有する非線形数学的システムにおける数値計算を実行する回路である。この回路は、回路もしくはコンピュータ・プログラム・コードの数学的システムが修正された項で表されるように設計もしくはプログラムされている。数値計算の中から選択された少なくとも1つの計算には、整数演算が含まれており、このため、数学的システムの、修正されていない表現形式における前記の選択された数値計算は、1つもしくは複数の浮動小数点演算、または、1つもしくは複数の固定小数点数の小数部セパレータの位置のコントロールを必要とする。本回路は、前記の選択された計算を、少なくとも1つの、1つもしくは複数の整数についての代用計算で置き換え、よって、回路もしくはコンピュータ・プログラム・コードの数学的システムが、架空の小数部セパレータの位置設定を必要としない少なくとも1つの計算で表されるように、設計もしくはプログラムされている。
別の、本発明に係る非従属的態様を開示する。これは、少なくとも1つの関数を有する非線形数学的システムにおける数値計算を実行する回路である。この回路は、回路もしくはコンピュータ・プログラム・コードの数学的システムが修正された項で表されるように設計もしくはプログラムされている。数値計算の中から選択された少なくとも1つの計算には、整数演算が含まれており、このため、数学的システムの、修正されていない表現形式における前記の選択された数値計算は、1つもしくは複数の浮動小数点演算、または、1つもしくは複数の固定小数点数の小数部セパレータの位置のコントロールを必要とする。本回路は、前記の選択された計算を、少なくとも1つの、1つもしくは複数の整数についての代用計算で置き換え、よって、回路もしくはコンピュータ・プログラム・コードの数学的システムが、架空の小数部セパレータの位置設定を必要としない少なくとも1つの計算で表されるように、設計もしくはプログラムされている。
この数学的システムは、カオス的挙動を示してもよい。
よって、代用計算を実行することで、計算時間を節約することができる。
同様にして、電子回路において、少なくとも1つの関数を有する非線形数学的システムの数値計算を実行する方法を開示する。その回路において、または、その回路が作動することによる、コンピュータ・プログラムの部分(セグメント)において、本方法は、以下のステップを有する。
− 数値計算のうちから選択された少なくとも1つが、整数演算を含むように、数学的システムを修正された項で表す。ここで、数学的システムの修正されていない表現形式における前記の選択された数値計算は、1つもしくは複数の浮動小数点演算、または、1つもしくは複数の固定小数点数における小数部セパレータの位置のコントロールを必要とする。
− 前記の選択された計算を、少なくとも1つの、1つもしくは複数の整数についての代用計算で置き換える。ここで、回路またはコンピュータ・プログラム・コードの数学的システムは、少なくとも1つの代用計算が架空の小数部セパレータの位置設定を必要としないようにして、表現される。
前記の代用計算を実行する。
− 数値計算のうちから選択された少なくとも1つが、整数演算を含むように、数学的システムを修正された項で表す。ここで、数学的システムの修正されていない表現形式における前記の選択された数値計算は、1つもしくは複数の浮動小数点演算、または、1つもしくは複数の固定小数点数における小数部セパレータの位置のコントロールを必要とする。
− 前記の選択された計算を、少なくとも1つの、1つもしくは複数の整数についての代用計算で置き換える。ここで、回路またはコンピュータ・プログラム・コードの数学的システムは、少なくとも1つの代用計算が架空の小数部セパレータの位置設定を必要としないようにして、表現される。
前記の代用計算を実行する。
これから、上記の方法を、図面を参照してさらに説明する。
図1ないし図5に、本発明に係る方法の、様々な態様および実施形態を例示する。先に議論したように、逐次暗号は、鍵によって定められる擬似ランダム・ビットのストリームを作成する。この、ビットのストリームは、鍵系列(keystream)と称されている。そして、暗号化は、平文と鍵系列の排他的論理和(XOR)をビットごとにとって暗号文を作成することで実行される。
図1ないし図5に、本発明に係る方法の、様々な態様および実施形態を例示する。先に議論したように、逐次暗号は、鍵によって定められる擬似ランダム・ビットのストリームを作成する。この、ビットのストリームは、鍵系列(keystream)と称されている。そして、暗号化は、平文と鍵系列の排他的論理和(XOR)をビットごとにとって暗号文を作成することで実行される。
鍵系列を生成するため、擬似乱数生成器(PRNG(Pseudo Random Number Generator))に関する実施形態では、8つの32ビット状態変数と、対応した8つの32ビット・カウンタ変数に分割された512内部ビットに構成される。カウンタ変数は、各イタレーションにおいて増加し、また、状態変数に加えられる。PRNGは、非線形関数に基づく8つの結合した方程式を有するシステムに逐次的に代入を行い、そして、各イタレーション(逐次代入)の後で8つの状態変数から128ビットを抽出することで動作する。
128ビットの鍵を512ビットに展開(expand)することで、アルゴリズムは初期化(イニシャライズ)される。この512ビットは、8つの状態変数および8つのカウンタ値の設定に用いられる。そして、図1に示す、状態遷移関数(next-state function)で定められるシステムは、状態変数と鍵との相関性を低減させるため、4回、逐次的代入を行う。最後に、カウンタ値の状態変数との排他的論理和(XOR)をとってカウンタ値を修正し、初期カウンタ値を得る。
関数を用いることもできる。この関数は、以降、「g関数」と呼ぶ。このg関数は、32ビット数の二乗をとって64ビット数を算出し、この64ビット数からの上位32ビットと下位32ビットで排他的論理和(XOR)をとる。図1を参照されたい。
8つの結合した方程式を有するシステムで、g関数が用いられ、システムは1度逐次代入を行い、新しい状態を生成し、それより、128ビットのランダムなデータを抽出する。各イタレーションの前に、カウンタ値は、後で説明するカウンタ系(カウンタ・システム)によって増加され、それから、新しい状態値を、次のシステムに逐次代入を行うことによって算出する。カウンタ増加を含んだシステムの例示する図2も併せて参照されたい。
ここで、
であり、xj,iはイタレーションiにおける状態jの値である。(以降、
を、本文中では、「(→付)Xi」と表し、太字のMを「(太字)M」と表すこととする。)また、
であり、cj,iはイタレーションiにおけるカウンタjの値である。
は、(→付)Xiについて評価するg関数である。つまり、(→付)G((→付)X)=(g(x0,i),g(x1,i),...,g(x7,i))であり、(太字)Mは、次式で定義される結合行列(カップリング・マトリックス)である。
ここで、k8およびk16は、結合(カップリング)が32ビットのパーミュテーションを含んでいることを示す。すなわち、パーミュテーションkに対し、式k×g(xi)は、数g(xi)の全てのビットまたはビットの幾つかが混合(mix)されることを示す。k8は、当該パーミュテーションが、8ビットの左回転(8-bit left rotation)を意味する。同様に、k16は、16ビットの左回転(16-bit left rotation)を意味している。図3に、このような結合系(カップリング・システム)を例示する。
カウンタの動力学は、
で定義される。キャリーが生じた場合、保存されて、次のイタレーション・ステップで加えられる。(→付)A=(a0,a1,...,a7)は、例えば、8つの32ビット整数に区分された256ビット定整数でよい。図4は、カウンタの増加について例示している。
各イタレーション・ステップの後で、別々の状態変数で排他的論理和(XOR)をとって、128ビットの鍵系列を抽出する。例えば、2つの異なる状態変数の上位16ビットおよび下位16ビットの排他的論理和(XOR)をとって、全部で8つの16ビットの組み合わせ(コンビネーション)を作り、128ビットのランダムなデータを得る。鍵系列と、平文/暗号文との排他的論理和(XOR)をとって暗号化/復号化が行われる。図5は、このような、暗号化/復号化処理を例示している。
多くの、擬似乱数生成器の実際の用途では、所謂、初期化ベクトル(Initialization Vector)(IV)を利用する必要がある。例えば、大量のデータを暗号化/復号化する場合、データの一端から開始して、データ全体に渡って、続ける必要がある。たとえ、データの端部の近くにあるデータの一部のみを復号化するのであっても、データの最初から適切な回数だけ逐次的に反復して復号化すべきデータに対応する出力に到達する必要がある。このことは、多くの、直接的に使用しない計算を必要とし、時間のかかることである。この問題は、IVを利用することで解決可能である。IVはまた、仮想私設通信網(仮想プライベート・ネットワーク)(VPN)においても有用である。そのようなネットワークにおいては、データは、パッケージに分割されてよく、一意の(ユニークな)IVが、各パッケージと一緒に送信され、たとえ、別のパッケージを失ったとしても(ロストしても)、各パッケージは、個別的に復号化可能である。暗号化/復号化されるべきデータは、部分(セクション)に分割され、各セクションは、ユニークなIVと関係を持つ。暗号は先ず、鍵を用いて準備され(セットアップされ)、それから、数学的システムの内部状態を、予測不可能な方法で、IVの関数として、変化させる。この変化は、カウンタに対し、状態値に対し、または、両方に対して実行されてよい。しかるに、暗号の出力は、鍵とIVの両方の関数であり、よって、複数回の逐次的な反復(イタレーション)を行うことなく所与のセクションもしくはパッケージを暗号化/復号化可能である。
IVを用いる方法の一例として、数学的システムのマスタ状態は、通常のセットアップ手続きで作り出され、続いてカウンタ状態は、以下のようにして操作される。64ビットIVは、256ビットに展開され、カウンタ値について排他的論理和(XOR)がとられ、そして、状態の全てのビットがIVの全てのビットに依存するように、システムに、複数回の逐次的な反復代入(イタレーション)を行う。
上記にて議論したアルゴリズムは、M.ベスガード、M.ベステレージャ、T.ペデルセン、J.クリスチャンセン、および、O.スカベニウスの共著、ラビット: ア・ニュー・ハイ−パフォーマンス・ストリーム・サイファ、ファースト・ソフトウェア・エンクリプション(FSE)のプロシーディング、2003年、シュプリンガー、ベルリン(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))、にさらに詳細に述べられている。
図6は、デジタル・データの暗号化、送信、および、復号化のシーケンスに関する概略的例図である。図7は、ブロック暗号システムにおける暗号化シーケンスの例図である。また、図8は、逐次(ストリーム)暗号システムにおける暗号化シーケンスの例図である。ブロック暗号および逐次暗号システムは、先の、本発明の背景に関する議論において議論している。
ここでは、データを暗号化/復号化する方法およびアルゴリズムについて説明する。本アルゴリズムは、データ暗号化/復号化における殆どの目的に利用可能である。しかし、本アルゴリズムは性質上、例えば、大きなファイル、ライブもしくは予め記録された音声(audio)/映像(video)、著作権のある素材(例えば、コンピュータ・ゲームもしくはその他のソフトウェア)、ならびに、記録しておきたいデータ(例えば、バックアップおよび/もしくは移送)のような、データ・ストリーム、または、その他の連続的データの暗号化に有利である。また、アルゴリズムの有する高速性により、これらの目的に適している。計算方法により、本アルゴリズムは、非常に小さなプロセッサでも利用可能である。
本アルゴリズムは、擬似ランダム・シーケンス逐次暗号システム(PRSSC(Pseudo-Random Sequence Stream Cipher system))に基づいている。PSSRCシステムは、擬似乱数生成器によって特徴づけられる(図9の外側の四角)。この生成器が、2進鍵(バイナリ・キー)に基づいて擬似的にでたらめなデータ・シーケンスを生成する。このシーケンス、所謂、鍵系列、図9参照、を用いて暗号化および復号化が行われる。鍵系列は、可能な鍵に対してそれぞれ、一意的(ユニーク)である。
排他的論理和(XOR)関数(図面においては、記号、
で記されている。)を平文に適用し、等量の鍵系列が平文を暗号化する。XOR関数の出力は、暗号文である。同様の手法をもう一度暗号文に適用すれば、暗号文が平文に復号化される。復号化に用いた鍵が、暗号化に用いた鍵と完全に同一である場合に限り、復号化によって暗号化された平文が現われる。
暗号化されたデータの完全性は、暗号文を復号化できる鍵に存在する。よって、鍵を推測することは困難でなければならない。このことを確実にするため、アルゴリズムの基本設計では、少なくとも128ビットの鍵を用いる。128ビットという鍵のサイズでは、およそ、3.4・1038通りの異なる鍵が存在する。
本アルゴリズムは、カオス的なふるまいを示す系(システム)、例えば、ローレンツ系を用いている。この系は、以下に示す3つの常微分方程式を有する。
ここで、σ、r、bはパラメータであり、x、y、zは、状態変数である。
図10は、ローレンツ系の数値解の曲線を示す。
システム(系)がカオス状態になるには、次に示すパラメータの規準(クライテリア)を満たす必要がある。
この場合でも、全ての解がカオス的というわけではない。パラメータ空間においてパラメータの組み合わせによって、所謂、周期性の窓が存在する。これは、周期解を与える。本システムを実行する前に、パラメータ空間についての解析を、リヤプノフ指数を計算することで行う。一般に、正のリヤプノフ指数は、その数学的システムに対する解がカオス的である、ことを示唆している。エドワード・オット著、カオス・イン・ダイナミカル・システムズ、ケンブリッジ・ユニバーシティ・プレス 1993(Edward Ott, Chaos in Dynamical Systems, Cambridge University Press 1993)を参照されたい。
パラメータは一般に、例えば、暗号化鍵や暗号化鍵の一部、のような、シード値から決定される。本発明に係る方法を実施するアルゴリズムは、所定の区間(インターバル)内のパラメータのみを利用可能に設計されることが好ましい。これによって、システムが、正のリヤプノフ指数を有する見込みが高くなる。よって、数学的システムは、カオス的なふるまい(挙動)を示す確率が高くなる。リヤプノフ指数は、追加的に、もしくは、代替的に、数学的な計算の最初、または、計算の途中で求めてよく、よって、数学的システムの解の非カオス的な挙動を検出することが可能となる。
数学的システムは、例えば、その他の連続系(例えば、レスラー系)や、離散写像(例えば、エノン写像)でも、同様に可能である。
積分は、数値積分ルーチンを用いて実行する。初期条件と積分ステップ長を与えれば、数値積分ルーチンは、例えば、オイラー法やルンゲ−クッタ法を用い、離散的なメッシュ・ポイントにおける解を算出する。オイラー法を用いてローレンツ方程式を離散項で表現すれば、解は、以下の方程式を計算することで求めることができる。
計算は、以下で説明する固定小数点数を用いて実行される。
微分方程式を含んだシステムの数値積分の際、連続的な非従属変数(例えば、時間tや空間s)が離散化される。この処理は、連続的区間[a;b]の離散的な点のセット(集合)での置換と言える。このようなシステムにおいては、ΔT=(Δtx,Δty,Δtz)は通常、積分のステップ長もしくは積分ステップと呼ばれる。
図12は、例えば、カオス系といった、同一もしくは異なる系の2つまたはそれよりも多くのインスタンス(段階)を同時的に計算することができる方法を例示している。本方法は、より高速な計算速度とセキュリティの向上をもたらし、さらに、より長い鍵の使用を可能にする。2つの系(システム)間で、例えば、Δtx、Δty、および/または、Δtzの交換のような、ステップ長の交換といった、ある種の情報の伝達(コミュニケーション)もしくは結合(カップリング)があることが望ましい。
内部変数は、基本設計においては、それぞれ32ビット幅である。しかし、どのような変数幅であっても使用可能である。ローレンツ系を用いる場合、6つの内部変数(3つの状態変数および3つのパラメータ)が存在する。よって、(基本設計においては、)192ビットを用いて、内部変数によって与えられる生成器の内部状態を表す。128ビットの鍵を、192ビットまでパディング(padding)することは、禁じられた値(illegal value)を避けるようにして行われるべきである。つまり、全ての変数が、確実に、許されている値(allowed value)を備え、そして、鍵のビットが無視されないようにする。パディングは、ゼロおよびワンの所与の値の挿入、または、鍵から取ったビットの繰り返し、を含んでよい。図11は、パディングによる鍵の伸張を例示する。
積分を、可変的時間ステップで行ってもよい。これは、例えば、状態変数のいずれか1つから計算することができる。基本設計においては、ステップ長Δtは、各積分ステップで変化可能である。この変化は、状態変数Xと関係する。
鍵系列は、状態変数に関連した、いくつかのデータから抽出される。これは、変数y(y variable)から8つの(最)下位ビットを抽出したり、または、例えば、1ステップの計算で実行される1つもしくは複数の乗算といった、計算で消去される(wiped out)データのうちのいくつかを集めることで、実現してよい。
通常、カオス系に関する計算は、コンピュータ上で、浮動小数点変数を用いて実行される。しかし、そのような方法では、問題を持ち込んでしまう。その問題の1つには、浮動小数点変数を使用することで同一の鍵を用いても異なるコンピュータでは異なる鍵系列が生成されるおそれがある。それは、異なるコンピュータ・システムでは浮動小数点の実現の仕方に僅かな差違があるからである。
よって、固定小数点変数を用いる。小手得小数点変数は、整数型データ・タイプを基にしている。これは、異なるコンピュータ・システムでも同じように実現される。例えば、実数のような、数を表現するには、小数点の後にも桁が必要である。この小数点は、数の最後以外のどこかに見かけ上設けられる(例えば、12345の代りに、12.345。)。
アルゴリズムの適切な動作を確保するため、試験(テスト)を実施することが望ましい。これらのテストのうち、幾つかは実行時(ラン・タイム)に実行される。また、別のテストのうち、幾つかは設計時(デザイン・タイム)に実行される。周期解や定常点の検出により鍵をリロードしなければならなくなった場合に備えて、初期化処理の一部として、状態変数の全てのデータ容量(例えば、192ビット)、または、鍵の全て(例えば、128ビット)と等量の鍵系列を、アルゴリズムを用いて生成して保存する。このような場合には、保存したシーケンスを新しい鍵としてロードし、余分な鍵の抽出も含めて、初期化を再び行う。
コンピュータ上で、数を有限的に表現するため、あらゆる数値解は、周期性を有する。しかし、ある鍵はかなり短い周期を有する鍵系列を作ることがある。このことは、システムのセキュリティを危険に晒すので望ましいものではない。よって、このような周期解を検出するアルゴリズムを提案する。このアルゴリズムは、変数の符号、または、変数の傾きの符号を監視する。ローレンツ系を用いる場合、このチェックはxについて実行される。符号がマイナスからプラスへ変化(もしくはプラスからマイナスへ変化、もしくは、単に符号が変化)した際、このポジション・チェックが実行される(ポジション・チェックは、全てのイタレーションが終わった後に実行することもできる。)。ポジション・チェックは、状態変数のセット全てを、バッファされている、より以前のセットと比較する。完全な一致が発見された場合、周期解が検出される。
動的システム(dynamical system)の定常点は、イタレーションの間、不変のまま留まる状態変数のセットである。このような定常点は、現在の状態変数のセットとすぐ前のセットとを比較、または、全ての変数の傾きがゼロであるかをチェックもしくはある1つの変数の現在の傾きとその変数の以前の傾きが両方ともゼロであるかをチェックすることで検出することができる。理由は確かではないが、カオス系は周期的な解を示すことがある。これを検出して補正し、システムのセキュリティを危険に晒さないようにする必要がある。もし、システムの解が、周期的になれば、暗号化は、中止されることが望ましい。なぜなら、数学的システムの解から抽出される数も周期的になり、よって擬似的なランダムさを失うからである。周期解に対するテストには、解の座標と以前に計算された座標との比較が含まれる。完全な一致が発見されれば、このシステムは周期解を示している。
先に計算された座標を記録するために必要となるメモリの量を低減するため、よって、座標のテストに必要とされる処理時間を低減するため、選抜された座標のみを座標キャッシュに記録する。周期解のテストに必要とされるプロセッサ時間を低減するため、テストは、座標があるクライテリアを満足した場合にのみ、実行される。図13は、周期解に対するチェックの実行に関する原理を示す。
図14は、周期解を有する数学的システムを示している。詳しくは、周期解を有する2次元非線形系である。このシステムは、解が、その初期条件により完全に定まる、という意味において決定的である。理論上は、解は連続的であって、よって、無限の点を含んでいる。このシステムを数値的に解く場合、時間の間隔が離散化され、これらの時点において解が計算される。数学的システムに対する数値解は、単なる座標のセットの系列(シーケンス)である。2次元系を考えれば、解は、図14においては曲線上のドットで示された、幾つかの点(x,y)で特定される。本システムの決定論的な性質により、解が、以前にも訪れたことのあるポイント(点)に達すれば、解は周期的であって、その周期性を保持する。テストでは、この特性を利用している。
数値積分の際に周期解に対するテストを行うために、計算された現在の座標のセットを以前の値と比較する必要がある。そのため、座標のセットを計算された際に記録する。この記録体は待ち行列(キュー(queue))のように動作し、座標キャッシュと呼ばれる。計算された座標のセットを、座標キャッシュ内のあらゆる座標セットと比較する。完全な一致が発見されれば(2つの座標セットの全ての値が等しければ)、システムは周期的な状態にある。完全な一致がないままテストをパスすれば、周期的なふるまいは検出されず、計算が続行される。計算を続行する前に、テストされた座標を、次以降の比較のために、キャッシュに追加する。
計算された、システムの座標のセットを全て保持するには、あまりに多くのメモリおよびプロセッサ時間を要する。そのため、図15に示すように、選抜された座標のみを記録する。
キャッシュは幾つかのレベルを備えている。各レベルは、レベルごとに増加する世代(age)に関する座標を含んでいる。各テストもしくは幾つかのテストの後、テストされた座標は、レベル0に挿入される。2回(もしくは、その他の回数)ごとに、座標はレベル0に挿入され、古い値は、上書きされる前にレベル1に挿入される。それ以外のレベルに座標を挿入する方法も同様である。2回ごとに、値がいずれかのレベルに挿入され、古い値は、今のレベルが上書きされる前に次のレベルへ移される。
この方法によって、座標キャッシュは、急激に(exponentially)増大する、世代を備えた座標を備えることになる。レベル0は、世代1もしくは2の座標(前にチェックされた座標もしくは前にチェックされた座標の1つ前の座標)を記録し、レベル1は、世代3ないし6の座標(座標が挿入された後のテストにおいて3であって、そして、さらに座標が挿入される前に6まで増大する。)を記録し、レベル2は、世代7ないし14の座標を記録し、以下同様である。
例Iにおける擬似プログラム・コードは、キャッシュを実現する方法を示している。
それらレベルの世代が変化していくため、即座には、周期解は発見されないかもしれない。11回のテストだけの周期長を有する周期解は、キャッシュのレベル2において検出される。なぜなら、レベル2のデータの世代は、7から14だからである。しかし、テストは、座標がきっちりと、テスト11回だけ古くなるまで周期解を検出しない。よって、12回のテストを行って初めて、周期的挙動が検出される。この場合、システムは、検出されるまでに、11分の12周期の間、テストをパスすることがある。
上記アルゴリズムに対して可能な拡張に、変化する、トランスポート・エイジ(TransportAge)がある。例Iの擬似プログラム・コードを参照されたい。幾つかの座標が、その他の座標よりも、周期解に含まれる可能性が高いと認められる場合、例Iの擬似プログラム・コードを参照すれば、座標挿入手続き(InsertCoordinate procedure)がそれらを認識でき、これらに対して、トランスポート・エイジの値を小さくすることができる。これは、キャッシュ内の重要な座標に有利に働き、多くの重要な座標が記録されている場合にはキャッシュ内のデータをさらに若くする。キャッシュ内の、より若い世代のデータによって、周期解内部での、より少ない回数のイタレーションで周期解を検出可能になる。
テストは、各イタレーションの後に実行してよい。このことは、解の新しい座標のセットが計算されるごとに行われることを意味する。しかし、プロセッサ資源を節約するため、周期的な間隔をおいてテストを実行してよい。テストがうまく機能するように、テストは、解が見分けやすい(recognizable)位置にあるときに実行されるべきである。テストが、毎回同様の位置において実行されることを確実にする1つの方法は、解のグラフ曲線において見分けやすい点を見つけることである。
第1に可能な規準は、図16に示すように、xの符号のマイナスからプラスへの変化である。つまり、xの符号がマイナスからプラスに変化すると、テストが実行される。第2の規準は、図17に示すように、dxの符号のプラスからマイナスへの変化である。第3の規準は、図18に示すように、dyの符号のプラスからマイナスへの変化である。
規準の選択に際し、2つの点を考慮する必要がある。先ず第1には、あらゆる可能な周期解が、その規準を満たすことができなければならない点である。第2には、プロセッサへの負荷を少なくするため、行われるテストの数が最も少ない規準を選択すべき点である。
設計時においては、システムおよび選択されたパラメータ空間について幾つかの余分なテストを実行して、システムの効率性、安定性、および、正確性を確かめることができる。これらのテストは、鍵系列に関する統計的解析のみならず、グラム−シュミットの直交化法を用いたリヤプノフ指数の計算が含まれてよい。
例I
以下に記す擬似プログラム・コードは、一度に1バイトの暗号化を行う、データの暗号化および復号化のプログラム例である。本プログラムは、図20ないし図27に示すフロー・チャートに従って動作する。本プログラムは、32ビットのレジスタで動作する。図20は、データを含むファイルを暗号化する方法を例示する。図21ないし図27は、以下の擬似コードに示される機能(関数)に対応する。これら機能は、周期解に関するチェックおよびローレンツ系を用いた逐次暗号と関係している。
以下に記す擬似プログラム・コードは、一度に1バイトの暗号化を行う、データの暗号化および復号化のプログラム例である。本プログラムは、図20ないし図27に示すフロー・チャートに従って動作する。本プログラムは、32ビットのレジスタで動作する。図20は、データを含むファイルを暗号化する方法を例示する。図21ないし図27は、以下の擬似コードに示される機能(関数)に対応する。これら機能は、周期解に関するチェックおよびローレンツ系を用いた逐次暗号と関係している。
固定小数点ライブラリに関する擬似コード
FloatToFixedPoint : 浮動小数点数Xを固定小数点数に変換する。本関数の結果は、S(a.b)またはU(a.b)の形式である。
fixedpoint FloatToFixedPoint(float X)
{
return X*2b;
// bは、結果の固定小数点表現における小数部セ
// パレータよりも後のビット数。
}
FloatToFixedPoint : 浮動小数点数Xを固定小数点数に変換する。本関数の結果は、S(a.b)またはU(a.b)の形式である。
fixedpoint FloatToFixedPoint(float X)
{
return X*2b;
// bは、結果の固定小数点表現における小数部セ
// パレータよりも後のビット数。
}
FixedPointToFloat : S(a.b)またはU(a.b)の形式の固定小数点数Xを浮動小数点数に変換する。
float FixedPointToFloat(fixedpoint X)
{
return X*2-b;
// bは、xの固定小数点数表現における小数部セ
// パレータよりも後のビット数。
}
float FixedPointToFloat(fixedpoint X)
{
return X*2-b;
// bは、xの固定小数点数表現における小数部セ
// パレータよりも後のビット数。
}
ConvertFixedPoint : 入力された、S(a.b)またはU(a.b)の形式の固定小数点数Xを要求された形式、S(c.d)またはU(c.d)に変換する。引数Xに符号が付されていれば結果にも符号が付され、また、逆の場合も同様である。
fixedpoint ConvertFixedPoint(fixedpoint X)
{
return X*2d-b;
// bは、Xの固定小数点表現における小数部セパ
// レータよりも後のビット数。dは、結果の固定
//小数点表現における小数部セパレータよりも後の
// ビット数。
}
同一の形式の固定小数点数の加算および減算は、通常の、整数を加算および減算する関数を用いて実行される。
fixedpoint ConvertFixedPoint(fixedpoint X)
{
return X*2d-b;
// bは、Xの固定小数点表現における小数部セパ
// レータよりも後のビット数。dは、結果の固定
//小数点表現における小数部セパレータよりも後の
// ビット数。
}
同一の形式の固定小数点数の加算および減算は、通常の、整数を加算および減算する関数を用いて実行される。
MulFixedPoint : 2つの固定小数点数XおよびYの乗算。Xは、S(a.b)またはY(a.b)の形式を有し、Yは、S(c.d)またはU(c.d)の形式を有する。生じる固定小数点数は、S(e.f)またはU(e.f)の形式を有する。XおよびYならびに結果は全て、符号付きもしくは符号なしの値のいずれかで、32ビット・レジスタに記録される必要がある。「>>」は、符号付きの乗算に対しては、右方向算術シフトであり、符号のない乗算に対しては、右方向論理シフトである。
fixedpoint MulFixedPoint(fixedpoint X, fixedpoint Y)
{
fixedpoint64 Temp;
// 中間結果を保持するための64ビット・レジス
// タ
Temp = X:Y;
// 2つの32ビット値XおよびYが乗算されて6
// 4ビットの中間結果になる。
return Temp >> b+d-f;
// bおよびdはそれぞれ、XおよびYの固定小数
// 点表現における小数部セパレータよりも後のビ
// ット数。fは、結果の固定小数点表現における
// 小数部セパレータよりも後のビット数。64ビ
// ット・レジスタの値の32ビット・レジスタへ
// の変換は、32個の(最)上位ビットを無視し
// 、32個の(最)下位ビットを目的レジスタ(
// デスティネーション・レジスタ)にコピーする
// ことで行われる。
}
fixedpoint MulFixedPoint(fixedpoint X, fixedpoint Y)
{
fixedpoint64 Temp;
// 中間結果を保持するための64ビット・レジス
// タ
Temp = X:Y;
// 2つの32ビット値XおよびYが乗算されて6
// 4ビットの中間結果になる。
return Temp >> b+d-f;
// bおよびdはそれぞれ、XおよびYの固定小数
// 点表現における小数部セパレータよりも後のビ
// ット数。fは、結果の固定小数点表現における
// 小数部セパレータよりも後のビット数。64ビ
// ット・レジスタの値の32ビット・レジスタへ
// の変換は、32個の(最)上位ビットを無視し
// 、32個の(最)下位ビットを目的レジスタ(
// デスティネーション・レジスタ)にコピーする
// ことで行われる。
}
周期解をチェックするための擬似コード
周期解をチェックするための、サブシステムにおける大域的定数。本コードは、変曲部の数が、TransportAgeCacheDepth-1よりも少ないときに周期を検出可能である(イタレーションの半分の変曲部で可能となる。)。
const int CacheDepth = 32;
const int TransportAge = 2;
const int SpareSeedLength = 16;
周期解をチェックするための、サブシステムにおける大域的定数。本コードは、変曲部の数が、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;
fixedpoint xCache[CacheDepth];
fixedpoint yCache[CacheDepth];
fixedpoint zCache[CacheDepth];
int CoordinateAge[CacheDepth];
char SpareSeed[SpareSeedLength];
fixedpoint xOld, xOldOld;
SetupCoordinateCheck : 周期解をチェックするためのサブシステムのセットアップ。座標キャッシュの位置を全て、(x,y,z)=(0,0,0)にリセットする。なぜなら、(0,0,0)は、ローレンツ系の定常点だからである。よって、これは、鍵のリロードが必要であることを示唆する座標値である。
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);
}
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」+1)に移す。
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]++;
}
void InsertCoordinate(fixedpoint x, fixedpoint y, fixedpoint z, int Level)
{
// もし世代(age)が「TransportAge」に等しければ、
// このレベルが可能な最高レベルでない限り、この
// レベル(「Level」)における現在の座標を次のレ
// ベル(「Level」+1)に移す。
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 : 変数xの解曲線が変曲部を有するかをチェックする。変曲部では、曲線の傾きの符号が、正から負に変化する。もし、なければ関数は終了する(exit)。そうでない場合、関数は、同じ座標が座標キャッシュに記録されていないかをチェックする。一致が見られれば、関数はスペア鍵をアルゴリズムにロードする。最後に、座標が座標キャッシュに挿入される。
void CheckCoordinate(fixedpoint x, fixedpoint y, fixedpoint z)
{
int i;
// もし、xの曲線の傾きが正から負に変化するよ
// うな変曲部があるならば、、、
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);
}
// xの値を、後の比較のために記録する。
xOldOld = xOld;
xOld = x;
}
void CheckCoordinate(fixedpoint x, fixedpoint y, fixedpoint z)
{
int i;
// もし、xの曲線の傾きが正から負に変化するよ
// うな変曲部があるならば、、、
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);
}
// xの値を、後の比較のために記録する。
xOldOld = xOld;
xOld = x;
}
ローレンツ系を用いた逐次暗号のための擬似コード
ここでは、モジュラス関数、MODは、引数qをとって、[0;q[の範囲の正の値を返す。
ここでは、モジュラス関数、MODは、引数qをとって、[0;q[の範囲の正の値を返す。
ローレンツ方程式における変数σを「s」と新たに命名する。
Crypt : 暗号化、復号化、および、PRNGの関数。引数は、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; // 暗号化すべきデータのポインタを進める。
}
}
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 : 展開された鍵もしくは擬似ランダム・シーケンスがロードされた後で、初期の状態およびパラメータの有効性を確保する。この状態およびパラメータは、この関数を用いて修正を受けなければならない。表IIIに定めた制限に従って訂正される。
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;
}
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 : 192ビットのシード(ポインタPSeedにより参照される。)を、システムの状態へロードする。
void Init192(char* PSeed)
{
x = *PSeed; // シードを状態にコピーする。
y = *(PSeed+4);
z = *(PSeed+8);
r = *(PSeed+12);
b = *(PSeed+16);
s = *(PSeed+20);
MaskParameters(); // 状態を訂正し、有効にする。
}
void Init192(char* PSeed)
{
x = *PSeed; // シードを状態にコピーする。
y = *(PSeed+4);
z = *(PSeed+8);
r = *(PSeed+12);
b = *(PSeed+16);
s = *(PSeed+20);
MaskParameters(); // 状態を訂正し、有効にする。
}
Init128 : 128ビットのシード(もしくは鍵)(ポインタPSeedにより参照される。)を、鍵のセットアップ手続きを行っているシステムの状態にロードする。
void Inint128(char* PSeed)
{
char Seed192[24] // メモリの24バイトをアロケート。
int i;
x = *PSeed; // シードを状態に展開する。
y = *(PSeed+3);
z = *(PSeed+6);
r = *(PSeed+8);
b = *(PSeed+10);
s = *(PSeed+12);
MaskParameters(); // 状態を有効にする。
// 抽出の前に16ラウンドのイタレーション。
Crypt(Seed192, Seed192+15);
for (i=0;i<24;i++) // シードのデータをゼロにリセット。
Seed192[i] = 0;
// 24バイトの擬似ランダム・データの生成。
Crypt(Seed192, Seed192+23);
Init(Seed192); // 状態に擬似ランダム・データをロード。
// アルゴリズムを使用する前に16ラウンドのイ
// タレーション。
Crypt(Seed192, Seed192+15);
// 座標チェックアルゴリズムを開始する。
SetupCoordinateCheck();
}
void Inint128(char* PSeed)
{
char Seed192[24] // メモリの24バイトをアロケート。
int i;
x = *PSeed; // シードを状態に展開する。
y = *(PSeed+3);
z = *(PSeed+6);
r = *(PSeed+8);
b = *(PSeed+10);
s = *(PSeed+12);
MaskParameters(); // 状態を有効にする。
// 抽出の前に16ラウンドのイタレーション。
Crypt(Seed192, Seed192+15);
for (i=0;i<24;i++) // シードのデータをゼロにリセット。
Seed192[i] = 0;
// 24バイトの擬似ランダム・データの生成。
Crypt(Seed192, Seed192+23);
Init(Seed192); // 状態に擬似ランダム・データをロード。
// アルゴリズムを使用する前に16ラウンドのイ
// タレーション。
Crypt(Seed192, Seed192+15);
// 座標チェックアルゴリズムを開始する。
SetupCoordinateCheck();
}
システムの出力、すなわち鍵系列、の統計学的特性を、NIST(米国標準技術局(National Institute of Standards and Technology))テスト・スイート(NIST Test Suite)によってテストしてもよい。NISTスペシャル・パブリケーション(NIST Special Publication)、800−22、「ア・スタティスティカル・テスト・スイート・フォー・ランダム・アンド・プスードランダム・ナンバー・ジェネレーターズ・フォー・クリプトグラフィック・アプリケーションズ('A Statistical test suite for random and pseudo-random number generators for cryptographic applications')」を参照されたい。また、<http://csrc.nist.gov/rng/rng2.html>も参照されたい。NISTテスト・スイートは、16の異なるテストを含んでいる。これらについて、以下で概説する。テストは、例えば、上記、ローレンツ系を用いた逐次暗号のための擬似コードに類似したプログラムに対して実行可能である。
テストは、殆ど重複していない、幾つかのランダムさに関する定義を与える。「どのような計算を行えば、真にランダムなシーケンスとなるのか、または、真にランダムなシーケンスを得るにはどのような計算が必要か?」という文言によって、確率論の複雑な概念を必要とする定義も紹介されているが、以下では、幾分シンプルな定義を記す。上記のNISTの出版物は、適当な定義と、確率論に関する論文に対するリファレンスが記されている。
一次元度数検定(Frequency monobit test) : このテストは、鍵系列のシーケンス全体におけるゼロ(0)とワン(1)の比を求める。真にランダムな鍵系列のシーケンスに対しては、ワンの数は、ゼロの数とおよそ同じであると予想される。このテストでは、問題にしている鍵系列のシーケンスがこの性質を保持しているかどうかを調査する。
ブロック単位の頻度検定(Frequency block test) : このテストでは、鍵系列のシーケンスをMビットのブロックに分割する。真にランダムな鍵系列のシーケンスにおいては、各ブロックのワン(1)の数は、およそ2分のMになる。もし、このテストにより、試験される鍵系列のシーケンスが特徴づけられるならば、このテストは成功であるとみなされる。
連の検定(Runs test) : 鍵系列シーケンス内部の連は、同じビットのサブシーケンスと定義される。本テストは、様々な長さの連をチェックする。長さkの連は、連のビットと逆の値を有するビットによって区切られたk個の同じビットで構成される。異なる長さの連の発生を、真にランダムなシーケンスで予想される場合と比較する。
最長連検定(Longest run of zeroes) : 本テストにおいては、シーケンスはそれぞれMビットのブロックに分割され、各ブロックにおけるワン(1)の最長連が探索される。ブロックの連の長さ分布が、ランダムなシーケンスに対する分布と比較される。予想されるワンの最長連の長さの不規則性は、予想されるゼロの最長連の長さにも不規則性が存在することを示唆する。
2値行列ランク検定(Binary matrix rank test) : 本テストにおいては、鍵系列のシーケンスからなる、固定長のサブシーケンスを用いて、M・QビットのセグメントからM×Qの行列を作って、幾つかの行列を形成する。これら行列のランクを計算することにより、本テストは、サブシーケンス間の線形従属性をチェックする。
離散フーリエ変換検定(Discrete Fourier transform test) : 離散フーリエ変換を用い、本テストは、鍵系列のシーケンスの周期性に関する特性をチェックする。生じる周波数成分の高さを、真にランダムなシーケンスに対して定められた閾と比較する。
重なりのないテンプレート適合検定(Non-overlapping template matching test) : 本テストを実施する場合、幾つかの、非周期的なmビットのパターンが定められる。そして、この特定のパターンの存在をカウントする。
重なりのあるテンプレート適合検定(Overlapping template matching test) : 本テストは、重なりのないテンプレート適合検定とよく似ている。両者の違いは、mビットのパターンの構造、および、パターンの探索を行う方法のみである。ここでは、mビットのパターンは、m個のワンのシーケンスである。
モーラーのユニバーサル統計検定(Maurer's universal statistical test) : 本テストは、鍵系列のシーケンスにおいて、一致するパターン間の距離を算出する。これにより、鍵系列のシーケンスの圧縮性に関する測度が得られる。高い圧縮性を示す鍵系列のシーケンスは、ランダムではないと判断される。
レンペル−ジフ圧縮検定(Lempel-Ziv compression test) : 本テストにおいては、異なるパターンの数を累積的に求める。よって、鍵系列のシーケンスの圧縮性に関する測度を与える。結果は、ランダムなシーケンスと比較される。このランダムなシーケンスは、異なるパターンを特徴的な数だけ有する。
線形複雑度検定(Linear complexity test) : 本テストは、線形フィードバック・シフト・レジスタの長さを求めて、シーケンスがランダムとみなすのに十分なほどに複雑であるか否かを判断する。
系列検定(Serial test) : 本テストは、可能な、重なりのあるmビットのパターン全てについて、シーケンス全体に渡り、頻度を求める。真にランダムな鍵系列のシーケンスに対しては、2のm乗個の可能な、mビット・パターンは全て、同じ確率で発生する。この確率からの偏差を、問題にしている鍵系列のシーケンスについて求める。
近似エントロピー検定(Approximate entropy test) : 本テストは、系列検定と同じ点に関心を向けている。しかし、mビットおよびm+1ビットのパターンの頻度を求めるという特徴が追加される。異なる長さのパターンに対して得られる結果を比較し、シーケンスがランダムである、および、ランダムではない、のいずれかの特徴付けを行う。
累積和検定(Cumulative sums test) : 本テストにおいては、シーケンスを用い、ワン(1)とゼロ(0)をそれぞれ、+1と−1に対応させたランダム・ウォークを定義する。部分的な鍵系列のシーケンスの累積和の大きさが、真にランダムな鍵系列のシーケンスに対して予想される場合と比較してあまりに大きいか、または、あまりに小さいか、どうかを判断する。
ランダム偏差検定(Random excursions test) : 本テストにおいては、シーケンスは、累積和検定と類似して、ランダム・ウォークに変換される。ランダム・ウォークが通り抜ける可能性がある(累積和が保持する)特定の状態を訪れている数を用いてこのシーケンスがランダムであるか、または、ランダムでないか、のいずれかの特徴付けを行う。考慮される状態は、−4、−3、−2、−1、1、2、3、4、である。
種々のランダム偏差検定(Random excursions variant test) : ランダム偏差検定とほぼ同一である。このテストでは、18の状態を用いる。
各テストで、P値、Pvalを算出する。この値は、実際のシーケンスと、仮定の真にランダムなシーケンスとの定量的な比較を与える。P値の定義は、実際のテストによる(NISTの文書を参照。)。Pval>αなる値は、ランダムさを示す。ここで、αは、区間0.001≦α≦0.01の値である。αの厳密な値は、テストごとに定められる。別に、非ランダムさも宣言される。
NISTテスト・スイートは、それぞれのテストに対し、P値が規準(クライテリオン)Pval>αをパスするサンプルの比率を定めている。ランダム偏差検定を除く上記テストの全てにおいて、個々のP値、Pvalが適切な規準をパスするサンプルの比率は、少なくとも0.972766であるべきである。ランダム偏差検定については、NISTの示した比率では、少なくとも0.967813であるべきである。
本方法の好適な実施形態においては、以下に記した比率を達成することが望ましい。ランダムに選択した鍵を使用して求めた少なくとも10の4乗個のサンプルの平均として、少なくとも0.975、例えば、少なくとも0.98、例えば、少なくとも0.985、例えば、少なくとも0.99、例えば、少なくとも0.995、例えば、少なくとも0.998であることが望ましい。
例II
− 表Vは、本明細書において広く開示された方法(図1ないし図5参照。)によって得られる暗号化速度、ならびに、様々な周知の暗号化法の暗号化速度を示す。本発明に係る方法による暗号化の速度は、M.ベスガード、M.ベステレージャ、T.ペデルセン、J.クリスチャンセン、および、O.スカベニウスの共著、ラビット: ア・ニュー・ハイ−パフォーマンス・ストリーム・サイファ、ファースト・ソフトウェア・エンクリプション(FSE)のプロシーディング、2003年、シュプリンガー、ベルリン(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))、に記載のアルゴリズムに関して測定される。本アルゴリズムは、MMX()命令を用いたアセンブリ言語で実現された。
− 表Vは、本明細書において広く開示された方法(図1ないし図5参照。)によって得られる暗号化速度、ならびに、様々な周知の暗号化法の暗号化速度を示す。本発明に係る方法による暗号化の速度は、M.ベスガード、M.ベステレージャ、T.ペデルセン、J.クリスチャンセン、および、O.スカベニウスの共著、ラビット: ア・ニュー・ハイ−パフォーマンス・ストリーム・サイファ、ファースト・ソフトウェア・エンクリプション(FSE)のプロシーディング、2003年、シュプリンガー、ベルリン(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))、に記載のアルゴリズムに関して測定される。本アルゴリズムは、MMX()命令を用いたアセンブリ言語で実現された。
測定結果から、速度は、450MHzのペンティアムIIIプロセッサ上における947Mビット毎秒の暗号化/復号化速度に相当することが求められた。
表V
表Vつづき
速度の評価は、異なる出典による。表V内「速度[クロック/バイト]」列における上付き添え字は、以下に記す出典に関するリファレンスを指している。
1.クリプト++4.0ベンチマーク(Crypto++ 4.0 Benchmarks)、2003年6月6日現在<www.eskimo.com/~weidai/benchmarks.html>よりアクセス可能。MS C++(インテル セレロン(Celeron)850MHz)。
2.ブルース・シュナイアーら(Bruce Schneier et al.) : ファースト・ソフトウェア・エンクリプション(Fast Software Encryption) : デザイニング・エンクリプション・アルゴリズムス・フォー・オプティマル・ソフトウェア・スピード・オン・インテル・ペンティアム・プロセッサ(Designing Encryption Algorithms for Optimal Software Speed on the Intel Pentium Processor)。
3.カズマロ・アオキら(Kazumaro Aoki et al.) : ファースト・インプリメンテーション・オブ・AESカンディデート(Fast Implementation of AES Candidates)(128ビットの鍵、128ビットのブロック、ペンティアムII)。
4.パフォーマンス・オブ・オプティマイズド・インプリメンテーションズ・オブ・ザNESSIEプリミティブス(バージョン2.0)(Performance of Optimized Implementations of the NESSIE Primitives (version 2.0))、2003年6月6日現在<http://www.cosic.esat.kuleuven.ac.be/nessie/>よりアクセス可能。(数種のペンティアムIIIを使用。)
一般に、速度とメモリは、多くの実装においては、交換可能である。例えば、より多くのメモリを要するルックアップ表(lookup tables)を使用すれば、処理時間を減じることができる。
例II終了。
表V
1.クリプト++4.0ベンチマーク(Crypto++ 4.0 Benchmarks)、2003年6月6日現在<www.eskimo.com/~weidai/benchmarks.html>よりアクセス可能。MS C++(インテル セレロン(Celeron)850MHz)。
2.ブルース・シュナイアーら(Bruce Schneier et al.) : ファースト・ソフトウェア・エンクリプション(Fast Software Encryption) : デザイニング・エンクリプション・アルゴリズムス・フォー・オプティマル・ソフトウェア・スピード・オン・インテル・ペンティアム・プロセッサ(Designing Encryption Algorithms for Optimal Software Speed on the Intel Pentium Processor)。
3.カズマロ・アオキら(Kazumaro Aoki et al.) : ファースト・インプリメンテーション・オブ・AESカンディデート(Fast Implementation of AES Candidates)(128ビットの鍵、128ビットのブロック、ペンティアムII)。
4.パフォーマンス・オブ・オプティマイズド・インプリメンテーションズ・オブ・ザNESSIEプリミティブス(バージョン2.0)(Performance of Optimized Implementations of the NESSIE Primitives (version 2.0))、2003年6月6日現在<http://www.cosic.esat.kuleuven.ac.be/nessie/>よりアクセス可能。(数種のペンティアムIIIを使用。)
一般に、速度とメモリは、多くの実装においては、交換可能である。例えば、より多くのメモリを要するルックアップ表(lookup tables)を使用すれば、処理時間を減じることができる。
例II終了。
2進数で表現された数について計算を実行する場合、例えば、2つの数を加算、または、減算する場合、加算、または、減算により生じる数のビットを省くかもしくは無視してもよいならば、加算、または、減算に含まれる計算の一部を省くことができる場合がある。よって、生じる数の最下位ビットが必要ないならば、または、生じる数の最上位ビットを無視してよいならば(擬似乱数生成器で起こる例であって、必要なのは計算の真の結果ではなく、単に擬似乱数が必要とされる場合にあたる。)、生じる数の最下位、および/または、最上位ビットを計算する必要はない。
故に、あるビット幅を有する整数についての数学的演算を実行する方法を開示する。このビット幅は、計算が実行される処理装置のレジスタ幅よりも大きい。固定小数点数についての数学的演算もしくは計算は、整数演算として実行される。そのため、整数は、2進数として表される。整数の2進表現には、特定の、例えば、32ビットのレジスタ幅が必要である。2進数を表現するのに必要な幅よりも小さなレジスタ幅、例えば、8ビット、を有する処理装置で、例えば、加算や乗算といった数学的演算を実行する場合、その2進数を、複数の2進部分数(binary sub-numbers)に分割し、その2進部分数それぞれを処理装置のレジスタ幅と等しいか、より小さな幅で表現すればよい。従い、2つの32ビット数は、2セットの4つの8ビットの部分数に分割し、8ビットの部分数について、8ビットの処理装置を用いて乗算や加算を実行すればよい。
例えば、
数A=11011001101101010110101010110111と、
数B=10000111011110111111010101001001の加算の結果R=A+Bを得るには、以下のステップを実行すればよい。
1.数AおよびBはそれぞれ、4つの部分数、A1、A2、A3、A4、および、B1、B2、B3、B4、に分割される。A1は、数Aの最上位8ビットを表し、そして、A4は、数Aの最下位8ビットを表す。他も同様である。従い、上記例においては、部分数は、
A1=11011001、
A2=10110101、
A3=01101010、
A4=10110111、
B1=10000111、
B2=01111011、
B3=11110101、
B4=01001001、
となる。
2.最下位の部分数、A4およびB4を加算する。つまり、R4=A4+B4とする。A4とB4の加算により生じるあらゆるキャリー(繰り上がり)は、C4として記録する。
3.2番目に下位の部分数、A3およびB3、ならびに、上記ステップ2からのキャリーC4を加算する。つまり、R3=A3+B3+C4とする。この加算により生じるあらゆるキャリーを、C3として記録する。
4.ステップ3と同様にしてA2およびB2の加算を行い、R2およびC2を得る。
5.ステップ3およびステップ4と同様にしてA1およびB1の加算を行い、R1を得る。この加算により生じるあらゆるキャリー、C1、は、オーバーフローとみなし、考慮しない。
6.AおよびBの加算によって生じる数を、4つの部分数、R1、R2、R3、R4、として記録し、かつ/または、部分数、R1、R2、R3、R4、より作られる32ビット幅のストリング(文字列)として表す。
例えば、
数A=11011001101101010110101010110111と、
数B=10000111011110111111010101001001の加算の結果R=A+Bを得るには、以下のステップを実行すればよい。
1.数AおよびBはそれぞれ、4つの部分数、A1、A2、A3、A4、および、B1、B2、B3、B4、に分割される。A1は、数Aの最上位8ビットを表し、そして、A4は、数Aの最下位8ビットを表す。他も同様である。従い、上記例においては、部分数は、
A1=11011001、
A2=10110101、
A3=01101010、
A4=10110111、
B1=10000111、
B2=01111011、
B3=11110101、
B4=01001001、
となる。
2.最下位の部分数、A4およびB4を加算する。つまり、R4=A4+B4とする。A4とB4の加算により生じるあらゆるキャリー(繰り上がり)は、C4として記録する。
3.2番目に下位の部分数、A3およびB3、ならびに、上記ステップ2からのキャリーC4を加算する。つまり、R3=A3+B3+C4とする。この加算により生じるあらゆるキャリーを、C3として記録する。
4.ステップ3と同様にしてA2およびB2の加算を行い、R2およびC2を得る。
5.ステップ3およびステップ4と同様にしてA1およびB1の加算を行い、R1を得る。この加算により生じるあらゆるキャリー、C1、は、オーバーフローとみなし、考慮しない。
6.AおよびBの加算によって生じる数を、4つの部分数、R1、R2、R3、R4、として記録し、かつ/または、部分数、R1、R2、R3、R4、より作られる32ビット幅のストリング(文字列)として表す。
乗算で生じる数の全てのビットを以降の計算において使用しない場合、ならびに/または、以降の計算で、全てのビットが重要ではなく、無視してもよいような場合、数のビット幅よりも小さなレジスタ幅を有する処理装置上での乗算に関わる処理時間を、以下に記すような部分的乗算のみを行うことで、短くしてもよい。例えば、2つの16ビット数、DおよびEの乗算を8ビットの処理装置で行って32ビット数Fを求めるには、以下のステップを実行してもよい。
ここで、
D=1101100110110101、および、
E=0110101010110111、である。
1. 各数、DおよびE、を2つの部分数、D1、D2、および、E1、E2、に分割する。D1は、Dの最上位8ビットを表し、D2は、Dの最下位8ビットを表す。他も同様である。従い、上の例においては、部分数は以下のとおりになる。
D1=11011001
D2=10110101
E1=01101010
E2=10110111
2. D1をE1と乗算し、2つの8ビット数、G1およびG2で表された16ビット数を得る。
3. D1をE2と乗算し、2つの8ビット数、H1およびH2で表された16ビット数を得る。
4. D2をE1と乗算し、2つの8ビット数、I1およびI2で表された16ビット数を得る。
5. D2をE2と乗算し、2つの8ビット数、J1およびJ2で表された16ビット数を得る。
6. 結果として生じる32ビット数Fは、4つの8ビット数、F1、F2、F3、および、F4で表される。図19に示されるように、
F4=j2、
F3=H2+I2+J1、
F2=G2+H1+I1+[F3に関する計算で生じる全てのキャリー]、
F1=G1+[F2に関する計算で生じる全てのキャリー]、
となる。ここで、MSは、「最上位8ビット」、LSは、「最下位8ビット」を指す。
F4、すなわち、乗算で生じる数の(最)下位ビット、を無視したり、F3を導出する加算においてJ1を無視したりすることで、処理時間を短くすることが可能である。従い、ステップ5におけるD2とE2との乗算を省略でき、よって、さらに実行する数学的演算を減らして処理時間を短くできる。この省略は計算の結果に影響を及ぼすが、例えば、暗号化/復号化アルゴリズムにおける、例えば、擬似乱数生成器における全ての計算に渡って一貫してこの省略を行い、また、復号化および暗号化の両方でこの省略を行うのならば、この省略は許容可能である。通例、問題にしている状況、例えば、暗号化/復号化、において重要な数学的システムの特性、例えば、カオス的なふるまい、が、計算における1つまたは複数の計算ステップの省略の与える影響を受けても、維持されている事を、確かめることが望ましい。
ここで、
D=1101100110110101、および、
E=0110101010110111、である。
1. 各数、DおよびE、を2つの部分数、D1、D2、および、E1、E2、に分割する。D1は、Dの最上位8ビットを表し、D2は、Dの最下位8ビットを表す。他も同様である。従い、上の例においては、部分数は以下のとおりになる。
D1=11011001
D2=10110101
E1=01101010
E2=10110111
2. D1をE1と乗算し、2つの8ビット数、G1およびG2で表された16ビット数を得る。
3. D1をE2と乗算し、2つの8ビット数、H1およびH2で表された16ビット数を得る。
4. D2をE1と乗算し、2つの8ビット数、I1およびI2で表された16ビット数を得る。
5. D2をE2と乗算し、2つの8ビット数、J1およびJ2で表された16ビット数を得る。
6. 結果として生じる32ビット数Fは、4つの8ビット数、F1、F2、F3、および、F4で表される。図19に示されるように、
F4=j2、
F3=H2+I2+J1、
F2=G2+H1+I1+[F3に関する計算で生じる全てのキャリー]、
F1=G1+[F2に関する計算で生じる全てのキャリー]、
となる。ここで、MSは、「最上位8ビット」、LSは、「最下位8ビット」を指す。
F4、すなわち、乗算で生じる数の(最)下位ビット、を無視したり、F3を導出する加算においてJ1を無視したりすることで、処理時間を短くすることが可能である。従い、ステップ5におけるD2とE2との乗算を省略でき、よって、さらに実行する数学的演算を減らして処理時間を短くできる。この省略は計算の結果に影響を及ぼすが、例えば、暗号化/復号化アルゴリズムにおける、例えば、擬似乱数生成器における全ての計算に渡って一貫してこの省略を行い、また、復号化および暗号化の両方でこの省略を行うのならば、この省略は許容可能である。通例、問題にしている状況、例えば、暗号化/復号化、において重要な数学的システムの特性、例えば、カオス的なふるまい、が、計算における1つまたは複数の計算ステップの省略の与える影響を受けても、維持されている事を、確かめることが望ましい。
また、第1の2進数と第2の2進数との乗算を実行する方法を示す。本方法は、中間結果数を合計するステップを有する。中間結果の合計は、2つの数の積に等しい。各中間結果は、第1数の1つのビット(1または0)と第2数全体、α、との積で表される。この積およびそれによる中間数は、シンプルな「if...then」アルゴリズム、および/または、論理積(AND)で求めることができる。なぜなら、積、1・α=αであり、また、積、0・α=0だからである。
中間数の計算に続き、中間数の位置を、左方向に幾つかシフトさせる。シフトさせる位置の数は、その中間数を計算するのに用いた第1数のビット位置に対応している。あるいは、第2数、または、第1数の特定のビットを左方向にシフトさせる。2つの数のうちの第1の数のうちの1つのビットを乗算するステップを、適宜、第1数の各ビットについて繰り返す。例えば、第1数、0110、と、第2数、1010との積は以下のようにして計算される。第1数の最下位ビット、0、を第2数1010と乗算し、第1中間数、0000、を得る。次に、第1数の2番目の最下位ビット、1、を第2数と乗算し、左方向に位置を1つシフトさせて第2中間数、10100、を得る。次に、第1数の3番目の最下位ビット、1、を第2数と乗算し、左方向に位置を2つシフトさせて第3中間数、101000、を得る。最後に、第1数の最上位ビット、0、を第2数と乗算し、左方向に3つ位置をシフトさせて第4中間数、0000000、を得る。生じる数を、これら4つの中間数の合計より求める。以下に示す例においては、下線が、各ステップで乗算に用いられるビットを示す。
図28に、本発明に係る方法において用いることができる別の数学的システムを示す。このシステムは、結合した5つのサブシステムを有する。ここでは、サブシステムは、1次元写像である。写像のうちの3つは、定常なパラメータを有し、写像のうち2つには、カウンタが作用する。図28は、本システムの構成を示す。
このシステムのイタレーションのスキームは、以下の方程式で定める。
ここで、xn,iは、システムnのイタレーションiにおける状態変数であり、p0、p1、および、p2は、定常なパラメータであり、c0,i、および、c1,iは、カウンタである。結合は、結合強度kで、一方向に作用する。パラメータ、p0、p1、および、p2は、区間[0;1[の値がアサインされる。カウンタ、c0,i、および、c1,i、は、1に満たない数(fraction of 1)のインクリメントで区間[0;1[を循環する。c0,i、および、c1,iのインクリメントは、同一でなくともよい。カウンタは、互いに非従属的に増加されてよい。別の実施形態においては、カウンタのうちの第1のカウンタは、第2のカウンタがある値に達した場合にのみ増加されてよい。第1のカウンタは、各イタレーションにおいて増加されてもよく、そのかわり、第2のカウンタは、第1のカウンタがその最大値に達した場合にのみ増加されてよい。あるいは、両カウンタを、各イタレーションにおいて増加しても、または、2者択一的に増加させることで、第1のカウンタは2回のイタレーションごとに増加され、第2のカウンタは第1のカウンタが増加されないイタレーションにおいて増加されてもよい。
Claims (61)
- 正のリヤプノフ指数を示す数学的システムにおいて反復的に計算を実行する方法であって、
特定数の計算の後、少なくとも1つの、前記数学的システムのパラメータを変更するステップを有することを特徴とする方法。 - 少なくとも1つの、前記数学的システムの変数を固定小数点数として表すことを特徴とする、請求項1に記載の方法。
- さらに、
− 前記数学的システムを離散項で表すステップ、
− 前記計算に前記少なくとも1つの固定小数点数として表された変数を含むようにして前記計算を実行するステップ、
− 前記計算より、生じる数を求めるステップであって、
a.少なくとも、前記数学的システムの解の一部、および、
b.前記数学的システムの数値解法に含まれる別の計算で用いることができる数、
のうち、少なくとも1つを表している、生じる数を求めるステップ、を有することを特徴とする、請求項2に記載の方法。 - 前記数学的システムは、少なくとも1つの非線形写像を有することを特徴とする、請求項1ないし3のいずれか1つに記載の方法。
- 前記計算において、前記少なくとも1つのパラメータは、所定の間隔で反復的に変更されることを特徴とする、請求項1ないし4のいずれか1つに記載の方法。
- 前記計算は、前記数学的システムにおいてイタレーションを実行するステップを有することを特徴とする、請求項1ないし5のいずれか1つに記載の方法。
- 前記少なくとも1つのパラメータは、前記数学的システムに非従属的に変化するカウンタによって表されることを特徴とする、請求項1ないし6のいずれか1つに記載の方法。
- 前記カウンタは、前記数学的システムにおける各イタレーションにおいて増加されることを特徴とする、請求項7に記載の方法。
- 前記カウンタに対して最大値が定められ、
前記カウンタが前記最大値に達すると前記カウンタは最小値にリセットするステップを有し、よって、前記カウンタは、特定の周期で変化することを特徴とする、請求項7または8に記載の方法。 - 複数のカウンタを含むカウンタのセットを用いることを特徴とする、請求項7ないし9のいずれか1つに記載の方法。
- 前記カウンタのうち、第1のカウンタの前記変化は、前記カウンタのうち、第2のカウンタの前記変化に従属し、前記第1カウンタの前記周期は、前記第2カウンタの前記周期と異なっていることを特徴とする、請求項10に記載の方法。
- 前記カウンタの個々の前記変化は、前記カウンタのうち、少なくとも1つの他のカウンタの前記変化に従属することによって、前記カウンタの周期が、個々のカウンタが他のカウンタの前記変化に従属しない場合の前記周期よりも長くなっていることを特徴とする、請求項10または11に記載の方法。
- 前記1つまたは複数のカウンタは、線形的に増加されることを特徴とする、請求項1ないし12のいずれか1つに記載の方法。
- 請求項1ないし13のいずれか1つに記載の方法により数学的演算を実行するステップを有することを特徴とする擬似乱数生成の方法。
- 請求項1ないし13のいずれか1つに記載の方法により数学的演算を実行するステップを有することを特徴とする識別値生成の方法。
- 請求項1ないし13のいずれか1つに記載の方法により数学的演算を実行するステップを有することを特徴とするデータの暗号化および/または復号化の方法。
- 暗号化および/または復号化に、請求項14に記載の方法により擬似乱数を生成するステップが含まれることを特徴とする、請求項15に記載の方法。
- 暗号化システムにおける第1のデータのセットを操作する方法であって、
前記第1のデータのセットは、それぞれ第1のビット・サイズAおよび第2のビット・サイズBを有する第1の数および第2の数を含み、
− 前記第1数と前記第2数を乗算して第3のビット・サイズA+Bを有する第3の数を求めるステップであって、
前記第3数は、最上位Pビットおよび最下位Qビットで構成され、ここでは、A+B=P+Qであり、かつ、Qは、前記第1ビット・サイズAと第2ビット・サイズBのうち大なるサイズに等しいQ=max(A,B)、第3の数を求めるステップ、
− 前記第3数を操作して前記第3数の前記最上位Pビットのうちの少なくとも1つのビットの関数である第4の数を求めるステップ、
− 前記第4数を用いて前記暗号化システムの出力を導くステップ、を有することを特徴とする方法。 - 前記第1数は、前記第2数と等しいことを特徴とする、請求項18に記載の方法。
- 前記第1および第2数の少なくとも1つは、数学的システムの少なくとも1つの状態変数を表しており、
前記状態変数は、前記第4数の関数として更新されることを特徴とする、請求項18または19に記載の方法。 - 前記状態変数は、前記第4数のパーミュテーションの関数として更新されることを特徴とする、請求項20に記載の方法。
- 前記パーミュテーションは、前記第4数の前記ビットのビット位置の規則的交代を含んでいることを特徴とする、請求項21に記載の方法。
- − 前記乗算ステップは、複数回実行され、
各乗算は、複数の状態変数の1つを表す数、または、前記複数の状態変数の1つの関数である数について実行され、
よって、前記乗算ステップが、複数の第3数をもたらし、
− 前記操作ステップは、複数の第4数を含む配列をもたらし、
− 少なくとも1つの状態変数は、少なくとも2つの前記第4数の関数として更新されることを特徴とする、請求項18ないし22のいずれか1つに記載の方法。 - 前記第1および第2数の少なくとも1つは、可変のパラメータ値が加えられる状態変数Xiであることを特徴とする、請求項18ないし23のいずれか1つに記載の方法。
- 前記パラメータ値は、カウンタCiであることを特徴とする、請求項24に記載の方法。
- 前記乗算ステップは、(Xi+Ci)を二乗するステップを有し、
ここで、Xiは、状態変数もしくは状態変数の配列を意味し、かつ、Ciは、前記カウンタもしくは前記カウンタの配列を意味することを特徴とする、請求項25に記載の方法。 - 前記少なくとも1つのパラメータは、前記計算において所定の間隔で繰り返し変化することを特徴とする、請求項24ないし26のいずれか1つに記載の方法。
- カウンタCiは、前記第4数、または、前記第4数の関数である数に加えられ、更新された状態変数Xi+1がもたらされることを特徴とする、請求項18ないし27のいずれか1つに記載の方法。
- 前記乗算ステップは、xkを計算するステップを有し、xは前記第1数であり、kは指数であることを特徴とする、請求項18ないし28のいずれか1つに記載の方法。
- kは、整数であることを特徴とする、請求項29に記載の方法。
- 前記操作ステップは、前記第3数の、前記最上位ビットの1ビットおよび前記最下位ビットの1ビットについて実行される論理演算を少なくとも1つ含んでいることを特徴とする、請求項18ないし30のいずれか1つに記載の方法。
- 前記論理演算は、少なくとも1つの排他的論理和演算を含んでいることを特徴とする、請求項31に記載の方法。
- P=Qであり、
前記少なくとも1つの排他的論理和演算は、P個の排他的論理和演算を有し、ビット・サイズPの結果をもたらし、各排他的論理和演算は、前記第3数の前記最上位ビットのうちの1ビットと、前記第3数の前記最下位ビットのうちの1ビットについて実行されることを特徴とする、請求項32に記載の方法。 - 前記操作ステップは、前記最上位ビットのうちの少なくとも1ビットと、前記最下位ビットのうちの少なくとも1ビットについて実行される算術演算を少なくとも1つ含んでいることを特徴とする、請求項18ないし33のいずれか1つに記載の方法。
- 前記乗算ステップは、複数のビット・サイズA+Bの数をもたらす複数の乗算関数を有し、かつ、
前記乗算ステップは、前記複数の数のうち、第1数の前記ビットの少なくとも1つと、前記複数の数のうち、第2数の前記ビットの少なくとも1つと組み合わせるステップを有することを特徴とする、請求項18ないし34のいずれか1つに記載の方法。 - 前記複数の乗算関数は、少なくとも1つの二乗演算を有し、かつ、
前記操作ステップは、前記複数の数のうち、第1数の前記最上位Pビットのうちの少なくとも1ビットと、前記複数の数のうち、第2数の前記最下位Qビットのうちの少なくとも1ビットと組み合わせるステップを有することを特徴とする、請求項35に記載の方法。 - 前記乗算ステップは、少なくとも1つの状態変数が逐次代入される数学的システムにおいて実行されることを特徴とする、請求項18ないし36のいずれか1つに記載の方法。
- 前記乗算ステップは、少なくとも2つの状態変数に関する逐次代入システムにおいて実行されることを特徴とする、請求項18ないし37のいずれか1つに記載の方法。
- 各計算シーケンスにおいて、前記少なくとも2つの状態変数にアサインされている値は、前記少なくとも2つの状態変数、および/または、前記少なくとも2つの状態変数以外の状態変数のうちの少なくとも1つの値の関数として更新されることを特徴とする、請求項38に記載の方法。
- 前記第4数を用いて、前記暗号化システムの前記出力として擬似乱数を生成、または、更新することを特徴とする、請求項18ないし39のいずれか1つに記載の方法。
- 前記第1および第2数の少なくとも1つは、暗号化または復号化されるデータの第2セットから導出され、かつ、
前記第4数を用いて、前記データの第2セットの暗号化された、または、復号化された表現を生成することを特徴とする、請求項18ないし40のいずれか1つに記載の方法。 - 前記第1および第2数の少なくとも1つは、データの第2セットから導出され、かつ、
前記第4数を用いて、前記データの第2セットを識別するための識別値を生成することを特徴とする、請求項18ないし41のいずれか1つに記載の方法。 - 前記第1および第2数の少なくとも1つは、暗号鍵から導出されることを特徴とする、請求項18ないし42のいずれか1つに記載の方法。
- 暗号化システムにおいて、データの第1セットを操作する方法であって、
前記データの第1セットは、第1および第2数を含み、
− 前記第1数を前記第2数で除算し、商と余りを求めるステップ、
− 数学的演算により、前記商と前記余りを組み合わせて、生じる数を求めるステップ、
− 前記生じる数を用いて前記暗号化システムの出力を導出するステップ、を有することを特徴とする方法。 - 計算ステップを反復的に実行する暗号化システムにおいて、周期的な数のシーケンスを生成する方法であって、
各計算ステップiにおいて、カウンタの配列を更新するステップを有し、前記カウンタは、論理、および/または、算術演算によって更新され、各計算ステップにおいて、キャリー値が、前記配列に含まれる各カウンタに加えられ、前記配列、c0、に含まれる前記第1のカウンタに加えられるキャリーは、
− カウンタの前記配列の値に関する、選択された計算と、
− 以前の計算ステップにおけるカウンタ値の関数である値と、
の少なくとも1つから求められることを特徴とする方法。 - 計算ステップが反復的に実行される暗号化システムにおいて、周期的な数のシーケンスを生成する方法であって、
各計算ステップiにおいて、カウンタcj,iの配列Ciを更新するステップを有し、
前記カウンタは、
ここで、cj,i+1は、ステップi+1において配列Cの位置jにアサインされた値であり、j=0,...,n−1であり、nは、前記配列Cの次元を意味し、
cj,iは、ステップiにおいて配列Cの位置jにアサインされた値であり、j=0,...,n−1であり、
ajは、配列Aの位置jにアサインされた値であり、j=0,...,n−1であり、
j>0に対し:bj−1,i+1は、前記cj−1,i+1に関する計算より生じたキャリー値であり、
Njは定数であり、j=0,...,n−1であり、
i=0に対し:di=d0は、初期値であり、
i>0に対し:diは、カウンタの前記配列Ciの関数、および/または、Ciの値に関する、選択された計算より求めたキャリー値であることを特徴とする方法。 - 各ajの値は、定数であることを特徴とする、請求項46に記載の方法。
- n=1であり、よって、
− 前記配列Cは、1つの値c0,iを含み、
− 前記配列Aは、1つの値a0を含んでいることを特徴とする、請求項46または47に記載の方法。 - i>0なるiに対し、diは、前記cj−1,iに関する計算より生じるキャリー値であることを特徴とする、請求項46ないし48のいずれか1つに記載の方法。
- diは、前記cj−1,i+1に関する計算より生じるキャリー値であることを特徴とする、請求項46ないし48のいずれか1つに記載の方法。
- 前記暗号化システムにおいて実行される前記計算ステップは、逐次代入的手続きを有し、前記逐次代入的手続きにおいて状態変数の配列Xは、反復的に逐次代入され、よって、計算ステップi+1における前記状態変数の配列Xのある位置にアサインされる少なくとも1つの値は、
− 計算ステップiにおける前記状態変数の配列Xのある位置にアサインされた少なくとも1つの値、および、
− 計算ステップiにおける前記カウンタの配列Cのある位置にアサインされた少なくとも1つの値、の関数であることを特徴とする、請求項46ないし50のいずれか1つに記載の方法。 - 前記状態変数の配列Xは、単一の変数を含んでいることを特徴とする、請求項51に記載の方法。
- 計算ステップi+1における前記状態変数の配列Xは、Xi+Ciの関数、Xi+1=f(Xi+Ci)であることを特徴とする、請求項51または52に記載の方法。
- 積(N0・N1・...・Nn−1)−1と、Aについて連結された値とは、互いに素であることを特徴とする、請求項46ないし53のいずれか1つに記載の方法。
- 逐次代入的手続きとして計算ステップが実行される暗号化システムの出力を生成する方法であって、
状態変数の配列Xは、反復的に逐次代入されて、よって、
イタレーション・ステップi+1における前記状態変数の配列Xは、
− イタレーションiにおける前記状態変数の配列Xの、ある位置にアサインされた少なくとも1つの値、および、
− イタレーションiにおける前記カウンタの配列Cの、ある位置にアサインされた少なくとも1つの値、の関数であり、
前記カウンタの配列は、各イタレーションにおいて、
ここで、cj,i+1は、ステップi+1において配列Cの位置jにアサインされた値であり、j=0,...,n−1であり、nは、前記配列Cの次元を意味し、
cj,iは、ステップiにおいて配列Cの位置jにアサインされた値であり、j=0,...,n−1であり、
ajは、配列Aの位置jにアサインされた値であり、j=0,...,n−1であり、
j>0に対し:bj−1,i+1は、前記cj−1,i+1に関する計算より生じたキャリー値であり、
Njは定数であり、j=0,...,n−1であり、
i=0に対し:di=d0は、初期値であり、
i>0に対し:diは、カウンタの前記配列Ciの関数、および/または、Ciの値に関する選択された計算より求めたキャリー値であり、
各イタレーションは、
− 第1のビット・サイズAの第1数と、第2のビット・サイズBの第2数を乗算して第3のビット・サイズA+Bの第3数を求めるステップであって、
前記第1および第2数の少なくとも1つは、イタレーションiにおいて前記状態変数の配列Xのある位置にアサインされた少なくとも1つの値に等しいか、もしくは、イタレーションiにおいて前記状態変数の配列Xのある位置にアサインされた少なくとも1つの値の関数であり、
前記第3数は、最上位Pビットおよび最下位Qビットで構成され、ここでは、A+B=P+Qであり、かつ、
Qは、前記第1ビット・サイズAと第2ビット・サイズBのうち大なるサイズ、Q=max(A,B)、に等しい、ステップ、
− 前記第3数を操作し、前記第3数の前記最上位Pビットの少なくとも1ビットの関数である第4数を求めるステップ、
− 前記第4数を用いて前記暗号化システムの前記出力の導出、および/または、前記状態変数の配列Xの位置へ新しい値をアサインするステップ、を有することを特徴とする方法。 - データのセットを識別し、ならびに、前記データのセットを同時的に暗号化および/または復号化するための識別値を決定する方法であって、
正のリヤプノフ指数を示す数学的システムにおいて数値計算を実行するステップを有することを特徴とする方法。 - さらに、
− 前記数学的システムを離散項で表すステップ、
− 前記数学的システムの少なくとも1つの変数を、固定小数点数として表すステップ、
− 前記計算が、前記、固定小数点数として表された少なくとも1つの変数を含むようにして前記計算を実行するステップ、
− 前記計算より、生じる数を求めるステップであって、
a.少なくとも、前記数学的システムの解の一部、および、
b.前記数学的システムの数値解法に含まれる別の計算で用いることができる数、
のうち、少なくとも1つを表している、生じる数を求めるステップ、を有することを特徴とする、請求項56に記載の方法。 - さらに、前記数学的システムにおいて、イタレーションとして数学的計算を反復的に実行するステップを有し、
前記データのセットの様々な部分、または、前記データの様々な部分の変形体を、前記計算に対する入力として用いることができることを特徴とする、請求項56または57に記載の方法。 - さらに、
− 前記数学的システムにおいて、イタレーションとして数学的計算を反復的に実行するステップであって、ここでは、前記計算に対する入力として前記データのセットの様々な部分、または、前記データのセットの様々な部分の変形体を利用でき、
以下に記す各計算、または、幾つかの計算を行うステップ、
− 前記計算より生じる数を抽出するステップであって、前記生じる数は、
a.少なくとも、前記数学的システムに対する解の一部、および、
b.前記数学的システムに対する数値解法に含まれる、別の計算で利用できる数、のうちの少なくとも1つを表している、生じる数を抽出するステップ、
− 前記生じる数に基づく前記識別値の更新値を決定するステップであって、ここでは、前記データのセットの様々な部分、または、前記データのセットの様々な部分の変形体を、前記決定ステップにおいて入力として利用できる、ステップ、
− 前記生じる数に基づいて前記データのセットの特定の部分を暗号化、および/または、復号化するステップ、を有し、
前記データのセット全体を暗号化、および/または、復号化するのに必要なイタレーションが実行されることを特徴とする、請求項56ないし58のいずれか1つに記載の方法。 - さらに、
− 前記数学的システムを離散項で表すステップ、
− 前記数学的システムの少なくとも1つの変数を、固定小数点数として表すステップ、
− 前記計算が、前記、固定小数点数として表された少なくとも1つの変数を含む用にして、前記計算を実行するステップ、を有することを特徴とする、請求項56ないし59のいずれか1つに記載の方法。 - 前記識別値は、次の、前記データのセット全体の暗号化および/または復号化でさらに変形されることを特徴とする、請求項56ないし60のいずれか1つに記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DKPA200200864 | 2002-06-06 | ||
DKPA200300211 | 2003-02-12 | ||
PCT/DK2003/000375 WO2003104969A2 (en) | 2002-06-06 | 2003-06-06 | Method for improving unpredictability of output of pseudo-random number generators |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005529364A true JP2005529364A (ja) | 2005-09-29 |
Family
ID=29737849
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004511973A Pending JP2005529364A (ja) | 2002-06-06 | 2003-06-06 | 擬似乱数生成器の出力の予測不可能性を向上させる方法 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1532515A2 (ja) |
JP (1) | JP2005529364A (ja) |
CN (1) | CN1668995A (ja) |
AU (1) | AU2003232162A1 (ja) |
CA (1) | CA2488514A1 (ja) |
WO (1) | WO2003104969A2 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009066709A1 (ja) * | 2007-11-20 | 2009-05-28 | Jiguo Dong | 乱数生成装置及び方法 |
JP2015519022A (ja) * | 2012-05-24 | 2015-07-06 | エニグメディア エセ.エレ.Enigmedia S.L. | 疑似ランダム系列の生成方法およびデータストリームのコーディングまたはデコーディング方法 |
JP2016178574A (ja) * | 2015-03-23 | 2016-10-06 | 日本電気株式会社 | 復号装置、受信装置、送受信システムおよび復号方法 |
US10007488B2 (en) | 2016-10-10 | 2018-06-26 | International Business Machines Corporation | Secured pseudo-random number generator |
US11288663B1 (en) | 2021-06-25 | 2022-03-29 | Arri E. Manuel | Blockring service, system, and method thereof |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8130956B2 (en) | 2007-08-02 | 2012-03-06 | International Business Machines Corporation | Efficient and low power encrypting and decrypting of data |
CN101902332A (zh) * | 2010-07-16 | 2010-12-01 | 北京邮电大学 | 基于耦合混沌映射系统的带密钥的散列方法 |
CN102323476B (zh) * | 2011-06-08 | 2013-09-18 | 山东电力研究院 | 采用谱估计和混沌理论的电力系统谐波和间谐波测量方法 |
CN103135961A (zh) * | 2011-11-28 | 2013-06-05 | 中泽宏 | 基于具有两个奇素因子的模数生成乘同余随机数的方法 |
CN102520908B (zh) * | 2011-12-20 | 2015-04-29 | 大唐微电子技术有限公司 | 一种伪随机数生成器及伪随机数生成方法 |
CN102546603B (zh) * | 2011-12-22 | 2015-01-07 | 洛阳元煜自控工程有限公司 | 一种远程路灯控制系统通信协议动态加密方法 |
US8861725B2 (en) * | 2012-07-10 | 2014-10-14 | Infineon Technologies Ag | Random bit stream generator with enhanced backward secrecy |
DE102013205168A1 (de) * | 2013-03-22 | 2014-09-25 | Robert Bosch Gmbh | Verfahren zum Erzeugen einer zufälligen Ausgangsbitfolge |
CN104426651A (zh) * | 2013-08-30 | 2015-03-18 | 上海复旦微电子集团股份有限公司 | 数据处理方法和装置 |
CN103490876B (zh) * | 2013-10-18 | 2016-05-18 | 重庆科技学院 | 基于超混沌Lorenz系统构建Hash函数的数据加密方法 |
US10396996B2 (en) * | 2014-08-19 | 2019-08-27 | Telefonaktiebolaget Lm Ericsson (Publ) | Generating cryptographic checksums |
US10209957B2 (en) * | 2015-05-04 | 2019-02-19 | Samsung Electronics Co., Ltd. | Partial remainder/divisor table split implementation |
CN104954117B (zh) * | 2015-06-29 | 2018-01-23 | 宋煜 | 基于Logistic混沌映射转移轨道判决的序列密码生成系统 |
US10142103B2 (en) * | 2015-12-07 | 2018-11-27 | The Boeing Company | Hardware assisted fast pseudorandom number generation |
CN107301454B (zh) * | 2016-04-15 | 2021-01-22 | 中科寒武纪科技股份有限公司 | 支持离散数据表示的人工神经网络反向训练装置和方法 |
CN109039581A (zh) * | 2016-04-28 | 2018-12-18 | 王志 | 一种输出Lorenz型切换吸引子的简单混沌系统电路 |
CN109934331B (zh) * | 2016-04-29 | 2020-06-19 | 中科寒武纪科技股份有限公司 | 用于执行人工神经网络正向运算的装置和方法 |
GB2551787A (en) * | 2016-06-30 | 2018-01-03 | Ipco 2012 Ltd | Generating a plurality of one time tokens |
CN107193530B (zh) * | 2017-04-28 | 2020-04-24 | 广州酷狗计算机科技有限公司 | 一种生成随机数的方法和装置 |
CN107181566A (zh) * | 2017-05-10 | 2017-09-19 | 桂林电子科技大学 | 一种面向高速移动通信的混沌交织算法 |
CN110110318B (zh) * | 2019-01-22 | 2021-02-05 | 清华大学 | 基于循环神经网络的文本隐写检测方法及系统 |
JP7253470B2 (ja) | 2019-07-31 | 2023-04-06 | 株式会社デンソーテン | 情報処理装置 |
US11686855B2 (en) * | 2019-10-15 | 2023-06-27 | Onenav, Inc. | Modernized global navigation satellite system (GNSS) receivers and commercially viable consumer grade GNSS receivers |
CN110851112A (zh) * | 2019-11-06 | 2020-02-28 | 成都卫士通信息产业股份有限公司 | 一种随机比特生成方法、装置及电子设备和存储介质 |
CN111723542A (zh) * | 2020-07-07 | 2020-09-29 | 南京晓庄学院 | 一种四维无平衡点超混沌系统自适应同步方法及电路 |
CN112272091B (zh) * | 2020-09-24 | 2023-06-20 | 北京石油化工学院 | 一种具有均匀分布特征的多维整数混沌伪随机序列的生成方法 |
CN112861121B (zh) * | 2020-12-23 | 2023-04-07 | 工业信息安全(四川)创新中心有限公司 | 一种块内最大1、0游程检测合并优化实现方法及装置 |
CN112632558B (zh) * | 2020-12-23 | 2021-08-10 | 工业信息安全(四川)创新中心有限公司 | 一种工控安全设备的分块中最长的零行程测试方法及装置 |
CN112764713B (zh) * | 2021-01-25 | 2024-04-26 | 北京信而泰科技股份有限公司 | 随机数的生成方法和装置 |
CN113407900B (zh) * | 2021-01-26 | 2024-06-04 | 南京信息职业技术学院 | Lorenz振子的快速求解方法 |
CN113343609B (zh) * | 2021-06-21 | 2023-07-07 | 中国人民解放军陆军炮兵防空兵学院 | 基于可公开的混沌流密码加密的通信保密电路设计方法 |
CN113965315B (zh) * | 2021-10-15 | 2023-12-01 | 华东师范大学 | 一种轻量级密码学安全伪随机数生成器及伪随机数生成方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
NL8202547A (nl) * | 1982-06-23 | 1984-01-16 | Philips Nv | Werkwijze voor het opwekken van een pseudo-random reeks van tekens met grote reekslengte. |
US4719592A (en) * | 1982-11-20 | 1988-01-12 | International Computers Limited | Sequence generator |
US4755969A (en) * | 1986-11-07 | 1988-07-05 | Digital Electronic Communications Equipment (Dece Corp.) | Pseudo random sequence generation |
US5007087A (en) * | 1990-04-16 | 1991-04-09 | Loral Aerospace Corp. | Method and apparatus for generating secure random numbers using chaos |
IL99660A0 (en) * | 1991-10-07 | 1992-08-18 | Ibm Israel | Random number generator |
JPH1153173A (ja) * | 1997-08-07 | 1999-02-26 | Nec Corp | 擬似乱数発生方法及び装置 |
US6285761B1 (en) * | 1998-03-04 | 2001-09-04 | Lucent Technologies, Inc. | Method for generating pseudo-random numbers |
FR2811790A1 (fr) * | 2000-07-11 | 2002-01-18 | Schlumberger Systems & Service | Microcontroleur securise contre des attaques dites en courant |
US6987853B2 (en) * | 2000-11-29 | 2006-01-17 | Bodacion Technologies, Llc | Method and apparatus for generating a group of character sets that are both never repeating within certain period of time and difficult to guess |
AU2002220534A1 (en) * | 2000-12-07 | 2002-06-18 | Cryptico A/S | A method of performing mathematical operations in an electronic device, a method of generating pseudo-random numbers in an electronic device, and a method of encrypting and decrypting electronic data |
-
2003
- 2003-06-06 AU AU2003232162A patent/AU2003232162A1/en not_active Abandoned
- 2003-06-06 CN CNA038173212A patent/CN1668995A/zh active Pending
- 2003-06-06 JP JP2004511973A patent/JP2005529364A/ja active Pending
- 2003-06-06 EP EP03756974A patent/EP1532515A2/en not_active Withdrawn
- 2003-06-06 WO PCT/DK2003/000375 patent/WO2003104969A2/en active Application Filing
- 2003-06-06 CA CA002488514A patent/CA2488514A1/en not_active Abandoned
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009066709A1 (ja) * | 2007-11-20 | 2009-05-28 | Jiguo Dong | 乱数生成装置及び方法 |
JP2009129432A (ja) * | 2007-11-20 | 2009-06-11 | Saikoku To | 乱数生成装置及び方法 |
JP2015519022A (ja) * | 2012-05-24 | 2015-07-06 | エニグメディア エセ.エレ.Enigmedia S.L. | 疑似ランダム系列の生成方法およびデータストリームのコーディングまたはデコーディング方法 |
JP2016178574A (ja) * | 2015-03-23 | 2016-10-06 | 日本電気株式会社 | 復号装置、受信装置、送受信システムおよび復号方法 |
US10007488B2 (en) | 2016-10-10 | 2018-06-26 | International Business Machines Corporation | Secured pseudo-random number generator |
US10078493B2 (en) | 2016-10-10 | 2018-09-18 | International Business Machines Corporation | Secured pseudo-random number generator |
US11288663B1 (en) | 2021-06-25 | 2022-03-29 | Arri E. Manuel | Blockring service, system, and method thereof |
Also Published As
Publication number | Publication date |
---|---|
AU2003232162A1 (en) | 2003-12-22 |
WO2003104969A3 (en) | 2005-03-24 |
CA2488514A1 (en) | 2003-12-18 |
CN1668995A (zh) | 2005-09-14 |
WO2003104969A2 (en) | 2003-12-18 |
EP1532515A2 (en) | 2005-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7170997B2 (en) | Method of generating pseudo-random numbers in an electronic device, and a method of encrypting and decrypting electronic data | |
JP2005529364A (ja) | 擬似乱数生成器の出力の予測不可能性を向上させる方法 | |
US20040086117A1 (en) | Methods for improving unpredictability of output of pseudo-random number generators | |
US8320557B2 (en) | Cryptographic system including a mixed radix number generator with chosen statistical artifacts | |
US8340295B2 (en) | High-speed cryptographic system using chaotic sequences | |
CA2497935C (en) | Stream cipher design with revolving buffers | |
US20090196420A1 (en) | Cryptographic system incorporating a digitally generated chaotic numerical sequence | |
JPH04250490A (ja) | ケーオス論に基づく暗号化システム | |
Banik | Conditional differential cryptanalysis of 105 round Grain v1 | |
EP2103033B1 (en) | Efficient data integrity protection | |
JP2004530919A (ja) | 電子装置において数学的演算を実行する方法、電子装置において擬似乱数を発生する方法、及び電子データを暗号化しかつ復号化する方法 | |
JP2001051832A (ja) | 乗算剰余演算方法および乗算剰余回路 | |
Rose | KISS: A bit too simple | |
KR102491902B1 (ko) | 완전동형암호 기법으로 암호화된 데이터의 연산을 위한 장치 및 방법 | |
Anashin et al. | ABC: A new fast flexible stream cipher | |
JP2004530919A5 (ja) | ||
JP2004004784A (ja) | ハッシュ・アルゴリズムを実装するためのシステム及び方法 | |
Younes et al. | CeTrivium: A Stream Cipher Based on Cellular Automata for Securing Real-TimeMultimedia Transmission. | |
Kundu et al. | On the Masking-Friendly Designs for Post-quantum Cryptography | |
Chakraborty et al. | An FPGA based non-feistel block cipher through recursive substitutions of bits on prime-nonprime detection of sub-stream (RSBPNDS) | |
Gupta et al. | Keys and Symmetric Cryptography | |
Nita et al. | Pseudorandom Number Generators | |
Khompysh et al. | STATISTICAL PROPERTIES OF THE PSEUDORANDOM SEQUENCE GENERATION ALGORITHM | |
Kanso | An efficient cryptosystem Delta for stream cipher applications | |
Svensson et al. | A simple secure communications system utilizing chaotic functions to control the encryption and decryption of messages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060606 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091013 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100309 |