(57)【特許請求の範囲】
【請求項１】
共通鍵暗号方式の第１暗号利用モードおよび第２暗号利用モードの演算を行う共通鍵演算部と、
入力データを所定の長さに分割する分割部と、
排他的論理和を演算する排他的論理和演算部と、
ガロア体上の乗算を行う乗算部と、
前記共通鍵演算部と、前記排他的論理和演算部と、前記乗算部を制御する制御部とを、備え、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの（ｊ−１）番目（ｊは２以上の整数）を対象として、第１暗号利用モードが指定された場合、
前記制御部は、
前記入力データの（ｊ−１）番目（ｊは２以上の整数）のブロックに基づいて、所定の値との乗算を行うように前記乗算部を制御し、
前記乗算部の乗算結果と前記入力データのうちｊ番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御し、
前記排他的論理和演算部の演算結果と（ｊ−１）番目のブロックに対する前記乗算部の演算結果との排他的論理和を行うように前記排他的論理和演算部を制御し、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの（ｊ−１）番目（ｊは２以上の整数）を対象として、第２暗号利用モードが指定された場合、
前記制御部は、
前記入力データの（ｊ−１）番目のブロックに対する前記共通鍵演算部の演算結果と前記入力データのうちｊ番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御し、
前記排他的論理和演算部の演算結果に対して前記第１暗号利用モードおよび前記第２暗号利用モードの演算を前記共通鍵演算部で行うように制御する
暗号演算装置。
【請求項２】
前記共通鍵演算部は、前記共通鍵暗号方式の復号演算を行い、
前記入力データのうち、いずれかのブロックのデータを記憶する第１レジスタをさらに備え、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの（ｊ−１）番目を対象として、第２暗号利用モードでの復号演算が指定された場合、
前記制御部は、
前記入力データのうち（ｊ−１）番目のブロックのデータを前記第１レジスタに記憶し、
前記入力データのうちｊ番目のデータの復号演算を前記共通鍵演算部で行うように制御し、
復号演算の演算結果と前記第１レジスタに記憶された（ｊ−１）番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御する、
請求項１に記載の暗号演算装置。
【請求項３】
前記入力データのうち、いずれかのブロックのデータを記憶する第２レジスタをさらに備え、
前記分割部で前記入力データを所定の長さのブロックに分割し、前記入力データを分割したブロックの（ｊ−１）番目を対象として、第１暗号利用モードでの復号演算が指定された場合、
制御部は、前記入力データのうち（ｊ−１）番目のブロックのデータを前記第２レジスタに記憶し、
前記入力データのうちｊ番目のデータの復号演算を前記共通鍵演算部で行うように制御し、
復号演算の演算結果と前記第２レジスタに記憶された（ｊ−１）番目のブロックのデータとの排他的論理和を行うように前記排他的論理和演算部を制御し、
前記入力データのうちｊ番目のブロックのデータを前記第１レジスタに記憶する、
請求項２に記載の暗号演算装置。
【請求項４】
前記第１暗号利用モードは、ＸＴＳ（XEX  encryption  mode  with  tweak  and  ciphertext  stealing）モードであり、
前記第２暗号利用モードは、ＣＢＣ（Cipher  Block  Chaining）モードである、
請求項１に記載の暗号演算装置。
【請求項５】
前記共通鍵演算部での演算で用いられる複数の鍵データのうち、前記制御部からの指示に応じた前記鍵データを選択して出力する鍵選択部をさらに備える、
請求項１に記載の暗号演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、暗号演算装置に関する。
【背景技術】
【０００２】
共通鍵方式の暗号アルゴリズムは、予め定められたブロック長のデータを秘匿化することを目的に設計されている。このため、共通鍵方式の暗号アルゴリズムを用いてブロック長より長いデータの秘匿化を行えるような演算方法や、元のデータの改ざん検出のための認証子を生成する演算方法などが開発されている。このような、共通鍵暗号方式を基本として様々な用途に向いた演算方法は、暗号利用モードと呼ばれる。
【０００３】
標準的な暗号利用モードとしては、ＦＩＰＳ  ＰＵＢ  ＳＰ８００シリーズで公開されている。例えば、ブロック長よりも長いデータを暗号化するため演算方法として、ＦＩＰＳ  ＰＵＢ  ＳＰ８００−３８Ａに開示されているＣＢＣモードがある。
【０００４】
このＣＢＣモードでは、ストレージデバイスに保存する際に、暗号化する前のデータと暗号化した後のデータのデータ長が異なることがある。具体的には、暗号化する前のデータの長さがブロック長の整数倍ではないとき、暗号化したデータのデータ長は、暗号化前のデータのデータ長よりも長くなる。そこで、暗号化する際に、データ長が変化しない暗号利用モードが求められ、ストレージデバイス用の暗号利用モードが開発された。
【０００５】
ストレージデバイスに保存するデータの暗号利用モードについては、ＩＥＥＥ  Ｐ１６１９−Ｓｔｄ−２００７で規格化されている。また、ＩＥＥＥ  Ｐ１６１９−Ｓｔｄ−２００７で規格化されている暗号利用モードは、暗号利用モードを定めたＦＩＰＳ  ＰＵＢ  ＳＰ８００−３８シリーズにＳＰ８００−３８Ｅ（ＸＴＳ  ｍｏｄｅ）として採用されている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ＦＩＰＳ  ＰＵＢ  ＳＰ８００−３８Ｅ
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来は、ＣＢＣモードが主に利用されている。従って、従来のシステムとの互換性を維持するためには、ストレージデバイス内のデータの暗号化方式として、ＸＴＳモードだけではなく、従来のＣＢＣモードにも対応する必要がある。すなわち、ＸＴＳモードとＣＢＣモードの２つの利用モードに対応した暗号化回路が必要である。
【課題を解決するための手段】
【０００８】
実施形態の暗号演算装置は、共通鍵演算部と、排他的論理和演算部と、乗算部と、制御部とを備える。共通鍵演算部は、共通鍵暗号方式の第１暗号利用モードおよび第２暗号利用モードの演算を行う。排他的論理和演算部は、排他的論理和を演算する。乗算部は、ガロア体上の乗算を行う。制御部は、第１暗号利用モードの演算が指定された場合に、入力データを第１暗号利用モードで演算した出力データを算出する第１演算処理を制御し、第２暗号利用モードの演算が指定された場合に、入力データを第２暗号利用モードで演算した出力データを算出する第２演算処理を制御する。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態にかかる暗号演算装置の回路構成図。
【図２】第１の実施形態におけるＸＴＳモードの演算処理のフローチャート。
【図３】第１の実施形態におけるＣＢＣモードの暗号演算のフローチャート。
【図４】第１の実施形態におけるＣＢＣモードの復号演算のフローチャート。
【図５】第２の実施形態にかかる暗号演算装置の回路構成図。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、この発明にかかる暗号演算装置の好適な実施形態を詳細に説明する。
【００１１】
（第１の実施形態）
第１の実施形態にかかる暗号演算装置は、ＸＴＳモードとＣＢＣモードとで利用する演算部（回路）で共通化可能な演算部を共通化する。そして、各演算部を、指定された暗号利用モードに応じた演算を実行するように制御する。
【００１２】
図１は、第１の実施形態にかかる暗号演算装置１の回路構成の一例を示すブロック図である。図１に示すように、暗号演算装置１は、セレクタ２と、排他的論理和演算部３と、共通鍵演算部４と、排他的論理和演算部５と、セレクタ６と、乗算部７と、セレクタ８と、マスク値レジスタ９と、制御部１６と、分割部２０と、を備えている。暗号演算装置１は、鍵選択部１５に接続されている。
【００１３】
鍵選択部１５は、制御部１６からの指示に応じた鍵データを選択して共通鍵演算部４に出力する。なお、鍵選択部１５を暗号演算装置１内に備えるように構成してもよい。
【００１４】
分割部２０は、暗号演算装置1に入力された暗号演算または復号演算の対象となる入力データ１０’を所定の長さ（固定長）に分割する。例えば、分割部２０は、入力データ１０’を、１２８ビット長のブロックに分割する。なお、分割部２０を暗号演算装置１の外部に備えるように構成してもよい。以下では、分割部２０により入力データ１０’を固定長に分割したデータを単位として処理が行われる。以下では入力データ１０’を分割したデータを入力データ信号１０という。
【００１５】
セレクタ２は、制御部１６からの指示に応じて、入力データ信号１０および初期値入力信号１１のいずれかを選択する。排他的論理和演算部３は、セレクタ２の出力とセレクタ６の出力との排他的論理和を算出する。
【００１６】
共通鍵演算部４は、排他的論理和演算部３の演算結果と鍵選択部１５により選択された鍵データとを用いて、制御部１６により指示された暗号利用モードでの演算を実行する。本実施形態では、共通鍵演算部４は、共通鍵方式（ブロック暗号方式）の暗号アルゴリズムのＸＴＳモードおよびＣＢＣモードでの演算処理を実行する。なお、演算処理には、入力データの暗号化（以下、暗号演算）、および、暗号化したデータの復号（以下、復号演算）を含むものとする。
【００１７】
排他的論理和演算部５は、セレクタ６の出力と共通鍵演算部４の演算結果との排他的論理和を算出する。セレクタ６は、制御部１６からの指示に応じて、所定値と、マスク値レジスタ９の値と、初期値入力信号１１とのうちいずれかを選択する。図１では、所定値を０とした例が示されているが、所定値は０以外であってもよい。
【００１８】
乗算部７は、ガロア体上の乗算を行う。具体的には、乗算部７は、マスク値レジスタ９の値と、予め定められたガロア体の原始多項式αのｊ乗（ｊは入力データを固定長に分割したブロックの順序を表す番号）とを乗算した結果を出力する。
【００１９】
セレクタ８は、制御部１６からの指示に応じて、乗算部７の演算結果と、排他的論理和演算部５の演算結果と、入力データ信号１０と、初期値入力信号１１とのうちいずれかを選択する。マスク値レジスタ９は、セレクタ８の出力を記憶する。
【００２０】
制御部１６は、ＸＴＳモードが指定された場合に、入力データをＸＴＳモードで演算した出力データを算出する処理、および、ＣＢＣモードが指定された場合に、入力データをＣＢＣモードで演算した出力データを算出する処理を制御する。各処理の詳細は後述する。
【００２１】
次に、このように構成された第１の実施形態にかかる暗号演算装置１による演算処理について説明する。最初に、ＸＴＳモードの演算処理について説明する。図２は、第１の実施形態におけるＸＴＳモードの演算処理の全体の流れを示すフローチャートである。
【００２２】
なお、図２の各ステップは、制御部１６が、上述の各構成部（セレクタ２、排他的論理和演算部３、共通鍵演算部４、排他的論理和演算部５、セレクタ６、乗算部７、セレクタ８、および、マスク値レジスタ９）のうち必要な構成部を制御することにより実行される。制御部１６による各構成部の制御方法の詳細は後述するため、図２の説明では省略する。
【００２３】
図２に示すように、ＸＴＳモードでは、暗号演算装置１の共通鍵演算部４は、鍵Ｋｅｙ２と初期値（セクター番号）とブロック番号ｊ＝１とから、マスク値Ｔ１を生成する（ステップＳ１０１）。
【００２４】
次に、分割部２０は、暗号化する入力データを分割する。排他的論理和演算部３は、分割後のデータ(以下、平文Ｐｊという)とマスク値Ｔｊとの排他的論理和演算を行いＰＰ＝Ｐｊ  ｘｏｒ  Ｔｊを算出する（ステップＳ１０２）。なお、平文Ｐｊは、暗号化する平文全体をｍ個（ｍは２以上の整数）のブロックに分割したときの、ｊ番目のブロックの平文を表す。また、マスク値Ｔｊは、ｊ番目のブロックの処理で用いるマスク値を表す。以下では、１２８ビット長のブロックに分割する場合を例に説明するが、ブロック長は１２８ビットに限られるものではない。
【００２５】
共通鍵演算部４は、鍵Ｋｅｙ１を用いて排他的論理和演算の結果ＰＰを暗号化し、データＣＣを算出する（ステップＳ１０３）。排他的論理和演算部５は、データＣＣとマスク値Ｔｊとの排他的論理和演算を行い、暗号文Ｃｊ＝ＣＣ ｘｏｒ  Ｔｊを算出する（ステップＳ１０４）。
【００２６】
制御部１６は、ｊに１を加算する（ステップＳ１０５）。乗算部７は、Ｔｊ＝Ｔｊ−１×αｊによりマスク値を更新する（ステップＳ１０６）。制御部１６は、ｊが（ｍ−１）（ｍは総ブロック数）より小さいか否かを判断する（ステップＳ１０７）。ｊが（ｍ−１）より小さい場合（ステップＳ１０７：Ｙｅｓ）、ステップＳ１０２に戻り処理を繰り返す。
【００２７】
ｊが（ｍ−１）に達した場合（ステップＳ１０７：Ｎｏ）、制御部１６は、平文Ｐｍの長さがブロック長である１２８ビットと一致するか否かを判断する（ステップＳ１０８）。
【００２８】
平文Ｐｍの長さが１２８ビットと一致する場合は（ステップＳ１０８：Ｙｅｓ）、残りのブロックである（ｍ−１）番目およびｍ番目のブロックについて、ステップＳ１０９〜ステップＳ１１３を繰り返す。なお、ステップＳ１０９〜ステップＳ１１３は、ステップＳ１０２〜ステップＳ１０６と同様の処理であるため説明を省略する。
【００２９】
ｊがｍに達した場合（ステップＳ１１４：Ｙｅｓ）、すなわち、ｍ番目のブロックまで処理した場合、演算処理を終了する。
【００３０】
ステップＳ１０８で、平文Ｐｍの長さが１２８ビットと一致しない場合（ステップＳ１０８：Ｎｏ）、排他的論理和演算部３は、平文Ｐｍ−１とマスク値Ｔｍ−１との排他的論理和演算を行いＰＰ＝Ｐｍ−１  ｘｏｒ  Ｔｍ−１を算出する（ステップＳ１１５）。
【００３１】
共通鍵演算部４は、鍵Ｋｅｙ１を用いて排他的論理和演算の結果ＰＰを暗号化し、データＣＣを算出する（ステップＳ１１６）。排他的論理和演算部５は、データＣＣとマスク値Ｔｍ−１との排他的論理和であるＣＣ ｘｏｒ  Ｔｍ−１を算出する。共通鍵演算部４は、ＣＣ ｘｏｒ  Ｔｍ−１の上位ｋビット（ｋはＰmの長さ）である暗号文Ｃmを算出する（ステップＳ１１７）。共通鍵演算部４は、Ｐｍと、ＣＣ ｘｏｒ  Ｔｍ−１の下位ｌビット（ｌはブロック長−Ｐｍの長さ）とを連結したデータＰＰ’を算出する（ステップＳ１１８）。共通鍵演算部４は、鍵Ｋｅｙ１を用いてデータＰＰ’を暗号化したデータＣＣを算出する（ステップＳ１１９）。排他的論理和演算部５は、データＣＣとマスク値Ｔｍとの排他的論理和演算を行い、暗号文Ｃｍ−１＝ＣＣ ｘｏｒ  Ｔｍを算出し（ステップＳ１２０）、演算処理を終了する。
【００３２】
次に、ＸＴＳモードの暗号演算の手順についてさらに説明する。最初は、モード指定信号１２がアサートされ、ＸＴＳモードの演算を行うための設定が行われる。なお、モード指定信号１２などの制御部１６に入力される各信号は、例えば暗号演算装置１に接続される図示しない外部装置によりアサートまたはディアサートされる。
【００３３】
マスク値Ｔの生成を知らせるマスク値生成信号１３がアサートされ、マスク値Ｔを生成するための初期値が初期値入力信号１１に入力され、起動信号１８がアサートされる。
【００３４】
起動信号１８がアサートされることで、制御部１６は、図示しない制御信号線を通じて、セレクタ６に対して所定値０を出力するように信号を送る。また、制御部１６は、セレクタ２に対して図示しない制御信号線を通じてマスク値生成であることを通知する。
【００３５】
セレクタ２は、制御部１６からの指示で初期値（初期値入力信号１１）を選択する。セレクタ２による出力結果は排他的論理和演算部３に入力される。排他的論理和演算部３は、セレクタ２の出力結果とセレクタ６の出力結果とに対して排他的論和演算を行う。排他的論理和演算部３の演算結果は、共通鍵演算部４に入力される。
【００３６】
一方、マスク値Ｔを生成するためのマスク値生成信号１３と起動信号１８とがアサートされることで、制御部１６は、図示しない制御信号線を通じて、鍵選択部１５へマスク値生成であることを通知する。
【００３７】
鍵選択部１５は、ＸＴＳモードのマスク値生成であることを判断すると、マスク値生成に必要な鍵Ｋｅｙ２を選択し、共通鍵演算部４に入力する。
【００３８】
共通鍵演算部４は、初期値と鍵Ｋｅｙ２とが入力されると、マスク値Ｔの演算を開始する（図２のステップＳ１０１）。マスク値Ｔの演算が終了すると、制御部１６は、マスク値レジスタ９に対して、マスク値Ｔの書き込みを行うための信号を図示しない制御信号線を通じて送る。これにより、マスク値Ｔがマスク値レジスタ９に保存される。
【００３９】
次に、平文Ｐｊの暗号化を行うために、マスク値生成信号１３がディアサートされ、平文が入力データ信号１０に入力され、起動信号１８がアサートされる。このとき、マスク値生成信号１３がディアサートされることで、制御部１６は、鍵選択部１５に対して、平文の暗号演算であることを通知する。鍵選択部１５は、鍵Ｋｅｙ１を選択して共通鍵演算部４に入力する。
【００４０】
また、図示していない暗号演算装置１の制御およびデータの入力を管理している装置により、モード指定信号１２がアサートされ、マスク値生成信号１３がディアサートされているとき、制御部１６は、セレクタ２に対して入力データ信号１０の値を選択するように通知する。セレクタ２は、入力データ信号１０の入力データを選択して出力する。また、制御部１６は、セレクタ６に対してマスク値レジスタ９の値を選択するように指示する。セレクタ６は、マスク値レジスタ９の値を選択して出力する。
【００４１】
次に、排他的論理和演算部３は、セレクタ６の出力値であるマスク値レジスタ９の値と、セレクタ２の出力値である入力データ信号１０から入力された平文との排他的論理和演算を行う（図２のステップＳ１０２）。演算結果は、共通鍵演算部４に入力される。
【００４２】
共通鍵演算部４は、鍵選択部１５から鍵データが入力され、排他的論理和演算部３から演算結果が入力されると演算を開始し、図示しない終了信号をアサートして演算終了を制御部１６に通知するとともに演算結果を出力する（図２のステップＳ１０３）。排他的論理和演算部５は、共通鍵演算部４の出力結果と、セレクタ６の出力との排他的論理和を演算する（図２のステップＳ１０４）。排他的論理和演算部５の出力結果が暗号文として出力される。
【００４３】
暗号文が出力されると同時に、乗算部７は、マスク値レジスタ９の値に対する乗算を演算する（図２のステップＳ１０６）。その演算結果はセレクタ８へ入力される。そして、セレクタ８は、制御部１６からの指示に応じて、乗算部７の結果を選択する。マスク値レジスタ９は、制御部１６からの指示に応じて、セレクタ８の出力結果を書き込み、暗号演算が終了する。
【００４４】
次に、ＸＴＳモードの復号演算について説明する。ＸＴＳモードの復号演算でも、マスク値Ｔを生成する手順は暗号演算と同じであり、モード指定信号１２とマスク値生成信号１３とがアサートされ、初期値が入力される。
【００４５】
モード指定信号１２とマスク値生成信号１３とがアサートされることで、制御部１６は、セレクタ６に対して所定値０を出力するように指示する。また、制御部１６は、セレクタ２に対して初期値入力信号１１の値を選択するように指示する。さらに、鍵選択部１５は、制御部１６からの指示に応じて鍵Ｋｅｙ２を選択して共通鍵演算部４へ入力する。
【００４６】
共通鍵演算部４は、排他的論理和演算部３の出力を共通鍵演算部４の入力とし、鍵選択部１５の出力を鍵データとし、これらが準備されると、マスク値Ｔの生成を開始する。共通鍵演算部４は、マスク値Ｔの演算が終了すると、図示しない終了信号をアサートして演算終了を制御部１６に通知するとともにマスク値Ｔを出力する。このとき、セレクタ６は固定値０を選択しているので、排他的論理和演算５では、セレクタ６の出力と共通鍵演算部４の出力との演算が行われた結果、排他的論理和演算５からは共通鍵演算部４の出力結果が出力される。
【００４７】
マスク値Ｔが生成されると、制御部１６は、セレクタ８およびマスク値レジスタ９に対する指示を通知して、マスク値Ｔをマスク値レジスタ９に書き込む。
【００４８】
次に、復号演算を行うためにマスク値生成信号１３がディアサートされ、暗号文が入力データ信号１０にセットされる。鍵選択部１５は、鍵Ｋｅｙ１を選択し、共通鍵演算部４へ入力する。ここで、復号演算時には、復号演算用の鍵を使うことで復号演算にかかる時間を短くすることができる場合がある。このような場合には、鍵選択部１５は、鍵Ｋｅｙ１の復号演算用鍵を選択して共通鍵演算部４に入力する。
【００４９】
制御部１６は、マスク値生成信号１３がディアサートされるので、セレクタ２に対して入力データ信号１０の値を選択するように指示する。制御部１６は、さらにセレクタ６に対してマスク値レジスタ９の値を選択するように指示する。これにより、排他的論理和演算部３は、セレクタ６の出力とセレクタ２の出力結果との排他的論理和を算出する。その演算結果は、共通鍵演算部４に入力される。
【００５０】
鍵選択部１５の出力データである鍵データと、排他的論理和演算部３の出力データとを入力とし、制御部１６から図示しない復号演算開始信号がアサートされると、共通鍵演算部４は、復号演算を開始する。共通鍵演算部４の演算が終了すると、図示しない終了信号が出力される。排他的論理和演算部５は、共通鍵演算部４の出力結果とセレクタ６の出力との排他的論理和を演算する。演算結果は、平文として出力信号線１９から出力される。
【００５１】
一方、共通鍵演算部４が図示していない終了信号をアサートすると、乗算部７は、マスク値レジスタ９の値を更新するため、マスク値レジスタ９の値を入力値として乗算を行う。乗算部７の演算結果は、セレクタ８を通じてマスク値レジスタ９に保存される。
【００５２】
次に、ＣＢＣモードの演算処理について説明する。まず、ＣＢＣモードの暗号演算について説明する。図３は、第１の実施形態におけるＣＢＣモードの暗号演算の全体の流れを示すフローチャートである。
【００５３】
暗号演算装置１は、鍵Ｋｅｙと初期値ｉと平文Ｐ１とを入力する（ステップＳ２０１）。排他的論理和演算部３は、初期値ｉと平文Ｐ１との排他的論理和を演算し、共通鍵演算部４は、排他的論理和の演算結果を鍵Ｋｅｙで暗号化した演算結果（Ｃ１）を出力する（ステップＳ２０２）。さらに、暗号化を行う場合には、共通鍵演算部４は、鍵Ｋｅｙと暗号化の演算結果Ｃｊ−１と（ここではｊは２以上の整数）平文Ｐｊとを入力する（ステップＳ２０３）。排他的論理和演算部３は、演算結果Ｃｉ−１と平文Ｐｉとの排他的論理和を演算し、共通鍵演算部４は、排他的論理和の演算結果を鍵Ｋｅｙで暗号化した演算結果（Ｃｊ）を出力する（ステップＳ２０４）。制御部１６は、ｊに１を加算する（ステップＳ２０５）。制御部１６は、ｊが総ブロック数ｍを超えたか否かを判断し（ステップＳ２０６）、超えていない場合（ステップＳ２０６：Ｎｏ）、ステップＳ２０３に戻り処理を繰り返す。ｊが総ブロック数ｍを超えた場合（ステップＳ２０６：Ｙｅｓ）、暗号演算装置１は、演算処理を終了する。
【００５４】
次に、ＣＢＣモードの復号演算について説明する。図４は、第１の実施形態におけるＣＢＣモードの復号演算の全体の流れを示すフローチャートである。
【００５５】
暗号演算装置１は、鍵Ｋｅｙと初期値ｉと暗号文Ｃ１とを入力する（ステップＳ３０１）。排他的論理和演算部３は、暗号文Ｃ１を復号した演算結果（Ｄｅｃ（Ｋｅｙ、Ｃ１））と、初期値ｉとの排他的論理和である平文Ｐ１を算出する（ステップＳ３０２）。さらに、復号演算を行う場合には、共通鍵演算部４は、鍵Ｋｅｙと初期値として用いる前のブロックの暗号文Ｃｊ−１（以下、初期値Ｃｊ−１という）と暗号文Ｃｊとを入力する（ステップＳ３０３）。排他的論理和演算部５は、共通鍵演算部４により暗号文Ｃｊを復号した演算結果と、初期値Ｃｊ−１との排他的論理和である平文Ｐｊを算出する（ステップＳ３０４）。制御部１６は、ｊに１を加算する（ステップＳ３０５）。制御部１６は、ｊが総ブロック数ｍを超えたか否かを判断し（ステップＳ３０６）、超えていない場合（ステップＳ３０６：Ｎｏ）、ステップＳ３０３に戻り処理を繰り返す。ｊが総ブロック数ｍを超えた場合（ステップＳ３０６：Ｙｅｓ）、暗号演算装置１は、演算処理を終了する。
【００５６】
次に、ＣＢＣモードの暗号演算の手順についてさらに説明する。ＣＢＣモードの暗号演算では、最初の演算時に初期値信号１４がアサートされ、暗号演算装置１への入力信号であるモード指定信号１２がディアサートされる。さらに、復号演算信号１７がディアサートされ、初期値入力信号１１に初期値がセットされ、入力データ信号１０に平文がセットされる。さらに起動信号１８がアサートされると、暗号演算装置１は暗号演算を開始する。
【００５７】
制御部１６は、初期値信号１４がアサートされていること、モード指定信号１２がディアサートされていること、および、復号演算信号１７がディアサートされていることから、セレクタ２に対して初期値入力信号１１の値を選択するように指示を出す。これにより、排他的論理和演算部３は、初期値と入力データ信号１０の値との排他的論理和を演算する。その結果は共通鍵演算部４へ入力される。
【００５８】
また、鍵選択部１５は、ＣＢＣモードの暗号演算であるという指示が制御部１６から送られてくるので、その指示に従った鍵データを共通鍵演算部４に送る。これにより共通鍵演算部４による暗号演算が開始される。
【００５９】
暗号演算が終了すると、図示しない終了信号がアサートされるとともに共通鍵演算部４から暗号文が出力される。このとき、制御部１６は、セレクタ６に対して０を選択することを指示する。セレクタ６は、その指示に従って０を出力する。
【００６０】
排他的論理和演算部５は、セレクタ６の出力値と共通鍵演算部４の出力との排他的論理和を演算する。その演算結果は暗号文として出力信号線１９に出力される（図３のステップＳ２０２）。このとき、制御部１６は、次の演算のために、排他的論理和演算部５の出力結果をマスク値レジスタ９に保存するように指示する。すなわち、制御部１６は、セレクタ８に対して出力信号線１９の入力を選択するように指示するとともに、マスク値レジスタ９に対してデータが書き込まれるように指示する。次の平文が入力された場合には、マスク値レジスタ９に保存されている値を初期値とするので、制御部１６は、セレクタ６に対してマスク値レジスタ９の値を選択するように指示する。排他的論理和演算部３は、セレクタ６の出力とセレクタ２の出力との排他的論理和を演算する。共通鍵演算部４は、この演算結果を入力し暗号演算を行う（図３のステップＳ２０４）。
【００６１】
次に、ＣＢＣモードの復号演算の手順についてさらに説明する。復号演算では、制御部１６は、セレクタ２に対して、入力された暗号文の選択を指示する。制御部１６は、モード指定信号がディアサートされていること、復号演算信号１７がアサートされていること、および、初期値信号１４がアサートされていることから、セレクタ６に対して０を出力するように指示する。これと同時に、初期値入力信号１１の値をマスク値レジスタ９に書き込むため、制御部１６は、セレクタ８に対して初期値入力信号１１の値を選択するように指示し、かつ、マスク値レジスタ９に書き込み指示を出す。上記の処理により、排他的論理和演算部３は、セレクタ６の出力とセレクタ２の出力との排他的論理和を演算する。その演算結果は共通鍵演算部４に入力される。
【００６２】
このとき、鍵選択部１５は、モード指定信号がディアサートされていることから、ＣＢＣモードのデータ用鍵データを選択して共通鍵演算部４に入力する。
【００６３】
共通鍵演算部４は、入力データと鍵データとが入力されると、復号演算を開始する。共通鍵演算部４は、復号演算が終了すると終了信号をアサートするとともに演算結果を出力する。このとき、制御部１６は、セレクタ６に対して初期値入力信号１１の値を選択するように指示する。これにより、セレクタ６は、初期値入力信号１１の値を選択して出力する。排他的論理和演算部５は、初期値入力信号１１の値と共通鍵演算部４の出力との排他的論理和を演算し、演算結果を平文として出力する（図４のステップＳ３０２）。
【００６４】
続いて復号演算を行う際には、初期値信号線がディアサートされて、入力データ信号１０に暗号文が入力され、起動信号１８がアサートされる。このとき、制御部１６は、ＣＢＣ／ＸＴＳモードがディアサート、初期値信号もディアサートされ、復号演算信号１７がアサートされていることから、ＣＢＣモードの復号演算であると判断する。制御部１６は、セレクタ６に対して０を選択するように指示する。この後、共通鍵演算部４が復号演算を開始する。
【００６５】
復号演算が終了すると上記で説明したように、排他的論理和演算部５が、復号演算の演算結果と、マスク値レジスタ９の値との排他的論理和を演算する。この演算結果が平文として出力信号線１９に出力される（図４のステップＳ３０４）。
【００６６】
このように、第１の実施形態にかかる暗号演算装置では、図１に示すような回路構成とすることで、ＸＴＳモードの暗号演算および復号演算と、ＣＢＣモードの暗号演算および復号演算とを行うことが可能となる。
【００６７】
（第２の実施形態）
ＣＢＣモードの復号演算では、共通鍵演算部４による復号演算が終了した後に、マスク値レジスタ９に記憶されている初期値と復号演算の演算結果との排他的論理和が演算される。このため、マスク値レジスタ９の値は、共通鍵演算部４の演算が終了するまで変更することができない。すなわち、共通鍵演算部４の演算が終了したのち、入力データ信号１０の値をマスク値レジスタ９書き込むことになる。
【００６８】
第２の実施形態にかかる暗号演算装置は、共通鍵演算部４の演算が終了した直後に、次の復号演算のための暗号文を入力データ信号１０に準備できるようにするため、入力データ信号１０の値を保持する回路（レジスタ）をさらに備える構成とする。
【００６９】
図５は、第２の実施形態にかかる暗号演算装置１−２の回路構成の一例を示すブロック図である。図５に示すように、暗号演算装置１−２は、出力マスクレジスタ２０をさらに備えたこと、および、制御部１６−２の機能が、第１の実施形態と異なっている。その他の構成は、第１の実施形態のブロック図である図１と同様であるため、同一の符号を付し説明を省略する。
【００７０】
第２の実施形態では、ＣＢＣモードの復号演算が開始されると、制御部１６−２は、セレクタ８に対して入力データ信号１０の値（暗号文Ｃ１）を保持するように指示を出し、出力マスクレジスタ２０にはセレクタ６を通じて入力データ信号１０の値を保持するように指示を出す。
【００７１】
共通鍵演算部４の演算が終了した後、排他的論理和演算部５は、出力マスクレジスタ２０の値と共通鍵演算部４の演算結果との排他的論理和を演算する。演算結果は平文として出力される。本実施形態では、次のブロックの演算で用いる暗号文Ｃ１の値（入力データ信号１０の値）を出力マスクレジスタ２０に保持しているため、共通鍵演算部４の演算終了と同時に入力データ信号１０に次の暗号文Ｃ２を用意することができる。
【００７２】
すなわち、暗号文Ｃ２の演算を開始するために起動信号１８がアサートされると同時に、制御部１６−２は、マスク値レジスタ９の値を出力マスクレジスタ２０へ移動し、同時に暗号文Ｃ２をマスク値レジスタ９に書き込むことを指示する。このような処理を行うことで、共通鍵演算部４の演算が終了するとともに、次の復号演算用のデータを準備して復号演算を開始することができるようになる。すなわち、ＣＢＣモードの復号演算を高速に処理することが可能となる。
【００７３】
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【００７４】
１  暗号演算装置
２  セレクタ
３  排他的論理和演算部
４  共通鍵演算部
５  排他的論理和演算部
６  セレクタ
７  乗算部
８  セレクタ
９  マスク値レジスタ
１６  制御部
２０  出力マスクレジスタ
【図１】
0005225414.tif 000002
【図２】
0005225414.tif 000003
【図３】
0005225414.tif 000004
【図４】
0005225414.tif 000005
【図５】
0005225414.tif 000006