(57)【要約】【課題】暗号化速度を高速化することができる暗号演算装置及びメモリシステムを提供する。【解決手段】実施形態の暗号演算装置は、複数の暗号コアと、割当部と、連接部と、出力制御部と、を備える。複数の暗号コアは、ＣＴＳフラグがオンの場合に共通鍵を用いてＣＴＳを利用した共通鍵暗号アルゴリズムの演算を行う。割当部は、ＣＴＳ信号が入力された場合に、第１入力データを複数の暗号コアのいずれかに割り当て、第１入力データを割り当てた所定暗号コアのＣＴＳフラグをオンする。連接部は、第１入力データの演算過程で生成された演算データと第１入力データの次に入力される第２入力データとを連接して連接データを生成する。出力制御部は、所定暗号コアへの連接データの出力制御、連接データの演算結果である第１暗号化データの出力制御、及び第１入力データの演算結果である第２暗号化データの出力制御を行って、所定暗号コアのＣＴＳフラグをオフする。【選択図】図２
2012068351.tif 000002
【特許請求の範囲】
【請求項１】
ＣＴＳ（ciphertext  stealing）を利用した演算を行うか否かを示すＣＴＳフラグを記憶するフラグ記憶部を有し、前記ＣＴＳフラグがオンに設定されている場合に、共通鍵を用いて前記ＣＴＳを利用した共通鍵暗号アルゴリズムの演算を行う複数の暗号コアと、
ブロック長のデータである第１入力データの次に入力される第２入力データがブロック長未満であることを示すＣＴＳ信号が入力された場合に、前記第１入力データを前記複数の暗号コアのいずれかに割り当て、前記第１入力データを割り当てた暗号コアである所定暗号コアの前記ＣＴＳフラグをオンに設定する割当部と、
前記所定暗号コアによる前記第１入力データの演算過程で生成された演算データと前記第２入力データとを連接して、連接データを生成する連接部と、
前記所定暗号コアへの前記連接データの出力制御、前記所定暗号コアによる前記連接データの演算結果である第１暗号化データの出力制御、及び前記所定暗号コアによる前記第１入力データの演算結果である第２暗号化データの出力制御を行って、前記所定暗号コアの前記ＣＴＳフラグをオフに設定する出力制御部と、
を備えることを特徴とする暗号演算装置。
【請求項２】
レジスタを更に備え、
前記割当部は、前記第２入力データを前記レジスタに記憶させ、
前記所定暗号コアは、前記第１入力データに対して前記ＣＴＳを利用した共通鍵暗号アルゴリズムの演算を行い、前記演算データ及び前記第２暗号化データを生成し、
前記出力制御部は、前記演算データ及び前記レジスタに記憶されている前記第２入力データの前記連接部への出力制御を行い、
前記所定暗号コアは、前記連接データに対して前記ＣＴＳを利用した共通鍵暗号アルゴリズムの演算を行い、前記第１暗号化データを生成することを特徴とする請求項１に記載の暗号演算装置。
【請求項３】
前記出力制御部は、前記第２入力データが出力された前記レジスタに前記第２暗号化データを記憶させ、前記第１暗号化データの出力制御を行った後に、前記レジスタに記憶されている前記第２暗号化データの出力制御を行うことを特徴とする請求項２に記載の暗号演算装置。
【請求項４】
前記割当部は、前記第２入力データのデータ長を前記連接部に出力し、
前記連接部は、前記データ長に従い、前記演算データと前記第２入力データとを連接することを特徴とする請求項１〜３のいずれか１つに記載の暗号演算装置。
【請求項５】
請求項１〜４のいずれか１つに記載の暗号演算装置と、
前記暗号演算装置から出力された暗号化データを記憶するメモリと、
を備えることを特徴とするメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、暗号演算装置及びメモリシステムに関する。
【背景技術】
【０００２】
共通鍵方式の暗号アルゴリズムは、予め決められたブロック長のデータを秘匿化することを目的に設計されたものであり、そのままではブロック長よりも長いデータの秘匿化を行うことができない。このため、共通鍵方式の暗号アルゴリズムを用いてブロック長より長いデータの秘匿化を行えるような暗号演算方法や、元のデータの改ざん検出のための認証子を生成する暗号演算方法などが開発されている。このような、共通鍵暗号方式を基本として様々な用途に向いた暗号演算方法は、暗号利用モードと呼ばれる。
【０００３】
ストレージデバイスに保存するデータの暗号利用モードについては、ＩＥＥＥ  Ｐ１６１９−Ｓｔｄ−２００７に開示されている。また、ＩＥＥＥ  Ｐ１６１９−Ｓｔｄ−２００７に開示されている暗号利用モードは、暗号利用モードを定めたＦＩＰＳ  ＰＵＢ  ＳＰ８００−３８シリーズにＳＰ８００−３８Ｅ（ＸＴＳ  ｍｏｄｅ）として採用されている。
【０００４】
ところで、共通鍵暗号方式では、ブロック長のデータを演算して暗号化するように設計されているため、暗号化対象のデータをブロック長に分割した入力データ毎に演算することになるが、暗号化対象のデータがブロック長の整数倍でない場合、最後の入力データは、ブロック長未満のデータとなる。このため、ＸＴＳ  ｍｏｄｅにおいては、ＲＦＣ２０４０で提案されたＣＴＳ（ciphertext  stealing）という演算方法を利用して、ブロック長未満のデータを演算し、暗号化する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】ＩＥＥＥ  Ｐ１６１９−Ｓｔｄ−２００７
【非特許文献２】ＦＩＰＳ  ＰＵＢ  ＳＰ８００−３８Ｅ
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＣＴＳを利用した演算方法では、ブロック長未満のデータの演算と、当該ブロック長未満のデータの直前に演算するブロック長のデータの演算との間に、依存関係が生じるため、ブロック長のデータの演算が所定の段階まで終了しなければ、ブロック長未満のデータの演算を開始することができない。
【０００７】
このため、複数の暗号コアを用いて入力データを並列に演算して暗号化する場合、ブロック長のデータが割り当てられた暗号コアによる演算が所定の段階まで終了するまで、ブロック長未満のデータが割り当てられた暗号コアは待ち状態となり、並列して暗号化を行うことができず、暗号化速度が遅延してしまう。
【課題を解決するための手段】
【０００８】
実施形態の暗号演算装置は、複数の暗号コアと、割当部と、連接部と、出力制御部と、を備える。複数の暗号コアは、ＣＴＳ（ciphertext  stealing）を利用した演算を行うか否かを示すＣＴＳフラグを記憶するフラグ記憶部を有し、ＣＴＳフラグがオンに設定されている場合に、共通鍵を用いてＣＴＳを利用した共通鍵暗号アルゴリズムの演算を行う。割当部は、ブロック長のデータである第１入力データの次に入力される第２入力データがブロック長未満であることを示すＣＴＳ信号が入力された場合に、前記第１入力データを前記複数の暗号コアのいずれかに割り当て、前記第１入力データを割り当てた暗号コアである所定暗号コアの前記ＣＴＳフラグをオンに設定する。連接部は、前記所定暗号コアによる前記第１入力データの演算過程で生成された演算データと前記第２入力データとを連接して、連接データを生成する。出力制御部は、前記所定暗号コアへの前記連接データの出力制御、前記所定暗号コアによる前記連接データの演算結果である第１暗号化データの出力制御、及び前記所定暗号コアによる前記第１入力データの演算結果である第２暗号化データの出力制御を行って、前記所定暗号コアの前記ＣＴＳフラグをオフに設定する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施形態のメモリシステムの構成例を示すブロック図。
【図２】図２は、本実施形態の暗号演算装置の構成例を示すブロック図。
【図３】図３は、本実施形態の割当処理例を示すフローチャート。
【図４】図４は、本実施形態の通常の共通鍵暗号アルゴリズムの演算例を示すフローチャート。
【図５】図５は、本実施形態のＣＴＳを利用した共通鍵暗号アルゴリズムの前段の演算例を示すフローチャート。
【図６】図６は、本実施形態の出力制御及び連接処理例を示すフローチャート。
【図７】図７は、本実施形態のＣＴＳを利用した共通鍵暗号アルゴリズムの後段の演算例を示すフローチャート。
【図８】図８は、本実施形態の暗号コア及びレジスタへの入力データの割当例を示す図。
【図９】図９は、本実施形態の暗号コア及びレジスタからの暗号化データの出力例を示す図。
【図１０】図１０は、暗号コアへの入力データの割当の比較例を示す図。
【図１１】図１１は、暗号コアからの暗号化データの出力の比較例を示す図。
【発明を実施するための形態】
【００１０】
まず、本実施形態の暗号演算装置を備えるメモリシステムの構成について説明する。
【００１１】
図１は、本実施形態のメモリシステム１の構成の一例を示すブロック図である。メモリシステム１は、ホスト装置２からの書込要求に従って書込対象データを暗号化して記憶したり、暗号化して記憶している読出対象データをホスト装置２からの読出要求に従って復号化して読み出したりするものである。メモリシステム１は、例えば、ＮＡＮＤ型半導体メモリ装置などにより実現できる。メモリシステム１は、図１に示すように、暗号演算装置１０と、メモリ５０と、インタフェース部６０とを、備えている。ホスト装置２は、メモリシステム１が内蔵又は外付けされるコンピュータである。メモリシステム１への書込要求や読出要求は、ホスト装置２のＯＳ（Operating  System）により行われる。
【００１２】
暗号演算装置１０は、ホスト装置２からの書込対象データを暗号化したり、メモリ５０に暗号化して記憶されている読出対象データを復号化したりする演算回路である。本実施形態では、書込対象データ及び読出対象データがブロック単位で暗号演算装置１０に入力され、暗号演算装置１０は、ブロック単位で書込対象データの暗号化及び読出対象データの復号化を行うものとする。本実施形態では、１ブロックを１２８ビットとして説明するが、１ブロックの大きさは、これに限定されるものではない。なお、暗号演算装置１０の詳細については、後述する。
【００１３】
メモリ５０は、暗号演算装置１０により暗号化されたデータを記憶する不揮発性のメモリであり、例えば、ＮＡＮＤ型フラッシュメモリなどにより実現できる。
【００１４】
インタフェース部６０は、ホスト装置２からの要求に従ってメモリシステム１の各部を制御する回路である。具体的には、インタフェース部６０は、ホスト装置２から書込対象データの書込要求を受け付けると、受け付けた書込対象データをブロック長の入力データに分割し、分割した入力データを暗号演算装置１０に順次出力して暗号化させる。そしてインタフェース部６０は、暗号演算装置１０から入力データを暗号化した暗号化データの入力を順次受け付け、受け付けた暗号化データをメモリ５０に出力して記憶させる。また、インタフェース部６０は、ホスト装置２から読出要求を受け付けると、読出対象データをブロック単位でメモリ５０から読み出し、暗号演算装置１０に順次出力して復号化させる。そしてインタフェース部６０は、暗号演算装置１０から復号化された読出対象データの入力を順次受け付け、復号化された読出対象データをホスト装置２に返却する。
【００１５】
図２は、本実施形態の暗号演算装置１０の構成の一例を示すブロック図である。図２に示すように、暗号演算装置１０は、暗号コア２０−１〜２０−４と、暗号演算制御部３０と、を備えている。なお本実施形態では、暗号コアの数が４つである場合を例に取り説明するが、暗号コアの数は、２つ以上であればいくつであってもよい。また以下では、暗号コア２０−１〜２０−４を各々区別する必要がない場合、単に暗号コア２０と称する場合がある。また、図２に示す例では、暗号演算装置１０の各部と接続される線は、データ信号が流れるデータ線を示しており、制御信号が流れる制御線については記載を省略している。
【００１６】
暗号コア２０−１〜２０−４の各々は、鍵データ信号線４１から入力される共通鍵を用いて、暗号演算制御部３０から入力される入力データに対して共通鍵暗号アルゴリズムの演算を行う。そして暗号コア２０−１〜２０−４の各々は、入力データの演算結果である暗号化データを暗号演算制御部３０へ出力する。ここで、暗号コア２０−１〜２０−４は、暗号演算制御部３０から順次入力される複数の入力データを並列して暗号化するものとする。なお本実施形態では、暗号コア２０の暗号化方式がＸＴＳモードであり、暗号コア２０の演算に用いる共通鍵暗号アルゴリズムがＡＥＳ（Advanced  Encryption  Standard）である場合を例に取り説明するが、これに限定されるものではない。また鍵データ信号線４１は、インタフェース部６０と接続されている。つまり、共通鍵は、インタフェース部６０から鍵データ信号線４１を介して暗号コア２０−１〜２０−４に入力される。
【００１７】
暗号コア２０−１〜２０−４は、それぞれ、ＣＴＳ（ciphertext  stealing）を利用した演算を行うか否かを示すＣＴＳフラグを記憶するフラグ記憶部２２−１〜２２−４を有している。暗号コア２０−１〜２０−４の各々は、自身のＣＴＳフラグがオフに設定されていれば、通常の共通鍵暗号アルゴリズムの演算を行う。一方、暗号コア２０−１〜２０−４の各々は、自身のＣＴＳフラグがオンに設定されていれば、ＣＴＳを利用した共通鍵暗号アルゴリズムの演算を行う。
【００１８】
暗号演算制御部３０は、暗号コア２０−１〜２０−４の制御や暗号コア２０−１〜２０−４の演算結果の出力制御など行う回路であり、セレクタ３１と、レジスタ３２と、連接部３３と、セレクタ３４と、セレクタ３５と、割当部３６と、出力制御部３７とを、備える。
【００１９】
セレクタ３１は、割当部３６及び出力制御部３７により制御され、入力データ信号線４２から入力される入力データや暗号コア２０−１〜２０−４から入力される演算結果の出力先を、レジスタ３２、連接部３３、及びセレクタ３５のいずれかに選択する。そしてセレクタ３１は、入力された入力データや演算結果を、選択した出力先に出力する。また入力データ信号線４２は、インタフェース部６０と接続されている。つまり、入力データは、インタフェース部６０から入力データ信号線４２を介してセレクタ３１に入力される。なお、入力データ信号線４２から入力される入力データは、ブロック長又はブロック長未満のデータである。
【００２０】
レジスタ３２は、セレクタ３１から入力される入力データや演算結果を記憶するものである。
【００２１】
連接部３３は、割当部３６及び出力制御部３７により制御され、セレクタ３１から入力される演算結果と、レジスタ３２に記憶されている入力データとを連接して、連接データを生成する回路である。
【００２２】
セレクタ３４は、割当部３６又は出力制御部３７により制御され、入力データ信号線４２から入力される入力データや連接部３３から入力される連接データの出力先を、暗号コア２０−１〜２０−４のいずれかに選択する。そしてセレクタ３４は、入力された入力データや連接データを、選択した出力先に出力する。
【００２３】
セレクタ３５は、出力制御部３７により制御され、セレクタ３１から入力される演算結果やレジスタ３２から入力される演算結果である暗号化データを出力データ信号線４３から出力する。なお出力データ信号線４３は、インタフェース部６０と接続されている。つまり、暗号化データは、セレクタ３５から出力データ信号線４３を介してインタフェース部６０に出力される。
【００２４】
割当部３６は、入力データ信号線４２から入力される入力データを暗号コア２０−１〜２０−４のいずれかに割り当てる回路である。そして割当部３６は、セレクタ３４を制御して、割り当てを行った暗号コア２０−１〜２０−４のいずれかに入力データを出力する。なお、割当部３６は、入力データをラウンドロビン方式で暗号コア２０−１〜２０−４に順番に割り当てる。
【００２５】
また割当部３６は、入力データ信号線４２からブロック長の入力データ（第１入力データの一例）の次に入力される次入力データ（第２入力データの一例）がブロック長未満であることを示すＣＴＳ信号がＣＴＳ信号線４４から入力された場合に、入力データ信号線４２から次入力データの前に入力されているブロック長の入力データを暗号コア２０−１〜２０−４のいずれかに割り当てる。そして割当部３６は、入力データを割り当てた暗号コアである所定暗号コアのＣＴＳフラグをオンに設定する。更に割当部３６は、入力データ信号線４２から入力された次入力データをレジスタ３２に記憶させ、データ長信号線４５から入力される次入力データのデータ長を連接部３３に出力するとともに、セレクタ３４を制御して、所定暗号コアに出力する。なおＣＴＳ信号線４４及びデータ長信号線４５は、インタフェース部６０と接続されている。つまり、ＣＴＳ信号は、インタフェース部６０からＣＴＳ信号線４４を介して割当部３６に入力され、次入力データのデータ長は、インタフェース部６０からデータ長信号線４５を介して割当部３６に入力される。
【００２６】
出力制御部３７は、暗号コア２０から入力される演算結果の出力制御などを行う回路である。出力制御部３７は、ＣＴＳフラグがオフに設定されている暗号コア２０から演算結果である暗号化データが暗号演算制御部３０に入力された場合、セレクタ３１を制御して、入力された暗号化データをセレクタ３５に出力し、出力データ信号線４３から出力する。なお、暗号コア２０による演算が終了すると、暗号コア２０から出力制御部３７へ終了信号が出力されるため、出力制御部３７は、終了信号の出力元の暗号コア２０のＣＴＳフラグを確認することで、ＣＴＳフラグがオフに設定されている暗号コア２０からの入力であるか否かを確認する。
【００２７】
また出力制御部３７は、前述のＣＴＳフラグがオンに設定されている所定暗号コアから入力データの演算過程で生成された演算データが暗号演算制御部３０に入力された場合、セレクタ３１を制御して、入力された演算データを連接部３３に出力するとともに、レジスタ３２に記憶されている次入力データを連接部３３に出力する。そして出力制御部３７は、連接部３３により生成された連接データを所定暗号コアに出力する。
【００２８】
また出力制御部３７は、所定暗号コアから入力データの演算結果である暗号化データ（第２暗号化データの一例）が暗号演算制御部３０に入力された場合、セレクタ３１を制御して、入力された暗号化データをレジスタ３２に出力し、記憶させる。
【００２９】
また出力制御部３７は、所定暗号コアから連接データの演算結果である暗号化データ（第１暗号化データの一例）が暗号演算制御部３０に入力された場合、セレクタ３１を制御して、入力された暗号化データをセレクタ３５に出力し、出力データ信号線４３から出力する。その後、出力制御部３７は、レジスタ３２に記憶されている暗号化データをセレクタ３５に出力して、出力データ信号線４３から出力する。そして、出力制御部３７は、所定暗号コアのＣＴＳフラグをオフに設定する。
【００３０】
次に、本実施形態の暗号演算装置の動作について説明する。
【００３１】
なお以下では、ホスト装置２から書込要求が行われる書込対象データはインタフェース部６０によりｍ＋１個のブロック長の入力データＰj（０≦ｊ≦ｍ）に分割され、入力データ信号線４２から順次入力データＰｊが暗号演算装置１０に入力されるものとする。但し、最後の入力データＰｍはブロック長未満であるものとする。
【００３２】
図３は、本実施形態の割当部３６で行われる割当処理の手順の流れの一例を示すフローチャートである。
【００３３】
まず、割当部３６は、ＣＴＳ信号線４４からＣＴＳ信号が入力されない場合、入力データ信号線４２から次に入力される次入力データＰｊ＋１（０≦ｊ≦ｍ−２）がブロック長であると判定する（ステップＳ１００でＮｏ）。この場合、割当部３６は、次入力データＰｊ＋１の前に入力されている入力データＰｊをラウンドロビン方式で暗号コア２０−１〜２０−４のいずれかに割り当てる（ステップＳ１０２）。そして、ステップＳ１００に戻る。
【００３４】
一方、割当部３６は、ＣＴＳ信号線４４からＣＴＳ信号が入力された場合、入力データ信号線４２から次に入力される次入力データＰｍがブロック長未満であると判定する（ステップＳ１００でＹｅｓ）。この場合、割当部３６は、次入力データＰｍの前に入力されている入力データＰｍ−１をラウンドロビン方式で暗号コア２０−１〜２０−４のいずれかに割り当て、入力データＰｍ−１を割り当てた暗号コアである所定暗号コアのＣＴＳフラグをオンに設定する（ステップＳ１０４）。ここでは、割当部３６は、入力データＰｍ−１を暗号コア２０−２に割り当てるものとする。つまり、所定暗号コアは、暗号コア２０−２であるものとする。
【００３５】
続いて、割当部３６は、入力データ信号線４２から入力された次入力データＰｍをレジスタ３２に記憶させるとともに、データ長信号線４５から入力される次入力データＰｍのデータ長を連接部３３に出力する（ステップＳ１０６）。また割当部３６は、セレクタ３４を制御して、次入力データＰｍのデータ長を暗号コア２０−２にも出力する。そして割当部３６は、処理を終了する。
【００３６】
なお、インタフェース部６０がホスト装置２から新たな書込要求を受け付けると、入力データ信号線４２から新たな入力データが入力されるため、割当部３６は、ステップＳ１００から処理を再開する。
【００３７】
図４は、本実施形態の暗号コア２０で行われる通常の共通鍵暗号アルゴリズムの演算、即ちＣＴＳを利用しない共通鍵暗号アルゴリズムの演算の手順の流れの一例を示すフローチャートである。図４に示す処理は、図３のステップＳ１０２で割当部３６により入力データが割り当てられた暗号コア２０で行われる。
【００３８】
まず、暗号コア２０は、ｊ（０≦ｊ≦ｍ−２）番目のブロックの入力データＰｊとマスク値Ｔｊとの排他的論理和ＰＰを算出する（ステップＳ２００）。ここで、マスク値Ｔｊは、ｊ＝０の場合、共通鍵Ｋｅｙ２及びセクター番号ｉ（Ｔｅａｋ  Ｖａｌｕｅ）を数式（１）に代入することにより算出され、１≦ｊ≦ｍ−２の場合、数式（２）により算出される。なお、αjは、ガロア体の原始元を示す。
【００３９】
Ｔ０＝ＡＥＳｅｎｃ（Ｋｅｙ２，ｉ）×α０      …（１）
【００４０】
Ｔｊ＝Ｔｊ−1×αｊ−1      …（２）
【００４１】
続いて、暗号コア２０は、算出した排他的論理和ＰＰと共通鍵Ｋｅｙ１を数式（３）に代入して、暗号化値ＣＣを算出する（ステップＳ２０２）。
【００４２】
ＣＣ＝ＡＥＳｅｎｃ（Ｋｅｙ１，ＰＰ）      …（３）
【００４３】
続いて、暗号コア２０は、算出した暗号化値ＣＣとマスク値Ｔｊとの排他的論理和である暗号化データＣｊを算出し、暗号演算制御部３０へ出力する（ステップＳ２０４）。
【００４４】
なお、図４に示す処理は、暗号コア２０−１〜２０−４で並列して行われる。
【００４５】
図５は、本実施形態の暗号コア２０−２で行われるＣＴＳを利用した共通鍵暗号アルゴリズムの演算の前段の手順の流れの一例を示すフローチャートである。図５に示す処理は、図３のステップＳ１０４で割当部３６により入力データが割り当てられた暗号コア２０−２で行われる。
【００４６】
まず、暗号コア２０−２は、ｍ−１番目のブロックの入力データＰｍ−１とマスク値Ｔｍ−１との排他的論理和ＰＰを算出する（ステップＳ２１０）。なお、マスク値Ｔｍ−１は、数式（４）により算出される。
【００４７】
Ｔｍ−１＝Ｔｍ−２×αｍ−２      …（４）
【００４８】
続いて、暗号コア２０−２は、算出した排他的論理和ＰＰと共通鍵Ｋｅｙ１を数式（３）に代入して、暗号化値ＣＣを算出し、暗号演算制御部３０へ出力する（ステップＳ２１２）。
【００４９】
続いて、暗号コア２０−２は、算出した暗号化値ＣＣとマスク値Ｔｍ−１との排他的論理和のうちの次入力データＰｍのデータ長分の上位ビットを暗号化データＣｍとして算出し、暗号演算制御部３０へ出力する（ステップＳ２１４）。
【００５０】
以降の後段の処理については後述する。
【００５１】
図６は、本実施形態の出力制御部３７で行われる出力制御及び連接部３３で行われる連接処理の手順の流れの一例を示すフローチャートである。
【００５２】
まず、出力制御部３７は、ＣＴＳフラグがオフに設定されている暗号コア２０から入力データＰｊ（０≦ｊ≦ｍ−２）の演算結果である暗号化データＣｊが暗号演算制御部３０に入力された場合（ステップＳ３００でＮｏ）、セレクタ３１を制御して、入力された暗号化データＣｊをセレクタ３５に出力し、出力データ信号線４３から出力する（ステップＳ３０２）。そして、ステップＳ３００に戻る。
【００５３】
一方、出力制御部３７は、ＣＴＳフラグがオンに設定されている暗号コア２０−２から入力データＰｍ−１の演算過程で生成された演算データである暗号化値ＣＣが暗号演算制御部３０に入力された場合（ステップＳ３００でＹｅｓ）、セレクタ３１を制御して、入力された暗号化値ＣＣを連接部３３に出力するとともに、レジスタ３２に記憶されている次入力データＰｍを連接部３３に出力する。そして連接部３３は、次入力データＰｍに、暗号化値ＣＣとマスク値Ｔｍ−１との排他的論理和のうちの、ブロック長から次入力データＰｍのデータ長を引いた長さのデータを連接し、この連接してできたデータとマスク値Ｔｍ−１との排他的論理和ＰＰを算出する（ステップＳ３０４）。なお、マスク値Ｔｍは、数式（５）により算出される。
【００５４】
Ｔｍ＝Ｔｍ×αｍ      …（５）
【００５５】
続いて、出力制御部３７は、連接部３３により算出された排他的論理和ＰＰをＣＴＳフラグがオンに設定されている暗号コア２０−２に出力するとともに、暗号コア２０−２から入力データＰｍ−１の演算結果である暗号化データＣｍが暗号演算制御部３０に入力されると、セレクタ３１を制御して、入力された暗号化データＣｍをレジスタ３２に出力し、記憶させる（ステップＳ３０６）。
【００５６】
続いて、出力制御部３７は、ＣＴＳフラグがオンに設定されている暗号コア２０−２から排他的論理和ＰＰ（次入力データＰｍ）の演算結果である暗号化データＣｍ−１が暗号演算制御部３０に入力されると、セレクタ３１を制御して、入力された暗号化データＣｍ−１をセレクタ３５に出力し、出力データ信号線４３から出力する（ステップＳ３０８）。
【００５７】
続いて、出力制御部３７は、レジスタ３２に記憶されている暗号化データＣｍをセレクタ３５に出力して、出力データ信号線４３から出力する。そして、出力制御部３７は、暗号コア２０−２のＣＴＳフラグをオフに設定する（ステップＳ３１０）。
【００５８】
図７は、本実施形態の暗号コア２０−２で行われるＣＴＳを利用した共通鍵暗号アルゴリズムの演算の後段の手順の流れの一例を示すフローチャートである。図７に示す処理は、図６のステップＳ３０６の処理以降、ステップＳ３０８の処理以前に行われる。
【００５９】
まず、暗号コア２０−２は、暗号演算制御部３０から入力された排他的論理和ＰＰと共通鍵Ｋｅｙ１を数式（３）に代入して、暗号化値ＣＣを算出する（ステップＳ２２０）。
【００６０】
続いて、暗号コア２０−２は、算出した暗号化値ＣＣとマスク値Ｔｍとの排他的論理和である暗号化データＣｍ−１を算出し、暗号演算制御部３０へ出力する（ステップＳ２２２）。そして出力制御部３７は、処理を終了する。
【００６１】
なお、インタフェース部６０がホスト装置２から新たな書込要求を受け付けると、入力データ信号線４２から新たな入力データが入力され、割当部３６による割当処理が再開されるため、出力制御部３７も、ステップＳ３００から処理を再開する。
【００６２】
図８は、割当部３６による割当処理により、暗号コア２０−１〜２０−４及びレジスタ３２に割り当てられた入力データＰｊの一例を示す図であり、図９は、出力制御部３７による出力制御により、暗号コア２０−１〜２０−４及びレジスタ３２から出力される暗号化データＣｊの一例を示す図である。
【００６３】
図８に示す例では、割当部３６による図３に示す割当処理により、暗号コア２０−１、暗号コア２０−２、レジスタ３２、暗号コア２０−３、暗号コア２０−４の順番で、それぞれ、入力データＰｍ−２、入力データＰｍ−１、入力データＰｍ、入力データＱ０、入力データＱ１が割り当てられている。
【００６４】
そして、出力制御部３７による図７に示す出力制御により、図９に示すように、暗号コア２０−１、暗号コア２０−２、レジスタ３２、暗号コア２０−３、暗号コア２０−４の順番で、それぞれ、入力データＰｍ−２の暗号化データＣｍ−２、入力データＰｍの暗号化データＣｍ−１、入力データＰｍ−１の暗号化データＣｍ、入力データＱ０の暗号化データＣＱ０、入力データＱ１の暗号化データＣＱ１が出力される。
【００６５】
このように、本実施形態の暗号演算装置１０では、ＣＴＳにより依存関係が生じる入力データＰｍ−１及び入力データＰｍの演算を、暗号コア２０−２、レジスタ３２、及び連接部３３を用いて行う。即ち、本実施形態の暗号演算装置１０では、依存関係が生じる入力データＰｍ−１及び入力データＰｍの演算を、複数の暗号コアを用いて行うのではなく、レジスタ３２、及び連接部３３を利用することで、単一の暗号コアで行う。このため、本実施形態の暗号演算装置１０によれば、ＣＴＳを利用した演算を行う場合であっても、暗号コアに待ち状態を生じさせることなく並列して暗号化を行うことができるので、暗号化速度を高速化することができる。
【００６６】
また本実施形態の暗号演算装置１０では、入力データＰｊの入力順序で対応する暗号化データＣｊを出力することができるので、暗号化データＣｊの出力制御を簡素化することができる。
【００６７】
ここで、比較例として、本実施形態の暗号演算装置１０を用いずに入力データＰｊを暗号コア２０−１’〜２０−４’に割り当て、暗号化データＣｊを出力する例を、それぞれ、図１０、図１１に示す。
【００６８】
図１０に示す例では、暗号コア２０−１’、暗号コア２０−２’、暗号コア２０−３’、暗号コア２０−４’の順番で、それぞれ、入力データＰｍ−２、入力データＰｍ−１、入力データＰｍ、入力データＱ０が割り当てられている。この場合、暗号コア２０−３’は、暗号コア２０−２’の演算仮定で生成される暗号化値ＣＣを用いて入力データＰｍの暗号化を行うので、暗号コア２０−２’により暗号化値ＣＣが生成されるまで待ち状態となり、並列して処理を行えないことになる。
【００６９】
そして、図１１に示すように、暗号コア２０−１’、暗号コア２０−２’、暗号コア２０−３’、暗号コア２０−４’の順番で、それぞれ、入力データＰｍ−２の暗号化データＣｍ−２、入力データＰｍ−１の暗号化データＣｍ、入力データＰｍの暗号化データＣｍ−１、入力データＱ０の暗号化データＣＱ０が出力される。この場合、入力データＰｍ−１及び入力データＰｍの入力順序で対応する暗号化データＣｍ及び暗号化データＣｍ−１が出力されないため、暗号化データＣｊの出力制御が複雑になる。
【００７０】
以上説明した通り、本実施形態によれば、暗号化速度を高速化することができる。
【００７１】
（変形例）
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【００７２】
例えば上記実施形態では、暗号演算装置をＮＡＮＤ型半導体メモリ装置などのメモリシステムに適用した場合を例に取り説明したが、これに限定されるものではなく、磁気ディスク装置などに適用してもよい。つまり、上記実施形態の暗号演算装置が適用される記憶装置の記憶方式は、特定の記憶方式に限定されるものではない。
【００７３】
また上記実施形態では、暗号化を例に取り説明したが、復号化についても同様の手法を適用することができる。
【符号の説明】
【００７４】
１  メモリシステム
２  ホスト装置
１０  暗号演算装置
２０−１〜２０−４（２０）  暗号コア
２２−１〜２２−４  フラグ記憶部
３０  暗号演算制御部
３１、３４、３５  セレクタ
３２  レジスタ
３３  連接部
３６  割当部
３７  出力制御部
４１  鍵データ信号線
４２  入力データ信号線
４３  出力データ信号線
４４  ＣＴＳ信号線
４５  データ長信号線
５０  メモリ
６０  インタフェース部
【図１】
2012068351.tif 000003
【図２】
2012068351.tif 000004
【図３】
2012068351.tif 000005
【図４】
2012068351.tif 000006
【図５】
2012068351.tif 000007
【図６】
2012068351.tif 000008
【図７】
2012068351.tif 000009
【図８】
2012068351.tif 000010
【図９】
2012068351.tif 000011
【図１０】
2012068351.tif 000012
【図１１】
2012068351.tif 000013