説明

一連の変換を行って一変換を分離する命令を含む命令の組合せ

【課題】高度暗号化標準(AES)は、情報を暗号化し、復号することが可能な対称ブロック暗号である。
【解決手段】暗号化(暗号)は、秘密鍵(暗号鍵)を使用して一連の変換(ShiftRows、SubstituteBytes、MixColumns)を行って、「平文」として表す理解できるデータを、「暗号文」として表す理解できない形式に変換する。逆暗号(復号)における変換(InverseShiftRows、InverseSubstituteBytes、InverseMixColumns)は、暗号における変換の逆である。暗号化及び復号は、一連の変換を行う命令の使用によって効率的に行われる。前述の命令の組合せは、変換(ShiftRows、SubstituteBytes、MixColumns、InverseShiftRows、InverseSubstituteBytes、InverseMixColumns)の分離を得ることを可能にする。

【発明の詳細な説明】
【技術分野】
【0001】
本明細書は、高度暗号化標準(AES)に関し、特に、AESの一連の変換の部分集合を行ってAES変換のうちの1つの結果を提供する命令を含む命令の組合せの使用に関する。
【背景技術】
【0002】
暗号は、情報を保護するための鍵及びアルゴリズムに依存するツールである。アルゴリズムは、高度な数学的アルゴリズムであり、鍵はビット列である。暗号システムには2つの基本タイプ(すなわち、秘密鍵システム及び公開鍵システム)がある。対称システムとしても表す秘密鍵システムは、二以上の者によって共有される単一の鍵(「秘密鍵」)を有する。単一の鍵を使用して情報を暗号化し、復号する。
【0003】
国立標準技術研究所(NIST)により、連邦情報処理標準(FIPS)197として公表されている高度暗号化標準(AES)は、秘密鍵システムである。AESは、情報を暗号化し、復号することが可能な対称ブロック暗号である。
【0004】
暗号化(暗号)は、秘密鍵(暗号鍵)を使用して一連の変換を行って、「平文」として表す、理解できるデータを、「暗号文」として表す、理解できない形式に変換する。暗号における変換には、(1)排他的OR(XOR)演算を使用して、ラウンド鍵(暗号鍵から導き出された値)を状態(2次元のバイト・アレイ)に加算する工程、(2)非線形バイト置換テーブル(S−ボックス)を使用して状態を処理する工程、(3)別々のオフセットだけ、状態の最後の3行を巡回シフトさせる工程、及び(4)状態の列全てを用い、そのデータを(互いに無関係に)混ぜて、新たな列を生成する工程が含まれる。
【0005】
復号(逆暗号)は、暗号鍵を使用して一連の変換を行って、「暗号文」ブロックを、同じ容量の「平文」ブロックに変換する。逆暗号における変換は、暗号における変換の逆である。
【0006】
ラインダール・アルゴリズムは、128、192及び256ビットの長さの暗号鍵を使用して、128ビットのデータ・ブロックを処理するために、AES標準において規定されている。上記別々の鍵の長さは通常、AES−128、AES−192及びAES−256として表される。
【発明の概要】
【発明が解決しようとする課題】
【0007】
AESアルゴリズムは、10、12、又は14の連続ラウンドにおいて、平文を暗号文に、又は暗号文を平文に変換する。ラウンド数は鍵の長さに依存する。
【課題を解決するための手段】
【0008】
以下の詳細な説明は、特許請求の範囲記載の主題を例証する実施例を参照して行うが、その多くの代替、修正及び変形は当業者には明らかになるだろう。よって、特許請求の範囲記載の主題が、広く捉えられ、特許請求の範囲においてのみ規定されることが意図されている。
【図面の簡単な説明】
【0009】
【図1】汎用プロセッサにおいてAES暗号及び復号を行うための命令を含むシステムを示すブロック図である。
【図2】図1に示すプロセッサの実施例を示すブロック図である。
【図3】AESアルゴリズムにおけるMixColumns変換を分離するために少なくとも1つのAESラウンド命令を使用したMixColumn分離変換関数の実施例を示すフロー図である。
【図4】AESアルゴリズムにおけるInverseMixColumns変換を分離するために少なくとも1つのAESラウンド命令を使用したInverseMixColumn分離変換関数の実施例を示すフロー図である。
【図5】ShiftRows変換及びInverseShiftRows変換を分離するためにパックト・シャフル・バイト(PSHUFB)の使用を示す図である。
【図6】AESアルゴリズムにおけるSubstituteBytes変換を分離するために少なくとも1つのAESラウンド命令を使用したSubstituteBytes分離変換関数の実施例を示すフロー図である。
【図7】AESアルゴリズムにおけるInverseSubstituteBytes変換を分離するために少なくとも1つのAESラウンド命令を使用したInverseSubstituteBytes分離変換関数の実施例を示すフロー図である。
【発明を実施するための形態】
【0010】
特許請求の範囲記載の主題の実施例の構成は、以下の詳細の説明が進むにつれて、かつ、図面を参照すると明らかになるであろう。図面では、同じ符号は同じ部分を表す。
【実施例】
【0011】
国立標準技術研究所(NIST)により、連邦情報処理標準(FIPS)197として公表されている高度暗号化標準(AES)アルゴリズムは、通常、ソフトウェアにおいて、又は専用プロセッサにおいて行われるコンピュータ集約型アルゴリズムである。AESアルゴリズムは、ソフトウェアにおいて、メモリに記憶された、中央処理装置(CPU)のロード/ストア/インクリメント命令シーケンスを実行することによって行われる。平文又は暗号文の各バイトを変換するためにAESアルゴリズムは多くのCPUサイクルを消費するので、変換は低速である。よって、暗号化は、通常、コンピュータに記憶された情報の部分集合(例えば、「極秘」として分類され得る情報)の暗号化にのみ使用される。しかし、コンピュータ上に記憶された情報のより多くを暗号化する必要性が存在している。例えば、モバイル・コンピュータ上に記憶された情報全てが暗号化されている場合、この情報は、モバイル・コンピュータが盗まれた場合にも保護される。
【0012】
AESは、鍵容量が128、192又は256バイトの128ビット・ブロックを処理するブロック暗号である。AESアルゴリズムは、10、12又は14の連続ラウンドにおいて、128ビットの平文ブロックを128ビットの暗号ブロックに変換する(暗号化する)か、又は128ビットの暗号文ブロックを128ビットの平文ブロックに変換する(復号する)。ラウンド数は鍵容量(128ビット、192ビット又は256ビット)に依存する。変換シーケンス(サブ工程)は、(10、12、又は14の)ラウンド毎に繰り返される。
【0013】
暗号化ラウンドの変換シーケンスには以下が含まれる。
【0014】
(1)AddRoundKey変換:ラウンド鍵(暗号鍵から導き出される値)が、排他的OR(XOR)演算を使用して状態(2次元の128ビット・バイト・アレイ)に加えられる。AddRoundKeyは、(128ビット, 128ビット)→128ビット変換であり、これは、その2つの引数の、ビット単位の排他的OR(XOR)として定義される。AESフローでは、引数はState及びラウンド鍵である。
【0015】
(2)SubBytes変換:状態は、非線形バイト置換テーブル(S−Box)を使用して処理される。SubBytesは、入力の16バイトそれぞれにS−Box変換を施すことによって規定される、16バイトから16バイトへの(バイト単位の)変換である。S−Box変換は、ルックアップ・テーブルにより、以下のように表すことが可能である。すなわち、ルックアップ・テーブルへの入力は、バイトB[7:0]であり、ここで、x及びyは、低ニブル及び高ニブルx([3:0]=B[7:4],y[3:0]=B[3:0])を表す。出力バイトは、テーブルにおいて16進(H)表記で2桁の数としてコード化される。例えば、入力85Hは97Hをもたらす。
【0016】
(3)ShiftRows変換:状態の最後の3行は、別々のオフセットによって巡回シフトされる。ShiftRowsは、(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)→(11, 6, 1, 12, 7, 2, 13, 8, 3, 14, 9, 4, 15, 10, 5, 0)への、バイト単位の置換である。上記変換は、状態の4×4マトリクス表現に対する処理として捉えられる。4×4マトリクスにおける第1の行は変わらない。第2の行は、1バイト位置だけ、左回転させる。第3の行は、2バイト位置だけ、左回転させる。第4の行は、3バイト位置だけ、左回転させる。
【0017】
(4)MixColumns変換:状態の列全てからのデータを(互いに無関係に)混ぜて、新たな列を生成する。MixColumnsは、入力の4x4マトリクス表現の列を処理する、128ビット→128ビット変換である。上記変換は、各列を、AES−ガロア・フィールド256における係数を備えた3次多項式として扱う。状態の4×4マトリクス表現の各列は、多項式a(x)={03}x+{01}x+{01}x+{02}で乗算され、modulo x+1で約分される。
【0018】
上記暗号化ラウンドの変換シーケンスは、以下に表1として示すように単一のAES暗号化ラウンド命令AESENCによって行うことができ、最後の暗号化ラウンドの変換シーケンスは、以下に表2として示すように単一のAESの最後の暗号化ラウンド命令AESENCLASTによって行うことができる。
【0019】
AESENC xmm1,xmm2/m128
State=xmm1、
RoundKey=xmm2/m128、
Tmp=ShiftRows(State)、
Tmp=SubstituteBytes(Tmp)、
Tmp=MixColumns(Tmp)、
Output=xmm1=Add RoundKey(Tmp,Round Key)
表1
【0020】
AESENCLAST xmm1,xmm2/m128
State=xmm1、
RoundKey=xmm2/m128、
Tmp=ShiftRows(State)、
Tmp=Substitute Bytes(Tmp)、
Output=xmm1=AddRoundKey(Tmp,RoundKey)
表2
【0021】
表1及び表2に示すAESENC命令及びAESENCLAST命令は、状態(xmmレジスタに規定された128ビット)、RoundKey(xmmレジスタにおいて、又はメモリ・ポインタとして規定された128ビット)、又は鍵(xmmレジスタ及び/又はメモリに規定された128、192又は256ビット)に対する特定の変換シーケンスを行う。前述の命令は128ビット出力を生成する。128ビット→128ビットの対応する変換シーケンスを、FIPSパブリケーション197の用語を使用して説明する。
【0022】
上記表1及び表2に示すAES命令(AESENC,AESENCLAST)は、FIPSパブリケーション197によって規定されているように、128ビット変数(temp)(状態としても表される)に格納されたデータをシリアル処理する。N個のデータ・ブロックを処理するためのシリアル動作シーケンスの例を以下に、表3に示す。
【0023】
For i from 1 to N_BLOCKS do
xmm1=BLOCK[i]//load
xmm1=AESENC(xmm1,RK[1])
xmm1=AESENC(xmm1,RK[2])
xmm1=AESENC(xmm1,RK[3])

xmm1=AESENC(xmm1,RK[9])
xmm1=AESENCLAST(xmm1,RK[10])
store xmm1
End
表3
【0024】
暗号化する対象のN_Blocks毎に、データ・ブロックがレジスタに格納される。例えば、128ビットを有するxmmレジスタ(xmm1)を使用して128ビット・ブロックを格納することができる。10の暗号化ラウンドをデータ・ブロックに対して直列に行う。10ラウンドのAES処理のうちのラウンド1乃至9については、AESENC命令を呼び出して、ラウンド鍵、及び先行ラウンドの結果、又は(ラウンド1の場合)初期ブロック・データを使用してラウンド処理を行う。AESENCLAST命令を呼び出して、最終ラウンド(この例では、ラウンド10)を処理する。
【0025】
復号ラウンドの変換シーケンスは、
(1)AddRoundKey変換:ラウンド鍵(暗号鍵から導き出される値)が、排他的OR(XOR)演算を使用して状態(2次元の128ビット・バイト・アレイ)に加えられる。AddRoundKeyは、(128ビット,128ビット)→128ビット変換であり、これは、その2つの引数の、ビット単位のXORとして定義される。AESフローでは、引数は状態及びラウンド鍵である。
【0026】
(2)InverseSubstituteBytes(SubBytes)変換:状態は、逆非線形バイト置換テーブル(S−Box)を使用して処理される。InverseSubstituteBytesは、入力の各バイトにInvS−Box関数を施すことによって規定される16バイト→16バイト(バイト単位)変換(すなわち、[P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A]→[InvS−Box (P), InvS−Box (O), InvS−Box (N), InvS−Box (M), InvS−Box (L), InvS−Box (K), InvS−Box (J), InvS−Box (I), InvS−Box (H), InvS−Box (G), InvS−Box (F), InvS−Box (E), InvS−Box (D), InvS−Box (C), InvS−Box (B), InvS−Box (A)]である)。
【0027】
(3)InverseShiftRows変換 この変換は、ShiftRows変換の逆である。InverseShiftRows変換は、(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)→(3, 6, 9, 12, 15, 2, 5, 8, 11, 14, 1, 4, 7, 10, 13, 0)の、バイト単位の置換である。P−A表記では、[P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A]→[D,G,J,M,P,C,F,I,L,O,B,E,H,K,N,A]となる。
【0028】
(4)InverseMixColumns変換は、入力の4×4マトリクス表現の列を処理する128ビット→128ビット変換である。変換は4×4マトリクス内の各列を、AES―GF256フィールド内の係数を備えた3次多項式として扱う。状態の4×4マトリクス表現の各列は、多項式a−1(x)={0b}x+{0d}x+{09}x+{0e}で乗算され、modulo x+1で約分される。
【0029】
上記復号ラウンドの変換シーケンスは、以下に表4として示すように単一のAES復号ラウンド命令AESDECによって行うことができ、最後の復号ラウンドの変換シーケンスは、以下に表5として示すように単一のAESの最後の復号ラウンド命令AESDECCLASTによって行うことができる。
【0030】
以下表4及び表5に示すAESDEC命令及びAESDECLAST命令は、State(xmmレジスタに規定された128ビット)、及びRoundKey(xmmレジスタにおいて、又はメモリ・ポインタとして規定された128ビット)、又は鍵(xmmレジスタ及び/又はメモリに規定された128、192又は256ビット)に対する特定の変換シーケンスを行う。前述の命令は128ビット出力を生成する。128ビット→128ビットの対応する変換シーケンスを、FIPSパブリケーション197の用語を使用して説明する。
【0031】
AESDEC xmm1,xmm2/m128
State=xmm1、
RoundKey=xmm2/m128、
Tmp=InverseShiftRows(State)、
Tmp=InverseSubstituteBytes(Tmp)、
Tmp=InverseMixColumns(Tmp=)、
Output=xmm1=AddRoundKey(Tmp=,RoundKey)
表4
【0032】
AESDECLAST xmm1,xmm2/m128
State=xmm1、
RoundKey=xmm2/m128、
Tmp=InverseShiftRows(State)、
Tmp=InverseSubstituteBytes(Tmp)、
Output=xmm1=AddRoundKey(Tmp,RoundKey)
表5
【0033】
表1、2、4及び5に示す4つのAESラウンド命令(AESENC,AESNECLAST,AESDEC,AESDECLAST)はそれぞれ、いくつかのAES変換を併せて行うことによって性能を向上させる。しかし、上記命令は、AES標準の現行バージョンのみをサポートする。
【0034】
本発明の実施例は、分離された変換としてAESアルゴリズムのサブ工程(変換)を得るためのAES暗号化命令及びAES復号命令を含む、命令の組合せを使用する。分離された変換には、暗号化AES命令(AESENC,AESENCLAST)によって使用されるShiftRows、SubstituteBytes及びMixColumns変換、並びに復号AES命令(AESDEC,AESDECLAST)によって使用されるInverseShiftRows、InverseSubstituteBytes及びInverseMixColumns変換が含まれる。
【0035】
変換を分離させるための機能は、AES暗号化命令及びAES復号命令の使用に柔軟性を加える。例えば、AESアルゴリズムのサブ工程(変換)を得るための機能は、AESの変形を構成することを可能にし、サポートする対象のAES標準において考えられる将来の修正を可能にする。AESプリミティブ(変換)を他の暗号及び暗号ハッシュ関数の構築ブロックとして使用することも可能にする。
【0036】
図1は、汎用プロセッサにおいてAES暗号化及び復号を行うための命令を含むシステム100を示すブロック図である。システム100は、プロセッサ101と、メモリ・コントローラ・ハブ(MCH)又はグラフィック・メモリ・コントローラ・ハブ(GMCH)102と、入出力(I/O)コントローラ・ハブ(ICH)104とを含む。MCH102は、プロセッサ101とメモリ108との間の通信を制御するメモリ・コントローラ106を含む。プロセッサ101及びMCH102はシステム・バス116を介して通信する。
【0037】
プロセッサ101は、複数のプロセッサ(単一コアのインテル(登録商標)ペンティアム(登録商標)IVプロセッサ、単一コアのインテル・セレロン・プロセッサ、インテル(登録商標)XScaleプロセッサや、マルチコア・プロセッサ、例えば、インテル(登録商標)ペンティアム(登録商標)D、インテル(登録商標)ジーオン(登録商標)プロセッサや、インテル(登録商標)コア(登録商標)デュオ・プロセッサ、又は何れかの他のタイプのプロセッサ)のうちの何れか1つであり得る。
【0038】
メモリ108は、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)、同期化ダイナミック・ランダム・アクセス・メモリ(SDRAM)、ダブル・データ・レート2(DDR2RAM)若しくはランバス・ダイナミック・ランダム・アクセス・メモリ(RDRAM)、又は何れかの他のタイプのメモリであり得る。
【0039】
ICH104は、ダイレクト・メディア・インタフェース(DMI)などの高速チップ間相互接続114を使用してMCH102に結合することができる。DMIは、2つの一方向レーンを介した2ギガビット/秒の同時転送レートをサポートする。
【0040】
ICH104は、ICH104に結合された少なくとも1つの記憶装置112との通信を制御するために記憶I/Oコントローラ110を含み得る。記憶装置は例えば、ディスク・ドライブ、ディジタル・ビデオ・ディスク(DVD)ドライブ、コンパクト・ディスク(CD)ドライブ、レイド(RAID)、テープ・ドライブや他の記憶装置であり得る。ICH104は、例えば、直列に接続された小型コンピュータ・システム・インタフェース(SAS)やシリアル・アドバンスド・テクノロジー・アタッチメント(SATA)などの直列記憶プロトコルを使用して記憶プロトコル相互接続118を介して記憶装置112と通信することができる。
【0041】
プロセッサ101は、AES暗号化処理及びAES復号処理を行うためのAES機能103を含む。AES機能103を使用して、メモリ108に記憶し、かつ/又は記憶装置112に記憶することができる情報を暗号化又は復号することができる。
【0042】
メモリ108又は記憶装置112に記憶することができる変換分離機能120は、AES機能103を使用して、AES暗号命令又はAES復号命令における変換のうちの1つを分離することができる。変換分離機能120は後に、図3乃至図7に関して説明する。
【0043】
図2は、図1に示すプロセッサ101の実施例のブロック図である。プロセッサ101は、レベル1(L1)命令キャッシュ202から受信されたプロセッサ命令をデコードするためのフェッチ及びデコード装置206を含む。プロセッサ命令を実行するために使用する対象のデータは、レジスタ・ファイル208に記憶することができる。一実施例では、レジスタ・ファイル208は、AESラウンド命令によって使用するためのデータを記憶するためのAESラウンド命令によって使用される複数の128ビット・レジスタを含む。
【0044】
一実施例では、レジスタ・ファイル208は、ストリーミング(単一命令多重データ(SIMD))拡張(SSE)命令セットを有するインテル・ペンティアム(登録商標)MMXプロセッサに設けられた128ビットMMXレジスタと同様な128ビット・レジスタの群である。SIMDプロセッサでは、データは、一度に、一128ビット・ブロックがロードされて、128ビット・ブロック単位で処理される。
【0045】
フェッチ及びデコード装置206は、L1命令キャッシュ202からマクロ命令をフェッチし、マクロ命令をデコードし、マイクロ操作(μops)と呼ばれる単純な操作(マイクロコード・リード・オンリー・メモリ(ROM)214に記憶することができる)に分割する。パイプラインされた実行装置210は、マイクロ操作をスケジューリングし、実行する。図示された実施例では、実行装置210におけるAES機能103は、AES暗号化/復号ラウンド命令を含むAESラウンド命令の組のマイクロ操作を含む。AESラウンド命令は、完全にパイプラインされており、よって、プロセッサ(CPU)は、処理する準備ができているデータが存在している場合、各サイクルにおいて命令をディスパッチすることができる。退避装置212は、実行された命令の結果をレジスタ又はメモリに書き込む。AESラウンド命令によって使用されるラウンド鍵216は、L1データ・キャッシュ204に記憶し、AES暗号化/復号ラウンド命令のうちの1つの何れかを実行するためにマイクロ操作によって使用するために実行装置210にロードすることができる。L1データ・キャッシュ204にラウンド鍵216を記憶することにより、サイドチャネル攻撃(例えば、システム100に記憶された暗号化情報に対するアクセスを得るためにラウンド鍵を得ようとする試行)からラウンド鍵216を保護する。
【0046】
AESラウンド命令がフェッチ及びデコード装置206によってデコードされた後、実行装置210によるAESラウンド命令の実行は、マイクロコードROM214に記憶することができるAESラウンド命令に関連付けられたマイクロ操作を行うことを伴う。
【0047】
一実施例では、暗号化ラウンド、復号ラウンド、暗号化最終ラウンド、及び復号最終ラウンドを行うための別個のAESラウンド命令セットを含むAESラウンド命令セットが提供される。一実施例では、AESラウンド命令はそれぞれ、一意の操作コード(opcode)を有する。
【0048】
表1、表2、表4及び表5に関して既に記載したように、AES命令セットは、4つのAESラウンド命令(暗号化、復号、暗号化最終ラウンド、及び復号最終ラウンド)を含む。AES命令セットにおけるAESラウンド命令は、最終ラウンド以外のラウンド全てに使用する対象の暗号化及び復号ラウンド動作を行うための単一ラウンド動作を含む。
【0049】
例えば、表1に示すAESENC単一ラウンド命令では、入力データは128ビット・レジスタ(xmmsrcdst)に記憶され、ラウンド鍵は、別の128ビット・レジスタ(Xmm)に記憶される。この命令は、128ビットのxmmsrcdstレジスタに記憶された入力データ(ソース)にAESラウンド処理を行い、128ビットのxmmsrcdstレジスタに記憶された入力データを上記ラウンド処理の実行の結果で上書きする。よって、xmmsrcdstはまず、入力データを記憶し、その後、AESラウンド処理の結果を記憶する。
【0050】
例えば、表2に示すAESENCLAST単一ラウンド命令では、入力データは128ビット・レジスタ(xmmsrcdst)に記憶され、ラウンド鍵は、別の128ビット・レジスタ(Xmm)に記憶される。この命令は、xmmsrcdstレジスタに記憶された入力データ(ソース)にAESラウンド処理を行い、xmmsrcdstレジスタに記憶された入力データを上記ラウンド処理の実行の結果で上書きする。よって、xmmsrcdstはまず、入力データを記憶し、その後、上記ラウンド処理の結果を記憶する。Xmmレジスタは、ラウンド処理のラウンド鍵を記憶する。
【0051】
鍵の容量は、128ビット、192ビット、又は256ビットであり得る。実行する対象のラウンドの数(n)は、鍵の容量に応じて、1、10、12又は14であり得る。各ラウンド鍵の容量は固定(128ビット)である。ラウンド数の値が10、12、14の場合、AESマイクロ操作は、128ビット、192ビット又は256ビットの鍵容量について、標準AES暗号化及び復号を行うことができる。
【0052】
同じ鍵が多くのブロックにわたって使用される場合、ラウンド毎のラウンド鍵(鍵スケジュール)を、予め計算し、メモリに(例えば、ラウンド鍵216をレベル1データ・キャッシュ204に)記憶することができる。ラウンド鍵216は、鍵の鍵スケジュールを記憶するための10個の要素を有するアレイ(RK)を含み得る。AES−128暗号化の入力鍵はRK[0]に記憶され、9個のラウンド鍵RK[0] − RK[1]は予め計算される。
【0053】
一実施例では、レジスタ・ファイル304は、AES命令によって使用することができる複数の128ビット・レジスタを有する。128ビット・レジスタは、ソース・オペランド、ラウンド鍵、及びAES命令の結果を記憶することができる。第1のラウンドの場合、AES命令は、暗号化する対象の128ビットの平文、又は復号する対象の128ビットの暗号文であり得るソース・オペランドを受け取る。
【0054】
本発明の一実施例では、上述のAES命令の組(AESINC,AESDEC,AESENCLAST,AESDECLAST)を使用して、FIPS197によって規定されるAESアルゴリズムのサブ工程(変換)を分離することができる。サブ工程は、ShiftRows、SubstituteBytes、MixColumns、InverseShiftRows、InverseSubstituteBytes及びInverseMixColumnsである。
【0055】
6つのサブ工程(変換)は128ビットの状態を処理し、128ビットの結果をもたらす。「逆」変換は、当該変換の対応する逆関数である。例えば、Tmp=SubstituteBytes(State)の場合、InverseSubstituteBytes(Tmp)=Stateである。AddRoundKey変換は2つの128ビット入力(State及びRoundKey)を処理し、そのビット単位のXORを出力する。
【0056】
図3は、AESアルゴリズムにおけるMixColumns変換を分離するために少なくとも1つのAESラウンド命令を使用したMixColumn分離変換関数300の実施例のフロー図である。
【0057】
MixColumns変換のマイクロ操作は、表1に示すAESENC命令にのみ使用される。AESDEC命令は、AESENC命令における変換に対する逆変換を含む。
【0058】
ブロック302では、MixColumns変換の分離関数は、現在の状態、及び0にセットされたラウンド鍵により、AESDECLAST命令を呼び出す。AESDECLASTは、以下に表6に示すマイクロ操作を行う。
【0059】
Tmp=InverseShiftRows(State)、
Tmp=InverseSubstituteBytes(Tmp)、
Tmp=AddRoundKey(Tmp,RoundKey)
表6
【0060】
まず、InverseShiftRows変換がStateに対して行われ、上記変換の結果がTmpに記憶される。次いで、InverseSubstituteBytes変換がTmpの内容に対して行われ、その結果がTmpに記憶される。最後に、AddRoundKey変換が、Tmpの内容、及び0にセットされたRoundKeyに対して行われる。排他的OR演算がTmpの内容、及び0に対して行われ、その結果はTmpの内容になるので、AddRoundKeyマイクロ操作は基本的には、NOP(無演算)である。AESENCLAST命令の出力Xは次いで、AESENC命令に対する入力として供給される。
【0061】
ブロック304では、AESENC命令は、AESDECLAST命令の結果(X)を受け取る。結果Xは、InverseSubstituteBytes(InverseShiftRows(State))、すなわち、2つの変換の結果:Stateに対するInverseSubstituteBytes及びInverseShiftRowsである。AESINC命令に対する入力は、AESDECLAST命令の結果、及び0にセットされたラウンド鍵である。AESENC命令は、以下、表7に示すマイクロ操作を行う。
【0062】
Tmp1=ShiftRows(X)
Tmp1=SubstituteBytes(Tmp1)
Tmp1=MixColumns(Tmp1)
Tmp1=AddRoundKey(Tmp1,RoundKey)
表7
【0063】
まず、ShiftRows変換が入力Xに対して行われ、上記変換の結果がTmpに記憶される。次いで、SubstituteBytes変換がTmpの内容に対して行われ、その結果がTmpに記憶される。次いで、MixColumns変換がTmpの内容に対して行われる。最後に、AddRoundKey変換がTmpの内容に対して行われ、RoundKeyが0にセットされる。排他的OR演算がTmpの内容、及び0に対して行われ、その結果はTmpの内容になるので、AddRoundKeyマイクロ操作は基本的にはNOP(無演算)である。AESENCLAST命令及びAESENC命令の組合せにより、MixColumns変換が分離する。AddRoundKeyマイクロ操作はNOPを行い、その他のマイクロ操作(ShiftRows、SubstituteBytes)は、逆マイクロ操作(InverseShiftRows、InverseSubstituteBytes)を行うことによって交換するからである。
【0064】
よって、AESENC命令の出力は、MixColumns(State)であり、これは、以下に示すようにAESDECLAST命令及びAESENC命令の組合せを使用して分離される。
【0065】
Y=InverseMixColumns(InverseSubstituteBytes(InverseShiftRows(SubstituteBytes(ShiftRows(State))))
【0066】
図4は、AESアルゴリズムにおけるInverseMixColumns変換を分離するために少なくとも1つのAESラウンド命令を使用したInverseMixColumn分離変換関数400の実施例のフロー図である。
【0067】
InverseMixColumns変換のマイクロ操作は、表2に示すAESENCLAST命令にのみ使用される。AESDEC命令は、AESENC命令における変換に対する逆変換を含む。
【0068】
ブロック402では、InverseMixColumns変換の分離関数400における第1の命令はAESDECLAST命令である。これは、ラウンド鍵を0にセットして呼び出す。AESDECLAST命令は、以下に表8に示すマイクロ操作を行う。
【0069】
Tmp=ShiftRows(State)、
Tmp=SubstituteBytes(Tmp)、
Tmp=AddRoundKey(Tmp,RoundKey)
表8
【0070】
まず、ShiftRows変換をStateに対して行って、上記変換の結果をTmpに記憶する。次いで、SubstituteBytes変換がTmpの内容に対して行われ、その結果がTmpに記憶される。最後に、AddRoundKey変換がTmpの内容に対して行われ、RoundKeyが0にセットされる。排他的OR演算がTmpの内容、及び0に対して行われ、XOR演算の結果がTmpの元の内容になるので、AddRoundKeyマイクロ操作は基本的にはNOP(無演算)である。AESENCLAST命令の出力Xは、AESECC命令に入力される。
【0071】
ブロック404では、InverseMixColumns変換分離関数における第2の命令は、AESENCLAST命令の結果(x)によって与えられるAESDEC命令である。結果Xは、SubstituteBytes(ShiftRows(State))である、すなわち、状態に対する2つの変換(SubstituteBytes及びShiftRows)の結果である。AESDEC命令に対する入力は、AESDECLAST命令の結果であり、ラウンド鍵は0にセットされる。AESENC命令は、以下、表9に示すマイクロ操作を行う。
【0072】
Tmp=InverseShiftRows(X)、
Tmp=InverseSubstituteBytes(Tmp)、
Tmp=InverseMixColumns(Tmp)、
Tmp=AddRoundKey(Tmp,RoundKey)
表9
【0073】
まず、InverseShiftRows変換を入力Xに対して行って、上記変換の結果をTmpに記憶する。次いで、InverseSubstituteBytes変換がTmpの内容に対して行われ、その結果がTmpに記憶される。次いで、InverseMixColumns変換がTmpの内容に対して行われる。最後に、AddRoundKey変換がTmpの内容に対して行われ、RoundKeyが0にセットされる。排他的OR演算がTmpの内容、及び0に対して行われ、その結果がTmpの内容になるので、AddRoundKeyマイクロ操作は基本的には、NOP(無演算)である。
【0074】
よって、AESENCLAST命令及びAESDEC命令の組合せにより、InverseMixColumns変換が分離する。AddRoundKeyマイクロ操作はNOPを行い、その他のマイクロ操作(ShiftRows、SubstituteBytes)は、逆マイクロ操作(InverseShiftRows、InverseSubstituteBytes)を行うことによって交換するからである。よって、AESDEC命令の出力は、InverseMixColumns(State)であり、これは、以下に示すように、AESENCLAST命令によって行われる変換及びAESDEC命令によって行われる変換を組合せることによって分離される。
【0075】
Y=InverseMixColumns(InverseSubstituteBytes(InverseShiftRows(SubstituteBytes(ShiftRows(State))))
よって、2つのAESラウンド命令の前述のシーケンスの結果は、分離されたInverseMixColumns変換になる。
【0076】
図5は、ShiftRows変換及びInverseShiftRows変換を分離するためのパックト・シャフル・バイト(PSHUFB)の使用を示す。状態500は、A乃至Lを付した16バイト(128ビット)を有する。PSHUFB命令は、バイトA及びBという2つのレジスタとして表すことができる2つの128ビット入力である。PSHUFB命令は、バイトA=[a151413 ... a]及びバイトB = [b151413 ... b]という2つのレジスタを用い、レジスタAを[ab15b14b13 ... ab0]で置き換える。bの最上位ビットが1にセットされた場合、結果のi番目のエントリは0である。
【0077】
図5に示す例では、状態500は、バイトA=[a151413 ... a]に対応する。ShiftRows変換の結果は状態502に示す。ShiftRows変換を行うために、バイトB=[b151413 ... b]は、0B06010C07020D08030E09040F0A0500(16進)にセットされる。状態500のバイト[15:0]は、状態502のビット位置(3, 6, 9, 12, 15, 2, 5, 8, 11, 14, 1, 4, 7, 10, 13, 0)に移動する。例えば、「A」を付した状態500のバイト[0]は状態502のバイト[0]に移動し、「L」を付した状態500のバイト[15]は状態502のバイト[11]「B」に移動する。
【0078】
InverseShiftRows変換は、バイトAを状態502にセットし、バイトBを「0306090C0F0205080B0E0104070A0D00」(16進)にセットして、PSHUSB命令を使用して行われる。状態500のバイト[15:0]は、状態502のビット位置(3, 6, 9, 12, 15, 2, 5, 8, 11, 14, 1, 4, 7, 10, 13, 0)に移動する。例えば、「A」を付した状態502のバイト[0]は状態504のバイト[0]に移動し、「L」を付した状態500のバイト[15]は状態504のバイト[3]に移動する。
【0079】
よって、ShiftRows変換及びInverseShiftRows変換は、Bバイトの選択(すなわち、ShiftRows変換を行うための「0B06010C07020D08030E09040F0A0500」(16進)、及びInverse Shift Rows変換を行うための「0306090C0F0205080B0E0104070A0D00」(16進))に基づいてPSHUFB命令を使用して行うことができる。
【0080】
図6は、AESアルゴリズムにおけるSubstituteBytes変換を分離するための少なくとも1つのAESラウンド命令を使用したSubstituteBytes分離変換関数の実施例のフロー図である。
【0081】
SubstituteBytes変換のマイクロ操作は、表2に示すAESENCLAST命令及び表1に示すAESENC命令に使用される。図5に関して説明した実施例では、AESENCLAST命令を使用してSubstituteBytes変換を分離する。
【0082】
ブロック602では、PSHUFB命令のSubstituteBytes変換の分離関数600を、Bレジスタを0306090C0F0205080B0E0104070A0D00(16進)にセットして呼び出して、状態に対してInverseShiftRowsを行う。図5に関して上述したように、Inverseシフト行変換は、Bレジスタに記憶された対応するバイト位置に基づいて、状態におけるバイトの並び替えを行う。
【0083】
ブロック604では、Substituteバイト変換分離関数600におけるAESDECLAST命令が、PSHUFB命令の結果(X)によって呼び出される。AESDECLAST命令に対する入力は、PSHUFB命令の結果、及び、0にセットされたラウンド鍵である。AESDECLAST命令は、以下、表10に示すマイクロ操作を行う。
【0084】
Tmp=ShiftRows(X)、
Tmp=SubstituteBytes(Tmp)、
Tmp=AddRoundKey(Tmp,RoundKey)
表10
【0085】
まず、ShiftRows変換を入力Xに対して行って、上記変換の結果をTmpに記憶する。次いで、SubstituteBytes変換がTmpの内容に対して行われ、その結果がTmpに記憶される。最後に、AddRoundKey変換がTmpの内容に対して行われ、RoundKeyが0にセットされる。排他的OR演算がTmpの内容、及び0に対して行われ、その結果がTmpの内容になるので、AddRoundKeyマイクロ操作は基本的には、NOP(無演算)である。PSHUFB命令及びAESENCLAST命令の組合せにより、SubstituteBytes変換が分離する。AddRoundKeyマイクロ操作はNOPを行い、その他のマイクロ操作(ShiftRows)は、PSHUFB命令によって逆マイクロ操作(InverseShiftRow)を行うことによって交換されるからである。よって、AESENCLAST命令の出力は、SubstituteBytes(State)であり、これは、以下に示すようにAESENCLAST命令及びPSHUFB命令の組合せを使用して分離される。
【0086】
Y=SubstituteBytes(ShiftRows(X))=SubstituteBytes(ShiftRows(InverseShiftRows(State)))=SubstituteBytes(State)
よって、1つのAESラウンド命令の前述の命令シーケンスの結果は、分離されたSubstituteBytes変換になる。
【0087】
別の実施例では、SubstituteBytes変換は以下のAES命令を使用して分離することができる。
【0088】
AESKEYGENASSIST xmm1,xmm2/m128,imm8
AESKEYGENASSIST命令は、鍵スケジュールのラウンド鍵の生成を支援するために使用され、鍵の容量と無関係に動作し、すなわち、鍵容量が128ビットであるか、192ビットであるか、又は256ビットであるかに関係なく同じ処理が行われる。AESKEYGENASSIST命令は、FIPS197鍵スケジュールを生成するために使用される「temp=SubWord(RotWord(temp)) xor Rcon[i/Nk]」及び「temp=SubWord(temp)」の演算を行う。
【0089】
しかし、一度に1つの32ビット・ワード(dword)を処理する代わりに、AESKEYGENASSIST命令は、4つの32ビット・ワードに対する処理を一度に(すなわち、4つのdword(128ビット)全てに対する処理を同時に)行い、それにより、ラウンド鍵が生成される速度を増加させる。
【0090】
AESKEYGENASSIST命令は以下の処理の結果をもたらす。
【0091】
結果:=
【0092】
【数1】

ここで、
X3[31−0]:=Tmp1[127−96]、
X2[31−0]:=Tmp1[95−64]、
X1[31−0]:=Tmp1[63−32]、
X0[31−0]:=Tmp1[31−0]、
RCON[7−0]:=imm8[7]imm8[6]imm8[5]imm8[4]
imm8[3]imm8[2]imm8[1]imm8[0]
RotWord(Rot)は、4バイトの32ビットdwordを用い、巡回置換を行う関数である。Rotwordは、{a0,a1,a2,a3}の順序の、a0乃至a4を付した4バイトのdwordを用い、巡回置換を行って4バイトを{a1,a2,a3,a0}の順序で返す。RotWord関数は、リトルエンディアン表記で規定される。
【0093】
RotWord X[31−0]=[X[7−0]||X[31−8]]、
すなわち、Rot(x)=(X>>8)|(X<<24)、
例えば、X[31−0]=`3c4fcf09;RotWord(`3c4fcf09`)=[‘09’|`3c4fcf`)=(`093c4fcf)の場合、
S−Box4は、以下のように、4つのdwordに、単一のdwordのS−Box関数を施すことを表す。
【0094】
S−Box4(X)[31−0])=[S−Box(X[31−24]),S−Box(X[23−16]),S−Box(X[15−8]),S−Box(X[7−0])]。
【0095】
S−boxは、バイト値の1対1の置換を行うために使用される非線形置換テーブルである。SubWord関数は、4バイト入力(32ビット・ワード(dword))を用い、S−box(バイト置換(SubBytes))をdword内の4バイトそれぞれに施して32ビット出力dwordを生成する。SubWord関数(32ビット)は、4つの独立した(並列の)SubByte処理(8ビット)をもたらす。
【0096】
よって、置換バイト変換は、直近の入力(imm8)を0にセットしてAESKEYGENASSIST命令を使用し、入力を以下のように、予め並び替えて分離することができる。
【0097】
AESKEYGENASSIST xmm1,xmm1,imm8
PSHUFB xmm1, mask
AESKEYGENASSIST命令は、rconとのXORの影響を除去し、PSHUFB命令のマスクを選択して、3及び1というダブルワードを元に戻す。
【0098】
図7は、AESアルゴリズムにおけるInverseSubstituteBytes変換を分離するために少なくとも1つのAESラウンド命令を使用したInverseSubstituteBytes分離変換関数700の実施例のフロー図である。
【0099】
InverseSubstituteBytes変換のマイクロ操作が、表5に示すAESDECCLAST命令に使用される。図5に関して説明した実施例では、PSHUFB命令を使用してShift Rows変換を分離する。
【0100】
ブロック702では、PSHUFB命令のSubstituteBytes変換の分離関数600を、Bレジスタを「0B06010C07020D08030E09040F0A0500」にセットして呼び出して状態に対してShiftRowsを行う。図5に関して上述したように、ShiftRows変換は、別のレジスタに記憶された対応するバイト位置に基づいて、第1のレジスタに記憶された状態のバイトの並び替えを行う。
【0101】
ブロック704では、Substituteバイト変換分離関数700におけるAESDECLAST命令が、PSHUFB命令の結果(X)によって呼び出される。AESDECLAST命令に対する入力は、PSHUFB命令の結果、及び、0にセットされたラウンド鍵である。AESDECLAST命令は、以下、表10に示すマイクロ操作を行う。
【0102】
Tmp=InverseShiftRows(X)、
Tmp=InverseSubstituteBytes(Tmp)、
Tmp=AddRoundKey(Tmp,RoundKey)
表10
【0103】
まず、InverseShiftRows変換を入力Xに対して行って、上記変換の結果をTmpに記憶する。次いで、InverseSubstituteBytes変換がTmpの内容に対して行われ、その結果がTmpに記憶される。最後に、AddRoundKey変換がTmpの内容に対して行われ、RoundKeyが0にセットされる。排他的OR演算がTmpの内容、及び0に対して行われ、その結果がTmpの内容になるので、AddRoundKeyマイクロ操作は基本的には、NOP(無演算)である。PSHUFB命令及びAESDECLAST命令の組合せにより、InverseSubstituteBytes変換が分離する。AddRoundKeyマイクロ操作はNOPを行い、その他のマイクロ操作(InverseShiftRows)は、PSHUFB命令によって行われるマイクロ操作(ShiftRow)によって交換されるからである。よって、AESDECLAST命令の出力は、InverseSubstituteBytes(State)であり、これは、以下に示すようにAESDECLAST命令及びPSHUFB命令の組合せを使用して分離される。
【0104】
Y=InverseSubstituteBytes(InverseShiftRows(X))=InverseSubstituteBytes(InverseShiftRows(ShiftRows(State)))=InverseSubstituteBytes(State)
よって、少なくとも1つのAESラウンド命令を含む前述の命令シーケンスの結果は、分離されたInverseSubstituteBytes変換になる。
【0105】
上述のようにAESラウンド暗号化/復号命令の特別な組合せを使用することにより、AESラウンド暗号化/復号命令によって行われるAES変換は分離することができる。これは、AES命令の使用に柔軟性を加える。AES命令は例えば、AES変形の構成に使用し、AES標準において考えられる将来の修正をサポートし、かつ/又は、暗号及び暗号ハッシュ関数に対する構築ブロックとしてAESプリミティブを使用するために使用することが可能であるからである。AES命令の組合せによって分離される変換は、デバッグ、検証に、特に、フル・チップ及び認証の目的で使用することができる。
【0106】
本発明の実施例に関係する方法を、コンピュータ使用可能な媒体を含むコンピュータ・プログラムに実施することができるということは当業者に明らかになるであろう。例えば、前述のコンピュータ使用可能な媒体は、リード・オンリー・メモリ装置、例えば、コンパクト・ディスク・リード・オンリー・メモリ(CDROM)ディスクや従来のROM装置、又はコンピュータ読み取り可能なプログラム・コードを記憶させたコンピュータ・ディスケットを含み得る。
【0107】
本発明の実施例は具体的には、その実施例を参照して示し、説明しているが、特許請求の範囲記載の本発明の実施例の範囲から逸脱しない限り、形態及び詳細における種々の変更を行うことができる。
【符号の説明】
【0108】
100 システム
101 プロセッサ
108 メモリ

【特許請求の範囲】
【請求項1】
方法であって、
複数の命令を組み合わせる工程を含み、前記命令の少なくとも1つは、変換シーケンスを行い、前記命令は、実行されると、前記変換シーケンスにおける変換のうちの1つのみを前記命令の組合せが行うような順序で組み合わせられる方法。
【請求項2】
請求項1記載の方法であって、前記命令の組合せは、AESDECLASTラウンド命令及びAESENCラウンド命令を含み、前記命令の組合せはMixColumns変換を行う方法。
【請求項3】
請求項2記載の方法であって、前記AESDECLASTラウンド命令によって行われる一連の変換は、InverseShiftRows変換及びInverseSubstituteBytes変換を含み、前記AESENCラウンド命令によって行われる一連の変換は、ShiftRows変換、SubstituteBytes変換、及びMixColumns変換である方法。
【請求項4】
請求項1記載の方法であって、前記命令の組合せは、AESENCLASTラウンド命令及びAESDECラウンド命令を含み、前記命令の組合せはInverseMixColumns変換を行う方法。
【請求項5】
請求項4記載の方法であって、前記AESENCLASTラウンド命令によって行われる一連の変換は、ShiftRows変換及びSubstituteBytes変換を含み、 前記AESDECラウンド命令によって行われる一連の変換は、InverseShiftRows変換、InverseSubstituteBytes変換及びInverseMixColumns変換を含む方法。
【請求項6】
請求項1記載の方法であって、前記命令の組合せは、PSHUFBラウンド命令及びAESENCLASTラウンド命令を含み、前記命令の組合せはSubstituteBytes変換を行う方法。
【請求項7】
請求項6記載の方法であって、前記AESENCLASTラウンド命令によって行われる一連の変換は、ShiftRows変換及びSubstituteBytes変換を含み、前記PSHUFB命令は、ShiftRows変換を含む方法。
【請求項8】
請求項1記載の方法であって、前記命令の組合せは、PSHUFBラウンド命令及びAESDECLASTラウンド命令を含み、前記命令の組合せはInverseSubstituteBytes変換を行う方法。
【請求項9】
請求項7記載の方法であって、前記AESDECLASTラウンド命令によって行われる一連の変換は、InverseShiftRows変換及びInverseSubstituteBytes変換を含み、前記PSHUFB命令は、InverseShiftRows変換を含む方法。
【請求項10】
請求項1記載の方法であって、前記命令の組合せは、連邦情報処理標準(FIPS)197によって規定されたShiftRows、InverseShiftRows、SubstituteBytes、InverseSubstituteBytes、MixColumn及びInverseMixColumnsを含む群からの変換を含む方法。
【請求項11】
装置であって、
複数の命令を記憶するためのメモリであって、前記命令の少なくとも1つは、変換シーケンスを行うメモリと、
実行装置を含むプロセッサとを備え、前記命令は、前記実行装置によって実行されると、前記変換シーケンスにおける変換のうちの1つのみの結果を前記実行装置が供給するように前記メモリに順番に記憶される装置。
【請求項12】
請求項11記載の装置であって、前記命令の組合せは、AESDECLASTラウンド命令及びAESENCラウンド命令を含み、前記命令の組合せはMixColumns変換を行う装置。
【請求項13】
請求項11記載の装置であって、前記命令の組合せは、AESENCLASTラウンド命令及びAESDECラウンド命令を含み、前記命令の組合せはInverseMixColumns変換を行う装置。
【請求項14】
請求項11記載の装置であって、前記命令の組合せは、PSHUFBラウンド命令及びAESENCLASTラウンド命令を含み、前記命令の組合せはSubstituteBytes変換を行う装置。
【請求項15】
請求項11記載の装置であって、前記命令の組合せは、PSHUFBラウンド命令及びAESDECLASTラウンド命令を含み、前記命令の組合せはInverseSubstituteBytes変換を行う装置。
【請求項16】
請求項11記載の装置であって、前記変換のシーケンスは、連邦情報処理標準(FIPS)197によって規定されたShiftRows、InverseShiftRows、SubstituteBytes、InverseSubstituteBytes、MixColumn及びInverseMixColumnsを含む群からの変換を含む装置。
【請求項17】
関連した情報を有するマシンアクセス可能な媒体を含む製品であって、
前記情報は、アクセスされると、
複数の命令を組み合わせる機能
をマシンが行うことをもたらし、前記命令の少なくとも1つは、変換シーケンスを行い、前記命令は、実行されると、前記変換シーケンスにおける変換のうちの1つのみを前記命令の組合せが行うような順序で組み合わせられる製品。
【請求項18】
請求項17記載の製品であって、前記変換のシーケンスは、連邦情報処理標準(FIPS)197によって規定されたShiftRows、InverseShiftRows、SubstituteBytes、InverseSubstituteBytes、MixColumn及びInverseMixColumnsを含む群からの変換を含む製品。
【請求項19】
システムであって、
プロセッサと、
前記プロセッサによってアクセス可能であり、複数の命令を記憶させた記憶装置とを備え、前記命令の少なくとも1つは、変換シーケンスを行い、前記命令は、実行されると、前記変換シーケンスにおける変換のうちの1つのみを前記プロセッサが少なくとも行うような順序で組み合わせられるシステム。
【請求項20】
請求項19記載のシステムであって、前記変換のシーケンスは、連邦情報処理標準(FIPS)197によって規定されたShiftRows、InverseShiftRows、SubstituteBytes、InverseSubstituteBytes、MixColumn及びInverseMixColumnsを含む群からの変換を含むシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2009−211071(P2009−211071A)
【公開日】平成21年9月17日(2009.9.17)
【国際特許分類】
【外国語出願】
【出願番号】特願2009−45094(P2009−45094)
【出願日】平成21年2月27日(2009.2.27)
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】