演算装置および演算方法ならびにコンピュータシステム
【課題】本発明は、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置を提供する。
【解決手段】平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、AES暗号化部から出力されるAES演算途中結果とを演算し、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【解決手段】平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、AES暗号化部から出力されるAES演算途中結果とを演算し、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報家電やコンピュータ等における暗号/復号手段のソフトエラー対策技術に関する。特に、コンピュータシステムや、特に高い信頼性が求められるストレージシステムにおける暗号/復号手段のソフトエラー対策技術に関する。
【背景技術】
【0002】
現在、企業の内部統制強化を定めた日本版SOX法の制定により、企業は、大量の帳票データの保護や管理を行わなければならず、それらの大量のデータを一括して管理することができるデータセンタの自社設置、もしくはデータセンタのアウトソーシングに注目が集まっている。データセンタは、膨大なデータを一括保持するために、HDDや磁気テープ装置などにデータを格納するストレージシステムで構成される場合が多い。
【0003】
このようなストレージシステムは、企業の帳簿データなど損失が許されないデータを保持するため、パーソナルユースのコンピュータシステムと比較して高い信頼性が要求される。ストレージシステムで懸念されるデータ損失機会は、物理的な故障であるハードエラーによるデータ損失機会と、一時的なエラー(ソフトエラー)でのデータ損失機会に分類される。
【0004】
ハードエラーとは、前述の通り、HDDや磁気テープ、さらにストレージシステムにおいてデータ格納処理を制御するマイクロプロセッサの故障など、物理的要素の修理や交換を必要とするエラーである。一方、ソフトエラーとは、マイクロプロセッサに含まれる放射性物質より出力される放射線や宇宙線やアルファ波、中性子線などのノイズ発生粒子が、ハードウェアを破壊せずにハードウェア動作の不良を起こすことで発生するエラーである。近年、ハードウェアの高集積化によるLSIの動作電圧低下やクロック周波数上昇が原因となり、ソフトエラーによる動作不良が顕著になりつつある。
【0005】
従来の高信頼性システムは、ソフトエラー耐性の高い素子の使用による保護方法や、特許文献1に示されるような同一の処理回路の多重化・多数決による保護方法、さらに特許文献2に示されるようなパリティビットチェックによる保護方式によりソフトエラーからハードウェアの動作不良を保護してきた。
【0006】
特許文献1に見られる多重化・多数決による保護方法は、具体的に、同一機能を持つ回路を複数だけ冗長し、その冗長した複数回路から出力されるデータ間で多数決を取ることで、エラーを検出・訂正する方法である。
【0007】
また、特許文献2に見られる保護方法は、メモリ素子において、データから生成したパリティをデータとは別の領域に保持しておき、データ読み出し時にデータから生成するパリティと保持していたパリティ間でエラーを検出するパリティビットチェック方式や、パリティビットではなくECC(Error Checking and Correct)によりエラーを訂正する方式である。
【0008】
ここで、パリティとは、与えられたデータの奇偶性を保持する値であり、例えば、4ビットのデータ「1001」が与えられた場合、奇数パリティは(1^0^0^1)で計算された「1」であり、偶数パリティは(1^0^0^1)で計算された「0」である。パリティを使用する際、送信側(パリティ保持側)と受信側(パリティチェック側)で、奇数パリティか偶数パリティのどちらを使用するか、およびパリティ演算するデータ単位を指定しておく必要がある。
【0009】
ストレージシステムに関する話題として、一方では、HDD(Hard Disk Drive)の盗難による情報漏えいが問題となっている。このHDDの盗難による情報漏えいを防止する1つの方法は、HDDに格納されるデータを暗号化することである。
【0010】
HDD格納データの暗号化には、ブロック暗号を広く用いられている。ブロック暗号は、データを一定長のブロックデータに分割し、鍵やIV(Initial Vector)を用いてブロック単位に暗号化し、同一長の暗号データを出力する共通鍵暗号方式であり、2007年現在、非特許文献1で示されるAES(Advanced Encryption Standard)が、事実上の世界標準となっている。
【0011】
AESは、ブロック単位のサイズを128ビットとし、ブロック単位にラウンドと呼ばれる処理単位で換字処理(substitution)と転置処理(permutation)を繰り返し行うスピン構造(SPN構造)を持った暗号アルゴリズムである。また、AESは、各ラウンドで8ビット単位にS−boxと呼ばれる16x16のテーブルを用いてデータ変換を行う暗号アルゴリズムでもある。
【0012】
AESは、前述のスピン構造によるデータの繰り返し処理、および8ビット単位でのS−box変換処理により、処理負荷が高く、また、処理完了までに時間を要する。高速なデータ転送能力が要求されるストレージシステムにAES暗号化機能を実装する場合は、前述のAES処理による処理スループット低下、および処理レイテンシの発生は回避すべき問題であり、通常コストを下げるために、AES機能をデータ格納制御用マイクロプロセッサなどにハードウェアとして実装する。
【0013】
また、AES機能をハードウェア化する場合は、AES処理スループットを高速化するために、S−boxを1つだけ用意し8ビットずつ処理するのではなく、S−boxを16だけ用意し128ビットずつ処理するよう設計する場合がある。さらに、高速な処理能力が要求される場合は、各ラウンド処理を独立に設計し、それらを連結するパイプライン構造によりAES処理スループットを高速化する。
【特許文献1】特願平8−344042号公報
【特許文献2】特開2007−179450号公報
【非特許文献1】FIPS197 Announcing the ADVANCED ENCRYPTION STANDARD(AES)[平成19年10月 日URL検索]http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
【発明の開示】
【発明が解決しようとする課題】
【0014】
ストレージシステムにおいて、特にマイクロプロセッサ等にハードウェア実装されたAES回路のソフトエラー耐性を高める場合、従来では、特許文献1の手法を使用してAES回路全体を多重化し、複数のAES回路からの出力結果間で多数決を取りエラーを検出・訂正する手法、もしくは、特許文献2の手法を使用してAES演算実行論理からの演算結果出力をラッチ回路に格納するのとは別に、AES演算実行論理からの演算結果出力から生成されるパリティを前述のラッチ回路とは別のラッチ回路の保持しておき、ラッチ回路からの演算結果読み出し時に、演算結果から生成したパリティと、別途保持しておいた前述の演算結果パリティを比較することでエラー検出・訂正する手法を用いてきた。
【0015】
しかしながら、特許文献1の手法を使用したAES回路保護方法では、AES回路を複数実装するために回路規模が増大する。前述の通り、S−boxを16回路用意する設計、もしくは、パイプライン構造にする設計では回路規模の増大は顕著である。回路規模の増大は、ハードウェアコストを圧迫するばかりか、マイクロプロセッサに組み込むべき他機能を実装できないなどの弊害を生む。
【0016】
また、AESは128ビット単位で演算することから、特許文献1の手法を使用したAES回路保護によるデータ保護強度は、128ビットとできる。ここで、例えば、ソフトエラーの発生率が8ビットに1ビットだけ誤りを発生させる程度であれば、全ビットを保護せずに、8ビット単位でエラー検出させればよく、特許文献1の手法は、オーバースペックである。一方で、特許文献2の手法を使用したAES回路保護方法では、AES演算実行論理で発生したソフトエラーには対応できない。
【0017】
本発明は以上の点を考慮してなされたもので、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置および演算方法ならびにコンピュータシステムを提案するものである。
【課題を解決するための手段】
【0018】
上述の課題を解決するために本発明においては、平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、AES暗号化部から出力されるAES演算途中結果とを演算し、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【0019】
具体的に、本発明においては、AES演算における前段までの演算のデータのパリティデータから、直接にAES暗号化部のRotWord演算部の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算部と、AES演算における前段までの演算のデータおよびそのパリティデータから、直接にAES暗号化部のSubWord演算部の出力データから生成されるパリティと等価な値を出力するSubWordパリティ演算部と、AES演算における前段までの演算のデータのパリティデータから、直接にAES暗号化部のAddRoundKey演算部の出力データから生成されるパリティと等価な値を出力するAddRoundKeyパリティ演算部と、AES演算における前段までの演算のデータおよびそのパリティデータから、直接にAES暗号化部のSubBytes演算部の出力データから生成されるパリティと等価な値を出力するSubBytesパリティ演算部と、AES演算における前段までの演算のデータのパリティデータから、直接にAES暗号化部のShiftRows演算部の出力データから生成されるパリティと等価な値を出力するShiftRowsパリティ演算部と、AES演算における前段までの演算のデータおよびそのパリティデータから、直接にAES暗号化部のMixColumns演算部の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算部とを具備する。
【0020】
また、本発明においては、平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置の演算方法であって、演算部が、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、AES暗号化部から出力されるAES演算途中結果とを演算し、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算ステップを備える。
【0021】
さらに、本発明においては、ホスト装置から送信されるデータを格納するコンピュータシステムにおいて、ホスト装置から送信されるデータを平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部と、AES暗号化部の最終演算結果をチェックするためのデータを出力する演算部と、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと、前記演算部の最終演算結果とを比較するパリティチェック部とを備え、演算部は、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する。
【0022】
さらに、本発明においては、暗号文ブロックから平文ブロックへAES演算により復号化するAES復号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、AES復号化の際に鍵として使用する復号鍵からXOR演算により生成されるパリティデータと、暗号文ブロックからXOR演算により生成されるパリティデータと、AES復号化部から出力されるAES演算途中結果とを演算し、AES復号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【0023】
従って、AES暗号化部又はAES復号化部から出力される最終演算結果から生成されるパリティデータと、AESパリティ演算手段から出力される最終演算結果と比較することで、格納するデータをAESで暗号化した際の最終演算結果のエラーを検出することができ、この結果、格納するデータを保護することができる。また、多重化によるデータ保護方法に比べ回路規模が小さくすることができ、かつ、AES回路全体にわたりパリティレベルでソフトエラーを検知することができる。
【発明の効果】
【0024】
本発明によれば、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置および演算方法ならびにコンピュータシステムを実現する。
【発明を実施するための最良の形態】
【0025】
(1)実施例1
以下、図面を用いて本発明の第一の実施形態を詳細に説明する。なお、全図に示す同一の番号は、同一の機能を持つため説明を省略する。
【0026】
図1は、本発明の一実施形態に係るストレージシステムを示す構成図である。本実施例1で示すストレージシステムは、鍵長128ビットの暗号鍵を使用してストレージに格納するデータをAESで暗号化(復号化)するものとし、また、扱うデータを8ビット単位でパリティ化しデータを保護するシステムとする。さらに、本実施例1では、データはビッグエンディアン(Big Endian)で整列されているものとして説明する。
【0027】
図1において、ホスト装置100は、情報家電やコンピュータのような、ストレージシステム101に格納されたデータを使用する装置である。
【0028】
ストレージシステム101は、インタフェース110と、ストレージ制御回路111と、ストレージ112で構成される。インタフェース110は、ホスト装置100とストレージ制御回路111間でのデータ転送を制御する。ストレージ制御回路111は、ストレージ112へのデータ書き込みおよび読み込みを制御する。ストレージ112は、ストレージ制御回路111から転送されるデータをHDDや磁気テープといった格納部150〜152に格納する。
【0029】
ストレージ制御回路111は、鍵バッファ120と、書き込み制御部121と、読み込み制御部122と、エラー検知部123と、暗号部124と、復号部125とで構成される。
【0030】
鍵バッファ120は、ホスト装置100から転送されたデータをストレージ112へ格納する際に暗号部124で実行される暗号化で、さらにストレージ112に格納されたデータをホスト装置100へ転送する際に復号部125で実行される復号で使用される暗号鍵を保持する。
【0031】
書き込み制御部121は、ホスト装置100から転送されるデータをストレージ112へ書き込む処理を制御する。同様に、読み込み制御部122は、ストレージ112に格納されたデータをホスト装置100へ転送する際にストレージ112からの読み込み処理を制御する。
【0032】
エラー検知部123は、暗号部124や復号部125から通知されるデータエラーを検知し、書き込み制御部121や読み込み制御部122へデータ再転送要求を通知する。暗号部124は、ストレージ112へ暗号化されたデータを格納するために、書き込み制御部121から転送されるデータを暗号化する。また、復号部125は、ストレージ112に格納されたデータを復号し読み込み制御部122へ転送する。
【0033】
暗号部124は、AES暗号部130と、パリティ生成部131、132、134と、AES暗号パリティ演算部133と、パリティチェック部135で構成される。AES暗号部130は、書き込み制御部121から転送されるデータを鍵バッファ120から転送される暗号鍵情報を使用してAESで暗号化する。
【0034】
パリティ生成部131は、鍵バッファ120から転送される暗号鍵データからパリティを生成する。パリティ生成部132は、書き込み制御部121から転送されるデータからパリティを生成する。AES暗号パリティ演算部133は、パリティ生成部131、132の出力データと、AES暗号部130から出力される途中演算結果を入力し、AES暗号部130が出力する最終演算結果を入力しパリティを生成するパリティ生成部134の出力データと等価な値を出力する。
【0035】
パリティチェック部135は、パリティ生成部134の出力データと、AES暗号パリティ演算部133の出力データとを入力し、入力される2データを比較し異なる場合にエラーをエラー検知部123に通知する。なお、パリティ生成部131、132、134は、それぞれに入力されるデータを8ビット単位にパリティ化する。
【0036】
復号部125は、AES復号部140と、パリティ生成部141、142、144と、AES復号パリティ演算部143と、パリティチェック部145で構成される。AES復号部140は、ストレージ112から転送されるデータを鍵バッファ120から転送される暗号鍵情報を使用してAESで復号する。パリティ生成部141は、鍵バッファ120から転送される暗号鍵データからパリティを生成する。
【0037】
パリティ生成部142は、ストレージ112から転送されるデータからパリティを生成する。AES復号パリティ演算部143は、パリティ生成部141、142の出力データと、AES復号部140から出力される途中演算結果を入力し、AES復号部140が出力する最終演算結果を入力しパリティを生成するパリティ生成部144の出力データと等価な値を出力する。パリティチェック部145は、パリティ生成部144の出力データと、AES復号パリティ演算部143の出力データとを入力し、入力される2データを比較し異なる場合にエラーをエラー検知部123に通知する。なお、パリティ生成部141、142、144は、それぞれに入力されるデータを8ビット単位にパリティ化する。
【0038】
続けて、図2を用いてAES暗号パリティ演算部133およびAES暗号部130の詳細を説明する。
【0039】
図2において、セレクタ200は、鍵バッファ120から転送される暗号鍵データと、KeyExpansion演算部201の出力データを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ200は、内部に保持するラウンド数が0の時のみ鍵バッファ120から転送される暗号鍵データを出力する。
【0040】
KeyExpansion演算部201は、セレクタ200の出力データを入力し、AES暗号化における鍵拡張演算を行う演算手段であり、RotWord演算部300、SubWord演算部301、演算部302で構成される。
【0041】
RotWord演算部300は、セレクタ200からの出力データ128ビットの下位32ビットだけを入力し、8ビット単位でローテートする演算手段である。SubWord演算部301は、RotWord演算部300の出力データを入力し、入力データを8ビット単位でS−boxによる非線形変換を行うSubWord演算手段である。
【0042】
演算部302は、セレクタ200の出力データと、SubWord演算部301の出力データとを入力し、SubWord演算部301からの入力データをRconと呼ばれるラウンド毎に決定される定数でXORし、32ビット単位で区切られたセレクタ200からの入力データに対して、32ビット単位で分割されたデータおよびそれぞれの上位データとのXOR演算結果を順次XOR演算する演算手段である。
【0043】
AddRoundKey演算部202は、鍵バッファ120から出力される暗号鍵データと、書き込み制御部121からの出力データとを入力し、2入力をXOR演算するAES演算におけるAddRoundKey演算を行う手段である。
【0044】
セレクタ203は、AddRoundKey演算部202からの出力データと、AddRoundKey演算部207からの出力データとを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ203は、内部に保持するラウンド数が「0」の時のみAddRoundKey演算部202からの出力データを出力する。
【0045】
SubBytes演算部204は、セレクタ203の出力データを入力し、8ビット単位でS−boxによる非線形変換を行うAES演算におけるSubBytes演算を行う手段である。ShiftRows演算部205は、SubBytes演算部204の出力データを入力し、8ビット単位でローテート演算するAES演算におけるShiftRows演算を行う手段である。
【0046】
MixColumns演算部206は、ShiftRows演算部205の出力データを入力し、32ビット単位でデータをGF(2^8)上で乗算するAES演算においてMixColumns演算を行う手段である。AddRoundKey演算部207は、KeyExpansion演算部201からの出力データと、MixCoulumns演算部206からの出力データとを入力し、AddRoundKey演算部202と等価な処理を行う。
【0047】
SubBytes演算部208は、AddRoundKey演算部207からの出力データを入力し、SubBytes演算部204と等価な処理を行う。ShiftRows演算部209は、SubBytes演算部208からの出力データを入力し、ShiftRows演算部205と等価な処理を行う。
【0048】
AddRoundKey演算部210は、KeyExpansion演算部201からの出力データと、ShiftRows演算部209からの出力データとを入力し、AddRoundKey演算部202と等価な処理を行う。
【0049】
また、セレクタ220は、パリティ生成部131から出力される暗号鍵パリティと、KeyExpansionパリティ演算部221(図2では‘keyExpansionと表記)の出力データとを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ220は、内部に保持するラウンド数が「0」の時のみパリティ生成部131から出力される暗号鍵パリティを出力する。
【0050】
KeyExpansionパリティ演算部221は、セレクタ220の出力データを入力し、KeyExpansion演算部201からの出力データから生成されるパリティと等価な値を出力する演算手段であり、RotWordパリティ演算部310(図2では’rotwordと表記)、SubWordパリティ演算部311(図2では‘subwordと表記)、演算部312で構成される。
【0051】
RotWordパリティ演算部310は、セレクタ220の出力データ16ビットの下位4ビットだけを入力し、RotWord演算部300からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0052】
図3を用いてRotWordパリティ演算部310の詳細を説明する。RotWordパリティ演算部310は、入力される4ビット分のパリティを1ビット単位にローテートする。ここで、RotWord演算部300で処理されるデータをパリティレベルで保護するには、RotWordパリティ演算部310が、RotWord演算部300からの出力データから生成されるパリティと等価な値を出力すればよい。セレクタ200から出力されるデータは、鍵バッファ120から出力されるデータか、KeyExpansion演算部210から出力されるデータであり、鍵バッファ120から出力されるデータは、パリティ生成部131で生成されるパリティによりパリティレベルで保護できることは自明である。なお、KeyExpansion演算部210から出力されるデータのデータ保障性に関しては後述する。
【0053】
また、RotWord演算部300の演算は、8ビット単位のローテート演算であり、8ビット内で演算を行うパリティ演算とは互いに影響を及ぼさない。以上のことから、RotWord演算部300の演算は、RotWordパリティ演算部310により、パリティレベルでの保護を保障される。
【0054】
SubWordパリティ演算部311は、RotWord演算部300からの出力データと、セレクタ220からの出力データと、RotWordパリティ演算部310からの出力データとを入力し、SubWord演算部301からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0055】
図4を用いてSubWordパリティ演算部311の詳細を説明する。SubWordパリティ演算部311は、パリティ生成部400と、SubWordパリティ変換部401と、パリティチェック部402から構成される。パリティ生成部400は、8ビットのデータを入力し1ビットのパリティを生成する。SubWordパリティ変換部401は、8ビットのデータを入力し図5に示すS−boxパリティ変換テーブル500を用いて1ビットのパリティに変換する。
【0056】
なお、図5に示すS−boxパリティ変換テーブル500は、入力された8ビットデータの上位4ビットと下位4ビットをそれぞれ行列のインデックスとして使用し、非特許文献1に記載されるS−boxテーブル変換結果である8ビットデータから生成されるパリティに直接変換するテーブルである。
【0057】
図4に戻り、パリティチェック部402は、16つのパリティ生成部400から生成されたパリティ16ビットのデータと、セレクタ220からの出力データの上位12ビットおよびRotWordパリティ演算部310からの出力データの4ビットの合計16ビットとを比較し異なる場合にエラーをエラー検知部123へ通知する。
【0058】
ここで、SubWord演算部301で処理されるデータをパリティレベルで保護するには、SubWordパリティ演算部311が、SubWord演算部301からの出力データから生成されるパリティと等価な値を出力すればよい。SubWord演算部301の演算は、入力される128ビットデータを8ビット単位で非線形に変換する演算であるため、RotWordパリティ演算部310からSubWordパリティ演算部311へ入力されるデータ、つまりRotWord演算部300からの出力データから生成されるパリティと等価なデータから直接に、SubWord演算部301からの出力データから生成されるパリティと等価なデータを求めることができない。
【0059】
ゆえに、SubWordパリティ演算部311にて、SubWord演算部301からの出力データから生成されるパリティと等価なデータを求めるためには、RotWord演算部300から出力されるデータが必要になる。そこで、SubWordパリティ演算部311にて、RotWord演算部300から出力されるデータを使用するに当たり、パリティ生成部400とパリティチェック部402とを用意して、RotWord演算部300からの出力データにエラーが発生していないか、パリティレベルでチェックする。
【0060】
以上のSubWordパリティ変換部402で用いるS−boxパリティ変換テーブルが単に非特許文献1に記載されるS−boxテーブル変換結果である8ビットデータから生成されるパリティに直接変換するテーブルであること、およびRotWord演算部300までの演算でエラーが発生していないかを、RotWord演算部300の出力データとRotWordパリティ演算部301の出力データを用いて、パリティレベルでデータをチェックする構造であることから、SubWord演算部301の演算は、SubWordパリティ演算部311により、パリティレベルでの保護を保障される。
【0061】
演算部312は、セレクタ220の出力データと、SubWordパリティ演算部311からの出力データとを入力し、SubWordパリティ演算部311からの入力データを前述のRconから生成されるパリティでXORする。そして、演算部312は、4ビット単位で区切られたセレクタ220からの入力データに対して、4ビット単位で分割されたそれぞれの上位データと、前述のXOR演算結果とを順次XOR演算する演算手段である。
【0062】
図6を用いて演算部312の詳細を説明する。演算部312は、SubWordパリティ演算部311からの入力データの下位4ビットと、前述のRconから生成されるパリティ(Rconパリティと記す。また、Rconパリティは定数であるため、図6では、1ビット単位に、rcon_parity_0, rcon_parity_1, rcon_parity_2, rcon_parity_3,と表記)4ビットとをXOR演算する。
【0063】
ここで、Rconパリティは、32ビットのRconを8ビット単位に分割し、それぞれの分割データ8ビットから1ビットパリティとして求められるデータである。また、前述のRconパリティと、SubWordパリティ演算部311からの入力データ4ビットをXOR演算した結果をtempパリティとする。
【0064】
この場合、演算部312は、セレクタ220から入力されるデータ16ビットの上位4ビットとtempパリティとをXORし、そのXOR結果(wp[0]とする)とセレクタ220から入力されるデータ16ビットの2番目の上位4ビットとをXORし、そのXOR結果(wp[1]とする)とセレクタ220から入力されるデータ16ビットの3番目の上位4ビットとをXORし、そのXOR結果(wp[2]とする)とセレクタ220から入力されるデータ16ビットの最下位4ビットとをXORする(XOR結果をwp[3]とする)。
【0065】
演算部312は、wp[0]〜wp[3]をセレクタ220、もしくはAddRoundKeyパリティ演算部227、230の対応ビットに出力する。ここで、演算部302で処理されるデータをパリティレベルで保護するには、演算部312が、演算部302からの出力データから生成されるパリティと等価な値を出力すればよい。演算部312で実行される演算は、演算部302の演算をパリティレベルで圧縮した演算である。つまり、演算部302は32ビット単位で演算するのに対し、パリティ生成は8ビット単位で演算することから、両者の演算は互いに影響を及ぼさない。
【0066】
それゆえ、演算部302の演算は、演算部312により、パリティレベルでの保護を保障される。なお、セレクタ220からの出力データの上位12ビットと、SubWordパリティ演算部311から出力されるデータの上位12ビットは等価であるため、どちらのデータを使用しても良い。
【0067】
AddRoundKeyパリティ演算部222(図2では‘addroundkeyと表記)は、パリティ生成部131から出力される暗号鍵パリティと、パリティ生成部132から生成されるデータパリティを入力し、2入力をXOR演算する演算手段である。
【0068】
図7を用いてAddRoundKeyパリティ演算部222の詳細を説明する。AddRoundKeyパリティ演算部222は、パリティ生成部131から出力される暗号鍵パリティ16ビットと、パリティ生成部132から生成されるデータパリティ16ビットとを入力し、2入力の対応ビットをXOR演算する。
【0069】
ここで、AddRoundKey演算部202で処理されるデータをパリティレベルで保護するには、AddRoundKey演算部222が、AddRoundKey演算部202からの出力データから生成されるパリティと等価な値を出力すればよい。AddRoundKey演算とパリティ演算とは共にXORのみで構成されており、そのため、(a)AddRoundKey演算後にパリティを生成することと、(b)パリティ生成後にAddRoundKey演算することとは等価である。それゆえ、AddRoundKey演算部202の演算は、AddRoundKeyパリティ演算部222により、パリティレベルでの保護を保障される。
【0070】
セレクタ223は、AddRoundKeyパリティ演算部222からの出力データと、AddRoundKeyパリティ演算部227からの出力データとを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ223は、内部に保持するラウンド数が「0」の時のみAddRoundKeyパリティ演算部222からの入力データを出力する。
【0071】
SubBytesパリティ演算部224は、セレクタ203からの出力データと、セレクタ223からの出力データとを入力し、SubBytes演算部204からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0072】
図8を用いてSubBytesパリティ演算部224の詳細を説明する。SubBytesパリティ演算部224は、パリティ生成部410と、SubBytesパリティ変換部411と、パリティチェック部412から構成される。パリティ生成部410は、8ビットのデータを入力し1ビットのパリティを生成する。SubBytesパリティ変換部411は、8ビットのデータを入力し図5に示すS−boxパリティ変換テーブル500を用いて1ビットのパリティに変換する。
【0073】
パリティチェック部412は、16つのパリティ生成部410から生成されたパリティ16ビットのデータと、セレクタ223からの出力データの16ビットとを比較し異なる場合にエラーをエラー検知部123へ通知する。ここで、SubBytes演算部204で処理されるデータをパリティレベルで保護するには、SubBytesパリティ演算部224が、SubBytes演算部204からの出力データから生成されるパリティと等価な値を出力すればよい。
【0074】
SubBytes演算部204の演算は、入力される128ビットデータを8ビット単位で非線形に変換する演算であるため、セレクタ223からSubBytesパリティ演算部224へ入力されるデータ、つまりセレクタ203からの出力データから生成されるパリティと等価なデータから直接に、SubBytes演算部204からの出力データから生成されるパリティと等価なデータを求めることができない。ゆえに、SubBytesパリティ演算部224にて、SubBytes演算部204からの出力データから生成されるパリティと等価なデータを求めるためには、セレクタ203から出力されるデータが必要になる。
【0075】
そこで、SubBytesパリティ演算部224にて、セレクタ203から出力されるデータを使用するに当たり、パリティ生成部410とパリティチェック部412を用意して、セレクタ203からの出力データにエラーが発生していないか、パリティレベルでチェックする。以上のSubBytesパリティ変換部412で用いるS−boxパリティ変換テーブルが単に非特許文献1に記載されるS−boxテーブル変換結果である8ビットデータから生成されるパリティに直接変換するテーブルであること、およびセレクタ203までの演算でエラーが発生していないかを、セレクタ203の出力データと、セレクタ223の出力データとを用いて、パリティレベルでデータをチェックする構造であることから、SubBytes演算部204の演算は、SubBytesパリティ演算部224により、パリティレベルでの保護を保障される。
【0076】
ShiftRowsパリティ演算部225は、SubBytes演算部224からの出力データを入力し、ShiftRows演算部205からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0077】
図9を用いてShiftRowsパリティ演算部225の詳細を説明する。ShiftRowsパリティ演算部225は、入力されるデータ16ビットをi[0]〜i[15]とすると、i[0]、i[4]、i[8]、i[12]に対してローテート演算し、i[1]、i[5]、i[9]、i[13]に対してローテート演算し、i[2]、i[6]、i[10]、i[14]に対してローテート演算し、i[3]、i[7]、i[11]、i[15]に対してローテート演算する。
【0078】
ここで、ShiftRows演算部205で処理されるデータをパリティレベルで保護するには、ShiftRowsパリティ演算部225が、ShiftRows演算部205からの出力データから生成されるパリティと等価な値を出力すればよい。ShiftRows演算部205での演算は、8ビット単位のローテート演算であり、8ビット内で演算を行うパリティ演算とは互いに影響を及ぼさない。それゆえ、ShiftRows演算部205の演算は、1ビット単位に同等のローテート演算を行うShiftRowsパリティ演算部225により、パリティレベルでの保護を保障される。
【0079】
MixColumnsパリティ演算部226は、ShiftRows演算部205からの出力データと、ShiftRowsパリティ演算部225からの出力データとを入力し、MixColumns演算部206からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0080】
図10を用いてMixColumnsパリティ演算部226の詳細を説明する。MixColumnsパリティ演算部226は、パリティ生成部420と、MixColumnsパリティ変換部421と、パリティチェック部422から構成される。パリティ生成部420は、8ビットのデータを入力し1ビットのパリティを生成する。MixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データを32ビット単位で分割したデータの8ビット単位の最上位ビット、合計4ビットと、ShiftRowsパリティ演算部225からの出力データ16ビットを4分割した各4ビットとを入力し、図11に示す演算を行い4ビットのパリティを出力する。
【0081】
具体的に、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの127、119、111、103ビットと、ShiftRowsパリティ演算部225からの出力データの15、14、13、12ビットとを入力し、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの95、87、79、71ビットと、ShiftRowsパリティ演算部225からの出力データの11、10、9、8ビットとを入力し、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの63、55、47、39ビットと、ShiftRowsパリティ演算部225からの出力データの7、6、5、4ビットとを入力し、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの31、23、15、7ビットと、ShiftRowsパリティ演算部225からの出力データの3、2、1、0ビットとを入力する。
【0082】
図11を用いてMixColumns変換部421の詳細な説明をする。MixColumns変換部421で生成するパリティ4ビットの最上位ビットは、ShiftRows演算部205からの出力データ4ビットの最上位ビットおよび上位から2ビット目のデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、最上位ビットを求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの上位から2ビット目のデータを重複してXORする。
【0083】
また、MixColumns変換部421で生成するパリティ4ビットの上位から2ビット目は、ShiftRows演算部205からの出力データ4ビットの上位から2ビット目および上位から3ビット目のデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、上位から2ビット目を求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの上位から3ビット目のデータを重複してXORする。
【0084】
また、MixColumns変換部421で生成するパリティ4ビットの上位から3ビット目は、ShiftRows演算部205からの出力データ4ビットの上位から3ビット目および最下位ビットのデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、上位から3ビット目を求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの最下位ビットのデータを重複してXORする。
【0085】
また、MixColumns変換部421で生成するパリティ4ビットの最下位ビットは、ShiftRows演算部205からの出力データ4ビットの最上位ビットおよび最下位ビットのデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、最下位ビットを求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの最上位ビットのデータを重複してXORする。
【0086】
パリティチェック部422は、16つのパリティ生成部420から生成されたパリティ16ビットのデータと、ShiftRowsパリティ演算部225からの出力データの16ビットとを比較し異なる場合にエラーをエラー検知部123へ通知する。ここで、MixColumns演算部206で処理されるデータをパリティレベルで保護するには、MixColumnsパリティ演算部226が、MixColumns演算部206からの出力データから生成されるパリティと等価な値を出力すればよい。MixColumns演算部206の演算は、全てXOR演算で構成されており、前述の通り、パリティ生成演算もXOR演算のみで構成される。
【0087】
従って、図11に示すように、ShiftRowsパリティ演算部225からの出力データ、つまり、ShiftRows演算結果のパリティデータをMixColumns演算に使用することが可能であるが、前述の通りMixColumns演算では入力データの内の複数ビットを重複してXORする。それゆえ、MixColumnsパリティ演算部226の演算では、正しいパリティを生成するために、MixColumns演算部206のデータを用いる必要がある。
【0088】
そこで、MixColumnsパリティ演算部226にて、ShiftRows演算部205から出力されるデータを使用するに当たり、パリティ生成部420とパリティチェック部422とを用意して、ShiftRows演算部205からの出力データにエラーが発生していないか、パリティレベルでチェックする。
【0089】
以上のMixColumns演算とパリティ演算とは演算優先順位を変更可能であること、およびShiftRowsパリティ演算部225までの演算でエラーが発生していないかを、ShiftRows演算部205の出力データとShiftRowsパリティ演算部225の出力データとを用いて、パリティレベルでデータをチェックする構造であることから、MixColumns演算部206の演算は、MixColumnsパリティ演算部226により、パリティレベルでの保護を保障される。
【0090】
AddRoundKeyパリティ演算部227は、KeyExpansionパリティ演算部221からの出力データと、MixColumnsパリティ演算部226からの出力データとを入力し、AddRoundKeyパリティ演算部222と同様の演算を行う。
【0091】
SubBytesパリティ演算部228は、AddRoundKeyパリティ演算部227からの出力データと、AddRoundKeyパリティ演算部227からの出力データとを入力し、SubBytesパリティ演算部224と同様の演算を行う。
【0092】
ShiftRowsパリティ演算部229は、SubBytesパリティ演算部228からの出力データを入力し、ShiftRowsパリティ演算部225と同様の演算を行う。
【0093】
AddRoundKeyパリティ演算部230は、KeyExpansionパリティ演算部221からの出力データと、ShiftRowsパリティ演算部229からの出力データとを入力し、AddRoundKeyパリティ演算部222と同様の演算を行う。
【0094】
上述の構成により、本実施例1のストレージシステムは、AES暗号部130でソフトエラーが発生しても、AES暗号部130とは別に用意されたAES暗号パリティ演算部133により、パリティレベルでエラーを検知することができる。
【0095】
また、本実施例1で示した8ビットパリティによりデータを保護するストレージシステムのAES暗号手段は、AES暗号パリティ演算部133で構成されるAES暗号パリティ演算手段がAES暗号部130で構成されるAES暗号手段の1/8の回路規模になるため、エラー検知可能な多重化システム(二重化システム)を採用したAES暗号手段と比較し、回路規模を約56%程度に抑えることが可能である。これは、AES暗号手段の各機能であるKeyExpansion(RotWordとSubWord)、AddRoundKey、SubBytes、ShiftRows、MixColumnsの各演算の出力ビットを8ビットから1ビットに圧縮しているためである。
【0096】
さらに、本実施例1で示した8ビットパリティによりデータを保護するストレージシステムのAES暗号手段は、エラー検知可能な多重化システム(二重化システム)を採用したAES暗号手段と比較し、エラー発生率に合わせてデータ保護強度を変更可能である。例えば、ソフトエラーの発生率が8ビットに1ビットだけ誤りを発生させる程度であれば、8ビット単位でパリティを生成しエラー検出させればよい。また、本実施例1で示したAES暗号手段に対しては、2/4/8ビット単位でパリティを生成するのが効率良い。これは、AESの演算処理単位が128ビットであること、また、AESの内部演算であるSubBytes、ShiftRows、MixColumnsそれぞれが、入力された128ビットのデータの異なるデータ領域を扱うことに起因する。
【0097】
つまり、AESでは、入力されるデータ128ビットを8ビット単位で分割し(ここでは分割されたデータをi[0]〜i[15]とする)、SubBytesは8ビット単位で入力データを演算し(i[j](j=0〜15)それぞれに対して演算)、ShiftRowsは32ビット単位で入力データを演算し(i[0]、i[4]、i[8]、i[12]に対してローテート演算し、i[1]、i[5]、i[9]、i[13]に対してローテート演算し、i[2]、i[6]、i[10]、i[14]に対してローテート演算し、i[3]、i[7]、i[11]、i[15]に対してローテート演算する)、MixColumnsは32ビット単位で演算する(i[0]、i[1]、i[2]、i[3]に対してGF(2^8)体上の乗算し、i[4]、i[5]、i[6]、i[7]に対してGF(2^8)体上の乗算し、i[8]、i[9]、i[10]、i[11]に対してGF(2^8)体上の乗算し、i[12]、i[13]、i[14]、i[15]に対してGF(2^8)体上の乗算する)。また、AESの演算処理単位が128ビットであるため、生成するパリティは128ビットの約数である方が良い。それゆえ、AES暗号手段に対しては、2/4/8ビット単位でパリティを生成するのが効率良い。
【0098】
なお、AES復号手段に関する説明は省略する。AES復号手段のエラー検出を担当するAES復号パリティ演算手段は、本実施例に示したAES暗号パリティ演算手段の適用技術、および非特許文献1を参照することで用意に推測できるからである。
【0099】
念のため、AES復号パリティ演算手段について概要を説明する。この場合、暗号文ブロックから平文ブロックへAES演算により復号化するAES復号化手段は、AES演算におけるRotWord演算手段と、SubWord演算手段と、AddRoundKey演算手段と、InvSubBytes演算手段と、InvShiftRows演算手段と、InvMixColumns演算手段とを具備する。そして、AES復号化手段の最終演算結果をチェックするためのデータを出力するAES復号パリティ演算手段は、AES復号の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、暗号文ブロックからXOR演算により生成されるパリティデータと、AES復号化手段から出力されるAES演算途中結果を入力し、AES復号化手段から出力される最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する。
【0100】
また、AES復号パリティ演算手段は、RotWordパリティ演算手段と、SubWordパリティ演算手段と、AddRoundKeyパリティ演算手段と、InvSubBytesパリティ演算手段と、InvShiftRowsパリティ演算手段と、InvMixColumnsパリティ演算手段とを具備する。
【0101】
InvSubBytesパリティ演算手段は、AddRoundKey演算手段からの出力データ、もしくはInvShiftRows演算手段からの出力データと、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvShiftRowsパリティ演算手段からの出力データを入力し、AddRoundKey演算手段からの出力データ、もしくはInvShiftRows演算手段からの出力データをXOR演算によりパリティデータを生成するInvSubBytesパリティ演算手段内パリティ生成手段と、InvSubBytesパリティ演算手段内パリティ生成手段にて生成されるパリティデータと、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvShiftRowsパリティ演算手段からの出力データを比較するInvSubBytesパリティ演算手段内パリティチェック手段と、AES演算における逆S−box転置手段の出力データから生成されるパリティデータにAddRoundKey演算手段からの入力データ、もしくはInvShiftRows演算手段からの入力データを16分割したデータ単位に直接変換するInvSubBytesパリティ演算手段内逆S−boxパリティ転置手段とを具備し、AES復号化手段におけるInvSubBytes演算手段からの出力データから生成されるパリティと等価な値を出力する。
【0102】
InvShiftRowsパリティ演算手段は、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvMixColumnsパリティ演算手段からの出力データ、もしくはInvSubBytesパリティ演算手段からの出力データを入力し、入力データを16分割したデータ単位にローテート演算することで、AES演算におけるInvShiftRows演算手段からの出力データから生成されるパリティデータと等価な値を出力する。
【0103】
InvMixColumnsパリティ演算手段は、AddRoundKey演算手段からの出力データ、もしくはInvShiftRows演算手段からの出力データと、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvShiftRowsパリティ演算手段からの出力データとを入力し、AddRoundKey演算手段からの入力データ、もしくはInvShiftRows演算手段からの入力データをXOR演算によりパリティデータを生成するInvMixColumnsパリティ演算手段内パリティ生成手段と、InvMixColumnsパリティ演算手段内パリティ生成手段にて生成されるパリティデータと、AddRoundKeyパリティ演算手段からの入力データ、もしくはInvShiftRowsパリティ演算手段からの入力データとを比較するInvMixColumnsパリティ演算手段内パリティチェック手段と、AddRoundKey演算手段からの入力データ、もしくはInvShiftRows演算手段からの入力データを4分割したデータをさらに4分割したデータの各々最上位のデータと、AddRoundKeyパリティ演算手段からの入力データ、もしくはInvShiftRowsパリティ演算手段からの入力データとをXOR演算することで、AES復号化手段におけるInvMixColumns演算手段からの出力データから生成されるパリティと等価な値を出力する。
【0104】
(2)実施例2
以下、図面を用いて本発明の第二の実施形態を詳細に説明する。
【0105】
図12は、鍵長128ビットの暗号鍵を使用してストレージ112に格納するデータをAESで暗号化(復号)し、扱うデータを8ビット単位でパリティ化しデータを保護するストレージシステムを示す構造図である。なお、図12のストレージシステムのAES暗号化(復号)手段は、AES暗号化(復号)手段の内部処理を複数段に分割し、データブロック単位に並列処理が可能なパイプライン構造を取っている。本実施例2では、データはビッグエンディアンで整列されているものとして説明し、全図に示す同一の番号は同一の機能を持つため説明を省略する。
【0106】
図12において、パイプライン暗号部600はAES暗号手段を複数段に分割しパイプライン化された暗号部であり、パイプライン復号部601はAES復号手段を複数段に分割しパイプライン化された復号部である。
【0107】
パイプライン暗号部600は、パリティ生成部131、132、134と、パリティチェック部135と、ラウンド0〜ラウンド9までの鍵拡張部700〜703と、ラウンド0〜ラウンド9までの暗号部704〜707と、AddRoundKey演算部708と、ラウンド0〜ラウンド9までの鍵拡張パリティ演算部710〜712と、ラウンド0〜ラウンド9までの暗号パリティ演算部713〜716と、AddRoundKeyパリティ演算部717とから構成される。
【0108】
ラウンド0〜9鍵拡張部700〜703は、KeyExpansion演算部201で構成されており、各ラウンドの暗号化に必要な拡張鍵を生成する。
【0109】
ラウンド0〜9暗号部704〜706は、AddRoundKey演算部202と、SubBytes演算部204と、ShiftRows演算部205と、MixColumns演算部206で構成されている。ラウンド0〜9暗号部704〜706におけるAddRoundKey演算部は、鍵バッファ120からの出力データ、もしくは各ラウンドに対応したラウンド0〜ラウンド8鍵拡張部700〜703からの出力データと、書き込み制御部121、もしくは各ラウンドに対応したラウンド0〜ラウンド8暗号部704〜706からの出力データとを入力し、AddRoundKey演算部202と同等の演算を行う。
【0110】
ラウンド0〜8暗号部704〜706におけるSubBytes演算部は、ラウンド0〜8暗号部704〜706におけるAddRoundKey演算部から出力されるデータを入力し、SubBytes演算部204と同等の演算を行う。ラウンド0〜8暗号部704〜706におけるShiftRows演算部は、ラウンド0〜8暗号部704〜706におけるSubBytes演算部から出力されるデータを入力し、ShiftRows演算部205と同等の演算を行う。ラウンド0〜8暗号部704〜706におけるMixColumns演算部は、ラウンド0〜8暗号部704〜706におけるShiftRows演算部から出力されるデータを入力し、MixColumns演算部206と同等の演算を行う。
【0111】
ラウンド9暗号部707は、AddRoundKey演算部202と、SubBytes演算部204と、ShiftRows演算部205とで構成されている。ラウンド9暗号部707におけるAddRoundKey演算部は、ラウンド9鍵拡張部703からの出力データと、ラウンド8暗号部706からの出力データとを入力し、AddRoundKey演算部202と同等の演算を行う。ラウンド9暗号部707におけるSubBytes演算部は、ラウンド9暗号部707におけるAddRoundKey演算部から出力されるデータを入力し、SubBytes演算部204と同等の演算を行う。ラウンド9暗号部707におけるShiftRows演算部は、ラウンド9暗号部707におけるSubBytes演算部から出力されるデータを入力し、ShiftRows演算部205と同等の演算を行う。
【0112】
AddRoundKey演算部708は、ラウンド9鍵拡張部703からの出力データと、ラウンド9暗号部707から出力されるデータとを入力し、AddRoundKey演算部202と同等の演算を行う。
【0113】
ラウンド0〜9鍵拡張パリティ演算部709〜712は、KeyExpansionパリティ演算部221で構成されており、各ラウンドの拡張鍵パリティを生成する。
【0114】
ラウンド0〜8暗号パリティ演算部713〜715は、AddRoundKeyパリティ演算部222と、SubBytesパリティ演算部224と、ShiftRowsパリティ演算部225と、MixColumnsパリティ演算部226とで構成されている。ラウンド0〜8暗号パリティ演算部713〜715におけるAddRoundKeyパリティ演算部は、パリティ生成部131からの出力データ、もしくは各ラウンドに対応したラウンド0〜ラウンド8鍵拡張パリティ演算部709〜711からの出力データと、パリティ生成部132からの出力データ、もしくは各ラウンドに対応したラウンド0〜ラウンド8暗号パリティ演算部713〜715からの出力データとを入力し、AddRoundKeyパリティ演算部222と同等の演算を行う。
【0115】
ラウンド0〜8暗号パリティ演算部713〜715におけるSubBytesパリティ演算部は、それぞれ対応するラウンド0〜8暗号部704〜706のAddRoundKey演算部からの出力データと、ラウンド0〜8暗号パリティ演算部713〜715におけるAddRoundKeyパリティ演算部から出力される出力データとを入力し、SubBytesパリティ演算部224と同等の演算を行う。ラウンド0〜8暗号パリティ演算部713〜715におけるShiftRowsパリティ演算部は、ラウンド0〜8暗号パリティ演算部713〜715におけるSubBytesパリティ演算部から出力される出力データを入力し、ShiftRowsパリティ演算部225と同等の演算を行う。
【0116】
ラウンド0〜8暗号パリティ演算部713〜715におけるMixColumnsパリティ演算部は、それぞれ対応するラウンド0〜8暗号部704〜706のShiftRows演算部からの出力データと、ラウンド0〜8暗号パリティ演算部713〜715におけるShiftRowsパリティ演算部から出力される出力データとを入力し、MixColumnsパリティ演算部226と同等の演算を行う。
【0117】
ラウンド9暗号パリティ演算部716は、AddRoundKeyパリティ演算部222と、SubBytesパリティ演算部224と、ShiftRowsパリティ演算部225とで構成されている。ラウンド9暗号パリティ演算部716におけるAddRoundKeyパリティ演算部は、ラウンド8鍵拡張パリティ演算部711からの出力データと、ラウンド8暗号パリティ演算部715からの出力データとを入力し、AddRoundKeyパリティ演算部222と同等の演算を行う。ラウンド9暗号パリティ演算部716におけるSubBytesパリティ演算部は、ラウンド9暗号部707のAddRoundKey演算部からの出力データと、ラウンド9暗号パリティ演算部716におけるAddRoundKeyパリティ演算部から出力される出力データとを入力し、SubBytesパリティ演算部224と同等の演算を行う。
【0118】
ラウンド9暗号パリティ演算部716におけるShiftRowsパリティ演算部は、ラウンド9暗号パリティ演算部716におけるSubBytesパリティ演算部から出力される出力データを入力し、ShiftRowsパリティ演算部225と同等の演算を行う。
【0119】
AddRoundKeyパリティ演算部717は、ラウンド9鍵拡張パリティ演算部712からの出力データと、ラウンド9暗号パリティ演算部716から出力される出力データとを入力し、AddRoundKeyパリティ演算部202と同等の演算を行う。
【0120】
上述の構成により、本実施例2のストレージシステムは、ラウンド0〜ラウンド9鍵拡張部700〜703、もしくはラウンド0〜ラウンド9暗号部704〜707、もしくはAddRoundKey演算部708でソフトエラーが発生しても、ラウンド0〜ラウンド9鍵拡張パリティ演算部709〜712、ラウンド0〜ラウンド9暗号パリティ演算部713〜716およびAddRoundKeyパリティ演算部717により、パリティレベルでエラーを検知することができる。
【0121】
本実施例2のストレージシステムで8ビット単位に生成したパリティによりデータを保護する場合、エラー検知可能な多重化システム(二重化システム)を採用したAES暗号手段と比較し、回路規模を約60%程度に抑えることが可能である。
【0122】
さらに、本実施例2で示すストレージシステムのAESパイプライン暗号手段は、エラー発生率に合わせてデータ保護強度を変更可能である。
【0123】
なお、AESパイプライン復号手段601に関する説明は省略する。AES復号手段のエラー検出を担当するAES復号パリティ演算手段は、本実施例に示したAES暗号パリティ演算手段の適用技術、および非特許文献1を参照することで用意に推測できるからである。
【0124】
(3)動作および効果
本発明は、格納するデータをAESで暗号化してストレージに保持するストレージシステムのAES暗号化手段の最終演算結果をチェックするためのデータを出力するAESパリティ演算手段である。AESパリティ演算手段は、RotWordパリティ演算手段と、SubWordパリティ演算手段と、AddRoundKeyパリティ演算手段と、SubBytesパリティ演算手段と、ShiftRowsパリティ演算手段と、MixColumnsパリティ演算手段とを備える。AESパリティ演算手段は、AES暗号化に使用する暗号鍵から生成されたパリティ(暗号鍵パリティ)と、AES暗号化手段に入力されるデータから生成されたパリティ(データパリティ)と、AES暗号化手段から出力されるAES途中演算結果を入力し、AES暗号化手段から出力される最終演算結果から生成されるパリティと同等の値を出力する。
【0125】
RotWordパリティ演算手段は、暗号鍵パリティを入力し、AES暗号化手段において暗号鍵を32ビット単位で区切り、その32ビットを8ビット単位でローテートする演算であるRotWord演算手段の出力データから生成されるパリティと等価な値を出力する。
【0126】
SubWordパリティ演算手段は、RotWordパリティ演算手段から出力されるデータと、AES暗号化手段においてRotWord演算手段から出力されるデータとを入力し、AES暗号化手段において8ビット単位でS−boxによる非線形変換を行うSubWord演算手段の出力データから生成されるパリティと等価な値を出力する。
【0127】
このとき、SubWordパリティ演算手段は、入力されるAES暗号化手段においてRotWord演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるRotWordパリティ演算手段から出力されるデータとを比較する。
【0128】
AddRoundKeyパリティ演算手段は、暗号鍵パリティと、データパリティとを入力し、AES暗号化手段において暗号鍵と、データとを入力し、両者をXOR演算するAddRoundKey演算手段の出力データから生成されるパリティと等価な値を出力する。
【0129】
SubBytesパリティ演算手段は、AddRoundKeyパリティ演算手段から出力されるデータと、AddRoundKey演算手段から出力されるデータとを入力し、AES暗号化手段においてAddRoundkey演算手段から出力されるデータを入力し、8ビット単位でS−boxによる非線形変換を行うSubBytes演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【0130】
このとき、SubBytesパリティ演算手段は、入力されるAddRoundKey演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるAddRoundKeyパリティ演算手段から出力されるデータとを比較する。
【0131】
ShiftRowsパリティ演算手段は、SubBytesパリティ演算手段から出力されるデータを入力し、AES暗号化手段において8ビット単位でローテート演算するShiftRows演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【0132】
MixColumnsパリティ演算手段は、ShiftRowsパリティ演算手段から出力されるデータと、AES暗号化手段においてShiftRows演算手段から出力されるデータとを入力し、AES暗号化手段においてShiftRows演算手段から出力されるデータを入力し、32ビット単位でデータをGF(2^8)上で乗算するMixColumns演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【0133】
このとき、MixColumnsパリティ演算手段は、入力されるAES暗号化手段においてShiftRows演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるAES暗号化手段においてShiftRows演算手段から出力されるデータとを比較する。
【0134】
従って、AES暗号化手段から出力される最終演算結果から生成されるパリティと、AESパリティ演算手段から出力される最終演算結果と比較することで、格納するデータをAESで暗号化した際の最終演算結果のエラーを検出することができ、この結果、格納するデータを保護することができる。
【0135】
また、8ビット単位で演算されたパリティでデータを保護する場合、二重化されたAES暗号化手段を持つストレージシステム、およびコンピュータシステムと比較し、約60%の回路規模にとどまる。また、データ保護強度は、パリティを取るデータ単位で異なり、8ビット単位で演算されたパリティでデータを保護する場合、1/3/5/7ビットのビット数だけのソフトエラー発生を検出可能である。すなわち、多重化によるデータ保護方法に比べ回路規模が小さくすることができ、かつ、AES回路全体にわたりパリティレベルでソフトエラーを検知することができる。
【0136】
なお、本実施例においては、鍵長128ビットの暗号鍵を使用してストレージに格納するデータをAESで暗号化(復号化)した場合について述べたが、本発明はこれに限らず、例えば、DES(Data Encryption Standard)やIDEA(International Data Encryption Algorithm)等の秘密鍵暗号方式、RSA(Rivest Shamir Adleman)等の公開鍵暗号方式その他の演算におけるエラー検出に広く適用することができる。
【0137】
念のため、この場合におけるエラー検出・訂正符号演算手段について概要を説明する。エラー検出・訂正符号演算手段は、エラー検出・訂正符号結合性成立演算手段と、エラー検出・訂正符号結合性非成立演算手段とを具備する。
【0138】
エラー検出・訂正符号結合性成立演算手段は、エラー検出・訂正符号を求める演算と結合法則が成り立つ演算やその組合せから構成される。エラー検出・訂正符号結合性成立演算手段は、エラー検出・訂正符号結合性成立演算手段への入力データから生成されるエラー検出・訂正符号を入力し、エラー検出・訂正符号結合性成立演算手段の出力データから生成されるエラー検出・訂正符号と等価な値を出力する1入力1出力エラー検出・訂正符号演算手段を備える。
【0139】
エラー検出・訂正符号結合性非成立演算手段は、エラー検出・訂正符号を求める演算と結合法則が成立しない演算やその組合せから構成される。エラー検出・訂正符号結合性非成立演算手段は、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータと、エラー検出・訂正符号結合性非成立演算手段への入力データから生成されるエラー検出・訂正符号とを入力し、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータからエラー検出・訂正符号を生成するエラー検出・訂正符号生成手段と、エラー検出・訂正符号生成手段の出力データと、エラー検出・訂正符号結合性非成立演算手段への入力データから生成されるエラー検出・訂正符号とを比較し、エラーを検出・訂正するエラー検出・訂正符号チェック手段と、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータから、直接に、前記エラー検出・訂正符号結合性非成立演算手段の出力データから生成されるエラー検出・訂正符号と等価な値に変換する2入力1出力エラー検出・訂正符号演算手段とを備える。
【0140】
そして、エラー検出・訂正符号演算手段は、1入力1出力エラー検出・訂正符号演算手段に対しては、1入力1出力エラー検出・訂正符号演算手段の前段にある演算手段の出力データを入力し、2入力1出力エラー検出・訂正符号演算手段に対しては、1入力1出力エラー検出・訂正符号演算手段の途中演算結果と、2入力1出力エラー検出・訂正符号演算手段の前段にある演算手段の出力データとを入力することで、1入力1出力エラー検出・訂正符号演算手段の出力データから生成されるエラー検出・訂正符号と等価な値を出力する。
【産業上の利用可能性】
【0141】
本発明は、ソフトエラーからデータを保護しなければならない高信頼システムで効果を発揮する。このシステムの例として、ディスクアレイシステムにおけるデータ暗号化システム、動画コンテンツ等をエンコード/デコードするサーバが挙げられる。
【図面の簡単な説明】
【0142】
【図1】本発明の1実施形態を示すブロック図である。
【図2】暗号処理部、暗号パリティ処理部の詳細を説明するブロック図である。
【図3】RotWordパリティ演算部の詳細を説明するブロック図である。
【図4】SubWordパリティ演算部の詳細を説明するブロック図である。
【図5】SubWordパリティ変換部で使用するテーブルを説明するブロック図である。
【図6】KeyExpansionパリティ演算部の演算部の詳細を説明するブロック図である。
【図7】AddRoundKeyパリティ演算部の詳細を説明するブロック図である。
【図8】SubBytesパリティ演算部の詳細を説明するブロック図である。
【図9】ShiftRowsパリティ演算部の詳細を説明するブロック図である。
【図10】MixColumnsパリティ演算部の詳細を説明するブロック図である。
【図11】MixColumnsパリティ変換部の詳細を説明するブロック図である。
【図12】本発明の1実施形態を示すブロック図である。
【符号の説明】
【0143】
100……ホスト装置、101……ストレージシステム、110……インタフェース、111……ストレージ制御回路、112……ディスクアレイ、120……鍵バッファ、121……書き込み制御部、122……読み込み制御部、123……エラー検知部、124……暗号部、125……復号部、130……AES暗号部、131……パリティ生成部、132……パリティ生成部、133……AES暗号パリティ演算部、134……パリティ生成部、135……パリティチェック部、140……AES復号部、141……パリティ生成部、142……パリティ生成部、143……AES復号パリティ演算部、144……パリティ生成部、145……パリティチェック部、150……ディスクドライブ、151……ディスクドライブ、152……ディスクドライブ、200……セレクタ、201……KeyExpansion演算部、202……AddRoundKey演算部、203……セレクタ、204……SubBytes演算部、205……ShiftRows演算部、206……MixColumns演算部、207……AddRoundKey演算部、208……SubBytes演算部、209……ShiftRows演算部、210……AddRoundKey演算部、220……セレクタ、221……KeyExpansionパリティ演算部、222……AddRoundKeyパリティ演算部、223……セレクタ、224……SubBytesパリティ演算部、225……ShiftRowsパリティ演算部、226……MixColumnsパリティ演算部、227……AddRoundKeyパリティ演算部、228……SubBytesパリティ演算部、229……ShiftRowsパリティ演算部、230……AddRoundKeyパリティ演算部、300……RotWord演算部、301……SubWord演算部、302……KeyExpansion演算部内演算部、310……RotWordパリティ演算部、311……SubWordパリティ演算部、312……KeyExpansion演算部内パリティ演算部、400……パリティ生成部、401……SubWordパリティ変換部、402……パリティチェック部、410……パリティ生成部、411……SubBytesパリティ変換部、412……パリティチェック部、420……パリティ生成部、421……MixColumnsパリティ変換部、422……パリティチェック部、500……S−boxパリティ変換テーブル、600……パイプライン暗号部、601……パイプライン復号部、700……ラウンド0鍵拡張部、701……ラウンド1鍵拡張部、702……ラウンド8鍵拡張部、703……ラウンド9鍵拡張部、704……ラウンド0暗号部、705……ラウンド1暗号部、706……ラウンド8暗号部、707……ラウンド9暗号部、708……AddRoundKey演算部、709……ラウンド0鍵拡張パリティ演算部、710……ラウンド1鍵拡張パリティ演算部、711……ラウンド8鍵拡張パリティ演算部、712……ラウンド9鍵拡張パリティ演算部、713……ラウンド0暗号パリティ演算部、714……ラウンド1暗号パリティ演算部、715……ラウンド8暗号パリティ演算部、716……ラウンド9暗号パリティ演算部、717……AddRoundKeyパリティ演算部
【技術分野】
【0001】
本発明は、情報家電やコンピュータ等における暗号/復号手段のソフトエラー対策技術に関する。特に、コンピュータシステムや、特に高い信頼性が求められるストレージシステムにおける暗号/復号手段のソフトエラー対策技術に関する。
【背景技術】
【0002】
現在、企業の内部統制強化を定めた日本版SOX法の制定により、企業は、大量の帳票データの保護や管理を行わなければならず、それらの大量のデータを一括して管理することができるデータセンタの自社設置、もしくはデータセンタのアウトソーシングに注目が集まっている。データセンタは、膨大なデータを一括保持するために、HDDや磁気テープ装置などにデータを格納するストレージシステムで構成される場合が多い。
【0003】
このようなストレージシステムは、企業の帳簿データなど損失が許されないデータを保持するため、パーソナルユースのコンピュータシステムと比較して高い信頼性が要求される。ストレージシステムで懸念されるデータ損失機会は、物理的な故障であるハードエラーによるデータ損失機会と、一時的なエラー(ソフトエラー)でのデータ損失機会に分類される。
【0004】
ハードエラーとは、前述の通り、HDDや磁気テープ、さらにストレージシステムにおいてデータ格納処理を制御するマイクロプロセッサの故障など、物理的要素の修理や交換を必要とするエラーである。一方、ソフトエラーとは、マイクロプロセッサに含まれる放射性物質より出力される放射線や宇宙線やアルファ波、中性子線などのノイズ発生粒子が、ハードウェアを破壊せずにハードウェア動作の不良を起こすことで発生するエラーである。近年、ハードウェアの高集積化によるLSIの動作電圧低下やクロック周波数上昇が原因となり、ソフトエラーによる動作不良が顕著になりつつある。
【0005】
従来の高信頼性システムは、ソフトエラー耐性の高い素子の使用による保護方法や、特許文献1に示されるような同一の処理回路の多重化・多数決による保護方法、さらに特許文献2に示されるようなパリティビットチェックによる保護方式によりソフトエラーからハードウェアの動作不良を保護してきた。
【0006】
特許文献1に見られる多重化・多数決による保護方法は、具体的に、同一機能を持つ回路を複数だけ冗長し、その冗長した複数回路から出力されるデータ間で多数決を取ることで、エラーを検出・訂正する方法である。
【0007】
また、特許文献2に見られる保護方法は、メモリ素子において、データから生成したパリティをデータとは別の領域に保持しておき、データ読み出し時にデータから生成するパリティと保持していたパリティ間でエラーを検出するパリティビットチェック方式や、パリティビットではなくECC(Error Checking and Correct)によりエラーを訂正する方式である。
【0008】
ここで、パリティとは、与えられたデータの奇偶性を保持する値であり、例えば、4ビットのデータ「1001」が与えられた場合、奇数パリティは(1^0^0^1)で計算された「1」であり、偶数パリティは(1^0^0^1)で計算された「0」である。パリティを使用する際、送信側(パリティ保持側)と受信側(パリティチェック側)で、奇数パリティか偶数パリティのどちらを使用するか、およびパリティ演算するデータ単位を指定しておく必要がある。
【0009】
ストレージシステムに関する話題として、一方では、HDD(Hard Disk Drive)の盗難による情報漏えいが問題となっている。このHDDの盗難による情報漏えいを防止する1つの方法は、HDDに格納されるデータを暗号化することである。
【0010】
HDD格納データの暗号化には、ブロック暗号を広く用いられている。ブロック暗号は、データを一定長のブロックデータに分割し、鍵やIV(Initial Vector)を用いてブロック単位に暗号化し、同一長の暗号データを出力する共通鍵暗号方式であり、2007年現在、非特許文献1で示されるAES(Advanced Encryption Standard)が、事実上の世界標準となっている。
【0011】
AESは、ブロック単位のサイズを128ビットとし、ブロック単位にラウンドと呼ばれる処理単位で換字処理(substitution)と転置処理(permutation)を繰り返し行うスピン構造(SPN構造)を持った暗号アルゴリズムである。また、AESは、各ラウンドで8ビット単位にS−boxと呼ばれる16x16のテーブルを用いてデータ変換を行う暗号アルゴリズムでもある。
【0012】
AESは、前述のスピン構造によるデータの繰り返し処理、および8ビット単位でのS−box変換処理により、処理負荷が高く、また、処理完了までに時間を要する。高速なデータ転送能力が要求されるストレージシステムにAES暗号化機能を実装する場合は、前述のAES処理による処理スループット低下、および処理レイテンシの発生は回避すべき問題であり、通常コストを下げるために、AES機能をデータ格納制御用マイクロプロセッサなどにハードウェアとして実装する。
【0013】
また、AES機能をハードウェア化する場合は、AES処理スループットを高速化するために、S−boxを1つだけ用意し8ビットずつ処理するのではなく、S−boxを16だけ用意し128ビットずつ処理するよう設計する場合がある。さらに、高速な処理能力が要求される場合は、各ラウンド処理を独立に設計し、それらを連結するパイプライン構造によりAES処理スループットを高速化する。
【特許文献1】特願平8−344042号公報
【特許文献2】特開2007−179450号公報
【非特許文献1】FIPS197 Announcing the ADVANCED ENCRYPTION STANDARD(AES)[平成19年10月 日URL検索]http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
【発明の開示】
【発明が解決しようとする課題】
【0014】
ストレージシステムにおいて、特にマイクロプロセッサ等にハードウェア実装されたAES回路のソフトエラー耐性を高める場合、従来では、特許文献1の手法を使用してAES回路全体を多重化し、複数のAES回路からの出力結果間で多数決を取りエラーを検出・訂正する手法、もしくは、特許文献2の手法を使用してAES演算実行論理からの演算結果出力をラッチ回路に格納するのとは別に、AES演算実行論理からの演算結果出力から生成されるパリティを前述のラッチ回路とは別のラッチ回路の保持しておき、ラッチ回路からの演算結果読み出し時に、演算結果から生成したパリティと、別途保持しておいた前述の演算結果パリティを比較することでエラー検出・訂正する手法を用いてきた。
【0015】
しかしながら、特許文献1の手法を使用したAES回路保護方法では、AES回路を複数実装するために回路規模が増大する。前述の通り、S−boxを16回路用意する設計、もしくは、パイプライン構造にする設計では回路規模の増大は顕著である。回路規模の増大は、ハードウェアコストを圧迫するばかりか、マイクロプロセッサに組み込むべき他機能を実装できないなどの弊害を生む。
【0016】
また、AESは128ビット単位で演算することから、特許文献1の手法を使用したAES回路保護によるデータ保護強度は、128ビットとできる。ここで、例えば、ソフトエラーの発生率が8ビットに1ビットだけ誤りを発生させる程度であれば、全ビットを保護せずに、8ビット単位でエラー検出させればよく、特許文献1の手法は、オーバースペックである。一方で、特許文献2の手法を使用したAES回路保護方法では、AES演算実行論理で発生したソフトエラーには対応できない。
【0017】
本発明は以上の点を考慮してなされたもので、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置および演算方法ならびにコンピュータシステムを提案するものである。
【課題を解決するための手段】
【0018】
上述の課題を解決するために本発明においては、平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、AES暗号化部から出力されるAES演算途中結果とを演算し、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【0019】
具体的に、本発明においては、AES演算における前段までの演算のデータのパリティデータから、直接にAES暗号化部のRotWord演算部の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算部と、AES演算における前段までの演算のデータおよびそのパリティデータから、直接にAES暗号化部のSubWord演算部の出力データから生成されるパリティと等価な値を出力するSubWordパリティ演算部と、AES演算における前段までの演算のデータのパリティデータから、直接にAES暗号化部のAddRoundKey演算部の出力データから生成されるパリティと等価な値を出力するAddRoundKeyパリティ演算部と、AES演算における前段までの演算のデータおよびそのパリティデータから、直接にAES暗号化部のSubBytes演算部の出力データから生成されるパリティと等価な値を出力するSubBytesパリティ演算部と、AES演算における前段までの演算のデータのパリティデータから、直接にAES暗号化部のShiftRows演算部の出力データから生成されるパリティと等価な値を出力するShiftRowsパリティ演算部と、AES演算における前段までの演算のデータおよびそのパリティデータから、直接にAES暗号化部のMixColumns演算部の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算部とを具備する。
【0020】
また、本発明においては、平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置の演算方法であって、演算部が、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、AES暗号化部から出力されるAES演算途中結果とを演算し、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算ステップを備える。
【0021】
さらに、本発明においては、ホスト装置から送信されるデータを格納するコンピュータシステムにおいて、ホスト装置から送信されるデータを平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部と、AES暗号化部の最終演算結果をチェックするためのデータを出力する演算部と、AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと、前記演算部の最終演算結果とを比較するパリティチェック部とを備え、演算部は、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する。
【0022】
さらに、本発明においては、暗号文ブロックから平文ブロックへAES演算により復号化するAES復号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、AES復号化の際に鍵として使用する復号鍵からXOR演算により生成されるパリティデータと、暗号文ブロックからXOR演算により生成されるパリティデータと、AES復号化部から出力されるAES演算途中結果とを演算し、AES復号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部を備える。
【0023】
従って、AES暗号化部又はAES復号化部から出力される最終演算結果から生成されるパリティデータと、AESパリティ演算手段から出力される最終演算結果と比較することで、格納するデータをAESで暗号化した際の最終演算結果のエラーを検出することができ、この結果、格納するデータを保護することができる。また、多重化によるデータ保護方法に比べ回路規模が小さくすることができ、かつ、AES回路全体にわたりパリティレベルでソフトエラーを検知することができる。
【発明の効果】
【0024】
本発明によれば、簡易な構成でコンピュータシステムの信頼性を維持させ得る演算装置および演算方法ならびにコンピュータシステムを実現する。
【発明を実施するための最良の形態】
【0025】
(1)実施例1
以下、図面を用いて本発明の第一の実施形態を詳細に説明する。なお、全図に示す同一の番号は、同一の機能を持つため説明を省略する。
【0026】
図1は、本発明の一実施形態に係るストレージシステムを示す構成図である。本実施例1で示すストレージシステムは、鍵長128ビットの暗号鍵を使用してストレージに格納するデータをAESで暗号化(復号化)するものとし、また、扱うデータを8ビット単位でパリティ化しデータを保護するシステムとする。さらに、本実施例1では、データはビッグエンディアン(Big Endian)で整列されているものとして説明する。
【0027】
図1において、ホスト装置100は、情報家電やコンピュータのような、ストレージシステム101に格納されたデータを使用する装置である。
【0028】
ストレージシステム101は、インタフェース110と、ストレージ制御回路111と、ストレージ112で構成される。インタフェース110は、ホスト装置100とストレージ制御回路111間でのデータ転送を制御する。ストレージ制御回路111は、ストレージ112へのデータ書き込みおよび読み込みを制御する。ストレージ112は、ストレージ制御回路111から転送されるデータをHDDや磁気テープといった格納部150〜152に格納する。
【0029】
ストレージ制御回路111は、鍵バッファ120と、書き込み制御部121と、読み込み制御部122と、エラー検知部123と、暗号部124と、復号部125とで構成される。
【0030】
鍵バッファ120は、ホスト装置100から転送されたデータをストレージ112へ格納する際に暗号部124で実行される暗号化で、さらにストレージ112に格納されたデータをホスト装置100へ転送する際に復号部125で実行される復号で使用される暗号鍵を保持する。
【0031】
書き込み制御部121は、ホスト装置100から転送されるデータをストレージ112へ書き込む処理を制御する。同様に、読み込み制御部122は、ストレージ112に格納されたデータをホスト装置100へ転送する際にストレージ112からの読み込み処理を制御する。
【0032】
エラー検知部123は、暗号部124や復号部125から通知されるデータエラーを検知し、書き込み制御部121や読み込み制御部122へデータ再転送要求を通知する。暗号部124は、ストレージ112へ暗号化されたデータを格納するために、書き込み制御部121から転送されるデータを暗号化する。また、復号部125は、ストレージ112に格納されたデータを復号し読み込み制御部122へ転送する。
【0033】
暗号部124は、AES暗号部130と、パリティ生成部131、132、134と、AES暗号パリティ演算部133と、パリティチェック部135で構成される。AES暗号部130は、書き込み制御部121から転送されるデータを鍵バッファ120から転送される暗号鍵情報を使用してAESで暗号化する。
【0034】
パリティ生成部131は、鍵バッファ120から転送される暗号鍵データからパリティを生成する。パリティ生成部132は、書き込み制御部121から転送されるデータからパリティを生成する。AES暗号パリティ演算部133は、パリティ生成部131、132の出力データと、AES暗号部130から出力される途中演算結果を入力し、AES暗号部130が出力する最終演算結果を入力しパリティを生成するパリティ生成部134の出力データと等価な値を出力する。
【0035】
パリティチェック部135は、パリティ生成部134の出力データと、AES暗号パリティ演算部133の出力データとを入力し、入力される2データを比較し異なる場合にエラーをエラー検知部123に通知する。なお、パリティ生成部131、132、134は、それぞれに入力されるデータを8ビット単位にパリティ化する。
【0036】
復号部125は、AES復号部140と、パリティ生成部141、142、144と、AES復号パリティ演算部143と、パリティチェック部145で構成される。AES復号部140は、ストレージ112から転送されるデータを鍵バッファ120から転送される暗号鍵情報を使用してAESで復号する。パリティ生成部141は、鍵バッファ120から転送される暗号鍵データからパリティを生成する。
【0037】
パリティ生成部142は、ストレージ112から転送されるデータからパリティを生成する。AES復号パリティ演算部143は、パリティ生成部141、142の出力データと、AES復号部140から出力される途中演算結果を入力し、AES復号部140が出力する最終演算結果を入力しパリティを生成するパリティ生成部144の出力データと等価な値を出力する。パリティチェック部145は、パリティ生成部144の出力データと、AES復号パリティ演算部143の出力データとを入力し、入力される2データを比較し異なる場合にエラーをエラー検知部123に通知する。なお、パリティ生成部141、142、144は、それぞれに入力されるデータを8ビット単位にパリティ化する。
【0038】
続けて、図2を用いてAES暗号パリティ演算部133およびAES暗号部130の詳細を説明する。
【0039】
図2において、セレクタ200は、鍵バッファ120から転送される暗号鍵データと、KeyExpansion演算部201の出力データを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ200は、内部に保持するラウンド数が0の時のみ鍵バッファ120から転送される暗号鍵データを出力する。
【0040】
KeyExpansion演算部201は、セレクタ200の出力データを入力し、AES暗号化における鍵拡張演算を行う演算手段であり、RotWord演算部300、SubWord演算部301、演算部302で構成される。
【0041】
RotWord演算部300は、セレクタ200からの出力データ128ビットの下位32ビットだけを入力し、8ビット単位でローテートする演算手段である。SubWord演算部301は、RotWord演算部300の出力データを入力し、入力データを8ビット単位でS−boxによる非線形変換を行うSubWord演算手段である。
【0042】
演算部302は、セレクタ200の出力データと、SubWord演算部301の出力データとを入力し、SubWord演算部301からの入力データをRconと呼ばれるラウンド毎に決定される定数でXORし、32ビット単位で区切られたセレクタ200からの入力データに対して、32ビット単位で分割されたデータおよびそれぞれの上位データとのXOR演算結果を順次XOR演算する演算手段である。
【0043】
AddRoundKey演算部202は、鍵バッファ120から出力される暗号鍵データと、書き込み制御部121からの出力データとを入力し、2入力をXOR演算するAES演算におけるAddRoundKey演算を行う手段である。
【0044】
セレクタ203は、AddRoundKey演算部202からの出力データと、AddRoundKey演算部207からの出力データとを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ203は、内部に保持するラウンド数が「0」の時のみAddRoundKey演算部202からの出力データを出力する。
【0045】
SubBytes演算部204は、セレクタ203の出力データを入力し、8ビット単位でS−boxによる非線形変換を行うAES演算におけるSubBytes演算を行う手段である。ShiftRows演算部205は、SubBytes演算部204の出力データを入力し、8ビット単位でローテート演算するAES演算におけるShiftRows演算を行う手段である。
【0046】
MixColumns演算部206は、ShiftRows演算部205の出力データを入力し、32ビット単位でデータをGF(2^8)上で乗算するAES演算においてMixColumns演算を行う手段である。AddRoundKey演算部207は、KeyExpansion演算部201からの出力データと、MixCoulumns演算部206からの出力データとを入力し、AddRoundKey演算部202と等価な処理を行う。
【0047】
SubBytes演算部208は、AddRoundKey演算部207からの出力データを入力し、SubBytes演算部204と等価な処理を行う。ShiftRows演算部209は、SubBytes演算部208からの出力データを入力し、ShiftRows演算部205と等価な処理を行う。
【0048】
AddRoundKey演算部210は、KeyExpansion演算部201からの出力データと、ShiftRows演算部209からの出力データとを入力し、AddRoundKey演算部202と等価な処理を行う。
【0049】
また、セレクタ220は、パリティ生成部131から出力される暗号鍵パリティと、KeyExpansionパリティ演算部221(図2では‘keyExpansionと表記)の出力データとを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ220は、内部に保持するラウンド数が「0」の時のみパリティ生成部131から出力される暗号鍵パリティを出力する。
【0050】
KeyExpansionパリティ演算部221は、セレクタ220の出力データを入力し、KeyExpansion演算部201からの出力データから生成されるパリティと等価な値を出力する演算手段であり、RotWordパリティ演算部310(図2では’rotwordと表記)、SubWordパリティ演算部311(図2では‘subwordと表記)、演算部312で構成される。
【0051】
RotWordパリティ演算部310は、セレクタ220の出力データ16ビットの下位4ビットだけを入力し、RotWord演算部300からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0052】
図3を用いてRotWordパリティ演算部310の詳細を説明する。RotWordパリティ演算部310は、入力される4ビット分のパリティを1ビット単位にローテートする。ここで、RotWord演算部300で処理されるデータをパリティレベルで保護するには、RotWordパリティ演算部310が、RotWord演算部300からの出力データから生成されるパリティと等価な値を出力すればよい。セレクタ200から出力されるデータは、鍵バッファ120から出力されるデータか、KeyExpansion演算部210から出力されるデータであり、鍵バッファ120から出力されるデータは、パリティ生成部131で生成されるパリティによりパリティレベルで保護できることは自明である。なお、KeyExpansion演算部210から出力されるデータのデータ保障性に関しては後述する。
【0053】
また、RotWord演算部300の演算は、8ビット単位のローテート演算であり、8ビット内で演算を行うパリティ演算とは互いに影響を及ぼさない。以上のことから、RotWord演算部300の演算は、RotWordパリティ演算部310により、パリティレベルでの保護を保障される。
【0054】
SubWordパリティ演算部311は、RotWord演算部300からの出力データと、セレクタ220からの出力データと、RotWordパリティ演算部310からの出力データとを入力し、SubWord演算部301からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0055】
図4を用いてSubWordパリティ演算部311の詳細を説明する。SubWordパリティ演算部311は、パリティ生成部400と、SubWordパリティ変換部401と、パリティチェック部402から構成される。パリティ生成部400は、8ビットのデータを入力し1ビットのパリティを生成する。SubWordパリティ変換部401は、8ビットのデータを入力し図5に示すS−boxパリティ変換テーブル500を用いて1ビットのパリティに変換する。
【0056】
なお、図5に示すS−boxパリティ変換テーブル500は、入力された8ビットデータの上位4ビットと下位4ビットをそれぞれ行列のインデックスとして使用し、非特許文献1に記載されるS−boxテーブル変換結果である8ビットデータから生成されるパリティに直接変換するテーブルである。
【0057】
図4に戻り、パリティチェック部402は、16つのパリティ生成部400から生成されたパリティ16ビットのデータと、セレクタ220からの出力データの上位12ビットおよびRotWordパリティ演算部310からの出力データの4ビットの合計16ビットとを比較し異なる場合にエラーをエラー検知部123へ通知する。
【0058】
ここで、SubWord演算部301で処理されるデータをパリティレベルで保護するには、SubWordパリティ演算部311が、SubWord演算部301からの出力データから生成されるパリティと等価な値を出力すればよい。SubWord演算部301の演算は、入力される128ビットデータを8ビット単位で非線形に変換する演算であるため、RotWordパリティ演算部310からSubWordパリティ演算部311へ入力されるデータ、つまりRotWord演算部300からの出力データから生成されるパリティと等価なデータから直接に、SubWord演算部301からの出力データから生成されるパリティと等価なデータを求めることができない。
【0059】
ゆえに、SubWordパリティ演算部311にて、SubWord演算部301からの出力データから生成されるパリティと等価なデータを求めるためには、RotWord演算部300から出力されるデータが必要になる。そこで、SubWordパリティ演算部311にて、RotWord演算部300から出力されるデータを使用するに当たり、パリティ生成部400とパリティチェック部402とを用意して、RotWord演算部300からの出力データにエラーが発生していないか、パリティレベルでチェックする。
【0060】
以上のSubWordパリティ変換部402で用いるS−boxパリティ変換テーブルが単に非特許文献1に記載されるS−boxテーブル変換結果である8ビットデータから生成されるパリティに直接変換するテーブルであること、およびRotWord演算部300までの演算でエラーが発生していないかを、RotWord演算部300の出力データとRotWordパリティ演算部301の出力データを用いて、パリティレベルでデータをチェックする構造であることから、SubWord演算部301の演算は、SubWordパリティ演算部311により、パリティレベルでの保護を保障される。
【0061】
演算部312は、セレクタ220の出力データと、SubWordパリティ演算部311からの出力データとを入力し、SubWordパリティ演算部311からの入力データを前述のRconから生成されるパリティでXORする。そして、演算部312は、4ビット単位で区切られたセレクタ220からの入力データに対して、4ビット単位で分割されたそれぞれの上位データと、前述のXOR演算結果とを順次XOR演算する演算手段である。
【0062】
図6を用いて演算部312の詳細を説明する。演算部312は、SubWordパリティ演算部311からの入力データの下位4ビットと、前述のRconから生成されるパリティ(Rconパリティと記す。また、Rconパリティは定数であるため、図6では、1ビット単位に、rcon_parity_0, rcon_parity_1, rcon_parity_2, rcon_parity_3,と表記)4ビットとをXOR演算する。
【0063】
ここで、Rconパリティは、32ビットのRconを8ビット単位に分割し、それぞれの分割データ8ビットから1ビットパリティとして求められるデータである。また、前述のRconパリティと、SubWordパリティ演算部311からの入力データ4ビットをXOR演算した結果をtempパリティとする。
【0064】
この場合、演算部312は、セレクタ220から入力されるデータ16ビットの上位4ビットとtempパリティとをXORし、そのXOR結果(wp[0]とする)とセレクタ220から入力されるデータ16ビットの2番目の上位4ビットとをXORし、そのXOR結果(wp[1]とする)とセレクタ220から入力されるデータ16ビットの3番目の上位4ビットとをXORし、そのXOR結果(wp[2]とする)とセレクタ220から入力されるデータ16ビットの最下位4ビットとをXORする(XOR結果をwp[3]とする)。
【0065】
演算部312は、wp[0]〜wp[3]をセレクタ220、もしくはAddRoundKeyパリティ演算部227、230の対応ビットに出力する。ここで、演算部302で処理されるデータをパリティレベルで保護するには、演算部312が、演算部302からの出力データから生成されるパリティと等価な値を出力すればよい。演算部312で実行される演算は、演算部302の演算をパリティレベルで圧縮した演算である。つまり、演算部302は32ビット単位で演算するのに対し、パリティ生成は8ビット単位で演算することから、両者の演算は互いに影響を及ぼさない。
【0066】
それゆえ、演算部302の演算は、演算部312により、パリティレベルでの保護を保障される。なお、セレクタ220からの出力データの上位12ビットと、SubWordパリティ演算部311から出力されるデータの上位12ビットは等価であるため、どちらのデータを使用しても良い。
【0067】
AddRoundKeyパリティ演算部222(図2では‘addroundkeyと表記)は、パリティ生成部131から出力される暗号鍵パリティと、パリティ生成部132から生成されるデータパリティを入力し、2入力をXOR演算する演算手段である。
【0068】
図7を用いてAddRoundKeyパリティ演算部222の詳細を説明する。AddRoundKeyパリティ演算部222は、パリティ生成部131から出力される暗号鍵パリティ16ビットと、パリティ生成部132から生成されるデータパリティ16ビットとを入力し、2入力の対応ビットをXOR演算する。
【0069】
ここで、AddRoundKey演算部202で処理されるデータをパリティレベルで保護するには、AddRoundKey演算部222が、AddRoundKey演算部202からの出力データから生成されるパリティと等価な値を出力すればよい。AddRoundKey演算とパリティ演算とは共にXORのみで構成されており、そのため、(a)AddRoundKey演算後にパリティを生成することと、(b)パリティ生成後にAddRoundKey演算することとは等価である。それゆえ、AddRoundKey演算部202の演算は、AddRoundKeyパリティ演算部222により、パリティレベルでの保護を保障される。
【0070】
セレクタ223は、AddRoundKeyパリティ演算部222からの出力データと、AddRoundKeyパリティ演算部227からの出力データとを入力し、内部に保持するラウンド数に応じて、2入力データの一方を出力するセレクタである。なお、セレクタ223は、内部に保持するラウンド数が「0」の時のみAddRoundKeyパリティ演算部222からの入力データを出力する。
【0071】
SubBytesパリティ演算部224は、セレクタ203からの出力データと、セレクタ223からの出力データとを入力し、SubBytes演算部204からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0072】
図8を用いてSubBytesパリティ演算部224の詳細を説明する。SubBytesパリティ演算部224は、パリティ生成部410と、SubBytesパリティ変換部411と、パリティチェック部412から構成される。パリティ生成部410は、8ビットのデータを入力し1ビットのパリティを生成する。SubBytesパリティ変換部411は、8ビットのデータを入力し図5に示すS−boxパリティ変換テーブル500を用いて1ビットのパリティに変換する。
【0073】
パリティチェック部412は、16つのパリティ生成部410から生成されたパリティ16ビットのデータと、セレクタ223からの出力データの16ビットとを比較し異なる場合にエラーをエラー検知部123へ通知する。ここで、SubBytes演算部204で処理されるデータをパリティレベルで保護するには、SubBytesパリティ演算部224が、SubBytes演算部204からの出力データから生成されるパリティと等価な値を出力すればよい。
【0074】
SubBytes演算部204の演算は、入力される128ビットデータを8ビット単位で非線形に変換する演算であるため、セレクタ223からSubBytesパリティ演算部224へ入力されるデータ、つまりセレクタ203からの出力データから生成されるパリティと等価なデータから直接に、SubBytes演算部204からの出力データから生成されるパリティと等価なデータを求めることができない。ゆえに、SubBytesパリティ演算部224にて、SubBytes演算部204からの出力データから生成されるパリティと等価なデータを求めるためには、セレクタ203から出力されるデータが必要になる。
【0075】
そこで、SubBytesパリティ演算部224にて、セレクタ203から出力されるデータを使用するに当たり、パリティ生成部410とパリティチェック部412を用意して、セレクタ203からの出力データにエラーが発生していないか、パリティレベルでチェックする。以上のSubBytesパリティ変換部412で用いるS−boxパリティ変換テーブルが単に非特許文献1に記載されるS−boxテーブル変換結果である8ビットデータから生成されるパリティに直接変換するテーブルであること、およびセレクタ203までの演算でエラーが発生していないかを、セレクタ203の出力データと、セレクタ223の出力データとを用いて、パリティレベルでデータをチェックする構造であることから、SubBytes演算部204の演算は、SubBytesパリティ演算部224により、パリティレベルでの保護を保障される。
【0076】
ShiftRowsパリティ演算部225は、SubBytes演算部224からの出力データを入力し、ShiftRows演算部205からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0077】
図9を用いてShiftRowsパリティ演算部225の詳細を説明する。ShiftRowsパリティ演算部225は、入力されるデータ16ビットをi[0]〜i[15]とすると、i[0]、i[4]、i[8]、i[12]に対してローテート演算し、i[1]、i[5]、i[9]、i[13]に対してローテート演算し、i[2]、i[6]、i[10]、i[14]に対してローテート演算し、i[3]、i[7]、i[11]、i[15]に対してローテート演算する。
【0078】
ここで、ShiftRows演算部205で処理されるデータをパリティレベルで保護するには、ShiftRowsパリティ演算部225が、ShiftRows演算部205からの出力データから生成されるパリティと等価な値を出力すればよい。ShiftRows演算部205での演算は、8ビット単位のローテート演算であり、8ビット内で演算を行うパリティ演算とは互いに影響を及ぼさない。それゆえ、ShiftRows演算部205の演算は、1ビット単位に同等のローテート演算を行うShiftRowsパリティ演算部225により、パリティレベルでの保護を保障される。
【0079】
MixColumnsパリティ演算部226は、ShiftRows演算部205からの出力データと、ShiftRowsパリティ演算部225からの出力データとを入力し、MixColumns演算部206からの出力データから生成されるパリティと等価な値を出力する演算手段である。
【0080】
図10を用いてMixColumnsパリティ演算部226の詳細を説明する。MixColumnsパリティ演算部226は、パリティ生成部420と、MixColumnsパリティ変換部421と、パリティチェック部422から構成される。パリティ生成部420は、8ビットのデータを入力し1ビットのパリティを生成する。MixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データを32ビット単位で分割したデータの8ビット単位の最上位ビット、合計4ビットと、ShiftRowsパリティ演算部225からの出力データ16ビットを4分割した各4ビットとを入力し、図11に示す演算を行い4ビットのパリティを出力する。
【0081】
具体的に、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの127、119、111、103ビットと、ShiftRowsパリティ演算部225からの出力データの15、14、13、12ビットとを入力し、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの95、87、79、71ビットと、ShiftRowsパリティ演算部225からの出力データの11、10、9、8ビットとを入力し、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの63、55、47、39ビットと、ShiftRowsパリティ演算部225からの出力データの7、6、5、4ビットとを入力し、1つのMixColumnsパリティ変換部421は、ShiftRows演算部205からの出力データの31、23、15、7ビットと、ShiftRowsパリティ演算部225からの出力データの3、2、1、0ビットとを入力する。
【0082】
図11を用いてMixColumns変換部421の詳細な説明をする。MixColumns変換部421で生成するパリティ4ビットの最上位ビットは、ShiftRows演算部205からの出力データ4ビットの最上位ビットおよび上位から2ビット目のデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、最上位ビットを求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの上位から2ビット目のデータを重複してXORする。
【0083】
また、MixColumns変換部421で生成するパリティ4ビットの上位から2ビット目は、ShiftRows演算部205からの出力データ4ビットの上位から2ビット目および上位から3ビット目のデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、上位から2ビット目を求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの上位から3ビット目のデータを重複してXORする。
【0084】
また、MixColumns変換部421で生成するパリティ4ビットの上位から3ビット目は、ShiftRows演算部205からの出力データ4ビットの上位から3ビット目および最下位ビットのデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、上位から3ビット目を求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの最下位ビットのデータを重複してXORする。
【0085】
また、MixColumns変換部421で生成するパリティ4ビットの最下位ビットは、ShiftRows演算部205からの出力データ4ビットの最上位ビットおよび最下位ビットのデータと、ShiftRowsパリティ演算部225から出力データの4ビットの全ビットとをXORした結果である。MixColumns変換部421は、最下位ビットを求めるXOR演算の際、ShiftRowsパリティ演算部225から出力データの最上位ビットのデータを重複してXORする。
【0086】
パリティチェック部422は、16つのパリティ生成部420から生成されたパリティ16ビットのデータと、ShiftRowsパリティ演算部225からの出力データの16ビットとを比較し異なる場合にエラーをエラー検知部123へ通知する。ここで、MixColumns演算部206で処理されるデータをパリティレベルで保護するには、MixColumnsパリティ演算部226が、MixColumns演算部206からの出力データから生成されるパリティと等価な値を出力すればよい。MixColumns演算部206の演算は、全てXOR演算で構成されており、前述の通り、パリティ生成演算もXOR演算のみで構成される。
【0087】
従って、図11に示すように、ShiftRowsパリティ演算部225からの出力データ、つまり、ShiftRows演算結果のパリティデータをMixColumns演算に使用することが可能であるが、前述の通りMixColumns演算では入力データの内の複数ビットを重複してXORする。それゆえ、MixColumnsパリティ演算部226の演算では、正しいパリティを生成するために、MixColumns演算部206のデータを用いる必要がある。
【0088】
そこで、MixColumnsパリティ演算部226にて、ShiftRows演算部205から出力されるデータを使用するに当たり、パリティ生成部420とパリティチェック部422とを用意して、ShiftRows演算部205からの出力データにエラーが発生していないか、パリティレベルでチェックする。
【0089】
以上のMixColumns演算とパリティ演算とは演算優先順位を変更可能であること、およびShiftRowsパリティ演算部225までの演算でエラーが発生していないかを、ShiftRows演算部205の出力データとShiftRowsパリティ演算部225の出力データとを用いて、パリティレベルでデータをチェックする構造であることから、MixColumns演算部206の演算は、MixColumnsパリティ演算部226により、パリティレベルでの保護を保障される。
【0090】
AddRoundKeyパリティ演算部227は、KeyExpansionパリティ演算部221からの出力データと、MixColumnsパリティ演算部226からの出力データとを入力し、AddRoundKeyパリティ演算部222と同様の演算を行う。
【0091】
SubBytesパリティ演算部228は、AddRoundKeyパリティ演算部227からの出力データと、AddRoundKeyパリティ演算部227からの出力データとを入力し、SubBytesパリティ演算部224と同様の演算を行う。
【0092】
ShiftRowsパリティ演算部229は、SubBytesパリティ演算部228からの出力データを入力し、ShiftRowsパリティ演算部225と同様の演算を行う。
【0093】
AddRoundKeyパリティ演算部230は、KeyExpansionパリティ演算部221からの出力データと、ShiftRowsパリティ演算部229からの出力データとを入力し、AddRoundKeyパリティ演算部222と同様の演算を行う。
【0094】
上述の構成により、本実施例1のストレージシステムは、AES暗号部130でソフトエラーが発生しても、AES暗号部130とは別に用意されたAES暗号パリティ演算部133により、パリティレベルでエラーを検知することができる。
【0095】
また、本実施例1で示した8ビットパリティによりデータを保護するストレージシステムのAES暗号手段は、AES暗号パリティ演算部133で構成されるAES暗号パリティ演算手段がAES暗号部130で構成されるAES暗号手段の1/8の回路規模になるため、エラー検知可能な多重化システム(二重化システム)を採用したAES暗号手段と比較し、回路規模を約56%程度に抑えることが可能である。これは、AES暗号手段の各機能であるKeyExpansion(RotWordとSubWord)、AddRoundKey、SubBytes、ShiftRows、MixColumnsの各演算の出力ビットを8ビットから1ビットに圧縮しているためである。
【0096】
さらに、本実施例1で示した8ビットパリティによりデータを保護するストレージシステムのAES暗号手段は、エラー検知可能な多重化システム(二重化システム)を採用したAES暗号手段と比較し、エラー発生率に合わせてデータ保護強度を変更可能である。例えば、ソフトエラーの発生率が8ビットに1ビットだけ誤りを発生させる程度であれば、8ビット単位でパリティを生成しエラー検出させればよい。また、本実施例1で示したAES暗号手段に対しては、2/4/8ビット単位でパリティを生成するのが効率良い。これは、AESの演算処理単位が128ビットであること、また、AESの内部演算であるSubBytes、ShiftRows、MixColumnsそれぞれが、入力された128ビットのデータの異なるデータ領域を扱うことに起因する。
【0097】
つまり、AESでは、入力されるデータ128ビットを8ビット単位で分割し(ここでは分割されたデータをi[0]〜i[15]とする)、SubBytesは8ビット単位で入力データを演算し(i[j](j=0〜15)それぞれに対して演算)、ShiftRowsは32ビット単位で入力データを演算し(i[0]、i[4]、i[8]、i[12]に対してローテート演算し、i[1]、i[5]、i[9]、i[13]に対してローテート演算し、i[2]、i[6]、i[10]、i[14]に対してローテート演算し、i[3]、i[7]、i[11]、i[15]に対してローテート演算する)、MixColumnsは32ビット単位で演算する(i[0]、i[1]、i[2]、i[3]に対してGF(2^8)体上の乗算し、i[4]、i[5]、i[6]、i[7]に対してGF(2^8)体上の乗算し、i[8]、i[9]、i[10]、i[11]に対してGF(2^8)体上の乗算し、i[12]、i[13]、i[14]、i[15]に対してGF(2^8)体上の乗算する)。また、AESの演算処理単位が128ビットであるため、生成するパリティは128ビットの約数である方が良い。それゆえ、AES暗号手段に対しては、2/4/8ビット単位でパリティを生成するのが効率良い。
【0098】
なお、AES復号手段に関する説明は省略する。AES復号手段のエラー検出を担当するAES復号パリティ演算手段は、本実施例に示したAES暗号パリティ演算手段の適用技術、および非特許文献1を参照することで用意に推測できるからである。
【0099】
念のため、AES復号パリティ演算手段について概要を説明する。この場合、暗号文ブロックから平文ブロックへAES演算により復号化するAES復号化手段は、AES演算におけるRotWord演算手段と、SubWord演算手段と、AddRoundKey演算手段と、InvSubBytes演算手段と、InvShiftRows演算手段と、InvMixColumns演算手段とを具備する。そして、AES復号化手段の最終演算結果をチェックするためのデータを出力するAES復号パリティ演算手段は、AES復号の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、暗号文ブロックからXOR演算により生成されるパリティデータと、AES復号化手段から出力されるAES演算途中結果を入力し、AES復号化手段から出力される最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する。
【0100】
また、AES復号パリティ演算手段は、RotWordパリティ演算手段と、SubWordパリティ演算手段と、AddRoundKeyパリティ演算手段と、InvSubBytesパリティ演算手段と、InvShiftRowsパリティ演算手段と、InvMixColumnsパリティ演算手段とを具備する。
【0101】
InvSubBytesパリティ演算手段は、AddRoundKey演算手段からの出力データ、もしくはInvShiftRows演算手段からの出力データと、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvShiftRowsパリティ演算手段からの出力データを入力し、AddRoundKey演算手段からの出力データ、もしくはInvShiftRows演算手段からの出力データをXOR演算によりパリティデータを生成するInvSubBytesパリティ演算手段内パリティ生成手段と、InvSubBytesパリティ演算手段内パリティ生成手段にて生成されるパリティデータと、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvShiftRowsパリティ演算手段からの出力データを比較するInvSubBytesパリティ演算手段内パリティチェック手段と、AES演算における逆S−box転置手段の出力データから生成されるパリティデータにAddRoundKey演算手段からの入力データ、もしくはInvShiftRows演算手段からの入力データを16分割したデータ単位に直接変換するInvSubBytesパリティ演算手段内逆S−boxパリティ転置手段とを具備し、AES復号化手段におけるInvSubBytes演算手段からの出力データから生成されるパリティと等価な値を出力する。
【0102】
InvShiftRowsパリティ演算手段は、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvMixColumnsパリティ演算手段からの出力データ、もしくはInvSubBytesパリティ演算手段からの出力データを入力し、入力データを16分割したデータ単位にローテート演算することで、AES演算におけるInvShiftRows演算手段からの出力データから生成されるパリティデータと等価な値を出力する。
【0103】
InvMixColumnsパリティ演算手段は、AddRoundKey演算手段からの出力データ、もしくはInvShiftRows演算手段からの出力データと、AddRoundKeyパリティ演算手段からの出力データ、もしくはInvShiftRowsパリティ演算手段からの出力データとを入力し、AddRoundKey演算手段からの入力データ、もしくはInvShiftRows演算手段からの入力データをXOR演算によりパリティデータを生成するInvMixColumnsパリティ演算手段内パリティ生成手段と、InvMixColumnsパリティ演算手段内パリティ生成手段にて生成されるパリティデータと、AddRoundKeyパリティ演算手段からの入力データ、もしくはInvShiftRowsパリティ演算手段からの入力データとを比較するInvMixColumnsパリティ演算手段内パリティチェック手段と、AddRoundKey演算手段からの入力データ、もしくはInvShiftRows演算手段からの入力データを4分割したデータをさらに4分割したデータの各々最上位のデータと、AddRoundKeyパリティ演算手段からの入力データ、もしくはInvShiftRowsパリティ演算手段からの入力データとをXOR演算することで、AES復号化手段におけるInvMixColumns演算手段からの出力データから生成されるパリティと等価な値を出力する。
【0104】
(2)実施例2
以下、図面を用いて本発明の第二の実施形態を詳細に説明する。
【0105】
図12は、鍵長128ビットの暗号鍵を使用してストレージ112に格納するデータをAESで暗号化(復号)し、扱うデータを8ビット単位でパリティ化しデータを保護するストレージシステムを示す構造図である。なお、図12のストレージシステムのAES暗号化(復号)手段は、AES暗号化(復号)手段の内部処理を複数段に分割し、データブロック単位に並列処理が可能なパイプライン構造を取っている。本実施例2では、データはビッグエンディアンで整列されているものとして説明し、全図に示す同一の番号は同一の機能を持つため説明を省略する。
【0106】
図12において、パイプライン暗号部600はAES暗号手段を複数段に分割しパイプライン化された暗号部であり、パイプライン復号部601はAES復号手段を複数段に分割しパイプライン化された復号部である。
【0107】
パイプライン暗号部600は、パリティ生成部131、132、134と、パリティチェック部135と、ラウンド0〜ラウンド9までの鍵拡張部700〜703と、ラウンド0〜ラウンド9までの暗号部704〜707と、AddRoundKey演算部708と、ラウンド0〜ラウンド9までの鍵拡張パリティ演算部710〜712と、ラウンド0〜ラウンド9までの暗号パリティ演算部713〜716と、AddRoundKeyパリティ演算部717とから構成される。
【0108】
ラウンド0〜9鍵拡張部700〜703は、KeyExpansion演算部201で構成されており、各ラウンドの暗号化に必要な拡張鍵を生成する。
【0109】
ラウンド0〜9暗号部704〜706は、AddRoundKey演算部202と、SubBytes演算部204と、ShiftRows演算部205と、MixColumns演算部206で構成されている。ラウンド0〜9暗号部704〜706におけるAddRoundKey演算部は、鍵バッファ120からの出力データ、もしくは各ラウンドに対応したラウンド0〜ラウンド8鍵拡張部700〜703からの出力データと、書き込み制御部121、もしくは各ラウンドに対応したラウンド0〜ラウンド8暗号部704〜706からの出力データとを入力し、AddRoundKey演算部202と同等の演算を行う。
【0110】
ラウンド0〜8暗号部704〜706におけるSubBytes演算部は、ラウンド0〜8暗号部704〜706におけるAddRoundKey演算部から出力されるデータを入力し、SubBytes演算部204と同等の演算を行う。ラウンド0〜8暗号部704〜706におけるShiftRows演算部は、ラウンド0〜8暗号部704〜706におけるSubBytes演算部から出力されるデータを入力し、ShiftRows演算部205と同等の演算を行う。ラウンド0〜8暗号部704〜706におけるMixColumns演算部は、ラウンド0〜8暗号部704〜706におけるShiftRows演算部から出力されるデータを入力し、MixColumns演算部206と同等の演算を行う。
【0111】
ラウンド9暗号部707は、AddRoundKey演算部202と、SubBytes演算部204と、ShiftRows演算部205とで構成されている。ラウンド9暗号部707におけるAddRoundKey演算部は、ラウンド9鍵拡張部703からの出力データと、ラウンド8暗号部706からの出力データとを入力し、AddRoundKey演算部202と同等の演算を行う。ラウンド9暗号部707におけるSubBytes演算部は、ラウンド9暗号部707におけるAddRoundKey演算部から出力されるデータを入力し、SubBytes演算部204と同等の演算を行う。ラウンド9暗号部707におけるShiftRows演算部は、ラウンド9暗号部707におけるSubBytes演算部から出力されるデータを入力し、ShiftRows演算部205と同等の演算を行う。
【0112】
AddRoundKey演算部708は、ラウンド9鍵拡張部703からの出力データと、ラウンド9暗号部707から出力されるデータとを入力し、AddRoundKey演算部202と同等の演算を行う。
【0113】
ラウンド0〜9鍵拡張パリティ演算部709〜712は、KeyExpansionパリティ演算部221で構成されており、各ラウンドの拡張鍵パリティを生成する。
【0114】
ラウンド0〜8暗号パリティ演算部713〜715は、AddRoundKeyパリティ演算部222と、SubBytesパリティ演算部224と、ShiftRowsパリティ演算部225と、MixColumnsパリティ演算部226とで構成されている。ラウンド0〜8暗号パリティ演算部713〜715におけるAddRoundKeyパリティ演算部は、パリティ生成部131からの出力データ、もしくは各ラウンドに対応したラウンド0〜ラウンド8鍵拡張パリティ演算部709〜711からの出力データと、パリティ生成部132からの出力データ、もしくは各ラウンドに対応したラウンド0〜ラウンド8暗号パリティ演算部713〜715からの出力データとを入力し、AddRoundKeyパリティ演算部222と同等の演算を行う。
【0115】
ラウンド0〜8暗号パリティ演算部713〜715におけるSubBytesパリティ演算部は、それぞれ対応するラウンド0〜8暗号部704〜706のAddRoundKey演算部からの出力データと、ラウンド0〜8暗号パリティ演算部713〜715におけるAddRoundKeyパリティ演算部から出力される出力データとを入力し、SubBytesパリティ演算部224と同等の演算を行う。ラウンド0〜8暗号パリティ演算部713〜715におけるShiftRowsパリティ演算部は、ラウンド0〜8暗号パリティ演算部713〜715におけるSubBytesパリティ演算部から出力される出力データを入力し、ShiftRowsパリティ演算部225と同等の演算を行う。
【0116】
ラウンド0〜8暗号パリティ演算部713〜715におけるMixColumnsパリティ演算部は、それぞれ対応するラウンド0〜8暗号部704〜706のShiftRows演算部からの出力データと、ラウンド0〜8暗号パリティ演算部713〜715におけるShiftRowsパリティ演算部から出力される出力データとを入力し、MixColumnsパリティ演算部226と同等の演算を行う。
【0117】
ラウンド9暗号パリティ演算部716は、AddRoundKeyパリティ演算部222と、SubBytesパリティ演算部224と、ShiftRowsパリティ演算部225とで構成されている。ラウンド9暗号パリティ演算部716におけるAddRoundKeyパリティ演算部は、ラウンド8鍵拡張パリティ演算部711からの出力データと、ラウンド8暗号パリティ演算部715からの出力データとを入力し、AddRoundKeyパリティ演算部222と同等の演算を行う。ラウンド9暗号パリティ演算部716におけるSubBytesパリティ演算部は、ラウンド9暗号部707のAddRoundKey演算部からの出力データと、ラウンド9暗号パリティ演算部716におけるAddRoundKeyパリティ演算部から出力される出力データとを入力し、SubBytesパリティ演算部224と同等の演算を行う。
【0118】
ラウンド9暗号パリティ演算部716におけるShiftRowsパリティ演算部は、ラウンド9暗号パリティ演算部716におけるSubBytesパリティ演算部から出力される出力データを入力し、ShiftRowsパリティ演算部225と同等の演算を行う。
【0119】
AddRoundKeyパリティ演算部717は、ラウンド9鍵拡張パリティ演算部712からの出力データと、ラウンド9暗号パリティ演算部716から出力される出力データとを入力し、AddRoundKeyパリティ演算部202と同等の演算を行う。
【0120】
上述の構成により、本実施例2のストレージシステムは、ラウンド0〜ラウンド9鍵拡張部700〜703、もしくはラウンド0〜ラウンド9暗号部704〜707、もしくはAddRoundKey演算部708でソフトエラーが発生しても、ラウンド0〜ラウンド9鍵拡張パリティ演算部709〜712、ラウンド0〜ラウンド9暗号パリティ演算部713〜716およびAddRoundKeyパリティ演算部717により、パリティレベルでエラーを検知することができる。
【0121】
本実施例2のストレージシステムで8ビット単位に生成したパリティによりデータを保護する場合、エラー検知可能な多重化システム(二重化システム)を採用したAES暗号手段と比較し、回路規模を約60%程度に抑えることが可能である。
【0122】
さらに、本実施例2で示すストレージシステムのAESパイプライン暗号手段は、エラー発生率に合わせてデータ保護強度を変更可能である。
【0123】
なお、AESパイプライン復号手段601に関する説明は省略する。AES復号手段のエラー検出を担当するAES復号パリティ演算手段は、本実施例に示したAES暗号パリティ演算手段の適用技術、および非特許文献1を参照することで用意に推測できるからである。
【0124】
(3)動作および効果
本発明は、格納するデータをAESで暗号化してストレージに保持するストレージシステムのAES暗号化手段の最終演算結果をチェックするためのデータを出力するAESパリティ演算手段である。AESパリティ演算手段は、RotWordパリティ演算手段と、SubWordパリティ演算手段と、AddRoundKeyパリティ演算手段と、SubBytesパリティ演算手段と、ShiftRowsパリティ演算手段と、MixColumnsパリティ演算手段とを備える。AESパリティ演算手段は、AES暗号化に使用する暗号鍵から生成されたパリティ(暗号鍵パリティ)と、AES暗号化手段に入力されるデータから生成されたパリティ(データパリティ)と、AES暗号化手段から出力されるAES途中演算結果を入力し、AES暗号化手段から出力される最終演算結果から生成されるパリティと同等の値を出力する。
【0125】
RotWordパリティ演算手段は、暗号鍵パリティを入力し、AES暗号化手段において暗号鍵を32ビット単位で区切り、その32ビットを8ビット単位でローテートする演算であるRotWord演算手段の出力データから生成されるパリティと等価な値を出力する。
【0126】
SubWordパリティ演算手段は、RotWordパリティ演算手段から出力されるデータと、AES暗号化手段においてRotWord演算手段から出力されるデータとを入力し、AES暗号化手段において8ビット単位でS−boxによる非線形変換を行うSubWord演算手段の出力データから生成されるパリティと等価な値を出力する。
【0127】
このとき、SubWordパリティ演算手段は、入力されるAES暗号化手段においてRotWord演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるRotWordパリティ演算手段から出力されるデータとを比較する。
【0128】
AddRoundKeyパリティ演算手段は、暗号鍵パリティと、データパリティとを入力し、AES暗号化手段において暗号鍵と、データとを入力し、両者をXOR演算するAddRoundKey演算手段の出力データから生成されるパリティと等価な値を出力する。
【0129】
SubBytesパリティ演算手段は、AddRoundKeyパリティ演算手段から出力されるデータと、AddRoundKey演算手段から出力されるデータとを入力し、AES暗号化手段においてAddRoundkey演算手段から出力されるデータを入力し、8ビット単位でS−boxによる非線形変換を行うSubBytes演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【0130】
このとき、SubBytesパリティ演算手段は、入力されるAddRoundKey演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるAddRoundKeyパリティ演算手段から出力されるデータとを比較する。
【0131】
ShiftRowsパリティ演算手段は、SubBytesパリティ演算手段から出力されるデータを入力し、AES暗号化手段において8ビット単位でローテート演算するShiftRows演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【0132】
MixColumnsパリティ演算手段は、ShiftRowsパリティ演算手段から出力されるデータと、AES暗号化手段においてShiftRows演算手段から出力されるデータとを入力し、AES暗号化手段においてShiftRows演算手段から出力されるデータを入力し、32ビット単位でデータをGF(2^8)上で乗算するMixColumns演算手段から出力されるデータから生成されるパリティと等価な値を出力する。
【0133】
このとき、MixColumnsパリティ演算手段は、入力されるAES暗号化手段においてShiftRows演算手段から出力されるデータからパリティを生成し、前述の生成されたパリティと、別途入力されるAES暗号化手段においてShiftRows演算手段から出力されるデータとを比較する。
【0134】
従って、AES暗号化手段から出力される最終演算結果から生成されるパリティと、AESパリティ演算手段から出力される最終演算結果と比較することで、格納するデータをAESで暗号化した際の最終演算結果のエラーを検出することができ、この結果、格納するデータを保護することができる。
【0135】
また、8ビット単位で演算されたパリティでデータを保護する場合、二重化されたAES暗号化手段を持つストレージシステム、およびコンピュータシステムと比較し、約60%の回路規模にとどまる。また、データ保護強度は、パリティを取るデータ単位で異なり、8ビット単位で演算されたパリティでデータを保護する場合、1/3/5/7ビットのビット数だけのソフトエラー発生を検出可能である。すなわち、多重化によるデータ保護方法に比べ回路規模が小さくすることができ、かつ、AES回路全体にわたりパリティレベルでソフトエラーを検知することができる。
【0136】
なお、本実施例においては、鍵長128ビットの暗号鍵を使用してストレージに格納するデータをAESで暗号化(復号化)した場合について述べたが、本発明はこれに限らず、例えば、DES(Data Encryption Standard)やIDEA(International Data Encryption Algorithm)等の秘密鍵暗号方式、RSA(Rivest Shamir Adleman)等の公開鍵暗号方式その他の演算におけるエラー検出に広く適用することができる。
【0137】
念のため、この場合におけるエラー検出・訂正符号演算手段について概要を説明する。エラー検出・訂正符号演算手段は、エラー検出・訂正符号結合性成立演算手段と、エラー検出・訂正符号結合性非成立演算手段とを具備する。
【0138】
エラー検出・訂正符号結合性成立演算手段は、エラー検出・訂正符号を求める演算と結合法則が成り立つ演算やその組合せから構成される。エラー検出・訂正符号結合性成立演算手段は、エラー検出・訂正符号結合性成立演算手段への入力データから生成されるエラー検出・訂正符号を入力し、エラー検出・訂正符号結合性成立演算手段の出力データから生成されるエラー検出・訂正符号と等価な値を出力する1入力1出力エラー検出・訂正符号演算手段を備える。
【0139】
エラー検出・訂正符号結合性非成立演算手段は、エラー検出・訂正符号を求める演算と結合法則が成立しない演算やその組合せから構成される。エラー検出・訂正符号結合性非成立演算手段は、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータと、エラー検出・訂正符号結合性非成立演算手段への入力データから生成されるエラー検出・訂正符号とを入力し、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータからエラー検出・訂正符号を生成するエラー検出・訂正符号生成手段と、エラー検出・訂正符号生成手段の出力データと、エラー検出・訂正符号結合性非成立演算手段への入力データから生成されるエラー検出・訂正符号とを比較し、エラーを検出・訂正するエラー検出・訂正符号チェック手段と、エラー検出・訂正符号結合性非成立演算手段への入力データと等価なデータから、直接に、前記エラー検出・訂正符号結合性非成立演算手段の出力データから生成されるエラー検出・訂正符号と等価な値に変換する2入力1出力エラー検出・訂正符号演算手段とを備える。
【0140】
そして、エラー検出・訂正符号演算手段は、1入力1出力エラー検出・訂正符号演算手段に対しては、1入力1出力エラー検出・訂正符号演算手段の前段にある演算手段の出力データを入力し、2入力1出力エラー検出・訂正符号演算手段に対しては、1入力1出力エラー検出・訂正符号演算手段の途中演算結果と、2入力1出力エラー検出・訂正符号演算手段の前段にある演算手段の出力データとを入力することで、1入力1出力エラー検出・訂正符号演算手段の出力データから生成されるエラー検出・訂正符号と等価な値を出力する。
【産業上の利用可能性】
【0141】
本発明は、ソフトエラーからデータを保護しなければならない高信頼システムで効果を発揮する。このシステムの例として、ディスクアレイシステムにおけるデータ暗号化システム、動画コンテンツ等をエンコード/デコードするサーバが挙げられる。
【図面の簡単な説明】
【0142】
【図1】本発明の1実施形態を示すブロック図である。
【図2】暗号処理部、暗号パリティ処理部の詳細を説明するブロック図である。
【図3】RotWordパリティ演算部の詳細を説明するブロック図である。
【図4】SubWordパリティ演算部の詳細を説明するブロック図である。
【図5】SubWordパリティ変換部で使用するテーブルを説明するブロック図である。
【図6】KeyExpansionパリティ演算部の演算部の詳細を説明するブロック図である。
【図7】AddRoundKeyパリティ演算部の詳細を説明するブロック図である。
【図8】SubBytesパリティ演算部の詳細を説明するブロック図である。
【図9】ShiftRowsパリティ演算部の詳細を説明するブロック図である。
【図10】MixColumnsパリティ演算部の詳細を説明するブロック図である。
【図11】MixColumnsパリティ変換部の詳細を説明するブロック図である。
【図12】本発明の1実施形態を示すブロック図である。
【符号の説明】
【0143】
100……ホスト装置、101……ストレージシステム、110……インタフェース、111……ストレージ制御回路、112……ディスクアレイ、120……鍵バッファ、121……書き込み制御部、122……読み込み制御部、123……エラー検知部、124……暗号部、125……復号部、130……AES暗号部、131……パリティ生成部、132……パリティ生成部、133……AES暗号パリティ演算部、134……パリティ生成部、135……パリティチェック部、140……AES復号部、141……パリティ生成部、142……パリティ生成部、143……AES復号パリティ演算部、144……パリティ生成部、145……パリティチェック部、150……ディスクドライブ、151……ディスクドライブ、152……ディスクドライブ、200……セレクタ、201……KeyExpansion演算部、202……AddRoundKey演算部、203……セレクタ、204……SubBytes演算部、205……ShiftRows演算部、206……MixColumns演算部、207……AddRoundKey演算部、208……SubBytes演算部、209……ShiftRows演算部、210……AddRoundKey演算部、220……セレクタ、221……KeyExpansionパリティ演算部、222……AddRoundKeyパリティ演算部、223……セレクタ、224……SubBytesパリティ演算部、225……ShiftRowsパリティ演算部、226……MixColumnsパリティ演算部、227……AddRoundKeyパリティ演算部、228……SubBytesパリティ演算部、229……ShiftRowsパリティ演算部、230……AddRoundKeyパリティ演算部、300……RotWord演算部、301……SubWord演算部、302……KeyExpansion演算部内演算部、310……RotWordパリティ演算部、311……SubWordパリティ演算部、312……KeyExpansion演算部内パリティ演算部、400……パリティ生成部、401……SubWordパリティ変換部、402……パリティチェック部、410……パリティ生成部、411……SubBytesパリティ変換部、412……パリティチェック部、420……パリティ生成部、421……MixColumnsパリティ変換部、422……パリティチェック部、500……S−boxパリティ変換テーブル、600……パイプライン暗号部、601……パイプライン復号部、700……ラウンド0鍵拡張部、701……ラウンド1鍵拡張部、702……ラウンド8鍵拡張部、703……ラウンド9鍵拡張部、704……ラウンド0暗号部、705……ラウンド1暗号部、706……ラウンド8暗号部、707……ラウンド9暗号部、708……AddRoundKey演算部、709……ラウンド0鍵拡張パリティ演算部、710……ラウンド1鍵拡張パリティ演算部、711……ラウンド8鍵拡張パリティ演算部、712……ラウンド9鍵拡張パリティ演算部、713……ラウンド0暗号パリティ演算部、714……ラウンド1暗号パリティ演算部、715……ラウンド8暗号パリティ演算部、716……ラウンド9暗号パリティ演算部、717……AddRoundKeyパリティ演算部
【特許請求の範囲】
【請求項1】
平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、
AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部
を備えることを特徴とする演算装置。
【請求項2】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部のAES演算における拡張鍵からXOR演算により生成されるパリティデータを、下位1/4の領域を4分割したデータ単位にローテート演算し、前記AES暗号化部におけるRotWord演算後の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算部と、
前記AES暗号化部におけるSubWord演算後の出力データから生成されるパリティデータと等価な値を出力するSubWordパリティ演算部と
を備え、
前記SubWordパリティ演算部は、
前記AES暗号化部におけるRotWord演算後の出力データをXOR演算し、パリティデータを生成するSubWordパリティ生成部と、
前記SubWordパリティ生成部により生成されるパリティデータと、前記RotWordパリティ演算部からの出力データとを比較するSubWordパリティチェック部と
を備えることを特徴とする請求項1に記載の演算装置。
【請求項3】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部におけるSubWord演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記AES暗号化部におけるAddRoundKey演算後の出力データに基づいて生成されるデータとをXOR演算し、前記AES暗号化部におけるAddRoundKey演算後の出力データから生成されるパリティデータと等価な値を出力するAddRoundKeyパリティ演算部と、
前記AES暗号化部におけるSubBytes演算後の出力データから生成されるパリティデータと等価な値を出力するSubBytesパリティ演算部と
を備え、
前記SubBytesパリティ演算部は、
前記AES暗号化部におけるAddRoundKey演算後の出力データをXOR演算し、パリティデータを生成するSubBytesパリティ生成部と、
前記SubBytesパリティ生成部により生成されるパリティデータと、前記AddRoundKeyパリティ演算部からの出力データとを比較するSubBytesパリティチェック部と
を備えることを特徴とする請求項2に記載の演算装置。
【請求項4】
前記SubBytesパリティ演算部からの出力データを16分割したデータ単位にローテート演算し、前記AES暗号化部におけるShiftRows演算後の出力データから生成されるパリティデータと等価な値を出力するShiftRowsパリティ演算部と、
前記AES暗号化部におけるMixColumns演算後の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算部と
を備え、
前記MixColumnsパリティ演算部は、
前記AES暗号化部におけるShiftRows演算後の出力データをXOR演算し、パリティデータを生成するMixColumnsパリティ生成部と、
前記MixColumnsパリティ生成部により生成されるパリティデータと、前記ShiftRowsパリティ演算部からの出力データとを比較するMixColumnsパリティチェック部と
を備えることを特徴とする請求項3に記載の演算装置。
【請求項5】
平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置の演算方法であって、
演算部が、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算ステップ
を備えることを特徴とする演算方法。
【請求項6】
前記演算ステップでは、
RotWordパリティ演算部が、前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部のAES演算における拡張鍵からXOR演算により生成されるパリティデータを、下位1/4の領域を4分割したデータ単位にローテート演算し、前記AES暗号化部におけるRotWord演算後の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算ステップと、
SubWordパリティ演算部が、前記AES暗号化部におけるSubWord演算後の出力データから生成されるパリティデータと等価な値を出力するSubWordパリティ演算ステップと
を備え、
前記SubWordパリティ演算ステップでは、
SubWordパリティ生成部が、前記AES暗号化部におけるRotWord演算後の出力データをXOR演算し、パリティデータを生成するSubWordパリティ生成ステップと、
SubWordパリティチェック部が、前記SubWordパリティ生成部により生成されるパリティデータと、前記RotWordパリティ演算部からの出力データとを比較するSubWordパリティチェックステップと
を備えることを特徴とする請求項5に記載の演算方法。
【請求項7】
前記演算ステップでは、
AddRoundKeyパリティ演算部が、前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部におけるSubWord演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記AES暗号化部におけるAddRoundKey演算後の出力データに基づいて生成されるデータとをXOR演算し、前記AES暗号化部におけるAddRoundKey演算後の出力データから生成されるパリティデータと等価な値を出力するAddRoundKeyパリティ演算ステップと、
SubBytesパリティ演算部が、前記AES暗号化部におけるSubBytes演算後の出力データから生成されるパリティデータと等価な値を出力するSubBytesパリティ演算ステップと
を備え、
前記SubBytesパリティ演算ステップでは、
SubBytesパリティ生成部が、前記AES暗号化部におけるAddRoundKey演算後の出力データをXOR演算し、パリティデータを生成するSubBytesパリティ生成ステップと、
SubBytesパリティチェック部が、前記SubBytesパリティ生成部により生成されるパリティデータと、前記AddRoundKeyパリティ演算部からの出力データとを比較するSubBytesパリティチェックステップと
を備えることを特徴とする請求項6に記載の演算方法。
【請求項8】
ShiftRowsパリティ演算部が、前記SubBytesパリティ演算部からの出力データを16分割したデータ単位にローテート演算し、前記AES暗号化部におけるShiftRows演算後の出力データから生成されるパリティデータと等価な値を出力するShiftRowsパリティ演算ステップと、
MixColumnsパリティ演算部が、前記AES暗号化部におけるMixColumns演算後の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算ステップと
を備え、
前記MixColumnsパリティ演算ステップでは、
MixColumnsパリティ生成部が、前記AES暗号化部におけるShiftRows演算後の出力データをXOR演算し、パリティデータを生成するMixColumnsパリティ生成ステップと、
MixColumnsパリティチェック部が、前記MixColumnsパリティ生成部により生成されるパリティデータと、前記ShiftRowsパリティ演算部からの出力データとを比較するMixColumnsパリティチェックステップと
を備えることを特徴とする請求項7に記載の演算方法。
【請求項9】
ホスト装置から送信されるデータを格納するコンピュータシステムにおいて、
前記ホスト装置から送信されるデータを平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部と、
前記AES暗号化部の最終演算結果をチェックするためのデータを出力する演算部と、
前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと、前記演算部の最終演算結果とを比較するパリティチェック部と
を備え、
前記演算部は、
AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する
ことを特徴とするコンピュータシステム。
【請求項10】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部のAES演算における拡張鍵からXOR演算により生成されるパリティデータを、下位1/4の領域を4分割したデータ単位にローテート演算し、前記AES暗号化部におけるRotWord演算後の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算部と、
前記AES暗号化部におけるSubWord演算後の出力データから生成されるパリティデータと等価な値を出力するSubWordパリティ演算部と
を備え、
前記SubWordパリティ演算部は、
前記AES暗号化部におけるRotWord演算後の出力データをXOR演算し、パリティデータを生成するSubWordパリティ生成部と、
前記SubWordパリティ生成部により生成されるパリティデータと、前記RotWordパリティ演算部からの出力データとを比較するSubWordパリティチェック部と、
前記AES暗号化部におけるRotWord演算後の出力データの下位1/4の領域を、S−box転置により4分割したデータ単位に直接変換するSubWordパリティS−box転置手段と
を備えることを特徴とする請求項9に記載のコンピュータシステム。
【請求項11】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部におけるSubWord演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記AES暗号化部におけるAddRoundKey演算後の出力データに基づいて生成されるデータとをXOR演算し、前記AES暗号化部におけるAddRoundKey演算後の出力データから生成されるパリティデータと等価な値を出力するAddRoundKeyパリティ演算部と、
前記AES暗号化部におけるSubBytes演算後の出力データから生成されるパリティデータと等価な値を出力するSubBytesパリティ演算部と
を備え、
前記SubBytesパリティ演算部は、
前記AES暗号化部におけるAddRoundKey演算後の出力データをXOR演算し、パリティデータを生成するSubBytesパリティ生成部と、
前記SubBytesパリティ生成部により生成されるパリティデータと、前記AddRoundKeyパリティ演算部からの出力データとを比較するSubBytesパリティチェック部と
前記AES暗号化部におけるAddRoundKey演算後の出力データを、S−box転置により16分割したデータ単位に直接変換するSubBytesパリティS−box転置手段と
を備えることを特徴とする請求項10に記載のコンピュータシステム。
【請求項12】
前記SubBytesパリティ演算部からの出力データを16分割したデータ単位にローテート演算し、前記AES暗号化部におけるShiftRows演算後の出力データから生成されるパリティデータと等価な値を出力するShiftRowsパリティ演算部と、
前記AES暗号化部におけるMixColumns演算後の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算部と
を備え、
前記MixColumnsパリティ演算部は、
前記AES暗号化部におけるShiftRows演算後の出力データをXOR演算し、パリティデータを生成するMixColumnsパリティ生成部と、
前記MixColumnsパリティ生成部により生成されるパリティデータと、前記ShiftRowsパリティ演算部からの出力データとを比較するMixColumnsパリティチェック部と、
前記AES暗号化部におけるShiftRows演算後の出力データを4分割したデータをさらに4分割したデータの各々最上位のデータと、ShiftRowsパリティ演算手段からの出力データとをXOR演算するMixColumnsパリティXOR演算部と
を備えることを特徴とする請求項11に記載のコンピュータシステム。
【請求項13】
暗号文ブロックから平文ブロックへAES演算により復号化するAES復号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、
AES復号化の際に鍵として使用する復号鍵からXOR演算により生成されるパリティデータと、暗号文ブロックからXOR演算により生成されるパリティデータと、前記AES復号化部から出力されるAES演算途中結果とを演算し、前記AES復号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部
を備えることを特徴とする演算装置。
【請求項1】
平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、
AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部
を備えることを特徴とする演算装置。
【請求項2】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部のAES演算における拡張鍵からXOR演算により生成されるパリティデータを、下位1/4の領域を4分割したデータ単位にローテート演算し、前記AES暗号化部におけるRotWord演算後の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算部と、
前記AES暗号化部におけるSubWord演算後の出力データから生成されるパリティデータと等価な値を出力するSubWordパリティ演算部と
を備え、
前記SubWordパリティ演算部は、
前記AES暗号化部におけるRotWord演算後の出力データをXOR演算し、パリティデータを生成するSubWordパリティ生成部と、
前記SubWordパリティ生成部により生成されるパリティデータと、前記RotWordパリティ演算部からの出力データとを比較するSubWordパリティチェック部と
を備えることを特徴とする請求項1に記載の演算装置。
【請求項3】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部におけるSubWord演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記AES暗号化部におけるAddRoundKey演算後の出力データに基づいて生成されるデータとをXOR演算し、前記AES暗号化部におけるAddRoundKey演算後の出力データから生成されるパリティデータと等価な値を出力するAddRoundKeyパリティ演算部と、
前記AES暗号化部におけるSubBytes演算後の出力データから生成されるパリティデータと等価な値を出力するSubBytesパリティ演算部と
を備え、
前記SubBytesパリティ演算部は、
前記AES暗号化部におけるAddRoundKey演算後の出力データをXOR演算し、パリティデータを生成するSubBytesパリティ生成部と、
前記SubBytesパリティ生成部により生成されるパリティデータと、前記AddRoundKeyパリティ演算部からの出力データとを比較するSubBytesパリティチェック部と
を備えることを特徴とする請求項2に記載の演算装置。
【請求項4】
前記SubBytesパリティ演算部からの出力データを16分割したデータ単位にローテート演算し、前記AES暗号化部におけるShiftRows演算後の出力データから生成されるパリティデータと等価な値を出力するShiftRowsパリティ演算部と、
前記AES暗号化部におけるMixColumns演算後の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算部と
を備え、
前記MixColumnsパリティ演算部は、
前記AES暗号化部におけるShiftRows演算後の出力データをXOR演算し、パリティデータを生成するMixColumnsパリティ生成部と、
前記MixColumnsパリティ生成部により生成されるパリティデータと、前記ShiftRowsパリティ演算部からの出力データとを比較するMixColumnsパリティチェック部と
を備えることを特徴とする請求項3に記載の演算装置。
【請求項5】
平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部の最終演算結果をチェックするためのデータを出力する演算装置の演算方法であって、
演算部が、AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算ステップ
を備えることを特徴とする演算方法。
【請求項6】
前記演算ステップでは、
RotWordパリティ演算部が、前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部のAES演算における拡張鍵からXOR演算により生成されるパリティデータを、下位1/4の領域を4分割したデータ単位にローテート演算し、前記AES暗号化部におけるRotWord演算後の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算ステップと、
SubWordパリティ演算部が、前記AES暗号化部におけるSubWord演算後の出力データから生成されるパリティデータと等価な値を出力するSubWordパリティ演算ステップと
を備え、
前記SubWordパリティ演算ステップでは、
SubWordパリティ生成部が、前記AES暗号化部におけるRotWord演算後の出力データをXOR演算し、パリティデータを生成するSubWordパリティ生成ステップと、
SubWordパリティチェック部が、前記SubWordパリティ生成部により生成されるパリティデータと、前記RotWordパリティ演算部からの出力データとを比較するSubWordパリティチェックステップと
を備えることを特徴とする請求項5に記載の演算方法。
【請求項7】
前記演算ステップでは、
AddRoundKeyパリティ演算部が、前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部におけるSubWord演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記AES暗号化部におけるAddRoundKey演算後の出力データに基づいて生成されるデータとをXOR演算し、前記AES暗号化部におけるAddRoundKey演算後の出力データから生成されるパリティデータと等価な値を出力するAddRoundKeyパリティ演算ステップと、
SubBytesパリティ演算部が、前記AES暗号化部におけるSubBytes演算後の出力データから生成されるパリティデータと等価な値を出力するSubBytesパリティ演算ステップと
を備え、
前記SubBytesパリティ演算ステップでは、
SubBytesパリティ生成部が、前記AES暗号化部におけるAddRoundKey演算後の出力データをXOR演算し、パリティデータを生成するSubBytesパリティ生成ステップと、
SubBytesパリティチェック部が、前記SubBytesパリティ生成部により生成されるパリティデータと、前記AddRoundKeyパリティ演算部からの出力データとを比較するSubBytesパリティチェックステップと
を備えることを特徴とする請求項6に記載の演算方法。
【請求項8】
ShiftRowsパリティ演算部が、前記SubBytesパリティ演算部からの出力データを16分割したデータ単位にローテート演算し、前記AES暗号化部におけるShiftRows演算後の出力データから生成されるパリティデータと等価な値を出力するShiftRowsパリティ演算ステップと、
MixColumnsパリティ演算部が、前記AES暗号化部におけるMixColumns演算後の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算ステップと
を備え、
前記MixColumnsパリティ演算ステップでは、
MixColumnsパリティ生成部が、前記AES暗号化部におけるShiftRows演算後の出力データをXOR演算し、パリティデータを生成するMixColumnsパリティ生成ステップと、
MixColumnsパリティチェック部が、前記MixColumnsパリティ生成部により生成されるパリティデータと、前記ShiftRowsパリティ演算部からの出力データとを比較するMixColumnsパリティチェックステップと
を備えることを特徴とする請求項7に記載の演算方法。
【請求項9】
ホスト装置から送信されるデータを格納するコンピュータシステムにおいて、
前記ホスト装置から送信されるデータを平文ブロックから暗号文ブロックへAES演算により暗号化するAES暗号化部と、
前記AES暗号化部の最終演算結果をチェックするためのデータを出力する演算部と、
前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと、前記演算部の最終演算結果とを比較するパリティチェック部と
を備え、
前記演算部は、
AES暗号化の際に鍵として使用する暗号鍵からXOR演算により生成されるパリティデータと、平文ブロックからXOR演算により生成されるパリティデータと、前記AES暗号化部から出力されるAES演算途中結果とを演算し、前記AES暗号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する
ことを特徴とするコンピュータシステム。
【請求項10】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部のAES演算における拡張鍵からXOR演算により生成されるパリティデータを、下位1/4の領域を4分割したデータ単位にローテート演算し、前記AES暗号化部におけるRotWord演算後の出力データから生成されるパリティデータと等価な値を出力するRotWordパリティ演算部と、
前記AES暗号化部におけるSubWord演算後の出力データから生成されるパリティデータと等価な値を出力するSubWordパリティ演算部と
を備え、
前記SubWordパリティ演算部は、
前記AES暗号化部におけるRotWord演算後の出力データをXOR演算し、パリティデータを生成するSubWordパリティ生成部と、
前記SubWordパリティ生成部により生成されるパリティデータと、前記RotWordパリティ演算部からの出力データとを比較するSubWordパリティチェック部と、
前記AES暗号化部におけるRotWord演算後の出力データの下位1/4の領域を、S−box転置により4分割したデータ単位に直接変換するSubWordパリティS−box転置手段と
を備えることを特徴とする請求項9に記載のコンピュータシステム。
【請求項11】
前記演算部は、
前記暗号鍵からXOR演算により生成されるパリティデータ、もしくは前記AES暗号化部におけるSubWord演算後の出力データに基づいて生成されるデータと、平文ブロックから生成されるパリティデータ、もしくは前記AES暗号化部におけるAddRoundKey演算後の出力データに基づいて生成されるデータとをXOR演算し、前記AES暗号化部におけるAddRoundKey演算後の出力データから生成されるパリティデータと等価な値を出力するAddRoundKeyパリティ演算部と、
前記AES暗号化部におけるSubBytes演算後の出力データから生成されるパリティデータと等価な値を出力するSubBytesパリティ演算部と
を備え、
前記SubBytesパリティ演算部は、
前記AES暗号化部におけるAddRoundKey演算後の出力データをXOR演算し、パリティデータを生成するSubBytesパリティ生成部と、
前記SubBytesパリティ生成部により生成されるパリティデータと、前記AddRoundKeyパリティ演算部からの出力データとを比較するSubBytesパリティチェック部と
前記AES暗号化部におけるAddRoundKey演算後の出力データを、S−box転置により16分割したデータ単位に直接変換するSubBytesパリティS−box転置手段と
を備えることを特徴とする請求項10に記載のコンピュータシステム。
【請求項12】
前記SubBytesパリティ演算部からの出力データを16分割したデータ単位にローテート演算し、前記AES暗号化部におけるShiftRows演算後の出力データから生成されるパリティデータと等価な値を出力するShiftRowsパリティ演算部と、
前記AES暗号化部におけるMixColumns演算後の出力データから生成されるパリティと等価な値を出力するMixColumnsパリティ演算部と
を備え、
前記MixColumnsパリティ演算部は、
前記AES暗号化部におけるShiftRows演算後の出力データをXOR演算し、パリティデータを生成するMixColumnsパリティ生成部と、
前記MixColumnsパリティ生成部により生成されるパリティデータと、前記ShiftRowsパリティ演算部からの出力データとを比較するMixColumnsパリティチェック部と、
前記AES暗号化部におけるShiftRows演算後の出力データを4分割したデータをさらに4分割したデータの各々最上位のデータと、ShiftRowsパリティ演算手段からの出力データとをXOR演算するMixColumnsパリティXOR演算部と
を備えることを特徴とする請求項11に記載のコンピュータシステム。
【請求項13】
暗号文ブロックから平文ブロックへAES演算により復号化するAES復号化部の最終演算結果をチェックするためのデータを出力する演算装置であって、
AES復号化の際に鍵として使用する復号鍵からXOR演算により生成されるパリティデータと、暗号文ブロックからXOR演算により生成されるパリティデータと、前記AES復号化部から出力されるAES演算途中結果とを演算し、前記AES復号化部の最終演算結果からXOR演算により生成されるパリティデータと等価な値を出力する演算部
を備えることを特徴とする演算装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2009−115857(P2009−115857A)
【公開日】平成21年5月28日(2009.5.28)
【国際特許分類】
【出願番号】特願2007−285520(P2007−285520)
【出願日】平成19年11月1日(2007.11.1)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成21年5月28日(2009.5.28)
【国際特許分類】
【出願日】平成19年11月1日(2007.11.1)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]