(57)【特許請求の範囲】
【請求項１】
ディジタル入力ブロックをディジタル出力ブロックに暗号的に変換する方法であって、前記変換が、前記ディジタル入力ブロックの選択された第１の部分Ｍ１を第１鍵Ｋ１と結合し、前記選択された第１の部分Ｍ１および第１鍵Ｋ１に非線形的に依存するデータブロックＢ１を発生するステップを実行するための暗号処理手段を使用するステップを具え、前記暗号処理手段を使用して、前記ディジタル出力ブロックの選択された部分が前記データブロックＢ１から得られる方法において、
前記第１の部分Ｍ１を第１鍵Ｋ１と結合するステップが、前記選択された第１の部分Ｍ１および第１鍵Ｋ１を、１つの順次分離できないステップにおいて非線形的に結合するためのアルゴリズムを使用する非線形関数ｇを実行することによって行われることを特徴とする方法。
【請求項２】
請求の範囲１に請求の方法において、該方法が、
−  前記結合するステップを実行する前に、前記ディジタル入力ブロックを、前記選択された第１の部分Ｍ１と、第２の部分Ｍ２とに分割するステップと、
−  前記ディジタル入力ブロックの第２の部分Ｍ２を第２鍵Ｋ２に１つの順次分離できないステップにおいて結合するためのアルゴリズムを使用する非線形関数ｇ-1を実行し、データブロックＢ２を出力として発生し、前記非線形関数ｇ-1は前記非線形関数ｇの逆関数になるステップと、
−  前記データブロックＢ１におけるデータと前記データブロックＢ２におけるデータとから結合されたデータを形成し、前記ディジタル出力ブロックは前記結合されたデータから得られるステップと
を実行するための暗号処理手段を使用するステップを有する方法。
【請求項３】
請求の範囲１に請求の方法において、前記非線形関数ｇを実行する前記結合するステップが、
−  前記選択された第１の部分Ｍ１を、等しい長さの第１の複数ｎのサブブロックｍ0,..，ｍn-1に分割するステップと、
−  前記第１鍵Ｋ１を、等しい長さを有する第１の複数ｎのサブ鍵ｋ0,..，ｋn-1に分割し、前記サブ鍵ｋiがｉ＝０ないしｎ−１に対して前記サブブロックｍiに対応するステップと、
−  ｂi＝ｍiとすることによって、前記サブブロックｍiの各々からサブブロックｂiを得るステップと、
−  前記サブブロックｍiの各々を、前記サブブロックｍiの各々に対して、前記サブブロックｍiから得られた前記サブブロックｂiを前記対応するサブ鍵ｋiに１つの順次分離できないステップにおいて一つのステップで非線形的に結合するアルゴリズムを使用する同じ非線形関数ｈを実行することによって別々に処理し、前記第１の複数の出力サブブロックｈ（ｂi，ｋi）を発生するステップと、
−  ｔi＝ｈ（ｂi，ｋi）とすることによって、前記第１の複数ｎの前記出力サブブロックｈ（ｂi，ｋi）からサブブロックｔiを得るステップと、
−  前記第１の複数ｎの前記出力サブブロックｈ（ｂi，ｋi）から得られる前記サブブロックｔiを結合し、前記データブロックＢ１を形成するステップとを具えることを特徴とする方法。
【請求項４】
請求の範囲２または３に請求の方法において、前記非線形関数ｇ-1を実行するステップが、
−  前記第２の部分Ｍ２を、等しい長さを有する第１の複数ｎのサブブロックｍn,..，ｍ2n-1に分割するステップと、
−  前記第２鍵Ｋ２を、等しい長さを有する前記第１の複数ｎのサブ鍵ｋn,..，ｋ2n-1に分割し、前記サブ鍵ｋiがｉ＝ｎないし２ｎ−１に対して前記サブブロックｍiに対応するステップと、
−  ｂi＝ｍiとすることによって、ｉ＝ｎないし２ｎ−１に対して、前記サブブロックｍiの各々からサブブロックｂiを得るステップと、
−  ｉ＝ｎないし２ｎ−１に対して、前記サブブロックｍiの各々に対して、前記サブブロックｍiから得られた前記サブブロックｂiを前記対応するサブ鍵ｋiに１つのステップにおいて非線形的に結合すると共に前記第１の複数の出力サブブロックｈ-1（ｂi，ｋi）を発生させるためのアルゴリズムを使用する同じ非線形関数ｈ-1を実行し、前記関数ｈ-1は前記関数ｈの逆関数になるステップと、
−  ｔi＝ｈ-1（ｂi，ｋi）とすることによって、ｉ＝ｎないし２ｎ−１に対して、前記第１の複数ｎの前記出力サブブロックｈ-1（ｂi，ｋi）からサブブロックｔiを得るステップと、
−  ｉ＝ｎないし２ｎ−１に対して、前記第１の複数ｎの前記出力サブブロックｈ-1（ｂi，ｋi）から得られた前記サブブロックｔiを結合し、前記データブロックＢ２を形成するステップと
を具えることを特徴とする方法。
【請求項５】
請求の範囲３に請求の方法において、所定の定数ｐiを各々の前記サブブロックｍiに２を法としてビット加算することによって、前記サブブロックｂiは前記サブブロックｍiから得られ、前記定数ｐiが前記サブブロックｍiと等しい長さを有することを特徴とする方法。
【請求項６】
請求の範囲３に請求の方法において、前記関数ｈ（ｂi，ｋi）は、
ｂj≠０，ｋj≠０かつｂj≠ｋjならば、ｈ（ｂj，ｋj）＝（ｂj，ｋj）-1
ｂj＝０ならば、ｈ（ｂj，ｋj）＝（ｋj）-2
ｋj＝０ならば、ｈ（ｂj，ｋj）＝（ｑj）-2
ｂj＝ｋjならば、ｈ（ｂj，ｋj）＝０
によって規定され、前記ｈ（ｂj，ｋj）を規定する乗算および逆演算が、所定のガロア域乗算および逆演算になることを特徴とする方法。
【請求項７】
請求の範囲６に請求の方法において、前記サブブロックｔiを前記出力サブブロックｈ（ｂi，ｋi）から得るステップが、所定の定数ｄiを各々の前記出力サブブロックｈ（ｂi，ｋi）に２を法としてビット加算するステップを具え、前記定数ｄiは前記サブブロックｍiとほぼ等しい長さを有することを特徴とする方法。
【請求項８】
請求の範囲７に請求の方法において、前記サブブロックｔiを前記出力サブブロックｈ（ｂi，ｋi）から得るステップが、前記所定のガロア域乗算を使用して、ｈ（ｂi，ｋi）＋ｄiを２i乗するステップをさらに具えることを特徴とする方法。
【請求項９】
請求の範囲６に請求の方法において、前記サブブロックｔiを前記出力サブブロックｈ（ｂi，ｋi）から得るステップが、前記所定のガロア域（ＧＦ）乗算を使用して、前記出力サブブロックｈ（ｂi，ｋi）を２i乗するステップを具えることを特徴とする方法。
【請求項１０】
請求の範囲４に請求の方法において、前記結合されたデータは、
−  前記サブブロックｔiおよびｔ2n-1-iをｉ＝０ないしｎ−１に関して交換するステップと、
−  これらの交換されたサブブロックを連結するステップと
によって形成されることを特徴とする方法。
【請求項１１】
請求の範囲６に請求の方法において、前記サブブロックｍiは、８データビットを具え、前記ＧＦ（２8）の２つの要素ｂi及びｋiの乗算ステップが、ＧＦ（２4）における乗算および加算の列を実行するステップを具え、ＧＦ（２4）は２4要素でのガロア域を示すことを特徴とする方法。
【請求項１２】
請求の範囲１１に請求の方法において、前記２つの要素ｂi及びｋiの乗算ステップが、
−  ｂiをａ0＋ａ1．Ｄとして表し、ｋiをａ2＋ａ3．Ｄとして表し、ａ0、ａ1、ａ2およびａ3はＧＦ（２4）の要素であり、Ｄは、ＧＦ（２4）に関する既約多項式ｈ（ｘ）＝ｘ2＋ｘ＋βの根として規定されるＧＦ（２8）の要素であり、βはＧＦ（２4）の要素であるステップと、
−  （ａ0ａ2＋ａ1ａ3β）＋（ａ1ａ2＋ａ0ａ3＋ａ1ａ3）．Ｄを計算するステップと
を具えることを特徴とする方法。
【請求項１３】
請求の範囲１２に請求の方法において、βは、ＧＦ（２）に関する既約多項式ｈ（ｘ）＝ｘ4＋ｘ3＋ｘ2＋ｘ＋１の根であることを特徴とする方法。
【請求項１４】
請求の範囲６に請求の方法において、前記サブブロックｍiが８データビットを具え、前記ＧＦ（２8）の要素ｂiｋi又はｋi2若しくはｑi2の逆数を計算するステップが、ＧＦ（２4）における計算の列を実行するステップを具え、前記ＧＦ（２4）は２4要素でのガロア域を示すことを特徴とする方法。
【請求項１５】
請求の範囲１４に請求の方法において、前記要素ｂiｋi又はｋi2若しくはｑi2の逆数を計算するステップが、
−  前記要素ｂiｋi又はｋi2若しくはｑi2をａ0＋ａ1．Ｄとして表し、ａ0およびａ1はＧＦ（２4）の要素であり、Ｄは、ＧＦ（２4）に関する既約多項式ｈ（ｘ）＝ｘ2＋ｘ＋βの根として規定されるＧＦ（２8）の要素であり、βはＧＦ（２4）の要素であるステップと、
−  （ａ02＋ａ0ａ1＋ａ12β）-1（（ａ0＋ａ1）＋ａ1Ｄ）を計算するステップと
を具えることを特徴とする方法。
【請求項１６】
ディジタル入力ブロックをディジタル出力ブロックに暗号的に変換する装置であって、
前記ディジタル入力ブロックを得る第１入力手段と、
第１鍵Ｋ１を得る第２入力手段と、
前記ディジタル入力ブロックを前記ディジタル出力ブロックに変換する暗号処理手段であって、前記変換が、前記ディジタル入力ブロックの選択された第１の部分Ｍ１を前記第１鍵Ｋ１と結合するステップと、前記選択された第１の部分Ｍ１および第１鍵Ｋ１に非線形的に依存するデータブロックＢ１を発生するステップとを具え、前記ディジタル出力ブロックの選択された部分が前記データブロックＢ１から得られる、暗号処理手段と、
前記ディジタル出力ブロックを出力する出力手段と
を具える装置において、前記暗号処理手段は、前記選択された第１の部分Ｍ１を第１鍵Ｋ１に、１つの順次分離できないステップにおいて非線形的に結合するためのアルゴリズムを使用する非線形関数ｇを実行することによって前記結合するステップを行うことを特徴とする装置。
【請求項１７】
請求の範囲１６に請求の装置において、該装置が、第２鍵Ｋ２を得る第３入力手段を具え、前記変換が、
−  前記結合するステップを行う前に、前記ディジタル入力ブロックを、前記選択された第１の部分Ｍ１と、第２の部分Ｍ２とに分割するステップと、
−  前記ディジタル入力ブロックの第２の部分Ｍ２を第２鍵Ｋ２に１つの順次分離できないステップにおいて結合するためのアルゴリズムを使用する非線形関数ｇ-1を実行し、データブロックＢ２を出力として発生し、前記非線形関数ｇ-1は前記非線形関数ｇの逆関数になるステップと、
−  前記データブロックＢ１におけるデータと前記データブロックＢ２におけるデータとから結合されたデータを形成するステップと
を具え、前記ディジタル出力ブロックは前記結合されたデータから得られるようにしたことを特徴とする装置。
【請求項１８】
請求の範囲１６に請求の装置において、前記第１の部分Ｍ１を第１鍵Ｋ１と結合するステップが、
−  前記選択された第１の部分Ｍ１を、等しい長さの第１の複数ｎのサブブロックｍ0,..，ｍn-1に分割するステップと、
−  前記第１鍵Ｋ１を、等しい長さを有する第１の複数ｎのサブ鍵ｋ0,..，ｋn-1に分割し、前記サブ鍵ｋiがｉ＝０ないしｎ−１に対して前記サブブロックｍiに対応するステップと、
−  ｂi＝ｍiとすることによって、前記サブブロックｍiの各々からサブブロックｂiを得るステップと、
−  前記サブブロックｍiの各々を、前記サブブロックｍiの各々に対して、前記サブブロックｍiから得られたサブブロックｂiを前記対応するサブ鍵ｋiに１つの順次分離できないステップにおいて一つのステップで非線形的に結合するアルゴリズムを使用する同じ非線形関数ｈを実行することによって別々に処理し、前記第１の複数の出力サブブロックｈ（ｂi，ｋi）を発生するステップと、
−  ｔi＝ｈ（ｂi，ｋi）とすることによって、前記第１の複数ｎの前記出力サブブロックｈ（ｂi，ｋi）からサブブロックｔiを得るステップと、
−  前記第１の複数ｎの前記出力サブブロックｈ（ｂi，ｋi）から得られるサブブロックｔiを結合し、前記データブロックＢ１を形成するステップと
を具えることを特徴とする装置。
【請求項１９】
請求の範囲１８に請求の装置において、前記関数ｈ（ｂi，ｋi）は、
ｂj≠０，ｋj≠０かつｂj≠ならばＫj、ｈ（ｂj，ｋj）＝（ｂj，ｋj）-1
ｂj＝０ならば、ｈ（ｂj，ｋj）＝（ｋj）-2
ｋj＝０ならば、ｈ（ｂj，ｋj）＝（ｂj）-2
ｂj＝ｋjならば、ｈ（ｂj，ｋj）＝０
によって規定され、前記ｈ（ｂj，ｋj）を規定する乗算および逆演算が、所定のガロア域乗算および逆演算になることを特徴とする装置。
【請求項２０】
請求の範囲１９に請求の装置において、前記サブブロックｍiが８データビットを具え、前記ＧＦ（２8）の２つの要素ｂi及びｋiの乗算ステップが、
−  ｂiをａ0＋ａ1．Ｄとして表し、ｋiをａ2＋ａ3．Ｄとして表し、ａ0、ａ1、ａ2およびａ3はＧＦ（２4）の要素であり、Ｄは、ＧＦ（２4）に関する既約多項式ｈ（ｘ）＝ｘ2＋ｘ＋βの根として規定されるＧＦ（２8）の要素であり、βはＧＦ（２4）の要素であるステップと、
−  （ａ0ａ2＋ａ1ａ3β）＋（ａ1ａ2＋ａ0ａ3＋ａ1ａ3）．Ｄを計算するステップと
を具え、
前記ＧＦ（２8）の要素ｂiｋi又はｋi2若しくはｑi2の逆数を計算するステップが、
−  （ａ02＋ａ0ａ1＋ａ12β）（（ａ0＋ａ1）＋ａ1Ｄ）の計算をするステップを具えることを特徴とする装置。
【発明の詳細な説明】
本発明は、ディジタル入力ブロックをディジタル出力ブロックに変換する方法に関係し、前記変換は、前記ディジタル入力ブロックの選択された部分Ｍ１を第１鍵Ｋ１と結合し、前記選択された部分Ｍ１および第１鍵Ｋ１に非線形的に依存するデータブロックＢ１を発生するステップを具え、前記ディジタル出力ブロックの選択された部分を前記データブロックＢ１から得る。
さらに本発明は、ディジタル入力ブロックをディジタル出力ブロックに暗号的に変換する装置に関係し、前記装置は、前記ディジタル入力ブロックを得る第１入力手段と、第１鍵Ｋ１を得る第２入力手段と、前記ディジタル入力ブロックを前記ディジタル出力ブロックに変換する暗号処理手段と、前記ディジタル出力ブロックを出力する出力手段とを具え、前記変換が、前記ディジタル入力ブロックの選択された部分Ｍ１を前記第１鍵Ｋ１と結合することと、前記選択された部分Ｍ１および第１鍵Ｋ１に非線形的に依存するデータブロックＢ１を発生することとを具え、前記ディジタル出力ブロックの選択された部分を前記データブロックＢ１から得る。
国家標準局のデータ暗号化標準（ＤＥＳ）［ＦＩＰＳ刊行物４６、１９７７年１月１５日］は、ディジタル入力ブロックをディジタル出力ブロックに変換する、広く使用されているアルゴリズムを記載している。このようなアルゴリズムは、一般的に、ブロック暗号と呼ばれている。このＤＥＳアルゴリズムは、バイナリ符号化情報の暗号化および暗号復号化に使用される。暗号化は、プレーンテキストと呼ばれる明瞭なデータを、暗号テキストと呼ばれる不明瞭な形態に変換する。前記暗号テキストを暗号復号化することは、そのデータをその元の形態に変換し戻す。いわゆる電子コードブックモードにおいて、ＤＥＳを使用し、プレーンテキストの６４ビットのブロックを、対応する暗号テキストの６４ビットのブロックに変換する。このモードにおいて、暗号化は、６４ビット鍵から得られる鍵を使用し、その５６ビットを自由に選択してもよい。図１は、暗号化中のＤＥＳの構造のすべてを示す。暗号化計算において、最初に入力（プレーンテキスト）を６４ビットから固定された順列ＩＰを使用する６４ビットに並べ替える。その結果、３２左ビットＬ0および３２右ビットＲ0に分割される。これら右ビットを、暗号関数ｆ（Ｒ0，Ｋ1）を使用して変換し、ここでＫ1をサブ鍵とする。この結果ｆ（Ｒ0，Ｋ1）を前記左ビットに（２を法とするビット幅）加算し、その後、２つの結果３２ビットブロックＬ0▲＋▼ｆ（Ｒ0，Ｋ1）およびＲ0を交換する。この手順を、合計１６ラウンド、反復的に続ける。最後のラウンドの終了において、最初の順列の逆順列を用いる。
ｆ（Ｒi，Ｋi+1）の計算において、図２に示すように、最初に３２右ビットＲiをボックスＥにおける４８ビットに拡張する。所定の表に従って、この拡張を、いくつかの入力ビットの出力ビットを２倍にし、他の入力ビットの出力ビットを１倍にすることによって行う。次に、拡張された４８ビットを、４８鍵ビットＫiに（２を法とするビット幅）加算する。結果として生じる４８ビットを、各々６ビットの８グループに分割する。これらのグループの各々を、Ｓボックス（Ｓi）によって処理し、Ｓボックスは、前記６ビットを４ビットに非線形演算において減少させる。８個のＳiボックスを、表の形態において与える。合計の出力は３２ビットであり、これをボックスＰにおいて並べ替える。Ｐも、表の形態において与える。
図３は、鍵スケジュール計算を説明する。６４ビットの鍵内容のうち５６ビットのみをこのアルゴリズムにおいて使用する。これらの５６ビットを、ランダムに選択すべきである。８個の補足するエラー検出ビットを使用し、前記鍵の各々のビットを部分的に余りにする。前記５６ビットの選択を、並べ替えと共にボックスＰＣ１において行う。その結果を、２つのビットワードＣ0およびＤ0に分割する。各々のラウンド毎に４８鍵ビットを得るために、最初にワードＣ0およびＤ0を左に１回または２回シフトする。次に、選択および並べ替えＰＣ２をこの結果に用いる。ＰＣ２の出力は、ｆ（Ｒ0，Ｋ1）に使用する４８ビットサブ鍵Ｋ1である。前記シフト、選択および並べ替えのプロセスを繰り返し、各々のラウンド毎にサブ鍵を発生する。表は、その後のラウンドのサブ鍵の次の４８ビットを得るためにどの位多くのシフトを行わなければならないかを明示する。
同じアルゴリズムおよび鍵を、暗号テキストの暗号復号化に使用することができる。暗号復号化に対する最初の並べ替えは、暗号化の逆並べ替えを取り消す。各々のラウンドは、いわゆるFeistel暗号から成り立つ。Feistel暗号に関して、逆の演算は、暗号化に対して使用したのと同じラウンドを使用するが、前記サブ鍵を逆の順序で用いることから成り立つことが知られている。このように、第１の復号化ラウンドには、第１６の暗号化ラウンドに使用したのと同じサブ鍵を供給しなければならず、第２の復号化ラウンドには、第１５の暗号化ラウンドに使用したのと同じサブ鍵を供給しなければならない、等である。どのようにＤＥＳアルゴリズムを暗号フィードバックモードのような他の暗号化モードにおいて使用できるかも既知である。このモードにおいて、ＤＥＳアルゴリズムを使用し、統計的にランダムのバイナリビットのストリームを発生し、これらを、例えば、排他的論理和を使用して前記プレーンテキストに結合する。
ＤＥＳアルゴリズムは、本質的に、最初の並べ替えを具え、データの一部における１６の鍵依存計算が続き、逆並べ替えによって終了する。各々の鍵依存計算は、鍵依存ビットの前記データ部分への（２を法とする）加算を具え、前記データ部分のサブブロックにおける非線形演算が続き、前記データ部分の並べ替え（線形演算）によって終了する。
一般的に、ＤＥＳは、良好な暗号化／暗号復号化ツールであると考えられる。しかしながら、特に、最近の極めて強力な差別的な暗号解読攻撃にかんがみて、ＤＥＳが長年に渡り安全であったかどうかは未解決の問題である。
本発明の目的は、暗号解読攻撃に対してより堅牢な、上述した種類の暗号方法および装置を提供することである。
この目的を達成するために、本発明による暗号方法は、前記結合ステップを、前記選択された部分Ｍ１および第１鍵Ｋ１を、１つの逐次的に分離できないステップにおいて非線形的に結合する非線形関数ｇを実行することによって行うことを特徴とする。図２に示すようなＤＥＳシステムにおいて、第１の処理ステップにおいて、前記Ｒデータを前記鍵にビット幅加算し、その結果（Ｓボックス）を非線形的に処理する第２の処理ステップが続く。本発明によれば、データを鍵に１つのステップ（すなわち、１つの逐次的に分離できないステップ）において結合するアルゴリズムを使用する。このように、前記鍵ビットの前記データへの加算は、非線形演算の１つに統合された部分となり、システムを、差別的な暗号解読のような最近の攻撃に対して、より免疫性にする。
従属の請求の範囲２に規定される本発明による方法の１実施形態において、各々のラウンドにおいて、前記ディジタル入力ブロックの双方の部分を処理し、これは、各々のラウンド中に前記ディジタル入力ブロックの半分のみを処理する、ＤＥＳのような慣例的なFeistel暗号に対するよりも良い暗号化結果を与える。同じシステムを暗号化および暗号復号化の双方に使用できることを保証するために、前記データの一方の部分を演算ｇを使用して処理し、他方の半分を逆演算ｇ-1を使用して処理する。この案を使用することによって、暗号復号化を、同じシステムを使用するが、前記鍵を前記ラウンドと逆の順序で供給する（暗号復号化中、前記第１の非線形ステップに、暗号化中に前記最後の非線形ステップに供給した鍵を供給する、等）ことによって行う。２倍多くのラウンドを使用するFeistel暗号の慣例的な実現化と比較して、本発明によるシステムはより高速である。
従属の請求の範囲３に規定される方法は、例えば６４ビットの比較的より大きいデータブロックおよび鍵を、より小さいサブブロックおよびサブ鍵に分割し、リアルタイム非線形処理を簡単にする。
従属の請求の範囲５に規定される本発明による方法の１実施形態において、定数を使用し、前記暗号化の品質を向上させる。有利に、前記定数をシステム毎に予め決定し、例えば、顧客特定定数を形成する。代わりに、前記定数を、疑似乱数発生器によって発生する。
従属の請求の範囲６に規定の方法は、１ステップにおける前記データサブブロックおよびサブ鍵の非線形結合の方法を与える。加えて、異なった入力は、すべて異なった出力になる。これは、非線形演算が６ビット入力サブブロックを４ビット出力サブブロックに減少し、同じ出力が４つの異なった入力毎に発生するＤＥＳと比較して、暗号解析攻撃に対するシステムの免疫性を増加する。
従属の請求の範囲７に規定される本発明による方法の１実施形態において、定数を使用し、前記暗号化の品質を向上させる。有利に、前記定数をシステム毎に予め決定し、例えば、顧客特定定数を形成する。代わりに、前記定数を、疑似乱数発生器によって発生する。
従属の請求の範囲８に規定の方法は、前記暗号化の品質をさらに向上させる。
従属の請求の範囲１０に規定される本発明による方法の１実施形態において、前記ディジタル入力ブロックの異なった部分に対応する個々のサブブロックを交換し、前記暗号化の品質を改善する。
好適には、サブブロックｍiは、８個のデータビットを具える。これは、前記非線形演算が６から４ビットに変換するＤＥＳと比較して、前記非線形演算の品質をさらに改善する。
従属の請求の範囲１１に規定される方法は、ＧＦ（２8）における乗算をＧＦ（２4）における演算に減少し、より簡単またはより費用効果的な実現化を達成できるようにするという利点を有する。
従属の請求の範囲１２に規定される方法は、ＧＦ（２8）における乗算をＧＦ（２4）における演算に減少する効率的な方法を与える。
本発明による方法の１実施形態は、βを、ＧＦ（２）に関する既約多項式ｈ（ｘ）＝ｘ4＋ｘ3＋ｘ2＋ｘ＋１の根とすることを特徴とする。これは、βに対する好適な選択であり、いわゆる、シフトされた多項式の底の使用を可能にする。
本発明による方法の１実施形態は、ＧＦ（２8）の逆関数の計算が、ＧＦ（２4）における一組の計算の実行を具えることを特徴とする。ＧＦ（２8）における逆演算がＧＦ（２4）における演算に減少することによって、より簡単、またはより費用効果的な実現化を達成することができる。
本発明による方法の１実施形態は、前記要素ｂの逆数の計算が、（ａ02＋ａ0ａ1＋ａ12β）-1（（ａ0＋ａ1）＋ａ1Ｄ）の計算を具えることを特徴とする。これは、ＧＦ（２8）における逆演算をＧＦ（２4）における演算に減少する効率的な方法である。
本発明による方法の１実施形態は、前記第１鍵Ｋ１が６４ビットデータを具え、前記サブ鍵ｋiの各々が８データビットを具えることを特徴とする。大きな鍵を使用することによって、前記暗号化の品質は向上する。
本発明の目的を達成するために、本発明による装置は、前記暗号処理方法を、前記結合を前記選択された部分Ｍ１および第１鍵Ｋ１を、１つの逐次的に分離できないステップにおいて非線形的に結合する非線形関数ｇを実行することによって行うように配置したことを特徴とする。
本発明のこれらのおよび他の態様は、図面に示す実施形態の参照から明らかになるであろう。
図１は、ＤＥＳシステムに関する処理ステップを示す。
図２は、データを鍵に結合することと、ＤＥＳにおける非線形演算との詳細を説明する。
図３は、ＤＥＳにおける鍵計算の詳細を説明する。
図４は、暗号装置のブロック図を示す。
図５は、ディジタル入力ブロックの２つの部分の別々の処理を説明する。
図６は、サブブロックの形態におけるディジタル入力ブロックの一部の処理を説明する。
図７は、サブブロックの形態における２つの部分の処理を説明する。
図８は、全体的な暗号システムを示す。
図４は、本発明による暗号装置４００のブロック図を示す。本発明を説明する目的のために、本システムを電子コードブックモードにおいて説明する。当業者は、本システムを他のモードにおいて同様に使用することができるであろう。装置４００は、ディジタル入力ブロックＭを得る第１入力手段４１０を具える。ディジタル入力ブロックＭを、どのような適切なサイズとしてもよい。好適には、Ｍを十分に大きく、例えば１２８ビットとし、適度に安全な暗号結果を得る。装置４００は、前記ディジタル入力ブロックをディジタル出力ブロックに変換する暗号処理手段４２０をさらに具える。有利に、前記ディジタル出力ブロックは、前記ディジタル入力ブロックとほぼ等しい長さを有する。装置４００は、前記ディジタル出力ブロックを出力する出力手段４３０を具える。基本的に、暗号処理手段４２０は、前記ディジタル入力ブロックＭを前記ディジタル出力ブロックに、前記ディジタル入力ブロックＭの選択された部分Ｍ１を第１鍵Ｋ１に結合し、Ｍ１およびＫ１に非線形的に依存するデータブロックＢ１を発生することによって変換する。この結合を、１つの逐次的に分離できないステップにおいて行う。前記ディジタル出力ブロックを、Ｂ１と、Ｍ１の部分でないＭの残りの部分とから得る。第１鍵Ｋ１を得るために、暗号装置４００は、第２入力手段４４０を具える。後により詳細に説明するように、前記ディジタル入力ブロックの第２の部分Ｍ２を、好適には、Ｍ１およびＫ１を結合する演算と逆の演算を使用して第２鍵Ｋ２と非線形的に結合し、データブロックＢ２を発生してもよい。この場合において、前記ディジタル出力ブロックは、Ｂ２にも依存する。第２鍵Ｋ２を得るために、暗号装置４００は、第３入力手段４５０を具える。
暗号装置４００を、ＰＣのような慣例的なコンピュータを使用するか、専用の暗号化／暗号復号化装置を使用して実現してもよいことは明らかであろう。前記ディジタル入力ブロックを、ハードディスクまたはフロッピーディスクのようなデータ記憶媒体から通信ネットワークを経るような、または、ユーザによって直接入力するような種々の方法において得ても良い。同様に、前記ディジタル出力ブロックを、通信ネットワークを経て、データ記憶媒体に格納するか、ユーザに対して表示するような、種々の方法において出力してもよい。好適には、安全な手段をこの目的に使用する。暗号処理手段４２０を、例えば、パーソナルコンピュータにおいて使用されるような慣例的なプロセッサとしてもよいが、専用の暗号プロセッサとしてもよい。暗号装置４００を、部分的または全体的に、スマートカードにおいて実現してもよい。
この文書の残りの部分において、前記暗号変換の詳細を、プレーンテキストの１２８ビットのブロックを、対応する暗号テキストの１２８ビットのブロックに暗号化することについて与えた。当業者は、本システムを他のブロックサイズに同様に使用することができるであろう。図に示すデータサイズは、明瞭にする目的のために与えられており、例としてのみ取り扱うべきである。この説明は、データの非線形処理と、１ラウンドにおいて行われる鍵のデータとの結合とに焦点を合わせている。このように、本発明を、多数のラウンドを具え、各々のラウンドにおいて前記データブロックにおける線形演算を含む、図１に示すようなシステムにおいて使用することができる。
図５に示すように、１２８ビットのメッセージブロックＭを、第１の部分Ｍ１および第２の部分Ｍ２（左および右ブロック）に分割する。好適には、双方の部分を、等しいサイズ、６４ビットのものとする。Ｍ１を、非線形関数ｇを使用して処理する。原理的に、同じラウンド中にＭ２を処理する必要はない。有利に、Ｍ２を、同じラウンド中に逆関数ｇ-1を使用して処理する。関数ｇおよびｇ-1の各々は、Ｍ１または各々Ｍ２を、鍵Ｋ１または各々Ｋ２と非線形的に結合する。好適には、前記データ部分および鍵は、同じサイズを有する。大きなデータブロックにおける良好な非線形演算は困難であり、大きなデータブロックにおける非線形処理は時間が掛かることから、データ部分Ｍ１およびＭ２をサブブロックに分割する。図６は、Ｍ１に関するこの分割を説明する。図７は、Ｍ１およびＭ２の分割を説明する。６４ビットデータ部分Ｍ１およびＭ２を使用して、有利に、これらの部分を、８個の８ビット要素に各々分割し、Ｍ１＝（ｍ0，ｍ1，．．．，ｍ7）およびＭ２＝（ｍ8，ｍ9，．．．，ｍ15）とする。２つの鍵Ｋ１およびＫ２を、より大きな鍵から、例えば、１２８ビット鍵を２つの６４ビット鍵Ｋ１およびＫ２に分割することによって得る。２つの鍵Ｋ１およびＫ２を、さらに分割してもよい。６４ビット鍵を使用して、有利に、各々の鍵を８ビットサブ鍵に分割し、合計１６個の８ビットサブ鍵ｋj，ｊ＝０．．１５を与える。サブ鍵ｋjの各々を、対応するサブブロックｍjに関連付ける。各々のサブブロックを、別々に処理する。好適には、これらのサブブロックを、並列に処理する。望ましければ、あるラウンドに関係する前記サブブロックを、順次に処理してもよい。Ｍ１を形成する前記サブブロックの第１のグループを、暗号関数ｆによって各々処理する。前記サブブロックの第２のグループを、逆関数ｆ-1によって各々処理する。
前記暗号演算に関して、ｎビットサブブロックまたはサブ鍵を、ＧＦ（２n）（ガロア域）の要素を表すと考える。したがって、すべての演算は、ＧＦ（２n）における。
その基本的な形態において、暗号関数ｆは、図６および７にも説明するように、２つの入力ｍjおよびｋjと１つの出力ｔjとを有し、ここでｊ＝０ないし７に対して、ｔj＝ｆ（ｍj，ｋj）とする。この基本的な形態において、暗号関数ｆは、ｂjとほぼ等しいサイズの出力を伴う１つの演算ｈ（ｂj，ｋj）を含む。関数ｈは、データサブブロックｂjおよびサブ鍵ｋjを入力として有し、暗号関数ｆのこの基本的な形態に関して、ｂj＝ｍjとする。関数ｆ（この実施形態において関数ｈと同じ）を、ｊ＝０．．７に関して以下のように規定する。
１．ｈ（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj≠ｋjならば、（ｂj．ｋj）-1
ｂj＝０ならば、（ｋj）-2
ｋj＝０ならば、（ｂj）-2
ｂj＝ｋjならば、０
同様に、その基本的な形態において、逆暗号関数ｆ-1は、図６および７にも説明するように、２つの入力ｍjおよびｋjと１つの出力ｔjとを有し、ここでｊ＝８ないし１５に対して、ｔj＝ｆ-1（ｍj，ｋj）とする。逆暗号関数ｆ-1も、ｂjとほぼ等しいサイズの出力を伴う１つの演算ｈ-1（ｂj，ｋj）を含む。関数ｈ-1をｈの逆関数とする。前のように、暗号関数ｆ-1のこの基本的な形態において、ｂj＝ｍjとする。関数ｆ-1（この実施形態において関数ｈ-1と同じ）を、ｊ＝８．．１５に関して以下のように規定する。
１．ｈ-1（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj．ｋj2≠１ならば、（ｂj．ｋj）-1
ｂj＝０ならば、ｋj
ｋj＝０ならば、（ｂj）-1/2
ｂj．ｋj2＝１ならば、０
他の実施形態において、暗号関数ｆの出力ｔj（ｊ＝０ないし７に関して、ｔj＝ｆ（ｍj，ｋj））および逆暗号関数ｆ-1の出力（ｊ＝８ないし１５に関して、ｔj＝ｆ-1（ｍj，ｋj））を以下の方法において交換する。ｔj＜−＞ｔ15-j。これを、図７において説明する。
他の実施形態において、関数ｈを実行する前に、定数を各々のデータサブブロックｍjに（２を法とするビット幅）加算する。好適には、８個の別個の定数ｐj（ｊ＝１．．７）を使用し、各々を対応するデータサブブロックｍjに加算する。前と同じ関数ｈを使用し、ここでは、ｂj＝ｍj▲＋▼ｐjにおいて演算する。暗号関数ｆを、ここで以下のように規定する。
１．ｂj＝ｍj▲＋▼ｐj
２．ｈ（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj≠ｋjならば、（ｂj．ｋj）-1
ｂj＝０ならば、（ｋj）-2
ｋj＝０ならば、（ｂj）-2
ｂj＝ｋjならば、０
同様に、逆暗号関数ｆ-1に関しても、定数を各々のデータサブブロックｍjに（２を法とするビット幅）加算する。逆関数ｆ-1を、暗号関数ｆを使用して暗号化されたテキストを暗号復号化するために使用できるようにするために、関数ｈの後、前記定数を加算する。好適には、暗号関数ｆに使用したのと同じ８個の別個の定数ｐj（ｊ＝０．．７）を使用する。ここで、定数ｐjを、１５−ｊ番目のストリーム（ｊ＝０．．７）に加算する。結果として、逆暗号関数ｆ-1は、以下の２つの演算を含む（ｊ＝８．．１５）。
１．ｈ-1（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj．ｋj2≠１ならば、（ｂj．ｋj）-1
ｂj＝０ならば、ｋj
ｋj＝０ならば、（ｂj）-1/2
ｂj．ｋj2＝１ならば、０
２．ｔj＝ｈ-1（ｂj，ｋj）▲＋▼ｐ15-j
最後に、ｔjおよびｔ15-jを交換する（ｊ＝０．．７）。
他の実施形態において、関数ｈの実行後に、他の定数を各々のデータサブブロックｍjに（２を法とするビット幅）加算する。好適には、８個の別個の定数ｄj（ｊ＝１．．７）を使用し、各々を対応するデータサブブロックｍjに加算する。前と同じ関数ｈを使用する。暗号関数ｆを、ここで以下のように規定する。
１．ｂj＝ｍj▲＋▼ｐj
２．ｈ（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj≠ｋjならば、（ｂj．ｋj）-1
ｂj＝０ならば、（ｋj）-2
ｋj＝０ならば、（ｂj）-2
ｂj＝ｋjならば、０
３．ｔj＝ｈ（ｂj，ｋj）▲＋▼ｄj
同様に、逆暗号関数ｆ-1に関しても、定数を各々のデータサブブロックｍjに（２を法とするビット幅）加算する。逆関数ｆ-1を、暗号関数ｆを使用して暗号化されたテキストを暗号復号化するために使用できるようにするために、関数ｈの実行前に、前記定数を加算する。好適には、暗号関数ｆに使用したのと同じ８個の別個の定数ｄj（ｊ＝０．．７）を使用する。ここで、定数ｄjを、１５−ｊ番目のストリーム（ｊ＝０．．７）に加算する。前と同じ関数ｈ-1を使用し、ここでは、ｂj＝ｍj▲＋▼ｄ15-jにおいて演算する。結果として、逆暗号関数ｆ-1は、以下の３つの演算を含む（ｊ＝８．．１５）。
１．ｂj＝ｍj▲＋▼ｄ15-j
２．ｈ-1（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj．ｋj2≠１ならば、（ｂj．ｋj）-1
ｂj＝０ならば、ｋj
ｋj＝０ならば、（ｂj）-1/2
ｂj．ｋj2＝１ならば、０
３．ｔj＝ｈ-1（ｂj，ｋj）▲＋▼ｐ15-j
最後に、ｔjおよびｔ15-jを交換する（ｊ＝０．．７）。定数ｐjを使用せずに定数ｄjを使用することもできることは、明らかであろう。
他の実施形態において、暗号関数ｆは、関数ｈの結果を自乗する。前と同じ関数を使用する。暗号関数ｆを、ここで以下のように規定する。
１．ｂj＝ｍj▲＋▼ｐj
２．ｈ（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj≠ｋjならば、（ｂj．ｋj）-1
ｂj＝０ならば、（ｋj）-2
ｋj＝０ならば、（ｂj）-2
ｂj＝ｋjならば、０
３．ｓj＝ｈ（ｂj，ｋj）2+i
４．ｔj＝ｓj▲＋▼ｄj
同様に、暗号関数ｆ-1も、データサブブロックを自乗する。逆関数ｆ-1を、暗号関数ｆを使用して暗号化されたテキストを暗号復号化するために使用できるようにするために、関数ｈの実行前に、前記加算演算を行う。前と同じ関数ｈ-1を使用し、ここでは、ｂj＝ｍj▲＋▼ｄ15-jにおいて演算する。結果として、逆暗号関数ｆ-1は、以下の４つの演算を含む（ｊ＝８．．１５）。
１．ｑj＝ｍj▲＋▼ｄ15-j
２．ｂj＝ｑj2+(j-7)
３．ｈ-1（ｂj，ｋj）＝
ｂj≠０，ｋj≠０かつｂj．ｋj2≠１ならば、（ｂj．ｋj）-1
ｂj＝０ならば、ｋj
ｋj＝０ならば、（ｂj）-1/2
ｂj．ｋj2＝１ならば、０
４．ｔj＝ｈ-1（ｂj，ｋj）▲＋▼ｐ15-j
最後に、ｔjおよびｔ15-jを交換する（ｊ＝０．．７）。定数ｄjおよびｐjの一方または双方を使用せずに、自乗の演算を使用することもできることは、明らかであろう。
暗号復号化のために、暗号化に使用したのと同じアルゴリズムを使用するが、前記サブ鍵を交換し、ｋjの代わりにｋ15-jを使用し、ｊ＝０．．１５とする。
ＧＦ（２8）における乗算
原理的に、本発明に関して、ＧＦ（２8）におけるどのような乗算を使用してもよい。ＧＦ（２m）におけるＶＬＳＩ実現化の一例は、［P. A. Scott,“A fast VLSI multiplier for GF(2m)”, IEEE Journal on selected areas in communications, Vol. SAC-4, No.1, January 1986, pages 62-66］において与えられる。有利に、以下の方法を使用し、ＧＦ（２m）nにおける乗算をＧＦ（２4）における乗算および加算の列に減少する。
ＧＦ（２4）において、βをβ5＝１の自明でない根とする（自明でないとはβ≠１を意味し、または、等しく、ｘ5＋１＝（ｘ＋１）（ｘ4＋ｘ3＋ｘ2＋ｘ＋１）から、βをＧＦ（２）に関する既約多項式ｈ（ｘ）＝ｘ4＋ｘ3＋ｘ2＋ｘ＋１の根とする）。底β、β2、β4、β8を、ＧＦ（２4）における底として選択する。多項式β8＝β3に従うことから、これは、いわゆるシフトされた多項式底β、β2、β3、β4と同じである。
Ｄを、ＧＦ（２4）に関する既約多項式ｈ（ｘ）＝ｘ2＋ｘ＋βの根として規定されるＧＦ（２8）の要素とする。ＧＦ（２8）のすべての要素を、ａ0＋ａ1．Ｄとして表すことができ、ａ0およびａ1をＧＦ（２4）の要素とする。バイナリ用語において、ＧＦ（２8）の数ｂを、ベクトル（ａ0，ａ1）として配置された８ビットを使用して表すことができ、ａ0，ａ1は、ＧＦ（２4）の数を表す４ビットを有する。このように、ＧＦ（２8）における底は、β、β2、β3、β4、Ｄβ、Ｄβ2、Ｄβ3、Ｄβ4である。ａi∈ＧＦ（２4）として、ｂ＝ａ0＋ａ1．Ｄおよびｃ＝ａ2＋ａ3．Ｄとして表され、ＧＦ（２8）の２つの要素ｂおよびｃを、
ｂ．ｃ＝（ａ0＋ａ1．Ｄ）．（ａ2＋ａ3．Ｄ）
＝ａ0ａ2＋（ａ1ａ2＋ａ0ａ3）．Ｄ＋ａ1ａ3．Ｄ2
のように乗算することができる。Ｄがｋ（ｘ）の根であり、Ｄ2＝Ｄ＋βを意味するという事実を利用して、これは、乗算結果、
ｂ．ｃ＝（ａ0ａ2＋ａ1ａ3β）＋（ａ1ａ2＋ａ0ａ3＋ａ1ａ3）．Ｄ
を与える。これは、ＧＦ（２8）の２つの要素の乗算を、ＧＦ（２4）における乗算および加算の列に減少している。
ＧＦ（２8）における逆
原理的に、どのような既知の方法を使用してＧＦ（２8）における要素の逆を計算してもよい。有利に、前の方法を使用してＧＦ（２8）における乗算をＧＦ（２4）における乗算に減少し、次に以下の方法を使用してＧＦ（２8）における逆演算をＧＦ（２4）における逆演算に減少する。
ＧＦ（２8）における要素ｂの逆ｂ-1は、ａi∈ＧＦ（２4）として、ｂをｂ＝ａ0＋ａ1．Ｄとして表し、
ｂ-1．ｂ＝（ａ02＋ａ0ａ1＋ａ12β）-1．（ａ0＋ａ1＋ａ1Ｄ）
．（ａ0＋ａ1Ｄ）
＝（ａ02＋ａ0ａ1＋ａ12β）-1．（ａ02＋ａ0ａ1
＋ａ12Ｄ＋ａ12Ｄ2）
であり、Ｄ2＋Ｄ＝βで、これは、ｂ-1．ｂ＝１を与えることから、
ｂ-1＝（ａ02＋ａ0ａ1＋ａ12β）-1．（ａ0＋ａ1＋ａ1Ｄ）
によって与えられる。この方法において、ＧＦ（２8）における逆演算を、ＧＦ（２4）における逆演算と、ＧＦ（２4）における乗算および加算の列とに減少する。
ＧＦ（２4）における乗算
原理的に、ＧＦ（２4）におけるどのような乗算を使用してもよい。有利に、上述したように、シフトされた多項式底β、β2、β3、β4をＧＦ（２4）における底として選択し、ここでβをＧＦ（２）に関する既約多項式ｈ（ｘ）＝ｘ4＋ｘ3＋ｘ2＋ｘ＋１の根とし、β5＝１とする。βをｈの根とし、これは、β4＋β3＋β2＋β＝１を意味する。これらの底要素をｅ1、ｅ2、ｅ3およびｅ4と名付け、ｅi＝βiとし、これらの底要素を、βの定義を使用して、
ｅ1．ｅ1＝β．β＝β2＝ｅ2
ｅ1．ｅ2＝β．β2＝β3＝ｅ3
ｅ1．ｅ3＝β．β3＝β4＝ｅ4
ｅ1．ｅ4＝β．β4＝β5＝１＝ｅ1＋ｅ2＋ｅ3＋ｅ4
ｅ2．ｅ2＝β2．β2＝β4＝ｅ4
ｅ2．ｅ3＝β2．β3＝β5＝１＝ｅ1＋ｅ2＋ｅ3＋ｅ4
ｅ2．ｅ4＝β2．β4＝β6＝β＝ｅ1
ｅ3．ｅ3＝β3．β3＝β6＝β＝ｅ1
ｅ3．ｅ4＝β3．β4＝β7＝β2＝ｅ2
ｅ4．ｅ4＝β4．β4＝β8＝β3＝ｅ3
のように乗算する。これは、原理的に、ＧＦ（２4）における乗算を規定する。バイナリにおいて、前記乗算を、以下のように考えることができる。前記底に関して、ＧＦ（２4）における各々の要素ｂを、ｂi∈ＧＦ（２）として、ｂ＝ｂ0ｅ1＋ｂ1ｅ2＋ｂ2ｅ3＋ｂ3ｅ4として表すことができる。このように、要素ｂを、バイナリ成分（ｂ0，ｂ1，ｂ2，ｂ3）を有する４次元ベクトルによって表すことができる。マイクロプロセッサにおいて、これを、ニブルを使用して表すことができる。バイナリにおいて、ＧＦ（２4）における２つの要素ｂおよびｃの乗算を、これら２つの要素をｂ＝（ｂ0，ｂ1，ｂ2，ｂ3）およびｃ＝（ｃ0，ｃ1，ｃ2，ｃ3）によって表すとして、以下のように考えることができる。通常の方法におけるこれら２つの要素の乗算は、
ｂ．ｃ＝（ｂ0ｃ0）β2＋（ｂ0ｃ1＋ｂ1ｃ0）β3＋（ｂ0ｃ2
＋ｂ1ｃ1＋ｂ2ｃ0）β4＋（ｂ0ｃ3＋ｂ1ｃ2十ｂ2ｃ1
＋ｂ3ｃ0）β5＋（ｂ1ｃ3＋ｂ2ｃ2＋ｂ3ｃ1）β6
＋（ｂ2ｃ3＋ｂ3ｃ2）β7＋（ｂ3ｃ3）β8
を与える。β5をβ4＋β3＋β2＋βと交換し、β6をβと交換し、β7をβ2と交換し、β8をβ3と交換するβの定義を使用することは、以下の４つの成分、
ｂ．ｃ＝（ｂ1ｃ3＋ｂ2ｃ2＋ｂ3ｃ1＋ｂ0ｃ3＋ｂ1ｃ2＋ｂ2ｃ1
＋ｂ3ｃ0）β＋（ｂ0ｃ0＋ｂ2ｃ3＋ｂ3ｃ2＋ｂ0ｃ3
＋ｂ1ｃ2＋ｂ2ｃ1＋ｂ3ｃ0）β2＋（ｂ0ｃ1＋ｂ1ｃ0
＋ｂ3ｃ3＋ｂ0ｃ3＋ｂ1ｃ2＋ｂ2ｃ1＋ｂ3ｃ0）β3
＋（ｂ0ｃ2＋ｂ1ｃ1＋ｂ2ｃ0＋ｂ0ｃ3＋ｂ1ｃ2＋ｂ2ｃ1
＋ｂ3ｃ0）β4
を与える。したがって、この乗算のバイナリにおける結果は、
ｂ．ｃ＝（ｂ1ｃ3＋ｂ2ｃ2＋ｂ3ｃ1＋ｂ0ｃ3＋ｂ1ｃ2＋ｂ2ｃ1
＋ｂ3ｃ0，ｂ0ｃ0＋ｂ2ｃ3＋ｂ3ｃ2＋ｂ0ｃ3＋ｂ1ｃ2
＋ｂ2ｃ1＋ｂ3ｃ0，ｂ0ｃ1＋ｂ1ｃ0＋ｂ3ｃ3＋ｂ0ｃ3
＋ｂ1ｃ2＋ｂ2ｃ1＋ｂ3ｃ0，ｂ0ｃ2＋ｂ1ｃ1＋ｂ2ｃ0
＋ｂ0ｃ3＋ｂ1ｃ2＋ｂ2ｃ1＋ｂ3ｃ0）
によって与えられる。
ＧＦ（２4）における逆演算
基底β、β2、β4、β8を使用して、ＧＦ（２4）の各々の要素ｘを、ａ、ｂ、ｃ、ｄ∈ＧＦ（２）として、ｂ＝ａ．β＋ｂ．β2＋ｃ．β4＋ｄ．β8と書くことができる。このように、各々の要素を、４次元ベクトル（ａ，ｂ，ｃ，ｄ）によって表すことができる。
ｂの逆数（ｂ-1）を得るために、
−  以下の中間結果、
0003992742.tif 000002
を計算し、ここで、ａｂをａおよびｂのバイナリＡＮＤ（ａＡＮＤｂ）とし、
0003992742.tif 000003
を（ＮＯＴａ）のバイナリ成分とし、
0003992742.tif 000004
のように使用することによって、ｂ-1の第１ビットを計算し、
0003992742.tif 000005
のように使用することによって、ｂ-1の第２ビットを計算し、
0003992742.tif 000006
のように使用することによって、ｂ-1の第３ビットを計算し、
0003992742.tif 000007
のように使用することによって、ｂ-1の第４ビットを計算する。
図１に示すようなＤＥＳのようなシステムにおいて使用するのに加えて、専用のシステムを、本発明の非線形アルゴリズムの周囲に組み立てることができるこのようなシステムを、図８において示す。このシステムにおいて、前記ブロックを、本発明の非線形演算ＮＬと、線形演算ＬＩＮとを使用して処理する。前記第１ステップは、非線形演算である。これに、線形演算の繰り返しを続け、非線形演算を続ける。線形演算が前記データビットを完全に混合するならば、十分に安全なシステムを、６つの非線形演算を実行することによって達成することが期待される。好適には、１５ラウンドを使用する。これらの線形演算の各々は、同じである。また、前記非線形演算の各々も同じであるが、各々の非線形演算は、１２８ビットの異なった鍵を使用する。有利に、鍵を、例えば、２５６ビットの１つの包括的な鍵から、鍵スケジュール計算を使用して得る。同じ鍵を、暗号化と暗号復号化とに使用する。大部分の場合において、前記鍵を、スマートカードを使用して与える。前記線形演算に関して、有利に、順列の代わりに、より複雑なマトリックスを使用する。上述したように、前記鍵に加えて、各々の非線形演算は、定数ｐjおよびｄjに分割する１２８ビットの定数Ｃを任意に使用してもよい。この定数を、各々の演算に対して同じにしてもよい。有利に、各々の非線形演算に、別々の定数を与える。これらの定数を、システムごとに予め決めてもよい（例えば、顧客特定定数）。代わりに、前記定数を、擬似乱数発生器を使用して発生する。
【図１】
0003992742.tif 000008
【図２】
0003992742.tif 000009
【図４】
0003992742.tif 000010
【図３】
0003992742.tif 000011
【図５】
0003992742.tif 000012
【図６】
0003992742.tif 000013
【図７】
0003992742.tif 000014
【図８】
0003992742.tif 000015