(57)【要約】【課題】高速に暗号演算を実施できる暗号演算装置を得ること。【解決手段】暗号演算を行う入力データのデータ単位を第１のデータ単位とし、第２の鍵データと、前記第１のデータ単位より大きい第２のデータ単位ごとに定められたデータ情報と、に基づいて初期マスク値を生成する初期マスク値生成部と、前記初期マスク値に基づいて、前記第１のデータ単位ごとにマスク値を生成するマスク値更新部と、前記初期マスク値と、前記マスク値更新部が生成したマスク値と、を保持し、保持しているマスク値を出力するマスク値保持部と、第１のデータ単位の入力データと、第１の鍵データと、前記マスク値保持部から出力されたマスク値と、に基づいて前記第１のデータ単位の入力データを暗号化した暗号化データを生成するデータ暗号演算部と、を備える。【選択図】図１
2012009928.tif 000002
【特許請求の範囲】
【請求項１】
データの暗号化用の第１の鍵データと、初期マスク値生成用の第２の鍵データと、を用いて第１のデータ単位ごとに暗号演算を行なう暗号演算装置であって、
前記第２の鍵データと、前記第１のデータ単位より大きい第２のデータ単位ごとに定められたデータ情報と、に基づいて初期マスク値を生成する初期マスク値生成部と、
前記初期マスク値に基づいて、前記第１のデータ単位ごとにマスク値を生成するマスク値更新部と、
前記初期マスク値と、前記マスク値更新部が生成したマスク値と、を保持し、保持しているマスク値を出力するマスク値保持部と、
前記第１のデータ単位の入力データと、前記第１の鍵データと、前記マスク値保持部から出力されたマスク値と、に基づいて前記第１のデータ単位の入力データを暗号化した暗号化データを生成するデータ暗号演算部と、
を備える、
ことを特徴とする暗号演算装置。
【請求項２】
前記データ暗号演算部を複数備え、
前記マスク値保持部は、前記データ暗号演算部ごとに、前記データ暗号演算部が処理対象とする前記入力データに対応するマスク値を出力する、
ことを特徴とする請求項１に記載の暗号演算装置。
【請求項３】
前記マスク値更新部は、ガロア体の乗算を行なうことにより前記マスク値を生成する、
ことを特徴とする請求項１または２に記載の暗号演算装置。
【請求項４】
前記データ暗号演算部は、
前記マスク値保持部から入力された前記マスク値を保持する演算用マスク値保持部と、
前記演算用マスク値保持部が保持している前記マスク値と、前記入力データと、の排他的論理和を第１の演算結果として算出する第１の排他的論理和算出部と、
前記第１の演算結果と、前記第１の鍵データと、に基づいて所定の共通鍵暗号演算を実施することにより第２の演算結果を算出する暗号演算部と、
前記第２の演算結果と、前記演算用マスク値保持部が保持している前記マスク値と、の排他的論理和を前記暗号化データとして算出する第２の排他的論理和算出部と、
を備えることを特徴とする請求項１、２または３に記載の暗号演算装置。
【請求項５】
前記暗号化データは、データを不揮発に記憶するためのメモリ装置に書き込まれることとし、
前記第２のデータ単位を前記メモリ装置のセクターとし、前記第１のデータ単位を前記メモリ装置のブロックとし、前記データ情報をセクター番号とする、
ことを特徴とする請求項１〜４のいずれか１つに記載の暗号演算装置。
【請求項６】
前記データ暗号演算部は、暗号演算または復号演算を指示する指示信号の入力を受付け、前記指示信号が暗号演算を指示する信号であった場合に、前記入力データを暗号化した前記暗号化データを生成し、前記指示信号が復号演算を指示する信号であった場合に、前記入力データを復号する復号演算を実施する、
ことを特徴とする請求項１〜５のいずれか１つに記載の暗号演算装置。
【請求項７】
不揮発に記憶対象データを記憶するためのメモリ部と、
データの暗号化用の第１の鍵データと、初期マスク値生成用の第２の鍵データと、を用いて第１のデータ単位ごとに暗号演算を行なう暗号演算装置と、
前記初期マスク値生成部へ前記第２の鍵データと前記第１のデータ単位より大きい第２のデータ単位ごとに定められたデータ情報とを入力し、また、前記暗号演算装置へ前記第１の鍵データと、暗号化対象の前記第１の単位の入力データとを入力し、また、前記暗号演算装置が生成する暗号化データを前記メモリ部へ書き込む制御部と、
を備え、
前記暗号演算部は、
前記制御部から入力される前記第２の鍵データと前記データ情報とに基づいて、初期マスク値を生成する初期マスク値生成部と、
前記初期マスク値に基づいて、暗号演算を行なう入力データのデータ単位である第２のデータ単位ごとにマスク値を生成するマスク値更新部と、
前記初期マスク値と、前記マスク値更新部が生成したマスク値と、を保持し、保持しているマスク値を出力するマスク値保持部と、
前記制御部から入力される前記第１のデータ単位の入力データと前記第１の鍵データと、と、前記マスク値保持部から出力されたマスク値と、に基づいて前記第１のデータ単位の入力データを暗号化した暗号化データを生成するデータ暗号演算部と、
を備える、
ことを特徴とする記憶装置。
【請求項８】
前記データ暗号演算部は、暗号演算または復号演算を指示する指示信号の入力を受付け、前記指示信号が暗号演算を指示する信号であった場合に、前記入力データを暗号化した前記暗号化データを生成し、前記指示信号が復号演算を指示する信号であった場合に、前記入力データを復号する復号演算を実施し、
前記制御部は、前記メモリ部へのデータ書き込み処理を行う場合には、前記暗号演算部に暗号演算の実施を指示する前記指示信号を入力し、前記初期マスク値生成部へ前記第２の鍵データと前記データ情報とを入力し、前記暗号演算装置へ前記第１の鍵データと、暗号化対象の第２の単位の入力データとを入力し、前記暗号演算装置が生成する暗号化データを前記メモリ部へ書き込み、一方、前記暗号演算部に復号演算の実施を指示する前記指示信号を入力し、前記メモリ部からのデータ読み出し処理を行う場合には、前記暗号化データを読み出し、前記初期マスク値生成部へ前記第２の鍵データと前記データ情報とを入力し、また、前記暗号演算装置へ前記第１の鍵データと読みだした前記暗号化データとを入力し、また、前記暗号演算装置の復号演算結果を出力する、
ことを特徴とする請求項７に記載の記憶装置。
【請求項９】
データの暗号化用の第１の鍵データと、初期マスク値生成用の第２の鍵データと、を用いて第１のデータ単位ごとに暗号演算を行なう暗号演算装置における暗号演算方法であって、
前記暗号演算装置は、初期マスク値を生成する初期マスク生成部と、データの暗号演算を行うデータ暗号演算部とを備えることとし、
前記初期マスク生成部が、前記第２の鍵データと、前記第１のデータ単位より大きい第２のデータ単位ごとに定められたデータ情報と、に基づいて初期マスク値を生成する初期マスク値生成ステップと、
前記初期マスク値に基づいて、前記第１のデータ単位ごとにマスク値を生成するマスク値更新ステップと、
前記初期マスク値と、前記マスク値更新部が生成したマスク値と、を保持し、保持しているマスク値を、前記データ暗号演算部へ出力するマスク値保持ステップと、
前記データ暗号演算部が、前記第１のデータ単位の入力データと、前記第１の鍵データと、前記マスク値保持ステップで出力されたマスク値と、に基づいて前第１のデータ単位の入力データを暗号化した暗号化データを生成するデータ暗号演算ステップと、
含むことを特徴とする暗号演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、暗号演算装置、記憶装置および暗号演算方法に関する。
【背景技術】
【０００２】
共通鍵方式の暗号アルゴリズムは、あらかじめ決められた長さ(ブロック長)のデータを秘匿化することが目的として設計されたものであり、そのままではブロック長よりも長いデータの秘匿化を行うことができない。しかし、秘匿化したいデータがブロック長よりも長い場合であっても共通鍵方式の暗号アルゴリズムを用いてブロック長より長いデータの秘匿化を行えるような演算方法や、もとのデータの改ざん検出のための認証子を生成する演算方式などが開発されている。このように共通鍵暗号方式を基本としてさまざまな用途に向いた暗号演算方法は、暗号利用モードと呼ばれる。
【０００３】
この暗号利用モードの一つとして、ストレージデバイスに保存されるデータの秘匿化に特化して設計された利用モードとしてＸＴＳ（Ｘｏｒ−Ｅｎｃｒｙｐｔ−Ｘｏｒ−ｂａｓｅｄ  Ｔｗｅａｋｅｄ  ＣｏｄｅＢｏｏｋ  ｗｉｔｈ  ＣｉｐｈｅｒＴｅｘｔ  Ｓｔｅａｌｉｎｇ）があり、その仕様はＩＥＥＥ（Ｔｈｅ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）  Ｐ１６１９で定められている（下記非特許文献１参照）。
【０００４】
ＸＴＳモードでは、入力データを暗号化するために用いる鍵データ＃１とデータ初期マスク値を生成するための鍵データ＃２との２つの鍵データを用いて暗号化および復号化を行う。ＸＴＳモードの暗号演算では、最初にＴｗｅａｋ  Ｖａｌｕｅと呼ばれる値と鍵データ＃２を用いて初期マスク値を生成する。Ｔｗｅａｋ  Ｖａｌｕｅとしては、通常ストレージデバイスのセクター番号を用いる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】ＳＰ８００−３８Ｅ／ＩＥＥＥ−Ｓｔｄ−１６１９−２００７
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＸＴＳモードでは、初期マスク値の生成時に暗号演算を１回行う。この初期マスク値生成のための暗号演算が終わらなければ秘匿化または復元対象のデータの暗号演算を行うことができない。そのため、秘匿化または復元化演算の全体の演算時間には、秘匿化または復元対象のデータの暗号演算自体の演算速度だけでなく、初期マスク値生成のための演算時間が影響する。
【０００７】
また、Ｔｗｅａｋ  Ｖａｌｕｅにセクター番号が用いられる場合、複数のセクターに対応するデータを連続して書き込む際に、セクター番号が変更されるたびに、再び初期マスク値の生成を行う必要がある。この際、変更後のセクターに対応する初期マスク値の生成のために必要な情報が揃っていたとしても、変更前のセクターのデータの暗号演算が終了していなければ、変更後のセクターに対応する初期マスク値の生成処理を開始できない。
【課題を解決するための手段】
【０００８】
実施の形態の暗号演算装置は、データの暗号化用の第１の鍵データと、初期マスク値生成用の第２の鍵データと、を用いて第１のデータ単位ごとに暗号演算を行なう暗号演算装置であり、前記第２の鍵データと、前記第１のデータ単位より大きい前記第２のデータ単位ごとに定められたデータ情報と、に基づいて初期マスク値を生成する初期マスク値生成部、を備える。また、この暗号演算装置は、初期マスク値に基づいて、前記第１のデータ単位ごとにマスク値を生成するマスク値更新部と、前記初期マスク値と前記マスク値更新部が生成したマスク値とを保持し、保持しているマスク値をデータ暗号演算部へ出力するマスク値保持部と、を備える。さらに、初期マスク値生成部とは別に、前記第１のデータ単位の入力データと、前記第１の鍵データと、前記マスク値保持部から出力されたマスク値と、に基づいて前記第１のデータ単位の入力データを暗号化した暗号化データを生成するデータ暗号演算部、を備えることを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態の暗号演算用回路の機能構成例を示す図である。
【図２】図２は、実施の形態の記憶装置の機能構成例を示す図である。
【図３】図３は、ＸＴＳの暗号演算手順の一例を示すフローチャートである。
【図４】図４は、データ演算用暗号コアの機能構成例を示す図である。
【図５】図５は、実施の形態の記憶装置の書き込みおよび読み出し手順の一例を示すフローチャートである。
【図６】図６は、実施の形態の処理タイミングの概念の一例を示す図である。
【発明を実施するための形態】
【００１０】
（実施の形態）
図１は、本実施の形態の暗号演算回路（暗号演算装置）の機能構成例を示す図である。図１に示すように、本実施の形態の暗号演算回路は、初期マスク値生成用暗号コア（初期マスク値生成部）１１と、データ演算用暗号コア（データ暗号演算部）１２−１〜１２−Ｎと、マスク値保持回路（マスク値保持部）１３と、マスク値更新回路（マスク値更新部）１４と、セレクタ１５，１６と、で構成される。また、初期マスク値生成用暗号コア（初期マスク値生成用演算部）１１は、初期マスク値保持回路２１を備え、データ演算用暗号コア（データ用暗号演算部）１２−ｋ（ｋ＝１，２，…，Ｎ）は、マスク値保持回路（演算用マスク値保持部）２２−ｋを備えている。
【００１１】
本実施の形態の暗号演算用回路１は、データを不揮発に記憶するための記憶装置（ストレージデバイス）に組み込まれる回路である。本実施の形態の暗号演算用回路１が組み込まれる記憶装置は、例えば、ＮＡＮＤ型半導体メモリ装置や磁気ディスク装置などであり、記憶方式に限定はない。
【００１２】
図２は、本実施の形態の記憶装置の機能構成例を示す図である。図２に示すように、本実施の形態の記憶装置は、メモリ部２と、本実施の形態の暗号演算回路１と、インタフェース回路３と、ファームウェア部４と、で構成され、例えば計算機ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５から入力される書き込み対象のデータを暗号化して記憶する。
【００１３】
本実施の形態の記憶装置は、入力される書き込み対象のデータを暗号化した後にメモリ部２へ格納し、メモリ部２へ格納されているデータの読みだす際には、読みだしたデータを復号化して出力する。メモリ部２は、ＮＡＮＤフラッシュメモリ等の不揮発にデータを記憶する記憶手段である。
【００１４】
インタフェース回路３は、計算機ＯＳ５からのデータ書き込み要求に基づいて、計算機ＯＳ５から入力されるデータをメモリ部２へ書き込みを行い、また計算機ＯＳ５からのデータ読み出し要求に基づいて、メモリ部２に記憶されているデータの読み出しを行う。また、インタフェース回路３は、メモリ部２への書き込み時には、書き込み対象のデータを暗号化するよう暗号演算回路１へ指示し、メモリ部２からの読み出し時には、読み出したデータを復号化するよう暗号演算回路１へ指示する。すなわち、インタフェース回路３は、データの読み出しおよび書き込みと、暗号化および復号化と、を制御する制御部である。
【００１５】
また、本実施の形態では、メモリ部２への書き込みをブロック単位で行うこととし、ブロックごとに入力データを暗号化して暗号化データを生成する。１ブロックの大きさに制約はないが、ここでは一例として１ブロックを１２８ｂｉｔとする。また、複数のブロックで１つのセクターを構成することとし、ここでは一例として１セクターを５１２バイトとする。なお、１セクターのデータ量は５１２バイト以外でもよいが、ここでは１セクターは１ブロックの整数倍であるとする。
【００１６】
つぎに、本実施の形態の動作について説明する。なお、本実施の形態では、メモリ部２へ書き込むデータの暗号化方式としてＸＴＳモードの暗号化方式（以下、ＸＴＳという）を用いる。ここでは、初期マスク値に生成に用いるＴｗｅａｋ  Ｖａｌｕｅとして、セクター番号を用いることとする。また、ＸＴＳの暗号演算では、初期マスク値の生成のための鍵データ＃１とデータ暗号化のための鍵データ＃２とを１組とする鍵情報を用いる。この鍵情報は、どのような単位で定めておいてもよいが、メモリ部２を複数のエリアに分割し、分割したエリアごとに同一の鍵情報を用いるとする。例えば、１２８ＧＢの容量である場合に、３２ＧＢごとに同一の鍵情報を用いる。したがって、同一エリアに属するセクターは同一の鍵情報を用いる。インタフェース回路３は、鍵情報とエリアの対応、およびエリアとそのエリア内のセクター番号の対応を保持しているとし、セクター番号ごとに用いる鍵情報を把握しているとする。
【００１７】
ここで、ＸＴＳの一般的な暗号演算処理について説明する。図３は、ＸＴＳの暗号演算手順の一例を示すフローチャートである。図３は、１つのセクター（セクター番号ｉ（ｉ＝は０以上の整数））について暗号化処理を行う場合を示している。複数のセクターについて連続して暗号化処理を行う場合には、セクター番号を更新して図３に示す処理を繰り返す。
【００１８】
まず、セクター番号ｉと鍵データ＃２（Ｋｅｙ２）とに基づいて、以下の式（１）に基づいて初期マスク値Ｔ0の生成処理を実施し、ｊを０に初期化する（ステップＳ１）。なお、ＡＥＳｅｎｃ（）は、共通鍵暗号演算処理の１種であるＡＥＳの暗号演算処理を表し、αj（ｊ＝０，１，２、…，ｍ−１）は、ガロア体の原始元を示す。ｍは、１セクターを構成するブロック数である。
Ｔ0＝ＡＥＳｅｎｃ（Ｋｅｙ２，ｉ）×α0                  …（１）
【００１９】
つぎに、データ暗号演算が開始され、まず、ｊ番目のブロックに対応する入力データ（暗号化対象データ）ＰjとＴjとの排他的論理和ＰＰを算出する（ステップＳ２）。そして、ＰＰと鍵データ＃１（Ｋｅｙ１）を用いて以下の式（２）に従ってＣＣを算出し（ステップＳ３）、さらにＣＣとＴjとの排他的論理和として暗号化データＣjを求める（ステップＳ４）。
ＣＣ＝ＡＥＳｅｎｃ（Ｋｅｙ１，ＰＰ）                  …（２）
【００２０】
つぎに、ｊ＝ｍ−１であるか否か（すなわちセクターの最後のブロックであるか否か）を判断し（ステップＳ５）、ｊ＝ｍ−１である場合（ステップＳ５  Ｙｅｓ）はそのセクターの暗号化処理を終了する。ｊ＝ｍ−１でない場合（ステップ５  Ｎｏ）、ｊを１インクリメントし（ステップＳ６）、Ｔjを以下の式（３）に従って更新して（ステップＳ７）、ステップＳ２に戻る。
Ｔj＝Ｔj-1×αj-1                                          …（３）
【００２１】
以上のように、ＸＴＳの暗号演算では、ステップＳ１で示したように、初期マスク値の生成に暗号演算を実施する。また、この演算結果である初期マスク値を用いて、ステップＳ２〜ステップＳ４で示すような入力データ（書き込みデータ）を暗号化するための演算が行われる。ステップＳ１とステップＳ３の暗号演算（ＡＥＳｅｎｃ（））は入力値が異なるだけで同様の演算である。したがって、１つの暗号コアを用いて演算をする場合、図３に示した処理をステップごとに実施することになる。そのため、初期マスク値の生成が終了するまで、入力データに対する暗号化の処理が実施できない。また、複数のセクターに対応するデータを連続して書き込む場合、次のセクターに対応する初期マスク値の生成のために必要な情報が揃っていたとしても、暗号化の処理中のセクターのデータの暗号演算が終了していないと、次のセクターの初期マスク値の生成処理を開始できない。
【００２２】
これに対し、本実施の形態では、入力データに対しての暗号演算（ステップＳ２に対応）を行う暗号コア（データ演算用暗号コア１２−１〜１２−Ｎ）と別に、初期マスク値生成用暗号コア１１を備え、前のセクターの入力データの暗号演算が終了していない場合でも、初期マスク値生成に必要な情報が揃い次第、初期マスク値の生成処理を開始し、処理結果を初期マスク値保持回路２１に保持する。したがって、次のセクターの入力データの暗号演算を開始する際に、保持している初期マスク値を参照すればよいため、初期マスク値の生成を待機する時間を短縮することができる。
【００２３】
さらに、本実施の形態では、入力データに対しての暗号演算（ステップＳ２に対応）を行う暗号コア（データ演算用暗号コア１２−１〜１２−Ｎ）についても複数備え、ブロックごとの暗号演算（ステップＳ２〜ステップＳ４）を並列に実施する。このため、入力データに対しての暗号演算の処理時間を、１つの暗号コアを用いる場合に比べ短縮することができる。なお、この際、処理対象のブロック番号をｊとすると、上記のステップＳ２では、ｊ＝０の場合は、初期マスク値（Ｔ0）を用いるが、ｊ≧１では、ステップＳ７で更新されたマスク値Ｔjを用いる。
【００２４】
このマスク値Ｔjを生成する演算は、Ｔ0が生成されれば、ステップＳ２〜ステップＳ４の処理を待たずに、Ｔ1，Ｔ0，…,  Ｔm-1の順に、順次生成することができる。本実施の形態では、マスク値更新回路１４がこのマスク値Ｔｊを更新して、セレクタ１５経由でマスク値保持回路１３に格納する。そして、マスク値保持回路１３に格納されたマスク値Ｔｊはインタフェース回路３の指示により、ｊ番目のブロックの暗号演算を行うデータ演算用暗号コア１２−ｊ（ここでは一例としてｊ番目のブロックの暗号演算を行うデータ演算用暗号コアをデータ演算用暗号コア１２−ｊとする）のマスク値保持回路２２−ｊに格納される。
【００２５】
そして、マスク値保持回路２２−ｊにマスク値Ｔｊを格納すると、インタフェース回路３は、マスク値更新回路１４にマスク値の更新（Ｔｊ+1の生成）を指示する。そして、マスク値保持回路１３に格納されたマスク値Ｔｊ+1はインタフェース回路３の指示により、ｊ＋１番目のブロックの暗号演算を行うデータ演算用暗号コア１２−（ｊ＋１）のマスク値保持回路２２−（ｊ＋１）に格納される。以降、順にマスク値が更新され、対応するデータ演算用暗号コア１２−１〜１２−Ｎのマスク値保持回路２２−１〜２２−Ｎに格納される。そして、データ演算用暗号コア１２−ｊは、インタフェース回路３は入力データと鍵データ＃１を受け取り、起動を指示されると、マスク値保持回路２２−ｊに格納されたマスク値Ｔjを用いてステップＳ２〜ステップＳ４の暗号化演算を行う。
【００２６】
上述のように、本実施の形態のデータ演算用暗号コア１２−１〜１２−Ｎは、ステップＳ２〜ステップＳ４の暗号化演算を行う。図４は、データ演算用暗号コア１２−１の構成例を示す図である。本実施の形態のデータ演算用暗号コア１２−１は、例えば、マスク値Ｔjを保持するマスク値保持回路２２−１と、マスク値Ｔjと、入力データＰjと、の排他的論理和ＰＰを算出する第１の排他的論理和算出回路２３と、ＰＰと、鍵データ＃１と、に基づいてＸＴＳの暗号演算（共通鍵暗号演算）を実施してＣＣを求める暗号演算回路２４と、ＣＣと、マスク値Ｔjと、の排他的論理和として暗号化データＣjを算出する第２の排他的論理和算出回路２５と、を備えることになる。データ演算用暗号コア１２−２〜１２−Ｎの構成もデータ演算用暗号コア１２−１の構成と同様である。なお、データ演算用暗号コア１２−１〜１２−Ｎの構成は、これに限らず、同様の演算が実施できればどのような構成としてもよい。
【００２７】
データ演算用暗号コア１２−１と処理対象ブロックとの対応は、例えばセクターの最初のブロックから順にデータ演算用暗号コア１２−１，データ演算用暗号コア１２−２，…が処理すると対応付けておいてもよいし、インタフェース回路３が、処理の都度、ブロックごとに処理を行う暗号コアを、処理中でないデータ演算用暗号コア１２−１〜１２−Ｎのなかから選択してもよい。
【００２８】
さらに、この初期マスク値生成用暗号コア１１を備えることで、復号演算処理も高速化することもできる。以下に、復号演算について説明する。ＸＴＳでは、復号演算処理の際、暗号演算時の初期マスク値生成処理と同様の処理を実施する。すなわち、ステップＳ１と同じ暗号演算を復号演算時にも実施し、Ｔ0を求める。そして、暗号化データＣjを入力データとする復号演算では、ステップＳ２´として、ＣjとＴjとの排他的論理和ＣＣを算出する。さらに、ステップＳ３´として、以下の式（４）に示す演算を行なう。なお、ＡＥＳｄｅｃ（）はＡＥＳの復号演算を示す。
ＰＰ＝ＡＥＳｄｅｃ（Ｋｅｙ１，ＣＣ）                  …（４）
【００２９】
つぎに、ステップＳ４´としてＰＰとＴjとの排他的論理和Ｐを求める。そして、暗号演算処理のステップＳ５〜ステップＳ７と同様の処理を行うことにより、ブロックごとの復号化処理を実施する。
【００３０】
以上のように、復号演算処理においても、ステップＳ１の処理（復号鍵の生成処理）を実施するため、初期マスク値生成用暗号コア１１が復号演算処理におけるステップＳ１の処理を実施することが可能である。さらに、暗号化データの復号化処理ステップＳ２´〜ステップＳ４´は、ステップＳ３´の演算が暗号演算から復号演算に変わるだけで、後の演算は入力が異なるだけで同様の演算である。したがって、データ演算用暗号コア１２−１〜１２−Ｎが、暗号演算だけでなく復号演算も実施するようにしてもよい。また、初期マスク値生成用暗号コア１１は暗号化演算と復号化演算で共用し、復号演算を並列して実施する複数のデータ演算用暗号コアをデータ演算用暗号コア１２−１〜１２−Ｎとは別に備えてもよい。
【００３１】
本実施の形態のデータ演算用暗号コア１２−ｊが復号演算も行う場合は、例えば、上述の暗号演算回路２４が復号演算を行う機能も有することとし、上述の第１の排他的論理和算出回路２３が、ＣjとＴjとの排他的論理和ＣＣを算出し、暗号演算回路２４が、ＣＣと鍵データ＃１（Ｋｅｙ１）を用いた復号演算を行いＰＰを算出し、第２の排他的論理和回路２５が、ＰＰとＴjとの排他的論理和Ｐを求める。なお、暗号演算部とは別に復号演算部を備え、復号演算部がＣＣと鍵データ＃１を用いた復号演算を行うようにしてもよい。
【００３２】
復号演算処理においても、データ演算用の暗号コアとは別の初期マスク値生成用暗号コア１１が復号演算処理におけるステップＳ１の処理を実施することにより、暗号演算処理と同様に、複数のセクターを連続して処理する場合に、ステップＳ１の処理に必要な情報が揃い次第ステップＳ１の演算を行うことができる。したがって、入力データ（復号演算の場合は暗号化データ）の復号演算の開始までの時間を短縮することができる。
【００３３】
図５は、本実施の形態の記憶装置の書き込みおよび読み出し手順の一例を示すフローチャートである。まず、書き込み手順について説明する。本実施の形態のインタフェース回路３は、計算機ＯＳ５からの入力を待機する（ステップＳ２１）、データ書き込み要求を受け取る（ステップＳ２２）と、書き込み要求のあったデータの論理アドレスに対応するセクター番号の取得をファームウェア部４へ指示し、論理アドレスに対応するセクター番号をファームウェア部４から受け取る（ステップＳ２３）。
【００３４】
なお、計算機ＯＳ５は、データ書き込み要求（または読み出し要求）を記憶装置へ通知するとともに、書き込み対象（読み出し対象）のデータを記憶装置（インタフェース回路３）へ入力するとする。なお、書き込み対象のデータの論理アドレスは、計算機ＯＳ５から指示されてもよいし、インタフェース回路３が決定してもよい。また、ファームウェア部４は、論理アドレスとセクター番号との対応を保持しているとし、インタフェース回路３からの指示に基づいて論理アドレスに対応するセクター番号を出力するとする。
【００３５】
つぎに、インタフェース回路３は、取得したセクター番号（Ｔｗｅａｋ  Ｖａｌｕｅ）と、取得したセクター番号に対応する鍵データ＃２と、を初期マスク値生成用暗号コア１１に設定し（ステップＳ２４）、初期マスク値生成用暗号コア１１を起動する（ステップＳ２５）。
【００３６】
初期マスク値生成用暗号コア１１は、演算終了後、演算結果（初期マスク値）を初期マスク値保持回路２１に書き込む（ステップＳ２６）。インタフェース回路３は、マスク値更新信号により、初期マスク値保持回路２１に書き込まれた初期マスク値をマスク値保持回路１３へ書き込む（ステップＳ２７）。具体的には、インタフェース回路３は、マスク値更新信号をセレクタ１５へ入力し、これによりセレクタ１５は初期マスク値保持回路２１に書き込まれた初期マスク値をマスク値保持回路１３へ出力し、マスク値保持回路１３は入力された値を保持する。
【００３７】
つぎに、インタフェース回路３は、入力データ（書き込み対象データ）と鍵データ＃１と、暗号の指示信号と、を入力データのブロック番号に対応する演算用暗号コア１２−ｊへ入力し、当該コアを起動する（ステップＳ２８）。なお、ここでは、データ演算用暗号コア１２−１〜１２−Ｎが復号演算についても実施するとし、演算用暗号コア１２−１〜１２−Ｎは、暗号の指示信号が入力された場合には暗号演算を行い、復号の指示信号が入力された場合には復号演算を行うとする。
【００３８】
また、インタフェース回路３は、データ演算用暗号コア１２−ｊの起動と同時に、マスク値保持回路１３に格納されているマスク値Ｔjをデータ演算用暗号コア１２−ｊのマスク値保持回路２２−ｊに書き込み、かつマスク値更新回路１４に対してマスク値の更新を指示し、更新後のマスク値Ｔj＋１をマスク値保持回路１３に格納するようセレクタ１５に指示する（ステップＳ２９）。
【００３９】
そして、インタフェース回路３は、ステップＳ２８での入力データがセクターの最後のブロックに対応する入力データであるか否かを判断し（ステップＳ３０）、最後の入力データでない場合（ステップＳ３０  Ｎｏ）には、ブロック番号ｊを１インクリメントし、ステップＳ２８へ戻り次のブロックについての処理を実施する。
【００４０】
ステップＳ２８での入力データがセクターの最後のブロックに対応する入力データであると判断した場合（ステップＳ３０  Ｙｅｓ）、インタフェース回路３は、さらに、次にセクターの書き込み処理を行うか否か（書き込みが続くか否か）を判断する（ステップＳ３１）。次のセクターの書き込み処理を行う場合（ステップＳ  ３１  Ｙｅｓ）には、ステップＳ２３に戻り、次のセクターの書き込み処理を実施する。また、ステップＳ３１で次のセクターの書き込み処理を行なわないと判断した場合（ステップＳ３０  Ｎｏ）、ステップＳ２１に戻る。
【００４１】
図６は、本実施の形態の処理タイミングの概念の一例を示す図である。図６では、各構成要素名に示した横線が処理時間を表している。この処理タイミング例では、複数のセクターについて連続して書き込み処理すなわち暗号演算を行う例を示している。なお、図６ででは、各セクターの最初のブロックをデータ暗号用演算コア１２−１が暗号化処理を行うこととし、次のブロックをデータ暗号用演算コア１２−２が処理し、…と番号順に処理していく例を示している。
【００４２】
図６に示すように、初期マスク値生成用暗号コア１１は、セクターごとに、初期値マスク値を生成するが、図６に示すように前のセクターのデータの暗号演算が終了していなくても、次のセクターのマスク値を算出することができる。また、データ暗号用演算コア１２−１へ次のセクターの入力データが入力された時点では、既に初期マスク値の算出が終了しているため、入力データが揃い次第、暗号演算を開始することができる。さらに、データ暗号用演算コア１２−１〜１２−Ｎが並列処理を行っているため、高速に暗号演算を行うことができる。なお、図６は処理タイミングの概念を示しており、各処理時間の相対関係等は実際とは異なる。また、図６の処理タイミングは一例であり、各々の処理タイミングはこれに限らず、初期マスク値生成用暗号コア１１とデータ暗号用演算コア１２−１〜１２−Ｎとの並列処理、データ暗号用演算コア１２−１〜１２−Ｎ間の並列処理が実施できるようなタイミングであればどのような処理タイミングとしてもよい。
【００４３】
以上は書き込み処理の場合について説明したが、メモリ部２からの暗号化データの読み出し処理の場合にも、図５と同様の処理を実施する。読み出し処理の場合には、ステップＳ２２では、書き込み要求の代わりに読み出し要求を受け取る。また、ステップＳ２８では、復号指示信号をデータ演算用暗号コア１２−ｊに入力する。また、ステップＳ２８では、メモリ部２から復号対象の暗号化データを読み出し、入力データとする。
【００４４】
また、インタフェース回路３は、セレクタ１６に対して出力データとして選択するデータ演算用暗号コア２１−１〜１２−Ｎを指示する。セレクタ１６は、指示に基づいてデータ演算用暗号コア２１−１〜１２−Ｎからの出力データのうちいずれか１つを選択して出力する。そして、インタフェース回路３は、データ書き込む処理の場合には、セレクタ１６から出力される出力データをメモリ部２へ書き込み、データ読み出し処理の場合には、セレクタ１６から出力される出力データを計算機ＯＳ５へ出力する。
【００４５】
このように、本実施の形態では、初期マスク値生成用暗号コア１１をデータの暗号演算用の暗号コアと別に備え、さらにデータ暗号演算用の暗号コア（データ演算用暗号コア１２−１〜１２−Ｎ）を複数備え、ブロックごとにデータの暗号演算を並列に処理するようにした。そのため、データの暗号演算を高速化できるとともに、データの暗号演算の進捗状況と無関係に任意のタイミングで初期マスク値および復号鍵を生成することができ、さらに初期マスク値生成処理および復号鍵生成処理を隠ぺいすることができる。また、マスク値を各データ演算用暗号コア１２−１〜１２−Ｎが保持するような回路構成とすることで、処理中のデータ演算に影響を与えずに、任意のタイミングで初期マスク値を更新することができ、異なるセクターのデータを混在させて暗号・復号演算を行うことができる暗号回路となる。
【符号の説明】
【００４６】
１  暗号演算回路、２  メモリ部、３  インタフェース回路、１１  初期マスク値生成用暗号コア、１２−１〜１２−Ｎ  データ演算用暗号コア、１３，２２−１〜２２−Ｎ  マスク値保持回路、１５，１６  セレクタ、２１  初期マスク値保持回路、２３  第１の排他的論理和算出回路、２４  暗号演算回路、２５  第２の排他的論理和算出回路。
【図１】
2012009928.tif 000003
【図２】
2012009928.tif 000004
【図３】
2012009928.tif 000005
【図４】
2012009928.tif 000006
【図５】
2012009928.tif 000007
【図６】
2012009928.tif 000008