(57)【要約】【課題】本発明は演算速度を容易に高速化できるブロック暗号化方式の暗号化／復号装置、暗号化／復号方法、暗号化／復号プログラムを提供する。【解決手段】平文をブロックに区切り、ブロック毎に暗号化演算する暗号化装置において、各ブロックの暗号化演算から派生する連鎖値はＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される。【選択図】　　図１
2004138722.tif 000002
【特許請求の範囲】
【請求項１】
暗号変換すべき平文をブロックに区切り、ブロック毎に暗号化演算する暗号化装置において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される暗号化装置。
【請求項２】
第１から第Ｍブロック（Ｍ≧Ｎ≧２の整数）は前段のブロックの暗号化演算から派生するデータを用いることなく第１から第Ｍの暗号鍵を用いて暗号化演算する請求項１記載の暗号化装置。
【請求項３】
第１から第Ｍブロックは前段のブロックの暗号化演算から派生するデータを用いることなく同一の暗号鍵を用いて暗号化演算する請求項１記載の暗号化装置。
【請求項４】
第１ブロックは暗号鍵を用いて暗号化演算し、第２乃至第Ｍブロックは前段のブロックの暗号化演算から派生するデータを用いて暗号化演算し、第（Ｍ＋１）段ブロック以降はＮブロック前の暗号化演算から派生するデータを用いて暗号化演算する請求項１記載の暗号化装置。
【請求項５】
前記Ｍの値を第１ブロックの平文に埋め込んで暗号化する請求項２乃至請求項４のいずれか一項記載の暗号化装置。
【請求項６】
前記Ｎの値を第１ブロックから第Ｍブロックまでのいずれかの平文に埋め込んで暗号化する請求項２乃至請求項４のいずれか一項記載の暗号化装置。
【請求項７】
第１乃至第Ｎブロックの暗号化演算から派生するデータは第（２Ｎ−１）ブロックまでの任意の２ブロックの暗号化演算に利用され、第Ｎブロック以降の暗号化演算から派生するデータはＮブロック後のブロックの暗号化演算に利用される請求項１に記載の暗号化装置。
【請求項８】
前記Ｎの値を第１ブロックの平文に埋め込んで暗号化する請求項７記載の暗号化装置。
【請求項９】
各ブロックはハッシュ演算を行い、得られたＮ個のハッシュ値に対してさらにブロック暗号化方式のハッシュ演算を行い１個のハッシュ値を求める請求項１乃至請求項８のいずれか一項記載の暗号化装置。
【請求項１０】
暗号変換すべき平文をブロックに区切り、ブロック毎に暗号化演算する暗号化方法において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される暗号化方法。
【請求項１１】
暗号文をブロックに区切り、ブロック毎に復号演算する復号装置において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの復号演算に利用される復号装置。
【請求項１２】
暗号文をブロックに区切り、ブロック毎に復号演算する復号方法において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの復号演算に利用される復号方法。
【請求項１３】
コンピュータに暗号変換すべき平文をブロックに区切り、ブロック毎に暗号化演算させる暗号化プログラムにおいて、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される暗号化プログラム。
【請求項１４】
コンピュータに暗号文をブロックに区切り、ブロック毎に復号演算させる復号プログラムにおいて、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの復号演算に利用される復号プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ブロック暗号化方式の暗号化装置、方法、コンピュータプログラム、および復号装置、方法、コンピュータプログラムに関する。
【０００２】
【従来の技術】
共通鍵を用いた暗号化方式の１つに、サイズの大きいデータに対して暗号化処理を施す際に、データを一定長のブロックに区切り、ブロックごとに暗号化演算を行うブロック暗号化方式がある。この方式の中で、あるブロックの暗号化演算から派生するデータ（最終的な演算結果のみならず、演算途中のデータも含む）を次のブロックの暗号化演算に反映させ、サイズの大きなデータに対し一貫した暗号化を施す方式（例えば、サイファーブロックチェイニング方式：ＣＢＣ方式）が存在する。一般的には、派生データは鍵として利用される。
【０００３】
しかし、これは１つのブロックの演算が少なくとも途中まで終わらなければ、次のブロックの演算を行うことができないので、演算の高速化にとっては大きな制約になっている。
【０００４】
これを解決する従来例として、データの暗号化演算および復号演算を並列化する手段を提供し、暗号化演算および復号演算の処理速度を向上させるものがある。（例えば、特許文献１参照。）。
【０００５】
この文献では、要約、段落００１７乃至段落００１９、図２で説明するように、暗号変換および復号変換を行う情報処理機器に、複数の演算を並列に行う、複数の演算手段を備え、暗号変換すべき平文メッセージを、ブロック暗号の基本単位である１ブロック長よりも長い、ビット列を１フレームとする、複数フレームに分割し、複数フレームから１ブロックずつデータを取り出して、取り出した複数ブロックを、同時に、暗号変換および復号変換を行う構成にしている。
【０００６】
しかしながら、複数のフレームどうしの並列処理は行なわれているが、１フレーム内では従来通り、最初のブロックデータから順番に処理していく必要があり、並列化の効果がさほど向上しない。
【０００７】
【特許文献１】
特開平１１−１６１１６２号公報（段落００１７乃至段落００１９、図２）
【０００８】
【発明が解決しようとする課題】
このように従来のブロック暗号化方式には演算の高速化が困難であるという欠点がある。
【０００９】
本発明の目的は演算速度を容易に高速化できるブロック暗号化方式の暗号化装置、復号装置、暗号化方法、復号方法、暗号化プログラム、および復号プログラムを提供することである。
【００１０】
【課題を解決するための手段】
上記した課題を解決し目的を達成するために、本発明は以下に示す手段を用いている。
【００１１】
本発明の暗号化装置は、暗号変換すべき平文をブロックに区切り、ブロック毎に暗号化演算する暗号化装置において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される。
【００１２】
本発明の暗号化方法は、暗号変換すべき平文をブロックに区切り、ブロック毎に暗号化演算する暗号化方法において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される。
【００１３】
本発明の復号装置は、暗号文をブロックに区切り、ブロック毎に復号演算する復号装置において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの復号演算に利用される。
【００１４】
本発明の復号方法は、暗号文をブロックに区切り、ブロック毎に復号演算する復号方法において、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの復号演算に利用される。
【００１５】
本発明の暗号化プログラムは、コンピュータに暗号変換すべき平文をブロックに区切り、ブロック毎に暗号化演算させる暗号化プログラムにおいて、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの暗号化演算に利用される。
【００１６】
本発明の復号プログラムは、コンピュータに暗号文をブロックに区切り、ブロック毎に復号演算させる復号プログラムにおいて、各ブロックの暗号化演算から派生するデータはＮブロック（Ｎ≧２の整数）後のブロックの復号演算に利用される。
【００１７】
【発明の実施の形態】
以下、図面を参照して本発明による暗号化装置、復号装置、暗号化方法、復号方法、暗号化プログラム、および復号プログラムの実施形態を説明する。
【００１８】
第１実施形態
図１は本発明の第１実施形態に係る暗号化装置の構成を示す図である。暗号変換すべき平文データが一定サイズ毎にブロック化され、平文ブロックデータＰ１、Ｐ２、…とされ、各ブロックデータＰ１、Ｐ２、…が暗号化器Ｅｎｃ１、Ｅｎｃ２、…に供給される。第１−第Ｎ（Ｎ≧２の整数、ここでは、Ｎ＝３）ブロックの暗号化器Ｅｎｃ１、Ｅｎｃ２、Ｅｎｃ３にはそれぞれ第１、第２、第３暗号化鍵Ｋｅ１、Ｋｅ２、Ｋｅ３が供給され、これらの鍵を用いて暗号化演算が行われる。第１−第Ｎブロックの暗号化器Ｅｎｃ１、Ｅｎｃ２、Ｅｎｃ３の演算結果は、従来のＣＢＣ方式の暗号化方式とは異なり、次ブロックではなく、Ｎブロック後の暗号化器に連鎖値として供給され、連鎖値を鍵として暗号化演算が行われる。暗号化器Ｅｎｃ１、Ｅｎｃ２、…の演算結果が暗号化ブロックデータＥ１、Ｅ２、…とされる。なお、連鎖値としては、最終的な演算結果ではなく、その途中の演算結果を用いても良い。Ｎの値はスループット等に応じてアルゴリズムの使用者が任意に設定して構わない。
【００１９】
図２に図１のブロック暗号化装置による暗号化ブロックデータＥ１、Ｅ２、…を復号する復号装置の構成を示す。暗号化ブロックデータＥ１、Ｅ２、…が復号器Ｄｅｃ１、Ｄｅｃ２、…に供給される。第１−第Ｎブロックの復号器Ｄｅｃ１、Ｄｅｃ２、Ｄｅｃ３にはそれぞれ第１、第２、第３復号鍵Ｋｄ１、Ｋｄ２、Ｋｄ３が供給され、これらの鍵を用いて復号演算が行われる。第１−第Ｎブロックの復号器Ｄｅｃ１、Ｄｅｃ２、Ｄｅｃ３の演算結果は、従来のＣＢＣ方式の復号方式とは異なり、次ブロックではなく、Ｎブロック後の復号器に連鎖値として供給され、連鎖値を鍵として復号演算が行われる。復号器Ｄｅｃ１、Ｄｅｃ２、…の演算結果が平文ブロックデータＰ１、Ｐ２、…である。第１、第２、第３復号鍵Ｋｄ１、Ｋｄ２、Ｋｄ３は第１、第２、第３暗号化鍵Ｋｅ１、Ｋｅ２、Ｋｅ３と同じであることを要する。
【００２０】
図３に１ブロック分の暗号化処理の模式図と、以下本明細書で使用する省略表記を示す。上段に示す模式図においては、ブロックａの平文データ１０が暗号化器１２に供給され、前段から供給される鍵値または連鎖値１３を用いて暗号化演算される。暗号化器１２からは暗号化データ１１と、次段に供給される連鎖値１４（暗号化データ１１と同じでもよい）が出力される。下段に示す省略表記においては、平文と暗号文を省略しており、前段からの連鎖値１３ｂと後段への連鎖値１４ｂとがブロックａの暗号化処理１５とともに記されている。
【００２１】
図４は図３の省略表記を使用して図１の暗号化装置を示すものである。このように、暗号化の連鎖が３つ形成され、全てのブロックを暗号化することができる。３つの連鎖を縦に並べて示したが、これらは完全に独立した演算であるので、容易に並列化が可能であり、Ｎ＝３の例では３つの処理を並列化することで、最大３倍のスループットが得られる。
【００２２】
図５に１ブロック分の復号処理の模式図と、以下本明細書で使用する省略表記を示す。上段に示す模式図においては、ブロックａの暗号文データ２０が復号器２２に供給され、前段から供給される鍵値または連鎖値２３を用いて復号演算される。復号器２２からは平文データ２１と、次段に供給される連鎖値２４（平文データ２１と同じでもよい）が出力される。下段に示す省略表記においては、平文と暗号文を省略しており、前段からの連鎖値２３ｂと後段への連鎖値２４ｂとがブロックａの復号処理２５とともに記されている。
【００２３】
図６は図５の省略表記を使用して図２の復号装置を示すものである。このように、復号の連鎖が３つ形成され、全てのブロックを復号することができる。３つの連鎖を縦に並べて示したが、これらは完全に独立した演算であるので、容易に並列化が可能であり、Ｎ＝３の例では３つの処理を並列化することで、最大３倍のスループットが得られる。
【００２４】
図７は図１の暗号化装置の暗号化処理を示すフローチャートである。１ブロックの暗号化処理が開始すると、ステップＳ１で、第ｎブロックの平文データＰｎを取得する。ステップＳ２で、ブロック番号ｎが連鎖の個数Ｎ（図１の例では３）以下であるか否か判定する。Ｎの値は使用者には秘匿となっている。
【００２５】
ブロック番号ｎがＮ以下の場合は、ステップＳ３で第ｎ暗号化鍵Ｋｅｎを使用して暗号化器Ｅｎｃｎで暗号化処理を実行する。暗号化演算により発生する連鎖値をステップＳ４で暗号化器Ｅｎｃｎに格納する。ステップＳ５で第ｎブロックの暗号化データＥｎを出力して、１ブロックの暗号化処理が終了する。
【００２６】
ブロック番号ｎがＮ以下でない場合は、ステップＳ６でＮ個前のブロックの暗号化器Ｅｎｃ（ｎ−Ｎ）に格納されている連鎖値を使用して暗号化器Ｅｎｃｎで暗号化処理を実行する。なお、ＥｎｃｎはＥｎｃ（ｎ　ｍｏｄ　Ｎ）で代用できる。ここで、ｎ　ｍｏｄ　Ｎとは、ｎをＮで割った余りである。以下、上の場合と同様に、暗号化演算により発生する連鎖値をステップＳ４で暗号化器Ｅｎｃｎに格納し、ステップＳ５で第ｎブロックの暗号化データを出力して、１ブロックの暗号化処理が終了する。
【００２７】
図８は図２の復号装置の復号処理を示すフローチャートである。１ブロックの復号処理が開始すると、ステップＳ１１で、第ｎブロックの暗号化データＥｎを取得する。ステップＳ１２で、ブロック番号ｎが連鎖の個数Ｎ（図２の例では３）以下であるか否か判定する。
【００２８】
ブロック番号ｎがＮ以下の場合は、ステップＳ１３で第ｎ復号鍵Ｋｄｎを使用して復号器Ｄｅｃｎで復号処理を実行する。復号演算により発生する連鎖値をステップＳ１４で復号器Ｄｅｃｎに格納する。ステップＳ１５で第ｎブロックの平文データＰｎを出力して、１ブロックの復号処理が終了する。
【００２９】
ブロック番号ｎがＮ以下でない場合は、ステップＳ１６でＮ個前のブロックの復号器Ｄｅｃ（ｎ−Ｎ）に格納されている連鎖値を使用して復号器Ｄｅｃｎで復号処理を実行する。以下、上の場合と同様に、復号演算により発生する連鎖値をステップＳ１４で復号器Ｄｅｃｎに格納し、ステップＳ１５で第ｎブロックの平文Ｐｎを出力して、１ブロックの復号処理が終了する。
【００３０】
以上説明したように第１実施形態によれば、あるブロックの連鎖値を１ブロック後ではなく、Ｎブロック（Ｎ≧２）後のデータの処理に反映させる。つまり（Ｎ−１）ブロックおきにブロック連鎖が構成され、このような連鎖をＮ個施す（各連鎖の開始位置は第１ブロック〜第Ｎブロック）ことで、データ全体に暗号化のブロック連鎖を施す。これにより暗号化処理は最大Ｎ個の並列処理で実行することが可能になる。本装置をマルチプロセッサ環境やＡＳＩＣで実装した場合には、並列化によって最大約Ｎ倍のスループットを得ることが可能になる。なお、暗号の強度としてはＮ＝１の場合とほぼ同等である。
【００３１】
復号の際も同様にＮ個の連鎖を並列して復号処理することで、処理を高速化することができる。
【００３２】
以下、本発明による暗復号装置、方法、プログラムの他の実施形態を説明する。他の実施形態の説明において第１実施形態と同一部分は同一参照数字を付してその詳細な説明は省略する。
【００３３】
第２実施形態
図９は第２実施形態の暗号化装置のブロック図である。第１実施形態では最初のＮ個の暗号化器にはそれぞれ異なる暗号化鍵が供給されているが、第２実施形態では最初のＮ個の暗号化器に同一の暗号化鍵が供給されている。暗号化処理動作は図７のフローチャートと同様であるが、ステップＳ３においてｎの値に関らず同一の暗号化鍵を用いて暗号化する点のみが異なる。
【００３４】
これにより従来と同じデータサイズの鍵を用意するだけで、本発明によるブロック暗号化処理の並列化を行うことが可能となる。
【００３５】
復号装置は暗号化器を復号器に替えるだけであり、処理は同様であるので、詳細な説明は省略する。
【００３６】
第３実施形態
第２実施形態では、鍵サイズの増大を防ぐために、同一の鍵を使って複数の暗号化／復号器で並列化処理を実施するが、暗号の耐久性を考えた場合、同じ鍵、連鎖値が特定の位置に繰り返し使われることは好ましくない。Ｎが大きいと、暗号アルゴリズムが漏れることがある。これを防ぐため、第３実施形態では、並列化の開始位置を任意のブロックにシフトさせ、共通の鍵、連鎖値を使用する位置を任意に移動させている。
【００３７】
図１０、図１１は第３実施形態の暗号化装置のブロック図である。第１、第２実施形態では最初から並列処理が行われているが、第３実施形態では最初のＭ個（Ｍ≧Ｎ≧２の整数）の暗号化器までは従来通り次段へ連鎖値を供給し、並列処理が行われない。第（Ｍ＋１）暗号器から第１実施形態の並列化が行われる。図１０はＭ＝１、図１１はＭ＝３の例である。
【００３８】
図１２は第３実施形態の暗号化装置の暗号化処理を示すフローチャートである。１ブロックの暗号化処理が開始すると、ステップＳ２１で、第ｎブロックの平文データＰｎを取得する。ステップＳ２２で、ブロック番号ｎが１であるか否か判定する。
【００３９】
ブロック番号ｎが１の場合は、ステップＳ２３で暗号化鍵Ｋｅを使用して暗号化器Ｅｎｃｎで暗号化処理を実行する。暗号化演算により発生する連鎖値をステップＳ２４で暗号化器Ｅｎｃｎに格納する。ステップＳ２５で第ｎブロックの暗号化データＥｎを出力して、１ブロックの暗号化処理が終了する。
【００４０】
ブロック番号ｎが１でない場合は、ステップＳ２６でブロック番号ｎが並列化しないブロック数Ｍ以下であるか否か判定する。
【００４１】
ブロック番号ｎがＭ以下の場合は、ステップＳ２７で１つ前のブロックの暗号化器Ｅｎｃ（ｎ−１）に格納されている連鎖値を使用して暗号化器Ｅｎｃｎで暗号化処理を実行する。以下、上の場合と同様に、暗号化演算により発生する連鎖値をステップＳ２４で暗号化器Ｅｎｃｎに格納し、ステップＳ２５で第ｎブロックの暗号化データを出力して、１ブロックの暗号化処理が終了する。
【００４２】
ブロック番号ｎがＭ以下でない場合は、上記実施形態の並列化を実施するために、ステップＳ２８で、ブロック番号ｎが（Ｍ＋ｎ）以下であるか否か判定する。ブロック番号ｎが（Ｍ＋ｎ）以下である場合は、ステップＳ２９で第Ｍブロックの暗号化器ＥｎｃＭに格納されている連鎖値を使用して暗号化器Ｅｎｃｎで暗号化処理を実行する。以下、上の場合と同様に、暗号化演算により発生する連鎖値をステップＳ２４で暗号化器Ｅｎｃｎに格納し、ステップＳ２５で第ｎブロックの暗号化データを出力して、１ブロックの暗号化処理が終了する。ブロック番号ｎが（Ｍ＋ｎ）以下でない場合は、ステップＳ３０でＮ個前のブロックの暗号化器Ｅｎｃ（ｎ−Ｎ）に格納されている連鎖値を使用して暗号化器Ｅｎｃｎで暗号化処理を実行する。以下、上の場合と同様に、暗号化演算により発生する連鎖値をステップＳ２４で暗号化器Ｅｎｃｎに格納し、ステップＳ２５で第ｎブロックの暗号化データを出力して、１ブロックの暗号化処理が終了する。
【００４３】
復号装置は図１０、図１１の暗号化器を復号器に変更するだけで、他は同一であるので、図示は省略する。
【００４４】
図１３は第３実施形態の復号装置の復号処理を示すフローチャートである。１ブロックの復号処理が開始すると、ステップＳ３１で、第ｎブロックの暗号化データＥｎを取得する。ステップＳ３２で、ブロック番号ｎが１であるか否か判定する。
【００４５】
ブロック番号ｎが１の場合は、ステップＳ３３で復号鍵Ｋｄを使用して復号器Ｄｅｃｎで復号処理を実行する。復号演算により発生する連鎖値をステップＳ３４で復号器Ｄｅｃｎに格納する。ステップＳ３５で第ｎブロックの平文データＰｎを出力して、１ブロックの復号処理が終了する。
【００４６】
ブロック番号ｎが１でない場合は、ステップＳ３６でブロック番号ｎが並列化しないブロック数Ｍ以下であるか否か判定する。本実施形態では、Ｍの値は暗号化側から復号側に通知される。Ｍの値は使用者には秘匿となっている。
【００４７】
ブロック番号ｎがＭ以下の場合は、ステップＳ３７で１つ前のブロックの復号器Ｄｅｃ（ｎ−１）に格納されている連鎖値を使用して復号器Ｄｅｃｎで復号処理を実行する。以下、上の場合と同様に、復号演算により発生する連鎖値をステップＳ３４で復号器Ｄｅｃｎに格納し、ステップＳ３５で第ｎブロックの平文　データＰｎを出力して、１ブロックの復号処理が終了する。
【００４８】
ブロック番号ｎがＭ以下でない場合は、上記実施形態の並列化を実施するために、ステップＳ３８で、ブロック番号ｎが（Ｍ＋ｎ）以下であるか否か判定する。ブロック番号ｎが（Ｍ＋ｎ）以下である場合は、ステップＳ３９で第Ｍブロックの復号器ＤｅｃＭに格納されている連鎖値を使用して復号器Ｄｅｃｎで復号処理を実行する。以下、上の場合と同様に、復号演算により発生する連鎖値をステップＳ３４で復号器Ｄｅｃｎに格納し、ステップＳ３５で第ｎブロックの平文データを出力して、１ブロックの復号処理が終了する。ブロック番号ｎが（Ｍ＋ｎ）以下でない場合は、ステップＳ４０でＮ個前のブロックの復号器Ｄｅｃ（ｎ−Ｎ）に格納されている連鎖値を使用して復号器Ｄｅｃｎで暗号化処理を実行する。以下、上の場合と同様に、復号演算により発生する連鎖値をステップＳ３４で復号器Ｄｅｃｎに格納し、ステップＳ３５で第ｎブロックの平文データを出力して、１ブロックの復号処理が終了する。
【００４９】
このように第３実施形態では、並列化の開始位置を任意のブロックにシフトさせることにより、共通の鍵、連鎖値を使用する位置を任意に移動することができ、暗号の耐久性が向上する。
【００５０】
第４実施形態
第３実施形態では、暗号の耐久性を向上するために、並列化の開始位置Ｍをアルゴリズムの使用者により予め決定しているが、Ｍの値が漏洩すると、並列化の開始位置をシフトした意味がない。さらに、Ｍ、Ｎの値は適宜変更して構わないが、第３実施形態では、これらの値が固定である。そこで、第４実施形態では、アルゴリズムの使用者がＭおよび／またはＮの値をスループット等に応じて任意に設定できるとし、Ｍの値を先頭ブロックの平文の中に埋め込み、暗号化して復号側に送り、同様にＮの値を先頭ブロックから第Ｍブロックまでに埋め込む。
【００５１】
図１４は第４実施形態の暗号化装置のブロック図である。最初のＭ個の暗号化器までは従来通り次段へ連鎖値を供給し、並列処理が行われない。第Ｍ暗号器から連鎖値がＮ個の暗号器に供給され、第（Ｍ＋１）暗号器から第１実施形態の並列化が行われる。Ｍ、Ｎの値は任意に設定可能であり、図１４の例では、Ｍ＝１、Ｎ＝３である。Ｍの値は平文の第１ブロックに埋め込み、Ｎの値は平文の第１ブロックから第Ｍブロックのいずれかに埋め込み、暗号化して復号側に伝送される。
【００５２】
図１５は第４実施形態の暗号化装置の暗号化処理を示すフローチャートである。１ブロックの暗号化処理が開始すると、ステップＳ４１で、第ｎブロックの平文データＰｎを取得する。ステップＳ４２で、ブロック番号ｎが１であるか否か判定する。
【００５３】
ブロック番号ｎが１の場合は、ステップＳ４３でＭ、Ｎを決定し、ステップＳ４４で第１ブロックの平文データ中にＭを埋め込み、ステップＳ４５に進む。
【００５４】
ブロック番号ｎが１でない場合、ステップＳ４５でブロック番号ｎがＮを埋め込むブロックか否か判定する。否の場合は、第３実施形態の暗号化処理のフローチャート（図１２）のステップＳ２２へ進み、ブロック番号ｎに応じて鍵、または連鎖値を使用して暗号化処理を行う。イエスの場合は、ステップＳ４６で第ｎブロックの平文データ中にＮを埋め込み、ステップＳ２２に進む。
【００５５】
これにより、Ｍの値を平文の第１ブロックに、Ｎの値を平文の第１ブロックから第Ｍブロックのいずれかに埋め込み、暗号化して復号側に伝送することができる。なお、Ｎの値を埋め込む位置は規格化しておくか、第１ブロック中に埋め込んで復号側に知らせればよい。
【００５６】
復号装置は図１４の暗号化器を復号器に変更するだけで、他は同一であるので、図示は省略する。
【００５７】
図１６は第４実施形態の復号装置の復号処理を示すフローチャートである。１ブロックの復号処理が開始すると、ステップＳ５１で、第ｎブロックの暗号化データＥｎを取得する。ステップＳ５２で、ブロック番号ｎが１であるか否か判定する。
【００５８】
ブロック番号ｎが１の場合は、ステップＳ５３で鍵Ｋｄを使用して復号器Ｄｅｃ１で復号し、ステップＳ５４で第１ブロックの平文データからＭを抜き取り、ステップＳ５５に進む。
【００５９】
ブロック番号ｎが１でない場合、直ぐにステップＳ５５に進む。
【００６０】
ステップＳ５５でブロック番号ｎがＮを抜き取るブロックか否か判定する。否の場合は、第３実施形態の復号処理のフローチャート（図１３）のステップＳ３６へ進み、ブロック番号ｎに応じていずれかの復号器に格納されている連鎖値を使用して復号処理を行う。イエスの場合は、ステップＳ５６で第ｎブロックの平文データからＮを抜き取り、ステップＳ３６に進む。
【００６１】
第５実施形態
上述したように、並列するブロック数Ｎは大きければ大きいほど、演算速度は高速化する。しかしながら、同じ鍵、連鎖値を使用するブロック数が大きいと、暗号アルゴリズムが漏れる可能性が高い。そこで、同じ鍵、連鎖値を使用するブロック数を２以下に限定した第５実施形態の暗号化装置を図１７に示す。第１乃至第４ブロックまでは、番号の若いブロックから順に２つのブロックの暗号化器に演算結果を反映させ、第５ブロック以降は５ブロック後のブロックに反映させる（Ｎ＝５である）。
【００６２】
なお、先頭から１０ブロック目（２Ｎブロック目）までの並列化処理が開始するブロックまでの連鎖値の反映の手順は、図１７の例以外にもいろいろな手順が考えられ、本発明では特に制限されない。
【００６３】
復号装置は図１７の暗号化器を復号器に変更するだけで、他は同一であるので、図示は省略する。
【００６４】
第６実施形態
図１８は第４実施形態と第５実施形態とを組み合わせた第６実施形態の暗号化装置のブロック図である。第５実施形態のＮを任意に設定可能とし、第１ブロックの平分データにＮの値を埋め込んで暗号化して復号側に伝送するものである。
【００６５】
第７実施形態
次に、本発明の暗号化／復号装置の応用例としてのハッシュ演算回路を説明する。ハッシュ演算とはサイズの大きいデータから全ビットを網羅した演算で固定長のダイジェストを作成し、ビット誤りや改竄を発見するために用いられる演算であり、データの全ビットの演算結果が最終的にダイジェストに反映されるようなアルゴリズムが用いられる。このアルゴリズムにブロック暗号化方式を用いる場合があるが、従来のブロック暗号化方式を用いると、前のブロックの演算結果が出るまで次のブロックの演算を行なうことができないことから、演算速度の向上には制限があった。
【００６６】
図１９は第２実施形態（図９）と同様なブロック暗号化方式を用いてハッシュ値を求める演算回路のブロック図である。３ブロックの並列処理により、同一の初期値から第１、第２、第３ハッシュ値ｈ１、ｈ２、ｈ３を求める。３個のハッシュ値はそれぞれ独立な値をとるので、全ビットを網羅した演算で固定長のダイジェストを作るというハッシュ値の要求には合致しない。このため、これらのハッシュ値に対して従来のブロック暗号化方式を用いて通常のハッシュ演算を施し、最終的なハッシュ値Ｈを求める。
【００６７】
一般に、ハッシュ演算を行うアルゴリズムに対する要求として、ハッシュ演算は不可逆的であり、異なる入力で偶然にハッシュ値の一致する確率は２（ハッシュ値のビット数）分の１程度であることが求められるが、第１、第２、第３ハッシュ値ｈ１、ｈ２、ｈ３を求めるブロックの段数がある程度以上であれば、この条件を満たし、最終的なハッシュ値Ｈもこの条件を満たす。
【００６８】
なお、第２実施形態に限らず、第１、第３乃至第６実施形態の暗号化方式をハッシュ演算回路に応用してもよい。
【００６９】
第８実施形態
次に、本発明の暗号化／復号装置をハードウェアで実現する具体的な実装例を説明する。一例として、図２０に第４実施形態の暗号化／復号装置（図１４）の実装例を示す。独立して動作可能な４つの暗号化／復号器１２１，１２２、１２３、１２４と、入出力用のバッファ回路であるＩ／Ｏバッファ１２６と、次回以降の演算に反映させる連鎖値を一時的に保持する連鎖値バッファ１２５と、連鎖の周期（並列処理の数Ｎ）を管理し、Ｉ／Ｏバッファ１２６から暗号化／復号器１２１、１２２、１２３、１２４への入力を選択するシーケンサ１２０からなる。暗号化／復号器１２１〜１２４は暗号化と復号の両方の機能を有するものとする。この回路は最大４つの暗号化／復号器を同時に動作させ、暗号化／復号器１つの場合に比べ４倍のスループットを得ることができる。
【００７０】
図２０の回路を用いた復号の例を示す。
【００７１】
まず、外部から入力された暗号化データはＩ／Ｏバッファ１２６に蓄積され、１ブロック単位のデータに区切られる。次に、先頭の１ブロックを暗号化／復号器１２１で図示しない復号鍵を使用して復号する。このとき、次回以降の復号演算に反映される連鎖値は連鎖値バッファ１２５に保持される。復号結果はＩ／Ｏバッファ１２６に出力され、復号結果からＭの値を入手する。Ｍの値はシーケンサ１２０に送られる。外部に出力する復号結果においてＭが埋め込まれていた場所はオール“０”など他の値で置き換えられ、Ｍの漏洩を防ぐ。ここで、Ｍ＝１であると、このブロックの復号結果に連鎖周期Ｎの値も含まれていることになる。この場合、Ｎの値もシーケンサ１２０に送られるとともに、外部に出力する復号結果においてＮが埋め込まれていた場所はＭ同様に他の値で置き換えられ、Ｎの漏洩を防ぐ。ここで、Ｎ＝４であるとする。
【００７２】
シーケンサ１２０では０〜（Ｎ−１）のブロックカウンタを動作させ、次ブロック以降ではこの番号の一致するブロックが連鎖するブロックとなる。すなわち、次のブロックのデータはＩ／Ｏ　バッファ１２６から暗号化／復号器１２２に送られ、連鎖値バッファ１２５から先頭ブロックの連鎖値を取り込む。このブロックの復号結果はＩ／Ｏ　バッファ１２６に送られ、次回以降に反映させる連鎖値は、シーケンサ１２０のカウンタ値とともに、連鎖値バッファ１２５に保持される。３ブロック目〜５ブロック目までは同様に、暗号化／復号器１２３、暗号化／復号器１２４、暗号化／復号器１２１に送られ、先頭ブロックの連鎖値を使用して復号され、その演算結果はシーケンサ１２０のカウンタ値とともに、連鎖値バッファ１２５に保持される。６ブロック目は入力データが暗号化／復号器１２２に送られるが、連鎖値バッファ１２５からはシーケンサ１２０内のカウンタ値と一致するカウンタ値を持つ連鎖値を読み出し、復号処理を行う。これを繰り返すことで、４ブロックを並列に復号する。
【００７３】
図２０の例は連鎖値を暗号化／復号器ではなく、専用のバッファ１２５に格納しているので、並列数は暗号化／復号器の数以上とすることもできる。次に、図２０の暗号化／復号装置でＮ＝６のデータを復号する場合を考える。この場合も処理は同様であり、復号時には、現在のシーケンサ１２０のカウンタ値と一致するカウンタ値を持つ連鎖値を読み出して復号処理を行い、その結果得られた６ブロック後に反映させる連鎖値をカウンタ値とともに連鎖値バッファ１２５に格納する。この場合、スループットは最大で４倍までしか上がらないが、処理可能なＮの最大値は連鎖値バッファ１２５のサイズとシーケンサ１２０のカウンタのサイズにのみに依存し、暗号化／復号器の数とは無関係である。つまりシングルプロセッサによる処理でもバッファサイズを十分に持ち、かつ処理速度が十分であれば、アルゴリズムが破綻することは無い。なお、連鎖値バッファ１２５は独立して設けるのではなく、暗号化／復号器内に設けてもよい。
【００７４】
第９実施形態
次に、図２１を参照して本発明の暗号化／復号装置をソフトウェアで実現する場合の実装例を説明する。本実施形態の装置は、中央処理装置（ＣＰＵ）２１１と、種々の情報を表示する表示装置２１２と、キーボードやポインティングデバイス（マウス等）からなる入力装置２１３と、主記憶装置２１４と、上述した暗号化／復号アルゴリズムを実現するプログラム２１５とからなる。プログラム２１５は主記憶装置２１４に読み出され、中央処理装置２１１により実行される。
【００７５】
このように本実施形態によれば、暗号化／復号アルゴリズムは、コンピュータに所定の手段を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【００７６】
なお、本発明は上記各実施形態に限定されるものではなく、実施段階ではその趣旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合、組合わせた効果が得られる。さらに、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００７７】
【発明の効果】
以上説明したように本発明によれば、ブロック毎の演算を並列処理することにより、演算速度を容易に高速化できるブロック暗号化方式の暗号化装置、復号装置、暗号化方法、復号方法、暗号化プログラム、および復号プログラムを提供することができる。
【図面の簡単な説明】
【図１】本発明の第１実施形態によるブロック暗号化方式の暗号化装置の構成を示すブロック図。
【図２】第１実施形態によるブロック暗号化方式の復号装置の構成を示すブロック図。
【図３】第１実施形態における１ブロックの暗号化処理の概要を示す図。
【図４】図３の表記に従う第１実施形態の暗号化装置の構成を示すブロック図。
【図５】第１実施形態における１ブロックの復号処理の概要を示す図。
【図６】図５の表記に従う第１実施形態の復号装置の構成を示すブロック図。
【図７】第１実施形態の暗号化処理を示すフローチャート。
【図８】第１実施形態の復号処理を示すフローチャート。
【図９】本発明の第２実施形態によるブロック暗号化方式の暗号化装置の構成を示すブロック図。
【図１０】本発明の第３実施形態によるブロック暗号化方式の暗号化装置の一例の構成を示すブロック図。
【図１１】本発明の第３実施形態によるブロック暗号化方式の暗号化装置の他の例の構成を示すブロック図。
【図１２】第３実施形態の暗号化処理を示すフローチャート。
【図１３】第３実施形態の復号処理を示すフローチャート。
【図１４】本発明の第４実施形態によるブロック暗号化方式の暗号化装置の構成を示すブロック図。
【図１５】第４実施形態の暗号化処理を示すフローチャート。
【図１６】第４実施形態の復号処理を示すフローチャート。
【図１７】本発明の第５実施形態によるブロック暗号化方式の暗号化装置の構成を示すブロック図。
【図１８】本発明の第６実施形態によるブロック暗号化方式の暗号化装置の構成を示すブロック図。
【図１９】本発明の第７実施形態によるブロック暗号化方式のハッシュ演算回路の構成を示すブロック図。
【図２０】本発明の第８実施形態によるブロック暗号化方式の暗号化／復号装置の構成を示すブロック図。
【図２１】本発明の第９実施形態によるブロック暗号化方式の暗号化／復号装置の構成を示すブロック図。
【符号の説明】
Ｐ１、Ｐ２、…平文ブロックデータ
Ｅｎｃ１、Ｅｎｃ２、…暗号化器
Ｋｅ１、Ｋｅ２、Ｋｅ３…暗号化鍵
Ｅ１、Ｅ２、…暗号化ブロックデータ
【図１】
2004138722.tif 000003
【図２】
2004138722.tif 000004
【図３】
2004138722.tif 000005
【図４】
2004138722.tif 000006
【図５】
2004138722.tif 000007
【図６】
2004138722.tif 000008
【図７】
2004138722.tif 000009
【図８】
2004138722.tif 000010
【図９】
2004138722.tif 000011
【図１０】
2004138722.tif 000012
【図１１】
2004138722.tif 000013
【図１２】
2004138722.tif 000014
【図１３】
2004138722.tif 000015
【図１４】
2004138722.tif 000016
【図１５】
2004138722.tif 000017
【図１６】
2004138722.tif 000018
【図１７】
2004138722.tif 000019
【図１８】
2004138722.tif 000020
【図１９】
2004138722.tif 000021
【図２０】
2004138722.tif 000022
【図２１】
2004138722.tif 000023