(57)【特許請求の範囲】
【請求項１】
メモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共に、キューイングされたコマンドの実行順序を決定するハードディスクドライブ用の暗号化復号化装置であって、
前記ハードディスクドライブにキューイングされた複数のコマンドに対応して、各コマンドが指定する、前記ハードディスクドライブのセクタアドレスを示すセクタアドレス情報と、前記メモリにおける前記転送を要求するデータのアドレス範囲とを対応付けて記憶する情報テーブルと、
前記ハードディスクドライブからのアクセス要求を受け付けて、前記メモリをアクセスするためのアドレスを出力する制御部と、
前記情報テーブルを参照して前記制御部から出力されたアドレスを含む前記アドレス範囲を探索し、当該探し出されたアドレス範囲と対応するセクタアドレス情報に基づきセクタアドレスを取得するセクタアドレス取得部と、
前記セクタアドレス取得部によって取得されたセクタアドレスに基づいて、前記初期ベクトルを生成する初期ベクトル生成部と、
データをブロック単位で暗号化するに際して、先頭データを暗号化するときに前記初期ベクトル生成部で生成された初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式によって、前記メモリから前記ハードディスクドライブへ転送されるデータを暗号化する暗号化部と、
前記ブロック暗号化方式により暗号化されたデータを、前記初期ベクトル生成部で生成された初期ベクトルを用いて、前記ハードディスクドライブから前記メモリへ転送される際に復号化する復号化部とを備え、
前記情報テーブルは、
前記データのアドレス範囲を、前記メモリにおける前記転送を要求するデータの先頭アドレスと、前記転送を要求するデータのサイズとして記憶し、
前記セクタアドレス取得部は、
前記制御部から出力されたアドレスが前記先頭アドレス以上であって、かつ前記先頭アドレスと前記データのサイズとを加算したアドレスに満たない条件を満たすアドレス範囲を探索し、
前記情報テーブルは、
さらに、前記セクタアドレス情報として、前記各コマンドが指定するセクタアドレスの先頭を記憶し、
前記セクタアドレス取得部は、
前記制御部から出力されたアドレスと、前記情報テーブルにおいて前記探し出されたアドレス範囲と対応付けて記憶されている先頭アドレスとの差を前記ハードディスクドライブのセクタサイズで除した値を、前記情報テーブルにおいて前記探し出されたアドレス範囲と対応付けて記憶されているセクタアドレス情報に加算することにより、前記セクタアドレスを算出すること
を特徴とするハードディスクドライブ用の暗号化復号化装置。
【請求項２】
前記ハードディスクドライブは、
ＳＡＴＡ（Serial Advanced Technology Attachment）のＮＣＱ（Native Command Queuing）に対応すること
を特徴とする請求項１記載のハードディスクドライブ用の暗号化復号化装置。
【請求項３】
前記ブロック暗号化方式は、
ＡＥＳ（Advanced Encryption Standard）のＣＢＣ（Cipher Block Chaining）モードであること
を特徴とする請求項１又は２に記載のハードディスクドライブ用の暗号化復号化装置。
【請求項４】
請求項１〜３のいずれかに記載のハードディスクドライブ用の暗号化復号化装置と、
メモリと、
前記メモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共に、キューイングされたコマンドの実行順序を決定するハードディスクドライブと
を備えることを特徴とするハードディスクドライブ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードディスクドライブ用の暗号化復号化装置、及びハードディスクドライブ装置に関する。
【背景技術】
【０００２】
データをブロック単位で暗号化する暗号化方式であって、先頭データを暗号化する際に初期ベクトル（ＩＶ）を使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式として、ＡＥＳ（Advanced Encryption Standard）のＣＢＣ（Cipher Block Chaining）モードが知られている。
【０００３】
ＡＥＳのＣＢＣモードでは、データブロックの先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化されているので、データを復号化する際も、データブロック単位で先頭から順に復号化しなければ、正しくデータを復号化できない。
【０００４】
ハードディスクドライブに記憶するデータファイルをＡＥＳのＣＢＣモードで暗号化する場合、ファイル単位で初期ベクトルを設定すると、ファイルの先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化されているので、データを復号化する際も、ファイル単位で先頭から順に復号化しなければ、正しくデータを復号化できない。
【０００５】
しかし、ハードディスクドライブを使用する場合、ファイル中の特定箇所のデータを抜き出してアクセスしたい場合がある。そこで、ハードディスクドライブに記憶させるデータを暗号化、及び復号化する方法として、ハードディスクドライブのセクタ毎に初期ベクトルを設定し、ＡＥＳのＣＢＣモードで暗号化、及び復号化する方法が知られている（例えば、特許文献１参照。）。
【０００６】
特許文献１に記載の技術では、セクタ毎に設定された初期ベクトルによって暗号化されたデータを読み出す際に、読み出したいセクタを指定し、当該セクタに設定された初期ベクトルで復号化することで、ＡＥＳのＣＢＣモードで暗号化されたデータにセクタ単位でアクセスすることが可能になっている。
【特許文献１】特開２００７−１８３５１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、ＳＡＴＡのＮＣＱに対応するハードディスクドライブは、３２個のコマンドをキューイングするバッファを備えており、複数のコマンドがキューイングされると、アクセス効率が高まるように、ハードディスクドライブ側で勝手にコマンドの実行順序を変更する。各コマンドは、アクセスするセクタ番号を指定しているので、コマンドの実行順序が変更されると、外部から指示したコマンドのセクタ順番と、実際にハードディスクドライブでアクセスが実行されるセクタの順番とが異なってしまう。
【０００８】
例えば、セクタ０，１，２，３の順に、ハードディスクドライブへ書き込みコマンドを送信すると、ハードディスクドライブでは、例えばセクタ２，１，０，３というように、書き込み実行順序が変更される。そして、このデータを読み出すために、再びセクタ０，１，２，３の順に、ハードディスクドライブへ読み出しコマンドを送信すると、ハードディスクドライブでは、例えばセクタ１，０，３，２の順に読み出しが実行され、読み出しコマンドで指示したセクタ番号順とは異なる順番でデータが読み出されることとなる。
【０００９】
このような、ＳＡＴＡのＮＣＱに対応するハードディスクドライブを用いて、例えば特許文献１に記載の技術を用いて、ＡＥＳのＣＢＣモードのように、先頭データを暗号化する際に初期ベクトル（ＩＶ）を使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いて暗号化したデータを記憶させようとすると、以下のような不都合が生じる。
【００１０】
例えば、セクタ０，１，２，３の順に、ハードディスクドライブへ書き込みコマンドを送信すると、ハードディスクドライブでは、例えばセクタ２，１，０，３というように、書き込み実行順序が変更され、メモリからセクタ２，１，０，３に対応するデータがこの順に読み出されて、ハードディスクドライブへ転送される。
【００１１】
このとき、ハードディスクドライブの外部に設けられた暗号化装置によって、メモリからハードディスクドライブへ転送されるデータを上述のブロック暗号化方式で暗号化しようとしても、ハードディスクドライブに入力されたコマンドのセクタ番号順と、メモリからハードディスクドライブへ転送されるデータに対応するセクタ番号順とが異なってしまうため、セクタ毎に設定された初期ベクトルを転送データに正しく対応させることができなくなる結果、正しく暗号化することができないという不都合があった。
【００１２】
そして、このようにしてハードディスクドライブに記憶されたデータを読み出すときにも、書き込み時と同様読み出されるセクタ順がハードディスクドライブにより勝手に変更されてしまうために、ハードディスクドライブからメモリへ転送されるデータに、セクタ毎に設定された初期ベクトルを正しく対応させることができなくなる結果、正しく復号化することができないという不都合があった。
【００１３】
本発明は、このような事情に鑑みて為された発明であり、データを記憶するメモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共にキューイングされたコマンドの実行順序を決定するハードディスクドライブへデータを記憶させる際に、データをブロック単位で暗号化するに際して、先頭データを暗号化するときに初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いて、暗号化及び復号化を行うことができるハードディスクドライブ用の暗号化復号化装置、及びハードディスクドライブ装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明に係るハードディスクドライブ用の暗号化復号化装置は、メモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共に、キューイングされたコマンドの実行順序を決定するハードディスクドライブ用の暗号化復号化装置であって、前記ハードディスクドライブにキューイングされた複数のコマンドに対応して、各コマンドが指定する、前記ハードディスクドライブのセクタアドレスを示すセクタアドレス情報と、前記メモリにおける前記転送を要求するデータのアドレス範囲とを対応付けて記憶する情報テーブルと、前記ハードディスクドライブからのアクセス要求を受け付けて、前記メモリをアクセスするためのアドレスを出力する制御部と、前記情報テーブルを参照して前記制御部から出力されたアドレスを含む前記アドレス範囲を探索し、当該探し出されたアドレス範囲と対応するセクタアドレス情報に基づきセクタアドレスを取得するセクタアドレス取得部と、前記セクタアドレス取得部によって取得されたセクタアドレスに基づいて、前記初期ベクトルを生成する初期ベクトル生成部と、データをブロック単位で暗号化するに際して、先頭データを暗号化するときに前記初期ベクトル生成部で生成された初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式によって、前記メモリから前記ハードディスクドライブへ転送されるデータを暗号化する暗号化部と、前記ブロック暗号化方式により暗号化されたデータを、前記初期ベクトル生成部で生成された初期ベクトルを用いて、前記ハードディスクドライブから前記メモリへ転送される際に復号化する復号化部とを備える。
【００１５】
この構成によれば、制御部によって、ハードディスクドライブからのアクセス要求に応じてメモリをアクセスするためのアドレスが出力される。そして、セクタアドレス取得部によって、制御部から出力されたアドレスを含んで情報テーブルに記憶されているアドレス範囲が探索され、当該探し出されたアドレス範囲と対応して情報テーブルに記憶されているセクタアドレス情報に基づきセクタアドレスが取得される。さらに、初期ベクトル生成部によって、セクタアドレス取得部で取得されたセクタアドレスに基づいて、初期ベクトルが生成されて暗号化部と復号化部とへ供給される。この場合、ハードディスクドライブにおいてキューイングされたコマンドの実行順序が変更された場合であっても、メモリをアクセスするために実際に出力されたアドレスに基づいて初期ベクトルが生成され、暗号化部においてこの初期ベクトルを用いて暗号化が行われ、復号化部においてこの初期ベクトルを用いて復号化が行われるので、データを記憶するメモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共にキューイングされたコマンドの実行順序を決定するハードディスクドライブへデータを記憶させる際に、データをブロック単位で暗号化するに際して、先頭データを暗号化するときに初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いて、暗号化及び復号化を行うことができる。
【００１６】
また、前記情報テーブルは、前記データのアドレス範囲を、前記メモリにおける前記転送を要求するデータの先頭アドレスと、前記転送を要求するデータのサイズとして記憶し、前記セクタアドレス取得部は、前記制御部から出力されたアドレスが前記先頭アドレス以上であって、かつ前記先頭アドレスと前記データのサイズとを加算したアドレスに満たない条件を満たすアドレス範囲を探索することが好ましい。
【００１７】
この構成によれば、情報テーブルには、データのアドレス範囲が、メモリにおける転送を要求するデータの先頭アドレスと、転送を要求するデータのサイズとして記憶されている。そして、セクタアドレス取得部は、制御部から出力されたアドレスが先頭アドレス以上であって、かつ先頭アドレスとデータのサイズとを加算したアドレスに満たない条件を満たすアドレス範囲を探索することによって、制御部から出力されたアドレスを含んで情報テーブルに記憶されているアドレス範囲を探し出すことができる。
【００１８】
また、前記情報テーブルは、さらに、前記セクタアドレス情報として、前記各コマンドが指定するセクタアドレスの先頭を記憶し、前記セクタアドレス取得部は、前記制御部から出力されたアドレスと、前記情報テーブルにおいて前記探し出されたアドレス範囲と対応付けて記憶されている先頭アドレスとの差を前記ハードディスクドライブのセクタサイズで除した値を、前記情報テーブルにおいて前記探し出されたアドレス範囲と対応付けて記憶されているセクタアドレス情報に加算することにより、前記セクタアドレスを算出することが好ましい。
【００１９】
この構成によれば、情報テーブルには、さらに、セクタアドレス情報として、各コマンドが指定するセクタアドレスの先頭が記憶されている。そして、セクタアドレス取得部は、制御部から出力されたアドレスと、情報テーブルにおいて前記探し出されたアドレス範囲と対応付けて記憶されている先頭アドレスとの差をハードディスクドライブのセクタサイズで除した値を、情報テーブルにおいて前記探し出されたアドレス範囲と対応付けて記憶されているセクタアドレス情報に加算することにより、制御部から出力されたアドレスに対応するセクタアドレスを算出することができる。
【００２０】
また、前記ハードディスクドライブは、ＳＡＴＡ（Serial Advanced Technology Attachment）のＮＣＱ（Native Command Queuing）に対応することが好ましい。
【００２１】
この構成によれば、ＳＡＴＡのＮＣＱに対応するハードディスクドライブへデータを記憶させる際に、データをブロック単位で暗号化するに際して、先頭データを暗号化するときに初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いて、暗号化及び復号化を行うことができる。
【００２２】
また、前記ブロック暗号化方式は、ＡＥＳ（Advanced Encryption Standard）のＣＢＣ（Cipher Block Chaining）モードであることが好ましい。
【００２３】
この構成によれば、データを記憶するメモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共にキューイングされたコマンドの実行順序を決定するハードディスクドライブへデータを記憶させる際に、ＡＥＳのＣＢＣモードを用いて、暗号化及び復号化を行うことができる。
【００２４】
また、本発明に係るハードディスクドライブ装置は、上述のハードディスクドライブ用の暗号化復号化装置と、メモリと、前記メモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共に、キューイングされたコマンドの実行順序を決定するハードディスクドライブとを備える。
【００２５】
この構成によれば、データを記憶するメモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共にキューイングされたコマンドの実行順序を決定するハードディスクドライブへデータを記憶させる際に、データをブロック単位で暗号化するに際して、先頭データを暗号化するときに初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いて、暗号化及び復号化を行うことができる。
【発明の効果】
【００２６】
このような構成のハードディスクドライブ用の暗号化復号化装置、及びハードディスクドライブ装置は、データを記憶するメモリとの間でのデータ転送を要求する複数のコマンドをキューイングすると共にキューイングされたコマンドの実行順序を決定するハードディスクドライブへデータを記憶させる際に、データをブロック単位で暗号化するに際して、先頭データを暗号化するときに初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いて、暗号化及び復号化を行うことができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明に係る実施形態を図面に基づいて説明する。なお、各図において同一の符号を付した構成は、同一の構成であることを示し、その説明を省略する。図１は、本発明の一実施形態に係るハードディスクドライブ用の暗号化復号化装置を備えるハードディスクドライブ装置の構成の一例を示すブロック図である。
【００２８】
図１に示すハードディスクドライブ装置１は、暗号化復号化装置２と、ハードディスクドライブ（ＨＤＤ）３と、メモリ４とを備えている。そして、ハードディスクドライブ装置１は、ＣＰＵ（Central Processing Unit）１００と接続されている。ＣＰＵ１００は、ハードディスクドライブ装置１にアクセスする装置側のＣＰＵである。
【００２９】
暗号化復号化装置２は、例えばＡＳＩＣ（Application Specific Integrated Circuit）を用いて構成されており、暗号化部５、復号化部６、初期ベクトル供給部７、ＳＡＴＡホストコントローラ（制御部）８、及び暗号鍵記憶部９を備えている。なお、暗号化復号化装置２と共にメモリ４も含めてＡＳＩＣ化されていてもよい。
【００３０】
ハードディスクドライブ３は、例えばＳＡＴＡのＮＣＱをサポートするハードディスクドライブであり、メモリとの間でのデータ転送を要求する３２個のコマンドをキューイングし、ディスクへのアクセス効率がよくなるようにキューイングされたコマンドの実行順序を決定して実行する。ハードディスクドライブ３は、コマンドを実行してメモリとの間でデータ転送を行うときは、ＳＡＴＡホストコントローラ８へメモリアクセス要求を出力することにより、ＳＡＴＡホストコントローラ８を介してメモリアクセスを実行するようになっている。
【００３１】
ＳＡＴＡホストコントローラ８は、例えばＳＡＴＡのＡＨＣＩ（Advanced Host Controller Interface）規約に則って構成されている。そして、ＳＡＴＡホストコントローラ８は、ＣＰＵ１００からのアクセス要求に応じて、ハードディスクドライブ３へコマンドを送信する。また、ＳＡＴＡホストコントローラ８は、ハードディスクドライブ３からメモリアクセス要求を受け付けると、当該要求に応じてメモリアドレスａｄｄｒ（アドレス）や制御信号をメモリ４へ出力し、メモリ４からのデータの読み出しやメモリ４へのデータの書き込みを行う。
【００３２】
暗号鍵記憶部９は、例えばＲＡＭ（Random Access Memory）やレジスタ等の記憶手段によって構成されており、暗号化及び復号化に用いる暗号鍵が、予め記憶されている。
【００３３】
暗号化部５は、メモリ４とＳＡＴＡホストコントローラ８との間に設けられている。そして、暗号化部５は、暗号鍵記憶部９に記憶されている暗号鍵と、初期ベクトル供給部７で生成された初期ベクトルとに基づいて、ＳＡＴＡホストコントローラ８から出力されたメモリアドレスａｄｄｒに応じてメモリ４からＳＡＴＡホストコントローラ８へ転送されるデータ４１を、リアルタイムで暗号化して暗号化データ５１としてＳＡＴＡホストコントローラ８へ出力する。暗号化部５は、ブロック暗号化方式として、例えばＡＥＳのＣＢＣモードを用いるようになっている。
【００３４】
復号化部６は、ＳＡＴＡホストコントローラ８とメモリ４との間に設けられている。そして、復号化部６は、ＳＡＴＡホストコントローラ８から出力されたメモリアドレスａｄｄｒに書き込むべく、ＳＡＴＡホストコントローラ８から出力された暗号化データ８１を、暗号鍵記憶部９に記憶されている暗号鍵と、初期ベクトル供給部７で生成された初期ベクトルとに基づいてリアルタイムに復号化し、復号化データ６１としてメモリ４へ出力する。
【００３５】
復号化部６は、暗号化部５と同じ暗号化方式を用いて復号化を行う。なお、暗号化部５及び復号化部６は、ＡＥＳのＣＢＣモードを用いる例に限られず、データをブロック単位で暗号化する暗号化方式であって、先頭データを暗号化する際に初期ベクトルを使用し、先頭データ以外のデータについては当該データの一つ前のデータを使用して暗号化を行うブロック暗号化方式を用いるものであればよい。
【００３６】
初期ベクトル供給部７は、例えば種々の論理回路や順序回路等を用いて構成されている。図２は、図１に示す初期ベクトル供給部７の構成の一例を示すブロック図である。図２に示す初期ベクトル供給部７は、例えば、コマンド判定部７１、セクタアドレス算出部７２、初期ベクトル生成部７３、及び情報テーブル７４を備えている。
【００３７】
情報テーブル７４は、ハードディスクドライブ３でキューイングされる３２個のコマンドに対応する３２個のコマンド情報を、０〜３１のコマンド番号を付して記憶する。具体的には、初期ベクトル供給部７は、ＣＰＵ１００からのＳＡＴＡホストコントローラ８へのアクセス要求を監視し、アクセス要求に応じてＳＡＴＡホストコントローラ８からハードディスクドライブ３へ出力されるコマンドに対応するコマンド情報を、情報テーブル７４として記憶する。
【００３８】
情報テーブル７４に記憶される各コマンド情報は、各々、コマンドＩ（Ｉはコマンド番号）が存在するか否かを示す情報であるＥｘｉｓｔ［Ｉ］と、アクセスを要求するハードディスクドライブ３のセクタアドレスの先頭を示す情報であるＳｔａｒｔ＿ＬＢＡ［Ｉ］と、メモリ４における転送データ領域の先頭アドレスを示す情報であるＳｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］と、転送データのセクタサイズを示す情報であるＳｅｃｔｏｒ＿Ｓｉｚｅ［Ｉ］とを含んでいる。
【００３９】
この場合、Ｓｔａｒｔ＿ＬＢＡ［Ｉ］とＳｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］とでセクタアドレス情報の一例が構成され、Ｓｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］とＳｅｃｔｏｒ＿Ｓｉｚｅ［Ｉ］（データのサイズ）とで、アドレス範囲の一例が構成されている。
【００４０】
コマンド判定部７１は、情報テーブル７４を参照して、ＳＡＴＡホストコントローラ８からメモリをアクセスすべく出力されたメモリアドレスａｄｄｒを含むアドレス範囲を探索し、当該アドレス範囲を指定するコマンド情報のコマンド番号Ｉを取得する。
【００４１】
セクタアドレス算出部７２は、コマンド判定部７１により取得されたコマンド番号Ｉの、Ｓｔａｒｔ＿ＬＢＡ［Ｉ］とＳｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］とに基づいて、転送データのセクタアドレスＬＢＡを算出する。
【００４２】
この場合、コマンド判定部７１とセクタアドレス算出部７２とで、セクタアドレス取得部の一例が構成されている。
【００４３】
初期ベクトル生成部７３は、セクタアドレス算出部７２により算出されたセクタアドレスＬＢＡに、所定の演算処理、例えば排他的論理和演算等の演算処理を施して、初期ベクトルＩＶを生成し、暗号化部５、及び復号化部６へ供給する。これにより、暗号強度を向上させる。なお、初期ベクトル生成部７３は、セクタアドレスＬＢＡを、そのまま初期ベクトルＩＶとして出力する構成としてもよい。
【００４４】
次に、上述のように構成された暗号化復号化装置２、及びハードディスクドライブ装置１の動作について説明する。まず、ハードディスクドライブ装置１へのデータ書き込みを行う場合、ＣＰＵ１００からＳＡＴＡホストコントローラ８へ、メモリ４からハードディスクドライブ３へのデータ転送を要求する複数のアクセス要求があると、ＳＡＴＡホストコントローラ８によって、ＳＡＴＡのＡＨＣＩ規約に従って、当該アクセス要求に応じた複数のコマンドがハードディスクドライブ３へ送信される。そうすると、ハードディスクドライブ３において、当該複数のコマンドがキューイングされる。
【００４５】
このとき、初期ベクトル供給部７によって、ＣＰＵ１００からのアクセス要求に基づいて、情報テーブル７４が生成される。
【００４６】
次に、ハードディスクドライブ３によって、ディスクへのアクセス効率がよくなるように、キューイングされたコマンドの実行順序が決定されて、当該決定された実行順にコマンドが実行される。そして、ハードディスクドライブ３からＳＡＴＡホストコントローラ８へ、実行されたコマンドに応じたメモリアクセス要求が送信される。
【００４７】
そうすると、ＳＡＴＡホストコントローラ８から、当該メモリアクセス要求に応じたメモリアドレスａｄｄｒがメモリ４へ送信される。このとき、このメモリアドレスａｄｄｒが初期ベクトル供給部７によって取得され、初期ベクトル供給部７で初期ベクトルＩＶが生成されて暗号化部５、及び復号化部６へ出力される。
【００４８】
図３は、図２に示す初期ベクトル供給部７の動作の一例を示すフローチャートである。まず、コマンド判定部７１によって、メモリアドレスａｄｄｒが取得される。そして、コマンド判定部７１は、情報テーブル７４に記憶されている各コマンド情報におけるＳｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］と、Ｓｅｃｔｏｒ＿Ｓｉｚｅ［Ｉ］とに基づいて、下記の式（１）を満たすコマンド番号Ｉを探索する（ステップＳ１）。
【００４９】
Ｓｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］ ≦ Ａｄｄｒ ＜ （Ｓｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉ］ ＋ Ｓｅｃｔｏｒ＿Ｓｉｚｅ［Ｉ］ × ５１２）  ・・・（１）
式（１）は、ハードディスクドライブ３の１セクタが５１２Ｂｙｔｅである場合の例を示している。そして、コマンド判定部７１は、このようにして探索されたコマンド番号Ｉを、該当コマンド番号Ｉｓとして取得する（ステップＳ２）。
【００５０】
次に、セクタアドレス算出部７２は、該当コマンド番号Ｉｓに基づいて、下記の式（２）によって、セクタアドレスＬＢＡを算出する。
【００５１】
ＬＢＡ＝Ｓｔａｒｔ＿ＬＢＡ［Ｉｓ］＋（Ａｄｄｒ − Ｓｔａｒｔ＿Ａｄｄｒｅｓｓ［Ｉｓ］／５１２）  ・・・（２）
式（２）は、ハードディスクドライブ３の１セクタが５１２Ｂｙｔｅである場合の例を示している。
【００５２】
次に、初期ベクトル生成部７３によって、予め設定された所定の演算処理Ｍａｋｅ＿Ｉｖが、ＬＢＡに施されて、初期ベクトルＩＶが生成され（ステップＳ４）、初期ベクトルＩＶが、暗号化部５及び復号化部６へ出力される（ステップＳ５）。
【００５３】
そうすると、暗号化部５は、ＳＡＴＡホストコントローラ８からのメモリアドレスａｄｄｒに応じてメモリ４から出力されたデータ４１を、初期ベクトル生成部７３から出力された初期ベクトルＩＶと、暗号鍵記憶部９に記憶されている暗号鍵とに基づいて、ＡＥＳのＣＢＣモードで暗号化して暗号化データ５１としてＳＡＴＡホストコントローラ８へ出力する。ＳＡＴＡホストコントローラ８は、暗号化データ５１をハードディスクドライブ３へ出力して記憶させる。
【００５４】
この場合、ハードディスクドライブ３におけるＳＡＴＡのＮＣＱによって、コマンドの実行順序が変更された場合であっても、初期ベクトル生成部７３によって、実際にアクセスされるメモリアドレスａｄｄｒに基づき正しい初期ベクトルＩＶが生成され、この正しい初期ベクトルＩＶに基づき、暗号化部５による暗号化が実行されるので、正しくＡＥＳのＣＢＣモードで暗号化された暗号化データ５１を、ハードディスクドライブ３に記憶させることができる。
【００５５】
次に、ハードディスクドライブ３に記憶された暗号化データを読み出す場合、ＣＰＵ１００からＳＡＴＡホストコントローラ８へ、ハードディスクドライブ３からメモリ４へのデータ転送を要求する複数のアクセス要求があると、ＳＡＴＡホストコントローラ８によって、ＳＡＴＡのＡＨＣＩ規約に従って、当該アクセス要求に応じた複数のコマンドがハードディスクドライブ３へ送信される。そうすると、ハードディスクドライブ３において、当該複数のコマンドがキューイングされる。
【００５６】
このとき、初期ベクトル供給部７によって、ＣＰＵ１００からのアクセス要求に基づいて、情報テーブル７４が生成される。
【００５７】
次に、ハードディスクドライブ３によって、ディスクへのアクセス効率がよくなるようにキューイングされたコマンドの実行順序が決定されて、当該決定された実行順にコマンドが実行される。そして、ハードディスクドライブ３からＳＡＴＡホストコントローラ８へ、実行されたコマンドに応じたメモリ書き込み要求と、ハードディスクドライブ３から読み出された暗号化データ８１とが出力される。
【００５８】
そうすると、ＳＡＴＡホストコントローラ８から、当該メモリアクセス要求に応じた書き込みアドレスを示すメモリアドレスａｄｄｒがメモリ４へ送信されると共に、暗号化データ８１が復号化部６へ出力される。このとき、このメモリアドレスａｄｄｒが初期ベクトル供給部７によって取得され、上述のハードディスクドライブ３へのデータ書き込みの場合と同様に、ステップＳ１〜Ｓ５の動作によって、初期ベクトル供給部７で初期ベクトルＩＶが生成されて暗号化部５、及び復号化部６へ出力される。
【００５９】
そうすると、復号化部６は、ＳＡＴＡホストコントローラ８からメモリアドレスａｄｄｒと共に出力された暗号化データ８１を、初期ベクトル生成部７３から出力された初期ベクトルＩＶと、暗号鍵記憶部９に記憶されている暗号鍵とに基づいて、ＡＥＳのＣＢＣモードで復号化して復号化データ６１としてメモリ４へ出力して記憶させる。
【００６０】
この場合、ハードディスクドライブ３におけるＳＡＴＡのＮＣＱによって、コマンドの実行順序が変更された場合であっても、初期ベクトル生成部７３によって、実際にアクセスされるメモリアドレスａｄｄｒに基づき正しい初期ベクトルＩＶが生成され、この正しい初期ベクトルＩＶに基づき、復号化部６による復号化が実行されるので、正しくＡＥＳのＣＢＣモードで復号化された復号化データ６１を、メモリ４に記憶させることができる。
【００６１】
以上のように、図１に記載の暗号化復号化装置２を用いたハードディスクドライブ装置１によれば、ＳＡＴＡのＮＣＱを実行するハードディスクドライブ３へ、ＡＥＳのＣＢＣモードを用いて暗号化されたデータをリアルタイムで正しく記憶させ、リアルタイムで正しく復号化して読み出すことができる。
【図面の簡単な説明】
【００６２】
【図１】本発明の一実施形態に係るハードディスクドライブ用の暗号化復号化装置を備えるハードディスクドライブ装置の構成の一例を示すブロック図である。
【図２】図１に示す初期ベクトル供給部の構成の一例を示すブロック図である。
【図３】図２に示す初期ベクトル供給部の動作の一例を示すフローチャートである。
【符号の説明】
【００６３】
１  ハードディスクドライブ装置
２  暗号化復号化装置
３  ハードディスクドライブ
４  メモリ
５  暗号化部
６  復号化部
７  初期ベクトル供給部
８  ホストコントローラ
９  暗号鍵記憶部
７１  コマンド判定部
７２  セクタアドレス算出部
７３  初期ベクトル生成部
７４  情報テーブル
Ｉ  コマンド番号
ＩＶ  初期ベクトル
ＬＢＡ  セクタアドレス
ａｄｄｒ  メモリアドレス
【図１】
0005017136.tif 000002
【図２】
0005017136.tif 000003
【図３】
0005017136.tif 000004