説明

暗号化装置および復号化装置

【課題】共通鍵が第三者に漏洩した場合であっても、暗号文データの復号化を困難にさせる。
【解決手段】入力された平文データから128ビットの単位データを取り込むデータレジスタ1と、共通鍵を格納する共通鍵レジスタ3と、共通鍵レジスタ3に格納した共通鍵を元にして前記単位データの取り込み毎に異なる拡張鍵を生成する鍵拡張ブロック5と、該鍵拡張ブロック5で生成した拡張鍵を入力して複数のラウンド鍵を生成し、データレジスタ1から供給された単位データを暗号化するAddRoundKeyブロック4およびAES暗号化アルゴリズム搭載ブロック7とを備え、前記平文データを暗号文データに暗号化して出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、共通鍵暗号化方式を使用する暗号化装置および復号化装置に関するものである。
【背景技術】
【0002】
従来の共通鍵暗号化方式としては、DES(Data Encryption Standard)が主流となっていたが、近年ではデータ保守性の観点から、より強固な暗号化技術であるAES(Advanced Encryption Standard)が使用されるようになっている。
【0003】
AESでは、Rijndael(ラインダール)のアルゴリズムが使用される(特許文献1)。この暗号化アルゴリズムは、入力する平文データを128ビットの固定長データに順次分割して、128ビット毎にブロック暗号化するものである。すなわち、128ビットの平文データに対して行うSubByte/ShiftRow/MixColumn/AddRoundKeyの4つの演算処理を1ラウンドとして、複数ラウンド分を繰り返し適用するものである。このラウンド数は共通鍵のデータ長によって異なり、128ビット鍵では11、192ビット鍵では13、256ビット鍵では15である。なお、最初のラウンドではAddRoundKeyの演算だけが行われ、最終のラウンドではMixColumnを除いた3つの演算が行われる。AddRoundKeyの演算はXOR演算であり、共通鍵を元に作成された複数のラウンド鍵を使用して行われる。このラウンド鍵の使用形態は、共通鍵を元に順次生成して使用する場合と、共通鍵を元にして複数を予め生成して保存しておいてこれを選択使用する場合がある(特許文献2)。
【特許文献1】特開2006−235440号公報
【特許文献2】特開2005−004048号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところが、上記のDESやAES等の共通鍵暗号化方式では、共通鍵が一旦決定されると、入力される平文のデータは、固定長データ毎に同じ共通鍵にて同じアルゴリズムで暗号化が行われるので、暗号化手法が如何に複雑であっても、その共通鍵が第三者に漏洩してしまうと、その共通鍵によって暗号化された暗号文データは容易に平文データに復号化されてしまう危険性がある。
【0005】
本発明の目的は、共通鍵が第三者に漏洩した場合であっても、暗号文データの復号化が困難になった暗号化装置および復号化装置を提供することである。
【課題を解決するための手段】
【0006】
上記目的を達成するために、請求項1にかかる発明の暗号化装置は、入力された平文データから所定のデータ長を有する単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の拡張鍵を生成しその内から1個の拡張鍵を前記単位データの生成毎に所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを暗号化する暗号化ブロックとを有し、前記平文データを暗号文データに暗号化して出力することを特徴とする。
請求項2にかかる発明は、請求項1に記載の暗号化装置において、前記暗号化ブロックがRijndael方式の暗号化アルゴリズムを搭載し、前記単位データが該暗号化アルゴリズムにおいて暗号化処理の単位となる固定長データであることを特徴とす。
請求項3にかかる発明は、請求項1または2に記載の暗号化装置において、前記鍵供給ブロックが、共通鍵を記憶する共通鍵レジスタと、該共通鍵レジスタから取り出した該共通鍵に所定の演算を行って前記拡張鍵を前記所定の順番で出力する鍵拡張ブロックとを有することを特徴とする。
請求項4にかかる発明は、請求項3に記載の暗号化装置において、前記鍵拡張ブロックが、前記演算の種類を多数備え、外部から受け取った命令により前記演算の種類を決定することを特徴とする。
請求項5にかかる発明は、請求項1ないし4のいずれか1つに記載の暗号化装置において、前記暗号化ブロックが前記暗号文データを出力するとき、前記所定の順番を示すデータを出力することを特徴とする。
請求項6にかかる発明の復号化装置は、平文データを所定のデータ長を有する単位データ毎に分割し、共通鍵を元にして生成された複数の拡張鍵から前記単位データの生成毎に所定の順番で選択される1個の拡張鍵を元にして複数のラウンド鍵を生成し、該複数のラウンド鍵を使用して前記単位データを暗号化することにより前記平文データを暗号化した暗号文データを、前記平文データに復号化する復号化装置において、入力された前記暗号文データから前記単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の前記拡張鍵を生成しその内から1個の拡張鍵を前記単位データの生成毎に前記所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを復号化する複合化ブロックと、を有することを特徴とする。
【発明の効果】
【0007】
本発明によれば、共通鍵を元にして生成される複数の拡張鍵から、単位データの生成毎に所定の順番で1個の拡張鍵を選択し、その選択した拡張鍵を元にして複数のラウンド鍵を生成し、この複数のラウンド鍵を使用して単位データの暗号化処理を行うので、例え共通鍵が第三者に対して漏洩したとしても、当該第三者は当該共通鍵で直接的に複数のラウンド鍵を生成することになるので、本発明によって暗号化した暗号文データの復号は不可能であり、その秘匿性を保持することができる。さらに、鍵拡張ブロックが、演算の種類を多数備え、外部から受け取った命令によりその演算の種類を決定するようにすれば、その秘匿性がより向上する。
【発明を実施するための最良の形態】
【0008】
図1は鍵データ長が128ビットの共通鍵を使用するAES方式を適用した本発明の実施例の暗号化/復号化装置の全体構成を示すブロック図である。1は入力する平文データdin(例えば、ストリームデータ)を128ビット単位で取り込むデータレジスタ、2は4−1のセレクタ、3は外部から入力された128ビットの共通鍵を格納する共通鍵レジスタ、4は入力される128ビットのデータに対してXOR演算を行うAddRoundKeyブロック、5は共通鍵レジスタ3に格納した共通鍵を元に演算を行って128ビットの複数の異なる拡張鍵を生成する鍵拡張ブロック、6は3−1のセレクタ、7はAES暗号化アルゴリズム搭載ブロック、8はAES復号化アルゴリズム搭載ブロック、9は全体を制御する制御ブロックである。なお、請求項との関連では、データレジスタ1が単位データ生成ブロックの一例に、共通鍵レジスタ3と鍵拡張ブロック5が鍵供給ブロックの一例に、AddRoundKeyブロック4とAES暗号化アルゴリズム搭載ブロック7が暗号化ブロックの一例に、AddRoundKeyブロック4とAES復号化アルゴリズム搭載ブロック8が復号化ブロックの一例に、それぞれ相当する。
【0009】
AddRoundKeyブロック4は、鍵拡張ブロック5から取り込んだ1つの拡張鍵を元に128ビットの11個のラウンド鍵を生成すると共に、その内の1つのラウンド鍵を使用して128ビットデータに対して、ラウンド毎にXOR処理を行う。
【0010】
鍵拡張ブロック5は、図2に示すような複数の鍵拡張シーケンス「000」、「001」、・・・、「101」の演算式を内蔵し、その内の1つをホストのCPUで指定して、共通鍵の演算を行って拡張鍵を生成する。例えば、その内の1つのシーケンス「000」がホストのCPUで指定されたときは、共通鍵レジスタ4から渡された128ビットの共通鍵に対して、データレジスタ1に128ビットの平文データが入力する毎に、図3に示す順序の演算処理、つまり+1→−1→左シフト→右シフト→右シフト→左シフト→+1→−1→・・・の演算処理をエンドレスに繰り返す。この演算により、1つの共通鍵から複数の異なる拡張鍵が順番に生成され、AddRoundKeyブロック4に供給される。ただし、演算処理の種類および順番によっては、生成される拡張鍵の中に共通のものが含まれることもある。別のシーケンス「001」〜「101」のいずれかが指定されたときも、図3に示す順序の演算で同様にエンドレスに1つの共通鍵から複数の拡張鍵が生成される。また、この鍵拡張ブロック5は、今回使用した鍵拡張シーケンスがいずれのシーケンスであるかを示す信号key_infoを出力する。
【0011】
AES暗号化アルゴリズム搭載ブロック7は、128ビットを16個の1バイト(8ビット)データに分割し置換処理するSubByte処理部71、16個の1バイトデータを4行4列に並べて行の左シフト処理を行うShiftRow処理部72、左シフト処理された4行4列のブロックを同列毎に列ベクトル変換の処理を行うMixColumn処理部73を備える。また、AES復号化アルゴリズム搭載ブロック8は、ShiftRow処理部72でのシフト処理と逆のシフト処理を行うInvShiftRow処理部81、SubByte処理71での置換処理と逆の置換処理を行うInvSubByte処理部82を備える。
【0012】
制御ブロック9は、暗号化/復号化のスタート信号start、暗号化/復号化の選択信号enc/dec、データイネーブル信号ackを入力し、データ入力準備OKのときアサートされる信号ready、出力データdoutが有効であることを示す信号validを出力する。そして、データレジスタ1、セレクタ2,6、AddRoundKeyブロック4、その他を制御する。
【0013】
さて、共通鍵レジスタ3に共通鍵が格納されているものとすると、暗号化に際しては、信号enc/decで暗号化が指示され、信号startで処理スタートが指令されると、前段装置(図示せず)に対して信号readyがアサートされ、当該前段装置から到来する信号ackが有効になると、当該前段装置から入力データdinとして平文データが128ビット分転送され、データレジスタ1に格納される。
【0014】
鍵拡張ブロック5において、ホストのCPUによって、例えば図2の鍵拡張シーケンス「000」が指定されているときは、そのシーケンスの識別情報が信号key_infoによって出力される。また、このときデータレジスタ1に格納される128ビットのデータは平文データの先頭データであるので、共通鍵レジスタ3に格納されている共通鍵に対して、「+1」が処理された第1の拡張鍵が生成され、AddRoundKeyブロック4に入力される。
【0015】
前記128ビットデータがセレクタ2からAddRoundKeyブロック4に取り込まれると、その128ビットデータに対して、上記第1の拡張鍵を元にして生成された第1ラウンド鍵でXORのAddRoundKey処理が行われる。そして、AddRoundKey処理された128ビットデータは、セレクタ6を介してAES暗号化アルゴリズム搭載ブロック7に取り込まれ、ここでSubByte処理、ShiftRow処理、MixColumn処理が順次施される。そして、セレクタ2を介して再びAddRoundKeyブロック4に取り込まれ、今度は第2ラウンド鍵でXORのAddRoundKey処理が行われる。この第2ラウンド鍵は、上記第1ラウンド鍵を元にして生成された2番目のラウンド鍵である。そして、AddRoundKey処理された128ビットデータは、AES暗号化アルゴリズム搭載ブロック7において上記同様の処理が行われて再度AddRoundKeyブロック4に取り込まれ、今度は第3ラウンド鍵でXORのAddRoundKey処理が行われる。以下、ラウンド鍵を順次更新しながらAddRoundKeyブロック4とAES暗号化アルゴリズム搭載ブロック7による暗号化処理が10回繰り返される。11回目の暗号化処理では、AES暗号化アルゴリズム搭載ブロック7でSubByte処理とShiftRow処理のみが行われて、AddRoundKeyブロック4に取り込まれ、第11ラウンド鍵でAddRoundKey処理が行われ、これにより先頭の128ビットの平文データに対する暗号化が完了して、セレクタ6から128ビットの暗号文の出力データdoutとして出力する。このとき、信号validによって暗号文データdoutが有効であることが示される。
【0016】
データレジスタ1に次の128ビットの平文データが取り込まれると、今度は、鍵拡張ブロック5から、前記第1拡張鍵に対し「−1」された第2拡張鍵がAddRoundKeyブロック4に入力される。そして、AddRoundKeyブロック4では、この第2拡張鍵を元にして第1ラウンド鍵〜第11ラウンド鍵が生成されて、上記と同様なAddRoundKeyブロック4とAES暗号化アルゴリズム搭載ブロック7による暗号化処理が行われ、セレクタ6から次の128ビットの暗号文の出力データdoutとして出力する。
【0017】
以下、順次入力される平文データの128ビット毎に、異なる拡張鍵がシーケンス「000」に従って順次更新して生成され、AddRoundKeyブロック4に入力される。そして、この拡張鍵を元にして生成された11個のラウンド鍵によって128ビット当りのAddRoundKeyブロック4とAES暗号化アルゴリズム搭載ブロック7による暗号化処理が繰り返し行われる。
【0018】
次に、復号化に際しては、信号enc/decで復号化が指示され、信号startで処理スタートが指令されると、前段装置(図示せず)に対して信号readyがアサートされ、当該前段装置から到来する信号ackが有効になると、当該前段装置から入力データdinとして暗号文データが128ビット分転送され、データレジスタ1に格納されて、AddRoundKeyブロック4とAES復号化アルゴリズム搭載ブロック8により復号化処理が行われる。このときは暗号化の時と同じ共通鍵が使用され、信号key_infoをホストのCPUが取り込むことで、同じ鍵拡張シーケンスが鍵拡張ブロック5に指定されるので、各128ビットの単位データの復号化には、暗号化のときと同じ拡張鍵が使用される。復号化処理では、AddRoundKeyブロック4で生成されるラウンド鍵の順序が前記暗号化の場合と逆になる。
【0019】
なお、復号化では、暗号文データの先頭の128ビットの単位データのAddRoundKeyブロック4への取り込みタイミングと鍵拡張ブロック5からの拡張鍵のAddRoundKeyブロック4への供給タイミングを揃える必要があるが、これは、暗号文データの先頭に鍵拡張ブロック5での鍵拡張シーケンスの演算の開始タイミングを表すエンジンスタート信号を、前記信号key_infoと共に送付することで解決できる。
【0020】
以上説明した実施例では、鍵拡張ブロック5で指定される拡張シーケンスが、図2の「000」、「001」、・・・、「101」のいずれかである場合、つまり図2の縦方向のシーケンスの演算のいずれかである場合について説明したが、図2の横方向のシーケンスの演算を指定することもできる。この場合は、「a」、「b」、・・・、「f」のいずれかの拡張シーケンスを指定して、図4に示す順序の演算で拡張鍵を生成すればよい。
【0021】
また、以上説明した実施例では、拡張シーケンスを多数内蔵させておき、外部のホストのCPUから指定することにより鍵拡張ブロック5で使用される拡張シーケンス、つまり演算の種類が決定されるようにしているが、暗号化/復号化装置内に所定の拡張シーケンスを予め設定しておくこともできる。この場合は、ホストのCPUが信号key_infoを監視する必要がなく、また決定した拡張シーケンスを信号key_infoとして出力する必要もなく、転送する暗号文データのビット幅を増やす必要がなくなる。
【図面の簡単な説明】
【0022】
【図1】本発明の実施例の暗号化/復号化装置の構成を示すブロック図である。
【図2】鍵拡張ブロックで使用する鍵拡張シーケンスの説明図である。
【図3】鍵拡張シーケンス「000」、「001」、・・・、「101」を使用するときの拡張鍵変化順の説明図である。
【図4】鍵拡張シーケンス「a」、「b」、・・・、「f」を使用するときの拡張鍵変化順の説明図である。
【符号の説明】
【0023】
1:データレジスタ、2:セレクタ、3:共通鍵レジスタ、4:AddRoundKeyブロック、5:鍵拡張ブロック、6:セレクタ、7:AES暗号化アルゴリズム搭載ブロック、8:AES復号化アルゴリズム搭載ブロック。

【特許請求の範囲】
【請求項1】
入力された平文データから所定のデータ長を有する単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の拡張鍵を生成しその内から1個の拡張鍵を前記単位データの生成毎に所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを暗号化する暗号化ブロックとを有し、前記平文データを暗号文データに暗号化して出力することを特徴とする暗号化装置。
【請求項2】
前記暗号化ブロックがRijndael方式の暗号化アルゴリズムを搭載し、前記単位データが該暗号化アルゴリズムにおいて暗号化処理の単位となる固定長データであることを特徴とする請求項1に記載の暗号化装置。
【請求項3】
前記鍵供給ブロックが、共通鍵を記憶する共通鍵レジスタと、該共通鍵レジスタから取り出した該共通鍵に所定の演算を行って前記拡張鍵を前記所定の順番で出力する鍵拡張ブロックとを有することを特徴とする請求項1または2に記載の暗号化装置。
【請求項4】
前記鍵拡張ブロックが、前記演算の種類を多数備え、外部から受け取った命令により前記演算の種類を決定することを特徴とする請求項3に記載の暗号化装置。
【請求項5】
前記暗号化ブロックが前記暗号文データを出力するとき、前記所定の順番を示すデータを出力することを特徴とする請求項1ないし4のいずれか1つに記載の暗号化装置。
【請求項6】
平文データを所定のデータ長を有する単位データ毎に分割し、共通鍵を元にして生成された複数の拡張鍵から前記単位データの生成毎に所定の順番で選択される1個の拡張鍵を元にして複数のラウンド鍵を生成し、該複数のラウンド鍵を使用して前記単位データを暗号化することにより前記平文データを暗号化した暗号文データを、前記平文データに復号化する復号化装置において、
入力された前記暗号文データから前記単位データを順次生成する単位データ生成ブロックと、共通鍵を元にして複数の前記拡張鍵を生成しその内から1個の拡張鍵を前記単位データの生成毎に前記所定の順番で供給する鍵供給ブロックと、該鍵供給ブロックから供給される拡張鍵を元に生成される複数のラウンド鍵を使用して前記単位データ生成ブロックから供給された単位データを復号化する複合化ブロックと、を有することを特徴とする復号化装置。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate