(57)【特許請求の範囲】
【請求項１】
平文ブロックから暗号文ブロックへＡＥＳ演算により暗号化するＡＥＳ暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、
ＡＥＳ暗号化の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、平文ブロックからＸＯＲ演算により生成されるパリティデータと、前記ＡＥＳ暗号化部から出力されるＡＥＳ演算途中結果とを演算し、前記ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する演算部を備え、
前記演算部は、
前記暗号鍵からＸＯＲ演算により生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部のＡＥＳ演算における拡張鍵からＸＯＲ演算により生成されるパリティデータを、下位１／４の領域を４分割したデータ単位にローテート演算し、前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データから生成されるパリティデータと等価な値を出力するＲｏｔＷｏｒｄパリティ演算部と、
前記ＡＥＳ暗号化部におけるＳｕｂＷｏｒｄ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｕｂＷｏｒｄパリティ演算部と
を備え、
前記ＳｕｂＷｏｒｄパリティ演算部は、
前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＳｕｂＷｏｒｄパリティ生成部と、
前記ＳｕｂＷｏｒｄパリティ生成部により生成されるパリティデータと、前記ＲｏｔＷｏｒｄパリティ演算部からの出力データとを比較するＳｕｂＷｏｒｄパリティチェック部と
を備えることを特徴とする演算装置。
【請求項２】
前記演算部は、
前記暗号鍵からＸＯＲ演算により生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部におけるＳｕｂＷｏｒｄ演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データに基づいて生成されるデータとをＸＯＲ演算し、前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データから生成されるパリティデータと等価な値を出力するＡｄｄＲｏｕｎｄＫｅｙパリティ演算部と、
前記ＡＥＳ暗号化部におけるＳｕｂＢｙｔｅｓ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｕｂＢｙｔｅｓパリティ演算部と
を備え、
前記ＳｕｂＢｙｔｅｓパリティ演算部は、
前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＳｕｂＢｙｔｅｓパリティ生成部と、
前記ＳｕｂＢｙｔｅｓパリティ生成部により生成されるパリティデータと、前記ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部からの出力データとを比較するＳｕｂＢｙｔｅｓパリティチェック部と
を備えることを特徴とする請求項１に記載の演算装置。
【請求項３】
前記ＳｕｂＢｙｔｅｓパリティ演算部からの出力データを１６分割したデータ単位にローテート演算し、前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｈｉｆｔＲｏｗｓパリティ演算部と、
前記ＡＥＳ暗号化部におけるＭｉｘＣｏｌｕｍｎｓ演算後の出力データから生成されるパリティと等価な値を出力するＭｉｘＣｏｌｕｍｎｓパリティ演算部と
を備え、
前記ＭｉｘＣｏｌｕｍｎｓパリティ演算部は、
前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＭｉｘＣｏｌｕｍｎｓパリティ生成部と、
前記ＭｉｘＣｏｌｕｍｎｓパリティ生成部により生成されるパリティデータと、前記ＳｈｉｆｔＲｏｗｓパリティ演算部からの出力データとを比較するＭｉｘＣｏｌｕｍｎｓパリティチェック部と
を備えることを特徴とする請求項２に記載の演算装置。
【請求項４】
平文ブロックから暗号文ブロックへＡＥＳ演算により暗号化するＡＥＳ暗号化部の最終演算結果をチェックするためのデータを出力する演算装置の演算方法であって、
演算部が、ＡＥＳ暗号化の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、平文ブロックからＸＯＲ演算により生成されるパリティデータと、
前記ＡＥＳ暗号化部から出力されるＡＥＳ演算途中結果とを演算し、前記ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する演算ステップ
を備え、
前記演算ステップでは、
ＲｏｔＷｏｒｄパリティ演算部が、前記暗号鍵からＸＯＲ演算により生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部のＡＥＳ演算における拡張鍵からＸＯＲ演算により生成されるパリティデータを、下位１／４の領域を４分割したデータ単位にローテート演算し、前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データから生成されるパリティデータと等価な値を出力するＲｏｔＷｏｒｄパリティ演算ステップと、
ＳｕｂＷｏｒｄパリティ演算部が、前記ＡＥＳ暗号化部におけるＳｕｂＷｏｒｄ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｕｂＷｏｒｄパリティ演算ステップと
を備え、
前記ＳｕｂＷｏｒｄパリティ演算ステップでは、
ＳｕｂＷｏｒｄパリティ生成部が、前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＳｕｂＷｏｒｄパリティ生成ステップと、
ＳｕｂＷｏｒｄパリティチェック部が、前記ＳｕｂＷｏｒｄパリティ生成部により生成されるパリティデータと、前記ＲｏｔＷｏｒｄパリティ演算部からの出力データとを比較するＳｕｂＷｏｒｄパリティチェックステップと
を備えることを特徴とする演算方法。
【請求項５】
前記演算ステップでは、
ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部が、前記暗号鍵からＸＯＲ演算により生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部におけるＳｕｂＷｏｒｄ演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データに基づいて生成されるデータとをＸＯＲ演算し、前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データから生成されるパリティデータと等価な値を出力するＡｄｄＲｏｕｎｄＫｅｙパリティ演算ステップと、
ＳｕｂＢｙｔｅｓパリティ演算部が、前記ＡＥＳ暗号化部におけるＳｕｂＢｙｔｅｓ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｕｂＢｙｔｅｓパリティ演算ステップと
を備え、
前記ＳｕｂＢｙｔｅｓパリティ演算ステップでは、
ＳｕｂＢｙｔｅｓパリティ生成部が、前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＳｕｂＢｙｔｅｓパリティ生成ステップと、
ＳｕｂＢｙｔｅｓパリティチェック部が、前記ＳｕｂＢｙｔｅｓパリティ生成部により生成されるパリティデータと、前記ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部からの出力データとを比較するＳｕｂＢｙｔｅｓパリティチェックステップと
を備えることを特徴とする請求項４に記載の演算方法。
【請求項６】
ＳｈｉｆｔＲｏｗｓパリティ演算部が、前記ＳｕｂＢｙｔｅｓパリティ演算部からの出力データを１６分割したデータ単位にローテート演算し、前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｈｉｆｔＲｏｗｓパリティ演算ステップと、
ＭｉｘＣｏｌｕｍｎｓパリティ演算部が、前記ＡＥＳ暗号化部におけるＭｉｘＣｏｌｕｍｎｓ演算後の出力データから生成されるパリティと等価な値を出力するＭｉｘＣｏｌｕｍｎｓパリティ演算ステップと
を備え、
前記ＭｉｘＣｏｌｕｍｎｓパリティ演算ステップでは、
ＭｉｘＣｏｌｕｍｎｓパリティ生成部が、前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＭｉｘＣｏｌｕｍｎｓパリティ生成ステップと、
ＭｉｘＣｏｌｕｍｎｓパリティチェック部が、前記ＭｉｘＣｏｌｕｍｎｓパリティ生成部により生成されるパリティデータと、前記ＳｈｉｆｔＲｏｗｓパリティ演算部からの出力データとを比較するＭｉｘＣｏｌｕｍｎｓパリティチェックステップと
を備えることを特徴とする請求項５に記載の演算方法。
【請求項７】
ホスト装置から送信されるデータを格納するコンピュータシステムにおいて、
前記ホスト装置から送信されるデータを平文ブロックから暗号文ブロックへＡＥＳ演算により暗号化するＡＥＳ暗号化部と、
前記ＡＥＳ暗号化部の最終演算結果をチェックするためのデータを出力する演算部と、
前記ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと、前記演算部の最終演算結果とを比較するパリティチェック部と
を備え、
前記演算部は、
ＡＥＳ暗号化の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、平文ブロックからＸＯＲ演算により生成されるパリティデータと、前記ＡＥＳ暗号化部から出力されるＡＥＳ演算途中結果とを演算し、前記ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力し、
前記暗号鍵からＸＯＲ演算により生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部のＡＥＳ演算における拡張鍵からＸＯＲ演算により生成されるパリティデータを、下位１／４の領域を４分割したデータ単位にローテート演算し、前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データから生成されるパリティデータと等価な値を出力するＲｏｔＷｏｒｄパリティ演算部と、       
前記ＡＥＳ暗号化部におけるＳｕｂＷｏｒｄ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｕｂＷｏｒｄパリティ演算部と
を備え、
前記ＳｕｂＷｏｒｄパリティ演算部は、
前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＳｕｂＷｏｒｄパリティ生成部と、
前記ＳｕｂＷｏｒｄパリティ生成部により生成されるパリティデータと、前記ＲｏｔＷｏｒｄパリティ演算部からの出力データとを比較するＳｕｂＷｏｒｄパリティチェック部と、
前記ＡＥＳ暗号化部におけるＲｏｔＷｏｒｄ演算後の出力データの下位１／４の領域を、Ｓ−ｂｏｘ転置により４分割したデータ単位に直接変換するＳｕｂＷｏｒｄパリティＳ−ｂｏｘ転置手段と
を備えることを特徴とするコンピュータシステム。
【請求項８】
前記演算部は、
前記暗号鍵からＸＯＲ演算により生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部におけるＳｕｂＷｏｒｄ演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データに基づいて生成されるデータとをＸＯＲ演算し、前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データから生成されるパリティデータと等価な値を出力するＡｄｄＲｏｕｎｄＫｅｙパリティ演算部と、
前記ＡＥＳ暗号化部におけるＳｕｂＢｙｔｅｓ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｕｂＢｙｔｅｓパリティ演算部と
を備え、
前記ＳｕｂＢｙｔｅｓパリティ演算部は、
前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データをＸＯＲ演算し、パリティデータを生成するＳｕｂＢｙｔｅｓパリティ生成部と、
前記ＳｕｂＢｙｔｅｓパリティ生成部により生成されるパリティデータと、前記ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部からの出力データとを比較するＳｕｂＢｙｔｅｓパリティチェック部と
前記ＡＥＳ暗号化部におけるＡｄｄＲｏｕｎｄＫｅｙ演算後の出力データを、Ｓ−ｂｏｘ転置により１６分割したデータ単位に直接変換するＳｕｂＢｙｔｅｓパリティＳ−ｂｏｘ転置手段と
を備えることを特徴とする請求項７に記載のコンピュータシステム。
【請求項９】
前記ＳｕｂＢｙｔｅｓパリティ演算部からの出力データを１６分割したデータ単位にローテート演算し、前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データから生成されるパリティデータと等価な値を出力するＳｈｉｆｔＲｏｗｓパリティ演算部と、
前記ＡＥＳ暗号化部におけるＭｉｘＣｏｌｕｍｎｓ演算後の出力データから生成されるパリティと等価な値を出力するＭｉｘＣｏｌｕｍｎｓパリティ演算部と
を備え、
前記ＭｉｘＣｏｌｕｍｎｓパリティ演算部は、
前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データをＸＯＲ演算し、
パリティデータを生成するＭｉｘＣｏｌｕｍｎｓパリティ生成部と、
前記ＭｉｘＣｏｌｕｍｎｓパリティ生成部により生成されるパリティデータと、前記ＳｈｉｆｔＲｏｗｓパリティ演算部からの出力データとを比較するＭｉｘＣｏｌｕｍｎｓパリティチェック部と、
前記ＡＥＳ暗号化部におけるＳｈｉｆｔＲｏｗｓ演算後の出力データを４分割したデータをさらに４分割したデータの各々最上位のデータと、ＳｈｉｆｔＲｏｗｓパリティ演算手段からの出力データとをＸＯＲ演算するＭｉｘＣｏｌｕｍｎｓパリティＸＯＲ演算部と  を備えることを特徴とする請求項８に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報家電やコンピュータ等における暗号／復号手段のソフトエラー対策技術に関する。特に、コンピュータシステムや、特に高い信頼性が求められるストレージシステムにおける暗号／復号手段のソフトエラー対策技術に関する。
【背景技術】
【０００２】
現在、企業の内部統制強化を定めた日本版ＳＯＸ法の制定により、企業は、大量の帳票データの保護や管理を行わなければならず、それらの大量のデータを一括して管理することができるデータセンタの自社設置、もしくはデータセンタのアウトソーシングに注目が集まっている。データセンタは、膨大なデータを一括保持するために、ＨＤＤや磁気テープ装置などにデータを格納するストレージシステムで構成される場合が多い。
【０００３】
このようなストレージシステムは、企業の帳簿データなど損失が許されないデータを保持するため、パーソナルユースのコンピュータシステムと比較して高い信頼性が要求される。ストレージシステムで懸念されるデータ損失機会は、物理的な故障であるハードエラーによるデータ損失機会と、一時的なエラー（ソフトエラー）でのデータ損失機会に分類される。
【０００４】
ハードエラーとは、前述の通り、ＨＤＤや磁気テープ、さらにストレージシステムにおいてデータ格納処理を制御するマイクロプロセッサの故障など、物理的要素の修理や交換を必要とするエラーである。一方、ソフトエラーとは、マイクロプロセッサに含まれる放射性物質より出力される放射線や宇宙線やアルファ波、中性子線などのノイズ発生粒子が、ハードウェアを破壊せずにハードウェア動作の不良を起こすことで発生するエラーである。近年、ハードウェアの高集積化によるＬＳＩの動作電圧低下やクロック周波数上昇が原因となり、ソフトエラーによる動作不良が顕著になりつつある。
【０００５】
従来の高信頼性システムは、ソフトエラー耐性の高い素子の使用による保護方法や、特許文献１に示されるような同一の処理回路の多重化・多数決による保護方法、さらに特許文献２に示されるようなパリティビットチェックによる保護方式によりソフトエラーからハードウェアの動作不良を保護してきた。
【０００６】
特許文献１に見られる多重化・多数決による保護方法は、具体的に、同一機能を持つ回路を複数だけ冗長し、その冗長した複数回路から出力されるデータ間で多数決を取ることで、エラーを検出・訂正する方法である。
【０００７】
また、特許文献２に見られる保護方法は、メモリ素子において、データから生成したパリティをデータとは別の領域に保持しておき、データ読み出し時にデータから生成するパリティと保持していたパリティ間でエラーを検出するパリティビットチェック方式や、パリティビットではなくＥＣＣ（Error Checking and Correct）によりエラーを訂正する方式である。
【０００８】
ここで、パリティとは、与えられたデータの奇偶性を保持する値であり、例えば、４ビットのデータ「１００１」が与えられた場合、奇数パリティは（１＾０＾０＾１）で計算された「１」であり、偶数パリティは（１＾０＾０＾１）で計算された「０」である。パリティを使用する際、送信側（パリティ保持側）と受信側（パリティチェック側）で、奇数パリティか偶数パリティのどちらを使用するか、およびパリティ演算するデータ単位を指定しておく必要がある。
【０００９】
ストレージシステムに関する話題として、一方では、ＨＤＤ（Hard Disk Drive）の盗難による情報漏えいが問題となっている。このＨＤＤの盗難による情報漏えいを防止する１つの方法は、ＨＤＤに格納されるデータを暗号化することである。
【００１０】
ＨＤＤ格納データの暗号化には、ブロック暗号を広く用いられている。ブロック暗号は、データを一定長のブロックデータに分割し、鍵やＩＶ（Initial Vector）を用いてブロック単位に暗号化し、同一長の暗号データを出力する共通鍵暗号方式であり、２００７年現在、非特許文献１で示されるＡＥＳ（Advanced Encryption Standard）が、事実上の世界標準となっている。
【００１１】
ＡＥＳは、ブロック単位のサイズを１２８ビットとし、ブロック単位にラウンドと呼ばれる処理単位で換字処理（substitution）と転置処理（permutation）を繰り返し行うスピン構造（SPN構造）を持った暗号アルゴリズムである。また、ＡＥＳは、各ラウンドで８ビット単位にＳ−ｂｏｘと呼ばれる１６ｘ１６のテーブルを用いてデータ変換を行う暗号アルゴリズムでもある。
【００１２】
ＡＥＳは、前述のスピン構造によるデータの繰り返し処理、および８ビット単位でのＳ−ｂｏｘ変換処理により、処理負荷が高く、また、処理完了までに時間を要する。高速なデータ転送能力が要求されるストレージシステムにＡＥＳ暗号化機能を実装する場合は、前述のＡＥＳ処理による処理スループット低下、および処理レイテンシの発生は回避すべき問題であり、通常コストを下げるために、ＡＥＳ機能をデータ格納制御用マイクロプロセッサなどにハードウェアとして実装する。
【００１３】
また、ＡＥＳ機能をハードウェア化する場合は、ＡＥＳ処理スループットを高速化するために、Ｓ−ｂｏｘを１つだけ用意し８ビットずつ処理するのではなく、Ｓ−ｂｏｘを１６だけ用意し１２８ビットずつ処理するよう設計する場合がある。さらに、高速な処理能力が要求される場合は、各ラウンド処理を独立に設計し、それらを連結するパイプライン構造によりＡＥＳ処理スループットを高速化する。
【特許文献１】特願平８−３４４０４２号公報
【特許文献２】特開２００７−１７９４５０号公報
【非特許文献１】ＦＩＰＳ１９７  Ａｎｎｏｕｎｃｉｎｇ  ｔｈｅ  ＡＤＶＡＮＣＥＤ  ＥＮＣＲＹＰＴＩＯＮ  ＳＴＡＮＤＡＲＤ（ＡＥＳ）[平成１９年１０月    日ＵＲＬ検索]http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
【発明の開示】
【発明が解決しようとする課題】
【００１４】
ストレージシステムにおいて、特にマイクロプロセッサ等にハードウェア実装されたＡＥＳ回路のソフトエラー耐性を高める場合、従来では、特許文献１の手法を使用してＡＥＳ回路全体を多重化し、複数のＡＥＳ回路からの出力結果間で多数決を取りエラーを検出・訂正する手法、もしくは、特許文献２の手法を使用してＡＥＳ演算実行論理からの演算結果出力をラッチ回路に格納するのとは別に、ＡＥＳ演算実行論理からの演算結果出力から生成されるパリティを前述のラッチ回路とは別のラッチ回路の保持しておき、ラッチ回路からの演算結果読み出し時に、演算結果から生成したパリティと、別途保持しておいた前述の演算結果パリティを比較することでエラー検出・訂正する手法を用いてきた。
【００１５】
しかしながら、特許文献１の手法を使用したＡＥＳ回路保護方法では、ＡＥＳ回路を複数実装するために回路規模が増大する。前述の通り、Ｓ−ｂｏｘを１６回路用意する設計、もしくは、パイプライン構造にする設計では回路規模の増大は顕著である。回路規模の増大は、ハードウェアコストを圧迫するばかりか、マイクロプロセッサに組み込むべき他機能を実装できないなどの弊害を生む。
【００１６】
また、ＡＥＳは１２８ビット単位で演算することから、特許文献１の手法を使用したＡＥＳ回路保護によるデータ保護強度は、１２８ビットとできる。ここで、例えば、ソフトエラーの発生率が８ビットに１ビットだけ誤りを発生させる程度であれば、全ビットを保護せずに、８ビット単位でエラー検出させればよく、特許文献１の手法は、オーバースペックである。一方で、特許文献２の手法を使用したＡＥＳ回路保護方法では、ＡＥＳ演算実行論理で発生したソフトエラーには対応できない。
【００１７】
本発明は以上の点を考慮してなされたもので、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置および演算方法ならびにコンピュータシステムを提案するものである。
【課題を解決するための手段】
【００１８】
上述の課題を解決するために本発明においては、平文ブロックから暗号文ブロックへＡＥＳ演算により暗号化するＡＥＳ暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、ＡＥＳ暗号化の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、平文ブロックからＸＯＲ演算により生成されるパリティデータと、ＡＥＳ暗号化部から出力されるＡＥＳ演算途中結果とを演算し、ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【００１９】
具体的に、本発明においては、ＡＥＳ演算における前段までの演算のデータのパリティデータから、直接にＡＥＳ暗号化部のＲｏｔＷｏｒｄ演算部の出力データから生成されるパリティデータと等価な値を出力するＲｏｔＷｏｒｄパリティ演算部と、ＡＥＳ演算における前段までの演算のデータおよびそのパリティデータから、直接にＡＥＳ暗号化部のＳｕｂＷｏｒｄ演算部の出力データから生成されるパリティと等価な値を出力するＳｕｂＷｏｒｄパリティ演算部と、ＡＥＳ演算における前段までの演算のデータのパリティデータから、直接にＡＥＳ暗号化部のＡｄｄＲｏｕｎｄＫｅｙ演算部の出力データから生成されるパリティと等価な値を出力するＡｄｄＲｏｕｎｄＫｅｙパリティ演算部と、ＡＥＳ演算における前段までの演算のデータおよびそのパリティデータから、直接にＡＥＳ暗号化部のＳｕｂＢｙｔｅｓ演算部の出力データから生成されるパリティと等価な値を出力するＳｕｂＢｙｔｅｓパリティ演算部と、ＡＥＳ演算における前段までの演算のデータのパリティデータから、直接にＡＥＳ暗号化部のＳｈｉｆｔＲｏｗｓ演算部の出力データから生成されるパリティと等価な値を出力するＳｈｉｆｔＲｏｗｓパリティ演算部と、ＡＥＳ演算における前段までの演算のデータおよびそのパリティデータから、直接にＡＥＳ暗号化部のＭｉｘＣｏｌｕｍｎｓ演算部の出力データから生成されるパリティと等価な値を出力するＭｉｘＣｏｌｕｍｎｓパリティ演算部とを具備する。
【００２０】
また、本発明においては、平文ブロックから暗号文ブロックへＡＥＳ演算により暗号化するＡＥＳ暗号化部の最終演算結果をチェックするためのデータを出力する演算装置の演算方法であって、演算部が、ＡＥＳ暗号化の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、平文ブロックからＸＯＲ演算により生成されるパリティデータと、ＡＥＳ暗号化部から出力されるＡＥＳ演算途中結果とを演算し、ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する演算ステップを備える。
【００２１】
さらに、本発明においては、ホスト装置から送信されるデータを格納するコンピュータシステムにおいて、ホスト装置から送信されるデータを平文ブロックから暗号文ブロックへＡＥＳ演算により暗号化するＡＥＳ暗号化部と、ＡＥＳ暗号化部の最終演算結果をチェックするためのデータを出力する演算部と、ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと、前記演算部の最終演算結果とを比較するパリティチェック部とを備え、演算部は、ＡＥＳ暗号化の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、平文ブロックからＸＯＲ演算により生成されるパリティデータと、前記ＡＥＳ暗号化部から出力されるＡＥＳ演算途中結果とを演算し、前記ＡＥＳ暗号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する。
【００２２】
さらに、本発明においては、暗号文ブロックから平文ブロックへＡＥＳ演算により復号化するＡＥＳ復号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、ＡＥＳ復号化の際に鍵として使用する復号鍵からＸＯＲ演算により生成されるパリティデータと、暗号文ブロックからＸＯＲ演算により生成されるパリティデータと、ＡＥＳ復号化部から出力されるＡＥＳ演算途中結果とを演算し、ＡＥＳ復号化部の最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【００２３】
従って、ＡＥＳ暗号化部又はＡＥＳ復号化部から出力される最終演算結果から生成されるパリティデータと、ＡＥＳパリティ演算手段から出力される最終演算結果と比較することで、格納するデータをＡＥＳで暗号化した際の最終演算結果のエラーを検出することができ、この結果、格納するデータを保護することができる。また、多重化によるデータ保護方法に比べ回路規模が小さくすることができ、かつ、ＡＥＳ回路全体にわたりパリティレベルでソフトエラーを検知することができる。
【発明の効果】
【００２４】
本発明によれば、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置および演算方法ならびにコンピュータシステムを実現する。
【発明を実施するための最良の形態】
【００２５】
（１）実施例１
以下、図面を用いて本発明の第一の実施形態を詳細に説明する。なお、全図に示す同一の番号は、同一の機能を持つため説明を省略する。
【００２６】
図１は、本発明の一実施形態に係るストレージシステムを示す構成図である。本実施例１で示すストレージシステムは、鍵長１２８ビットの暗号鍵を使用してストレージに格納するデータをＡＥＳで暗号化（復号化）するものとし、また、扱うデータを８ビット単位でパリティ化しデータを保護するシステムとする。さらに、本実施例１では、データはビッグエンディアン(Big Endian)で整列されているものとして説明する。
【００２７】
図１において、ホスト装置１００は、情報家電やコンピュータのような、ストレージシステム１０１に格納されたデータを使用する装置である。
【００２８】
ストレージシステム１０１は、インタフェース１１０と、ストレージ制御回路１１１と、ストレージ１１２で構成される。インタフェース１１０は、ホスト装置１００とストレージ制御回路１１１間でのデータ転送を制御する。ストレージ制御回路１１１は、ストレージ１１２へのデータ書き込みおよび読み込みを制御する。ストレージ１１２は、ストレージ制御回路１１１から転送されるデータをＨＤＤや磁気テープといった格納部１５０〜１５２に格納する。
【００２９】
ストレージ制御回路１１１は、鍵バッファ１２０と、書き込み制御部１２１と、読み込み制御部１２２と、エラー検知部１２３と、暗号部１２４と、復号部１２５とで構成される。
【００３０】
鍵バッファ１２０は、ホスト装置１００から転送されたデータをストレージ１１２へ格納する際に暗号部１２４で実行される暗号化で、さらにストレージ１１２に格納されたデータをホスト装置１００へ転送する際に復号部１２５で実行される復号で使用される暗号鍵を保持する。
【００３１】
書き込み制御部１２１は、ホスト装置１００から転送されるデータをストレージ１１２へ書き込む処理を制御する。同様に、読み込み制御部１２２は、ストレージ１１２に格納されたデータをホスト装置１００へ転送する際にストレージ１１２からの読み込み処理を制御する。
【００３２】
エラー検知部１２３は、暗号部１２４や復号部１２５から通知されるデータエラーを検知し、書き込み制御部１２１や読み込み制御部１２２へデータ再転送要求を通知する。暗号部１２４は、ストレージ１１２へ暗号化されたデータを格納するために、書き込み制御部１２１から転送されるデータを暗号化する。また、復号部１２５は、ストレージ１１２に格納されたデータを復号し読み込み制御部１２２へ転送する。
【００３３】
暗号部１２４は、ＡＥＳ暗号部１３０と、パリティ生成部１３１、１３２、１３４と、ＡＥＳ暗号パリティ演算部１３３と、パリティチェック部１３５で構成される。ＡＥＳ暗号部１３０は、書き込み制御部１２１から転送されるデータを鍵バッファ１２０から転送される暗号鍵情報を使用してＡＥＳで暗号化する。
【００３４】
パリティ生成部１３１は、鍵バッファ１２０から転送される暗号鍵データからパリティを生成する。パリティ生成部１３２は、書き込み制御部１２１から転送されるデータからパリティを生成する。ＡＥＳ暗号パリティ演算部１３３は、パリティ生成部１３１、１３２の出力データと、ＡＥＳ暗号部１３０から出力される途中演算結果を入力し、ＡＥＳ暗号部１３０が出力する最終演算結果を入力しパリティを生成するパリティ生成部１３４の出力データと等価な値を出力する。
【００３５】
パリティチェック部１３５は、パリティ生成部１３４の出力データと、ＡＥＳ暗号パリティ演算部１３３の出力データとを入力し、入力される２データを比較し異なる場合にエラーをエラー検知部１２３に通知する。なお、パリティ生成部１３１、１３２、１３４は、それぞれに入力されるデータを８ビット単位にパリティ化する。
【００３６】
復号部１２５は、ＡＥＳ復号部１４０と、パリティ生成部１４１、１４２、１４４と、ＡＥＳ復号パリティ演算部１４３と、パリティチェック部１４５で構成される。ＡＥＳ復号部１４０は、ストレージ１１２から転送されるデータを鍵バッファ１２０から転送される暗号鍵情報を使用してＡＥＳで復号する。パリティ生成部１４１は、鍵バッファ１２０から転送される暗号鍵データからパリティを生成する。
【００３７】
パリティ生成部１４２は、ストレージ１１２から転送されるデータからパリティを生成する。ＡＥＳ復号パリティ演算部１４３は、パリティ生成部１４１、１４２の出力データと、ＡＥＳ復号部１４０から出力される途中演算結果を入力し、ＡＥＳ復号部１４０が出力する最終演算結果を入力しパリティを生成するパリティ生成部１４４の出力データと等価な値を出力する。パリティチェック部１４５は、パリティ生成部１４４の出力データと、ＡＥＳ復号パリティ演算部１４３の出力データとを入力し、入力される２データを比較し異なる場合にエラーをエラー検知部１２３に通知する。なお、パリティ生成部１４１、１４２、１４４は、それぞれに入力されるデータを８ビット単位にパリティ化する。
【００３８】
続けて、図２を用いてＡＥＳ暗号パリティ演算部１３３およびＡＥＳ暗号部１３０の詳細を説明する。
【００３９】
図２において、セレクタ２００は、鍵バッファ１２０から転送される暗号鍵データと、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２０１の出力データを入力し、内部に保持するラウンド数に応じて、２入力データの一方を出力するセレクタである。なお、セレクタ２００は、内部に保持するラウンド数が０の時のみ鍵バッファ１２０から転送される暗号鍵データを出力する。
【００４０】
ＫｅｙＥｘｐａｎｓｉｏｎ演算部２０１は、セレクタ２００の出力データを入力し、ＡＥＳ暗号化における鍵拡張演算を行う演算手段であり、ＲｏｔＷｏｒｄ演算部３００、ＳｕｂＷｏｒｄ演算部３０１、演算部３０２で構成される。
【００４１】
ＲｏｔＷｏｒｄ演算部３００は、セレクタ２００からの出力データ１２８ビットの下位３２ビットだけを入力し、８ビット単位でローテートする演算手段である。ＳｕｂＷｏｒｄ演算部３０１は、ＲｏｔＷｏｒｄ演算部３００の出力データを入力し、入力データを８ビット単位でＳ−ｂｏｘによる非線形変換を行うＳｕｂＷｏｒｄ演算手段である。
【００４２】
演算部３０２は、セレクタ２００の出力データと、ＳｕｂＷｏｒｄ演算部３０１の出力データとを入力し、ＳｕｂＷｏｒｄ演算部３０１からの入力データをＲｃｏｎと呼ばれるラウンド毎に決定される定数でＸＯＲし、３２ビット単位で区切られたセレクタ２００からの入力データに対して、３２ビット単位で分割されたデータおよびそれぞれの上位データとのＸＯＲ演算結果を順次ＸＯＲ演算する演算手段である。
【００４３】
ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２は、鍵バッファ１２０から出力される暗号鍵データと、書き込み制御部１２１からの出力データとを入力し、２入力をＸＯＲ演算するＡＥＳ演算におけるＡｄｄＲｏｕｎｄＫｅｙ演算を行う手段である。
【００４４】
セレクタ２０３は、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２からの出力データと、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０７からの出力データとを入力し、内部に保持するラウンド数に応じて、２入力データの一方を出力するセレクタである。なお、セレクタ２０３は、内部に保持するラウンド数が「０」の時のみＡｄｄＲｏｕｎｄＫｅｙ演算部２０２からの出力データを出力する。
【００４５】
ＳｕｂＢｙｔｅｓ演算部２０４は、セレクタ２０３の出力データを入力し、８ビット単位でＳ−ｂｏｘによる非線形変換を行うＡＥＳ演算におけるＳｕｂＢｙｔｅｓ演算を行う手段である。ＳｈｉｆｔＲｏｗｓ演算部２０５は、ＳｕｂＢｙｔｅｓ演算部２０４の出力データを入力し、８ビット単位でローテート演算するＡＥＳ演算におけるＳｈｉｆｔＲｏｗｓ演算を行う手段である。
【００４６】
ＭｉｘＣｏｌｕｍｎｓ演算部２０６は、ＳｈｉｆｔＲｏｗｓ演算部２０５の出力データを入力し、３２ビット単位でデータをＧＦ（２＾８）上で乗算するＡＥＳ演算においてＭｉｘＣｏｌｕｍｎｓ演算を行う手段である。ＡｄｄＲｏｕｎｄＫｅｙ演算部２０７は、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２０１からの出力データと、ＭｉｘＣｏｕｌｕｍｎｓ演算部２０６からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と等価な処理を行う。
【００４７】
ＳｕｂＢｙｔｅｓ演算部２０８は、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０７からの出力データを入力し、ＳｕｂＢｙｔｅｓ演算部２０４と等価な処理を行う。ＳｈｉｆｔＲｏｗｓ演算部２０９は、ＳｕｂＢｙｔｅｓ演算部２０８からの出力データを入力し、ＳｈｉｆｔＲｏｗｓ演算部２０５と等価な処理を行う。
【００４８】
ＡｄｄＲｏｕｎｄＫｅｙ演算部２１０は、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２０１からの出力データと、ＳｈｉｆｔＲｏｗｓ演算部２０９からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と等価な処理を行う。
【００４９】
また、セレクタ２２０は、パリティ生成部１３１から出力される暗号鍵パリティと、ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部２２１（図２では‘ｋｅｙＥｘｐａｎｓｉｏｎと表記）の出力データとを入力し、内部に保持するラウンド数に応じて、２入力データの一方を出力するセレクタである。なお、セレクタ２２０は、内部に保持するラウンド数が「０」の時のみパリティ生成部１３１から出力される暗号鍵パリティを出力する。
【００５０】
ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部２２１は、セレクタ２２０の出力データを入力し、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２０１からの出力データから生成されるパリティと等価な値を出力する演算手段であり、ＲｏｔＷｏｒｄパリティ演算部３１０（図２では’ｒｏｔｗｏｒｄと表記）、ＳｕｂＷｏｒｄパリティ演算部３１１（図２では‘ｓｕｂｗｏｒｄと表記）、演算部３１２で構成される。
【００５１】
ＲｏｔＷｏｒｄパリティ演算部３１０は、セレクタ２２０の出力データ１６ビットの下位４ビットだけを入力し、ＲｏｔＷｏｒｄ演算部３００からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【００５２】
図３を用いてＲｏｔＷｏｒｄパリティ演算部３１０の詳細を説明する。ＲｏｔＷｏｒｄパリティ演算部３１０は、入力される４ビット分のパリティを１ビット単位にローテートする。ここで、ＲｏｔＷｏｒｄ演算部３００で処理されるデータをパリティレベルで保護するには、ＲｏｔＷｏｒｄパリティ演算部３１０が、ＲｏｔＷｏｒｄ演算部３００からの出力データから生成されるパリティと等価な値を出力すればよい。セレクタ２００から出力されるデータは、鍵バッファ１２０から出力されるデータか、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２１０から出力されるデータであり、鍵バッファ１２０から出力されるデータは、パリティ生成部１３１で生成されるパリティによりパリティレベルで保護できることは自明である。なお、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２１０から出力されるデータのデータ保障性に関しては後述する。
【００５３】
また、ＲｏｔＷｏｒｄ演算部３００の演算は、８ビット単位のローテート演算であり、８ビット内で演算を行うパリティ演算とは互いに影響を及ぼさない。以上のことから、ＲｏｔＷｏｒｄ演算部３００の演算は、ＲｏｔＷｏｒｄパリティ演算部３１０により、パリティレベルでの保護を保障される。
【００５４】
ＳｕｂＷｏｒｄパリティ演算部３１１は、ＲｏｔＷｏｒｄ演算部３００からの出力データと、セレクタ２２０からの出力データと、ＲｏｔＷｏｒｄパリティ演算部３１０からの出力データとを入力し、ＳｕｂＷｏｒｄ演算部３０１からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【００５５】
図４を用いてＳｕｂＷｏｒｄパリティ演算部３１１の詳細を説明する。ＳｕｂＷｏｒｄパリティ演算部３１１は、パリティ生成部４００と、ＳｕｂＷｏｒｄパリティ変換部４０１と、パリティチェック部４０２から構成される。パリティ生成部４００は、８ビットのデータを入力し１ビットのパリティを生成する。ＳｕｂＷｏｒｄパリティ変換部４０１は、８ビットのデータを入力し図５に示すＳ−ｂｏｘパリティ変換テーブル５００を用いて１ビットのパリティに変換する。
【００５６】
なお、図５に示すＳ−ｂｏｘパリティ変換テーブル５００は、入力された８ビットデータの上位４ビットと下位４ビットをそれぞれ行列のインデックスとして使用し、非特許文献１に記載されるＳ−ｂｏｘテーブル変換結果である８ビットデータから生成されるパリティに直接変換するテーブルである。
【００５７】
図４に戻り、パリティチェック部４０２は、１６つのパリティ生成部４００から生成されたパリティ１６ビットのデータと、セレクタ２２０からの出力データの上位１２ビットおよびＲｏｔＷｏｒｄパリティ演算部３１０からの出力データの４ビットの合計１６ビットとを比較し異なる場合にエラーをエラー検知部１２３へ通知する。
【００５８】
ここで、ＳｕｂＷｏｒｄ演算部３０１で処理されるデータをパリティレベルで保護するには、ＳｕｂＷｏｒｄパリティ演算部３１１が、ＳｕｂＷｏｒｄ演算部３０１からの出力データから生成されるパリティと等価な値を出力すればよい。ＳｕｂＷｏｒｄ演算部３０１の演算は、入力される１２８ビットデータを８ビット単位で非線形に変換する演算であるため、ＲｏｔＷｏｒｄパリティ演算部３１０からＳｕｂＷｏｒｄパリティ演算部３１１へ入力されるデータ、つまりＲｏｔＷｏｒｄ演算部３００からの出力データから生成されるパリティと等価なデータから直接に、ＳｕｂＷｏｒｄ演算部３０１からの出力データから生成されるパリティと等価なデータを求めることができない。
【００５９】
ゆえに、ＳｕｂＷｏｒｄパリティ演算部３１１にて、ＳｕｂＷｏｒｄ演算部３０１からの出力データから生成されるパリティと等価なデータを求めるためには、ＲｏｔＷｏｒｄ演算部３００から出力されるデータが必要になる。そこで、ＳｕｂＷｏｒｄパリティ演算部３１１にて、ＲｏｔＷｏｒｄ演算部３００から出力されるデータを使用するに当たり、パリティ生成部４００とパリティチェック部４０２とを用意して、ＲｏｔＷｏｒｄ演算部３００からの出力データにエラーが発生していないか、パリティレベルでチェックする。
【００６０】
以上のＳｕｂＷｏｒｄパリティ変換部４０２で用いるＳ−ｂｏｘパリティ変換テーブルが単に非特許文献１に記載されるＳ−ｂｏｘテーブル変換結果である８ビットデータから生成されるパリティに直接変換するテーブルであること、およびＲｏｔＷｏｒｄ演算部３００までの演算でエラーが発生していないかを、ＲｏｔＷｏｒｄ演算部３００の出力データとＲｏｔＷｏｒｄパリティ演算部３０１の出力データを用いて、パリティレベルでデータをチェックする構造であることから、ＳｕｂＷｏｒｄ演算部３０１の演算は、ＳｕｂＷｏｒｄパリティ演算部３１１により、パリティレベルでの保護を保障される。
【００６１】
演算部３１２は、セレクタ２２０の出力データと、ＳｕｂＷｏｒｄパリティ演算部３１１からの出力データとを入力し、ＳｕｂＷｏｒｄパリティ演算部３１１からの入力データを前述のＲｃｏｎから生成されるパリティでＸＯＲする。そして、演算部３１２は、４ビット単位で区切られたセレクタ２２０からの入力データに対して、４ビット単位で分割されたそれぞれの上位データと、前述のＸＯＲ演算結果とを順次ＸＯＲ演算する演算手段である。
【００６２】
図６を用いて演算部３１２の詳細を説明する。演算部３１２は、ＳｕｂＷｏｒｄパリティ演算部３１１からの入力データの下位４ビットと、前述のＲｃｏｎから生成されるパリティ（Ｒｃｏｎパリティと記す。また、Ｒｃｏｎパリティは定数であるため、図６では、１ビット単位に、rcon_parity_0, rcon_parity_1, rcon_parity_2, rcon_parity_3,と表記）４ビットとをＸＯＲ演算する。
【００６３】
ここで、Ｒｃｏｎパリティは、３２ビットのＲｃｏｎを８ビット単位に分割し、それぞれの分割データ８ビットから１ビットパリティとして求められるデータである。また、前述のＲｃｏｎパリティと、ＳｕｂＷｏｒｄパリティ演算部３１１からの入力データ４ビットをＸＯＲ演算した結果をｔｅｍｐパリティとする。
【００６４】
この場合、演算部３１２は、セレクタ２２０から入力されるデータ１６ビットの上位４ビットとｔｅｍｐパリティとをＸＯＲし、そのＸＯＲ結果（ｗｐ［０］とする）とセレクタ２２０から入力されるデータ１６ビットの２番目の上位４ビットとをＸＯＲし、そのＸＯＲ結果（ｗｐ［１］とする）とセレクタ２２０から入力されるデータ１６ビットの３番目の上位４ビットとをＸＯＲし、そのＸＯＲ結果（ｗｐ［２］とする）とセレクタ２２０から入力されるデータ１６ビットの最下位４ビットとをＸＯＲする（ＸＯＲ結果をｗｐ［３］とする）。
【００６５】
演算部３１２は、ｗｐ［０］〜ｗｐ［３］をセレクタ２２０、もしくはＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２７、２３０の対応ビットに出力する。ここで、演算部３０２で処理されるデータをパリティレベルで保護するには、演算部３１２が、演算部３０２からの出力データから生成されるパリティと等価な値を出力すればよい。演算部３１２で実行される演算は、演算部３０２の演算をパリティレベルで圧縮した演算である。つまり、演算部３０２は３２ビット単位で演算するのに対し、パリティ生成は８ビット単位で演算することから、両者の演算は互いに影響を及ぼさない。
【００６６】
それゆえ、演算部３０２の演算は、演算部３１２により、パリティレベルでの保護を保障される。なお、セレクタ２２０からの出力データの上位１２ビットと、ＳｕｂＷｏｒｄパリティ演算部３１１から出力されるデータの上位１２ビットは等価であるため、どちらのデータを使用しても良い。
【００６７】
ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２（図２では‘ａｄｄｒｏｕｎｄｋｅｙと表記）は、パリティ生成部１３１から出力される暗号鍵パリティと、パリティ生成部１３２から生成されるデータパリティを入力し、２入力をＸＯＲ演算する演算手段である。
【００６８】
図７を用いてＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２の詳細を説明する。ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２は、パリティ生成部１３１から出力される暗号鍵パリティ１６ビットと、パリティ生成部１３２から生成されるデータパリティ１６ビットとを入力し、２入力の対応ビットをＸＯＲ演算する。
【００６９】
ここで、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２で処理されるデータをパリティレベルで保護するには、ＡｄｄＲｏｕｎｄＫｅｙ演算部２２２が、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２からの出力データから生成されるパリティと等価な値を出力すればよい。ＡｄｄＲｏｕｎｄＫｅｙ演算とパリティ演算とは共にＸＯＲのみで構成されており、そのため、（ａ）ＡｄｄＲｏｕｎｄＫｅｙ演算後にパリティを生成することと、（ｂ）パリティ生成後にＡｄｄＲｏｕｎｄＫｅｙ演算することとは等価である。それゆえ、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２の演算は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２により、パリティレベルでの保護を保障される。
【００７０】
セレクタ２２３は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２からの出力データと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２７からの出力データとを入力し、内部に保持するラウンド数に応じて、２入力データの一方を出力するセレクタである。なお、セレクタ２２３は、内部に保持するラウンド数が「０」の時のみＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２からの入力データを出力する。
【００７１】
ＳｕｂＢｙｔｅｓパリティ演算部２２４は、セレクタ２０３からの出力データと、セレクタ２２３からの出力データとを入力し、ＳｕｂＢｙｔｅｓ演算部２０４からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【００７２】
図８を用いてＳｕｂＢｙｔｅｓパリティ演算部２２４の詳細を説明する。ＳｕｂＢｙｔｅｓパリティ演算部２２４は、パリティ生成部４１０と、ＳｕｂＢｙｔｅｓパリティ変換部４１１と、パリティチェック部４１２から構成される。パリティ生成部４１０は、８ビットのデータを入力し１ビットのパリティを生成する。ＳｕｂＢｙｔｅｓパリティ変換部４１１は、８ビットのデータを入力し図５に示すＳ−ｂｏｘパリティ変換テーブル５００を用いて１ビットのパリティに変換する。
【００７３】
パリティチェック部４１２は、１６つのパリティ生成部４１０から生成されたパリティ１６ビットのデータと、セレクタ２２３からの出力データの１６ビットとを比較し異なる場合にエラーをエラー検知部１２３へ通知する。ここで、ＳｕｂＢｙｔｅｓ演算部２０４で処理されるデータをパリティレベルで保護するには、ＳｕｂＢｙｔｅｓパリティ演算部２２４が、ＳｕｂＢｙｔｅｓ演算部２０４からの出力データから生成されるパリティと等価な値を出力すればよい。
【００７４】
ＳｕｂＢｙｔｅｓ演算部２０４の演算は、入力される１２８ビットデータを８ビット単位で非線形に変換する演算であるため、セレクタ２２３からＳｕｂＢｙｔｅｓパリティ演算部２２４へ入力されるデータ、つまりセレクタ２０３からの出力データから生成されるパリティと等価なデータから直接に、ＳｕｂＢｙｔｅｓ演算部２０４からの出力データから生成されるパリティと等価なデータを求めることができない。ゆえに、ＳｕｂＢｙｔｅｓパリティ演算部２２４にて、ＳｕｂＢｙｔｅｓ演算部２０４からの出力データから生成されるパリティと等価なデータを求めるためには、セレクタ２０３から出力されるデータが必要になる。
【００７５】
そこで、ＳｕｂＢｙｔｅｓパリティ演算部２２４にて、セレクタ２０３から出力されるデータを使用するに当たり、パリティ生成部４１０とパリティチェック部４１２を用意して、セレクタ２０３からの出力データにエラーが発生していないか、パリティレベルでチェックする。以上のＳｕｂＢｙｔｅｓパリティ変換部４１２で用いるＳ−ｂｏｘパリティ変換テーブルが単に非特許文献１に記載されるＳ−ｂｏｘテーブル変換結果である８ビットデータから生成されるパリティに直接変換するテーブルであること、およびセレクタ２０３までの演算でエラーが発生していないかを、セレクタ２０３の出力データと、セレクタ２２３の出力データとを用いて、パリティレベルでデータをチェックする構造であることから、ＳｕｂＢｙｔｅｓ演算部２０４の演算は、ＳｕｂＢｙｔｅｓパリティ演算部２２４により、パリティレベルでの保護を保障される。
【００７６】
ＳｈｉｆｔＲｏｗｓパリティ演算部２２５は、ＳｕｂＢｙｔｅｓ演算部２２４からの出力データを入力し、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【００７７】
図９を用いてＳｈｉｆｔＲｏｗｓパリティ演算部２２５の詳細を説明する。ＳｈｉｆｔＲｏｗｓパリティ演算部２２５は、入力されるデータ１６ビットをｉ［０］〜ｉ［１５］とすると、ｉ［０］、ｉ［４］、ｉ［８］、ｉ［１２］に対してローテート演算し、ｉ［１］、ｉ［５］、ｉ［９］、ｉ［１３］に対してローテート演算し、ｉ［２］、ｉ［６］、ｉ［１０］、ｉ［１４］に対してローテート演算し、ｉ［３］、ｉ［７］、ｉ［１１］、ｉ［１５］に対してローテート演算する。
【００７８】
ここで、ＳｈｉｆｔＲｏｗｓ演算部２０５で処理されるデータをパリティレベルで保護するには、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５が、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データから生成されるパリティと等価な値を出力すればよい。ＳｈｉｆｔＲｏｗｓ演算部２０５での演算は、８ビット単位のローテート演算であり、８ビット内で演算を行うパリティ演算とは互いに影響を及ぼさない。それゆえ、ＳｈｉｆｔＲｏｗｓ演算部２０５の演算は、１ビット単位に同等のローテート演算を行うＳｈｉｆｔＲｏｗｓパリティ演算部２２５により、パリティレベルでの保護を保障される。
【００７９】
ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データとを入力し、ＭｉｘＣｏｌｕｍｎｓ演算部２０６からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【００８０】
図１０を用いてＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６の詳細を説明する。ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６は、パリティ生成部４２０と、ＭｉｘＣｏｌｕｍｎｓパリティ変換部４２１と、パリティチェック部４２２から構成される。パリティ生成部４２０は、８ビットのデータを入力し１ビットのパリティを生成する。ＭｉｘＣｏｌｕｍｎｓパリティ変換部４２１は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データを３２ビット単位で分割したデータの８ビット単位の最上位ビット、合計４ビットと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データ１６ビットを４分割した各４ビットとを入力し、図１１に示す演算を行い４ビットのパリティを出力する。
【００８１】
具体的に、１つのＭｉｘＣｏｌｕｍｎｓパリティ変換部４２１は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データの１２７、１１９、１１１、１０３ビットと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データの１５、１４、１３、１２ビットとを入力し、１つのＭｉｘＣｏｌｕｍｎｓパリティ変換部４２１は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データの９５、８７、７９、７１ビットと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データの１１、１０、９、８ビットとを入力し、１つのＭｉｘＣｏｌｕｍｎｓパリティ変換部４２１は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データの６３、５５、４７、３９ビットと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データの７、６、５、４ビットとを入力し、１つのＭｉｘＣｏｌｕｍｎｓパリティ変換部４２１は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データの３１、２３、１５、７ビットと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データの３、２、１、０ビットとを入力する。
【００８２】
図１１を用いてＭｉｘＣｏｌｕｍｎｓ変換部４２１の詳細な説明をする。ＭｉｘＣｏｌｕｍｎｓ変換部４２１で生成するパリティ４ビットの最上位ビットは、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データ４ビットの最上位ビットおよび上位から２ビット目のデータと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの４ビットの全ビットとをＸＯＲした結果である。ＭｉｘＣｏｌｕｍｎｓ変換部４２１は、最上位ビットを求めるＸＯＲ演算の際、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの上位から２ビット目のデータを重複してＸＯＲする。
【００８３】
また、ＭｉｘＣｏｌｕｍｎｓ変換部４２１で生成するパリティ４ビットの上位から２ビット目は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データ４ビットの上位から２ビット目および上位から３ビット目のデータと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの４ビットの全ビットとをＸＯＲした結果である。ＭｉｘＣｏｌｕｍｎｓ変換部４２１は、上位から２ビット目を求めるＸＯＲ演算の際、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの上位から３ビット目のデータを重複してＸＯＲする。
【００８４】
また、ＭｉｘＣｏｌｕｍｎｓ変換部４２１で生成するパリティ４ビットの上位から３ビット目は、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データ４ビットの上位から３ビット目および最下位ビットのデータと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの４ビットの全ビットとをＸＯＲした結果である。ＭｉｘＣｏｌｕｍｎｓ変換部４２１は、上位から３ビット目を求めるＸＯＲ演算の際、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの最下位ビットのデータを重複してＸＯＲする。
【００８５】
また、ＭｉｘＣｏｌｕｍｎｓ変換部４２１で生成するパリティ４ビットの最下位ビットは、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データ４ビットの最上位ビットおよび最下位ビットのデータと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの４ビットの全ビットとをＸＯＲした結果である。ＭｉｘＣｏｌｕｍｎｓ変換部４２１は、最下位ビットを求めるＸＯＲ演算の際、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５から出力データの最上位ビットのデータを重複してＸＯＲする。
【００８６】
パリティチェック部４２２は、１６つのパリティ生成部４２０から生成されたパリティ１６ビットのデータと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データの１６ビットとを比較し異なる場合にエラーをエラー検知部１２３へ通知する。ここで、ＭｉｘＣｏｌｕｍｎｓ演算部２０６で処理されるデータをパリティレベルで保護するには、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６が、ＭｉｘＣｏｌｕｍｎｓ演算部２０６からの出力データから生成されるパリティと等価な値を出力すればよい。ＭｉｘＣｏｌｕｍｎｓ演算部２０６の演算は、全てＸＯＲ演算で構成されており、前述の通り、パリティ生成演算もＸＯＲ演算のみで構成される。
【００８７】
従って、図１１に示すように、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５からの出力データ、つまり、ＳｈｉｆｔＲｏｗｓ演算結果のパリティデータをＭｉｘＣｏｌｕｍｎｓ演算に使用することが可能であるが、前述の通りＭｉｘＣｏｌｕｍｎｓ演算では入力データの内の複数ビットを重複してＸＯＲする。それゆえ、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６の演算では、正しいパリティを生成するために、ＭｉｘＣｏｌｕｍｎｓ演算部２０６のデータを用いる必要がある。
【００８８】
そこで、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６にて、ＳｈｉｆｔＲｏｗｓ演算部２０５から出力されるデータを使用するに当たり、パリティ生成部４２０とパリティチェック部４２２とを用意して、ＳｈｉｆｔＲｏｗｓ演算部２０５からの出力データにエラーが発生していないか、パリティレベルでチェックする。
【００８９】
以上のＭｉｘＣｏｌｕｍｎｓ演算とパリティ演算とは演算優先順位を変更可能であること、およびＳｈｉｆｔＲｏｗｓパリティ演算部２２５までの演算でエラーが発生していないかを、ＳｈｉｆｔＲｏｗｓ演算部２０５の出力データとＳｈｉｆｔＲｏｗｓパリティ演算部２２５の出力データとを用いて、パリティレベルでデータをチェックする構造であることから、ＭｉｘＣｏｌｕｍｎｓ演算部２０６の演算は、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６により、パリティレベルでの保護を保障される。
【００９０】
ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２７は、ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部２２１からの出力データと、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２と同様の演算を行う。
【００９１】
ＳｕｂＢｙｔｅｓパリティ演算部２２８は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２７からの出力データと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２７からの出力データとを入力し、ＳｕｂＢｙｔｅｓパリティ演算部２２４と同様の演算を行う。
【００９２】
ＳｈｉｆｔＲｏｗｓパリティ演算部２２９は、ＳｕｂＢｙｔｅｓパリティ演算部２２８からの出力データを入力し、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５と同様の演算を行う。
【００９３】
ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２３０は、ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部２２１からの出力データと、ＳｈｉｆｔＲｏｗｓパリティ演算部２２９からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２と同様の演算を行う。
【００９４】
上述の構成により、本実施例１のストレージシステムは、ＡＥＳ暗号部１３０でソフトエラーが発生しても、ＡＥＳ暗号部１３０とは別に用意されたＡＥＳ暗号パリティ演算部１３３により、パリティレベルでエラーを検知することができる。
【００９５】
また、本実施例１で示した８ビットパリティによりデータを保護するストレージシステムのＡＥＳ暗号手段は、ＡＥＳ暗号パリティ演算部１３３で構成されるＡＥＳ暗号パリティ演算手段がＡＥＳ暗号部１３０で構成されるＡＥＳ暗号手段の１／８の回路規模になるため、エラー検知可能な多重化システム（二重化システム）を採用したＡＥＳ暗号手段と比較し、回路規模を約５６％程度に抑えることが可能である。これは、ＡＥＳ暗号手段の各機能であるＫｅｙＥｘｐａｎｓｉｏｎ（ＲｏｔＷｏｒｄとＳｕｂＷｏｒｄ）、ＡｄｄＲｏｕｎｄＫｅｙ、ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、ＭｉｘＣｏｌｕｍｎｓの各演算の出力ビットを８ビットから１ビットに圧縮しているためである。
【００９６】
さらに、本実施例１で示した８ビットパリティによりデータを保護するストレージシステムのＡＥＳ暗号手段は、エラー検知可能な多重化システム（二重化システム）を採用したＡＥＳ暗号手段と比較し、エラー発生率に合わせてデータ保護強度を変更可能である。例えば、ソフトエラーの発生率が８ビットに１ビットだけ誤りを発生させる程度であれば、８ビット単位でパリティを生成しエラー検出させればよい。また、本実施例１で示したＡＥＳ暗号手段に対しては、２／４／８ビット単位でパリティを生成するのが効率良い。これは、ＡＥＳの演算処理単位が１２８ビットであること、また、ＡＥＳの内部演算であるＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、ＭｉｘＣｏｌｕｍｎｓそれぞれが、入力された１２８ビットのデータの異なるデータ領域を扱うことに起因する。
【００９７】
つまり、ＡＥＳでは、入力されるデータ１２８ビットを８ビット単位で分割し（ここでは分割されたデータをｉ［０］〜ｉ［１５］とする）、ＳｕｂＢｙｔｅｓは８ビット単位で入力データを演算し（ｉ［ｊ］（ｊ＝０〜１５）それぞれに対して演算）、ＳｈｉｆｔＲｏｗｓは３２ビット単位で入力データを演算し（ｉ［０］、ｉ［４］、ｉ［８］、ｉ［１２］に対してローテート演算し、ｉ［１］、ｉ［５］、ｉ［９］、ｉ［１３］に対してローテート演算し、ｉ［２］、ｉ［６］、ｉ［１０］、ｉ［１４］に対してローテート演算し、ｉ［３］、ｉ［７］、ｉ［１１］、ｉ［１５］に対してローテート演算する）、ＭｉｘＣｏｌｕｍｎｓは３２ビット単位で演算する（ｉ［０］、ｉ［１］、ｉ［２］、ｉ［３］に対してＧＦ（２＾８）体上の乗算し、ｉ［４］、ｉ［５］、ｉ［６］、ｉ［７］に対してＧＦ（２＾８）体上の乗算し、ｉ［８］、ｉ［９］、ｉ［１０］、ｉ［１１］に対してＧＦ（２＾８）体上の乗算し、ｉ［１２］、ｉ［１３］、ｉ［１４］、ｉ［１５］に対してＧＦ（２＾８）体上の乗算する）。また、ＡＥＳの演算処理単位が１２８ビットであるため、生成するパリティは１２８ビットの約数である方が良い。それゆえ、ＡＥＳ暗号手段に対しては、２／４／８ビット単位でパリティを生成するのが効率良い。
【００９８】
なお、ＡＥＳ復号手段に関する説明は省略する。ＡＥＳ復号手段のエラー検出を担当するＡＥＳ復号パリティ演算手段は、本実施例に示したＡＥＳ暗号パリティ演算手段の適用技術、および非特許文献１を参照することで用意に推測できるからである。
【００９９】
念のため、ＡＥＳ復号パリティ演算手段について概要を説明する。この場合、暗号文ブロックから平文ブロックへＡＥＳ演算により復号化するＡＥＳ復号化手段は、ＡＥＳ演算におけるＲｏｔＷｏｒｄ演算手段と、ＳｕｂＷｏｒｄ演算手段と、ＡｄｄＲｏｕｎｄＫｅｙ演算手段と、ＩｎｖＳｕｂＢｙｔｅｓ演算手段と、ＩｎｖＳｈｉｆｔＲｏｗｓ演算手段と、ＩｎｖＭｉｘＣｏｌｕｍｎｓ演算手段とを具備する。そして、ＡＥＳ復号化手段の最終演算結果をチェックするためのデータを出力するＡＥＳ復号パリティ演算手段は、ＡＥＳ復号の際に鍵として使用する暗号鍵からＸＯＲ演算により生成されるパリティデータと、暗号文ブロックからＸＯＲ演算により生成されるパリティデータと、ＡＥＳ復号化手段から出力されるＡＥＳ演算途中結果を入力し、ＡＥＳ復号化手段から出力される最終演算結果からＸＯＲ演算により生成されるパリティデータと等価な値を出力する。
【０１００】
また、ＡＥＳ復号パリティ演算手段は、ＲｏｔＷｏｒｄパリティ演算手段と、ＳｕｂＷｏｒｄパリティ演算手段と、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段と、ＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段と、ＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段と、ＩｎｖＭｉｘＣｏｌｕｍｎｓパリティ演算手段とを具備する。
【０１０１】
ＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段は、ＡｄｄＲｏｕｎｄＫｅｙ演算手段からの出力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの出力データと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段からの出力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段からの出力データを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算手段からの出力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの出力データをＸＯＲ演算によりパリティデータを生成するＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段内パリティ生成手段と、ＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段内パリティ生成手段にて生成されるパリティデータと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段からの出力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段からの出力データを比較するＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段内パリティチェック手段と、ＡＥＳ演算における逆Ｓ−ｂｏｘ転置手段の出力データから生成されるパリティデータにＡｄｄＲｏｕｎｄＫｅｙ演算手段からの入力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの入力データを１６分割したデータ単位に直接変換するＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段内逆Ｓ−ｂｏｘパリティ転置手段とを具備し、ＡＥＳ復号化手段におけるＩｎｖＳｕｂＢｙｔｅｓ演算手段からの出力データから生成されるパリティと等価な値を出力する。
【０１０２】
ＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段からの出力データ、もしくはＩｎｖＭｉｘＣｏｌｕｍｎｓパリティ演算手段からの出力データ、もしくはＩｎｖＳｕｂＢｙｔｅｓパリティ演算手段からの出力データを入力し、入力データを１６分割したデータ単位にローテート演算することで、ＡＥＳ演算におけるＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの出力データから生成されるパリティデータと等価な値を出力する。
【０１０３】
ＩｎｖＭｉｘＣｏｌｕｍｎｓパリティ演算手段は、ＡｄｄＲｏｕｎｄＫｅｙ演算手段からの出力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの出力データと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段からの出力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算手段からの入力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの入力データをＸＯＲ演算によりパリティデータを生成するＩｎｖＭｉｘＣｏｌｕｍｎｓパリティ演算手段内パリティ生成手段と、ＩｎｖＭｉｘＣｏｌｕｍｎｓパリティ演算手段内パリティ生成手段にて生成されるパリティデータと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段からの入力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段からの入力データとを比較するＩｎｖＭｉｘＣｏｌｕｍｎｓパリティ演算手段内パリティチェック手段と、ＡｄｄＲｏｕｎｄＫｅｙ演算手段からの入力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓ演算手段からの入力データを４分割したデータをさらに４分割したデータの各々最上位のデータと、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段からの入力データ、もしくはＩｎｖＳｈｉｆｔＲｏｗｓパリティ演算手段からの入力データとをＸＯＲ演算することで、ＡＥＳ復号化手段におけるＩｎｖＭｉｘＣｏｌｕｍｎｓ演算手段からの出力データから生成されるパリティと等価な値を出力する。
【０１０４】
（２）実施例２
以下、図面を用いて本発明の第二の実施形態を詳細に説明する。
【０１０５】
図１２は、鍵長１２８ビットの暗号鍵を使用してストレージ１１２に格納するデータをＡＥＳで暗号化（復号）し、扱うデータを８ビット単位でパリティ化しデータを保護するストレージシステムを示す構造図である。なお、図１２のストレージシステムのＡＥＳ暗号化（復号）手段は、ＡＥＳ暗号化（復号）手段の内部処理を複数段に分割し、データブロック単位に並列処理が可能なパイプライン構造を取っている。本実施例２では、データはビッグエンディアンで整列されているものとして説明し、全図に示す同一の番号は同一の機能を持つため説明を省略する。
【０１０６】
図１２において、パイプライン暗号部６００はＡＥＳ暗号手段を複数段に分割しパイプライン化された暗号部であり、パイプライン復号部６０１はＡＥＳ復号手段を複数段に分割しパイプライン化された復号部である。
【０１０７】
パイプライン暗号部６００は、パリティ生成部１３１、１３２、１３４と、パリティチェック部１３５と、ラウンド０〜ラウンド９までの鍵拡張部７００〜７０３と、ラウンド０〜ラウンド９までの暗号部７０４〜７０７と、ＡｄｄＲｏｕｎｄＫｅｙ演算部７０８と、ラウンド０〜ラウンド９までの鍵拡張パリティ演算部７１０〜７１２と、ラウンド０〜ラウンド９までの暗号パリティ演算部７１３〜７１６と、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部７１７とから構成される。
【０１０８】
ラウンド０〜９鍵拡張部７００〜７０３は、ＫｅｙＥｘｐａｎｓｉｏｎ演算部２０１で構成されており、各ラウンドの暗号化に必要な拡張鍵を生成する。
【０１０９】
ラウンド０〜９暗号部７０４〜７０６は、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と、ＳｕｂＢｙｔｅｓ演算部２０４と、ＳｈｉｆｔＲｏｗｓ演算部２０５と、ＭｉｘＣｏｌｕｍｎｓ演算部２０６で構成されている。ラウンド０〜９暗号部７０４〜７０６におけるＡｄｄＲｏｕｎｄＫｅｙ演算部は、鍵バッファ１２０からの出力データ、もしくは各ラウンドに対応したラウンド０〜ラウンド８鍵拡張部７００〜７０３からの出力データと、書き込み制御部１２１、もしくは各ラウンドに対応したラウンド０〜ラウンド８暗号部７０４〜７０６からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と同等の演算を行う。
【０１１０】
ラウンド０〜８暗号部７０４〜７０６におけるＳｕｂＢｙｔｅｓ演算部は、ラウンド０〜８暗号部７０４〜７０６におけるＡｄｄＲｏｕｎｄＫｅｙ演算部から出力されるデータを入力し、ＳｕｂＢｙｔｅｓ演算部２０４と同等の演算を行う。ラウンド０〜８暗号部７０４〜７０６におけるＳｈｉｆｔＲｏｗｓ演算部は、ラウンド０〜８暗号部７０４〜７０６におけるＳｕｂＢｙｔｅｓ演算部から出力されるデータを入力し、ＳｈｉｆｔＲｏｗｓ演算部２０５と同等の演算を行う。ラウンド０〜８暗号部７０４〜７０６におけるＭｉｘＣｏｌｕｍｎｓ演算部は、ラウンド０〜８暗号部７０４〜７０６におけるＳｈｉｆｔＲｏｗｓ演算部から出力されるデータを入力し、ＭｉｘＣｏｌｕｍｎｓ演算部２０６と同等の演算を行う。
【０１１１】
ラウンド９暗号部７０７は、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と、ＳｕｂＢｙｔｅｓ演算部２０４と、ＳｈｉｆｔＲｏｗｓ演算部２０５とで構成されている。ラウンド９暗号部７０７におけるＡｄｄＲｏｕｎｄＫｅｙ演算部は、ラウンド９鍵拡張部７０３からの出力データと、ラウンド８暗号部７０６からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と同等の演算を行う。ラウンド９暗号部７０７におけるＳｕｂＢｙｔｅｓ演算部は、ラウンド９暗号部７０７におけるＡｄｄＲｏｕｎｄＫｅｙ演算部から出力されるデータを入力し、ＳｕｂＢｙｔｅｓ演算部２０４と同等の演算を行う。ラウンド９暗号部７０７におけるＳｈｉｆｔＲｏｗｓ演算部は、ラウンド９暗号部７０７におけるＳｕｂＢｙｔｅｓ演算部から出力されるデータを入力し、ＳｈｉｆｔＲｏｗｓ演算部２０５と同等の演算を行う。
【０１１２】
ＡｄｄＲｏｕｎｄＫｅｙ演算部７０８は、ラウンド９鍵拡張部７０３からの出力データと、ラウンド９暗号部７０７から出力されるデータとを入力し、ＡｄｄＲｏｕｎｄＫｅｙ演算部２０２と同等の演算を行う。
【０１１３】
ラウンド０〜９鍵拡張パリティ演算部７０９〜７１２は、ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部２２１で構成されており、各ラウンドの拡張鍵パリティを生成する。
【０１１４】
ラウンド０〜８暗号パリティ演算部７１３〜７１５は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２と、ＳｕｂＢｙｔｅｓパリティ演算部２２４と、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５と、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６とで構成されている。ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＡｄｄＲｏｕｎｄＫｅｙパリティ演算部は、パリティ生成部１３１からの出力データ、もしくは各ラウンドに対応したラウンド０〜ラウンド８鍵拡張パリティ演算部７０９〜７１１からの出力データと、パリティ生成部１３２からの出力データ、もしくは各ラウンドに対応したラウンド０〜ラウンド８暗号パリティ演算部７１３〜７１５からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２と同等の演算を行う。
【０１１５】
ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＳｕｂＢｙｔｅｓパリティ演算部は、それぞれ対応するラウンド０〜８暗号部７０４〜７０６のＡｄｄＲｏｕｎｄＫｅｙ演算部からの出力データと、ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＡｄｄＲｏｕｎｄＫｅｙパリティ演算部から出力される出力データとを入力し、ＳｕｂＢｙｔｅｓパリティ演算部２２４と同等の演算を行う。ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＳｈｉｆｔＲｏｗｓパリティ演算部は、ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＳｕｂＢｙｔｅｓパリティ演算部から出力される出力データを入力し、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５と同等の演算を行う。
【０１１６】
ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＭｉｘＣｏｌｕｍｎｓパリティ演算部は、それぞれ対応するラウンド０〜８暗号部７０４〜７０６のＳｈｉｆｔＲｏｗｓ演算部からの出力データと、ラウンド０〜８暗号パリティ演算部７１３〜７１５におけるＳｈｉｆｔＲｏｗｓパリティ演算部から出力される出力データとを入力し、ＭｉｘＣｏｌｕｍｎｓパリティ演算部２２６と同等の演算を行う。
【０１１７】
ラウンド９暗号パリティ演算部７１６は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２と、ＳｕｂＢｙｔｅｓパリティ演算部２２４と、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５とで構成されている。ラウンド９暗号パリティ演算部７１６におけるＡｄｄＲｏｕｎｄＫｅｙパリティ演算部は、ラウンド８鍵拡張パリティ演算部７１１からの出力データと、ラウンド８暗号パリティ演算部７１５からの出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２２２と同等の演算を行う。ラウンド９暗号パリティ演算部７１６におけるＳｕｂＢｙｔｅｓパリティ演算部は、ラウンド９暗号部７０７のＡｄｄＲｏｕｎｄＫｅｙ演算部からの出力データと、ラウンド９暗号パリティ演算部７１６におけるＡｄｄＲｏｕｎｄＫｅｙパリティ演算部から出力される出力データとを入力し、ＳｕｂＢｙｔｅｓパリティ演算部２２４と同等の演算を行う。
【０１１８】
ラウンド９暗号パリティ演算部７１６におけるＳｈｉｆｔＲｏｗｓパリティ演算部は、ラウンド９暗号パリティ演算部７１６におけるＳｕｂＢｙｔｅｓパリティ演算部から出力される出力データを入力し、ＳｈｉｆｔＲｏｗｓパリティ演算部２２５と同等の演算を行う。
【０１１９】
ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部７１７は、ラウンド９鍵拡張パリティ演算部７１２からの出力データと、ラウンド９暗号パリティ演算部７１６から出力される出力データとを入力し、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部２０２と同等の演算を行う。
【０１２０】
上述の構成により、本実施例２のストレージシステムは、ラウンド０〜ラウンド９鍵拡張部７００〜７０３、もしくはラウンド０〜ラウンド９暗号部７０４〜７０７、もしくはＡｄｄＲｏｕｎｄＫｅｙ演算部７０８でソフトエラーが発生しても、ラウンド０〜ラウンド９鍵拡張パリティ演算部７０９〜７１２、ラウンド０〜ラウンド９暗号パリティ演算部７１３〜７１６およびＡｄｄＲｏｕｎｄＫｅｙパリティ演算部７１７により、パリティレベルでエラーを検知することができる。
【０１２１】
本実施例２のストレージシステムで８ビット単位に生成したパリティによりデータを保護する場合、エラー検知可能な多重化システム（二重化システム）を採用したＡＥＳ暗号手段と比較し、回路規模を約６０％程度に抑えることが可能である。
【０１２２】
さらに、本実施例２で示すストレージシステムのＡＥＳパイプライン暗号手段は、エラー発生率に合わせてデータ保護強度を変更可能である。
【０１２３】
なお、ＡＥＳパイプライン復号手段６０１に関する説明は省略する。ＡＥＳ復号手段のエラー検出を担当するＡＥＳ復号パリティ演算手段は、本実施例に示したＡＥＳ暗号パリティ演算手段の適用技術、および非特許文献１を参照することで用意に推測できるからである。
【０１２４】
（３）動作および効果
本発明は、格納するデータをＡＥＳで暗号化してストレージに保持するストレージシステムのＡＥＳ暗号化手段の最終演算結果をチェックするためのデータを出力するＡＥＳパリティ演算手段である。ＡＥＳパリティ演算手段は、ＲｏｔＷｏｒｄパリティ演算手段と、ＳｕｂＷｏｒｄパリティ演算手段と、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段と、ＳｕｂＢｙｔｅｓパリティ演算手段と、ＳｈｉｆｔＲｏｗｓパリティ演算手段と、ＭｉｘＣｏｌｕｍｎｓパリティ演算手段とを備える。ＡＥＳパリティ演算手段は、ＡＥＳ暗号化に使用する暗号鍵から生成されたパリティ（暗号鍵パリティ）と、ＡＥＳ暗号化手段に入力されるデータから生成されたパリティ（データパリティ）と、ＡＥＳ暗号化手段から出力されるＡＥＳ途中演算結果を入力し、ＡＥＳ暗号化手段から出力される最終演算結果から生成されるパリティと同等の値を出力する。
【０１２５】
ＲｏｔＷｏｒｄパリティ演算手段は、暗号鍵パリティを入力し、ＡＥＳ暗号化手段において暗号鍵を３２ビット単位で区切り、その３２ビットを８ビット単位でローテートする演算であるＲｏｔＷｏｒｄ演算手段の出力データから生成されるパリティと等価な値を出力する。
【０１２６】
ＳｕｂＷｏｒｄパリティ演算手段は、ＲｏｔＷｏｒｄパリティ演算手段から出力されるデータと、ＡＥＳ暗号化手段においてＲｏｔＷｏｒｄ演算手段から出力されるデータとを入力し、ＡＥＳ暗号化手段において８ビット単位でＳ−ｂｏｘによる非線形変換を行うＳｕｂＷｏｒｄ演算手段の出力データから生成されるパリティと等価な値を出力する。
【０１２７】
このとき、ＳｕｂＷｏｒｄパリティ演算手段は、入力されるＡＥＳ暗号化手段においてＲｏｔＷｏｒｄ演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるＲｏｔＷｏｒｄパリティ演算手段から出力されるデータとを比較する。
【０１２８】
ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段は、暗号鍵パリティと、データパリティとを入力し、ＡＥＳ暗号化手段において暗号鍵と、データとを入力し、両者をＸＯＲ演算するＡｄｄＲｏｕｎｄＫｅｙ演算手段の出力データから生成されるパリティと等価な値を出力する。
【０１２９】
ＳｕｂＢｙｔｅｓパリティ演算手段は、ＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段から出力されるデータと、ＡｄｄＲｏｕｎｄＫｅｙ演算手段から出力されるデータとを入力し、ＡＥＳ暗号化手段においてＡｄｄＲｏｕｎｄｋｅｙ演算手段から出力されるデータを入力し、８ビット単位でＳ−ｂｏｘによる非線形変換を行うＳｕｂＢｙｔｅｓ演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【０１３０】
このとき、ＳｕｂＢｙｔｅｓパリティ演算手段は、入力されるＡｄｄＲｏｕｎｄＫｅｙ演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるＡｄｄＲｏｕｎｄＫｅｙパリティ演算手段から出力されるデータとを比較する。
【０１３１】
ＳｈｉｆｔＲｏｗｓパリティ演算手段は、ＳｕｂＢｙｔｅｓパリティ演算手段から出力されるデータを入力し、ＡＥＳ暗号化手段において８ビット単位でローテート演算するＳｈｉｆｔＲｏｗｓ演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【０１３２】
ＭｉｘＣｏｌｕｍｎｓパリティ演算手段は、ＳｈｉｆｔＲｏｗｓパリティ演算手段から出力されるデータと、ＡＥＳ暗号化手段においてＳｈｉｆｔＲｏｗｓ演算手段から出力されるデータとを入力し、ＡＥＳ暗号化手段においてＳｈｉｆｔＲｏｗｓ演算手段から出力されるデータを入力し、３２ビット単位でデータをＧＦ（２＾８）上で乗算するＭｉｘＣｏｌｕｍｎｓ演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【０１３３】
このとき、ＭｉｘＣｏｌｕｍｎｓパリティ演算手段は、入力されるＡＥＳ暗号化手段においてＳｈｉｆｔＲｏｗｓ演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるＡＥＳ暗号化手段においてＳｈｉｆｔＲｏｗｓ演算手段から出力されるデータとを比較する。
【０１３４】
従って、ＡＥＳ暗号化手段から出力される最終演算結果から生成されるパリティと、ＡＥＳパリティ演算手段から出力される最終演算結果と比較することで、格納するデータをＡＥＳで暗号化した際の最終演算結果のエラーを検出することができ、この結果、格納するデータを保護することができる。
【０１３５】
また、８ビット単位で演算されたパリティでデータを保護する場合、二重化されたＡＥＳ暗号化手段を持つストレージシステム、およびコンピュータシステムと比較し、約６０％の回路規模にとどまる。また、データ保護強度は、パリティを取るデータ単位で異なり、８ビット単位で演算されたパリティでデータを保護する場合、１／３／５／７ビットのビット数だけのソフトエラー発生を検出可能である。すなわち、多重化によるデータ保護方法に比べ回路規模が小さくすることができ、かつ、ＡＥＳ回路全体にわたりパリティレベルでソフトエラーを検知することができる。
【０１３６】
なお、本実施例においては、鍵長１２８ビットの暗号鍵を使用してストレージに格納するデータをＡＥＳで暗号化（復号化）した場合について述べたが、本発明はこれに限らず、例えば、ＤＥＳ（Data Encryption Standard）やＩＤＥＡ（International Data Encryption Algorithm）等の秘密鍵暗号方式、ＲＳＡ（Rivest Shamir Adleman）等の公開鍵暗号方式その他の演算におけるエラー検出に広く適用することができる。
【０１３７】
念のため、この場合におけるエラー検出・訂正符号演算手段について概要を説明する。エラー検出・訂正符号演算手段は、エラー検出・訂正符号結合性成立演算手段と、エラー検出・訂正符号結合性非成立演算手段とを具備する。
【０１３８】
エラー検出・訂正符号結合性成立演算手段は、エラー検出・訂正符号を求める演算と結合法則が成り立つ演算やその組合せから構成される。エラー検出・訂正符号結合性成立演算手段は、エラー検出・訂正符号結合性成立演算手段への入力データから生成されるエラー検出・訂正符号を入力し、エラー検出・訂正符号結合性成立演算手段の出力データから生成されるエラー検出・訂正符号と等価な値を出力する１入力１出力エラー検出・訂正符号演算手段を備える。
【０１３９】
エラー検出・訂正符号結合性非成立演算手段は、エラー検出・訂正符号を求める演算と結合法則が成立しない演算やその組合せから構成される。エラー検出・訂正符号結合性非成立演算手段は、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータと、エラー検出・訂正符号結合性非成立演算手段への入力データから生成されるエラー検出・訂正符号とを入力し、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータからエラー検出・訂正符号を生成するエラー検出・訂正符号生成手段と、エラー検出・訂正符号生成手段の出力データと、エラー検出・訂正符号結合性非成立演算手段への入力データから生成されるエラー検出・訂正符号とを比較し、エラーを検出・訂正するエラー検出・訂正符号チェック手段と、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータから、直接に、前記エラー検出・訂正符号結合性非成立演算手段の出力データから生成されるエラー検出・訂正符号と等価な値に変換する２入力１出力エラー検出・訂正符号演算手段とを備える。
【０１４０】
そして、エラー検出・訂正符号演算手段は、１入力１出力エラー検出・訂正符号演算手段に対しては、１入力１出力エラー検出・訂正符号演算手段の前段にある演算手段の出力データを入力し、２入力１出力エラー検出・訂正符号演算手段に対しては、１入力１出力エラー検出・訂正符号演算手段の途中演算結果と、２入力１出力エラー検出・訂正符号演算手段の前段にある演算手段の出力データとを入力することで、１入力１出力エラー検出・訂正符号演算手段の出力データから生成されるエラー検出・訂正符号と等価な値を出力する。
【産業上の利用可能性】
【０１４１】
本発明は、ソフトエラーからデータを保護しなければならない高信頼システムで効果を発揮する。このシステムの例として、ディスクアレイシステムにおけるデータ暗号化システム、動画コンテンツ等をエンコード／デコードするサーバが挙げられる。
【図面の簡単な説明】
【０１４２】
【図１】本発明の１実施形態を示すブロック図である。
【図２】暗号処理部、暗号パリティ処理部の詳細を説明するブロック図である。
【図３】ＲｏｔＷｏｒｄパリティ演算部の詳細を説明するブロック図である。
【図４】ＳｕｂＷｏｒｄパリティ演算部の詳細を説明するブロック図である。
【図５】ＳｕｂＷｏｒｄパリティ変換部で使用するテーブルを説明するブロック図である。
【図６】ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部の演算部の詳細を説明するブロック図である。
【図７】ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部の詳細を説明するブロック図である。
【図８】ＳｕｂＢｙｔｅｓパリティ演算部の詳細を説明するブロック図である。
【図９】ＳｈｉｆｔＲｏｗｓパリティ演算部の詳細を説明するブロック図である。
【図１０】ＭｉｘＣｏｌｕｍｎｓパリティ演算部の詳細を説明するブロック図である。
【図１１】ＭｉｘＣｏｌｕｍｎｓパリティ変換部の詳細を説明するブロック図である。
【図１２】本発明の１実施形態を示すブロック図である。
【符号の説明】
【０１４３】
１００……ホスト装置、１０１……ストレージシステム、１１０……インタフェース、１１１……ストレージ制御回路、１１２……ディスクアレイ、１２０……鍵バッファ、１２１……書き込み制御部、１２２……読み込み制御部、１２３……エラー検知部、１２４……暗号部、１２５……復号部、１３０……ＡＥＳ暗号部、１３１……パリティ生成部、１３２……パリティ生成部、１３３……ＡＥＳ暗号パリティ演算部、１３４……パリティ生成部、１３５……パリティチェック部、１４０……ＡＥＳ復号部、１４１……パリティ生成部、１４２……パリティ生成部、１４３……ＡＥＳ復号パリティ演算部、１４４……パリティ生成部、１４５……パリティチェック部、１５０……ディスクドライブ、１５１……ディスクドライブ、１５２……ディスクドライブ、２００……セレクタ、２０１……ＫｅｙＥｘｐａｎｓｉｏｎ演算部、２０２……ＡｄｄＲｏｕｎｄＫｅｙ演算部、２０３……セレクタ、２０４……ＳｕｂＢｙｔｅｓ演算部、２０５……ＳｈｉｆｔＲｏｗｓ演算部、２０６……ＭｉｘＣｏｌｕｍｎｓ演算部、２０７……ＡｄｄＲｏｕｎｄＫｅｙ演算部、２０８……ＳｕｂＢｙｔｅｓ演算部、２０９……ＳｈｉｆｔＲｏｗｓ演算部、２１０……ＡｄｄＲｏｕｎｄＫｅｙ演算部、２２０……セレクタ、２２１……ＫｅｙＥｘｐａｎｓｉｏｎパリティ演算部、２２２……ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部、２２３……セレクタ、２２４……ＳｕｂＢｙｔｅｓパリティ演算部、２２５……ＳｈｉｆｔＲｏｗｓパリティ演算部、２２６……ＭｉｘＣｏｌｕｍｎｓパリティ演算部、２２７……ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部、２２８……ＳｕｂＢｙｔｅｓパリティ演算部、２２９……ＳｈｉｆｔＲｏｗｓパリティ演算部、２３０……ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部、３００……ＲｏｔＷｏｒｄ演算部、３０１……ＳｕｂＷｏｒｄ演算部、３０２……ＫｅｙＥｘｐａｎｓｉｏｎ演算部内演算部、３１０……ＲｏｔＷｏｒｄパリティ演算部、３１１……ＳｕｂＷｏｒｄパリティ演算部、３１２……ＫｅｙＥｘｐａｎｓｉｏｎ演算部内パリティ演算部、４００……パリティ生成部、４０１……ＳｕｂＷｏｒｄパリティ変換部、４０２……パリティチェック部、４１０……パリティ生成部、４１１……ＳｕｂＢｙｔｅｓパリティ変換部、４１２……パリティチェック部、４２０……パリティ生成部、４２１……ＭｉｘＣｏｌｕｍｎｓパリティ変換部、４２２……パリティチェック部、５００……Ｓ−ｂｏｘパリティ変換テーブル、６００……パイプライン暗号部、６０１……パイプライン復号部、７００……ラウンド０鍵拡張部、７０１……ラウンド１鍵拡張部、７０２……ラウンド８鍵拡張部、７０３……ラウンド９鍵拡張部、７０４……ラウンド０暗号部、７０５……ラウンド１暗号部、７０６……ラウンド８暗号部、７０７……ラウンド９暗号部、７０８……ＡｄｄＲｏｕｎｄＫｅｙ演算部、７０９……ラウンド０鍵拡張パリティ演算部、７１０……ラウンド１鍵拡張パリティ演算部、７１１……ラウンド８鍵拡張パリティ演算部、７１２……ラウンド９鍵拡張パリティ演算部、７１３……ラウンド０暗号パリティ演算部、７１４……ラウンド１暗号パリティ演算部、７１５……ラウンド８暗号パリティ演算部、７１６……ラウンド９暗号パリティ演算部、７１７……ＡｄｄＲｏｕｎｄＫｅｙパリティ演算部
【図１】
0005070005.tif 000002
【図２】
0005070005.tif 000003
【図３】
0005070005.tif 000004
【図４】
0005070005.tif 000005
【図５】
0005070005.tif 000006
【図６】
0005070005.tif 000007
【図７】
0005070005.tif 000008
【図８】
0005070005.tif 000009
【図９】
0005070005.tif 000010
【図１０】
0005070005.tif 000011
【図１１】
0005070005.tif 000012
【図１２】
0005070005.tif 000013