(57)【要約】【課題】データの改ざん検証に関するホストの負荷軽減を実現するストレージ装置を提供する。【解決手段】実施形態によれば、ストレージ装置は、ストレージと、コントローラとを具備する。コントローラは、ホスト装置からのコマンドに基づき、前記ストレージに対するアクセスを実行する。コントローラは、コマンド入出力部と、検証子生成部と、検証子保存管理部とを具備する。コマンド入出力部は、前記ホスト装置からコマンドを受信し、前記コマンドの結果を前記ホスト装置へ送信する。検証子生成部は、前記ストレージに格納されるデータに関する第１コマンドが前記コマンド入出力部によって受信された場合、前記データの検証子を生成する。検証子保存管理部は、前記ストレージに格納されるデータに関する第２コマンドが前記コマンド入出力部によって受信された場合、前記検証子生成部によって生成された前記データの検証子を取得して前記コマンド入出力部によって前記ホスト装置へ送信する。【選択図】図２
2020027341.tif 000002
【特許請求の範囲】
【請求項１】
ストレージと、
ホスト装置からのコマンドに基づき、前記ストレージに対するアクセスを実行するコントローラと、
を具備し、
前記コントローラは、
前記ホスト装置からコマンドを受信し、前記コマンドの結果を前記ホスト装置へ送信するコマンド入出力部と、
前記ストレージに格納されるデータに関する第１コマンドが前記コマンド入出力部によって受信された場合、前記データの検証子を生成する検証子生成部と、
前記ストレージに格納されるデータに関する第２コマンドが前記コマンド入出力部によって受信された場合、前記検証子生成部によって生成された前記データの検証子を取得して前記コマンド入出力部によって前記ホスト装置へ送信する検証子保存管理部と、
を具備するストレージ装置。
【請求項２】
前記第１コマンドは、前記ストレージからのデータの読み出しを要求するコマンドまたは前記ストレージへのデータの書き込みを要求するコマンドである請求項１に記載のストレージ装置。
【請求項３】
前記コントローラは、前記ストレージの領域上の範囲を指定する第３コマンドが前記コマンド入出力部によって受信された場合、前記第３コマンドによって指定される範囲を前記検証子の生成範囲に設定する検証子生成範囲設定部をさらに具備し、
前記検証子生成部は、前記第１コマンドが前記検証子生成範囲設定部によって設定された前記検証子の生成範囲内のデータである場合、前記データの検証子を生成する、
請求項１または２に記載のストレージ装置。
【請求項４】
第２ストレージをさらに具備し、
前記検証子生成部は、前記ストレージからのデータの読み出しを要求する前記第１コマンドが前記コマンド入出力部によって受信された場合および前記ストレージへのデータの書き込みを要求する前記第１コマンドが前記コマンド入出力部によって受信された場合、前記データの検証子を生成し、
前記検証子保存管理部は、
前記ストレージへのデータの書き込みを要求する前記第１コマンドが前記コマンド入出力部によって受信された場合、前記検証子生成部によって生成される前記データの検証子を前記第２ストレージに格納し、
前記ストレージに格納されるデータに関する第４コマンドが前記コマンド入出力部によって受信された場合、前記検証子生成部によって生成された前記データの検証子と前記第２ストレージに格納された前記データの検証子とを比較し、その比較結果を前記コマンド入出力部によって前記ホスト装置へ送信する、
請求項１乃至３のいずれか１項に記載のストレージ装置。
【請求項５】
前記コントローラは、
前記ストレージへ書き込むデータを暗号化する暗号化部と、
前記ストレージから読み出された、前記暗号化部によって暗号化されたデータを復号する復号部と、
をさらに具備する請求項４に記載のストレージ装置。
【請求項６】
前記コントローラは、前記検証子生成部によって生成された前記ストレージに格納されるプログラムの検証子を用いた前記プログラムの認証を要求する第５コマンドを外部機器に対して発行し、前記プログラムが認証された場合、前記生成された検証子を前記第２ストレージへ格納するデータ管理部をさらに具備する、
請求項４に記載のストレージ装置。
【請求項７】
前記コントローラは、
前記ストレージから前記ストレージ装置の外部のメモリに読み出されたプログラムに関する第６コマンドが前記コマンド入出力部によって受信された場合、前記外部のメモリ上の前記プログラムの検証子を生成する外部検証子生成管理部をさらに具備し、
前記外部のメモリ上の前記プログラムに関する前記第４コマンドが前記コマンド入出力部によって受信された場合、前記外部検証子生成管理部によって生成された前記プログラムの検証子と前記検証子生成部によって生成されて前記第２ストレージに格納された前記プログラムの検証子とを比較し、その比較結果を前記コマンド入出力部によって前記ホスト装置へ送信する、
請求項４に記載のストレージ装置。
【請求項８】
前記コントローラは、あらかじめ定められたタイミングごとに、外部検証子生成管理部による前記外部のメモリ上の前記プログラムの検証子の生成と、前記外部検証子生成管理部によって生成された前記プログラムの検証子と前記検証子生成部によって生成されて前記第２ストレージに格納された前記プログラムの検証子との比較と、比較結果が不一致であった場合の前記ホスト装置への通知とを行う外部データ検証部をさらに具備する、
請求項７に記載のストレージ装置。
【請求項９】
ストレージ装置のデータ改ざん検証方法であって、
ストレージに格納されるデータに関する第１コマンドが受信された場合、前記データの検証子を生成することと、
前記ストレージに格納されるデータに関する第２コマンドが受信された場合、前記生成された前記データの検証子をコマンド発行元へ送信することと、
を具備するデータ改ざん検証方法。
【請求項１０】
前記第１コマンドは、前記ストレージからのデータの読み出しを要求するコマンドまたは前記ストレージへのデータの書き込みを要求するコマンドである請求項９に記載のデータ改ざん検証方法。
【請求項１１】
前記ストレージの領域上の範囲を指定する第３コマンドが受信された場合、前記第３コマンドによって指定される範囲を前記検証子の生成範囲に設定することをさらに具備し、
前記データの検証子を生成することは、前記第１コマンドが前記設定された前記検証子の生成範囲内のデータである場合、前記データの検証子を生成することを含む、
請求項９または１０に記載のデータ改ざん検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ストレージ装置およびデータ改ざん検証方法に関する。
【背景技術】
【０００２】
たとえば電子制御技術の進歩などに伴い、ストレージ装置に格納されるデータ（プログラムを含む）の改ざん検証の重要性が益々高まっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４０２３６５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
データを改ざんするための攻撃は、ストレージ装置に対しても行われ得るし、ストレージ装置へアクセスするホスト側のメモリに対しても行われ得る。一方、データの改ざん検証に関するホストの負荷軽減なども望まれている。
本発明が解決しようとする課題は、データの改ざん検証に関するホストの負荷軽減を実現するストレージ装置およびデータ改ざん検証方法を提供することである。
【課題を解決するための手段】
【０００５】
実施形態によれば、ストレージ装置は、ストレージと、コントローラとを具備する。コントローラは、ホスト装置からのコマンドに基づき、前記ストレージに対するアクセスを実行する。コントローラは、コマンド入出力部と、検証子生成部と、検証子保存管理部とを具備する。コマンド入出力部は、前記ホスト装置からコマンドを受信し、前記コマンドの結果を前記ホスト装置へ送信する。検証子生成部は、前記ストレージに格納されるデータに関する第１コマンドが前記コマンド入出力部によって受信された場合、前記データの検証子を生成する。検証子保存管理部は、前記ストレージに格納されるデータに関する第２コマンドが前記コマンド入出力部によって受信された場合、前記検証子生成部によって生成された前記データの検証子を取得して前記コマンド入出力部によって前記ホスト装置へ送信する。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態のストレージ装置の一構成例および一接続例を示す図。
【図２】第１実施形態のストレージ装置の機能構成を例示するブロック図。
【図３】第１実施形態のストレージ装置を適用した場合におけるデータ改ざん検証の流れを説明するための図。
【図４】第１実施形態のストレージ装置の検証子生成範囲設定コマンド受信時における処理手順を示すフローチャート。
【図５】第１実施形態のストレージ装置のデータリードコマンド受信時における処理手順を示すフローチャート。
【図６】第１実施形態のストレージ装置の検証子取得コマンド受信時における処理手順を示すフローチャート。
【図７】第１実施形態においてホストＣＰＵがストレージ装置から読み出したデータの改ざん検証を行う場合の処理手順を示すフローチャート。
【図８】第１実施形態においてホストＣＰＵがストレージ装置から読み出したデータの改ざん検証を行うシーケンスを示す図。
【図９】第２実施形態のストレージ装置の機能構成を例示するブロック図。
【図１０】第２実施形態のストレージ装置のデータライトコマンド受信時の処理の流れを説明するための図。
【図１１】第２実施形態のストレージ装置のデータライトコマンド受信時における処理手順を示すフローチャート。
【図１２】第２実施形態においてホストＣＰＵがストレージ装置に書き込んだデータの改ざん検証を行う場合の処理手順を示すフローチャート。
【図１３】第２実施形態においてホストＣＰＵがストレージ装置に書き込んだデータの改ざん検証を行うシーケンスを示す図。
【図１４】第３実施形態のストレージ装置の一構成例および一接続例を示す図。
【図１５】第３実施形態のストレージ装置の機能構成を例示するブロック図。
【図１６】第３実施形態のストレージ装置のデータライトコマンド受信時の処理の流れを説明するための図。
【図１７】第３実施形態のストレージ装置の検証子比較コマンド受信時の処理の流れを説明するための図。
【図１８】第３実施形態のストレージ装置のデータライトコマンド受信時における処理手順を示すフローチャート。
【図１９】第３実施形態のストレージ装置の検証子比較コマンド受信時における処理手順を示すフローチャート。
【図２０】第３実施形態においてホストＣＰＵがストレージ装置に書き込んだデータの改ざん検証を行う場合の処理手順を示すフローチャート。
【図２１】第３実施形態においてホストＣＰＵがストレージ装置に書き込んだデータの改ざん検証を行うシーケンスを示す図。
【図２２】第３実施形態の一変形例に係るストレージ装置の機能構成を例示するブロック図。
【図２３】第４実施形態のストレージ装置の一構成例および一接続例を示す図。
【図２４】第４実施形態のストレージ装置の機能構成を例示するブロック図。
【図２５】第４実施形態のストレージ装置のＦＷダウンロード時の処理の流れを説明するための第１図。
【図２６】第４実施形態のストレージ装置のＦＷダウンロード時の処理の流れを説明するための第２図。
【図２７】第４実施形態のストレージ装置のＦＷダウンロード時のストレージへの格納までの処理手順を示すフローチャート。
【図２８】第４実施形態のストレージ装置のＦＷダウンロード時のＦＷ認証の処理手順を示すフローチャート。
【図２９】第５実施形態のストレージ装置の機能構成を例示するブロック図。
【図３０】第５実施形態のストレージ装置を適用した場合におけるデータ改ざん検証の流れを説明するための図。
【図３１】第５実施形態のストレージ装置の外部検証子生成コマンド受信時の処理の流れを説明するための図。
【図３２】第５実施形態においてホストＣＰＵがストレージ装置に格納されるＦＷの改ざん検証を行う場合の処理手順を示すフローチャート。
【図３３】第６実施形態のストレージ装置の機能構成を例示するブロック図。
【図３４】第６実施形態のストレージ装置のＦＷ自動改ざん検証の処理手順を示すフローチャート。
【図３５】第１乃至第６実施形態のストレージ装置の一適用例を示す図。
【発明を実施するための形態】
【０００７】
以下、実施の形態について図面を参照して説明する。
（第１実施形態）
まず、第１実施形態について説明する。
図１は、本実施形態のストレージ装置１の一構成例および一接続例を示す図である。
図１に示されるように、ストレージ装置１は、たとえばフラッシュメモリや磁気ディスクなどであるストレージ１１と、コントローラ１２とを有する。コントローラ１２は、１つ若しくは複数のＳｏＣ（System on a Chip）、または、１つ若しくは複数のＡＳＩＣ（Application Specific Integrated Circuits）によって構成されていても良い。ストレージ装置１は、ホストＣＰＵ２およびＲＡＭ３とバス４を介して接続される。ホストＣＰＵ２は、ストレージ装置１へコマンドを発行して、ＲＡＭ３上のデータをストレージ装置１へ書き込み、または、ストレージ装置１内のデータをＲＡＭ３上に読み出す。ホストＣＰＵ２は、たとえばストレージ装置１からＲＡＭ３へプログラムをロードして実行し、そのプログラムの記述にしたがって動作する。このホストＣＰＵ２によって発行されるコマンドに基づき、コントローラ１２は、ストレージ１１に対するアクセスを実行する。ホストＣＰＵ２は、データの書き込みや読み出し以外の処理を行わせるためのコマンドをストレージ装置１へ発行することもできる。換言すれば、コントローラ１２は、ホストＣＰＵ２からのコマンドに基づき、ストレージ１１に対するアクセス以外の処理も実行することができる。
【０００８】
図２は、本実施形態のストレージ装置１の機能構成を例示するブロック図である。
前述したように、ストレージ装置１は、ストレージ１１と、コントローラ１２とを有する。そして、図２に示されるように、コントローラ１２は、検証子生成部１２１、検証子生成管理部１２２、記憶領域読出部１２３、検証子生成範囲設定部１２４、検証子保存管理部１２５およびコマンド入出力部１２６の各処理部を有する。各処理部の機能は、たとえば、コントローラ１２に内蔵されるプロセッサが同コントローラ１２に内蔵されるメモリに格納されるプログラムを実行することによって実現されてもよいし、専用の集積回路（電気回路）として実現されてもよい。つまり、各処理部の機能は、ソフトウェアによっても実現し得るし、ハードウェアによっても実現し得る。また、一部がソフトウェアによって実現され、その他の一部がハードウェアによって実現されてもよい。
【０００９】
検証子生成部１２１は、データの検証子を生成する。ここで、データとは、ストレージ１１に格納されるプログラムを含むデータである。検証子の生成方法は、いかなる方法を用いてもよく、代表的な方法としてＳＨＡ２５６などがある。検証子生成管理部１２２は、ストレージ１１から読み出されたデータの検証子生成を管理する。より詳しくは、所定のタイミングで、検証子生成部１２１に対し、読み出されたデータの検証子の生成を依頼する。記憶領域読出部１２３は、データリードコマンドがホストＣＰＵ２から発行された場合に、そのコマンドで指定される領域上のデータをストレージ１１から読み出す。検証子生成範囲設定部１２４は、検証子生成範囲設定コマンドがホストＣＰＵ２から発行された場合に、そのコマンドで指定されるストレージ１１上の領域を検証子生成範囲として設定するように検証子生成管理部１２２へ依頼する。検証子生成範囲の設定は、たとえばストレージ１１内に複数のパーティションが作成される場合、任意のパーティションが指定される。検証子生成範囲の設定は、ＬＢＡ（Logical Black Address）範囲での指定、ネームスペースでの指定などによって行われてもよい。また、たとえばＴＣＧ（Trusted Computing Group）規格に基づいて複数のレンジが設けられる場合、検証子生成範囲の設定は、任意のレンジが指定される。パーティションが指定される場合、そのパーティションに格納されるデータが、検証子の生成対象となる。検証子生成範囲は、複数設定することができる。検証子保存管理部１２５は、検証子取得コマンドがホストＣＰＵ２から発行された場合に、そのコマンドで指定されるデータについて検証子生成部１２１によって生成された検証子を当該検証子生成部１２１から取得する。検証子取得コマンドでのデータの指定は、たとえば、検証子生成範囲設定コマンド発行時に検証子生成範囲に対して付与される識別子と、データの格納領域を示す情報とをパラメータとしてコマンドに付属させることによって行われる。データの格納領域を示す情報は、たとえば、論理アドレスや、パーティション番号、ネームスペース番号、レンジ番号などの識別情報である。コマンド入出力部１２６は、ホストＣＰＵ２とストレージ装置１との間の入出力コマンドの授受を制御する。
【００１０】
つまり、本実施形態のストレージ装置１は、前述した、ストレージ１１に対するアクセス以外の処理として、検証子生成範囲設定コマンドと、検証子取得コマンドとに応じた処理を実行する。
ここで、図３を参照して、この検証子生成範囲設定コマンドおよび検証子取得コマンドの発行を含む、データの改ざん検証のためのストレージ装置１およびホストＣＰＵ２の処理の流れについて説明する。
【００１１】
ホストＣＰＵ２は、まず、ストレージ装置１に対し、検証子生成範囲設定コマンドを発行する（ａ１１）。検証子生成範囲設定コマンドを受信したストレージ装置１は、指定されるストレージ１１上の領域を検証子生成範囲１１Ａに設定する（ａ１２）。ストレージ装置１は、検証子生成範囲１１Ａを設定した旨をホストＣＰＵ２へ応答する（ａ１３）。
【００１２】
その後、ホストＣＰＵ２が、検証子生成範囲１１Ａ内のデータ（データＡ５０−１）を読み出すためのデータリードコマンドをストレージ装置１に対して発行したとする（ａ２１）。ストレージ装置１は、データリードコマンドを受信した場合、当該コマンドで指定された領域上のデータをストレージ１１から読み出すことに加えて、その領域が検証子生成範囲１１Ａ内か否かを判定し、検証子生成範囲１１Ａ内であるならば、そのデータの検証子（検証子［データＡ］５１−１）を生成する（ａ２２）。この検証子は、たとえば、検証子生成範囲１１Ａの識別子と、データの論理的な格納領域を示す論理アドレスとともに、検証子保存管理部１２５がコントローラ１２内のメモリ上に確保する領域に保存される。ストレージ装置１は、読み出したデータ（データＡ５０−１）をホストＣＰＵ２へ転送する（ａ２３）。
【００１３】
ホストＣＰＵ２は、ストレージ装置１から読み出したデータ、より詳しくは、検証子生成範囲１１Ａから読み出したデータが改ざんされていないかを検査する場合、検証子取得コマンドをストレージ装置１に対して発行する（ａ３１）。ストレージ装置１は、データリードコマンドを受信した場合、データリードコマンドの受信時に生成された検証子を取得して（ａ３２）、ホストＣＰＵ２へ送信する（ａ３３）。ホストＣＰＵ２は、ストレージ装置１への書き込み前にＲＡＭ３上のデータから生成した検証子と、ストレージ装置１から取得した検証子とを比較し、データが改ざんされていないかを検査する。
【００１４】
つまり、本実施形態のストレージ装置１は、検証子生成範囲１１Ａからのデータの読み出し時に検証子を生成することで、ストレージ装置１に格納されたデータについての検証子生成にかかるホストＣＰＵ２のオーバーヘッドを削減しつつ、検証子生成範囲１１Ａから読み出したデータの完全性検証方法を提供する。
【００１５】
図４は、ストレージ装置１の検証子生成範囲設定コマンド受信時における処理手順を示すフローチャートである。
検証子生成範囲設定コマンドを受信すると、コマンド入出力部１２６は、コマンドを解析し、検証子生成範囲設定部１２４に検証範囲の設定を依頼する（ステップＡ１）。この依頼を受けた検証子生成範囲設定部１２４は、検証子生成管理部１２２に検証子を生成するストレージ１１内の範囲を設定する（ステップＡ２）。この設定が完了すると、コマンド入出力部１２６は、実行結果をホストＣＰＵ２に送信する（ステップＡ３）。
【００１６】
図５は、ストレージ装置１のデータリードコマンド受信時における処理手順を示すフローチャートである。
データリードコマンドを受信すると、コマンド入出力部１２６は、コマンドを解析し、記憶領域読出部１２３にストレージ１１内の指定された領域上に格納されるデータの読み出しを依頼する（ステップＢ１）。また、この依頼を受けた記憶領域読出部１２３は、検証子生成管理部１２２にストレージ１１内の指定された領域上に格納されるデータの読み出しを依頼する（ステップＢ２）。検証子生成管理部１２２は、ストレージ１１内の指定された領域上に格納されるデータを読み出す（ステップＢ３）。
【００１７】
検証子生成管理部１２２は、ストレージ１１からの読み出し範囲が検証子の生成範囲か確認する（ステップＢ４）。検証子の生成範囲内の場合は（ステップＢ５：ＹＥＳ）、検証子生成部１２１が、ストレージ１１から読み出したデータの検証子を生成する（ステップＢ６）。検証子の生成範囲内ではない場合には（ステップＢ５：ＮＯ）、検証子の生成は行われない。
【００１８】
記憶領域読出部１２３は、ストレージ１１から読み出したデータをコマンド入出力部１２６に転送する（ステップＢ７）。コマンド入出力部１２６は、記憶領域読出部１２３から転送される、ストレージ１１から読み出したデータをＲＡＭ３に送信し、実行結果をホストＣＰＵ２に送信する（ステップＢ８）。
【００１９】
図６は、ストレージ装置１の検証子取得コマンド受信時における処理手順を示すフローチャートである。
たとえば検証子生成範囲の識別子とデータの論理アドレスとがパラメータとして付属された検証子取得コマンドを受信すると、コマンド入出力部１２６は、コマンドを解析し、検証子保存管理部１２５に、そのパラメータで指定されるストレージ１１上のデータの検証子の取得を依頼する（ステップＣ１）。この依頼を受けた検証子保存管理部１２５は、検証子生成部１２１から検証子を取得する（ステップＣ２）。
【００２０】
検証子保存管理部１２５は、取得した検証子をコマンド入出力部１２６に転送する（ステップＣ３）。コマンド入出力部１２６は、検証子保存管理部１２５から転送される、検証子をホストＣＰＵ２に送信する（ステップＣ４）。
一方、図７は、ホストＣＰＵ２がストレージ装置１から読み出したデータの改ざん検証を行う場合の処理手順を示すフローチャートである。
【００２１】
ホストＣＰＵ２は、ストレージ装置１に書き込み予定のＲＡＭ３上のデータの検証子を生成する（ステップＤ１）。この検証子を検証子Ａとする。ホストＣＰＵ２は、ストレージ装置１に対して、このデータを書き込むためのデータライトコマンドを発行する（ステップＤ２）。
【００２２】
また、ホストＣＰＵ２は、ストレージ装置１に対して検証子生成範囲設定コマンドを発行し、データを書き込んだ領域を含む検証子生成範囲を設定する（ステップＤ３）。ステップＤ２とステップＤ３とは、順序を逆転させてもよい。
その後、ステップＤ２で書き込んだデータを、ホストＣＰＵ２が、ストレージ装置１に対してデータリードコマンドを発行して読み出した場合（ステップＤ４）、ストレージ装置１において、そのデータの検証子が生成される。この検証子を検証子Ｂとする。
【００２３】
ホストＣＰＵ２は、ストレージ装置１から読み出されたＲＡＭ３上のデータの改ざん検証を行う場合、ストレージ装置１に対して検証子取得コマンドを発行し、検証子Ｂを取得する（ステップＤ５）。ホストＣＰＵ２は、ステップＤ１で生成した検証子Ａと、ステップＤ５で取得した検証子Ｂとを比較する（ステップＤ６）。一致した場合（ステップＤ７：ＹＥＳ）、ホストＣＰＵ２は、データの改ざんはないと判定して検証を終了する。一方、一致しない場合（ステップＤ７：ＮＯ）、ホストＣＰＵ２は、データの改ざんが行われていると判定し、所定のエラー処理を行い（ステップＤ８）、異常終了する。
【００２４】
図８は、ホストＣＰＵ２がストレージ装置１から読み出したデータの改ざん検証を行うシーケンスを示す図である。ホストＣＰＵ２は、ストレージ装置１に書き込む前のＲＡＭ３上のデータから検証子Ａを生成した場合（ｂ１）、そのデータをストレージ装置１へ書き込み（ｂ２〜ｂ４）、かつ、そのデータをストレージ装置１から読み出した後（ｂ５〜ｂ７）、ストレージ装置１から取得した、ストレージ装置１からのデータの読み出し時に生成される検証子Ｂと比較することで、ストレージ装置１に書き込まれたデータの改ざん検証を行うことができる。検証子が一致しない場合、データは、ストレージ装置１への書き込み前にＲＡＭ３上のデータから検証子を生成した時点から、ストレージ装置１からデータを読み出した時点までの区間（１）で改ざんされていることがわかる。
【００２５】
また、以上では、ストレージ装置１に書き込む前のＲＡＭ３上のデータから検証子Ａを生成する例を示したが、これに限らず、任意のタイミングで、ＲＡＭ３上のデータから検証子Ａを生成するようにしてもよい。
たとえば、ホストＣＰＵ２が、ストレージ装置１から読み出したＲＡＭ３上のデータから検証子Ａを生成した場合（ｂ１´）、読み出したＲＡＭ３上のデータの改ざん検証を行うことができる。ストレージ装置１から取得した、ストレージ装置１からのデータの読み出し時に生成される検証子Ｂが、ストレージ装置１への書き込み前にＲＡＭ３上のデータから生成した検証子とは一致するが、当該ストレージ装置１から読み出したＲＡＭ３上のデータから生成した検証子と一致しない場合、ホストＣＰＵ２は、データは、ストレージ装置１からデータを読み出した時点から、当該ストレージ装置１から読み出したＲＡＭ３上のデータから検証子を生成した時点までの区間（２）で改ざんされていることがわかる。
【００２６】
このように、検証子生成範囲のデータの読み出し時に検証子を生成する本実施形態のストレージ装置１においては、データの改ざん検証に関するホストＣＰＵ２の負荷軽減が実現される。
なお、本実施形態では、検証子生成範囲設定コマンドとデータリードコマンドとを個別のコマンドとして実装した例を用いて説明を行ったが、１つのコマンドとして実装してもよい。また、本実施形態では、検証子生成管理部１２２を経由してストレージ１１からデータを読み出す例を用いて説明を行ったが、ストレージ１１から読み出すデータは必ずしも検証子生成管理部１２２を経由する必要はなく、記憶領域読出部１２３が直接ストレージ１１からの読み出しを行ってもよい。さらに、本実施形態では、コマンド入出力部１２６がホストＣＰＵ２からのコマンドを解析し、記憶領域読出部１２３、検証子生成範囲設定部１２４、検証子保存管理部１２５に処理を依頼する例を用いて説明を行ったが、記憶領域読出部１２３、検証子生成範囲設定部１２４、検証子保存管理部１２５が直接ホストＣＰＵ２からコマンドを受けてもよい。
【００２７】
（第２実施形態）
次に、第２実施形態について説明する。なお、第１実施形態と同一の構成要素については同一の符号を用い、それらについての重複する説明については省略する。
図９は、本実施形態のストレージ装置１の機能構成を例示するブロック図である。
【００２８】
図９に示されるように、本実施形態においては、コントローラ１２は、記憶領域書込部１２７を有する。記憶領域書込部１２７は、データライトコマンドがホストＣＰＵ２から発行された場合に、そのコマンドで指定されるストレージ１１の領域上にデータを書き込む。本実施形態のストレージ装置１においては、データの書き込み時に検証子を生成することで、ストレージ装置１、より詳しくは、ストレージ１１に書き込んだデータの完全性検証方法を提供する。ストレージ装置１が、書き込まれたデータの検証子を生成することで、ホストＣＰＵ２は、意図するデータが書き込まれているか確認することができる。
【００２９】
なお、図９には、第１実施形態で説明した記憶領域読出部１２３を示していないが、データの改ざん検証に関わらないために省略したものであって、データの読み出し機能を持たないことを意図するものではない。
図１０を参照して、ホストＣＰＵ２によってデータライトコマンドが発行された場合におけるストレージ装置１の処理の流れについて説明する。
【００３０】
ホストＣＰＵ２からデータ（データＢ５０−２）を書き込むためのデータライトコマンドが発行された場合（ｃ１）、データライトコマンドを受信したストレージ装置１は、データをストレージ１１に書き込むことに加えて、その領域が検証子生成範囲１１Ａ内か否かを判定し、検証子生成範囲１１Ａ内であるならば、そのデータの検証子（検証子［データＢ］５１−２）を生成する（ｃ２）。この検証子は、たとえば、検証子生成範囲１１Ａの識別子と、データの論理的な格納領域を示す論理アドレスとともに、検証子保存管理部１２５がコントローラ１２内のメモリ上に確保する領域に保存される。ストレージ装置１は、実行結果をホストＣＰＵ２へ送信する（ｃ３）。
【００３１】
図１１は、ストレージ装置１のデータライトコマンド受信時における処理手順を示すフローチャートである。
データライトコマンドを受信すると、コマンド入出力部１２６は、コマンドを解析し、記憶領域書込部１２７にストレージ１１内の指定された領域上へのデータの書き込みを依頼する（ステップＥ１）。また、この依頼を受けた記憶領域書込部１２７は、検証子生成管理部１２２にストレージ１１内の指定された領域上へのデータの書き込みを依頼する（ステップＥ２）。
【００３２】
検証子生成管理部１２２は、ストレージ１１への書き込み範囲が検証子の生成範囲か確認する（ステップＥ３）。検証子の生成範囲内の場合は（ステップＥ４：ＹＥＳ）、検証子生成部１２１が、書き込むデータの検証子を生成する（ステップＥ５）。検証子の生成範囲内ではない場合には（ステップＥ４：ＮＯ）、検証子の生成は行われない。検証子生成管理部１２２は、ストレージ１１にデータを書き込む（ステップＥ６）。
【００３３】
記憶領域書込部１２７は、ストレージ１１への書き込み結果をコマンド入出力部１２６に通知する（ステップＥ７）。コマンド入出力部１２６は、記憶領域書込部１２７から通知される実行結果をホストＣＰＵ２に送信する（ステップＥ８）。
一方、図１２は、ホストＣＰＵ２がストレージ装置１に書き込んだデータの改ざん検証を行う場合の処理手順を示すフローチャートである。
【００３４】
ホストＣＰＵ２は、ストレージ装置１に書き込む予定のＲＡＭ３上のデータの検証子を生成する（ステップＦ１）。この検証子を検証子Ａとする。ホストＣＰＵ２は、ストレージ装置１に対して検証子生成範囲設定コマンドを発行し、データを書き込む予定の領域を含む検証子生成範囲を設定する（ステップＦ２）。そして、ホストＣＰＵ２は、ストレージ装置１に対して、そのデータを書き込むためのデータライトコマンドを発行する（ステップＦ３）。本実施形態では、このタイミングで、ストレージ装置１において、そのデータの検証子が生成される。この検証子を検証子Ｂとする。
【００３５】
ホストＣＰＵ２は、ストレージ装置１に書き込んだデータの改ざん検証を行う場合、ストレージ装置１に対して検証子取得コマンドを発行し、検証子Ｂを取得する（ステップＦ４）。ホストＣＰＵ２は、ステップＦ１で生成した検証子Ａと、ステップＦ４で取得した検証子Ｂとを比較する（ステップＦ５）。一致した場合（ステップＦ６：ＹＥＳ）、ホストＣＰＵ２は、データの改ざんはないと判定して検証を終了する。一方、一致しない場合（ステップＦ６：ＮＯ）、ホストＣＰＵ２は、データの改ざんが行われていると判定し、所定のエラー処理を行い（ステップＦ７）、異常終了する。
【００３６】
図１３は、ホストＣＰＵ２がストレージ装置１に書き込んだデータの改ざん検証を行うシーケンスを示す図である。ホストＣＰＵ２は、ストレージ装置１に書き込む前のＲＡＭ３上のデータから検証子Ａを生成した場合（ｄ１）、そのデータをストレージ装置１へ書き込んだ際（ｄ２〜ｄ４）にストレージ装置１が生成する検証子Ｂを取得して比較することで、ストレージ装置１に書き込んだデータの改ざん検証を行うことができる。検証子が一致しない場合、データは、ストレージ装置１への書き込み前にＲＡＭ３上のデータから検証子を生成した時点から、ストレージ装置１へデータを書き込んだ時点までの区間（３）で改ざんされていることがわかる。
【００３７】
また、以上では、ストレージ装置１に書き込む前のＲＡＭ３上のデータから検証子Ａを生成する例を示したが、これに限らず、たとえば、ストレージ装置１から読み出した（ｄ５〜ｄ７）、ＲＡＭ３上のデータから検証子Ａを生成するようにしてもよい（ｄ１´）。
【００３８】
この場合、ホストＣＰＵ２は、読み出したＲＡＭ３上のデータの改ざん検証を行うことができる。ストレージ装置１から取得した（ストレージ装置１からの読み出し時に生成される）検証子Ｂと一致しない場合、ホストＣＰＵ２は、データは、ストレージ装置１へデータを書き込んだ時点から、ストレージ装置１からＲＡＭ３へのデータ転送中、または、ストレージ装置１から読み出したＲＡＭ３上のデータから検証子を生成した時点までの区間（４）で改ざんされていることがわかる。
【００３９】
このように、検証子生成範囲へのデータの書き込み時に検証子を生成する本実施形態のストレージ装置１においては、データの改ざん検証に関するホストＣＰＵ２の負荷軽減を実現する。
なお、本実施形態では、検証子生成管理部１２２を経由してストレージ１１へデータを書き込む例を用いて説明を行ったが、ストレージ１１へ書き込むデータは必ずしも検証子生成管理部１２２を経由する必要はなく、記憶領域書込部１２７が直接ストレージ１１への書き込みを行ってもよい。
【００４０】
（第３実施形態）
次に、第３実施形態について説明する。なお、第１または第２実施形態と同一の構成要素については同一の符号を用い、それらについての重複する説明については省略する。
図１４は、本実施形態のストレージ装置１の一構成例および一接続例を示す図である。
【００４１】
図１４に示されるように、本実施形態のストレージ装置１は、たとえばＲＡＭやレジスタなどであるセキュリティ情報保存領域１３を有する。セキュリティ情報保存領域１３は、ストレージ１１とは別途設けられるデータの検証子を保存するための領域である。本実施形態においては、データの書き込み時およびデータの読み出し時の双方で検証子を生成し、データの書き込み時に生成した検証子をセキュリティ情報保存領域１３に保存する。データの読み出し時に生成された検証子は、第１実施形態と同様、たとえば、検証子生成範囲の識別子と、データの論理的な格納領域を示す論理アドレスとともに、検証子保存管理部１２５がコントローラ１２内のメモリ上に確保する領域に保存される。
【００４２】
図１５は、本実施形態のストレージ装置１の機能構成を例示するブロック図である。
図１５に示されるように、セキュリティ情報保存領域１３は、コントローラ１２の検証子生成部１２１が生成した検証子を保存する検証子保存部１３１を有する。より詳しくは、検証子をセキュリティ情報保存領域１３に保存するための検証子保存部１３１がセキュリティ情報保存領域１３に付随して設けられる。
【００４３】
まず、図１６を参照して、本実施形態において、ホストＣＰＵ２によってデータライトコマンドが発行された場合におけるストレージ装置１の処理の流れについて説明する。
ホストＣＰＵ２からデータ（データＣ５０−３）を書き込むためのデータライトコマンドが発行された場合（ｅ１）、データライトコマンドを受信したストレージ装置１は、データをストレージ１１に書き込むことに加えて、その領域が検証子生成範囲１１Ａ内か否かを判定し、検証子生成範囲１１Ａ内であるならば、そのデータの検証子（検証子［データＣ］５１−３）を生成し、かつ、生成した検証子をセキュリティ情報保存領域１３に保存する（ｅ２）。ストレージ装置１は、実行結果をホストＣＰＵ２へ送信する（ｅ３）。
【００４４】
また、本実施形態においては、ストレージ装置１は、さらに、検証子比較コマンドに応じた処理を実行する。図１７を参照して、ホストＣＰＵ２によって検証子比較コマンドが発行された場合におけるストレージ装置１の処理の流れについて説明する。
【００４５】
ホストＣＰＵ２からデータ（データＣ５０−３）の検証子（検証子［データＣ］５１−３）を検査するための検証子比較コマンドが発行された場合（ｆ１）、検証子比較コマンドを受信したストレージ装置１は、コントローラ１２に保存される検証子と、セキュリティ情報保存領域１３に保存される検証子とを比較し（ｆ２）、その結果をホストＣＰＵ２へ送信する（ｆ３）。検証子比較コマンドでの検査対象の指定は、たとえば、検証子生成範囲の識別子と、データの論理アドレスとをパラメータとしてコマンドに付属させることによって行われる。
【００４６】
コントローラ１２に保存される検証子は、データの読み出しが行われていれば、直近に読み出されたデータから生成された検証子（検証子［データＣ］５１−３Ａ）となっている。データの改ざんが行われていなければ、その値は、データの書き込み時に生成されてセキュリティ情報保存領域１３に保存された検証子の値と同値である。
【００４７】
図１８は、ストレージ装置１のデータライトコマンド受信時における処理手順を示すフローチャートである。
図１８中、ステップＥ１〜ステップＥ８は、第２実施形態において示した図１１のステップＥ１〜ステップＥ８に対応する。本実施形態では、さらに、ステップＥ５とステップＥ６との間で、ステップＥ１１とステップＥ１２との処理を実行する。
【００４８】
ステップＥ５でデータの検証子を生成すると、検証子生成部１２１は、検証子保存管理部１２５に検証子の保存を依頼する（ステップＥ１１）。この依頼を受けた検証子保存管理部１２５は、検証子生成部１２１から検証子を取得し、検証子保存部１３１、つまりセキュリティ情報保存領域１３に保存する（ステップＥ１２）。
【００４９】
図１９は、ストレージ装置１の検証子比較コマンド受信時における処理手順を示すフローチャートである。
検証子比較コマンドを受信すると、コマンド入出力部１２６は、コマンドを解析し、検証子保存管理部１２５に検証子の検査、より詳しくは、検証子の比較を依頼する（ステップＦ１）。この依頼を受けた検証子保存管理部１２５は、検証子生成部１２１と検証子保存部１３１とから検証子を取得する（ステップＦ２）。そして、検証子保存管理部１２５は、取得した２つの検証子を比較する（ステップＦ３）。
【００５０】
一致しない場合（ステップＦ４：ＮＯ）、検証子保存管理部１２５は、所定のエラー処理を行う（ステップＦ５）。所定のエラー処理として、検証子保存管理部１２５は、たとえば、検証子不一致エラーをホストＣＰＵ２へ通知する、ストレージ装置１を読み書き不能にロックする、などを行う。一致する場合には（ステップＦ４：ＹＥＳ）、特段の処理が行われることはない。検証子保存管理部１２５は、検証子の比較結果をコマンド入出力部１２６に通知する（ステップＦ６）。コマンド入出力部１２６は、検証子保存管理部１２５から通知される検証子の比較結果をホストＣＰＵ２に送信する（ステップＦ７）。
【００５１】
一方、図２０は、ホストＣＰＵ２がストレージ装置１に書き込んだデータまたはストレージ装置１から読み出したデータの改ざん検証を行う場合の処理手順を示すフローチャートである。
ホストＣＰＵ２は、ストレージ装置１に書き込み予定のＲＡＭ３上のデータの検証子を生成する（ステップＧ１）。この検証子を検証子Ａとする。ホストＣＰＵ２は、ストレージ装置１に対して検証子生成範囲設定コマンドを発行し、データを書き込む予定の領域を含む検証子生成範囲を設定する（ステップＧ２）。そして、ホストＣＰＵ２は、ストレージ装置１に対して、そのデータを書き込むためのデータライトコマンドを発行する（ステップＧ３）。この時、ストレージ装置１において、そのデータの検証子が生成される。この検証子を検証子Ｂとする。この検証子Ｂは、検証子保存部１３１に保存される。
【００５２】
ホストＣＰＵ２は、ストレージ装置１に書き込んだデータの改ざん検証を行う場合、ストレージ装置１に対して検証子取得コマンドを発行し、検証子Ｂを取得する（ステップＧ４）。ホストＣＰＵ２は、ステップＧ１で生成した検証子Ａと、ステップＧ４で取得した検証子Ｂとを比較する（ステップＧ５）。一致した場合（ステップＧ６：ＹＥＳ）、ホストＣＰＵ２は、データの改ざんはないと判定する。一方、一致しない場合（ステップＧ６：ＮＯ）、ホストＣＰＵ２は、データの改ざんが行われていると判定し、所定のエラー処理を行い（ステップＧ１４）、異常終了させる。
【００５３】
ホストＣＰＵ２は、ストレージ装置１に書き込んだデータを、ストレージ装置１に対してデータリードコマンドを発行して読み出す（ステップＧ７）。この時、ストレージ装置１において、そのデータの検証子が生成される。この検証子を検証子Ｃとする。ホストＣＰＵ２は、この時に読み出したストレージ装置１内のデータの改ざん検証を行う場合、ストレージ装置１に対して検証子比較コマンドを発行し、検証子Ｂ，Ｃを比較する（ステップＧ８）。より詳しくは、比較結果をストレージ装置１から取得する。一致した場合（ステップＧ９：ＹＥＳ）、ホストＣＰＵ２は、データの改ざんはないと判定する。一方、一致しない場合（ステップＧ９：ＮＯ）、ホストＣＰＵ２は、データの改ざんが行われていると判定し、所定のエラー処理を行い（ステップＧ１４）、異常終了する。
【００５４】
また、ホストＣＰＵ２は、ストレージ装置１から読み出したＲＡＭ３上のデータの改ざん検証を行う場合、ストレージ装置１に対して検証子取得コマンドを発行し、検証子Ｃを取得する（ステップＧ１０）。これとともに、ホストＣＰＵ２は、ストレージ装置１から読み出したＲＡＭ３上のデータの検証子を生成する（ステップＧ１１）。この検証子を検証子Ｄとする。ホストＣＰＵ２は、ステップＧ１０で取得した検証子Ｃと、ステップＧ１１で生成した検証子Ｄとを比較する（ステップＧ１２）。一致した場合（ステップＧ１３７：ＹＥＳ）、ホストＣＰＵ２は、データの改ざんはないと判定して検証を終了する。一方、一致しない場合（ステップＧ１３：ＮＯ）、ホストＣＰＵ２は、データの改ざんが行われていると判定し、所定のエラー処理を行い（ステップＤ８）、異常終了する。
【００５５】
図２１は、ホストＣＰＵ２がストレージ装置１に書き込んだデータまたはストレージ装置１から読み出したデータの改ざん検証を行うシーケンスを示す図である。
ホストＣＰＵ２は、ストレージ装置１に書き込む前のＲＡＭ３上のデータから生成した検証子（ｇ１）と、そのデータをストレージ装置１へ書き込んだ後に取得した、書き込み時（ｇ２〜ｇ４）にストレージ装置１において生成される検証子とを比較することで、ストレージ装置１に書き込んだデータの改ざん検証を行うことができる。検証子が一致しない場合、データは、ストレージ装置１への書き込み前にＲＡＭ３上のデータから検証子を生成した時点から、ストレージ装置１へデータを書き込んだ時点までの区間（３）で改ざんされていることがわかる。
【００５６】
また、ホストＣＰＵ２は、書き込んだデータの読み出し時（ｇ５〜ｇ７）、ストレージ装置１に対して検証子比較コマンドを発行することで、データの書き込み時に生成されてセキュリティ情報保存領域１３の検証子保存部１３１に保存された検証子と、当該データの読み出し時に生成されてコントローラ１２の検証子保存管理部１２５に保存された検証子とを比較して、読み出されたデータの改ざん検証を行うことができる。検証子が一致しない場合、データは、ストレージ装置１へデータを書き込んだ時点から、ストレージ装置１から当該データを読み出した時点までの区間（５）で改ざんされていることがわかる。
【００５７】
さらに、ホストＣＰＵ２は、データの読み出し後、ＲＡＭ３上のデータから生成した検証子（ｇ１´）と、ストレージ装置１から取得した検証子とを比較することで、ＲＡＭ３上のデータの改ざん検証を行うことができる。検証子が一致しない場合、データは、ストレージ装置１からデータを読み出した時点から、ＲＡＭ３上の当該データから検証子を生成した時点までの区間（２）で改ざんされていることがわかる。
【００５８】
このように、検証子生成範囲のデータについて検証子比較を実行する本実施形態のストレージ装置１においては、データの改ざん検証に関するホストＣＰＵ２の負荷軽減が実現される。
なお、本実施形態では、ホストＣＰＵ２が、書き込み、読み出しの前後でＲＡＭ３上のデータの検証子を生成し、改ざん検証を行う例を用いて説明を行ったが、必ずしもＲＡＭ３上のデータの検証子を生成して改ざん検証を行う必要はなく、たとえばその他の領域上に退避されている同データなどから検証子を生成して改ざん検証を行ってもよい。また、本実施形態では、２回の検証子比較を行う例を用いて説明を行ったが、必ずしもすべての比較を行う必要はなく、いずれか1つでもよい。
【００５９】
ここで、第３実施形態の一変形例を説明する。図２２は、この一変形例に係るストレージ装置１の機能構成を例示するブロック図である。
図２２に示されるように、この一変形例においては、コントローラ１２は、暗号化部１２８と、復号部１２９とを有する。暗号化部１２８は、ストレージ１１へ書き込むデータを暗号化する。また、復号部１２９は、ストレージ１１から読み出された、暗号化されたデータを復号する。データの暗号化および復号は、検証子生成範囲のデータのみ行ってもよいし、検証子生成範囲に関わらず、すべてのデータについて行ってもよい。
【００６０】
この一変形例は、ストレージ１１上データの改ざん検証に加えて、データの秘匿方法を提供する。なお、暗号化部１２８および復号部１２９は、第１または第２実施形態のストレージ装置１においても設けられてもよい。
（第４実施形態）
次に、第４実施形態について説明する。なお、第１乃至第３実施形態と同一の構成要素については同一の符号を用い、それらについての重複する説明については省略する。
【００６１】
図２３は、本実施形態のストレージ装置１の一構成例および一接続例を示す図である。
図２３に示されるように、本実施形態のストレージ装置１は、ネットワーク５経由でサーバなどであるＦＷ管理装置６と接続される。つまり、本実施形態のストレージ装置１は、外部機器と通信する機能を有している。
【００６２】
ホストＣＰＵ２は、ストレージ装置１からＲＡＭ３へプログラム（ＦＷ６０）をロードして実行する。ホストＣＰＵ２が不正なＦＷに制御を奪われると、たとえば、ストレージ装置１内のデータが改ざんされたり、ホストＣＰＵ２が意図しない動作を行ったりといった被害を受けてしまう。本実施形態のストレージ装置１は、ＦＷの改ざん検証のための通信をＦＷ管理装置６との間で行うことで、ＦＷの改ざん検証方法を提供する。このＦＷの改ざん検証のために、本実施形態のストレージ装置１は、ＦＷ管理部１２１０を有する。ＦＷ管理部１２１０は、図２３に示されるように、コントローラ１２の一部でも良いし、コントローラ１２とは別の、１つ若しくは複数のＳｏＣ、または、１つ若しくは複数のＡＳＩＣによって構成されていても良い。図２３以降においても、ＦＷ管理部１２１０は、コントローラ１２の一部として示されているが、前述したように、コントローラ１２とは別の、１つ若しくは複数のＳｏＣ、または、１つ若しくは複数のＡＳＩＣによって構成されていても良い。ＦＷ管理部１２１０は、たとえば、コントローラ１２に内蔵されるプロセッサが同コントローラ１２に内蔵されるメモリに格納されるプログラムを実行することによって、または、コントローラ１２とは別のＳｏＣに内蔵されるプロセッサが同ＳｏＣに内蔵されるメモリに格納されるプログラムを実行することによって、または、コントローラ１２とは別のＡＳＩＣに内蔵されるプロセッサが同ＡＳＩＣに内蔵されるメモリに格納されるプログラムを実行することによって実現されてもよいし、専用の集積回路（電気回路）として実現されてもよい。つまり、ＦＷ管理部１２１０は、ソフトウェアによっても実現し得るし、ハードウェアによっても実現し得る。また、一部がソフトウェアによって実現され、その他の一部がハードウェアによって実現されてもよい。
【００６３】
図２４は、本実施形態のストレージ装置１の機能構成を例示するブロック図である。
本実施形態においては、ストレージ装置１は、ＦＷダウンロードコマンドとＦＷ認証コマンドとの発行を含む、ＦＷ管理装置６からダウンロードしたＦＷの改ざん検証に関する処理を実行する。図２５および図２６を参照して、ＦＷダウンロード時のストレージ装置１の処理の流れについて説明する。なお、ここでは、ストレージ装置１がＦＷ管理装置６からＦＷをダウンロードすることを想定するが、ＦＷ管理装置６からのＦＷのダウンロードはホストＣＰＵ２が行い、ホストＣＰＵ２からストレージ装置１へＦＷを転送するようにしてもよい。つまり、ストレージ装置１によるＦＷダウンロードコマンドの発行は必須ではない。
【００６４】
ＦＷをダウンロードする場合、ストレージ装置１は、ＦＷ管理装置６に対してＦＷダウンロードコマンドを発行する（図２５：ｈ１１，ｈ１２）。ＦＷダウンロードコマンドを受信したＦＷ管理装置６は、ストレージ装置１へＦＷを送信する（図２５：ｈ１３）。ＦＷ管理装置６から送信されてくるＦＷ（ＦＷ６０）は、まず、ＦＷ管理部１２１０がたとえばコントローラ１２内のメモリ上に確保する領域に保存される。
【００６５】
ＦＷ管理部１２１０は、ＦＷを書き込むストレージ１１の領域を検証子生成範囲に設定するための検証子生成範囲設定コマンドをコマンド入出力部１２６に対して発行する（図２５：ｈ２１）。検証子生成範囲１１Ａを設定すると、ＦＷ管理部１２１０は、その検証子生成範囲１１ＡにＦＷを書き込むためのデータライトコマンドをコマンド入出力部１２６に対して発行する（図２５：ｈ３１）。すると、ＦＷがストレージ１１に書き込まれ、また、ＦＷの検証子（検証子［ＦＷ］６１）が生成される。この検証子は、コントローラ１２の検証子生成部１２１に保存される。
【００６６】
次に、ＦＷ管理部１２１０は、検証子取得コマンドをコマンド入出力部１２６に対して発行し（図２６：ｋ１１）、コントローラ１２からＦＷの検証子を取得する。ＦＷ管理部１２１０は、この検証子を用いたＦＷの認証を要求するＦＷ認証コマンドのＦＷ管理装置６に対する発行をコマンド入出力部１２６に依頼する（図２６：ｋ２１）。この依頼を受けたコマンド入出力部１２６は、コントローラ１２から取得されたＦＷの検証子をたとえばパラメータなどとして付したＦＷ認証コマンドをＦＷ管理装置６に対して発行する（図２６：ｋ２２）。ＦＷ管理装置６は、ＦＷ認証コマンドを受信すると、たとえばパラメータなどとして付されたＦＷの検証子の認証を行い、その結果をストレージ装置１へ送信する（図２６：ｋ２３）。
【００６７】
ＦＷ管理部１２１０は、ＦＷ管理装置６から受け取った結果がＦＷの検証子の認証成功を示す場合、ダウンロードされたＦＷは改ざんされていないことが確認されたとして、ストレージ１１への書き込み時に生成されたＦＷの検証子をセキュリティ情報保存領域１３に保存する（検証子［ＦＷ］６１Ｂ）。
【００６８】
図２７は、ストレージ装置１のＦＷダウンロード時のストレージ１１への格納までの処理手順を示すフローチャートである。
ＦＷ管理部１２１０は、コマンド入出力部１２６にＦＷ管理装置６に対するＦＷダウンロードコマンドの発行を依頼する（ステップＨ１）。この依頼を受けたコマンド入出力部１２６は、ＦＷ管理装置６に対してＦＷダウンロードコマンドを発行し、ＦＷ管理装置６からＦＷを取得する（ステップＨ２）。
【００６９】
次に、ＦＷ管理部１２１０は、コマンド入出力部１２６に検証子生成範囲設定コマンドの実行を依頼する（ステップＨ３）。この依頼を受けたコマンド入出力部１２６は、ホストＣＰＵ２から検証子生成範囲設定コマンドを受信した場合と同様に、検証子生成範囲設定部１２４に検証子生成範囲の設定を依頼する（ステップＨ４）。
【００７０】
続いて、ＦＷ管理部１２１０は、コマンド入出力部１２６にデータライトコマンドの実行を依頼する（ステップＨ５）。この依頼を受けたコマンド入出力部１２６は、ホストＣＰＵ２からデータライトコマンドを受信した場合と同様に、記憶領域書込部１２７にＦＷの書き込みを依頼する（ステップＨ６）。この時、検証子が生成される。
【００７１】
図２８は、ストレージ装置１のＦＷダウンロード時のＦＷ認証の処理手順を示すフローチャートである。
ＦＷ管理部１２１０は、コマンド入出力部１２６に検証子取得コマンドの実行を依頼する（ステップＪ１）。この依頼を受けたコマンド入出力部１２６は、ホストＣＰＵ２から検証子取得コマンドを受信した場合と同様に、検証子保存管理部１２５に検証子の取得を依頼する（ステップＪ２）。
【００７２】
次に、ＦＷ管理部１２１０は、コマンド入出力部１２６にＦＷ管理装置６に対するＦＷ認証コマンドの実行を依頼する（ステップＪ３）。この依頼を受けたコマンド入出力部１２６は、ＦＷ管理装置６に対してＦＷ認証コマンドを発行し、ＦＷ管理装置６に検証子を送信する（ステップＪ４）。
【００７３】
ＦＷ認証コマンドを受信したＦＷ管理装置６は、管理しているＦＷから生成した検証子とストレージ装置１から受信した検証子とを比較する（ステップＪ２１）。ＦＷ管理装置６は、ストレージ装置１に対して検証子の比較結果を送信する（ステップＪ２２）。
【００７４】
ＦＷ管理部１２１０は、ＦＷ管理装置６から検証子の比較結果を受信し、一致していない場合（ステップＪ６：ＮＯ）、ＦＷは改ざんされていると判定し、所定のエラー処理を行い（ステップＪ７）、ストレージ装置１を異常終了させる。所定のエラー処理として、ＦＷ管理部１２１０は、たとえば保存したＦＷの削除などを行う。
一致している場合（ステップＪ６：ＹＥＳ）、ＦＷ管理部１２１０は、ストレージ１１に書き込んだＦＷは改ざんされていないと判定し、コマンド入出力部１２６に検証子の保存を依頼する（ステップＪ８）。この依頼を受けたコマンド入出力部１２６は、検証子保存管理部１２５に検証子の保存を依頼する（ステップＪ９）。検証子保存管理部１２５は、検証子保存部１３１に検証子を保存する（ステップＪ１０）。
【００７５】
このように、本実施形態のストレージ装置１においては、ＦＷの改ざん検証に関するホストＣＰＵ２の負荷軽減を実現する。
なお、ここでは、ＦＷの改ざん検証を想定したが、ＦＷに限らず、データの改ざん検証にも適用することは可能である。
（第５実施形態）
次に、第５実施形態について説明する。なお、第１乃至第４実施形態と同一の構成要素については同一の符号を用い、それらについての重複する説明については省略する。
【００７６】
図２９は、本実施形態のストレージ装置の機能構成を例示するブロック図である。
図２９に示されるように、本実施形態のストレージ装置１は、外部検証子生成管理部１２１１を有する。外部検証子生成管理部１２１１は、図２９に示されるように、コントローラ１２の一部でも良いし、コントローラ１２とは別の、１つ若しくは複数のＳｏＣ、または、１つ若しくは複数のＡＳＩＣによって構成されていても良い。図２９以降においても、外部検証子生成管理部１２１１は、コントローラ１２の一部として示されているが、前述したように、コントローラ１２とは別の、１つ若しくは複数のＳｏＣ、または、１つ若しくは複数のＡＳＩＣによって構成されていても良い。外部検証子生成管理部１２１１は、たとえば、コントローラ１２に内蔵されるプロセッサが同コントローラ１２に内蔵されるメモリに格納されるプログラムを実行することによって、または、コントローラ１２とは別のＳｏＣに内蔵されるプロセッサが同ＳｏＣに内蔵されるメモリに格納されるプログラムを実行することによって、または、コントローラ１２とは別のＡＳＩＣに内蔵されるプロセッサが同ＡＳＩＣに内蔵されるメモリに格納されるプログラムを実行することによって実現されてもよいし、専用の集積回路（電気回路）として実現されてもよい。つまり、外部検証子生成管理部１２１１は、ソフトウェアによっても実現し得るし、ハードウェアによっても実現し得る。また、一部がソフトウェアによって実現され、その他の一部がハードウェアによって実現されてもよい。本実施形態のストレージ装置１は、この外部検証子生成管理部１２１１を、第４実施形態で説明したＦＷ管理部１２１０とともに有してもよいし、ＦＷ管理部１２１０に代えて有してもよい。ストレージ装置１が、外部検証子生成管理部１２１１をＦＷ管理部１２１０とともに有する場合であって、外部検証子生成管理部１２１１およびＦＷ管理部１２１０が、コントローラ１２とは別のＳｏＣまたはＡＳＩＣによって構成される場合、外部検証子生成管理部１２１１を構成するＳｏＣまたはＡＳＩＣと、ＦＷ管理部１２１０を構成するＳｏＣまたはＡＳＩＣとは、同一であってもよいし、異なっていてもよい。
【００７７】
本実施形態のストレージ装置１は、ホストＣＰＵ２からの要求に応じて、ＲＡＭ３に読み出されたＦＷの改ざん検証に関する処理を実行する。具体的には、ストレージ装置１は、さらに、外部検証子生成コマンドに応じた処理を実行する。外部検証子生成管理部１２１１は、この処理のためにコントローラ１２に設けられる。ここでは、ストレージ装置１の外部のＲＡＭ３上のデータの検証子を外部検証子と称する。
【００７８】
図３０を参照して、外部検証子生成コマンドの発行を含む、ＦＷの改ざん検証のためのストレージ装置１およびホストＣＰＵ２の処理の流れについて説明する。
ホストＣＰＵ２は、まず、ストレージ装置１に対し、外部検証子生成コマンドを発行する（ｍ１１）。このコマンドには、ＲＡＭ３上におけるＦＷの格納領域を示す情報がたとえばパラメータなどとして付属される。外部検証子生成コマンドを受信したストレージ装置１は、ＲＡＭ３上のＦＷ（ＦＷ６０）の検証子（外部検証子［ＦＷ］６１Ｃ）を生成する（ｍ１２）。ストレージ装置１は、外部検証子を生成した旨をホストＣＰＵ２へ応答する（ｍ１３）。
【００７９】
外部検証子を生成したら、ホストＣＰＵ２は、次に、ストレージ装置１に対し、検証子比較コマンドを発行する（ｍ２１）。ストレージ装置１は、検証子比較コマンドを受信した場合、外部検証子生成コマンドの受信時に生成した外部検証子と、セキュリティ情報保存領域１３に保存される検証子とを比較し（ｍ２２）、その結果をホストＣＰＵ２へ送信する（ｍ１３）。
【００８０】
これにより、ホストＣＰＵ２は、外部検証子生成コマンドと、検証子比較コマンドとを発行するだけで、ＲＡＭ３上のＦＷの改ざん検証を行うことができる。ＦＷの検証子の生成と比較とはストレージ装置１が行うため、ＲＡＭ３上のＦＷの改ざん検証に関するホストＣＰＵ２の負荷を削減することができる。
【００８１】
図３１は、ストレージ装置１の外部検証子生成コマンド受信時における処理手順を示すフローチャートである。
外部検証子生成コマンドを受信すると、コマンド入出力部１２６は、コマンドを解析し、外部検証子生成管理部１２１１に外部検証子の生成を依頼する（ステップＫ１）。また、この依頼を受けた外部検証子生成管理部１２１１は、コマンド入出力部１２６にＲＡＭ３上のＦＷの読み出しを依頼するとともに（ステップＫ２）、検証子生成部１２１にＲＡＭ３から読み出したＦＷの検証子の生成を依頼する（ステップＫ３）。検証子生成部１２１は、検証子を生成し、外部検証子生成管理部１２１１に実行結果を通知する（ステップＫ３）。実行結果は、検証子が生成されたことを示す。
【００８２】
外部検証子生成管理部１２１１は、その実行結果をコマンド入出力部１２６に通知し（ステップＫ４）、コマンド入出力部１２６は、ホストＣＰＵ２に外部検証子生成コマンドの実行結果を送信する（ステップＫ５）。
一方、図３２は、ホストＣＰＵ２がストレージ装置１に格納されるＦＷの改ざん検証を行う場合の処理手順を示すフローチャートである。
【００８３】
ホストＣＰＵ２は、ストレージ装置１に対して外部検証子生成コマンドを発行する（ステップＬ１）。これにより、ストレージ装置１においてＲＡＭ３上のＦＷの検証子が生成される。この検証子を検証子Ａとする。
ホストＣＰＵ２は、ストレージ装置１に対して検証子比較コマンドを発行し、外部検証子生成コマンドによって生成された検証子Ａと、検証子保存部１３１に保存されている検証子（この検証子を検証子Ｂとする）とを比較する（ステップＬ２）。一致する場合（ステップＬ３：ＹＥＳ）、ホストＣＰＵ２は、ＲＡＭ３上のＦＷの改ざんはないと判定して検証を終了する。一方、一致しない場合（ステップＬ３：ＮＯ）、ホストＣＰＵ２は、ＲＡＭ３上のＦＷの改ざんが行われていると判定し、所定のエラー処理を行い（ステップＤ８）、異常終了する。
【００８４】
このように、検証子の生成および比較を実行する本実施形態のストレージ装置１においては、ＲＡＭ３上のＦＷの改ざん検証に関するホストＣＰＵ２の負荷軽減が実現される。
なお、ここでは、ＦＷの改ざん検証を想定したが、ＦＷに限らず、データの改ざん検証にも適用することは可能である。
【００８５】
（第６実施形態）
次に、第６実施形態について説明する。なお、第１乃至第５実施形態と同一の構成要素については同一の符号を用い、それらについての重複する説明については省略する。
図３３は、本実施形態のストレージ装置１の機能構成を例示するブロック図である。
【００８６】
図３３に示されるように、本実施形態のストレージ装置１は、第５実施形態で説明した外部検証子生成管理部１２１１に加えて、さらに、外部データ検証部１２１２を有する。外部データ検証部１２１２は、図３３に示されるように、コントローラ１２の一部でも良いし、コントローラ１２とは別の、１つ若しくは複数のＳｏＣ、または、１つ若しくは複数のＡＳＩＣによって構成されていても良い。外部データ検証部１２１２は、たとえば、コントローラ１２に内蔵されるプロセッサが同コントローラ１２に内蔵されるメモリに格納されるプログラムを実行することによって、または、コントローラ１２とは別のＳｏＣに内蔵されるプロセッサが同ＳｏＣに内蔵されるメモリに格納されるプログラムを実行することによって、または、コントローラ１２とは別のＡＳＩＣに内蔵されるプロセッサが同ＡＳＩＣに内蔵されるメモリに格納されるプログラムを実行することによって実現されてもよいし、専用の集積回路（電気回路）として実現されてもよい。つまり、外部データ検証部１２１２は、ソフトウェアによっても実現し得るし、ハードウェアによっても実現し得る。また、一部がソフトウェアによって実現され、その他の一部がハードウェアによって実現されてもよい。外部検証子生成管理部１２１１および外部データ検証部１２１２が、コントローラ１２とは別のＳｏＣまたはＡＳＩＣによって構成される場合、外部検証子生成管理部１２１１を構成するＳｏＣまたはＡＳＩＣと、外部データ検証部１２１２を構成するＳｏＣまたはＡＳＩＣとは、同一であってもよいし、異なっていてもよい。本実施形態のストレージ装置１も、第４実施形態で説明したＦＷ管理部１２１０を有していてもよいし、有していなくてもよい。ストレージ装置１が、外部検証子生成管理部１２１１および外部データ検証部１２１２をＦＷ管理部１２１０とともに有する場合であって、外部検証子生成管理部１２１１または外部データ検証部１２１２の少なくとも一方と、ＦＷ管理部１２１０とが、コントローラ１２とは別のＳｏＣまたはＡＳＩＣによって構成される場合、外部検証子生成管理部１２１１または外部データ検証部１２１２の少なくとも一方を構成するＳｏＣまたはＡＳＩＣと、ＦＷ管理部１２１０を構成するＳｏＣまたはＡＳＩＣとは、同一であってもよいし、異なっていてもよい。
【００８７】
本実施形態のストレージ装置１は、たとえばあらかじめ定められた間隔ごとなどの任意のタイミングで、ＲＡＭ３に読み出されたＦＷの改ざん検証に関する処理を自動的に実行する。たとえば、ホストＣＰＵ２からの要求、具体的には、ホストＣＰＵ２による外部検証子生成コマンドや検証子比較コマンドの発行に応じて、ＲＡＭ３上のＦＷの改ざん検証に関する処理を実行する場合、ホストＣＰＵ２が不正なＦＷに制御を奪われると、その処理が行われなくなってしまうおそれがある。そこで、本実施形態のストレージ装置１は、ＦＷの自動改ざん検証方法を提供する。外部データ検証部１２１２は、このＦＷの自動改ざん検証のためにコントローラ１２に設けられる。
【００８８】
図３４は、ストレージ装置１のＦＷ自動改ざん検証の処理手順を示すフローチャートである。
外部データ検証部１２１２は、コマンド入出力部１２６に外部検証子コマンドの実行を依頼する（ステップＭ１）。この依頼を受けたコマンド入出力部１２６は、ホストＣＰＵ２から外部検証子コマンドを受信した場合と同様に、外部検証子生成管理部１２１１に外部検証子の生成を依頼する（ステップＭ２）。
【００８９】
次に、外部データ検証部１２１２は、コマンド入出力部１２６に検証子比較コマンドの実行を依頼する（ステップＭ３）。この依頼を受けたコマンド入出力部１２６は、ホストＣＰＵ２から検証子比較コマンドを受信した場合と同様に、検証子保存管理部１２５に検証子の検査、より詳しくは、検証子の比較を依頼する（ステップＭ４）。
【００９０】
一致する場合（ステップＭ５：ＹＥＳ）、外部データ検証部１２１２は、次の検証をスケジュールする（ステップＭ６）。次の検証のスケジュールは、いかなる方法で実現してもよく、たとえばWatchdog Timerによるタイマ割り込みで実現してもよい。
【００９１】
一方、一致しない場合（ステップＭ５：ＮＯ）、外部データ検証部１２１２は、コマンド入出力部１２６にホストＣＰＵ２に対する外部データ検証不一致割り込みを依頼する（ステップＭ７）。外部データ検証不一致割り込みは、ＲＡＭ３上のＦＷから生成した検証子と、たとえばダウンロード時などにＦＷから生成されて保存されている検証子とが不一致の状態を知らせるための割り込みである。この依頼を受けたコマンド入出力部１２６は、ホストＣＰＵ２に対して外部データ検証不一致割り込みを発生させ（ステップＭ８）、ストレージ装置１を異常終了させる。ストレージ装置１を異常終了させる場合、外部データ検証部１２１２は、たとえば、ストレージ装置１を読み書き不能にロックする。また、ストレージ装置１がホストＣＰＵ２以外のあらかじめ定められた外部デバイスへ改ざん検出のアラートを通知することになっている場合、当該アラートの通知を実行する。
【００９２】
このように、ＦＷの自動改ざん検証を実行する本実施形態のストレージ装置１においては、たとえばホストＣＰＵ２が外部検証子生成コマンドや検証子比較コマンドを発行することができない状況に陥っていたとしても、ＦＷの改ざんを検出することができる。
【００９３】
なお、ここでは、ＦＷの改ざん検証を想定したが、ＦＷに限らず、データの改ざん検証にも適用することは可能である。
以上、いくつかの実施形態を説明したが、図３５に、これらの実施形態のストレージ装置１の一適用例を示す。
図３５は、様々な機構が電子制御される車両を概念的に示す図である。図３５に示されるように、この車両は、駆動系コントロールユニット１００Ａ、燃料供給系コントロールユニット１００Ｂ、安全装備系コントロールユニット１００Ｃなどといった様々なコントロールユニット１００を搭載する。なお、コントロールユニット１００とは、駆動系コントロールユニット１００Ａ、燃料供給系コントロールユニット１００Ｂ、安全装備系コントロールユニット１００Ｃなどの総称である。
【００９４】
たとえばＳｏＣなどである各コントロールユニット１００は、ホストＣＰＵ２およびＲＡＭ３を有する。各コントロールユニット１００のホストＣＰＵ２およびＲＡＭ３は、バス４を介してストレージ装置１と接続されている。駆動系コントロールユニット１００ＡのホストＣＰＵ２は、ストレージ装置１から駆動系ＦＷ６０ＡをＲＡＭ３にロードして実行し、燃料供給系コントロールユニット１００ＢのホストＣＰＵ２は、ストレージ装置１から燃料供給系ＦＷ６０ＢをＲＡＭ３にロードして実行し、安全装備系コントロールユニット１００ＣのホストＣＰＵ２は、ストレージ装置１から安全装備系ＦＷ６０ＣをＲＡＭ３にロードして実行する。
【００９５】
たとえば、駆動系コントロールユニット１００ＡのＲＡＭ３にロードされた駆動系ＦＷ６０Ａ−２が改ざんされると、駆動系コントロールユニット１００Ａは目的の電子制御が実現できなくなり、燃料供給系コントロールユニット１００ＢのＲＡＭ３にロードされた燃料供給系ＦＷ６０Ｂ−２が改ざんされると、燃料供給系コントロールユニット１００Ｂは目的の電子制御が実現できなくなり、安全装備系コントロールユニット１００Ｃの安全装備系ＦＷ６０Ｃ−２が改ざんされると、安全装備系コントロールユニット１００Ｃは目的の電子制御が実現できなくなる。
【００９６】
説明したいくつかのストレージ装置１は、このような改ざんを、コントロールユニット１００側の負荷を軽減しつつ検知することを実現し、かつ、改ざんがどのタイミング（区間）で行われたのかを特定することを実現する。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９７】
１…ストレージ装置、２…ホストＣＰＵ、３…ＲＡＭ、４…バス、５…ネットワーク、６…ＦＷ管理装置、１１…ストレージ１１Ａ…検証子生成範囲、１２…コントローラ、１３…セキュリティ情報保存領域、１２１…検証子生成部、１２２…検証子生成管理部、１２３…記憶領域読出部、１２４…検証子生成範囲設定部、１２５…検証子保存管理部、１２６…コマンド入出力部、１２７…記憶領域書込部、１２８…暗号化部、１２９…復号部、１２１０…ＦＷ管理部、１２１１…外部検証子生成管理部、１２１２…外部データ検証部、１３１…検証子保存部。
【図１】
2020027341.tif 000003
【図２】
2020027341.tif 000004
【図３】
2020027341.tif 000005
【図４】
2020027341.tif 000006
【図５】
2020027341.tif 000007
【図６】
2020027341.tif 000008
【図７】
2020027341.tif 000009
【図８】
2020027341.tif 000010
【図９】
2020027341.tif 000011
【図１０】
2020027341.tif 000012
【図１１】
2020027341.tif 000013
【図１２】
2020027341.tif 000014
【図１３】
2020027341.tif 000015
【図１４】
2020027341.tif 000016
【図１５】
2020027341.tif 000017
【図１６】
2020027341.tif 000018
【図１７】
2020027341.tif 000019
【図１８】
2020027341.tif 000020
【図１９】
2020027341.tif 000021
【図２０】
2020027341.tif 000022
【図２１】
2020027341.tif 000023
【図２２】
2020027341.tif 000024
【図２３】
2020027341.tif 000025
【図２４】
2020027341.tif 000026
【図２５】
2020027341.tif 000027
【図２６】
2020027341.tif 000028
【図２７】
2020027341.tif 000029
【図２８】
2020027341.tif 000030
【図２９】
2020027341.tif 000031
【図３０】
2020027341.tif 000032
【図３１】
2020027341.tif 000033
【図３２】
2020027341.tif 000034
【図３３】
2020027341.tif 000035
【図３４】
2020027341.tif 000036
【図３５】
2020027341.tif 000037