説明

暗号演算装置

【課題】共通鍵暗号方式の複数の暗号利用モードの演算を行う。
【解決手段】暗号演算装置1は、共通鍵演算部4と、排他的論理和演算部5と、乗算部7と、制御部16とを備える。共通鍵演算部4は、共通鍵暗号方式の第1暗号利用モードおよび第2暗号利用モードの演算を行う。排他的論理和演算部5は、排他的論理和を演算する。乗算部7は、ガロア体上の乗算を行う。制御部16は、第1暗号利用モードの演算が指定された場合に、入力データ10’を第1暗号利用モードで演算した出力データを算出する演算処理を制御し、第2暗号利用モードの演算が指定された場合に、入力データを第2暗号利用モードで演算した出力データ19を算出する演算処理を制御する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、暗号演算装置に関する。
【背景技術】
【0002】
共通鍵方式の暗号アルゴリズムは、予め定められたブロック長のデータを秘匿化することを目的に設計されている。このため、共通鍵方式の暗号アルゴリズムを用いてブロック長より長いデータの秘匿化を行えるような演算方法や、元のデータの改ざん検出のための認証子を生成する演算方法などが開発されている。このような、共通鍵暗号方式を基本として様々な用途に向いた演算方法は、暗号利用モードと呼ばれる。
【0003】
標準的な暗号利用モードとしては、FIPS PUB SP800シリーズで公開されている。例えば、ブロック長よりも長いデータを暗号化するため演算方法として、FIPS PUB SP800−38Aに開示されているCBCモードがある。
【0004】
このCBCモードでは、ストレージデバイスに保存する際に、暗号化する前のデータと暗号化した後のデータのデータ長が異なることがある。具体的には、暗号化する前のデータの長さがブロック長の整数倍ではないとき、暗号化したデータのデータ長は、暗号化前のデータのデータ長よりも長くなる。そこで、暗号化する際に、データ長が変化しない暗号利用モードが求められ、ストレージデバイス用の暗号利用モードが開発された。
【0005】
ストレージデバイスに保存するデータの暗号利用モードについては、IEEE P1619−Std−2007で規格化されている。また、IEEE P1619−Std−2007で規格化されている暗号利用モードは、暗号利用モードを定めたFIPS PUB SP800−38シリーズにSP800−38E(XTS mode)として採用されている。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】FIPS PUB SP800−38E
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、従来は、CBCモードが主に利用されている。従って、従来のシステムとの互換性を維持するためには、ストレージデバイス内のデータの暗号化方式として、XTSモードだけではなく、従来のCBCモードにも対応する必要がある。すなわち、XTSモードとCBCモードの2つの利用モードに対応した暗号化回路が必要である。
【課題を解決するための手段】
【0008】
実施形態の暗号演算装置は、共通鍵演算部と、排他的論理和演算部と、乗算部と、制御部とを備える。共通鍵演算部は、共通鍵暗号方式の第1暗号利用モードおよび第2暗号利用モードの演算を行う。排他的論理和演算部は、排他的論理和を演算する。乗算部は、ガロア体上の乗算を行う。制御部は、第1暗号利用モードの演算が指定された場合に、入力データを第1暗号利用モードで演算した出力データを算出する第1演算処理を制御し、第2暗号利用モードの演算が指定された場合に、入力データを第2暗号利用モードで演算した出力データを算出する第2演算処理を制御する。
【図面の簡単な説明】
【0009】
【図1】第1の実施形態にかかる暗号演算装置の回路構成図。
【図2】第1の実施形態におけるXTSモードの演算処理のフローチャート。
【図3】第1の実施形態におけるCBCモードの暗号演算のフローチャート。
【図4】第1の実施形態におけるCBCモードの復号演算のフローチャート。
【図5】第2の実施形態にかかる暗号演算装置の回路構成図。
【発明を実施するための形態】
【0010】
以下に添付図面を参照して、この発明にかかる暗号演算装置の好適な実施形態を詳細に説明する。
【0011】
(第1の実施形態)
第1の実施形態にかかる暗号演算装置は、XTSモードとCBCモードとで利用する演算部(回路)で共通化可能な演算部を共通化する。そして、各演算部を、指定された暗号利用モードに応じた演算を実行するように制御する。
【0012】
図1は、第1の実施形態にかかる暗号演算装置1の回路構成の一例を示すブロック図である。図1に示すように、暗号演算装置1は、セレクタ2と、排他的論理和演算部3と、共通鍵演算部4と、排他的論理和演算部5と、セレクタ6と、乗算部7と、セレクタ8と、マスク値レジスタ9と、制御部16と、分割部20と、を備えている。暗号演算装置1は、鍵選択部15に接続されている。
【0013】
鍵選択部15は、制御部16からの指示に応じた鍵データを選択して共通鍵演算部4に出力する。なお、鍵選択部15を暗号演算装置1内に備えるように構成してもよい。
【0014】
分割部20は、暗号演算装置1に入力された暗号演算または復号演算の対象となる入力データ10’を所定の長さ(固定長)に分割する。例えば、分割部20は、入力データ10’を、128ビット長のブロックに分割する。なお、分割部20を暗号演算装置1の外部に備えるように構成してもよい。以下では、分割部20により入力データ10’を固定長に分割したデータを単位として処理が行われる。以下では入力データ10’を分割したデータを入力データ信号10という。
【0015】
セレクタ2は、制御部16からの指示に応じて、入力データ信号10および初期値入力信号11のいずれかを選択する。排他的論理和演算部3は、セレクタ2の出力とセレクタ6の出力との排他的論理和を算出する。
【0016】
共通鍵演算部4は、排他的論理和演算部3の演算結果と鍵選択部15により選択された鍵データとを用いて、制御部16により指示された暗号利用モードでの演算を実行する。本実施形態では、共通鍵演算部4は、共通鍵方式(ブロック暗号方式)の暗号アルゴリズムのXTSモードおよびCBCモードでの演算処理を実行する。なお、演算処理には、入力データの暗号化(以下、暗号演算)、および、暗号化したデータの復号(以下、復号演算)を含むものとする。
【0017】
排他的論理和演算部5は、セレクタ6の出力と共通鍵演算部4の演算結果との排他的論理和を算出する。セレクタ6は、制御部16からの指示に応じて、所定値と、マスク値レジスタ9の値と、初期値入力信号11とのうちいずれかを選択する。図1では、所定値を0とした例が示されているが、所定値は0以外であってもよい。
【0018】
乗算部7は、ガロア体上の乗算を行う。具体的には、乗算部7は、マスク値レジスタ9の値と、予め定められたガロア体の原始多項式αのj乗(jは入力データを固定長に分割したブロックの順序を表す番号)とを乗算した結果を出力する。
【0019】
セレクタ8は、制御部16からの指示に応じて、乗算部7の演算結果と、排他的論理和演算部5の演算結果と、入力データ信号10と、初期値入力信号11とのうちいずれかを選択する。マスク値レジスタ9は、セレクタ8の出力を記憶する。
【0020】
制御部16は、XTSモードが指定された場合に、入力データをXTSモードで演算した出力データを算出する処理、および、CBCモードが指定された場合に、入力データをCBCモードで演算した出力データを算出する処理を制御する。各処理の詳細は後述する。
【0021】
次に、このように構成された第1の実施形態にかかる暗号演算装置1による演算処理について説明する。最初に、XTSモードの演算処理について説明する。図2は、第1の実施形態におけるXTSモードの演算処理の全体の流れを示すフローチャートである。
【0022】
なお、図2の各ステップは、制御部16が、上述の各構成部(セレクタ2、排他的論理和演算部3、共通鍵演算部4、排他的論理和演算部5、セレクタ6、乗算部7、セレクタ8、および、マスク値レジスタ9)のうち必要な構成部を制御することにより実行される。制御部16による各構成部の制御方法の詳細は後述するため、図2の説明では省略する。
【0023】
図2に示すように、XTSモードでは、暗号演算装置1の共通鍵演算部4は、鍵Key2と初期値(セクター番号)とブロック番号j=1とから、マスク値Tを生成する(ステップS101)。
【0024】
次に、分割部20は、暗号化する入力データを分割する。排他的論理和演算部3は、分割後のデータ(以下、平文Pという)とマスク値Tとの排他的論理和演算を行いPP=Pxor Tを算出する(ステップS102)。なお、平文Pは、暗号化する平文全体をm個(mは2以上の整数)のブロックに分割したときの、j番目のブロックの平文を表す。また、マスク値Tは、j番目のブロックの処理で用いるマスク値を表す。以下では、128ビット長のブロックに分割する場合を例に説明するが、ブロック長は128ビットに限られるものではない。
【0025】
共通鍵演算部4は、鍵Key1を用いて排他的論理和演算の結果PPを暗号化し、データCCを算出する(ステップS103)。排他的論理和演算部5は、データCCとマスク値Tとの排他的論理和演算を行い、暗号文C=CC xor Tを算出する(ステップS104)。
【0026】
制御部16は、jに1を加算する(ステップS105)。乗算部7は、T=Tj−1×αによりマスク値を更新する(ステップS106)。制御部16は、jが(m−1)(mは総ブロック数)より小さいか否かを判断する(ステップS107)。jが(m−1)より小さい場合(ステップS107:Yes)、ステップS102に戻り処理を繰り返す。
【0027】
jが(m−1)に達した場合(ステップS107:No)、制御部16は、平文Pの長さがブロック長である128ビットと一致するか否かを判断する(ステップS108)。
【0028】
平文Pの長さが128ビットと一致する場合は(ステップS108:Yes)、残りのブロックである(m−1)番目およびm番目のブロックについて、ステップS109〜ステップS113を繰り返す。なお、ステップS109〜ステップS113は、ステップS102〜ステップS106と同様の処理であるため説明を省略する。
【0029】
jがmに達した場合(ステップS114:Yes)、すなわち、m番目のブロックまで処理した場合、演算処理を終了する。
【0030】
ステップS108で、平文Pの長さが128ビットと一致しない場合(ステップS108:No)、排他的論理和演算部3は、平文Pm−1とマスク値Tm−1との排他的論理和演算を行いPP=Pm−1 xor Tm−1を算出する(ステップS115)。
【0031】
共通鍵演算部4は、鍵Key1を用いて排他的論理和演算の結果PPを暗号化し、データCCを算出する(ステップS116)。排他的論理和演算部5は、データCCとマスク値Tm−1との排他的論理和であるCC xor Tm−1を算出する。共通鍵演算部4は、CC xor Tm−1の上位kビット(kはPmの長さ)である暗号文Cmを算出する(ステップS117)。共通鍵演算部4は、Pと、CC xor Tm−1の下位lビット(lはブロック長−Pの長さ)とを連結したデータPP’を算出する(ステップS118)。共通鍵演算部4は、鍵Key1を用いてデータPP’を暗号化したデータCCを算出する(ステップS119)。排他的論理和演算部5は、データCCとマスク値Tとの排他的論理和演算を行い、暗号文Cm−1=CC xor Tを算出し(ステップS120)、演算処理を終了する。
【0032】
次に、XTSモードの暗号演算の手順についてさらに説明する。最初は、モード指定信号12がアサートされ、XTSモードの演算を行うための設定が行われる。なお、モード指定信号12などの制御部16に入力される各信号は、例えば暗号演算装置1に接続される図示しない外部装置によりアサートまたはディアサートされる。
【0033】
マスク値Tの生成を知らせるマスク値生成信号13がアサートされ、マスク値Tを生成するための初期値が初期値入力信号11に入力され、起動信号18がアサートされる。
【0034】
起動信号18がアサートされることで、制御部16は、図示しない制御信号線を通じて、セレクタ6に対して所定値0を出力するように信号を送る。また、制御部16は、セレクタ2に対して図示しない制御信号線を通じてマスク値生成であることを通知する。
【0035】
セレクタ2は、制御部16からの指示で初期値(初期値入力信号11)を選択する。セレクタ2による出力結果は排他的論理和演算部3に入力される。排他的論理和演算部3は、セレクタ2の出力結果とセレクタ6の出力結果とに対して排他的論和演算を行う。排他的論理和演算部3の演算結果は、共通鍵演算部4に入力される。
【0036】
一方、マスク値Tを生成するためのマスク値生成信号13と起動信号18とがアサートされることで、制御部16は、図示しない制御信号線を通じて、鍵選択部15へマスク値生成であることを通知する。
【0037】
鍵選択部15は、XTSモードのマスク値生成であることを判断すると、マスク値生成に必要な鍵Key2を選択し、共通鍵演算部4に入力する。
【0038】
共通鍵演算部4は、初期値と鍵Key2とが入力されると、マスク値Tの演算を開始する(図2のステップS101)。マスク値Tの演算が終了すると、制御部16は、マスク値レジスタ9に対して、マスク値Tの書き込みを行うための信号を図示しない制御信号線を通じて送る。これにより、マスク値Tがマスク値レジスタ9に保存される。
【0039】
次に、平文Pの暗号化を行うために、マスク値生成信号13がディアサートされ、平文が入力データ信号10に入力され、起動信号18がアサートされる。このとき、マスク値生成信号13がディアサートされることで、制御部16は、鍵選択部15に対して、平文の暗号演算であることを通知する。鍵選択部15は、鍵Key1を選択して共通鍵演算部4に入力する。
【0040】
また、図示していない暗号演算装置1の制御およびデータの入力を管理している装置により、モード指定信号12がアサートされ、マスク値生成信号13がディアサートされているとき、制御部16は、セレクタ2に対して入力データ信号10の値を選択するように通知する。セレクタ2は、入力データ信号10の入力データを選択して出力する。また、制御部16は、セレクタ6に対してマスク値レジスタ9の値を選択するように指示する。セレクタ6は、マスク値レジスタ9の値を選択して出力する。
【0041】
次に、排他的論理和演算部3は、セレクタ6の出力値であるマスク値レジスタ9の値と、セレクタ2の出力値である入力データ信号10から入力された平文との排他的論理和演算を行う(図2のステップS102)。演算結果は、共通鍵演算部4に入力される。
【0042】
共通鍵演算部4は、鍵選択部15から鍵データが入力され、排他的論理和演算部3から演算結果が入力されると演算を開始し、図示しない終了信号をアサートして演算終了を制御部16に通知するとともに演算結果を出力する(図2のステップS103)。排他的論理和演算部5は、共通鍵演算部4の出力結果と、セレクタ6の出力との排他的論理和を演算する(図2のステップS104)。排他的論理和演算部5の出力結果が暗号文として出力される。
【0043】
暗号文が出力されると同時に、乗算部7は、マスク値レジスタ9の値に対する乗算を演算する(図2のステップS106)。その演算結果はセレクタ8へ入力される。そして、セレクタ8は、制御部16からの指示に応じて、乗算部7の結果を選択する。マスク値レジスタ9は、制御部16からの指示に応じて、セレクタ8の出力結果を書き込み、暗号演算が終了する。
【0044】
次に、XTSモードの復号演算について説明する。XTSモードの復号演算でも、マスク値Tを生成する手順は暗号演算と同じであり、モード指定信号12とマスク値生成信号13とがアサートされ、初期値が入力される。
【0045】
モード指定信号12とマスク値生成信号13とがアサートされることで、制御部16は、セレクタ6に対して所定値0を出力するように指示する。また、制御部16は、セレクタ2に対して初期値入力信号11の値を選択するように指示する。さらに、鍵選択部15は、制御部16からの指示に応じて鍵Key2を選択して共通鍵演算部4へ入力する。
【0046】
共通鍵演算部4は、排他的論理和演算部3の出力を共通鍵演算部4の入力とし、鍵選択部15の出力を鍵データとし、これらが準備されると、マスク値Tの生成を開始する。共通鍵演算部4は、マスク値Tの演算が終了すると、図示しない終了信号をアサートして演算終了を制御部16に通知するとともにマスク値Tを出力する。このとき、セレクタ6は固定値0を選択しているので、排他的論理和演算5では、セレクタ6の出力と共通鍵演算部4の出力との演算が行われた結果、排他的論理和演算5からは共通鍵演算部4の出力結果が出力される。
【0047】
マスク値Tが生成されると、制御部16は、セレクタ8およびマスク値レジスタ9に対する指示を通知して、マスク値Tをマスク値レジスタ9に書き込む。
【0048】
次に、復号演算を行うためにマスク値生成信号13がディアサートされ、暗号文が入力データ信号10にセットされる。鍵選択部15は、鍵Key1を選択し、共通鍵演算部4へ入力する。ここで、復号演算時には、復号演算用の鍵を使うことで復号演算にかかる時間を短くすることができる場合がある。このような場合には、鍵選択部15は、鍵Key1の復号演算用鍵を選択して共通鍵演算部4に入力する。
【0049】
制御部16は、マスク値生成信号13がディアサートされるので、セレクタ2に対して入力データ信号10の値を選択するように指示する。制御部16は、さらにセレクタ6に対してマスク値レジスタ9の値を選択するように指示する。これにより、排他的論理和演算部3は、セレクタ6の出力とセレクタ2の出力結果との排他的論理和を算出する。その演算結果は、共通鍵演算部4に入力される。
【0050】
鍵選択部15の出力データである鍵データと、排他的論理和演算部3の出力データとを入力とし、制御部16から図示しない復号演算開始信号がアサートされると、共通鍵演算部4は、復号演算を開始する。共通鍵演算部4の演算が終了すると、図示しない終了信号が出力される。排他的論理和演算部5は、共通鍵演算部4の出力結果とセレクタ6の出力との排他的論理和を演算する。演算結果は、平文として出力信号線19から出力される。
【0051】
一方、共通鍵演算部4が図示していない終了信号をアサートすると、乗算部7は、マスク値レジスタ9の値を更新するため、マスク値レジスタ9の値を入力値として乗算を行う。乗算部7の演算結果は、セレクタ8を通じてマスク値レジスタ9に保存される。
【0052】
次に、CBCモードの演算処理について説明する。まず、CBCモードの暗号演算について説明する。図3は、第1の実施形態におけるCBCモードの暗号演算の全体の流れを示すフローチャートである。
【0053】
暗号演算装置1は、鍵Keyと初期値iと平文Pとを入力する(ステップS201)。排他的論理和演算部3は、初期値iと平文Pとの排他的論理和を演算し、共通鍵演算部4は、排他的論理和の演算結果を鍵Keyで暗号化した演算結果(C)を出力する(ステップS202)。さらに、暗号化を行う場合には、共通鍵演算部4は、鍵Keyと暗号化の演算結果Cj−1と(ここではjは2以上の整数)平文Pとを入力する(ステップS203)。排他的論理和演算部3は、演算結果Ci−1と平文Pとの排他的論理和を演算し、共通鍵演算部4は、排他的論理和の演算結果を鍵Keyで暗号化した演算結果(C)を出力する(ステップS204)。制御部16は、jに1を加算する(ステップS205)。制御部16は、jが総ブロック数mを超えたか否かを判断し(ステップS206)、超えていない場合(ステップS206:No)、ステップS203に戻り処理を繰り返す。jが総ブロック数mを超えた場合(ステップS206:Yes)、暗号演算装置1は、演算処理を終了する。
【0054】
次に、CBCモードの復号演算について説明する。図4は、第1の実施形態におけるCBCモードの復号演算の全体の流れを示すフローチャートである。
【0055】
暗号演算装置1は、鍵Keyと初期値iと暗号文Cとを入力する(ステップS301)。排他的論理和演算部3は、暗号文Cを復号した演算結果(Dec(Key、C))と、初期値iとの排他的論理和である平文Pを算出する(ステップS302)。さらに、復号演算を行う場合には、共通鍵演算部4は、鍵Keyと初期値として用いる前のブロックの暗号文Cj−1(以下、初期値Cj−1という)と暗号文Cとを入力する(ステップS303)。排他的論理和演算部5は、共通鍵演算部4により暗号文Cを復号した演算結果と、初期値Cj−1との排他的論理和である平文Pを算出する(ステップS304)。制御部16は、jに1を加算する(ステップS305)。制御部16は、jが総ブロック数mを超えたか否かを判断し(ステップS306)、超えていない場合(ステップS306:No)、ステップS303に戻り処理を繰り返す。jが総ブロック数mを超えた場合(ステップS306:Yes)、暗号演算装置1は、演算処理を終了する。
【0056】
次に、CBCモードの暗号演算の手順についてさらに説明する。CBCモードの暗号演算では、最初の演算時に初期値信号14がアサートされ、暗号演算装置1への入力信号であるモード指定信号12がディアサートされる。さらに、復号演算信号17がディアサートされ、初期値入力信号11に初期値がセットされ、入力データ信号10に平文がセットされる。さらに起動信号18がアサートされると、暗号演算装置1は暗号演算を開始する。
【0057】
制御部16は、初期値信号14がアサートされていること、モード指定信号12がディアサートされていること、および、復号演算信号17がディアサートされていることから、セレクタ2に対して初期値入力信号11の値を選択するように指示を出す。これにより、排他的論理和演算部3は、初期値と入力データ信号10の値との排他的論理和を演算する。その結果は共通鍵演算部4へ入力される。
【0058】
また、鍵選択部15は、CBCモードの暗号演算であるという指示が制御部16から送られてくるので、その指示に従った鍵データを共通鍵演算部4に送る。これにより共通鍵演算部4による暗号演算が開始される。
【0059】
暗号演算が終了すると、図示しない終了信号がアサートされるとともに共通鍵演算部4から暗号文が出力される。このとき、制御部16は、セレクタ6に対して0を選択することを指示する。セレクタ6は、その指示に従って0を出力する。
【0060】
排他的論理和演算部5は、セレクタ6の出力値と共通鍵演算部4の出力との排他的論理和を演算する。その演算結果は暗号文として出力信号線19に出力される(図3のステップS202)。このとき、制御部16は、次の演算のために、排他的論理和演算部5の出力結果をマスク値レジスタ9に保存するように指示する。すなわち、制御部16は、セレクタ8に対して出力信号線19の入力を選択するように指示するとともに、マスク値レジスタ9に対してデータが書き込まれるように指示する。次の平文が入力された場合には、マスク値レジスタ9に保存されている値を初期値とするので、制御部16は、セレクタ6に対してマスク値レジスタ9の値を選択するように指示する。排他的論理和演算部3は、セレクタ6の出力とセレクタ2の出力との排他的論理和を演算する。共通鍵演算部4は、この演算結果を入力し暗号演算を行う(図3のステップS204)。
【0061】
次に、CBCモードの復号演算の手順についてさらに説明する。復号演算では、制御部16は、セレクタ2に対して、入力された暗号文の選択を指示する。制御部16は、モード指定信号がディアサートされていること、復号演算信号17がアサートされていること、および、初期値信号14がアサートされていることから、セレクタ6に対して0を出力するように指示する。これと同時に、初期値入力信号11の値をマスク値レジスタ9に書き込むため、制御部16は、セレクタ8に対して初期値入力信号11の値を選択するように指示し、かつ、マスク値レジスタ9に書き込み指示を出す。上記の処理により、排他的論理和演算部3は、セレクタ6の出力とセレクタ2の出力との排他的論理和を演算する。その演算結果は共通鍵演算部4に入力される。
【0062】
このとき、鍵選択部15は、モード指定信号がディアサートされていることから、CBCモードのデータ用鍵データを選択して共通鍵演算部4に入力する。
【0063】
共通鍵演算部4は、入力データと鍵データとが入力されると、復号演算を開始する。共通鍵演算部4は、復号演算が終了すると終了信号をアサートするとともに演算結果を出力する。このとき、制御部16は、セレクタ6に対して初期値入力信号11の値を選択するように指示する。これにより、セレクタ6は、初期値入力信号11の値を選択して出力する。排他的論理和演算部5は、初期値入力信号11の値と共通鍵演算部4の出力との排他的論理和を演算し、演算結果を平文として出力する(図4のステップS302)。
【0064】
続いて復号演算を行う際には、初期値信号線がディアサートされて、入力データ信号10に暗号文が入力され、起動信号18がアサートされる。このとき、制御部16は、CBC/XTSモードがディアサート、初期値信号もディアサートされ、復号演算信号17がアサートされていることから、CBCモードの復号演算であると判断する。制御部16は、セレクタ6に対して0を選択するように指示する。この後、共通鍵演算部4が復号演算を開始する。
【0065】
復号演算が終了すると上記で説明したように、排他的論理和演算部5が、復号演算の演算結果と、マスク値レジスタ9の値との排他的論理和を演算する。この演算結果が平文として出力信号線19に出力される(図4のステップS304)。
【0066】
このように、第1の実施形態にかかる暗号演算装置では、図1に示すような回路構成とすることで、XTSモードの暗号演算および復号演算と、CBCモードの暗号演算および復号演算とを行うことが可能となる。
【0067】
(第2の実施形態)
CBCモードの復号演算では、共通鍵演算部4による復号演算が終了した後に、マスク値レジスタ9に記憶されている初期値と復号演算の演算結果との排他的論理和が演算される。このため、マスク値レジスタ9の値は、共通鍵演算部4の演算が終了するまで変更することができない。すなわち、共通鍵演算部4の演算が終了したのち、入力データ信号10の値をマスク値レジスタ9書き込むことになる。
【0068】
第2の実施形態にかかる暗号演算装置は、共通鍵演算部4の演算が終了した直後に、次の復号演算のための暗号文を入力データ信号10に準備できるようにするため、入力データ信号10の値を保持する回路(レジスタ)をさらに備える構成とする。
【0069】
図5は、第2の実施形態にかかる暗号演算装置1−2の回路構成の一例を示すブロック図である。図5に示すように、暗号演算装置1−2は、出力マスクレジスタ20をさらに備えたこと、および、制御部16−2の機能が、第1の実施形態と異なっている。その他の構成は、第1の実施形態のブロック図である図1と同様であるため、同一の符号を付し説明を省略する。
【0070】
第2の実施形態では、CBCモードの復号演算が開始されると、制御部16−2は、セレクタ8に対して入力データ信号10の値(暗号文C)を保持するように指示を出し、出力マスクレジスタ20にはセレクタ6を通じて入力データ信号10の値を保持するように指示を出す。
【0071】
共通鍵演算部4の演算が終了した後、排他的論理和演算部5は、出力マスクレジスタ20の値と共通鍵演算部4の演算結果との排他的論理和を演算する。演算結果は平文として出力される。本実施形態では、次のブロックの演算で用いる暗号文Cの値(入力データ信号10の値)を出力マスクレジスタ20に保持しているため、共通鍵演算部4の演算終了と同時に入力データ信号10に次の暗号文Cを用意することができる。
【0072】
すなわち、暗号文Cの演算を開始するために起動信号18がアサートされると同時に、制御部16−2は、マスク値レジスタ9の値を出力マスクレジスタ20へ移動し、同時に暗号文Cをマスク値レジスタ9に書き込むことを指示する。このような処理を行うことで、共通鍵演算部4の演算が終了するとともに、次の復号演算用のデータを準備して復号演算を開始することができるようになる。すなわち、CBCモードの復号演算を高速に処理することが可能となる。
【0073】
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【0074】
1 暗号演算装置
2 セレクタ
3 排他的論理和演算部
4 共通鍵演算部
5 排他的論理和演算部
6 セレクタ
7 乗算部
8 セレクタ
9 マスク値レジスタ
16 制御部
20 出力マスクレジスタ

【特許請求の範囲】
【請求項1】
共通鍵暗号方式の第1暗号利用モードおよび第2暗号利用モードの演算を行う共通鍵演算部と、
入力データを所定の長さに分割する分割部と、
排他的論理和を演算する排他的論理和演算部と、
ガロア体上の乗算を行う乗算部と、
前記共通鍵演算部と、前記排他的論理和演算部と、前記乗算部を制御する制御部とを、備え、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの(j−1)番目(jは2以上の整数)を対象として、第1暗号利用モードが指定された場合、
前記制御部は、
前記入力データの(j−1)番目(jは2以上の整数)のブロックに基づいて、所定の値との乗算を行うように前記乗算部を制御し、
前記乗算部の乗算結果と前記入力データのうちj番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御し、
前記排他的論理和演算部の演算結果と(j−1)番目のブロックに対する前記乗算部の演算結果との排他的論理和を行うように前記排他的論理和演算部を制御し、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの(j−1)番目(jは2以上の整数)を対象として、第2暗号利用モードが指定された場合、
前記制御部は、
前記入力データの(j−1)番目のブロックに対する前記共通鍵演算部の演算結果と前記入力データのうちj番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御し、
前記排他的論理和演算部の演算結果に対して前記第1暗号利用モードおよび前記第2暗号利用モードの演算を前記共通鍵演算部で行うように制御する
暗号演算装置。
【請求項2】
前記共通鍵演算部は、前記共通鍵暗号方式の復号演算を行い、
前記入力データのうち、いずれかのブロックのデータを記憶する第1レジスタをさらに備え、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの(j−1)番目を対象として、第2暗号利用モードでの復号演算が指定された場合、
前記制御部は、
前記入力データのうち(j−1)番目のブロックのデータを前記第1レジスタに記憶し、
前記入力データのうちj番目のデータの復号演算を前記共通鍵演算部で行うように制御し、
復号演算の演算結果と前記第1レジスタに記憶された(j−1)番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御する、
請求項1に記載の暗号演算装置。
【請求項3】
前記入力データのうち、いずれかのブロックのデータを記憶する第2レジスタをさらに備え、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの(j−1)番目を対象として、第1暗号利用モードでの復号演算が指定された場合、
制御部は、前記入力データのうち(j−1)番目のブロックのデータを前記第2レジスタに記憶し、
前記入力データのうちj番目のデータの復号演算を前記共通鍵演算部で行うように制御し、
復号演算の演算結果と前記第2レジスタに記憶された(j−1)番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御し、
前記入力データのうちj番目のブロックのデータを前記第1レジスタに記憶する、
請求項2に記載の暗号演算装置。
【請求項4】
前記第1暗号利用モードは、XTS(XEX encryption mode with tweak and ciphertext stealing)モードであり、
前記第2暗号利用モードは、CBC(Cipher Block Chaining)モードである、
請求項1に記載の暗号演算装置。
【請求項5】
前記共通鍵演算部での演算で用いられる複数の鍵データのうち、前記制御部からの指示に応じた前記鍵データを選択して出力する鍵選択部をさらに備える、
請求項1に記載の暗号演算装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−189635(P2012−189635A)
【公開日】平成24年10月4日(2012.10.4)
【国際特許分類】
【出願番号】特願2011−50698(P2011−50698)
【出願日】平成23年3月8日(2011.3.8)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】