説明

複数モードでのAES暗号化または復号の単一命令での実行

【課題】少なくとも二つのモードでデータを暗号化/復号できる、二つのオペランドをもつ先進暗号化標準(AES)暗号化命令を提供する。
【解決手段】命令が記憶されている機械可読媒体であって、該命令は、機械によって実行された場合に該機械をしてある方法を実行させる。該方法は、前記命令の第一のオペランドと前記命令の第二のオペランドとを組み合わせて結果を生成することを含みうる。前記結果は、先進暗号化標準(AES)アルゴリズムに従って、鍵を使って暗号化され、暗号化された結果を生成しうる。前記方法はまた、暗号化された結果を前記命令の第一のオペランドの位置に入れることも含みうる。

【発明の詳細な説明】
【技術分野】
【0001】
特許請求される本発明の実装はプロセッサに、より詳細にはプロセッサに先進暗号化標準(AES: Advanced Encryption Standard)の暗号化または復号を実行させるための命令に関しうる。
【背景技術】
【0002】
AESは米国国立標準技術研究所(NIST: National Institute of Standards and Technology)からの先進的な暗号化標準であり、FIPS Publication 197において定義されている。AESは可変鍵サイズを有しうる。受け容れられる鍵サイズは3つある:128ビット、192ビットおよび256ビットである。AES暗号化は、128ビットの平文入力および鍵を受け、次いで128ビットの暗号文(たとえば、AES暗号化された平文)出力を生成する。同様に、AES復号は逆の動作を実行し、128ビットの暗号文および鍵を受け、128ビットの平文を生成する。
【0003】
AESは多くの動作モードで使用できる。より一般的なモードの一つはいわゆる暗号ブロック連鎖(CBC: Cipher-Block Chaining)モードである。若干一般性の下がるモードの一つはいわゆる電子コードブック(ECB: Electronic Codebook)モードである。他のモードも可能であり、たとえば概念的にECBに類似した、台頭しつつあるいわゆるカウンター・モード(CTR)といったものがある。
【発明の開示】
【発明が解決しようとする課題】
【0004】
コンピューティング・システムにおいて、AES暗号化および/または復号専用プロセッサのための命令(単数または複数)を有することが望ましいことがありうる。
【課題を解決するための手段】
【0005】
本明細書に組み込まれ、その一部をなす付属の図面は、本発明の原理と整合する一つまたは複数の実装を例示し、本記載とともにそのような実装を説明する。図面は必ずしも縮尺通りではなく、むしろ本発明の原理を例示することに力点が置かれている。
【発明を実施するための最良の形態】
【0006】
以下の詳細な記述は、付属の図面を参照する。異なる図面において同じまたは同様の要素を同定するために同じ参照符号が使用されることがある。以下の記述では、限定ではなく説明の目的で、特許請求される本発明のさまざまな側面の十全なる理解を提供するために特定の構造、アーキテクチャ、インターフェース、技法などといった個別的な詳細が述べられるが、本開示の恩恵を有する当業者には、特許請求される本発明のさまざまな側面が、これらの個別的な詳細からは外れる他の例において実施されてもよいことは明らかであろう。場合によっては、よく知られた装置、回路および方法の記述は、本発明の記載を無用な詳細でかすませないよう、省略される。
【0007】
〈概要〉
本願はAES暗号化および/または復号を実行するための命令をプロセッサ中に含める方法、装置およびシステムの諸実施形態を記載する。二つのそのような命令は:
AESENCRYPT (arg1)xmmdestination, (arg2)xmmsource/memory
AESDECRYPT (arg1)xmmdestination, (arg2)xmmsource/memory
xmmsource/memoryは暗号化の場合に使われる平文を供給し、xmmdestinationが暗号文となる。復号の場合、役割が反対になり、sourceが暗号文、destinationが平文となる。実装によっては、両方のオペランドが暗号化または復号するために使われてもよい。これについてはのちにさらに説明する。いずれの場合にも、暗号鍵は、一つまたは複数の128ビットの暗黙的レジスタ(たとえばのちにより詳細に述べるようなXMM0およびXMM1)を通じてAESENCRYPTおよび/またはAESDECRYPT命令に供給される。
【0008】
以下の記述の多くは暗号化命令AESENCRYPTに焦点を当てることになるが、暗号技術の当業者は、復号命令AESDECRYPTが復号のために同様の仕方で代用され、および/または使用されてもよいことを理解するであろう。主としてAESENCRYPTを記述するのは、純粋に明快および記述の便のためであり、前記命令の一方が他方よりいささかなりとも重要であると示すものではない。
【0009】
〈コンピュータ・システム〉
図1は、本発明のある実施形態に基づく例示的なコンピュータ・システム100を示している。コンピュータ・システム100は、情報を通信するための相互接続101を含む。相互接続101は、マルチドロップ・バス、一つまたは複数のポイントツーポイント相互接続または両者の任意の組み合わせならびに他の任意の通信ハードウェアおよび/またはソフトウェアを含みうる。
【0010】
図1は、相互接続101に結合された、情報を処理するためのプロセッサ109を示している。プロセッサ109は、CISCまたはRISC型アーキテクチャを含む任意の型のアーキテクチャの中央処理ユニット(central processing unit)を表す。
【0011】
コンピュータ・システム100はさらに、相互接続101に結合された、情報およびプロセッサ109によって実行されるべき命令を保存するランダムアクセスメモリ(RAM)または他の動的記憶装置(メイン・メモリ104と称される)を含む。メイン・メモリ104は、プロセッサ109による命令の実行の間、一時変数または他の中間情報を保存するためにも使用されうる。
【0012】
コンピュータ・システム100は、相互接続101に結合された、プロセッサ109のための静的な情報および命令を保存するための、読み出し専用メモリ(ROM)106および/または他の静的記憶装置をも含む。情報および命令を保存するためにデータ記憶装置107が相互接続101に結合されている。
【0013】
図1が示すところでは、プロセッサ109は実行ユニット130、レジスタ・ファイル150、キャッシュ160、デコーダ165および内部相互接続170を含む。もちろん、プロセッサ109は、追加的な回路を含むが、本発明を理解するのに必要ではない。
【0014】
デコーダ165は、プロセッサ109によって受領された命令をデコードするためであり、実行ユニット130はプロセッサ109によって受領された命令を実行するためである。汎用プロセッサにおいて典型的に実装される命令を認識することに加えて、デコーダ165および実行ユニット130は、ここに記載されるようなAES暗号化または復号(AESENCRYPTまたはAESDECRYPT)動作を実行するための命令を認識する。デコーダ165および実行ユニット130は、パックされたデータおよびパックされていないデータの両方に対してAESENCRYPTまたはAESDECRYPT動作を実行するための命令を認識する。
【0015】
実行ユニット130は、内部相互接続170によってレジスタ・ファイル150に結合されている。ここでもまた、内部相互接続170は必ずしもマルチドロップ・バスでなくてもよく、代替的な実施形態ではポイントツーポイント相互接続または他の型の通信経路であってよい。
【0016】
レジスタ・ファイル(単数または複数)150は、データを含め情報を記憶するためのプロセッサ109の記憶領域を表している。本発明の一つの側面は、パックされたデータおよびパックされていないデータに対してAESENCRYPTまたはAESDECRYPT動作を実行するための記載されている命令の諸実施形態であることが理解される。本発明のこの側面によれば、データを記憶するために使われる記憶領域は決定的ではないが、のちに図2を参照してレジスタ・ファイル150の諸実施形態について述べる。
【0017】
実行ユニット130はキャッシュ160およびデコーダ165に結合されている。キャッシュ160は、たとえばメイン・メモリ104からの、データおよび/または制御信号をキャッシュするために使われる。デコーダ165はプロセッサ109によって受領された命令を制御信号および/またはマイクロコード入口点にデコードするために使われる。これらの制御信号および/またはマイクロコード入口点は、デコーダ165から実行ユニット130に回送されうる。
【0018】
これらの制御信号および/またはマイクロコード入口点に応答して、実行ユニット130は適切な動作を実行する。たとえば、AESENCRYPTまたはAESDECRYPT命令が受領される場合、デコーダ165は実行ユニット130に、要求されたビット暗号化または復号を実行させる。少なくともいくつかの実施形態については、実行ユニット130は一つまたは複数の鍵を使って128ビットの平文を暗号化するか128ビットの暗号文を復号するかしうる(たとえば暗号回路145参照)。
【0019】
デコーダ165は、異なる機構をいくつ使って実装されてもよい(たとえばルックアップテーブル、ハードウェア実装、PLAなど)。こうして、デコーダ165および実行ユニット130によるさまざまな命令の実行がここでは一連のif/then文によって表されるかもしれないが、命令の実行がこれらのif/then文のシリアル処理を要求するものではないことは理解される。むしろ、このif/then処理を論理的に実行する任意の機構が本発明の範囲内であると考えられる。
【0020】
図1はさらに、データ記憶装置107(たとえば磁気ディスク、光ディスクおよび/または他の機械可読媒体)がコンピュータ・システム100に結合されることができることを示している。さらに、データ記憶装置107は、プロセッサ109による実行のためのコード195を含むよう示されている。コード195は、AESENCRYPTまたはAESDECRYPT命令142の一つまたは複数の実施形態を含むことができ、いくらでもあるセキュリティ関係の目的のためにプロセッサ109に該AESENCRYPTまたはAESDECRYPT命令(単数または複数)142でビットAES暗号化または復号を実行させるよう書かれることができる。
【0021】
コンピュータ・システム100はまた、相互接続101を介して、コンピュータ・ユーザーに対して情報を表示するために、表示装置121にも結合されることができる。表示装置121はフレーム・バッファ、特化したグラフィクス・レンダリング装置、液晶ディスプレイ(LCD)および/またはフラットパネルディスプレイを含むことができる。
【0022】
プロセッサ109に情報およびコマンド選択を通信するため、英数字およびその他のキーを含む入力装置122が相互接続101に結合されていてもよい。もう一つの型のユーザー入力装置は、プロセッサ109に方向情報およびコマンド選択を通信し、表示装置121上でのカーソルの動きを制御するためのマウス、トラックボール、ペン、タッチスクリーンまたはカーソル方向キーといったカーソル・コントロール123である。この入力装置は典型的には、第一の軸(たとえばx)および第二の軸(たとえばy)の2つの軸における2つの自由度を有し、それにより該装置は平面内で位置を指定できる。しかしながら、本発明は二自由度しかもたない入力装置に限定されるべきではない。
【0023】
相互接続101に結合されてもよいもう一つの装置は、ハードコピー装置124である。これは命令、データまたは他の情報を紙、フィルムまたは同様な型の媒体といった媒体上にプリントするために使用されうるものである。さらに、コンピュータ・システム100は音記録および/または再生のための装置125に結合されることができる。情報を記録するためのマイクロホンに結合されたオーディオ・デジタイザといったものである。さらに、装置125は、デジタル化された音を再生するためにデジタル‐アナログ(D/A)変換器に結合されたスピーカーを含んでいてもよい。
【0024】
コンピュータ・システム100はコンピュータ・ネットワーク(たとえばLAN)内の端末であることができる。その場合、コンピュータ・システム100はコンピュータ・ネットワークのコンピュータ・サブシステムであろう。コンピュータ・システム100は任意的に、ビデオ・デジタル化装置126および/または通信装置190(たとえばシリアル通信チップ、ワイヤレス・インターフェース、イーサネット(登録商標)チップまたはモデムで、これは外部装置またはネットワークとの通信を提供する)を含む。ビデオ・デジタル化装置126は、コンピュータ・ネットワーク上で他者に送信されることができるビデオ画像を取り込むために使うことができる。
【0025】
少なくとも一つの実施形態については、プロセッサ109は、既存のプロセッサ(たとえば米国カリフォルニア州サンタクララのインテル・コーポレイションによって製造されるインテル(登録商標)ペンティアム(登録商標)プロセッサ、インテル(登録商標)ペンティアム(登録商標)プロ・プロセッサ、インテル(登録商標)ペンティアム(登録商標)IIプロセッサ、インテル(登録商標)ペンティアム(登録商標)IIIプロセッサ、インテル(登録商標)ペンティアム(登録商標)4プロセッサ、インテル(登録商標)アイテニアム(登録商標)プロセッサ、インテル(登録商標)アイテニアム(登録商標)2プロセッサまたはインテル(登録商標)コア(商標)デュオ・プロセッサ)によって使用される命令セットと互換な命令セットをサポートする。結果として、プロセッサ109は、本発明の動作に加えて、既存のプロセッサ動作をサポートできる。プロセッサ109は、一つまたは複数のプロセス技術における製造のために好適でありえ、機械可読媒体上に十分な詳細さで表現されることによって前記製造を容易にするのに好適でありうる。本発明は以下ではx86ベースの命令セットに組み込まれるものとして記載されるが、代替的な諸実施形態は本発明を他の命令セットに組み込むことができる。たとえば、本発明は、x86ベースの命令セット以外の命令セットを使って64ビット・プロセッサに組み込まれることができる。
【0026】
図2は、本発明の一つの代替的な実施形態に基づく前記プロセッサのレジスタ・ファイルを示している。レジスタ・ファイル150は、制御/状態情報、整数データ、浮動小数点データおよびパックされたデータを含む情報を記憶するために使用されうる。図2に示される実施形態では、レジスタ・ファイル150は整数レジスタ201、レジスタ209、状態レジスタ208、拡張レジスタ210および命令ポインタ・レジスタ211を含む。状態レジスタ208、命令ポインタ・レジスタ211、整数レジスタ201、レジスタ209はみな内部相互接続170に結合されている。さらに、拡張レジスタ210も内部相互接続170に結合されている。内部相互接続170は、必ずしもそうである必要はないが、マルチドロップ・バスであってもよい。内部相互接続170はその代わり、ポイントツーポイント相互接続を含む他の任意の種別の通信経路であってもよい。
【0027】
少なくとも一つの実施形態については、拡張レジスタ210は、パックされた整数データおよびパックされていない浮動小数点データの両方について使用される。代替的な実施形態については、拡張レジスタ210はスカラー・データ、パックされたブーリアン・データ、パックされた整数データおよび/またはパックされた浮動小数点データのために使用されうる。もちろん、本発明の広義の範囲から外れることなく、代替的な実施形態が、より多いまたはより少ないレジスタのセット、各セット中のより多いまたはより少ないレジスタあるいは各レジスタ中のより多いまたはより少ないデータ記憶ビットを含むよう実装されてもよい。
【0028】
少なくとも一つの実施形態については、整数レジスタ201は32ビットを記憶するよう実装され、レジスタ209は80ビットを記憶するよう実装され(浮動小数点データを記憶するためには80ビットすべてが使われる一方、パックされたデータのために使われるのは64のみ)、拡張レジスタ210は128ビットを記憶するよう実装される。さらに、拡張レジスタ210は8つのレジスタXR0 213aないしXR7 213hを含みうる。XR0 213a、XR1 213bおよびXR2 213cはレジスタ210内の個々のレジスタの例である。たとえば、128ビットの拡張レジスタ210は、AESENCRYPT命令の一方または両方のオペランドを提供するために使用されてもよいし、AESENCRYPT命令によって使われる暗黙的なレジスタ(たとえばXMM0およびXMM1)の一方または両方を提供するために使用されてもよい。
【0029】
もう一つの実施形態については、整数レジスタ201はそれぞれ64ビットを含み、拡張レジスタ210はそれぞれ64ビットを含み、拡張レジスタ210は16のレジスタを含む。ある実施形態については、拡張レジスタ210の二つのレジスタがペアとして作用されてもよい。さらにもう一つの代替的な実施形態では、拡張レジスタ210は32のレジスタを含んでいてもよい。
【0030】
〈AES暗号化および/または復号動作(単数または複数)〉
図3は、ECBモードで使われるAES暗号化命令(AESENCRYPT Arg1, Arg2)310を概念的に図解している。図のように、AESENCRYPT310は二つのオペランドを有し、その一方Arg2が暗号化されるべき平文を供給する。暗号化された暗号文はAESENCRYPT310のArg1に書き込まれる。暗号鍵は暗黙的な128ビットレジスタXMM0およびXMM1の一つまたは複数から供給される。たとえば暗号鍵が128ビットの長さである場合、諸レジスタXMM0の一つによって供給されてもよい。そのような場合、他方のレジスタXMM1は、図4に関連して述べるように、別の役割で使用されうる。
【0031】
図3で見て取れるように、AESENCRYPT310は、ECBモードでは、Arg2からの平文を鍵を用いて暗号化することによって使用される。AESENCRYPT310が動作するモード(たとえばECB、CBCなど)を決定する一つの方式は、該モードを決定するためにオペランドを使うことである。ある実装では、AESENCRYPT310はそのオペランドArg1とArg2を排他的OR(XOR)で演算してからその結果を前記鍵で暗号化する。そのような方式は、図4との関連でさらに詳細に述べるが、AESENCRYPT310への一つまたは二つの入力を有効にする。図3に示されるようなECBモードについてのArg2のように、一つのみの入力が所望される場合、他方のオペランドArg1は0にセットされてもよい。それによりAESENCRYPT310によるXOR演算は、前記鍵による暗号化のために、単に第一のオペランドArg2を与える。このXOR方式がCBCおよびCTRモードについてどのように使用されうるかは、図5ないし図9に関連してさらに述べることになる。
【0032】
AESENCRYPT310がどのモードで動作するかを決定するもう一つの方式(図示せず)は、AESENCRYPT310命令において、前記二つのオペランドArg1およびArg2に加えて即値バイト(immediate byte)を用いるというものでありうる。この第二の方式は、オペランドどうしがXORされた前記第一の方式とは対照的に、即値バイトの内容に基づいてAESENCRYPT310のオペランドの一方を使うか両方を使うかおよび/またはどのように使うかを指定しうる。AESENCRYPT310(またはAESDECRYPT)のような単一の2オペランド命令を複数の異なるモード(たとえばECB、CBC、CTRなど)で使えるようにするために、これら二つ以外の他の方式が可能であり、考えられている。
【0033】
図4は、ECBモードでAESENCRYPT310を使うための例示的なコード(たとえば、プロセッサ190によって実行されたときに方法をなすもの)410を示している。まず、暗号鍵が暗黙的レジスタXMM0の一つにロードされる(MOV命令または同様の命令を介して)。次いで値(たとえば16)が別のレジスタECXにロードされうる(MOV命令または同様の命令を介して)。これはAES暗号化すべき平文の128ビット・ブロックの数をセットするためである。この値に128ビットを乗算したものがコード410によって暗号化されるべき平文の全長さを指定しうる。そのような初期化後、AESENCRYPT310を含むループがECX回実行されうる。
【0034】
ループ内では、第二の暗黙的レジスタXMM1が、値0をロードすることによって、ECBモードのためにクリアされる。上に説明したように、この0という値はAESENCRYPT310によって第二のオペランドとXORされたとき、第二のオペランドを生じるが、それはECBモードで動作するための所望の結果である。次の命令に目を転じると、AESENCRYPT310はPlainmemory[ECX]内に平文を受け、該平文をXMM0内の鍵で暗号化し、その結果を第二の暗黙的レジスタXMM1に書き込む。次に、XMM1内の暗号文がCiphermemory[ECX]に記憶され、ECX内のループ値がデクリメントされてからループの先頭にジャンプして戻る。
【0035】
次のループにおいて、XMM1は再びクリアされ、直前の128ビットについての前記の暗号化結果がクリアされる。このようにして、AESENCRYPT310は、ECX内のデクリメントされた値についてXMM0内の鍵によって暗号化されるべきPlainmemory[ECX]の単一の入力をもつ。コード410のループ実行は、ECXにロードされた初期値によって指定される平文の全ブロックがECBモードでAES暗号化されるまで継続しうる。
【0036】
図5は、CBCモードで使われるAES暗号化命令(AESENCRYPT Arg1, Arg2)310を概念的に図解している。図のように、AESENCRYPT310は二つのオペランドを有し、その一方Arg2が暗号化されるべき平文を供給する。CBCモードでは、他方のオペランドArg1は先の暗号化されたブロックからのいわゆる「古い」暗号文を提供し、これが暗号化の前にAESENCRYPT310によって平文とXORされる。暗号鍵は暗黙的な128ビットレジスタXMM0およびXMM1の一つまたは複数から供給される。現在ブロックについての暗号化された暗号文がAESENCRYPT310のArg1に上書きされる。
【0037】
図6は、CBCモードで使われる二つの連鎖されたAES暗号化命令600を概念的に示している。これはCBCモードの時間的性質を視覚的に示している(時間的に先の動作が図の左に現れている)。ここで、直前の暗号化ブロックの結果が新しい平文とXORされている。これはECBよりもランダムな暗号文を生成する(たとえば、ECBモードでは、鍵が同じなら、同じ平文ブロックは同じ暗号文ブロックに暗号化される)。図6に示されるようなCBCモードでは、平文の所与のブロックについての暗号文は、直前のラウンドの暗号文結果に依存する。
【0038】
図7は、CBCモードでAES暗号化命令を使うための例示的なコード(たとえば、プロセッサ190によって実行されたときに方法をなすもの)710を示している。まず、暗号鍵が暗黙的レジスタXMM0の一つにロードされる(MOV命令または同様の命令を介して)。次いで値(たとえば16だが、この数はより大きくてもより小さくてもよい)が別のレジスタECXにロードされうる(MOV命令または同様の命令を介して)。これはAES暗号化すべき平文の128ビット・ブロックの数をセットするためである。この値に128ビットを乗算したものがコード710によって暗号化されるべき平文の全長さを指定しうる。また、最初にループを通る際、XMM1は0をロードすることによってクリアされうる。最初のブロックの平文と組み合わせるべき先行ブロックからの暗号文がないからである。そのような初期化後、AESENCRYPT310を含むループがECX回実行されうる。
【0039】
ループ内では、AESENCRYPT310はPlainmemory[ECX]内に平文を受け、それをXMM1内の値(たとえば、最初にループを通るときについては0)とXORし、XORされた結果をXMM0内の鍵で暗号化し、その結果を第二の暗黙的レジスタXMM1に書き込み、すでにそこにあった値を上書きする。次に、XMM1内の暗号文がCiphermemory[ECX]に記憶され、ECX内のループ値がデクリメントされてからループの先頭にジャンプして戻る。
【0040】
次のループにおいて、ECBモードとは異なり、直前の128ビットについてのXMM1内の0でない暗号文結果はクリアされない。むしろ、該結果は、AESENCRYPT310によって、平文の次のブロックと、CBCモードに基づく鍵による暗号化に先立ってXORされる。このようにして、AESENCRYPT310は、ECX内のデクリメントされた値についてのPlainmemory[ECX]および直前のループからのXMM1内の暗号文の値の二重の入力をもつ。AESENCRYPT310命令はそれら二つの入力をXORし、その結果をXMM0内の鍵で暗号化する。コード410のループ実行は、ECXにロードされた初期値によって指定される平文の全ブロックがCBCモードでAES暗号化されるまで継続しうる。
【0041】
上記の方式およびシステムは、単一の2オペランド命令を使ってCBCモードおよびECBモードの暗号化を有利に実行しうる。この命令は、AESについて、その最も一般的な二つのモードにおいてよりタイトなループを許容する。本命令は、限られた数のオペランドで機能し、AESの最も一般的な使用を、二番目に最も高頻度の使用をサポートする単一命令に移す。
【0042】
図8は、CTRモードで使われるAES暗号化命令(AESENCRYPT Arg1, Arg2)810を概念的に図解している。図のように、AESENCRYPT810は二つのオペランドを有し、その一方Arg2が暗号化されるべきカウンター値を供給する。CTRモードでは、他方のオペランドArg1が暗号化されるべき平文を提供する。これが暗号化後にAESENCRYPT810によって平文とXORされる。暗号鍵は暗黙的な128ビットレジスタXMM0およびXMM1の一つまたは複数から供給される。現在ブロックについての暗号化された暗号文がAESENCRYPT810のArg1に上書きされる。
【0043】
図9は、CTRモードでAES暗号化命令を使うための例示的なコード(たとえば、プロセッサ190によって実行されたときに方法をなすもの)910を示している。まず、暗号鍵が暗黙的レジスタXMM0の一つにロードされる(MOV命令または同様の命令を介して)。次いで値(たとえば16だが、この数はより大きくてもより小さくてもよい)が別のレジスタECXにロードされうる(MOV命令または同様の命令を介して)。これはAES暗号化すべき平文の128ビット・ブロックの数をセットするためである。この値に128ビットを乗算したものがコード910によって暗号化されるべき平文の全長さを指定しうる。次に、カウンター値が別のXMMレジスタ(XMM4のような)にロードされる(MOV命令または同様の命令を介して)。そのような初期化後、AESENCRYPT810を含むループがECX回実行されうる。
【0044】
ループ内では、AESENCRYPT810はカウンター値を受け、実際には該カウンター値を暗号化し、次いで平文データとのXORを実行して暗号文を生成する。次にXMM3内の暗号文がCiphermemory[ECX]に記憶され、ECX内のループ値がデクリメントされてからループの先頭にジャンプして戻る。その後、カウンターは適宜調整される(ADD、MULまたは他の命令を介して)。その他の点ではループはECBモードと同一に進行する。
【0045】
一つまたは複数の実装の以上の記述は、例示と説明を提供するが、網羅的であることは意図されておらず、本発明の範囲を厳密な開示された形に限定することも意図されていない。上記の教示に照らして修正および変形が可能であり、本発明のさまざまな実装の実践から獲得されうる。
【0046】
たとえば、AES暗号化および復号は128ビット鍵について記載されてきたが、FIPS Publication 197におけるNIST標準は192ビットおよび256ビット鍵を許容している。そのような場合、192ビットまたは256ビット鍵における残りの64ビットまたは128ビットのためにXMM1が使用されてもよい。そのような場合、コード410またはコード710またはコード910(またはAESENCRYPTまたはAESDECRYPTがあるどんなコードでも)においてXMM1の代わりに他の何らかの128ビットレジスタ(たとえばXMM2、XMM3など)が使用されてもよい。XMM1内には鍵の一部があるからである。
【0047】
上記ではAESENCRYPTについて記載しているが、同様の仕方でECBモード、CTRモードおよびCBCモードにおけるAES復号をサポートするためにAESDECRYPT Arg1, Arg2が使用されてもよい。当業者は、ECBモードでのAESDECRYPTの使用は比較的ストレートであり、一方、CBCモードは、暗号化の際にAESENCRYPTによって実行されたXOR演算の逆または反対といった追加的な計算を伴うことがあると認識するであろう。
【0048】
AESENCRYPTおよびAESDECRYPTが厳密にどのようにしてAESアルゴリズムを実行するかの詳細が呈示されていないが、それは十分に暗号技術の当業者の技量の範囲内であるということも認識しておくべきである。具体的な実装は、AESENCRYPTおよびAESDECRYPTが実行される具体的なプロセッサ190について最適化されている傾向がありうる。実装によっては、これらの命令は可能な最も高速な実行のために機械語で最適化されてもよい。そのような最適化の詳細は、特許請求される本発明にとって格別密接なつながりがあるわけではなく、説明の明確のため省略した。
【0049】
本願の記載において使用されるいかなる要素、工程、命令も、明示的にそう述べられていない限り、本発明にとって決定的に重要とも本質的とも解釈されるべきではない。また、ここでの用法では、単数形の表現が一つまたは複数を含むことを意図していることがある。特許請求される発明の上記の実装に対して、本発明の精神および原理から実質的に外れることなく変形および修正がなされてもよい。そのようなすべての修正および変形は、ここに本開示の範囲内に含められ、付属の請求項によって保護されることが意図されている。

【図面の簡単な説明】
【0050】
【図1】いくつかの実装に基づく例示的なコンピュータ・システムを示す図である。
【図2】いくつかの実装に基づくプロセッサのレジスタ・ファイルを示す図である。
【図3】ECBモードで使用されるAES暗号化命令を概念的に示す図である。
【図4】ECBモードでAES暗号化命令を使うための例示的なコードを示す図である。
【図5】CBCモードで使われるAES暗号化命令を概念的に示す図である。
【図6】CBCモードで使われる二つの連鎖されたAES暗号化命令を概念的に示す図である。
【図7】CBCモードでAES暗号化命令を使うための例示的なコードを示す図である。
【図8】CTRモードで使われるAES暗号化命令を概念的に示す図である。
【図9】CTRモードでAES暗号化命令を使うための例示的なコードを示す図である。
【符号の説明】
【0051】
100 コンピュータ・システム
101 相互接続
104 メイン・メモリ
106 ROM
107 データ記憶装置
109 プロセッサ
121 表示装置
122 入力装置
123 カーソル・コントロール
124 ハードコピー装置
125 音記録/再生装置
126 ビデオ
130 実行ユニット
145 暗号回路
150 レジスタ・ファイル
160 キャッシュ
165 デコーダ
170 内部相互接続
190 通信装置
201 整数レジスタ
207 制御信号
208 状態レジスタ
209 レジスタ
210 拡張レジスタ
211 命令ポインタ・レジスタ
310 AES暗号化命令
410 ECBモードでAESENCRYPTを使うためのコード
600 CBCモードで使われる二つの連鎖されたAES暗号化命令
710 CBCモードでAES暗号化命令を使うためのコード
810 CTRモードで使われるAES暗号化命令
910 CTRモードでAES暗号化命令を使うためのコード

【特許請求の範囲】
【請求項1】
命令が記憶されている機械可読媒体であって、該命令は、機械によって実行された場合に該機械をして:
前記命令の第一のオペランドと前記命令の第二のオペランドを組み合わせて結果を生成する段階と;
先進暗号化標準(AES)アルゴリズムに従って、鍵を使って前記結果を暗号化して暗号化された結果を生成する段階とを有する方法を実行させる、機械可読媒体。
【請求項2】
前記組み合わせることが:
前記命令の第一のオペランドと前記命令の第二のオペランドとの排他的ORを求め、前記結果を生成することを含む、
請求項1記載の媒体。
【請求項3】
前記暗号化することが:
前記鍵を一つまたは複数の所定のレジスタから取得することを含む、請求項1記載の媒体。
【請求項4】
前記鍵が128ビット、192ビットまたは256ビットの長さである、請求項3記載の媒体。
【請求項5】
前記第二のオペランドが、128ビットの長さである、暗号化されるべき平文である、請求項1記載の媒体。
【請求項6】
前記第一のオペランドが0である、請求項5記載の媒体。
【請求項7】
前記第一のオペランドが先行する暗号化動作からの先行する暗号化された結果である、請求項5記載の媒体。
【請求項8】
平文の値を第二の値と論理的に組み合わせて組み合わされた結果を生成し、先進暗号化標準(AES)アルゴリズムおよび鍵を使って前記組み合わされた結果を暗号化して暗号化された結果を生成する第一の論理を有する、
暗号化を実行するプロセッサ。
【請求項9】
前記第一の論理が、前記平文の値と前記第二の値との排他的OR(XOR)を求めて前記組み合わされた結果を生成するよう構成されている、請求項8記載のプロセッサ。
【請求項10】
前記第二の値を記憶する第一のレジスタと;
前記鍵を記憶する第二のレジスタとをさらに有する、
請求項8記載のプロセッサ。
【請求項11】
前記第一の論理が、前記暗号化された結果を前記第一のレジスタ内に保存するよう構成されている、請求項10記載のプロセッサ。
【請求項12】
前記第二の値が以前に暗号化された結果または0である、請求項10記載のプロセッサ。
【請求項13】
前記平文の値および前記暗号化された結果がそれぞれ128ビットの長さである、請求項8記載のプロセッサ。
【請求項14】
少なくとも二つのモードでデータを暗号化できる、二つのオペランドをもつ先進暗号化標準(AES)暗号化命令を記憶するメモリと;
AES暗号化命令を実行するプロセッサとを有する、
データを暗号化するシステム。
【請求項15】
前記AES暗号化命令のオペランドが二つだけである、請求項14記載のシステム。
【請求項16】
前記少なくとも二つのモードが電子コードブック(ECB)モード、カウンター(CTR)モードまたは暗号ブロック連鎖(CBC)モードのうちの二つを含む、請求項14記載のシステム。
【請求項17】
前記少なくとも二つのモードのうち前記AES暗号化命令がデータを暗号化するモードが、前記二つのオペランドのうちの一方の値に基づいている、請求項14記載のシステム。
【請求項18】
前記少なくとも二つのモードのうち前記AES暗号化命令がデータを暗号化するモードが、前記AES暗号化命令に関連付けられている即値バイトに基づいている、請求項14記載のシステム。
【請求項19】
少なくとも二つのモードでデータを復号できる、二つのオペランドをもつ先進暗号化標準(AES)復号命令を記憶するメモリと;
AES復号命令を実行するプロセッサとを有する、
データを復号するシステム。
【請求項20】
前記AES復号命令のオペランドが二つだけである、請求項19記載のシステム。
【請求項21】
前記少なくとも二つのモードが電子コードブック(ECB)モード、カウンター(CTR)モードまたは暗号ブロック連鎖(CBC)モードのうちの二つを含む、請求項19記載のシステム。
【請求項22】
前記少なくとも二つのモードのうち前記AES復号命令がデータを復号するモードが、前記二つのオペランドのうちの一方の値に基づいている、請求項19記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2008−283672(P2008−283672A)
【公開日】平成20年11月20日(2008.11.20)
【国際特許分類】
【外国語出願】
【出願番号】特願2008−64272(P2008−64272)
【出願日】平成20年3月13日(2008.3.13)
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】