(57)【要約】【課題】少なくとも二つのモードでデータを暗号化／復号できる、二つのオペランドをもつ先進暗号化標準（AES）暗号化命令を提供する。【解決手段】命令が記憶されている機械可読媒体であって、該命令は、機械によって実行された場合に該機械をしてある方法を実行させる。該方法は、前記命令の第一のオペランドと前記命令の第二のオペランドとを組み合わせて結果を生成することを含みうる。前記結果は、先進暗号化標準（AES）アルゴリズムに従って、鍵を使って暗号化され、暗号化された結果を生成しうる。前記方法はまた、暗号化された結果を前記命令の第一のオペランドの位置に入れることも含みうる。【選択図】図５
2008283672.tif 000002
【特許請求の範囲】
【請求項１】
命令が記憶されている機械可読媒体であって、該命令は、機械によって実行された場合に該機械をして：
前記命令の第一のオペランドと前記命令の第二のオペランドを組み合わせて結果を生成する段階と；
先進暗号化標準（AES）アルゴリズムに従って、鍵を使って前記結果を暗号化して暗号化された結果を生成する段階とを有する方法を実行させる、機械可読媒体。
【請求項２】
前記組み合わせることが：
前記命令の第一のオペランドと前記命令の第二のオペランドとの排他的ORを求め、前記結果を生成することを含む、
請求項１記載の媒体。
【請求項３】
前記暗号化することが：
前記鍵を一つまたは複数の所定のレジスタから取得することを含む、請求項１記載の媒体。
【請求項４】
前記鍵が128ビット、192ビットまたは256ビットの長さである、請求項３記載の媒体。
【請求項５】
前記第二のオペランドが、128ビットの長さである、暗号化されるべき平文である、請求項１記載の媒体。
【請求項６】
前記第一のオペランドが0である、請求項５記載の媒体。
【請求項７】
前記第一のオペランドが先行する暗号化動作からの先行する暗号化された結果である、請求項５記載の媒体。
【請求項８】
平文の値を第二の値と論理的に組み合わせて組み合わされた結果を生成し、先進暗号化標準（AES）アルゴリズムおよび鍵を使って前記組み合わされた結果を暗号化して暗号化された結果を生成する第一の論理を有する、
暗号化を実行するプロセッサ。
【請求項９】
前記第一の論理が、前記平文の値と前記第二の値との排他的OR（XOR）を求めて前記組み合わされた結果を生成するよう構成されている、請求項８記載のプロセッサ。
【請求項１０】
前記第二の値を記憶する第一のレジスタと；
前記鍵を記憶する第二のレジスタとをさらに有する、
請求項８記載のプロセッサ。
【請求項１１】
前記第一の論理が、前記暗号化された結果を前記第一のレジスタ内に保存するよう構成されている、請求項１０記載のプロセッサ。
【請求項１２】
前記第二の値が以前に暗号化された結果または0である、請求項１０記載のプロセッサ。
【請求項１３】
前記平文の値および前記暗号化された結果がそれぞれ128ビットの長さである、請求項８記載のプロセッサ。
【請求項１４】
少なくとも二つのモードでデータを暗号化できる、二つのオペランドをもつ先進暗号化標準（AES）暗号化命令を記憶するメモリと；
AES暗号化命令を実行するプロセッサとを有する、
データを暗号化するシステム。
【請求項１５】
前記AES暗号化命令のオペランドが二つだけである、請求項１４記載のシステム。
【請求項１６】
前記少なくとも二つのモードが電子コードブック（ECB）モード、カウンター（CTR）モードまたは暗号ブロック連鎖（CBC）モードのうちの二つを含む、請求項１４記載のシステム。
【請求項１７】
前記少なくとも二つのモードのうち前記AES暗号化命令がデータを暗号化するモードが、前記二つのオペランドのうちの一方の値に基づいている、請求項１４記載のシステム。
【請求項１８】
前記少なくとも二つのモードのうち前記AES暗号化命令がデータを暗号化するモードが、前記AES暗号化命令に関連付けられている即値バイトに基づいている、請求項１４記載のシステム。
【請求項１９】
少なくとも二つのモードでデータを復号できる、二つのオペランドをもつ先進暗号化標準（AES）復号命令を記憶するメモリと；
AES復号命令を実行するプロセッサとを有する、
データを復号するシステム。
【請求項２０】
前記AES復号命令のオペランドが二つだけである、請求項１９記載のシステム。
【請求項２１】
前記少なくとも二つのモードが電子コードブック（ECB）モード、カウンター（CTR）モードまたは暗号ブロック連鎖（CBC）モードのうちの二つを含む、請求項１９記載のシステム。
【請求項２２】
前記少なくとも二つのモードのうち前記AES復号命令がデータを復号するモードが、前記二つのオペランドのうちの一方の値に基づいている、請求項１９記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
特許請求される本発明の実装はプロセッサに、より詳細にはプロセッサに先進暗号化標準（AES:  Advanced  Encryption  Standard）の暗号化または復号を実行させるための命令に関しうる。
【背景技術】
【０００２】
AESは米国国立標準技術研究所（NIST:  National  Institute  of  Standards  and  Technology）からの先進的な暗号化標準であり、FIPS  Publication  197において定義されている。AESは可変鍵サイズを有しうる。受け容れられる鍵サイズは３つある：128ビット、192ビットおよび256ビットである。AES暗号化は、128ビットの平文入力および鍵を受け、次いで128ビットの暗号文（たとえば、AES暗号化された平文）出力を生成する。同様に、AES復号は逆の動作を実行し、128ビットの暗号文および鍵を受け、128ビットの平文を生成する。
【０００３】
AESは多くの動作モードで使用できる。より一般的なモードの一つはいわゆる暗号ブロック連鎖（CBC:  Cipher-Block  Chaining）モードである。若干一般性の下がるモードの一つはいわゆる電子コードブック（ECB:  Electronic  Codebook）モードである。他のモードも可能であり、たとえば概念的にECBに類似した、台頭しつつあるいわゆるカウンター・モード（CTR）といったものがある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
コンピューティング・システムにおいて、AES暗号化および／または復号専用プロセッサのための命令（単数または複数）を有することが望ましいことがありうる。
【課題を解決するための手段】
【０００５】
本明細書に組み込まれ、その一部をなす付属の図面は、本発明の原理と整合する一つまたは複数の実装を例示し、本記載とともにそのような実装を説明する。図面は必ずしも縮尺通りではなく、むしろ本発明の原理を例示することに力点が置かれている。
【発明を実施するための最良の形態】
【０００６】
以下の詳細な記述は、付属の図面を参照する。異なる図面において同じまたは同様の要素を同定するために同じ参照符号が使用されることがある。以下の記述では、限定ではなく説明の目的で、特許請求される本発明のさまざまな側面の十全なる理解を提供するために特定の構造、アーキテクチャ、インターフェース、技法などといった個別的な詳細が述べられるが、本開示の恩恵を有する当業者には、特許請求される本発明のさまざまな側面が、これらの個別的な詳細からは外れる他の例において実施されてもよいことは明らかであろう。場合によっては、よく知られた装置、回路および方法の記述は、本発明の記載を無用な詳細でかすませないよう、省略される。
【０００７】
〈概要〉
本願はAES暗号化および／または復号を実行するための命令をプロセッサ中に含める方法、装置およびシステムの諸実施形態を記載する。二つのそのような命令は：
AESENCRYPT  (arg1)xmmdestination,  (arg2)xmmsource/memory
AESDECRYPT  (arg1)xmmdestination,  (arg2)xmmsource/memory
xmmsource/memoryは暗号化の場合に使われる平文を供給し、xmmdestinationが暗号文となる。復号の場合、役割が反対になり、sourceが暗号文、destinationが平文となる。実装によっては、両方のオペランドが暗号化または復号するために使われてもよい。これについてはのちにさらに説明する。いずれの場合にも、暗号鍵は、一つまたは複数の128ビットの暗黙的レジスタ（たとえばのちにより詳細に述べるようなXMM0およびXMM1）を通じてAESENCRYPTおよび／またはAESDECRYPT命令に供給される。
【０００８】
以下の記述の多くは暗号化命令AESENCRYPTに焦点を当てることになるが、暗号技術の当業者は、復号命令AESDECRYPTが復号のために同様の仕方で代用され、および／または使用されてもよいことを理解するであろう。主としてAESENCRYPTを記述するのは、純粋に明快および記述の便のためであり、前記命令の一方が他方よりいささかなりとも重要であると示すものではない。
【０００９】
〈コンピュータ・システム〉
図１は、本発明のある実施形態に基づく例示的なコンピュータ・システム１００を示している。コンピュータ・システム１００は、情報を通信するための相互接続１０１を含む。相互接続１０１は、マルチドロップ・バス、一つまたは複数のポイントツーポイント相互接続または両者の任意の組み合わせならびに他の任意の通信ハードウェアおよび／またはソフトウェアを含みうる。
【００１０】
図１は、相互接続１０１に結合された、情報を処理するためのプロセッサ１０９を示している。プロセッサ１０９は、CISCまたはRISC型アーキテクチャを含む任意の型のアーキテクチャの中央処理ユニット（central  processing  unit）を表す。
【００１１】
コンピュータ・システム１００はさらに、相互接続１０１に結合された、情報およびプロセッサ１０９によって実行されるべき命令を保存するランダムアクセスメモリ（RAM）または他の動的記憶装置（メイン・メモリ１０４と称される）を含む。メイン・メモリ１０４は、プロセッサ１０９による命令の実行の間、一時変数または他の中間情報を保存するためにも使用されうる。
【００１２】
コンピュータ・システム１００は、相互接続１０１に結合された、プロセッサ１０９のための静的な情報および命令を保存するための、読み出し専用メモリ（ROM）１０６および／または他の静的記憶装置をも含む。情報および命令を保存するためにデータ記憶装置１０７が相互接続１０１に結合されている。
【００１３】
図１が示すところでは、プロセッサ１０９は実行ユニット１３０、レジスタ・ファイル１５０、キャッシュ１６０、デコーダ１６５および内部相互接続１７０を含む。もちろん、プロセッサ１０９は、追加的な回路を含むが、本発明を理解するのに必要ではない。
【００１４】
デコーダ１６５は、プロセッサ１０９によって受領された命令をデコードするためであり、実行ユニット１３０はプロセッサ１０９によって受領された命令を実行するためである。汎用プロセッサにおいて典型的に実装される命令を認識することに加えて、デコーダ１６５および実行ユニット１３０は、ここに記載されるようなAES暗号化または復号（AESENCRYPTまたはAESDECRYPT）動作を実行するための命令を認識する。デコーダ１６５および実行ユニット１３０は、パックされたデータおよびパックされていないデータの両方に対してAESENCRYPTまたはAESDECRYPT動作を実行するための命令を認識する。
【００１５】
実行ユニット１３０は、内部相互接続１７０によってレジスタ・ファイル１５０に結合されている。ここでもまた、内部相互接続１７０は必ずしもマルチドロップ・バスでなくてもよく、代替的な実施形態ではポイントツーポイント相互接続または他の型の通信経路であってよい。
【００１６】
レジスタ・ファイル（単数または複数）１５０は、データを含め情報を記憶するためのプロセッサ１０９の記憶領域を表している。本発明の一つの側面は、パックされたデータおよびパックされていないデータに対してAESENCRYPTまたはAESDECRYPT動作を実行するための記載されている命令の諸実施形態であることが理解される。本発明のこの側面によれば、データを記憶するために使われる記憶領域は決定的ではないが、のちに図２を参照してレジスタ・ファイル１５０の諸実施形態について述べる。
【００１７】
実行ユニット１３０はキャッシュ１６０およびデコーダ１６５に結合されている。キャッシュ１６０は、たとえばメイン・メモリ１０４からの、データおよび／または制御信号をキャッシュするために使われる。デコーダ１６５はプロセッサ１０９によって受領された命令を制御信号および／またはマイクロコード入口点にデコードするために使われる。これらの制御信号および／またはマイクロコード入口点は、デコーダ１６５から実行ユニット１３０に回送されうる。
【００１８】
これらの制御信号および／またはマイクロコード入口点に応答して、実行ユニット１３０は適切な動作を実行する。たとえば、AESENCRYPTまたはAESDECRYPT命令が受領される場合、デコーダ１６５は実行ユニット１３０に、要求されたビット暗号化または復号を実行させる。少なくともいくつかの実施形態については、実行ユニット１３０は一つまたは複数の鍵を使って128ビットの平文を暗号化するか128ビットの暗号文を復号するかしうる（たとえば暗号回路１４５参照）。
【００１９】
デコーダ１６５は、異なる機構をいくつ使って実装されてもよい（たとえばルックアップテーブル、ハードウェア実装、PLAなど）。こうして、デコーダ１６５および実行ユニット１３０によるさまざまな命令の実行がここでは一連のif/then文によって表されるかもしれないが、命令の実行がこれらのif/then文のシリアル処理を要求するものではないことは理解される。むしろ、このif/then処理を論理的に実行する任意の機構が本発明の範囲内であると考えられる。
【００２０】
図１はさらに、データ記憶装置１０７（たとえば磁気ディスク、光ディスクおよび／または他の機械可読媒体）がコンピュータ・システム１００に結合されることができることを示している。さらに、データ記憶装置１０７は、プロセッサ１０９による実行のためのコード１９５を含むよう示されている。コード１９５は、AESENCRYPTまたはAESDECRYPT命令１４２の一つまたは複数の実施形態を含むことができ、いくらでもあるセキュリティ関係の目的のためにプロセッサ１０９に該AESENCRYPTまたはAESDECRYPT命令（単数または複数）１４２でビットAES暗号化または復号を実行させるよう書かれることができる。
【００２１】
コンピュータ・システム１００はまた、相互接続１０１を介して、コンピュータ・ユーザーに対して情報を表示するために、表示装置１２１にも結合されることができる。表示装置１２１はフレーム・バッファ、特化したグラフィクス・レンダリング装置、液晶ディスプレイ（LCD）および／またはフラットパネルディスプレイを含むことができる。
【００２２】
プロセッサ１０９に情報およびコマンド選択を通信するため、英数字およびその他のキーを含む入力装置１２２が相互接続１０１に結合されていてもよい。もう一つの型のユーザー入力装置は、プロセッサ１０９に方向情報およびコマンド選択を通信し、表示装置１２１上でのカーソルの動きを制御するためのマウス、トラックボール、ペン、タッチスクリーンまたはカーソル方向キーといったカーソル・コントロール１２３である。この入力装置は典型的には、第一の軸（たとえばｘ）および第二の軸（たとえばｙ）の２つの軸における２つの自由度を有し、それにより該装置は平面内で位置を指定できる。しかしながら、本発明は二自由度しかもたない入力装置に限定されるべきではない。
【００２３】
相互接続１０１に結合されてもよいもう一つの装置は、ハードコピー装置１２４である。これは命令、データまたは他の情報を紙、フィルムまたは同様な型の媒体といった媒体上にプリントするために使用されうるものである。さらに、コンピュータ・システム１００は音記録および／または再生のための装置１２５に結合されることができる。情報を記録するためのマイクロホンに結合されたオーディオ・デジタイザといったものである。さらに、装置１２５は、デジタル化された音を再生するためにデジタル‐アナログ（D/A）変換器に結合されたスピーカーを含んでいてもよい。
【００２４】
コンピュータ・システム１００はコンピュータ・ネットワーク（たとえばLAN）内の端末であることができる。その場合、コンピュータ・システム１００はコンピュータ・ネットワークのコンピュータ・サブシステムであろう。コンピュータ・システム１００は任意的に、ビデオ・デジタル化装置１２６および／または通信装置１９０（たとえばシリアル通信チップ、ワイヤレス・インターフェース、イーサネット（登録商標）チップまたはモデムで、これは外部装置またはネットワークとの通信を提供する）を含む。ビデオ・デジタル化装置１２６は、コンピュータ・ネットワーク上で他者に送信されることができるビデオ画像を取り込むために使うことができる。
【００２５】
少なくとも一つの実施形態については、プロセッサ１０９は、既存のプロセッサ（たとえば米国カリフォルニア州サンタクララのインテル・コーポレイションによって製造されるインテル（登録商標）ペンティアム（登録商標）プロセッサ、インテル（登録商標）ペンティアム（登録商標）プロ・プロセッサ、インテル（登録商標）ペンティアム（登録商標）IIプロセッサ、インテル（登録商標）ペンティアム（登録商標）IIIプロセッサ、インテル（登録商標）ペンティアム（登録商標）4プロセッサ、インテル（登録商標）アイテニアム（登録商標）プロセッサ、インテル（登録商標）アイテニアム（登録商標）2プロセッサまたはインテル（登録商標）コア（商標）デュオ・プロセッサ）によって使用される命令セットと互換な命令セットをサポートする。結果として、プロセッサ１０９は、本発明の動作に加えて、既存のプロセッサ動作をサポートできる。プロセッサ１０９は、一つまたは複数のプロセス技術における製造のために好適でありえ、機械可読媒体上に十分な詳細さで表現されることによって前記製造を容易にするのに好適でありうる。本発明は以下ではx86ベースの命令セットに組み込まれるものとして記載されるが、代替的な諸実施形態は本発明を他の命令セットに組み込むことができる。たとえば、本発明は、x86ベースの命令セット以外の命令セットを使って64ビット・プロセッサに組み込まれることができる。
【００２６】
図２は、本発明の一つの代替的な実施形態に基づく前記プロセッサのレジスタ・ファイルを示している。レジスタ・ファイル１５０は、制御／状態情報、整数データ、浮動小数点データおよびパックされたデータを含む情報を記憶するために使用されうる。図２に示される実施形態では、レジスタ・ファイル１５０は整数レジスタ２０１、レジスタ２０９、状態レジスタ２０８、拡張レジスタ２１０および命令ポインタ・レジスタ２１１を含む。状態レジスタ２０８、命令ポインタ・レジスタ２１１、整数レジスタ２０１、レジスタ２０９はみな内部相互接続１７０に結合されている。さらに、拡張レジスタ２１０も内部相互接続１７０に結合されている。内部相互接続１７０は、必ずしもそうである必要はないが、マルチドロップ・バスであってもよい。内部相互接続１７０はその代わり、ポイントツーポイント相互接続を含む他の任意の種別の通信経路であってもよい。
【００２７】
少なくとも一つの実施形態については、拡張レジスタ２１０は、パックされた整数データおよびパックされていない浮動小数点データの両方について使用される。代替的な実施形態については、拡張レジスタ２１０はスカラー・データ、パックされたブーリアン・データ、パックされた整数データおよび／またはパックされた浮動小数点データのために使用されうる。もちろん、本発明の広義の範囲から外れることなく、代替的な実施形態が、より多いまたはより少ないレジスタのセット、各セット中のより多いまたはより少ないレジスタあるいは各レジスタ中のより多いまたはより少ないデータ記憶ビットを含むよう実装されてもよい。
【００２８】
少なくとも一つの実施形態については、整数レジスタ２０１は32ビットを記憶するよう実装され、レジスタ２０９は80ビットを記憶するよう実装され（浮動小数点データを記憶するためには80ビットすべてが使われる一方、パックされたデータのために使われるのは64のみ）、拡張レジスタ２１０は128ビットを記憶するよう実装される。さらに、拡張レジスタ２１０は8つのレジスタXR0  ２１３ａないしXR7  ２１３ｈを含みうる。XR0  ２１３ａ、XR1  ２１３ｂおよびXR2  ２１３ｃはレジスタ２１０内の個々のレジスタの例である。たとえば、128ビットの拡張レジスタ２１０は、AESENCRYPT命令の一方または両方のオペランドを提供するために使用されてもよいし、AESENCRYPT命令によって使われる暗黙的なレジスタ（たとえばXMM0およびXMM1）の一方または両方を提供するために使用されてもよい。
【００２９】
もう一つの実施形態については、整数レジスタ２０１はそれぞれ64ビットを含み、拡張レジスタ２１０はそれぞれ64ビットを含み、拡張レジスタ２１０は16のレジスタを含む。ある実施形態については、拡張レジスタ２１０の二つのレジスタがペアとして作用されてもよい。さらにもう一つの代替的な実施形態では、拡張レジスタ２１０は32のレジスタを含んでいてもよい。
【００３０】
〈AES暗号化および／または復号動作（単数または複数）〉
図３は、ECBモードで使われるAES暗号化命令（AESENCRYPT  Arg1,  Arg2）３１０を概念的に図解している。図のように、AESENCRYPT３１０は二つのオペランドを有し、その一方Arg2が暗号化されるべき平文を供給する。暗号化された暗号文はAESENCRYPT３１０のArg1に書き込まれる。暗号鍵は暗黙的な128ビットレジスタXMM0およびXMM1の一つまたは複数から供給される。たとえば暗号鍵が128ビットの長さである場合、諸レジスタXMM0の一つによって供給されてもよい。そのような場合、他方のレジスタXMM1は、図４に関連して述べるように、別の役割で使用されうる。
【００３１】
図３で見て取れるように、AESENCRYPT３１０は、ECBモードでは、Arg2からの平文を鍵を用いて暗号化することによって使用される。AESENCRYPT３１０が動作するモード（たとえばECB、CBCなど）を決定する一つの方式は、該モードを決定するためにオペランドを使うことである。ある実装では、AESENCRYPT３１０はそのオペランドArg1とArg2を排他的OR（XOR）で演算してからその結果を前記鍵で暗号化する。そのような方式は、図４との関連でさらに詳細に述べるが、AESENCRYPT３１０への一つまたは二つの入力を有効にする。図３に示されるようなECBモードについてのArg2のように、一つのみの入力が所望される場合、他方のオペランドArg1は0にセットされてもよい。それによりAESENCRYPT３１０によるXOR演算は、前記鍵による暗号化のために、単に第一のオペランドArg2を与える。このXOR方式がCBCおよびCTRモードについてどのように使用されうるかは、図５ないし図９に関連してさらに述べることになる。
【００３２】
AESENCRYPT３１０がどのモードで動作するかを決定するもう一つの方式（図示せず）は、AESENCRYPT３１０命令において、前記二つのオペランドArg1およびArg2に加えて即値バイト（immediate  byte）を用いるというものでありうる。この第二の方式は、オペランドどうしがXORされた前記第一の方式とは対照的に、即値バイトの内容に基づいてAESENCRYPT３１０のオペランドの一方を使うか両方を使うかおよび／またはどのように使うかを指定しうる。AESENCRYPT３１０（またはAESDECRYPT）のような単一の２オペランド命令を複数の異なるモード（たとえばECB、CBC、CTRなど）で使えるようにするために、これら二つ以外の他の方式が可能であり、考えられている。
【００３３】
図４は、ECBモードでAESENCRYPT３１０を使うための例示的なコード（たとえば、プロセッサ１９０によって実行されたときに方法をなすもの）４１０を示している。まず、暗号鍵が暗黙的レジスタXMM0の一つにロードされる（MOV命令または同様の命令を介して）。次いで値（たとえば16）が別のレジスタECXにロードされうる（MOV命令または同様の命令を介して）。これはAES暗号化すべき平文の128ビット・ブロックの数をセットするためである。この値に128ビットを乗算したものがコード４１０によって暗号化されるべき平文の全長さを指定しうる。そのような初期化後、AESENCRYPT３１０を含むループがECX回実行されうる。
【００３４】
ループ内では、第二の暗黙的レジスタXMM1が、値0をロードすることによって、ECBモードのためにクリアされる。上に説明したように、この0という値はAESENCRYPT３１０によって第二のオペランドとXORされたとき、第二のオペランドを生じるが、それはECBモードで動作するための所望の結果である。次の命令に目を転じると、AESENCRYPT３１０はPlainmemory[ECX]内に平文を受け、該平文をXMM0内の鍵で暗号化し、その結果を第二の暗黙的レジスタXMM1に書き込む。次に、XMM1内の暗号文がCiphermemory[ECX]に記憶され、ECX内のループ値がデクリメントされてからループの先頭にジャンプして戻る。
【００３５】
次のループにおいて、XMM1は再びクリアされ、直前の128ビットについての前記の暗号化結果がクリアされる。このようにして、AESENCRYPT３１０は、ECX内のデクリメントされた値についてXMM0内の鍵によって暗号化されるべきPlainmemory[ECX]の単一の入力をもつ。コード４１０のループ実行は、ECXにロードされた初期値によって指定される平文の全ブロックがECBモードでAES暗号化されるまで継続しうる。
【００３６】
図５は、CBCモードで使われるAES暗号化命令（AESENCRYPT  Arg1,  Arg2）３１０を概念的に図解している。図のように、AESENCRYPT３１０は二つのオペランドを有し、その一方Arg2が暗号化されるべき平文を供給する。CBCモードでは、他方のオペランドArg1は先の暗号化されたブロックからのいわゆる「古い」暗号文を提供し、これが暗号化の前にAESENCRYPT３１０によって平文とXORされる。暗号鍵は暗黙的な128ビットレジスタXMM0およびXMM1の一つまたは複数から供給される。現在ブロックについての暗号化された暗号文がAESENCRYPT３１０のArg1に上書きされる。
【００３７】
図６は、CBCモードで使われる二つの連鎖されたAES暗号化命令６００を概念的に示している。これはCBCモードの時間的性質を視覚的に示している（時間的に先の動作が図の左に現れている）。ここで、直前の暗号化ブロックの結果が新しい平文とXORされている。これはECBよりもランダムな暗号文を生成する（たとえば、ECBモードでは、鍵が同じなら、同じ平文ブロックは同じ暗号文ブロックに暗号化される）。図６に示されるようなCBCモードでは、平文の所与のブロックについての暗号文は、直前のラウンドの暗号文結果に依存する。
【００３８】
図７は、CBCモードでAES暗号化命令を使うための例示的なコード（たとえば、プロセッサ１９０によって実行されたときに方法をなすもの）７１０を示している。まず、暗号鍵が暗黙的レジスタXMM0の一つにロードされる（MOV命令または同様の命令を介して）。次いで値（たとえば16だが、この数はより大きくてもより小さくてもよい）が別のレジスタECXにロードされうる（MOV命令または同様の命令を介して）。これはAES暗号化すべき平文の128ビット・ブロックの数をセットするためである。この値に128ビットを乗算したものがコード７１０によって暗号化されるべき平文の全長さを指定しうる。また、最初にループを通る際、XMM1は0をロードすることによってクリアされうる。最初のブロックの平文と組み合わせるべき先行ブロックからの暗号文がないからである。そのような初期化後、AESENCRYPT３１０を含むループがECX回実行されうる。
【００３９】
ループ内では、AESENCRYPT３１０はPlainmemory[ECX]内に平文を受け、それをXMM1内の値（たとえば、最初にループを通るときについては0）とXORし、XORされた結果をXMM0内の鍵で暗号化し、その結果を第二の暗黙的レジスタXMM1に書き込み、すでにそこにあった値を上書きする。次に、XMM1内の暗号文がCiphermemory[ECX]に記憶され、ECX内のループ値がデクリメントされてからループの先頭にジャンプして戻る。
【００４０】
次のループにおいて、ECBモードとは異なり、直前の128ビットについてのXMM1内の0でない暗号文結果はクリアされない。むしろ、該結果は、AESENCRYPT３１０によって、平文の次のブロックと、CBCモードに基づく鍵による暗号化に先立ってXORされる。このようにして、AESENCRYPT３１０は、ECX内のデクリメントされた値についてのPlainmemory[ECX]および直前のループからのXMM1内の暗号文の値の二重の入力をもつ。AESENCRYPT３１０命令はそれら二つの入力をXORし、その結果をXMM0内の鍵で暗号化する。コード４１０のループ実行は、ECXにロードされた初期値によって指定される平文の全ブロックがCBCモードでAES暗号化されるまで継続しうる。
【００４１】
上記の方式およびシステムは、単一の２オペランド命令を使ってCBCモードおよびECBモードの暗号化を有利に実行しうる。この命令は、AESについて、その最も一般的な二つのモードにおいてよりタイトなループを許容する。本命令は、限られた数のオペランドで機能し、AESの最も一般的な使用を、二番目に最も高頻度の使用をサポートする単一命令に移す。
【００４２】
図８は、CTRモードで使われるAES暗号化命令（AESENCRYPT  Arg1,  Arg2）８１０を概念的に図解している。図のように、AESENCRYPT８１０は二つのオペランドを有し、その一方Arg2が暗号化されるべきカウンター値を供給する。CTRモードでは、他方のオペランドArg1が暗号化されるべき平文を提供する。これが暗号化後にAESENCRYPT８１０によって平文とXORされる。暗号鍵は暗黙的な128ビットレジスタXMM0およびXMM1の一つまたは複数から供給される。現在ブロックについての暗号化された暗号文がAESENCRYPT８１０のArg1に上書きされる。
【００４３】
図９は、CTRモードでAES暗号化命令を使うための例示的なコード（たとえば、プロセッサ１９０によって実行されたときに方法をなすもの）９１０を示している。まず、暗号鍵が暗黙的レジスタXMM0の一つにロードされる（MOV命令または同様の命令を介して）。次いで値（たとえば16だが、この数はより大きくてもより小さくてもよい）が別のレジスタECXにロードされうる（MOV命令または同様の命令を介して）。これはAES暗号化すべき平文の128ビット・ブロックの数をセットするためである。この値に128ビットを乗算したものがコード９１０によって暗号化されるべき平文の全長さを指定しうる。次に、カウンター値が別のXMMレジスタ（XMM4のような）にロードされる（MOV命令または同様の命令を介して）。そのような初期化後、AESENCRYPT８１０を含むループがECX回実行されうる。
【００４４】
ループ内では、AESENCRYPT８１０はカウンター値を受け、実際には該カウンター値を暗号化し、次いで平文データとのXORを実行して暗号文を生成する。次にXMM3内の暗号文がCiphermemory[ECX]に記憶され、ECX内のループ値がデクリメントされてからループの先頭にジャンプして戻る。その後、カウンターは適宜調整される（ADD、MULまたは他の命令を介して）。その他の点ではループはECBモードと同一に進行する。
【００４５】
一つまたは複数の実装の以上の記述は、例示と説明を提供するが、網羅的であることは意図されておらず、本発明の範囲を厳密な開示された形に限定することも意図されていない。上記の教示に照らして修正および変形が可能であり、本発明のさまざまな実装の実践から獲得されうる。
【００４６】
たとえば、AES暗号化および復号は128ビット鍵について記載されてきたが、FIPS  Publication  197におけるNIST標準は192ビットおよび256ビット鍵を許容している。そのような場合、192ビットまたは256ビット鍵における残りの64ビットまたは128ビットのためにXMM1が使用されてもよい。そのような場合、コード４１０またはコード７１０またはコード９１０（またはAESENCRYPTまたはAESDECRYPTがあるどんなコードでも）においてXMM1の代わりに他の何らかの128ビットレジスタ（たとえばXMM2、XMM3など）が使用されてもよい。XMM1内には鍵の一部があるからである。
【００４７】
上記ではAESENCRYPTについて記載しているが、同様の仕方でECBモード、CTRモードおよびCBCモードにおけるAES復号をサポートするためにAESDECRYPT  Arg1,  Arg2が使用されてもよい。当業者は、ECBモードでのAESDECRYPTの使用は比較的ストレートであり、一方、CBCモードは、暗号化の際にAESENCRYPTによって実行されたXOR演算の逆または反対といった追加的な計算を伴うことがあると認識するであろう。
【００４８】
AESENCRYPTおよびAESDECRYPTが厳密にどのようにしてAESアルゴリズムを実行するかの詳細が呈示されていないが、それは十分に暗号技術の当業者の技量の範囲内であるということも認識しておくべきである。具体的な実装は、AESENCRYPTおよびAESDECRYPTが実行される具体的なプロセッサ１９０について最適化されている傾向がありうる。実装によっては、これらの命令は可能な最も高速な実行のために機械語で最適化されてもよい。そのような最適化の詳細は、特許請求される本発明にとって格別密接なつながりがあるわけではなく、説明の明確のため省略した。
【００４９】
本願の記載において使用されるいかなる要素、工程、命令も、明示的にそう述べられていない限り、本発明にとって決定的に重要とも本質的とも解釈されるべきではない。また、ここでの用法では、単数形の表現が一つまたは複数を含むことを意図していることがある。特許請求される発明の上記の実装に対して、本発明の精神および原理から実質的に外れることなく変形および修正がなされてもよい。そのようなすべての修正および変形は、ここに本開示の範囲内に含められ、付属の請求項によって保護されることが意図されている。
【図面の簡単な説明】
【００５０】
【図１】いくつかの実装に基づく例示的なコンピュータ・システムを示す図である。
【図２】いくつかの実装に基づくプロセッサのレジスタ・ファイルを示す図である。
【図３】ECBモードで使用されるAES暗号化命令を概念的に示す図である。
【図４】ECBモードでAES暗号化命令を使うための例示的なコードを示す図である。
【図５】CBCモードで使われるAES暗号化命令を概念的に示す図である。
【図６】CBCモードで使われる二つの連鎖されたAES暗号化命令を概念的に示す図である。
【図７】CBCモードでAES暗号化命令を使うための例示的なコードを示す図である。
【図８】CTRモードで使われるAES暗号化命令を概念的に示す図である。
【図９】CTRモードでAES暗号化命令を使うための例示的なコードを示す図である。
【符号の説明】
【００５１】
１００  コンピュータ・システム
１０１  相互接続
１０４  メイン・メモリ
１０６  ROM
１０７  データ記憶装置
１０９  プロセッサ
１２１  表示装置
１２２  入力装置
１２３  カーソル・コントロール
１２４  ハードコピー装置
１２５  音記録／再生装置
１２６  ビデオ
１３０  実行ユニット
１４５  暗号回路
１５０  レジスタ・ファイル
１６０  キャッシュ
１６５  デコーダ
１７０  内部相互接続
１９０  通信装置
２０１  整数レジスタ
２０７  制御信号
２０８  状態レジスタ
２０９  レジスタ
２１０  拡張レジスタ
２１１  命令ポインタ・レジスタ
３１０  AES暗号化命令
４１０  ECBモードでAESENCRYPTを使うためのコード
６００  CBCモードで使われる二つの連鎖されたAES暗号化命令
７１０  CBCモードでAES暗号化命令を使うためのコード
８１０  CTRモードで使われるAES暗号化命令
９１０  CTRモードでAES暗号化命令を使うためのコード
【図１】
2008283672.tif 000003
【図２】
2008283672.tif 000004
【図３】
2008283672.tif 000005
【図４】
2008283672.tif 000006
【図５】
2008283672.tif 000007
【図６】
2008283672.tif 000008
【図７】
2008283672.tif 000009
【図８】
2008283672.tif 000010
【図９】
2008283672.tif 000011
【外国語明細書】
2008283672.tif 000012
2008283672.tif 000013
2008283672.tif 000014
2008283672.tif 000015
2008283672.tif 000016
2008283672.tif 000017
2008283672.tif 000018
2008283672.tif 000019
2008283672.tif 000020
2008283672.tif 000021
2008283672.tif 000022
2008283672.tif 000023
2008283672.tif 000024
2008283672.tif 000025
2008283672.tif 000026
2008283672.tif 000027
2008283672.tif 000028
2008283672.tif 000029
2008283672.tif 000030
2008283672.tif 000031