JP2005531023A - AES(Rijndael)ブロック暗号器に対するラウンドキーの生成 - Google Patents
AES(Rijndael)ブロック暗号器に対するラウンドキーの生成 Download PDFInfo
- Publication number
- JP2005531023A JP2005531023A JP2004515154A JP2004515154A JP2005531023A JP 2005531023 A JP2005531023 A JP 2005531023A JP 2004515154 A JP2004515154 A JP 2004515154A JP 2004515154 A JP2004515154 A JP 2004515154A JP 2005531023 A JP2005531023 A JP 2005531023A
- Authority
- JP
- Japan
- Prior art keywords
- key
- memory
- round
- word
- words
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
- H04L2209/125—Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
本発明によると、拡張キーの一連のラウンドキーがAESブロック暗号アルゴリズムに従って、初期暗号キーから、暗号(暗号化及び復号化の少なくとも一方の)エンジン内で用いるために、暗号プロセスが実行されている間にリアルタイムにて生成される。拡張キーの先に生成されたワードを上書きし、メモリ内には初期キーと最終キーのワードのみを残すことで、用いられるキーメモリが最小限に抑えられる。その後の暗号動作は、暗号エンジンに遅延をもたらすことなく、暗号化或いは復号化方向のいずれからも、再開することができる。
Description
本発明は、AES(Advanced Encryption Standard)アルゴリズムを実現するための方法及び装置、より詳細には、このアルゴリズムの暗号化(encryption)及び復号化(decryption)ラウンドの際に必要とされるラウンドキー(round keys)をリアルタイムにて生成するための方法及び装置に係る。
本発明は、これに限定されるものではないが、とりわけ、例えば、スマートカード内に搭載されような暗号デバイス内、及びプロセッサ及びメモリ資源に制約があるその他のデバイス内で用いるのに適する。
AES(Rijndael)アルゴリズムは、入力データの一連の128−ビットブロックに関して動作する、128−ビット、192−ビット、或いは256−ビットキーを用いて実現される。AESアルゴリズムに従って暗号化動作或いは復号化動作(ここでは、総称的に、”暗号動作(cryptpgraphic operation)”と呼ばれる)を実現する際には、これら暗号化或いは復号化動作の一連の各ラウンドに対するラウンドキーを提供するために、元(original)の或いは”初期(ititial)”キーを拡張することが必要となる。必要とされるラウンドキーの数(Nr)は、128−ビットキーの場合は10回、192−ビットキーの場合は12回、256−ビットキーの場合は14回となる。
こうして、拡張ラウンドキーのサイズは、初期キーに(Nr+1)を乗じた値となる。128−ビットキーの場合は、拡張キーは128×11=1408ビットを含み;192−ビットキーの場合は、拡張キーは128×13=1664ビットを含み;256−ビットキーの場合は、拡張キーは128×15=1920ビットを含む。
この拡張キーを格納するためには、暗号エンジン(cryptographic engines)内にかなりの量のメモリ空間が必要となり、これは、とりわけ、メモリ空間に制約があるスマートカードその他に暗号エンジンを実装したい場合など幾つかのアプリケーションにおいては大きな課題となる。このようなメモリ空間を提供することは、ラウンドキーを、暗号エンジンの動作の最中に、遅延をもたらすことなく生成することができれば、必要となる。
本発明は、ラウンドキー生成ファンクション(round key generation function)を、現在の技術によって要求されるよりも大幅に削減されたメモリ空間を用いて、リアルタイムにて、実現するためのキー拡張方法及び装置に向けられる。
本発明は、一連のラウンドキーの生成は、暗号エンジン内での暗号化或いは復号化アルゴリズムの実行と平行して、暗号化或いは復号化プロセスの実行時間にほとんど影響を与えることなく、より削減された量のハードウェアにて、リアルタイムにて遂行することができるという認識に依拠する。
一つの態様においては、本発明は、暗号化及び復号化エンジンの少なくと一方内で用いるための拡張キーの一連のラウンドキーを初期暗号キーから生成するための方法を提供する。この方法は、
初期キーのNk個のワードをメモリ内のNk個の位置に格納するステップと、
初期キーを暗号エンジンに供給し、第一の暗号ラウンドを遂行するステップと、
拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方はメモリから、反復的に取り出し、これら選択された第一と第二のワードから拡張キーの一連の後続ワードを生成するステップと、
拡張キーの生成されたワードを暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するステップと、
生成された後続ワードの一連のワードをメモリ内に、拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するステップと、を含む。
初期キーのNk個のワードをメモリ内のNk個の位置に格納するステップと、
初期キーを暗号エンジンに供給し、第一の暗号ラウンドを遂行するステップと、
拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方はメモリから、反復的に取り出し、これら選択された第一と第二のワードから拡張キーの一連の後続ワードを生成するステップと、
拡張キーの生成されたワードを暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するステップと、
生成された後続ワードの一連のワードをメモリ内に、拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するステップと、を含む。
もう一つの態様においては、本発明は、暗号化及び復号化エンジンの少なくとも一方内で用いるための、拡張キーの一連のラウンドキーを、初期暗号キーから生成するためのラウンドキー発生器を提供する。この装置は、
初期キーのNk個のワードを格納するためのメモリと、
拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方はメモリから、反復的に取り出し、こうして選択された第一と第二のワードから拡張キーの一連の後続ワードを生成するための拡張プロセッサと、
拡張キーのこれら生成されたワードを暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するためのための手段と、
こうして生成された後続ワードの一連のワードをメモリ内に、拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するための手段と、を備える。
初期キーのNk個のワードを格納するためのメモリと、
拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方はメモリから、反復的に取り出し、こうして選択された第一と第二のワードから拡張キーの一連の後続ワードを生成するための拡張プロセッサと、
拡張キーのこれら生成されたワードを暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するためのための手段と、
こうして生成された後続ワードの一連のワードをメモリ内に、拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するための手段と、を備える。
もう一つの態様においては、本発明は、AESラウンド定数ファンクション発生器を提供する。この装置は、
レジスタの内容を左にシフトさせるための第一の制御入力と、
レジスタの内容を右にシフトさせるための第二の制御入力と、
シフトレジスタの内容を複数の可能な値の一つのプリセットするための第三の制御入力とを有するシフトレジスタを備える。
レジスタの内容を左にシフトさせるための第一の制御入力と、
レジスタの内容を右にシフトさせるための第二の制御入力と、
シフトレジスタの内容を複数の可能な値の一つのプリセットするための第三の制御入力とを有するシフトレジスタを備える。
以下では、本発明の実施例について添付の図面を参照しながら説明する。
図1には平文(plaintext)を暗号文(ciphertext)に暗号化(encryption)するためのAESアルゴリズムが示される。このAESアルゴリズムは、入力データの一連の128−ビットビットブロックに関して動作する128−ビット、192−ビット或いは256−ビットキーを用いて実現することができる。以下では、図1について、128−ビットキーを用いる基本実現の文脈内内で説明する。
入力平文10の初期の128−ビットブロックが初期ラウンド15において元の128−ビットキー12とXOR−結合11される。この初期ラウンド15からの出力13は、次に、暗号化ラウンド28において、定義されるAESアルゴリズムによると、SubBytes変換20、ShiftRows変換21及びMixColumms変換22を含む複数の変換段内を反復的に通される。
MixColumns変換22からの出力は、新たな128−ビットラウンドキー26とXOR−結合23されるが、これら新たなラウンドキーは、初期キー12から生成される。このXOR−結合からの出力は、暗号化ラウンド28に帰還され、この中でさらなる回数だけ処理される。
この暗号化ラウンド28を通じての一連の各反復に対して、新たなキー26Θが、現存のラウンドキー26からAESラウンドキースケジュールに従って生成される。
暗号化ラウンド28の反復回数(Nr−1)は、128−ビット暗号化キーが用いられるときは9回となり、192−ビット暗号化キーが用いられるときは11回となり、256−ビット暗号化キーが用いられるときは13回となる。
ラウンド28内を必要な回数(Nr−1)だけ通った後に、判定ボックス24の制御下で最終ラウンドへと通される。この最終ラウンド30は、もう一つのSubBytes変換31、もう一つのShiftRows変換32と、これに続く、この結果と前のラウンドキーから生成された最終ラウンドキー36とのXOR−結合33とから構成される。この出力はこの暗号化アルゴリズムの暗号文出力39を構成する。
図1からわかるように、このAES暗号化アルゴリズムを実現するためには、各ラウンド28、30に対して、新たなラウンドキーを初期キー12から生成することを必要とされる。
この明細書を通じて、これらキーの数は、32−ビットワードの数Nkとして表現される。例えば、128−ビットなる初期暗号化キー12、つまり、4×32−ビットワードキーの場合はNk=4として表現され、”拡張(expanded)”キーは、11×4個の32−ビットワード、つまり、44ワードから成り、W(0)...W(43)として書き表され;192−ビットなる初期暗号キー(Nk=6)の場合は、拡張キーは13×4個の32−ビットワード、つまり、52ワードに増加し、これらはW(0)...W(52)として書き表され;256−ビットなる初期暗号キー(Nk=8)の場合は、拡張キーは15×4個の32−ビットワード、つまり、60ワードに増加し、これらはW(0)...W(59)として書き表される。
AES復号化(decryption)アルゴリズムを実行する際には、これらラウンドキーは、暗号化の場合と同一であるが、ただし、供給される順番が逆転される。
次に、図2を参照しながら、一連のラウンドキーを生成するための一般AESキー拡張(expansion)アルゴリズムについて、128−ビットキー(キーのワード数Nk=4個)の文脈内で説明する。理解できるように、この技法は、192−ビット(Nk=6)及び256−ビット(Nk=8)キーに対しても適用できる。
4個の32−ビットワード:W(0)、W(1)、W(2)、及びW(3)から成る初期キー50が適当なメモリ位置:510、511、512、513内にロードされる。従来の実現においては、このメモリは、51nの所に、いったん生成された拡張キーの全てのワードを収容するために十分なスペースを含む。
この拡張キー内の4ワードから成る新たな各系列は、新たなラウンドキーから成り、以下では、”ストレッチ(stretch)”と呼ばれる。より具体的には、あるストレッチは、W(i)からW(i+Nk)までから構成され、ここで、iはNkの整数倍から1を引いた値(Nk=4の場合は、0、3、7等;Nk=8の場合は、0、7、15等)を表す。開始時には、初期キー50が唯一のストレッチであり、第一のタスクは新たなストレッチの第一のワードを生成することから成るが、このため、判定ボックス53は、”肯定(yes)”の経路を示す。
このキー拡張アルゴリズムの最初のパスにおいては、前のストレッチの最後のワード(513)が(52において)抽出され、これらビットが左にシフトされ(ステップ54)、AESキー拡張アルゴリズムに従ってS−ボックス検索(S-box look-up)を用いて変換55される。このS−ボックスファンクションは、AES SubBytes変換20(図1)のそれに対するのと同一である。この結果としての32−ビット出力56の最初の8ビットのみがAESキースケジュールにて定義されるラウンド定数Rcon58とのXOR−結合57により変換される。この動作からの出力60が、次に、前のストレッチの最初のワード(つまり、510)とXOR−結合62され、この結果、つまりW(4)がメモリの位置514に書き込まれる。
この流れ図を通じての第二のパスにおいては、この第二のストレッチの次のワードW(5)が生成される。これは、あるストレッチの第二のワードであるため、この流れ図の左側の経路が取られ、この新たに生成され、メモリ位置514に格納されたワードW(4)が、Wtmpバッファ60内に直接コピーされ、その後、これが、初期キー50の次のワード511とXOR−結合62され、こうして新たに生成されたワードW(5)は、(ステップ63において)メモリ515内に書き込まれる。
この手続は、この左側経路をあと2回反復し、この第二のストレッチの最後の2つのワードW(6)とW(7)とを生成し、その後、右側の経路を用いて、第三のストレッチに対するサイクルを開始する。
結局の所、上からわかるように、各新たなストレッチの各ワードは、各ストレッチの第一のワードを除いて、直前のワードと前のストレッチの対応する位置内のワードとのXOR−結合から成り、各ストレッチの第一のワードについては、これは、直前のワード自身ではなく、用いられた直前のワードの関数となり、この関数は図2のステップ54−59に従って実行される。
192−ビット(Nk=6)及び256−ビット(Nk=8)キーに対して展開される原理も、各ストレッチが、それぞれ、6ワード或いは8ワード長であることを除いて、同一である。
4ワードから成る各一連のグループが、図1の暗号化手続の各一連のラウンド28、30に対するラウンドキーとして用いられる。復号化の際には、これらラウンドキーが逆順に加えられる。
本発明によると、一面においては、メモリ内には、同時に、元のキーのNk個のワードと、拡張ラウンドキーの最も最近のNk個のワードのみを保持することを必要とされる。これら最も最近に生成された4ワード(或いは、より一般的には、現在保持されているNkワード内の4つの一連のワード)がステップ23或いは33において暗号化エンジンに供給され、こうして保持されているNkワードは、図2との関連で説明したように新たなストレッチを生成するために用いられる。
これら新たなストレッチを暗号化エンジンに追い付くのに十分に高速に生成され、かつ、この生成が(あるストレッチの長さ(Nk=4、6或いは8)とラウンドキーの長さ(=4)との差の公差内で)暗号化エンジンと同期を維持され、最も最近に生成されたストレッチが暗号化エンジン内で現在要求されるラウンドキーを含む限り、非常に限られたメモリ容量及びバッファ要件を提供することのみを要求される。
図3に示されるように、ラウンドキー発生器100は、等しい部分102、103に分割されたRAMセクタ101を有し、各部分は、例えば、4×32ビットワード(128−ビットキーアルゴリズムの場合)、6×32ビットワード(192−ビットキー発生器の場合)、或いは8×32ビットワード(256−ビットキーアルゴリズムの場合)なるサイズを有する。以下の説明を通じて、ラウンドキー発生器100は、256−ビットキーアルゴリズムを扱う能力を有するものと想定されるが、この発生器はより小さなキー長を処理するように適合化することもできる。
簡便のために、これら2つの部分102及び103は、以下では、下側部分(lower half)103及び上側部分(upper half)102と呼ばれる。各部分は、OffSetHiRdポインタ105よる読出しアクセスのためにマルチプレクサ104を介して参照される。OffSetHiRd=0のときは下側部分103が読み出され;OffSetHiRd=1のときは上側部分102が読み出される。RAM101の下側部分103内には、初期暗号化キー50が(つまり、Nk=8の場合の最初のストレッチW(0)...W(7)が)位置W0...W7内に格納され;上側部分102内には、新たに計算されたストレッチ、例えば、W(8)...W(15)が対応する上側部分の位置W0...W7内に格納される。ポインタOffSetHiWr(図示せず)を用いて書き込まれている方のメモリ部分をポイントすることもできる。各一連のストレッチが生成され、暗号化エンジン内で用いられるのにつれて、次のストレッチ値(例えば、W(16)...W(23))が計算され、上側部分102内に上書きされる。
個々の位置W0...W7(下側部分)或いはW1...W7(上側部分)は、OffSetCntカウンタ111により読出し及び書込み動作のために参照されるが、このカウンタ111は、3ビットカウンタから成り、上側部分内のワード位置及び下側部分内の対応する位置の少なくとも一方の一つをポイントする。一般には、OffSetCntカウンタ111は、modulo Nkアップ/ダウンカウンタとして実現される。
ラウンドキーカウンタ110は、今計算されたラウンドキー(つまり、現在のストレッチ)のカウントを維持する。状態マシーン106はラウンドキー生成プロセス全体の制御を行い、拡張プロセッサ107は、拡張ラウンドキー値(ワード)の計算を遂行する。
現在の平文ブロックに対する暗号化動作が完了すると、この手続は、例えば、下側部分103内の暗号化キーの拡張のため再開する。代わりに、復号化動作が要求される場合は、この復号化サイクルの最初のラウンドキーには、RAMの上側部分102からの最も最近計算されたラウンドキーが用いられ、このため、これが下側部分内に移動されるか、或いは上側部分から読み出される。その後の一連の復号化ラウンドキーは類似のやり方にて計算される。復号化ラウンドキー生成動作が完了すると、元の暗号化キーが返され、その後の暗号化動作のために、RAM101の下側部分内に、再格納或いは保持される。
図4は拡張プロセッサ107のブロック図を示す。拡張プロセッサ107は、第一の32−ビットレジスタW120と、第二の32−ビットレジスタWtmp121とを備える。各レジスタW120、Wtmp121は、RMA101から直接に満たすことができる。Wtmp121は、32−ビットの、二入力マルチプレクサ122によっても帰還線123を介して満たされる。拡張プロセッサ107は、更に、図2の変換54、55、58との関連で説明したような変換RotateWord154、SubWord155、Rcon158を遂行するための特別な処理論理150を含む。32−ビットマルチプレクサ124は、この特別な処理論理150からの出力を選択し、或いはレジスタWtmp121からの直接に、32−ビット幅XORゲート162への入力を供給する。
暗号化動作の開始において、初期キー50(W(0)...W(7))が、RAM101内の、下側部分103の、位置W0...W7内にロードされる。初期キー50の第一のワードW(0)は、RAM101からバッファ(W)120内にロードされ、初期キー50の最後のワードW(Nk−1)は、バッファWtmp121内にロードされる。より一般的には、暗号化の一連のラウンドに対して、W(i)はバッファ120内にロードされ、W(i+Nk)の最後に計算され値がWtmp121内に格納される。
図2との関連で説明されたように、暗号化のためのキー拡張プロセスの際に、以下の式の一つが拡張ラウンドキーの各新たなワードW(i)を生成するために適用される:
つまり;
後に示す場合(つまり、特別な処理150を行なわない場合)を除いて、
規則1: W(i)=W(i−Nk)@W(i−1)
が適用される。ここで、記号@は排他的論理和を示す。つまり、例外として、
i mod Nk=0(各ストレッチの開始時)の場合は、
規則2: W(i)=W(i−Nk)@SubWord(RotWord(W(i−1)))@Rcon(i/Nk)
が適用され;
i mod Nk=4及びNk=8(各8ワードストレッチの中央サイクル)の場合は、
規則3: W(i)=W(i−Nk)@SubWord(W(i−1))
が適用される。
つまり;
後に示す場合(つまり、特別な処理150を行なわない場合)を除いて、
規則1: W(i)=W(i−Nk)@W(i−1)
が適用される。ここで、記号@は排他的論理和を示す。つまり、例外として、
i mod Nk=0(各ストレッチの開始時)の場合は、
規則2: W(i)=W(i−Nk)@SubWord(RotWord(W(i−1)))@Rcon(i/Nk)
が適用され;
i mod Nk=4及びNk=8(各8ワードストレッチの中央サイクル)の場合は、
規則3: W(i)=W(i−Nk)@SubWord(W(i−1))
が適用される。
ここで、
RotWord(Wtmp)はWtmp121のバイト単位の回転を表し、
SubWordはAES S−box変換を表し、
RconはAES標準において定義されるラウンド定数(round constant)を表し、これは、各ストレッチ内の第一のワードの第一のバイトのみに適用され、他のバイトは変更を受けることなく、パスされ;
iは、0...4Nr+3を表し、
Nk=4の場合は、i=0...43
Nk=6の場合は、i=0...51、そして
Nk=8の場合は、i=0...59となる。
RotWord(Wtmp)はWtmp121のバイト単位の回転を表し、
SubWordはAES S−box変換を表し、
RconはAES標準において定義されるラウンド定数(round constant)を表し、これは、各ストレッチ内の第一のワードの第一のバイトのみに適用され、他のバイトは変更を受けることなく、パスされ;
iは、0...4Nr+3を表し、
Nk=4の場合は、i=0...43
Nk=6の場合は、i=0...51、そして
Nk=8の場合は、i=0...59となる。
換言すれば、各新たなストレッチの第一のワードに対しては、ステップ54−59の特別な処理が適用され、W(Nk)は、レジスタ120からのW(0)と変換されたW(Nk−1)とのXOR−結合62として計算される。各ストレッチの中央ワードに対しては、Nk=8の場合は、ステップ55の特別の処理のみが施される。そして、各ストレッチ内の他のワードに対しては、レジスタ120の内容とレジスタ121の内容が、ステップ54からステップ59の特別の処理を施すことなく、直接にXOR−結合される。
図4に示されるように、レジスタW120にはW(0)がロードされ、レジスタWtmp121にはW(Nk−1)(例えば、Nk=8の場合はW(7))がロードされる。次に、計算の結果、ここではW(Nk)(例えば、W(8))がXORゲート162から出力され、RAM101(例えば、上側部分の位置W0の所)と、レジスタWtmp121の両方に格納される。次に、レジスタW120にはW(1)がロードされ、他方、レジスタWtmp121はW(Nk)(例えば、W(8))を保持する。次に、W(Nk+1)(例えば、W(9))が計算され、RAM101(上側部分の位置W1の所)とレジスタWtmp121に格納される。
一般的には、レジスタW120はRAM101からW(i)をロードされ、他方、レジスタWtmp121はW(i+Nk−1)なる値を保持する。次に、W(i+Nk)が計算され、RMA101内の、上側部分の位置W(i+Nk) mod 8(つまり、新たな値は上側部分102内に巡回的に格納される)と、Wtmp121の両方に格納される。
このキー拡張プロセスは、暗号化プロセッサ130と並列にランするが、暗号化プロセッサは、好ましくは、128ビット幅のブロックベースではなく、逐語的に(word-by-word)動作する。こうして、W120の内容は直接に暗号化プロセッサにパスされ、暗号化プロセスのための入力として直ちに用いられる。代替として、暗号化プロセッサ130は、ラウンドキーの要求されるワードを取り出すために、RAM101に直接にアクセスできるように接続することもできる。この構成では、暗号化エンジン130の動作サイクルと拡張プロセッサ107の動作サイクルとの間の時間的関係はより大きな柔軟となる。
動作の各サイクルに対して、Wtmp121の新たな値は、後に示す場合を除いて、
Wtmp=Wtmp@W
となる。つまり:例外として、i mod Nk=0の場合は、
Wtmp=SubWord(RotWord(Wtmp))@Rcon(i/Nk)@W
となり、i mod Nk=4とNk=8の場合は、
Wtmp=SubWord(Wtmp)@W
となる。
Wtmp=Wtmp@W
となる。つまり:例外として、i mod Nk=0の場合は、
Wtmp=SubWord(RotWord(Wtmp))@Rcon(i/Nk)@W
となり、i mod Nk=4とNk=8の場合は、
Wtmp=SubWord(Wtmp)@W
となる。
このキー拡張プロセスの最中、ポインタOffSetHiRd105は、RAM101の、上側部分102或いは下側部分103内の、ベースワード位置をポイントする。読出し位置の制御は、この1ビットポインタによって実現され、読出しのために、それぞれ、メモリ101の、上側部分102或いは下側部分103が選択される。こうして、キー拡張の第一のサイクルの際(つまり、第二のストレッチの計算の際)には、初期キーワードW(0)...W(7)は下側部分103から読み出される。つまり、読出しフラッグ105はOffSetLoを選択する。暗号化キー拡張の際には、これらラウンドキーの新たな値は、常に上側部分102内に書込まれる。
開始時においては、以下の初期化設定が適用される:
OffSetCnt=0、OffSetHiRd=0、OffSetHiWr=1、RndCnt=4Nr+3
RAM101がOffSetHiRdとOffSetCntにて決定されるアドレスWNk−1(つまり、OffSetCnt+Nk−1)の所から読み出され、Wtmp121内に格納される。
OffSetCnt=0、OffSetHiRd=0、OffSetHiWr=1、RndCnt=4Nr+3
RAM101がOffSetHiRdとOffSetCntにて決定されるアドレスWNk−1(つまり、OffSetCnt+Nk−1)の所から読み出され、Wtmp121内に格納される。
次に、以下の手続がNk回実行される:
1.RAM101の、下側部分103のWoffSetCntに対応する所から読み出し、これをW120に格納する。
2.次の拡張キーワードを生成し、これをWtmp121と、メモリ(RAM)101の、上側部分102の、WoffSetCnt111に対応する所に書込む。
3.OffSetCnt111を増分し、RadCnt110を減分する。
4.Nk回のサイクルの最初のサイクルの後にのみ、Rcon158を更新する。
1.RAM101の、下側部分103のWoffSetCntに対応する所から読み出し、これをW120に格納する。
2.次の拡張キーワードを生成し、これをWtmp121と、メモリ(RAM)101の、上側部分102の、WoffSetCnt111に対応する所に書込む。
3.OffSetCnt111を増分し、RadCnt110を減分する。
4.Nk回のサイクルの最初のサイクルの後にのみ、Rcon158を更新する。
こうして、現在、下側部分103からの初期キーの全てのワードが用いられたこととなる。すると、OffSetHiRdが1にセットされるが、このため、全ての後続ラウンドキーワードは上側部分102から読み出されることとなる。例えば、Nk=8の場合は、メモリ101は、アドレスW8の所に、W(8)を含む。
次に、以下の手続がRndCnt=Nk−1となるまで、反復実行される。
1.(OffSetHi=1であるため)RAMの、上側部分の、OffSetCntに対応する所から読み出し、これをWに格納する。
2.次の拡張キーワードを生成し、これをWtmpと、RAMの、上側部分の、OffSetCntに対応する所に書込む。
3.OffSetCnt=0となったとき、Rconを更新する
3.OffSetCntを増分し、RndCntを減分する。
1.(OffSetHi=1であるため)RAMの、上側部分の、OffSetCntに対応する所から読み出し、これをWに格納する。
2.次の拡張キーワードを生成し、これをWtmpと、RAMの、上側部分の、OffSetCntに対応する所に書込む。
3.OffSetCnt=0となったとき、Rconを更新する
3.OffSetCntを増分し、RndCntを減分する。
Nk=4の場合は、 最後の計算は、
W(43)=W(39)@W(42)、 OffSetCnt=43 mod 4=3
となり:Nk=6の場合は、 最後の計算は、
W(51)=W(45)@W(50)、 OffSetCnt=51 mod 6=3
となり;Nk=8の場合は、 最後の計算は、
W(59)=W(51)@W(58)、OffSetCnt=59 mod 8=3
となる。
W(43)=W(39)@W(42)、 OffSetCnt=43 mod 4=3
となり:Nk=6の場合は、 最後の計算は、
W(51)=W(45)@W(50)、 OffSetCnt=51 mod 6=3
となり;Nk=8の場合は、 最後の計算は、
W(59)=W(51)@W(58)、OffSetCnt=59 mod 8=3
となる。
こうして、Nkに関係なく、最後のラウンドキーは、必ず、OffSetCnt=3に対応する所に格納されることとなる。
この時点で、最後のNk個のラウンドキーワードが暗号化プロセッサ130によって用いられたこととなるが、ただし、拡張プロセッサによって生成されるべきラウンドキーワードはこれ以上存在しない。このため、以下の手続がRndCnt=0となるまで反復実行される。
1.RAMの、上側部分の、WoffSetCntに対応する所から読み出し、これをWに格納する。
2.OffSetCntを増分し、RadCntを減分する。
1.RAMの、上側部分の、WoffSetCntに対応する所から読み出し、これをWに格納する。
2.OffSetCntを増分し、RadCntを減分する。
現在、RAM101の下側部分103は、初期暗号化キー(Nk個のワード)を含み、RAM101の上側部分102は、拡張キーの最後のNk個のワードを含むことに注意する。拡張キーのこれら最後のNk個のワードは、復号化キーの最初のNkワードとして用いられる。
こうして、現在、RAM101は、暗号化のための初期ラウンドキーと、復号化のための最初のラウンドキーを含む。従って、暗号エンジンによって遂行されるべき次の動作が暗号化動作であるか、復号化動作であるかは問題とならず、この拡張プロセッサは、キーの拡張動作を、上側部分102からも、下側部分103からも、開始することができる。
復号化の際には、暗号化ラウンドキー(Encryption Round Keys)が逆順に加えられる。
従って、本発明の動作においては、復号化の際には、W(i+Nk)及びW(i+Nk−1)からW(i)を生成することが必要となる。
キー拡張プロセスを逆転させるためには、
全てのiについて、後に示す場合を除いて、
規則1: W(i−Nk)=W(i)@W(i−1)
が要求される。つまり、例外として、i mod Nk=0の場合は、
規則2: W(i−Nk)=W(i)@SubWord(RotWord(W(i−1)))@Rcon(i/Nk)
が適用され、i mod Nk=4及びNk=8の場合は、
規則3: W(i−Nk)=W(i)@SubWord(W(i−1))
が適用される。
全てのiについて、後に示す場合を除いて、
規則1: W(i−Nk)=W(i)@W(i−1)
が要求される。つまり、例外として、i mod Nk=0の場合は、
規則2: W(i−Nk)=W(i)@SubWord(RotWord(W(i−1)))@Rcon(i/Nk)
が適用され、i mod Nk=4及びNk=8の場合は、
規則3: W(i−Nk)=W(i)@SubWord(W(i−1))
が適用される。
全てのW(i−Nk)及びW(i)は位置を交換されるが、ただし、第二の複合入力122は、暗号化の場合と同一であることに注意する。
例えば、Nk=4の場合を例にとって説明する。暗号化の際に生成された最後のWは、W(43)であった。復号化キー拡張の際には、Wがロードされる初回には、WはRAM101からロードされ;その後は、後続のWは、Wtmp121から得られる。
こうして、第一のステップにおいては、W120には、(上側部分102の、OffSetCnt 3に対応するW11の所に位置する)W(43)がロードされ、Wtmp121には、(上側部分102の、OffSetCnt 2に対応するW10の所に位置する)W(42)がロードされる。次に、
W(39)=W(43)@W(42)
が計算され、この結果がRAM101の、下側部分103の、W3の所に書込まれる。次に、Wtmp121の内容がW120にシフトされ、こうして、W120はW(42)を保持することとなり、その後、Wtmp121にはW(41)がロードされる。
W(39)=W(43)@W(42)
が計算され、この結果がRAM101の、下側部分103の、W3の所に書込まれる。次に、Wtmp121の内容がW120にシフトされ、こうして、W120はW(42)を保持することとなり、その後、Wtmp121にはW(41)がロードされる。
次のサイクルにおいて、
W(38)=W(42)@W(41)
計算され、この結果がRAM101のW1の所に書込まれる。次に、Wtmp121の内容がシフトされW120に書込まれる。こうして、W120はW(41)を保持することとなり、その後、Wtmp121にはW(40)がロードされる。このサイクルが一連のWに対して反復される。
W(38)=W(42)@W(41)
計算され、この結果がRAM101のW1の所に書込まれる。次に、Wtmp121の内容がシフトされW120に書込まれる。こうして、W120はW(41)を保持することとなり、その後、Wtmp121にはW(40)がロードされる。このサイクルが一連のWに対して反復される。
一般には、レジスタW120には、RAM101(或いはWtmp121)からW(i)がロードされ、レジスタWtmp121は、RAM101からW(i−1)がロードされる。次に、W(i−Nk)が計算され、この結果はRAM101の下側部分103の、位置Wi mod 8の所に格納され、Wtmp121の内容がW120に移される。
この復号化キー拡張プロセスは、復号化プロセッサと並列にランし、復号化プロセッサは、好ましくは、128ビット幅のブロックベースではなく、逐語的にて動作する。つまり、W120の内容は復号化エンジン140にもパスされ、復号化動作のための入力として用いられる。
開始時においては、以下の初期化設定が適用される:
OffSetCnt=3、OffSetHiRd=1、OffSetHiWr=0、RndCnt=4Nr+3
RAM101がアドレスOffSetCnt(OffSetCnt=3、これは、W(4Nr+3)、例えば、Nk=4の場合は、W(43)を与える)の所から読み出され、W120内に格納される。
OffSetCnt=3、OffSetHiRd=1、OffSetHiWr=0、RndCnt=4Nr+3
RAM101がアドレスOffSetCnt(OffSetCnt=3、これは、W(4Nr+3)、例えば、Nk=4の場合は、W(43)を与える)の所から読み出され、W120内に格納される。
次に、以下の手続がNk−1回実行される:
1.RAMの、上側部分の、WoffSetCnt− 1 mod Nkに対応する所から読み出し、これをWtmp(Nk=4の場合は、(W(42)、W(41)及びW(40))に格納する。
2.次の拡張キーワードを生成し、これをRAMの、下側部分の、OffSetCntに対応する所(Nk=4の場合は、W(39)、W(38)及びW(37))に書込む。
3.Wtmpの内容をWに移す。
4.OffSetCntを減分し、RndCntを減分する。
1.RAMの、上側部分の、WoffSetCnt− 1 mod Nkに対応する所から読み出し、これをWtmp(Nk=4の場合は、(W(42)、W(41)及びW(40))に格納する。
2.次の拡張キーワードを生成し、これをRAMの、下側部分の、OffSetCntに対応する所(Nk=4の場合は、W(39)、W(38)及びW(37))に書込む。
3.Wtmpの内容をWに移す。
4.OffSetCntを減分し、RndCntを減分する。
こうして、現在、上側部分からの全てのワードが用いらたこととなる。このため、OffSetHiRdが0にセットされ、これに続く全てのキーワードは下側部分から読み出されることとなる。例えば、Nk=4の場合は、メモリの、上側部分の、アドレス3の所は、W(39)を含む。
次に、以下の手続がRndCnt=Nk−1となるまで、反復実行される。
1.RAMの、下側部分のWOffSetCnt−1 mod Nkの所から読み出し、これをWtmpの所に格納する。
2.次のラウンドキーワードを生成し、これをWtmpと、メモリの、下側部分の、OffSetConに対応する所に書込む。
3.Wtmpの内容をWに移す。
4.OffSetCnt=0となったとき、Rconを更新する
5.OffSetCntとRndCntの両方を減分する。
1.RAMの、下側部分のWOffSetCnt−1 mod Nkの所から読み出し、これをWtmpの所に格納する。
2.次のラウンドキーワードを生成し、これをWtmpと、メモリの、下側部分の、OffSetConに対応する所に書込む。
3.Wtmpの内容をWに移す。
4.OffSetCnt=0となったとき、Rconを更新する
5.OffSetCntとRndCntの両方を減分する。
この時点において、最後のNk個のラウンドキーワードが復号化プロセッサ140によって用いられたこととなるが、ただし、これ以上ラウンドキーワードを生成することは必要とされない。このため、以下の手続がRndCnt=0となるまで反復実行される。
1.RAMの、下側部分の、WoffSetCnt−1mod Nkに対応する所から読み出し、これをWtmpに格納する。
2.Wtmpの内容をWに移す。
3.OffSetCntとRndCntの両方を減分する。
1.RAMの、下側部分の、WoffSetCnt−1mod Nkに対応する所から読み出し、これをWtmpに格納する。
2.Wtmpの内容をWに移す。
3.OffSetCntとRndCntの両方を減分する。
最も最後の読出しは、これは必要とされないため、省かれることに注意する。
一つの好ましい実施例においては、キー拡張プロセスにおけるSubWordファンクション55、155は、暗号化/復号化プロセスのSubBytes変換20、31を実現するためのそれと同一のハードウェアにて実現される。実用上は、こうしても、暗号化/復号化プロセスはほとんど遅延を受けないことがわかっている。より詳細には、N番目のラウンドに一度だけ、キー拡張プロセッサと暗号化/復号化プロセスとが同一のハードウェアを求めて競合するに過ぎない。
キー拡張プロセスと暗号プロセスとが、逐語的にて固定的に進行される(lock step)場合、キー拡張エンジンと暗号エンジンは、次のラウンドに進む前に互いに待ち合わせることを要求され、また、N番目のラウンドの際には、S−Box変換ファンクションに別個にアクセスするために待ち合わせすことを要求される。ただし、暗号エンジンがShiftRow変換21或いはMixColum変換22を遂行している間に、キー拡張プロセッサは、S−Boxハードウェアを用いることができる。
効率的な双方向動作のために要求されるメモリ101の最小量は、2Nkワードであり、半分は、暗号化キーを格納するため、他の半分は、復号化キーを格納するために用いられる。
暗号化の際には、最初のNk個のワードは、暗号化のための(下側)部分から取り出され;生成されたラウンドキーワードは全て復号化のための(上側)部分に書込まれる。このため、暗号化が終わった時点で、復号化のための(上側)部分は、復号化キーを保持することとなる。
復号化の際には、最初のNk個のワードは、復号化のための(上側)部分から取り出されが、これが、復号化のための”初期キー”となる。生成されたラウンドキーは全て暗号化のための(下側)部分に書込まれる。これは、暗号化キーが一時的に上書きされることを意味するが、この暗号化キーは、復号化の後に、再生される。復号化キーは、上書きされることはない。
こうして、最初の暗号化プロセスの後、キー拡張プロセッサは、下側部分103或いは上側部分102のいずれかから開始することを選択することで、直ちに、拡張暗号化キー或いは拡張復号化キーを生成することができる。新たなキーを用いての、最初の動作では、復号化キーを生成するために、暗号化動作を遂行することが必要となる。
メモリの量を、高々、Nk個のワードまで低減することもできる。ただし、これは、複数の連続する暗号化或いは復号化動作が必要とされる場合は、初期暗号化(或いは復号化)キーを生成するために、各動作の間に、ダミーの復号化或いは暗号化動作を挿入することが必要となるために、あまり効率的でない。一般には、これはあまり得策ではない。
状態マシーン106は、様々なレジスタ及びカウンタを以下のように制御するが、これは、Nk=4、6或いは8の全てのケースに適用できるものである。
3−ビットアップ/ダウンカウンタOffSetCnt111は、メモリ111の各半分に対するアドレスをポイントする。これは、暗号化の際には上に向かってカウントし;Nk−1に達すると、再び0にリセットされる。これは、復号化の際は下に向かってカウントし;0に達すると、Nk−1にリセットされる。
OffSetCnt=0の場合は、W(i)に対して規則2が適用される。OffSetCnt=4、かつ、Nk=8の場合は、規則3が適用される。OffSetCntがこれ以外値を有する場合は、全て、規則1が適用される。
1ビット可変(1-bit variable)OffSetHiRd105は、暗号化の際、最初に(最初のNk回の読出しに対して)、RAM101の下側部分103をポイントするようにセットされ、その後の全ての読出しに対しては、RAM101の上側部分102をポイントするようにセットされる。復号化の際には、OffSetHiRd105は、最初に(最初のNk回の読出しに対して)、RAM101の上側部分102をポイントするようにセットされ、その後の全ての読出しに対しては、RAM101の下側部分103をポイントするようにセットされる。1ビット可変OffSetHiWrは、暗号化の際は、全ての書込みに対して、RAM101の上側部分102をポイントするようにセットされ、復号化の際には、全ての書込みに対して、RAM101の下側部分103をポイントするようにセットされる。6−ビットダウンカウンタRndCnt110は、ラウンドの回数をカウントする。
図2に再び戻り、ラウンド定数Rcon58は、各サイクルの度に、つまり、それが用いられる度に、(ステップ59)において更新される必要がある。
最初のサイクルに対しては、Rcon[1]=1とされる。その後、各サイクルの後に、Rconの値は
Rcon[i/Nk]=xtime(Rcon[i/Nk−1]
となるように更新される:つまり、Rconの前の値が左にシフトされ、最上位ビット=1となると、16進値の1BがRconに加えられる。
Rcon[i/Nk]=xtime(Rcon[i/Nk−1]
となるように更新される:つまり、Rconの前の値が左にシフトされ、最上位ビット=1となると、16進値の1BがRconに加えられる。
AES仕様によると、ファンクションRcon[i/Nk]が、
i mod Nk=0、かつ、Nk≦i<Nb(Nr+1)の間において呼出される。ここで、Nk、Nb、Nr、Nb(Nr+1)は、以下のような関係を有する。
i mod Nk=0、かつ、Nk≦i<Nb(Nr+1)の間において呼出される。ここで、Nk、Nb、Nr、Nb(Nr+1)は、以下のような関係を有する。
具体的には
Nk=4の場合は、Rcon[i/Nk]は、i=4,8...40のとき、つまり、10回呼出され、最後の値は、36hとなり;
Nk=6の場合は、Rcon[i/Nk]は、i=6,12,...48のとき、つまり、8回呼出され、最後の値は、80hとなり;
Nk=8の場合は、Rcon[i/Nk]は、i=8,16,...56のとき、つまり、7回呼出され、最後の値は、40hとなる。
Nk=4の場合は、Rcon[i/Nk]は、i=4,8...40のとき、つまり、10回呼出され、最後の値は、36hとなり;
Nk=6の場合は、Rcon[i/Nk]は、i=6,12,...48のとき、つまり、8回呼出され、最後の値は、80hとなり;
Nk=8の場合は、Rcon[i/Nk]は、i=8,16,...56のとき、つまり、7回呼出され、最後の値は、40hとなる。
一つの好ましい実施例においては、RConファンクション(機能)58、59は、8ビットシフトレジスタとして実現され、これは、左方向(暗号化のため)と右方向(復号化のため)の両方にシフトできるようにされる。このシフトレジスタは、以下の値、つまり、01h、1Bh、36h、及び40hにプリセットすることができる。
このシフトレジスタは、暗号化のためには、01hにプリセットされ;これは、80hに到達するまで左にシフトし、その時点で1Bhにプリセットされる。
このシフトレジスタは、復号化のためには、Nk=4の場合は36hに、Nk=6の場合は80hに、Nk=8の場合は40hにプリセットされ;これは、1Bhに到達するまで右にシフトし、その時点で80hにプリセットされる。
こうして、このシフトレジスタは、結局、3つの制御入力を有することとなる。第一の制御入力は、このレジスタの左へのシフト(ビットの回転)を実行し、これは、暗号化キー拡張の際に、各サイクルにおいて用いられる。第二の制御入力は、このレジスタの右へのシフト(ビットの回転)を実行し、これは、復号化キー拡張の際に、各サイクルにおいて用いられる。第三の制御入力は、このレジスタの値を、レジスタの現在の値及び方向(暗号化か復号化か)に従って、複数の所定の値のある一つにプリセットするために用いられる。
本発明は、一般には、拡張キーの一連のラウンドキーワードを、初期キーから、生成するための方法を提供するが、この方法によると、こうして生成された一連のラウンドキーワードは、メモリ内に、実質的に、これらが一連のラウンドキーワードの生成のため、及び暗号プロセスの並列動作のために、使用するために要求される期間に渡ってのみ維持される。
説明の好ましい実施例においては、初期キーワードもメモリ内に維持される。
添付のクレームの範囲から逸脱することなく、他の態様も可能である。
Claims (54)
- 暗号化及び復号化エンジンの少なくとも一方内で用いるための拡張キーの一連のラウンドキーを初期暗号キーから生成するための方法であって、
前記初期キーのNk個のワードをメモリ内のNk個の位置に格納するステップと、
前記初期キーを暗号エンジンに供給し、第一の暗号ラウンドを遂行するステップと、
前記拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方は前記メモリから、反復的に取り出し、これら選択された第一と第二のワードから前記拡張キーの一連の後続ワードを生成するステップと、
前記拡張キーの生成されたワードを前記暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するステップと、
前記生成された後続ワードの一連のワードを前記メモリ内に、前記拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するステップとを含むことを特徴とする方法。 - 前記前に生成されたワードを上書きするステップは、それらのワードが、各々の後続ワードを生成するステップにおいて前記第一及び第二の少なくとも一方の選択されたワードとして用いられた後においてのみ行なわれることを特徴とする請求項1記載の方法。
- 用いられる前記メモリ位置の数は、前記拡張キー内のワードの数より少なくされることを特徴とする請求項1記載の方法。
- 用いられる前記メモリ位置の数は、Nkと等しくされることを特徴とする請求項1記載の方法。
- 前記初期キーのワードも、前記上書きステップの際に、拡張キーのワードにて上書きされることを特徴とする請求項4記載の方法。
- 用いられる前記メモリ位置の数は、2Nkと等しくされることを特徴とする請求項1記載の方法。
- 前記メモリは2つの部分に分割され、第一の部分は初期キーを格納するために、第二の部分は前記拡張キーの前記一連の生成されたワードを受け入れるために用いられることを特徴とする請求項1記載の方法。
- 更に、前記拡張キーの生成を、最終ラウンドキーは前記メモリの第二の部分内に格納され、前記初期キーは前記メモリの第一の部分内にそのまま格納された状態となるようなやり方にて、完結させるステップを含むことを特徴とする請求項7記載の方法。
- 更に、キー拡張を前記メモリの第一の部分内に格納されている初期キーから開始して、反復的に遂行するステップを含むことを特徴とする請求項8記載の方法。
- 更に、逆キー拡張を前記メモリの第二の部分内に格納されている最終ラウンドキーから開始して、遂行するステップを含むことを特徴とする請求項8記載の方法。
- 更に、前記拡張キーの生成を、前記最終ラウンドキーは前記メモリ内に格納され、前記初期キーは上書きされるようなやり方にて、完結させるステップを含むことを特徴とする請求項1乃至4のいずれかに記載の方法。
- 更に、逆キー拡張を、前記メモリ内に格納されている前記最終ラウンドキーから開始して遂行することで、後続暗号動作のための初期キーを再生するステップを含むことを特徴とする請求項11記載の方法。
- 用いられる前記メモリ位置の数は、2Nkとされ、前記第一の部分とオ第二の部分は、おのおの、Nk個の位置を有することを特徴とする請求項7記載の方法。
- 前記拡張キーの一連の後続ワードを生成するステップは、AES Rijndaelブロック暗号ラウンドキーの一連のワードをAESキー拡張ファンクションに従って生成することからなることを特徴とする請求項1乃至13のいずれかに記載の方法。
- Nk=8とされることを特徴とする請求項14記載の方法。
- 前記拡張キーの一連の後続ワードは、暗号化ラウンドキーのワードからなることを特徴とする請求項1乃至15のいずれかに記載の方法。
- 前記拡張キーの一連の後続ワードは、復号化ラウンドキーのワードからなることを特徴とする請求項1乃至15のいずれかに記載の方法。
- 前記拡張キーの生成されたワードを前記暗号エンジンに供給するステップは、これら生成されたワードを、逐語的にて、前記暗号エンジンがこれらワードをラウンドキーとして消費するのに合わせて供給することからなることを特徴とする請求項1記載の方法。
- 前記取り出しステップにおいて、前記選択された第一のワードと前記選択された第二のワードの両方は前記メモリから取り出されることを特徴とする請求項1記載の方法。
- 前記取り出しステップにおいて、前記選択された第一のワードは前記メモリから取り出され、前記選択された第二のワードは、前の反復において用いられたレジスタから取り出されることを特徴とする請求項1記載の方法。
- 前記拡張キーの生成されたワードを前記暗号エンジンに供給するステップは、前記生成されたワードを前記メモリから供給することからなることを特徴とする請求項1記載の方法。
- 前記生成ステップは、ラウンドキーワード生成の少なくとも幾つかのサイクルにおいて、S−ボックス変換を、前記暗号エンジンと共有されるS−ボックスを用いて遂行するステップを含むことを特徴とする請求項1記載の方法。
- 更に、前記一連のラウンドキーワードの生成と前記暗号エンジンによる前記ラウンドキーワードの消費との同期を維持するステップを含むことを特徴とする請求項22記載の方法。
- 暗号化及び復号化エンジンの少なくとも一方内で用いるための、拡張キーの一連のラウンドキーを、初期暗号キーから生成するためのラウンドキー発生器であって、
前記初期キーのNk個のワードを格納するためのメモリと、
前記拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方は前記メモリから、反復的に取り出し、前記選択された第一と第二のワードから前記拡張キーの一連の後続ワードを生成するための拡張プロセッサと、
前記拡張キーの前記生成されたワードを前記暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するためのための手段と、
前記生成された後続ワードの一連のワードを前記メモリ内に、前記拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するための手段と、を備えることを特徴とする装置。 - 前記前に生成されたワードは、それらワードが、前記第一及び第二のワードの少なくとも一方の選択されたワードとして前記拡張プロセッサによって用いられた後にのみ、上書きされることを確保するための制御手段を更に備えることを特徴とする請求項24記載の装置。
- 前記メモリ内のワード位置の数は、前記拡張キー内のワードの数より少なくされることを特徴とする請求項24記載の装置。
- 前記メモリ内のワード位置の数は、Nkと等しくされることを特徴とする請求項24記載の装置。
- 前記初期キーのワードも、前記上書きの際に拡張キーのワードによって上書きされることを特徴とする請求項27記載の装置。
- 前記メモリ内のワード位置の数は、2Nkと等しくされることを特徴とする請求項24記載の装置。
- 前記メモリは2つの部分に分割され、第一の部分は初期キーを格納するために、第二の部分は前記拡張キーの前記一連の生成されたワードを受け入れるために用いられることを特徴とする請求項24記載の装置。
- 前記格納のための手段は、前記拡張キーの生成が完結した後に、前記最終ラウンドキーは前記メモリの第二の部分内に格納し、前記初期キーは前記メモリの第一の部分内に維持することを特徴とする請求項30記載の装置。
- キー拡張を前記メモリの第一の部分内に格納されている初期キーから開始して反復的に遂行するための手段を更に備えることを特徴とする請求項31記載の装置。
- 逆キー拡張を前記メモリの第二の部分内に格納されている最終ラウンドキーから開始して遂行するための手段を更に備えることを特徴とする請求項31記載の装置。
- 前記拡張キーの生成を、前記最終ラウンドキーは前記メモリ内に格納され、前記初期キーは上書きされるようなやり方にて、完結させるための手段を更に備えることを特徴とする請求項24乃至27のいずれかに記載の装置。
- 後続暗号動作のための初期キーを生成するために、逆キー拡張を、前記メモリ内に格納されている前記最終ラウンドキーから開始して遂行するための手段を更に備えることを特徴とする請求項34記載の装置。
- 前記メモリ内のワード位置の数は、2Nkとされ、前記第一の部分とオ第二の部分は、おのおの、Nk個の位置を有することを特徴とする請求項30記載の装置。
- 前記拡張プロセッサは、AES Rijndaelブロック暗号ラウンドキーの一連のワードをAESキー拡張ファンクションに従って生成するための手段を含むことを特徴とする請求項24乃至36のいずれかに記載の装置。
- Nk=8であることを特徴とする請求項37記載の装置。
- 前記拡張プロセッサは、暗号化ラウンドキーのワードを生成することを特徴とする請求項24乃至38のいずれかに記載の装置。
- 前記拡張キープロセッサは、復号化ラウンドキーのワードを生成することを特徴とする請求項24乃至38のいずれかに記載の装置。
- 暗号エンジンと、前記拡張キーの生成されたワードを前記暗号エンジンに、逐語的にて、前記暗号エンジンがそれらワードをラウンドキーとして消費するのに合わせて供給するための手段とを更に備えることを特徴とする請求項24記載の装置。
- 更に、前記選択された第一のワードと前記選択された第二のワードを両方とも前記メモリから取り出すための手段を備えることを特徴とする請求項24記載の装置。
- 前記選択された第一のワードは前記メモリから取り出し、前記選択された第二のワードは前記拡張プロセッサ内のレジスタから取り出すための手段を更に備えることを特徴とする請求項24記載の装置。
- 暗号エンジンを更に含み、前記拡張プロセッサと前記暗号エンジンがS−ボックスを共有することを特徴とする請求項24記載の装置。
- 前記拡張プロセッサと前記暗号エンジンとの同期を維持するための手段を更に備える、ことを特徴とする請求項44記載の装置。
- 請求項24乃至45のいずれかに記載のラウンドキー発生器を組み込むことを特徴とするスマートカード。
- 拡張キーの一連のラウンドキーワードを初期キーから生成するための方法であって、こうして生成された一連のラウンドキーワードは、メモリ内に、実質的に、これらが一連のラウンドキーワードを生成するために、及びこれと平行して動作される暗号プロセスために、必要とされる期間に渡ってのみ維持されることを特徴とする方法。
- 前記初期キーワードも、前記メモリ内に、前記拡張キーを生成するプロセス全体を通じて維持されることを特徴とする請求項47記載の方法。
- AESラウンド定数ファンクション発生器であって、
前記レジスタの内容を左にシフトさせるための第一の制御入力と、
前記レジスタの内容を右にシフトさせるための第二の制御入力と、
前記シフトレジスタの内容を複数の可能な値の一つのプリセットするための第三の制御入力とを有するシフトレジスタを備えることを特徴とする装置。 - 前記第三の制御入力は、前記シフトレジスタの内容を前記レジスタの現在の内容に従って決定されるある値にプリセットすることを特徴とする請求項49記載の装置。
- 前記複数の可能な値は、16進法における01、1B、36、80及び40からなることを特徴とする請求項49記載の装置。
- 前記第一の制御入力は、AES暗号化動作の各ラウンドにおいて一度起動され、前記第二の入力はAES復号化動作の各ラウンドにおいて一度起動されることを特徴とする請求項49記載の装置。
- 明細書において添付の図面を参照しながら説明されたそれと実質的に等しい装置。
- 明細書において添付の図面を参照しながら説明されたそれと実質的に等しい方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB0214620.7A GB0214620D0 (en) | 2002-06-25 | 2002-06-25 | Round key generation for AES rijndael block cipher |
PCT/IB2003/002623 WO2004002057A2 (en) | 2002-06-25 | 2003-06-12 | Round key generation for aes rijndael block cipher |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005531023A true JP2005531023A (ja) | 2005-10-13 |
Family
ID=9939228
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004515154A Withdrawn JP2005531023A (ja) | 2002-06-25 | 2003-06-12 | AES(Rijndael)ブロック暗号器に対するラウンドキーの生成 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20050213756A1 (ja) |
EP (1) | EP1518347A2 (ja) |
JP (1) | JP2005531023A (ja) |
CN (1) | CN1663172A (ja) |
AU (1) | AU2003239730A1 (ja) |
GB (1) | GB0214620D0 (ja) |
WO (1) | WO2004002057A2 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008294810A (ja) * | 2007-05-25 | 2008-12-04 | Renesas Technology Corp | 暗号/復号装置 |
JP2009109988A (ja) * | 2007-10-10 | 2009-05-21 | Canon Inc | 暗号処理回路 |
JP2009303032A (ja) * | 2008-06-16 | 2009-12-24 | Nippon Telegr & Teleph Corp <Ntt> | 暗号演算装置、その方法、及びプログラム |
JP2010057066A (ja) * | 2008-08-29 | 2010-03-11 | Toshiba Corp | 暗号化で用いる鍵をスケジュールする装置、方法およびプログラム |
JP2015173497A (ja) * | 2015-05-27 | 2015-10-01 | 株式会社東芝 | 電子機器 |
US9389855B2 (en) | 2011-08-26 | 2016-07-12 | Kabushiki Kaisha Toshiba | Arithmetic device |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7937595B1 (en) * | 2003-06-27 | 2011-05-03 | Zoran Corporation | Integrated encryption/decryption functionality in a digital TV/PVR system-on-chip |
WO2005081934A2 (en) * | 2004-02-23 | 2005-09-09 | The Trustees Of Columbia University In The City Of New York | Computer-implemented methods and systems for generating elastic block ciphers for encryption and decryption |
KR20050087271A (ko) | 2004-02-26 | 2005-08-31 | 삼성전자주식회사 | 가변 키 길이를 가지는 초기 라운드 키에 대응하는 암호라운드 키와 복호 라운드 키를 선택적으로 발생하는 키스케쥴 장치 |
US7561689B2 (en) * | 2004-06-17 | 2009-07-14 | Agere Systems Inc. | Generating keys having one of a number of key sizes |
US7715555B2 (en) * | 2004-09-07 | 2010-05-11 | Broadcom Corporation | Method and system for extending advanced encryption standard (AES) operations for enhanced security |
US7783037B1 (en) * | 2004-09-20 | 2010-08-24 | Globalfoundries Inc. | Multi-gigabit per second computing of the rijndael inverse cipher |
DE102004062825B4 (de) * | 2004-12-27 | 2006-11-23 | Infineon Technologies Ag | Kryptographische Einheit und Verfahren zum Betreiben einer kryptographischen Einheit |
US7873166B2 (en) * | 2005-09-13 | 2011-01-18 | Avaya Inc. | Method for undetectably impeding key strength of encryption usage for products exported outside the U.S |
US20080037775A1 (en) * | 2006-03-31 | 2008-02-14 | Avaya Technology Llc | Verifiable generation of weak symmetric keys for strong algorithms |
US7890750B2 (en) * | 2006-07-06 | 2011-02-15 | Accenture Global Services Limited | Encryption and decryption on a graphics processing unit |
CN100389553C (zh) * | 2006-07-31 | 2008-05-21 | 西安西电捷通无线网络通信有限公司 | 高效率实现sms4算法的加解密处理设备 |
US7949130B2 (en) * | 2006-12-28 | 2011-05-24 | Intel Corporation | Architecture and instruction set for implementing advanced encryption standard (AES) |
US9209967B2 (en) | 2007-03-12 | 2015-12-08 | Exelis, Inc. | Precalculated encryption key |
US8538015B2 (en) | 2007-03-28 | 2013-09-17 | Intel Corporation | Flexible architecture and instruction for advanced encryption standard (AES) |
EP1998488A1 (de) * | 2007-05-26 | 2008-12-03 | DSI Informationstechnik GmbH | Personalisierte AES Verschlüsselung |
US8085934B1 (en) * | 2007-07-11 | 2011-12-27 | Marvell International Ltd. | Reverse cryptographic key expansion |
US8787565B2 (en) * | 2007-08-20 | 2014-07-22 | Intel Corporation | Method and apparatus for generating an advanced encryption standard (AES) key schedule |
US8855299B2 (en) * | 2007-12-28 | 2014-10-07 | Intel Corporation | Executing an encryption instruction using stored round keys |
KR100949538B1 (ko) * | 2008-09-09 | 2010-03-25 | 한국전자통신연구원 | Aes 라인달 알고리즘을 이용하는 암호화 및 복호화 장치와 그 방법 |
US9336160B2 (en) * | 2008-10-30 | 2016-05-10 | Qualcomm Incorporated | Low latency block cipher |
US20100125740A1 (en) * | 2008-11-19 | 2010-05-20 | Accenture Global Services Gmbh | System for securing multithreaded server applications |
US9237310B2 (en) | 2008-11-26 | 2016-01-12 | Thomson Licensing | Method and system digital for processing digital content according to a workflow |
US8565421B1 (en) | 2009-01-15 | 2013-10-22 | Marvell International Ltd. | Block cipher improvements |
CN101702709B (zh) * | 2009-11-05 | 2013-04-10 | 复旦大学 | 一种适用于mips处理器的aes加密单元 |
US8509424B2 (en) * | 2009-11-15 | 2013-08-13 | Ante Deng | Fast key-changing hardware apparatus for AES block cipher |
US9544133B2 (en) * | 2009-12-26 | 2017-01-10 | Intel Corporation | On-the-fly key generation for encryption and decryption |
US9141831B2 (en) * | 2010-07-08 | 2015-09-22 | Texas Instruments Incorporated | Scheduler, security context cache, packet processor, and authentication, encryption modules |
CN101969374B (zh) * | 2010-10-27 | 2012-06-20 | 北京航空航天大学 | 分组密码算法中混淆层的实现方法 |
US9331848B1 (en) * | 2011-04-29 | 2016-05-03 | Altera Corporation | Differential power analysis resistant encryption and decryption functions |
US9135450B2 (en) * | 2011-12-21 | 2015-09-15 | Intel Corporation | Systems and methods for protecting symmetric encryption keys |
CN102624520B (zh) * | 2012-05-02 | 2014-10-29 | 西安电子科技大学 | 基于aes的192比特位密钥扩展系统及方法 |
CN104219043B (zh) * | 2014-07-25 | 2018-03-20 | 西华师范大学 | 一种可预置和重构的密钥装置及运行方法 |
DE102014216392A1 (de) * | 2014-08-19 | 2016-02-25 | Robert Bosch Gmbh | Symmetrisches Iteriertes Blockchiffrierverfahren und entsprechende Vorrichtung |
CN104253684B (zh) | 2014-09-23 | 2018-02-02 | 深圳市汇顶科技股份有限公司 | 加密方法和加密装置 |
EP3086503B1 (en) * | 2015-04-23 | 2018-06-06 | Inside Secure | Fault detection for systems implementing a block cipher |
GB2551849B (en) * | 2016-06-28 | 2019-10-09 | Mips Tech Llc | AES hardware implementation |
US10911218B2 (en) | 2016-10-09 | 2021-02-02 | Lg Electronics Inc. | Lightweight block cipher |
CN106850214A (zh) * | 2017-03-13 | 2017-06-13 | 上海新储集成电路有限公司 | 一种并行加解密方法 |
CN108777611B (zh) * | 2018-05-11 | 2021-06-18 | 吉林大学 | 基于双密钥流密码的双向链表顺序加密解密方法 |
CN113938268B (zh) * | 2021-10-15 | 2023-07-28 | 湖南麒麟信安科技股份有限公司 | 分组密码算法的硬件控制系统 |
CN116126753B (zh) * | 2022-12-28 | 2024-02-02 | 江苏都万电子科技有限公司 | 一种防护存储器及存储方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6937727B2 (en) * | 2001-06-08 | 2005-08-30 | Corrent Corporation | Circuit and method for implementing the advanced encryption standard block cipher algorithm in a system having a plurality of channels |
JP3851115B2 (ja) * | 2001-06-28 | 2006-11-29 | 富士通株式会社 | 暗号回路 |
GB0121793D0 (en) * | 2001-09-08 | 2001-10-31 | Amphion Semiconductor Ltd | An apparatus for generating encryption/decryption keys |
JP2005527853A (ja) * | 2002-05-23 | 2005-09-15 | アトメル・コーポレイション | 高度暗号化規格(aes)のハードウェア暗号法エンジン |
US20040047466A1 (en) * | 2002-09-06 | 2004-03-11 | Joel Feldman | Advanced encryption standard hardware accelerator and method |
US8520845B2 (en) * | 2007-06-08 | 2013-08-27 | Intel Corporation | Method and apparatus for expansion key generation for block ciphers |
-
2002
- 2002-06-25 GB GBGB0214620.7A patent/GB0214620D0/en not_active Ceased
-
2003
- 2003-06-12 CN CN03814926.5A patent/CN1663172A/zh active Pending
- 2003-06-12 AU AU2003239730A patent/AU2003239730A1/en not_active Abandoned
- 2003-06-12 EP EP03732919A patent/EP1518347A2/en not_active Withdrawn
- 2003-06-12 WO PCT/IB2003/002623 patent/WO2004002057A2/en active Application Filing
- 2003-06-12 JP JP2004515154A patent/JP2005531023A/ja not_active Withdrawn
- 2003-06-12 US US10/519,586 patent/US20050213756A1/en not_active Abandoned
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008294810A (ja) * | 2007-05-25 | 2008-12-04 | Renesas Technology Corp | 暗号/復号装置 |
JP2009109988A (ja) * | 2007-10-10 | 2009-05-21 | Canon Inc | 暗号処理回路 |
JP2009303032A (ja) * | 2008-06-16 | 2009-12-24 | Nippon Telegr & Teleph Corp <Ntt> | 暗号演算装置、その方法、及びプログラム |
JP2010057066A (ja) * | 2008-08-29 | 2010-03-11 | Toshiba Corp | 暗号化で用いる鍵をスケジュールする装置、方法およびプログラム |
US9389855B2 (en) | 2011-08-26 | 2016-07-12 | Kabushiki Kaisha Toshiba | Arithmetic device |
JP2015173497A (ja) * | 2015-05-27 | 2015-10-01 | 株式会社東芝 | 電子機器 |
Also Published As
Publication number | Publication date |
---|---|
GB0214620D0 (en) | 2002-08-07 |
EP1518347A2 (en) | 2005-03-30 |
WO2004002057A2 (en) | 2003-12-31 |
CN1663172A (zh) | 2005-08-31 |
AU2003239730A1 (en) | 2004-01-06 |
WO2004002057A3 (en) | 2004-05-21 |
US20050213756A1 (en) | 2005-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005531023A (ja) | AES(Rijndael)ブロック暗号器に対するラウンドキーの生成 | |
McLoone et al. | High performance single-chip FPGA Rijndael algorithm implementations | |
US5724428A (en) | Block encryption algorithm with data-dependent rotations | |
JP4905000B2 (ja) | 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム | |
JP4961909B2 (ja) | 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム | |
US7532721B2 (en) | Implementation of a switch-box using a subfield method | |
US20030059054A1 (en) | Apparatus for generating encryption or decryption keys | |
US20110255689A1 (en) | Multiple-mode cryptographic module usable with memory controllers | |
US7561689B2 (en) | Generating keys having one of a number of key sizes | |
US20060147040A1 (en) | Rijndael block cipher apparatus and encryption/decryption method thereof | |
JP2005527150A (ja) | ブロックサイファの実施におけるs−ボックス暗号化 | |
JP2005527853A (ja) | 高度暗号化規格(aes)のハードウェア暗号法エンジン | |
US20050135607A1 (en) | Apparatus and method of performing AES Rijndael algorithm | |
WO2002101972A2 (en) | Circuit and method for implementing the advanced encryption standard block cipher algorithm in a system having a plurality of channels | |
WO2009087972A1 (ja) | データ送信装置、データ受信装置、これらの方法、記録媒体、そのデータ通信システム | |
EP1629626B1 (en) | Method and apparatus for a low memory hardware implementation of the key expansion function | |
JP5755970B2 (ja) | 演算装置 | |
WO2022125337A1 (en) | High-speed circuit combining aes and sm4 encryption and decryption | |
Beuchat et al. | A low-area unified hardware architecture for the AES and the cryptographic hash function ECHO | |
Hilewitz et al. | Accelerating the whirlpool hash function using parallel table lookup and fast cyclical permutation | |
KR102393958B1 (ko) | 암호화 알고리즘이 적용된 시스템에서의 데이터 처리 방법 | |
JP2024053189A (ja) | 暗号処理装置、暗号処理装置の暗号処理方法およびプログラム | |
D’Halluin et al. | Equivalent keys of HPC | |
JP2005529365A (ja) | Aesミックスカラム変換 | |
Farhan et al. | High Data Rate 8-Bit Crypto Processor. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060612 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20080612 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090924 |