(57)【特許請求の範囲】
【請求項１】
平文データをブロック暗号化するブロック暗号装置であって、
上記平文データを格納するメモリと、
上記平文データの一部のビット列を第１部分データの初期値として読み込み、当該平文データの他のビット列を第２部分データの初期値として読み込むデータ分割部と、
第１部分データを用い、これとビット長が異なる第１変換データを生成する第１変換部と、
上記鍵データを用いて上記第１変換データをブロック暗号化したブロック暗号文データを生成するブロック暗号化部と、
上記ブロック暗号文データを用い、第２部分データにビット長が等しい第２変換データを生成する第２変換部と、
第２部分データと第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとする排他的論理和計算部と、
第１部分データと第２部分データとを交換し、新たに第１変換部とブロック暗号化部と第２変換部と排他的論理和計算部との処理を実行させるラウンド処理を、繰り返し実行させる制御部とを有し、
上記ブロック暗号化部が用いる鍵データは、
少なくとも何れかのラウンド処理間で共通であり、
上記第２変換部は、
ブロック暗号文データから切り出した１部のビット列を第２変換データとし、
上記第２変換部がブロック暗号文データから取り出すビットの位置は、
少なくとも何れかのラウンド処理間で相違する、
ことを特徴とするブロック暗号装置。
【請求項２】
請求項１に記載のブロック暗号装置であって、
上記ブロック暗号化部が用いる鍵データは、
全てのラウンド処理間で共通であり、
上記第２変換部がブロック暗号文データから切り出すビットの位置は、
全てのラウンド処理間で相違する、
ことを特徴とするブロック暗号装置。
【請求項３】
請求項２に記載のブロック暗号装置であって、
ラウンド処理ごとに異なるカウント値を出力するカウンタを有し、
上記ブロック暗号化部は、
メモリに格納された１つの鍵データを全てのラウンド処理での暗号鍵としてブロック暗号文データを生成し、
上記第２変換部は、
上記カウンタから出力されたカウント値の整数倍を先頭アドレスとするビット列を、ブロック暗号文データから切り出す、
ことを特徴とするブロック暗号装置。
【請求項４】
請求項１から３のいずれかに記載のブロック暗号装置であって、
平文データのビット長は、鍵データのビット長よりも短い、
ことを特徴とするブロック暗号装置。
【請求項５】
暗号文データをブロック復号化するブロック復号装置であって、
暗号文データを格納するメモリと、
暗号文データの１部のビット列を第１部分データの初期値として読み込み、当該暗号文データの他のビット列を第２部分データの初期値として読み込むデータ分割部と、
第１部分データを用い、これとビット長が異なる第１変換データを生成する第１変換部と、
鍵データを用いて第１変換データをブロック復号化したブロック復号文データを生成するブロック復号化部と、
ブロック復号文データを用い、第２部分データにビット長が等しい第２変換データを生成する第２変換部と、
第２部分データと第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとする排他的論理和計算部と、
第１部分データと第２部分データとを交換し、新たに第１変換部とブロック復号部と第２変換部と排他的論理和計算部との処理を実行させるラウンド処理を、繰り返し実行させる制御部とを有し、
上記ブロック復号部が用いる鍵データは、
少なくとも何れかのラウンド処理間で共通であり、
上記第２変換部は、
ブロック復号文データから切り出した１部のビット列を第２変換データとし、
上記第２変換部がブロック復号文データから取り出すビットの位置は、
少なくとも何れかのラウンド処理間で相違する、
ことを特徴とするブロック復号装置。
【請求項６】
請求項５に記載のブロック復号装置であって、
上記ブロック復号部が用いる鍵データは、
全てのラウンド処理間で共通であり、
上記第２変換部がブロック復号文データから切り出すビットの位置は、
全てのラウンド処理間で相違する、
ことを特徴とするブロック復号装置。
【請求項７】
請求項６に記載のブロック復号装置であって、
ラウンド処理ごとに異なるカウント値を出力するカウンタを有し、
上記ブロック復号部は、
メモリに格納された１つの鍵データを全てのラウンド処理での暗号鍵としてブロック復号文データを生成し、
上記第２変換部は、
上記カウンタから出力されたカウント値の整数倍を先頭アドレスとするビット列を、ブロック復号文データから切り出す、
ことを特徴とするブロック復号装置。
【請求項８】
請求項５から７のいずれかに記載のブロック復号装置であって、
平文データのビット長は、鍵データのビット長よりも短い、
ことを特徴とするブロック復号装置。
【請求項９】
平文データをブロック暗号化するブロック暗号方法であって、
第１変換部が、第１部分データを用い、これとビット長が異なる第１変換データを生成する第１変換ステップと、
ブロック暗号化部が、上記鍵データを用いて上記第１変換データをブロック暗号化したブロック暗号文データを生成するブロック暗号化ステップと、
第２変換部が、上記ブロック暗号文データを用い、第２部分データにビット長が等しい第２変換データを生成する第２変換ステップと、
排他的論理和計算部が、上記第２部分データと上記第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとする排他的論理和計算ステップと、を有し、
第１部分データと第２部分データとを交換し、新たに第１変換ステップとブロック暗号化ステップと第２変換ステップと排他的論理和計算ステップとの処理を実行させるラウンド処理が、繰り返し実行され、
上記ブロック暗号化ステップで用いる鍵データは、
少なくとも何れかのラウンド処理間で共通であり、
上記第２変換ステップは、
ブロック暗号文データから切り出した１部のビット列を第２変換データとするステップであり、
上記第２変換ステップがブロック暗号文データから取り出すビットの位置は、
少なくとも何れかのラウンド処理間で相違する、
ことを特徴とするブロック暗号方法。
【請求項１０】
請求項９に記載のブロック暗号方法であって、
上記ブロック暗号化ステップで用いられる鍵データは、
全てのラウンド処理間で共通であり、
上記第２変換ステップでブロック暗号文データから切り出されるビットの位置は、
全てのラウンド処理間で相違する、
ことを特徴とするブロック暗号方法。
【請求項１１】
請求項１０に記載のブロック暗号方法であって、
ラウンド処理ごとに異なるカウント値を出力するカウンタを有し、
上記ブロック暗号化ステップは、
メモリに格納された１つの鍵データを全てのラウンド処理での暗号鍵としてブロック暗号文データを生成するステップであり、
上記第２変換ステップは、
上記カウンタから出力されたカウント値の整数倍を先頭アドレスとするビット列を、ブロック暗号文データから切り出すステップである、
ことを特徴とするブロック暗号方法。
【請求項１２】
請求項９から１１のいずれかに記載のブロック暗号方法であって、
平文データのビット長は、鍵データのビット長よりも短い、
ことを特徴とするブロック暗号方法。
【請求項１３】
暗号文データをブロック復号化するブロック復号方法であって、
第１変換部が、第１部分データを用い、これとビット長が異なる第１変換データを生成するステップと、
ブロック復号化部が、上記鍵データを用いて上記第１変換データをブロック復号化したブロック復号文データを生成するステップと、
第２変換部が、上記ブロック復号文データを用い、第２部分データにビット長が等しい第２変換データを生成するステップと、
排他的論理和計算部が、上記第２部分データと上記第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとするステップと、
第１部分データと第２部分データとを交換し、新たに第１変換ステップとブロック復号ステップと第２変換ステップと排他的論理和計算ステップとの処理を実行させるラウンド処理が、繰り返し実行され、
上記ブロック復号ステップで用いられる鍵データは、
少なくとも何れかのラウンド処理間で共通であり、
上記第２変換ステップは、
ブロック復号文データから切り出した１部のビット列を第２変換データとするステップであり、
上記第２変換ステップがブロック復号文データから取り出すビットの位置は、
少なくとも何れかのラウンド処理間で相違する、
ことを特徴とするブロック復号方法。
【請求項１４】
請求項１３に記載のブロック復号方法であって、
上記ブロック復号ステップで用いられる鍵データは、
全てのラウンド処理間で共通であり、
上記第２変換ステップでブロック復号文データから切り出されるビットの位置は、
全てのラウンド処理間で相違する、
ことを特徴とするブロック復号方法。
【請求項１５】
請求項１４に記載のブロック復号方法であって、
ラウンド処理ごとに異なるカウント値を出力するカウンタを有し、
上記ブロック復号ステップは、
メモリに格納された１つの鍵データを全てのラウンド処理での暗号鍵としてブロック復号文データを生成するステップであり、
上記第２変換ステップは、
上記カウンタから出力されたカウント値の整数倍を先頭アドレスとするビット列を、ブロック復号文データから切り出すステップである、
ことを特徴とするブロック復号方法。
【請求項１６】
請求項１３から１５のいずれかに記載のブロック復号方法であって、
平文データのビット長は、鍵データのビット長よりも短い、
ことを特徴とするブロック復号方法。
【請求項１７】
請求項１から４の何れかに記載のブロック暗号装置としてコンピュータを機能させるためのプログラム。
【請求項１８】
請求項５から８の何れかに記載のブロック復号装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号技術に関し、特にブロック暗号技術に関する。
【背景技術】
【０００２】
近年、インターネット等のデジタルネットワークの発達により様々な暗号技術が利用されるようになった。例えば、ブロック暗号は共通鍵暗号方式として広く用いられている暗号方式であり、「ブロック」と呼ばれる固定長のデータを単位として暗号化復号を行うものである（非特許文献１参照）。このブロック暗号の分野では、ＡＥＳ等の固定ブロック長のブロック暗号が比較的簡便に利用可能である。なお、「ブロック長」とは、「ブロック」のビット長を意味する。
【非特許文献１】岡本龍明、山本博資、「現代暗号」第３刷、産業図書株式会社、２０００年１月２５日、Ｐ６
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、従来のＡＥＳ等の固定ブロック長のブロック暗号では、その固定ブロック長以外の暗号が必要な場合、それとブロック長が異なるブロック暗号を別途用意しなくてはならなかった。
本発明はこのような点に鑑みてなされたものであり、ブロック長の異なる暗号文を容易に生成することを可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００４】
上記課題を解決するために、平文データを格納するメモリと、平文データの一部のビット列を第１部分データの初期値として読み込み、当該平文データの他のビット列を第２部分データの初期値として読み込むデータ分割部と、第１部分データを用い、これとビット長が異なる第１変換データを生成する第１変換部と、鍵データを用いて第１変換データをブロック暗号化したブロック暗号文データを生成するブロック暗号化部と、ブロック暗号文データを用い、第２部分データにビット長が等しい第２変換データを生成する第２変換部と、第２部分データと第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとする排他的論理和計算部と、を有するブロック暗号装置が提供される。
【０００５】
ここで、第１変換部が、第１部分データを用い、これとビット長が異なる第１変換データを生成することとし、第２変換部が、ブロック暗号文データを用い、第２部分データにビット長が等しい第２変換データを生成することとした。これにより、取り扱う平文データや暗号文データのブロック長を容易に変更することができる。
また、本発明のブロック暗号装置において好ましくは、第１部分データと第２部分データとを交換し、新たに第１変換部とブロック暗号化部と第２変換部と排他的論理和計算部との処理を実行させるラウンド処理を、繰り返し実行させる制御部を有する。そして、ブロック暗号化部が用いる鍵データは、少なくとも何れかのラウンド処理間で共通である。また、第２変換部は、ブロック暗号文データから切り出した１部のビット列を第２変換データとし、第２変換部がブロック暗号文データから取り出すビット列の位置は、少なくとも何れかのラウンド処理間で相違する。
【０００６】
ここで、第２変換部がブロック暗号文データから取り出すビットの位置を、少なくとも何れかのラウンド処理間で相違させることとした。これにより、ビットの取り出し位置が相違するラウンド処理間で生成された第２部分データの相関をなくすことができる。これにより、暗号の安全性が向上する。
またこれは、このラウンド処理間で使用される鍵データが同じであってもいえることである。すなわちこのラウンド処理間では、鍵データを相違させる処理を行うことなく、生成された第２部分データの相関をなくすことができる。これは、演算量を低く抑えつつ、暗号の安全性を向上させることができることを意味する。
【０００７】
また、本発明のブロック暗号装置において好ましくは、ブロック暗号化部が用いる鍵データは、全てのラウンド処理間で共通であり、第２変換部がブロック暗号文データから切り出すビットの位置は、全てのラウンド処理間で相違する。
これにより、ラウンド処理間で鍵データを相違させるための処理を全く行うことなく、各ラウンド処理によって生成された全ての第２部分データの相関をなくすことができる。これにより、さらに演算量を低く抑え、暗号の安全性を向上させることが可能となる。
また、本発明のブロック暗号装置において好ましくは、ラウンド処理ごとに異なるカウント値を出力するカウンタを有し、ブロック暗号化部は、メモリに格納された１つの鍵データを全てのラウンド処理での暗号鍵としてブロック暗号文データを生成し、第２変換部は、カウンタから出力されたカウント値の整数倍を先頭アドレスとするビット列を、ブロック暗号文データから切り出す。
【０００８】
さらに、本発明のブロック暗号装置において好ましくは、平文データのビット長は、鍵データのビット長よりも短い。
これにより、安全性が高いビット長が長いの鍵データを用い、それよりもビット長が短い平文データを暗号化することができる。
また、上記課題を解決するために、暗号文データを格納するメモリと、暗号文データの１部のビット列を第１部分データの初期値として読み込み、当該暗号文データの他のビット列を第２部分データの初期値として読み込むデータ分割部と、第１部分データを用い、これとビット長が異なる第１変換データを生成する第１変換部と、鍵データを用いて第１変換データをブロック復号化したブロック復号文データを生成するブロック復号化部と、ブロック復号文データを用い、第２部分データにビット長が等しい第２変換データを生成する第２変換部と、第２部分データと第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとする排他的論理和計算部と、を有するブロック復号装置が提供される。
【０００９】
これにより、取り扱う平文データや暗号文データのブロック長を容易に変更することができる。
【発明の効果】
【００１０】
上述のように、本発明では、取り扱う平文データや暗号文データのブロック長を容易に変更することができる。
また、第２変換部がブロック暗号文データから取り出すビット列の位置を、少なくとも何れかのラウンド処理間で相違させることにより、演算量の増加を抑えつつ、安全性を向上させることができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態を図面を参照して説明する。
〔第１の実施の形態〕
まず、本発明における第１の実施の形態について説明する。
＜ブロック暗号装置の構成＞
［ブロック暗号装置のハードウェア構成］
図１は、本形態におけるブロック暗号装置１のハードウェア構成を例示したブロック図である。
【００１２】
図１に例示するように、この例のブロック暗号装置１は、ＣＰＵ（Central Processing Unit）２、入力部３、補助記憶装置４、ＲＡＭ（Random Access Memory）５、ＲＯＭ（Read Only Memory）６、通信部７及びバス８を有している。
この例のＣＰＵ１２は、制御部２ａ、演算部２ｂ及びレジスタ２ｃを有し、レジスタ２ｃに読み込まれた各種プログラムに従って様々な演算処理を実行する。また、この例の入力部３は、データが入力される入力ポート、キーボード、マウス等であり、送信部７は、インターネット等のネットワークを通じた情報通信を行うＮＩＣ(Network Interface Card)、モデム等である。補助記憶装置４は、例えば、ハードディスク、ＭＯ（Magneto-Optical disc）、半導体メモリ等であり、本形態のブロック暗号処理を実行するためのプログラムを格納したプログラム領域４ａ及び各種データが格納されるデータ領域４ｂを有している。また、ＲＡＭ５は、例えば、ＳＲＡＭ (Static Random Access Memory)、ＤＲＡＭ (Dynamic Random Access Memory)等であり、プログラム領域５ａ及びデータ領域５ｂを有している。また、この例のバス８は、ＣＰＵ２、入力部３、補助記憶装置４、ＲＡＭ５、ＲＯＭ６及び通信部７を通信可能に接続している。
【００１３】
［ブロック暗号装置のソフトウェア構成］
次に、プログラム領域４ａ，５ａに格納されるブロック暗号装置のプログラムの構成について説明する。
このプログラムは、平文データの１部のビット列を第１部分データの初期値として読み込み、当該平文データの他のビット列を第２部分データの初期値として読み込むためのデータ分割プログラムと、第１部分データを用い、これとビット長が異なる第１変換データを生成するための第１変換プログラムと、鍵データを用いて第１変換データをブロック暗号化したブロック暗号文データを生成するためのブロック暗号化プログラムと、ブロック暗号文データを用い、第２部分データにビット長が等しい第２変換データを生成するための第２変換プログラムと、第２部分データと第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとするための排他的論理和計算プログラムと、第１部分データと第２部分データとの交換操作を実行するための交換操作プログラムと、第１部分データと第２部分データとを結合して暗号文データを生成するための結合プログラムと、ブロック暗号装置全体を制御するための制御プログラムとを有している。
【００１４】
なお、これらの各プログラムは、単一のプログラム列として構成されていてもよく、また、少なくとも１部のプログラムが別個のモジュールとしてライブラリに格納されていてもよい。また、上記のプログラム単体でその機能を実現できるものでもよいし、上記のプログラムがさらに他のライブラリ（記載していない）を読み出して各機能を実現するものでもよい。
［ハードウェアとソフトウェアとの協働］
この例のＣＰＵ２は、読み込まれたＯＳ（Operating System）プログラムに従い、補助記憶装置４のプログラム領域４ａに格納されている上述のプログラムを、ＲＡＭ５のプログラム領域５ａに書き込む。同様にＣＰＵ２は、補助記憶装置４のデータ領域４ｂに格納されている各種データをＲＡＭ５のデータ領域５ｂに書き込む。さらに、ＣＰＵ２は、このプログラムや各種データが書き込まれたＲＡＭ５上のアドレスをレジスタ２ｃに格納する。そして、ＣＰＵ２の制御部２ａは、レジスタ２ｃに格納されたこれらのアドレスを順次読み出し、読み出したアドレスが示すＲＡＭ５上の領域からプログラムやデータを読み出し、そのプログラムが示す演算を演算部２ｂ順次実行させ、その演算結果をレジスタ２ｃに格納していく。
【００１５】
図２は、このようにＣＰＵ２にプログラムが読み込まれることにより構成されるブロック暗号装置１のブロック図の例示である。なおこの図では、制御部８０に出入りするデータの流れの記載を省略している。
図２に例示するように、この例のブロック暗号装置１は、データ分割部１０、第１変換部２０、カウンタ３１、ブロック暗号化部３２、３３、第２変換部４０、排他的論理和計算部５０、データ操作部６０、メモリ７０及び制御部８０を有している。なお、メモリ７０は、領域７１〜７７を有している。
【００１６】
ここで、メモリ７０は、例えば、補助記憶装置４、ＲＡＭ５、レジスタ２ｃの何れか或いはこれらを併用した記憶領域に相当する。またこの例のデータ分割部１０、第１変換部２０、カウンタ３１、ブロック暗号化部３２、３３、第２変換部４０、排他的論理和計算部５０、データ操作部６０及び制御部８０は、上述のプログラムが読み込まれたＣＰＵ２に相当する。また、メモリ７０に格納される各データについては後述する。
＜ブロック復号装置の構成＞
［ブロック復号装置のハードウェア構成］
図１に例示したブロック暗号装置のハードウェア構成と同様である。
【００１７】
［ブロック復号装置のプログラム構成］
ブロック復号装置のプログラムは、暗号文データの１部のビット列を第１部分データの初期値として読み込み、当該暗号文データの他のビット列を第２部分データの初期値として読み込むためのデータ分割プログラムと、第１部分データを用い、これとビット長が異なる第１変換データを生成するための第１変換プログラムと、鍵データを用いて第１変換データをブロック復号化したブロック復号文データを生成するためのブロック復号化プログラムと、ブロック復号文データを用い、第２部分データにビット長が等しい第２変換データを生成するための第２変換プログラムと、第２部分データと第２変換データとの排他的論理和を計算し、その計算結果を新たな第２部分データとするための排他的論理和計算プログラムと、第１部分データと第２部分データとの交換操作を実行するための交換操作プログラムと、第１部分データと第２部分データとを結合して平文データを生成するための結合プログラムと、ブロック復号装置全体を制御するための制御プログラムとを有している。
【００１８】
なお、これらの各プログラムは、単一のプログラム列として構成されていてもよく、また、少なくとも１部のプログラムが別個のモジュールとしてライブラリに格納されていてもよい。また、上記のプログラム単体でその機能を実現できるものでもよいし、上記のプログラムがさらに他のライブラリ（記載していない）を読み出して各機能を実現するものでもよい。
［ハードウェアとソフトウェアとの協働］
図３は、ブロック暗号装置１と同様に、ＣＰＵにプログラムが読み込まれることにより構成されるブロック復号装置２００のブロック図の例示である。なおこの図では、制御部２８０に出入りするデータの流れの記載を省略している。
【００１９】
図３に例示するように、この例のブロック復号装置２００は、データ分割部２１０、第１変換部２２０、カウンタ２３１、ブロック暗号化部２３２、ブロック復号化部２３３、第２変換部２４０、排他的論理和計算部２５０、データ操作部２６０、メモリ２７０及び制御部２８０を有している。なお、メモリ２７０は、領域２７１〜２７７を有している。
ここで、メモリ２７０は、例えば、補助記憶装置、ＲＡＭ、レジスタの何れか或いはこれらを併用した記憶領域に相当する。またこの例のデータ分割部２１０、第１変換部２２０、カウンタ２３１、ブロック暗号化部２３２、ブロック復号化部２３３、第２変換部２４０、排他的論理和計算部２５０、データ操作部２６０及び制御部２８０は、上述のプログラムが読み込まれたＣＰＵに相当する。また、メモリ２７０に格納される各データについては後述する。
【００２０】
＜前処理＞
次に、ブロック暗号装置１及びブロック復号装置２００で実行されるブロック暗号処理及びブロック復号処理の前処理について説明する。
まず、ブロック暗号装置１のメモリ７０の領域７１にＭ  ｂｉｔの鍵データ１００を格納し、ブロック復号装置２００のメモリ２７０の領域２７１にＭ  ｂｉｔの鍵データ３００を格納する。鍵データ１００，３００は、本形態のブロック暗号に用いる共通鍵であり、鍵データ１００，３００は同じ値を示すデータである。なお、本形態の例では、鍵データ１００，３００は、ビット長Ｍ＝１２８ｂｉｔのデータである。
【００２１】
また、ブロック暗号装置１のメモリ７０の領域７２に、２Ｌ  ｂｉｔの平文データ１１０を格納する。なお、この例の平文データ１１０のビット長は、鍵データ１００，３００のビット長よりも短い２Ｌ＝３６ｂｉｔである。
＜ブロック暗号処理＞
次に、本形態のブロック暗号装置１が実行するブロック暗号処理について説明する。
図４は、本形態のブロック暗号処理を説明するためのフローチャートである。また、図５〜７は、本形態のブロック暗号処理を説明するための図である。以下、これらの図及び図２を用いて、本形態のブロック暗号処理を説明していく。なお、以下の処理は、制御部８０（図２）の制御のもと実行される。
【００２２】
本形態のブロック暗号処理は、フェイステル構造を用いた暗号処理である。
まず、カウンタ３１がカウント値ｎを０にリセットする（ステップＳ１）。なお、カウント値ｎは、Ｍ ｂｉｔ（この例ではＭ＝１２８ｂｉｔ）の文字列である。
次に、データ分割部１０が、メモリ７０の領域７２に格納された平文データ１１０の１部のビット列１１１を第１部分データ１２１の初期値として読み込んで領域７３に格納し、平文データ１１０の他のビット列１１２を第２部分データ１２２の初期値として読み込んで領域７４に格納する（ステップＳ２）。この例では、平文データ１１０の下位Ｌ＝１６ｂｉｔを第１部分データ１２１の初期値として領域７３に格納し、平文データ１１０の上位Ｌ＝１６ｂｉｔを第２部分データ１２２の初期値として領域７４に格納する。
【００２３】
次に、第１変換部２０が、メモリ７０の領域７３に格納された第１部分データ１２１を読み込み、これとビット長が異なる第１変換データ１３０を生成し、メモリ７０の領域７５に格納する（ステップＳ３）。この例では、パディングによって、ビット長Ｌ＝１６ｂｉｔの第１部分データ１２１を、鍵データ１００とビット長が等しいビット長Ｍ＝１２８ｂｉｔの第１変換データ１３０に変換する。なお、パディングとは、以下の処理のことである。
［パディング（図６（ａ））］
入力：Ｌ  ｂｉｔ文字列
出力：Ｍ  ｂｉｔ文字列（但しＬ＜Ｍ）
処理：ある固有のＭ  ｂｉｔ文字列の、入力の値に依存しないある特定のＬ  ｂｉｔを、入力のＬ  ｂｉｔ文字列に置き換えて出力する。
【００２４】
例えば、図６（ａ）の例は、Ｍ＝１２８、Ｌ＝１６とし、全てのビットが０であるＭ  ｂｉｔ文字列の先頭Ｌ  ｂｉｔを、入力のＬ  ｂｉｔ文字列に置き換えて出力する「パディング」である（［パディング］の説明終わり）。
次に、ブロック暗号化部３２が、メモリ７０の領域７１からＭ（この例では１２８）ｂｉｔの鍵データ（Ｋ）１００を読み込む。そして、ブロック暗号化部３２が、カウンタ３１から出力されたＭ（この例では１２８）ｂｉｔのカウント値ｎを、この鍵データ（Ｋ）１００でブロック暗号化して、Ｍ（この例では１２８）ｂｉｔの鍵データＫｎを生成する（ステップＳ４ａ）。
【００２５】
次に、ブロック暗号化部３３が、メモリ７０の領域７５からＭ（この例では１２８）ｂｉｔの第１変換データ１３０を読み込む。そして、ブロック暗号化部３３は、ブロック暗号化部３２が生成した鍵データＫｎ（この例ではＭ＝１２８ｂｉｔ）を用い、この第１変換データ１３０をブロック暗号化したブロック暗号文データ（Ｃｎ）１４０（この例ではＭ＝１２８ｂｉｔ）を生成する（ステップＳ４ｂ）。ブロック暗号化部３３は、生成したブロック暗号文データ（Ｃｎ）１４０をメモリ７０の領域７６に格納する。なお、ブロック暗号化とは、以下の処理のことである。
【００２６】
［ブロック暗号化（図７（ａ））］
入力：平文データ（α  ｂｉｔ文字列），鍵データ（β  ｂｉｔ文字列）
出力：暗号文データ（γ  ｂｉｔ文字列）
処理：鍵データと平文データとより、ブロック暗号を用いて暗号文データを求め出力する。
例えば、図７（ａ）は、α＝β＝γ＝１２８の場合の例である。また、ブロック暗号の例としては、例えばＡＥＳ仕様暗号等を例示できる（［ブロック暗号化］の説明終わり）。
【００２７】
次に、第２変換部４０が、メモリ７０の領域７６からブロック暗号文データ（Ｃｎ）１４０を読み込み、このブロック暗号文データ（Ｃｎ）１４０を用い、第２部分データ１２２にビット長が等しい第２変換データ１５０を生成する（ステップＳ５）。第２変換部４０は、生成した第２変換データ１５０をメモリ７０の領域７７に格納する。本形態の例では、Ｍ＝１２８ｂｉｔのブロック暗号文データ（Ｃｎ）１４０から切り出した１部（Ｌ＝１６ｂｉｔ）のビット列を第２変換データ１５０とする。なお、切り出しとは、以下の処理のことである。
【００２８】
［切り出し（図６（ｂ））］
入力：Ｍ  ｂｉｔ文字列
出力：Ｌ  ｂｉｔ文字列（但しＬ＜Ｍ）
処理：入力の値に依存せず、入力から特定のＬ  ｂｉｔを取り出して出力する。
例えば、図６（ｂ）の例は、Ｍ＝１２８，Ｌ＝１６とし、入力のＭ  ｂｉｔ文字列の先頭Ｌ  ｂｉｔを出力する「切り出し」の例である（［切り出し］の説明終わり）。
次に、排他的論理和計算部５０が、メモリ７０の領域７４から第２部分データ１２２を読み込み、領域７７から第２変換データ１５０を読み込む。そして、排他的論理和計算部５０は、読み込んだ第２部分データ（この例ではＬ＝１６ｂｉｔ）と第２変換データ（この例ではＬ＝１６ｂｉｔ）との排他的論理和を計算し、その計算結果を新たな第２部分データ１２２として、メモリ７０の領域７４に上書き保存する（ステップＳ６）。なお、排他的論理和とは、以下の処理のことである。
【００２９】
［排他的論理和（図７（ｂ））］
入力：入力１（Ｌ  ｂｉｔ文字列），入力２（Ｌ  ｂｉｔ文字列）
出力：出力（Ｌ  ｂｉｔ文字列）
処理：入力１と入力２の対応する各ビットに対して次の審理値表に従って出力の各ビットを決定する。
排他的論理和の審理値表
入力１      入力２      出力
０          ０          ０
０          １          １
１          ０          １
１          １          ０
なお、図７（ｂ）はＬ＝１６の例である（［排他的論理和］の説明終わり）。
【００３０】
次に、カウンタ３１が、カウント値ｎをカウントアップする。すなわち、カウンタ３１が、ｎ＋１を新たなカウント値ｎとする（ステップＳ７）。次に、制御部８０が、カウンタ３１のカウント値ｎが段数ｗであるか否かを判断する（ステップＳ８）。なお、段数ｗは予め設定された値である。
ここで、ｎ＝ｗでなければ、制御部８０は、データ操作部６０に交換操作の指示を与え、これを受けたデータ操作部６０は、メモリ７０の領域７３，７４にそれぞれ格納された第１部分データ１２１と第２部分データ１２２とを交換する（ステップＳ９）。すなわち、データ操作部６０は、ステップＳ３で使用された第１部分データ１２１（この例ではＬ＝１６ｂｉｔ）を新たな第２部分データ１２２として領域７４に格納し、ステップＳ６で使用された第２部分データ１２２（この例ではＬ＝１６ｂｉｔ）を新たな第１部分データ１２１として領域７３に格納する（図７（ｃ））。そして、制御部８０は、処理をステップＳ３に戻し、新たにステップＳ３〜Ｓ８の処理（ラウンド処理）を実行させる。
【００３１】
一方、ステップＳ８でｎ＝ｗであると判断された場合、データ操作部６０は、メモリ７０の領域７３，７４から、それぞれ第１部分データ１２１及び第２部分データ１２２を読み込む。そして、データ操作部６０は、読み込んだ第１部分データ１２１と第２部分データ１２２とを結合したものを暗号文データ１７０として出力する（ステップＳ１０）。この例の場合、Ｌ＝１６ｂｉｔの第１部分データ１２１を暗号文データ１７０の下位１６ｂｉｔとし、第２部分データ１２２を暗号文データ１７０の上位１６ｂｉｔとする。
このように生成された暗号文データ１７０は、例えば、通信部７からネットワークを通じてブロック復号装置２００に送信される。ブロック復号装置２００は、これを暗号文データ３１０として、メモリ２７０の領域２７２に格納する。
【００３２】
＜ブロック復号処理＞
次に、本形態のブロック復号装置２００が実行するブロック復号処理について説明する。
図８は、本形態のブロック復号処理を説明するためのフローチャートである。また、図９及び１０は、本形態のブロック復号処理を説明するための図である。以下、これらの図及び図３を用いて、本形態のブロック復号処理を説明していく。なお、以下の処理は、制御部２８０（図３）の制御のもと実行される。
【００３３】
本形態のブロック復号処理は、フェイステル構造を用いた復号処理である。
まず、カウンタ２３１がカウント値ｎを段数ｗにリセットする（ステップＳ２１）。なお、段数ｗは予め設定された値であり、ブロック暗号装置１で用いたｗと同じ値である。
次に、データ分割部２１０が、メモリ２７０の領域２７２に格納された暗号文データ３１０の１部のビット列３１１を第１部分データ３２１の初期値として読み込んで領域２７３に格納し、暗号文データ３１０の他のビット列３１２を第２部分データ３２２の初期値として読み込んで領域２７４に格納する（ステップＳ２２）。この例では、暗号文データ３１０の下位Ｌ＝１６ｂｉｔを第１部分データ３２１の初期値として領域２７３に格納し、暗号文データ３１０の上位Ｌ＝１６ｂｉｔを第２部分データ３２２の初期値として領域２７４に格納する。
【００３４】
次に、第１変換部２２０が、メモリ２７０の領域２７３に格納された第１部分データ３２１を読み込み、これとビット長が異なる第１変換データ３３０を生成し、メモリ２７０の領域２７５に格納する（ステップＳ２３）。この例では、パディングによって、ビット長Ｌ＝１６ｂｉｔの第１部分データ３２１を、鍵データ３００とビット長が等しいビット長Ｍ＝１２８ｂｉｔの第１変換データ３３０に変換する。
次に、ブロック暗号化部２３２が、メモリ２７０の領域２７１からＭ（この例では１２８）ｂｉｔの鍵データ（Ｋ）３００を読み込む。そして、ブロック暗号化部２３２が、カウンタ２３１から出力されたＭ（この例では１２８）ｂｉｔのカウント値ｎを、この鍵データ（Ｋ）３００でブロック暗号化して、Ｍ（この例では１２８）ｂｉｔの鍵データＫｎを生成する（ステップＳ２４ａ）。
【００３５】
次に、ブロック復号化部２３３が、メモリ２７０の領域２７５からＭ（この例では１２８）ｂｉｔの第１変換データ３３０を読み込む。そして、ブロック復号化部２３３は、ブロック暗号化部２３２が生成した鍵データＫｎ（この例ではＭ＝１２８ｂｉｔ）を用い、この第１変換データ３３０をブロック復号化したブロック復号文データ（Ｄｎ）３４０（この例ではＭ＝１２８ｂｉｔ）を生成する（ステップＳ２４ｂ）。ブロック復号化部２３３は、生成したブロック復号文データ（Ｄｎ）３４０をメモリ２７０の領域２７６に格納する。なお、ブロック復号化とは、以下の処理のことである。
【００３６】
［ブロック復号化（図１０）］
入力：暗号文データ（α  ｂｉｔ文字列），鍵データ（β  ｂｉｔ文字列）
出力：復号文データ（γ  ｂｉｔ文字列）
処理：鍵データと暗号文データとを用い、ブロック復号により復号文データを求めて出力する。
例えば、図１０は、α＝β＝γ＝１２８の場合の例である。また、ブロック復号の方式は、前述のブロック暗号装置１で行われるブロック暗号の方式に対応したものである（［ブロック復号化］の説明終わり）。
【００３７】
次に、第２変換部２４０が、メモリ２７０の領域２７６からブロック復号文データ（Ｄｎ）３４０を読み込み、このブロック復号文データ（Ｄｎ）３４０を用い、第２部分データ３２２にビット長が等しい第２変換データ３５０を生成する（ステップＳ２５）。第２変換部２４０は、生成した第２変換データ３５０をメモリ２７０の領域２７７に格納する。本形態の例では、Ｍ＝１２８ｂｉｔのブロック復号文データ（Ｄｎ）３４０から切り出した１部（Ｌ＝１６ｂｉｔ）のビット列を第２変換データ３５０とする。
次に、排他的論理和計算部２５０が、メモリ２７０の領域２７４から第２部分データ３２２を読み込み、領域２７７から第２変換データ３５０を読み込む。そして、排他的論理和計算部２５０は、読み込んだ第２部分データ（この例ではＬ＝１６ｂｉｔ）と第２変換データ（この例ではＬ＝１６ｂｉｔ）との排他的論理和を計算し、その計算結果を新たな第２部分データ３２２として、メモリ２７０の領域２７４に上書き保存する（ステップＳ２６）。
【００３８】
次に、カウンタ２３１が、カウント値ｎをカウントダウンする。すなわち、カウンタ２３１が、ｎ−１を新たなカウント値ｎとする（ステップＳ２７）。次に、制御部２８０が、カウンタ２３１のカウント値ｎが０であるか否かを判断する（ステップＳ２８）。
ここで、ｎ＝０でなければ、制御部２８０は、データ操作部２６０に交換操作の指示を与え、これを受けたデータ操作部２６０は、メモリ２７０の領域２７３，２７４にそれぞれ格納された第１部分データ３２１と第２部分データ３２２とを交換する（ステップＳ２９）。すなわち、データ操作部２６０は、ステップＳ２３で使用された第１部分データ３２１（この例ではＬ＝１６ｂｉｔ）を新たな第２部分データ３２２として領域２７４に格納し、ステップＳ２６で使用された第２部分データ３２２（この例ではＬ＝１６ｂｉｔ）を新たな第１部分データ３２１として領域２７３に格納する（図７（ｃ））。そして、制御部２８０は、処理をステップＳ２３に戻し、新たにステップＳ２３〜Ｓ２８の処理（ラウンド処理）を実行させる。
【００３９】
一方、ステップＳ２８でｎ＝０であると判断された場合、データ操作部２６０は、メモリ２７０の領域２７３，２７４から、それぞれ第１部分データ３２１及び第２部分データ３２２を読み込む。そして、データ操作部２６０は、読み込んだ第１部分データ３２１と第２部分データ３２２とを結合したものを平文データ３７０として出力する（ステップＳ３０）。この例の場合、第１部分データ３２１を平文データ３７０の下位１６ｂｉｔとし、第２部分データ３２２を平文データ３７０の上位１６ｂｉｔとする。
＜本形態の特徴＞
以上のように、本形態のブロック暗号装置１では、第１変換部２０が、第１部分データ１２１をブロック暗号化部３３でのブロック暗号処理に適したビット長に変換し、第２変換部４０が、ブロック暗号化部３３で生成されたブロック暗号文データ１４０を第２部分データ１２２と同じビット長の第２変換データ１５０に変換している。同様に、本形態のブロック復号装置２００では、第１変換部２２０が、第１部分データ３２１をブロック復号化部２３３でのブロック復号処理に適したビット長に変換し、第２変換部２４０が、ブロック復号化部２３３で生成されたブロック復号文データ３４０を第２部分データ３２２と同じビット長の第２変換データ３５０に変換している。これにより、ブロック暗号化部３３やブロック復号化部２３３の構造を変えるといった煩雑な手法をとることなく、取り扱う平文データや暗号文データのブロック長を容易に変更することができる。
【００４０】
また、取り扱う平文データや暗号文データのブロック長が変わってもブロック暗号処理に用いる鍵データのビット長は同じである。そのため、暗号の安全性を落とすことなく、平文データや暗号文データのブロック長を短くすることができる。
また、文献「Lars R. Knudsen The Security of Feistel Ciphers with Six Round or Less, "Journal of Cryptology: the journal of the International Association for Cryptologic Research," volumes 15 number 3 207-222」には、ラウンド関数及び副鍵生成に理想的な「ランダム関数」或いは「ランダム置換」を用いた際のフェイステル構造の安全性について記述されている。本形態は、「ランダム関数」や「ランダム置換」ではなく、ラウンド処理ごとに秘密の鍵データＫｎを変化させるブロック暗号である。しかし、ラウンド処理ごとに秘密の鍵データＫｎを変化させて各ラウンド処理で実行されるブロック暗号処理の相関を絶ったブロック暗号は、安全性の面で「ランダム関数」や「ランダム置換」と区別できないと仮定できる。よって、本形態のブロック暗号は安全であるといえる。
【００４１】
〔第２の実施の形態〕
次に、本形態の第２の実施の形態について説明する。
本形態は第１の実施の形態の変形例である。第１の実施の形態では、ラウンド処理ごとに鍵データを変化させて安全性を確保していたのに対し、本形態では、ラウンド処理ごとに第２変換部が第２変換データの生成方法を変化させて安全性を確保する。すなわち、本形態では、第２変換データとして使用するビット列のアドレスをラウンド処理ごとに変化させ、これによってラウンド処理間で相関を持たない関数の列を生成する。また、本形態ではブロック暗号やブロック復号に使用する鍵データは各ラウンド処理を通じて一種類のみである。これにより、何度も行われるブロック暗号化の処理を効率化する。
【００４２】
以下では、第１の実施の形態との相違点を中心に説明し、第１の実施の形態と共通する事項については説明を省略する。
＜ブロック暗号装置の構成＞
［ブロック暗号装置のハードウェア構成］
第１の実施の形態と同様である。
［ブロック暗号装置のソフトウェア構成］
第１の実施の形態との相違点は、ブロック暗号化プログラムが、ラウンド処理ごとに鍵データを変更することなくブロック暗号化を行うためのものである点、及び、第２変換プログラムが、ラウンド処理ごとに異なる生成方法により第２変換データを生成するためのものである点である。
【００４３】
［ハードウェアとソフトウェアとの協働］
図１１は、第１の実施の形態と同様にＣＰＵにプログラムが読み込まれることにより構成される、本形態のブロック暗号装置５００のブロック図の例示である。なおこの図において、第１の実施の形態と共通する部分には同じ符号を付している。
第１の実施の形態との相違点は、ラウンド処理ごとに鍵データを変換させるブロック暗号化部３２が存在しない点、カウンタ３１の代わりにカウンタ５３１が設けられている点、及び、第２変換部４０の代わりに第２変換部５４０が設けられている点である。
【００４４】
＜ブロック復号装置の構成＞
［ブロック復号装置のハードウェア構成］
図１に例示したブロック暗号装置のハードウェア構成と同様である。
［ブロック復号装置のプログラム構成］
第１の実施の形態との相違点は、ブロック復号化プログラムが、ラウンド処理ごとに鍵データを変更することなくブロック復号化を行うためのものである点、及び、第２変換プログラムが、ラウンド処理ごとに異なる生成方法により第２変換データを生成するためのものである点である。
【００４５】
［ハードウェアとソフトウェアとの協働］
図１２は、第１の実施の形態と同様にＣＰＵにプログラムが読み込まれることにより構成される、ブロック復号装置６００のブロック図の例示である。なおこの図において、第１の実施の形態と共通する部分には同じ符号を付している。
第１の実施の形態との相違点は、ラウンド処理ごとに鍵データを変換させるブロック暗号化部２３２が存在しない点、カウンタ２３１の代わりにカウンタ６３１が設けられている点、及び、第２変換部２４０の代わりに第２変換部６４０が設けられている点である。
【００４６】
＜前処理＞
第１の実施の形態と同じである。
＜ブロック暗号処理＞
次に、本形態のブロック暗号装置１が実行するブロック暗号処理について説明する。
図１３は、本形態のブロック暗号処理を説明するためのフローチャートである。また、図１４，１５は、本形態のブロック暗号処理を説明するための図である。以下、これらの図及び図１１を用いて、本形態のブロック暗号処理を説明していく。なお、以下の処理は、制御部８０（図１１）の制御のもと実行される。
【００４７】
本形態のブロック暗号処理も、フェイステル構造を用いた暗号処理である。
まず、カウンタ５３１がカウント値ｎを０にリセットする（ステップＳ４１）。
次に、データ分割部１０が、メモリ７０の領域７２に格納された平文データ１１０の１部のビット列１１１を第１部分データ１２１の初期値として読み込んで領域７３に格納し、平文データ１１０の他のビット列１１２を第２部分データ１２２の初期値として読み込んで領域７４に格納する（ステップＳ４２）。この例では、平文データ１１０の下位Ｌ＝１６ｂｉｔを第１部分データ１２１の初期値として領域７３に格納し、平文データ１１０の上位Ｌ＝１６ｂｉｔを第２部分データ１２２の初期値として領域７４に格納する。
【００４８】
次に、第１変換部２０が、メモリ７０の領域７３に格納された第１部分データ１２１を読み込み、これとビット長が異なる第１変換データ１３０を生成し、メモリ７０の領域７５に格納する（ステップＳ４３）。この例では、パディングによって、ビット長Ｌ＝１６ｂｉｔの第１部分データ１２１を、鍵データ１００とビット長が等しいビット長Ｍ＝１２８ｂｉｔの第１変換データ１３０に変換する。
次に、ブロック暗号化部３３が、メモリ７０の領域７５から第１変換データ１３０を読み込み、領域７１からＭ（この例では１２８）ｂｉｔの鍵データ（Ｋ）１００を読み込む。そして、ブロック暗号化部３３は、この鍵データ（Ｋ）１００を用い、この第１変換データ１３０をブロック暗号化したブロック暗号文データ（Ｃｎ）１４０（この例ではＭ＝１２８ｂｉｔ）を生成する（ステップＳ４４）。
【００４９】
次に、第２変換部５４０が、メモリ７０の領域７６からブロック暗号文データ（Ｃｎ）１４０を読み込み、カウンタ５３１からカウント値ｎを読み込む。そして、第２変換部５４０は、このブロック暗号文データ（Ｃｎ）１４０とカウント値ｎとを用い、第２部分データ１２２にビット長が等しい第２変換データ１５０を生成する（ステップＳ４５）。第２変換部５４０は、生成した第２変換データ１５０をメモリ７０の領域７７に格納する。本形態の例では、Ｍ＝１２８ｂｉｔのブロック暗号文データ（Ｃｎ）１４０から切り出した１部（Ｌ＝１６ｂｉｔ）のビット列を第２変換データ１５０とする。そして、この第２変換部５４０がブロック暗号文データ（Ｃｎ）１４０から取り出すビット列の位置（アドレス）は、カウント値ｎに依存する（アドレス付切り出し）。この「アドレス付切り出し」を以下に説明する。
【００５０】
［アドレス付切り出し（図１５）］
入力：Ｍ  ｂｉｔ文字列、カウント値（アドレス）ｎ（但し０≦ｎ≦ｗ）
出力：Ｌ  ｂｉｔ文字列（但しｗＬ＜Ｍ）
処理：入力のカウント値ｎの値のみに依存して、入力のＭ  ｂｉｔ文字列から特定のＬ  ｂｉｔを出力する。なお、この例では、ｎ≠ｎ’のとき、カウント値ｎに関するどの特定のＬ  ｂｉｔもカウント値ｎ’に関するどの特定のＬ  ｂｉｔと一致しない。
例えば、図１５の例は、Ｍ＝１２８，Ｌ＝１６とし、入力のＭ  ｂｉｔ文字列の先頭ｎＬ  ｂｉｔ目からＬ  ｂｉｔを出力する「アドレス付切り出し」である。また、図１５の例では０＜ｗ≦８となる（［アドレス付切り出し］の説明終わり）。
【００５１】
次に、排他的論理和計算部５０が、メモリ７０の領域７４から第２部分データ１２２を読み込み、領域７７から第２変換データ１５０を読み込む。そして、排他的論理和計算部５０は、読み込んだ第２部分データ（この例ではＬ＝１６ｂｉｔ）と第２変換データ（この例ではＬ＝１６ｂｉｔ）との排他的論理和を計算し、その計算結果を新たな第２部分データ１２２として、メモリ７０の領域７４に上書き保存する（ステップＳ４６）。
次に、カウンタ５３１が、カウント値ｎをカウントアップする。すなわち、カウンタ３１が、ｎ＋１を新たなカウント値ｎとする（ステップＳ４７）。次に、制御部８０が、カウンタ３１のカウント値ｎが段数ｗであるか否かを判断する（ステップＳ４８）。なお、段数ｗは予め設定された値である。
【００５２】
ここで、ｎ＝ｗでなければ、制御部８０は、データ操作部６０に交換操作の指示を与え、これを受けたデータ操作部６０は、メモリ７０の領域７３，７４にそれぞれ格納された第１部分データ１２１と第２部分データ１２２とを交換する（ステップＳ４９）。すなわち、データ操作部６０は、ステップＳ４３で使用された第１部分データ１２１（この例ではＬ＝１６ｂｉｔ）を新たな第２部分データ１２２として領域７４に格納し、ステップ４Ｓ６で使用された第２部分データ１２２（この例ではＬ＝１６ｂｉｔ）を新たな第１部分データ１２１として領域７３に格納する（図７（ｃ））。そして、制御部８０は、処理をステップＳ４３に戻し、新たにステップＳ４３〜Ｓ４８の処理（ラウンド処理）を実行させる。
【００５３】
一方、ステップＳ４８でｎ＝ｗであると判断された場合、データ操作部６０は、メモリ７０の領域７３，７４から、それぞれ第１部分データ１２１及び第２部分データ１２２を読み込む。そして、データ操作部６０は、読み込んだ第１部分データ１２１と第２部分データ１２２とを結合したものを暗号文データ１７０として出力する（ステップＳ５０）。この例の場合、Ｌ＝１６ｂｉｔの第１部分データ１２１を暗号文データ１７０の下位１６ｂｉｔとし、第２部分データ１２２を暗号文データ１７０の上位１６ｂｉｔとする。
このように生成された暗号文データ１７０は、例えば、通信部７からネットワークを通じてブロック復号装置６００に送信される。ブロック復号装置６００は、これを暗号文データ３１０として、メモリ２７０の領域２７２に格納する。
【００５４】
＜ブロック復号処理＞
次に、本形態のブロック復号装置６００が実行するブロック復号処理について説明する。
図１６は、本形態のブロック復号処理を説明するためのフローチャートである。また、図１７は、本形態のブロック復号処理を説明するための図である。以下、これらの図及び図１２を用いて、本形態のブロック復号処理を説明していく。なお、以下の処理は、制御部２８０（図１２）の制御のもと実行される。
【００５５】
本形態のブロック復号処理は、フェイステル構造を用いた復号処理である。
まず、カウンタ６３１がカウント値ｎを段数ｗにリセットする（ステップＳ６１）。なお、段数ｗは予め設定された値である。
次に、データ分割部２１０が、メモリ２７０の領域２７２に格納された暗号文データ３１０の１部のビット列３１１を第１部分データ３２１の初期値として読み込んで領域２７３に格納し、暗号文データ３１０の他のビット列３１２を第２部分データ３２２の初期値として読み込んで領域２７４に格納する（ステップＳ６２）。この例では、暗号文データ３１０の下位Ｌ＝１６ｂｉｔを第１部分データ３２１の初期値として領域２７３に格納し、暗号文データ３１０の上位Ｌ＝１６ｂｉｔを第２部分データ３２２の初期値として領域２７４に格納する。
【００５６】
次に、第１変換部２２０が、メモリ２７０の領域２７３に格納された第１部分データ３２１を読み込み、これとビット長が異なる第１変換データ３３０を生成し、メモリ２７０の領域２７５に格納する（ステップＳ６３）。この例では、パディングによって、ビット長Ｌ＝１６ｂｉｔの第１部分データ３２１を、鍵データ３００とビット長が等しいビット長Ｍ＝１２８ｂｉｔの第１変換データ３３０に変換する。
次に、ブロック復号化部２３３が、メモリ２７０の領域２７５から第１変換データ３３０を読み込み、領域２７１からＭ（この例では１２８）ｂｉｔの鍵データ（Ｋ）３００を読み込む。そして、ブロック復号化部２３３は、この鍵データ（Ｋ）３００を用い、第１変換データ３３０をブロック復号化したブロック復号文データ（Ｄｎ）３４０（この例ではＭ＝１２８ｂｉｔ）を生成する（ステップＳ６４）。
【００５７】
次に、第２変換部６４０が、メモリ２７０の領域２７６からブロック復号文データ（Ｄｎ）３４０を読み込み、カウンタ６３１からカウント値ｎを読み込む。そして、第２変換部６４０は、このブロック復号文データ（Ｄｎ）３４０とカウント値ｎとを用い、第２部分データ３２２にビット長が等しい第２変換データ３５０を生成する（ステップＳ６５）。第２変換部６４０は、生成した第２変換データ３５０をメモリ２７０の領域２７７に格納する。本形態の例では、Ｍ＝１２８ｂｉｔのブロック復号文データ（Ｄｎ）１４０から切り出した１部（Ｌ＝１６ｂｉｔ）のビット列を第２変換データ３５０とする。そして、この第２変換部６４０がブロック復号文データ（Ｄｎ）３４０から取り出すビット列の位置（アドレス）はカウント値ｎに依存する。また、このビット列の切り出し位置とカウント値ｎとの関係は、ブロック暗号装置５００の第２変換部５４０のものと同じである。
【００５８】
次に、排他的論理和計算部２５０が、メモリ２７０の領域２７４から第２部分データ３２２を読み込み、領域２７７から第２変換データ３５０を読み込む。そして、排他的論理和計算部２５０は、読み込んだ第２部分データ（この例ではＬ＝１６ｂｉｔ）と第２変換データ（この例ではＬ＝１６ｂｉｔ）との排他的論理和を計算し、その計算結果を新たな第２部分データ３２２として、メモリ２７０の領域２７４に上書き保存する（ステップＳ６６）。
次に、カウンタ６３１が、カウント値ｎをカウントダウンする。すなわち、カウンタ６３１が、ｎ−１を新たなカウント値ｎとする（ステップＳ６７）。次に、制御部２８０が、カウンタ６３１のカウント値ｎが０であるか否かを判断する（ステップＳ６８）。
【００５９】
ここで、ｎ＝０でなければ、制御部２８０は、データ操作部２６０に交換操作の指示を与え、これを受けたデータ操作部２６０は、メモリ２７０の領域２７３，２７４にそれぞれ格納された第１部分データ３２１と第２部分データ３２２とを交換する（ステップＳ６９）。そして、制御部２８０は、処理をステップＳ６３に戻し、新たにステップＳ６３〜Ｓ６８の処理（ラウンド処理）を実行させる。
一方、ステップＳ６８でｎ＝０であると判断された場合、データ操作部２６０は、メモリ２７０の領域２７３，２７４から、それぞれ第１部分データ３２１及び第２部分データ３２２を読み込む。そして、データ操作部２６０は、読み込んだ第１部分データ３２１と第２部分データ３２２とを結合したものを平文データ３７０として出力する（ステップＳ７０）。この例の場合、第１部分データ３２１を平文データ３７０の下位１６ｂｉｔとし、第２部分データ３２２を平文データ３７０の上位１６ｂｉｔとする。
【００６０】
＜本形態の特徴＞
以上のように、本形態のブロック暗号装置５００は、ラウンド処理ごとに異なるカウント値を出力するカウンタ５３１を有する。そして、そのブロック暗号化部３３は、メモリ７０に格納された１つの鍵データ１００を全てのラウンド処理での暗号鍵としてブロック暗号文データを生成し、第２変換部５４０は、カウンタ５３１から出力されたカウント値ｎのＬ倍を先頭アドレスとするビット列を、ブロック暗号文データから切り出す。これにより、ブロック暗号化部３３が用いる鍵データ１００は、全てのラウンド処理間で共通となり、第２変換部５４０がブロック暗号文データ１４０から切り出すビットの位置は、全てのラウンド処理間で相違する。この場合も各ラウンド処理で実行されるブロック暗号処理が相関を持たないものとなり、第１の実施の形態で述べたような安全性を確保できる。そして、第１の実施の形態と異なり、本形態では全てのラウンド処理で同じ鍵データ１００を用いるため、第１の実施の形態のように、ラウンド処理ごとに鍵データを生成するためのブロック暗号化処理を必要としない。これにより、ブロック暗号化の処理を効率化することができる。例えば、フェイステルの段数をｗとしたとき、第１の実施の形態では２ｎ回のブロック暗号呼び出しが必要であったが、本形態ではｎ回のブロック暗号呼び出しで済む。すなわち、第１の実施の形態に比べ、約２倍の高速化を達成できる。特に、第１の実施の形態において、ブロック暗号化部３２がブロック暗号化部３３に比べて十分重いブロック暗号処理を行っていた場合、本形態の構成により、第１の実施の形態に比べて約ｎ倍の高速化が達成できる。これらの点はブロック復号装置６００についても同様である。
【００６１】
その他、本形態の構成により、第１の実施の形態と同様、取り扱う平文データや暗号文データのブロック長を容易に変更することができる、暗号の安全性を落とすことなく、平文データや暗号文データのブロック長を短くすることができる、といった効果も有する。
〔変形例等〕
なお、本発明は上述の各実施の形態に限定されるものではない。例えば、第１の実施の形態と第２の実施の形態とを混合し、あるラウンド処理では第１の実施の形態の構成をとり、他のラウンド処理では第２の実施の形態の構成をとることとしてもよい。
【００６２】
また、上述の各実施の形態では、第１変換部がパディングによって第１変換データを生成する例を示したが、ハッシュ関数等その他の手段により第１変換データを生成してもよい。
さらに、データ分割部が平文データや暗号文データから分割する第１部分データや第２部分データのビット位置は、上述のものに限定されない。例えば、連続的なビット列ではなく、平文データ等から離散した位置のビットを抽出し、これを第１部分データ等としてもよい。
【００６３】
また、第２変換部がブロック暗号文データやブロック復号文データから切り出すビット位置は上述したものに限定されず、その他の位置を切り出すこととしてもよい。
また、第２の実施の形態の変形として、ブロック暗号化部が用いる鍵データを何れか１部のラウンド処理間で共通とし、第２変換部がブロック暗号文データから取り出すビット列の位置を何れかの１部のラウンド処理間で相違することとしてもよい。
その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力或いは必要に応じて並列的に或いは個別に実行されてもよい。
【００６４】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよいが、具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【００６５】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００６６】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも１部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【００６７】
本発明の利用分野としては、例えば、インターネット上のデータ通信の秘匿化等を例示できる。
【図面の簡単な説明】
【００６８】
【図１】図１は、第１の実施の形態におけるブロック暗号装置のハードウェア構成を例示したブロック図である。
【図２】図２は、第１の実施の形態におけるブロック暗号装置のブロック図の例示である。
【図３】図３は、第１の実施の形態におけるブロック復号装置のブロック図の例示である。
【図４】図４は、第１の実施の形態のブロック暗号処理を説明するためのフローチャートである。
【図５】図５は、第１の実施の形態のブロック暗号処理を説明するための図である。
【図６】図６は、第１の実施の形態のブロック暗号処理を説明するための図である。
【図７】図７は、第１の実施の形態のブロック暗号処理を説明するための図である。
【図８】図８は、第１の実施の形態のブロック復号処理を説明するためのフローチャートである。
【図９】図９は、第１の実施の形態のブロック復号処理を説明するための図である。
【図１０】図１０は、第１の実施の形態のブロック復号処理を説明するための図である。
【図１１】図１１は、第２の実施の形態のブロック暗号装置のブロック図の例示である。
【図１２】図１２は、第２の実施の形態のブロック復号装置のブロック図の例示である。
【図１３】図１３は、第２の実施の形態のブロック暗号処理を説明するためのフローチャートである。
【図１４】図１４は、第２の実施の形態のブロック暗号処理を説明するための図である。
【図１５】図１５は、第２の実施の形態のブロック暗号処理を説明するための図である。
【図１６】図１６は、第２の実施の形態のブロック復号処理を説明するためのフローチャートである。
【図１７】図１７は、第２の実施の形態のブロック復号処理を説明するための図である。
【符号の説明】
【００６９】
１，５００  ブロック暗号装置
２００，６００  ブロック復号装置
【図１】
0004612501.tif 000002
【図２】
0004612501.tif 000003
【図３】
0004612501.tif 000004
【図４】
0004612501.tif 000005
【図５】
0004612501.tif 000006
【図６】
0004612501.tif 000007
【図７】
0004612501.tif 000008
【図８】
0004612501.tif 000009
【図９】
0004612501.tif 000010
【図１０】
0004612501.tif 000011
【図１１】
0004612501.tif 000012
【図１２】
0004612501.tif 000013
【図１３】
0004612501.tif 000014
【図１４】
0004612501.tif 000015
【図１５】
0004612501.tif 000016
【図１６】
0004612501.tif 000017
【図１７】
0004612501.tif 000018