(57)【特許請求の範囲】
【請求項１】
バイトのブロックの複数のバイトのそれぞれに対してガロア体乗算演算を実行するステップを有する方法であって、
前記ガロア体乗算演算を実行するステップは、
第１の結果を提供するため、すべての偶数ポジションバイトがゼロに設定された前記バイトのブロックに対してＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）ミックスカラム変換を実行するステップと、
第２の結果を提供するため、すべての奇数ポジションバイトがゼロに設定された前記バイトのブロックに対して前記ＡＥＳミックスカラム変換を実行するステップと、
前記ガロア体乗算演算の結果を提供するため、前記第１の結果と前記第２の結果とを合成するステップと、
を有する方法。
【請求項２】
前記ガロア体乗算演算における有限体は、還元多項式０ｘ１１Ｂにより規定される、請求項１記載の方法。
【請求項３】
前記ＡＥＳミックスカラム変換を実行するステップは、ＡＥＳＤＥＣＬＡＳＴラウンド命令と、その後にＡＥＳＥＮＣラウンド命令とを実行することを含む、請求項１記載の方法。
【請求項４】
前記ＡＥＳＤＥＣＬＡＳＴラウンド命令により実行される変換系列は、Ｉｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ変換と、Ｉｎｖｅｒｓｅ  Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ変換とを含み、
前記ＡＥＳＥＮＣラウンド命令により実行される変換系列は、Ｓｈｉｆｔ  Ｒｏｗｓ変換と、Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ変換と、ミックスカラム変換とを含む、請求項３記載の方法。
【請求項５】
第３の結果を提供するため、前記第１の結果と前記第２の結果とに対して排他的ＯＲ（ＸＯＲ）演算を実行するステップと、
第４の結果を提供するため、前記バイトのブロックにおける各４バイトブロックの下位の２バイトと上位の２バイトとをスイッチするため、前記バイトのブロックに格納されているデータをシャッフルするステップと、
前記第３の結果と前記第４の結果とに対してＸＯＲ演算を実行するステップと、
をさらに有する、請求項１記載の方法。
【請求項６】
前記ＡＥＳミックスカラム変換は、４バイトブロックシーケンスｄ，ｃ，ｂ，ａを他の４バイトブロックシーケンス３ａ＋ｂ＋ｃ＋２ｄ，ａ＋ｂ＋２ｃ＋３ｄ，ａ＋２ｂ＋３ｃ＋ｄ，２ａ＋３ｂ＋ｃ＋ｄに変換する、請求項１記載の方法。
【請求項７】
前記合成は、レベル６ＲＡＩＤシステムのＱシンドロームを計算するのに利用される、請求項１記載の方法。
【請求項８】
バイトのブロックの複数のバイトのそれぞれに対してガロア体乗算演算をパラレルに実行するための複数の命令を格納するメモリと、
実行ユニットを含むプロセッサと、
を有する装置であって、
前記命令は、前記実行ユニットにより実行されると、前記実行ユニットが、第１の結果を提供するため、すべての偶数ポジションバイトがゼロに設定された前記バイトのブロックに対してＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）ミックスカラム変換を実行し、第２の結果を提供するため、すべての奇数ポジションバイトがゼロに設定された前記バイトのブロックに対して前記ＡＥＳミックスカラム変換を実行し、前記ガロア体乗算演算の結果を提供するため、前記第１の結果と前記第２の結果とを合成する順序により前記メモリに格納される装置。
【請求項９】
前記ガロア体乗算演算における有限体は、還元多項式０ｘ１１Ｂにより規定される、請求項８記載の装置。
【請求項１０】
前記実行ユニットは、ＡＥＳＤＥＣＬＡＳＴラウンド命令と、その後にＡＥＳＥＮＣラウンド命令とを実行することによって、前記ＡＥＳミックスカラム変換を実行する、請求項８記載の装置。
【請求項１１】
前記ＡＥＳＤＥＣＬＡＳＴラウンド命令により実行される変換系列は、Ｉｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ変換と、Ｉｎｖｅｒｓｅ  Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ変換とを含み、
前記ＡＥＳＥＮＣラウンド命令により実行される変換系列は、Ｓｈｉｆｔ  Ｒｏｗｓ変換と、Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ変換と、ミックスカラム変換とを含む、請求項１０記載の装置。
【請求項１２】
前記ＡＥＳミックスカラム変換は、４バイトブロックシーケンスｄ，ｃ，ｂ，ａを他の４バイトブロックシーケンス３ａ＋ｂ＋ｃ＋２ｄ，ａ＋ｂ＋２ｃ＋３ｄ，ａ＋２ｂ＋３ｃ＋ｄ，２ａ＋３ｂ＋ｃ＋ｄに変換する、請求項８記載の装置。
【請求項１３】
前記合成は、レベル６ＲＡＩＤシステムのＱシンドロームを計算するのに利用される、請求項８記載の装置。
【請求項１４】
関連する情報を有するマシーンアクセス可能な記憶媒体であって、
前記情報は、アクセスされるとマシーンにバイトのブロックの複数のバイトのそれぞれに対してガロア体乗算演算を実行させ、
前記ガロア体乗算演算の実行は、
第１の結果を提供するため、すべての偶数ポジションバイトがゼロに設定された前記バイトのブロックに対してＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）ミックスカラム変換を実行するステップと、
第２の結果を提供するため、すべての奇数ポジションバイトがゼロに設定された前記バイトのブロックに対して前記ＡＥＳミックスカラム変換を実行するステップと、
前記ガロア体乗算演算の結果を提供するため、前記第１の結果と前記第２の結果とを合成するステップと、
を有する記憶媒体。
【請求項１５】
前記ガロア体乗算演算における有限体は、還元多項式０ｘ１１Ｂにより規定される、請求項１４記載の記憶媒体。
【請求項１６】
前記ＡＥＳミックスカラム変換を実行するステップは、ＡＥＳＤＥＣＬＡＳＴラウンド命令と、その後にＡＥＳＥＮＣラウンド命令とを実行することを含む、請求項１４記載の記憶媒体。
【請求項１７】
前記ＡＥＳＤＥＣＬＡＳＴラウンド命令により実行される変換系列は、Ｉｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ変換と、Ｉｎｖｅｒｓｅ  Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ変換とを含み、
前記ＡＥＳＥＮＣラウンド命令により実行される変換系列は、Ｓｈｉｆｔ  Ｒｏｗｓ変換と、Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ変換と、ミックスカラム変換とを含む、請求項１４記載の記憶媒体。
【請求項１８】
プロセッサと、
前記プロセッサによりアクセス可能であって、複数の命令を格納する記憶装置と、
を有するシステムであって、
前記命令の少なくとも１つは、変換シーケンスを実行し、前記プロセッサにより実行されると、前記プロセッサに、第１の結果を提供するため、すべての偶数ポジションバイトがゼロに設定された前記バイトのブロックに対してＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）ミックスカラム変換を実行させ、第２の結果を提供するため、すべての奇数ポジションバイトがゼロに設定された前記バイトのブロックに対して前記ＡＥＳミックスカラム変換を実行させ、前記ガロア体乗算演算の結果を提供するため、前記第１の結果と前記第２の結果とを合成させる順序により構成されるシステム。
【請求項１９】
前記ガロア体乗算演算における有限体は、還元多項式０ｘ１１Ｂにより規定される、請求項１８記載のシステム。
【請求項２０】
ＡＥＳＤＥＣＬＡＳＴラウンド命令と、その後にＡＥＳＥＮＣラウンド命令とが、前記ＡＥＳミックスカラム変換を実行する、請求項１８記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）に関し、特にレベル６ＲＡＩＤに関する。
【背景技術】
【０００２】
ＲＡＩＤは、リライアビリティ、キャパシティ又はパフォーマンスのため、複数の物理的ハードディスクドライブを論理的ドライブに合成する。このため、複数の物理的ハードディスクドライブの代わりに、オペレーティングシステムは、単一の論理的ドライブを参照する。当業者に周知なように、ＲＡＩＤシステムの物理的ハードディスクドライブにデータを分散させるため、ＲＡＩＤレベルと呼ばれる多数の標準的な方法が存在する。
【０００３】
例えば、レベル０ＲＡＩＤシステムでは、データをブロックに分割し、各ブロックを別々のハードディスクドライブに書き込むことによって、データが物理的ハードディスクドライブアレイにストライピングされる。入出力（Ｉ／Ｏ）パフォーマンスは、多数のハードディスクドライブにロードを分散させることによって向上する。レベル０ＲＡＩＤはＩ／Ｏパフォーマンスを向上させるが、１つのハードディスクドライブが故障した場合にはすべてのデータが失われるため、冗長性を提供しない。
【０００４】
レベル５ＲＡＩＤシステムは、データとパリティ情報との両方を少なくとも３つのハードディスクドライブにストライピングすることによって、高いレベルの冗長性を提供する。データストライピングは、故障した場合のリカバリパスを提供するため、分散化されたパリティと合成される。
【０００５】
レベル６ＲＡＩＤ（ＲＡＩＤ−６）は、２つのディスクの故障からのリカバリを可能にすることによって、レベル５ＲＡＩＤシステムよりさらに高いレベルの冗長性を提供する。レベル６ＲＡＩＤシステムでは、ＰシンドロームとＱシンドロームと呼ばれる２つのシンドロームが、データに対して生成され、ＲＡＩＤシステムのハードディスクドライブに格納される。
【０００６】
Ｐシンドロームは、ストライプにおけるデータのパリティ情報を計算することによって生成される（データブロック（ストリップ）、Ｐシンドロームブロック及びＱシンドロームブロック）。Ｑシンドロームの生成は、ガロア体（Ｇａｌｏｉｓ  Ｆｉｅｌｄ）乗算を必要とし、ディスクドライブの故障のイベントでは複雑である。ガロア体（有限体）の計算ＧＦ（２８）は、還元多項式ｘ８＋ｘ４＋ｘ３＋ｘ＋１（すなわち、１１Ｂ（１６進法による））を介し定義される。
【０００７】
ディスクリカバリ処理中に実行されるデータ、Ｐシンドローム及び／又はＱシンドロームをリカバリするための再生成方式は、ガロア体乗算と逆演算との両方を必要とする。
【０００８】
例えば、ｎ個のデータディスクＤ０，Ｄ１，Ｄ２，．．．，Ｄｎ−１（ｎ≦２５５）を備えたＲＡＩＤアレイでは、２つの数量、すなわち、パリティ（Ｐ）とリードソロモンコード（Ｑ）とが、２つのディスクの消失からリカバリするために必要とされる。
【０００９】
Ｐ及びＱは、
【００１０】
【数１】
0005301675.tif 000002
により定義される。ここで、ｇ＝｛０２｝は、ガロア体（有限体）ＧＦ（２８）の要素であり、“＋”及び“・”はこの体における演算である。
【００１１】
ＲＡＩＤ−６システムに関する計算上のボトルネックは、Ｑを計算するコストである。この困難さは、従来のプロセッサ（ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））はガロア体（有限体）ＧＦ（２８）における計算についてパフォーマンスが低いという事実から生じている。従って、典型的には、パフォーマンスを向上させるため、テーブルルックアップベースアルゴリズムが利用される。テーブルルックアップの利用は、本来的に低速なシリアルプロセスをもたらす。
【図面の簡単な説明】
【００１２】
請求される主題の各実施例の特徴は、同様の数字が同様の部分を示す図面を参照して以下の詳細な説明を参照することにより明らかになる。
【図１】図１は、各ストライプがハードディスクアレイにストライピングされるデータブロック（ストリップ）、Ｐシンドローム及びＱシンドロームを有する複数のストライプを示すＲＡＩＤ−６アレイの実施例を示すブロック図である。
【図２】図２は、汎用プロセッサにおいてＡＥＳ暗号化及び解読を実行するための命令を有するシステムのブロック図である。
【図３】図３は、図１に示されるプロセッサの実施例のブロック図である。
【図４】図４は、本発明の原理によるガロア体乗算を実行する方法の実施例のフローチャートである。
【図５Ａ】図５Ａは、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令の利用を示す。
【図５Ｂ】図５Ｂは、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令の利用を示す。
【図５Ｃ】図５Ｃは、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令の利用を示す。
【図６Ａ】図６Ａは、ガロア体乗算が複数の１６バイトデータブロック上で同時に実行されることを可能にするサンプルコードである。
【図６Ｂ】図６Ｂは、ガロア体乗算が複数の１６バイトデータブロック上で同時に実行されることを可能にするサンプルコードである。
【図６Ｃ】図６Ｃは、ガロア体乗算が複数の１６バイトデータブロック上で同時に実行されることを可能にするサンプルコードである。  以下の詳細な説明は請求された主題の例示的な実施例を参照して進められるが、当業者には多数の代替、改良及び変更が明らかであろう。従って、請求された主題は広くみなされるべきであり、添付した請求項に与えられるものによってのみ規定されるものである。
【発明を実施するための形態】
【００１３】
図１は、各ストライプがハードディスク１５０のアレイ全体にストライピングされたデータブロック（ストリップ）、Ｐシンドローム及びＱシンドロームを含む複数のストライプを示すＲＡＩＤ−６アレイ１００の実施例を示すブロック図である。図示される実施例では、ＲＡＩＤアレイ１００は、５つのハードディスク１５０を有する。ラウンドロビン方式によりメンバーのハードディスク全体に分散されたＰ及びＱシンドロームによるブロックレベルのストライピングを用いて、データがＲＡＩＤ−６アレイに書き込まれる。ブロックにセグメント化されたファイルなどのシーケンシャルデータが、データディスク１５０の３つのデータブロック１０２，１０４，１０６に格納されるブロックの１つを有するホリゾンタルストライプ０などのストライプ全体に分散されてもよい。一実施例では、ストライプの各ブロックには５１２バイトがある。
【００１４】
ホリゾンタルストライプ０のデータブロック１０２，１０４，１０６について計算されたＰ及びＱシンドロームは、ストライプ０のＰブロック１３０とＱブロック１３２にそれぞれ格納される。Ｐ及びＱシンドロームブロックは、各ストライプの異なるハードディスク１５０に格納される。
【００１５】
Ｐシンドロームは、排他的ＯＲ（ＸＯＲ）演算を実行することにより生成されてもよい。ＸＯＲは、オペランドの１つのみが“１”の論理値を有する場合に限って、論理値“１”を生じさせる２つのオペランドに対する論理演算である。例えば、“１１００１０１０”の値を有する第１オペランドと、“１０００００１１”の値を有する第２オペランドとのＸＯＲは、“０１００１００１”の値を有する結果を提供する。第１オペランドを格納するハードディスクが故障した場合、第１オペランドは、第２オペランドとこの結果とに対してＸＯＲ演算を実行することによってリカバリされてもよい。
【００１６】
Ｐシンドロームは、
【００１７】
【数２】
0005301675.tif 000003
の（ＸＯＲ）演算を用いてストライプ全体に対して計算されるデータ（Ｄ）のシンプルなパリティである。ｎ個のデータディスクを有するシステムでは、Ｐシンドロームの生成は、以下の式１により表される。
【００１８】
【数３】
0005301675.tif 000004
Ｑシンドロームの計算は、ガロア体多項式（ｇ）を用いた乗算（・）を要求する。極めて高いパフォーマンスにより８ビット（バイト）ガロア体多項式に対して、算出演算が実行される。多項式は、有限個の定数と変数とが加算、減算、乗算及び非負の整数の指数のみを用いて結合された式である。１つの原始多項式は、ｘ８＋ｘ４＋ｘ３＋ｘ＋１である。多項式に対するガロア体（ＧＦ）演算はまた、ＧＦ（２８）計算とも呼ばれる。ｎ個のデータディスクを有するシステムでは、Ｑシンドロームの生成は、以下の式２により表される。
【００１９】
【数４】
0005301675.tif 000005
バイト単位のガロア体演算は、ブロックの各バイトがその他のバイトから計算上独立しているストライプベースにより実行される。バイト単位のガロア体演算は、２５５（２８−１）個のデータディスクまで収容可能である。
【００２０】
Ｑシンドロームの生成のパフォーマンスは、以下の式３により表されるように、ＱをそれのＨｏｒｎｅｒ表現により表すことによって向上されてもよい。
【００２１】
【数５】
0005301675.tif 000006
従って、２つの演算がＱを計算するのに用いられる。
【００２２】
【数６】
0005301675.tif 000007
式２に示される計算とは対照的に、式３の計算はＧＦ２５６の一般的な乗算を必要としない。その代わりに、乗算はｇ｛０２｝によるものである。１バイトについて、ｇ＝｛０２｝との乗算は、値を左に１ビットだけシフトすることによって実行可能である。その後、条件付の排他的ＯＲ（ＸＯＲ）演算が、乗算の結果と、当該結果の最上位ビットの状態に基づく他の値とに対して実行される。一時に４バイトをパラレルに計算するため、｛０２｝による乗算は、４バイトに格納されている値を左に１ビットだけシフトし、後述されるようにバイト毎に４つの条件付ＸＯＲ演算を実行することによって実行される。
【００２３】
【数７】
0005301675.tif 000008
“＆０ｘｆｅｆｅｆｅｆｅ”は、所望されないキャリを回避するためのマスクである。しかしながら、条件付ＸＯＲ演算はあまり効率的でない。その計算時間は、４バイトの代わりに８バイトをパラレルに処理し、８バイトのそれぞれにおける最上位ビット（ＭＳＢ）に基づくマスクを用いることによって、低減されてもよい。
【００２４】
ＲＡＩＤ−６アルゴリズムのＱシンドロームの計算は、Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄ（ＦＩＰＳ）１９７としてＮａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｔａｎｄａｒｄｓ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ（ＮＩＳＴ）により公表されたＡｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）のために用いられるＧＦ（２８）の同一表現を利用する。ＡＥＳは、情報を暗号化及び解読可能なシンメトリックブロック暗号化である。
【００２５】
一実施例では、ＧＦ（２８）を用いるＡＥＳ命令は、本発明の原理によりＲＡＩＤレベル６に対して要求されるＱシンドロームを計算するために、ガロア体乗算演算を実行するため用いられる。
【００２６】
図２は、汎用プロセッサにおいてＡＥＳ暗号化及び解読を実行するための命令を含むシステム２００のブロック図である。システム２００は、プロセッサ２０１と、ＭＣＨ（Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ  Ｈｕｂ）又はＧＭＣＨ（Ｇｒａｐｈｉｃｓ  Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ  Ｈｕｂ）２０２と、入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）２０４とを有する。ＭＣＨ２０２は、プロセッサ２０１とメモリ２０８との間の通信を制御するメモリコントローラ２０６を有する。プロセッサ２０１とＭＣＨ２０２とは、システムバス２１６を介し通信する。
【００２７】
プロセッサ２０１は、シングルコアＩｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）  ＩＶプロセッサ、シングルコアＩｎｔｅｌ  Ｃｅｌｅｒｏｎプロセッサ、Ｉｎｔｅｌ（登録商標）ＸＳｃａｌｅプロセッサ、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）  Ｄ、Ｉｎｔｅｌ（登録商標）Ｘｅｏｎ（登録商標）プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）Ｄｕｏプロセッサなどのマルチコアプロセッサ、又は他の何れかのタイプのプロセッサの何れかであってもよい。
【００２８】
メモリ２０８は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｉｚｅｄ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＤＲ２（Ｄｏｕｂｌｅ  Ｄａｔｅ  Ｒａｔｅ  ２）ＲＡＭ、ＲＤＲＡＭ（Ｒａｍｂｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）又は他の何れかのタイプのメモリであってもよい。
【００２９】
ＩＣＨ２０４は、ＤＭＩ（Ｄｉｒｅｃｔ  Ｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）などの高速チップ・ツー・チップインターコネクト２１４を用いてＭＣＨ２０２に接続されてもよい。ＤＭＩは、２つの一方向のレーンを介し２ギガビット／秒の同時伝送レートをサポートする。
【００３０】
ＩＣＨ２０４は、ＲＡＩＤ１００（図１）などの少なくとも１つの記憶装置２１２との通信を制御するためのストレージＩ／Ｏコントローラ２１０を有してもよい。ＩＣＨ２０４は、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ（ＳＡＳ）やＳｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）などのシリアルストレージプロトコルを用いて、ストレージプロトコルインターコネクト２１８を介し記憶装置２１２と通信してもよい。
【００３１】
プロセッサ２０１は、ＡＥＳ暗号化及び解読処理を実行するＡＥＳ機能２０３を有する。ＡＥＳ機能２０３は、メモリ２０８及び／又は記憶装置２１２に格納される情報を暗号化又は解読するのに利用される。
【００３２】
暗号化は、秘密鍵（暗号鍵）を用いて“平文”と呼ばれる理解できるデータを“暗号文”と呼ばれる理解できない形式に変換する一連の変換処理を実行する。暗号化における変換処理は、（１）ラウンド鍵（暗号鍵から導出される値）を排他的ＯＲ（ＸＯＲ）演算を用いた状態（２次元バイトアレイ）に加算し、（２）非線形バイト置換テーブル（Ｓ−Ｂｏｘ）を用いて当該状態を処理し、（３）状態の最後の３列を異なるオフセットだけ循環的にシフトし、（４）状態のすべての列を抽出し、ミックスカラム変換と呼ばれる新たな列を生成するため、それらのデータを合成する（互いに独立して）、ことを含む。これら４つの変換処理は、後述される単一のＡＥＳ命令により実行される。
【００３３】
ミックスカラム変換では、状態のすべての列からのデータが、新たな列を生成するため合成される（互いに独立して）。ミックスカラムは、１２８ビット（１６バイト）入力の４×４マトリックス表現の列上で実行される１２８ビット→１２８ビット変換である。当該変換は、各列をＡＥＳ−ガロア体２５６の係数を有する３次の多項式として扱う。状態の４×４のマトリックス表現の各列は、多項式ａ（ｘ）＝｛０３｝ｘ３＋｛０１｝ｘ２＋｛０１｝ｘ＋｛０２｝と乗算され、ｘ４＋１とｒｅｄｕｃｅｄ  ｍｏｄｕｌｏされる。１２８ビットから１２８ビットへのミックスカラム変換は、１６バイトから１６バイトへの変換である。例えば、１６バイト（状態）は、［ｐ，ｏ，ｎ，ｍ，ｉ，ｋ，ｊ，ｉ，ｈ，ｇ，ｆ，ｅ，ｄ，ｃ，ｂ，ａ］として示されてもよく、ここで、ａが最下位バイトであり、状態は４つの列を有し、各列は３２ビットダブルワード（４バイト）である。
【００３４】
ミックスカラム変換は、ＧＦ（２８）計算（モジュロｘ８＋ｘ４＋ｘ３＋ｘ＋１）に基づくマトリックス乗算である。従って、ミックスカラム変換は、後述されるようにレベル６ＲＡＩＤシステムのためのＱシンドロームを計算するため、ガロア体乗算機能２５０により利用されてもよい。ミックスカラム乗算を利用するため、ミックスカラム変換は、ＡＥＳ命令から隔離される。
【００３５】
ミックスカラム変換は、状態の４つの列に対して個別に実行される。４つの列は、（１）［ｐ，ｏ，ｎ，ｍ］、（２）［ｉ，ｋ，ｊ，ｉ］、（３）［ｈ，ｇ，ｆ，ｅ］及び（４）［ｄ，ｃ，ｂ，ａ］である。
【００３６】
［ｐ，ｏ，ｎ，ｍ，ｉ，ｋ，ｊ，ｉ，ｈ，ｇ，ｆ，ｅ，ｄ，ｃ，ｂ，ａ］に対するミックスカラム変換の結果は、テーブル１に示されるように、［ｐ’，ｏ’，ｎ’，ｍ’，ｉ’，ｋ’，ｊ’，ｉ’，ｈ’，ｇ’，ｆ’，ｅ’，ｄ’，ｃ’，ｂ’，ａ’］である。
【００３７】
【表１】
0005301675.tif 000009
テーブル１に示されるように、４つの列のそれぞれに対して同一の処理が実行される。
【００３８】
従って、これらの処理が各ダブルワード（列）について同様のものであると仮定すると、４つの列の１つに対するミックスカラム変換を記述するため、簡単な表記が利用されてもよい（例えば、最下位ダブルワードであるカラム４など）。
【００３９】
カラム４について、ダブルワード（ｄｗｏｒｄ）＝［ｄ，ｃ，ｂ，ａ］であり、簡単な表記によるミックスカラム変換は、以下に示されるように表記される。
【００４０】
【数８】
0005301675.tif 000010
図３は、図２に示されるプロセッサ２０１の実施例のブロック図である。プロセッサ２０１は、レベル１（Ｌ１）命令キャッス３０２から受け取ったプロセッサ命令を復号化するためのフェッチ復号化ユニット３０６を有する。プロセッサ命令を実行するため用いられるデータは、レジスタファイル３０８に格納されてもよい。一実施例では、レジスタファイル３０８は、ＡＥＳ命令により使用されるデータを格納するため、ＡＥＳ命令により用いられる複数の１２８ビットレジスタを有する。
【００４１】
一実施例では、レジスタファイル３０８は、Ｓｔｒｅａｍｉｎｇ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（ＳＩＭＤ））Ｅｘｔｅｎｓｉｏｎ（ＳＳＥ）命令セットを有するＩｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）  ＭＭＸプロセッサに備えられている１２８ビットＭＭＸレジスタに類似した１２８ビットレジスタ群である。ＳＩＭＤプロセッサでは、１つの１２８ビットブロックが一度にロードされることによって、データが１２８ビットブロックで処理される。
【００４２】
フェッチ復号化ユニット３０６は、Ｌ１命令キャッシュ３０２からマクロ命令をフェッチし、マクロ命令を復号化し、マイクロコードＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３１４に格納されるマイクロ処理（μｏｐｓ）と呼ばれるシンプルな処理に分割する。パイプライン化された実行ユニット３１０が、マイクロ処理をスケジューリング及び実行する。図示された実施例では、実行ユニット３１０のＡＥＳ機能２０３は、ＡＥＳ命令のためのマイクロ命令を含む。処理準備されたデータがある場合、プロセッサ（ＣＰＵ）がすべてのサイクルにおいて命令を送ってもよいように、ＡＥＳ命令は完全にパイプライン化される。リタイアメントユニット３１２は、実行されたＡＥＳ命令の結果をレジスタ又はメモリに書き込む。ＡＥＳ命令により用いられるラウンドキー３１６は、Ｌ１データキャッシュ３０４に格納され、ＡＥＳ命令の何れかを実行するためマイクロ処理による利用のため、実行ユニット３１０にロードされてもよい。
【００４３】
ＡＥＳ命令がフェッチ復号化ユニット３０６により復号化された後、実行ユニット３１０によるＡＥＳ命令の実行は、マイクロコードＲＯＭ３１４に格納されるＡＥＳ命令に係るマイクロ処理を実行することを伴う。
【００４４】
ＡＥＳ命令セットは、暗号化ラウンド、解読ラウンド、暗号化最終ラウンド及び解読最終ラウンドを実行するための個別のＡＥＳ命令を有する。一実施例では、各ＡＥＳ命令は一意的な処理コード（ｏｐｃｏｄｅ）を有する。
【００４５】
ＡＥＳ命令セットは、テーブル２に示されるように、４つのＡＥＳ命令（ｅｎｃｒｙｐｔ，ｄｅｃｒｙｐｔ，ｅｎｃｒｙｐｔ  ｌａｓｔ  ｒｏｕｎｄ，ｄｅｃｒｙｐｔ  ｌａｓｔ  ｒｏｕｎｄ）を有する。ＡＥＳ命令セットのＡＥＳ命令は、最終ラウンドを除くすべてのラウンドに用いられる暗号化及び解読ラウンド処理を実行するための単一のラウンド処理を含む。
【００４６】
【表２】
0005301675.tif 000011
例えば、テーブル２のＡＥＳＥＮＣシングルラウンド命令では、入力データは１２８ビットレジスタ（ｘｍｍｓｒｃｄｓｔ）に格納され、ラウンドキーは他の１２８ビットレジスタ（ｘｍｍ）に格納される。この命令は、１２８ビットｘｍｍｓｒｃｄｓｔレジスタに格納される入力データ（ソース）に対して１つのＡＥＳ暗号化ラウンドの一連の４つの変換処理を実行し、ラウンド処理の実行結果によって１２８ビットｘｍｍｓｒｃｄｓｔレジスタに格納される入力データを上書きする。このため、ｘｍｍｓｒｃｄｓｔはまず、入力データを格納し、その後にＡＥＳラウンド処理の結果を格納する。
【００４７】
テーブル２に示されるように、ＦＯＰＩＳパブリケーション１９７の用語を用いて、１２８ビット→１２８ビット変換の対応するシーケンスが説明される。暗号化ラウンドの変換シーケンスは、以下を含む。
（１）ＡｄｄＲｏｕｎｄＫｅｙ変換：ラウンドキー（暗号鍵から導出された値）が、排他的ＯＲ（ＸＯＲ）演算を用いて状態（２次元１２８ビットバイトアレイ）に加えられる。ＡｄｄＲｏｕｎｄＫｅｙは、それの２つの引数のビット単位のＸＯＲとして規定される（１２８ビット，１２８ビット）→１２８ビット変換である。ＡＥＳフローでは、これらの引数は状態とラウンドキーである。
（２）ＳｕｂＢｙｔｅｓ変換：状態は、非線形バイト置換テーブル（Ｓ−Ｂｏｘ）を用いて処理される。ＳｕｂＢｙｔｅｓは、入力の１６バイトのそれぞれにＳ−ｂｏｘ変換を適用することによって規定される１６バイトから１６バイト（バイト単位）への変換である。Ｓ−ｂｏｘ変換は、以下のようなルックアップテーブルを介し表すことができる。ルックアップテーブルへの入力は、バイトＢ［７：０］である。ただし、ｘ及びｙは低ニブル及び高ニブルを示し、ｘ［３：０］＝Ｂ［７：４］，ｙ［３：０］＝Ｂ［３：０］である。出力バイトは、１６進数（Ｈ）表記による２桁の数としてテーブルに符号化される。例えば、入力８５Ｈは９７Ｈをもたらす。
（３）ＳｈｉｆｔＲｏｗｓ変換：状態の最後の３つの行は異なるオフセットだけ循環的にシフトされる。ＳｈｉｆｔＲｏｗｓは、以下のバイト単位の順列である。
【００４８】
【数９】
0005301675.tif 000012
この変換は、状態の４×４のマトリックス表現に対する処理としてみなされる。４×４のマトリックスの第１行は変更されない。第２行は、１バイトポジションだけ左回転される。第３行は、２バイトポジションだけ左回転される。第４行は、３バイトポジションだけ左回転される。
（４）ミックスカラム変換：状態のすべての列からのデータが、新たな列を生成するためミックスされる（互いに独立して）。ミックスカラムは、１２８ビット（１６バイト）入力の４×４のマトリックス表現の列に対して実行される１２８ビット→１２８ビットへの変換である。この変換は、各列をＡＥＳガロア体２５６の係数を有する３次の多項式として扱う。状態の４×４のマトリックス表現の各列は、多項式ａ（ｘ）＝｛０３｝ｘ３＋｛０１｝ｘ２＋｛０１｝ｘ＋｛０２｝と乗算され、ｘ４＋１の還元モジュローされる。
【００４９】
テーブル２に示されるように、ＡＥＳ最終暗号化ラウンド命令ＡＥＳＥＮＣＬＡＳＴは、ミックスカラム変換を実行しない。
【００５０】
解読（逆暗号化）は、暗号鍵を用いて“暗号文”を同一サイズの“平文”に変換する一連の変換処理を実行する。逆暗号化における変換処理は、暗号化の変換処理の逆である。
【００５１】
上述された解読ラウンドの変換シーケンスは、テーブル２に示されるように、単一のＡＥＳ解読ラウンド命令ＡＥＳＤＥＣにより実行され、最後の解読ラウンドに対しては、単一のＡＥＳ最終解読ラウンド命令ＡＥＳＤＥＣＣＬＡＳＴにより実行される。
【００５２】
ＡＥＳ暗号化及び解読命令を含む命令の組み合わせは、隔離された変換としてＡＥＳアルゴリズムのサブステップ（変換）を取得するのに利用されてもよい。隔離された変換は、暗号化ＡＥＳ命令（ＡＥＳＥＮＣ，ＡＥＳＥＮＣＬＡＳＴ）により用いられるＳｈｉｆｔ  Ｒｏｗｓ、Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ及びミックスカラムを含む。
【００５３】
本発明の実施例は、ＡＥＳ暗号化及び解読命令を用いた命令の組み合わせを利用して取得された隔離されたＡＥＳミックスカラム変換を用いて、レベル６ＲＡＩＤのＱシンドロームを計算する。
【００５４】
図４は、本発明の原理によるガロア体（ＧＦ）乗算を実行する方法の実施例のフローチャートである。
【００５５】
ミックスカラム変換のためのマイクロ処理は、ＡＥＳＥＮＣ命令とＡＥＳＤＥＣ命令との両方において用いられる。テーブル２に示されるように、ＡＥＳＤＥＣ命令は、ＡＥＳＥＮＣ命令における変換処理と逆の変換処理を含む。このため、ミックスカラム変換のマイクロ処理は、（１）ゼロに設定されたラウンドキーによるＡＥＳＥＮＣ命令と、その後の（２）ゼロに設定されたラウンドキーによるＡＥＳＤＥＣＬＡＳＴ命令との命令シーケンスを実行することによって隔離されてもよい。
【００５６】
各ＡＥＳ命令のための変換シーケンスを参照して、この命令シーケンスは、ミックスカラム変換を隔離する。これは、ＡｄｄＲｏｕｎｄＫｅｙマイクロ処理が、Ｎｏ処理（ＮＯＰ）を実行し、その他のマイクロ処理（Ｓｈｉｆｔ  Ｒｏｗｓ，Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ）が、逆マイクロ処理（Ｉｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ，Ｉｎｖｅｒｓｅ  Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ）とを実行することによって変更される。
【００５７】
従って、ＡＥＳ命令（ＡＥＳＥＮＣ，ＡＥＳＥＮＣＬＡＳＴ）のシーケンスの実行は、以下に示されるようなミックスカラム（状態）変換を隔離させる。
【００５８】
Ｙ＝Ｉｎｖｅｒｓｅ  Ｍｉｘ  Ｃｏｌｕｍｎｓ（Ｉｎｖｅｒｓｅ  Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ（Ｉｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ（Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ（Ｓｈｉｆｔ  Ｒｏｗｓ（Ｓｔａｔｅ））））
隔離されたミックスカラム変換は、本発明の実施例に従ってＡＥＳガロア体において１６バイトと｛０２｝とを乗算するのに用いられる。１６バイト（ｐ，ｏ，ｎ，ｍ，ｌ，ｋ，ｊ，ｉ，ｈ，ｇ，ｆ，ｅ，ｄ，ｃ，ｂ，ａ）の４（ｄ，ｃ，ｂ，ａ）と｛０２｝とを乗算する実施例が説明される。
【００５９】
本実施例では、有限体は、還元多項式（ｒｅｄｕｃｔｉｏｎ  ｐｏｌｙｎｏｍｉａｌ）０ｘ１１ｂにより規定される。他の実施例では、体表現の選択は設定可能であってもよい。
【００６０】
図４を参照して、ブロック４００において、（０，ｃ，０，ａ）を提供するため、入力データ（ｄ，ｃ，ｂ，ａ）の奇数バイトポジションがゼロに、すなわち、ｂ＝ｄ＝０に設定される。一実施例では、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令が、奇数バイトポジションをゼロに設定するのに用いられる。
【００６１】
図５Ａ〜５Ｃは、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令の利用を示す。ＰＳＨＵＦＢ命令は、第２オペランドに格納されたシャッフル制御マスクに基づき第１オペランドのバイトをシャッフルする（バイトのインプレースシャッフルを実行する）。シャッフル制御マスクのバイトの最上位ビットが設定されている場合、第１オペランドの対応するバイトにゼロが書き込まれる。
【００６２】
ＰＳＨＵＦＢ命令は、バイトＡ及びＢの２つのレジスタと呼ばれる２つの１２８ビット入力を有する。ＰＳＨＵＦＢは、バイトＡ＝［ａ１５ａ１４ａ１３．．．ａ０］及びＢ＝［ｂ１５ｂ１４ｂ１３．．．ｂ０］の２つの１２８ビットレジスタをとりあげ、レジスタＡを［ａｂ１５ａｂ１４ａｂ１３．．．ａｂ０］と置換する。ｂｉの先頭ビットが１に設定されている場合、その結果の第ｉエントリは０となる。
【００６３】
図５Ａを参照して、ブロック５００は、１２８ビット第１レジスタの下位４バイトの初期的な内容を示し、ブロック５０２は、ＰＳＨＵＦＢ命令が“ｆｆ０２ｆｆ００ｈ”のシャッフル制御マスクにより実行された後、第１レジスタの下位４バイトの内容を示す。図示されるように、２つの奇数バイト（バイト１とバイト３）は、ＭＳＢが“１”に設定されているため、“０”に設定されている。
【００６４】
図４を参照して、奇数バイトが“０”に設定された後、ミックスカラム変換が、第１レジスタの内容を用いて、ＡＥＳＤＥＣＬＡＳＴとその後のＡＥＳＥＮＣの命令シーケンスを実行することによって実行される。この命令シーケンスは、
【００６５】
【数１０】
0005301675.tif 000013
という変換を実行する。
【００６６】
ｄとｂの両方がゼロであるため、“ｄ＝０，ｃ，ｂ＝０，ａ”の命令シーケンスの結果は、３ａ＋ｃ，ａ＋２ｃ，ａ＋３ｃ，２ａ＋ｃとなる。
【００６７】
次に、結果（３ａ＋ｃ，ａ＋２ｃ，ａ＋３ｃ，２ａ＋ｃ）の奇数バイトは、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）を用いてゼロに設定され、第２ＰＳＨＵＦＢ命令の結果である（０，ａ＋２ｃ，０，２ａ＋ｃ）が第１レジスタに格納される。
【００６８】
ブロック４０４において、（ｄ，０，ｂ，０）を提供するため、入力データ（ｄ，ｃ，ｂ，ａ）の偶数バイトポジションがゼロに、すなわち、ａ＝ｃ＝０に設定される。一実施例では、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令が、偶数バイトポジションをゼロに設定するため用いられる。
【００６９】
図５Ｂを参照すると、５０２は、第１レジスタの初期的な内容を示し、５０４は、ＰＳＨＵＦＢ命令が“０３ｆｆ０１ｆｆｈ”のシャッフル制御マスクにより実行された後の第１レジスタの内容を示す。図示されるように、すべての偶数バイトポジションは“０”に設定されている。
【００７０】
図４を参照して、偶数バイトポジションが“０”に設定された後、ミックスカラム変換が、第１レジスタの内容を用いてＡＥＳＤＥＣＬＡＳＴの後にＡＥＳＥＮＣとの命令シーケンスを実行することによって実行される。この命令シーケンスは、
【００７１】
【数１１】
0005301675.tif 000014
という変換を実行する。
【００７２】
ｃとａの両方がゼロであるため、“ｄ，ｃ＝０，ｂ，ａ＝０”の命令シーケンスの結果は、ｂ＋２ｄ，ｂ＋３ｄ，２ｂ＋ｄ，３ｂ＋ｄとなる。
【００７３】
次に、結果（ｂ＋２ｄ，ｂ＋３ｄ，２ｂ＋ｄ，３ｂ＋ｄ）の偶数バイトが、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）を用いてゼロに設定され、第４ＰＳＨＵＦＢ命令の結果（ｂ＋２ｄ，０，２ｂ＋ｄ，０）が第２レジスタに格納される。
【００７４】
ブロック４０８において、第１レジスタ（ブロック４０２）に格納された結果と、第２レジスタ（ブロック４０６）に格納された結果とが、両方のミックスカラム変換の結果（ｂ＋２ｄ，ａ＋２ｃ，２ｂ＋ｄ，２ａ＋ｃ）を提供するためにＸＯＲ演算される。実施例では、この結果は、ＰＸＯＲ命令を用いてＸＯＲ演算される。ＰＸＯＲ命令は、２つのレジスタの内容に対してＸＯＲ演算を実行し、レジスタの１つにその結果を格納する。
【００７５】
ブロック４１０において、Ｐａｃｋｅｄシャッフルバイト（ＰＳＨＵＦＢ）命令が、マスクに基づき入力データ（ｄ，ｃ，ｂ，ａ）のバイトをシャッフルするのに利用される。
【００７６】
図５Ｃを参照して、５０６は、第３レジスタの初期的な内容を示し、５０８は、ＰＳＨＵＦＢ命令が“０００３０２ｈ”のシャッフル制御マスクにより実行された後の第３レジスタの内容を示す。図示されるように、入力データ（ｄ，ｃ，ｂ，ａ）のバイトは、第３レジスタに格納される結果（ｂ，ａ，ｄ，ｃ）５１０を提供するためシャッフルされる。
【００７７】
図４に続いて、ブロック４１２において、乗算の結果、すなわち、（２ｄ，２ｃ，２ｂ，２ａ）を提供するため、レジスタ３（ｂ＋２ｄ，ｂ＋３ｄ，２ｂ＋ｄ，３ｂ＋ｄ）とレジスタ２（ｂ，ａ，ｄ，ｃ）の内容に対してＸＯＲ演算が実行される。
【００７８】
４バイトデータブロックに対してｇ＝｛０２｝による乗算を実行する実施例が説明された。以下のテーブル４は、１つの１６バイトデータブロックに対して実行される機能的な正確な最適化されたに実施例のコードサンプル（アセンブラ）を示す。
【００７９】
【表４】
0005301675.tif 000015
テーブル４のコードサンプルに示されるように、ガロア体乗算は、１１個の命令（５つのＰＳＨＵＦＢ命令、２つのＰＸＯＲ命令、２つのＡＥＳＥＮＣ命令、２つのＡＥＳＤＥＣＬＡＳＴ命令）、３個のマスク（マスク１，マスク２，マスク３）及び３個のｘｍｍレジスタ（ｘｍｍ１，ｘｍｍ２，ｘｍｍ３）を用いて、１６バイトのデータに対して実行される。
【００８０】
例えば、入力データ“ｅ５９８２７１ｅｆ１１１４１ｂ８ａｅ５２ｂ４ｅ０３０５ｄｂｆｄ４”に対するガロア体乗算の実行結果は、出力“ｄ１２ｂ４ｅ３ｃｆ９２２８２６ｂ４７ａ４７３ｄｂ６０ｂａ６５ｂ３”をもたらす。
【００８１】
このコードサンプルでは、命令が逐次処理される場合、スループットは、ＡＥＳ命令の遅延により遅くなる。例えば、実施例では、ＰＳＨＵＦＢとＰＸＯＲ命令の遅延は１サイクルであり、ＡＥＳ命令の遅延は６サイクルである。従って、ＡＥＳ命令のペアが逐次処理される場合、１２サイクルの遅延が生じる。他の実施例では、ＡＥＳ命令のペアの第２ＡＥＳ命令が、第１ＡＥＳ命令がスケジューリングされた６サイクル後にスケジューリングされるように、全体的な遅延は、インタリーブされた命令による複数の１６バイトの入力データを同時に処理することによって減少されてもよい。テーブル４に示されるサンプルコードの命令の順序は、図６Ａ〜６Ｃに示される例に示されるように変更されてもよい。この命令順序は、複数の１６バイトデータブロックが同時に処理することを可能にする。これは、ＡＥＳ命令の遅延はＰＸＯＲ及びＰＳＨＵＦＢ命令の遅延より大きいためである。
【００８２】
図６Ａ〜６Ｃは、ガロア体乗算が複数の１６バイトデータブロックに対して同時に実行されることを可能にするサンプルコードである。このコードは、利用されうるコードの単なる一例である。他の多数の変形があってもよく、例えば、コードは特定のコンパイラによる利用に最適化されてもよい。図６Ａ〜６Ｃは、ＮＢＬＯＣＫＳデータブロック（各ブロックは１６バイト（１６Ｂ）を有する）のデータバッファに対して｛０２｝による乗算を実行する機能（インラインアセンブラ）を示す。４つの１６バイトブロックがパラレルに処理され、２５６バイトデータバッファを利用するため、当該処理（パラレルな４つの１６バイトブロック）が４回繰り返される（パラレルに４ブロック）。１２個のｘｍｍレジスタ（ｘｍｍ０〜ｘｍｍ１１）が、入力データとその演算結果とを格納するのに用いられる。３つのマスクレジスタ（マスク１，マスク２，マスク３）が、テーブル４に示されるサンプルコードと同じマスクを格納する。図６Ａを参照して、ブロック６００の命令は、ｘｍｍレジスタ（ｘｍｍ１，ｘｍｍ４，ｘｍｍ７，ｘｍｍ１０）に格納されている入力データの偶数バイトポジションをゼロに設定する。図示された例では、Ｐａｃｋｅｄシャッフルバイト（ＶＰＳＨＵＦＢ）命令が、奇数バイトポジションをゼロに設定するため用いられる。ＶＰＳＨＵＦＢ命令は、ｍｏｖｅの後にＰＳＨＵＦＢなどを実行し、“ｖｐｓｈｕｆｂ  ｘｍｍ１，ｘｍｍ０，ｍａｓｋ１”の命令に対して、ｘｍｍ０の内容はｘｍｍ１に移され、ｘｍｍ１の内容は、ｘｍｍ０に格納されている制御マスクに基づきシャッフルされる。
【００８３】
次に、ブロック６０２のＡＥＳＤＥＣＬＡＳＴ命令が、ｘｍｍ１，ｘｍｍ４，ｘｍｍ７及びｘｍｍ１０レジスタに格納されたゼロに設定されている奇数バイトポジションを有する入力データに対して実行される。
【００８４】
ブロック６０４の命令は、図５Ｃに関して説明されたように、入力データをｘｍｍレジスタ（ｘｍｍ２，ｘｍｍ５）に移し、奇数バイトポジションをゼロに設定し、ｘｍｍレジスタ（ｘｍｍ０，ｘｍｍ３）において入力バイトをリシャッフルする。
【００８５】
図６Ｂを参照して、ブロック６０６のＡＥＳＥＮＣ命令は、ミックスカラム変換を隔離し、その結果をｘｍｍレジスタ（ｘｍｍ１，ｘｍｍ３，ｘｍｍ７，ｘｍｍ１０）に格納する。
【００８６】
ブロック６０８の命令は、図５Ｃに関して説明されたように、入力データをｘｍｍレジスタ（ｘｍｍ８，ｘｍｍ１１）に移動し、偶数バイトポジションをゼロに設定し、ｘｍｍレジスタ（ｘｍｍ６，ｘｍｍ９）の入力バイトをリシャッフルする。
【００８７】
ブロック６１０の命令は、ｘｍｍレジスタ（ｘｍｍ２，ｘｍｍ５，ｘｍｍ８，ｘｍｍ１１）に格納されているゼロに設定された偶数バイトポジションを有する入力データに対してＡＥＳＤＥＣＬＡＳＴ命令を実行する。
【００８８】
ブロック６１２の命令は、ｘｍｍレジスタ（ｘｍｍ１，ｘｍｍ４，ｘｍｍ７，ｘｍｍ１０）に格納されているデータの奇数ポジションのバイトをゼロにする。
【００８９】
ブロック６１４の命令は、ｘｍｍレジスタ（ｘｍｍ２，ｘｍｍ５，ｘｍｍ８，ｘｍｍ１１）に格納されているデータに対してＡＥＳＥＮＣ命令を実行し、ｘｍｍレジスタ（ｘｍｍ２，ｘｍｍ５，ｘｍｍ８，ｘｍｍ１１）に格納されている結果において偶数バイトポジションをゼロに設定する。
【００９０】
ブロック６１６の命令は、ｘｍｍレジスタ（ｘｍｍ０，ｘｍｍ３，ｘｍｍ６，ｘｍｍ９）において乗算の結果を提供するため、ｘｍｍレジスタ（ｘｍｍ０〜ｘｍｍ１１）の内容に対してＸＯＲ演算を実行する。
【００９１】
ブロック６１８の命令は、ｘｍｍレジスタ（ｘｍｍ０，ｘｍｍ３，ｘｍｍ６，ｘｍｍ９）に格納されている乗算の結果をｒｂｘレジスタに移動する。
【００９２】
ブロック６２０の命令は、乗算対象の次の１６バイトブロックの位置へのポインタを計算する。
【００９３】
他の実施例では、ＲＡＩＤ−６計算がＧＦ（２８）の他の表現により実行される場合、ＡＥＳ命令が適用可能な“好適な”表現（還元多項式１１Ｂにより）に入力を変換することによって、上述した技術を利用することが可能である。当初の表現への最終的な変換が必要とされる（しかしながら、リカバリが実際に要求されるケースに留保可能である）。この変換は、予め計算されたテーブルを用いて実行可能である。
【００９４】
本発明の他の実施例はまた、本発明の処理を実行するための命令を含むマシーンアクセス可能な媒体を含む。このような実施例はまた、プログラムプロダクトと呼ばれてもよい。このようなマシーンアクセス可能な媒体は、限定することなく、フロッピー（登録商標）ディスク、ハードディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの記憶媒体と、マシーン又はデバイスにより形成又は製造された粒子の他の有形な構成とを含むものであってもよい。命令はまた分散環境で利用されてもよく、シングル又はマルチプロセッサマシーンによるアクセスのため、ローカル及び／又はリモートに格納されてもよい。
【００９５】
本発明の実施例がそれの実施例を参照して図示及び説明されたが、当業者は、添付した請求項により包含される本発明の実施例の範囲から逸脱することなく、形式及び詳細について各種変更が可能であることを理解するであろう。
【図１】
0005301675.tif 000016
【図２】
0005301675.tif 000017
【図３】
0005301675.tif 000018
【図４】
0005301675.tif 000019
【図５Ａ】
0005301675.tif 000020
【図５Ｂ】
0005301675.tif 000021
【図５Ｃ】
0005301675.tif 000022
【図６Ａ】
0005301675.tif 000023
【図６Ｂ】
0005301675.tif 000024
【図６Ｃ】
0005301675.tif 000025