(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-05
(45)【発行日】2024-11-13
(54)【発明の名称】計算機及びデータ処理方法
(51)【国際特許分類】
G06F 21/60 20130101AFI20241106BHJP
G06F 11/10 20060101ALI20241106BHJP
G11B 20/10 20060101ALI20241106BHJP
G11B 20/18 20060101ALI20241106BHJP
【FI】
G06F21/60 320
G06F11/10 604
G11B20/10 301Z
G11B20/10 H
G11B20/18 512C
G11B20/18 572B
G11B20/18 572F
G11B20/18 532B
(21)【出願番号】P 2022141346
(22)【出願日】2022-09-06
【審査請求日】2023-05-22
(73)【特許権者】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】水島 永雅
(72)【発明者】
【氏名】吉井 義裕
(72)【発明者】
【氏名】岡田 尚也
【審査官】辻 勇貴
(56)【参考文献】
【文献】特開2021-132342(JP,A)
【文献】米国特許出願公開第2021/0150074(US,A1)
【文献】岡田 尚也,"ストレージシステム適用に向けたプロセッサPCIe性能の評価",FIT2016 第15回情報科学技術フォーラム 講演論文集 第1分冊,2016年
【文献】Keith Holt,"End-to-End Data Protection Justification",T10/03-224r0,T10 Technical Committee,2003年06月01日,[2024年5月17日検索],インターネット <URL:https://www.t10.org/ftp/t10/document.03/03-224r0.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/60
G06F 11/10
G11B 20/10
G11B 20/18
(57)【特許請求の範囲】
【請求項1】
複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機であって、
プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを備え、
前記プロセッサは、
複数のレジスタを有し、
前記ユーザデータの書き込みリクエストを受信し、
前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納し、
前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行し、
2以上の第1データ保全性フィールドを第1レジスタに格納し、
前記第1レジスタに格納された前記2以上の前記第1データ保全性フィールドの各々に、前記暗号化データブロックの格納位置を示す第1アドレスを設定する設定処理を並列に実行し、
前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々に、
前記第1アドレスが設定された第1データ保全性フィールドを付加し、
前記暗号化ユーザデータを前記記憶媒体に格納
する、
ことを特徴とする計算機。
【請求項2】
請求項1に記載の計算機であって、
前記第1データ保全性フィールドには、前記データブロックの書き込みの世代を表す第1世代番号を設定することができ、
前記プロセッサは、前記第1レジスタに格納された前記2以上の前記第1データ保全性フィールドの各々に、前記暗号化データブロックの前記第1世代番号を設定する設定処理を並列に実行することを特徴とする計算機。
【請求項3】
請求項1に記載の計算機であって、
前記第1データ保全性フィールドは第1誤り符号を含むことを特徴とする計算機。
【請求項4】
請求項2に記載の計算機であって、
前記プロセッサは、
前記暗号化ユーザデータの読み出しリクエストを受信し、
前記記憶媒体から、前記読み出しリクエストによって指定された前記暗号化ユーザデータを読み出し、前記メモリに格納し、
前記複数のレジスタを用いて、前記暗号化ユーザデータを復号する復号処理を実行し、
第2レジスタに2以上の第2データ保全性フィールドを格納し、
前記第2レジスタに格納された前記2以上の前記第2データ保全性フィールドの各々に、前記暗号化データブロックの格納位置を示す第2アドレスを設定する設定処理を並列に実行し、
復号された前記ユーザデータに含まれる前記複数のデータブロックの各々に、前記第2アドレスが設定された第2データ保全性フィールドを付加し、前記メモリに格納する、
ことを特徴とする計算機。
【請求項5】
請求項4に記載の計算機であって、
前記第2データ保全性フィールドには、前記データブロックの書き込みの世代を表す第2世代番号を設定することができ、
前記プロセッサは、前記第2レジスタに格納された前記2以上の前記第2データ保全性フィールドの各々に、前記データブロックの前記第2世代番号を設定する設定処理を並列に実行することを特徴とする計算機。
【請求項6】
請求項5に記載の計算機であって、
前記プロセッサは、
SIMD命令を用いて、前記第1レジスタに格納された前記2以上の前記第1データ保全性フィールドの各々に前記第1アドレスを設定する設定処理を並列で実行し、
前記SIMD命令を用いて、前記第1レジスタに格納された前記2以上の前記第1データ保全性フィールドの各々に前記第1世代番号を設定する設定処理を並列で実行し、
前記SIMD命令を用いて、前記第2レジスタに格納された前記2以上の前記第2データ保全性フィールドの各々に前記第2アドレスを設定する設定処理を並列で実行し、
前記SIMD命令を用いて、前記第2レジスタに格納された前記2以上の前記第2データ保全性フィールドの各々に前記第2世代番号を設定する設定処理を並列で実行することを特徴とする計算機。
【請求項7】
請求項4に記載の計算機であって、
前記第2データ保全性フィールドは第1誤り符号を含むことを特徴とする計算機。
【請求項8】
複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機であって、
プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを備え、
前記プロセッサは、
複数のレジスタを有し、
前記ユーザデータの書き込みリクエストを受信し、
前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納し、
前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行し、
前記複数のレジスタを用いて、前記ユーザデータの破損を検出するための第1検査処理を実行し、
前記暗号化ユーザデータを前記記憶媒体に格納し、
前記ユーザデータに含まれる前記複数のデータブロックの各々には、第1誤り符号を含む第1データ保全性フィールドが付加され、
前記暗号化処理では、
所定の数の前記データブロックから、前記データブロックの一部である部分データを読み出し、第1レジスタに格納する第1処理と、
前記第1レジスタに格納される前記部分データを暗号化した暗号化部分データを第2レジスタに格納する第2処理と、
前記第1レジスタに格納される前記部分データを用いて、前記第1誤り符号を生成するための第1演算を実行し、前記第1演算の結果を第3レジスタに格納する第3処理と、
が繰り返し実行され、
前記第1検査処理は、
第4レジスタに、所定の数の前記データブロックの前記第1データ保全性フィールドを読み出す処理と、
前記第3レジスタに格納される前記第1誤り符号と、前記第4レジスタに格納される前記第1データ保全性フィールドに含まれる前記第1誤り符号とを比較することによって、前記メモリから読み出された前記ユーザデータが破損しているか否かを判定する処理と、
を含むことを特徴とする計算機。
【請求項9】
請求項8に記載の計算機であって、
前記第1データ保全性フィールドは、前記データブロックの格納位置を示す第1アドレスを含み、
前記
第1検査処理は、
第5レジスタに、所定の数の前記データブロックの前記第1アドレスを読み出す処理と、
前記第5レジスタに格納される前記第1アドレスと、前記第4レジスタに格納される前記第1データ保全性フィールドに含まれる前記第1アドレスとを比較することによって、前記メモリから読み出された前記ユーザデータが破損しているか否かを判定する処理と、
を含むことを特徴とする計算機。
【請求項10】
請求項9に記載の計算機であって、
前記プロセッサは、
前記暗号化ユーザデータの読み出しリクエストを受信し、
前記記憶媒体から、前記読み出しリクエストによって指定された前記暗号化ユーザデータを読み出し、前記メモリに格納し、
前記複数のレジスタを用いて、前記暗号化ユーザデータを復号する復号処理を実行し、
前記複数のレジスタを用いて、前記暗号化ユーザデータの破損を検出するための第2検査処理を実行し、
前記ユーザデータを前記メモリに格納し、
前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々には、第2誤り符号を含む第2データ保全性フィールドが付加され、
前記復号処理では、
所定の数の前記暗号化データブロックから、前記暗号化データブロックの一部である部分暗号化データを読み出し、第6レジスタに格納する第8処理と、
前記第6レジスタに格納される前記部分暗号化データを復号した前記部分データを第7レジスタに格納する第9処理と、
前記第6レジスタに格納される前記暗号化部分データを用いて、前記第2誤り符号を生成するための第2演算を実行し、前記第2演算の結果を第8レジスタに格納する第10処理と、
が繰り返し実行され、
前記第2検査処理は、
第9レジスタに、所定の数の前記暗号化データブロックの前記第2データ保全性フィールドを読み出す処理と、
前記第8レジスタに格納される前記第2誤り符号と、前記第9レジスタに格納される前記第1データ保全性フィールドに含まれる前記第2誤り符号とを比較することによって、前記記憶媒体から読み出された前記暗号化ユーザデータが破損しているか否かを判定する処理と、
を含むことを特徴とする計算機。
【請求項11】
請求項10に記載の計算機であって、
前記第2データ保全性フィールドは、前記暗号化データブロックの格納位置を示す第2アドレスを含み、
前記第2検査処理は、
第10レジスタに、所定の数の前記暗号化
データブロックに対応する前記第2アドレスを読み出す処理と、
前記第9レジスタに格納される前記第2データ保全性フィールドに含まれる前記第2アドレスと、前記第10レジスタに格納される前記第2アドレスとを比較することによって、前記記憶媒体から読み出された前記暗号化ユーザデータが破損しているか否かを判定する処理と、
を含むことを特徴とする計算機。
【請求項12】
請求項11に記載の計算機であって、
前記第2データ保全性フィールドは、前記データブロックの書き込みの世代を表す第2世代番号を含み、
前記第2検査処理は、
第11レジスタに、所定の数の前記暗号化
データブロックに対応する前記第2世代番号を読み出す処理と、
前記第9レジスタに格納される前記第1データ保全性フィールドに含まれる前記第2世代番号と、前記第11レジスタに格納される前記第2世代番号とを比較することによって、前記記憶媒体から読み出された前記暗号化ユーザデータが破損しているか否かを判定する処理と、
を含むことを特徴とする計算機。
【請求項13】
請求項12に記載の計算機であって、
前記プロセッサは、SIMD命令を用いて、前記複数のデータブロック及び前記複数の暗号化データブロックに対する処理を並列で実行することを特徴とする計算機。
【請求項14】
複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機が実行するデータ処理方法であって、
前記計算機は、プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを有し、
前記プロセッサは、複数のレジスタを有し、
前記データ処理方法は、
前記プロセッサが、前記ユーザデータの書き込みリクエストを受信するステップと、
前記プロセッサが、前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納するステップと、
前記プロセッサが、前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行するステップと、
前記プロセッサが、前記複数のレジスタを用いて、前記ユーザデータの破損を検出するための検査処理を実行するステップと、
前記プロセッサが、前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々に、第1誤り符号を含む第1データ保全性フィールドを付加するステップと、
前記プロセッサが、前記暗号化ユーザデータを前記記憶媒体に格納するステップと、
を含み、
前記暗号化処理では、
所定の数の前記データブロックから、前記データブロックの一部である部分データを読み出し、第1レジスタに格納する第1処理と、
前記第1レジスタに格納される前記部分データを暗号化した暗号化部分データを第2レジスタに格納する第2処理と、
前記第2レジスタに格納される前記暗号化部分データを用いて、前記第1誤り符号を算出するための第1演算を実行し、前記第1演算の結果を第3レジスタに格納する第3処理と、
が繰り返し実行され、
前記検査処理は、
第4レジスタに、所定の数の前記データブロックの前記第1データ保全性フィールドを読み出す処理と、
前記第3レジスタに格納される前記第1誤り符号と、前記第4レジスタに格納される前記第1データ保全性フィールドに含まれる前記第1誤り符号とを比較することによって、前記メモリから読み出された前記ユーザデータが破損しているか否かを判定する処理と、
を含むことを特徴とするデータ処理方法。
【請求項15】
複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機であって、
プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを備え、
前記プロセッサは、
複数のレジスタを有し、
前記ユーザデータの書き込みリクエストを受信し、
前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納し、
前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行し、
前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々に、第1誤り符号を含む第1データ保全性フィールドを付加し、
前記暗号化ユーザデータを前記記憶媒体に格納し、
前記暗号化処理では、
所定の数の前記データブロックから、前記データブロックの一部である部分データを読み出し、第1レジスタに格納する第1処理と、
前記第1レジスタに格納される前記部分データを暗号化した暗号化部分データを第2レジスタに格納する第2処理と、
前記第2レジスタに格納される前記暗号化部分データを用いて、前記第1誤り符号を算出するための第1演算を実行し、前記第1演算の結果を第3レジスタに格納する第3処理と、
が繰り返し実行され、
前記第1データ保全性フィールドには、前記暗号化データブロックの格納位置を示す第1アドレスを設定することができ、
前記プロセッサは、
第4レジスタに、所定の数の前記暗号化データブロックの前記第1誤り符号を読み出し、
前記第4レジスタに格納される前記第1誤り符号に、当該第1誤り符号が付加される前記暗号化データブロックの前記第1アドレスを追加することによって、前記第1データ保全性フィールドを生成し、
前記第1データ保全性フィールドには、前記データブロックの書き込みの世代を表す第1世代番号を設定することができ、
前記プロセッサは、前記第4レジスタに格納される前記第1誤り符号に、当該第1誤り符号が付加される前記暗号化データブロックの前記第1世代番号を追加することによって、前記第1データ保全性フィールドを生成することを特徴とする計算機。
【請求項16】
請求項15に記載の計算機であって、
前記プロセッサは、
前記暗号化ユーザデータの読み出しリクエストを受信し、
前記記憶媒体から、前記読み出しリクエストによって指定された前記暗号化ユーザデータを読み出し、前記メモリに格納し、
前記複数のレジスタを用いて、前記暗号化ユーザデータを復号する復号処理を実行し、
復号された前記ユーザデータに含まれる前記複数のデータブロックの各々に、第2誤り符号を含む第2データ保全性フィールドを付加し、前記メモリに格納し、
前記復号処理では、
所定の数の前記暗号化データブロックから、前記暗号化データブロックの一部である部分暗号化データを読み出し、第5レジスタに格納する第4処理と、
前記第5レジスタに格納される前記部分暗号化データを復号した前記部分データを第6レジスタに格納する第5処理と、
前記第6レジスタに格納される前記部分データを用いて、前記第2誤り符号を算出するための第2演算を実行し、前記第2演算の結果を第7レジスタに格納する第8処理と、
が繰り返し実行されることを特徴とする計算機。
【請求項17】
請求項16に記載の計算機であって、
前記第2データ保全性フィールドには、前記暗号化データブロックの格納位置を示す第2アドレスを設定することができ、
前記プロセッサは、
第8レジスタに、所定の数の前記データブロックの前記第2誤り符号を読み出し、
前記第8レジスタに格納される前記第2誤り符号に、当該第2誤り符号が付加される前記データブロックの前記第2アドレスを追加することによって、前記第2データ保全性フィールドを生成することを特徴とする計算機。
【請求項18】
請求項17に記載の計算機であって、
前記第2データ保全性フィールドには、前記データブロックの書き込みの世代を表す第2世代番号を設定することができ、
前記プロセッサは、前記第8レジスタに格納される前記第2誤り符号に、当該第2誤り符号が付加される前記データブロックの前記第2世代番号を追加することによって、前記第2データ保全性フィールドを生成することを特徴とする計算機。
【請求項19】
請求項18に記載の計算機であって、
前記プロセッサは、SIMD命令を用いて、前記複数のデータブロック及び前記複数の暗号化データブロックに対する処理を並列で実行することを特徴とする計算機。
【請求項20】
複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機が実行するデータ処理方法であって、
前記計算機は、プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを備え、
前記プロセッサは、複数のレジスタを有し、
前記データ処理方法は、
前記プロセッサが、前記ユーザデータの書き込みリクエストを受信するステップと、
前記プロセッサが、前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納するステップと、
前記プロセッサが、前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行するステップと、
前記プロセッサが、2以上の第1データ保全性フィールドを第1レジスタに格納するステップと、
前記プロセッサが、前記第1レジスタに格納された前記2以上の前記第1データ保全性フィールドの各々に、前記暗号化データブロックの格納位置を示す第1アドレスを設定する設定処理を並列に実行するステップと、
前記プロセッサが、前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々に、前記第1アドレスが設定された第1データ保全性フィールドを付加するステップと、
前記プロセッサが、前記暗号化ユーザデータを前記記憶媒体に格納するステップと、
を含むことを特徴とするデータ処理方法。
【請求項21】
複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機が実行するデータ処理方法であって、
プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを有し、
前記プロセッサは、複数のレジスタを有し、
前記データ処理方法は、
前記プロセッサが、前記ユーザデータの書き込みリクエストを受信するステップと、
前記プロセッサが、前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納するステップと、
前記プロセッサが、前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行するステップと、
前記プロセッサが、前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々に、第1誤り符号を含む第1データ保全性フィールドを付加するステップと、
前記プロセッサが、前記暗号化ユーザデータを前記記憶媒体に格納するステップと、
を含み、
前記暗号化処理では、
所定の数の前記データブロックから、前記データブロックの一部である部分データを読み出し、第1レジスタに格納する第1処理と、
前記第1レジスタに格納される前記部分データを暗号化した暗号化部分データを第2レジスタに格納する第2処理と、
前記第2レジスタに格納される前記暗号化部分データを用いて、前記第1誤り符号を算出するための第1演算を実行し、前記第1演算の結果を第3レジスタに格納する第3処理と、
が繰り返し実行され、
前記第1データ保全性フィールドには、前記暗号化データブロックの格納位置を示す第1アドレスを設定することができ、
前記プロセッサは、
第4レジスタに、所定の数の前記暗号化データブロックの前記第1誤り符号を読み出し、
前記第4レジスタに格納される前記第1誤り符号に、当該第1誤り符号が付加される前記暗号化データブロックの前記第1アドレスを追加することによって、前記第1データ保全性フィールドを生成し、
前記第1データ保全性フィールドには、前記データブロックの書き込みの世代を表す第1世代番号を設定することができ、
前記プロセッサは、前記第4レジスタに格納される前記第1誤り符号に、当該第1誤り符号が付加される前記暗号化データブロックの前記第1世代番号を追加することによって、前記第1データ保全性フィールドを生成することを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ユーザデータの暗号化及び復号の技術に関する。
【背景技術】
【0002】
内蔵されている記憶媒体からユーザデータが不正に読み出されないように、ユーザデータを暗号化して保存する機能を有するストレージシステムがある。前述の機能を有するストレージシステムは、ライトコマンドに応じて、外部のホストコンピュータから入力されたユーザデータを暗号化し、暗号化されたユーザデータを記憶媒体に保存する。また、前述の機能を有するストレージシステムは、リードコマンドに応じて、記憶媒体に保存された暗号化されたユーザデータを復号し、ユーザデータを出力する。
【0003】
ストレージシステムがデータの暗号化及び復号を支援するハードウェアを有していない場合、ストレージシステムが備えるCPUが、複数のCPU命令で構成されたプログラムコードにしたがって、ライト処理に伴うユーザデータの暗号化及びリード処理に伴う暗号化ユーザデータの復号を実行する。ストレージシステムのCPUの暗号化及び復号の処理性能が高いほうが、ユーザデータの読み書きのレスポンスが高くなる。
【0004】
暗号化及び復号の処理性能を向上するため、暗号専用命令をサポートしているCPUがある。AES-NIと呼ばれる命令セットは暗号専用命令の一例である。
【0005】
特許文献1は、CPUが暗号専用命令を毎サイクルディスパッチすることによって、異なるデータブロックに対する独立した暗号化/復号を並列的に行い、暗号化/復号のスループットを向上させる技術を開示している(例えば、
図4を参照)。
【0006】
特許文献2は、CPUが、平文データと鍵ストリームの排他的論理和を取って暗号文データを生成するストリーム暗号処理にSIMD命令(1回の命令で複数データに同じ処理を行うことができる命令)を適用し、その性能を倍増させる技術を開示している(TABLE3を参照)。
【0007】
情報処理装置としての信頼性を向上させるために、ホストコンピュータから受信したユーザデータの処理において、ユーザデータを誤って壊していないか、別のユーザデータと取り違えていないかを確認できるように、ユーザデータにDIF(データ保全性フィールド)と呼ばれる管理情報を付加する機能を有するストレージシステムも知られている。前述の機能を有するストレージシステムは、ライト処理及びリード処理において、DIFの生成及び検査等を行う。ストレージシステムがDIFの生成及び検査を支援するハードウェアを有していない場合、ストレージシステムが備えるCPUが、複数のCPU命令で構成されたプログラムコードに従ってDIFの生成及び検査を実行する。
【先行技術文献】
【特許文献】
【0008】
【文献】米国特許8194854号明細書
【文献】米国特許10320558号明細書
【発明の概要】
【発明が解決しようとする課題】
【0009】
ユーザデータを暗号化して保存する機能及びユーザデータにDIFを付加する機能を有するストレージシステムにおいて、CPUが実行するユーザデータの暗号化の処理性能を高めるための詳細な方法については従来の技術には開示されていない。
【課題を解決するための手段】
【0010】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、複数のデータブロックを含むユーザデータの書き込み及び読み出しを行う計算機であって、プロセッサ、前記プロセッサに接続されるメモリ、前記プロセッサに接続される記憶媒体、及び前記プロセッサに接続される接続インタフェースを備え、前記プロセッサは、複数のレジスタを有し、前記ユーザデータの書き込みリクエストを受信し、前記書き込みリクエストに従って書き込まれる前記ユーザデータを前記メモリに格納し、前記複数のレジスタを用いて、複数の暗号化データブロックを含む暗号化ユーザデータを生成する暗号化処理を実行し、前記暗号化ユーザデータに含まれる前記複数の暗号化データブロックの各々に、第1誤り符号を含む第1データ保全性フィールドを付加し、前記暗号化ユーザデータを前記記憶媒体に格納する。前記暗号化処理では、所定の数の前記データブロックから、前記データブロックの一部である部分データを読み出し、第1レジスタに格納する第1処理と、前記第1レジスタに格納される前記部分データを暗号化した暗号化部分データを第2レジスタに格納する第2処理と、前記第2レジスタに格納される前記暗号化部分データを用いて、前記第1誤り符号を算出するための第1演算を実行し、前記第1演算の結果を第3レジスタに格納する第3処理と、が繰り返し実行される。
【発明の効果】
【0011】
本発明の一形態によれば、暗号化処理の処理性能を向上させることができる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0012】
【
図1】実施例1の計算機システムの構成例を示す図である。
【
図2A】実施例1のストレージシステムが扱うデータのフォーマットを示す図である。
【
図2B】実施例1のストレージシステムが扱うデータのフォーマットを示す図である。
【
図2C】実施例1のストレージシステムが扱うデータのフォーマットを示す図である。
【
図3A】実施例1のWSCの仕様を説明する図である。
【
図3B】実施例1のWSCの仕様を説明する図である。
【
図3C】実施例1のWSCの仕様を説明する図である。
【
図4】実施例1のストレージシステムが実行するライト処理の一例を説明するフローチャートである。
【
図5】実施例1のストレージシステムが実行するリード処理の一例を説明するフローチャートである。
【
図6A】従来のXTS暗号化/復号を説明する図である。
【
図6B】従来のXTS暗号化/復号を説明する図である。
【
図7A】実施例1のストレージシステムにおけるXTS暗号化/復号を説明する図である。
【
図7B】実施例1のストレージシステムにおけるXTS暗号化/復号を説明する図である。
【
図7C】実施例1のストレージシステムにおけるXTS暗号化/復号を説明する図である。
【
図8】実施例1のストレージシステムが実行するVector命令を用いたXTS暗号化/復号における入力データの構造を示す図である。
【
図9】実施例1のストレージシステムが実行するVector命令を用いたXTS暗号化/復号における出力データの構造を示す図である。
【
図10A】実施例1のストレージシステムにおけるCRCの算出方法を説明する図である。
【
図10B】実施例1のストレージシステムにおけるCRCの算出方法を説明する図である。
【
図10C】実施例1のストレージシステムにおけるCRCの算出方法を説明する図である。
【
図11A】実施例1のストレージシステムにおけるCRC計算の並列方法を示す図である。
【
図11B】実施例1のストレージシステムにおけるCRC計算の並列方法を示す図である。
【
図12A】実施例1のストレージシステムにおける4つのデータブロックのDIFの並列的な生成方法を説明する図である。
【
図12B】実施例1のストレージシステムにおける4つのデータブロックのDIFの並列的な生成方法を説明する図である。
【
図13A】実施例1のストレージシステムにおける4つのデータブロックのDIFの並列的な検査方法を説明する図である。
【
図13B】実施例1のストレージシステムにおける4つのデータブロックのDIFの並列的な検査方法を説明する図である。
【
図13C】実施例1のストレージシステムにおける4つのデータブロックのDIFの並列的な検査方法を説明する図である。
【発明を実施するための形態】
【0013】
本発明の一実施例について、図面を参照して説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0014】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【0015】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【実施例1】
【0016】
図1は、実施例1の計算機システムの構成例を示す図である。
【0017】
実施例1に係る計算機システム100は、ホスト計算機110及びストレージシステム120を有する。ホスト計算機110及びストレージシステム120は、直接又はネットワークを介して互いに接続される。
【0018】
ストレージシステム120は、データの読み書きを行う計算機の一例である。ストレージシステム120は、ストレージコントローラ130及びストレージデバイス140を有する。ストレージデバイス140は、例えば、HDD(Hard Disk Drive)及びSSD(Solid State Drive)等である。ストレージデバイス140は、ストレージコントローラ130に搭載されてもよい。
【0019】
ストレージコントローラ130は、1つ以上のフロントエンドインタフェース(FE I/F)131、1つ以上のバックエンドインタフェース(BE I/F)132、CPU133、及びDRAM(Dynamio Random Access Memory)134を有する。DRAM134は、バイト単位で読み書きが可能な揮発性メモリ(メモリデバイス)である。
【0020】
図1では、ストレージシステム120のハードウェア要素を一つずつ図示しているが、冗長化、高性能化、又は大容量化等を実現するために、各構成要素は複数存在してもよい。
【0021】
実施例1に係るストレージコントローラ130は、ホスト計算機110に論理ボリュームを提供する。提供方法としては、以下のような方法がある。
【0022】
(提供方法1)複数のストレージデバイス140から一つないし複数の論理ボリューム(実体的な論理ボリューム)を形成して、ホスト計算機110に提供する。
【0023】
(提供方法2)ストレージコントローラ130は、シンプロビジョニング技術によって形成される論理ボリュームをホスト計算機110に提供する。当該論理ボリュームは仮想的なボリュームであって、実際の記憶領域は動的に割り当てられる。
【0024】
ホスト計算機110は、提供された論理ボリューム及び論理ボリューム内の位置(論理ブロック番号。LBAと略記されることもある)を指定したI/Oコマンド(ライトコマンド又はリードコマンド)を発行することによって、論理ボリュームに対するユーザデータのライト/リードを要求する。
【0025】
FE I/F131は、ホスト計算機110と通信するためのインタフェースデバイスである。FE I/F131はホスト計算機110から受信したユーザデータにDIF(データ保全性フィールド)と呼ばれる情報を付加する機能を有する。また、FE I/F131は、ホスト計算機110へ送信するデータに付加されたDIFを検査し、除去する機能を有する。DIFは、例えばT10-DIFである。T10-DIFは、米国規格協会(ANSI)によって標準化されている。
【0026】
BE I/F132は、ストレージデバイス140と通信するためのインタフェースデバイスである。BE I/F132は、例えばSAS、SATA、NVMe、及びFibre Channel等である。
【0027】
CPU133は、ライト処理/リード処理で用いる複数のレジスタを有し、I/Oコマンド(ライトコマンド)に応じてユーザデータのライト処理を実行し、I/Oコマンド(リードコマンド)に応じてユーザデータのリード処理を実行する。ライト処理では、ホスト計算機110から受信したユーザデータが暗号化され、暗号化ユーザデータがストレージデバイス140に永続的に格納される。リード処理では、ストレージデバイス140に格納された暗号化ユーザデータが、ユーザデータに復号され、ホスト計算機110に送信される。これらライト/リード処理の内容は以降に詳しく説明する。
【0028】
CPU133は、例えば、Intel(Intelは登録商標、以下同じ。)社がサーバ向けに開発したマイクロプロセッサである、第3世代Xeon(Xeonは登録商標、以下同じ。)スケーラブルプロセッサ(コードネーム:IceLake-SP)である。
【0029】
DRAM134は、CPU133が実行するプログラム、及びプログラムが扱うデータを格納する。また、DRAM134はキャッシュ領域を含む。キャッシュ領域には、ホスト計算機110から受信したI/Oコマンド(ライトコマンド)に従って入力されたユーザデータ、ストレージデバイス140に書き込まれる暗号化ユーザデータ、ストレージデバイス140から読み出された暗号化ユーザデータ、ホスト計算機110から受信したI/Oコマンド(リードコマンド)に従って出力されるユーザデータがキャッシュされる。
【0030】
なお、CPU133は、I/Oコマンド(ライトコマンド)とともに入力されたユーザデータをキャッシュ領域にキャッシュする場合、ユーザデータを多重化して、格納する。CPU133は、キャッシュされたユーザデータの破損が検出された場合、多重化されたユーザデータを用いてライト処理等を行う。これによって、ユーザデータの損失を防止することができる。
【0031】
また、ストレージシステム120は、ストレージデバイス140の故障による暗号化ユーザデータの損失を防ぐために、RAID(Redundant Arrays of Independent Disks)技術に基づく、冗長化を施してから暗号化ユーザデータを格納する。具体的には、N台(Nは2以上の整数)のストレージデバイス140が搭載されている場合、CPU133は、書き出すデータを(N-1)に均等に配分して各ストレージデバイス140に記録し、各ストレージデバイス140に書き込むデータの排他的論理和によって生成されたパリティを1つのストレージデバイス140に格納する。これによって、1つのストレージデバイス140が故障しても、データ回復が可能となる。例えば、N=4のとき、CPU133は、3つのストレージデバイス140に同じサイズのデータD1、D2、D3を記録して、1つのストレージデバイス140にデータD1、D2、D3の排他的論理和から生成されるパリティP(P=D1+D2+D3:+は排他的論理和を示す)を記録する。例えば、D2が記録されるストレージデバイス140が故障した場合、CPU133は、パリティP、データD1、及びデータD3の排他的論理和によってデータD2を回復する。
【0032】
図2A、
図2B、及び
図2Cは、実施例1のストレージシステム120が扱うデータのフォーマットを示す図である。
【0033】
図2Aに示すデータフォーマット200は、ホスト計算機110から送信されたライトコマンドとともに送信されるユーザデータ、又は、リードコマンドによってストレージシステム120からホスト計算機110に送信されるユーザデータのフォーマットの一例である。
【0034】
ユーザデータは、1つ以上のユーザデータブロック201から構成される。ユーザデータブロック201のサイズは、例えば、512バイトである。
図2に示すユーザデータは4つのユーザデータブロック201-1、201-2、201-3、201-4から構成された2048バイトのデータである。例えば、ホスト計算機110が8192バイトのユーザデータをライト又はリードする場合、ユーザデータは16個のユーザデータブロック201から構成される。
【0035】
図2Bに示すデータフォーマット210は、ストレージシステム120がDRAM134にキャッシュするユーザデータのフォーマットの一例である。
【0036】
ストレージシステム120のFE I/F131は、ユーザデータを構成する各ユーザデータブロック201の末尾にDIF202を付加する。
図2Bでは、ユーザデータブロック201-1、201-2、201-3、201-4の各々に、DIF202-1、202-2、202-3、202-4が付加されている。
【0037】
DIF202はT10-DIFの規格に従っており、2バイトのCRC(Cyclic Redundancy Check)231、2バイトのATAG(Application Tag)(0)232、2バイトのATAG(1)233、4バイトのRTAG(Reference Tag)234から構成される。
【0038】
CRC231は、DIF202の前に位置する512バイトのユーザデータブロック201から算出される16ビットの誤り検出符号である。RTAG234は、DIF202の前に位置する512バイトのユーザデータブロック201に対応づけられたアドレスである。RTAG234に設定するアドレスは、ユーザデータの先頭のユーザデータブロック201から終端のユーザデータブロック201に向かって昇順に設定される。例えば、ユーザデータブロック201-1のアドレスがK(Kは整数)である場合、ユーザデータブロック201-2のアドレスはK+1、ユーザデータブロック201-3のアドレスはK+2、ユーザデータブロック201-4のアドレスはK+3である。ATAG(0)232及びATA(1)233は任意の用途に用いることができる。ユーザデータをDRAM134にキャッシュしている場合、ATAG(0)232及びATAG(1)233は使用されないため、ストレージシステム120はATAG(0)232及びATAG(1)233の各々に00hを設定する。
【0039】
ストレージシステム120は、DRAM134に格納されるユーザデータの各ユーザデータブロック201にDIF202を付加することによって、ライト処理/リード処理におけるエラーの発生を検出できる。具体的には、ストレージシステム120は、CRC231を検査することによって、ユーザデータブロック201の破損を検出できる。ストレージシステム120は、RTAG234を検査することによって、ユーザデータブロック201の順序が入れ替わりを検出できる。FE I/F131がホスト計算機110にユーザデータを送信する場合に行うDIF検査は、前述の検査である。
【0040】
図2Cに示すデータフォーマット220は、ストレージシステム120がストレージデバイス140に保存する暗号化ユーザデータのフォーマットの一例である。
図2Cに示す暗号化ユーザデータは、ユーザデータブロック201-1、201-2、201-3、201-4を暗号化した暗号化ユーザデータブロック203-1、203-2、203-3、203-4から構成される。
【0041】
ストレージシステム120は、ユーザデータを構成する各ユーザデータブロック201をAES(Advanced Encryption Standard)アルゴリズムのXTS(XEX encryption mode with Tweak and ciphertext Stealing)モードを用いて、暗号化ユーザデータブロック203に暗号化する。
【0042】
AESは、米国国立標準技術研究所(NIST)が標準暗号として定めた共通鍵暗号アルゴリズムである。AES鍵のサイズは、例えば256ビットである。ただし、ASE鍵のサイズは256ビットでなくてもよい。XTSモードは、標準化文章IEEE1619で制定されているストレージデバイス向けのブロック暗号方式である。以下の説明では、AESアルゴリズムのXTSモードによる暗号化をXTS暗号化、当該モードによる復号をXTS復号と記載する。
【0043】
ストレージシステム120は、ユーザデータのキャッシュと同様に、各暗号化ユーザデータブロック203にDIF204を付加する。
【0044】
DIF204は、DIF202と同様にT10-DIFの規格に従っており、2バイトのCRC241、2バイトのATAG(0)242、2バイトのATAG(1)243、4バイトのRTAG244から構成される。
【0045】
CRC241は、DIF204の前に位置する512バイトの暗号化ユーザデータブロック203から算出される16ビットの誤り検出符号である。RTAG244は、DIF204の前に位置する512バイトの暗号化ユーザデータブロック203に対応づけられたアドレスである。RTAG244に設定するアドレスは、暗号化ユーザデータの先頭の暗号化ユーザデータブロック203から終端の暗号化ユーザデータブロック203に向かって昇順に設定される。ストレージシステム120は、暗号化ユーザデータをストレージデバイス140に保存する場合、ATAG(0)242にWSC(ライトシーケンスコード)と呼ばれる符号を設定する。WSCの仕様については
図3を用いて説明する。ATAG(1)243は使用しないため、00hが設定される。
【0046】
ストレージシステム120は、ストレージデバイス140に保存される暗号化ユーザデータの各暗号化ユーザデータブロック203にDIF204を付加することによって、書き込みエラー又は読み出しエラーの発生を検出できる。具体的には、ストレージシステム120は、CRC241を検査することによって、読み出した暗号化ユーザデータブロック203の破損を検出できる。ストレージシステム120は、RTAG244を検査することによって、ストレージデバイス140に読み出しを指示したアドレスの誤りを検出できる。ストレージデバイス140への暗号化ユーザデータの書き込みのエラーは、ATAG(0)242に設定されたWSCを検査することによって検出できる。
【0047】
以下の説明では、ユーザデータブロック201及び暗号化ユーザデータブロック203を区別しない場合、データブロックと記載する。
【0048】
【0049】
図3Aに示すデータフォーマット300は、WSCのデータフォーマットの一例である。WSCは、ATAG0(242)に格納される1バイト(8ビット)の符号であり、1ビットのHEADフラグ301、1ビットのTAILフラグ302、6ビットのSQN(シーケンス番号)303から構成される。
【0050】
HEADフラグ301は、ストレージデバイス140に書き込む暗号化ユーザデータブロック203が先頭であるか否かを示す値を格納するフラグである。TAILフラグ302は、ストレージデバイス140に書き込む暗号化ユーザデータブロック203が終端であるか否かを示す値を格納するフラグである。
【0051】
ストレージデバイス140に書き込む暗号化ユーザデータブロック203が先頭である場合、HEADフラグ301に1が設定され、ストレージデバイス140に書き込む暗号化ユーザデータブロック203が終端である場合、TAILフラグ302に1が設定される。先頭及び終端のいずれにも該当しない暗号化ユーザデータブロック203のHEADフラグ301及びTAILフラグ302には0が設定される。1つの暗号化ユーザデータブロック203から構成される暗号化ユーザデータを書き込む場合、HEADフラグ301及びTAILフラグ302には1が設定される。
【0052】
SQN303はストレージデバイス140に書き込まれる暗号化ユーザデータの世代番号を格納する。世代番号は、書き込むたびに異なる値を用いる。
【0053】
図3Bは、ストレージデバイス140のアドレス0~9に暗号化ユーザデータブロック203を書き込む場合のWSCの設定例を示す。
【0054】
状態1では、10個の暗号化ユーザデータブロック203から構成される暗号化ユーザデータが書き込まれる。ここではSQNとして0x0Aが指定されているものとする。
【0055】
アドレス0に書き込まれた暗号化ユーザデータブロック203は先頭であるためHEAD301は1となり、WSCは0x8Aとなる。アドレス9に書き込まれた暗号化ユーザデータブロック203は終端であるためTAIL302が1となり、WSCは0x4Aとなる。他のアドレスに書き込まれた暗号化ユーザデータブロック203のWSCは0x0Aとなる。
【0056】
状態2では、アドレス3~7に対して5つの暗号化ユーザデータブロック203から構成される暗号化ユーザデータが書き込まれる。ここではSQNには0x0Bが指定されているものとする。
【0057】
5つのアドレスに対してデータが上書きされるためWSCが更新される。アドレス3に書き込まれた暗号化ユーザデータブロック203は先頭であるためHEAD301は1となり、WSCは0x8Bとなる。アドレス7に書き込まれた暗号化ユーザデータブロック230は終端であるためTAIL302は1となり、WSCは0x4Bとなる。アドレス4~6に書き込まれた暗号化ユーザデータブロック203のWSCは0x0Bとなる。
【0058】
図3Cに示す表320は、WSCに基づいて書き込みエラーの有無を検査するためのルールの一例を示す。ストレージシステム120は、ストレージデバイス140に暗号化ユーザデータを書き込む場合、WSCを読み出して、表320に示したルールに従って、書き込みエラーの有無を検査する。
【0059】
表320には、以下のようなルールが定義されている。
(R1)自ブロックのWSCのHEAD/TAILが1/0又は1/1の場合、検査は行われない。
(R2)自ブロックのWSCのHEAD/TAILが0/0又は0/1、かつ、前のブロックのWSCのHEAD/TAILが0/1である場合、検査は行われない。
(R3)自ブロックのWSCのHEAD/TAILが0/0又は0/1、かつ、前のブロックのWSCのHEAD/TAILが0/0の場合、ストレージシステム120は、自ブロックのWSCのSQNが前ブロックのWSCのSQNと一致するか否かを検査する。
(R4)自ブロックのWSCのHEAD/TAILが0/0又は0/1、かつ、その前のブロックのWSCのHEAD/TAILが1/0の場合、ストレージシステム120は、自ブロックのWSCのSQNが前ブロックのWSCのSQNと一致するか否かを検査する。
(R5)自ブロックのWSCのHEAD/TAILが0/0又は0/1、かつ、前のブロックのWSCのHEAD/TAILが1/1の場合、検査は行われない。
【0060】
(R3)、(R4)は、自ブロックが先頭でなく、前ブロックが終端でなかった場合、暗号化ユーザデータブロック203のSQNの一致を検査することを表す。これによって、複数ブロックで構成されたユーザデータの書き込みが間欠なく成功しているか否かが確認できる。例えば、
図3Bの矩形311、312、313に含まれるアドレスのWSCは(R3)、(R4)の条件に合致するため検査対象となる。アドレス3~7に対する5つのブロックの書き込みにおいて、アドレス5への書き込みが失敗していた場合、アドレス5のWSCは更新されず0x0Aのままとなる。このエラーはアドレス5のWSC検査において、アドレス5のSQN(0x0A)がアドレス4のSQN(0x0B)と不一致となることで検出可能である。アドレス3~7に対する5つのブロックの書き込みにおいて、アドレス3への書き込みが失敗していた場合、アドレス3のWSCは更新されず0x0Aのままとなる。このエラーはアドレス4のWSC検査において、SQN(0x0B)がアドレス3のSQN(0x0A)と不一致となることで検出可能である。
【0061】
(R1)、(R2)、(R5)は、自ブロックが先頭である場合、又は、前のブロックが終端である場合、自ブロックのWSCのSQNと、前のブロックのWSCのSQNとが一致している必要がないため、検査を行わないことを表す。
【0062】
図4は、実施例1のストレージシステム120が実行するライト処理の一例を説明するフローチャートである。以下の説明では、XTS暗号化されていないユーザデータブロック201を平文ブロック、XTS暗号化によって暗号化ユーザデータブロック203を暗号文ブロックと記載する。
【0063】
ストレージシステム120は、ホスト計算機110からライトコマンドとともにユーザデータを受信する(ステップS401)。
【0064】
ストレージシステム120は、ユーザデータを構成する平文ブロックにDIF202を付加する(ステップS402)。具体的には、FE I/F131は、平文ブロックから16ビットの誤り検出符号を算出してCRC231として設定し、また、ブロックアドレスをTRAG234として設定する。
【0065】
ストレージシステム120のCPU133は、DIF202を付加したユーザデータをDRAM134に格納する(ステップS403)。このとき、ストレージシステム120は、ユーザデータの損失を防ぐために、ユーザデータを多重してDRAM134に格納する。
【0066】
ストレージシステム120のCPU133は、DRAM134から平文ブロックの一部を読み出し、レジスタにロードする(ステップS404)。
【0067】
ストレージシステム120のCPU133は、レジスタにロードされたデータを用いて平文ブロックのCRCを算出するための演算(CRC計算)を実行し、XTS暗号化によってデータを暗号化する(ステップS405)。これによって、暗号文ブロックの一部が生成される。暗号化されたデータはレジスタに格納され、また、DRAM134にも格納される。
【0068】
ストレージシステム120のCPU133は、レジスタに格納される暗号化されたデータを用いて、暗号文ブロックのCRCを算出するためのCRC計算を実行する(ステップS406)。
【0069】
ストレージシステム120のCPU133は、全ての平文ブロックの暗号化が完了したか否かを判定する(ステップS407)。
【0070】
全ての平文ブロックの暗号化が完了していない場合、ストレージシステム120のCPU133は、ステップS404に戻り同様の処理を実行する。このように、ストレージシステム120は、平文ブロックの先頭から終端に向かってロード元ポイントを順次移動させ、逐次的にデータを暗号化する。
【0071】
全ての平文ブロックの暗号化が完了した場合、平文ブロック及び暗号文ブロックのそれぞれのCRCが算出され、また、暗号化ユーザデータが生成された状態となっている。
【0072】
ストレージシステム120のCPU133は、算出された平文ブロックのCRCと、DIF202に含まれるCRC231とを比較することによって、ユーザデータが破損しているか否かを判定する(ステップS408)。具体的には、各CRCが一致しているか否かが判定される。少なくとも一つのCRCが不一致の場合、ユーザデータが破損していると判定される。
【0073】
CRCの検査によってユーザデータの破損が検出された場合、ストレージシステム120のCPU133は、多重化されたユーザデータを用いてユーザデータを回復し(ステップS410)、その後、ステップS404に戻る。
【0074】
CRCの検査によってユーザデータの破損が検出されなかった場合、ストレージシステム120のCPU133は、DIF202に含まれるRTAG234に基づいて、ユーザデータが破損しているか否かを判定する(ステップS409)。具体的には、アドレスが昇順になっているか否かが判定される。アドレスが昇順になっていない場合、ユーザデータが破損していると判定される。
【0075】
RTAG234の検査によってユーザデータの破損が検出された場合、ストレージシステム120のCPU133は、多重化されたユーザデータを用いてユーザデータを回復し(ステップS410)、その後、ステップS404に戻る。
【0076】
RTAG234の検査によってユーザデータの破損が検出されなかった場合、ストレージシステム120のCPU133は、各暗号文ブロックにDIF204を付加する(ステップS411)。具体的には、暗号文ブロックから算出された16ビットの誤り検出符号がCRC241に設定され、
図3で説明したWSCがATAG0(242)に設定され、暗号文ブロックのアドレスがRTAG234に設定される。
【0077】
ストレージシステム120のCPU133は、DIF204が付加された暗号化ユーザデータをストレージデバイス140にライトする(ステップS412)。この時、CPU133は、N-1等分に分割された暗号化ユーザデータと、RAID技術によって生成されたパリティとを複数のストレージデバイス140にライトする。以上がライト処理の説明である。
【0078】
図5は、実施例1のストレージシステム120が実行するリード処理の一例を説明するフローチャートである。
【0079】
ストレージシステム120のCPU133は、ホスト計算機110からリードコマンドを受信した場合、ストレージデバイス140からDIF204が付加された暗号化ユーザデータを読み出し、DRAM134に格納する(ステップS501)。
【0080】
ストレージシステム120のCPU133は、DRAM134から暗号文ブロックの一部をレジスタにロードする(ステップS502)。
【0081】
ストレージシステム120のCPU133は、レジスタにロードされたデータを用いて暗号文ブロックのCRCを算出するための演算(CRC計算)を実行し、XTS復号によってデータを復号する(ステップS503)。これによって、平文ブロックの一部が生成される。復号されたデータはレジスタに格納され、また、DRAM134にも格納される。
【0082】
ストレージシステム120のCPU133は、レジスタに格納される復号されたデータを用いて、平文ブロックのCRCを算出するための演算(CRC計算)を実行する(ステップS504)。
【0083】
ストレージシステム120のCPU133は、全ての暗号文ブロックの復号が完了したか否かを判定する(ステップS505)。
【0084】
全ての暗号文ブロックの復号が完了していない場合、ストレージシステム120のCPU133は、ステップS502に戻り同様の処理を実行する。このように、暗号文ブロックの先頭から終端に向かってロード元ポイントを順次移動させ、逐次的にデータを復号する。
【0085】
全ての暗号文ブロックの復号が完了した場合、暗号文ブロック及び平文ブロックのそれぞれのCRCが算出され、また、ユーザデータが生成された状態となっている。
【0086】
ストレージシステム120のCPU133は、算出された暗号文ブロックのCRCと、DIF204に含まれるCRC241とを比較することによって、暗号化ユーザデータが破損しているか否かを判定する(ステップS506)。すなわち、暗号化ユーザデータのリード又はライトに失敗しているか否かが判定される。具体的には、各CRCが一致しているか否かが判定される。少なくとも1つのCRCが不一致である場合、暗号化ユーザデータが破損していると判定される。
【0087】
CRCの検査によって暗号化ユーザデータの破損が検出された場合、ストレージシステム120のCPU133は、ストレージシステム120からパリティを読み出し、暗号化ユーザデータを回復し(ステップS509)、その後、ステップS502に戻る。
【0088】
CRCの検査によって暗号化ユーザデータの破損が検出されなかった場合、ストレージシステム120のCPU133は、DIF204に含まれるWSCに基づいて、暗号化ユーザデータが破損しているか否かを判定する(ステップS507)。すなわち、暗号化ユーザデータのリード又はライトに失敗しているか否かが判定される。具体的には、
図3Cに示した表320に従った検査が行われる。
【0089】
WSCの検査によって暗号化ユーザデータの破損が検出された場合、ストレージシステム120のCPU133は、ストレージシステム120からパリティを読み出し、暗号化ユーザデータを回復し(ステップS509)、その後、ステップS502に戻る。
【0090】
WSCの検査によって暗号化ユーザデータの破損が検出されなかった場合、ストレージシステム120のCPU133は、DIF204に含まれるRTAG234に基づいて、暗号化ユーザデータが破損しているか否かを判定する(ステップS508)。すなわち、暗号化ユーザデータのリード又はライトに失敗しているか否かが判定される。具体的には、アドレスが昇順になっているか否かが判定される。アドレスが昇順になっていない場合、暗号化ユーザデータが破損していると判定される。
【0091】
RTAG234の検査によって暗号化ユーザデータの破損が検出された場合、ストレージシステム120のCPU133は、ストレージシステム120からパリティを読み出し、暗号化ユーザデータを回復し(ステップS509)、その後、ステップS502に戻る。
【0092】
RTAG234の検査によってユーザデータの破損が検出されなかった場合、ストレージシステム120のCPU133は、各平文ブロックにDIF202を付加する(ステップS510)。具体的には、平文ブロックから算出された16ビットの誤り検出符号がCRC231に設定され、平文ブロックのアドレスがRTAG234に設定される。
【0093】
ストレージシステム120のCPU133は、DIF202が付加されたユーザデータをDRAM134に格納する(ステップS511)。
【0094】
ストレージシステム120は、ホスト計算機110にユーザデータを送信する(ステップS512)。この時、FE I/F131は、DIFの検査を行って、ユーザデータからDIFを除去する。以上がリード処理である。
【0095】
図6A及び
図6Bは、従来のXTS暗号化/復号を説明する図である。
【0096】
図6Aは、XTS暗号化の処理手順を示す。XTS暗号化では、512バイトの平文ブロックが16バイトずつ暗号化される。まず、(E1)16バイトのTweakと平文ブロックの一部との排他的論理和が算出される。次に、(E2)AES暗号化アルゴリズムに基づく暗号化が行われる。最後に、(E3)暗号化の結果とTweakとの排他的論理和が算出され、16バイトの暗号文要素が生成される。(E1)、(E2)、(E3)の処理のサイクルを32回実行することによって512バイトの暗号文ブロックが生成される。
【0097】
Tweakは16バイトのデータを暗号化する毎に変更される。また、Tweakは512バイトのブロック毎に異なる値である。
【0098】
(E2)のAESアルゴリズムでは15個の暗号化ラウンド鍵(128ビット)を用いて暗号化が行われる。これらのラウンド鍵は、規定された拡張処理(Key Expansion)を256ビット暗号鍵に施して生成される。最初に、(E2-1)AddRoundKey処理が実行され、次に、(E2-2)SubBytes、ShiftRows、MixColumns、AddRoundKeyの4つの処理が13回繰り返され、最後に、(E2-3)SubBytes、ShiftRows、AddRoundKeyの3つの処理が実行される。15回実行されるAddRoundKey処理では、暗号化ラウンド鍵0~14が使用される。
【0099】
前述した各処理は、以下のようなCPU命令に対応させることができる。データ及びTweakの排他的論理和はXOR命令に対応する。AddRoundKey処理は、CPU命令として、前段の処理結果と暗号化ラウンド鍵との排他的論理和(XOR)に対応する。(E2-2)の4つの処理は、AESENC命令に対応する。つまり、AESENC命令は13回実行する必要がある。(E2-3)の3つの処理は、AESENCLAST命令に対応する。AESENC命令とAESENCLAST命令は、Intel社が2010年頃以降に製品化しているマイクロプロセッサにおいて、AES-NI(AES New Instructions)と呼ばれる暗号専用命令セットの一部として実装されている。
【0100】
図6Bは、XTS復号の処理手順を示す。XTS復号では、512バイトの暗号文ブロックが16バイトずつ復号される。まず、(D1)16バイトのTweakと暗号化ブロックの一部との排他的論理和が算出される。次に、(D2)AESアルゴリズムに基づく復号が行われる。最後に、(D3)復号の結果とTweakとの排他的論理和が算出され、16バイトの平文要素が生成される。(D1)、(D2)、(D3)を32回実行することによって512バイトの平文ブロックが生成される。
【0101】
Tweakは16バイトのデータを復号する毎に変更される。また、Tweakは512バイトのブロック毎に異なる値である。
【0102】
(D2)のAES復号アルゴリズムでは15個の復号ラウンド鍵(128ビット)を用いて復号が行われる。これらのラウンド鍵は、規定された拡張処理(Key Expansion)を256ビット暗号鍵に施して生成する。256ビット暗号鍵は暗号化で使用した暗号鍵と同一である。最初に、(D2-1)AddRoundKey処理が実行され、次に、(D2-2)InvShiftRows、InvSubBytes、AddRoundKey、InvMixColumnsの4つの処理が13回繰り返され、最後に、(D2-3)InvShiftRows、InvSubBytes、AddRoundKeyの3つの処理が実行される。15回実行されるAddRoundKey処理では、復号ラウンド鍵0~14が使用される。
【0103】
前述した各処理は、以下のようなCPU命令に対応させることができる。データ及びTweakの排他的論理和はXOR命令に対応する。AddRoundKey処理は、前段の処理結果と復号ラウンド鍵との排他的論理和(XOR)に対応する。(D2-2)の4つの処理は、AESDEC命令に対応する。つまり、AESDEC命令は13回実行する必要がある。(D2-3)の3つの処理は、AESDECLAST命令に対応する。AESDEC命令とAESDECLAST命令は、上記と同様にAES-NIの一部として実装されている。
【0104】
図7A、
図7B、及び
図7Cは、実施例1のストレージシステム120におけるXTS暗号化/復号を説明する図である。
【0105】
CPU133は、第3世代Xeonスケーラブルプロセッサ等であり、AES-NIをサポートし、さらにその中のAESENC命令、AESENCLAST命令、AESDEC命令、AESDECLAST命令のそれぞれをVector化した命令(VAESENC命令、VAESENCLAST命令、VAESDEC命令、VAESDECLAST命令)もサポートしている。
【0106】
Vecror命令は、1回の実行において、複数データに対して同じ演算を並列に実施することができる命令である。SIMD(Single Instruction/Multiple Data)命令とも呼ばれる。Vector命令ではZmmレジスタと呼ばれる512ビット(64バイト)レジスタを使用し、128ビット(16バイト)の4つのデータに対して同じ演算を実行する。演算結果もまたZmmレジスタに格納される。CPU133は、32個のZmmレジスタ(Zmm0レジスタ~Zmm31レジスタ)を利用する。CPU133は、マイクロプロセッサに一般的な演算(加算、減算、乗算、排他的論理和、シフト、比較など)を行う命令についても、Vector化した命令をサポートしている。
【0107】
CPU133は、これらのVector命令を用いてXTS暗号化/復号を並列的に実行する。具体的には、4つのデータブロック(512バイト)を並列で暗号化/復号する。
【0108】
図7Aは、CPU133による、4つの平文ブロックの並列的なXTS暗号化を示す。
【0109】
CPU133は、DRAM134に格納された4つの平文ブロック(512バイト)の各々から16バイトのデータをZmmレジスタにロードする。Zmmレジスタには合計で64バイトのデータが格納される。
【0110】
CPU133は、(P1)Vector XOR命令を実行することによって、Zmmレジスタに格納されるデータと、各平文ブロックの4つのTweakを並べた値との排他的論理和を算出する。次に、CPU133は、(P2)Vector XOR命令、13回のVAESENC命令、及びVAESENCLAST命令を実行することによって、4つの平文ブロックのXTS暗号化を並列で行う。最後に、CPU133は、(P3)(P2)の演算結果と、4つのTweakを並べた値との排他的論理和を算出する。これによって、4つの16バイトの暗号文要素が同時に生成される。
【0111】
暗号文要素はZmmレジスタから逐次DRAM134に格納される。(P1)、(P2)、(P3)の処理のサイクルを複数回実行することによって、4つの暗号文ブロック(512バイト)が生成される。なお、(P2)で用いる暗号化ラウンド鍵0~14は各平文ブロックで共通である。
【0112】
図7Bは、CPU133による、4つの暗号文ブロックの並列的なXTS復号を示す。
【0113】
CPU133は、DRAM134に格納された4つの暗号文ブロック(512バイト)の各々から16バイトのデータをZmmレジスタにロードする。Zmmレジスタには合計で64バイトのデータが格納される。
【0114】
CPU133は、(P4)Vector XOR命令を実行することによって、Zmmレジスタに格納されるデータと、各暗号文ブロックの4つのTweakを並べた値との排他的論理和を算出する。次に、CPU133は、(P5)Vector XOR命令、13回のVAESDEC命令、及びVAESDECLAST命令を実行することによって、4つの暗号文ブロックのXTS復号を並列で行う。最後に、CPU133は、(P6)(P5)の演算結果と、4つのTweakを並べた値との排他的論理和を算出する。これによって、4つの16バイトの平文要素が同時に生成される。
【0115】
平文要素はZmmレジスタから逐次DRAM134に格納される。(P4)、(P5)、(P6)の処理のサイクルを複数回実行することによって、4つの平文ブロック(512バイト)が生成される。なお、(P5)で用いる復号ラウンド鍵0~14は各暗号文ブロックで共通である。
【0116】
図7Cは、Vector化した上記4種のAES命令の実行順序を最適化する方法を示す。
【0117】
図7CのVAES*は、VAESENC、VAESENCLAST、VAESDEC、VAESDECLASTに置き換えられる。
【0118】
これらの命令で用いる演算回路はそれぞれ4段のパイプライン構造731となっており、処理完了までのサイクル数は4である。パイプライン回路は、データがN段目から(N+1)段目に移行した時に、N段目は次のデータを受け入れ可能である。そのため、VAES*命令を4つ並べて実行すると、パイプラインには4サイクル連続でデータを供給できるため、処理効率が向上する。この考え方に基づき、CPU133は、
図7Aに示す暗号化及び
図7Bに示す復号において、4つのデータブロックからそれぞれ16バイトをZmmレジスタにロードする場合に、4つのZmmレジスタを確保して16バイト×4のロードを4回分先行して行う。そして、CPU133は、4つのZmmレジスタに対する4つのVAES*命令を連続で実行し、パイプライン処理の効率を向上させる。以下、4連続のVAES*命令で処理されるデータのまとまりをGroupと呼ぶ。
【0119】
図8は、実施例1のストレージシステム120が実行するVector命令を用いたXTS暗号化/復号における入力データの構造を示す図である。
【0120】
4つのデータブロックのXTS暗号化/復号の並列実行においては、
図7Cで示すGourpはGourp0~7の8個から構成される。すなわち、「4つのZmmレジスタに対して4つのVAES*命令を連続で実行する」手順は、4つのデータブロックのXTS暗号化/復号の並列処理の1回の実行において8回実行される。
【0121】
1つのGroupを構成する4つの64バイトデータ(16バイト×4)はそれぞれZmm0レジスタ~Zmm3レジスタにロードされる。例えば、Zmm0レジスタにロードされるデータは破線810で囲った64バイトデータである。なお、ロード先のZmmレジスタの番号は一例であって、他のレジスタ番号でもよい。
【0122】
DRAM134に格納されるユーザデータ又は暗号化ユーザデータの各データブロックの終端にはそれぞれ8バイトのDIFが付加されている。4つのデータブロックのDIFの検査は並列で実行されるため、1つのZmmレジスタにDIFがロードされる。
図8では、Zmm8レジスタに4つのデータブロックに付加されたDIFがロードされている。
【0123】
Zmmレジスタは16バイトのデータを4つ保持可能である。ただし、DIFは8バイトであるため、8バイトの間隔をあけてZmmレジスタにロードされる。なお、DIFロード先のZmmレジスタの番号は一例であって、他のレジスタ番号でもよい。
【0124】
XTS暗号化/復号処理に同時に入力される4つのデータブロックのアドレスは昇順で連続しており、4N、4N+1、4N+2、4N+3(Nは整数)である。例えば、ライト/リードするユーザデータのサイズが128Kバイト(256ブロック)の場合、4つのデータブロックのXTS暗号化/復号の並列処理を64回行う必要がある。
【0125】
図9は、実施例1のストレージシステム120が実行するVector命令を用いたXTS暗号化/復号における出力データの構造を示す図である。
【0126】
図9のGourp0~7は、
図8のGourp0~7のデータをXTS暗号化/復号した結果をDRAM134に格納する場合の出力位置に対応する。XTS暗号化/復号の結果の出力先の位置関係は入力元のそれと同じである。すなわち、入力ブロック先頭位置がX、出力ブロック先頭位置がYの時、入力ブロック先頭からP(Pは0以上)だけ離れたX+Pの位置にあるデータをXTS暗号化/復号した結果はY+Pの位置に出力される。
【0127】
1つのGroupをXTS暗号化/復号した結果はZmm4~7の4つのレジスタに保持されており、4つの64バイトのデータ(16バイト×4)はこの規則に従った位置に格納される。例えば、破線910で囲った64バイトのデータは、
図8の破線810で囲った64バイトのデータのXTS暗号化/復号の結果であり、Zmm4レジスタに格納される。なお、これら格納元のZmmレジスタの番号は一例であって、他のレジスタ番号でもよい。
【0128】
DRAM134に格納されるユーザデータ又は暗号化ユーザデータの各データブロックの終端にはそれぞれ8バイトのDIFが格納される。4つのブロックのDIFの生成は並列で実行されため、1つのZmmレジスタからDIFが読み出される。
図9では、Zmm9からDIFが読み出されている。
【0129】
Zmm9レジスタに格納されるDIFは8バイトの間隔をあけて格納される。なお、DIFの格納元のZmmレジスタの番号は一例であって、他のレジスタ番号でもよい。
【0130】
XTS暗号化/復号処理の結果が同時に出力される4つのデータブロックのアドレスは、
図8と同様に昇順で連続しており、4N、4N+1、4N+2、4N+3(Nは整数)である。
【0131】
以上、
図7~9を用いて説明した、4つデータブロックのXTS暗号化/復号の並列処理は、
図4のステップS405及び
図5のステップS503において適用される。
【0132】
【0133】
まず、
図10Aを参照しながら、CRC計算の理論を説明する。一般に、バイナリ多項式M(x)に対応する任意長のバイナリデータMのCRCは式(1)で定義される。
【0134】
【0135】
ここで、degは多項式の次数を表し、P(x)はCRCアルゴリズムを定義する多項式を表し、記号「・」はキャリーレス乗算を表す。16ビットCRCアルゴリズムの場合、P(x)は次数16の多項式である。CRCは、ガロア体GF(2)上で定義された大きな次数の多項式M(x)をCRC多項式P(x)で割った時の剰余多項式として計算できる。
【0136】
図10Aは、ストレージシステム120において典型的な512バイト(4096ビット)のブロックから16ビットのCRCを算出する方法を示している。キャリーレス乗算を効率的に実行できるCPU命令があれば、バイナリ多項式の除算は効率的に実行できる。
【0137】
図10B及び
図10Cは、最大で64ビット×64ビットのキャリーレス乗算が実行可能なPCLMULQDQ命令を用いたCRC計算の方法を示している。PCLMULQDQ命令は、Intel社が2010年頃以降に製品化しているマイクロプロセッサに搭載されている。
【0138】
図10Bは、512バイト(4096ビット)のバイナリデータのCRC計算を、128ビットのバイナリデータのCRC計算に短縮する方法を示している。1回の短縮処理によってバイナリデータのビット数は128だけ減る。k回の短縮処理を施した後のバイナリ多項式Mk(x)と、さらに1回の短縮処理を施して得られる多項式Mk+1(x)との関係は式(2)で与えられる。
【0139】
【0140】
ここで、M0(x)=M(x)である。H(x)はMk(x)が示すバイナリデータの上位64ビットからなる多項式を表し、L(x)はMk(x)が示すバイナリデータの上位64ビットに続く64ビットからなる多項式を表す。Gk(x)はMk(x)が示すバイナリデータの上位128ビットを除いた残りデータからなる多項式を表す。Tは当該残りデータのビット数を表す。記号「+」はビット単位の排他的論理和を表す。
【0141】
PCLMULQDQ命令によって、H(x)とL(x)が示す64ビット値にそれぞれ定数を乗じて2つの128ビット値を求め、それらとGk(x)が示す残りデータとの排他的論理和を算出することによって、CRC計算の対象となるバイナリデータのビット数を128だけ減らすことができる。この短縮処理を31回行うことで、512バイト(4096ビット)のバイナリデータのCRC計算は、M31(x)が示す128ビットのバイナリデータのCRC計算に帰着する。
【0142】
図10Cは、M31(x)が示す128ビットのバイナリデータのCRC計算(
図10Bの最終計算)を行う方法を示している。
【0143】
まず、CPU133は、PCLMULQDQ命令によって、上位64ビット値に定数を乗じて80ビット値(1031)を求め、それと下位64ビット値との排他的論理和を算出することによって、CRC計算の対象データのビット数を80に減らす。次に、CPU133は、PCLMULQDQ命令によって、その上位32ビット値に定数を乗じて48ビット値(1032)を求め、それと80ビット値(1031)の下位48ビットとの排他的論理和を算出することによって、CRC計算の対象データのビット数を48に減らす。その結果をRとする。最後に、CPU133は、Barrett Reductionと呼ばれるアルゴリズムに基づいて、48ビットのRから16ビットのCRCを算出する。具体的には、CPU133が、式(3)、(4)、(5)、(6)を順で演算を行う。
【0144】
【0145】
【0146】
【0147】
【0148】
ここで、R(x)はRからなる多項式を表し、Floorは多項式からxの0次以上の項を残す操作を表し、記号「+」はビット単位の排他的論理和を表す。C(x)が示す16ビット値が求めるCRCである。このように、Barrett Reductionでも、PCLMULQDQ命令が適用可能なキャリーレス乗算が2回使用される。
【0149】
CPU133は、PCLMULQDQ命令をサポートしており、さらに、それをVector化したVPCLMULQDQ命令もサポートしている。
【0150】
CPU133は、VPCLMULQDQ命令を用いて4つのデータブロックのCRC計算を並列で実行する。具体的には、4つの512バイトのデータブロックのCRC計算を並列で実行する。
【0151】
図11A及び
図11Bは、実施例1のストレージシステム120におけるCRC計算の並列方法を示す図である。この方法は、
図4のステップS405とステップS406、
図5のステップS503とステップS504におけるCRC計算に適用される。
【0152】
図11Aは、CPU133による4つのデータブロックのCRC計算の並列処理における、バイナリデータの短縮処理(
図10Bの処理全体に相当)の方法を示す。
【0153】
Zmmレジスタ1111は、
図7~9を用いて説明した4つのデータブロックのXTS暗号化/復号の並列処理において、暗号化/復号の入力データ又は暗号化/復号の出力データの構成要素である、4つのデータブロックに対応する16バイトのデータを保持するレジスタである。具体的には、XTS暗号化/復号の入力データの場合はZmm0レジスタ、Zmm1レジスタ、Zmm2レジスタ、又はZmm3レジスタを示し、XTS暗号化/復号の出力データの場合はZmm4レジスタ、Zmm5レジスタ、Zmm6レジスタ、又はZmm7レジスタを示す。
【0154】
本発明は、Zmmレジスタ1111がXTS暗号化/復号のために保持しているデータを用いて、CRC計算の対象データの短縮処理を並列で行う。Zmmレジスタ1111の16バイトのデータは、
図10BのH(x)とL(x)が示す2つの64ビット値を並べた128ビット値に相当する。
【0155】
Zmmレジスタ1112は、短縮処理の途中、又は短縮処理後に得られる、4つのデータブロックの128ビットのバイナリデータを保持するレジスタである。具体的には、XTS暗号化/復号の入力データのCRC計算の場合はZmm10レジスタを示し、XTS暗号化/復号の出力データのCRC計算の場合はZmm9レジスタを示す。
【0156】
まず、CPU133は、(PP1)VPCLMULQDQ命令を実行することによって、Zmmレジスタ1111の16バイトのデータの上位64ビットに同じ定数を乗じる。演算結果として128ビットのデータが4つ出力される。次に、CPU133は、(PP2)VPCLMULQDQ命令を実行することによって、Zmmレジスタの各16バイトのデータの下位64ビットに同じ定数を乗じる。演算結果として128ビットのデーが4つ出力される。CPU133は、(PP3)これら2つの結果とZmmレジスタ1112との排他的論理和を算出し、その結果を再びZmmレジスタ1112に格納する。(PP1)~(PP3)の処理が1回の短縮処理に対応する。
【0157】
CPU133は、4つのデータブロックのXTS暗号化/復号の並列処理において、Zmmレジスタ1111に次の16バイトのデータが格納された場合、(PP1)~(PP3)で示す短縮処理を繰り返す。CPU133は、短縮処理を31回実行し、Zmmレジスタ1111にブロック最後の16バイトのデータ(つまり、Group7の4つ目)が格納された場合、Zmmレジスタ1111の値とZmmレジスタ1112との排他的論理和を算出し、その結果を再びZmmレジスタ1112に格納する。
【0158】
図11Bは、CPU133による4ブロックデータのCRC計算の並列処理における、最終計算(
図10Bの最終処理)の方法を示す。
【0159】
Zmmレジスタ1112は、4つのデータブロックの、最終計算に用いる128ビットのバイナリデータを保持している。本発明はCRC計算の最終計算を、このZmmレジスタ1112に保持したデータを利用して並列で行う。ここで並列の最終計算1121は、
図10Bの最終計算に用いるCPU命令を、対応するVector命令に置き換えて実装する。すなわち、XOR命令はVector XOR命令、PCLMULQDQ命令はVPCLMULQDQ命令に置き換える。Barrett Reductionを構成する各命令も同様に、それに対応するVector命令に置き換える。最終的なCRC計算の結果は、Zmmレジスタ1112に格納する。具体的には、XTS暗号化/復号の入力データのCRC計算の場合はZmm10レジスタを示し、XTS暗号化/復号の出力データのCRC計算の場合はZmm9レジスタを示す。4つのCRC計算の結果が格納される位置は、Zmmレジスタ1112の各16バイトの先頭16ビットである。なお、CRC計算の完了時点で、各16バイトの残り部分(112ビット)は未使用である。
【0160】
図12A及び
図12Bは、実施例1のストレージシステム120における4つのデータブロックのDIFの並列的な生成方法を説明する図である。
【0161】
図12Aは、
図11に示す方法により、XTS暗号化/復号の出力データから並列的に計算された4つのCRCを保持するZmm9レジスタに対して、CPU133が各CRCの後続部に1バイト(8ビット)のWSCを並列的に付加する方法を示す。
【0162】
付加するWSCは、
図3を用いて説明したように、先頭ブロックのHEAD301は1、非先頭ブロックのHEAD301は0とし、終端ブロックのTAIL302は1、非終端ブロックのTAIL302は0とし、すべてのデータブロックのSQNは共通の6ビット値とする。この設定規則に基づくWSCを含む512ビットパタン(ただし、ATAG(1)233、243の各8ビットには00hが設定される。)を保持するZmm11レジスタを用意し、これをZmm9レジスタの各CRCの後の8ビット部分のみに重ね書きする。重ね書きには、例えば、ビットマスク付きMOV命令をVector化した命令を使用する。その結果、Zmm9レジスタはCRCとWSCの組を4つ格納される。
【0163】
例えば、ライト/リードするユーザデータのサイズが128Kバイト(256ブロック)の場合、WSCの付加の並列処理は64回行う必要がある。1回目の付加で、先頭ブロックのDIFのWSCのHEAD301には1が設定され、64回目の付加で、終端ブロックのDIFのWSCのTAIL302には1が設定される。その他のHEAD301とTAIL302には0が設定される。
【0164】
図12Bは、CPU133がZmm9レジスタに対して、各ATAG(1)233、243の後続部に4バイトのRTAG234、244を並列的に付加する方法を示す。
【0165】
付加するRTAG234、244は、昇順に並んだ4つのデータブロックのアドレスである。この設定規則に基づくRTAG234、244を含む512ビットパタンを格納するZmm12レジスタを用意し、これをZmm9レジスタの各ATAG(1)233、234の後の4バイト部分のみに重ね書きする。重ね書きには、例えば、ビットマスク付きMOV命令をVector化した命令を使用する。その結果、Zmm9レジスタにはDIF(つまり、CRC、WSC、RTAGの組)が4つ格納される。これは
図9において、付加する4つのDIFを保持するZmm9レジスタに相当する。このZmm9レジスタからDRAM134への格納命令によって、4つの出力データブロックの各終端にDIFが付加される。
【0166】
以上に述べた、並列的なDIF生成の方法は、
図4のS411及び
図5のS509に適用する。
【0167】
図13A、
図13B、及び
図13Cは、実施例1のストレージシステム120における4つのデータブロックのDIFの並列的な検査方法を説明する図である。
【0168】
図13A、
図13B、及び
図13Cにおいて、Zmm8レジスタは、
図8でXTS暗号化/復号の入力データの各データブロックに後続するDIF(合わせて4つ)を格納するZmmレジスタである。
【0169】
図13Aは、Zmm8レジスタに対を用いた、4つのCRCの並列的な検査方法を示す。
【0170】
図11に示す方法により、Zmm10レジスタは、XTS暗号化/復号の入力データから並列的に計算された4つのCRCを保持する。これらの各CRCが、Zmm8レジスタに格納される各CRCと一致するか否かを並列に検査する。当該検査には、例えば、ビットマスク付きCOMPARE命令をVector化した命令が使用される。その結果、4つの比較結果がすべて一致となればCRC検査は成功である。この検査方法は、
図4のステップS408及び
図5のステップS506に適用する。
【0171】
図13Bは、Zmm8レジスタを用いた4つのWSCの並列的な検査方法を示す。
【0172】
Zmm13レジスタは、下位48バイトにはZmm8レジスタの内容を16バイト右方向にシフトしたもの、上位16バイトには前回検査した第4のブロック(つまり、アドレスが4N+3)のDIFを保持する。これらの各WSCのSQNが、Zmm8レジスタのWSCのSQNと一致するか否かを並列に検査する。当該検査には、例えば、ビットマスク付きCOMPARE命令をVector化した命令を使用される。
【0173】
ただし、
図3Cの表320に示す(R3)、(R4)の条件に合わないWSCのSQNの検査は行われない。この場合、例えば、COMPARE命令のマスクパラメタを部分的にゼロにする。
【0174】
WSCの検査後に、Zmm8レジスタ上の、第4のブロックのDIFを含む下位16バイトを次回のWSC検査のためにレジスタに退避する。その結果、有効なSQN比較(最大で4つ)の結果がすべて一致すればWSC検査は成功である。このように、Zmm13レジスタに、1ブロック分シフトしたWSCを保持することにより、1回のVector COMPARE命令を実行することによって、自WSCと前WSCとのSQN比較を4つ同時に実行できる。この検査方法は、
図5のステップS507に適用する。
【0175】
例えば、ライト/リードするユーザデータのサイズが128Kバイト(256ブロック)の場合、4つの暗号化データブロックのWSCの並列検査は64回行う必要がある。Zmm8レジスタ上の、第4のブロックのDIFを含む下位16バイトは、1回目~63回目の検査で退避され、2回目~64回目の検査でZmm13レジスタの上位16バイトに転送される。1回目の検査でZmm13レジスタの上位16バイトには何も転送しないが、最初のWSCは検査されないため、この場所には無効な値が含まれていてよい。
【0176】
図13Cは、Zmm8レジスタを用いた4つのRTAGの並列的な検査方法を示す。
【0177】
Zmm14レジスタは、昇順に並んだ4つのアドレスを保持する。これらの各アドレスが、Zmm8レジスタ上の対応するRTAGと一致するかを並列に検査する。当該検査には、例えば、ビットマスク付きCOMPARE命令をVector化した命令が使用される。その結果、4つのアドレスがすべて一致となればRTAG検査は成功である。この検査方法は、
図4のステップS409及び
図5のステップS508に適用する。
【0178】
図12と
図13において、DIFの検査/生成に用いられるZmmレジスタの番号(Zmm11レジスタ、Zmm12レジスタ、Zmm13レジスタ、Zmm14レジスタ)は一例であって、他のレジスタ番号でもよい。
【0179】
以上、本発明を適用したストレージシステム120のCPU133は、ライト/リード処理において、512ビットのZmmレジスタとVector命令とを用い、XTS暗号化/復号、CRC計算、DIF生成、及びDIF検査を、並列で実行できる。また、上に述べたZmmレジスタの使い方に従えば、ZmmレジスタとDRAM134との間のロード/格納の回数は必要最小限に抑えられ、データ演算サイクル以外のオーバヘッドサイクルが最小化される。
【0180】
なお、ライト/リードするユーザデータのサイズが、2048Uバイト(Uは整数)の場合、4ブロック並列のライト/リード処理をU回行う必要があるが、ステップS401のデータ受信、ステップS412のデータライト、ステップS501のデータリード、ステップS512のデータ送信は、それぞれU回に分けて実施せず、1回にまとめて実施してもよい。
【0181】
なお、本発明は、4つの処理データを保持する512ビットのZmmレジスタの代わりに、2つの処理データを保持する256ビットのYmmレジスタを用いてもよい。その場合、上に述べた方法と同様に、Ymmレジスタに対するVector命令を適用して、XTS暗号化/復号、CRC計算、DIF生成、DIF検査を、すべて2ブロック並列で処理することができる。
【0182】
本発明は、ホスト計算機110から受信したユーザデータを暗号化してストレージデバイスに格納するライト処理、及びストレージデバイスに格納された暗号化ユーザデータを復号してホスト計算機110に送信するリード処理を、従来よりも高速に実行することができるという効果を奏する。
【0183】
以上、本発明の一実施例を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
【符号の説明】
【0184】
110 ホスト計算機
120 ストレージシステム
130 ストレージコントローラ
131 FE I/F
132 BE I/F
133 CPU
134 DRAM
140 ストレージデバイス