(57)【要約】【課題】カウンターモードによる暗号化処理の処理時間を短縮する。【解決手段】暗号化鍵から拡大鍵を生成する拡大鍵生成手段と、第１のカウンター値を保持し、暗号化データのデータ長が所定のデータ長以上である場合に第１のカウンター値を出力するとともに、第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、暗号化データのデータ長が所定のデータ長未満である場合に第１のカウンター値と同じ値の第２のカウンター値を保持し、第１のカウンター値と、更新されたカウンター値である又は第１のカウンター値と同じとなる第２のカウンター値とのカウンター差分を出力する情報出力手段と、カウンター差分に基づいて、拡大鍵と第１のカウンター値とから生成する中間データの範囲を決定し、その中間データを出力する中間データ生成手段と、出力された中間データを、拡大鍵を用いて暗号化するデータ攪拌手段と、を有する。【選択図】 図２
2013167740.tif 000002
【特許請求の範囲】
【請求項１】
暗号化鍵から拡大鍵を生成する拡大鍵生成手段と、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する情報出力手段と、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力する中間データ生成手段と、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力するデータ攪拌手段と、
を備えた暗号化装置。
【請求項２】
請求項１に記載の暗号化装置において、前記情報出力手段は、前記暗号化データのデータ長又は残データ長を保持する残データ長保持手段と、前記第１のカウンター値を保持する第１のカウンターと、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値を保持する第２のカウンターと、前記残データ長保持手段に保持された暗号化データのデータ長又は残データ長が所定のデータ長以上である場合に前記第１のカウンター値の更新を指示する制御手段と、前記制御手段の指示により前記第１のカウンター値を更新して前記第２のカウンターに前記第２のカウンター値として保持するカウンター更新手段と、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する差分計算手段とを有し、
前記残データ長保持手段は、前記暗号化データのデータ長を保持し、該データ長がブロック長以上である場合はブロック長を出力し、該データ長からブロック長を減算して、前記残データ長保持手段に前記残データ長として保持する暗号化装置。
【請求項３】
請求項１又は２に記載の暗号化装置において、暗号化された前記中間データを平文データに排他的論理和する演算手段を、さらに有する暗号化装置。
【請求項４】
暗号化鍵から拡大鍵を生成し、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力し、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力し、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力する、暗号化方法。
【請求項５】
請求項４に記載の暗号化方法において、前記暗号化データのデータ長又は残データ長を残データ長保持手段に保持し、前記第１のカウンター値を第１のカウンターに保持し、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値を第２のカウンターに保持し、前記残データ長保持手段に保持された暗号化データのデータ長又は残データ長が所定のデータ長以上である場合に、前記第１のカウンター値を更新して前記第２のカウンターに前記第２のカウンター値として保持し、
前記残データ長保持手段は、前記暗号化データのデータ長を保持し、該データ長がブロック長以上である場合はブロック長を出力し、該データ長からブロック長を減算して、前記残データ長保持手段に前記残データ長として保持する暗号化方法。
【請求項６】
請求項４又は５に記載の暗号化方法において、暗号化された前記中間データを平文データに排他的論理和する演算手段を、さらに有する暗号化方法。
【請求項７】
暗号化装置としてのコンピュータに、
暗号化鍵から拡大鍵を生成する機能と、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する機能と、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力する機能と、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力する機能とを、実行させるための暗号化プログラム。
【請求項８】
請求項７に記載の暗号化プログラムにおいて、
前記コンピュータに、
前記暗号化データのデータ長又は残データ長を残データ長保持手段に保持し、前記第１のカウンター値を第１のカウンターに保持し、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値を第２のカウンターに保持し、前記残データ長保持手段に保持された暗号化データのデータ長又は残データ長が所定のデータ長以上である場合に、前記第１のカウンター値を更新して前記第２のカウンターに前記第２のカウンター値として保持する機能と、
前記残データ長保持手段に前記暗号化データのデータ長を保持させ、該データ長がブロック長以上である場合はブロック長を出力し、該データ長からブロック長を減算して、前記残データ長保持手段に前記残データ長として保持する機能とを、実行させるための暗号化プログラム。
【請求項９】
請求項７又は８に記載の暗号化プログラムにおいて、暗号化された前記中間データを平文データに排他的論理和する演算機能を、前記コンピュータに実行させるための暗号化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの通信や蓄積の際にデータを秘匿するための暗号化装置、暗号化方法および暗号化プログラムに関する。
【背景技術】
【０００２】
通信データや蓄積データを秘匿する技術として共通鍵ブロック暗号がある。現在、提案されているブロック暗号のブロックサイズは６４ビットや１２８ビットである。
【０００３】
ブロック長よりも長いメッセージを暗号化する場合、メッセージをブロックサイズに分割して暗号化処理を行う。このとき、暗号利用モードと呼ばれる技術が利用される。その一つとしてカウンター（ＣＴＲ）モードがある。
ＣＴＲモードによる暗号化は、
Ｃ０＝ＥＫ（ｃｔｒ）＋Ｍ０
Ｃ１＝ＥＫ（ｃｔｒ＋１）＋Ｍ１
Ｃ２＝ＥＫ（ｃｔｒ＋２）＋Ｍ２
：
で行われる。ここで、ＥＫは鍵Ｋによる暗号化処理、ｃｔｒはカウンター初期値、Ｍｉ (iは０又は正の整数)はブロックサイズに分割したメッセージ、Ｃｉ  (iは０又は正の整数)は暗号化されたデータを示す。＋は排他的論理和（ＸＯＲ）を示す。
【０００４】
カウンター値は鍵Ｋが変更されるまで同じ値を利用してはならない。ソフトウェア実装によって、ＣＴＲモードを実装する場合、カウンター値の更新は算術加算命令で行う場合が多い。ここで、算術加算によるデータの変化に注目する。
【０００５】
図１は４ビットの２進数データに１ずつ加算したときの状態変化を示したものである。４桁の数値の右から順にビット番号を０、１、２、３とする。＋１ずつ加算したときの各ビットの状態変化を見ると、第ｎビットは２ｎ回ごとに０から１へ、または１から０へと変化している。
【０００６】
このように、算術加算における桁上がりの性質として多くの場合桁上がりの影響は局所的であり、変化があった一番下位ビットから離れるほど桁上がりの影響を受けにくい。
【０００７】
近年のブロック暗号のブロック長は６４ビット以上であることが多く、そのようなブロック暗号をＣＴＲモードで実装した場合、入力値（ｃｔｒ）の変化は局所的なものとなる。
【０００８】
本願に関連する技術については、特許文献１−３に開示された暗号化装置がある。特許文献１は、乱数生成装置から出力される乱数に依存して、暗号化処理実行中に必要な中間データを変化させる変更操作を行う中間データ制御手段を備えた暗号化装置の開示がある。特許文献２には、耐タンパ対策回路を付加した暗号デバイスの開示がある（段落００１７，００１８等）。特許文献３には、ブロックを単位として暗号化を行うブロック暗号技術を用いた暗号化装置の開示がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−３０５４５３号公報
【特許文献２】特開２００６−０２５２８８号公報
【特許文献３】国際公開第２００９／０３４９２９号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ブロック暗号によるデータ拡販処理は、ラウンド処理を仕様で決められた回数繰り返すことでメッセージと鍵データとを攪拌する。一般に、ラウンド処理１回でメッセージの各ビットがブロック幅全体に拡散することはなく、複数回繰り返すことでブロック幅全体に拡散する。
【００１１】
ＣＴＲモードにおけるカウンター値のように、連続したメッセージの変化が局所的である場合、ラウンド処理による中間データの変化も局所的になる場合があり、変化しないことが明らかな中間データの計算は無駄である。このようなケースは、ＣＴＲモードに限らず、入力データの変化が一部に限られるような場合にも当てはまる。
【００１２】
［発明の目的］
本発明の目的はこの問題を鑑みたものであり、入力データの変化が局所的である場合の暗号化装置、暗号化方法および暗号化プログラムを提供することである。
【課題を解決するための手段】
【００１３】
本発明の暗号化装置は、暗号化鍵から拡大鍵を生成する拡大鍵生成手段と、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する情報出力手段と、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力する中間データ生成手段と、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力するデータ攪拌手段と、
を備えた暗号化装置である。
【００１４】
本発明の暗号化方法は、暗号化鍵から拡大鍵を生成し、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力し、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力し、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力する、暗号化方法である。
【００１５】
本発明の暗号化プログラムは、暗号化装置としてのコンピュータに、
暗号化鍵から拡大鍵を生成する機能と、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する機能と、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力する機能と、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力する機能とを、実行させるための暗号化プログラムである。
【発明の効果】
【００１６】
本発明によれば、カウンター値に変化ない部分の中間データを計算する必要がなくなるため、暗号化処理の計算時間を短縮することができる。
【図面の簡単な説明】
【００１７】
【図１】２進数データの加算における桁上りの例を示す図である。
【図２】本発明に係る一実施形態の暗号化装置を示す図である。
【図３】カウンター更新手段を示す図である。
【図４】暗号アルゴリズムのデータ攪拌手段の一例を示す図である。
【図５】本発明の実施の処理フローを示す図である。
【図６】中間データの位置を示す図である。
【図７】ｘ１が変化した場合に更新する中間データを示す図である。
【発明を実施するための形態】
【００１８】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【００１９】
図２を参照すると、本実施形態の暗号化装置２は、拡大鍵生成部２０、データ攪拌部２１、情報出力部２２、中間データ生成部２３、及び演算部２４を備える。演算部２４は暗号化装置の外部に設けてもよい。
【００２０】
データ攪拌部２１と拡大鍵生成部２０は、どのような暗号アルゴリズムを利用してもよい。ブロック暗号アルゴリズムの代表的なものとして、ＡＥＳ(Advanced Encryption Standard)やＤＥＳ(Data Encryption Standard)がある。
【００２１】
情報出力部２２には暗号化データのデータ長（ビット）とカウンター初期値とが入力される。情報出力部２２は、ループ制御部２２０、カウンター更新部２２１、そして差分計算部２２２、第１のカウンター２２３、第２のカウンター２２４、残データ長保存部２２５を備える。
【００２２】
データ長は残データ長保存部２２５へ保存される。
【００２３】
ループ制御部２２０は、残データ長保存部２２５に保存された残データ長が１ビット以上であれば、カウンター更新部２２１へ更新指示を出す。そして、残データ長がブロック長（Ｎビットとする）以上あれば、暗号化データ長としてＮを出力し、残データ長保存部２２５に保存された残データ長からＮを減算する。
【００２４】
残データ長保存部２２５に保存された残データ長がＮ未満（Ｍビットとする）であれば、暗号化データ長としてＭを出力し、残データ長を０にする。
【００２５】
カウンター初期値はカウンター２２３に保存される。カウンター更新部２２１は、ループ制御部２２０からの更新指示を受けると、カウンター２２３のカウント値を出力するとともに、カウンター値をインクリメントし、カウンター２２４へ保存する。
【００２６】
差分計算部２２２はカウンター２２３のカウント値とカウンター２２４のカウント値との差分を計算する。ここで、差分とはカウンター２２３とカウンター２２４の排他的論理和した結果をいう。カウンター２２３とカウンター２２４の第ｉビット（０≦ｉ≦Ｎ−１）が等しければ差分値は０となり、異なっていれば差分値は１となる。差分を計算した後、カウンター２２３はカウンター２２４の値で更新される。
【００２７】
データ攪拌部２１の一構成例を図４を用いて説明する。８ｎ（ｎ≧３）ビットの入力データ（中間データ）は８つのｎビットデータに分割され処理が行われる。Ｆ関数３は、ｎビットのデータとｎビットの拡大鍵ｅｋｉｊ（１≦ｉ≦ｒ、０≦ｊ≦３）を入力とし、それらを攪拌してｎビットのデータを出力する。Ｆ関数の出力データは排他的論理和回路４により、他のｎビットデータと排他的論理和（○の中に＋の記号。以降、ＸＯＲと記述する）される。Ｆ関数処理後の８つのｎビットデータは巡回シフトして次のラウンドへ渡される。ｒラウンド後のデータを結合した８ｎビットが出力データとなる。
【００２８】
次に、図２、図３、図４および図５のフローチャートを参照して、本実施の形態の動作について説明する。
【００２９】
まず、拡大鍵生成部２０で暗号化鍵から拡大鍵を生成する（ステップＳ１）。図４のアルゴリズムの場合、４ｎ×ｒビットの拡大鍵を生成し、内部メモリなどの記憶装置に保持する。拡大鍵の生成方法は採用する暗号アルゴリズムで規定された方法とし、例えば、AESであれば、FIPS-197で規定されているKey Expansionに従った方法を採用することができる。
【００３０】
次に、中間データ生成部２３は、記憶装置に保持された拡大鍵を読出し、この拡大鍵と、情報出力部２２から出力されるカウンター値とから中間データを生成する（ステップＳ２）。
【００３１】
中間データ生成部２３により具体的に生成する中間データを図６を参照して説明する。
【００３２】
８ｎビットのカウンター値は８つのｎビットデータに分割される。ｘ０が下位、ｘ７が上位とする。
【００３３】
ｘ０はカウンターの最下位に位置するため、必ずカウンター値が変化するデータである。
【００３４】
太線のデータパスはｘ０が影響するパスを表しており、太線のパス上のＦ関数５０〜６５は毎ブロック計算をする。８ラウンド出力の８つの中間データ全てにｘ０が影響しているので、９ラウンド以降は全てのＦ関数を計算しなければならない。中間データとして保持するのは、ｘ０が影響しない細線のデータパス上にあるＦ関数の出力データ５００〜５２２の（２３×ｎ）ビットである。
【００３５】
中間データ生成部２３は情報出力部２２から出力されるカウンター差分を用いて更新する中間データを決定する。図６の中間データ生成部２３の例では、カウンター差分の１が立っている最上位ビット（第ｋビットとする）の位置を見ることで判定できる。ｋ≦ｎ−１であれば中間データは変化しないため、更新処理は行わない。もし、ｎ≦ｋ≦２ｎ−１であれば、ｘ１が変化していることを意味している。この場合、中間データ５００、５０２、５０５、５０８、５１０を更新する。このとき、中間データ５１１、５１２、５１３を利用することにより、再計算するＦ関数は６６〜６９のみにすることができる。また、２ｎ≦ｋ≦３ｎ−１であれば、ｘ２、ｘ１が変化することを意味する。この場合、上記中間データに加え、中間データ５０９、５１１、５１２、５１３を更新する。ただし，中間データ５０９、５１１、５１２、５１３を更新してから中間データ５００、５０２、５０５、５０８、５１０を更新する。なお、暗号化処理開始時は、カウンター差分として例えばオール１をという値を設定することにより、全中間データを計算する。
【００３６】
次に、暗号化するデータ長を残データ長へ設定する（ステップＳ３）。
【００３７】
暗号化処理はステップＳ４〜Ｓ７を繰り返す。
【００３８】
残データ長が０ならば暗号化処理が完了したと判断して終了し、残データ長が０でなければカウンター値を暗号化する（ステップＳ４）。
【００３９】
カウンター値の暗号化処理における８ラウンドまでの計算は、ｘ０を入力として図６の太線のデータパスを計算する。以下に手順を示す。
１．ｘ０に中間データ５００をＸＯＲする（ＸＯＲした結果をｔ０とする）。
２．ｔ０をＦ関数５０で拡大鍵ｅｋ２０と攪拌し、Ｆ関数５０の出力データと中間データ５０１をＸＯＲする（ＸＯＲした結果をｔ１とする）。
３．ｔ０に中間データ５０２をＸＯＲする（ＸＯＲした結果をｔ０１とする）。
４．ｔ１をＦ関数５１で拡大鍵ｅｋ３０と攪拌し、Ｆ関数５１の出力データと中間データ５０３をＸＯＲする（ＸＯＲした結果をｔ２とする）。
５．ｔ０１をＦ関数５２で拡大鍵ｅｋ４１と攪拌し、Ｆ関数５２の出力データをｔ１にＸＯＲする（ＸＯＲした結果をｔ１１とする）。
６．ｔ２をＦ関数５３で拡大鍵ｅｋ４０と攪拌し、Ｆ関数５３の出力データと中間データ５０４をＸＯＲする（ＸＯＲした結果をｔ３とする）。
７．ｔ０１に中間データ５０５をＸＯＲする（ＸＯＲした結果をｔ０２とする）。
８．ｔ１１をＦ関数５４で拡大鍵ｅｋ５１と攪拌し、Ｆ関数５４の出力データをｔ２にＸＯＲする（ＸＯＲした結果をｔ２１とする）。
９．ｔ３をＦ関数５５で拡大鍵ｅｋ５０と攪拌し、Ｆ関数５５の出力データと中間データ５０６をＸＯＲする（ＸＯＲした結果をｔ４とする）。
１０．ｔ０２をＦ関数５６で拡大鍵ｅｋ６２と攪拌し、Ｆ関数５６の出力データをｔ１１にＸＯＲする（ＸＯＲした結果をｔ１２とする）。
１１．ｔ２１をＦ関数５７で拡大鍵ｅｋ６１と攪拌し、Ｆ関数５７の出力データをｔ３にＸＯＲする（ＸＯＲした結果をｔ３１とする）。
１２．ｔ４をＦ関数５８で拡大鍵ｅｋ６０と攪拌し、Ｆ関数５８の出力データと中間データ５０７をＸＯＲする（ＸＯＲした結果をｔ５とする）。
１３．ｔ０２に中間データ５０８をＸＯＲする（ＸＯＲした結果をｔ０３とする）。
１４．ｔ１２をＦ関数５９で拡大鍵ｅｋ７２と攪拌し、Ｆ関数５９の出力データをｔ２１にＸＯＲする（ＸＯＲした結果をｔ２２とする）。
１５．ｔ３１をＦ関数６０で拡大鍵ｅｋ７１と攪拌し、Ｆ関数６０の出力データをｔ４にＸＯＲする（ＸＯＲした結果をｔ４１とする）。
１６．ｔ５をＦ関数６１で拡大鍵ｅｋ７０と攪拌し、Ｆ関数６１の出力データと中間データ５０９をＸＯＲする（ＸＯＲした結果をｔ６とする）。
１７．ｔ０３をＦ関数６２で拡大鍵ｅｋ８３と攪拌し、Ｆ関数６２の出力データをｔ１２にＸＯＲする（ＸＯＲした結果をｔ１３とする）。
１８．ｔ２２をＦ関数６３で拡大鍵ｅｋ８２と攪拌し、Ｆ関数６３の出力データをｔ３１にＸＯＲする（ＸＯＲした結果をｔ３２とする）。
１９．ｔ４１をＦ関数６４で拡大鍵ｅｋ８１と攪拌し、Ｆ関数６４の出力データをｔ５にＸＯＲする（ＸＯＲした結果をｔ５１とする）。
２０．ｔ６をＦ関数６５で拡大鍵ｅｋ８０と攪拌し、Ｆ関数６５の出力データと中間データ５１０をＸＯＲする（ＸＯＲした結果をｔ７とする）。
【００４０】
以上の手順で計算したｔ０３、ｔ１３、ｔ２２、ｔ３２、ｔ４１、ｔ５１、ｔ６、ｔ７が８ラウンドの出力データになるので、残りの（ｒ−８）は拡大鍵を利用して全てのＦ関数計算を行う。
【００４１】
そして、残データ長がブロック長Ｎ以上であれば、データ攪拌部から出力されたＮビットデータを平文にＸＯＲする。Ｎビット未満であれば、残っているデータ長分のみＸＯＲする。
【００４２】
そして、残データを更新する（ステップＳ６）。残データ長がＮビット以上であればＮを減算し、Ｎビット未満であれば残データ長を０にする。
【００４３】
次に、カウンター値を更新する（ステップＳ７）。このとき、中間データに影響する桁上りは発生していなければステップＳ４へ戻る（ステップＳ８）。もし中間データに影響する桁上りが発生したならば、中間データの更新を行う（ステップＳ９）
本実施形態に係わる暗号化装置は図２に示した各部を専用ＩＣ等のハードウェアで構成している。ここで、２以上の構成部を集積化することもできる。しかし、図２に示す構成部をコンピュータを用いてソフトウェアで実現することもできる。
【００４４】
コンピュータをＣＰＵ、ハードディスク等のディスク装置（ＲＯＭ等のメモリであってもよい）、ＲＡＭ等のメモリ、液晶ディスプレイ等の表示部で構成し、情報出力部２２、中間データ生成部２３、拡大鍵生成部２０、データ攪拌部２１の動作をプログラムで記述し、このプログラムをハードディスク等のディスク装置に記憶し、演算に必要な情報（中間データ等）をＲＡＭ等のメモリに記憶し、ＣＰＵで当該プログラムを動作させることで、本実施形態の暗号化装置の機能をプログラムで実現することができる。当該プログラムは、ＤＶＤ、ＣＤ−ＲＯＭ、ＵＳＢメモリ等のコンピュータ読み取り可能な記録媒体に記録し、ハードディスクにインストールすることで、コンピュータに読み込むことができる。
【００４５】
上述した各実施形態は、本発明の好適な実施形態ではあるが、上記実施形態のみに本発明の範囲を限定するものではなく、本発明の要旨を逸脱しない範囲において種々の変更を施した形態での実施が可能である。そのため、前述した各実施形態は単なる例示にすぎず、限定的に解釈されるべきではない。本発明の範囲は特許請求の範囲によって示すものであって、明細書や要約書の記載には拘束されない。さらに、特許請求の範囲の均等範囲に属する変形や変更はすべて本発明の範囲内のものである。
【００４６】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下の構成には限られない。
【００４７】
（付記１）
暗号化鍵から拡大鍵を生成する拡大鍵生成手段と、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する情報出力手段と、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力する中間データ生成手段と、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力するデータ攪拌手段と、
を備えた暗号化装置。
【００４８】
（付記２）
付記１に記載の暗号化装置において、前記情報出力手段は、前記暗号化データのデータ長又は残データ長を保持する残データ長保持手段と、前記第１のカウンター値を保持する第１のカウンターと、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値を保持する第２のカウンターと、前記残データ長保持手段に保持された暗号化データのデータ長又は残データ長が所定のデータ長以上である場合に前記第１のカウンター値の更新を指示する制御手段と、前記制御手段の指示により前記第１のカウンター値を更新して前記第２のカウンターに前記第２のカウンター値として保持するカウンター更新手段と、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する差分計算手段とを有し、
前記残データ長保持手段は、前記暗号化データのデータ長を保持し、該データ長がブロック長以上である場合はブロック長を出力し、該データ長からブロック長を減算して、前記残データ長保持手段に前記残データ長として保持する暗号化装置。
【００４９】
（付記３）
付記１又は２に記載の暗号化装置において、暗号化された前記中間データを平文データに排他的論理和する演算手段を、さらに有する暗号化装置。
【００５０】
（付記４）
暗号化鍵から拡大鍵を生成し、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力し、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力し、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力する、暗号化方法。
【００５１】
（付記５）
付記４に記載の暗号化方法において、前記暗号化データのデータ長又は残データ長を残データ長保持手段に保持し、前記第１のカウンター値を第１のカウンターに保持し、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値を第２のカウンターに保持し、前記残データ長保持手段に保持された暗号化データのデータ長又は残データ長が所定のデータ長以上である場合に、前記第１のカウンター値を更新して前記第２のカウンターに前記第２のカウンター値として保持し、
前記残データ長保持手段は、前記暗号化データのデータ長を保持し、該データ長がブロック長以上である場合はブロック長を出力し、該データ長からブロック長を減算して、前記残データ長保持手段に前記残データ長として保持する暗号化方法。
【００５２】
（付記６）
付記４又は５に記載の暗号化方法において、暗号化された前記中間データを平文データに排他的論理和する演算手段を、さらに有する暗号化方法。
【００５３】
（付記７）
暗号化装置としてのコンピュータに、
暗号化鍵から拡大鍵を生成する機能と、
暗号化データに基づく第１のカウンター値を保持し、前記暗号化データのデータ長が所定のデータ長以上である場合に前記第１のカウンター値を出力するとともに、前記第１のカウンター値の更新されたカウンター値を第２のカウンター値として保持し、前記暗号化データのデータ長が所定のデータ長未満である場合に前記第１のカウンター値と同じ値の第２のカウンター値を保持し、前記第１のカウンター値と、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値とのカウンター差分を出力する機能と、
前記カウンター差分に基づいて、前記拡大鍵と前記第１のカウンター値とから生成する中間データの範囲を決定し、生成された中間データを出力する機能と、
出力された前記中間データを、前記拡大鍵を用いて暗号化して出力する機能とを、実行させるための暗号化プログラム。
【００５４】
（付記８）
付記７に記載の暗号化プログラムにおいて、
前記コンピュータに、
前記暗号化データのデータ長又は残データ長を残データ長保持手段に保持し、前記第１のカウンター値を第１のカウンターに保持し、更新されたカウンター値である又は前記第１のカウンター値と同じとなる前記第２のカウンター値を第２のカウンターに保持し、前記残データ長保持手段に保持された暗号化データのデータ長又は残データ長が所定のデータ長以上である場合に、前記第１のカウンター値を更新して前記第２のカウンターに前記第２のカウンター値として保持する機能と、
前記残データ長保持手段に前記暗号化データのデータ長を保持させ、該データ長がブロック長以上である場合はブロック長を出力し、該データ長からブロック長を減算して、前記残データ長保持手段に前記残データ長として保持する機能とを、実行させるための暗号化プログラム。
【００５５】
（付記９）
付記７又は８に記載の暗号化プログラムにおいて、暗号化された前記中間データを平文データに排他的論理和する演算機能を、前記コンピュータに実行させるための暗号化プログラム。
【産業上の利用可能性】
【００５６】
本発明は、音声通信端末やデータ通信装置などの通信データの秘匿や、ストレージ上の蓄積データの暗号化といった用途に適用できる。
【符号の説明】
【００５７】
２  暗号化装置
３  Ｆ関数
４  排他的論理和
２０  拡大鍵生成部
２１  データ攪拌部
２２  情報出力部
２３  中間データ生成部
５００〜５２２  中間データ
５０〜６９  Ｆ関数
【図１】
2013167740.tif 000003
【図２】
2013167740.tif 000004
【図３】
2013167740.tif 000005
【図４】
2013167740.tif 000006
【図５】
2013167740.tif 000007
【図６】
2013167740.tif 000008
【図７】
2013167740.tif 000009