(57)【特許請求の範囲】
【請求項１】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、
Ｉ関数、Ｂ関数を処理した後、Ｉ関数、Ｒ関数、Ｒ関数、Ｉ関数、Ｂ関数の順に処理を行う処理ブロックをｎ回処理し、その後Ｉ関数の処理を行うために、前記Ｉ関数を処理するＩ関数処理回路と、前記Ｂ関数を処理するＢ関数処理回路と、前記Ｒ関数を処理するＲ関数処理回路とを実装し、
Ｉ関数処理回路、Ｒ関数処理回路、Ｒ関数処理回路、Ｉ関数処理回路、Ｂ関数処理回路の順に接続されたクロック同期ループを構成し、Ｉ関数処理回路、Ｂ関数処理回路、前記クロック同期ループ、Ｉ関数処理回路の順に接続しており、
第１Ｉ関数処理回路と、
第２Ｉ関数処理回路、第１Ｒ関数処理回路、第２Ｒ関数処理回路および第３Ｉ関数処理回路が順に接続される処理ブロックと、
前記第１Ｉ関数処理回路の出力と、前記処理ブロックの出力とを選択的に出力するセレクタと、
前記セレクタの出力が接続されるＢ関数処理回路と、
前記Ｂ関数処理回路の出力をクロック周期毎にラッチして前記処理ブロックに入力するレジスタと、
前記レジスタの出力が接続される第４Ｉ関数処理回路と、
を備え、前記処理ブロックと前記Ｂ関数処理回路とによってクロック同期ループを構成するデータスクランブル回路。
【請求項２】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、
Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行った後、Ｒ関数、Ｒ関数、Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行う処理ブロックをｎ回処理するために、前記Ｉ関数を処理するためのＩ関数処理回路と、前記Ｂ関数を処理するＢ関数処理回路と、前記Ｒ関数を処理するＲ関数処理回路とを実装し、
第１Ｉ関数処理回路、Ｂ関数処理回路、第２Ｉ関数処理回路が順に接続される第１処理ブロックと、
第１Ｒ関数処理回路、第２Ｒ関数処理回路が順に接続される第２処理ブロックと、
入力データと前記第２処理ブロックの出力とのうちいずれかを選択的に前記第１処理ブロックに入力するためのセレクタと、
を備えるデータスクランブル回路。
【請求項３】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、
Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行う第１処理ブロックと、Ｒ関数、Ｒ関数の順に処理を行う第２処理ブロックとを交互に複数回処理するために、前記Ｉ関数を処理するためのＩ関数処理回路と、前記Ｂ関数を処理するＢ関数処理回路と、前記Ｒ関数を処理するＲ関数処理回路とを実装し、
第１Ｉ関数処理回路、Ｂ関数処理回路、第２Ｉ関数処理回路が順に接続される第１処理ブロックと、
第１Ｒ関数処理回路、第２Ｒ関数処理回路が接続される第２処理ブロックと、
前記第１処理ブロックの出力と前記第２処理ブロックの出力のうちいずれかを選択的に出力する出力側セレクタと、
入力データと前記出力側セレクタの出力とのうちいずれかを選択的に前記第１Ｉ関数処理回路に入力するための入力側セレクタと、
を備えるデータスクランブル回路。
【請求項４】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、
Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行う第１処理ブロックと、Ｒ関数処理を行う第２処理ブロックとを所定の順に複数回処理するために、前記Ｉ関数を処理するためのＩ関数処理回路と、前記Ｂ関数を処理するＢ関数処理回路と、前記Ｒ関数を処理するＲ関数処理回路とを実装し、
第１Ｉ関数処理回路、Ｂ関数処理回路、第２Ｉ関数処理回路が順に接続される第１処理ブロックと、
第１Ｒ関数処理回路を備える第２処理ブロックと、
前記第１処理ブロックの出力と前記第２処理ブロックの出力のうちいずれかを選択的に出力する出力側セレクタと、
入力データと前記出力側セレクタの出力とのうちいずれかを選択的に前記第１Ｉ関数処理回路に入力するための入力側セレクタと、
を備えるデータスクランブル回路。
【請求項５】
前記Ｂ関数処理回路は、３２ビット×４の入力データを４ビット×３２の入力データに変換する入力データ変換部と、前記入力データ変換部に接続される３２個の４ビットＳｂｏｘと、前記各４ビットＳｂｏｘから出力される４ビット×３２の出力データを３２ビット×４の出力データに変換する出力データ変換部とを備える、請求項１乃至４のいずれかに記載のデータスクランブル回路。
【請求項６】
前記Ｒ関数処理回路は、データのビットを攪拌するＦ関数処理回路を備え、３２ビット×４の入力データのうち２つの入力データのビットを攪拌して３２ビット×２の出力データを出力するＦ関数処理回路と、前記Ｆ関数処理回路の出力データを前記入力データのうちの残りの２つと排他的論理和を演算する２つのＸＯＲ回路とを備える、請求項１乃至４のいずれかに記載のデータスクランブル回路。
【請求項７】
前記Ｆ関数処理回路は、３２ビット×２の入力データを非均等なビット数の複数の入力データに変換する入力データ変換部と、前記入力データ変換部に接続される複数のＳｂｏｘと、前記Ｓｂｏｘからの出力が入力されＭＤＳを用いた排他的論理和演算を行うＭＤＳ演算回路と、前記出力データ変換部の出力データに所定値を乗算する乗算回路と、乗算回路の出力と出力データ変換部の出力との排他的論理和を演算するＸＯＲ回路とを備える、請求項６に記載のデータスクランブル回路。
【請求項８】
前記複数のＳｂｏｘは、２個の６ビットＳｂｏｘと４個の５ビットＳｂｏｘとで構成され、前記入力データ変換部は３２ビット×２の入力データを６ビット×２、５ビット×４の入力データに変換する、請求項７に記載のデータスクランブル回路。
【請求項９】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、
前記Ｉ関数を処理するためのＩ関数処理回路と、前記Ｂ関数を処理するＢ関数処理回路と、前記Ｒ関数を処理するＲ関数処理回路とが複数のセレクタを介して接続され、前記複数のセレクタが、１サイクルでＩ関数の処理を行う第１設定と、１サイクルでＢ関数、Ｉ関数、Ｒ関数の順に処理を行う第２設定と、１サイクルでＲ関数、Ｉ関数の順に処理を行う第３設定と、１サイクルでＢ関数、Ｉ関数の順に処理を行う第４設定を有し、
入力データとフィードバックされる出力データとが入力され、いずれか一方を選択的に出力する第１セレクタと、
前記第１セレクタの出力が入力されるＢ関数処理回路と、
前記第１セレクタの出力と前記Ｂ関数処理回路の出力とが入力され、いずれか一方を出力する第２セレクタと、
前記第２セレクタの出力が入力される第１Ｉ関数処理回路と、
前記第１Ｉ関数処理回路の出力が入力されるＲ関数処理回路と、
前記第１Ｉ関数処理回路の出力、前記Ｒ関数処理回路の出力および前記Ｒ関数処理回路の出力ビットをクロスさせた出力が入力され、いずれか１つを選択的に出力する第３セレクタと、
前記第３セレクタの出力が入力され、出力データを出力する第２Ｉ関数処理回路と、
拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して前記第１Ｉ関数処理回路に入力する第４セレクタと、
拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して前記第２Ｉ関数処理回路に入力する第５セレクタと、
を備えるデータスクランブル回路。
【請求項１０】
初期値を格納するＩＶレジスタをさらに備え、前記第４セレクタおよび第５セレクタは、拡大鍵と”０”と前記ＩＶレジスタの値とのうちからＩ関数処理のパラメータを選択するように構成され、前記複数のセレクタが、前記第１Ｉ関数処理回路および第２Ｉ関数処理回路に前記ＩＶレジスタの値を入力することによりＣＢＣ（Cipher Block Chaining）モード処理を実行する第５設定を備える、請求項９に記載のデータスクランブル回路。
【請求項１１】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数および所定ビット数の１／２のビット数毎にＲ関数処理を行うＲ／２関数処理回路とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、
前記Ｉ関数を処理するためのＩ関数処理回路と、前記Ｂ関数を処理するＢ関数処理回路と、前記Ｒ関数を処理するＲ／２関数処理回路とが複数のセレクタを介して接続され、前記複数のセレクタが、１サイクルでＩ関数の処理を行う第１設定と、１サイクルでＢ関数、Ｉ関数、Ｒ関数の順に処理を行う第２設定と、１サイクルでＲ関数、Ｉ関数の順に処理を行う第３設定と、１サイクルでＢ関数、Ｉ関数の順に処理を行う第４設定を有し、
前記複数のセレクタの第２設定では、１クロックでＢ関数、Ｉ関数、Ｒ／２関数の順に処理を行い、次の１クロックでＲ／２関数の処理を行うことで、１サイクルでＢ関数、Ｉ関数、Ｒ関数の順に処理を行い、前記複数のセレクタの第３設定では、１クロックでＲ／２関数の処理を行い、次の１クロックでＲ／２関数、Ｉ関数の順に処理を行うことで、１サイクルでＲ関数、Ｉ関数の順に処理を行うデータスクランブル回路。
【請求項１２】
入力データとフィードバックされる出力データとが入力され、いずれか一方を選択的に出力する第１セレクタと、
前記第１セレクタの出力が入力されるＢ関数処理回路と、
前記第１セレクタの出力と前記Ｂ関数処理回路の出力とが入力され、いずれか一方を出力する第２セレクタと、
前記第２セレクタの出力が入力される第１Ｉ関数処理回路と、
前記第１Ｉ関数処理回路の出力が入力されるＲ／２関数処理回路と、
前記第１Ｉ関数処理回路の出力、前記Ｒ／２関数処理回路の出力および前記Ｒ／２関数処理回路の出力ビットをクロスさせた出力が入力され、いずれか１つを選択的に出力する第３セレクタと、
前記第３セレクタの出力が入力され、出力データを出力する第２Ｉ関数処理回路と、
拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して前記第１Ｉ関数処理回路に入力する第４セレクタと、
拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して前記第２Ｉ関数処理回路に入力する第５セレクタと、
を備える請求項１１に記載のデータスクランブル回路。
【請求項１３】
初期値を格納するＩＶレジスタをさらに備え、前記第４セレクタおよび第５セレクタは、拡大鍵と”０”と前記ＩＶレジスタの値とのうちからＩ関数処理のパラメータを選択するように構成され、前記複数のセレクタが、前記第１Ｉ関数処理回路および第２Ｉ関数処理回路に前記ＩＶレジスタの値を入力することによりＣＢＣ（Cipher Block Chaining）モード処理を実行する第５設定を備える、請求項１１に記載のデータスクランブル回路。
【発明の詳細な説明】
（技術分野）
本発明は、暗号装置に用いられるデータスクランブル回路、データスクランブル回路で用いる拡大鍵を生成する拡大鍵生成回路およびこれらデータスクランブル回路、拡大鍵生成回路を備える暗号回路に関する。
（背景技術）
現在広く使用されている共通鍵暗号として、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）が知られている。ＤＥＳは、１９７７年に米国政府の標準局ＮＩＳＴ（Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｔａｎｄａｒｄ  Ｔｅｃｈｎｏｌｏｇｙ）が定めた標準であり、６４ビット入出力、鍵長６４ビット（そのうち８ビットはパリティであり実質的には鍵長５６ビット）のブロック暗号である。
ＤＥＳは、Ｆ関数と呼ばれる非線形関数処理を１６回繰り返し行うアルゴリズムである。このため、ＤＥＳによる暗号化／復号化を処理するための暗号回路は、たとえば特開２０００−７５７８５号公報に示されるように、Ｆ関数を繰り返し行うクロック同期ループ構成で実現することが可能である。
ＤＥＳにより暗号化された暗号文を暗号鍵の総当たり法により解読する場合、鍵長６４ビット（５６ビット）の場合であっても、計算量的安全性評価の範囲内であると数年前では考えられていた。しかながら、コンピュータの性能向上に伴い、鍵長６４ビット（５６ビット）でも十分な計算量的安全性を確保することが困難となってきている。このため、複数の暗号鍵を用いて、処理を複数回繰り返す多段ＤＥＳが用いられる。たとえば、２〜３の暗号鍵を用いて処理を３回繰り返すトリプルＤＥＳが一般的に多く用いられている。
このようなＤＥＳに代わる次世代共通鍵暗号として、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの暗号ＡＥＳを標準化しようとする動きがあり、米国標準としてのＡＥＳが固まりつつある。
本件出願人は、このようなＡＥＳに準拠した仕様（鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビット）で高い安全性を維持するとともに高速処理を実現するためのアルゴリズムＳＣ２０００を発表し、このＳＣ２０００に用いる演算装置および演算方法として特願２０００−２１２４８２号、このＳＣ２０００に用いる拡大鍵生成装置として特願２０００−２１２８１４号において提案している。
このＳＣ２０００は、ＤＥＳと同様にいくつかの基本関数を繰り返し行うアルゴリズムであり、各関数処理回路をハードウェアで構成する場合、ループ回路を構成して繰り返し処理を実行するように構成できる。しかしながら、ＳＣ２０００の暗号方式では、ＤＥＳにようにＦ関数だけで構成される暗号方式とは異なり、単純に１つの関数処理回路を１つの同期ループ内で処理できるように構成することができず、各種関数処理回路による関数処理を同期ループ内で効率的に行えるように、各種関数処理回路をいかに配置するかがハードウェア実装時における大きな課題となっている。
本発明は、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号であるＳＣ２０００のアルゴリズムを高速かつコンパクトなハードウェアで実行する回路構成を提供することを目的とする。
また、本発明では、電子商取引や電子マネーに応用されるスマートカードに暗号回路を搭載するために、ＳＣ２０００アルゴリズムをさらにコンパクトなハードウェアで実行する回路構成を提供することを目的とする。
（発明の開示）
前述したような課題を解決するために、本発明に係るデータスクランブル回路は、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、Ｉ関数を処理した後、Ｂ関数、Ｉ関数、Ｒ関数、Ｒ関数、Ｉ関数の順に処理を行う処理ブロックをｎ回処理し、その後Ｂ関数、Ｉ関数の順に処理を行うために、Ｉ関数を処理するＩ関数処理回路と、Ｂ関数を処理するＢ関数処理回路と、Ｒ関数を処理するＲ関数処理回路とを実装しているデータスクランブル回路である。
ここで、Ｉ関数を処理した後、Ｂ関数、Ｉ関数、Ｒ関数、Ｒ関数、Ｉ関数の順に処理を行う処理ブロックをｎ回処理し、その後Ｂ関数、Ｉ関数の順に処理を行うための各Ｉ関数処理回路、Ｂ関数処理回路およびＲ関数処理回路を全て実装するように構成できる。
また、Ｂ関数処理回路、Ｉ関数処理回路、Ｒ関数処理回路、Ｒ関数処理回路、Ｉ関数処理回路の順に接続されたクロック同期ループを構成し、Ｉ関数処理回路、クロック同期ループ、Ｂ関数処理回路、Ｉ関数処理回路の順に接続される構成とすることができる。
また、本発明では、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、Ｉ関数、Ｂ関数を処理した後、Ｉ関数、Ｒ関数、Ｒ関数、Ｉ関数、Ｂ関数の順に処理を行う処理ブロックをｎ回処理し、その後Ｉ関数の処理を行うために、Ｉ関数を処理するＩ関数処理回路と、Ｂ関数を処理するＢ関数処理回路と、Ｒ関数を処理するＲ関数処理回路とを実装しているデータスクランブル回路を提案する。
ここで、Ｉ関数処理回路、Ｒ関数処理回路、Ｒ関数処理回路、Ｉ関数処理回路、Ｂ関数処理回路の順に接続されたクロック同期ループを構成し、Ｉ関数処理回路、Ｂ関数処理回路、クロック同期ループ、Ｉ関数処理回路の順に接続された構成とすることができる。
また、第１Ｉ関数処理回路と；第２Ｉ関数処理回路、第１Ｒ関数処理回路、第２Ｒ関数処理回路および第３Ｉ関数処理回路が順に接続される処理ブロックと；第１Ｉ関数処理回路の出力と、処理ブロックの出力とを選択的に出力するセレクタと；セレクタの出力が接続されるＢ関数処理回路と；Ｂ関数処理回路の出力をクロック周期毎にラッチして処理ブロックに入力するレジスタと；レジスタの出力が接続される第４Ｉ関数処理回路とを備え、処理ブロックとＢ関数処理回路とによりクロック同期ループを構成することができる。
また、本発明では、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行った後、Ｒ関数、Ｒ関数、Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行う処理ブロックをｎ回処理するために、Ｉ関数を処理するためのＩ関数処理回路と、Ｂ関数を処理するＢ関数処理回路と、Ｒ関数を処理するＲ関数処理回路とを実装する構成とすることができる。
ここで、第１Ｉ関数処理回路、Ｂ関数処理回路、第２Ｉ関数処理回路が順に接続される第１処理ブロックと；第１Ｒ関数処理回路、第２Ｒ関数処理回路が順に接続される第２処理ブロックと；入力データと第２Ｒ関数処理回路の出力とのうちいずれかを選択的に第１Ｉ関数処理回路に入力するためのセレクタとを備える構成とすることができる。
さらに、本発明では、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行う第１処理ブロックと、Ｒ関数、Ｒ関数の順に処理を行う第２処理ブロックとを交互に複数回処理するために、Ｉ関数を処理するためのＩ関数処理回路と、Ｂ関数を処理するＢ関数処理回路と、Ｒ関数を処理するＲ関数処理回路とを実装する構成を提案する。
ここで、第１Ｉ関数処理回路、Ｂ関数処理回路、第２Ｉ関数処理回路が順に接続される第１処理ブロックと；第１Ｒ関数処理回路、第２Ｒ関数処理回路が接続される第２処理ブロックと；第１処理ブロックの出力と第２処理ブロックの出力のうちいずれかを選択的に出力する出力側セレクタと；入力データと出力側セレクタの出力とのうちいずれかを選択的に第１Ｉ関数処理回路に入力するための入力側セレクタとを備える構成とすることができる。
また、本発明では、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、Ｉ関数、Ｂ関数、Ｉ関数の順に処理を行う第１処理ブロックと、Ｒ関数処理を行う第２処理ブロックとを所定の順に複数回処理するために、Ｉ関数を処理するためのＩ関数処理回路と、Ｂ関数を処理するＢ関数処理回路と、Ｒ関数を処理するＲ関数処理回路とを実装する構成とすることができる。
ここで、第１Ｉ関数処理回路、Ｂ関数処理回路、第２Ｉ関数処理回路が順に接続される第１処理ブロックと；第１Ｒ関数処理回路を備える第２処理ブロックと；第１処理ブロックの出力と第２処理ブロックの出力のうちいずれかを選択的に出力する出力側セレクタと；入力データと出力側セレクタの出力とのうちいずれかを選択的に第１Ｉ関数処理回路に入力するための入力側セレクタとを備える構成とすることができる。
Ｂ関数処理回路は、３２ビット×４の入力データを４ビット×３２の入力データに変換する入力データ変換部と、入力データ変換部に接続される３２個の４ビットＳｂｏｘと、各４ビットＳｂｏｘから出力される４ビット×３２の出力データを３２ビット×４の出力データに変換する出力データ変換部とを備える構成とすることができる。
また、Ｒ関数処理回路は、３２ビット×４の入力データのうち２つの入力データのビットを攪拌して３２ビット×２の出力データを出力するＦ関数処理回路と、Ｆ関数処理回路の出力データを入力データのうち残りの２つと排他的論理和を演算する２つのＸＯＲ回路とを備える構成とすることができる。
このＦ関数処理回路は、３２ビット×２の入力データを非均等なビット数の複数の入力データに変換する入力データ変換部と、入力データ変換部に接続される複数のＳｂｏｘと、Ｓｂｏｘからの出力を３２ビット×２の出力データに変換する出力データ変換部とを備える構成とすることができる。
さらに、複数のＳｂｏｘは、２個の６ビットＳｂｏｘと４個の５ビットＳｂｏｘとで構成され、入力データ変換部は３２ビット×２の入力データを６ビット×２、５ビット×４の入力データに変換するように構成できる。
また、本発明では、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行するデータスクランブル回路であって、Ｉ関数を処理するためのＩ関数処理回路と、Ｂ関数を処理するＢ関数処理回路と、Ｒ関数を処理するＲ関数処理回路とが複数のセレクタを介して接続され、複数のセレクタが、１サイクルでＩ関数の処理を行う第１設定と、１サイクルでＢ関数、Ｉ関数、Ｒ関数の順に処理を行う第２設定と、１サイクルでＲ関数、Ｉ関数の順に処理を行う第３設定と、１サイクルでＢ関数、Ｉ関数の順に処理を行う第４設定を有するデータスクランブル回路を提案する。
ここで、入力データとフィードバックされる出力データとが入力され、いずれか一方を選択的に出力する第１セレクタと、第１セレクタの出力が入力されるＢ関数処理回路と、第１セレクタの出力と前記Ｂ関数処理回路の出力とが入力され、いずれか一方を出力する第２セレクタと、第２セレクタの出力が入力される第１Ｉ関数処理回路と、第１Ｉ関数処理回路の出力が入力されるＲ関数処理回路と、第１Ｉ関数処理回路の出力、Ｒ関数処理回路の出力およびＲ関数処理回路の出力ビットをクロスさせた出力が入力され、いずれか１つを選択的に出力する第３セレクタと、第３セレクタの出力が入力され、出力データを出力する第２Ｉ関数処理回路と、拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して第１Ｉ関数処理回路に入力する第４セレクタと、拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して第２Ｉ関数処理回路に入力する第５セレクタとを備える構成とすることができる。
さらに、初期値を格納するＩＶレジスタをさらに備え、第４セレクタおよび第５セレクタは、拡大鍵と”０”とＩＶレジスタの値とのうちからＩ関数処理のパラメータを選択するように構成され、複数のセレクタが、第１Ｉ関数処理回路および第２Ｉ関数処理回路にＩＶレジスタの値を入力することによりＣＢＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）モード処理を実行する第５設定を備える構成とすることができる。
また、Ｒ関数処理回路に代えて所定ビット数の１／２のビット数毎にＲ関数処理を行うＲ／２関数処理回路を備え、複数のセレクタの第２設定では、１クロックでＢ関数、Ｉ関数、Ｒ／２関数の順に処理を行い、次の１クロックでＲ／２関数の処理を行うことで、１サイクルでＢ関数、Ｉ関数、Ｒ関数の順に処理を行い、複数のセレクタの第３設定では、１クロックでＲ／２関数の処理を行い、次の１クロックでＲ／２関数、Ｉ関数の順に処理を行うことで、１サイクルでＲ関数、Ｉ関数の順に処理を行うように構成できる。
ここで、入力データとフィードバックされる出力データとが入力され、いずれか一方を選択的に出力する第１セレクタと、第１セレクタの出力が入力されるＢ関数処理回路と、第１セレクタの出力とＢ関数処理回路の出力とが入力され、いずれか一方を出力する第２セレクタと、第２セレクタの出力が入力される第１Ｉ関数処理回路と、第１Ｉ関数処理回路の出力が入力されるＲ／２関数処理回路と、第１Ｉ関数処理回路の出力、Ｒ／２関数処理回路の出力およびＲ／２関数処理回路の出力ビットをクロスさせた出力が入力され、いずれか１つを選択的に出力する第３セレクタと、第３セレクタの出力が入力され、出力データを出力する第２Ｉ関数処理回路と、拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して第１Ｉ関数処理回路に入力する第４セレクタと、拡大鍵と”０”とを含むデータのうちからＩ関数処理のパラメータを選択して第２Ｉ関数処理回路に入力する第５セレクタとを備える構成とすることができる。
さらに、初期値を格納するＩＶレジスタをさらに備え、第４セレクタおよび第５セレクタは、拡大鍵と”０”とＩＶレジスタの値とのうちからＩ関数処理のパラメータを選択するように構成され、複数のセレクタが、第１Ｉ関数処理回路および第２Ｉ関数処理回路にＩＶレジスタの値を入力することによりＣＢＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）モード処理を実行する第５設定を備える構成とすることができる。
また、本発明では、暗号鍵から中間鍵を生成する中間鍵生成回路と；中間鍵生成回路から生成された中間鍵から複数の拡大鍵を生成する拡大鍵生成回路と；データと拡大鍵との排他的論理和を演算するＩ関数、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行うデータスクランブル回路とを備える鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を実行する暗号回路であって、中間鍵生成回路は、データスクランブル回路のデータスクランブル処理の前に中間鍵生成処理を実行し、拡大鍵生成回路は、データスクランブル回路のデータスクランブル処理と並列的に拡大鍵の生成を行うように構成される暗号回路を提案する。
ここで、中間鍵生成回路は、オーダー基数に対応して設定されたオーダーパラメータテーブルと、インデックス基数に対応して設定されたインデックスパラメータテーブルとに基づいて、拡大鍵生成回路の拡大鍵生成処理で使用する中間鍵を逐次生成するように構成できる。
また、中間鍵生成回路は、暗号鍵を３２ビット単位に分ける入力データ変換部と、入力データ変換部からの入力データに所定値を加算する加算回路と、入力データ変換部からの入力データに所定値を乗算する乗算回路と、加算回路の出力値と前記乗算回路の出力値との排他的論理和を演算するＸＯＲ回路とを備え、加算回路において加算する所定値を予め演算により求めた既設定値として格納する記憶手段をさらに備える構成とすることができる。
さらに、中間鍵生成回路は、オーダー基数に対応して設定されたオーダーパラメータテーブルとインデックス基数に対応して設定されたインデックスパラメータテーブルとに基づいて、データスクランブルを行う際にオーダーの種類とインデックスの種類とに応じた個数の中間鍵を生成し、拡大鍵生成回路は、インデックスパラメータテーブルに設定されるテーブル数だけ設けられ、オーダーパラメータテーブルとインデックスパラメータテーブルとに従って選択的に入力される中間鍵から拡大鍵を生成するように構成できる。
また、拡大鍵生成回路で生成される拡大鍵を選択的にデータスクランブル回路に入力するために、データスクランブル回路で１サイクルに必要な拡大鍵数だけ設けられる拡大鍵出力セレクタと、拡大鍵出力セレクタの拡大鍵選択制御テーブルを格納する記憶手段とをさらに備える構成とすることができる。
さらに、中間鍵生成回路による処理は、非均等なＳｂｏｘ処理と、ＭＤＳを用いた排他的論理和演算を行うＭＤＳ演算処理とよりなるＭ関数処理を含み、データスクランブル回路は、Ｒ関数処理中に含まれるＭ関数処理を実行するためのＭ関数処理回路を含み、中間鍵生成回路におけるＭ関数処理は、データスクランブル回路のＭ関数処理回路を用いて実行するように構成できる。
本発明では、前述したようなデータスクランブル回路に入力される拡大鍵を生成する拡大鍵生成回路であって、第２Ｉ関数処理回路に入力される第２拡大鍵グループを、１サイクル前の第１Ｉ関数処理回路または第３Ｉ関数処理回路に入力される第１拡大鍵グループとともに生成する拡大鍵生成回路を提案する。
（発明を実施するための最良の形態）
〔基本構成〕
本発明に係る暗号回路の基本構成を図１に示す。
暗号回路１は、データスクランブル回路２と、暗号鍵処理回路３とから構成されている。暗号鍵処理回路３は、入力される暗号鍵に基づいて中間鍵を生成する中間鍵生成回路４と、中間鍵生成回路４で生成される中間鍵に基づいて複数の拡大鍵を生成する拡大鍵生成回路５と備えている。データスクランブル回路２は、内部に複数種の関数処理回路を備えており、拡大鍵生成回路５で生成される複数の拡大鍵に基づいてそれぞれの関数処理を行い、入力される平文を暗号文に暗号化して出力し、または入力される暗号文を復号化して平文を出力するものである。
データスクランブル回路２は、拡大鍵生成回路５で生成される拡大鍵とデータとの排他的論理和を演算するＩ関数処理回路と、データのビットを攪拌するＢ関数処理回路およびＲ関数処理回路とを複数備えており、たとえば、Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉの順に関数処理を行うように構成される。このとき、データスクランブル回路２に入力されるデータの処理ブロック長は１２８ビットであり、これを３２ビット×４に分割して処理を行う。
これに基づいて、拡大鍵生成回路５では、各Ｉ関数処理に必要な数だけの拡大鍵を生成しこれを逐次データスクランブル回路２に入力するように構成する。たとえば、前述のようにデータスクランブル回路２でのＩ関数処理の回数が１６回である場合には、３２ビットの拡大鍵を４個生成してデータスクランブル回路２に入力することを繰り返し、全部で５６個の拡大鍵を生成するように構成する。
拡大鍵生成回路５における拡大鍵生成処理の前に、中間鍵生成回路４による中間鍵生成処理が実行される。この中間鍵生成回路４は、入力される暗号鍵を複数の３２ビットデータに変換し、それぞれに非線形関数処理Ｍを行った後、入力データに所定値を加算し、入力データに所定値を乗算し、各演算結果の排他的論理和を演算し、さらに非線形関数処理Ｍを行うように構成される。
たとえば、拡大鍵生成回路５において５６個の拡大鍵の生成を行うためには、暗号鍵から３２ビット×８に変換された入力データを生成し、各入力データに対してＭ関数処理を行った後、所定値を加算する加算回路に奇数番目の入力データを入力し、所定値を乗算する乗算回路に偶数番目の入力データを入力する。この後、隣接する加算回路の出力と乗算回路の出力とをＸＯＲ回路に入力して排他的論理和を演算し、このＸＯＲ回路の出力値にＭ関数処理を行って中間鍵の生成を行う。１つの加算回路で加算を行う所定値および１つの乗算回路で乗算を行う所定値を複数用意することにより、各ＸＯＲ回路から複数の中間鍵を得ることが可能となる。ここで、暗号鍵を３２ビット×８の入力データに変換し、４つの回路列で３２ビット×４の中間鍵を作成する場合、加算回路での所定値および乗算回路での乗算値をそれぞれ３つずつ用意することで、３２ビット×４×３の中間鍵を得ることができる。拡大鍵生成回路５では、この３２ビット×４×３の中間鍵をキースケジューリングに基づいて適宜選択し５６個の拡大鍵を生成することが可能となる。
〔第１実施形態〕
第１実施形態で採用されるデータスクランブル回路を図２に示す。
ＳＣ２０００暗号では前述したように、拡大鍵とデータとの排他的論理和を演算するＩ関数と、データのビットを攪拌するＢ関数およびＲ関数とを所定の順に複数回繰り返し行うもので、たとえば、暗号鍵が１２８ビットの場合、Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉ−Ｒ−Ｒ−Ｉ−Ｂ−Ｉの順に関数処理を行うように構成される。このような関数処理を行うために、この第１実施形態のデータスクランブル回路２０では、処理を行う順にＩ関数処理回路２１、Ｂ関数処理回路２２、Ｒ関数処理回路２３を直列に接続している。
このデータスクランブル回路２０では、暗号化／復号化が１２８ビットのブロック単位で行われ、さらに入力データは３２ビット単位で処理を行う４つの系統で処理されて３２ビット×４の出力データを得る。このため、データスクランブル回路２０は、３２ビット×４の入力データバスａ，ｂ，ｃ，ｄと、３２ビット×４の出力データバスｅ，ｆ，ｇ，ｈを備えている。
暗号鍵が１２８ビットの場合には、図２に示すように、Ｉ関数処理回路２１の後に、Ｂ関数処理回路２２、Ｉ関数処理回路２１、Ｒ関数処理回路２３、Ｒ関数処理回路２３、Ｉ関数処理回路２１で構成される処理ブロック２４を６個接続し、その後にＢ関数処理回路２２、Ｉ関数処理回路２１を順に接続する。また、暗号鍵が１９２ビット／２５６ビットの場合には、図１４に示すように、Ｉ関数処理回路２１の後に、Ｂ関数処理回路２２、Ｉ関数処理回路２１、Ｒ関数処理回路２３、Ｒ関数処理回路２３、Ｉ関数処理回路２１で構成される処理ブロック２４を７個接続し、その後にＢ関数処理回路２２、Ｉ関数処理回路２１を順に接続する。
図２に示すデータスクランブル回路２０では、Ｉ関数処理回路２１の数は１４個であり、各Ｉ関数処理回路２１で使用される拡大鍵数は、４つの系統毎に３２ビットの拡大鍵を使用するとすれば、５６個の拡大鍵が必要となる。また、図１４で示すデータスクランブル回路２０では、Ｉ関数処理回路２１の数は１６個であり、各Ｉ関数処理回路２１で使用される拡大鍵数は、４つの系統毎に３２ビットの拡大鍵を使用するとすれば、６４個の拡大鍵が必要となる。
〈Ｂ関数処理回路〉
Ｂ関数処理回路２２は、図１１に示すような回路構成とすることができる。
Ｂ関数処理回路２２は、３２ビット×４の入力データを４ビット×３２の入力データに変換する入力データ変換部６１と、非線形処理を行う３２個の４ビットＳｂｏｘ６２と、４ビット×３２の出力データを３２ビット×４の出力データに変換する出力データ変換部６３とを備えている。
４ビットＳｂｏｘ６２は、図１１（ｂ）に示すように、入力（ａｉ，ｂｉ，ｃｉ，ｄｉ）を（Ａｉ，Ｂｉ，Ｃｉ，Ｄｉ）に変換する非線形処理を行うものである。
〈Ｒ関数処理回路〉
Ｒ関数処理回路２３は、図１２に示すような回路構成とすることができる。
Ｒ関数処理回路２３は、３２ビット×４の入力データ（ａ，ｂ，ｃ，ｄ）に対して、３２ビット×４の出力データ（ｅ，ｆ，ｇ，ｈ）を備えるものである。
入力データ（ａ，ｂ，ｃ，ｄ）のうち、入力データｃ，ｄが入力されるＦ関数処理回路７３と、Ｆ関数処理回路７３の３２ビット×２の出力データのうち一方と入力データａとの排他的論理和を演算するＸＯＲ回路７１と、Ｆ関数処理回路７３の３２ビット×２の出力データのうち他方と入力データｂとの排他的論理和を演算するＸＯＲ回路７２とを備えている。ＸＯＲ回路７１の出力が出力データｅ、ＸＯＲ回路７２の出力が出力データｆ、入力ｃ，ｄがそれぞれ出力ｇ，ｆとなる。
〈Ｆ関数処理回路〉
図１２に示すＦ関数処理回路は、図１３に示すような回路構成とすることができる。
Ｆ関数処理回路７３では、３２ビット×２の入力データは、それぞれ  ２つの６ビットＳｂｏｘ７４と、４つの５ビットＳｂｏｘ７５に入力される。各Ｓｂｏｘ７４，７５では、それぞれのビットでの非線形処理が行われ、ＭＤＳを用いたＸＯＲ計算装置７６にその出力を入力する。ＭＤＳを用いたＸＯＲ計算装置７６では、所定の非線形処理を実行し、その出力を乗算回路７７，７８およびＸＯＲ回路７９，８０に出力する。乗算回路７７では、入力される値と０ｘ５５５５５５５５または０ｘ３３３３３３３３を乗算する。また、乗算回路７８では、入力される値と０ｘａａａａａａａａまたは０ｘｃｃｃｃｃｃｃｃを乗算する。ＸＯＲ回路７９では、乗算回路７７の出力と他方のＭＤＳを用いたＸＯＲ計算装置７６の出力との排他的論理和を演算する。また、ＸＯＲ回路８０では、乗算回路７８の出力と他方のＭＤＳを用いたＸＯＲ計算装置７６の出力との排他的論理和を演算する。
このようなデータスクランブル回路２０で使用される拡大鍵を生成するための暗号鍵処理回路３の一例を図３、図４に示す。図３は中間鍵生成回路の一例を示し、図４は拡大鍵生成回路の一例を示すものである。
図３に示す中間鍵生成回路４０は、８つのＭ関数処理回路４１と、奇数番目のＭ関数処理回路４１に対応する加算回路４２と、偶数番目のＭ関数処理回路４１に対応する乗算回路４３と、上位から順に隣接する加算回路４２および乗算回路４３の出力データが入力されるＸＯＲ回路４４と、ＸＯＲ回路４４の出力データに対して非線形関数処理を行うＭ関数処理回路４５とを備えている。
各処理回路はそれぞれ３２ビットデータの処理が可能な構成となっており、暗号鍵から変換された３２ビット×８の入力データがそれぞれ８つのＭ関数処理回路４１に入力される。暗号鍵が１２８ビットの場合には、上位ビットから３２ビット毎に分割された４つのデータｋ０，ｋ１，ｋ２，ｋ３から、（ｋ０，ｋ１，ｋ２，ｋ３，ｋ０，ｋ１，ｋ２，ｋ３）の順に配置された入力データ群を作成し、各入力データをＭ関数処理回路４１に入力するように構成する。また、暗号鍵が１９２ビットの場合には、同様に上位ビットから３２ビット毎に分割された６つのデータｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５から、（ｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ０，ｋ１）の順に配置された入力データ群を作成し、各入力データをＭ関数処理回路４１に入力するように構成する。さらに、暗号鍵が２５６ビットの場合には、同様に上位ビットから３２ビット毎に分割された８つのデータｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ６，ｋ７から、（ｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ６，ｋ７）の順に配置された入力データ群を作成し、各入力データをＭ関数処理回路４１に入力するように構成する。
Ｍ関数処理回路４１のうち、上位から奇数番目に位置するものについては、その出力が加算回路４２に入力されている。この加算回路４２は、入力データに所定値Ｍ（４ｉ）、Ｍ（４ｉ＋１）、Ｍ（４ｉ＋２）、Ｍ（４ｉ＋３）のうちいずれかを加算するものであり、インデックスｉの値０〜２に対応して３重化されている。所定値Ｍ（４ｉ）、Ｍ（４ｉ＋１）、Ｍ（４ｉ＋２）、Ｍ（４ｉ＋３）は、それぞれ４ｉ、４ｉ＋１、４ｉ＋２、４ｉ＋３を非線形関数であるＭ関数で処理した固定値であり、インデックスｉの値０〜２に対応してそれぞれ３個の値をとるように構成されている。
Ｍ関数処理回路４１のうち、上位から偶数番目に位置するものについては、その出力が乗算回路４３に入力されている。この乗算回路４３は、入力データに所定値ｉ＋１を乗算するものであり、インデックスｉの値０〜２に対応して３重化されている。インデックスｉの値は、拡大鍵生成時のキースケジューリングに用いられるインデックス値と同等であり０〜２の値をとり、これに対応して所定値ｉ＋１の値もそれぞれ３個の値をとるように構成されている。
上位から隣接する加算回路４２および乗算回路４３の出力データはそれぞれＸＯＲ回路４４に入力される。各ＸＯＲ回路４４は、加算回路４２の出力値と乗算回路４３の出力値の排他的論理和を演算するものであり、加算回路４２および乗算回路４３に対応して３重化されている。
各ＸＯＲ回路４４に対応して、その出力データをＭ関数処理するためのＭ関数処理回路４５が設けられている。このＭ関数処理回路４５も、加算回路４２，乗算回路４３およびＸＯＲ回路４４に対応して３重化されている。
このことから、、中間鍵生成回路４０は中間鍵（ａｉ，ｂｉ，ｃｉ，ｄｉ）を出力するものであり、インデックスｉの値に応じて３重化されたＭ関数処理回路４５からそれぞれ中間鍵（ａ０，ｂ０，ｃ０，ｄ０）、（ａ１，ｂ１，ｃ１，ｄ１）、（ａ２，ｂ２，ｃ２，ｄ２）が出力される。
〈Ｍ関数処理回路〉
非線形関数であるＭ関数処理について、図１８、図１９を用いて説明する。
図１８（ａ）は、Ｍ関数処理回路の構成例を示す。このＭ関数処理回路４１は、３２ビットの入力データｍで３２ビットの出力ｗを生成するものとする。Ｍ関数処理回路４１は、２つの６ビットＳｂｏｘ４６と、４つの５ビットＳｂｏｘ４７と、ＭＤＳを用いたＸＯＲ計算装置４８とを備えている。この６ビットＳｂｏｘ４６、５ビットＳｂｏｘ４７、ＭＤＳを用いたＸＯＲ計算装置４８の構成は、前述したＦ関数処理回路７３の６ビットＳｂｏｘ７４、５ビットＳｂｏｘ７５およびＭＤＳを用いたＸＯＲ計算装置７６と同等のものを用いることができる。
このようなＭ関数処理回路４１を用いて非線形関数処理を行う際の工程を以下に示す。
（ａ）３２ビットの入力データを上位から順に、６，５，５，５，５，６ビットの６つの入力データｍ０，ｍ１，ｍ２，ｍ３，ｍ４，ｍ５に分割する。
（ｂ）５ビットに分割した入力データｍ１，ｍ２，ｍ３，ｍ４を、それぞれ５ビットＳｂｏｘ４７に入力し、図１８（ｂ）のＳ５（ｘ）の表に従って、該当するｘに対応したＳ５（ｘ）の値にそれぞれ変換する。
（ｃ）６ビットに分割した入力データｍ０，ｍ５は、それぞれ６ビットＳｂｏｘ４６に入力し、図１８（ｃ）のＳ６（ｘ）の表に従って、該当するｘに対応するＳ６（ｘ）の値にそれぞれ変換する。
（ｄ）各Ｓｂｏｘ４６，４７の出力Ｓ０〜Ｓ５より３２ビットの中間データｖが生成される。
（ｅ）この３２ビットの中間データｖをＭＤＳを用いたＸＯＲ計算装置４８に入力し、その出力ｗを演算結果として得る。ここでは、図１９（ａ）で示すＭＤＳ（ｘ）の値を、対応するビットｘに応じて、図１９（ｂ）に模式的に示す行列式に移動し、中間データｖとの間で行列演算を行う。
このようなＭ関数処理回路は、図３のＭ関数処理回路４１、４５のいずれにも適用することができる。
図４に示す拡大鍵生成回路５０は、４つの３２ビット入力データＸ，Ｙ，Ｚ，Ｗと、３２ビット出力Ｋｎを備えている。入力データＸがローテートシフト回路５１に入力されている。ローテートシフト回路５１の出力と入力データＹが加算回路５２に入力されている。また、入力データＺがローテートシフト回路５３に入力されている。ローテートシフト回路５３の出力と入力データＷが減算回路５４に入力されている。減算回路５４の出力はローテートシフト回路５５に入力されている。さらに、加算回路５２の出力とローテートシフト回路５５の出力がＸＯＲ回路５６に入力されている。このＸＯＲ回路５６の出力がこの拡大鍵生成回路５０の出力Ｋｎとなる。
暗号鍵が１２８ビットである場合には、このように構成した拡大鍵生成回路５０を５６個用意することにより、図２に示すデータスクランブル回路２０で使用する拡大鍵に対応させることができる。暗号鍵が１９２／２５６ビットである場合には、このように構成した拡大鍵生成回路５０を６４個用意することにより、図１４に示すデータスクランブル回路２０で使用する拡大鍵に対応させることが可能となる。
各拡大鍵生成回路５０では、表１に示すオーダーテーブルと、表２に示すインデックステーブルに基づくキースケジューリングにより、中間鍵生成回路４０からそれぞれ対応する中間鍵が入力され、ｎ＝００〜５５もしくはｎ＝００〜６３に対応する拡大鍵Ｋｎが生成される。
【表１】
0004745598.tif 000002
0004745598.tif 000003
【表２】
0004745598.tif 000004
ここで、キースケジューリングＫｎと、オーダーパラメータｔ、インデックスパラメータｓの関係は次のように表すことができる。
0004745598.tif 000005
１２８ビットの暗号鍵および図２に示すようなデータスクランブル回路２０を用いて暗号化を行う場合には、ｎ＝００〜５５の値に基づいて、オーダーパラメータｔとインデックスパラメータｓが決定される。ここで決定されたオーダーパラメータｔから表１のオーダーテーブルを参照してオーダー（ａ，ｂ，ｃ，ｄ）を決定し、インデックスパラメータｓから表２のインデックステーブルを参照してインデックス（ｉ）を決定する。これにより、拡大鍵生成回路５０の入力データＸ，Ｙ，Ｚ，Ｗに対して中間鍵生成回路４０から入力する中間鍵を決定し、拡大鍵Ｋｎを得る。この拡大鍵生成回路５０で生成される拡大鍵Ｋｎを、ｎ＝００〜５５の順に最初から４個づつＩ関数処理回路２１に入力することにより暗号化を行うことができる。データスクランブル回路２０により復号化を行う場合には、拡大鍵生成回路５０で生成される拡大鍵Ｋｎを、ｎ＝５５〜００の順でＩ関数処理回路２１に入力する。
また、１９２／２５６ビットの暗号鍵および図１４に示すようなデータスクランブル回路２０を用いて暗号化を行う場合には、ｎ＝００〜６３の値に基づいて、オーダーパラメータｔおよびインデックスパラメータｓを決定し、オーダーテーブルおよびインデックステーブルからオーダー（ａ，ｂ，ｃ，ｄ）とインデックス（ｉ）を決定し、これに基づいて入力される中間鍵から拡大鍵Ｋｎを生成する。この拡大鍵生成回路５０で生成される拡大鍵Ｋｎを、ｎ＝００〜６３の順に最初から４個づつＩ関数処理回路２１に入力することにより暗号化を行うことができる。データスクランブル回路２０により復号化を行う場合には、拡大鍵生成回路５０で生成される拡大鍵Ｋｎを、ｎ＝６３〜００の順でＩ関数処理回路２１に入力する。
この第１実施形態では、拡大鍵生成回路５０で使用する中間鍵を中間鍵生成回路４０で逐次生成するように構成でき、データスクランブル回路２０によるデータスクランブル処理に先立つ前処理段階を短縮することができ、暗号化／復号化に要する時間を短縮することが可能となる。
〔第２実施形態〕
第１実施形態で示したようなデータスクランブル回路２０および拡大鍵生成回路５０を用いる場合には、処理時間を短縮できるものの、回路規模が大きくなるという問題を包含している。このため、データスクランブル回路の一部にクロック同期ループを構成し、拡大鍵生成回路での処理もデータスクランブル回路のクロックに同期して処理を実行するようにすることが考えられる。そのような回路の一例を第２実施形態として示す。
図５は第２実施形態に採用される拡大鍵生成回路の構成例であり、図６は第２実施形態で採用されるデータスクランブル回路の構成例である。
図６に示すデータスクランブル回路２００では、１２８ビットのブロック単位で暗号化／復号化を行うために、３２ビット×４の入力データバスａ，ｂ，ｃ，ｄと、３２ビット×４の出力データバスｅ，ｆ，ｇ，ｈを備えている。
このデータスクランブル回路２００には、第１Ｉ関数処理回路２０１と、第２Ｉ関数処理回路２０３、第１Ｒ関数処理回路２０４、第２Ｒ関数処理回路２０５、第３Ｉ関数処理回路２０６が順に接続される処理ブロック２１０と、第１Ｉ関数処理回路２０１の出力と処理ブロック２１０の出力とを選択的に出力するセレクタ２０８と、セレクタ２０８の出力が接続されるＢ関数処理回路２０２と、Ｂ関数処理回路２０２の出力をクロック周期毎にラッチして処理ブロック２１０に入力するレジスタ２０９と、レジスタ２０９の出力が接続される第４Ｉ関数処理回路２０７とを備えている。また、データスクランブル回路２００は、第２Ｉ関数処理回路２０３で使用する拡大鍵を一時的に格納するためのレジスタ２１１を備えている。
このように構成されたデータスクランブル回路２００では、セレクタ２０８を適宜切り換えることにより、第１Ｉ関数処理回路２０１、Ｂ関数処理回路２０２による処理を実行した後、第２Ｉ関数処理回路２０３、第１Ｒ関数処理回路２０４、第２Ｒ関数処理回路２０５、第３Ｉ関数処理関数２０６の処理ブロック２１０とＢ関数処理回路２０２を含むクロック同期ループを複数回繰り返した後、第４Ｉ関数処理回路２０７による処理を実行するように構成できる。
最初のクロックでは、セレクタ２０８が第１Ｉ関数処理回路２０１側に切り換えられており、入力データａ，ｂ，ｃ，ｄは、第１Ｉ関数処理回路２０１で処理された後、セレクタ２０８を経由してＢ関数処理回路２０２によりＢ関数処理が実行され、レジスタ２０９にその値が保持される。
次のクロックでは、セレクタ２０８が処理ブロック２１０側に切り換えられており、レジスタ２０９から出力されたデータは、処理ブロック２１０によりＩ−Ｒ−Ｒ−Ｉの各関数処理が実行され、セレクタ２０８を経由してＢ関数処理回路２０２によるＢ関数処理が実行されてレジスタ２０９にその値が保持される。
この後、鍵長１２８ビットの暗号鍵を用いる場合には、処理ブロック２１０とＢ関数処理回路２０２で構成されるＩ−Ｒ−Ｒ−Ｉ−Ｂのループ処理を５回実行し、さらに第４Ｉ関数処理回路２０７による処理を実行して、出力データｅ，ｆ，ｇ，ｈを得る。
このように、図６に示すデータスクランブル回路２００で、第１Ｉ関数処理回路２０１、Ｂ関数処理回路２０２でのＩ−Ｂ処理を実行し、その後、処理ブロック２１０とＢ関数処理回路２０２で構成されるＩ−Ｒ−Ｒ−Ｉ−Ｂのループ処理を６回繰り返し、さらに第４Ｉ関数処理回路２０７によるＩ関数処理を実行することにより、図２に示すデータスクランブル回路２０と同等の機能を実現している。
このような図６に示すデータスクランブル回路２００で用いる拡大鍵を生成するための拡大鍵生成回路を図５に示す。
図５に示す拡大鍵生成回路５００は、Ｘセレクタ５０１，Ｙセレクタ５０２，Ｚセレクタ５０３，Ｗセレクタ５０４の４つのセレクタを備えている。Ｘセレクタ５０１，Ｙセレクタ５０２，Ｚセレクタ５０３，Ｗセレクタ５０４は、それぞれ図４に示す拡大鍵生成回路５０の入力データバスＸ，Ｙ，Ｚ，Ｗに対応しており、図３に示す中間鍵生成回路４０から出力される中間鍵（ａｉ，ｂｉ，ｃｉ，ｄｉ）のすべてが入力側に接続されている。
この拡大鍵生成回路５００では、Ｘセレクタ５０１の出力がローテートシフト回路５０５に入力されている。ローテートシフト回路５０５の出力とＹセレクタ５０２の出力が加算回路５０６に入力されている。また、Ｚセレクタ５０３の出力がローテートシフト回路５０７に入力されている。ローテートシフト回路５０７の出力とＷセレクタ５０４の出力が減算回路５０８に入力されている。減算回路５０８の出力はローテートシフト回路５０９に入力されている。さらに、加算回路５０６の出力とローテートシフト回路５０９の出力がＸＯＲ回路５１０に入力されている。このＸＯＲ回路５１０の出力がこの拡大鍵生成回路５００の出力Ｋｎとなる。
図６で示すデータスクランブル回路２００では、各クロックにおいて３２ビット×４の拡大鍵が２セット必要であり、これに対応して図５で示す拡大鍵生成回路５００を８個用意する。
拡大鍵生成回路５００では、表１および表２で示すオーダーテーブルとインデックステーブルに基づいて、Ｘセレクタ５０１，Ｙセレクタ５０２，Ｚセレクタ５０３，Ｗセレクタ５０４に入力する中間鍵を選択し、入力された中間鍵に基づいて拡大鍵を生成してデータスクランブル回路２００に入力する。
ここで、拡大鍵生成回路５００で生成される８個の拡大鍵を、４つずつの２つのグループＡ，Ｂに分け、グループＡの拡大鍵を現在の処理に使用し、グループＢの拡大鍵を次の処理のためにレジスタ２１１に保存する。最初のクロックでは、グループＡの拡大鍵は第１Ｉ関数処理回路２０１でのＩ関数処理のために使用し、グループＢの拡大鍵はレジスタ２１１に保存する。次のクロックでは、レジスタ２１１に保存されたグループＢの拡大鍵を使用して第２Ｉ関数処理回路２０３の処理を実行する。これとともに、拡大鍵生成回路５００で２セットの拡大鍵を生成し、グループＡの拡大鍵を用いて第３Ｉ関数処理回路２０６でのＩ関数処理を実行し、グループＢの拡大鍵をレジスタ２１１に保存する。所定回数のループ処理を実行した後、最後のループ処理時に生成した拡大鍵のうちレジスタ２１１に保存されているグループＢの鍵を用いて第４Ｉ関数処理回路２０７での処理が実行される。
鍵長１９２／２５６ビットの暗号鍵を用いる場合には、データスクランブル回路２００で、第１Ｉ関数処理回路２０１、Ｂ関数処理回路２０２でのＩ−Ｂ処理を実行し、その後、処理ブロック２１０とＢ関数処理回路２０２で構成されるＩ−Ｒ−Ｒ−Ｉ−Ｂのループ処理を７回繰り返し、さらに第４Ｉ関数処理回路２０７によるＩ関数処理を実行することにより、図１４に示すデータスクランブル回路２０と同等の機能を実現することができる。
このようにしたデータスクランブル回路２００および拡大鍵生成回路５００では、どのクロックにおいても拡大鍵を２セット８個生成して、生成した拡大鍵を有効に利用することができる。また、以前のクロックで生成したグループＢの拡大鍵を処理ブロック２１０の前段の第２Ｉ関数処理回路２０３で使用するため、グループＢの拡大鍵生成時間が、データスクランブルによる遅延時間に影響することがなくなり、グループＡの拡大鍵の生成遅延時間が処理ブロック２１０の処理時間内に納めることができる。したがって、拡大鍵生成時間がデータスクランブル処理の遅延時間に影響することがない。
〔第２実施形態の変形例〕
図７に第２実施形態のデータスクランブル回路２００の変形例を示す。
ここでは、図６のデータスクランブル回路２００のＢ関数処理回路２０２の出力を第４Ｉ関数処理回路２０７とレジスタ２０９との両方に接続するように構成している。
このことにより、所定回数のループ処理を終了した際に、最後のＢ関数処理回路２０２からの出力を、レジスタ２０９を介さずに第４Ｉ関数処理回路２０７に直接入力することができ、データスクランブル処理におけるクロック数を１つ減少させることができる。
このようにした第２実施形態およびその変形例では、第１実施形態と比較して回路規模を削減することができ、コストダウンを図ることが可能となる。
〔第３実施形態〕
本発明の第３実施形態による中間鍵生成回路を図８に示す。
図８に示す中間鍵生成回路４００は、２つのセレクタ４０１、４０２を備えている。このセレクタ４０１、４０２はそれぞれ４×３２ビットデータから１つを選択して出力するように構成されている。鍵長１２８ビットの暗号鍵を用いる場合には、暗号鍵を３２ビット×４のデータ（ｋ０，ｋ１，ｋ２，ｋ３）に変換し、セレクタ４０１に入力する入力データを（ｋ０，ｋ２，ｋ０，ｋ２）とし、セレクタ４０２に入力する入力データを（ｋ１，ｋ３，ｋ１，ｋ３）とする。また、鍵長１９２ビットの暗号鍵を用いる場合には、暗号鍵を３２ビット×６のデータ（ｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５）に変換し、セレクタ４０１に入力する入力データを（ｋ０，ｋ２，ｋ４，ｋ０）とし、セレクタ４０２に入力する入力データを（ｋ１，ｋ３，ｋ５，ｋ１）とする。さらに、鍵長２５６ビットの暗号鍵を用いる場合には、暗号鍵を３２ビット×８のデータ（ｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ６，ｋ７）に変換し、セレクタ４０１に入力する入力データを（ｋ０，ｋ２，ｋ４，ｋ６）とし、セレクタ４０２に入力する入力データを（ｋ１，ｋ３，ｋ５，ｋ７）とする。
セレクタ４０１、４０２には、それぞれＭ関数処理を行うためのＭ関数処理回路４０３，４０４が接続されている。このＭ関数処理回路４０３，４０４は前述したＭ関数処理回路４１と同様の構成とすることができる。
一方のＭ関数処理回路４０３には、所定値を加算するための加算回路４０５が接続されている。また、他方のＭ関数処理回路４０４には、所定値を乗算するための乗算回路４０６が接続されている。加算回路４０５は、入力データに所定値Ｍ（４ｉ）、Ｍ（４ｉ＋１）、Ｍ（４ｉ＋２）、Ｍ（４ｉ＋３）のうちいずれかを加算するものであり、インデックスｉの値０〜２に対応して３重化されている。所定値Ｍ（４ｉ）、Ｍ（４ｉ＋１）、Ｍ（４ｉ＋２）、Ｍ（４ｉ＋３）は、それぞれ４ｉ、４ｉ＋１、４ｉ＋２、４ｉ＋３を非線形関数であるＭ関数で処理した固定値であり、インデックスｉの値０〜２に対応してそれぞれ３個の値をとるように構成され、これらを予め算出しておきＲＯＭ４０９内に格納している。また、乗算回路４０５は、入力データに所定値ｉ＋１を乗算するものであり、インデックスｉの値０〜２に対応して３重化されている。インデックスｉの値は、拡大鍵生成時のキースケジューリングに用いられるインデックス値と同等であり０〜２の値をとり、これに対応して所定値ｉ＋１の値もそれぞれ３個の値をとるように構成されている。
加算回路４０５の出力と乗算回路４０６の出力はそれぞれＸＯＲ回路４０８に入力される。ＸＯＲ回路４０８は、加算回路４０５の出力値と乗算回路４０６の出力値の排他的論理和を演算するものであり、加算回路４０５および乗算回路４０６に対応して３重化されている。
ＸＯＲ回路４０８の出力は、Ｍ関数処理するためのＭ関数処理回路４１０に接続されている。このＭ関数処理回路４１０も、加算回路４０５，乗算回路４０６およびＸＯＲ回路４０８に対応して３重化されている。
Ｍ関数処理回路４１０の出力は、４つのセレクタ４１１〜４１４に接続されている。各セレクタ４１１〜４１４の出力は、中間鍵を保持するためのレジスタ４１５に格納される。
このようにした中間鍵生成回路４００では、加算回路４０５、乗算回路４０６、ＸＯＲ回路４０８、Ｍ関数処理回路４１０がインデックスｉの値０〜２に対応して３重化されているため、３２ビットの中間鍵を同時に３個生成することが可能である。したがって、この中間鍵生成回路４００では、各クロックにおいてａ０〜ａ２、ｂ０〜ｂ２、ｃ０〜ｃ２、ｄ０〜ｄ２の各３個の中間鍵が生成され、４回のクロックですべての中間鍵が生成されてレジスタ４１５に保存される。
このような暗号回路では３２ビットバスで接続されているため、１２８ビットの平文または暗号文を入力するためには４クロック必要となる。したがって、中間鍵生成回路４００において中間鍵を生成するために４クロックが必要となっても問題がない。また、データスクランブル処理に先だって予め中間鍵の生成処理を行うように構成することにより、中間鍵生成回路４００での処理時間は、データスクランブル処理の時間に影響を与えることがなくなる。加算回路４０５に入力するための所定値は、予め算出してＲＯＭ化しているため、演算時間が短縮されるとともに回路規模を縮小することができる。
さらに、この中間鍵生成回路４００はインデックスｉの値（０〜２）に従って３個の中間鍵を同時に生成するように構成しているが、オーダーの値（ａ〜ｄ）に従って４個の中間鍵を同時に生成するように構成することも考えられる。しかしながら、この第３実施形態で示す中間鍵生成回路４００の構成とすることにより、回路規模をより小さくすることができる。
〔第４実施形態〕
第４実施形態に採用される拡大鍵生成回路を図９に示す。
図９に示す拡大鍵生成回路５２０は、Ｘセレクタ５２１、Ｙセレクタ５２２、Ｚセレクタ５２３、Ｗセレクタ５２４を備えている。
この拡大鍵生成回路５２０では、Ｘセレクタ５２１の出力がローテートシフト回路５２５に入力されている。ローテートシフト回路５２５の出力とＹセレクタ５２２の出力が加算回路５２６に入力されている。また、Ｚセレクタ５２３の出力がローテートシフト回路５２７に入力されている。ローテートシフト回路５２７の出力とＷセレクタ５２４の出力が減算回路５２８に入力されている。減算回路５２８の出力はローテートシフト回路５２９に入力されている。さらに、加算回路５２６の出力とローテートシフト回路５２９の出力がＸＯＲ回路５３０に入力されている。このＸＯＲ回路５３０の出力がこの拡大鍵生成回路５２０の出力Ｋｎとなる。
Ｘセレクタ５２１、Ｙセレクタ５２２、Ｚセレクタ５２３、Ｗセレクタ５２４はそれぞれ４入力１出力のセレクタであり、図８で示すような中間鍵生成回路４００で生成された中間鍵が保存されるレジスタ４１５の出力が入力される。ここで、この拡大鍵生成回路５２０は、表２に示すインデックステーブルのテーブル数に対応して９個用意される。１番目の拡大鍵生成回路５２０のＸセレクタ５２１、Ｙセレクタ５２２、Ｚセレクタ５２３、Ｗセレクタ５２４には、それぞれインデックステーブルのｓ＝０に対応して（ａ０，ｂ０，ｃ０，ｄ０）、（ａ０，ｂ０，ｃ０，ｄ０）、（ａ０，ｂ０，ｃ０，ｄ０）、（ａ０，ｂ０，ｃ０，ｄ０）が入力される。２番目〜９番目の拡大鍵生成回路５２０についても、インデックスパラメータｓに基づいて決定されるインデックスｉの値に基づいて、（ａｉ，ｂｉ，ｃ，ｄｉ）がＸセレクタ５２１、Ｙセレクタ５２２、Ｚセレクタ５２３、Ｗセレクタ５２４に入力される。この回路０〜回路８のＸセレクタ５２１、Ｙセレクタ５２２、Ｚセレクタ５２３、Ｗセレクタ５２４に対する入力データの対応を表３に示す。
【表３】
0004745598.tif 000006
また、回路０〜回路８のＸセレクタ５２１、Ｙセレクタ５２２、Ｚセレクタ５２３、Ｗセレクタ５２４におけるセレクタ制御は、表１に示すオーダーテーブルに基づいて行われるものであり、このセレクタ制御の対応を表４に示す。
【表４】
0004745598.tif 000007
この拡大鍵生成回路５２０におけるセレクタ制御のテーブルは、ＲＯＭに格納しておくことで制御が簡単になり、回路規模を縮小することが可能となる。
各拡大鍵生成回路５２０から出力される拡大鍵は、図１０に示すような出力回路５４０を介してデータスクランブル回路に入力される。この出力回路５４０は、セレクタ５４１〜５４８で構成されており、それぞれ上述の回路０〜８の出力ＫＷ０〜ＫＷ８が入力される。各セレクタ５４１〜５４８の各出力ＥＸ＿Ａ０〜ＥＸ＿Ａ３，ＥＸ＿Ｂ０〜ＥＸ＿Ｂ３は、３２ビット×４の拡大鍵がグループＡ，Ｂの２セット分として出力される。各セレクタ５４１〜５４８のセレクタ制御のテーブルを暗号化時のものを表５に、復号化時のものを表６に示す。
【表５】
0004745598.tif 000008
【表６】
0004745598.tif 000009
図５に示すような拡大鍵生成回路５００を用いた場合、Ｘセレクタ５０１〜Ｗセレクタ５０４は１２入力１出力の回路を構成する必要があり、回路規模が増大するという欠点があるが、図９に示すような拡大鍵生成回路５２０を用いることによりＸセレクタ５２１〜Ｗセレクタ５２４をそれぞれ４入力１出力のセレクタ回路で構成でき、回路構成を大幅に削減することが可能となる。このことは、図９の拡大鍵生成回路５２０を９個用意する必要があるものの、拡大鍵生成回路全体としての回路規模を削減することとなる。
〔第５実施形態〕
第５実施形態に採用されるデータスクランブル回路の構成例を図１５に示す。
図１５に示すデータスクランブル回路２２０では、１２８ビットのブロック単位で暗号化／復号化を行うために、３２ビット×４の入力データバスａ，ｂ，ｃ，ｄと、３２ビット×４の出力データバスｅ，ｆ，ｇ，ｈを備えている。
このデータスクランブル回路２２０には、第１Ｉ関数処理回路２２１、Ｂ関数処理回路２２２、第２Ｉ関数処理回路２２３を有する第１処理ブロック２２８と、第１Ｒ関数処理回路２２４、第２Ｒ関数処理回路２２５を有する第２処理ブロック２２９を備えている。また、データスクランブル回路２２０には、入力データと第２Ｒ関数処理回路２２５の出力とを選択的に出力するセレクタ２２６と、第２Ｉ関数処理回路２２３の出力をクロック毎に保持するレジスタ２２７を備えている。
このように構成されたデータスクランブル回路２２０では、セレクタ２２６を適宜切り換えることにより、第１Ｉ関数処理回路２２１、Ｂ関数処理回路２２２、第２Ｉ関数処理回路２２３による処理を実行した後、第２処理ブロック２２９および第１処理ブロック２２８でなるＲ−Ｒ−Ｉ−Ｂ−Ｉの処理ループを複数回繰り返した後、出力データバス（ｅ，ｆ，ｇ，ｈ）に結果を出力するように構成できる。
最初のクロックでは、セレクタ２２６が入力データ側に切り換えられており、入力データａ，ｂ，ｃ，ｄは、第１処理ブロック２２８で処理された後、レジスタ２２７にその値が保持される。
次のクロックでは、セレクタ２２６が第２処理ブロック２２９側に切り換えられており、レジスタ２２７から出力されたデータは、第２処理ブロック２２９および第１処理ブロック２２８により各関数処理が実行され、レジスタ２２７にその値が保持される。
この後、鍵長１２８ビットの暗号鍵を用いる場合には、第１処理ブロック２２９と第１処理ブロック２２８で構成されるループ処理を５回実行して、出力データｅ，ｆ，ｇ，ｈを得る。
第１Ｉ関数処理回路２２１、第２Ｉ関数処理回路２２３には、図５で示す拡大鍵生成回路５００や図９で示す拡大鍵生成回路５２０で生成される拡大鍵が入力されることとなる。拡大鍵生成回路で３２ビット×４の拡大鍵を２セット同時に生成する構成となっている場合には、１クロックで生成される２セットの拡大鍵のうちグループＡを第１Ｉ関数処理回路２２１で使用し、グループＢを第２Ｉ関数処理回路２２３で使用するように構成することができる。このことにより、拡大鍵生成回路による拡大鍵生成処理と、データスクランブル処理の両方を同時に処理することが可能となり、処理時間の遅延を防止することができる。
〔第６実施形態〕
第６実施形態に採用されるデータスクランブル回路の構成例を図１６に示す。
図１６に示すデータスクランブル回路２４０では、１２８ビットのブロック単位で暗号化／復号化を行うために、３２ビット×４の入力データバスａ，ｂ，ｃ，ｄと、３２ビット×４の出力データバスｅ，ｆ，ｇ，ｈを備えている。
このデータスクランブル回路２４０には、第１Ｉ関数処理回路２４１、Ｂ関数処理回路２４２、第２Ｉ関数処理回路２４３を有する第１処理ブロック２４９と、第１Ｒ関数処理回路２４４、第２Ｒ関数処理回路２４５を有する第２処理ブロック２５０を備えている。また、データスクランブル回路２４０には、第１処理ブロック２４９の出力と第２処理ブロック２５０の出力とを選択的に出力する出力側セレクタ２４７と、出力側セレクタ２４７の出力をクロック毎に保持するレジスタ２４８と、入力データとレジスタ２４８の出力とを選択的に出力する入力側セレクタ２４６とを備えている。
このように構成されたデータスクランブル回路２４０では、入力側セレクタ２４６および出力側セレクタ２４７を適宜切り換えることにより、第１Ｉ関数処理回路２４１、Ｂ関数処理回路２４２、第２Ｉ関数処理回路２４３による処理を実行した後、第２処理ブロック２５０によるＲ−Ｒ処理と、第１処理ブロック２４９によるＩ−Ｂ−Ｉ処理を交互に繰り返し実行した後、出力データバス（ｅ，ｆ，ｇ，ｈ）に結果を出力するように構成できる。
最初のクロックでは、入力側セレクタ２４６が入力データ側に切り換えられており、入力データａ，ｂ，ｃ，ｄは、第１処理ブロック２４９で処理された後、レジスタ２４８にその値が保持される。
次のクロックでは、出力側セレクタ２４７が第２処理ブロック２５０側に切り換えられており、レジスタ２４８から出力されたデータは、第２処理ブロック２５０により各関数処理が実行され、レジスタ２４８にその値が保持される。
さらに、次のクロックでは、入力側セレクタ２４６がレジスタ２４８側に切り換えられ、出力側セレクタ２４７が第１処理ブロック２４９側に切り換えられており、レジスタ２４８から出力されたデータは、第１処理ブロック２４９で各関数処理が実行され、レジスタ２４８にその値が保持される。これを複数回繰り返すことで、前述したデータスクランブル回路と同等の機能を実現することが可能となる。
第１Ｉ関数処理回路２４１、第２Ｉ関数処理回路２４３には、図５で示す拡大鍵生成回路５００や図９で示す拡大鍵生成回路５２０で生成される拡大鍵が入力されることとなる。拡大鍵生成回路で３２ビット×４の拡大鍵を２セット同時に生成する構成となっている場合には、１クロックで生成される２セットの拡大鍵のうちグループＡを第１Ｉ関数処理回路２４１で使用し、グループＢを第２Ｉ関数処理回路２４３で使用するように構成することができる。
このデータスクランブル回路２４０では、１回のＩ−Ｂ−Ｉ−Ｒ−Ｒ処理に２サイクルが必要となるため、拡大鍵生成回路による拡大鍵生成処理による遅延時間の影響が無くなる。
〔第７実施形態〕
第７実施形態に採用されるデータスクランブル回路の構成例を図１７に示す。
図１７に示すデータスクランブル回路２６０では、１２８ビットのブロック単位で暗号化／復号化を行うために、３２ビット×４の入力データバスａ，ｂ，ｃ，ｄと、３２ビット×４の出力データバスｅ，ｆ，ｇ，ｈを備えている。
このデータスクランブル回路２６０には、第１Ｉ関数処理回路２６１、Ｂ関数処理回路２６２、第２Ｉ関数処理回路２６３を有する第１処理ブロック２６８と、Ｒ関数処理回路２６４で構成される第２処理ブロック２６９を備えている。また、データスクランブル回路２６０には、第１処理ブロック２６８の出力と第２処理ブロック２６９の出力とを選択的に出力する出力側セレクタ２６６と、出力側セレクタ２６６の出力をクロック毎に保持するレジスタ２６７と、入力データとレジスタ２６７の出力とを選択的に出力する入力側セレクタ２６５とを備えている。
このように構成されたデータスクランブル回路２６０では、入力側セレクタ２６５および出力側セレクタ２６６を適宜切り換えることにより、第１Ｉ関数処理回路２６１、Ｂ関数処理回路２６２、第２Ｉ関数処理回路２６３による処理を実行した後、第２処理ブロック２６９によるＲ処理を２回と、第１処理ブロック２６８によるＩ−Ｂ−Ｉ処理を交互に繰り返し実行した後、出力データバス（ｅ，ｆ，ｇ，ｈ）に結果を出力するように構成できる。
最初のクロックでは、入力側セレクタ２６５が入力データ側に切り換えられており、入力データａ，ｂ，ｃ，ｄは、第１処理ブロック２６８で処理された後、レジスタ２６７にその値が保持される。
次のクロックでは、出力側セレクタ２６６が第２処理ブロック２６９側に切り換えられており、レジスタ２６７から出力されたデータは、第２処理ブロック２６９によりＲ関数処理が実行され、レジスタ２６７にその値が保持される。次のクロックでは、同様に、出力側セレクタ２６６が第２処理ブロック２６９側のままであり、レジスタ２６７から出力されたデータは、第２処理ブロック２６９によりＲ関数処理が実行され、レジスタ２６７にその値が保持される。
さらに、次のクロックでは、入力側セレクタ２６５がレジスタ２６７側に切り換えられ、出力側セレクタ２６６が第１処理ブロック２６８側に切り換えられており、レジスタ２６７から出力されたデータは、第１処理ブロック２６８で各関数処理が実行され、レジスタ２６７にその値が保持される。これを複数回繰り返すことで、前述したデータスクランブル回路と同等の機能を実現することが可能となる。
第１Ｉ関数処理回路２６１、第２Ｉ関数処理回路２６３には、図５で示す拡大鍵生成回路５００や図９で示す拡大鍵生成回路５２０で生成される拡大鍵が入力されることとなる。拡大鍵生成回路で３２ビット×４の拡大鍵を２セット同時に生成する構成となっている場合には、１クロックで生成される２セットの拡大鍵のうちグループＡを第１Ｉ関数処理回路２６１で使用し、グループＢを第２Ｉ関数処理回路２６３で使用するように構成することができる。
このデータスクランブル回路２６０では、１回のＩ−Ｂ−Ｉ−Ｒ−Ｒ処理に３サイクルが必要となるため、拡大鍵生成回路による拡大鍵生成処理による遅延時間の影響が無くなる。
〔第８実施形態〕
第８実施形態に採用されるデータスクランブル回路の構成例を図２０に示す。
図２０に示すデータスクランブル回路６００でも、前述の実施形態と同様に、１２８ビットのブロック単位で暗号化／復号化を行うために、３２ビット×４の入力データバスと、３２ビット×４の出力データバスを備えており、これを便宜的に１本の線で表示している。
データスクランブル回路６００は、入力レジスタ６０１、第１セレクタ６０２、Ｂ関数処理回路６０３、第２セレクタ６０４、第１Ｉ関数処理回路６０５、Ｒ関数処理回路６０７、クロス処理用経路６０８、第３セレクタ６０９、第２Ｉ関数処理回路６１０、出力レジスタ６１２、第４セレクタ６０６、第５セレクタ６１１を備えている。
入力レジスタ６０１は、入力データバスからの入力を一旦保持し、第１セレクタ６０２に入力するものである。第１セレクタ６０２は、入力レジスタ６０１の出力と、出力レジスタ６１２からフィードバックされる出力とが入力され、いずれか一方をＢ関数処理回路６０３に出力する。
第１セレクタ６０２の出力と、Ｂ関数処理回路６０３の出力とが第２セレクタ６０４に入力されている。第２セレクタ６０４は、第１セレクタ６０２の出力とＢ関数処理回路６０３の出力のうちいずれか一方を選択して第１Ｉ関数処理回路６０５に入力する。
第１Ｉ関数処理回路６０５は、第２セレクタ６０４の出力と、第４セレクタ６０６の出力とに基づいてＩ関数処理を行う。具体的には、第４セレクタ６０６から入力されるパラメータを第２セレクタ６０４から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第４セレクタ６０６には、拡大鍵データと”０”とが入力されており、このうちいずれか一方を選択して出力するように構成されている。したがって、第４セレクタ６０６の出力が”０”である場合、第１Ｉ関数処理回路６０５は、入力データと同一のデータを出力することとなる。
第１Ｉ関数処理回路６０５の出力は、第３セレクタ６０９とＲ関数処理回路６０７とに入力される。Ｒ関数処理回路６０７の出力は、第３セレクタ６０９に入力されるとともに、クロス処理用経路６０８を経由して第３セレクタ６０９に入力されている。クロス処理用経路６０８は、Ｒ関数処理回路６０７の出力データ１２８ビットを３２ビット毎に（ａ，ｂ，ｃ，ｄ）とした場合、入力（ａ，ｂ，ｃ，ｄ）に対して（ｃ，ｄ，ａ，ｂ）を出力するような処理を行うものであり、Ｒ関数処理回路６０７と第３セレクタ６０９との間の結線を変更することで実現できる。
第３セレクタ６０９は、第１Ｉ関数処理回路６０５の出力、Ｒ関数処理回路６０７の出力、クロス処理用経路６０８を経由したＲ関数処理回路６０７の出力が入力され、いずれか１つを出力する。
第３セレクタ６０９の出力は第２Ｉ関数処理回路６１０に入力される。第２Ｉ関数処理回路６１０は、第３セレクタ６０９の出力と、第５セレクタ６１１の出力とに基づいてＩ関数処理を行う。具体的には、第５セレクタ６１１から入力されるパラメータを第３セレクタ６０９から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第５セレクタ６１１には、拡大鍵データと”０”とが入力されており、このうちいずれか一方を選択して出力するように構成されている。したがって、第５セレクタ６１１の出力が”０”である場合、第２Ｉ関数処理回路６１０は、入力データと同一のデータを出力することとなる。
第２Ｉ関数処理回路６１０の出力は、出力レジスタ６１２に入力される。出力レジスタ６１２は、第２Ｉ関数処理回路６１０の出力を一旦保持し、出力データバスに出力するとともに、第１セレクタ６０２にフィードバックする。
このようにしたデータスクランブル回路６００において、第１セレクタ６０２、第２セレクタ６０４、第３セレクタ６０９、第４セレクタ６０６、第５セレクタ６１１を切換制御することにより、１サイクルでの処理を（Ｉ）、（Ｂ−Ｉ−Ｒ）、（Ｒ−Ｉ）、（Ｂ−Ｉ）のいずれかに設定することが可能である。最初に（Ｉ）処理を実行し、その後、（Ｂ−Ｉ−Ｒ）処理と（Ｒ−Ｉ）処理を交互に複数回繰り返し、最後に（Ｂ−Ｉ）処理を実行することにより、ＳＣ２０００のアルゴリズムに準拠した暗号化・復号化処理を実行することができる。（Ｂ−Ｉ−Ｒ）処理と（Ｒ−Ｉ）処理の操り返し数を６回とする場合のセレクタの切換制御を表７に示す。
【表７】
0004745598.tif 000010
ここで、第１セレクタ６０２のセレクタ位置ａが入力レジスタ６０１、セレクタ位置ｂが出力レジスタ６１２、第２セレクタ６０４のセレクタ位置ａが第１セレクタ６０２、セレクタ位置ｂがＢ関数処理回路６０３、第３セレクタ６０９のセレクタ位置ａが第１Ｉ関数処理回路６０５、セレクタ位置ｂがＲ関数処理回路６０７、セレクタ位置ｃがクロス処理用経路６０８、第４セレクタ６０６のセレクタ位置ａが拡大鍵データ、セレクタ位置ｂがデータ”０”、第５セレクタ６１１のセレクタ位置ａが拡大鍵データ、セレクタ位置ｂがデータ”０”にそれぞれ対応するものとしている。
表７に示すセレクタ切換制御では、鍵長１２８ビットの場合の例である。鍵長が１９２／２５６ビットである場合には、（Ｂ−Ｉ−Ｒ）処理と（Ｒ−Ｉ）処理の繰り返し数を７回とし、表７の１３サイクルと１４サイクルとの間に、（Ｂ−Ｉ−Ｒ）処理と（Ｒ−Ｉ）処理を１回ずつ追加することとなる。
このように、比較的回路規模が大きいＲ関数処理回路を１つにすることで、回路規模を小さくすることが可能であり、電子マネーなどに利用されるスマートカードやＩＣカードなどに搭載する際の回路配置が容易になる。
〈拡大鍵生成回路〉
この第８実施形態で用いられる拡大鍵生成回路の一例を図２３に示す。
ここでは、処理ブロック１２８ビットのデータスクランブル回路を想定しているため、データスクランブル６００の第１Ｉ関数処理回路６０５および第２Ｉ関数処理回路６１０において１２８ビットの拡大鍵が必要となる。このような１２８ビットの拡大鍵を生成するために、３２ビットの拡大鍵を生成する回路を用いた場合、４つの拡大鍵を生成する必要がある。ここでは、図２３に示すように、３２ビット拡大鍵生成回路を２つにすることにより回路規模を小さくし、２クロックで４つの３２ビット拡大鍵を生成し、１２８ビット拡大鍵を生成するように構成する。
図２３に示す拡大鍵生成回路５５０は、１Ｘセレクタ５５１，１Ｙセレクタ５５２，１Ｚセレクタ５５３，１Ｗセレクタ５５４の４つのセレクタを備えている。１Ｘセレクタ５５１，１Ｙセレクタ５５２，１Ｚセレクタ５５３，１Ｗセレクタ５５４は、たとえば、図４に示す拡大鍵生成回路５０の入力データバスＸ，Ｙ，Ｚ，Ｗに対応しており、図３に示す中間鍵生成回路４０から出力される中間鍵（ａｉ，ｂｉ，ｃｉ，ｄｉ）のすべてが入力側に接続されている。
この拡大鍵生成回路５５０では、１Ｘセレクタ５５１，１Ｙセレクタ５５２，１Ｚセレクタ５５３，１Ｗセレクタ５５４の４つのセレクタの出力が接続される第１スイッチ回路５５５を備えている。この第１スイッチ回路５５５は、４入力１出力のスイッチ回路を４つ並列に配置したものである。
第１スイッチ回路５５５の第１出力は、ローテートシフト回路５５６に入力されている。ローテートシフト回路５５６の出力と第１スイッチ回路５５５の第２出力が加算回路５５８に入力されている。また、第１スイッチ回路の第３出力がローテートシフト回路５５７に入力されている。ローテートシフト回路５５７の出力と第１スイッチ回路５５５の第４出力が減算回路５５９に入力されている。減算回路５５９の出力はローテートシフト回路５６０に入力されている。さらに、加算回路５５８の出力とローテートシフト回路５６０の出力がＸＯＲ回路５６１に入力されている。このＸＯＲ回路５６１の出力が第１出力レジスタ５６２に保持される。
さらに、この拡大鍵生成回路５５０では、２Ｘセレクタ５７１，２Ｙセレクタ５７２，２Ｚセレクタ５７３，２Ｗセレクタ５７４の４つのセレクタの出力が接続される第２スイッチ回路５７５を備えている。この第２スイッチ回路５７５は、４入力１出力のスイッチ回路を４つ並列に配置したものである。
第２スイッチ回路５７５の第１出力は、ローテートシフト回路５７６に入力されている。ローテートシフト回路５７６の出力と第２スイッチ回路５７５の第２出力が加算回路５７８に入力されている。また、第２スイッチ回路の第３出力がローテートシフト回路５７７に入力されている。ローテートシフト回路５７７の出力と第２スイッチ回路５７５の第４出力が減算回路５７９に入力されている。減算回路５７９の出力はローテートシフト回路５８０に入力されている。さらに、加算回路５７８の出力とローテートシフト回路５８０の出力がＸＯＲ回路５８１に入力されている。このＸＯＲ回路５８１の出力が第２出力レジスタ５８２に保持される。
このように構成される拡大鍵生成回路５５０では、１クロックで３２ビット拡大鍵を２つ生成することとなり、１２８ビット拡大鍵を生成するために２クロックが必要となる。このため、データスクランブル回路におけるＩ関数処理も２クロックで１サイクルの処理を行うように構成する。
この拡大鍵生成回路５５０の１Ｘセレクタ５５１，１Ｙセレクタ５５２，１Ｚセレクタ５５３，１Ｗセレクタ５５４，２Ｘセレクタ５７１，２Ｙセレクタ５７２，２Ｚセレクタ５７３，２Ｗセレクタ５７４および第１スイッチ回路５５５，第２スイッチ回路５７５の切換制御を表８に示す。
【表８】
0004745598.tif 000011
〈中間鍵生成回路〉
第８実施形態で用いられる中間鍵生成回路の例を図２２に示す。
図２２に示す中間鍵生成回路４５０では、入力レジスタ４５１と、入力レジスタ４５１の値に基づいてＭ関数処理を実行するＭ関数処理回路４５２と、Ｍ関数処理回路４５２の出力を保持する中間レジスタ４５３とを備えている。
入力レジスタ４５１は、前述したように、暗号鍵が１２８ビットの場合には、上位ビットから３２ビット毎に分割された４つのデータｋ０，ｋ１，ｋ２，ｋ３から、（ｋ０，ｋ１，ｋ２，ｋ３，ｋ０，ｋ１，ｋ２，ｋ３）の順に配置された入力データ群が入力され、暗号鍵が１９２ビットの場合には、同様に上位ビットから３２ビット毎に分割された６つのデータｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５から、（ｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ０，ｋ１）の順に配置された入力データ群が入力され、暗号鍵が２５６ビットの場合には、同様に上位ビットから３２ビット毎に分割された８つのデータｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ６，ｋ７から、（ｋ０，ｋ１，ｋ２，ｋ３，ｋ４，ｋ５，ｋ６，ｋ７）の順に配置された入力データ群が入力される。
Ｍ関数処理回路４５２は、入力レジスタ４５１の値に基づいてＭ関数処理を実行するものであって、回路規模を削減するために、データスクランブル回路６００内のＭ関数処理回路を共用することとする。データスクランブル回路６００のＲ関数処理回路６０７には、図１３に示すようなＦ関数処理回路７３を含んでおり、さらにこのＦ関数処理回路７３は図１８に示すようなＭ関数処理回路４１を備えている。中間鍵生成の工程において、このデータスクランブル回路６００に含まれるＭ関数処理回路４１を利用してＭ関数処理を実行し、その結果を中間レジスタ４５３に格納する。
中間レジスタ４５３の値は、第１セレクタ４５４、第２セレクタ４５５に入力される。特に、中間レジスタ４５３の奇数番目の値（ｋ’０，ｋ’２，ｋ’４，ｋ’６）が第１セレクタ４５４に入力され、中間レジスタ４５３の偶数番目の値（ｋ’１，ｋ’３，ｋ’５，ｋ’７）が第２セレクタ４５５に入力される。
中間鍵生成回路４５０は、さらに、第１セレクタ４５４に接続される加算回路４５６と、第２セレクタ４５５に接続される乗算回路４５７と、加算回路４５６および乗算回路４５７の出力データが入力されるＸＯＲ回路４５８と、ＸＯＲ回路４５８の出力データに対して非線形関数処理を行うＭ関数処理回路４５９と、Ｍ関数処理回路４５９の出力を保持するための出力レジスタ４６０とを備えている。
各処理回路はそれぞれ３２ビットデータの処理が可能な構成となっており、暗号鍵から変換された３２ビット×８の入力データがそれぞれ入力レジスタ４５１に格納され、Ｍ関数処理回路４５２に入力される。
中間レジスタ４５３のうち、上位から奇数番目に位置するものについては、その値が加算回路４５６に入力される。この加算回路４５６は、入力データに所定値Ｍ（４ｉ）、Ｍ（４ｉ＋１）、Ｍ（４ｉ＋２）、Ｍ（４ｉ＋３）のうちいずれかを加算するものであり、インデックスｉの値０〜２に対応して４×３＝１２通りの値を加算する。所定値Ｍ（４ｉ）、Ｍ（４ｉ＋１）、Ｍ（４ｉ＋２）、Ｍ（４ｉ＋３）は、それぞれ４ｉ、４ｉ＋１、４ｉ＋２、４ｉ＋３を非線形関数であるＭ関数で処理した固定値であり、インデックスｉの値０〜２に対応してそれぞれ３個の値をとるように構成されている。
中間レジスタ４５３のうち、上位から偶数番目に位置するものについては、その値が乗算回路４５７に入力される。この乗算回路４５７は、入力データに所定値ｉ＋１を乗算するものであり、インデックスｉの値０〜２に対応して３通りの値を乗算する。インデックスｉの値は、拡大鍵生成時のキースケジューリングに用いられるインデックス値と同等であり０〜２の値をとり、これに対応して所定値ｉ＋１の値もそれぞれ３個の値をとるように構成されている。
加算回路４５６および乗算回路４５７の出力データはそれぞれＸＯＲ回路４５８に入力される。ＸＯＲ回路４５８は、加算回路４５６の出力値と乗算回路４５７の出力値の排他的論理和を演算するものである。
ＸＯＲ回路４５８の出力データをＭ関数処理するためのＭ関数処理回路４５９が設けられている。このＭ関数処理回路４５９も、前述のＭ関数処理回路４５２と同様にデータスクランブル回路６００に含まれるＭ関数処理回路を共用することにより、回路規模を小さくすることが可能となる。
Ｍ関数処理回路４５９の出力は出力レジスタ４６０に保持される。このことから、中間鍵生成回路４５０はインデックスｉの値に応じて中間鍵（ａ０，ａ１，ａ２，ｂ０，ｂ１，ｂ２，ｃ０，ｃ１，ｃ２，ｄ０，ｄ１，ｄ２）を生成し、出力レジスタ４６０に格納する。
このようにした中間鍵生成回路４５０を用いて１２個の中間鍵を生成するためには１２クロック必要となり、生成工程に要する時間が長くなるが、前述の実施形態で用いた回路のように一部が３重化または４重化した回路に比して、回路規模を小さくすることができる。
〔第９実施形態〕
本発明の第９実施形態に採用されるデータスクランブル回路を図２１に示す。
データスクランブル回路６２０は、入力レジスタ６２１、第１セレクタ６２２、Ｂ関数処理回路６２３、第２セレクタ６２４、第１Ｉ関数処理回路６２５、Ｒ／２関数処理回路６２７、クロス処理用経路６２８、第３セレクタ６２９、第２Ｉ関数処理回路６３０、出力レジスタ６３２、第４セレクタ６２６、第５セレクタ６３１を備えている。
入力レジスタ６２１は、入力データバスからの入力を一旦保持し、第１セレクタ６２２に入力するものである。第１セレクタ６２２は、入力レジスタ６２１の出力と、出力レジスタ６３２からフィードバックされる出力とが入力され、いずれか一方をＢ関数処理回路６２３に出力する。
第１セレクタ６２２の出力と、Ｂ関数処理回路６２３の出力とが第２セレクタ６２４に入力されている。第２セレクタ６２４は、第１セレクタ６２２の出力とＢ関数処理回路６２３の出力のうちいずれか一方を選択して第１Ｉ関数処理回路６２５に入力する。
第１Ｉ関数処理回路６２５は、第２セレクタ６２４の出力と、第４セレクタ６２６の出力とに基づいてＩ関数処理を行う。具体的には、第４セレクタ６２６から入力されるパラメータを第２セレクタ６２４から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第４セレクタ６２６には、拡大鍵データと”０”とが入力されており、このうちいずれか一方を選択して出力するように構成されている。したがって、第４セレクタ６２６の出力が”０”である場合、第１Ｉ関数処理回路６２５は、入力データと同一のデータを出力することとなる。
第１Ｉ関数処理回路６２５の出力は、第３セレクタ６２９とＲ／２関数処理回路６２７とに入力される。Ｒ／２関数処理回路６２７の出力は、第３セレクタ６２９に入力されるとともに、クロス処理用経路６２８を経由して第３セレクタ６２９に入力されている。
Ｒ／２関数処理回路６２７は、図２４に示すような構成とすることができる。ここでは、入力データのうちから３２ビット毎にデータ入力されるセレクタ７０１と、セレクタ７０１の出力を非線形処理するためのＭ関数処理回路７０２と、Ｍ関数処理回路７０２の出力を保持するための中間レジスタ７０３と、中間レジスタ７０３の値が入力され、この入力値に０ｘ５５５５５５５５または０ｘ３３３３３３３３を乗算する第１乗算回路７０４と、Ｍ関数処理回路７０２の出力データが入力され、この入力値に０ｘａａａａａａａａまたは０ｘｃｃｃｃｃｃｃｃを乗算する第２乗算回路７０５と、第１乗算回路７０４の出力とＭ関数処理回路７０２の出力との排他的論理和を演算する第１ＸＯＲ回路７０６と、第２乗算回路７０７の出力と中間レジスタ７０３の値との排他的論理和を演算する第２ＸＯＲ回路７０７と、第１ＸＯＲ回路７０６および第２ＸＯＲ回路７０７の出力値と入力データとの排他的論理和を演算する第３ＸＯＲ回路７０８とを備えている。
このＲ／２関数処理回路６２７は、図１３のＦ関数処理回路に含まれる２つのＭ関数処理回路のうちから１つを省略したものであり、前述した実施形態における１２８ビットのＲ関数処理のうち６４ビット毎に処理を行うように構成されている。セレクタ７０１〜第１ＸＯＲ回路７０６，第２ＸＯＲ回路７０７においては、３２ビット処理が行われ、第３ＸＯＲ回路７０８においては６４ビット処理を行うように構成する。このことから、２クロックの処理で１２８ビットのＲ関数処理を行うことが可能となる。
第３セレクタ６２９は、第１Ｉ関数処理回路６２５の出力、Ｒ／２関数処理回路６２７の出力、クロス処理用経路６２８を経由したＲ／２関数処理回路６２７の出力が入力され、いずれか１つを出力する。
第３セレクタ６２９の出力は第２Ｉ関数処理回路６３０に入力される。第２Ｉ関数処理回路６３０は、第３セレクタ６２９の出力と、第５セレクタ６３１の出力とに基づいてＩ関数処理を行う。具体的には、第５セレクタ６３１から入力されるパラメータを第３セレクタ６２９から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第５セレクタ６３１には、拡大鍵データと”０”とが入力されており、このうちいずれか一方を選択して出力するように構成されている。したがって、第５セレクタ６３１の出力が”０”である場合、第２Ｉ関数処理回路６３０は、入力データと同一のデータを出力することとなる。
第２Ｉ関数処理回路６３０の出力は、出力レジスタ６３２に入力される。出力レジスタ６３２は、第２Ｉ関数処理回路６３０の出力を一旦保持し、出力データバスに出力するとともに、第１セレクタ６２２にフィードバックする。
このように、Ｒ／２関数処理回路６２７を用いてＲ関数処理を行う場合には、２クロック必要となるが、データスクランブル回路６２０における各サイクルでの処理に２クロックが必要であることから、Ｒ／２関数処理回路６２７を用いることにより処理サイクル数の増加はない。このような構成とすることにより、Ｍ関数処理回路を削減することができ、回路規模を小さくすることが可能となる。
また、中間鍵生成回路４５０（図２２参照）の入力レジスタ４５１の値をセレクタ７０１に入力し、Ｍ関数処理回路７０２の出力を中間レジスタ４５３に格納できるように構成している。さらに、中間鍵生成回路４５０のＸＯＲ回路４５８の出力をセレクタ７０１に入力し、Ｍ関数処理回路７０２の出力を出力レジスタ４６０に格納できるように構成している。このように構成することで、データスクランブル回路６２０のＭ関数処理回路７０２を中間鍵生成回路４５０のＭ関数処理回路として共用することができ、回路規模を小さくすることが可能となる。
〔第１０実施形態〕
第１０実施形態に採用されるデータスクランブル回路の構成を図２５に示す。
図２５に示すデータスクランブル回路６４０でも、前述の実施形態と同様に、１２８ビットのブロック単位で暗号化／復号化を行うために、３２ビット×４の入力データバスと、３２ビット×４の出力データバスを備えており、これを便宜的に１本の線で表示している。
データスクランブル回路６４０は、入力レジスタ６４１、第１セレクタ６４２、Ｂ関数処理回路６４３、第２セレクタ６４４、第１Ｉ関数処理回路６４５、Ｒ関数処理回路６４８、クロス処理用経路６４９、第３セレクタ６５０、第２Ｉ関数処理回路６５２、出力レジスタ６５３、第４セレクタ６４７、第５セレクタ６５１およびＩＶレジスタ６４６を備えている。
入力レジスタ６４１は、入力データバスからの入力を一旦保持し、第１セレクタ６４２に入力するものである。第１セレクタ６４２は、入力レジスタ６４１の出力と、出力レジスタ６５３からフィードバックされる出力とが入力され、いずれか一方をＢ関数処理回路６４３に出力する。
第１セレクタ６４２の出力と、Ｂ関数処理回路６４３の出力とが第２セレクタ６４４に入力されている。第２セレクタ６４４は、第１セレクタ６４２の出力とＢ関数処理回路６４３の出力のうちいずれか一方を選択して第１Ｉ関数処理回路６４５に入力する。
第１Ｉ関数処理回路６４５は、第２セレクタ６４４の出力と、第４セレクタ６４７の出力とに基づいてＩ関数処理を行う。具体的には、第４セレクタ６４７から入力されるパラメータを第２セレクタ６４４から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第４セレクタ６４７には、拡大鍵データ、”０”およびＩＶレジスタ６４６の値とが入力されており、このうちいずれか一方を選択して出力するように構成されている。
第１Ｉ関数処理回路６４５の出力は、第３セレクタ６５０とＲ関数処理回路６４８とに入力される。Ｒ関数処理回路６４８の出力は、第３セレクタ６５０に入力されるとともに、クロス処理用経路６４９を経由して第３セレクタ６５０に入力されている。クロス処理用経路６４９は、Ｒ関数処理回路６４８の出力データ１２８ビットを３２ビット毎に（ａ，ｂ，ｃ，ｄ）とした場合、入力（ａ，ｂ，ｃ，ｄ）に対して（ｃ，ｄ，ａ，ｂ）を出力するような処理を行うものであり、Ｒ関数処理回路６４８と第３セレクタ６５０との間の結線を変更することで実現できる。
第３セレクタ６５０は、第１Ｉ関数処理回路６４５の出力、Ｒ関数処理回路６４８の出力、クロス処理用経路６４９を経由したＲ関数処理回路６４８の出力が入力され、いずれか１つを出力する。
第３セレクタ６５０の出力は第２Ｉ関数処理回路６５２に入力される。第２Ｉ関数処理回路６５２は、第３セレクタ６５０の出力と、第５セレクタ６５１の出力とに基づいてＩ関数処理を行う。具体的には、第５セレクタ６５１から入力されるパラメータを第３セレクタ６５０から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第５セレクタ６５１には、拡大鍵データ、”０”およびＩＶレジスタ６４６の値とが入力されており、このうちいずれかを選択して出力するように構成されている。
第２Ｉ関数処理回路６５２の出力は、出力レジスタ６５３に入力される。出力レジスタ６５３は、第２Ｉ関数処理回路６５２の出力を一旦保持し、出力データバスに出力するとともに、第１セレクタ６４２にフィードバックする。
ＩＶレジスタ６４６は、初期値（Ｉｎｉｔｉａｌｉｚａｔｉｏｎ  Ｖｅｃｔｏｒ）を格納するものであり、このＩＶレジスタ６４６に格納された初期値を用いることにより、暗号化および復号化の際のＣＢＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）モード処理を実行することができる。このようなＩＶレジスタ６４６を用いてＣＢＣモード処理を伴う暗号化処理サイクルのセレクタ切換制御を表９に示し、同じく、ＣＢＣモード処理を伴う復号化処理サイクルのセレクタ切換制御を表１０に示す。
【表９】
0004745598.tif 000012
【表１０】
0004745598.tif 000013
このようにして、ＣＢＣモード処理を伴う暗号化処理を行う場合には、第１サイクルにおける第４セレクタ６４７のセレクタ位置をｃとすることにより、ＩＶレジスタ６４６内の初期値を第１Ｉ関数処理回路６４５に供給し、入力データに初期値を排他的論理和演算するように構成する。
また、ＣＢＣモード処理を伴う復号化処理を行う場合には、最終の第１４サイクルにおける第５セレクタ６５１のセレクタ位置をｃとすることにより、ＩＶレジスタ６４６内の初期値を第２Ｉ関数処理回路６５２に供給し、排他的論理和演算を実行した後の結果を出力するように構成できる。
表９および表１０に示すセレクタ切換制御では、鍵長１２８ビットの場合の例であり、鍵長が１９２／２５６ビットである場合には、（Ｂ−Ｉ−Ｒ）処理と（Ｒ−Ｉ）処理の繰り返し数を７回とし、表９および表１０の１３サイクルと１４サイクルとの間に、（Ｂ−Ｉ−Ｒ）処理と（Ｒ−Ｉ）処理を１回ずつ追加することとなる。
〔第１１実施形態〕
第１１実施形態に採用されるデータスクランブル回路の構成を図２６に示す。
図２６に示すデータスクランブル回路６６０は、入力レジスタ６６１、第１セレクタ６６２、Ｂ関数処理回路６６３、第２セレクタ６６４、第１Ｉ関数処理回路６６５、Ｒ／２関数処理回路６６８、クロス処理用経路６６９、第３セレクタ６７０、第２Ｉ関数処理回路６７１、出力レジスタ６７３、第４セレクタ６６７、第５セレクタ６７２およびＩＶレジスタ６６６を備えている。
入力レジスタ６６１は、入力データバスからの入力を一旦保持し、第１セレクタ６６２に入力するものである。第１セレクタ６６２は、入力レジスタ６６１の出力と、出力レジスタ６７３からフィードバックされる出力とが入力され、いずれか一方をＢ関数処理回路６６３に出力する。
第１セレクタ６６２の出力と、Ｂ関数処理回路６６３の出力とが第２セレクタ６６４に入力されている。第２セレクタ６６４は、第１セレクタ６６２の出力とＢ関数処理回路６６３の出力のうちいずれか一方を選択して第１Ｉ関数処理回路６６５に入力する。
第１Ｉ関数処理回路６６５は、第２セレクタ６６４の出力と、第４セレクタ６６７の出力とに基づいてＩ関数処理を行う。具体的には、第４セレクタ６６７から入力されるパラメータを第２セレクタ６６４から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第４セレクタ６６７には、拡大鍵データ、”０”およびＩＶレジスタ６６６の値とが入力されており、このうちいずれか一方を選択して出力するように構成されている。
第１Ｉ関数処理回路６６５の出力は、第３セレクタ６７０とＲ／２関数処理回路６６８とに入力される。Ｒ／２関数処理回路６６８の出力は、第３セレクタ６７０に入力されるとともに、クロス処理用経路６６９を経由して第３セレクタ６７０に入力されている。
Ｒ／２関数処理回路６６８は、前述したＲ／２関数処理回路６２７（図２１参照）と同様の回路を用いることが可能である。
第３セレクタ６７０は、第１Ｉ関数処理回路６６５の出力、Ｒ／２関数処理回路６６８の出力、クロス処理用経路６６９を経由したＲ／２関数処理回路６６８の出力が入力され、いずれか１つを出力する。
第３セレクタ６７０の出力は第２Ｉ関数処理回路６７１に入力される。第２Ｉ関数処理回路６７１は、第３セレクタ６７０の出力と、第５セレクタ６７２の出力とに基づいてＩ関数処理を行う。具体的には、第５セレクタ６７２から入力されるパラメータを第３セレクタ６７０から入力されるデータに排他的論理和（ＸＯＲ）演算する。ここで、第５セレクタ６７２には、拡大鍵データ、”０”およびＩＶレジスタ６６６の値とが入力されており、このうちいずれかを選択して出力するように構成されている。
第２Ｉ関数処理回路６７１の出力は、出力レジスタ６７３に入力される。出力レジスタ６７３は、第２Ｉ関数処理回路６７１の出力を一旦保持し、出力データバスに出力するとともに、第１セレクタ６６２にフィードバックする。
このように、Ｒ／２関数処理回路６６８を用いてＲ関数処理を行っているため、処理サイクルを増加することなく、Ｍ関数処理回路を削減することができ、回路規模を小さくすることが可能となる。
中間鍵生成回路におけるＭ関数処理回路を共用することも可能となるため、さらに回路規模を小さくすることが可能となる。
さらに、ＩＶレジスタ６６６に格納された初期値を利用して、ＣＢＣモード処理を行うことも可能となる。
（産業上の利用可能性）
本発明によれば、基本関数処理を繰り返し実行するブロック暗号アルゴリズムにおいて、クロック同期ループを構成することで、回路規模を縮小することが可能となる。また、中間鍵を事前に生成するように構成することで、中間鍵から拡大鍵を生成する処理を高速化することができる。さらに、拡大鍵生成処理において、キースケジューリングの制御を簡易化することができ、コンパクトな回路で高速処理を実現することができる。
【図面の簡単な説明】
図１は、本発明の概略構成を示すブロック図である。
図２は、第１実施形態のデータスクランブル回路を示す回路図である。
図３は、第１実施形態の中間鍵生成回路を示す回路図である。
図４は、第１実施形態の拡大鍵生成回路を示す回路図である。
図５は、第２実施形態の拡大鍵生成回路を示す回路図である。
図６は、第２実施形態のデータスクランブル回路を示す回路図である。
図７は、第２実施形態のデータスクランブル回路の変形例を示す回路図である。
図８は、第３実施形態の中間鍵生成回路を示す回路図である。
図９は、第４実施形態の拡大鍵生成回路を示す回路図である。
図１０は、第４実施形態の拡大鍵生成回路の出力回路を示す回路図である。
図１１は、Ｂ関数処理回路を示す回路図である。
図１２は、Ｒ関数処理回路を示す回路図である。
図１３は、Ｆ関数処理回路を示す回路図である。
図１４は、第１実施形態における他のデータスクランブル回路を示す回路図である。
図１５は、第５実施形態のデータスクランブル回路を示す回路図である。
図１６は、第６実施形態のデータスクランブル回路を示す回路図である。
図１７は、第７実施形態のデータスクランブル回路を示す回路図である。
図１８は、Ｍ関数処理回路を示す回路図である。
図１９は、Ｍ関数処理回路における処理の説明図。
図２０は、第８実施形態のデータスクランブル回路を示す回路図である。
図２１は、第９実施形態のデータスクランブル回路を示す回路図である。
図２２は、第８実施形態および第９実施形態に用いられる中間鍵生成回路を示す回路図である。
図２３は、第８実施形態および第９実施形態に用いられる拡大鍵生成回路を示す回路図である。
図２４は、第９実施形態、第１１実施形態に用いられるＲ／２関数処理回路を示す回路図である。
図２５は、第１０実施形態のデータスクランブル回路を示す回路図である。
図２６は、第１１実施形態のデータスクランブル回路を示す回路図である。
【図１】
0004745598.tif 000014
【図２】
0004745598.tif 000015
【図３】
0004745598.tif 000016
【図４】
0004745598.tif 000017
【図５】
0004745598.tif 000018
【図６】
0004745598.tif 000019
【図７】
0004745598.tif 000020
【図８】
0004745598.tif 000021
【図９】
0004745598.tif 000022
【図１０】
0004745598.tif 000023
【図１１】
0004745598.tif 000024
【図１２】
0004745598.tif 000025
【図１３】
0004745598.tif 000026
【図１４】
0004745598.tif 000027
【図１５】
0004745598.tif 000028
【図１６】
0004745598.tif 000029
【図１７】
0004745598.tif 000030
【図１８】
0004745598.tif 000031
【図１９】
0004745598.tif 000032
【図２０】
0004745598.tif 000033
【図２１】
0004745598.tif 000034
【図２２】
0004745598.tif 000035
【図２３】
0004745598.tif 000036
【図２４】
0004745598.tif 000037
【図２５】
0004745598.tif 000038
【図２６】
0004745598.tif 000039