(57)【特許請求の範囲】
【請求項１】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対する２度のＲ関数処理と１度のI関数処理を４サイクルで実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対する１度のＢ関数処理を４サイクルで実行するB/4関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/4関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/4関数回路にデータを供給するレジスタ回路とを実装し、
前記レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/4関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループを構成し、
前記R/2+I/4関数回路は、
３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、
前記Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、
前記RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、
前記RI回路内第１セレクタの出力と定数”0x55555555”,”0xAAAAAAAA”,”0x33333333”,”0xCCCCCCCC”のうちいずれかを論理積演算を行うRI回路内第１AND回路と、
前記RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、
入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、
入力データＣを出力データＤとして出力する経路と、
を備えるデータスクランブル回路。
【請求項２】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対する２度のＲ関数処理と１度のI関数処理を４サイクルで実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対する１度のＢ関数処理を２サイクルで実行するB/2関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/2関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/2関数回路にデータを供給するレジスタ回路とを実装し、
前記レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/2関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループを構成し、
前記R/2+I/4関数回路は、
３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、
前記Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、
前記RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、
前記RI回路内第１セレクタの出力と定数”0x55555555”,”0xAAAAAAAA”,”0x33333333”,”0xCCCCCCCC”のうちいずれかを論理積演算を行うRI回路内第１AND回路と、
前記RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、
入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、
入力データＣを出力データＤとして出力する経路と、
を備えるデータスクランブル回路。
【請求項３】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、
前記暗号鍵に基づいて複数の中間鍵を生成し、前記中間鍵に基づいて拡大鍵を生成する鍵演算回路と、
前記鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、
前記中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して前記鍵演算回路に提供する中間鍵選択回路と、
を備え、
前記鍵演算回路は、３２ビット×４の入力データ（k’0,k’1,k’2,k’3）と前記中間鍵選択回路の３２ビット×４の出力データ（KEYX,KEYY,KEYZ,KEYW）とを入力とし、
入力データ（k’0,k’2）のいずれか一方を出力する鍵演算回路内第１セレクタと、
入力データ（k’1,k’3）のいずれか一方を出力する鍵演算回路内第２セレクタと、
前記鍵演算回路内第２セレクタの出力、前記鍵演算回路内第２セレクタの出力を１ビット左シフトしたデータおよびデータ’0’のうちのいずれかを出力する鍵演算回路内第３セレクタと、
前記鍵演算回路内第１セレクタの出力と中間鍵選択回路の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第４セレクタと、
前記中間鍵選択回路の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する鍵演算回路内第５セレクタと、
前記鍵演算回路内第２セレクタの出力と前記中間鍵選択回路の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第６セレクタと、
前記鍵演算回路内第３セレクタの出力と前記中間鍵選択回路の出力（KEYW）にINV処理を行ったデータとのうちいずれか一方を出力する鍵演算回路内第７セレクタと、
データ’0’とデータ’1’のうちのいずれか一方を出力する鍵演算回路内第８セレクタと、
前記鍵演算回路内第４セレクタの出力と鍵演算回路内第５セレクタの出力とを加算する鍵演算回路内第１加算回路と、
前記鍵演算回路内第８セレクタの出力を最下位ビットへのキャリとして前記鍵演算回路内第６セレクタの出力と鍵演算回路内第７セレクタの出力とを加算する鍵演算回路内第２加算回路と、
前記鍵演算回路内第２加算回路の出力と鍵演算回路内第２加算回路の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第９セレクタと、
前記鍵演算回路内第１加算回路の出力と前記鍵演算回路内第９セレクタの出力との排他的論理和演算を行う鍵演算回路内第１XOR回路と、
前記鍵演算回路内第１XOR回路の出力を格納する鍵演算回路内レジスタと、
を備える鍵スケジュール回路。
【請求項４】
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行する暗号回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対する２度のＲ関数処理と１度のI関数処理を４サイクルで実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対する１度のＢ関数処理を４サイクルで実行するB/4関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/4関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/4関数回路にデータを供給するレジスタ回路とを実装するデータスクランブル回路と、
前記データスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、前記暗号鍵に基づいて複数の中間鍵を生成し、前記中間鍵に基づいて拡大鍵を生成する鍵演算回路と、前記鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、前記中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して前記鍵演算回路に提供する中間鍵選択回路とを備える鍵スケジュール回路と、
を含み、
前記レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/4関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループを構成し、
前記R/2+I/4関数回路は、
３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、
前記Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、
前記RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、
前記RI回路内第１セレクタの出力と定数”0x55555555”,”0xAAAAAAAA”,”0x33333333”,”0xCCCCCCCC”のうちいずれかを論理積演算を行うRI回路内第１AND回路と、
前記RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、
入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、
入力データＣを出力データＤとして出力する経路と、
を備え、
前記鍵演算回路は、３２ビット×４の入力データ（k’0,k’1,k’2,k’3）と前記中間鍵選択回路の３２ビット×４の出力データ（KEYX,KEYY,KEYZ,KEYW）とを入力とし、
入力データ（k’0,k’2）のいずれか一方を出力する鍵演算回路内第１セレクタと、
入力データ（k’1,k’3）のいずれか一方を出力する鍵演算回路内第２セレクタと、
前記鍵演算回路内第２セレクタの出力、前記鍵演算回路内第２セレクタの出力を１ビット左シフトしたデータおよびデータ’0’のうちのいずれかを出力する鍵演算回路内第３セレクタと、
前記鍵演算回路内第１セレクタの出力と中間鍵選択回路の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第４セレクタと、
前記中間鍵選択回路の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する鍵演算回路内第５セレクタと、
前記鍵演算回路内第２セレクタの出力と前記中間鍵選択回路の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第６セレクタと、
前記鍵演算回路内第３セレクタの出力と前記中間鍵選択回路の出力（KEYW）にINV処理を行ったデータとのうちいずれか一方を出力する鍵演算回路内第７セレクタと、
データ’0’とデータ’1’のうちのいずれか一方を出力する鍵演算回路内第８セレクタと、
前記鍵演算回路内第４セレクタの出力と鍵演算回路内第５セレクタの出力とを加算する鍵演算回路内第１加算回路と、
前記鍵演算回路内第８セレクタの出力を最下位ビットへのキャリとして前記鍵演算回路内第６セレクタの出力と鍵演算回路内第７セレクタの出力とを加算する鍵演算回路内第２加算回路と、
前記鍵演算回路内第２加算回路の出力と鍵演算回路内第２加算回路の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第９セレクタと、
前記鍵演算回路内第１加算回路の出力と前記鍵演算回路内第９セレクタの出力との排他的論理和演算を行う鍵演算回路内第１XOR回路と、
前記鍵演算回路内第１XOR回路の出力を格納する鍵演算回路内レジスタと、
を備える暗号回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号装置に用いられるデータスクランブル回路、データスクランブル回路で用いる拡大鍵を生成するための中間鍵生成回路および拡大鍵生成回路、さらにこれらデータスクランブル回路、中間鍵生成回路および拡大鍵生成回路を備える暗号化／復号化回路に関する。
【０００２】
【従来の技術】
現在広く使用されている共通鍵暗号として、ＤＥＳ（Data EncryptIon Standard）が知られている。ＤＥＳは、１９７７年に米国政府の標準局NIST（NatIonal InstItute of Standard Technology）が定めた標準であり、６４ビット入出力、鍵長６４ビット（そのうち８ビットはパリティであり実質的には鍵長５６ビット）のブロック暗号である。
【０００３】
ＤＥＳは、Ｆ関数と呼ばれる非線形関数処理を１６回繰り返し行うアルゴリズムである。このため、ＤＥＳによる暗号化／復号化を処理するための暗号回路は、たとえば特開２０００−７５７８５号公報に示されるように、Ｆ関数を繰り返し行うクロック同期ループ構成で実現することが可能である。
ＤＥＳにより暗号化された暗号文を暗号鍵の総当たり法により解読する場合、鍵長６４ビット（５６ビット）の場合であっても、計算量的安全性評価の範囲内であると数年前では考えられていた。しかながら、コンピュータの性能向上に伴い、鍵長６４ビット（５６ビット）でも十分な計算量的安全性を確保することが困難となってきている。このため、複数の暗号鍵を用いて、処理を複数回繰り返す多段ＤＥＳが用いられる。たとえば、２〜３の暗号鍵を用いて処理を３回繰り返すトリプルＤＥＳが一般的に多く用いられている。
【０００４】
このようなＤＥＳに代わる次世代共通鍵暗号として、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの暗号ＡＥＳ（Advanced EncryptIon Standard）を標準化しようとする動きがあり、米国標準としてのＡＥＳが固まりつつある。
本件出願人は、このようなＡＥＳに準拠した仕様（鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビット）で高い安全性を維持するとともに高速処理を実現するためのアルゴリズムＳＣ２０００を発表し、このＳＣ２０００に用いる演算装置および演算方法として特願２０００−２１２４８２号、このＳＣ２０００に用いる拡大鍵生成装置として特願２０００−２１２８１４号において提案している。
【０００５】
このＳＣ２０００は、ＤＥＳと同様にいくつかの基本関数を繰り返し行うアルゴリズムであり、各関数処理回路をハードウェアで構成する場合、ループ回路を構成して繰り返し処理を実行するように構成できる。しかしながら、ＳＣ２０００の暗号方式では、ＤＥＳにようにＦ関数だけで構成される暗号方式とは異なり、単純に１つの関数処理回路を１つの同期ループ内で処理できるように構成することができず、各種関数処理回路による関数処理を同期ループ内で効率的に行えるように、各種関数処理回路をいかに配置するかがハードウェア実装時における大きな課題となっている。
【０００６】
本件出願人は、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号であるＳＣ２０００のアルゴリズムを高速かつコンパクトなハードウェアで実行する回路構成、および電子商取引や電子マネーに応用されるスマートカードに暗号回路を搭載するために、ＳＣ２０００アルゴリズムをさらにコンパクトなハードウェアで実行する回路構成を、国際出願番号PCT/JP01/05095号（出願日：2001年６月１日）において提案している。
【０００７】
本発明は、上述した暗号回路の構成をさらに改良し、ハードウェア規模を同等以下でより高速な回路構成と、速度低下を最小限に抑えながらアルゴリズムをよりコンパクトなハードウェアで実行する回路構成を提供する。
【０００８】
【課題を解決するための手段】
本発明に係るデータスクランブル回路は、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路であって、I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、R/2+I/4関数回路と、B/4関数回路と、データスクランブル回路内第１セレクタと、レジスタ回路とを備えている。R/2+I/4関数回路は、処理ブロック１２８ビットのデータに対して３２ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行する。B/4関数回路は、処理ブロック１２８ビットのデータに対して３２ビット分のＢ関数処理を実行する。データスクランブル回路内第１セレクタは、R/2+I/4関数回路の出力、R/2+I/4関数回路の出力ビットをクロスさせた出力およびB/4関数回路の出力が入力され、いずれか１つを選択的に出力する。レジスタ回路は、入力データまたはデータスクランブル回路内第１セレクタの出力を格納するとともにR/2+I/4関数回路およびB/4関数回路にデータを供給する。
【０００９】
ここで、レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/4関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループで構成することができる。
また、R/2+I/4関数回路を、３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、RI回路内第１セレクタの出力と定数"0x55555555","0xAAAAAAAA","0x33333333","0xCCCCCCCC"のうちいずれかを論理積演算を行うRI回路内第１AND回路と、RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、入力データＣを出力データＤとして出力する経路とを備える構成とすることができる。
【００１０】
さらに、B/4関数回路を、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、入力データ変換部の３２個の出力データのうち4k番目（k＝１〜８）の出力データに対して非線形処理を実行する８個の４ビットSbox処理回路と、入力データ変換部から出力される4k-3番目、4k-2番目、4k-1番目の出力データと前記４ビットSbox処理回路を通過した4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部とを備える構成とすることができる。
【００１１】
また、本発明のデータスクランブル回路は、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路であって、I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して６４ビット分のＢ関数処理を実行するB/2関数回路と、R/2+I/4関数回路の出力、R/2+I/4関数回路の出力ビットをクロスさせた出力およびB/2関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたはデータスクランブル回路内第１セレクタの出力を格納するとともにR/2+I/4関数回路およびB/2関数回路にデータを供給するレジスタ回路とを実装する。
【００１２】
ここで、B/2関数回路は、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、入力データ変換部の３２個の出力データのうち4k-1番目および4k番目（k＝１〜８）の出力データに対して非線形処理を実行する１６個の４ビットSbox処理回路と、入力データ変換部から出力される4k-3番目、4k-2番目の出力データと４ビットSbox処理回路を通過した4k-1番目、4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部とを備える構成とすることができる。
【００１３】
本発明に係る鍵スケジュール回路は、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、鍵演算回路と、中間鍵記憶回路と、中間鍵選択回路とを備えている。鍵演算回路は、暗号鍵に基づいて複数の中間鍵を生成し、中間鍵に基づいて拡大鍵を生成する。中間鍵記憶回路は、鍵演算回路で生成された複数の中間鍵を格納する。中間鍵選択回路は、中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して鍵演算回路に提供する。
【００１４】
ここで、鍵演算回路は、暗号鍵に対して非線形処理であるＭ関数処理を実行した後のデータを用いて中間鍵を生成するように構成できる。
また、鍵演算回路は、３２ビット×４の入力データ（k'0,k'1,k'2,k'3）と中間鍵選択回路の３２ビット×４の出力データ（KEYX,KEYY,KEYZ,KEYW）とを入力とし、入力データ（k'0,k'2）のいずれか一方を出力する鍵演算回路内第１セレクタと、入力データ（k'1,k'3）のいずれか一方を出力する鍵演算回路内第２セレクタと、鍵演算回路内第２セレクタの出力、鍵演算回路内第２セレクタの出力を１ビット左シフトしたデータおよびデータ'0'のうちのいずれかを出力する鍵演算回路内第３セレクタと、鍵演算回路内第１セレクタの出力と中間鍵選択回路の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第４セレクタと、中間鍵選択回路の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する鍵演算回路内第５セレクタと、鍵演算回路内第２セレクタの出力と中間鍵選択回路の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第６セレクタと、鍵演算回路内第３セレクタの出力と中間鍵選択回路の出力（KEYW）にINV処理を行ったデータとのうちいずれか一方を出力する鍵演算回路内第７セレクタと、データ'0'とデータ'1'のうちのいずれか一方を出力する鍵演算回路内第８セレクタと、鍵演算回路内第４セレクタの出力と鍵演算回路内第５セレクタの出力とを加算する鍵演算回路内第１加算回路と、鍵演算回路内第８セレクタの出力を最下位ビットへのキャリとして鍵演算回路内第６セレクタの出力と鍵演算回路内第７セレクタの出力とを加算する鍵演算回路内第２加算回路と、鍵演算回路内第２加算回路の出力と鍵演算回路内第２加算回路の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第９セレクタと、鍵演算回路内第１加算回路の出力と鍵演算回路内第９セレクタの出力との排他的論理和演算を行う鍵演算回路内第１XOR回路と、鍵演算回路内第１XOR回路の出力を格納する鍵演算回路内レジスタとを備える構成とすることができる。
【００１５】
さらに、中間鍵生成時には鍵演算回路内レジスタのデータを中間鍵記憶回路に格納し、拡大鍵生成時には鍵演算回路内第１XOR回路の出力データをデータスクランブル回路に出力することによって、鍵演算回路を中間鍵生成時と拡大鍵生成時において共用するように構成できる。
本発明に係る暗号回路は、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行する暗号回路であって、データスクランブル回路と鍵スケジュール回路を備えている。データスクランブル回路は、I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して３２ビット分のＢ関数処理を実行するB/4関数回路と、R/2+I/4関数回路の出力、R/2+I/4関数回路の出力ビットをクロスさせた出力およびB/4関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたはデータスクランブル回路内第１セレクタの出力を格納するとともにR/2+I/4関数回路およびB/4関数回路にデータを供給するレジスタ回路とを実装する。鍵スケジュール回路は、データスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、暗号鍵に基づいて複数の中間鍵を生成し、中間鍵に基づいて拡大鍵を生成する鍵演算回路と、鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して鍵演算回路に提供する中間鍵選択回路とを備えている。
【００１６】
ここで、データスクランブル回路は、レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/4関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループで構成することができる。
また、R/2+I/4関数回路を、３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、RI回路内第１セレクタの出力と定数"0x55555555","0xAAAAAAAA","0x33333333","0xCCCCCCCC"のうちいずれかを論理積演算を行うRI回路内第１AND回路と、RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、入力データＣを出力データＤとして出力する経路とを備える構成とし、鍵スケジュール回路が、R/2+I/4関数回路のＭ関数回路を利用して暗号鍵に対してＭ関数処理を実行した後のデータを用いて中間鍵を生成するように構成できる。
【００１７】
さらに、B/4関数回路として、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、入力データ変換部の３２個の出力データのうち4k番目（k＝１〜８）の出力データに対して非線形処理を実行する８個の４ビットSbox処理回路と、入力データ変換部から出力される4k-3番目、4k-2番目、4k-1番目の出力データと４ビットSbox処理回路を通過した4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部とを備える構成とすることができる。
また、鍵演算回路として、３２ビット×４の入力データ（k'0,k'1,k'2,k'3）と中間鍵選択回路の３２ビット×４の出力データ（KEYX,KEYY,KEYZ,KEYW）とを入力とし、入力データ（k'0,k'2）のいずれか一方を出力する鍵演算回路内第１セレクタと、入力データ（k'1,k'3）のいずれか一方を出力する鍵演算回路内第２セレクタと、鍵演算回路内第２セレクタの出力、鍵演算回路内第２セレクタの出力を１ビット左シフトしたデータおよびデータ'0'のうちのいずれかを出力する鍵演算回路内第３セレクタと、鍵演算回路内第１セレクタの出力と中間鍵選択回路の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第４セレクタと、中間鍵選択回路の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する鍵演算回路内第５セレクタと、鍵演算回路内第２セレクタの出力と中間鍵選択回路の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第６セレクタと、鍵演算回路内第３セレクタの出力と中間鍵選択回路の出力（KEYW）にINV処理を行ったデータとのうちいずれか一方を出力する鍵演算回路内第７セレクタと、データ'0'とデータ'1'のうちのいずれか一方を出力する鍵演算回路内第８セレクタと、鍵演算回路内第４セレクタの出力と鍵演算回路内第５セレクタの出力とを加算する鍵演算回路内第１加算回路と、鍵演算回路内第８セレクタの出力を最下位ビットへのキャリとして鍵演算回路内第６セレクタの出力と鍵演算回路内第７セレクタの出力とを加算する鍵演算回路内第２加算回路と、鍵演算回路内第２加算回路の出力と鍵演算回路内第２加算回路の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第９セレクタと、鍵演算回路内第１加算回路の出力と鍵演算回路内第９セレクタの出力との排他的論理和演算を行う鍵演算回路内第１XOR回路と、鍵演算回路内第１XOR回路の出力を格納する鍵演算回路内レジスタとを備える構成とすることができる。
【００１８】
さらに、中間鍵生成時には鍵演算回路内レジスタのデータを中間鍵記憶回路に格納し、拡大鍵生成時には鍵演算回路内第１XOR回路の出力データをデータスクランブル回路に出力することによって、鍵演算回路を中間鍵生成時と拡大鍵生成時において共用するように構成できる。
また、本発明に係る暗号回路は、暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行する暗号回路であって、I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して６４ビット分のＢ関数処理を実行するB/2関数回路と、R/2+I/4関数回路の出力、R/2+I/4関数回路の出力ビットをクロスさせた出力およびB/2関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたはデータスクランブル回路内第１セレクタの出力を格納するとともにR/2+I/4関数回路およびB/2関数回路にデータを供給するレジスタ回路とを実装するデータスクランブル回路と、データスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、暗号鍵に基づいて複数の中間鍵を生成し、中間鍵に基づいて拡大鍵を生成する鍵演算回路と、鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して鍵演算回路に提供する中間鍵選択回路とを備える鍵スケジュール回路とを含む。
【００１９】
ここで、B/2関数回路は、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、入力データ変換部の３２個の出力データのうち4k-1番目、4k番目（k＝１〜８）の出力データに対して非線形処理を実行する１６個の４ビットSbox処理回路と、入力データ変換部から出力される4k-3番目、4k-2番目の出力データと４ビットSbox処理回路を通過した4k-1番目、4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部とを備える構成とすることができる。
【００２０】
【発明の実施の形態】
〔基本構成〕
本発明に係る暗号回路の基本構成を図１に示す。
暗号回路１は、データスクランブル回路２と鍵スケジュール回路５とから構成されている。
【００２１】
データスクランブル回路２は、データを一時的に格納するレジスタ回路３と、内部に複数種の関数処理回路を備えた暗号処理回路４とを備えている。データスクランブル回路２は、暗号処理回路４の出力がレジスタ回路３にフィードバックされたクロック同期ループを構成している。レジスタ回路３は、暗号鍵、平文、暗号文、暗号処理回路４で演算される１サイクル毎の演算結果などを一時的に格納する。
【００２２】
鍵スケジュール回路５は、データスクランブル回路２に対して拡大鍵を提供するものであって、暗号鍵に基づいて複数の中間鍵を生成し、この中間鍵に基づいて拡大鍵を生成する鍵演算回路７と、鍵演算回路７で生成された複数の中間鍵を格納する中間鍵記憶回路６と、中間鍵記憶回路６に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して鍵演算回路７に提供する中間鍵選択回路８とを備えている。鍵演算回路７が中間鍵を生成する際には、データスクランブル回路２のレジスタ回路３を利用するように構成することが可能である。
【００２３】
ＳＣ２０００暗号では、拡大鍵とデータとの排他的論理和演算を実行するI関数処理、データのビットを撹拌するＢ関数処理およびＲ関数処理とを所定の順で実行するものであり、本発明では鍵長１２８ビット専用の暗号化／復号化を実行する暗号回路を提案する。ＳＣ２０００暗号では、鍵長１２８ビットの場合、I-B-I-R-R-I-B-I-R-R-I-B-I-R-R-I-B-I-R-R-I-B-I-R-R-I-B-I-R-R-I-B-Iの順に処理を行うように構成され、(B-I-R-R-I)処理の繰り返し部分を考慮すると、I-(B-I-R-R-I)6-B-Iと表記することができる。このような暗号処理において、I関数処理を４回に分けて処理するI/4関数処理とＲ関数を２回に分けて処理するR/2関数とを結合したR/2+I/4関数回路と、Ｂ関数処理を４回に分けて処理するB/4関数回路とを備える構成とすることにより、（B-I-R-R-I）処理の部分を、B/4-B/4-B/4-B/4-I/4-I/4-I/4-I/4-(R/2+I/4)-(R/2+I/4)-(R/2+I/4)-(R/2+I/4)の順に処理することで１２サイクルで処理が可能である。最初のI関数処理、最後のＢ関数処理およびI関数処理も同様に、R/2+I/4関数回路およびB/4関数回路を用いて処理することが可能となる。
【００２４】
鍵スケジュール回路５は、データスクランブル回路２のI関数処理に利用する拡大鍵を生成するものであって、ここでは、I-(B-I-R-R-I)6-B-Iの処理中の１４個のI関数処理、すなわち１４個×４＝５６個のI/4関数処理に対して３２ビットの拡大鍵を生成して供給することとなる。
入力される暗号鍵（ユーザ鍵）は１２８ビットデータでなり、非線形処理であるＭ関数処理の後、レジスタ回路３に３２ビット×４の入力データとして格納される。鍵演算回路７は、レジスタ回路３の３２ビット×４個のデータのうちから２個を選択して、所定値の加算や所定値の乗算を行い、各演算結果の排他的論理和を演算し、さらにＭ関数処理を行うように構成される。鍵演算回路７では、暗号鍵に基づいて３２ビット×１２個の中間鍵を生成し、中間鍵記憶回路６に格納する。
【００２５】
このように、暗号回路１では、入力される暗号鍵（ユーザ鍵）に基づいて、鍵演算回路７で中間鍵を生成しこれを中間鍵記憶回路６に格納する。中間鍵選択回路８が鍵スケジュールに応じて中間鍵記憶回路６内に格納されている中間鍵を選択し、鍵演算回路７がこの中間鍵から拡大鍵を生成する。データスクランブル回路２は、入力される平文を鍵スケジュール回路５から供給される拡大鍵に基づいて暗号化を行い暗号文を出力し、入力される暗号文を鍵スケジュール回路５から供給される拡大鍵に基づいて復号化して平文を出力する。
【００２６】
〔データスクランブル回路〕
データスクランブル回路２は、図２に示すようなレジスタ回路３と暗号処理回路４から構成されている。レジスタ回路３は、３２ビット×４の入力データ（A,B,C,D）を格納することが可能となっており、この入力データ（A,B,C,D）を暗号処理回路４に供給する。
【００２７】
暗号処理回路４は、処理ブロック１２８ビットのデータに対して３２ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路４１と、処理ブロック１２８ビットのデータに対して３２ビット分のＢ関数処理を実行するB/4関数回路４２と、R/2+I/4関数回路の出力ビットをクロスさせるためのクロス経路４３と、R/2+I/4関数回路４１の出力、B/4関数回路４２の出力、クロス経路４３の出力のうちいずれかを出力する第１セレクタ４４とを含んでいる。
【００２８】
暗号処理回路４の第１セレクタ４４の出力はレジスタ回路３にフィードバックされてクロック同期ループを構成している。したがって、レジスタ回路３内に格納されているデータに基づいて暗号処理回路４が１クロックで演算処理を実行した結果が、レジスタ回路３に格納される。
（R/2+I/4関数回路）
R/2+I/4関数回路４１の構成を図３に示す。
【００２９】
R/2+I/4関数回路４１は、図３の左側に位置するR/2回路と右側に位置するI/4回路で構成されており、R/2回路は、３２ビット×４の入力データ（A,B,C,D）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路４１１と、Ｍ関数回路４１１の出力とデータ“０”とが入力されいずれか一方を出力する第２セレクタ４１２と、第２セレクタ４１２の出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力する第１XOR回路４１３と、第２セレクタ４１２の出力と定数"0x55555555","0xAAAAAAAA","0x33333333","0xCCCCCCCC"のうちいずれかとの論理積演算を行うAND回路４１４と、AND回路４１４の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力する第２XOR回路４１５とを備えている。また、I/4関数回路は、入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力する第３XOR回路４１６と、入力データＣを出力データＤとして出力する経路とを備えている。
【００３０】
（B/4関数回路）
B/4関数回路４２の構成を図４に示す。
B/4関数回路４２は、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部４２１と、入力データ変換部４２１の３２個の出力データのうち4k番目（k＝１〜８）の出力データに対して非線形処理を実行する８個の４ビットSbox処理回路４２２と、入力データ変換部４２１から出力される4k-3番目、4k-2番目、4k-1番目の出力データと４ビットSbox処理回路４２２を通過した4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部４２３とを備えている。
【００３１】
（各関数処理）
上述したデータスクランブル回路２において、各関数処理を実行する場合の動作を説明する。
I関数処理を行う場合には、第１サイクルにおいて第１セレクタ４４を'L'に設定し、第２セレクタ４１２を'L'に設定することにより、R/2+I/4関数回路４１のうちI/4関数部分のみの演算処理が実行される。この演算結果はレジスタ回路３にフィードバックされて格納される。
【００３２】
第２サイクルでは、第１セレクタ４４を'M'に設定し、第２セレクタ４１２を'L'に設定することにより、R/2+I/4関数回路４１のうちI/4関数部分のみの演算処理が実行される。この演算結果はレジスタ回路３にフィードバックされて格納される。このとき、レジスタ回路３のデータ'C','D'に最初に格納されていたデータは、それぞれI関数処理されてレジスタ回路３のデータ'A','B'の位置に格納され、レジスタ回路３のデータ'A','B'に最初に格納されていたデータは、処理されないままでレジスタ回路３のデータ'C','D'の位置に格納される。
【００３３】
第３サイクルでは、第１セレクタ４４を'L'に設定し、第２セレクタ４１２を'L'に設定してR/2+I/4関数回路４１のうちI/4関数部分のみの演算処理を実行し、第４サイクルでは、第１セレクタ４４を'M'に設定し、第２セレクタ４１２を'L'に設定してR/2+I/4関数回路４１のうちI/4関数部分のみの演算処理を実行する。このことにより、第３サイクルおよび第４サイクルにおいて、レジスタ回路３の最初の'A','B'に格納されていたデータに対して、それぞれI関数処理を行うとともに、各データをレジスタ回路３の最初の位置に格納することができる。
【００３４】
Ｂ関数処理を実行する場合には、第１サイクルでは、第１セレクタ４４を'R'に設定し、B/4回路４２における演算処理結果をレジスタ回路３にフィードバックして格納する。第２〜４サイクルにおいても第１サイクルと同様の処理を実行し、４サイクルでＢ関数の演算処理を完了する。
Ｒ関数処理を２回とI関数処理を１回行う場合、第１サイクルでは、第１セレクタ４４を'L'に設定し、第２セレクタ４１２を'R'に設定する。このことにより、R/2+I/4関数回路４１の全体の演算処理が実行され、その演算結果がレジスタ回路３にフィードバックされて格納される。
【００３５】
第２サイクルでは、第１セレクタ４４を'M'に設定し、第２セレクタ４１２を'R'に設定することにより、R/2+I/4関数回路４１の全体の演算処理を実行して、その演算結果をレジスタ回路３にフィードバックして格納する。
第３サイクルでは、第１セレクタ４４を'L'に設定し、第２セレクタ４１２を'R'に設定し、R/2+I/4関数回路４１の全体の演算処理を実行し、その演算結果をレジスタ回路３にフィードバックして格納する。
【００３６】
第４サイクルでは、第１セレクタ４４を'L'に設定し、第２セレクタ４１２を'R'に設定することにより、R/2+I/4関数回路４１の全体の演算処理を実行して、その演算結果をレジスタ回路３にフィードバックして格納する。
この４サイクルにおいて、（R/2+I/4）の処理を４回行って、R-R-Iの演算処理を完了する。
【００３７】
平文がレジスタ回路３に格納されると、まず４サイクルでI関数処理を実行する。この後の１２サイクルで、Ｂ関数処理、I関数処理、R-R-I関数処理を上述の手順で実行し、(B-I-R-R-I)関数処理を実行する。この(B-I-R-R-I)関数処理を６回繰り返した後、最後にＢ関数処理およびI関数処理を実行して、レジスタ回路３に演算結果を格納し、暗号文でなる最終結果を出力することとなる。この暗号化の手順は、８４サイクルで構成され、各サイクルにおける第１セレクタ４４および第２セレクタ４１２の切換制御テーブルを表１に示す。
【００３８】
【表１】
0004230152.tif 000002
復号化時においても、同様の手順で処理が実行され、暗号文がレジスタ回路３に格納されると、まず４サイクルでI関数処理を実行する。この後の１２サイクルで、Ｂ関数処理、I関数処理、R-R-I関数処理を上述の手順で実行し、(B-I-R-R-I)関数処理を実行する。この(B-I-R-R-I)関数処理を６回繰り返した後、最後にＢ関数処理およびI関数処理を実行して、レジスタ回路３に演算結果を格納し、平文でなる最終結果を出力することとなる。この復号化の手順は、暗号化と同様に８４サイクルで構成され、各サイクルにおける第１セレクタ４４および第２セレクタ４１２の切換制御テーブルを表２に示す。暗号化時と復号化時とでは、拡大鍵を使用する順が異なる他は、各サイクルにおける第１セレクタ４４および第２セレクタ４１２の切換制御は同一の構成とすることができる。
【００３９】
【表２】
0004230152.tif 000003
図２におけるクロス経路４３は、R/2+I/4関数回路４１の出力データ１２８ビットを３２ビット毎に（A,B,C,D）とするとき、（C,D,A,B）を出力するような処理を実行するものであって、結線だけで実現することが可能であり、回路規模増大にならない。
【００４０】
また、図４に示すB/4関数回路４２において、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部４２１および４ビット×３２のデータを３２ビット×４の出力データに変換する出力データ変換部４２３の構成も結線だけで実現することが可能であり、回路規模への影響はない。
【００４１】
〔鍵スケジュール回路〕
上述したようなデータスクランブル回路２で用いる拡大鍵を生成するための鍵スケジュール回路５を図５〜図７に示す。
鍵スケジュール回路５の鍵演算回路７、中間鍵記憶回路６および中間鍵選択回路８の接続は図７に示すように構成されており、データスクランブル回路４１のレジスタ回路３およびＭ関数回路４１１を共用するためにレジスタ回路３の出力が鍵演算回路７および中間鍵記憶回路６に接続されている。
【００４２】
鍵スケジュール回路５による鍵スケジュール処理は、暗号鍵（ユーザ鍵）から中間鍵を生成するフェーズと、中間鍵から拡大鍵を生成するフェーズとを含んでおり、本構成では両フェーズにおいて鍵演算回路７と中間鍵記憶回路６とを共用するように構成している。
（中間鍵記憶回路）
暗号鍵に基づいて鍵演算回路７で生成される中間鍵は、中間鍵記憶回路６に保存される。この中間鍵保存回路６は、３２ビット×１２のレジスタで構成されており、鍵演算回路７によって生成されるデータにＭ関数処理を行ったデータを中間鍵として格納するためにＭ関数回路４１１の出力に接続されている。このＭ関数回路４１１は、データスクランブル回路２内のＭ関数回路と共用するものとする。
【００４３】
（中間鍵選択回路）
中間鍵選択回路８は、中間鍵記憶回路６の各レジスタに格納されているデータのうちデータ（a0,a1,a2）を入力として選択的にいずれか１つを出力するセレクタＸ（SELX）８０１、データ（b0,b1,b2）を入力として選択的にいずれか１つを出力するセレクタＹ（SELY）８０２、データ（c0,c1,c2）を入力として選択的にいずれか１つを出力するセレクタＺ（SELZ）８０３、データ（d0,d1,d2）を入力として選択的にいずれか１つを出力するセレクタＷ（SELW）８０４およびセレクタＸ８０１〜セレクタＷ８０４の出力切換を行うスイッチ８０５を備えている。
【００４４】
（鍵演算回路）
鍵演算回路７は、レジスタ回路３の３２ビット×４のデータ（k'0,k'1,k'2,k'3）のうちデータ（k'0,k'2）が入力されていずれか一方を出力する第３セレクタ７０１と、データ（k'1,k'3）が入力されていずれか一方を出力する第４セレクタ７０２とを備えている。
【００４５】
また、鍵演算回路７は、第４セレクタ７０２の出力、第４セレクタ７０２の出力を１ビット左シフトしたデータおよびデータ'0'のうちのいずれかを出力する第５セレクタ７０４を備えている。第４セレクタ７０２の出力を１ビット左シフトするためのシフト部７０３は、結線だけ実現可能であり回路規模を増大させることはない。
【００４６】
鍵演算回路７は、第３セレクタ７０１の出力と中間鍵選択回路８のセレクタＸ８０１の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する第６セレクタ７０５を備えている。セレクタＸ８０１の出力（KEYX）を１ビット左ローテーションするためのローテートシフト部７０６は結線のみで実現することが可能であり、回路規模を増大させることがない。
【００４７】
さらに、鍵演算回路７は、中間鍵選択回路８のセレクタＹ８０２の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する第７セレクタ７０７を備えている。
鍵演算回路７は第４セレクタ７０２の出力と中間鍵選択回路８のセレクタＺ８０３の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する第８セレクタ７１０を備えている。セレクタＺ８０３の出力（KEYZ）を１ビット左ローテーションするためのローテートシフト部７０９は、結線のみで実現することが可能であり回路規模に影響を及ぼすことがない。
【００４８】
鍵演算回路７は、第５セレクタ７０４の出力と中間鍵選択回路８のセレクタＷ８０４の出力（KEYW）にインバータ処理を行ったデータとのうちいずれか一方を出力する第９セレクタ７１２を備えている。中間鍵選択回路８のセレクタＷ８０４の出力（KEYW）にインバータ処理を行うためには、データの反転を行うINV回路７１３を接続する。
【００４９】
さらに、鍵演算回路７は、データ'0'とデータ'1'のうちのいずれか一方を出力する第１０セレクタ７１４を備えている。
鍵演算回路７は、第６セレクタ７０５の出力と第７セレクタ７０７の出力とを加算するための第１加算回路７０８と、第１０セレクタ７１４の出力を最下位ビットへのキャリとして第８セレクタ７１０の出力と第９セレクタ７１２の出力とを加算する第２加算回路７１１とを備えている。
【００５０】
さらに、鍵演算回路７は、第２加算回路７１１の出力と第２加算回路７１１の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する第１１セレクタ７１６を備えている。第２加算回路７１１の出力を１ビット左ローテーションするためのローテートシフト部７１５は、結線のみで実現することが可能であり回路規模への影響はない。
【００５１】
鍵演算回路７は、第１加算回路７０８の出力と第１１セレクタ７１６の出力との排他的論理和演算を行うXOR回路７１７と、XOR回路７１７の出力を格納する鍵演算回路内レジスタ７１８とを備えている。
XOR回路７１７の出力は、鍵演算回路内レジスタ７１８に接続されるとともに、データスクランブル回路２のR/2+I/4関数回路４１に接続されている。また、鍵演算回路内レジスタ７１８の出力はデータスクランブル回路２内に実装されて共用されるＭ関数回路４１１に接続されている。
【００５２】
（中間鍵生成処理）
鍵スケジュール回路５を用いて中間鍵を生成する場合には、図５に示すような接続状態で処理を実行する。
中間鍵生成では、データスクランブル回路２に含まれるレジスタ回路３とＭ関数回路４１１とを利用し、これらと鍵演算回路７および中間鍵記憶回路６を用いて処理を実行する。
【００５３】
中間鍵生成では、データスクランブル処理に先立って、入力される暗号鍵から１２個の中間鍵を生成する処理である。３２ビット×４の暗号鍵（k0,k1,k2,k3）が入力されると、Ｍ関数回路４１１によるＭ関数処理を実行し、データ（k'0,k'1,k'2,k'3）としてレジスタ回路３に格納する。
中間鍵生成時には、第６セレクタ７０５、第７セレクタ７０７、第８セレクタ７１０、第９セレクタ７１２、第１０セレクタ７１４、第１１セレクタ７１６は、常に'L'が選択される。また、第３セレクタ７０１、第４セレクタ７０２、第５セレクタ７０４は、中間鍵a0〜d2のいずれを生成するかにより切換えられる。１２個の中間鍵を生成する際の第３セレクタ７０１、第４セレクタ７０２、第５セレクタ７０４の切換制御のテーブルを表２に示す。
【００５４】
【表３】
0004230152.tif 000004
鍵演算回路７で処理されたデータは、鍵演算回路内レジスタ７１８に一旦格納され、次のサイクルでＭ関数処理されて中間鍵記憶回路６に格納される。鍵演算回路内レジスタ７１８は、遅延短縮パイプライン用のレジスタであり、Ｍ関数回路４１１におけるＭ関数処理にかかる処理時間を考慮して、Ｍ関数処理前に３２ビットバッファである鍵演算回路内レジスタ７１８を介して処理することにより２クロックで処理を行う。このことにより、１２個の中間鍵を生成するのに１２クロックで処理できるところを本構成では１３クロックで処理を行っているが、Ｍ関数処理に必要な処理時間に基づくクロック周波数の上限を引き上げることができ、全体の処理速度を高めることが可能となる。
【００５５】
（拡大鍵生成処理）
拡大鍵生成処理時における鍵スケジュール回路５の接続状態を図６に示す。
データスクランブル回路２のI関数処理では、I/4関数処理として実行されるため、R/2+I/4関数回路４１におけるI/4関数処理時の１サイクルに対して３２ビットの拡大鍵が１個必要となる。このため、１サイクルで処理可能な拡大鍵生成用回路を１組だけ構成することで、データスクランブル回路２への拡大鍵の提供が実現でき、回路規模を大幅に削減することができる。拡大鍵生成処理では、図６に示すように、鍵演算回路７、中間鍵記憶回路６および中間鍵選択回路８を使用する。
【００５６】
中間鍵選択回路８は、３入力１出力のセレクタＸ８０１〜セレクタＷ８０４と、４入力１出力のセレクタを４つ備えるスイッチ８０５で構成されている。スイッチ８０５は、セレクタＸ８０１〜セレクタＷ８０４で選択された４つの中間鍵の入力に対して、それぞれ１つを選択して出力する回路である。
拡大鍵生成処理では、中間鍵記憶回路６に格納された１２個の中間鍵から中間鍵選択回路８により４つの中間鍵を選択し、全５６個の拡大鍵を生成する。この５６個の拡大鍵を生成するためのセレクタＸ８０１〜セレクタＷ８０４の切換制御のテーブルを表３に示す。
【００５７】
【表４】
0004230152.tif 000005
このようなセレクタＸ８０１〜セレクタＷ８０４の切換制御により選択された中間鍵を用いて鍵演算回路７により拡大鍵の演算を行う。鍵演算回路７の第６セレクタ７０５、第７セレクタ７０７、第８セレクタ７１０、第９セレクタ７１２、第１０セレクタ７１４、第１１セレクタ７１６は、拡大鍵生成時には常に'R'が選択される。このため、演算結果に対する第３セレクタ７０１、第４セレクタ７０２、第５セレクタ７０４の出力による影響はなくなる。また、XOR回路７１７からの出力を遅延短縮パイプラインである鍵演算回路内レジスタ７１８を通さずに直接データスクランブル回路２に出力するように構成する。
【００５８】
以上のように、本構成による鍵スケジュール回路５では、データスクランブル回路２の構成に応じて１サイクルで必要となる拡大鍵を生成するための拡大鍵生成回路を１組だけ構成することで、回路規模を大幅に削減することが可能である。また、データスクランブル回路２のレジスタ回路３およびＭ関数回路４１１を共用することで回路規模の削減を実現している。さらに、遅延短縮パイプラインとして機能する鍵演算回路内レジスタ７１８を設けることで、中間鍵生成時におけるＭ関数処理によるクロック周波数の上限を引き上げることができ、クロック周波数を上げることで全体の処理を高速化することが可能となる。
【００５９】
〔他の実施形態〕
データスクランブル回路２のB/4関数回路４２に代えて、１サイクルで６４ビット分のＢ関数処理を実行するB/2関数回路を用いることが可能である。このB/2関数回路を図８に示す。
B/4関数回路４５は、入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部４５１と、入力データ変換部４５１の３２個の出力データのうち4k-1番目および4k番目（k＝１〜８）の出力データに対して非線形処理を実行する１６個の４ビットSbox処理回路４５２と、入力データ変換部４５１から出力される4k-3番目、4k-2番目の出力データと４ビットSbox処理回路４２２を通過した4k-1番目、4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部４５３とを備えている。
【００６０】
このようなB/2関数回路４５を用いる場合には、１回のＢ関数処理をB/2-B/2として２回に分けて処理を行うため、前述した実施形態に比して１４サイクルの処理クロックを削減できる。B/2関数回路４５を用いた場合のデータスクランブル回路２の暗号化時における第１セレクタ４４および第２セレクタ４１２の切換制御のテーブルを表５に示し、復号化時における第１セレクタ４４および第２セレクタ４１２の切換制御のテーブルを表６に示す。
【００６１】
【表５】
0004230152.tif 000006
【００６２】
【表６】
0004230152.tif 000007
B/2関数回路４５を用いることによって、回路規模がやや増加する（５００ゲート程度）ものの、前述したように、全体の処理クロックが８４サイクルから７０サイクルに削減することができ、処理を１４％高速化できる。
【００６３】
＜付記＞
（付記１）
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して３２ビット分のＢ関数処理を実行するB/4関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/4関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/4関数回路にデータを供給するレジスタ回路とを実装するデータスクランブル回路。
【００６４】
（付記２）
前記レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/4関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループを構成する、付記１に記載のデータスクランブル回路。
【００６５】
（付記３）
前記R/2+I/4関数回路は、
３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、
前記Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、
前記RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、
前記RI回路内第１セレクタの出力と定数"0x55555555","0xAAAAAAAA","0x33333333","0xCCCCCCCC"のうちいずれかを論理積演算を行うRI回路内第１AND回路と、
前記RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、
入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、
入力データＣを出力データＤとして出力する経路と、
を備える、付記２に記載のデータスクランブル回路。
【００６６】
（付記４）
前記B/4関数回路は、
入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、
前記入力データ変換部の３２個の出力データのうち4k番目（k＝１〜８）の出力データに対して非線形処理を実行する８個の４ビットSbox処理回路と、
前記入力データ変換部から出力される4k-3番目、4k-2番目、4k-1番目の出力データと前記４ビットSbox処理回路を通過した4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部と、
を備える、付記１〜３のいずれかに記載のデータスクランブル回路。
【００６７】
（付記５）
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して６４ビット分のＢ関数処理を実行するB/2関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/2関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/2関数回路にデータを供給するレジスタ回路とを実装するデータスクランブル回路。
【００６８】
（付記７）
前記B/2関数回路は、
入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、
前記入力データ変換部の３２個の出力データのうち4k-1番目および4k番目（k＝１〜８）の出力データに対して非線形処理を実行する１６個の４ビットSbox処理回路と、
前記入力データ変換部から出力される4k-3番目、4k-2番目の出力データと前記４ビットSbox処理回路を通過した4k-1番目、4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部と、
を備える、付記６に記載のデータスクランブル回路。
【００６９】
（付記７）
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行するデータスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、
前記暗号鍵に基づいて複数の中間鍵を生成し、前記中間鍵に基づいて拡大鍵を生成する鍵演算回路と、
前記鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、
前記中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して前記鍵演算回路に提供する中間鍵選択回路と、
を備える鍵スケジュール回路。
【００７０】
（付記８）
前記鍵演算回路は、暗号鍵に対して非線形処理であるＭ関数処理を実行した後のデータを用いて中間鍵を生成する、付記７に記載の鍵スケジュール回路。
（付記９）
前記鍵演算回路は、３２ビット×４の入力データ（k'0,k'1,k'2,k'3）と前記中間鍵選択回路の３２ビット×４の出力データ（KEYX,KEYY,KEYZ,KEYW）とを入力とし、
入力データ（k'0,k'2）のいずれか一方を出力する鍵演算回路内第１セレクタと、
入力データ（k'1,k'3）のいずれか一方を出力する鍵演算回路内第２セレクタと、
前記鍵演算回路内第２セレクタの出力、前記鍵演算回路内第２セレクタの出力を１ビット左シフトしたデータおよびデータ'0'のうちのいずれかを出力する鍵演算回路内第３セレクタと、
前記鍵演算回路内第１セレクタの出力と中間鍵選択回路の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第４セレクタと、
前記中間鍵選択回路の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する鍵演算回路内第５セレクタと、
前記鍵演算回路内第２セレクタの出力と前記中間鍵選択回路の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第６セレクタと、
前記鍵演算回路内第３セレクタの出力と前記中間鍵選択回路の出力（KEYW）にINV処理を行ったデータとのうちいずれか一方を出力する鍵演算回路内第７セレクタと、
データ'0'とデータ'1'のうちのいずれか一方を出力する鍵演算回路内第８セレクタと、
前記鍵演算回路内第４セレクタの出力と鍵演算回路内第５セレクタの出力とを加算する鍵演算回路内第１加算回路と、
前記鍵演算回路内第８セレクタの出力を最下位ビットへのキャリとして前記鍵演算回路内第６セレクタの出力と鍵演算回路内第７セレクタの出力とを加算する鍵演算回路内第２加算回路と、
前記鍵演算回路内第２加算回路の出力と鍵演算回路内第２加算回路の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第９セレクタと、
前記鍵演算回路内第１加算回路の出力と前記鍵演算回路内第９セレクタの出力との排他的論理和演算を行う鍵演算回路内第１XOR回路と、
前記鍵演算回路内第１XOR回路の出力を格納する鍵演算回路内レジスタと、
を備える、付記７または８に記載の鍵スケジュール回路。
【００７１】
（付記１０）
中間鍵生成時には鍵演算回路内レジスタのデータを前記中間鍵記憶回路に格納し、拡大鍵生成時には鍵演算回路内第１XOR回路の出力データをデータスクランブル回路に出力することによって、前記鍵演算回路を中間鍵生成時と拡大鍵生成時において共用することを特徴とする付記９に記載の鍵スケジュール回路。
【００７２】
（付記１１）
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行する暗号回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して３２ビット分のＢ関数処理を実行するB/4関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/4関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/4関数回路にデータを供給するレジスタ回路とを実装するデータスクランブル回路と、
前記データスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、前記暗号鍵に基づいて複数の中間鍵を生成し、前記中間鍵に基づいて拡大鍵を生成する鍵演算回路と、前記鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、前記中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して前記鍵演算回路に提供する中間鍵選択回路とを備える鍵スケジュール回路と、
を含む暗号回路。
【００７３】
（付記１２）
前記データスクランブル回路は、前記レジスタ回路とデータスクランブル回路内第１セレクタとの間に、R/2+I/4関数回路とB/4関数回路とが並列に接続され、データスクランブル回路内第１セレクタの出力がレジスタ回路にフィードバックされたクロック同期ループを構成する、付記１１に記載の暗号回路。
【００７４】
（付記１３）
前記R/2+I/4関数回路は、
３２ビット×４の入力データ（Ａ，Ｂ，Ｃ，Ｄ）のうちデータＤに対して非線形処理であるＭ関数処理を実行するＭ関数回路と、
前記Ｍ関数回路の出力と“０”とが入力されいずれか一方を出力するRI回路内第１セレクタと、
前記RI回路内第１セレクタの出力と入力データＡとの排他的論理和演算を行ってその結果を出力データＢとして出力するRI回路内第１XOR回路と、
前記RI回路内第１セレクタの出力と定数"0x55555555","0xAAAAAAAA","0x33333333","0xCCCCCCCC"のうちいずれかを論理積演算を行うRI回路内第１AND回路と、
前記RI回路内第１AND回路の出力と入力データＢとの排他的論理和演算を行ってその結果を出力データＡとして出力するRI回路内第２XOR回路と、
入力データＤと拡大鍵との排他的論理和演算を行ってその結果を出力Ｃとして出力するRI回路内第３XOR回路と、
入力データＣを出力データＤとして出力する経路と、
を備え、
前記鍵スケジュール回路は、前記R/2+I/4関数回路のＭ関数回路を利用して暗号鍵に対してＭ関数処理を実行した後のデータを用いて中間鍵を生成することを特徴とする、付記１１または１２に記載の暗号回路。
【００７５】
（付記１４）
前記B/4関数回路は、
入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、
前記入力データ変換部の３２個の出力データのうち4k番目（k＝１〜８）の出力データに対して非線形処理を実行する８個の４ビットSbox処理回路と、
前記入力データ変換部から出力される4k-3番目、4k-2番目、4k-1番目の出力データと前記４ビットSbox処理回路を通過した4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部と、
を備える、付記１１〜１３のいずれかに記載の暗号回路。
【００７６】
（付記１５）
前記鍵演算回路は、３２ビット×４の入力データ（k'0,k'1,k'2,k'3）と前記中間鍵選択回路の３２ビット×４の出力データ（KEYX,KEYY,KEYZ,KEYW）とを入力とし、
入力データ（k'0,k'2）のいずれか一方を出力する鍵演算回路内第１セレクタと、
入力データ（k'1,k'3）のいずれか一方を出力する鍵演算回路内第２セレクタと、
前記鍵演算回路内第２セレクタの出力、前記鍵演算回路内第２セレクタの出力を１ビット左シフトしたデータおよびデータ'0'のうちのいずれかを出力する鍵演算回路内第３セレクタと、
前記鍵演算回路内第１セレクタの出力と中間鍵選択回路の出力（KEYX）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第４セレクタと、
前記中間鍵選択回路の出力（KEYY）と定数M(I)（I＝０〜11）とのうちいずれか一方を出力する鍵演算回路内第５セレクタと、
前記鍵演算回路内第２セレクタの出力と前記中間鍵選択回路の出力（KEYZ）を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第６セレクタと、
前記鍵演算回路内第３セレクタの出力と前記中間鍵選択回路の出力（KEYW）にINV処理を行ったデータとのうちいずれか一方を出力する鍵演算回路内第７セレクタと、
データ'0'とデータ'1'のうちのいずれか一方を出力する鍵演算回路内第８セレクタと、
前記鍵演算回路内第４セレクタの出力と鍵演算回路内第５セレクタの出力とを加算する鍵演算回路内第１加算回路と、
前記鍵演算回路内第８セレクタの出力を最下位ビットへのキャリとして前記鍵演算回路内第６セレクタの出力と鍵演算回路内第７セレクタの出力とを加算する鍵演算回路内第２加算回路と、
前記鍵演算回路内第２加算回路の出力と鍵演算回路内第２加算回路の出力を１ビット左ローテーションしたデータとのうちいずれか一方を出力する鍵演算回路内第９セレクタと、
前記鍵演算回路内第１加算回路の出力と前記鍵演算回路内第９セレクタの出力との排他的論理和演算を行う鍵演算回路内第１XOR回路と、
前記鍵演算回路内第１XOR回路の出力を格納する鍵演算回路内レジスタと、
を備える、付記１１〜１４のいずれかに記載の暗号回路。
【００７７】
（付記１６）
中間鍵生成時には鍵演算回路内レジスタのデータを前記中間鍵記憶回路に格納し、拡大鍵生成時には鍵演算回路内第１XOR回路の出力データをデータスクランブル回路に出力することによって、前記鍵演算回路を中間鍵生成時と拡大鍵生成時において共用することを特徴とする付記１５に記載の暗号回路。
【００７８】
（付記１７）
暗号鍵から生成される複数の拡大鍵とデータとの排他的論理和を演算するI関数と、データのビットを攪拌するＢ関数およびＲ関数とを用いてデータスクランブルを行い、鍵長１２８／１９２／２５６ビット、処理ブロック１２８ビットの共通鍵ブロック暗号の暗号化／復号化を、鍵長１２８ビット専用で実行する暗号回路であって、
I関数を処理した後、Ｂ関数、I関数、Ｒ関数、Ｒ関数、I関数の順に処理を行う処理ブロックを６回処理し、その後、Ｂ関数、I関数の順に処理を行うために、処理ブロック１２８ビットのデータに対して６４ビット分のＲ関数処理と３２ビット分のI関数処理を同時に実行するR/2+I/4関数回路と、処理ブロック１２８ビットのデータに対して６４ビット分のＢ関数処理を実行するB/2関数回路と、前記R/2+I/4関数回路の出力、前記R/2+I/4関数回路の出力ビットをクロスさせた出力および前記B/2関数回路の出力が入力され、いずれか１つを選択的に出力するデータスクランブル回路内第１セレクタと、入力データまたは前記データスクランブル回路内第１セレクタの出力を格納するとともに前記R/2+I/4関数回路およびB/2関数回路にデータを供給するレジスタ回路とを実装するデータスクランブル回路と、
前記データスクランブル回路に対して拡大鍵を提供する鍵スケジュール回路であって、前記暗号鍵に基づいて複数の中間鍵を生成し、前記中間鍵に基づいて拡大鍵を生成する鍵演算回路と、前記鍵演算回路で生成された複数の中間鍵を格納する中間鍵記憶回路と、前記中間鍵記憶回路に格納されている中間鍵から鍵スケジュールに応じた中間鍵を選択して前記鍵演算回路に提供する中間鍵選択回路とを備える鍵スケジュール回路と、
を含む暗号回路。
【００７９】
（付記１８）
前記B/2関数回路は、
入力される３２ビット×４の入力データを４ビット×３２の出力データに変換する入力データ変換部と、
前記入力データ変換部の３２個の出力データのうち4k-1番目、4k番目（k＝１〜８）の出力データに対して非線形処理を実行する１６個の４ビットSbox処理回路と、
前記入力データ変換部から出力される4k-3番目、4k-2番目の出力データと前記４ビットSbox処理回路を通過した4k-1番目、4k番目の出力データとを撹拌するとともに３２ビット×４の出力データに変換する出力データ変換部と、
を備える、付記１７に記載の暗号回路。
【００８０】
【発明の効果】
本発明によれば、鍵長１２８ビット専用の暗号回路を構成し、データスクランブル回路と鍵スケジュール回路の一部を共通化することによって回路規模を削減することが可能である。また、本発明の構成によれば、特定の関数処理回路の処理データ単位を細分化することによって、SC2000アルゴリズムをコンパクトな回路で実現できる。
【００８１】
PCT/JP01/05095において提案した暗号回路と比較して、その回路規模を1/3程度に削減することができる。また、全体処理に必要なサイクル数は約３倍となるものの、１サイクルあたりのディレイが1/2以下となり、動作周波数を２倍以上にすることが可能となるので、処理速度は７５％〜８０％程度の低減で抑えることができる。
【図面の簡単な説明】
【図１】本発明の概略構成を示すブロック図。
【図２】データスクランブル回路の構成を示すブロック図。
【図３】  R/2+I/4関数回路の構成を示すブロック図。
【図４】  B/4関数回路の構成を示すブロック図。
【図５】中間鍵生成時における鍵スケジュール回路の接続状態を示すブロック図。
【図６】拡大鍵生成時における鍵スケジュール回路の接続状態を示すブロック図。
【図７】鍵スケジュール回路のブロック図。
【図８】  B/2関数回路の構成を示すブロック図。
【図１】
0004230152.tif 000008
【図２】
0004230152.tif 000009
【図３】
0004230152.tif 000010
【図４】
0004230152.tif 000011
【図５】
0004230152.tif 000012
【図６】
0004230152.tif 000013
【図７】
0004230152.tif 000014
【図８】
0004230152.tif 000015