(57)【要約】  データXからデータYのブロックをメインキーRに基づいて暗号化又は復号化するための方法であり、当該方法は連続的に接続されたモジュールを使用し、各モジュールはメインキーRから生成させたサブキーRAを使用する方法であって、−  少なくとも2つの初期値X0L及びX0Rを入力し、混合値X1を形成するためにこれらの値を混合する工程と、−  サブキーRAの第１部分RAHを値X1と混合することによって値X2を求める工程と、−  代替レイヤに値X2を適用することによって値X3を求める工程であって、少なくとも1つの代替ボックス(sbox)を含む工程と、−  値X3に基づく多重代替タイプの拡散ボックスを使用して値X4を求める工程と、−  サブキーRAの第２部分RALを値X4と混合することによって値X5を求める工程と、−  代替レイヤを値X5に適用することによって値X6を求める工程と、−  サブキーRAの第１部分RAHを値X6と混合することによって値X7を求める工程と、−  モジュールの出力値X8を示す少なくとも2つの値X8L及びX8R、X8L及びX8Rを求めることで、値X7を少なくとも2つの初期値X0L及びX0Rと混合する工程とを含む。本方法は、少なくとも2つのモジュールを用い、次のモジュールにこれらを送る前に、少なくとも値X8L又は値X8Rの1つにオルトモーフィズム関数を適用する。
2007527028.tif 000002
【特許請求の範囲】
【請求項１】
データXからデータYのブロックをメインキーRに基づいて暗号化又は復号化するための方法であり、当該方法は連続的に接続された少なくとも２個のメインモジュール(MOD)を使用し、前記メインモジュール(MOD)は前記メインキー(R)から生成させたサブキー(RA)を使用する方法であって、
−  少なくとも2つの初期値X0L及びX0Rを入力する工程と、
−  混合された値X1を形成するために少なくとも2つの前記初期値X0L及びX0Rを混合する工程と、
−  前記サブキーRAの第１部分RAHを前記値X1と混合することによって値X2を求める工程と、
−  代替レイヤに前記値X2を適用することによって値X3を求める工程であって、前記代替レイヤは少なくとも1つの代替ボックス(sbox)を含み、各代替ボックスは、入力がポインタとして機能し、ポイントされた定数が出力として機能する定数テーブルを収納する工程と、
−  前記値X3に基づく多重代替タイプの拡散ボックスを使用して値X4を求める工程と、
−  前記サブキーRAの第２部分RALを前記値X4と混合することによって値X5を求める工程と、
−  代替ブロックを前記値X5に適用することによって値X6を求める工程と、
−  前記サブキーRAの第１部分RAHを前記値X6と混合することによって値X7を求める工程と、
−  前記モジュールの出力値X8を示す少なくとも2つの値X8L及びX8R、X8L及びX8Rを求めることで、前記値X7を少なくとも2つの前記初期値X0L及びX0Rと混合する工程とを含み、
各モジュール(MOD)のために新しいサブキー(RA)が前記メインキー(R)から作り出され、前記第１モジュールの前記初期値X0L及びX0Rは前記入力データXの一部であり、最後の前記モジュールの前記出力値X8L及びX8Hは前記出力データYを形成し、そして、当該方法は、更に、次の前記メインモジュールの前記入力X0R及びX0Lにこれらの値を適用する前に、少なくとも前記値X8L又は前記値X8Rの1つにオルトモーフィズム関数を適用する工程を含む方法。
【請求項２】
前記入力データは64ビット長であり、前記入力データXは32ビット長の2つの初期値X0L及びX0Hに分割され、前記2つ出力値X8L及びX8Hは前記出力データYを形成する請求項１記載の暗号化又は復号化方法。
【請求項３】
前記入力データは128ビット長であり、前記入力データXは32ビット長の4つの初期値X0LL、X0LR、X0RL及びX0RRに分割され、前記4つ出力値X8LL、X8LR、X8RL及びX8RRは前記出力データYを形成し、前記値X1の第１部分X1Lは前記値X0LL及びX0LRを混合することによって求められ、前記値X7の第１部分X7Lは前記4つの初期値X0LL、X0LR、X0RL及びX0RRの2つを混合することによって求められ、前記値X7の第２部分X7Rは前記4つの初期値X0LL、X0LR、X0RL及びX0RRの他の2つの部分を混合することによって求められる請求項１記載の暗号化又は復号化方法。
【請求項４】
前記代替レイヤはそれぞれの代替ボックス(sbox)を含み、各ボックスは8ビットの入力と8ビットの出力を有し、前記代替レイヤの入力は8ビット長の部分に分割される請求項１記載の暗号化又は復号化方法。
【請求項５】
前記代替ボックス(sbox)の定数テーブル(TA)は、与えられる入力のためにユニークな出力を収納する請求項４記載の暗号化又は復号化方法。
【請求項６】
各代替ボックス(sbox)のための前記定数テーブルは同一である請求項４記載の暗号化又は復号化方法。
【請求項７】
各代替ボックス(sbox)のための前記定数テーブルは相違する請求項４記載の暗号化又は復号化方法。
【請求項８】
各メインモジュールの実行時に、前記代替ボックス(sbox)の前記定数テーブルが変更される請求項４記載の暗号化又は復号化方法。
【請求項９】
前記データ長は64ビットであり、前記拡散ボックスは行列関数Y3=M*X4であり、引数Mは4*4の加算、定数による乗算、又は少なくとも1つの行と1つの列が3つの恒等式を含む恒等式を定義している請求項１記載の暗号化又は復号化方法。
【請求項１０】
前記引数Mの残りの行及び残りの列は2つの恒等式を含む請求項９記載の暗号化又は復号化方法。
【請求項１１】
前記データ長は128ビットであり、前記拡散ボックスは行列関数Y3=N*X3であり、引数Nは8*8の加算、定数による乗算、又は少なくとも1つの行と1つの列が7つの恒等式を含む恒等式を定義している請求項１記載の暗号化又は復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力ブロックと出力ブロックのサイズが同じで、ブロック暗号として知られている、データブロックを暗号化及び復号化するための装置及び方法に関する。
【０００２】
このオペレーションは、ブロックと同じサイズを持つ、又は異なったサイズ、一般より大きいサイズを持つキーを、使用することで制御される。
【０００３】
本発明は、非対称的な方法に対して、対称的な暗号化／復号化方法に関する。非対称方法がデータを暗号化するために第１キーと復号化するために第２キーを使用するのに対し、この対称的な方法はデータの暗号化と復号化に同一のキーを使用することを特徴とする。
【背景技術】
【０００４】
周知の方法は、DES（56ビットのキー）、CAST（128ビットのキー）、Blowfish（448ビットのキー）、Twofish（256ビットのキー）、及びRijndael（AESとしても知られている、256ビットのキー）である。本願の関与によって、それらにはそれら独自の長所と短所がある。
【０００５】
様々の特許が、それらの方法を記載して公開されている。米国特許第５，２１４，７０３号（特許文献１）は、各ラウンドがメインキーから得られた6個のサブキーを使用する、64ビットブロック長のための8.5ラウンドの暗号化プロセスに基づくIDEA(登録商標)として知られている方法を記載している。そのコアは、加算剰余216、乗算剰余216+1、及びビット単位の排他的論理和（exclusive-OR）を使用するLai-Masseyスキーマによって構成される。
【特許文献１】米国特許第５，２１４，７０３号
【発明の開示】
【発明が解決しようとする課題】
【０００６】
暗号化法のための2つの主要な要件は、暗号解析のあらゆる形式に対する堅牢性と、計算速度である。堅牢性のための1つの主要因は、拡散効果により達成される。即ち、入力データの中の1ビットが変更される場合、予測不能な方法で、すべての出力ビットが影響を受ける。
【０００７】
計算速度は、必要とされる数学的、論理的演算のタイプによって主に決定される。より複雑な操作（除算、乗算）は、暗号化プロセスを実行する時間を長引かせる可能性がある。
【０００８】
本発明の目的は、高い実行速度とともに高水準のセキュリティを提供する新規の暗号化法を提案することにある。
【課題を解決するための手段】
【０００９】
本目的はデータXからデータYのブロックをメインキーRに基づいて暗号化又は復号化する方法によって達成され、連続的に接続された数個のモジュールを使用し、前記各モジュールは前記メインキーRから生成させたサブキーRAを使用する方法であって、
−  少なくとも2つの初期値X0L及びX0Rを入力する工程と、
−  混合された値X1を形成するために少なくとも2つの初期値X0L及びX0Rを混合する工程と、
−  サブキーRAの第１部分RAHを値X1と混合することによって値X2を求める工程と、
−  代替レイヤに値X2を適用することによって値X3を求める工程であって、前記代替レイヤは少なくとも1つの代替ボックス（sbox）を含み、各代替ボックスは、入力がポインタとして機能し、ポイントされた定数が出力として機能する少なくとも1個の定数テーブルを収納する工程と、
−  値X3に基づく多重代替タイプの拡散ボックスを使用して値X4を求める工程と、
−  サブキーRAの第２部分RALを値X4と混合することによって値X5を求める工程と、
−  代替レイヤを値X5に適用することによって値X6を求める工程と、
−  サブキーRAの第１部分RAHを値X6と混合することによって値X7を求める工程と、
−  モジュールの出力値X8を示す少なくとも2つの値X8L及びX8R、X8L及びX8Rを求めることで、値X7を少なくとも2つの初期値X0L及びX0Rと混合する工程とを含み、
当該方法は少なくとも2つのモジュールを使用し、各モジュールのために新しいサブキーRAがメインキーRから作り出され、第１モジュールの初期値X0は入力データXの一部であり、最後のモジュールの出力値X8L及びX8Hは出力データYを形成し、そして、当該方法は、更に、次のモジュールの入力X0R及びX0Lにこれらの値を適用する前に、少なくとも値X8L又は値X8Rの1つにオルトモーフィズム（orthomorphism）関数を適用する工程を含む。
【００１０】
本方法の2つの主部は、代替レイヤと多重代替行列である。
【００１１】
代替レイヤの目的は、簡単な代数的関係なくして、入力値を出力値に変換することである。これは、要求された混同結果を達成できる定数を収納する参照用テーブルを使用することが、最も早い方法であることがその理由である。
【００１２】
本実施例では、入力データが32ビットの長さを持っているため、定数の数はそれぞれ32ビット長の232の値になる。
【００１３】
好適な実施例によれば、入力データは、そのため定数の数を256のバイトまで減少させる、8ビットの長さのグループに分割される。
【００１４】
その結果、32ビット又は64ビットの入力データは、8ビットのバイトで分割されて、8ビットの出力を取得するために代替ボックスに適用される。入力データはアドレスポインタとして使用され、ポイントされた定数は出力である。
【００１５】
その実装方法により、定数テーブルは入力データ（32ビット又は64ビット）のすべてのグループと同じである。別の実施例では、定数テーブルは入力データの各グループとは異なっている。
【００１６】
このテーブルの中に保存された定数は、すべて異なった数の固定順列であり、テーブル幅と等しいビット数によって符号化される。
【００１７】
本方法の2番目の主部は多重代替行列である。多重代替行列は、あらゆる可能性の正方形の小行列がゼロと異なる行列式を有する、プロパティをもつ正方行列であり、行列の原理は有限フィールドの原理である。混合操作は、出力するために定義されるベクトルに帰着する、入力要素のベクトルを行列に掛けることからなる。
【発明を実施するための最良の形態】
【００１８】
図１は、モジュールMODを示す暗号化（又は復号化）プロセスの概略図を示している。それぞれ32ビットの2つのパーツX0LとX0Rで表される64ビットのエントリデータX0は、最初に、混合要素MXの中で混合されて、値X1を求める。この混合要素は、32ビット・データの2倍の32ビット画像を提供するのを目的とする。これは、排他的論理和（XOR）関数、剰余加算、もしくはあらゆるグループ法を用いること等の異なる方法でも達成できるであろう。
【００１９】
次の工程は、サブキーRAを使用するだけでなく、32ビットの入力X1と32のビットの出力X7を含むブロックf32で示される。このブロックの詳細な説明は、図３について与えられる（以下を参照のこと）。
【００２０】
ブロックf32の出力X7は、2つのエントリX0L及びX0Hに接続される2つの混合ブロックMXに適用される。
【００２１】
結果として生じるデータX8L及びX8Rは、モジュールMODの2つの64ビットの出力X8を表す。
【００２２】
図２は、少なくとも2つのモジュールMODを使用する全体のプロセスを示している。最初に、入力データXは、64ビットエントリXを2つの出力値X0L1及びX0R1（それぞれ32ビット長）に変換する分割モジュールSPに適用される。
【００２３】
この分割モジュールSPの機能は、X0L1の最低ビット及びX0R1の最高ビット、或いは、X0L1に対する各奇数ビット及びX0R1に対する各偶数ビットを選択することのような異なる方法でも達成できるであろう。入力データXを分割する他の方法は、XのすべてのビットがX0L1とX0R1に含まれる限り、使用できるであろう。
【００２４】
そして、出力X0L1及びX0R1は、第１モジュールMOD1へのエントリとして使用される。この第１モジュールは、第１サブキーRA1を使用している間、データを処理する。X0L1とX0R1のための処理は図１に従って説明したのと同様である。この第１モジュールMOD1の出力は、2つの出力X8L1及びX8R1である。オルトモーフィズム（orthomorphism）関数はこれらの出力の1つ、例えば図２に示されるX8L1に適用される。このオルトモーフィズム関数から生じる出力は、X0L2として参照される。第１モジュールMOD1による処理から生じるもう片方の値X8R1は、オルトモーフィズム関数から生じる出力X0L2と同様に、第２処理モジュールMOD2コードで、入力として使用される。この第２モジュールMOD2コードは、第２サブキーRA2に基づくそれらの入力データを処理する。この第２モジュールの出力は、X8L2及びX8R2として図２で参照される。これらの出力は、アセンブラモジュールASの中で、暗号化されたデータYを形成するために組立てられる。このモジュールASには、逆の動作以外は、分割モジュールSPと同じ機能がある。出力Yを再構築する方法が、目的の残りと同じ以外は分割モジュールSPと異なる場合があるのは、注目すべきことである。X8L2及びX8R2のすべてのビットが、出力Yの中に含まれるべきである。
【００２５】
図３は図１のブロックf32の機能を詳細に示している。このブロックでは、32ビットの長さのデータX1は入力である。このデータは、図３においてX1'とも記述されている分割ブロックSPMUを通して、8ビット長のブロック（X1a、X1b、X1c、X1d）に分離される。このブロックには、図２のブロックSPの箇所で記載されていたものと同じ機能がある。それぞれのこれらの8ビットブロックは、値X2a、X2b、X2c、X2d（値X2を形成する）を求めるために、サブキーRAの第１部分RAHに混合される。この混合操作は、図１のブロックMXの箇所で記載されていたものと同じである。
【００２６】
2つのサブキーRAH及びRALの生成は、分割モジュールSPを通して作成される。このモジュールには、図１に記載されていたものと同じ機能がある。
【００２７】
これらの値X2a〜X2dの各々は、代替レイヤに適用され、少なくとも1つの代替のボックス（sbox）を含み、各代替ボックスは、入力がポインタとして機能し、ポイントされた定数が出力として機能する定数テーブルを収納する。出力データは、X3a、X3b、X3c、X3d（値X3を形成する）として、図３で参照される。
【００２８】
この定数テーブルを生成するための1つの方法は、擬似ランダムジェネレータを使用することである。このテーブル内のそれぞれの定数がユニークになるように、すべての重複値を取り除くべきである。
【００２９】
このデータは、（4、4）多重代替タイプの拡散ボックスMu4に取り込まれる。この拡散ボックスの出力データは、X4a、X4b、X4c、X4d（値X4を形成する）としてそれぞれ参照される。拡散ボックスは、256の要素を有する有限フィールドに属する要素である正方行列4×4Mu4により、入力ベクトル（X4a、X4b、X4c、X4d）を乗算することからなる。これらの要素は、Mu（i,j）で示される（但し、iは行インデックスを意味し、jは列インデックスを意味する）。行列Mu4によるベクトル（X4a、X4b、X4c、X4d）の乗算結果は、以下の通り、これらの値を得るベクトル（Y4a、Y4b、Y4c、Y4d）である。
Y4a = Mu4(1,1)＊X4a + Mu4(1,2)＊X4b + Mu4(1,3)＊X4c + Mu4(1,4)＊X4d 
Y4b = Mu4(2,1)＊X4a + Mu4(2,2)＊X4b + Mu4(2,3)＊X4c + Mu4(2,4)＊X4d 
Y4c = Mu4(3,1)＊X4a + Mu4(3,2)＊X4b + Mu4(3,3)＊X4c + Mu4(3,4)＊X4d 
Y4d = Mu4(4,1)＊X4a + Mu4(4,2)＊X4b + Mu4(4,3)＊X4c + Mu4(4,4)＊X4d 
ここで、「+」は有限フィールドの加算を意味し、「＊」は乗算を意味する。Mu4の要素は、4つの上式の値を求めるために必要である計算量が最小になるように選択される。従って、定数「1」による乗算の数（以降「恒等式」を意味する）は、できるだけ大きくなるように選択されている。
【００３０】
次に、データは、値X5a、X5b、X5c、X5d（値X5を形成する）を求めるために、サブキーRAの第２部分RALに混合される。
【００３１】
次に、これらの値X5a〜X5dの各々は、値X6a、X6b、X6c、X6d（値X6を形成する）を求めるために、代替ブロック（sbox）に適用される。これらの値は、新しい値X7a、X7b、X7c、X7d（値X7を形成する）を求めるために、サブキーRAの第１部分RAHに混合される。
【００３２】
次に、これらの値のX7a、X7b、X7c、X7dは、図２の箇所で記載されているように、アセンブラモジュールASの中で出力データX7を形成するために組立てられる。このデータは、図１のブロックf32の出力データX7に対応している。
【００３３】
暗号化プロセスの間、メインキーRは、数個のサブキー、モジュールMODあたり1つに分割される。図３の例では、モジュールMOD1と第２サブキーRA2とで組み合わせて使用される第１サブキーRA1は、モジュールMOD2と組み合わせて使用される。
【００３４】
データY及びキーRに基づいてデータXを求めるために、図３に関連して記載されているのと同様のプロセスは、サブキーが逆順で生成されたこととは唯一の相違点で適用される。次に、サブキーRA2は第１モジュールMOD1に適用され、サブキーRA1は第２モジュールMOD2コードに適用される。
【００３５】
本発明の概略的な原理によると、モジュールMODが接続された逐次の数は、2つのモジュールに限定されない。有効な堅牢性を達成するために、経験から得た技術では、9ラウンドが暗号化プロセスとして適格な結果を得るために最適であることを示している。更に堅牢性を得るために、この数を12以上に拡張できる。
【００３６】
図４は128ビット長データ処理のために設計されたモジュールMOD64の一実施例について示している。入力X0LL及びX0LRは、出力値X1Lを形成するために混合要素MXの中で互いに混合される、そして、同じ方法で、値X0RL及びX0RRは、値X1Rを形成するために互いに混合される。
【００３７】
次の工程は、サブキーRAを使用するだけでなく、2つの32ビット出力X7L及びX7Rと2つの32ビット入力X1L及びX1Rを有するレイヤf64を示している。このブロックの詳細な記述は、図７に言及して示される（以下を参照のこと）。
【００３８】
これらの出力の各々は、同じ混合要素MXの中でモジュールMOD64の2つの入力データと混合される。我々の実施例では、出力値X7Lはそれぞれ入力X0LL及びX0LRに混合され、出力値X7Rはそれぞれ入力X0RI及びX0RRと混合される。クロスの構成で出力値X7LをX0LL及びX0RRと混合するように、他の混合の組合せもまた可能である。
【００３９】
図５はオルトモーフィズム関数の一実施例を図示している。入力データはZIで示され、出力データはZOで示される。データ長は本機能のために検討すべき問題ではない。入力データZIは、最初に、分割モジュールSPで同じサイズの2つの値ZL及びZRに分割される。次に、2つの値は、いわゆるMX混合要素で混合され、要素の出力はアセンブラユニットASに適用される。他方の分割値ZRは、変更なくアセンブラモジュールASに直接適用される。このモジュールは、出力値ZOを形成するために、2つの入力を含み、これらのデータを結合する。このモジュールは、分割モジュールSPとは逆に動作する。この実施例の特殊性は、アセンブラモジュールの入力が分割モジュールSPの出力に対してクロスされるということである。分割モジュールSPの右出力ZRは、アセンブラモジュールASの左入力に適用され、そして、分割モジュールSPの左出力ZLは、分割モジュールSPのもう片方の出力に混合された後に、アセンブラモジュールASの右入力に適用される。
【００４０】
代替ボックスに関する限り、本機能を実現するための異なる可能性が存在する。我々は以前に、定数テーブルに基づく唯一の方法を説明した。テーブル・サイズを削減する最初の工程は、入力を分割して、はるかに小さいテーブルにこの部分を適用することである。
【００４１】
図３の実施例は、代替ボックスが8ビットデータ長で動作し、その結果、256の定数テーブルを埋め込むことを示している。
【００４２】
場合によっては、特にメモリ量が問題である場合に他の代替手段が求められる。図６及び図９を参照して、そのような代替手段を説明する。
【００４３】
図３は、この代替ボックスのサブシステムCboxを示しており、このサブシステムは、1つの入力Cが2つ入力CL及びCRと２つの出力CL'及びCR'に分割されることを含む。
【００４４】
このサブシステムの核心は、2（n/2）の要素（それぞれn/2ビットであり、nが入力値Cの長さである）の定数テーブルを含むモジュールTAである。
【００４５】
8ビットの長さを持つ入力のために、定数テーブルは16（24）要素（それぞれ4ビット長）を含む。各要素がユニークな値を有するのを考慮に入れて、これらの要素はランダムに生成される。
【００４６】
図９は、代替ボックスを構築するために、モジュールCboxを使用する方法を記述している。入力値CIは、初めに2つの部品CL1及びCR1に分割され、図３を参照して説明したように、第１モジュールCbox1に適用される。前記のモジュールCbox1の出力は、次のモジュールCbox2に送られる。第１モジュールの出力の1つ（この場合第２モジュールCVBox2に適用する前のCL1'）は、オルトモーフィズム関数ORに与えられる。
【００４７】
代替ボックスの実行では、一般的に、それぞれ異なった定数テーブルTAを有する少なくとも2つのサブシステムCboxを使用する。図示された例では、代替ボックスは、3つのサブシステムCboxを使用して作成され、本実施例によると、最後のサブシステムの出力はオルトモーフィズム関数ORを持たない。
【００４８】
図７は、64ビット長データのために設計された、図３に記載されていた実施例の代替手段である。32のビットのために設計された構造は、データの64ビットを続行するように大半は複製される。入力データX1は、8ビット長（X1a〜X1h）の要素でベクトルに分割されて、図３の箇所で記載されているのと同じ方法で処理される。主な相違点は、256の要素を有する有限フィールドの8×8つの要素の正方行列である拡散ボックスMu8にある。行列の要素は、Mu8(i、j)で示される（但し、iは行インデックスを意味し、jは列インデックスを意味する）。入力ベクトル（X3a、…、X3h）のために、行列Mu8による乗算は、以下の方法で、出力ベクトル（Y3a、…、Y3h）を与える（「+」は加算であり、「＊」は有限フィールドの乗算である）。
Y3a = Mu8(1,1)＊X3a + Mu8(1,2)＊X3b + Mu8(1,3)＊X3c + Mu8(1,4)＊X3d + Mu8(1,5)＊X3e + Mu8(1,6)＊X3f + Mu8(1,7)＊X3g + Mu8(1,8)＊X3h; 
Y3b = Mu8(2,1)＊X3a + Mu8(2,2)＊X3b + Mu8(2,3)＊X3c + Mu8(2,4)＊X3d + Mu8(2,5)＊X3e + Mu8(2,6)＊X3f + Mu8(2,7)＊X3g + Mu8(2,8)＊X3h; 
Y3c = Mu8(3,1)＊X3a + Mu8(3,2)＊X3b + Mu8(3,3)＊X3c + Mu8(3,4)＊X3d + Mu8(3,5)＊X3e + Mu8(3,6)＊X3f + Mu8(3,7)＊X3g + Mu8(3,8)＊X3h; 
Y3d = Mu8(4,1)＊X3a + Mu8(4,2)＊X3b + Mu8(4,3)＊X3c + Mu8(4,4)＊X3d + Mu8(4,5)＊X3e + Mu8(4,6)＊X3f + Mu8(4,7)＊X3g + Mu8(4,8)＊X3h; 
Y3e = Mu8(5,1)＊X3a + Mu8(5,2)＊X3b + Mu8(5,3)＊X3c + Mu8(5,4)＊X3d + Mu8(5,5)＊X3e + Mu8(5,6)＊X3f + Mu8(5,7)＊X3g + Mu8(5,8)＊X3h; 
Y3f = Mu8(6,1)＊X3a + Mu8(6,2)＊X3b + Mu8(6,3)＊X3c + Mu8(6,4)＊X3d + Mu8(6,5)＊X3e + Mu8(6,6)＊X3f + Mu8(6,7)＊X3g + Mu8(6,8)＊X3h; 
Y3g = Mu8(7,1)＊X3a + Mu8(7,2)＊X3b + Mu8(7,3)＊X3c + Mu8(7,4)＊X3d + Mu8(7,5)＊X3e + Mu8(7,6)＊X3f + Mu8(7,7)＊X3g + Mu8(7,8)＊X3h; 
Y3h = Mu8(8,1)＊X3a + Mu8(8,2)＊X3b + Mu8(8,3)＊X3c + Mu8(8,4)＊X3d + Mu8(8,5)＊X3e + Mu8(8,6)＊X3f + Mu8(8,7)＊X3g + Mu8(8,8)＊X3h; 
【００４９】
図８は、モジュールMOD64で2ラウンドの実行を使用した完全なプロセスについて示している。分割モジュールSPは、128ビット長の入力データXを4つの部品、即ち、X0LL1、X0LR1、X0RL1及びX0RR1に分割する（値X0を形成する）。そして、モジュールMOD64-1の結果としての2つの部品は、次のモジュールMOD64-2に入力として使用される前のオルトモーフィズム関数ORに適用される。
【００５０】
モジュールMOD64の出力に関するオルトモーフィズム関数ORの位置は、決定的ではない。本方法の実施次第で、右側の2つの出力又は左側の2つの出力を選択できる。
【００５１】
出力Yは、これらの出力におけるオルトモーフィズム機能ORなしで、最後のモジュールMOD64から直接求められる。
【００５２】
2つ以上のモジュールMOD64が使用される場合に備えて、オルトモーフィズム関数ORは、各モジュールMOD64の間に置かれる。たとえ好適な実施例でオルトモーフィズム関数ORの位置がモジュール番号に関係なく同じであっても、別の実施例では、これらオルトモーフィズム関数ORの位置は、モジュールMOD64の異なる出力に接続されるよう変更されることができる。
【図面の簡単な説明】
【００５３】
【図１】図１は64ビットバージョンのメインモジュールのブロック図を示す。
【図２】図２は2つのモジュールの一例を含む主なプロセスを示す。
【図３】図３は64ビットバージョンのメインモジュールの内部を示す。
【図４】図４は128ビットバージョンのメインモジュールのブロック図を示す。
【図５】図５はオルトモーフィズム関数のブロック図を示す。
【図６】図６は代替ボックスの生成のためのサブシステムを示す。
【図７】図７は128ビットバージョンのメインモジュールの内部を示す。
【図８】図８は128ビットバージョンにおける2つのモジュールの一例を含む主なプロセスを示す。
【図９】図９は代替ボックスの別のバージョンを示す。
【図１】
2007527028.tif 000003
【図２】
2007527028.tif 000004
【図３】
2007527028.tif 000005
【図４】
2007527028.tif 000006
【図５】
2007527028.tif 000007
【図６】
2007527028.tif 000008
【図７】
2007527028.tif 000009
【図８】
2007527028.tif 000010
【手続補正書】
【提出日】平成18年1月19日(2006.1.19)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】  ブロックf32の出力X7は、2つのエントリX0L及びX0Rに接続される2つの混合ブロックMXに適用される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】変更
【補正の内容】
【００３８】  これらの出力の各々は、同じ混合要素MXの中でモジュールMOD64の2つの入力データと混合される。我々の実施例では、出力値X7Lはそれぞれ入力X0LL及びX0LRに混合され、出力値X7Rはそれぞれ入力X0RL及びX0RRと混合される。クロスの構成で出力値X7LをX0LL及びX0RRと混合するように、他の混合の組合せもまた可能である。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】 図６は、この代替ボックスのサブシステムCboxを示しており、このサブシステムは、1つの入力Cが2つ入力CL及びCRと２つの出力CL'及びCR'に分割されることを含む。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】  図９は、代替ボックスを構築するために、モジュールCboxを使用する方法を記述している。入力値CIは、初めに2つの部品CL1及びCR1に分割され、図３を参照して説明したように、第１モジュールCbox1に適用される。前記のモジュールCbox1の出力は、次のモジュールCbox2に送られる。第１モジュールの出力の1つ（この場合第２モジュールCVbox2に適用する前のCL1'）は、オルトモーフィズム関数ORに与えられる。
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2007527028.tif 000011
【国際調査報告】
2007527028.tif 000012
2007527028.tif 000013