(57)【要約】【課題】処理の効率を高める。【解決手段】所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張装置において、演算実行部と、多段構成のレジスタを有するレジスタ部とを備え、レジスタ部には、Ｍを正整数として、鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個設け、各レジスタ集合には、要素暗号化鍵レジスタと、要素復号化鍵レジスタと、要素シフトレジスタを備え、暗号化または復号化が終わったときに、復号化または暗号化のための使用順序にしたがって、複数のレジスタ集合内で、要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、初期拡張鍵が格納された状態とする。【選択図】  図１
2005004048.tif 000002
【特許請求の範囲】
【請求項１】
所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張装置において、
前記拡張鍵系列中の端部に位置する１または複数の拡張鍵である初期拡張鍵の供給を契機として、繰り返し同じ演算処理を実行することで、前記拡張鍵系列の各拡張鍵を生成する演算実行部と、
前記拡張鍵を格納する多段構成のレジスタを有するレジスタ部とを備え、
当該レジスタ部には、Ｍを正整数として、前記鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個設け、
各レジスタ集合には、
前記拡張鍵系列のうち暗号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素暗号化鍵レジスタと、
前記拡張鍵系列のうち復号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素復号化鍵レジスタと、
前記暗号化時または復号化時の使用順序にしたがって、逐次、前記初期拡張鍵または前記拡張鍵系列中で初期拡張鍵以降に位置する各拡張鍵を格納する要素シフトレジスタを備え、
暗号化もしくは復号化が終わったとき、または暗号化時もしくは復号化時の使用順序にしたがった拡張鍵の生成が終わったときに、復号化または暗号化のための使用順序にしたがって、複数の前記レジスタ集合内で、前記要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、前記初期拡張鍵が格納された状態であることを特徴とする鍵拡張装置。
【請求項２】
請求項１の鍵拡張装置において、
前記鍵サイズの異なる複数種類の秘密鍵に対応するため、鍵サイズが最大の秘密鍵に対応する数の前記レジスタ集合を設け、
各レジスタ集合のうち、各種類の秘密鍵に関して前記端部に対応する位置のレジスタ集合の要素シフトレジスタの出力は、前記演算実行部に接続することを特徴とする鍵拡張装置。
【請求項３】
所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張方法において、
演算実行部が、前記拡張鍵系列中の端部に位置する１または複数の拡張鍵である初期拡張鍵の供給を契機として、繰り返し同じ演算処理を実行することで、前記拡張鍵系列の各拡張鍵を生成し、
レジスタ部に属する多段構成の各レジスタが前記拡張鍵を格納する場合、
当該レジスタ部には、Ｍを正整数として、前記鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個設け、
各レジスタ集合には、
前記拡張鍵系列のうち暗号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素暗号化鍵レジスタと、
前記拡張鍵系列のうち復号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素復号化鍵レジスタと、
前記暗号化時または復号化時の使用順序にしたがって、逐次、前記初期拡張鍵または前記拡張鍵系列中で初期拡張鍵以降に位置する各拡張鍵を格納する要素シフトレジスタを設けておき、
暗号化もしくは復号化が終わったとき、または暗号化時もしくは復号化時の使用順序にしたがった拡張鍵の生成が終わったときに、復号化または暗号化のための使用順序にしたがって、複数の前記レジスタ集合内で、前記要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、前記初期拡張鍵が格納された状態であることを特徴とする鍵拡張方法。
【請求項４】
請求項３の鍵拡張方法において、
前記鍵サイズの異なる複数種類の秘密鍵に対応するため、鍵サイズが最大の秘密鍵に対応する数の前記レジスタ集合を設け、
各レジスタ集合のうち、各種類の秘密鍵に関して前記端部に対応する位置のレジスタ集合の要素シフトレジスタの出力は、前記演算実行部に接続することを特徴とする鍵拡張方法。
【請求項５】
所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張プログラムにおいて、コンピュータに、
前記拡張鍵系列中の端部に位置する１または複数の拡張鍵である初期拡張鍵の供給を契機として、繰り返し同じ演算処理を実行することで、前記拡張鍵系列の各拡張鍵を生成する演算実行機能と、
前記拡張鍵を格納する多段構成のレジスタを提供するレジスタ機能とを実現させ、
当該レジスタ機能は、Ｍを正整数として、前記鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個提供し、
各レジスタ集合には、
前記拡張鍵系列のうち暗号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素暗号化鍵レジスタと、
前記拡張鍵系列のうち復号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素復号化鍵レジスタと、
前記暗号化時または復号化時の使用順序にしたがって、逐次、前記初期拡張鍵または前記拡張鍵系列中で初期拡張鍵以降に位置する各拡張鍵を格納する要素シフトレジスタを含み、
暗号化もしくは復号化が終わったとき、または暗号化時もしくは復号化時の使用順序にしたがった拡張鍵の生成が終わったときに、復号化または暗号化のための使用順序にしたがって、複数の前記レジスタ集合内で、前記要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、前記初期拡張鍵が格納された状態であることを特徴とする鍵拡張プログラム。
【請求項６】
請求項５の鍵拡張プログラムにおいて、
前記鍵サイズの異なる複数種類の秘密鍵に対応するため、鍵サイズが最大の秘密鍵に対応する数の前記レジスタ集合を提供し、
各レジスタ集合のうち、各種類の秘密鍵に関して前記端部に対応する位置のレジスタ集合の要素シフトレジスタの出力は、前記演算実行機能に供給することを特徴とする鍵拡張プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は鍵拡張装置、鍵拡張方法および鍵拡張プログラムに関し、例えば、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）アルゴリズムの一部を構成する鍵拡張アルゴリズムを実現する場合などに適用して好適なものである。
【０００２】
【従来の技術】
ＡＥＳアルゴリズムは、従来使用されているＤＥＳアルゴリズムの後継暗号アルゴリズムとして２００１年１１月に標準化された。ＤＥＳアルゴリズムは、米国政府が認定したものであるが、例えば、ＩＰｓｅｃでは、各ＩＰｓｅｃベンダが自社の提供するＩＰｓｅｃ製品の暗号化アルゴリズムに関して、基本的に自由に採用、不採用を決定できるものの、ＥＳＰ仕様により、ＤＥＳだけは採用が義務づけられるなど、世界中で広く使用されているため、その後継暗号アルゴリズムであるＡＥＳアルゴリズムも、世界中で広く使用される可能性が高い。
【０００３】
ＡＥＳアルゴリズムは、ＤＥＳアルゴリズムと同様、慣用暗号系（共通鍵暗号方式）に属するアルゴリズムであるため、平文のデータを暗号化して送信する送信元通信装置と、暗号化されたデータを受信して平文のデータに復号化する宛先通信装置が、同じ鍵（秘密鍵）を持ち合うことによって、暗号通信が成立する。すなわち、ＡＥＳアルゴリズムでは、暗号化に用いる鍵（暗号化鍵）と、復号化に用いる鍵（復号化鍵）が同じである。
【０００４】
ＡＥＳアルゴリズムに関連する従来技術としては、例えば、下記の特許文献１に記載されたものがある。特許文献１には、ＡＥＳアルゴリズムの実装をコンパクトな回路で実現するための技術が記載されている。
【０００５】
【特許文献１】
特開２００３−１５５２２
【０００６】
【発明が解決しようとする課題】
ところで、ＡＥＳアルゴリズムの生成順序（使用順序）では、暗号化に際して過去の暗号化に使用したワーク鍵をもとに新たなワーク鍵を生成する操作を繰り返すことで、順次、必要なワーク鍵を生成して行く。ワーク鍵とは、実際に、前記平文データの暗号化に使用する暗号化鍵のことで、もとになる暗号化鍵（秘密鍵）に所定の処理を施すことによって必要な数だけ生成される。必要とされるワーク鍵の数は、暗号化処理の内容に応じて変わるが、ＤＥＳやＡＥＳのようなブロック暗号のための通信装置は、入力される平文のデータに対して暗号化処理を実行するデータ撹拌部と、前記ワーク鍵を生成する鍵拡張部（鍵スケジューラ部）を備えているが、データ撹拌部では、暗号化処理（または、復号化処理）を実行する際、同様な撹拌処理が繰り返し実行されるが、各撹拌処理ごとに別なワーク鍵が使用されるため、必要なワーク鍵の数は、データ撹拌部における撹拌処理の繰り返し数に等しい。
【０００７】
例えば、図２に示す例は秘密鍵のサイズが１２８ビットのケースに対応し、４４個のワーク鍵ＷＫ１〜ＷＫ４４が使用されている。図２において、図示しない鍵拡張部は、ワーク鍵ＷＫ４〜ＷＫ１（この場合、この４つのワーク鍵ＷＫ４〜ＷＫ１は初期鍵（暗号化時の初期鍵）でもある）をもとに、ワーク鍵ＷＫ５を生成し、ワーク鍵ＷＫ５〜ＷＫ２をもとに、ワーク鍵ＷＫ６を生成し、…、ワーク鍵ＷＫ４３〜ＷＫ４０をもとにワーク鍵ＷＫ４４を生成する。そして、前記データ撹拌部が暗号化処理を実行する際には、ワーク鍵ＷＫ１、ＷＫ２，ＷＫ３，…，ＷＫ４４の順番で使用する。
【０００８】
これに対し復号化では、鍵拡張部が生成し、データ撹拌部が復号化のために使用する個々のワーク鍵の値は同じであるが、順番が逆になる。例えば、図２に示す例では、当該鍵拡張部は、ワーク鍵ＷＫ４４〜ＷＫ４１（この場合、この４つのワーク鍵ＷＫ４４〜ＷＫ４１は初期鍵（復号化時の初期鍵）でもある）をもとに、ワーク鍵ＷＫ４０を生成し、ワーク鍵ＷＫ４３〜ＷＫ４０をもとに、ワーク鍵ＷＫ３９を生成し、…、ワーク鍵ＷＫ２〜ＷＫ５をもとにワーク鍵ＷＫ１を生成する。そしてデータ撹拌部が復号化処理を実行する際には、ワーク鍵ＷＫ４４，ＷＫ４３，ＷＫ４２，ＷＫ４１，…，ＷＫ１の順番で使用する。
【０００９】
このようなワーク鍵の使用形態は、静的なものと動的なものの２つに分けることができる。
【００１０】
静的な使用形態では、予めワーク鍵ＷＫ１〜ＷＫ４４のすべてを生成し保存しておき、必要なときに適宜、読み出して使用するのに対し、動的な使用形態では、必要なときに上述した生成順序にしたがって動的にワーク鍵を生成する。この場合、最初に生成される前記ワーク鍵ＷＫ５のもとになる４個のワーク鍵（暗号化時の初期鍵）ＷＫ４〜ＷＫ１だけは保存しておく必要がある。
【００１１】
静的な使用形態の場合には、４４個のワーク鍵ＷＫ１〜ＷＫ４４すべてを保存しておく必要があるため、記憶容量の節約の点では不利であるが、いつでも所望のワーク鍵を読み出して使用できる利点がある。例えば、スマートカードやＩＣタグのような、極めて小さな通信装置に保存する場合、ワーク鍵を保存しておくために消費する記憶容量が大きいことは、大きな不利益となる可能性が高い。
【００１２】
一方、動的な使用形態は、保存する必要があるワーク鍵が暗号化時の初期鍵にあたる４個だけと少ないため、記憶容量の節約の点では有利であるが、例えば、復号化を開始しようとする場合、復号化時の初期鍵であるワーク鍵ＷＫ４４〜ＷＫ４１は、暗号化時の生成順序ではあとのほうで生成されるから、暗号化時の初期鍵（ＷＫ１〜ＷＫ４）しかない状態で復号化時の初期鍵（ＷＫ４４〜ＷＫ４１）を得て復号化を開始するまでに、多くの処理と時間を要する可能性がある。また、そのワーク鍵を生成したときの通信装置の内部状態によっては、生成したワーク鍵を用いて実際に処理（例えば、復号化）を行うまでに、さらに内部状態を変更するための処理を必要とする可能性がある。
【００１３】
【課題を解決するための手段】
かかる課題を解決するために、第１の本発明では、所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張装置において、（１）前記拡張鍵系列中の端部に位置する１または複数の拡張鍵である初期拡張鍵の供給を契機として、繰り返し同じ演算処理を実行することで、前記拡張鍵系列の各拡張鍵を生成する演算実行部と、（２）前記拡張鍵を格納する多段構成のレジスタを有するレジスタ部とを備え、（３）当該レジスタ部には、Ｍを正整数として、前記鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個設け、各レジスタ集合には、（４）前記拡張鍵系列のうち暗号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素暗号化鍵レジスタと、（５）前記拡張鍵系列のうち復号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素復号化鍵レジスタと、（６）前記暗号化時または復号化時の使用順序にしたがって、逐次、前記初期拡張鍵または前記拡張鍵系列中で初期拡張鍵以降に位置する各拡張鍵を格納する要素シフトレジスタを備え、（７）暗号化もしくは復号化が終わったとき、または暗号化時もしくは復号化時の使用順序にしたがった拡張鍵の生成が終わったときに、復号化または暗号化のための使用順序にしたがって、複数の前記レジスタ集合内で、前記要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、前記初期拡張鍵が格納された状態であることを特徴とする。
【００１４】
また、第２の本発明では、所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張方法において、（１）演算実行部が、前記拡張鍵系列中の端部に位置する１または複数の拡張鍵である初期拡張鍵の供給を契機として、繰り返し同じ演算処理を実行することで、前記拡張鍵系列の各拡張鍵を生成し、（２）レジスタ部に属する多段構成の各レジスタが前記拡張鍵を格納する場合、当該レジスタ部には、Ｍを正整数として、前記鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個設け、各レジスタ集合には、（３）前記拡張鍵系列のうち暗号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素暗号化鍵レジスタと、（４）前記拡張鍵系列のうち復号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素復号化鍵レジスタと、（５）前記暗号化時または復号化時の使用順序にしたがって、逐次、前記初期拡張鍵または前記拡張鍵系列中で初期拡張鍵以降に位置する各拡張鍵を格納する要素シフトレジスタを設けておき、（６）暗号化もしくは復号化が終わったとき、または暗号化時もしくは復号化時の使用順序にしたがった拡張鍵の生成が終わったときに、復号化または暗号化のための使用順序にしたがって、複数の前記レジスタ集合内で、前記要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、前記初期拡張鍵が格納された状態であることを特徴とする。
【００１５】
さらに、第３の本発明では、所定の鍵サイズのビット長を有する共通鍵方式の秘密鍵をもとに所定数の拡張鍵からなる拡張鍵系列を生成し、暗号化時と復号化時で各拡張鍵の使用順序が逆になる鍵拡張プログラムにおいて、コンピュータに、（１）前記拡張鍵系列中の端部に位置する１または複数の拡張鍵である初期拡張鍵の供給を契機として、繰り返し同じ演算処理を実行することで、前記拡張鍵系列の各拡張鍵を生成する演算実行機能と、（２）前記拡張鍵を格納する多段構成のレジスタを提供するレジスタ機能とを実現させ、（３）当該レジスタ機能は、Ｍを正整数として、前記鍵サイズの１／Ｍの大きさの複数の要素レジスタから構成されるレジスタ集合を少なくともＭ個提供し、各レジスタ集合には、（４）前記拡張鍵系列のうち暗号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素暗号化鍵レジスタと、（５）前記拡張鍵系列のうち復号化時の使用順序において前記端部に属する初期拡張鍵を格納する要素復号化鍵レジスタと、（６）前記暗号化時または復号化時の使用順序にしたがって、逐次、前記初期拡張鍵または前記拡張鍵系列中で初期拡張鍵以降に位置する各拡張鍵を格納する要素シフトレジスタを含み、（７）暗号化もしくは復号化が終わったとき、または暗号化時もしくは復号化時の使用順序にしたがった拡張鍵の生成が終わったときに、復号化または暗号化のための使用順序にしたがって、複数の前記レジスタ集合内で、前記要素復号化鍵レジスタまたは要素暗号化鍵レジスタに、前記初期拡張鍵が格納された状態であることを特徴とする。
【００１６】
【発明の実施の形態】
（Ａ）実施形態
以下、本発明にかかる鍵拡張装置、鍵拡張方法および鍵拡張プログラムを、ＡＥＳに適用する場合を例に、実施形態について説明する。
【００１７】
（Ａ−１）実施形態の構成
本実施形態の通信システム１０の全体構成例を図５に示す。
【００１８】
図５において、通信システム１０は、ネットワーク１１と、通信装置１２，１３とを備えている。
【００１９】
このうち通信装置１２は、平文のデータＤ１を暗号化して生成した暗号化データＥＤ１を送信する暗号化機能と、暗号化データＥＤ２を受信し復号化して平文のデータＤ２を得る復号化機能を備えている。暗号化機能は、上述したデータ撹拌部と鍵拡張部によって実現される。この点、復号化機能も同じである。
【００２０】
図４に示す暗号処理部１９において、データ撹拌部２０は、当該データ撹拌部に対応し、鍵拡張部２１は当該鍵拡張部に対応する。
【００２１】
ここで鍵拡張部２１では初期鍵と呼ばれる秘密鍵（１２８ビット，１９２ビット，２５６ビットが存在する）からデータ撹拌部２０が使用するワーク鍵を発生するが、発生するワーク鍵の数は秘密鍵のサイズに応じて、４４個、５５個、６０個と異なるため、１つのワーク鍵のサイズが３２ビットであるとすると、すべてのワーク鍵のサイズを合計した値は、秘密鍵のサイズが１２８ビットの時には１４０８（＝３２×４４）ビット，１９２ビットの時には１６６４（＝３２×５５）ビット、２５６ビットの時には１９２０（＝３２×６０）ビットになる。
【００２２】
鍵拡張部２１が暗号化の際にワーク鍵を生成するためのアルゴリズム（暗号化用鍵拡張アルゴリズム）は、図６に示す通りであってよい。また、当該鍵拡張部２１が復号化の際にワーク鍵を生成するためのアルゴリズム（復号化用鍵拡張アルゴリズム）は、図７に示す通りであってよい。
【００２３】
図６、図７において、Ｎｋは秘密鍵（後述するＰＫ１）のサイズを４バイト（＝３２ビット）単位で示す値で秘密鍵のサイズが１２８ビットの時はＮｋ＝４であり、１９２ビットの時はＮｋ＝６であり、２５６ビットの時はＮｋ＝８である。また、Ｎｂは演算の列数を表しＮｂ＝４である。さらに、Ｎｒは処理の実行回数を表し、秘密鍵ＰＫ１のサイズが１２８ビットの時はＮｒ＝１０であり、１９２ビットの時はＮｒ＝１２であり、２５６ビットの時はＮｒ＝１４である。
【００２４】
なお、図６，図７のアルゴリズムは３２ビット幅で処理されている。
【００２５】
これらのアルゴリズムからも明らかなように、このアルゴリズムの拡張演算処理をｆで表現すると、秘密鍵ＰＫ１のサイズが１２８ビットの場合、暗号化用鍵拡張アルゴリズムは次の式（１）で示すことができる。
【００２６】
Ｗｋ＿Ｋｅｙ（Ｎ＋４）＝ｆ（Ｗｋ＿Ｋｅｙ（Ｎ＋３））（＋）Ｗｋ＿Ｋｅｙ（Ｎ）            …（１）
また、復号化用鍵拡張アルゴリズムは次の式（２）で示すことができる。
【００２７】
Ｗｋ＿Ｋｅｙ（Ｎ−４）＝ｆ（Ｗｋ＿Ｋｅｙ（Ｎ−１））（＋）Ｗｋ＿Ｋｅｙ（Ｎ）                …（２）
ただし、式（１）および（２）において、（＋）はビット毎の排他的論理和演算を示す。
【００２８】
ネットワーク１１経由で当該通信装置１２と通信する通信装置１３も、当該通信装置１２と同様な暗号化機能と復号化機能を備えている。当該通信装置１３が送信するのが、前記暗号化データＥＤ２であり、受信するのが、前記暗号化データＥＤ１である。前記通信装置１２はユーザＵ１によって操作され、当該通信装置１３はユーザＵ２によって操作される。ネットワーク１１経由で行われる暗号化データＥＤ１，ＥＤ２のやり取りは、ユーザＵ１とＵ２のあいだのメッセージ交換に対応する。
【００２９】
上述したように、ＡＥＳアルゴリズムは共通鍵暗号方式に属するアルゴリズムであるため、通信装置１２，１３は、同じ秘密鍵ＰＫ１を持ち合っている。
【００３０】
ネットワーク１１は、ＬＡＮ（ローカルエリアネットワーク）であってよく、インターネットなどであってもよい。
【００３１】
通信装置１２，１３はパーソナルコンピュータなどであってもよいが、スマートカードやＩＣタグなどであってもよい。スマートカードやＩＣタグである場合には、暗号化データＥＤ１，ＥＤ２のやり取りは、ネットワーク１１を経由しない無線通信などのローカル通信によって実現されることが多い。
【００３２】
本実施形態で特徴的な構成要素である前記鍵拡張部２１の内部構成例を図１に示す。
【００３３】
（Ａ−１−１）鍵拡張部の内部構成例
図１において、当該鍵拡張部２１は、レジスタ部２１Ａと、鍵拡張演算部２１Ｂと、出力端子２１Ｃとを備えている。
【００３４】
このうちレジスタ部２１Ａには、８つのレジスタセット３１〜３８と２つのセレクタ４２，４３が設けられ、鍵拡張演算部２１Ｂには、３つの演算部３９〜４１と、２つの排他的論理和回路４２，４３と、３つのセレクタ４４〜４６が設けられている。
【００３５】
出力端子２１Ｃは、前記ワーク鍵ＷＫ１〜ＷＫ４４を出力する端子である。前記データ撹拌部２０が暗号化処理を実行するときには、ＷＫ１、ＷＫ２，ＷＫ３，ＷＫ４，…，ＷＫ４３，ＷＫ４４の順番で、復号化処理を行うときには、これと逆の順番で、当該出力端子２１Ｃから各ワーク鍵が出力され、前記データ撹拌部２０へ供給される。上述したようにデータ撹拌部２０では、供給を受けた各ワーク鍵（例えば、ＷＫ１）を用いて、繰り返し撹拌処理を実行するが、この撹拌処理は、非線形性を付与することで、ネットワーク１１上の第３者（ユーザＵ１，Ｕ２以外の者）が平文データ（例えば、Ｄ１）や暗号鍵（例えば、秘密鍵ＰＫ１）の内容を知ろうとして行う攻撃（解読）に対する暗号の強度（安全性）を高めるために必要なものである。
【００３６】
前記レジスタ部２１Ａにおいて、８つのレジスタセット３１〜３８には、Ｎ１〜Ｎ８のセット順位が付与されている。
【００３７】
すなわち、レジスタセット３１のセット順位はＮ１であり、レジスタセット３２のセット順位はＮ２であり、レジスタセット３３のセット順位はＮ３であり、レジスタセット３４のセット順位はＮ４であり、レジスタセット３５のセット順位はＮ５であり、レジスタセット３６のセット順位はＮ６であり、レジスタセット３７のセット順位はＮ７であり、レジスタセット３８のセット順位はＮ８である。
【００３８】
レジスタ部２１Ａは全体として１つのシフトレジスタの構成を有しているが、このセット順位Ｎ１〜Ｎ８は、レジスタに格納されているデータ（ワーク鍵）がシフトされていく順番を示す。基本的にワーク鍵は、セット順位が上位のレジスタセットから下位のレジスタセットへシフトされていく。例えば、ある時点で、セット順位Ｎ８に格納されているワーク鍵に注目すると、最初は、セット順位Ｎ８のレジスタセット３８からセット順位Ｎ７のレジスタセット３７へシフトし、それ以降は、逐次、セット順位Ｎ７のレジスタセット３７からセット順位Ｎ６のレジスタセット３６へシフトし、セット順位Ｎ６のレジスタセット３６からセット順位Ｎ５のレジスタセット３５へシフトし、…、セット順位Ｎ３のレジスタセット３３からセット順位Ｎ２のレジスタセット３２へシフトし、セット順位Ｎ２のレジスタセット３２からセット順位Ｎ１のレジスタセット３１へシフトする。
【００３９】
ただし上述したようにＡＥＳでは３通りのサイズの秘密鍵が使用され得るが、現に行おうとしている通信に使用する秘密鍵のサイズによっては、レジスタ部２１Ａ内の上位のレジスタセット（すなわち、セット順位の「Ｎ」の直後の値が大きいレジスタセット）は使用しない。
【００４０】
すなわち、秘密鍵ＰＫ１のサイズが２５６ビットであるときには、８つのレジスタセット３１〜３８のすべてを使用するが、秘密鍵ＰＫ１のサイズが１９２ビットであるときには、上位２つのレジスタセット３８，３７は使用せず下位６つのレジスタセット３１〜３６を使用し、秘密鍵ＰＫ１のサイズが１２８ビットであるときには、上位４つのレジスタセット３８〜３５は使用せず下位４つのレジスタセット３１〜３４を使用する。
【００４１】
本実施形態では、主として、秘密鍵ＰＫ１のサイズが１２８ビットである場合を想定して説明するので、レジスタセット３１〜３８のうち使用するのは、３１〜３４のみである。
【００４２】
レジスタ部２１Ａ内に設けられている前記セレクタ４２は、制御入力端子４２Ｃに供給されるセレクタ制御信号（図示せず）に応じて、セレクタ４２の出力端子に接続する入力端子の選択を切り替える部分である。同様に、前記セレクタ４３は、制御入力端子４３Ｃに供給されるセレクタ制御信号に応じて、セレクタ４３の出力端子に接続する入力端子の選択を切り替える部分である。したがって、前記秘密鍵ＰＫ１のサイズに応じて、制御入力端子４３Ｃ、４２Ｃに供給するセレクタ制御信号を変更することになる。
【００４３】
例えば、秘密鍵ＰＫ１のサイズが２５６ビットである場合には、セレクタ４３に、レジスタセット３７とレジスタセット３６を接続させるような選択を行わせるとともに、セレクタ４２に、レジスタセット３５とレジスタセット３４を接続させるような選択を行わせる。同様に、秘密鍵ＰＫ１のサイズが１９２ビットである場合には、セレクタ４３に、前記排他的論理和回路４３とレジスタセット３６を接続させるような選択を行わせるとともに、セレクタ４２に、レジスタセット３５とレジスタセット３４を接続させるような選択を行わせる。
【００４４】
また、本実施形態で想定する秘密鍵ＰＫ１のサイズが１２８ビットである場合には、セレクタ４２に、排他的論理和回路４３とレジスタセット３４を接続させるような選択を行わせる。この場合、有効に動作する下位４つのレジスタセット３１〜３４と、有効に動作しない上位４つのレジスタセット３５〜３８は接続されないため、セレクタ４３に行わせる選択はいずれであってもかまわない。
【００４５】
図１に示す他のセレクタ４４，４５，４６の機能も当該セレクタ４２，４３と同様である。ただしセレクタ４６は、その制御入力端子４６Ｃに供給されるセレクタ制御信号に応じて排他的論理和回路４２またはセレクタ４４の出力端子のいずれかを、排他的論理和回路４３に接続する部分である。また、セレクタ４５は、その制御入力端子４５Ｃに供給されるセレクタ制御信号に応じて演算部３９またはセレクタ４４の出力端子のいずれかを、演算部４０に接続する部分である。
【００４６】
さらに、セレクタ４４は制御入力端子４４Ｃ以外に４つの入力端子を備え、４つの入力端子のそれぞれには、前記レジスタセット３２の出力端子、前記レジスタセット３４の出力端子、前記レジスタセット３６の出力端子、前記レジスタセット３８の出力端子が接続されている。そして当該セレクタ４４は、その制御入力端子４４Ｃに供給されるセレクタ制御信号に応じて、４つのレジスタセット３２，３４，３６，３８のいずれかの出力端子を選択して、セレクタ４６に接続する。
【００４７】
セレクタ４４による選択は、暗号化時では前記秘密鍵ＰＫ１のサイズに応じて変換するが、復号化時では、秘密鍵ＰＫ１のサイズに依存することなく一定である。
【００４８】
すなわち、暗号化時において、秘密鍵ＰＫ１のサイズが１２８ビットのときにはレジスタセット３４の出力端子を選択し、１９４ビットのときにはレジスタセット３６の出力端子を選択し、２５６ビットのときにはレジスタセット３８の出力端子を選択するが、復号化時においては、秘密鍵ＰＫ１のサイズにかかわらず、一貫してレジスタセット３２の出力端子を選択する。
【００４９】
順次、上述したワーク鍵を生成する鍵拡張演算部２１Ｂ内の構成は、図６、図７に示したプログラムリストに対応している。すなわち、演算部３９は、プログラムリスト中の関数ＲｏｔＷｏｒｄに対応する演算を実行する部分で、演算部４０はプログラムリスト中の関数ＳｕｂＷｏｒｄに対応する演算を実行する部分で、演算部４１はプログラムリスト中の配列Ｒｃｏｎに対応する演算を実行する部分である。また、図６の行Ｌ１０と、図７の行Ｌ５０のｘｏｒに対応するのは、排他的論理和回路４２であり、図６の行Ｌ２０と、図７の行Ｌ６０のｘｏｒに対応するのは、排他的論理和回路４３である。
【００５０】
さらに、図６，図７のアルゴリズムが３２ビット幅で処理されたことと対応して、本実施形態の鍵拡張部２１で使用するレジスタはすべて３２ビット幅である。
【００５１】
ただし８つのレジスタセット３１〜３８のうちの各レジスタセット（例えば、３１）の内部には図３に示すように３つのレジスタ（例えば、３１Ａ〜３１Ｃ）が含まれているから、これら３つのレジスタのそれぞれが３２ビット幅の構成を有することになる。
【００５２】
８つのレジスタセット３１〜３８はすべて同じ内部構成を有しているが、図３には、主としてレジスタセット３１を示したものとしてその内部構成を説明する。
【００５３】
（Ａ−１−２）レジスタセットの内部構成例
図３において、当該レジスタセット３１は、ワーク鍵レジスタ３１Ａと、暗号化鍵レジスタ３１Ｂと、復号化鍵レジスタ３１Ｃと、内部セレクタ３１Ｄと、出力端子３１Ｅと、入力端子３１Ｆとを備えている。
【００５４】
このうち暗号化鍵レジスタ３１Ｂは、上述した生成順序に対応する本実施形態の生成順序で、以降のワーク鍵を生成するために必要な暗号化鍵としての最初のワーク鍵（暗号化時の初期鍵）ＷＫ１を格納するレジスタである。
【００５５】
同様に、復号化鍵レジスタ３１Ｃは、本実施形態の生成順序で、以降のワーク鍵を生成するために必要な復号化鍵としての最初のワーク鍵（復号化時の初期鍵）ＷＫ４４を格納するレジスタである。
【００５６】
ワーク鍵レジスタ３１Ａは、暗号化時においては暗号化鍵としてのワーク鍵を格納し、復号化時においては復号化鍵としてのワーク鍵を格納するレジスタである。
【００５７】
上述したように、これら３つのレジスタ３１Ａ〜３１Ｃは、すべて３２ビット幅の構成を有する。
【００５８】
セレクタ３１Ｄは、前記セレクタ（例えば、４２Ｃ）と同様な機能を有する部分で、制御入力端子３１ＤＣに供給される内部セレクタ制御信号（図示せず）に応じて、当該内部セレクタ３１Ｄの３つの入力端子のうちいずれか１つを当該内部セレクタ３１Ｄの出力端子に接続する。
【００５９】
暗号化処理の開始直後であって、鍵拡張演算部２１Ｂに前記ワーク鍵ＷＫ５を生成させるときには、内部セレクタ３１Ｄに暗号化鍵レジスタ３１Ｂの出力するワーク鍵を選択させ、復号化処理の開始直後であって、鍵拡張演算部２１Ｂに前記ワーク鍵ＷＫ４０を生成させるときには、内部セレクタ３１Ｄに復号化鍵レジスタ３１Ｃの出力するワーク鍵を選択させる。
【００６０】
また、暗号化時にワーク鍵ＷＫ５を生成させたあと、または、復号化時にワーク鍵ＷＫ４０を生成させたあとでは、内部セレクタ３１Ｄには、入力端子３１Ｆから供給されるワーク鍵を選択させる。レジスタセット３１の入力端子３１Ｆは、当該レジスタセット３１の１つ上位に位置する前記レジスタセット３２の出力端子３２Ｅ（３１Ｅに対応）に接続されているので、前記シフトによりレジスタセット３２から出力されたワーク鍵（例えば、ＷＫ２）は、当該入力端子３１Ｆと内部セレクタ３１Ｄを介してワーク鍵レジスタ３１Ａに供給されて格納されることになる。
【００６１】
このようにレジスタセットの出力端子は、通常、下位のレジスタセットの入力端子に接続されるが、当該レジスタセット３１は最下位のレジスタセットであるためその出力端子３１Ｅは、前記出力端子２１Ｃと、前記排他的論理和回路４３に接続されている。
【００６２】
当該レジスタセット３１内における各構成要素に対する符号の付与規則にしたがって、他のレジスタセット３２〜３４内の構成要素にも符号を付与するものとする。
【００６３】
すなわち、レジスタセット３２内のワーク鍵レジスタは３２Ａ、暗号化鍵レジスタは３２Ｂ、復号化鍵レジスタは３２Ｃ、内部セレクタは３２Ｄ、出力端子は３２Ｅ、入力端子は３２Ｆとする。
【００６４】
同様に、レジスタセット３３内のワーク鍵レジスタは３３Ａ、暗号化鍵レジスタは３３Ｂ、復号化鍵レジスタは３３Ｃ、内部セレクタは３３Ｄ、出力端子は３３Ｅ、入力端子は３３Ｆとし、レジスタセット３４内のワーク鍵レジスタは３４Ａ、暗号化鍵レジスタは３４Ｂ、復号化鍵レジスタは３４Ｃ、内部セレクタは３４Ｄ、出力端子は３４Ｅ、入力端子は３４Ｆとする。
【００６５】
以下、上記のような構成を有する本実施形態の動作について説明する。この動作は、Ｓ１〜ＳＮ＋１、Ｐ１〜ＰＮ＋１の各ステップから構成されている。
【００６６】
この動作では、レジスタ（例えば、３１Ｂなど）に格納されたワーク鍵から次のワーク鍵を演算すことになるが、そのための演算を実行する鍵拡張演算部２１Ｂの各演算については規格書“Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｓ  Ｐｕｂｌｉｃａｔｉｏｎ  １９７”に記載されている回路が構成されているとする。
【００６７】
（Ａ−２）実施形態の動作
ここでは、前記通信装置１２内のデータ撹拌部２０が平文データＤ１を暗号化して得られる暗号化データＥＤ１を送信し、その応答として、前記通信装置１３から届く暗号化データＥＤ２を復号化する場合を例に取る。
【００６８】
最初に当該平文データＤ１がデータ撹拌部２０に供給される前の時点で、すでに４つの前記レジスタセット３１〜３４内の暗号化鍵レジスタ（例えば、３１Ｂ）には、暗号化時の初期鍵である前記ワーク鍵ＷＫ１〜ＷＫ４が格納されている。
【００６９】
すなわち、レジスタセット３１の暗号化鍵レジスタ３１Ｂにはワーク鍵ＷＫ１が格納され、レジスタセット３２の暗号化鍵レジスタ３２Ｂにはワーク鍵ＷＫ２が格納され、レジスタセット３３の暗号化鍵レジスタ３３Ｂにはワーク鍵ＷＫ３が格納され、レジスタセット３４の暗号化鍵レジスタ３４Ｂにはワーク鍵ＷＫ４が格納されている。
【００７０】
この格納を行うためには、秘密鍵ＰＫ１から当該ワーク鍵ＷＫ１〜ＷＫ４を生成する処理を行わないとするなら、予め、例えば、通信装置１２が搭載している不揮発性の記憶手段（例えば、ハードディスクやＥＥＰＲＯＭなど）に、４つのワーク鍵ＷＫ１〜ＷＫ４を保存しておくことになる。
【００７１】
なお、ここでは、秘密鍵ＰＫ１のサイズが１２８ビットの場合を想定しているため、上位の４つのレジスタセット３５〜３８は使用しない点はすでに説明した通りである。
【００７２】
この状態で、レジスタセット３１〜３４内の内部セレクタ（例えば、３１Ｄ）に暗号化鍵レジスタ（例えば、３１Ｂ）を選択させて、暗号化鍵レジスタ内に格納されているワーク鍵（例えば、ＷＫ１）をワーク鍵レジスタ（例えば、３１Ａ）へ転送させる（Ｓ１）。
【００７３】
この転送により、４つのレジスタセット３１〜３４内では、ワーク鍵レジスタ（例えば、３１Ａ）にワーク鍵（ＷＫ１）が格納される。
【００７４】
すなわち、レジスタセット３１内ではワーク鍵レジスタ３１Ａにワーク鍵ＷＫ１が格納され、レジスタセット３２内ではワーク鍵レジスタ３２Ａにワーク鍵ＷＫ２が格納され、レジスタセット３３内ではワーク鍵レジスタ３３Ａにワーク鍵ＷＫ３が格納され、レジスタセット３４内ではワーク鍵レジスタ３４Ａにワーク鍵ＷＫ４が格納される。
【００７５】
これによって、レジスタセット３１の出力端子３１Ｅを介して、ワーク鍵ＷＫ１が、排他的論理回路４３と出力端子２１Ｃに供給され、レジスタセット３４の出力端子３４Ｅを介してワーク鍵ＷＫ４が、セレクタ４４に供給される。
【００７６】
つづくステップＳ２では、出力端子２１に供給されたワーク鍵ＷＫ１は前記データ撹拌部２０に供給され、データ撹拌部２０において平文データＤ１に対する最初の撹拌処理（暗号化処理）に利用される。ブロック暗号では、撹拌処理の対象とするデータ（ここでは、平文データＤ１）もブロックに分割するため、例えば、データＤ１が大きなサイズのファイルなどであるとすると、小さなブロックに分割され、分割後の多数のブロックのうちの最初の１つが、ここで、撹拌処理を施されることになる。以降は順次、後続のブロックが撹拌処理の対象とされ、すべてのブロックが４４回撹拌処理を受けた結果が、前記暗号化データＥＤ１である。
【００７７】
この最初の１ブロックに対する最初の撹拌処理が実行されるのととほぼ同時に当該ステップＳ２では、セレクタ４４と排他的論理和回路４３を介してこれらのワーク鍵ＷＫ１、ＷＫ４を受け取る鍵拡張演算部２１Ｂが、図１の構成に応じた演算により、ワーク鍵ＷＫ５を生成する。
【００７８】
次のステップＳ３では、このワーク鍵ＷＫ５が、前記排他的論理和回路４３とセレクタ４２を介してレジスタセット３４に供給される。この時点では、各レジスタセット３１〜３４内の内部セレクタ（例えば、３１Ｄ）は、選択を入力端子（例えば３１Ｆ）に切り替えているため、４つのレジスタセット３１〜３４、特にそのなかの各ワーク鍵レジスタ３１Ａ〜３４Ａが、１つのシフトレジスタとして動作する状態にある。したがって、ワーク鍵ＷＫ５をレジスタセット３４内のワーク鍵レジスタ３４Ａに格納するときには、それまでレジスタセット３４内のワーク鍵レジスタ３４Ａに格納されていたワーク鍵ＷＫ４がシフトされてレジスタセット３３内のワーク鍵レジスタ３３Ａに格納され、同様に、各レジスタセット間をワーク鍵ＷＫ３〜ＷＫ２がシフトして行く。
【００７９】
１回のシフトが終わったときには、レジスタセット３１内ではワーク鍵レジスタ３１Ａにワーク鍵ＷＫ２が格納され、レジスタセット３２内ではワーク鍵レジスタ３２Ａにワーク鍵ＷＫ３が格納され、レジスタセット３３内ではワーク鍵レジスタ３３Ａにワーク鍵ＷＫ４が格納され、レジスタセット３４内ではワーク鍵レジスタ３４Ａにワーク鍵ＷＫ５が格納された状態となる。
【００８０】
以降は、基本的にこのステップＳ２，Ｓ３と同様な動作が繰り返されることになるが、ここではワーク鍵の数が４４個なので、前記ステップＳ２から、暗号化時の生成順序で４４番目のワーク鍵ＷＫ４４が最初に出力端子２１Ｃから出力されるまでが、ワーク鍵ＷＫ１〜ＷＫ４４の系列に関する１周期となる。したがって、ワーク鍵ＷＫ４４が出力端子２１Ｃから出力されると、再び、１番目のワーク鍵ＷＫ１が出力端子２１Ｃから出力されるようになって次の周期が開始される。それ以降は同様な動作が繰り返される。この繰り返しの回数は、前記平文データＤ１のサイズが大きいほど多くなることは当然である。
【００８１】
本実施形態の動作のうち最も特徴的な部分は、当該周期（前記生成順序に対応）の終わりに位置するワーク鍵ＷＫ４１〜ＷＫ４４が出力端子２１Ｃから出力される区間の処理にあるので、次は、この区間の近傍の処理に注目して説明する。ここでは、ワーク鍵ＷＫ３７が最初に（最初の周期に）出力端子２１Ｃから出力される時点の前記ステップＳ２に対応する処理であるステップＳＮから説明する。
【００８２】
このテップＳＮでは、出力端子２１に供給されたワーク鍵ＷＫ３７は前記データ撹拌部２０に供給され、データ撹拌部２０において平文データＤ１に対する撹拌処理（暗号化処理）に利用されるとともに、排他的論理和回路４３に供給されるから、鍵拡張演算部２１Ｂは、当該ワーク鍵ＷＫ３７と、セレクタ４４を介して供給されるワーク鍵ＷＫ４０をもとに、ワーク鍵ＷＫ４１を生成する。
【００８３】
そして次のステップＳＮ＋１で、当該ワーク鍵ＷＫ４１のレジスタセット３４への供給と、レジスタセット３１〜３４での前記シフトが行われる点は、前記ステップＳ３と同じである。ただし、この回のシフトでは、レジスタセット３４内のワーク鍵レジスタ３４Ａだけでなく復号化鍵レジスタ３４Ｃにも、当該ワーク鍵ＷＫ４１を格納する。これはあとで復号化処理を行う際、初期のワーク鍵として使用するための格納である。
【００８４】
最終的には、レジスタセット３１内の復号化鍵レジスタ３１Ｃには、ワーク鍵ＷＫ４４が格納され、レジスタセット３２内の復号化鍵レジスタ３２Ｃには、ワーク鍵ＷＫ４３が格納され、レジスタセット３３内の復号化鍵レジスタ３３Ｃには、ワーク鍵ＷＫ４２が格納され、レジスタセット３４内の復号化鍵レジスタ４１Ｃには、ワーク鍵ＷＫ４１が格納されて、いつでも復号化を開始できる状態（復号化開始可能状態）とすることが目的であるから、そうなるように、各ワーク鍵ＷＫ４１〜ＷＫ４４のシフトと、各復号化鍵レジスタ３３Ｃ、３２Ｃ、３１Ｃへの格納を行う。
【００８５】
図３からも明らかなように、各レジスタセットの入力端子（例えば、３１Ｆ）からは、シフトするたび、常に、シフトされるワーク鍵が復号化鍵レジスタ（例えば、３１Ｃ）へ供給され得る回路構成となっているため、それを取り込んで格納するか否かは、各復号化鍵レジスタの格納動作の制御だけによって決まる。
【００８６】
すなわち、格納動作を行えば新たにシフトされてきたワーク鍵が格納され、行わなければすでに格納されているワーク鍵の記憶が維持される。
【００８７】
このような格納動作の制御とワーク鍵のシフトを繰り返せば、ワーク鍵ＷＫ４２がシフトされてきたときに復号化鍵レジスタ３３Ｃがそれを格納し、ワーク鍵ＷＫ４３がシフトされてきたときに復号化鍵レジスタ３２Ｃがそれを格納し、ワーク鍵ＷＫ４４がシフトされてきたときに復号化鍵レジスタ３１Ｃがそれを格納することにより、前記周期の終わりには、上述した復号化開始可能状態とすることができる。
【００８８】
なお、このように復号化開始可能状態とするために各復号化鍵レジスタ（例えば、３１Ｃ）がワーク鍵の格納を行っている間にも、ワーク鍵レジスタ間のシフトは正常に行われ、出力端子２１Ｃからのワーク鍵（例えば、ＷＫ４１など）の出力が行われているから、前記データ撹拌部２０による暗号化処理は継続することができる。
【００８９】
また、平文データＤ１が特にサイズの小さなものでない限り、前記周期は複数回繰り返されるが、最初の１周期でのみ当該復号化開始可能状態とするための格納動作を行い、２回目以降の周期では格納したワーク鍵の記憶を維持するようにすれば、格納動作を何度も行う必要はない。
【００９０】
したがって平文データＤ１がどのようなサイズのデータであったとしても、通信装置１２（データ撹拌部２０）がそれを暗号化して得た暗号化データＥＤ１の送信を終えた時点では、レジスタ部２１Ａは復号化開始可能状態にある。
【００９１】
一方、当該暗号化データＥＤ１の応答として通信装置１３から送信された暗号化データＥＤ２が通信装置１２に受信されると、前記データ撹拌部２０が当該暗号化データＥＤ２を復号化するための撹拌処理を実行することになるが、そのためには、ワーク鍵ＷＫ４４〜ＷＫ１を、暗号化時と逆の順番で出力端子２１Ｃから出力する必要がある。
【００９２】
このような順番で出力するため、復号化を開始するときには、前記ステップＳ１とは異なり、レジスタセット３１〜３４内の内部セレクタ（例えば、３１Ｄ）に復号化鍵レジスタ（例えば、３１Ｃ）を選択させて、復号化鍵レジスタ内に格納されているワーク鍵（例えば、ＷＫ４４）をワーク鍵レジスタ（例えば、３１Ａ）へ転送させる（Ｐ１）。
【００９３】
この転送により、４つのレジスタセット３１〜３４内では、ワーク鍵レジスタ（例えば、３１Ａ）にワーク鍵（ＷＫ１）が格納される。
【００９４】
すなわち、レジスタセット３１内ではワーク鍵レジスタ３１Ａにワーク鍵ＷＫ４４が格納され、レジスタセット３２内ではワーク鍵レジスタ３２Ａにワーク鍵ＷＫ４３が格納され、レジスタセット３３内ではワーク鍵レジスタ３３Ａにワーク鍵ＷＫ４２が格納され、レジスタセット３４内ではワーク鍵レジスタ３４Ａにワーク鍵ＷＫ４１が格納される。
【００９５】
このあと、出力端子２１Ｃからのワーク鍵（例えば、ＷＫ４４）の出力、鍵拡張演算部２１Ｂにおけるワーク鍵の生成、生成されたワーク鍵のレジスタセット３４内のワーク鍵レジスタ３４Ａへの格納、ワーク鍵のシフトなどの動作が、暗号化時と同様に実行される。
【００９６】
したがって、復号化時にも、前記ステップＳ２に対応するステップＰ２，前記ステップＳＮに対応するステップＰＮ、前記ステップＳＮ＋１に対応するステップＰＮ＋１が実行され、同様な処理が復号化のために実行されることになる。
【００９７】
上述したように、暗号化時と比べた場合、復号化時の処理では、使用する順番が異なるだけで、ワーク鍵の内容も数も暗号化時と同じであるから、前記周期の長さも同じである。
【００９８】
ただし復号化時には、上述したように、前記セレクタ４４にレジスタセット３２の出力端子３２Ｅを選択させることになる。この点は、秘密鍵ＰＫ１のサイズに依存しない。
【００９９】
なお、復号化の周期においては、その終わりの部分で、前記復号化開始可能状態に対応する暗号化開始可能状態とするようにしてもよい。
【０１００】
ただし前記ステップＳ１の転送の際、各暗号化鍵レジスタが格納していたワーク鍵の記憶を維持しておくようにすれば、復号化時には、特に、前記暗号化開始可能状態とするための処理を行う必要はない。この点、２回目以降の周期で復号化を行う場合も同様である。
【０１０１】
ただし１つの通信装置（ここでは、１２）が複数の秘密鍵（その１つがＰＫ１）を搭載しており、例えば、通信する相手に応じて秘密鍵を使い分ける場合や、通信相手ごとに別の鍵拡張部２１を用意することがハードウエア規模の節約の観点から望ましくない場合も多いと考えられるが、そのようなケースでは、その都度、暗号化鍵レジスタや復号化鍵レジスタの内容を新たな初期鍵で上書きすることになる。
【０１０２】
（Ａ−３）実施形態の効果
以上のように、本実施形態によれば、保存しておくワーク鍵の数（例えば、ＷＫ１〜ＷＫ４）が少くて済むため、記憶容量を節約することができ、通信装置（１２）の低価格化やコンパクト化に寄与する。
【０１０３】
また、本実施形態では、前記レジスタ部（２１Ａ）が暗号化の周期が終わったときには、いつでも復号化を開始することのできる内部状態（復号化開始可能状態）にあり、さらに、復号化の周期が終わったときには、いつでも暗号化を開始することのできる内部状態（暗号化開始可能状態）にあるため、極めて処理の効率が高く、高速な復号化処理や暗号化処理を行うことが可能である。
【０１０４】
（Ｂ）他の実施形態
上記実施形態では、最初に４つの前記レジスタセット３１〜３４内の暗号化鍵レジスタ（例えば、３１Ｂ）に暗号化時の初期鍵ＷＫ１〜ＷＫ４を格納することによって処理を開始したが、最初に格納する初期鍵は復号化時の初期鍵ＷＫ４４〜ＷＫ４１であってもかまわない。
【０１０５】
その場合、復号化時の初期鍵ＷＫ４４〜ＷＫ４１の格納先は、各レジスタセット３１〜３４内の復号化鍵レジスタ（例えば、３１Ｃ）になることは当然である。その場合にはまた、各レジスタセット３１〜３４の前記入力端子（例えば、３１Ｆ）に接続されるのは、復号化鍵レジスタ（例えば、３１Ｃ）ではなく、暗号化鍵レジスタ（例えば、３１Ｂ）になることは当然である。
【０１０６】
なお、上記実施形態においては、主として秘密鍵ＰＫ１のサイズが１２８ビットの場合について説明したが、１９２ビットや２５６ビットも含め、その他のサイズの秘密鍵に対して、本発明が適用可能なことは当然である。
【０１０７】
上記実施形態にかかわらず、本発明は、Ｒｉｊｎｄａｅｌ暗号にも適用可能である。
【０１０８】
また、本発明は、ＡＥＳ以外のブロック暗号にも適用可能である。
【０１０９】
さらに、以上の説明では主としてハードウエア的に本発明を実現したが、本発明はソフトウエア的に実現することも可能である。
【０１１０】
ソフトウエア的に実現する場合、前記レジスタセット（例えば、３１）中の各レジスタ（例えば、３１Ｂ）や、演算部（例えば、３９）は、専用の演算装置ではなく、通信装置（例えば、１２）が搭載するＣＰＵ（中央処理装置）の内部などに設けられる演算装置、汎用レジスタ、メモリ（ＲＡＭなど）で代用される可能性が高い。
【０１１１】
同様のことは、排他的論理回路（例えば、４３）やセレクタ（例えば、４４や３１Ｄなど）についても成立する。例えば、排他的論理和回路は、ソフトウエア的には、ＣＰＵ内の汎用レジスタや演算装置などを活用した演算操作（排他的論理和）に置換され得る。
【０１１２】
【発明の効果】
以上に説明したように、本発明によれば、初期拡張鍵を保存しておくための記憶容量を節約することができる。
【０１１３】
加えて、本発明によれば、極めて処理の効率が高く、高速な復号化や暗号化を行うことが可能である。
【図面の簡単な説明】
【図１】実施形態にかかる鍵拡張部の構成例を示す概略図である。
【図２】ＡＥＳアルゴリズムにおけるワーク鍵の生成順序（使用順序）を示す概略図である。
【図３】実施形態にかかる鍵拡張部で使用するレジスタセットの内部構成例を示す概略図である。
【図４】実施形態で使用する暗号処理部の構成例を示す概略図である。
【図５】実施形態にかかる通信システムの全体構成例を示す概略図である。
【図６】実施形態で使用する暗号化用鍵拡張アルゴリズムを示すプログラムリストである。
【図７】実施形態で使用する復号化用鍵拡張アルゴリズムを示すプログラムリストである。
【符号の説明】
１０…通信システム、１１…ネットワーク、１２、１３…通信装置、１９…暗号処理部、２０…データ撹拌部、２１…鍵拡張部、２１Ａ…レジスタ部、２１Ｂ…鍵拡張演算部、３１〜３８…レジスタセット、３９〜４１…演算部、３１Ａ…ワーク鍵レジスタ、３１Ｂ…暗号化鍵レジスタ、３１Ｃ…復号化鍵レジスタ、３１Ｄ…内部セレクタ、３１ＤＣ、４２Ｃ〜４６Ｃ…制御入力端子、４２〜４６…セレクタ、Ｄ１，Ｄ２…平文データ、ＥＤ１、ＥＤ２…暗号化データ、ＰＫ１…秘密鍵、ＷＫ１〜ＷＫ４４…ワーク鍵。
【図１】
2005004048.tif 000003
【図２】
2005004048.tif 000004
【図３】
2005004048.tif 000005
【図４】
2005004048.tif 000006
【図５】
2005004048.tif 000007
【図６】
2005004048.tif 000008
【図７】
2005004048.tif 000009