(57)【特許請求の範囲】
【請求項１】
入力された平文データから所定のデータ長を有する単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の拡張鍵を生成しその内から１個の拡張鍵を前記単位データの生成毎に所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを暗号化する暗号化ブロックとを有し、前記平文データを暗号文データに暗号化して出力することを特徴とする暗号化装置。
【請求項２】
前記暗号化ブロックがＲｉｊｎｄａｅｌ方式の暗号化アルゴリズムを搭載し、前記単位データが該暗号化アルゴリズムにおいて暗号化処理の単位となる固定長データであることを特徴とする請求項１に記載の暗号化装置。
【請求項３】
前記鍵供給ブロックが、共通鍵を記憶する共通鍵レジスタと、該共通鍵レジスタから取り出した該共通鍵に所定の演算を行って前記拡張鍵を前記所定の順番で出力する鍵拡張ブロックとを有することを特徴とする請求項１または２に記載の暗号化装置。
【請求項４】
前記鍵拡張ブロックが、前記演算の種類を多数備え、外部から受け取った命令により前記演算の種類を決定することを特徴とする請求項３に記載の暗号化装置。
【請求項５】
前記暗号化ブロックが前記暗号文データを出力するとき、前記所定の順番を示すデータを出力することを特徴とする請求項１ないし４のいずれか１つに記載の暗号化装置。
【請求項６】
平文データを所定のデータ長を有する単位データ毎に分割し、共通鍵を元にして生成された複数の拡張鍵から前記単位データの生成毎に所定の順番で選択される１個の拡張鍵を元にして複数のラウンド鍵を生成し、該複数のラウンド鍵を使用して前記単位データを暗号化することにより前記平文データを暗号化した暗号文データを、前記平文データに復号化する復号化装置において、
入力された前記暗号文データから前記単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の前記拡張鍵を生成しその内から１個の拡張鍵を前記単位データの生成毎に前記所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを復号化する複合化ブロックと、を有することを特徴とする復号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共通鍵暗号化方式を使用する暗号化装置および復号化装置に関するものである。
【背景技術】
【０００２】
従来の共通鍵暗号化方式としては、ＤＥＳ（Data Encryption Standard）が主流となっていたが、近年ではデータ保守性の観点から、より強固な暗号化技術であるＡＥＳ（Advanced Encryption Standard）が使用されるようになっている。
【０００３】
ＡＥＳでは、Ｒｉｊｎｄａｅｌ（ラインダール）のアルゴリズムが使用される（特許文献１）。この暗号化アルゴリズムは、入力する平文データを１２８ビットの固定長データに順次分割して、１２８ビット毎にブロック暗号化するものである。すなわち、１２８ビットの平文データに対して行うSubByte／ShiftRow／MixColumn／AddRoundKeyの４つの演算処理を１ラウンドとして、複数ラウンド分を繰り返し適用するものである。このラウンド数は共通鍵のデータ長によって異なり、１２８ビット鍵では１１、１９２ビット鍵では１３、２５６ビット鍵では１５である。なお、最初のラウンドではAddRoundKeyの演算だけが行われ、最終のラウンドではMixColumnを除いた３つの演算が行われる。AddRoundKeyの演算はＸＯＲ演算であり、共通鍵を元に作成された複数のラウンド鍵を使用して行われる。このラウンド鍵の使用形態は、共通鍵を元に順次生成して使用する場合と、共通鍵を元にして複数を予め生成して保存しておいてこれを選択使用する場合がある（特許文献２）。
【特許文献１】特開２００６−２３５４４０号公報
【特許文献２】特開２００５−００４０４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところが、上記のＤＥＳやＡＥＳ等の共通鍵暗号化方式では、共通鍵が一旦決定されると、入力される平文のデータは、固定長データ毎に同じ共通鍵にて同じアルゴリズムで暗号化が行われるので、暗号化手法が如何に複雑であっても、その共通鍵が第三者に漏洩してしまうと、その共通鍵によって暗号化された暗号文データは容易に平文データに復号化されてしまう危険性がある。
【０００５】
本発明の目的は、共通鍵が第三者に漏洩した場合であっても、暗号文データの復号化が困難になった暗号化装置および復号化装置を提供することである。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、請求項１にかかる発明の暗号化装置は、入力された平文データから所定のデータ長を有する単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の拡張鍵を生成しその内から１個の拡張鍵を前記単位データの生成毎に所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを暗号化する暗号化ブロックとを有し、前記平文データを暗号文データに暗号化して出力することを特徴とする。
請求項２にかかる発明は、請求項１に記載の暗号化装置において、前記暗号化ブロックがＲｉｊｎｄａｅｌ方式の暗号化アルゴリズムを搭載し、前記単位データが該暗号化アルゴリズムにおいて暗号化処理の単位となる固定長データであることを特徴とす。
請求項３にかかる発明は、請求項１または２に記載の暗号化装置において、前記鍵供給ブロックが、共通鍵を記憶する共通鍵レジスタと、該共通鍵レジスタから取り出した該共通鍵に所定の演算を行って前記拡張鍵を前記所定の順番で出力する鍵拡張ブロックとを有することを特徴とする。
請求項４にかかる発明は、請求項３に記載の暗号化装置において、前記鍵拡張ブロックが、前記演算の種類を多数備え、外部から受け取った命令により前記演算の種類を決定することを特徴とする。
請求項５にかかる発明は、請求項１ないし４のいずれか１つに記載の暗号化装置において、前記暗号化ブロックが前記暗号文データを出力するとき、前記所定の順番を示すデータを出力することを特徴とする。
請求項６にかかる発明の復号化装置は、平文データを所定のデータ長を有する単位データ毎に分割し、共通鍵を元にして生成された複数の拡張鍵から前記単位データの生成毎に所定の順番で選択される１個の拡張鍵を元にして複数のラウンド鍵を生成し、該複数のラウンド鍵を使用して前記単位データを暗号化することにより前記平文データを暗号化した暗号文データを、前記平文データに復号化する復号化装置において、入力された前記暗号文データから前記単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の前記拡張鍵を生成しその内から１個の拡張鍵を前記単位データの生成毎に前記所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを復号化する複合化ブロックと、を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、共通鍵を元にして生成される複数の拡張鍵から、単位データの生成毎に所定の順番で１個の拡張鍵を選択し、その選択した拡張鍵を元にして複数のラウンド鍵を生成し、この複数のラウンド鍵を使用して単位データの暗号化処理を行うので、例え共通鍵が第三者に対して漏洩したとしても、当該第三者は当該共通鍵で直接的に複数のラウンド鍵を生成することになるので、本発明によって暗号化した暗号文データの復号は不可能であり、その秘匿性を保持することができる。さらに、鍵拡張ブロックが、演算の種類を多数備え、外部から受け取った命令によりその演算の種類を決定するようにすれば、その秘匿性がより向上する。
【発明を実施するための最良の形態】
【０００８】
図１は鍵データ長が１２８ビットの共通鍵を使用するＡＥＳ方式を適用した本発明の実施例の暗号化／復号化装置の全体構成を示すブロック図である。１は入力する平文データdin（例えば、ストリームデータ）を１２８ビット単位で取り込むデータレジスタ、２は４−１のセレクタ、３は外部から入力された１２８ビットの共通鍵を格納する共通鍵レジスタ、４は入力される１２８ビットのデータに対してＸＯＲ演算を行うAddRoundKeyブロック、５は共通鍵レジスタ３に格納した共通鍵を元に演算を行って１２８ビットの複数の異なる拡張鍵を生成する鍵拡張ブロック、６は３−１のセレクタ、７はＡＥＳ暗号化アルゴリズム搭載ブロック、８はＡＥＳ復号化アルゴリズム搭載ブロック、９は全体を制御する制御ブロックである。なお、請求項との関連では、データレジスタ１が単位データ生成ブロックの一例に、共通鍵レジスタ３と鍵拡張ブロック５が鍵供給ブロックの一例に、AddRoundKeyブロック４とＡＥＳ暗号化アルゴリズム搭載ブロック７が暗号化ブロックの一例に、AddRoundKeyブロック４とＡＥＳ復号化アルゴリズム搭載ブロック８が復号化ブロックの一例に、それぞれ相当する。
【０００９】
AddRoundKeyブロック４は、鍵拡張ブロック５から取り込んだ１つの拡張鍵を元に１２８ビットの１１個のラウンド鍵を生成すると共に、その内の１つのラウンド鍵を使用して１２８ビットデータに対して、ラウンド毎にＸＯＲ処理を行う。
【００１０】
鍵拡張ブロック５は、図２に示すような複数の鍵拡張シーケンス「０００」、「００１」、・・・、「１０１」の演算式を内蔵し、その内の１つをホストのＣＰＵで指定して、共通鍵の演算を行って拡張鍵を生成する。例えば、その内の１つのシーケンス「０００」がホストのＣＰＵで指定されたときは、共通鍵レジスタ４から渡された１２８ビットの共通鍵に対して、データレジスタ１に１２８ビットの平文データが入力する毎に、図３に示す順序の演算処理、つまり＋１→−１→左シフト→右シフト→右シフト→左シフト→＋１→−１→・・・の演算処理をエンドレスに繰り返す。この演算により、１つの共通鍵から複数の異なる拡張鍵が順番に生成され、AddRoundKeyブロック４に供給される。ただし、演算処理の種類および順番によっては、生成される拡張鍵の中に共通のものが含まれることもある。別のシーケンス「００１」〜「１０１」のいずれかが指定されたときも、図３に示す順序の演算で同様にエンドレスに１つの共通鍵から複数の拡張鍵が生成される。また、この鍵拡張ブロック５は、今回使用した鍵拡張シーケンスがいずれのシーケンスであるかを示す信号key_infoを出力する。
【００１１】
ＡＥＳ暗号化アルゴリズム搭載ブロック７は、１２８ビットを１６個の１バイト（８ビット）データに分割し置換処理するSubByte処理部７１、１６個の１バイトデータを４行４列に並べて行の左シフト処理を行うShiftRow処理部７２、左シフト処理された４行４列のブロックを同列毎に列ベクトル変換の処理を行うMixColumn処理部７３を備える。また、ＡＥＳ復号化アルゴリズム搭載ブロック８は、ShiftRow処理部７２でのシフト処理と逆のシフト処理を行うInvShiftRow処理部８１、SubByte処理７１での置換処理と逆の置換処理を行うInvSubByte処理部８２を備える。
【００１２】
制御ブロック９は、暗号化／復号化のスタート信号start、暗号化／復号化の選択信号enc/dec、データイネーブル信号ackを入力し、データ入力準備ＯＫのときアサートされる信号ready、出力データdoutが有効であることを示す信号validを出力する。そして、データレジスタ１、セレクタ２，６、AddRoundKeyブロック４、その他を制御する。
【００１３】
さて、共通鍵レジスタ３に共通鍵が格納されているものとすると、暗号化に際しては、信号enc/decで暗号化が指示され、信号startで処理スタートが指令されると、前段装置（図示せず）に対して信号readyがアサートされ、当該前段装置から到来する信号ackが有効になると、当該前段装置から入力データdinとして平文データが１２８ビット分転送され、データレジスタ１に格納される。
【００１４】
鍵拡張ブロック５において、ホストのＣＰＵによって、例えば図２の鍵拡張シーケンス「０００」が指定されているときは、そのシーケンスの識別情報が信号key_infoによって出力される。また、このときデータレジスタ１に格納される１２８ビットのデータは平文データの先頭データであるので、共通鍵レジスタ３に格納されている共通鍵に対して、「＋１」が処理された第１の拡張鍵が生成され、AddRoundKeyブロック４に入力される。
【００１５】
前記１２８ビットデータがセレクタ２からAddRoundKeyブロック４に取り込まれると、その１２８ビットデータに対して、上記第１の拡張鍵を元にして生成された第１ラウンド鍵でＸＯＲのAddRoundKey処理が行われる。そして、AddRoundKey処理された１２８ビットデータは、セレクタ６を介してＡＥＳ暗号化アルゴリズム搭載ブロック７に取り込まれ、ここでSubByte処理、ShiftRow処理、MixColumn処理が順次施される。そして、セレクタ２を介して再びAddRoundKeyブロック４に取り込まれ、今度は第２ラウンド鍵でＸＯＲのAddRoundKey処理が行われる。この第２ラウンド鍵は、上記第１ラウンド鍵を元にして生成された２番目のラウンド鍵である。そして、AddRoundKey処理された１２８ビットデータは、ＡＥＳ暗号化アルゴリズム搭載ブロック７において上記同様の処理が行われて再度AddRoundKeyブロック４に取り込まれ、今度は第３ラウンド鍵でＸＯＲのAddRoundKey処理が行われる。以下、ラウンド鍵を順次更新しながらAddRoundKeyブロック４とＡＥＳ暗号化アルゴリズム搭載ブロック７による暗号化処理が１０回繰り返される。１１回目の暗号化処理では、ＡＥＳ暗号化アルゴリズム搭載ブロック７でSubByte処理とShiftRow処理のみが行われて、AddRoundKeyブロック４に取り込まれ、第１１ラウンド鍵でAddRoundKey処理が行われ、これにより先頭の１２８ビットの平文データに対する暗号化が完了して、セレクタ６から１２８ビットの暗号文の出力データdoutとして出力する。このとき、信号validによって暗号文データdoutが有効であることが示される。
【００１６】
データレジスタ１に次の１２８ビットの平文データが取り込まれると、今度は、鍵拡張ブロック５から、前記第１拡張鍵に対し「−１」された第２拡張鍵がAddRoundKeyブロック４に入力される。そして、AddRoundKeyブロック４では、この第２拡張鍵を元にして第１ラウンド鍵〜第１１ラウンド鍵が生成されて、上記と同様なAddRoundKeyブロック４とＡＥＳ暗号化アルゴリズム搭載ブロック７による暗号化処理が行われ、セレクタ６から次の１２８ビットの暗号文の出力データdoutとして出力する。
【００１７】
以下、順次入力される平文データの１２８ビット毎に、異なる拡張鍵がシーケンス「０００」に従って順次更新して生成され、AddRoundKeyブロック４に入力される。そして、この拡張鍵を元にして生成された１１個のラウンド鍵によって１２８ビット当りのAddRoundKeyブロック４とＡＥＳ暗号化アルゴリズム搭載ブロック７による暗号化処理が繰り返し行われる。
【００１８】
次に、復号化に際しては、信号enc/decで復号化が指示され、信号startで処理スタートが指令されると、前段装置（図示せず）に対して信号readyがアサートされ、当該前段装置から到来する信号ackが有効になると、当該前段装置から入力データdinとして暗号文データが１２８ビット分転送され、データレジスタ１に格納されて、AddRoundKeyブロック４とＡＥＳ復号化アルゴリズム搭載ブロック８により復号化処理が行われる。このときは暗号化の時と同じ共通鍵が使用され、信号key_infoをホストのＣＰＵが取り込むことで、同じ鍵拡張シーケンスが鍵拡張ブロック５に指定されるので、各１２８ビットの単位データの復号化には、暗号化のときと同じ拡張鍵が使用される。復号化処理では、AddRoundKeyブロック４で生成されるラウンド鍵の順序が前記暗号化の場合と逆になる。
【００１９】
なお、復号化では、暗号文データの先頭の１２８ビットの単位データのAddRoundKeyブロック４への取り込みタイミングと鍵拡張ブロック５からの拡張鍵のAddRoundKeyブロック４への供給タイミングを揃える必要があるが、これは、暗号文データの先頭に鍵拡張ブロック５での鍵拡張シーケンスの演算の開始タイミングを表すエンジンスタート信号を、前記信号key_infoと共に送付することで解決できる。
【００２０】
以上説明した実施例では、鍵拡張ブロック５で指定される拡張シーケンスが、図２の「０００」、「００１」、・・・、「１０１」のいずれかである場合、つまり図２の縦方向のシーケンスの演算のいずれかである場合について説明したが、図２の横方向のシーケンスの演算を指定することもできる。この場合は、「ａ」、「ｂ」、・・・、「ｆ」のいずれかの拡張シーケンスを指定して、図４に示す順序の演算で拡張鍵を生成すればよい。
【００２１】
また、以上説明した実施例では、拡張シーケンスを多数内蔵させておき、外部のホストのＣＰＵから指定することにより鍵拡張ブロック５で使用される拡張シーケンス、つまり演算の種類が決定されるようにしているが、暗号化／復号化装置内に所定の拡張シーケンスを予め設定しておくこともできる。この場合は、ホストのＣＰＵが信号key_infoを監視する必要がなく、また決定した拡張シーケンスを信号key_infoとして出力する必要もなく、転送する暗号文データのビット幅を増やす必要がなくなる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施例の暗号化／復号化装置の構成を示すブロック図である。
【図２】鍵拡張ブロックで使用する鍵拡張シーケンスの説明図である。
【図３】鍵拡張シーケンス「０００」、「００１」、・・・、「１０１」を使用するときの拡張鍵変化順の説明図である。
【図４】鍵拡張シーケンス「ａ」、「ｂ」、・・・、「ｆ」を使用するときの拡張鍵変化順の説明図である。
【符号の説明】
【００２３】
１：データレジスタ、２：セレクタ、３：共通鍵レジスタ、４：AddRoundKeyブロック、５：鍵拡張ブロック、６：セレクタ、７：ＡＥＳ暗号化アルゴリズム搭載ブロック、８：ＡＥＳ復号化アルゴリズム搭載ブロック。
【図１】
0005020115.tif 000002
【図２】
0005020115.tif 000003
【図３】
0005020115.tif 000004
【図４】
0005020115.tif 000005