(57)【要約】本発明によると、拡張キーの一連のラウンドキーがＡＥＳブロック暗号アルゴリズムに従って、初期暗号キーから、暗号（暗号化及び復号化の少なくとも一方の）エンジン内で用いるために、暗号プロセスが実行されている間にリアルタイムにて生成される。拡張キーの先に生成されたワードを上書きし、メモリ内には初期キーと最終キーのワードのみを残すことで、用いられるキーメモリが最小限に抑えられる。その後の暗号動作は、暗号エンジンに遅延をもたらすことなく、暗号化或いは復号化方向のいずれからも、再開することができる。
2005531023.tif 000002
【特許請求の範囲】
【請求項１】
暗号化及び復号化エンジンの少なくとも一方内で用いるための拡張キーの一連のラウンドキーを初期暗号キーから生成するための方法であって、
前記初期キーのＮｋ個のワードをメモリ内のＮｋ個の位置に格納するステップと、
前記初期キーを暗号エンジンに供給し、第一の暗号ラウンドを遂行するステップと、
前記拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方は前記メモリから、反復的に取り出し、これら選択された第一と第二のワードから前記拡張キーの一連の後続ワードを生成するステップと、
前記拡張キーの生成されたワードを前記暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するステップと、
前記生成された後続ワードの一連のワードを前記メモリ内に、前記拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するステップとを含むことを特徴とする方法。
【請求項２】
前記前に生成されたワードを上書きするステップは、それらのワードが、各々の後続ワードを生成するステップにおいて前記第一及び第二の少なくとも一方の選択されたワードとして用いられた後においてのみ行なわれることを特徴とする請求項１記載の方法。
【請求項３】
用いられる前記メモリ位置の数は、前記拡張キー内のワードの数より少なくされることを特徴とする請求項１記載の方法。
【請求項４】
用いられる前記メモリ位置の数は、Ｎｋと等しくされることを特徴とする請求項１記載の方法。
【請求項５】
前記初期キーのワードも、前記上書きステップの際に、拡張キーのワードにて上書きされることを特徴とする請求項４記載の方法。
【請求項６】
用いられる前記メモリ位置の数は、２Ｎｋと等しくされることを特徴とする請求項１記載の方法。
【請求項７】
前記メモリは２つの部分に分割され、第一の部分は初期キーを格納するために、第二の部分は前記拡張キーの前記一連の生成されたワードを受け入れるために用いられることを特徴とする請求項１記載の方法。
【請求項８】
更に、前記拡張キーの生成を、最終ラウンドキーは前記メモリの第二の部分内に格納され、前記初期キーは前記メモリの第一の部分内にそのまま格納された状態となるようなやり方にて、完結させるステップを含むことを特徴とする請求項７記載の方法。
【請求項９】
更に、キー拡張を前記メモリの第一の部分内に格納されている初期キーから開始して、反復的に遂行するステップを含むことを特徴とする請求項８記載の方法。
【請求項１０】
更に、逆キー拡張を前記メモリの第二の部分内に格納されている最終ラウンドキーから開始して、遂行するステップを含むことを特徴とする請求項８記載の方法。
【請求項１１】
更に、前記拡張キーの生成を、前記最終ラウンドキーは前記メモリ内に格納され、前記初期キーは上書きされるようなやり方にて、完結させるステップを含むことを特徴とする請求項１乃至４のいずれかに記載の方法。
【請求項１２】
更に、逆キー拡張を、前記メモリ内に格納されている前記最終ラウンドキーから開始して遂行することで、後続暗号動作のための初期キーを再生するステップを含むことを特徴とする請求項１１記載の方法。
【請求項１３】
用いられる前記メモリ位置の数は、２Ｎｋとされ、前記第一の部分とオ第二の部分は、おのおの、Ｎｋ個の位置を有することを特徴とする請求項７記載の方法。
【請求項１４】
前記拡張キーの一連の後続ワードを生成するステップは、ＡＥＳ  Ｒｉｊｎｄａｅｌブロック暗号ラウンドキーの一連のワードをＡＥＳキー拡張ファンクションに従って生成することからなることを特徴とする請求項１乃至１３のいずれかに記載の方法。
【請求項１５】
Ｎｋ＝８とされることを特徴とする請求項１４記載の方法。
【請求項１６】
前記拡張キーの一連の後続ワードは、暗号化ラウンドキーのワードからなることを特徴とする請求項１乃至１５のいずれかに記載の方法。
【請求項１７】
前記拡張キーの一連の後続ワードは、復号化ラウンドキーのワードからなることを特徴とする請求項１乃至１５のいずれかに記載の方法。
【請求項１８】
前記拡張キーの生成されたワードを前記暗号エンジンに供給するステップは、これら生成されたワードを、逐語的にて、前記暗号エンジンがこれらワードをラウンドキーとして消費するのに合わせて供給することからなることを特徴とする請求項１記載の方法。
【請求項１９】
前記取り出しステップにおいて、前記選択された第一のワードと前記選択された第二のワードの両方は前記メモリから取り出されることを特徴とする請求項１記載の方法。
【請求項２０】
前記取り出しステップにおいて、前記選択された第一のワードは前記メモリから取り出され、前記選択された第二のワードは、前の反復において用いられたレジスタから取り出されることを特徴とする請求項１記載の方法。
【請求項２１】
前記拡張キーの生成されたワードを前記暗号エンジンに供給するステップは、前記生成されたワードを前記メモリから供給することからなることを特徴とする請求項１記載の方法。
【請求項２２】
前記生成ステップは、ラウンドキーワード生成の少なくとも幾つかのサイクルにおいて、Ｓ−ボックス変換を、前記暗号エンジンと共有されるＳ−ボックスを用いて遂行するステップを含むことを特徴とする請求項１記載の方法。
【請求項２３】
更に、前記一連のラウンドキーワードの生成と前記暗号エンジンによる前記ラウンドキーワードの消費との同期を維持するステップを含むことを特徴とする請求項２２記載の方法。
【請求項２４】
暗号化及び復号化エンジンの少なくとも一方内で用いるための、拡張キーの一連のラウンドキーを、初期暗号キーから生成するためのラウンドキー発生器であって、
前記初期キーのＮｋ個のワードを格納するためのメモリと、
前記拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方は前記メモリから、反復的に取り出し、前記選択された第一と第二のワードから前記拡張キーの一連の後続ワードを生成するための拡張プロセッサと、
前記拡張キーの前記生成されたワードを前記暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するためのための手段と、
前記生成された後続ワードの一連のワードを前記メモリ内に、前記拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するための手段と、を備えることを特徴とする装置。
【請求項２５】
前記前に生成されたワードは、それらワードが、前記第一及び第二のワードの少なくとも一方の選択されたワードとして前記拡張プロセッサによって用いられた後にのみ、上書きされることを確保するための制御手段を更に備えることを特徴とする請求項２４記載の装置。
【請求項２６】
前記メモリ内のワード位置の数は、前記拡張キー内のワードの数より少なくされることを特徴とする請求項２４記載の装置。
【請求項２７】
前記メモリ内のワード位置の数は、Ｎｋと等しくされることを特徴とする請求項２４記載の装置。
【請求項２８】
前記初期キーのワードも、前記上書きの際に拡張キーのワードによって上書きされることを特徴とする請求項２７記載の装置。
【請求項２９】
前記メモリ内のワード位置の数は、２Ｎｋと等しくされることを特徴とする請求項２４記載の装置。
【請求項３０】
前記メモリは２つの部分に分割され、第一の部分は初期キーを格納するために、第二の部分は前記拡張キーの前記一連の生成されたワードを受け入れるために用いられることを特徴とする請求項２４記載の装置。
【請求項３１】
前記格納のための手段は、前記拡張キーの生成が完結した後に、前記最終ラウンドキーは前記メモリの第二の部分内に格納し、前記初期キーは前記メモリの第一の部分内に維持することを特徴とする請求項３０記載の装置。
【請求項３２】
キー拡張を前記メモリの第一の部分内に格納されている初期キーから開始して反復的に遂行するための手段を更に備えることを特徴とする請求項３１記載の装置。
【請求項３３】
逆キー拡張を前記メモリの第二の部分内に格納されている最終ラウンドキーから開始して遂行するための手段を更に備えることを特徴とする請求項３１記載の装置。
【請求項３４】
前記拡張キーの生成を、前記最終ラウンドキーは前記メモリ内に格納され、前記初期キーは上書きされるようなやり方にて、完結させるための手段を更に備えることを特徴とする請求項２４乃至２７のいずれかに記載の装置。
【請求項３５】
後続暗号動作のための初期キーを生成するために、逆キー拡張を、前記メモリ内に格納されている前記最終ラウンドキーから開始して遂行するための手段を更に備えることを特徴とする請求項３４記載の装置。
【請求項３６】
前記メモリ内のワード位置の数は、２Ｎｋとされ、前記第一の部分とオ第二の部分は、おのおの、Ｎｋ個の位置を有することを特徴とする請求項３０記載の装置。
【請求項３７】
前記拡張プロセッサは、ＡＥＳ  Ｒｉｊｎｄａｅｌブロック暗号ラウンドキーの一連のワードをＡＥＳキー拡張ファンクションに従って生成するための手段を含むことを特徴とする請求項２４乃至３６のいずれかに記載の装置。
【請求項３８】
Ｎｋ＝８であることを特徴とする請求項３７記載の装置。
【請求項３９】
前記拡張プロセッサは、暗号化ラウンドキーのワードを生成することを特徴とする請求項２４乃至３８のいずれかに記載の装置。
【請求項４０】
前記拡張キープロセッサは、復号化ラウンドキーのワードを生成することを特徴とする請求項２４乃至３８のいずれかに記載の装置。
【請求項４１】
暗号エンジンと、前記拡張キーの生成されたワードを前記暗号エンジンに、逐語的にて、前記暗号エンジンがそれらワードをラウンドキーとして消費するのに合わせて供給するための手段とを更に備えることを特徴とする請求項２４記載の装置。
【請求項４２】
更に、前記選択された第一のワードと前記選択された第二のワードを両方とも前記メモリから取り出すための手段を備えることを特徴とする請求項２４記載の装置。
【請求項４３】
前記選択された第一のワードは前記メモリから取り出し、前記選択された第二のワードは前記拡張プロセッサ内のレジスタから取り出すための手段を更に備えることを特徴とする請求項２４記載の装置。
【請求項４４】
暗号エンジンを更に含み、前記拡張プロセッサと前記暗号エンジンがＳ−ボックスを共有することを特徴とする請求項２４記載の装置。
【請求項４５】
前記拡張プロセッサと前記暗号エンジンとの同期を維持するための手段を更に備える、ことを特徴とする請求項４４記載の装置。
【請求項４６】
請求項２４乃至４５のいずれかに記載のラウンドキー発生器を組み込むことを特徴とするスマートカード。
【請求項４７】
拡張キーの一連のラウンドキーワードを初期キーから生成するための方法であって、こうして生成された一連のラウンドキーワードは、メモリ内に、実質的に、これらが一連のラウンドキーワードを生成するために、及びこれと平行して動作される暗号プロセスために、必要とされる期間に渡ってのみ維持されることを特徴とする方法。
【請求項４８】
前記初期キーワードも、前記メモリ内に、前記拡張キーを生成するプロセス全体を通じて維持されることを特徴とする請求項４７記載の方法。
【請求項４９】
ＡＥＳラウンド定数ファンクション発生器であって、
前記レジスタの内容を左にシフトさせるための第一の制御入力と、
前記レジスタの内容を右にシフトさせるための第二の制御入力と、
前記シフトレジスタの内容を複数の可能な値の一つのプリセットするための第三の制御入力とを有するシフトレジスタを備えることを特徴とする装置。
【請求項５０】
前記第三の制御入力は、前記シフトレジスタの内容を前記レジスタの現在の内容に従って決定されるある値にプリセットすることを特徴とする請求項４９記載の装置。  
【請求項５１】
前記複数の可能な値は、１６進法における０１、１Ｂ、３６、８０及び４０からなることを特徴とする請求項４９記載の装置。
【請求項５２】
前記第一の制御入力は、ＡＥＳ暗号化動作の各ラウンドにおいて一度起動され、前記第二の入力はＡＥＳ復号化動作の各ラウンドにおいて一度起動されることを特徴とする請求項４９記載の装置。
【請求項５３】
明細書において添付の図面を参照しながら説明されたそれと実質的に等しい装置。
【請求項５４】
明細書において添付の図面を参照しながら説明されたそれと実質的に等しい方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＡＥＳ（Advanced Encryption Standard）アルゴリズムを実現するための方法及び装置、より詳細には、このアルゴリズムの暗号化（encryption）及び復号化（decryption）ラウンドの際に必要とされるラウンドキー（round keys）をリアルタイムにて生成するための方法及び装置に係る。
【０００２】
本発明は、これに限定されるものではないが、とりわけ、例えば、スマートカード内に搭載されような暗号デバイス内、及びプロセッサ及びメモリ資源に制約があるその他のデバイス内で用いるのに適する。
【背景技術】
【０００３】
ＡＥＳ（Rijndael）アルゴリズムは、入力データの一連の１２８−ビットブロックに関して動作する、１２８−ビット、１９２−ビット、或いは２５６−ビットキーを用いて実現される。ＡＥＳアルゴリズムに従って暗号化動作或いは復号化動作（ここでは、総称的に、”暗号動作（cryptpgraphic operation）”と呼ばれる）を実現する際には、これら暗号化或いは復号化動作の一連の各ラウンドに対するラウンドキーを提供するために、元（original）の或いは”初期（ititial）”キーを拡張することが必要となる。必要とされるラウンドキーの数（Ｎｒ）は、１２８−ビットキーの場合は１０回、１９２−ビットキーの場合は１２回、２５６−ビットキーの場合は１４回となる。
【０００４】
こうして、拡張ラウンドキーのサイズは、初期キーに（Ｎｒ＋１）を乗じた値となる。１２８−ビットキーの場合は、拡張キーは１２８×１１＝１４０８ビットを含み；１９２−ビットキーの場合は、拡張キーは１２８×１３＝１６６４ビットを含み；２５６−ビットキーの場合は、拡張キーは１２８×１５＝１９２０ビットを含む。
【０００５】
この拡張キーを格納するためには、暗号エンジン（cryptographic engines）内にかなりの量のメモリ空間が必要となり、これは、とりわけ、メモリ空間に制約があるスマートカードその他に暗号エンジンを実装したい場合など幾つかのアプリケーションにおいては大きな課題となる。このようなメモリ空間を提供することは、ラウンドキーを、暗号エンジンの動作の最中に、遅延をもたらすことなく生成することができれば、必要となる。
【発明の開示】
【０００６】
本発明は、ラウンドキー生成ファンクション（round key generation function）を、現在の技術によって要求されるよりも大幅に削減されたメモリ空間を用いて、リアルタイムにて、実現するためのキー拡張方法及び装置に向けられる。
【０００７】
本発明は、一連のラウンドキーの生成は、暗号エンジン内での暗号化或いは復号化アルゴリズムの実行と平行して、暗号化或いは復号化プロセスの実行時間にほとんど影響を与えることなく、より削減された量のハードウェアにて、リアルタイムにて遂行することができるという認識に依拠する。
【０００８】
一つの態様においては、本発明は、暗号化及び復号化エンジンの少なくと一方内で用いるための拡張キーの一連のラウンドキーを初期暗号キーから生成するための方法を提供する。この方法は、
初期キーのＮｋ個のワードをメモリ内のＮｋ個の位置に格納するステップと、
初期キーを暗号エンジンに供給し、第一の暗号ラウンドを遂行するステップと、
拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方はメモリから、反復的に取り出し、これら選択された第一と第二のワードから拡張キーの一連の後続ワードを生成するステップと、
拡張キーの生成されたワードを暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するステップと、
生成された後続ワードの一連のワードをメモリ内に、拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するステップと、を含む。
【０００９】
もう一つの態様においては、本発明は、暗号化及び復号化エンジンの少なくとも一方内で用いるための、拡張キーの一連のラウンドキーを、初期暗号キーから生成するためのラウンドキー発生器を提供する。この装置は、
初期キーのＮｋ個のワードを格納するためのメモリと、
拡張キーのある選択された第一のワードとある選択された第二のワードを、少なくとも一方はメモリから、反復的に取り出し、こうして選択された第一と第二のワードから拡張キーの一連の後続ワードを生成するための拡張プロセッサと、
拡張キーのこれら生成されたワードを暗号エンジンにラウンドキーとして供給し、後続の暗号ラウンドを遂行するためのための手段と、
こうして生成された後続ワードの一連のワードをメモリ内に、拡張キーの前に生成されたワードを上書きすることで、巡回的に格納するための手段と、を備える。
【００１０】
もう一つの態様においては、本発明は、ＡＥＳラウンド定数ファンクション発生器を提供する。この装置は、
レジスタの内容を左にシフトさせるための第一の制御入力と、
レジスタの内容を右にシフトさせるための第二の制御入力と、
シフトレジスタの内容を複数の可能な値の一つのプリセットするための第三の制御入力とを有するシフトレジスタを備える。
【００１１】
以下では、本発明の実施例について添付の図面を参照しながら説明する。
【発明を実施するための最良の形態】
【００１２】
図１には平文（plaintext）を暗号文（ciphertext）に暗号化（encryption）するためのＡＥＳアルゴリズムが示される。このＡＥＳアルゴリズムは、入力データの一連の１２８−ビットビットブロックに関して動作する１２８−ビット、１９２−ビット或いは２５６−ビットキーを用いて実現することができる。以下では、図１について、１２８−ビットキーを用いる基本実現の文脈内内で説明する。
【００１３】
入力平文１０の初期の１２８−ビットブロックが初期ラウンド１５において元の１２８−ビットキー１２とＸＯＲ−結合１１される。この初期ラウンド１５からの出力１３は、次に、暗号化ラウンド２８において、定義されるＡＥＳアルゴリズムによると、ＳｕｂＢｙｔｅｓ変換２０、ＳｈｉｆｔＲｏｗｓ変換２１及びＭｉｘＣｏｌｕｍｍｓ変換２２を含む複数の変換段内を反復的に通される。
【００１４】
ＭｉｘＣｏｌｕｍｎｓ変換２２からの出力は、新たな１２８−ビットラウンドキー２６とＸＯＲ−結合２３されるが、これら新たなラウンドキーは、初期キー１２から生成される。このＸＯＲ−結合からの出力は、暗号化ラウンド２８に帰還され、この中でさらなる回数だけ処理される。
【００１５】
この暗号化ラウンド２８を通じての一連の各反復に対して、新たなキー２６Θが、現存のラウンドキー２６からＡＥＳラウンドキースケジュールに従って生成される。
【００１６】
暗号化ラウンド２８の反復回数（Ｎｒ−１）は、１２８−ビット暗号化キーが用いられるときは９回となり、１９２−ビット暗号化キーが用いられるときは１１回となり、２５６−ビット暗号化キーが用いられるときは１３回となる。
【００１７】
ラウンド２８内を必要な回数（Ｎｒ−１）だけ通った後に、判定ボックス２４の制御下で最終ラウンドへと通される。この最終ラウンド３０は、もう一つのＳｕｂＢｙｔｅｓ変換３１、もう一つのＳｈｉｆｔＲｏｗｓ変換３２と、これに続く、この結果と前のラウンドキーから生成された最終ラウンドキー３６とのＸＯＲ−結合３３とから構成される。この出力はこの暗号化アルゴリズムの暗号文出力３９を構成する。
【００１８】
図１からわかるように、このＡＥＳ暗号化アルゴリズムを実現するためには、各ラウンド２８、３０に対して、新たなラウンドキーを初期キー１２から生成することを必要とされる。
【００１９】
この明細書を通じて、これらキーの数は、３２−ビットワードの数Ｎｋとして表現される。例えば、１２８−ビットなる初期暗号化キー１２、つまり、４×３２−ビットワードキーの場合はＮｋ＝４として表現され、”拡張（expanded）”キーは、１１×４個の３２−ビットワード、つまり、４４ワードから成り、Ｗ（０）．．．Ｗ（４３）として書き表され；１９２−ビットなる初期暗号キー（Ｎｋ＝６）の場合は、拡張キーは１３×４個の３２−ビットワード、つまり、５２ワードに増加し、これらはＷ（０）．．．Ｗ（５２）として書き表され；２５６−ビットなる初期暗号キー（Ｎｋ＝８）の場合は、拡張キーは１５×４個の３２−ビットワード、つまり、６０ワードに増加し、これらはＷ（０）．．．Ｗ（５９）として書き表される。
【００２０】
ＡＥＳ復号化（decryption）アルゴリズムを実行する際には、これらラウンドキーは、暗号化の場合と同一であるが、ただし、供給される順番が逆転される。
【００２１】
次に、図２を参照しながら、一連のラウンドキーを生成するための一般ＡＥＳキー拡張（expansion）アルゴリズムについて、１２８−ビットキー（キーのワード数Ｎｋ＝４個）の文脈内で説明する。理解できるように、この技法は、１９２−ビット（Ｎｋ＝６）及び２５６−ビット（Ｎｋ＝８）キーに対しても適用できる。
【００２２】
４個の３２−ビットワード：Ｗ（０）、Ｗ（１）、Ｗ（２）、及びＷ（３）から成る初期キー５０が適当なメモリ位置：５１０、５１１、５１２、５１３内にロードされる。従来の実現においては、このメモリは、５１ｎの所に、いったん生成された拡張キーの全てのワードを収容するために十分なスペースを含む。
【００２３】
この拡張キー内の４ワードから成る新たな各系列は、新たなラウンドキーから成り、以下では、”ストレッチ（stretch）”と呼ばれる。より具体的には、あるストレッチは、Ｗ（ｉ）からＷ（ｉ＋Ｎｋ）までから構成され、ここで、ｉはＮｋの整数倍から１を引いた値（Ｎｋ＝４の場合は、０、３、７等；Ｎｋ＝８の場合は、０、７、１５等）を表す。開始時には、初期キー５０が唯一のストレッチであり、第一のタスクは新たなストレッチの第一のワードを生成することから成るが、このため、判定ボックス５３は、”肯定（yes）”の経路を示す。
【００２４】
このキー拡張アルゴリズムの最初のパスにおいては、前のストレッチの最後のワード（５１３）が（５２において）抽出され、これらビットが左にシフトされ（ステップ５４）、ＡＥＳキー拡張アルゴリズムに従ってＳ−ボックス検索（S-box look-up）を用いて変換５５される。このＳ−ボックスファンクションは、ＡＥＳ  ＳｕｂＢｙｔｅｓ変換２０（図１）のそれに対するのと同一である。この結果としての３２−ビット出力５６の最初の８ビットのみがＡＥＳキースケジュールにて定義されるラウンド定数Ｒｃｏｎ５８とのＸＯＲ−結合５７により変換される。この動作からの出力６０が、次に、前のストレッチの最初のワード（つまり、５１０）とＸＯＲ−結合６２され、この結果、つまりＷ（４）がメモリの位置５１４に書き込まれる。
【００２５】
この流れ図を通じての第二のパスにおいては、この第二のストレッチの次のワードＷ（５）が生成される。これは、あるストレッチの第二のワードであるため、この流れ図の左側の経路が取られ、この新たに生成され、メモリ位置５１４に格納されたワードＷ（４）が、Ｗｔｍｐバッファ６０内に直接コピーされ、その後、これが、初期キー５０の次のワード５１１とＸＯＲ−結合６２され、こうして新たに生成されたワードＷ（５）は、（ステップ６３において）メモリ５１５内に書き込まれる。
【００２６】
この手続は、この左側経路をあと２回反復し、この第二のストレッチの最後の２つのワードＷ（６）とＷ（７）とを生成し、その後、右側の経路を用いて、第三のストレッチに対するサイクルを開始する。
【００２７】
結局の所、上からわかるように、各新たなストレッチの各ワードは、各ストレッチの第一のワードを除いて、直前のワードと前のストレッチの対応する位置内のワードとのＸＯＲ−結合から成り、各ストレッチの第一のワードについては、これは、直前のワード自身ではなく、用いられた直前のワードの関数となり、この関数は図２のステップ５４−５９に従って実行される。
【００２８】
１９２−ビット（Ｎｋ＝６）及び２５６−ビット（Ｎｋ＝８）キーに対して展開される原理も、各ストレッチが、それぞれ、６ワード或いは８ワード長であることを除いて、同一である。
【００２９】
４ワードから成る各一連のグループが、図１の暗号化手続の各一連のラウンド２８、３０に対するラウンドキーとして用いられる。復号化の際には、これらラウンドキーが逆順に加えられる。
【００３０】
本発明によると、一面においては、メモリ内には、同時に、元のキーのＮｋ個のワードと、拡張ラウンドキーの最も最近のＮｋ個のワードのみを保持することを必要とされる。これら最も最近に生成された４ワード（或いは、より一般的には、現在保持されているＮｋワード内の４つの一連のワード）がステップ２３或いは３３において暗号化エンジンに供給され、こうして保持されているＮｋワードは、図２との関連で説明したように新たなストレッチを生成するために用いられる。
【００３１】
これら新たなストレッチを暗号化エンジンに追い付くのに十分に高速に生成され、かつ、この生成が（あるストレッチの長さ（Ｎｋ＝４、６或いは８）とラウンドキーの長さ（＝４）との差の公差内で）暗号化エンジンと同期を維持され、最も最近に生成されたストレッチが暗号化エンジン内で現在要求されるラウンドキーを含む限り、非常に限られたメモリ容量及びバッファ要件を提供することのみを要求される。
【００３２】
図３に示されるように、ラウンドキー発生器１００は、等しい部分１０２、１０３に分割されたＲＡＭセクタ１０１を有し、各部分は、例えば、４×３２ビットワード（１２８−ビットキーアルゴリズムの場合）、６×３２ビットワード（１９２−ビットキー発生器の場合）、或いは８×３２ビットワード（２５６−ビットキーアルゴリズムの場合）なるサイズを有する。以下の説明を通じて、ラウンドキー発生器１００は、２５６−ビットキーアルゴリズムを扱う能力を有するものと想定されるが、この発生器はより小さなキー長を処理するように適合化することもできる。
【００３３】
簡便のために、これら２つの部分１０２及び１０３は、以下では、下側部分（lower half）１０３及び上側部分（upper half）１０２と呼ばれる。各部分は、ＯｆｆＳｅｔＨｉＲｄポインタ１０５よる読出しアクセスのためにマルチプレクサ１０４を介して参照される。ＯｆｆＳｅｔＨｉＲｄ＝０のときは下側部分１０３が読み出され；ＯｆｆＳｅｔＨｉＲｄ＝１のときは上側部分１０２が読み出される。ＲＡＭ１０１の下側部分１０３内には、初期暗号化キー５０が（つまり、Ｎｋ＝８の場合の最初のストレッチＷ（０）．．．Ｗ（７）が）位置Ｗ０．．．Ｗ７内に格納され；上側部分１０２内には、新たに計算されたストレッチ、例えば、Ｗ（８）．．．Ｗ（１５）が対応する上側部分の位置Ｗ０．．．Ｗ７内に格納される。ポインタＯｆｆＳｅｔＨｉＷｒ（図示せず）を用いて書き込まれている方のメモリ部分をポイントすることもできる。各一連のストレッチが生成され、暗号化エンジン内で用いられるのにつれて、次のストレッチ値（例えば、Ｗ（１６）．．．Ｗ（２３））が計算され、上側部分１０２内に上書きされる。
【００３４】
個々の位置Ｗ０．．．Ｗ７（下側部分）或いはＷ１．．．Ｗ７（上側部分）は、ＯｆｆＳｅｔＣｎｔカウンタ１１１により読出し及び書込み動作のために参照されるが、このカウンタ１１１は、３ビットカウンタから成り、上側部分内のワード位置及び下側部分内の対応する位置の少なくとも一方の一つをポイントする。一般には、ＯｆｆＳｅｔＣｎｔカウンタ１１１は、ｍｏｄｕｌｏ  Ｎｋアップ／ダウンカウンタとして実現される。
【００３５】
ラウンドキーカウンタ１１０は、今計算されたラウンドキー（つまり、現在のストレッチ）のカウントを維持する。状態マシーン１０６はラウンドキー生成プロセス全体の制御を行い、拡張プロセッサ１０７は、拡張ラウンドキー値（ワード）の計算を遂行する。
【００３６】
現在の平文ブロックに対する暗号化動作が完了すると、この手続は、例えば、下側部分１０３内の暗号化キーの拡張のため再開する。代わりに、復号化動作が要求される場合は、この復号化サイクルの最初のラウンドキーには、ＲＡＭの上側部分１０２からの最も最近計算されたラウンドキーが用いられ、このため、これが下側部分内に移動されるか、或いは上側部分から読み出される。その後の一連の復号化ラウンドキーは類似のやり方にて計算される。復号化ラウンドキー生成動作が完了すると、元の暗号化キーが返され、その後の暗号化動作のために、ＲＡＭ１０１の下側部分内に、再格納或いは保持される。
【００３７】
図４は拡張プロセッサ１０７のブロック図を示す。拡張プロセッサ１０７は、第一の３２−ビットレジスタＷ１２０と、第二の３２−ビットレジスタＷｔｍｐ１２１とを備える。各レジスタＷ１２０、Ｗｔｍｐ１２１は、ＲＭＡ１０１から直接に満たすことができる。Ｗｔｍｐ１２１は、３２−ビットの、二入力マルチプレクサ１２２によっても帰還線１２３を介して満たされる。拡張プロセッサ１０７は、更に、図２の変換５４、５５、５８との関連で説明したような変換ＲｏｔａｔｅＷｏｒｄ１５４、ＳｕｂＷｏｒｄ１５５、Ｒｃｏｎ１５８を遂行するための特別な処理論理１５０を含む。３２−ビットマルチプレクサ１２４は、この特別な処理論理１５０からの出力を選択し、或いはレジスタＷｔｍｐ１２１からの直接に、３２−ビット幅ＸＯＲゲート１６２への入力を供給する。
【００３８】
暗号化動作の開始において、初期キー５０（Ｗ（０）．．．Ｗ（７））が、ＲＡＭ１０１内の、下側部分１０３の、位置Ｗ０．．．Ｗ７内にロードされる。初期キー５０の第一のワードＷ（０）は、ＲＡＭ１０１からバッファ（Ｗ）１２０内にロードされ、初期キー５０の最後のワードＷ（Ｎｋ−１）は、バッファＷｔｍｐ１２１内にロードされる。より一般的には、暗号化の一連のラウンドに対して、Ｗ（ｉ）はバッファ１２０内にロードされ、Ｗ（ｉ＋Ｎｋ）の最後に計算され値がＷｔｍｐ１２１内に格納される。
【００３９】
図２との関連で説明されたように、暗号化のためのキー拡張プロセスの際に、以下の式の一つが拡張ラウンドキーの各新たなワードＷ（ｉ）を生成するために適用される：
つまり；
後に示す場合（つまり、特別な処理１５０を行なわない場合）を除いて、
規則１：  Ｗ（ｉ）＝Ｗ（ｉ−Ｎｋ）＠Ｗ（ｉ−１）
が適用される。ここで、記号＠は排他的論理和を示す。つまり、例外として、
ｉ  ｍｏｄ  Ｎｋ＝０（各ストレッチの開始時）の場合は、
規則２：  Ｗ（ｉ）＝Ｗ（ｉ−Ｎｋ）＠ＳｕｂＷｏｒｄ（ＲｏｔＷｏｒｄ（Ｗ（ｉ−１）））＠Ｒｃｏｎ（ｉ／Ｎｋ）
が適用され；
ｉ  ｍｏｄ  Ｎｋ＝４及びＮｋ＝８（各８ワードストレッチの中央サイクル）の場合は、
規則３：  Ｗ（ｉ）＝Ｗ（ｉ−Ｎｋ）＠ＳｕｂＷｏｒｄ（Ｗ（ｉ−１））
が適用される。
【００４０】
ここで、
ＲｏｔＷｏｒｄ（Ｗｔｍｐ）はＷｔｍｐ１２１のバイト単位の回転を表し、
ＳｕｂＷｏｒｄはＡＥＳ  Ｓ−ｂｏｘ変換を表し、
ＲｃｏｎはＡＥＳ標準において定義されるラウンド定数（round constant）を表し、これは、各ストレッチ内の第一のワードの第一のバイトのみに適用され、他のバイトは変更を受けることなく、パスされ；
ｉは、０．．．４Ｎｒ＋３を表し、
Ｎｋ＝４の場合は、ｉ＝０．．．４３
Ｎｋ＝６の場合は、ｉ＝０．．．５１、そして
Ｎｋ＝８の場合は、ｉ＝０．．．５９となる。
【００４１】
換言すれば、各新たなストレッチの第一のワードに対しては、ステップ５４−５９の特別な処理が適用され、Ｗ（Ｎｋ）は、レジスタ１２０からのＷ（０）と変換されたＷ（Ｎｋ−１）とのＸＯＲ−結合６２として計算される。各ストレッチの中央ワードに対しては、Ｎｋ＝８の場合は、ステップ５５の特別の処理のみが施される。そして、各ストレッチ内の他のワードに対しては、レジスタ１２０の内容とレジスタ１２１の内容が、ステップ５４からステップ５９の特別の処理を施すことなく、直接にＸＯＲ−結合される。
【００４２】
図４に示されるように、レジスタＷ１２０にはＷ（０）がロードされ、レジスタＷｔｍｐ１２１にはＷ（Ｎｋ−１）（例えば、Ｎｋ＝８の場合はＷ（７））がロードされる。次に、計算の結果、ここではＷ（Ｎｋ）（例えば、Ｗ（８））がＸＯＲゲート１６２から出力され、ＲＡＭ１０１（例えば、上側部分の位置Ｗ０の所）と、レジスタＷｔｍｐ１２１の両方に格納される。次に、レジスタＷ１２０にはＷ（１）がロードされ、他方、レジスタＷｔｍｐ１２１はＷ（Ｎｋ）（例えば、Ｗ（８））を保持する。次に、Ｗ（Ｎｋ＋１）（例えば、Ｗ（９））が計算され、ＲＡＭ１０１（上側部分の位置Ｗ１の所）とレジスタＷｔｍｐ１２１に格納される。
【００４３】
一般的には、レジスタＷ１２０はＲＡＭ１０１からＷ（ｉ）をロードされ、他方、レジスタＷｔｍｐ１２１はＷ（ｉ＋Ｎｋ−１）なる値を保持する。次に、Ｗ（ｉ＋Ｎｋ）が計算され、ＲＭＡ１０１内の、上側部分の位置Ｗ（ｉ＋Ｎｋ）  ｍｏｄ  ８（つまり、新たな値は上側部分１０２内に巡回的に格納される）と、Ｗｔｍｐ１２１の両方に格納される。
【００４４】
このキー拡張プロセスは、暗号化プロセッサ１３０と並列にランするが、暗号化プロセッサは、好ましくは、１２８ビット幅のブロックベースではなく、逐語的に（word-by-word）動作する。こうして、Ｗ１２０の内容は直接に暗号化プロセッサにパスされ、暗号化プロセスのための入力として直ちに用いられる。代替として、暗号化プロセッサ１３０は、ラウンドキーの要求されるワードを取り出すために、ＲＡＭ１０１に直接にアクセスできるように接続することもできる。この構成では、暗号化エンジン１３０の動作サイクルと拡張プロセッサ１０７の動作サイクルとの間の時間的関係はより大きな柔軟となる。
【００４５】
動作の各サイクルに対して、Ｗｔｍｐ１２１の新たな値は、後に示す場合を除いて、
Ｗｔｍｐ＝Ｗｔｍｐ＠Ｗ
となる。つまり：例外として、ｉ  ｍｏｄ  Ｎｋ＝０の場合は、
Ｗｔｍｐ＝ＳｕｂＷｏｒｄ（ＲｏｔＷｏｒｄ（Ｗｔｍｐ））＠Ｒｃｏｎ（ｉ／Ｎｋ）＠Ｗ
となり、ｉ  ｍｏｄ  Ｎｋ＝４とＮｋ＝８の場合は、
Ｗｔｍｐ＝ＳｕｂＷｏｒｄ（Ｗｔｍｐ）＠Ｗ
となる。
【００４６】
このキー拡張プロセスの最中、ポインタＯｆｆＳｅｔＨｉＲｄ１０５は、ＲＡＭ１０１の、上側部分１０２或いは下側部分１０３内の、ベースワード位置をポイントする。読出し位置の制御は、この１ビットポインタによって実現され、読出しのために、それぞれ、メモリ１０１の、上側部分１０２或いは下側部分１０３が選択される。こうして、キー拡張の第一のサイクルの際（つまり、第二のストレッチの計算の際）には、初期キーワードＷ（０）．．．Ｗ（７）は下側部分１０３から読み出される。つまり、読出しフラッグ１０５はＯｆｆＳｅｔＬｏを選択する。暗号化キー拡張の際には、これらラウンドキーの新たな値は、常に上側部分１０２内に書込まれる。
【００４７】
開始時においては、以下の初期化設定が適用される：
ＯｆｆＳｅｔＣｎｔ＝０、ＯｆｆＳｅｔＨｉＲｄ＝０、ＯｆｆＳｅｔＨｉＷｒ＝１、ＲｎｄＣｎｔ＝４Ｎｒ＋３
ＲＡＭ１０１がＯｆｆＳｅｔＨｉＲｄとＯｆｆＳｅｔＣｎｔにて決定されるアドレスＷＮｋ−１（つまり、ＯｆｆＳｅｔＣｎｔ＋Ｎｋ−１）の所から読み出され、Ｗｔｍｐ１２１内に格納される。
【００４８】
次に、以下の手続がＮｋ回実行される：
１．ＲＡＭ１０１の、下側部分１０３のＷｏｆｆＳｅｔＣｎｔに対応する所から読み出し、これをＷ１２０に格納する。
２．次の拡張キーワードを生成し、これをＷｔｍｐ１２１と、メモリ（ＲＡＭ）１０１の、上側部分１０２の、ＷｏｆｆＳｅｔＣｎｔ１１１に対応する所に書込む。
３．ＯｆｆＳｅｔＣｎｔ１１１を増分し、ＲａｄＣｎｔ１１０を減分する。
４．Ｎｋ回のサイクルの最初のサイクルの後にのみ、Ｒｃｏｎ１５８を更新する。
【００４９】
こうして、現在、下側部分１０３からの初期キーの全てのワードが用いられたこととなる。すると、ＯｆｆＳｅｔＨｉＲｄが１にセットされるが、このため、全ての後続ラウンドキーワードは上側部分１０２から読み出されることとなる。例えば、Ｎｋ＝８の場合は、メモリ１０１は、アドレスＷ８の所に、Ｗ（８）を含む。
【００５０】
次に、以下の手続がＲｎｄＣｎｔ＝Ｎｋ−１となるまで、反復実行される。
１．（ＯｆｆＳｅｔＨｉ＝１であるため）ＲＡＭの、上側部分の、ＯｆｆＳｅｔＣｎｔに対応する所から読み出し、これをＷに格納する。
２．次の拡張キーワードを生成し、これをＷｔｍｐと、ＲＡＭの、上側部分の、ＯｆｆＳｅｔＣｎｔに対応する所に書込む。
３．ＯｆｆＳｅｔＣｎｔ＝０となったとき、Ｒｃｏｎを更新する
３．ＯｆｆＳｅｔＣｎｔを増分し、ＲｎｄＣｎｔを減分する。
【００５１】
Ｎｋ＝４の場合は、  最後の計算は、
Ｗ（４３）＝Ｗ（３９）＠Ｗ（４２）、  ＯｆｆＳｅｔＣｎｔ＝４３  ｍｏｄ  ４＝３
となり：Ｎｋ＝６の場合は、  最後の計算は、
Ｗ（５１）＝Ｗ（４５）＠Ｗ（５０）、  ＯｆｆＳｅｔＣｎｔ＝５１  ｍｏｄ  ６＝３
となり；Ｎｋ＝８の場合は、  最後の計算は、
Ｗ（５９）＝Ｗ（５１）＠Ｗ（５８）、ＯｆｆＳｅｔＣｎｔ＝５９  ｍｏｄ  ８＝３
となる。
【００５２】
こうして、Ｎｋに関係なく、最後のラウンドキーは、必ず、ＯｆｆＳｅｔＣｎｔ＝３に対応する所に格納されることとなる。
【００５３】
この時点で、最後のＮｋ個のラウンドキーワードが暗号化プロセッサ１３０によって用いられたこととなるが、ただし、拡張プロセッサによって生成されるべきラウンドキーワードはこれ以上存在しない。このため、以下の手続がＲｎｄＣｎｔ＝０となるまで反復実行される。
１．ＲＡＭの、上側部分の、ＷｏｆｆＳｅｔＣｎｔに対応する所から読み出し、これをＷに格納する。
２．ＯｆｆＳｅｔＣｎｔを増分し、ＲａｄＣｎｔを減分する。
【００５４】
現在、ＲＡＭ１０１の下側部分１０３は、初期暗号化キー（Ｎｋ個のワード）を含み、ＲＡＭ１０１の上側部分１０２は、拡張キーの最後のＮｋ個のワードを含むことに注意する。拡張キーのこれら最後のＮｋ個のワードは、復号化キーの最初のＮｋワードとして用いられる。
【００５５】
こうして、現在、ＲＡＭ１０１は、暗号化のための初期ラウンドキーと、復号化のための最初のラウンドキーを含む。従って、暗号エンジンによって遂行されるべき次の動作が暗号化動作であるか、復号化動作であるかは問題とならず、この拡張プロセッサは、キーの拡張動作を、上側部分１０２からも、下側部分１０３からも、開始することができる。
【００５６】
復号化の際には、暗号化ラウンドキー（Encryption Round Keys）が逆順に加えられる。
【００５７】
従って、本発明の動作においては、復号化の際には、Ｗ（ｉ＋Ｎｋ）及びＷ（ｉ＋Ｎｋ−１）からＷ（ｉ）を生成することが必要となる。
【００５８】
キー拡張プロセスを逆転させるためには、
全てのｉについて、後に示す場合を除いて、
規則１：  Ｗ（ｉ−Ｎｋ）＝Ｗ（ｉ）＠Ｗ（ｉ−１）
が要求される。つまり、例外として、ｉ  ｍｏｄ  Ｎｋ＝０の場合は、
規則２：  Ｗ（ｉ−Ｎｋ）＝Ｗ（ｉ）＠ＳｕｂＷｏｒｄ（ＲｏｔＷｏｒｄ（Ｗ（ｉ−１）））＠Ｒｃｏｎ（ｉ／Ｎｋ）
が適用され、ｉ  ｍｏｄ  Ｎｋ＝４及びＮｋ＝８の場合は、
規則３：  Ｗ（ｉ−Ｎｋ）＝Ｗ（ｉ）＠ＳｕｂＷｏｒｄ（Ｗ（ｉ−１））
が適用される。
【００５９】
全てのＷ（ｉ−Ｎｋ）及びＷ（ｉ）は位置を交換されるが、ただし、第二の複合入力１２２は、暗号化の場合と同一であることに注意する。
【００６０】
例えば、Ｎｋ＝４の場合を例にとって説明する。暗号化の際に生成された最後のＷは、Ｗ（４３）であった。復号化キー拡張の際には、Ｗがロードされる初回には、ＷはＲＡＭ１０１からロードされ；その後は、後続のＷは、Ｗｔｍｐ１２１から得られる。
【００６１】
こうして、第一のステップにおいては、Ｗ１２０には、（上側部分１０２の、ＯｆｆＳｅｔＣｎｔ  ３に対応するＷ１１の所に位置する）Ｗ（４３）がロードされ、Ｗｔｍｐ１２１には、（上側部分１０２の、ＯｆｆＳｅｔＣｎｔ  ２に対応するＷ１０の所に位置する）Ｗ（４２）がロードされる。次に、
Ｗ（３９）＝Ｗ（４３）＠Ｗ（４２）
が計算され、この結果がＲＡＭ１０１の、下側部分１０３の、Ｗ３の所に書込まれる。次に、Ｗｔｍｐ１２１の内容がＷ１２０にシフトされ、こうして、Ｗ１２０はＷ（４２）を保持することとなり、その後、Ｗｔｍｐ１２１にはＷ（４１）がロードされる。
【００６２】
次のサイクルにおいて、
Ｗ（３８）＝Ｗ（４２）＠Ｗ（４１）
計算され、この結果がＲＡＭ１０１のＷ１の所に書込まれる。次に、Ｗｔｍｐ１２１の内容がシフトされＷ１２０に書込まれる。こうして、Ｗ１２０はＷ（４１）を保持することとなり、その後、Ｗｔｍｐ１２１にはＷ（４０）がロードされる。このサイクルが一連のＷに対して反復される。
【００６３】
一般には、レジスタＷ１２０には、ＲＡＭ１０１（或いはＷｔｍｐ１２１）からＷ（ｉ）がロードされ、レジスタＷｔｍｐ１２１は、ＲＡＭ１０１からＷ（ｉ−１）がロードされる。次に、Ｗ（ｉ−Ｎｋ）が計算され、この結果はＲＡＭ１０１の下側部分１０３の、位置Ｗｉ  ｍｏｄ  ８の所に格納され、Ｗｔｍｐ１２１の内容がＷ１２０に移される。
【００６４】
この復号化キー拡張プロセスは、復号化プロセッサと並列にランし、復号化プロセッサは、好ましくは、１２８ビット幅のブロックベースではなく、逐語的にて動作する。つまり、Ｗ１２０の内容は復号化エンジン１４０にもパスされ、復号化動作のための入力として用いられる。
【００６５】
開始時においては、以下の初期化設定が適用される：
ＯｆｆＳｅｔＣｎｔ＝３、ＯｆｆＳｅｔＨｉＲｄ＝１、ＯｆｆＳｅｔＨｉＷｒ＝０、ＲｎｄＣｎｔ＝４Ｎｒ＋３
ＲＡＭ１０１がアドレスＯｆｆＳｅｔＣｎｔ（ＯｆｆＳｅｔＣｎｔ＝３、これは、Ｗ（４Ｎｒ＋３）、例えば、Ｎｋ＝４の場合は、Ｗ（４３）を与える）の所から読み出され、Ｗ１２０内に格納される。
【００６６】
次に、以下の手続がＮｋ−１回実行される：
１．ＲＡＭの、上側部分の、ＷｏｆｆＳｅｔＣｎｔ−  １  ｍｏｄ  Ｎｋに対応する所から読み出し、これをＷｔｍｐ（Ｎｋ＝４の場合は、（Ｗ（４２）、Ｗ（４１）及びＷ（４０））に格納する。
２．次の拡張キーワードを生成し、これをＲＡＭの、下側部分の、ＯｆｆＳｅｔＣｎｔに対応する所（Ｎｋ＝４の場合は、Ｗ（３９）、Ｗ（３８）及びＷ（３７））に書込む。
３．Ｗｔｍｐの内容をＷに移す。
４．ＯｆｆＳｅｔＣｎｔを減分し、ＲｎｄＣｎｔを減分する。
【００６７】
こうして、現在、上側部分からの全てのワードが用いらたこととなる。このため、ＯｆｆＳｅｔＨｉＲｄが０にセットされ、これに続く全てのキーワードは下側部分から読み出されることとなる。例えば、Ｎｋ＝４の場合は、メモリの、上側部分の、アドレス３の所は、Ｗ（３９）を含む。
【００６８】
次に、以下の手続がＲｎｄＣｎｔ＝Ｎｋ−１となるまで、反復実行される。
１．ＲＡＭの、下側部分のＷＯｆｆＳｅｔＣｎｔ−１  ｍｏｄ  Ｎｋの所から読み出し、これをＷｔｍｐの所に格納する。
２．次のラウンドキーワードを生成し、これをＷｔｍｐと、メモリの、下側部分の、ＯｆｆＳｅｔＣｏｎに対応する所に書込む。
３．Ｗｔｍｐの内容をＷに移す。
４．ＯｆｆＳｅｔＣｎｔ＝０となったとき、Ｒｃｏｎを更新する
５．ＯｆｆＳｅｔＣｎｔとＲｎｄＣｎｔの両方を減分する。
【００６９】
この時点において、最後のＮｋ個のラウンドキーワードが復号化プロセッサ１４０によって用いられたこととなるが、ただし、これ以上ラウンドキーワードを生成することは必要とされない。このため、以下の手続がＲｎｄＣｎｔ＝０となるまで反復実行される。
１．ＲＡＭの、下側部分の、ＷｏｆｆＳｅｔＣｎｔ−１ｍｏｄ  Ｎｋに対応する所から読み出し、これをＷｔｍｐに格納する。
２．Ｗｔｍｐの内容をＷに移す。
３．ＯｆｆＳｅｔＣｎｔとＲｎｄＣｎｔの両方を減分する。
【００７０】
最も最後の読出しは、これは必要とされないため、省かれることに注意する。
【００７１】
一つの好ましい実施例においては、キー拡張プロセスにおけるＳｕｂＷｏｒｄファンクション５５、１５５は、暗号化／復号化プロセスのＳｕｂＢｙｔｅｓ変換２０、３１を実現するためのそれと同一のハードウェアにて実現される。実用上は、こうしても、暗号化／復号化プロセスはほとんど遅延を受けないことがわかっている。より詳細には、Ｎ番目のラウンドに一度だけ、キー拡張プロセッサと暗号化／復号化プロセスとが同一のハードウェアを求めて競合するに過ぎない。
【００７２】
キー拡張プロセスと暗号プロセスとが、逐語的にて固定的に進行される（lock step）場合、キー拡張エンジンと暗号エンジンは、次のラウンドに進む前に互いに待ち合わせることを要求され、また、Ｎ番目のラウンドの際には、Ｓ−Ｂｏｘ変換ファンクションに別個にアクセスするために待ち合わせすことを要求される。ただし、暗号エンジンがＳｈｉｆｔＲｏｗ変換２１或いはＭｉｘＣｏｌｕｍ変換２２を遂行している間に、キー拡張プロセッサは、Ｓ−Ｂｏｘハードウェアを用いることができる。
【００７３】
効率的な双方向動作のために要求されるメモリ１０１の最小量は、２Ｎｋワードであり、半分は、暗号化キーを格納するため、他の半分は、復号化キーを格納するために用いられる。
【００７４】
暗号化の際には、最初のＮｋ個のワードは、暗号化のための（下側）部分から取り出され；生成されたラウンドキーワードは全て復号化のための（上側）部分に書込まれる。このため、暗号化が終わった時点で、復号化のための（上側）部分は、復号化キーを保持することとなる。
【００７５】
復号化の際には、最初のＮｋ個のワードは、復号化のための（上側）部分から取り出されが、これが、復号化のための”初期キー”となる。生成されたラウンドキーは全て暗号化のための（下側）部分に書込まれる。これは、暗号化キーが一時的に上書きされることを意味するが、この暗号化キーは、復号化の後に、再生される。復号化キーは、上書きされることはない。
【００７６】
こうして、最初の暗号化プロセスの後、キー拡張プロセッサは、下側部分１０３或いは上側部分１０２のいずれかから開始することを選択することで、直ちに、拡張暗号化キー或いは拡張復号化キーを生成することができる。新たなキーを用いての、最初の動作では、復号化キーを生成するために、暗号化動作を遂行することが必要となる。
【００７７】
メモリの量を、高々、Ｎｋ個のワードまで低減することもできる。ただし、これは、複数の連続する暗号化或いは復号化動作が必要とされる場合は、初期暗号化（或いは復号化）キーを生成するために、各動作の間に、ダミーの復号化或いは暗号化動作を挿入することが必要となるために、あまり効率的でない。一般には、これはあまり得策ではない。
【００７８】
状態マシーン１０６は、様々なレジスタ及びカウンタを以下のように制御するが、これは、Ｎｋ＝４、６或いは８の全てのケースに適用できるものである。
【００７９】
３−ビットアップ／ダウンカウンタＯｆｆＳｅｔＣｎｔ１１１は、メモリ１１１の各半分に対するアドレスをポイントする。これは、暗号化の際には上に向かってカウントし；Ｎｋ−１に達すると、再び０にリセットされる。これは、復号化の際は下に向かってカウントし；０に達すると、Ｎｋ−１にリセットされる。
【００８０】
ＯｆｆＳｅｔＣｎｔ＝０の場合は、Ｗ（ｉ）に対して規則２が適用される。ＯｆｆＳｅｔＣｎｔ＝４、かつ、Ｎｋ＝８の場合は、規則３が適用される。ＯｆｆＳｅｔＣｎｔがこれ以外値を有する場合は、全て、規則１が適用される。
【００８１】
１ビット可変（1-bit variable）ＯｆｆＳｅｔＨｉＲｄ１０５は、暗号化の際、最初に（最初のＮｋ回の読出しに対して）、ＲＡＭ１０１の下側部分１０３をポイントするようにセットされ、その後の全ての読出しに対しては、ＲＡＭ１０１の上側部分１０２をポイントするようにセットされる。復号化の際には、ＯｆｆＳｅｔＨｉＲｄ１０５は、最初に（最初のＮｋ回の読出しに対して）、ＲＡＭ１０１の上側部分１０２をポイントするようにセットされ、その後の全ての読出しに対しては、ＲＡＭ１０１の下側部分１０３をポイントするようにセットされる。１ビット可変ＯｆｆＳｅｔＨｉＷｒは、暗号化の際は、全ての書込みに対して、ＲＡＭ１０１の上側部分１０２をポイントするようにセットされ、復号化の際には、全ての書込みに対して、ＲＡＭ１０１の下側部分１０３をポイントするようにセットされる。６−ビットダウンカウンタＲｎｄＣｎｔ１１０は、ラウンドの回数をカウントする。
【００８２】
図２に再び戻り、ラウンド定数Ｒｃｏｎ５８は、各サイクルの度に、つまり、それが用いられる度に、（ステップ５９）において更新される必要がある。
【００８３】
最初のサイクルに対しては、Ｒｃｏｎ［１］＝１とされる。その後、各サイクルの後に、Ｒｃｏｎの値は
Ｒｃｏｎ［ｉ／Ｎｋ］＝ｘｔｉｍｅ（Ｒｃｏｎ［ｉ／Ｎｋ−１］
となるように更新される：つまり、Ｒｃｏｎの前の値が左にシフトされ、最上位ビット＝１となると、１６進値の１ＢがＲｃｏｎに加えられる。
【００８４】
ＡＥＳ仕様によると、ファンクションＲｃｏｎ［ｉ／Ｎｋ］が、
ｉ  ｍｏｄ  Ｎｋ＝０、かつ、Ｎｋ≦ｉ＜Ｎｂ（Ｎｒ＋１）の間において呼出される。ここで、Ｎｋ、Ｎｂ、Ｎｒ、Ｎｂ（Ｎｒ＋１）は、以下のような関係を有する。
【表１】
2005531023.tif 000003
【００８５】
具体的には
Ｎｋ＝４の場合は、Ｒｃｏｎ［ｉ／Ｎｋ］は、ｉ＝４，８．．．４０のとき、つまり、１０回呼出され、最後の値は、３６ｈとなり；
Ｎｋ＝６の場合は、Ｒｃｏｎ［ｉ／Ｎｋ］は、ｉ＝６，１２，．．．４８のとき、つまり、８回呼出され、最後の値は、８０ｈとなり；
Ｎｋ＝８の場合は、Ｒｃｏｎ［ｉ／Ｎｋ］は、ｉ＝８，１６，．．．５６のとき、つまり、７回呼出され、最後の値は、４０ｈとなる。
【００８６】
ここで、ｉ／ＮｋとＲｃｏｎ［ｉ／Ｎｋ］は、以下のような関係を有する。
【表２】
2005531023.tif 000004
【００８７】
一つの好ましい実施例においては、ＲＣｏｎファンクション（機能）５８、５９は、８ビットシフトレジスタとして実現され、これは、左方向（暗号化のため）と右方向（復号化のため）の両方にシフトできるようにされる。このシフトレジスタは、以下の値、つまり、０１ｈ、１Ｂｈ、３６ｈ、及び４０ｈにプリセットすることができる。
【００８８】
このシフトレジスタは、暗号化のためには、０１ｈにプリセットされ；これは、８０ｈに到達するまで左にシフトし、その時点で１Ｂｈにプリセットされる。
【００８９】
このシフトレジスタは、復号化のためには、Ｎｋ＝４の場合は３６ｈに、Ｎｋ＝６の場合は８０ｈに、Ｎｋ＝８の場合は４０ｈにプリセットされ；これは、１Ｂｈに到達するまで右にシフトし、その時点で８０ｈにプリセットされる。
【００９０】
こうして、このシフトレジスタは、結局、３つの制御入力を有することとなる。第一の制御入力は、このレジスタの左へのシフト（ビットの回転）を実行し、これは、暗号化キー拡張の際に、各サイクルにおいて用いられる。第二の制御入力は、このレジスタの右へのシフト（ビットの回転）を実行し、これは、復号化キー拡張の際に、各サイクルにおいて用いられる。第三の制御入力は、このレジスタの値を、レジスタの現在の値及び方向（暗号化か復号化か）に従って、複数の所定の値のある一つにプリセットするために用いられる。
【００９１】
本発明は、一般には、拡張キーの一連のラウンドキーワードを、初期キーから、生成するための方法を提供するが、この方法によると、こうして生成された一連のラウンドキーワードは、メモリ内に、実質的に、これらが一連のラウンドキーワードの生成のため、及び暗号プロセスの並列動作のために、使用するために要求される期間に渡ってのみ維持される。
【００９２】
説明の好ましい実施例においては、初期キーワードもメモリ内に維持される。
【００９３】
添付のクレームの範囲から逸脱することなく、他の態様も可能である。
【図面の簡単な説明】
【００９４】
【図１】ＡＥＳブロック暗号アルゴリズムを用いての暗号化動作の実現を解説する流れ図である。
【図２】暗号化動作の際に要求される複数のラウンドキーとして用いられる拡張暗号化キーを生成するために用いられるＡＥＳラウンドキースケジュールの流れ図である。
【図３】本発明によるラウンドキー発生器の略ブロック図である。
【図４】暗号化の際に一連のラウンドキーを生成するためのキー拡張プロセッサの略ブロック図である。
【図５】平文化の際に一連のラウンドキーを生成するためのキー拡張プロセッサの略ブロック図である。
【図１】
2005531023.tif 000005
【図２】
2005531023.tif 000006
【図３】
2005531023.tif 000007
【図４】
2005531023.tif 000008
【図５】
2005531023.tif 000009
【国際調査報告】
2005531023.tif 000010
2005531023.tif 000011
2005531023.tif 000012
2005531023.tif 000013
2005531023.tif 000014