(57)【特許請求の範囲】
【請求項１】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータをバイト単位でローテートするバイトローテート回路と、
該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、
入力されるサブラウンド指定信号によって１２８ビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算する１６個の加算回路とを備え、
該バイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１２８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを同時に出力する暗号鍵生成回路。
【請求項２】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータをバイト単位でローテートすると共にバイト内で３ビットローテートするバイト／３ビットローテート回路と、
入力されるサブラウンド指定信号によって１２８ビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算する１６個の加算回路とを備え、
該バイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１２８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを同時に出力する暗号鍵生成回路。
【請求項３】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータをバイト単位でローテートするバイトローテート回路と、
該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、
入力されるサブラウンド指定信号とバイト指定信号によって８ビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算する１個の加算回路とを備え、
該バイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に８ビットずつ出力する暗号鍵生成回路。
【請求項４】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータをバイト単位でローテートすると共にバイトローテートの１箇所においてバイト内で３ビットローテートするバイト／３ビットローテート回路と、
入力されるサブラウンド指定信号とバイト指定信号によって８ビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算する１個の加算回路とを備え、
該バイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に８ビットずつ出力する暗号鍵生成回路。
【請求項５】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータを２バイト単位でローテートする２バイトローテート回路と、
該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、
入力されるサブラウンド指定信号とバイト指定信号によって１６ビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算する２個の加算回路とを備え、
該２バイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１６ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に１６ビットずつ出力する暗号鍵生成回路。
【請求項６】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータを２バイト単位でローテートすると共に２バイトローテートの２箇所においてバイト内で３ビットローテートする２バイト／３ビットローテート回路と、
入力されるサブラウンド指定信号とバイト指定信号によって１６ビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算する２個の加算回路とを備え、
該２バイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１６ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に１６ビットずつ出力する暗号鍵生成回路。
【請求項７】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータをｍ（但し、ｍは暗号キーのビット数をバイト表現にしたものの約数）バイト単位でローテートするｍバイトローテート回路と、
該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、
入力されるサブラウンド指定信号とバイト指定信号によって８×ｍビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算するｍ個の加算回路とを備え、
該ｍバイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８×ｍビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に８×ｍビットずつ出力する暗号鍵生成回路。
【請求項８】
入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、
入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、
（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、
該内部レジスタのデータをｍ（但し、ｍは暗号キーのビット数をバイト表現にしたものの約数）バイト単位でローテートすると共にｍバイトローテートのｍ箇所においてバイト内で３ビットローテートするｍバイト／３ビットローテート回路と、
入力されるサブラウンド指定信号とバイト指定信号によって８×ｍビットのバイアス値を決定するバイアステーブルと、
内部レジスタから選択されたデータにバイアス値を加算するｍ個の加算回路とを備え、
該ｍバイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８×ｍビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に８×ｍビットずつ出力する暗号鍵生成回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報の暗号化を行うために用いられる回路であって、特に、ＳＡＦＥＲ＋アルゴリズムにおいてラウンドサブキーを小さな回路規模で生成することが可能な暗号鍵生成回路に関する。
【０００２】
【従来の技術】
情報の暗号化を行うためのアルゴリズムとして、米国Ｃｙｌｉｎｋ  Ｃｏｒｐ．のＳＡＦＥＲ＋（アルゴリズム名）が公開されている。このアルゴリズムは、図２０に示すように、暗号化される前の１２８ビットのデータ（平文）を入力し、これを１２８ビット、１９２ビットおよび２５６ビットのいずれかのビット長の暗号化キーを用いて暗号化して、１２８ビットの暗号文を得るものである。
【０００３】
ＳＡＦＥＲ＋アルゴリズム１は、暗号キーが１２８ビットのときに１７個、１９２ビットのときに２５個、２５６ビットのときには３３個のラウンドサブキーを生成するラウンドサブキー生成回路２と、このラウンドサブキー生成回路２で生成されたラウンドサブキーを使用して平文を暗号文化する暗号化回路３とから構成されている。
【０００４】
このアルゴリズムの中では、計算過程がラウンドと称される段階に分けられ、そのラウンド数は、暗号キーが１２８ビットのときに８、１９２ビットのときには１２、２５６ビットのときには１６と規定されている。さらに、１ラウンドは２つのサブラウンドに分けられ、最終ラウンドのみ３サブラウンドに分けられている。従って、サブラウンド数は、暗号キーが１２８ビットのときに１７、１９２ビットのときには２５、２５６ビットのときには３３となる。そして、ラウンドサブキーは、サブラウンド毎に１２８ビット生成される。
【０００５】
ラウンドサブキーを生成するアルゴリズムについて、１２８ビットの場合を図２１に、１９２ビットの場合を図２２に、２５６ビットの場合を図２３に示す。以下では、本発明に関連するこれらのアルゴリズムの内、１２８ビットの場合について説明する。
【０００６】
１２８ビットの暗号キーからＫ1〜Ｋ17の１７個のラウンドサブキーを生成するアルゴリズムは、図２１に示すような手順で行われる。この図では、入力された１２８ビットの暗号キーを、８ビット毎にまとめた四角で１〜１６として示している。この１２８ビットのうち、最下位バイトは１と記した四角に、最上位バイトは１６と記した四角に割り当てられる。また、１２８ビットのうち、最下位ビットは１と記した最下位バイトの中の最下位ビットに、最上位ビットは１６と記した最上位バイトの中の最上位ビットに割り当てられる。１番目のサブラウンドのラウンドサブキーＫ1としては、この暗号キーがそのまま出力される。
【０００７】
２番目のサブラウンドのラウンドサブキーＫ2以降の生成には、１７バイト目として、入力された１６バイトをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和（図ではｘｏｒと表す）を取った値も使用する。
【０００８】
最初に、１７バイトをバイト毎にその内部で３ビットローテートする。すなわち、｛７、６、５、４、３、２、１、０｝と並んでいるビットを｛４、３、２、１、０、７、６、５｝と左方向に３ビットローテートする。そして、ｊ番目のサブラウンドのラウンドサブキーＫjとしては、最下位バイトにｊバイト目が割り当てられ、以降、順番にｊ＋１バイト目、ｊ＋２バイト目、・・・、ｊ＋１５バイト目までの１６バイトが出力される。ここで、ｊ＋ｉの値が１７を超える部分では、１７を引いたバイトを出力する。例えば、Ｋ15の場合には、最下位バイトから順に｛１５、１６、１７、１、２、３、４、５、６、７、８、９、１０、１１、１２、１３｝とセレクトされて出力が行われる。最後に、この順で出力された値にバイアス値Ｂjが加えられる。バイアス値は、サブラウンド数ｊで決まる１２８ビットの固定値であり、セレクトされた値と、各バイト毎に桁あふれを考慮しなくて良いように加算を行う。バイアス値Ｂjのｉバイト目をＢj［ｉ］と表すと、上述したＫ15の最下位バイトは、内部レジスタの１５バイト目の値とＢ15［０］を加算した値となる。なお、ここで言う桁あふれを考慮しなくて良いバイト毎の加算とは、加算した結果が１バイトで表せる最大値２５５以下であればその値となり、２５５を超えた場合には２５６を引いた値となるように加算することを示す。
【０００９】
以上のように、Ｋ2からＫ17までは、３ビットローテート、ｊバイト目からｊ＋１５バイト目までの出力およびバイアス値の加算が繰り返し実行され、ラウンドサブキーが生成される。
【００１０】
図２２および図２３に示したように、１９２ビットおよび２５６ビットの暗号キーからラウンドサブキーを生成する場合には、保持しているバイト数が増えることと、出力する順番として１２８ビットの場合にはｊ＋ｉの値が１７を超えた場合に１７を引いていたのに対して、１９２ビットの場合にはｊ＋ｉの値が２５を超えた場合に２５を引き、２５６ビットの場合にはｊ＋ｉの値が３３を超えた場合に３３を引くこと、が変わるだけで、基本的な生成手順は１２８ビットの暗号キーの場合と同じである。
【００１１】
さらに、暗号化アルゴリズムとしては多数の方法が提案および公開されており、例えば特開２０００−３９８４０号に公開されているようなものが挙げられる。しかし、この公報では、キーの生成に関して具体的な実施例までは開示されていない。また、特開平１１−４５０４９号では、キーの生成手順が開示されているが、本発明において取り上げているＳＡＦＥＲ＋とは異なる暗号化アルゴリズムに関するものである。
【００１２】
【発明が解決しようとする課題】
上述したようなアルゴリズムでラウンドサブキーを生成した場合、暗号キーが入力されると全てのラウンドサブキーを同時に計算して出力するための回路が非常に大規模なものになってしまう。これは、ラウンドサブキー毎に出力するバイトの順番を変えるためにセレクタが必要であることと、バイアス値を加算するための加算器が（ラウンドサブキーの数−１）×１６個必要になることからも容易に推測される。図２４に示したように、ラウンドサブキーを１つずつ出力するような構成でも、全てのラウンドサブキーを同時に計算する場合には同様の問題がある。なお、この図２４において、２はラウンドサブキー生成回路、９は暗号キーの各バイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路、１０はレジスタ、１２は３ビットローテート回路、１４は出力セレクタ、１５は加算器、１６はバイアステーブルである。
【００１３】
本発明は、このような従来技術の課題を解決するためになされたものであり、暗号アルゴリズムＳＡＦＥＲ＋においてラウンドサブキーを小さな回路規模で生成することができる暗号鍵生成回路を提供することを目的とする。
【００１４】
【課題を解決するための手段】
請求項１に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータをバイト単位でローテートするバイトローテート回路と、該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、入力されるサブラウンド指定信号によって１２８ビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算する１６個の加算回路とを備え、該バイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１２８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを同時に出力しており、そのことにより上記目的が達成される。
【００１５】
上記構成によれば、従来の回路構成のように、ラウンドサブキー毎に出力するバイトの順番を変えるために多数のセレクタを必要とせず、回路規模を縮小することが可能である。
【００１６】
請求項２に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータをバイト単位でローテートすると共にバイト内で３ビットローテートするバイト／３ビットローテート回路と、入力されるサブラウンド指定信号によって１２８ビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算する１６個の加算回路とを備え、該バイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１２８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを同時に出力しており、そのことにより上記目的が達成される。
【００１７】
上記構成によれば、バイト／３ビットローテート回路を用いて、内部レジスタに保持されている（入力される暗号キーのバイト数＋１）バイトの値を、８ビット（１バイト）単位でローテートしながら同時に３ビットローテートすることができる。よって、請求項１に記載の本発明に比べて、処理時間を短くすると共に回路規模をさらに縮小することが可能である。
【００１８】
請求項３に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータをバイト単位でローテートするバイトローテート回路と、該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、入力されるサブラウンド指定信号とバイト指定信号によって８ビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算する１個の加算回路とを備え、該バイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から８ビットずつ出力しており、そのことにより上記目的が達成される。
【００１９】
上記構成によれば、１つのラウンドサブキーを８ビット毎に分割して出力し、バイアステーブルからサブラウンド数とバイトを指定する信号により決定される８ビットの値を出力する。よって、一度に加算されるバイアス値が１バイトとなり、１６個必要であった加算器が１個で済むため、請求項１に記載の本発明に比べて、回路規模をさらに縮小することが可能である。
【００２０】
請求項４に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータをバイト単位でローテートすると共にバイトローテートの１箇所においてバイト内で３ビットローテートするバイト／３ビットローテート回路と、入力されるサブラウンド指定信号とバイト指定信号によって８ビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算する１個の加算回路とを備え、該バイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から８ビットずつ出力しており、そのことにより上記目的が達成される。
【００２１】
上記構成によれば、バイト／３ビットローテート回路を用いて、内部レジスタに保持されている（入力される暗号キーのバイト数＋１）バイトの値を、８ビット（１バイト）単位でローテートしながら同時にその中の１箇所で３ビットローテートすることができる。よって、請求項３に記載の本発明に比べて、処理時間を短くすると共に回路規模をさらに縮小することが可能である。
【００２２】
請求項５に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、 該内部レジスタのデータを２バイト単位でローテートする２バイトローテート回路と、該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、入力されるサブラウンド指定信号とバイト指定信号によって１６ビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算する２個の加算回路とを備え、該２バイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１６ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から１６ビットずつ出力しており、そのことにより上記目的が達成される。
【００２３】
上記構成によれば、１つのラウンドサブキーを１６ビット毎に分割して出力し、バイアステーブルからサブラウンド数とバイトを指定する信号により決定される１６ビットの値を出力する。よって、一度に加算されるバイアス値が２バイトとなり、１６個必要であった加算器が２個で済むため、請求項１に記載の本発明に比べて、回路規模をさらに縮小することが可能である。
【００２４】
請求項６に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータを２バイト単位でローテートすると共に２バイトローテートの２箇所においてバイト内で３ビットローテートする２バイト／３ビットローテート回路と、入力されるサブラウンド指定信号とバイト指定信号によって１６ビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算する２個の加算回路とを備え、該２バイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から１６ビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から１６ビットずつ出力しており、そのことにより上記目的が達成される。
【００２５】
上記構成によれば、２バイト／３ビットローテート回路を用いて、内部レジスタに保持されている（入力される暗号キーのバイト数＋１）バイトの値を、１６ビット（２バイト）単位でローテートしながら同時にその中の２箇所で３ビットローテートすることができる。よって、請求項５に記載の本発明に比べて、処理時間を短くすると共に回路規模をさらに縮小することが可能である。
【００２６】
請求項７に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータをｍ（但し、ｍは暗号キーのビット数をバイト表現にしたものの約数）バイト単位でローテートするｍバイトローテート回路と、該内部レジスタのデータをバイト内で３ビットローテートする３ビットローテート回路と、入力されるサブラウンド指定信号とバイト指定信号によって８×ｍビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算するｍ個の加算回路とを備え、該ｍバイトローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８×ｍビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に８×ｍビットずつ出力しており、そのことにより上記目的が達成される。
【００２７】
上記構成によれば、従来の回路構成のように、ラウンドサブキー毎に出力するバイトの順番を変えるために多数のセレクタを必要とせず、回路規模を縮小することが可能である。また、上記構成によれば、１つのラウンドサブキーを８×ｍビット毎に分割して出力し、バイアステーブルからサブラウンド数とバイトを指定する信号により決定される８×ｍビットの値を出力する。これによって、一度に加算されるバイアス値が８×ｍバイトとなり、加算器がｍ個で済むため、回路規模を縮小することが可能である。
【００２８】
請求項８に記載の暗号鍵生成回路は、入力される１２８ビット、１９２ビットまたは２５６ビットの暗号キーから、平文を暗号化する暗号化回路において複数のサブラウンドで使用される１２８ビットのラウンドサブキーを１７個、２５個または３３個生成する回路であって、入力される暗号キーをバイト単位に分け、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算する排他的論理和回路と、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納する内部レジスタと、該内部レジスタのデータをｍ（但し、ｍは暗号キーのビット数をバイト表現にしたものの約数）バイト単位でローテートすると共にｍバイトローテートのｍ箇所においてバイト内で３ビットローテートするｍバイト／３ビットローテート回路と、入力されるサブラウンド指定信号とバイト指定信号によって８×ｍビットのバイアス値を決定するバイアステーブルと、内部レジスタから選択されたデータにバイアス値を加算するｍ個の加算回路とを備え、該ｍバイト／３ビットローテート回路を用いて該内部レジスタのデータをローテートし、下位側から８×ｍビットの値をラウンドサブキーの元になる値として使用して、１サブラウンドに１２８ビットのラウンドサブキーを下位側から順に８×ｍビットずつ出力しており、そのことにより上記目的が達成される。
【００２９】
上記構成によれば、ｍバイト／３ビットローテート回路を用いて、内部レジスタに保持されている（入力される暗号キーのバイト数＋１）バイトの値を、８×ｍビット（ｍバイト）単位でローテートしながら同時にその中のｍ箇所で３ビットローテートすることができる。よって、請求項７に記載の本発明に比べて、処理時間を短くすると共に回路規模をさらに縮小することが可能である。
【００３０】
【発明の実施の形態】
以下に、本発明の実施の形態について、図面を参照しながら説明する。
【００３１】
（実施形態１）
図１は本実施形態の暗号鍵生成回路の構成を示すブロック図である。この回路は、ラウンドサブキー生成回路として、暗号化アルゴリズムＳＡＦＥＲ＋に組み込まれるものである。
【００３２】
このラウンドサブキー生成回路２は、排他的論理和回路９と、内部レジスタ１０と、バイトローテート回路１１と、３ビットローテート回路１２と、バイアステーブル１６と、１６個の加算回路（加算器）１５とを備えている。
【００３３】
排他的論理和回路９は、入力される暗号キーをバイト単位（８ビットずつ）に分けて、全てのバイトにおいて同一位置にあるビットの排他的論理和を計算し、１バイトの値を出力する回路である。
【００３４】
内部レジスタ１０は、（入力される暗号キーのバイト数＋１）バイトからなり、ラウンドサブキーの元になるデータを格納するレジスタであり、入力された暗号キーやバイトローテートされた値、３ビットローテートされた値を保持する。
【００３５】
バイトローテート回路１１は、内部レジスタ１０に保持されている（入力される暗号キーのバイト＋１）バイトの値を、バイト（８ビット）単位でローテートするための回路である。このバイトローテート回路１１は、基本的には配線とセレクタで構成される。
【００３６】
図２（ａ）に、１７バイトをバイトローテートさせる手順を示す。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値はその内部レジスタが保持する値が何バイト目の値であるかを示す。図中の上の状態がバイトローテートを実行する前の内部レジスタの状態であり、四角内の数値が左から順に並んだ初期状態である。そして、図中の下の状態がバイトローテートを実行した後の状態であり、四角内の数値と矢印で示すように、１７バイト目の値を１６バイト目に、１６バイト目の値を１５バイト目に、・・・、２バイト目の値を１バイト目に、そして、１バイト目の値を１７バイト目に移動させている。
【００３７】
図２（ａ）にはバイト単位の状態を図示したが、図２（ｂ）に、これをビット毎にばらしたものを示す。この図においては、四角１つが内部レジスタの１ビットを表わし、そこに記された数値はその内部レジスタが０から１３５ビットの内の何ビット目の値であるかを示す。一番左の縦の列の０ビット目から７ビット目が図２（ａ）の一番左の四角１つ（１バイト）に相当し、左から２番目の縦の列の８ビット目から１５ビット目が図２（ａ）の左から２番目の四角１つ（１バイト）に相当する。そして、レジスタ間に図示したような配線を設けることにより、８ビット目の値を０ビット目に、・・・、０ビット目の値を１２８ビット目に移動させるバイトローテートを行うことができる。
【００３８】
この図２においては、信号の流れを分かりやすくするために配線だけを示しているが、実際のバイトローテート回路には各配線上にセレクタが１段ずつ設けられ、バイトローテート時の値とそれ以外の処理の場合の値を切り替えて、どちらの値を内部レジスタに保持させるかを選択できるように構成される。
【００３９】
３ビットローテート回路１２は、内部レジスタ１０に保持されている（入力される暗号キーのバイト＋１）バイトの値を、各バイト内で３ビット左にローテートするための回路である。例えば｛７、６、５、４、３、２、１、０｝と並んでいるビットを｛４、３、２、１、０、７、６、５｝というように左方向に３ビットローテートする。
【００４０】
この３ビットローテート回路１２の構成を図３に示す。この３ビットローテート回路１２も、基本的には配線とセレクタで構成される。この図において、右側の縦の列にある四角は内部レジスタの任意の１バイト分（８ビット）を取り出したものであり、四角１つが内部レジスタの１ビットに相当する。左側の縦の列にある長方形はセレクタであり、３ビットローテート時の値とそれ以外の処理の場合の値を切り替えて、どちらの値を内部レジスタに保持させるかを選択する。３ビットローテート時の動作は、７ビット目の値を２ビット目に、６ビット目の値を１ビット目に、５ビット目の値を０ビット目に、４ビット目の値を７ビット目に、３ビット目の値を６ビット目に、２ビット目の値を５ビット目に、１ビット目の値を４ビット目に、そして、０ビット目の値を３ビット目に移動させることにより実現している。
【００４１】
バイアステーブル１６は、サブラウンド信号によって決定されるバイアス値と称される固定値１２８ビットを与える回路である。
【００４２】
加算器１５は、内部レジスタ１０に保存されている値とバイアス値を８ビットずつ、桁上がり無しで加算するための回路であり、１６バイト（１２８ビット）分の計算を行うため、１６個の加算回路１５が必要である。
【００４３】
以下に、このラウンドサブキー生成回路の動作について説明する。入力される暗号キーのビット数で処理動作が異なるが、基本となる部分は同一であるので、ここでは図１と図４を用いて１２８ビットの暗号キーが入力された場合について、説明する。
【００４４】
本実施形態のラウンドサブキー生成回路は、図２４に示した従来の回路のうち、出力セレクタ１４を削減することにより回路規模を縮小するものである。このために、図１に示すバイトローテート回路１１を設けている。
【００４５】
図４は、本実施形態のラウンドサブキー生成回路における内部レジスタ１０の状態を時系列的に表したものである。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値は入力された暗号キーにおいて何バイト目の値であったかを示す。
【００４６】
内部レジスタは、まず、時刻ｔ1において、入力された１２８ビット（１６バイト）の暗号キーを保持する。このとき、入力された暗号キー１６バイトにおいて同一位置にあるビットの値の排他的論理和を計算し、１７バイト目の値とする。例えば０ビット目の場合には、１６バイト全ての０ビット目の値の排他的論理和を計算し、１７バイト目の０ビットの値とする。それと同時に、Ｋ1を出力する（このときには、下位側から１６バイトが加算器１５に出力される。なお、この値は、ローテートされる前のものであるので、入力された暗号キーの値そのままである）。
【００４７】
次に、時刻ｔ2において、バイトローテートを実行する。これにより、図４に示すように、１バイトずつ左にローテートが行われ、最下位バイトであった値が最上位バイトに移動する。
【００４８】
次に、時刻ｔ3では、バイト毎の内部で３ビットのローテートを実行し、Ｋ2を出力する。このとき、図４に示すように、最下位バイトに元々の２バイト目が、その次に３バイト目が配置され、内部レジスタの左から１６バイト分に保存されているバイトの順序は、図２１に示したＫ2を出力するときの順序に一致しており、出力の順をセレクトする必要が無くなっている。
【００４９】
次に、時刻ｔ4においてバイトローテートを実行し、時刻ｔ5においてバイト毎の内部で３ビットのローテートを実行して、Ｋ3を出力する。このときにも、内部レジスタの左から１６バイト分に保存されているバイトの順序は、図２１に示したＫ3を出力するときの順序に一致しており、出力の順をセレクトする必要が無くなっている。
【００５０】
以下、同様にバイトローテートと３ビットローテートを行うことにより、出力セレクタを用いることなく、Ｋ1からＫ17の所望のラウンドサブキーを得ることができる。入力された暗号キーが１９２ビットの場合、および２５６ビットの場合についても、同様の手順で所望のラウンドサブキーを得ることが可能である。
【００５１】
図２４に示した従来の回路では、ラウンドサブキーの１ビットを出力する際に、内部レジスタの値を出力セレクタでセレクトする必要がある。このセレクトは入力された暗号キーが１２８ビットの場合には１７ビットから、入力された暗号キーが１９２ビットの場合には２５ビットから、入力された暗号キーが２５６ビットの場合には３３ビットから、１ビットを選択することになり、これをラウンドサブキーの１２８ビット分に対して行うため、非常に大きな出力セレクト回路が必要であった。
【００５２】
これに対して、本実施形態では、図１に示すように、内部レジスタの内容をローテートするために、レジスタの値をバイト毎にローテートする配線とセレクタを用意するだけで、所望のラウンドサブキーを出力することができるため、回路規模を小規模化することが可能となる。
【００５３】
（実施形態２）
図５は本実施形態の暗号鍵生成回路の構成を示すブロック図である。この回路は、ラウンドサブキー生成回路として、暗号化アルゴリズムＳＡＦＥＲ＋に組み込まれるものである。
【００５４】
このラウンドサブキー生成回路２は、排他的論理和回路９と、内部レジスタ１０と、バイト／３ビットローテート回路１３と、バイアステーブル１６と、１６個の加算回路（加算器）１５とを備えている。
【００５５】
本実施形態のラウンドサブキー生成回路は、実施形態１の回路に比べて、バイトローテートと３ビットローテートを同時に処理することにより、処理時間を短くし、かつ、回路規模を縮小するためのものである。このために、図５に示すバイト／３ビットローテート回路１３を設けている。
【００５６】
バイト／３ビットローテート回路１３は、内部レジスタ１０に保持されている（入力される暗号キーのバイト＋１）バイトの値を、バイト（８ビット）単位でローテートしながら、同時に各バイト内で３ビット左にローテートするための回路である。実施形態１では、バイト単位のローテートを行う際に例えば７ビットの値を同じ７ビットの位置に移動させていたが、本実施形態では図６に示すように、３ビットローテートさせて２ビットの位置に移動させている。このようなビットの移動を行うことにより、バイトローテートと３ビットローテートを同時に処理することが可能となる。
【００５７】
このバイト／３ビットローテート回路１３は、図２に示したバイトローテート回路と図３に示した３ビットローテート回路を組み合わせたものであり、図７に示すように構成される。この図においては、信号の流れを分かりやすくするために配線だけを示しているが、実際のバイト／３ビットローテート回路１３には各配線上にセレクタが１段ずつ設けられ、バイト／３ビットローテート時の値とそれ以外の処理の場合の値を切り替えて、どちらの値を内部レジスタに保持させるかを選択できるように構成される。
【００５８】
以下に、このラウンドサブキー生成回路の動作について説明する。入力される暗号キーのビット数で処理動作が異なるが、基本となる部分は同一であるので、ここでは図５と図８を用いて１２８ビットの暗号キーが入力された場合について、説明する。
【００５９】
図８は、本実施形態のラウンドサブキー生成回路における内部レジスタ１０の状態を時系列的に表したものである。
【００６０】
内部レジスタは、まず、時刻ｔ1において、入力された１２８ビット（１６バイト）の暗号キーを保持する。このとき、入力された暗号キー１６バイトにおいて同一位置にあるビットの値の排他的論理和を計算し、１７バイト目の値とする。それと同時に、Ｋ1を出力する。
【００６１】
次に、時刻ｔ2において、バイトローテートと３ビットローテートを同時に実行し、Ｋ2を出力する。これにより、図４に示したｔ2とｔ3の処理が同時に実行されるので、１サブラウンド毎に１ステップ分ずつ処理時間が短くなる。
【００６２】
以下、同様にバイトローテートと３ビットローテートを同時に行うことにより、Ｋ1からＫ17の所望のラウンドサブキーを得ることができる。入力された暗号キーが１９２ビットの場合、および２５６ビットの場合についても、同様の手順で所望のラウンドサブキーを得ることが可能である。
【００６３】
実施形態１では３３ステップで処理できていたのに対して、本実施形態では１７ステップで処理可能である。また、回路規模の面では、実施形態１においてバイトローテート回路、８ビットローテート回路に各々入っていたセレクタが共通化されるので、実施形態１の回路と比較してセレクタの数を半分にすることができる。
【００６４】
（実施形態３）
図９は本実施形態の暗号鍵生成回路の構成を示すブロック図である。この回路は、ラウンドサブキー生成回路として、暗号化アルゴリズムＳＡＦＥＲ＋に組み込まれるものである。
【００６５】
このラウンドサブキー生成回路２は、排他的論理和回路９と、内部レジスタ１０と、バイトローテート回路１１と、３ビットローテート回路１２と、バイアステーブル１７と、１個の加算回路１５とを備えている。
【００６６】
本実施形態のラウンドサブキー生成回路は、実施形態１の回路とラウンドサブキーをサブラウンド毎に出力する点は同じである。しかし、実施形態１の回路では１２８ビットのラウンドサブキーを１２８ビット同時に出力していたのに対して、本実施形態では１つのラウンドサブキーを８ビット毎に分割して出力する点、およびバイアステーブルからサブラウンド数とバイトを指定する信号により決定される８ビットの値を出力する点が異なっている。これにより、一度に加算されるバイアス値が１バイトとなり、１６個必要であった加算器１５が１つで済むため、回路規模をさらに縮小することが可能である。
【００６７】
以下に、このラウンドサブキー生成回路の動作について説明する。入力される暗号キーのビット数で処理動作が異なるが、基本となる部分は同一であるので、ここでは図９と図１０を用いて１２８ビットの暗号キーが入力された場合について、説明する。
【００６８】
本実施形態のラウンドサブキー生成回路は、図２４に示した従来の回路のうち、出力セレクタ１４と加算器１５を削減することにより回路規模を縮小するものである。このために、図９に示すバイトローテート回路１１を設けている。さらに、実施形態１の回路では、内部レジスタの値を１６バイト同時に出力していたが、本実施形態では内部レジスタの最下位バイトのみを出力する。
【００６９】
図１０は、本実施形態のラウンドサブキー生成回路における内部レジスタ１０の状態を時系列的に表したものである。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値は入力された暗号キーにおいて何バイト目の値であったかを示す。また、ラウンドサブキーの出力において、Ｋj［ｉ］は１２８ビットあるＫjのｉバイト目を出力することを示す。
【００７０】
内部レジスタは、まず、時刻ｔ1において、入力された１２８ビット（１６バイト）の暗号キーを保持する。このとき、入力された暗号キー１６バイトにおいて同一位置にあるビットの値の排他的論理和を計算し、１７バイト目の値とする。それと同時に、内部レジスタの最下位バイトに保持される値を出力する。この場合には、Ｋ1の１バイト目であるＫ1［１］を出力する。
【００７１】
次に、時刻ｔ2において、バイトローテートを実行する。これにより、図１０に示すように、１バイトずつ左にローテートが行われ、最下位バイトであった値が最上位バイトに移動する。そして、内部レジスタの最下位バイトの値となったＫ1［２］を出力する。
【００７２】
これを時刻ｔ16まで繰り返すことにより、Ｋ1が下位のバイトから順に出力され、１２８ビット全ての値が出力される。
【００７３】
次に、時刻ｔ17から時刻ｔ19までは、バイトローテートのみを行い、次のサブラウンドの１バイト目の値が内部レジスタの最下位バイトの位置に来るように調整を行う。
【００７４】
次に、時刻ｔ20では、内部レジスタの全ての値に対して、バイト毎の内部で３ビットのローテートを実行し、これによりＫ2を出力する準備が完了する。それと同時に、Ｋ2［１］を出力する。
【００７５】
以下、同様にバイトローテートと３ビットローテートを行うことにより、出力セレクタを用いることなく、Ｋ1からＫ17の所望のラウンドサブキーにおける所望のバイト位置の値を得ることができる。
【００７６】
一方、バイアス値を加算する際には、１ステップで出力される内部レジスタの値が１バイトとなるので、バイアステーブル１７から、サブラウンド数を指定するサブラウンド信号とバイト信号で決められる１バイトのバイアス値を出力する構成とする必要がある。なお、バイト信号は、内部レジスタの最下位バイトがラウンドサブキーの何バイト目の値であるかを示す信号である。
【００７７】
入力された暗号キーが１９２ビットの場合、および２５６ビットの場合についても、同様の手順で所望のラウンドサブキーにおける所望のバイト位置の値を得ることが可能である。
【００７８】
（実施形態４）
図１１は本実施形態の暗号鍵生成回路の構成を示すブロック図である。この回路は、ラウンドサブキー生成回路として、暗号化アルゴリズムＳＡＦＥＲ＋に組み込まれるものである。
【００７９】
このラウンドサブキー生成回路２は、排他的論理和回路９と、内部レジスタ１０と、バイト／３ビットローテート回路１９と、バイアステーブル１７と、１個の加算回路１５とを備えている。
【００８０】
本実施形態のラウンドサブキー生成回路は、実施形態３の回路に比べて、バイトローテートと３ビットローテートを同時に処理することにより、処理時間を短くし、かつ、回路規模を縮小するためのものである。このために、図１１に示すバイト／３ビットローテート回路１９を設けている。
【００８１】
バイト／３ビットローテート回路１９は、バイトローテート回路の最下位バイトから最上位バイトにバイトシフトする部分の１箇所にのみ、図６に示したようにバイト内で３ビットローテートする回路を組み込んだものである。この回路を用いてローテートを行うと、通常はｊ＋１バイト目に保存されていた値がｊバイト目に移動してくるが、１バイト目に保存されていた値のみ、３ビットローテートされて最上位バイトに移動する。また、このバイト／３ビットローテート回路１９は、１バイト目の値をそのまま最上位バイトに移動させることも可能であり、実施形態３のバイトローテート回路１１と同様の機能も有している。
【００８２】
このバイト／３ビットローテート回路１９は、図１２に示すように構成され、図２の構成とほぼ同様であるが、それに加えて、最下位バイトから最上位バイトへのローテートの箇所に３ビットローテートする場合としない場合とを切り替えるための配線、およびセレクタ（図に長方形で示す）が設けられる。これにより、最下位バイトから最上位バイトへのローテート時に、単純にバイトローテートのみを行うか、またはバイトローテートと同時に３ビットローテートを行うかを切り替えることが可能となる。単純にバイトローテートする場合には、実施形態３のバイトローテート回路１１と同等の機能となる。
【００８３】
この図においては、信号の流れを分かりやすくするために配線だけを示しているが、実際のバイト／３ビットローテート回路１９には各レジスタのデータ入力の直前にセレクタが１段ずつ設けられ、バイト／３ビットローテート時の値とそれ以外の処理の場合の値を切り替えて、どちらの値を内部レジスタに保持させるかを選択できるように構成される。
【００８４】
以下に、このラウンドサブキー生成回路の動作について説明する。入力される暗号キーのビット数で処理動作が異なるが、基本となる部分は同一であるので、ここでは図１１と図１３を用いて１２８ビットの暗号キーが入力された場合について、説明する。
【００８５】
本実施形態のラウンドサブキー生成回路は、図２４に示した従来の回路のうち、出力セレクタ１４と加算器１５を削減することにより回路規模を縮小するものである。このために、図１１に示すバイトローテートとローテートの１箇所で３ビットローテートを同時に行うバイト／３ビットローテート回路１９を設けている。このラウンドサブキー生成回路は、実施形態３の回路と同様に、内部レジスタの最下位バイトのみを出力する。
【００８６】
図１３は、本実施形態のラウンドサブキー生成回路における内部レジスタ１０の状態を時系列的に表したものである。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値は入力された暗号キーにおいて何バイト目の値であったかを示す。また、ラウンドサブキーの出力において、Ｋj［ｉ］は１２８ビットあるＫjのｉバイト目を出力することを示す。
【００８７】
内部レジスタは、まず、時刻ｔ1において、入力された１２８ビット（１６バイト）の暗号キーを保持する。このとき、入力された暗号キー１６バイトにおいて同一位置にあるビットの値の排他的論理和を計算し、１７バイト目の値とする。それと同時に、内部レジスタの最下位バイトに保持される値を出力する。この場合には、Ｋ1の１バイト目であるＫ1［１］を出力する。
【００８８】
次に、時刻ｔ2において、バイトローテートと３ビットローテート（最下位バイトから最上位バイトへのシフトのみ）を同時に行う。これにより、図１３に示すように、１バイトずつ左にローテートが行われ、最下位バイトであった値が最上位バイトに移動し、このとき同時に３ビットローテートも行われる。そして、内部レジスタの最下位バイトとなったＫ1［２］を出力する。なお、この図では、３ビットローテート済みのバイトが分かるように、Ｋ1の処理を行っている間だけ、ローテート済みのバイトの数値を丸で囲っている。
【００８９】
これを時刻ｔ16まで繰り返すことにより、Ｋ1が下位のバイトから順に出力され、１２８ビット全ての値が出力される。
【００９０】
次に、時刻ｔ17および時刻ｔ18では、バイトローテートおよび３ビットローテート（最下位バイトから最上位バイトへのシフトのみ）を行い、次のサブラウンドの１バイト目の値が内部レジスタの最下位バイトの位置に来るように調整を行う。時刻ｔ18までの処理が完了すると、内部レジスタの全てのバイトに丸が付いていることが分かる。これは、全てのバイトが３ビットローテートされたことを示し、Ｋ2を出力する準備が完了されていることが分かる。
【００９１】
次に、時刻ｔ19ではバイトローテートを実行し、Ｋ2［１］を出力する。このときには、３ビットローテートを行わず、バイトローテートのみを行う。
【００９２】
以下、同様にバイトローテートと３ビットローテートを行うことにより、出力セレクタを用いることなく、Ｋ1からＫ17の所望のラウンドサブキーにおける所望のバイト位置の値を得ることができる。
【００９３】
バイアステーブル１７は、実施形態３と同様に、サブラウンド数を指定するサブラウンド信号とバイト信号で決められる１バイトのバイアス値を出力する構成とする必要がある。
【００９４】
入力された暗号キーが１９２ビットの場合、および２５６ビットの場合についても、同様の手順で所望のラウンドサブキーにおける所望のバイト位置の値を得ることが可能である。
【００９５】
本実施形態では、３ビットローテートがバイトローテートの中で同時に処理されるので、実施形態３の回路に比べて１サブラウンド毎に１ステップ分ずつ処理時間が短くなる。実施形態３では３２０ステップで処理できていたのに対して、本実施形態では３０４ステップで処理可能である。
【００９６】
（実施形態５）
図１４は本実施形態の暗号鍵生成回路の構成を示すブロック図である。この回路は、ラウンドサブキー生成回路として、暗号化アルゴリズムＳＡＦＥＲ＋に組み込まれるものである。
【００９７】
このラウンドサブキー生成回路２は、排他的論理和回路９と、内部レジスタ１０と、２バイトローテート回路２０と、３ビットローテート回路１２と、バイアステーブル１８と、２個の加算回路１５とを備えている。
【００９８】
本実施形態のラウンドサブキー生成回路は、実施形態１の回路とラウンドサブキーをサブラウンド毎に出力する点は同じである。しかし、実施形態１の回路では１２８ビットのラウンドサブキーを１２８ビット同時に出力していたのに対して、本実施形態では１つのラウンドサブキーを１６ビット毎に分割して出力する点、およびバイアステーブルからサブラウンド数とバイトを指定する信号により決定される１６ビットの値を出力する点が異なっている。これにより、一度に加算されるバイアス値が２バイトとなり、１６個必要であった加算器１５が２つで済むため、回路規模をさらに縮小することが可能である。
【００９９】
このために、図１４に示す２バイトローテート回路２０を設けている。さらに、実施形態１の回路では、内部レジスタの値を１６バイト同時に出力していたが、本実施形態では内部レジスタの下位２バイトのみを出力する。この２バイトローテート回路２０は、基本的には配線とセレクタで構成される。
【０１００】
図１５（ａ）に、１７バイトを２バイトローテートさせる手順を示す。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値はその内部レジスタが保持する値が何バイト目の値であるかを示す。図中の上の状態が２バイトローテートを実行する前の内部レジスタの状態であり、四角内の数値が左から順に並んだ初期状態である。そして、下の状態が２バイトローテートを実行した後の内部レジスタの状態であり、四角内の数値と矢印で示すように、１７バイト目の値を１５バイト目に、１６バイト目の値を１４バイト目に、・・・、３バイト目の値を１バイト目に、２バイト目の値を１７バイト目に、そして、１バイト目の値を１６バイト目に移動させている。
【０１０１】
図１５（ａ）にはバイト単位の状態を図示したが、図１５（ｂ）に、これをビット毎にばらしたものを示す。この図においては、四角１つが内部レジスタの１ビットを表わし、そこに記された数値はその内部レジスタが保持する値が０から１３５ビットの内の何ビット目の値であるかを示す。一番左の縦の列の０ビット目から７ビット目が図１５（ａ）の一番左の四角１つ（１バイト）に相当し、左から２番目の縦の列の８ビット目から１５ビット目が図１５（ａ）の左から２番目の四角１つ（１バイト）に相当する。そして、レジスタ間に図示したような配線を設けることにより、８ビット目の値を１２８ビット目に、・・・、０ビット目の値を１２０ビット目に移動させる２バイトローテートを行うことができる。
【０１０２】
この図１５においては、信号の流れを分かりやすくするために配線だけを示しているが、実際の２バイトローテート回路には各配線上にセレクタが１段ずつ設けられ、２バイトローテート時の値とそれ以外の処理の場合の値を切り替えて、どちらの値を内部レジスタに保持させるかを選択できるように構成される。
【０１０３】
以下に、このラウンドサブキー生成回路の動作について説明する。入力される暗号キーのビット数で処理動作が異なるが、基本となる部分は同一であるので、ここでは図１４と図１６を用いて１２８ビットの暗号キーが入力された場合について、説明する。
【０１０４】
本実施形態のラウンドサブキー生成回路は、図２４に示した従来の回路のうち、出力セレクタ１４と加算器１５を削減することにより回路規模を縮小するものである。
【０１０５】
図１６は、本実施形態のラウンドサブキー生成回路における内部レジスタ１０の状態を時系列的に表したものである。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値は入力された暗号キーにおいて何バイト目の値であったかを示す。また、ラウンドサブキーの出力において、Ｋj［ｉ］は１２８ビットあるＫjのｉバイト目を出力することを示す。
【０１０６】
内部レジスタは、まず、時刻ｔ1において、入力された１２８ビット（１６バイト）の暗号キーを保持する。このとき、入力された暗号キー１６バイトにおいて同一位置にあるビットの値の排他的論理和を計算し、１７バイト目の値とする。それと同時に、内部レジスタの下位２バイトに保持される値を出力する。この場合には、Ｋ1の１バイト目と２バイト目であるＫ1［１］とＫ1［２］を出力する。
【０１０７】
次に、時刻ｔ2において、２バイトローテートを実行する。これにより、図１６に示すように、２バイトずつ左にローテートが行われ、最下位バイトであった値が最上位から２番目のバイトに移動し、最下位から２番目のバイトであった値が最上位バイトに移動する。そして、内部レジスタの最下位バイトの値となったＫ1［３］とＫ1［４］を出力する。
【０１０８】
これを時刻ｔ8まで繰り返すことにより、Ｋ1が下位のバイトから２バイトずつ順に出力され、１２８ビット全ての値が出力される。
【０１０９】
次に、時刻ｔ9と時刻ｔ10では２バイトローテートのみを行い、次のサブラウンドの１バイト目の値が内部レジスタの最下位バイトの位置に来るように調整を行う。
【０１１０】
次に、時刻ｔ11では、内部レジスタの全ての値に対して、バイト毎の内部で３ビットのローテートを実行し、これによりＫ2を出力する準備が完了する。それと同時に、Ｋ2［１］とＫ2［２］を出力する。
【０１１１】
以下、同様に２バイトローテートと３ビットローテートを行うことにより、出力セレクタを用いることなく、Ｋ1からＫ17の所望のラウンドサブキーにおける所望のバイト位置の値を得ることができる。
【０１１２】
一方、バイアス値を加算する際には、１ステップで出力される内部レジスタの値が１バイトとなるので、バイアステーブル１７から、サブラウンド数を指定するサブラウンド信号とバイト信号で決められる２バイトのバイアス値を出力する構成とする必要がある。なお、バイト信号は、内部レジスタの下位２バイトがラウンドサブキーの何バイト目の値であるかを示す信号である。
【０１１３】
入力された暗号キーが１９２ビットの場合、および２５６ビットの場合についても、同様の手順で所望のラウンドサブキーにおける所望のバイト位置の値を得ることが可能である。
【０１１４】
（実施形態６）
図１７は本実施形態の暗号鍵生成回路の構成を示すブロック図である。この回路は、ラウンドサブキー生成回路として、暗号化アルゴリズムＳＡＦＥＲ＋に組み込まれるものである。
【０１１５】
このラウンドサブキー生成回路２は、排他的論理和回路９と、内部レジスタ１０と、２バイト／３ビットローテート回路２１と、バイアステーブル１８と、２個の加算回路１５とを備えている。
【０１１６】
本実施形態のラウンドサブキー生成回路は、実施形態３の回路に比べて、２バイトローテートと３ビットローテートを同時に処理することにより、処理時間を短くし、かつ、回路規模を縮小するためのものである。
このために、図１７に示す２バイト／３ビットローテート回路２１を設けている。
【０１１７】
２バイト／３ビットローテート回路２１は、２バイトローテート回路の最下位バイトから最上位から２番目のバイトにバイトシフトする部分と、最下位から２番目のバイトから最上位バイトにバイトシフトする部分の２箇所に、図６に示したようにバイト内で３ビットローテートする回路を組み込んだものである。この回路を用いてローテートを行うと、通常はｊ＋１バイト目に保存されていた値がｊバイト目に移動してくるが、１バイト目に保存されていた値が３ビットローテートされて最上位から２番目のバイトに移動し、２バイト目に保存されていた値が３ビットローテートされて最上位バイトに移動する。また、この２バイト／３ビットローテート回路２１は、２バイト目の値をそのまま最上位バイトに移動させることも可能である。
【０１１８】
この２バイト／３ビットローテート回路２１は、図１８に示すように構成され、図１５の構成とほぼ同様であるが、それに加えて、最下位バイトから最上位から２番目のバイトへのローテートの箇所に常に３ビットローテートする回路が設けられ、最下位から２番目のバイトから最上位バイトへのローテートの箇所には３ビットローテートを行う場合と行わない場合とを切り替えるための配線、およびセレクタ（図に長方形で示す）が設けられる。このセレクタにより、３ビットローテートを行う箇所を１箇所にするか、または２箇所にするかを切り替えることが可能となる。
【０１１９】
この図においては、信号の流れを分かりやすくするために配線だけを示しているが、実際の２バイト／３ビットローテート回路２１には各レジスタのデータ入力の直前にセレクタが１段ずつ設けられ、２バイト／３ビットローテート時の値とそれ以外の処理の場合の値を切り替えて、どちらの値を内部レジスタに保持させるかを選択できるように構成される。
【０１２０】
以下に、このラウンドサブキー生成回路の動作について説明する。入力される暗号キーのビット数で処理動作が異なるが、基本となる部分は同一であるので、ここでは図１７と図１９を用いて１２８ビットの暗号キーが入力された場合について、説明する。
【０１２１】
本実施形態のラウンドサブキー生成回路は、図２４に示した従来の回路のうち、出力セレクタ１４と加算器１５を削減することにより回路規模を縮小するものである。このために、図１７に示す２バイトローテートと２バイトローテートの２箇所で３ビットローテートを同時に行う２バイト／３ビットローテート回路２１を設けている。このラウンドサブキー生成回路は、実施形態５の回路と同様に、内部レジスタの下位２バイトのみを出力する。
【０１２２】
図１９は、本実施形態のラウンドサブキー生成回路における内部レジスタ１０の状態を時系列的に表したものである。この図において、四角１つが内部レジスタの１バイトを表わし、そこに記された数値は入力された暗号キーにおいて何バイト目の値であったかを示す。また、ラウンドサブキーの出力において、Ｋj［ｉ］は１２８ビットあるＫjのｉバイト目を出力することを示す。
【０１２３】
内部レジスタは、まず、時刻ｔ1において、入力された１２８ビット（１６バイト）の暗号キーを保持する。このとき、入力された暗号キー１６バイトにおいて同一位置にあるビットの値の排他的論理和を計算し、１７バイト目の値とする。それと同時に、内部レジスタの下位２バイトに保持される値を出力する。この場合には、Ｋ1の１バイト目と２バイト目であるＫ1［１］とＫ1［２］を出力する。
【０１２４】
次に、時刻ｔ2において、２バイトローテートと３ビットローテート（最下位バイトから最上位から２番目のバイトへのシフトと、最下位から２番目のバイトから最上位バイトへのシフトのみ）を同時に行う。これにより、図１９に示すように、２バイトずつ左にローテートが行われ、最下位バイトであった値が最上位から２番目のバイトに移動すると共に、最下位から２番目のバイトであった値が最上位バイトに移動し、このとき同時に３ビットローテートも行われる。そして、内部レジスタの最下位バイトの値となったＫ1［３］とＫ1［４］を出力する。なお、この図では、３ビットローテート済みのバイトが分かるように、Ｋ1の処理を行っている間だけ、ローテート済みのバイトの数値を丸で囲っている。
【０１２５】
これを時刻ｔ8まで繰り返すことにより、Ｋ1が下位のバイトから２バイトずつ順に出力され、１２８ビット全ての値が出力される。
【０１２６】
次に、時刻ｔ9および時刻ｔ10では、２バイトローテートおよび３ビットローテートを同時に行い、次のサブラウンドの１バイト目の値が内部レジスタの最下位バイトの位置に来るように調整を行う。但し、時刻ｔ10では、最下位から２番目のバイトから最上位バイトへ移動するバイトに３ビットローテートを行うと、数字１が記されたバイトでは３ビットローテートが２回行われることになる。よって、このステップｔ10のみ、最下位バイトから最上位から２番目のバイトに移動する１バイトにのみ３ビットローテートを行う。時刻ｔ10までの処理が完了すると、内部レジスタの全てのバイトに丸が付いていることが分かる。これは、全てのバイトが３ビットローテートされたことを示し、Ｋ2を出力する準備が完了されていることが分かる。それと同時に、Ｋ2［１］とＫ2［２］を出力する。
【０１２７】
以下、同様に２バイトローテートと３ビットローテートを行うことにより、出力セレクタを用いることなく、Ｋ1からＫ17の所望のラウンドサブキーにおける所望のバイト位置の値を得ることができる。
【０１２８】
バイアステーブル１８は、実施形態５と同様に、サブラウンド数を指定するサブラウンド信号とバイト信号で決められる２バイトのバイアス値を出力する構成とする必要がある。
【０１２９】
入力された暗号キーが１９２ビットの場合、および２５６ビットの場合についても、同様の手順で所望のラウンドサブキーにおける所望のバイト位置の値を得ることが可能である。
【０１３０】
本実施形態では、３ビットローテートが２バイトローテートの中で同時に処理されるので、実施形態５の回路に比べて１サブラウンド毎に１ステップ分ずつ処理時間が短くなる。実施形態５では１６９ステップで処理できていたのに対して、本実施形態では１５２ステップで処理可能である。
【０１３１】
なお、上記実施形態ではラウンドサブキーを８ビット、１６ビット、１２８ビット毎に出力する構成について説明したが、本発明はこれに限られず、他のビット数（８×ｍ（但し、ｍは暗号キーのビット数をバイト表現にしたものの約数）ビット）毎に出力する場合についても、これに準じた方法で処理することが可能である。
【０１３２】
【発明の効果】
以上詳述したように、本発明によれば、暗号化に必要なラウンドサブキー全てを同時に計算するのではなく、サブラウンド毎に生成することにより、または１つのラウンドサブキーの中でも出力をさらに分割して１バイト毎や２バイト毎に計算することによりバイアス値を加算するための加算器を削減することができる。また、各バイトをローテートする回路を設けることにより、出力段におけるセレクタを不要にすることができる。よって、暗号化アルゴリズムＳＡＦＥＲ＋において使用されるラウンドサブキーを生成するための暗号鍵生成回路を小さな回路規模で実現することが可能となる。
【図面の簡単な説明】
【図１】実施形態１のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【図２】（ａ）および（ｂ）は、実施形態１のラウンドサブキー生成回路におけるバイトローテート回路の構成について説明するための図である。
【図３】実施形態１のラウンドサブキー生成回路における３ビットローテート回路の構成について説明するための図である。
【図４】実施形態１のラウンドサブキー生成回路の動作について説明するための図である。
【図５】実施形態２のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【図６】実施形態２のラウンドサブキー生成回路におけるバイト／３ビットローテート回路の動作について説明するための図である。
【図７】実施形態２のラウンドサブキー生成回路におけるバイト／３ビットローテート回路の構成について説明するための図である。
【図８】実施形態２のラウンドサブキー生成回路の動作について説明するための図である。
【図９】実施形態３のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【図１０】実施形態３のラウンドサブキー生成回路の動作について説明するための図である。
【図１１】実施形態４のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【図１２】実施形態４のラウンドサブキー生成回路におけるバイト／３ビットローテート回路の構成について説明するための図である。
【図１３】実施形態４のラウンドサブキー生成回路の動作について説明するための図である。
【図１４】実施形態５のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【図１５】（ａ）および（ｂ）は、実施形態５のラウンドサブキー生成回路における２バイトローテート回路の構成について説明するための図である。
【図１６】実施形態５のラウンドサブキー生成回路の動作について説明するための図である。
【図１７】実施形態６のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【図１８】実施形態６のラウンドサブキー生成回路における２バイト／３ビットローテート回路の構成について説明するための図である。
【図１９】実施形態６のラウンドサブキー生成回路の動作について説明するための図である。
【図２０】暗号化アルゴリズムＳＡＦＥＲ＋について説明するためのブロック図である。
【図２１】暗号キーが１２８ビットの場合のラウンドサブキー生成手順について説明するための図である。
【図２２】暗号キーが１９２ビットの場合のラウンドサブキー生成手順について説明するための図である。
【図２３】暗号キーが２５６ビットの場合のラウンドサブキー生成手順について説明するための図である。
【図２４】従来のラウンドサブキー生成回路の構成について説明するためのブロック図である。
【符号の説明】
１  ＳＡＦＥＲ＋アルゴリズム
２  ラウンドサブキー生成回路
３  暗号化回路
９  排他的論理和回路
１０  レジスタ
１１  バイトローテート回路
１２  ３ビットローテート回路
１３、１９  バイト／３ビットローテート回路
１４  出力セレクタ
１５  加算回路（加算器）
１６、１７、１８  バイアステーブル
２０  ２バイトローテート回路
２１  ２バイト／３ビットローテート回路
【図１】
0003770584.tif 000002
【図２】
0003770584.tif 000003
【図３】
0003770584.tif 000004
【図４】
0003770584.tif 000005
【図５】
0003770584.tif 000006
【図６】
0003770584.tif 000007
【図７】
0003770584.tif 000008
【図８】
0003770584.tif 000009
【図９】
0003770584.tif 000010
【図１０】
0003770584.tif 000011
【図１１】
0003770584.tif 000012
【図１２】
0003770584.tif 000013
【図１３】
0003770584.tif 000014
【図１４】
0003770584.tif 000015
【図１５】
0003770584.tif 000016
【図１６】
0003770584.tif 000017
【図１７】
0003770584.tif 000018
【図１８】
0003770584.tif 000019
【図１９】
0003770584.tif 000020
【図２０】
0003770584.tif 000021
【図２１】
0003770584.tif 000022
【図２２】
0003770584.tif 000023
【図２３】
0003770584.tif 000024
【図２４】
0003770584.tif 000025