(57)【特許請求の範囲】
【請求項１】
方法であって、
複数の命令の組合せをメモリによって記憶する工程を含み、前記複数の命令の前記組合せにおける各命令は少なくとも１つの変換シーケンスを行い、
前記メモリから読み出された前記複数の命令の前記組合せは、プロセッサに含まれる実行装置において実行されると、前記変換シーケンスのうちの１つのみの変換が前記実行装置によって分離されるように前記メモリに記憶され、
前記変換シーケンスは、連邦情報処理標準（ＦＩＰＳ）１９７によって規定されたＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＭｉｘＣｏｌｕｍｎ及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓを含む群からの変換を含む方法。
【請求項２】
請求項１記載の方法であって、命令の組合せは、ＡＥＳＤＥＣＬＡＳＴラウンド命令及びＡＥＳＥＮＣラウンド命令を含み、前記命令の組合せはＭｉｘＣｏｌｕｍｎｓ変換を行う方法。
【請求項３】
請求項２記載の方法であって、前記ＡＥＳＤＥＣＬＡＳＴラウンド命令によって行われる一連の変換は、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換及びＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を含み、前記ＡＥＳＥＮＣラウンド命令によって行われる一連の変換は、ＳｈｉｆｔＲｏｗｓ変換、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換、及びＭｉｘＣｏｌｕｍｎｓ変換である方法。
【請求項４】
請求項１記載の方法であって、命令の組合せは、ＡＥＳＥＮＣＬＡＳＴラウンド命令及びＡＥＳＤＥＣラウンド命令を含み、前記命令の組合せはＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換を行う方法。
【請求項５】
請求項４記載の方法であって、前記ＡＥＳＥＮＣＬＡＳＴラウンド命令によって行われる一連の変換は、ＳｈｉｆｔＲｏｗｓ変換及びＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を含み、前記ＡＥＳＤＥＣラウンド命令によって行われる一連の変換は、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換を含む方法。
【請求項６】
請求項１記載の方法であって、命令の組合せは、ＰＳＨＵＦＢラウンド命令及びＡＥＳＥＮＣＬＡＳＴラウンド命令を含み、前記命令の組合せはＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を行う方法。
【請求項７】
請求項６記載の方法であって、前記ＡＥＳＥＮＣＬＡＳＴラウンド命令によって行われる一連の変換は、ＳｈｉｆｔＲｏｗｓ変換及びＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を含み、前記ＰＳＨＵＦＢ命令は、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換を含む方法。
【請求項８】
請求項１記載の方法であって、命令の組合せは、ＰＳＨＵＦＢラウンド命令及びＡＥＳＤＥＣＬＡＳＴラウンド命令を含み、前記命令の組合せはＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を行う方法。
【請求項９】
請求項７記載の方法であって、前記ＡＥＳＤＥＣＬＡＳＴラウンド命令によって行われる一連の変換は、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換及びＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を含み、前記ＰＳＨＵＦＢ命令は、ＳｈｉｆｔＲｏｗｓ変換を含む方法。
【請求項１０】
装置であって、
複数の命令の組合せを記憶するためのメモリであって、前記複数の命令の前記組合せにおける各命令は少なくとも１つの変換シーケンスを行うメモリと、
実行装置を含むプロセッサとを備え、前記メモリから読み出された前記複数の命令の前記組合せは、前記実行装置において実行されると、前記変換シーケンスのうちの１つのみの変換を前記実行装置が分離するように前記メモリに記憶され、前記変換シーケンスは、連邦情報処理標準（ＦＩＰＳ）１９７によって規定されたＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＭｉｘＣｏｌｕｍｎ及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓを含む群からの変換を含む装置。
【請求項１１】
請求項１０記載の装置であって、命令の組合せは、ＡＥＳＤＥＣＬＡＳＴラウンド命令及びＡＥＳＥＮＣラウンド命令を含み、前記命令の組合せはＭｉｘＣｏｌｕｍｎｓ変換を行う装置。
【請求項１２】
請求項１０記載の装置であって、命令の組合せは、ＡＥＳＥＮＣＬＡＳＴラウンド命令及びＡＥＳＤＥＣラウンド命令を含み、前記命令の組合せはＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換を行う装置。
【請求項１３】
請求項１０記載の装置であって、命令の組合せは、ＰＳＨＵＦＢラウンド命令及びＡＥＳＥＮＣＬＡＳＴラウンド命令を含み、前記命令の組合せはＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を行う装置。
【請求項１４】
請求項１０記載の装置であって、命令の組合せは、ＰＳＨＵＦＢラウンド命令及びＡＥＳＤＥＣＬＡＳＴラウンド命令を含み、前記命令の組合せはＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を行う装置。
【請求項１５】
プロセッサに含まれる実行装置によって実行されると機能を行う命令を含むコンピュータ実行可能なプログラムを記憶させた記録媒体であって、
前記機能は、複数の命令の組合せをメモリによって記憶する機能を含み、前記複数の命令の前記組合せにおける各命令は少なくとも１つの変換シーケンスを行い、前記実行装置において前記メモリから読み出された前記複数の命令の前記組合せが実行されると、前記変換シーケンスのうちの１つのみの変換が前記実行装置によって分離されるように前記メモリに記憶され、前記変換シーケンスは、連邦情報処理標準（ＦＩＰＳ）１９７によって規定されたＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＭｉｘＣｏｌｕｍｎ及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓを含む群からの変換を含む記録媒体。
【請求項１６】
システムであって、
プロセッサと、
前記プロセッサによってアクセス可能であり、複数の命令の組合せを記憶させた記憶装置と
を備え、前記複数の命令の前記組合せにおける各命令は少なくとも１つの変換シーケンスを行い、前記メモリから読み出された前記複数の命令の前記組合せは、前記プロセッサに含まれる実行装置において実行されると、前記変換シーケンスのうちの１つのみの変換を前記実行装置が分離するように前記記憶装置に記憶され、前記変換シーケンスは、連邦情報処理標準（ＦＩＰＳ）１９７によって規定されたＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＭｉｘＣｏｌｕｍｎ及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓを含む群からの変換を含むシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、高度暗号化標準（ＡＥＳ）に関し、特に、ＡＥＳの一連の変換の部分集合を行ってＡＥＳ変換のうちの１つの結果を提供する命令を含む命令の組合せの使用に関する。
【背景技術】
【０００２】
暗号は、情報を保護するための鍵及びアルゴリズムに依存するツールである。アルゴリズムは、高度な数学的アルゴリズムであり、鍵はビット列である。暗号システムには２つの基本タイプ（すなわち、秘密鍵システム及び公開鍵システム）がある。対称システムとしても表す秘密鍵システムは、二以上の者によって共有される単一の鍵（「秘密鍵」）を有する。単一の鍵を使用して情報を暗号化し、復号する。
【０００３】
国立標準技術研究所（ＮＩＳＴ）により、連邦情報処理標準（ＦＩＰＳ）１９７として公表されている高度暗号化標準（ＡＥＳ）は、秘密鍵システムである。ＡＥＳは、情報を暗号化し、復号することが可能な対称ブロック暗号である。
【０００４】
暗号化（暗号）は、秘密鍵（暗号鍵）を使用して一連の変換を行って、「平文」として表す、理解できるデータを、「暗号文」として表す、理解できない形式に変換する。暗号における変換には、（１）排他的ＯＲ（ＸＯＲ）演算を使用して、ラウンド鍵（暗号鍵から導き出された値）を状態（２次元のバイト・アレイ）に加算する工程、（２）非線形バイト置換テーブル（Ｓ−ボックス）を使用して状態を処理する工程、（３）別々のオフセットだけ、状態の最後の３行を巡回シフトさせる工程、及び（４）状態の列全てを用い、そのデータを（互いに無関係に）混ぜて、新たな列を生成する工程が含まれる。
【０００５】
復号（逆暗号）は、暗号鍵を使用して一連の変換を行って、「暗号文」ブロックを、同じ容量の「平文」ブロックに変換する。逆暗号における変換は、暗号における変換の逆である。
【０００６】
ラインダール・アルゴリズムは、１２８、１９２及び２５６ビットの長さの暗号鍵を使用して、１２８ビットのデータ・ブロックを処理するために、ＡＥＳ標準において規定されている。上記別々の鍵の長さは通常、ＡＥＳ−１２８、ＡＥＳ−１９２及びＡＥＳ−２５６として表される。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＡＥＳアルゴリズムは、１０、１２、又は１４の連続ラウンドにおいて、平文を暗号文に、又は暗号文を平文に変換する。ラウンド数は鍵の長さに依存する。
【課題を解決するための手段】
【０００８】
以下の詳細な説明は、特許請求の範囲記載の主題を例証する実施例を参照して行うが、その多くの代替、修正及び変形は当業者には明らかになるだろう。よって、特許請求の範囲記載の主題が、広く捉えられ、特許請求の範囲においてのみ規定されることが意図されている。
【図面の簡単な説明】
【０００９】
【図１】汎用プロセッサにおいてＡＥＳ暗号及び復号を行うための命令を含むシステムを示すブロック図である。
【図２】図１に示すプロセッサの実施例を示すブロック図である。
【図３】ＡＥＳアルゴリズムにおけるＭｉｘＣｏｌｕｍｎｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＭｉｘＣｏｌｕｍｎ分離変換関数の実施例を示すフロー図である。
【図４】ＡＥＳアルゴリズムにおけるＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎ分離変換関数の実施例を示すフロー図である。
【図５】ＳｈｉｆｔＲｏｗｓ変換及びＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換を分離するためにパックト・シャフル・バイト（ＰＳＨＵＦＢ）の使用を示す図である。
【図６】ＡＥＳアルゴリズムにおけるＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ分離変換関数の実施例を示すフロー図である。
【図７】ＡＥＳアルゴリズムにおけるＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ分離変換関数の実施例を示すフロー図である。
【発明を実施するための形態】
【００１０】
特許請求の範囲記載の主題の実施例の構成は、以下の詳細の説明が進むにつれて、かつ、図面を参照すると明らかになるであろう。図面では、同じ符号は同じ部分を表す。
【実施例】
【００１１】
国立標準技術研究所（ＮＩＳＴ）により、連邦情報処理標準（ＦＩＰＳ）１９７として公表されている高度暗号化標準（ＡＥＳ）アルゴリズムは、通常、ソフトウェアにおいて、又は専用プロセッサにおいて行われるコンピュータ集約型アルゴリズムである。ＡＥＳアルゴリズムは、ソフトウェアにおいて、メモリに記憶された、中央処理装置（ＣＰＵ）のロード／ストア／インクリメント命令シーケンスを実行することによって行われる。平文又は暗号文の各バイトを変換するためにＡＥＳアルゴリズムは多くのＣＰＵサイクルを消費するので、変換は低速である。よって、暗号化は、通常、コンピュータに記憶された情報の部分集合（例えば、「極秘」として分類され得る情報）の暗号化にのみ使用される。しかし、コンピュータ上に記憶された情報のより多くを暗号化する必要性が存在している。例えば、モバイル・コンピュータ上に記憶された情報全てが暗号化されている場合、この情報は、モバイル・コンピュータが盗まれた場合にも保護される。
【００１２】
ＡＥＳは、鍵容量が１２８、１９２又は２５６バイトの１２８ビット・ブロックを処理するブロック暗号である。ＡＥＳアルゴリズムは、１０、１２又は１４の連続ラウンドにおいて、１２８ビットの平文ブロックを１２８ビットの暗号ブロックに変換する（暗号化する）か、又は１２８ビットの暗号文ブロックを１２８ビットの平文ブロックに変換する（復号する）。ラウンド数は鍵容量（１２８ビット、１９２ビット又は２５６ビット）に依存する。変換シーケンス（サブ工程）は、（１０、１２、又は１４の）ラウンド毎に繰り返される。
【００１３】
暗号化ラウンドの変換シーケンスには以下が含まれる。
【００１４】
（１）ＡｄｄＲｏｕｎｄＫｅｙ変換：ラウンド鍵（暗号鍵から導き出される値）が、排他的ＯＲ（ＸＯＲ）演算を使用して状態（２次元の１２８ビット・バイト・アレイ）に加えられる。ＡｄｄＲｏｕｎｄＫｅｙは、（１２８ビット，  １２８ビット）→１２８ビット変換であり、これは、その２つの引数の、ビット単位の排他的ＯＲ（ＸＯＲ）として定義される。ＡＥＳフローでは、引数はＳｔａｔｅ及びラウンド鍵である。
【００１５】
（２）ＳｕｂＢｙｔｅｓ変換：状態は、非線形バイト置換テーブル（Ｓ−Ｂｏｘ）を使用して処理される。ＳｕｂＢｙｔｅｓは、入力の１６バイトそれぞれにＳ−Ｂｏｘ変換を施すことによって規定される、１６バイトから１６バイトへの（バイト単位の）変換である。Ｓ−Ｂｏｘ変換は、ルックアップ・テーブルにより、以下のように表すことが可能である。すなわち、ルックアップ・テーブルへの入力は、バイトＢ［７：０］であり、ここで、ｘ及びｙは、低ニブル及び高ニブルｘ（［３：０］＝Ｂ［７：４］，ｙ［３：０］＝Ｂ［３：０］）を表す。出力バイトは、テーブルにおいて１６進（Ｈ）表記で２桁の数としてコード化される。例えば、入力８５Ｈは９７Ｈをもたらす。
【００１６】
（３）ＳｈｉｆｔＲｏｗｓ変換：状態の最後の３行は、別々のオフセットによって巡回シフトされる。ＳｈｉｆｔＲｏｗｓは、（１５，  １４，  １３，  １２，  １１，  １０，  ９，  ８，  ７，  ６，  ５，  ４，  ３，  ２，  １，  ０）→（１１，  ６，  １，  １２，  ７，  ２，  １３，  ８，  ３，  １４，  ９，  ４，  １５，  １０，  ５，  ０）への、バイト単位の置換である。上記変換は、状態の４×４マトリクス表現に対する処理として捉えられる。４×４マトリクスにおける第１の行は変わらない。第２の行は、１バイト位置だけ、左回転させる。第３の行は、２バイト位置だけ、左回転させる。第４の行は、３バイト位置だけ、左回転させる。
【００１７】
（４）ＭｉｘＣｏｌｕｍｎｓ変換：状態の列全てからのデータを（互いに無関係に）混ぜて、新たな列を生成する。ＭｉｘＣｏｌｕｍｎｓは、入力の４ｘ４マトリクス表現の列を処理する、１２８ビット→１２８ビット変換である。上記変換は、各列を、ＡＥＳ−ガロア・フィールド２５６における係数を備えた３次多項式として扱う。状態の４×４マトリクス表現の各列は、多項式ａ（ｘ）＝｛０３｝ｘ３＋｛０１｝ｘ２＋｛０１｝ｘ＋｛０２｝で乗算され、ｍｏｄｕｌｏ  ｘ４＋１で約分される。
【００１８】
上記暗号化ラウンドの変換シーケンスは、以下に表１として示すように単一のＡＥＳ暗号化ラウンド命令ＡＥＳＥＮＣによって行うことができ、最後の暗号化ラウンドの変換シーケンスは、以下に表２として示すように単一のＡＥＳの最後の暗号化ラウンド命令ＡＥＳＥＮＣＬＡＳＴによって行うことができる。
【００１９】
ＡＥＳＥＮＣ  ｘｍｍ１，ｘｍｍ２／ｍ１２８
Ｓｔａｔｅ＝ｘｍｍ１、
ＲｏｕｎｄＫｅｙ＝ｘｍｍ２／ｍ１２８、
Ｔｍｐ＝ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）、
Ｔｍｐ＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＭｉｘＣｏｌｕｍｎｓ（Ｔｍｐ）、
Ｏｕｔｐｕｔ＝ｘｍｍ１＝Ａｄｄ  ＲｏｕｎｄＫｅｙ（Ｔｍｐ，Ｒｏｕｎｄ  Ｋｅｙ）
表１
【００２０】
ＡＥＳＥＮＣＬＡＳＴ  ｘｍｍ１，ｘｍｍ２／ｍ１２８
Ｓｔａｔｅ＝ｘｍｍ１、
ＲｏｕｎｄＫｅｙ＝ｘｍｍ２／ｍ１２８、
Ｔｍｐ＝ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）、
Ｔｍｐ＝Ｓｕｂｓｔｉｔｕｔｅ  Ｂｙｔｅｓ（Ｔｍｐ）、
Ｏｕｔｐｕｔ＝ｘｍｍ１＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表２
【００２１】
表１及び表２に示すＡＥＳＥＮＣ命令及びＡＥＳＥＮＣＬＡＳＴ命令は、状態（ｘｍｍレジスタに規定された１２８ビット）、ＲｏｕｎｄＫｅｙ（ｘｍｍレジスタにおいて、又はメモリ・ポインタとして規定された１２８ビット）、又は鍵（ｘｍｍレジスタ及び／又はメモリに規定された１２８、１９２又は２５６ビット）に対する特定の変換シーケンスを行う。前述の命令は１２８ビット出力を生成する。１２８ビット→１２８ビットの対応する変換シーケンスを、ＦＩＰＳパブリケーション１９７の用語を使用して説明する。
【００２２】
上記表１及び表２に示すＡＥＳ命令（ＡＥＳＥＮＣ，ＡＥＳＥＮＣＬＡＳＴ）は、ＦＩＰＳパブリケーション１９７によって規定されているように、１２８ビット変数（ｔｅｍｐ）（状態としても表される）に格納されたデータをシリアル処理する。Ｎ個のデータ・ブロックを処理するためのシリアル動作シーケンスの例を以下に、表３に示す。
【００２３】
Ｆｏｒ  ｉ  ｆｒｏｍ  １  ｔｏ  Ｎ＿ＢＬＯＣＫＳ  ｄｏ
ｘｍｍ１＝ＢＬＯＣＫ［ｉ］／／ｌｏａｄ
ｘｍｍ１＝ＡＥＳＥＮＣ（ｘｍｍ１，ＲＫ［１］）
ｘｍｍ１＝ＡＥＳＥＮＣ（ｘｍｍ１，ＲＫ［２］）
ｘｍｍ１＝ＡＥＳＥＮＣ（ｘｍｍ１，ＲＫ［３］）
…
ｘｍｍ１＝ＡＥＳＥＮＣ（ｘｍｍ１，ＲＫ［９］）
ｘｍｍ１＝ＡＥＳＥＮＣＬＡＳＴ（ｘｍｍ１，ＲＫ［１０］）
ｓｔｏｒｅ  ｘｍｍ１
Ｅｎｄ
表３
【００２４】
暗号化する対象のＮ＿Ｂｌｏｃｋｓ毎に、データ・ブロックがレジスタに格納される。例えば、１２８ビットを有するｘｍｍレジスタ（ｘｍｍ１）を使用して１２８ビット・ブロックを格納することができる。１０の暗号化ラウンドをデータ・ブロックに対して直列に行う。１０ラウンドのＡＥＳ処理のうちのラウンド１乃至９については、ＡＥＳＥＮＣ命令を呼び出して、ラウンド鍵、及び先行ラウンドの結果、又は（ラウンド１の場合）初期ブロック・データを使用してラウンド処理を行う。ＡＥＳＥＮＣＬＡＳＴ命令を呼び出して、最終ラウンド（この例では、ラウンド１０）を処理する。
【００２５】
復号ラウンドの変換シーケンスは、
（１）ＡｄｄＲｏｕｎｄＫｅｙ変換：ラウンド鍵（暗号鍵から導き出される値）が、排他的ＯＲ（ＸＯＲ）演算を使用して状態（２次元の１２８ビット・バイト・アレイ）に加えられる。ＡｄｄＲｏｕｎｄＫｅｙは、（１２８ビット，１２８ビット）→１２８ビット変換であり、これは、その２つの引数の、ビット単位のＸＯＲとして定義される。ＡＥＳフローでは、引数は状態及びラウンド鍵である。
【００２６】
（２）ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＳｕｂＢｙｔｅｓ）変換：状態は、逆非線形バイト置換テーブル（Ｓ−Ｂｏｘ）を使用して処理される。ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓは、入力の各バイトにＩｎｖＳ−Ｂｏｘ関数を施すことによって規定される１６バイト→１６バイト（バイト単位）変換（すなわち、［Ｐ，Ｏ，Ｎ，Ｍ，Ｌ，Ｋ，Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ，Ｂ，Ａ］→［ＩｎｖＳ−Ｂｏｘ  （Ｐ），  ＩｎｖＳ−Ｂｏｘ  （Ｏ），  ＩｎｖＳ−Ｂｏｘ  （Ｎ），  ＩｎｖＳ−Ｂｏｘ  （Ｍ），  ＩｎｖＳ−Ｂｏｘ  （Ｌ），  ＩｎｖＳ−Ｂｏｘ  （Ｋ），  ＩｎｖＳ−Ｂｏｘ  （Ｊ），  ＩｎｖＳ−Ｂｏｘ  （Ｉ），  ＩｎｖＳ−Ｂｏｘ  （Ｈ），  ＩｎｖＳ−Ｂｏｘ  （Ｇ），  ＩｎｖＳ−Ｂｏｘ  （Ｆ），  ＩｎｖＳ−Ｂｏｘ  （Ｅ），  ＩｎｖＳ−Ｂｏｘ  （Ｄ），  ＩｎｖＳ−Ｂｏｘ  （Ｃ），  ＩｎｖＳ−Ｂｏｘ  （Ｂ），  ＩｎｖＳ−Ｂｏｘ  （Ａ）］である）。
【００２７】
（３）ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換  この変換は、ＳｈｉｆｔＲｏｗｓ変換の逆である。ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換は、（１５，  １４，  １３，  １２，  １１，  １０，  ９，  ８，  ７，  ６，  ５，  ４，  ３，  ２，  １，  ０）→（３，  ６，  ９，  １２，  １５，  ２，  ５，  ８，  １１，  １４，  １，  ４，  ７，  １０，  １３，  ０）の、バイト単位の置換である。Ｐ−Ａ表記では、［Ｐ，Ｏ，Ｎ，Ｍ，Ｌ，Ｋ，Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ，Ｂ，Ａ］→［Ｄ，Ｇ，Ｊ，Ｍ，Ｐ，Ｃ，Ｆ，Ｉ，Ｌ，Ｏ，Ｂ，Ｅ，Ｈ，Ｋ，Ｎ，Ａ］となる。
【００２８】
（４）ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換は、入力の４×４マトリクス表現の列を処理する１２８ビット→１２８ビット変換である。変換は４×４マトリクス内の各列を、ＡＥＳ―ＧＦ２５６フィールド内の係数を備えた３次多項式として扱う。状態の４×４マトリクス表現の各列は、多項式ａ−１（ｘ）＝｛０ｂ｝ｘ３＋｛０ｄ｝ｘ２＋｛０９｝ｘ＋｛０ｅ｝で乗算され、ｍｏｄｕｌｏ  ｘ４＋１で約分される。
【００２９】
上記復号ラウンドの変換シーケンスは、以下に表４として示すように単一のＡＥＳ復号ラウンド命令ＡＥＳＤＥＣによって行うことができ、最後の復号ラウンドの変換シーケンスは、以下に表５として示すように単一のＡＥＳの最後の復号ラウンド命令ＡＥＳＤＥＣＣＬＡＳＴによって行うことができる。
【００３０】
以下表４及び表５に示すＡＥＳＤＥＣ命令及びＡＥＳＤＥＣＬＡＳＴ命令は、Ｓｔａｔｅ（ｘｍｍレジスタに規定された１２８ビット）、及びＲｏｕｎｄＫｅｙ（ｘｍｍレジスタにおいて、又はメモリ・ポインタとして規定された１２８ビット）、又は鍵（ｘｍｍレジスタ及び／又はメモリに規定された１２８、１９２又は２５６ビット）に対する特定の変換シーケンスを行う。前述の命令は１２８ビット出力を生成する。１２８ビット→１２８ビットの対応する変換シーケンスを、ＦＩＰＳパブリケーション１９７の用語を使用して説明する。
【００３１】
ＡＥＳＤＥＣ  ｘｍｍ１，ｘｍｍ２／ｍ１２８
Ｓｔａｔｅ＝ｘｍｍ１、
ＲｏｕｎｄＫｅｙ＝ｘｍｍ２／ｍ１２８、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ（Ｔｍｐ＝）、
Ｏｕｔｐｕｔ＝ｘｍｍ１＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ＝，ＲｏｕｎｄＫｅｙ）
表４
【００３２】
ＡＥＳＤＥＣＬＡＳＴ  ｘｍｍ１，ｘｍｍ２／ｍ１２８
Ｓｔａｔｅ＝ｘｍｍ１、
ＲｏｕｎｄＫｅｙ＝ｘｍｍ２／ｍ１２８、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｏｕｔｐｕｔ＝ｘｍｍ１＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表５
【００３３】
表１、２、４及び５に示す４つのＡＥＳラウンド命令（ＡＥＳＥＮＣ，ＡＥＳＮＥＣＬＡＳＴ，ＡＥＳＤＥＣ，ＡＥＳＤＥＣＬＡＳＴ）はそれぞれ、いくつかのＡＥＳ変換を併せて行うことによって性能を向上させる。しかし、上記命令は、ＡＥＳ標準の現行バージョンのみをサポートする。
【００３４】
本発明の実施例は、分離された変換としてＡＥＳアルゴリズムのサブ工程（変換）を得るためのＡＥＳ暗号化命令及びＡＥＳ復号命令を含む、命令の組合せを使用する。分離された変換には、暗号化ＡＥＳ命令（ＡＥＳＥＮＣ，ＡＥＳＥＮＣＬＡＳＴ）によって使用されるＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ及びＭｉｘＣｏｌｕｍｎｓ変換、並びに復号ＡＥＳ命令（ＡＥＳＤＥＣ，ＡＥＳＤＥＣＬＡＳＴ）によって使用されるＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換が含まれる。
【００３５】
変換を分離させるための機能は、ＡＥＳ暗号化命令及びＡＥＳ復号命令の使用に柔軟性を加える。例えば、ＡＥＳアルゴリズムのサブ工程（変換）を得るための機能は、ＡＥＳの変形を構成することを可能にし、サポートする対象のＡＥＳ標準において考えられる将来の修正を可能にする。ＡＥＳプリミティブ（変換）を他の暗号及び暗号ハッシュ関数の構築ブロックとして使用することも可能にする。
【００３６】
図１は、汎用プロセッサにおいてＡＥＳ暗号化及び復号を行うための命令を含むシステム１００を示すブロック図である。システム１００は、プロセッサ１０１と、メモリ・コントローラ・ハブ（ＭＣＨ）又はグラフィック・メモリ・コントローラ・ハブ（ＧＭＣＨ）１０２と、入出力（Ｉ／Ｏ）コントローラ・ハブ（ＩＣＨ）１０４とを含む。ＭＣＨ１０２は、プロセッサ１０１とメモリ１０８との間の通信を制御するメモリ・コントローラ１０６を含む。プロセッサ１０１及びＭＣＨ１０２はシステム・バス１１６を介して通信する。
【００３７】
プロセッサ１０１は、複数のプロセッサ（単一コアのインテル（登録商標）ペンティアム（登録商標）ＩＶプロセッサ、単一コアのインテル・セレロン・プロセッサ、インテル（登録商標）ＸＳｃａｌｅプロセッサや、マルチコア・プロセッサ、例えば、インテル（登録商標）ペンティアム（登録商標）Ｄ、インテル（登録商標）ジーオン（登録商標）プロセッサや、インテル（登録商標）コア（登録商標）デュオ・プロセッサ、又は何れかの他のタイプのプロセッサ）のうちの何れか１つであり得る。
【００３８】
メモリ１０８は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、同期化ダイナミック・ランダム・アクセス・メモリ（ＳＤＲＡＭ）、ダブル・データ・レート２（ＤＤＲ２ＲＡＭ）若しくはランバス・ダイナミック・ランダム・アクセス・メモリ（ＲＤＲＡＭ）、又は何れかの他のタイプのメモリであり得る。
【００３９】
ＩＣＨ１０４は、ダイレクト・メディア・インタフェース（ＤＭＩ）などの高速チップ間相互接続１１４を使用してＭＣＨ１０２に結合することができる。ＤＭＩは、２つの一方向レーンを介した２ギガビット／秒の同時転送レートをサポートする。
【００４０】
ＩＣＨ１０４は、ＩＣＨ１０４に結合された少なくとも１つの記憶装置１１２との通信を制御するために記憶Ｉ／Ｏコントローラ１１０を含み得る。記憶装置は例えば、ディスク・ドライブ、ディジタル・ビデオ・ディスク（ＤＶＤ）ドライブ、コンパクト・ディスク（ＣＤ）ドライブ、レイド（ＲＡＩＤ）、テープ・ドライブや他の記憶装置であり得る。ＩＣＨ１０４は、例えば、直列に接続された小型コンピュータ・システム・インタフェース（ＳＡＳ）やシリアル・アドバンスド・テクノロジー・アタッチメント（ＳＡＴＡ）などの直列記憶プロトコルを使用して記憶プロトコル相互接続１１８を介して記憶装置１１２と通信することができる。
【００４１】
プロセッサ１０１は、ＡＥＳ暗号化処理及びＡＥＳ復号処理を行うためのＡＥＳ機能１０３を含む。ＡＥＳ機能１０３を使用して、メモリ１０８に記憶し、かつ／又は記憶装置１１２に記憶することができる情報を暗号化又は復号することができる。
【００４２】
メモリ１０８又は記憶装置１１２に記憶することができる変換分離機能１２０は、ＡＥＳ機能１０３を使用して、ＡＥＳ暗号命令又はＡＥＳ復号命令における変換のうちの１つを分離することができる。変換分離機能１２０は後に、図３乃至図７に関して説明する。
【００４３】
図２は、図１に示すプロセッサ１０１の実施例のブロック図である。プロセッサ１０１は、レベル１（Ｌ１）命令キャッシュ２０２から受信されたプロセッサ命令をデコードするためのフェッチ及びデコード装置２０６を含む。プロセッサ命令を実行するために使用する対象のデータは、レジスタ・ファイル２０８に記憶することができる。一実施例では、レジスタ・ファイル２０８は、ＡＥＳラウンド命令によって使用するためのデータを記憶するためのＡＥＳラウンド命令によって使用される複数の１２８ビット・レジスタを含む。
【００４４】
一実施例では、レジスタ・ファイル２０８は、ストリーミング（単一命令多重データ（ＳＩＭＤ））拡張（ＳＳＥ）命令セットを有するインテル・ペンティアム（登録商標）ＭＭＸプロセッサに設けられた１２８ビットＭＭＸレジスタと同様な１２８ビット・レジスタの群である。ＳＩＭＤプロセッサでは、データは、一度に、一１２８ビット・ブロックがロードされて、１２８ビット・ブロック単位で処理される。
【００４５】
フェッチ及びデコード装置２０６は、Ｌ１命令キャッシュ２０２からマクロ命令をフェッチし、マクロ命令をデコードし、マイクロ操作（μｏｐｓ）と呼ばれる単純な操作（マイクロコード・リード・オンリー・メモリ（ＲＯＭ）２１４に記憶することができる）に分割する。パイプラインされた実行装置２１０は、マイクロ操作をスケジューリングし、実行する。図示された実施例では、実行装置２１０におけるＡＥＳ機能１０３は、ＡＥＳ暗号化／復号ラウンド命令を含むＡＥＳラウンド命令の組のマイクロ操作を含む。ＡＥＳラウンド命令は、完全にパイプラインされており、よって、プロセッサ（ＣＰＵ）は、処理する準備ができているデータが存在している場合、各サイクルにおいて命令をディスパッチすることができる。退避装置２１２は、実行された命令の結果をレジスタ又はメモリに書き込む。ＡＥＳラウンド命令によって使用されるラウンド鍵２１６は、Ｌ１データ・キャッシュ２０４に記憶し、ＡＥＳ暗号化／復号ラウンド命令のうちの１つの何れかを実行するためにマイクロ操作によって使用するために実行装置２１０にロードすることができる。Ｌ１データ・キャッシュ２０４にラウンド鍵２１６を記憶することにより、サイドチャネル攻撃（例えば、システム１００に記憶された暗号化情報に対するアクセスを得るためにラウンド鍵を得ようとする試行）からラウンド鍵２１６を保護する。
【００４６】
ＡＥＳラウンド命令がフェッチ及びデコード装置２０６によってデコードされた後、実行装置２１０によるＡＥＳラウンド命令の実行は、マイクロコードＲＯＭ２１４に記憶することができるＡＥＳラウンド命令に関連付けられたマイクロ操作を行うことを伴う。
【００４７】
一実施例では、暗号化ラウンド、復号ラウンド、暗号化最終ラウンド、及び復号最終ラウンドを行うための別個のＡＥＳラウンド命令セットを含むＡＥＳラウンド命令セットが提供される。一実施例では、ＡＥＳラウンド命令はそれぞれ、一意の操作コード（ｏｐｃｏｄｅ）を有する。
【００４８】
表１、表２、表４及び表５に関して既に記載したように、ＡＥＳ命令セットは、４つのＡＥＳラウンド命令（暗号化、復号、暗号化最終ラウンド、及び復号最終ラウンド）を含む。ＡＥＳ命令セットにおけるＡＥＳラウンド命令は、最終ラウンド以外のラウンド全てに使用する対象の暗号化及び復号ラウンド動作を行うための単一ラウンド動作を含む。
【００４９】
例えば、表１に示すＡＥＳＥＮＣ単一ラウンド命令では、入力データは１２８ビット・レジスタ（ｘｍｍｓｒｃｄｓｔ）に記憶され、ラウンド鍵は、別の１２８ビット・レジスタ（Ｘｍｍ）に記憶される。この命令は、１２８ビットのｘｍｍｓｒｃｄｓｔレジスタに記憶された入力データ（ソース）にＡＥＳラウンド処理を行い、１２８ビットのｘｍｍｓｒｃｄｓｔレジスタに記憶された入力データを上記ラウンド処理の実行の結果で上書きする。よって、ｘｍｍｓｒｃｄｓｔはまず、入力データを記憶し、その後、ＡＥＳラウンド処理の結果を記憶する。
【００５０】
例えば、表２に示すＡＥＳＥＮＣＬＡＳＴ単一ラウンド命令では、入力データは１２８ビット・レジスタ（ｘｍｍｓｒｃｄｓｔ）に記憶され、ラウンド鍵は、別の１２８ビット・レジスタ（Ｘｍｍ）に記憶される。この命令は、ｘｍｍｓｒｃｄｓｔレジスタに記憶された入力データ（ソース）にＡＥＳラウンド処理を行い、ｘｍｍｓｒｃｄｓｔレジスタに記憶された入力データを上記ラウンド処理の実行の結果で上書きする。よって、ｘｍｍｓｒｃｄｓｔはまず、入力データを記憶し、その後、上記ラウンド処理の結果を記憶する。Ｘｍｍレジスタは、ラウンド処理のラウンド鍵を記憶する。
【００５１】
鍵の容量は、１２８ビット、１９２ビット、又は２５６ビットであり得る。実行する対象のラウンドの数（ｎ）は、鍵の容量に応じて、１、１０、１２又は１４であり得る。各ラウンド鍵の容量は固定（１２８ビット）である。ラウンド数の値が１０、１２、１４の場合、ＡＥＳマイクロ操作は、１２８ビット、１９２ビット又は２５６ビットの鍵容量について、標準ＡＥＳ暗号化及び復号を行うことができる。
【００５２】
同じ鍵が多くのブロックにわたって使用される場合、ラウンド毎のラウンド鍵（鍵スケジュール）を、予め計算し、メモリに（例えば、ラウンド鍵２１６をレベル１データ・キャッシュ２０４に）記憶することができる。ラウンド鍵２１６は、鍵の鍵スケジュールを記憶するための１０個の要素を有するアレイ（ＲＫ）を含み得る。ＡＥＳ−１２８暗号化の入力鍵はＲＫ［０］に記憶され、９個のラウンド鍵ＲＫ［０］  −  ＲＫ［１］は予め計算される。
【００５３】
一実施例では、レジスタ・ファイル３０４は、ＡＥＳ命令によって使用することができる複数の１２８ビット・レジスタを有する。１２８ビット・レジスタは、ソース・オペランド、ラウンド鍵、及びＡＥＳ命令の結果を記憶することができる。第１のラウンドの場合、ＡＥＳ命令は、暗号化する対象の１２８ビットの平文、又は復号する対象の１２８ビットの暗号文であり得るソース・オペランドを受け取る。
【００５４】
本発明の一実施例では、上述のＡＥＳ命令の組（ＡＥＳＩＮＣ，ＡＥＳＤＥＣ，ＡＥＳＥＮＣＬＡＳＴ，ＡＥＳＤＥＣＬＡＳＴ）を使用して、ＦＩＰＳ１９７によって規定されるＡＥＳアルゴリズムのサブ工程（変換）を分離することができる。サブ工程は、ＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ、ＭｉｘＣｏｌｕｍｎｓ、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ及びＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓである。
【００５５】
６つのサブ工程（変換）は１２８ビットの状態を処理し、１２８ビットの結果をもたらす。「逆」変換は、当該変換の対応する逆関数である。例えば、Ｔｍｐ＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｓｔａｔｅ）の場合、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）＝Ｓｔａｔｅである。ＡｄｄＲｏｕｎｄＫｅｙ変換は２つの１２８ビット入力（Ｓｔａｔｅ及びＲｏｕｎｄＫｅｙ）を処理し、そのビット単位のＸＯＲを出力する。
【００５６】
図３は、ＡＥＳアルゴリズムにおけるＭｉｘＣｏｌｕｍｎｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＭｉｘＣｏｌｕｍｎ分離変換関数３００の実施例のフロー図である。
【００５７】
ＭｉｘＣｏｌｕｍｎｓ変換のマイクロ操作は、表１に示すＡＥＳＥＮＣ命令にのみ使用される。ＡＥＳＤＥＣ命令は、ＡＥＳＥＮＣ命令における変換に対する逆変換を含む。
【００５８】
ブロック３０２では、ＭｉｘＣｏｌｕｍｎｓ変換の分離関数は、現在の状態、及び０にセットされたラウンド鍵により、ＡＥＳＤＥＣＬＡＳＴ命令を呼び出す。ＡＥＳＤＥＣＬＡＳＴは、以下に表６に示すマイクロ操作を行う。
【００５９】
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表６
【００６０】
まず、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換がＳｔａｔｅに対して行われ、上記変換の結果がＴｍｐに記憶される。次いで、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換がＴｍｐの内容に対して行われ、その結果がＴｍｐに記憶される。最後に、ＡｄｄＲｏｕｎｄＫｅｙ変換が、Ｔｍｐの内容、及び０にセットされたＲｏｕｎｄＫｅｙに対して行われる。排他的ＯＲ演算がＴｍｐの内容、及び０に対して行われ、その結果はＴｍｐの内容になるので、ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作は基本的には、ＮＯＰ（無演算）である。ＡＥＳＥＮＣＬＡＳＴ命令の出力Ｘは次いで、ＡＥＳＥＮＣ命令に対する入力として供給される。
【００６１】
ブロック３０４では、ＡＥＳＥＮＣ命令は、ＡＥＳＤＥＣＬＡＳＴ命令の結果（Ｘ）を受け取る。結果Ｘは、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ））、すなわち、２つの変換の結果：Ｓｔａｔｅに対するＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ及びＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓである。ＡＥＳＩＮＣ命令に対する入力は、ＡＥＳＤＥＣＬＡＳＴ命令の結果、及び０にセットされたラウンド鍵である。ＡＥＳＥＮＣ命令は、以下、表７に示すマイクロ操作を行う。
【００６２】
Ｔｍｐ１＝ＳｈｉｆｔＲｏｗｓ（Ｘ）
Ｔｍｐ１＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ１）
Ｔｍｐ１＝ＭｉｘＣｏｌｕｍｎｓ（Ｔｍｐ１）
Ｔｍｐ１＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ１，ＲｏｕｎｄＫｅｙ）
表７
【００６３】
まず、ＳｈｉｆｔＲｏｗｓ変換が入力Ｘに対して行われ、上記変換の結果がＴｍｐに記憶される。次いで、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換がＴｍｐの内容に対して行われ、その結果がＴｍｐに記憶される。次いで、ＭｉｘＣｏｌｕｍｎｓ変換がＴｍｐの内容に対して行われる。最後に、ＡｄｄＲｏｕｎｄＫｅｙ変換がＴｍｐの内容に対して行われ、ＲｏｕｎｄＫｅｙが０にセットされる。排他的ＯＲ演算がＴｍｐの内容、及び０に対して行われ、その結果はＴｍｐの内容になるので、ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作は基本的にはＮＯＰ（無演算）である。ＡＥＳＥＮＣＬＡＳＴ命令及びＡＥＳＥＮＣ命令の組合せにより、ＭｉｘＣｏｌｕｍｎｓ変換が分離する。ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作はＮＯＰを行い、その他のマイクロ操作（ＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ）は、逆マイクロ操作（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ）を行うことによって交換するからである。
【００６４】
よって、ＡＥＳＥＮＣ命令の出力は、ＭｉｘＣｏｌｕｍｎｓ（Ｓｔａｔｅ）であり、これは、以下に示すようにＡＥＳＤＥＣＬＡＳＴ命令及びＡＥＳＥＮＣ命令の組合せを使用して分離される。
【００６５】
Ｙ＝ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ（ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ））））
【００６６】
図４は、ＡＥＳアルゴリズムにおけるＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎ分離変換関数４００の実施例のフロー図である。
【００６７】
ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換のマイクロ操作は、表２に示すＡＥＳＥＮＣＬＡＳＴ命令にのみ使用される。ＡＥＳＤＥＣ命令は、ＡＥＳＥＮＣ命令における変換に対する逆変換を含む。
【００６８】
ブロック４０２では、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換の分離関数４００における第１の命令はＡＥＳＤＥＣＬＡＳＴ命令である。これは、ラウンド鍵を０にセットして呼び出す。ＡＥＳＤＥＣＬＡＳＴ命令は、以下に表８に示すマイクロ操作を行う。
【００６９】
Ｔｍｐ＝ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）、
Ｔｍｐ＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表８
【００７０】
まず、ＳｈｉｆｔＲｏｗｓ変換をＳｔａｔｅに対して行って、上記変換の結果をＴｍｐに記憶する。次いで、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換がＴｍｐの内容に対して行われ、その結果がＴｍｐに記憶される。最後に、ＡｄｄＲｏｕｎｄＫｅｙ変換がＴｍｐの内容に対して行われ、ＲｏｕｎｄＫｅｙが０にセットされる。排他的ＯＲ演算がＴｍｐの内容、及び０に対して行われ、ＸＯＲ演算の結果がＴｍｐの元の内容になるので、ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作は基本的にはＮＯＰ（無演算）である。ＡＥＳＥＮＣＬＡＳＴ命令の出力Ｘは、ＡＥＳＥＣＣ命令に入力される。
【００７１】
ブロック４０４では、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換分離関数における第２の命令は、ＡＥＳＥＮＣＬＡＳＴ命令の結果（ｘ）によって与えられるＡＥＳＤＥＣ命令である。結果Ｘは、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ））である、すなわち、状態に対する２つの変換（ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ及びＳｈｉｆｔＲｏｗｓ）の結果である。ＡＥＳＤＥＣ命令に対する入力は、ＡＥＳＤＥＣＬＡＳＴ命令の結果であり、ラウンド鍵は０にセットされる。ＡＥＳＥＮＣ命令は、以下、表９に示すマイクロ操作を行う。
【００７２】
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｘ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ（Ｔｍｐ）、
Ｔｍｐ＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表９
【００７３】
まず、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換を入力Ｘに対して行って、上記変換の結果をＴｍｐに記憶する。次いで、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換がＴｍｐの内容に対して行われ、その結果がＴｍｐに記憶される。次いで、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換がＴｍｐの内容に対して行われる。最後に、ＡｄｄＲｏｕｎｄＫｅｙ変換がＴｍｐの内容に対して行われ、ＲｏｕｎｄＫｅｙが０にセットされる。排他的ＯＲ演算がＴｍｐの内容、及び０に対して行われ、その結果がＴｍｐの内容になるので、ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作は基本的には、ＮＯＰ（無演算）である。
【００７４】
よって、ＡＥＳＥＮＣＬＡＳＴ命令及びＡＥＳＤＥＣ命令の組合せにより、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換が分離する。ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作はＮＯＰを行い、その他のマイクロ操作（ＳｈｉｆｔＲｏｗｓ、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ）は、逆マイクロ操作（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ）を行うことによって交換するからである。よって、ＡＥＳＤＥＣ命令の出力は、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ（Ｓｔａｔｅ）であり、これは、以下に示すように、ＡＥＳＥＮＣＬＡＳＴ命令によって行われる変換及びＡＥＳＤＥＣ命令によって行われる変換を組合せることによって分離される。
【００７５】
Ｙ＝ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ（ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ））））
よって、２つのＡＥＳラウンド命令の前述のシーケンスの結果は、分離されたＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換になる。
【００７６】
図５は、ＳｈｉｆｔＲｏｗｓ変換及びＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換を分離するためのパックト・シャフル・バイト（ＰＳＨＵＦＢ）の使用を示す。状態５００は、Ａ乃至Ｌを付した１６バイト（１２８ビット）を有する。ＰＳＨＵＦＢ命令は、バイトＡ及びＢという２つのレジスタとして表すことができる２つの１２８ビット入力である。ＰＳＨＵＦＢ命令は、バイトＡ＝［ａ１５  ａ１４  ａ１３  ．．．  ａ０］及びバイトＢ  ＝  ［ｂ１５  ｂ１４  ｂ１３  ．．．  ｂ０］という２つのレジスタを用い、レジスタＡを［ａｂ１５  ａｂ１４  ａｂ１３  ．．．  ａｂ０］で置き換える。ｂｉの最上位ビットが１にセットされた場合、結果のｉ番目のエントリは０である。
【００７７】
図５に示す例では、状態５００は、バイトＡ＝［ａ１５  ａ１４  ａ１３  ．．．  ａ０］に対応する。ＳｈｉｆｔＲｏｗｓ変換の結果は状態５０２に示す。ＳｈｉｆｔＲｏｗｓ変換を行うために、バイトＢ＝［ｂ１５  ｂ１４  ｂ１３  ．．．  ｂ０］は、０Ｂ０６０１０Ｃ０７０２０Ｄ０８０３０Ｅ０９０４０Ｆ０Ａ０５００（１６進）にセットされる。状態５００のバイト［１５：０］は、状態５０２のビット位置（３，  ６，  ９，  １２，  １５，  ２，  ５，  ８，  １１，  １４，  １，  ４，  ７，  １０，  １３，  ０）に移動する。例えば、「Ａ」を付した状態５００のバイト［０］は状態５０２のバイト［０］に移動し、「Ｌ」を付した状態５００のバイト［１５］は状態５０２のバイト［１１］「Ｂ」に移動する。
【００７８】
ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換は、バイトＡを状態５０２にセットし、バイトＢを「０３０６０９０Ｃ０Ｆ０２０５０８０Ｂ０Ｅ０１０４０７０Ａ０Ｄ００」（１６進）にセットして、ＰＳＨＵＳＢ命令を使用して行われる。状態５００のバイト［１５：０］は、状態５０２のビット位置（３，  ６，  ９，  １２，  １５，  ２，  ５，  ８，  １１，  １４，  １，  ４，  ７，  １０，  １３，  ０）に移動する。例えば、「Ａ」を付した状態５０２のバイト［０］は状態５０４のバイト［０］に移動し、「Ｌ」を付した状態５００のバイト［１５］は状態５０４のバイト［３］に移動する。
【００７９】
よって、ＳｈｉｆｔＲｏｗｓ変換及びＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換は、Ｂバイトの選択（すなわち、ＳｈｉｆｔＲｏｗｓ変換を行うための「０Ｂ０６０１０Ｃ０７０２０Ｄ０８０３０Ｅ０９０４０Ｆ０Ａ０５００」（１６進）、及びＩｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ変換を行うための「０３０６０９０Ｃ０Ｆ０２０５０８０Ｂ０Ｅ０１０４０７０Ａ０Ｄ００」（１６進））に基づいてＰＳＨＵＦＢ命令を使用して行うことができる。
【００８０】
図６は、ＡＥＳアルゴリズムにおけるＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を分離するための少なくとも１つのＡＥＳラウンド命令を使用したＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ分離変換関数の実施例のフロー図である。
【００８１】
ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換のマイクロ操作は、表２に示すＡＥＳＥＮＣＬＡＳＴ命令及び表１に示すＡＥＳＥＮＣ命令に使用される。図５に関して説明した実施例では、ＡＥＳＥＮＣＬＡＳＴ命令を使用してＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を分離する。
【００８２】
ブロック６０２では、ＰＳＨＵＦＢ命令のＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換の分離関数６００を、Ｂレジスタを０３０６０９０Ｃ０Ｆ０２０５０８０Ｂ０Ｅ０１０４０７０Ａ０Ｄ００（１６進）にセットして呼び出して、状態に対してＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓを行う。図５に関して上述したように、Ｉｎｖｅｒｓｅシフト行変換は、Ｂレジスタに記憶された対応するバイト位置に基づいて、状態におけるバイトの並び替えを行う。
【００８３】
ブロック６０４では、Ｓｕｂｓｔｉｔｕｔｅバイト変換分離関数６００におけるＡＥＳＤＥＣＬＡＳＴ命令が、ＰＳＨＵＦＢ命令の結果（Ｘ）によって呼び出される。ＡＥＳＤＥＣＬＡＳＴ命令に対する入力は、ＰＳＨＵＦＢ命令の結果、及び、０にセットされたラウンド鍵である。ＡＥＳＤＥＣＬＡＳＴ命令は、以下、表１０に示すマイクロ操作を行う。
【００８４】
Ｔｍｐ＝ＳｈｉｆｔＲｏｗｓ（Ｘ）、
Ｔｍｐ＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表１０
【００８５】
まず、ＳｈｉｆｔＲｏｗｓ変換を入力Ｘに対して行って、上記変換の結果をＴｍｐに記憶する。次いで、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換がＴｍｐの内容に対して行われ、その結果がＴｍｐに記憶される。最後に、ＡｄｄＲｏｕｎｄＫｅｙ変換がＴｍｐの内容に対して行われ、ＲｏｕｎｄＫｅｙが０にセットされる。排他的ＯＲ演算がＴｍｐの内容、及び０に対して行われ、その結果がＴｍｐの内容になるので、ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作は基本的には、ＮＯＰ（無演算）である。ＰＳＨＵＦＢ命令及びＡＥＳＥＮＣＬＡＳＴ命令の組合せにより、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換が分離する。ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作はＮＯＰを行い、その他のマイクロ操作（ＳｈｉｆｔＲｏｗｓ）は、ＰＳＨＵＦＢ命令によって逆マイクロ操作（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗ）を行うことによって交換されるからである。よって、ＡＥＳＥＮＣＬＡＳＴ命令の出力は、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｓｔａｔｅ）であり、これは、以下に示すようにＡＥＳＥＮＣＬＡＳＴ命令及びＰＳＨＵＦＢ命令の組合せを使用して分離される。
【００８６】
Ｙ＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＳｈｉｆｔＲｏｗｓ（Ｘ））＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＳｈｉｆｔＲｏｗｓ（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）））＝ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｓｔａｔｅ）
よって、１つのＡＥＳラウンド命令の前述の命令シーケンスの結果は、分離されたＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換になる。
【００８７】
別の実施例では、ＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換は以下のＡＥＳ命令を使用して分離することができる。
【００８８】
ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ  ｘｍｍ１，ｘｍｍ２／ｍ１２８，ｉｍｍ８
ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令は、鍵スケジュールのラウンド鍵の生成を支援するために使用され、鍵の容量と無関係に動作し、すなわち、鍵容量が１２８ビットであるか、１９２ビットであるか、又は２５６ビットであるかに関係なく同じ処理が行われる。ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令は、ＦＩＰＳ１９７鍵スケジュールを生成するために使用される「ｔｅｍｐ＝ＳｕｂＷｏｒｄ（ＲｏｔＷｏｒｄ（ｔｅｍｐ））  ｘｏｒ  Ｒｃｏｎ［ｉ／Ｎｋ］」及び「ｔｅｍｐ＝ＳｕｂＷｏｒｄ（ｔｅｍｐ）」の演算を行う。
【００８９】
しかし、一度に１つの３２ビット・ワード（ｄｗｏｒｄ）を処理する代わりに、ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令は、４つの３２ビット・ワードに対する処理を一度に（すなわち、４つのｄｗｏｒｄ（１２８ビット）全てに対する処理を同時に）行い、それにより、ラウンド鍵が生成される速度を増加させる。
【００９０】
ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令は以下の処理の結果をもたらす。
【００９１】
結果：＝
【００９２】
【数１】
0005538736.tif 000002
ここで、
Ｘ３［３１−０］：＝Ｔｍｐ１［１２７−９６］、
Ｘ２［３１−０］：＝Ｔｍｐ１［９５−６４］、
Ｘ１［３１−０］：＝Ｔｍｐ１［６３−３２］、
Ｘ０［３１−０］：＝Ｔｍｐ１［３１−０］、
ＲＣＯＮ［７−０］：＝ｉｍｍ８［７］ｉｍｍ８［６］ｉｍｍ８［５］ｉｍｍ８［４］
ｉｍｍ８［３］ｉｍｍ８［２］ｉｍｍ８［１］ｉｍｍ８［０］
ＲｏｔＷｏｒｄ（Ｒｏｔ）は、４バイトの３２ビットｄｗｏｒｄを用い、巡回置換を行う関数である。Ｒｏｔｗｏｒｄは、｛ａ０，ａ１，ａ２，ａ３｝の順序の、ａ０乃至ａ４を付した４バイトのｄｗｏｒｄを用い、巡回置換を行って４バイトを｛ａ１，ａ２，ａ３，ａ０｝の順序で返す。ＲｏｔＷｏｒｄ関数は、リトルエンディアン表記で規定される。
【００９３】
ＲｏｔＷｏｒｄ  Ｘ［３１−０］＝［Ｘ［７−０］｜｜Ｘ［３１−８］］、
すなわち、Ｒｏｔ（ｘ）＝（Ｘ＞＞８）｜（Ｘ＜＜２４）、
例えば、Ｘ［３１−０］＝｀３ｃ４ｆｃｆ０９；ＲｏｔＷｏｒｄ（｀３ｃ４ｆｃｆ０９｀）＝［‘０９’｜｀３ｃ４ｆｃｆ｀）＝（｀０９３ｃ４ｆｃｆ）の場合、
Ｓ−Ｂｏｘ４は、以下のように、４つのｄｗｏｒｄに、単一のｄｗｏｒｄのＳ−Ｂｏｘ関数を施すことを表す。
【００９４】
Ｓ−Ｂｏｘ４（Ｘ）［３１−０］）＝［Ｓ−Ｂｏｘ（Ｘ［３１−２４］），Ｓ−Ｂｏｘ（Ｘ［２３−１６］），Ｓ−Ｂｏｘ（Ｘ［１５−８］），Ｓ−Ｂｏｘ（Ｘ［７−０］）］。
【００９５】
Ｓ−ｂｏｘは、バイト値の１対１の置換を行うために使用される非線形置換テーブルである。ＳｕｂＷｏｒｄ関数は、４バイト入力（３２ビット・ワード（ｄｗｏｒｄ））を用い、Ｓ−ｂｏｘ（バイト置換（ＳｕｂＢｙｔｅｓ））をｄｗｏｒｄ内の４バイトそれぞれに施して３２ビット出力ｄｗｏｒｄを生成する。ＳｕｂＷｏｒｄ関数（３２ビット）は、４つの独立した（並列の）ＳｕｂＢｙｔｅ処理（８ビット）をもたらす。
【００９６】
よって、置換バイト変換は、直近の入力（ｉｍｍ８）を０にセットしてＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令を使用し、入力を以下のように、予め並び替えて分離することができる。
【００９７】
ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ  ｘｍｍ１，ｘｍｍ１，ｉｍｍ８
ＰＳＨＵＦＢ  ｘｍｍ１，  ｍａｓｋ
ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令は、ｒｃｏｎとのＸＯＲの影響を除去し、ＰＳＨＵＦＢ命令のマスクを選択して、３及び１というダブルワードを元に戻す。
【００９８】
図７は、ＡＥＳアルゴリズムにおけるＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換を分離するために少なくとも１つのＡＥＳラウンド命令を使用したＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ分離変換関数７００の実施例のフロー図である。
【００９９】
ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換のマイクロ操作が、表５に示すＡＥＳＤＥＣＣＬＡＳＴ命令に使用される。図５に関して説明した実施例では、ＰＳＨＵＦＢ命令を使用してＳｈｉｆｔ  Ｒｏｗｓ変換を分離する。
【０１００】
ブロック７０２では、ＰＳＨＵＦＢ命令のＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換の分離関数６００を、Ｂレジスタを「０Ｂ０６０１０Ｃ０７０２０Ｄ０８０３０Ｅ０９０４０Ｆ０Ａ０５００」にセットして呼び出して状態に対してＳｈｉｆｔＲｏｗｓを行う。図５に関して上述したように、ＳｈｉｆｔＲｏｗｓ変換は、別のレジスタに記憶された対応するバイト位置に基づいて、第１のレジスタに記憶された状態のバイトの並び替えを行う。
【０１０１】
ブロック７０４では、Ｓｕｂｓｔｉｔｕｔｅバイト変換分離関数７００におけるＡＥＳＤＥＣＬＡＳＴ命令が、ＰＳＨＵＦＢ命令の結果（Ｘ）によって呼び出される。ＡＥＳＤＥＣＬＡＳＴ命令に対する入力は、ＰＳＨＵＦＢ命令の結果、及び、０にセットされたラウンド鍵である。ＡＥＳＤＥＣＬＡＳＴ命令は、以下、表１０に示すマイクロ操作を行う。
【０１０２】
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｘ）、
Ｔｍｐ＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｔｍｐ）、
Ｔｍｐ＝ＡｄｄＲｏｕｎｄＫｅｙ（Ｔｍｐ，ＲｏｕｎｄＫｅｙ）
表１０
【０１０３】
まず、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換を入力Ｘに対して行って、上記変換の結果をＴｍｐに記憶する。次いで、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換がＴｍｐの内容に対して行われ、その結果がＴｍｐに記憶される。最後に、ＡｄｄＲｏｕｎｄＫｅｙ変換がＴｍｐの内容に対して行われ、ＲｏｕｎｄＫｅｙが０にセットされる。排他的ＯＲ演算がＴｍｐの内容、及び０に対して行われ、その結果がＴｍｐの内容になるので、ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作は基本的には、ＮＯＰ（無演算）である。ＰＳＨＵＦＢ命令及びＡＥＳＤＥＣＬＡＳＴ命令の組合せにより、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換が分離する。ＡｄｄＲｏｕｎｄＫｅｙマイクロ操作はＮＯＰを行い、その他のマイクロ操作（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ）は、ＰＳＨＵＦＢ命令によって行われるマイクロ操作（ＳｈｉｆｔＲｏｗ）によって交換されるからである。よって、ＡＥＳＤＥＣＬＡＳＴ命令の出力は、ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｓｔａｔｅ）であり、これは、以下に示すようにＡＥＳＤＥＣＬＡＳＴ命令及びＰＳＨＵＦＢ命令の組合せを使用して分離される。
【０１０４】
Ｙ＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（Ｘ））＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（ＳｈｉｆｔＲｏｗｓ（Ｓｔａｔｅ）））＝ＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ（Ｓｔａｔｅ）
よって、少なくとも１つのＡＥＳラウンド命令を含む前述の命令シーケンスの結果は、分離されたＩｎｖｅｒｓｅＳｕｂｓｔｉｔｕｔｅＢｙｔｅｓ変換になる。
【０１０５】
上述のようにＡＥＳラウンド暗号化／復号命令の特別な組合せを使用することにより、ＡＥＳラウンド暗号化／復号命令によって行われるＡＥＳ変換は分離することができる。これは、ＡＥＳ命令の使用に柔軟性を加える。ＡＥＳ命令は例えば、ＡＥＳ変形の構成に使用し、ＡＥＳ標準において考えられる将来の修正をサポートし、かつ／又は、暗号及び暗号ハッシュ関数に対する構築ブロックとしてＡＥＳプリミティブを使用するために使用することが可能であるからである。ＡＥＳ命令の組合せによって分離される変換は、デバッグ、検証に、特に、フル・チップ及び認証の目的で使用することができる。
【０１０６】
本発明の実施例に関係する方法を、コンピュータ使用可能な媒体を含むコンピュータ・プログラムに実施することができるということは当業者に明らかになるであろう。例えば、前述のコンピュータ使用可能な媒体は、リード・オンリー・メモリ装置、例えば、コンパクト・ディスク・リード・オンリー・メモリ（ＣＤＲＯＭ）ディスクや従来のＲＯＭ装置、又はコンピュータ読み取り可能なプログラム・コードを記憶させたコンピュータ・ディスケットを含み得る。
【０１０７】
本発明の実施例は具体的には、その実施例を参照して示し、説明しているが、特許請求の範囲記載の本発明の実施例の範囲から逸脱しない限り、形態及び詳細における種々の変更を行うことができる。
【符号の説明】
【０１０８】
１００  システム
１０１  プロセッサ
１０８  メモリ
【図１】
0005538736.tif 000003
【図２】
0005538736.tif 000004
【図３】
0005538736.tif 000005
【図４】
0005538736.tif 000006
【図５】
0005538736.tif 000007
【図６】
0005538736.tif 000008
【図７】
0005538736.tif 000009