説明

暗号演算装置及びメモリシステム

【課題】暗号化速度を高速化することができる暗号演算装置及びメモリシステムを提供する。
【解決手段】実施形態の暗号演算装置は、複数の暗号コアと、割当部と、連接部と、出力制御部と、を備える。複数の暗号コアは、CTSフラグがオンの場合に共通鍵を用いてCTSを利用した共通鍵暗号アルゴリズムの演算を行う。割当部は、CTS信号が入力された場合に、第1入力データを複数の暗号コアのいずれかに割り当て、第1入力データを割り当てた所定暗号コアのCTSフラグをオンする。連接部は、第1入力データの演算過程で生成された演算データと第1入力データの次に入力される第2入力データとを連接して連接データを生成する。出力制御部は、所定暗号コアへの連接データの出力制御、連接データの演算結果である第1暗号化データの出力制御、及び第1入力データの演算結果である第2暗号化データの出力制御を行って、所定暗号コアのCTSフラグをオフする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、暗号演算装置及びメモリシステムに関する。
【背景技術】
【0002】
共通鍵方式の暗号アルゴリズムは、予め決められたブロック長のデータを秘匿化することを目的に設計されたものであり、そのままではブロック長よりも長いデータの秘匿化を行うことができない。このため、共通鍵方式の暗号アルゴリズムを用いてブロック長より長いデータの秘匿化を行えるような暗号演算方法や、元のデータの改ざん検出のための認証子を生成する暗号演算方法などが開発されている。このような、共通鍵暗号方式を基本として様々な用途に向いた暗号演算方法は、暗号利用モードと呼ばれる。
【0003】
ストレージデバイスに保存するデータの暗号利用モードについては、IEEE P1619−Std−2007に開示されている。また、IEEE P1619−Std−2007に開示されている暗号利用モードは、暗号利用モードを定めたFIPS PUB SP800−38シリーズにSP800−38E(XTS mode)として採用されている。
【0004】
ところで、共通鍵暗号方式では、ブロック長のデータを演算して暗号化するように設計されているため、暗号化対象のデータをブロック長に分割した入力データ毎に演算することになるが、暗号化対象のデータがブロック長の整数倍でない場合、最後の入力データは、ブロック長未満のデータとなる。このため、XTS modeにおいては、RFC2040で提案されたCTS(ciphertext stealing)という演算方法を利用して、ブロック長未満のデータを演算し、暗号化する。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】IEEE P1619−Std−2007
【非特許文献2】FIPS PUB SP800−38E
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、CTSを利用した演算方法では、ブロック長未満のデータの演算と、当該ブロック長未満のデータの直前に演算するブロック長のデータの演算との間に、依存関係が生じるため、ブロック長のデータの演算が所定の段階まで終了しなければ、ブロック長未満のデータの演算を開始することができない。
【0007】
このため、複数の暗号コアを用いて入力データを並列に演算して暗号化する場合、ブロック長のデータが割り当てられた暗号コアによる演算が所定の段階まで終了するまで、ブロック長未満のデータが割り当てられた暗号コアは待ち状態となり、並列して暗号化を行うことができず、暗号化速度が遅延してしまう。
【課題を解決するための手段】
【0008】
実施形態の暗号演算装置は、複数の暗号コアと、割当部と、連接部と、出力制御部と、を備える。複数の暗号コアは、CTS(ciphertext stealing)を利用した演算を行うか否かを示すCTSフラグを記憶するフラグ記憶部を有し、CTSフラグがオンに設定されている場合に、共通鍵を用いてCTSを利用した共通鍵暗号アルゴリズムの演算を行う。割当部は、ブロック長のデータである第1入力データの次に入力される第2入力データがブロック長未満であることを示すCTS信号が入力された場合に、前記第1入力データを前記複数の暗号コアのいずれかに割り当て、前記第1入力データを割り当てた暗号コアである所定暗号コアの前記CTSフラグをオンに設定する。連接部は、前記所定暗号コアによる前記第1入力データの演算過程で生成された演算データと前記第2入力データとを連接して、連接データを生成する。出力制御部は、前記所定暗号コアへの前記連接データの出力制御、前記所定暗号コアによる前記連接データの演算結果である第1暗号化データの出力制御、及び前記所定暗号コアによる前記第1入力データの演算結果である第2暗号化データの出力制御を行って、前記所定暗号コアの前記CTSフラグをオフに設定する。
【図面の簡単な説明】
【0009】
【図1】図1は、本実施形態のメモリシステムの構成例を示すブロック図。
【図2】図2は、本実施形態の暗号演算装置の構成例を示すブロック図。
【図3】図3は、本実施形態の割当処理例を示すフローチャート。
【図4】図4は、本実施形態の通常の共通鍵暗号アルゴリズムの演算例を示すフローチャート。
【図5】図5は、本実施形態のCTSを利用した共通鍵暗号アルゴリズムの前段の演算例を示すフローチャート。
【図6】図6は、本実施形態の出力制御及び連接処理例を示すフローチャート。
【図7】図7は、本実施形態のCTSを利用した共通鍵暗号アルゴリズムの後段の演算例を示すフローチャート。
【図8】図8は、本実施形態の暗号コア及びレジスタへの入力データの割当例を示す図。
【図9】図9は、本実施形態の暗号コア及びレジスタからの暗号化データの出力例を示す図。
【図10】図10は、暗号コアへの入力データの割当の比較例を示す図。
【図11】図11は、暗号コアからの暗号化データの出力の比較例を示す図。
【発明を実施するための形態】
【0010】
まず、本実施形態の暗号演算装置を備えるメモリシステムの構成について説明する。
【0011】
図1は、本実施形態のメモリシステム1の構成の一例を示すブロック図である。メモリシステム1は、ホスト装置2からの書込要求に従って書込対象データを暗号化して記憶したり、暗号化して記憶している読出対象データをホスト装置2からの読出要求に従って復号化して読み出したりするものである。メモリシステム1は、例えば、NAND型半導体メモリ装置などにより実現できる。メモリシステム1は、図1に示すように、暗号演算装置10と、メモリ50と、インタフェース部60とを、備えている。ホスト装置2は、メモリシステム1が内蔵又は外付けされるコンピュータである。メモリシステム1への書込要求や読出要求は、ホスト装置2のOS(Operating System)により行われる。
【0012】
暗号演算装置10は、ホスト装置2からの書込対象データを暗号化したり、メモリ50に暗号化して記憶されている読出対象データを復号化したりする演算回路である。本実施形態では、書込対象データ及び読出対象データがブロック単位で暗号演算装置10に入力され、暗号演算装置10は、ブロック単位で書込対象データの暗号化及び読出対象データの復号化を行うものとする。本実施形態では、1ブロックを128ビットとして説明するが、1ブロックの大きさは、これに限定されるものではない。なお、暗号演算装置10の詳細については、後述する。
【0013】
メモリ50は、暗号演算装置10により暗号化されたデータを記憶する不揮発性のメモリであり、例えば、NAND型フラッシュメモリなどにより実現できる。
【0014】
インタフェース部60は、ホスト装置2からの要求に従ってメモリシステム1の各部を制御する回路である。具体的には、インタフェース部60は、ホスト装置2から書込対象データの書込要求を受け付けると、受け付けた書込対象データをブロック長の入力データに分割し、分割した入力データを暗号演算装置10に順次出力して暗号化させる。そしてインタフェース部60は、暗号演算装置10から入力データを暗号化した暗号化データの入力を順次受け付け、受け付けた暗号化データをメモリ50に出力して記憶させる。また、インタフェース部60は、ホスト装置2から読出要求を受け付けると、読出対象データをブロック単位でメモリ50から読み出し、暗号演算装置10に順次出力して復号化させる。そしてインタフェース部60は、暗号演算装置10から復号化された読出対象データの入力を順次受け付け、復号化された読出対象データをホスト装置2に返却する。
【0015】
図2は、本実施形態の暗号演算装置10の構成の一例を示すブロック図である。図2に示すように、暗号演算装置10は、暗号コア20−1〜20−4と、暗号演算制御部30と、を備えている。なお本実施形態では、暗号コアの数が4つである場合を例に取り説明するが、暗号コアの数は、2つ以上であればいくつであってもよい。また以下では、暗号コア20−1〜20−4を各々区別する必要がない場合、単に暗号コア20と称する場合がある。また、図2に示す例では、暗号演算装置10の各部と接続される線は、データ信号が流れるデータ線を示しており、制御信号が流れる制御線については記載を省略している。
【0016】
暗号コア20−1〜20−4の各々は、鍵データ信号線41から入力される共通鍵を用いて、暗号演算制御部30から入力される入力データに対して共通鍵暗号アルゴリズムの演算を行う。そして暗号コア20−1〜20−4の各々は、入力データの演算結果である暗号化データを暗号演算制御部30へ出力する。ここで、暗号コア20−1〜20−4は、暗号演算制御部30から順次入力される複数の入力データを並列して暗号化するものとする。なお本実施形態では、暗号コア20の暗号化方式がXTSモードであり、暗号コア20の演算に用いる共通鍵暗号アルゴリズムがAES(Advanced Encryption Standard)である場合を例に取り説明するが、これに限定されるものではない。また鍵データ信号線41は、インタフェース部60と接続されている。つまり、共通鍵は、インタフェース部60から鍵データ信号線41を介して暗号コア20−1〜20−4に入力される。
【0017】
暗号コア20−1〜20−4は、それぞれ、CTS(ciphertext stealing)を利用した演算を行うか否かを示すCTSフラグを記憶するフラグ記憶部22−1〜22−4を有している。暗号コア20−1〜20−4の各々は、自身のCTSフラグがオフに設定されていれば、通常の共通鍵暗号アルゴリズムの演算を行う。一方、暗号コア20−1〜20−4の各々は、自身のCTSフラグがオンに設定されていれば、CTSを利用した共通鍵暗号アルゴリズムの演算を行う。
【0018】
暗号演算制御部30は、暗号コア20−1〜20−4の制御や暗号コア20−1〜20−4の演算結果の出力制御など行う回路であり、セレクタ31と、レジスタ32と、連接部33と、セレクタ34と、セレクタ35と、割当部36と、出力制御部37とを、備える。
【0019】
セレクタ31は、割当部36及び出力制御部37により制御され、入力データ信号線42から入力される入力データや暗号コア20−1〜20−4から入力される演算結果の出力先を、レジスタ32、連接部33、及びセレクタ35のいずれかに選択する。そしてセレクタ31は、入力された入力データや演算結果を、選択した出力先に出力する。また入力データ信号線42は、インタフェース部60と接続されている。つまり、入力データは、インタフェース部60から入力データ信号線42を介してセレクタ31に入力される。なお、入力データ信号線42から入力される入力データは、ブロック長又はブロック長未満のデータである。
【0020】
レジスタ32は、セレクタ31から入力される入力データや演算結果を記憶するものである。
【0021】
連接部33は、割当部36及び出力制御部37により制御され、セレクタ31から入力される演算結果と、レジスタ32に記憶されている入力データとを連接して、連接データを生成する回路である。
【0022】
セレクタ34は、割当部36又は出力制御部37により制御され、入力データ信号線42から入力される入力データや連接部33から入力される連接データの出力先を、暗号コア20−1〜20−4のいずれかに選択する。そしてセレクタ34は、入力された入力データや連接データを、選択した出力先に出力する。
【0023】
セレクタ35は、出力制御部37により制御され、セレクタ31から入力される演算結果やレジスタ32から入力される演算結果である暗号化データを出力データ信号線43から出力する。なお出力データ信号線43は、インタフェース部60と接続されている。つまり、暗号化データは、セレクタ35から出力データ信号線43を介してインタフェース部60に出力される。
【0024】
割当部36は、入力データ信号線42から入力される入力データを暗号コア20−1〜20−4のいずれかに割り当てる回路である。そして割当部36は、セレクタ34を制御して、割り当てを行った暗号コア20−1〜20−4のいずれかに入力データを出力する。なお、割当部36は、入力データをラウンドロビン方式で暗号コア20−1〜20−4に順番に割り当てる。
【0025】
また割当部36は、入力データ信号線42からブロック長の入力データ(第1入力データの一例)の次に入力される次入力データ(第2入力データの一例)がブロック長未満であることを示すCTS信号がCTS信号線44から入力された場合に、入力データ信号線42から次入力データの前に入力されているブロック長の入力データを暗号コア20−1〜20−4のいずれかに割り当てる。そして割当部36は、入力データを割り当てた暗号コアである所定暗号コアのCTSフラグをオンに設定する。更に割当部36は、入力データ信号線42から入力された次入力データをレジスタ32に記憶させ、データ長信号線45から入力される次入力データのデータ長を連接部33に出力するとともに、セレクタ34を制御して、所定暗号コアに出力する。なおCTS信号線44及びデータ長信号線45は、インタフェース部60と接続されている。つまり、CTS信号は、インタフェース部60からCTS信号線44を介して割当部36に入力され、次入力データのデータ長は、インタフェース部60からデータ長信号線45を介して割当部36に入力される。
【0026】
出力制御部37は、暗号コア20から入力される演算結果の出力制御などを行う回路である。出力制御部37は、CTSフラグがオフに設定されている暗号コア20から演算結果である暗号化データが暗号演算制御部30に入力された場合、セレクタ31を制御して、入力された暗号化データをセレクタ35に出力し、出力データ信号線43から出力する。なお、暗号コア20による演算が終了すると、暗号コア20から出力制御部37へ終了信号が出力されるため、出力制御部37は、終了信号の出力元の暗号コア20のCTSフラグを確認することで、CTSフラグがオフに設定されている暗号コア20からの入力であるか否かを確認する。
【0027】
また出力制御部37は、前述のCTSフラグがオンに設定されている所定暗号コアから入力データの演算過程で生成された演算データが暗号演算制御部30に入力された場合、セレクタ31を制御して、入力された演算データを連接部33に出力するとともに、レジスタ32に記憶されている次入力データを連接部33に出力する。そして出力制御部37は、連接部33により生成された連接データを所定暗号コアに出力する。
【0028】
また出力制御部37は、所定暗号コアから入力データの演算結果である暗号化データ(第2暗号化データの一例)が暗号演算制御部30に入力された場合、セレクタ31を制御して、入力された暗号化データをレジスタ32に出力し、記憶させる。
【0029】
また出力制御部37は、所定暗号コアから連接データの演算結果である暗号化データ(第1暗号化データの一例)が暗号演算制御部30に入力された場合、セレクタ31を制御して、入力された暗号化データをセレクタ35に出力し、出力データ信号線43から出力する。その後、出力制御部37は、レジスタ32に記憶されている暗号化データをセレクタ35に出力して、出力データ信号線43から出力する。そして、出力制御部37は、所定暗号コアのCTSフラグをオフに設定する。
【0030】
次に、本実施形態の暗号演算装置の動作について説明する。
【0031】
なお以下では、ホスト装置2から書込要求が行われる書込対象データはインタフェース部60によりm+1個のブロック長の入力データPj(0≦j≦m)に分割され、入力データ信号線42から順次入力データPが暗号演算装置10に入力されるものとする。但し、最後の入力データPはブロック長未満であるものとする。
【0032】
図3は、本実施形態の割当部36で行われる割当処理の手順の流れの一例を示すフローチャートである。
【0033】
まず、割当部36は、CTS信号線44からCTS信号が入力されない場合、入力データ信号線42から次に入力される次入力データPj+1(0≦j≦m−2)がブロック長であると判定する(ステップS100でNo)。この場合、割当部36は、次入力データPj+1の前に入力されている入力データPをラウンドロビン方式で暗号コア20−1〜20−4のいずれかに割り当てる(ステップS102)。そして、ステップS100に戻る。
【0034】
一方、割当部36は、CTS信号線44からCTS信号が入力された場合、入力データ信号線42から次に入力される次入力データPがブロック長未満であると判定する(ステップS100でYes)。この場合、割当部36は、次入力データPの前に入力されている入力データPm−1をラウンドロビン方式で暗号コア20−1〜20−4のいずれかに割り当て、入力データPm−1を割り当てた暗号コアである所定暗号コアのCTSフラグをオンに設定する(ステップS104)。ここでは、割当部36は、入力データPm−1を暗号コア20−2に割り当てるものとする。つまり、所定暗号コアは、暗号コア20−2であるものとする。
【0035】
続いて、割当部36は、入力データ信号線42から入力された次入力データPをレジスタ32に記憶させるとともに、データ長信号線45から入力される次入力データPのデータ長を連接部33に出力する(ステップS106)。また割当部36は、セレクタ34を制御して、次入力データPのデータ長を暗号コア20−2にも出力する。そして割当部36は、処理を終了する。
【0036】
なお、インタフェース部60がホスト装置2から新たな書込要求を受け付けると、入力データ信号線42から新たな入力データが入力されるため、割当部36は、ステップS100から処理を再開する。
【0037】
図4は、本実施形態の暗号コア20で行われる通常の共通鍵暗号アルゴリズムの演算、即ちCTSを利用しない共通鍵暗号アルゴリズムの演算の手順の流れの一例を示すフローチャートである。図4に示す処理は、図3のステップS102で割当部36により入力データが割り当てられた暗号コア20で行われる。
【0038】
まず、暗号コア20は、j(0≦j≦m−2)番目のブロックの入力データPとマスク値Tとの排他的論理和PPを算出する(ステップS200)。ここで、マスク値Tは、j=0の場合、共通鍵Key2及びセクター番号i(Teak Value)を数式(1)に代入することにより算出され、1≦j≦m−2の場合、数式(2)により算出される。なお、αjは、ガロア体の原始元を示す。
【0039】
=AESenc(Key2,i)×α …(1)
【0040】
=Tj−1×αj−1 …(2)
【0041】
続いて、暗号コア20は、算出した排他的論理和PPと共通鍵Key1を数式(3)に代入して、暗号化値CCを算出する(ステップS202)。
【0042】
CC=AESenc(Key1,PP) …(3)
【0043】
続いて、暗号コア20は、算出した暗号化値CCとマスク値Tとの排他的論理和である暗号化データCを算出し、暗号演算制御部30へ出力する(ステップS204)。
【0044】
なお、図4に示す処理は、暗号コア20−1〜20−4で並列して行われる。
【0045】
図5は、本実施形態の暗号コア20−2で行われるCTSを利用した共通鍵暗号アルゴリズムの演算の前段の手順の流れの一例を示すフローチャートである。図5に示す処理は、図3のステップS104で割当部36により入力データが割り当てられた暗号コア20−2で行われる。
【0046】
まず、暗号コア20−2は、m−1番目のブロックの入力データPm−1とマスク値Tm−1との排他的論理和PPを算出する(ステップS210)。なお、マスク値Tm−1は、数式(4)により算出される。
【0047】
m−1=Tm−2×αm−2 …(4)
【0048】
続いて、暗号コア20−2は、算出した排他的論理和PPと共通鍵Key1を数式(3)に代入して、暗号化値CCを算出し、暗号演算制御部30へ出力する(ステップS212)。
【0049】
続いて、暗号コア20−2は、算出した暗号化値CCとマスク値Tm−1との排他的論理和のうちの次入力データPのデータ長分の上位ビットを暗号化データCとして算出し、暗号演算制御部30へ出力する(ステップS214)。
【0050】
以降の後段の処理については後述する。
【0051】
図6は、本実施形態の出力制御部37で行われる出力制御及び連接部33で行われる連接処理の手順の流れの一例を示すフローチャートである。
【0052】
まず、出力制御部37は、CTSフラグがオフに設定されている暗号コア20から入力データP(0≦j≦m−2)の演算結果である暗号化データCが暗号演算制御部30に入力された場合(ステップS300でNo)、セレクタ31を制御して、入力された暗号化データCをセレクタ35に出力し、出力データ信号線43から出力する(ステップS302)。そして、ステップS300に戻る。
【0053】
一方、出力制御部37は、CTSフラグがオンに設定されている暗号コア20−2から入力データPm−1の演算過程で生成された演算データである暗号化値CCが暗号演算制御部30に入力された場合(ステップS300でYes)、セレクタ31を制御して、入力された暗号化値CCを連接部33に出力するとともに、レジスタ32に記憶されている次入力データPを連接部33に出力する。そして連接部33は、次入力データPに、暗号化値CCとマスク値Tm−1との排他的論理和のうちの、ブロック長から次入力データPのデータ長を引いた長さのデータを連接し、この連接してできたデータとマスク値Tm−1との排他的論理和PPを算出する(ステップS304)。なお、マスク値Tは、数式(5)により算出される。
【0054】
=T×α …(5)
【0055】
続いて、出力制御部37は、連接部33により算出された排他的論理和PPをCTSフラグがオンに設定されている暗号コア20−2に出力するとともに、暗号コア20−2から入力データPm−1の演算結果である暗号化データCが暗号演算制御部30に入力されると、セレクタ31を制御して、入力された暗号化データCをレジスタ32に出力し、記憶させる(ステップS306)。
【0056】
続いて、出力制御部37は、CTSフラグがオンに設定されている暗号コア20−2から排他的論理和PP(次入力データP)の演算結果である暗号化データCm−1が暗号演算制御部30に入力されると、セレクタ31を制御して、入力された暗号化データCm−1をセレクタ35に出力し、出力データ信号線43から出力する(ステップS308)。
【0057】
続いて、出力制御部37は、レジスタ32に記憶されている暗号化データCをセレクタ35に出力して、出力データ信号線43から出力する。そして、出力制御部37は、暗号コア20−2のCTSフラグをオフに設定する(ステップS310)。
【0058】
図7は、本実施形態の暗号コア20−2で行われるCTSを利用した共通鍵暗号アルゴリズムの演算の後段の手順の流れの一例を示すフローチャートである。図7に示す処理は、図6のステップS306の処理以降、ステップS308の処理以前に行われる。
【0059】
まず、暗号コア20−2は、暗号演算制御部30から入力された排他的論理和PPと共通鍵Key1を数式(3)に代入して、暗号化値CCを算出する(ステップS220)。
【0060】
続いて、暗号コア20−2は、算出した暗号化値CCとマスク値Tとの排他的論理和である暗号化データCm−1を算出し、暗号演算制御部30へ出力する(ステップS222)。そして出力制御部37は、処理を終了する。
【0061】
なお、インタフェース部60がホスト装置2から新たな書込要求を受け付けると、入力データ信号線42から新たな入力データが入力され、割当部36による割当処理が再開されるため、出力制御部37も、ステップS300から処理を再開する。
【0062】
図8は、割当部36による割当処理により、暗号コア20−1〜20−4及びレジスタ32に割り当てられた入力データPの一例を示す図であり、図9は、出力制御部37による出力制御により、暗号コア20−1〜20−4及びレジスタ32から出力される暗号化データCの一例を示す図である。
【0063】
図8に示す例では、割当部36による図3に示す割当処理により、暗号コア20−1、暗号コア20−2、レジスタ32、暗号コア20−3、暗号コア20−4の順番で、それぞれ、入力データPm−2、入力データPm−1、入力データP、入力データQ、入力データQが割り当てられている。
【0064】
そして、出力制御部37による図7に示す出力制御により、図9に示すように、暗号コア20−1、暗号コア20−2、レジスタ32、暗号コア20−3、暗号コア20−4の順番で、それぞれ、入力データPm−2の暗号化データCm−2、入力データPの暗号化データCm−1、入力データPm−1の暗号化データC、入力データQの暗号化データCQ0、入力データQの暗号化データCQ1が出力される。
【0065】
このように、本実施形態の暗号演算装置10では、CTSにより依存関係が生じる入力データPm−1及び入力データPの演算を、暗号コア20−2、レジスタ32、及び連接部33を用いて行う。即ち、本実施形態の暗号演算装置10では、依存関係が生じる入力データPm−1及び入力データPの演算を、複数の暗号コアを用いて行うのではなく、レジスタ32、及び連接部33を利用することで、単一の暗号コアで行う。このため、本実施形態の暗号演算装置10によれば、CTSを利用した演算を行う場合であっても、暗号コアに待ち状態を生じさせることなく並列して暗号化を行うことができるので、暗号化速度を高速化することができる。
【0066】
また本実施形態の暗号演算装置10では、入力データPの入力順序で対応する暗号化データCを出力することができるので、暗号化データCの出力制御を簡素化することができる。
【0067】
ここで、比較例として、本実施形態の暗号演算装置10を用いずに入力データPを暗号コア20−1’〜20−4’に割り当て、暗号化データCを出力する例を、それぞれ、図10、図11に示す。
【0068】
図10に示す例では、暗号コア20−1’、暗号コア20−2’、暗号コア20−3’、暗号コア20−4’の順番で、それぞれ、入力データPm−2、入力データPm−1、入力データP、入力データQが割り当てられている。この場合、暗号コア20−3’は、暗号コア20−2’の演算仮定で生成される暗号化値CCを用いて入力データPの暗号化を行うので、暗号コア20−2’により暗号化値CCが生成されるまで待ち状態となり、並列して処理を行えないことになる。
【0069】
そして、図11に示すように、暗号コア20−1’、暗号コア20−2’、暗号コア20−3’、暗号コア20−4’の順番で、それぞれ、入力データPm−2の暗号化データCm−2、入力データPm−1の暗号化データC、入力データPの暗号化データCm−1、入力データQの暗号化データCQ0が出力される。この場合、入力データPm−1及び入力データPの入力順序で対応する暗号化データC及び暗号化データCm−1が出力されないため、暗号化データCの出力制御が複雑になる。
【0070】
以上説明した通り、本実施形態によれば、暗号化速度を高速化することができる。
【0071】
(変形例)
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【0072】
例えば上記実施形態では、暗号演算装置をNAND型半導体メモリ装置などのメモリシステムに適用した場合を例に取り説明したが、これに限定されるものではなく、磁気ディスク装置などに適用してもよい。つまり、上記実施形態の暗号演算装置が適用される記憶装置の記憶方式は、特定の記憶方式に限定されるものではない。
【0073】
また上記実施形態では、暗号化を例に取り説明したが、復号化についても同様の手法を適用することができる。
【符号の説明】
【0074】
1 メモリシステム
2 ホスト装置
10 暗号演算装置
20−1〜20−4(20) 暗号コア
22−1〜22−4 フラグ記憶部
30 暗号演算制御部
31、34、35 セレクタ
32 レジスタ
33 連接部
36 割当部
37 出力制御部
41 鍵データ信号線
42 入力データ信号線
43 出力データ信号線
44 CTS信号線
45 データ長信号線
50 メモリ
60 インタフェース部

【特許請求の範囲】
【請求項1】
CTS(ciphertext stealing)を利用した演算を行うか否かを示すCTSフラグを記憶するフラグ記憶部を有し、前記CTSフラグがオンに設定されている場合に、共通鍵を用いて前記CTSを利用した共通鍵暗号アルゴリズムの演算を行う複数の暗号コアと、
ブロック長のデータである第1入力データの次に入力される第2入力データがブロック長未満であることを示すCTS信号が入力された場合に、前記第1入力データを前記複数の暗号コアのいずれかに割り当て、前記第1入力データを割り当てた暗号コアである所定暗号コアの前記CTSフラグをオンに設定する割当部と、
前記所定暗号コアによる前記第1入力データの演算過程で生成された演算データと前記第2入力データとを連接して、連接データを生成する連接部と、
前記所定暗号コアへの前記連接データの出力制御、前記所定暗号コアによる前記連接データの演算結果である第1暗号化データの出力制御、及び前記所定暗号コアによる前記第1入力データの演算結果である第2暗号化データの出力制御を行って、前記所定暗号コアの前記CTSフラグをオフに設定する出力制御部と、
を備えることを特徴とする暗号演算装置。
【請求項2】
レジスタを更に備え、
前記割当部は、前記第2入力データを前記レジスタに記憶させ、
前記所定暗号コアは、前記第1入力データに対して前記CTSを利用した共通鍵暗号アルゴリズムの演算を行い、前記演算データ及び前記第2暗号化データを生成し、
前記出力制御部は、前記演算データ及び前記レジスタに記憶されている前記第2入力データの前記連接部への出力制御を行い、
前記所定暗号コアは、前記連接データに対して前記CTSを利用した共通鍵暗号アルゴリズムの演算を行い、前記第1暗号化データを生成することを特徴とする請求項1に記載の暗号演算装置。
【請求項3】
前記出力制御部は、前記第2入力データが出力された前記レジスタに前記第2暗号化データを記憶させ、前記第1暗号化データの出力制御を行った後に、前記レジスタに記憶されている前記第2暗号化データの出力制御を行うことを特徴とする請求項2に記載の暗号演算装置。
【請求項4】
前記割当部は、前記第2入力データのデータ長を前記連接部に出力し、
前記連接部は、前記データ長に従い、前記演算データと前記第2入力データとを連接することを特徴とする請求項1〜3のいずれか1つに記載の暗号演算装置。
【請求項5】
請求項1〜4のいずれか1つに記載の暗号演算装置と、
前記暗号演算装置から出力された暗号化データを記憶するメモリと、
を備えることを特徴とするメモリシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate