(57)【要約】【課題】制御プログラムのデータ量を低減できる。【解決手段】記憶部１ａは、制御プログラム２を記憶する。制御プログラム２は、暗号処理プログラムＸ１と暗号処理プログラムＸ１の版数の情報３とを含む。演算部１ｂは、バックアップ時に、設定データ４を暗号化した暗号化データ４ａと暗号化に用いられた暗号処理プログラムＸ１の第１の部分Ｘ１１と版数の情報３とを不揮発性記憶媒体１ｃに格納する。演算部１ｂは、制御プログラム２を制御プログラム２ａに更新後、不揮発性記憶媒体１ｃに格納された版数Ｖ１に対応する暗号処理プログラムＸ１の第２の部分Ｘ１２を、制御プログラム２ａから取得する。演算部１ｂは、第２の部分Ｘ１２と不揮発性記憶媒体１ｃに格納された第１の部分Ｘ１１とを用いて不揮発性記憶媒体１ｃに格納された暗号化データ４ａの復号に用いられる暗号処理プログラムＸ１を生成する。【選択図】図１
2015215727.tif 000002
【特許請求の範囲】
【請求項１】
データの暗号化および復号に用いられる暗号処理プログラムと前記暗号処理プログラムの版数の情報とを含みストレージ装置の制御に用いられる第１の制御プログラムを記憶する記憶部と、
前記データのバックアップ時に、前記データを暗号化した暗号化データと暗号化に用いられた前記暗号処理プログラムの第１の部分と前記版数の情報とを不揮発性記憶媒体に格納し、
前記第１の制御プログラムを第２の制御プログラムに更新した後、前記不揮発性記憶媒体から前記暗号化データを読み出す際に、前記不揮発性記憶媒体に格納された前記版数に対応する前記暗号処理プログラムの第２の部分を、前記第２の制御プログラムから取得し、
取得した前記第２の部分と前記不揮発性記憶媒体に格納された前記第１の部分とを用いて前記不揮発性記憶媒体に格納された前記暗号化データの復号に用いられる前記暗号処理プログラムを生成する、演算部と、
を有するストレージ制御装置。
【請求項２】
前記演算部は、前記第２の部分のサイズよりも大きいサイズである前記第１の部分を前記暗号処理プログラムから取得し、前記不揮発性記憶媒体に格納する、請求項１記載のストレージ制御装置。
【請求項３】
前記演算部は、前記第１の制御プログラムに含まれる前記暗号処理プログラムを用いて、前記第１および前記第２の制御プログラムの処理に用いられる設定データの暗号化および復号を行う、請求項１または２記載のストレージ制御装置。
【請求項４】
前記演算部は、前記第１の制御プログラムに含まれる版数毎の所定の条件に基づいて前記暗号処理プログラムから前記第１の部分を取得し、また、前記第２の制御プログラムに含まれる版数毎の前記条件に基づいて前記第１および前記第２の部分を結合することで前記暗号処理プログラムを生成する、請求項１乃至３の何れか１項に記載のストレージ制御装置。
【請求項５】
前記演算部は、自装置の稼働停止時に、前記暗号処理プログラムから前記第１の部分を取得して前記不揮発性記憶媒体に格納し、また、前記第２の制御プログラムに更新した後の自装置の稼働再開時に、前記第２の制御プログラムを参照して前記暗号処理プログラムの生成を行う、請求項１乃至４の何れか１項に記載のストレージ制御装置。
【請求項６】
ストレージ装置の制御に用いられるコンピュータに、
データの暗号化および復号に用いられる暗号処理プログラムと前記暗号処理プログラムの版数の情報とを含み前記ストレージ装置の制御に用いられる第１の制御プログラムを取得し、
前記データのバックアップ時に、前記データを暗号化した暗号化データと暗号化に用いられた前記暗号処理プログラムの第１の部分と前記版数の情報とを不揮発性記憶媒体に格納し、
前記第１の制御プログラムを第２の制御プログラムに更新した後、前記不揮発性記憶媒体から前記暗号化データを読み出す際に、前記不揮発性記憶媒体に格納された前記版数に対応する前記暗号処理プログラムの第２の部分を、前記第２の制御プログラムから取得し、
取得した前記第２の部分と前記不揮発性記憶媒体に格納された前記第１の部分とを用いて前記不揮発性記憶媒体に格納された前記暗号化データの復号に用いられる前記暗号処理プログラムを生成する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ制御装置およびプログラムに関する。
【背景技術】
【０００２】
ユーザが利用するユーザデータ（例えば、ユーザの業務に用いられるデータなど）を記憶するストレージ装置が利用されている。ストレージ装置に対するデータアクセスは、ストレージ制御装置により制御される。ストレージ制御装置では、ストレージ装置の各種ハードウェアモジュールを制御する制御プログラムが利用されている。ハードウェアを制御する制御プログラムを、ファームウェア（Firmware）と呼ぶこともある。
【０００３】
例えば、ストレージ制御装置は、ファームウェアを実行し、ストレージ装置に対するデータアクセスの制御や冗長化されたハードウェアモジュールの動作制御を行う。ストレージ制御装置は、ストレージ装置の設定データを管理し、設定データに基づいてストレージ装置を制御することもある。ストレージ制御装置のファームウェアは、機能拡張や修正などのために、ファームウェアの提供元により更新され、配布されることがある。ストレージ制御装置のユーザは、配布されたファームウェアをストレージ制御装置に適用し、古いファームウェアを新しいファームウェアに交換できる。
【０００４】
ところで、データを暗号化することで、第三者によるデータの不正取得を防ぐことが考えられる。例えば、コンテンツを暗号化しておき、コンテンツを再生するプレイヤが、ネットワークを介してコンテンツに対応する復号化ソフトウェアを取得する提案がある。
【０００５】
また、電子メールの暗号化・復号を行うメール保護プログラムを暗号化した上で二分割し、一方を第１のプロセッサに、他方を第２のプロセッサに、それぞれ分けて保存する提案もある。この提案では、暗号化され二分割されたメール保護プログラムの一方は、第１，第２のプロセッサのうち復号化プログラムが実行される側に転送されて他方と合体されたのち復号化プログラムによって復号化される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２５７６８号公報
【特許文献２】特開２００３−１１４８５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ストレージ制御装置の制御プログラム（例えば、ファームウェア）で扱われる設定データは、ストレージ装置の記憶領域にアクセスするための重要な情報を含み得る。そこで、設定データを暗号化／復号する暗号処理プログラムを制御プログラムに含め、設定データのバックアップ時に、暗号処理プログラムにより設定データを暗号化することで、ストレージ装置への不正アクセスに対するセキュリティを高めることが考えられる。暗号処理プログラムによる暗号処理の方法を更新していけば、セキュリティをより向上し得る。しかし、この場合、制御プログラムの配布方法が問題となる。
【０００８】
例えば、過去の暗号処理プログラムが更新後の制御プログラムで利用できなくなると、過去の暗号処理プログラムを用いて暗号化されたデータを復号できなくなる。一方、過去に配布された全ての暗号処理プログラムの全体を、制御プログラムに含めると、暗号処理プログラムの更新に伴って、制御プログラムのデータ量が増大するおそれがある。
【０００９】
１つの側面では、本発明は、制御プログラムのデータ量を低減できるストレージ制御装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、ストレージ制御装置が提供される。このストレージ制御装置は、記憶部と演算部とを有する。記憶部は、データの暗号化および復号に用いられる暗号処理プログラムと暗号処理プログラムの版数の情報とを含みストレージ装置の制御に用いられる第１の制御プログラムを記憶する。演算部は、データのバックアップ時に、データを暗号化した暗号化データと暗号化に用いられた暗号処理プログラムの第１の部分と版数の情報とを不揮発性記憶媒体に格納し、第１の制御プログラムを第２の制御プログラムに更新した後、不揮発性記憶媒体から暗号化データを読み出す際に、不揮発性記憶媒体に格納された版数に対応する暗号処理プログラムの第２の部分を、第２の制御プログラムから取得し、取得した第２の部分と不揮発性記憶媒体に格納された第１の部分とを用いて不揮発性記憶媒体に格納された暗号化データの復号に用いられる暗号処理プログラムを生成する。
【００１１】
また、１つの態様では、ストレージ装置の制御に用いられるコンピュータによって実行されるプログラムが提供される。このプログラムは、コンピュータに、データの暗号化および復号に用いられる暗号処理プログラムと暗号処理プログラムの版数の情報とを含みストレージ装置の制御に用いられる第１の制御プログラムを取得し、データのバックアップ時に、データを暗号化した暗号化データと暗号化に用いられた暗号処理プログラムの第１の部分と版数の情報とを不揮発性記憶媒体に格納し、第１の制御プログラムを第２の制御プログラムに更新した後、不揮発性記憶媒体から暗号化データを読み出す際に、不揮発性記憶媒体に格納された版数に対応する暗号処理プログラムの第２の部分を、第２の制御プログラムから取得し、取得した第２の部分と不揮発性記憶媒体に格納された第１の部分とを用いて不揮発性記憶媒体に格納された暗号化データの復号に用いられる暗号処理プログラムを生成する、処理を実行させる。
【発明の効果】
【００１２】
１つの側面では、制御プログラムのデータ量を低減できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態のストレージ制御装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】第２の実施の形態のストレージ装置のハードウェア例を示す図である。
【図４】第２の実施の形態のサーバのハードウェア例を示す図である。
【図５】第２の実施の形態の機能例を示す図である。
【図６】第２の実施の形態の管理テーブルの例を示す図である。
【図７】第２の実施の形態の断片テーブルの例を示す図である。
【図８】第２の実施の形態のプログラム断片の例を示す図である。
【図９】第２の実施の形態の暗号化の例を示すフローチャートである。
【図１０】第２の実施の形態の復号の例を示すフローチャートである。
【図１１】第２の実施の形態の暗号処理の具体例を示す図である。
【図１２】ファームウェアの比較例を示す図である。
【図１３】第３の実施の形態のテーブル例を示す図である。
【図１４】第３の実施の形態の管理テーブルの作成例を示すフローチャートである。
【図１５】第３の実施の形態の暗号化の例を示すフローチャートである。
【図１６】第３の実施の形態の復号の例を示すフローチャートである。
【図１７】第３の実施の形態の暗号処理プログラムの復元の具体例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ制御装置を示す図である。ストレージ制御装置１は、ストレージ装置（図示を省略）に対するデータアクセスやストレージ装置およびストレージ制御装置１が備えるハードウェアモジュールの動作を制御する。ストレージ装置は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などを複数備え、比較的大容量の記憶領域を利用可能とする。ストレージ制御装置１は、ストレージ装置に内蔵されることもあるし、ストレージ装置に外付けされることもある。
【００１５】
ストレージ制御装置１は、記憶部１ａ、演算部１ｂおよび不揮発性記憶媒体１ｃを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置である。
演算部１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１ｂはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１６】
不揮発性記憶媒体１ｃは、ＨＤＤ、ＳＳＤ、磁気テープおよび光学ディスクなどを含み得る。不揮発性記憶媒体１ｃは、ストレージ制御装置１に内蔵されてもよいし、ストレージ装置内に内蔵されてもよい。不揮発性記憶媒体１ｃは、ストレージ制御装置１またはストレージ装置から取り外し可能であり、データを記憶させた状態で個別に保管可能なもの（例えば、磁気テープや光学ディスクなど）でもよい。
【００１７】
記憶部１ａは、制御プログラム２（第１の制御プログラム）および制御プログラム２の処理に用いられる設定データ４を記憶する。制御プログラム２は、ストレージ装置（ストレージ制御装置１を内蔵するストレージ装置またはストレージ制御装置１と外付けされたストレージ装置も含む）の制御に用いられるソフトウェアである。制御プログラム２は、ファームウェアと呼ばれるものでもよい。制御プログラム２は、ストレージ制御装置１が備えるフラッシュメモリなどの不揮発性記憶装置にも格納される。演算部１ｂは、当該不揮発性記憶装置から制御プログラム２を読み出して記憶部１ａに格納し、実行できる。
【００１８】
制御プログラム２は、データの暗号化および復号に用いられる暗号処理プログラムＸ１と暗号処理プログラムＸ１の版数の情報３とを含む。例えば、版数の情報３は、版数Ｖ１を示している。暗号処理プログラムＸ１は、版数Ｖ１の暗号処理プログラムである。例えば、暗号処理プログラムＸ１は、設定データ４の暗号化および復号に用いられる。
【００１９】
演算部１ｂは、データのバックアップ時に、暗号化後のデータと暗号化に用いられた暗号処理プログラムの第１の部分と当該暗号処理プログラムの版数の情報とを不揮発性記憶媒体１ｃに格納する。例えば、演算部１ｂは、設定データ４のバックアップ時に、暗号処理プログラムＸ１を用いて設定データ４を暗号化し、暗号化データ４ａを生成する。設定データ４のバックアップは、例えば、ストレージ制御装置１のシャットダウンのたびに発生し得る。ストレージ制御装置１を次回起動させるときに、設定データ４の設定内容を引き継げるからである。
【００２０】
暗号化データ４ａは、設定データ４の暗号化後のデータである。演算部１ｂは、暗号化データ４ａと暗号処理プログラムＸ１の第１の部分Ｘ１１と暗号処理プログラムＸ１の版数の情報３とを不揮発性記憶媒体１ｃに格納する。暗号処理プログラムＸ１の第２の部分Ｘ１２は、暗号処理プログラムＸ１から第１の部分Ｘ１１を除去した残りの部分である。
【００２１】
演算部１ｂは、ストレージ制御装置１の動作制御に用いる制御プログラムを、制御プログラム２から制御プログラム２ａ（第２の制御プログラム）に更新する。すなわち、演算部１ｂは、制御プログラム２に代えて、制御プログラム２ａを記憶部１ａに格納し、実行する。制御プログラム２ａは、制御プログラム２よりも新しい。このとき、不揮発性記憶媒体１ｃに記憶された暗号化データ４ａから設定データ４を復号できれば、制御プログラムの更新前後でストレージ装置の設定を維持できる。
【００２２】
ここで、制御プログラム２ａでは、過去の版数の暗号処理プログラムに対しては、暗号処理プログラムの一部（第２の部分）が、版数に対応付けて含まれているだけであり、過去の暗号処理プログラムの全体は含まれていない。例えば、制御プログラム２ａは、過去の版数の情報３（版数Ｖ１を示す）に対して第２の部分Ｘ１２を含む。制御プログラム２ａは、過去の版数の情報３ａ（版数Ｖ２を示す）に対して第２の部分Ｘ２２を含む。制御プログラム２ａは、版数Ｖ１，Ｖ２よりも新しい版数（例えば、最新の版数）の暗号処理プログラムの全体を含んでもよい。演算部１ｂは、次のようにして暗号化データ４ａを復号する。
【００２３】
演算部１ｂは、制御プログラム２を制御プログラム２ａに更新した後、不揮発性記憶媒体１ｃからデータを読み出す際に、不揮発性記憶媒体１ｃに格納された版数に対応する暗号処理プログラムの第２の部分を、制御プログラム２ａから取得する。例えば、不揮発性記憶媒体１ｃには、版数Ｖ１を示す情報３が格納されている。この場合、演算部１ｂは、版数Ｖ１に対応する第２の部分Ｘ１２を、制御プログラム２ａから検索し、取得する。
【００２４】
演算部１ｂは、取得した第２の部分と不揮発性記憶媒体１ｃに格納された第１の部分とを用いて不揮発性記憶媒体１ｃに格納されたデータの復号に用いられる暗号処理プログラムを生成する。例えば、演算部１ｂは、取得した第２の部分Ｘ１２と不揮発性記憶媒体１ｃに格納された第１の部分Ｘ１１とを用いて、暗号処理プログラムＸ１を生成する。暗号処理プログラムＸ１は、暗号化データ４ａの復号に用いられる暗号処理プログラムである。演算部１ｂは、暗号処理プログラムＸ１を用いて暗号化データ４ａを復号し、設定データ４を得る。
【００２５】
ストレージ制御装置１によれば、設定データ４のバックアップ時に、暗号化データ４ａと暗号化に用いられた暗号処理プログラムＸ１の第１の部分Ｘ１１と当該暗号処理プログラムＸ１の版数の情報３（版数Ｖ１）とが不揮発性記憶媒体１ｃに格納される。制御プログラム２を制御プログラム２ａに更新した後、不揮発性記憶媒体１ｃから設定データ４を読み出す際に、不揮発性記憶媒体１ｃに格納された版数Ｖ１に対応する暗号処理プログラムＸ１の第２の部分Ｘ１２が、制御プログラム２ａから取得される。第２の部分Ｘ１２と不揮発性記憶媒体１ｃに格納された第１の部分Ｘ１１とを用いて不揮発性記憶媒体１ｃに格納された暗号化データ４ａの復号に用いられる暗号処理プログラムＸ１が生成される。これにより、制御プログラムのデータ量を低減できる。
【００２６】
例えば、過去の版数Ｖ１に対応する暗号処理プログラムＸ１の全体や過去の版数Ｖ２に対応する暗号処理プログラムの全体を、制御プログラム２ａに含めることも考えられる。しかし、この方法では、暗号処理プログラムの更改に伴って制御プログラムのデータ量が増大するおそれがある。また、暗号処理プログラムＸ１の全体を不揮発性記憶媒体１ｃに格納すると、不揮発性記憶媒体１ｃを第三者に取得されるだけで、暗号化データ４ａを復号されるおそれがあり、セキュリティ性が低下する。
【００２７】
ストレージ制御装置１によれば、過去の暗号処理プログラムの一部だけを新しい制御プログラム２ａに含めさえすれば、過去の暗号処理プログラムで暗号化されたデータ（例えば、暗号化データ４ａ）を、制御プログラム２ａに更新した後も、復号可能である。このため、版数Ｖ１，Ｖ２などに対応する過去の暗号処理プログラムの全体を制御プログラム２ａに含めるよりも、制御プログラム２ａのデータサイズを小さくすることができる。
【００２８】
特に、第１の部分（例えば、第１の部分Ｘ１１）のデータサイズを、第２の部分（例えば、第２の部分Ｘ１２）のデータサイズよりも大きくすることがより好ましい。制御プログラム２ａに含める第２の部分のデータサイズが小さいほど、制御プログラム２ａのデータ量をより低減できるからである。
【００２９】
また、不揮発性記憶媒体１ｃに暗号処理プログラムＸ１の全体を格納しないので、不揮発性記憶媒体１ｃが第三者に取得されたとしても、暗号化データ４ａが復号されて、設定データ４の内容を不正に取得される可能性を低減できる。
【００３０】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、ストレージ装置１００、サーバ２００およびＦＷ（FirmWare）配信サーバ３００を含む。ストレージ装置１００とサーバ２００とは、ＳＡＳ（Serial Attached SCSI）やファイバチャネル（ＦＣ：Fibre Channel）などのケーブルを用いて接続されている。このような接続構成をＤＡＳ（Direct Attached Storage）と呼ぶこともある。ただし、ストレージ装置１００およびサーバ２００をファイバチャネルやｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）を介して接続してもよい。ストレージ装置１００をＮＡＳ（Network Attached Storage）として用いることもできる。
【００３１】
ストレージ装置１００およびサーバ２００は、ネットワーク１０に接続されている。ネットワーク１０は、管理用のＬＡＮ（Local Area Network）である。ネットワーク１０は、ネットワーク２０に接続されている。ネットワーク２０は、インターネットなどの広域ネットワークである。
【００３２】
ストレージ装置１００は、サーバ２００の処理に用いられるユーザデータを記憶する。ストレージ装置１００は、ファームウェアを実行し、ストレージ装置１００内のハードウェアモジュールの動作を制御する。ストレージ装置１００は、ファームウェアの処理に用いられる設定データを暗号化してバックアップする機能を有している。
【００３３】
サーバ２００は、ストレージ装置１００に格納されたユーザデータにアクセスするサーバコンピュータである。
ＦＷ配信サーバ３００は、ストレージ装置１００で用いられるファームウェアを、ストレージ装置１００またはサーバ２００に配信するサーバコンピュータである。ファームウェアは、機能拡張やプログラム修正に応じて更新され得る。ＦＷ配信サーバ３００は、ファームウェアが更新されると当該ファームウェアの配信を行う。以下の説明では、ファームウェアをＦＷと略記することがある。
【００３４】
図３は、第２の実施の形態のストレージ装置のハードウェア例を示す図である。ストレージ装置１００は、ＣＥ（Controller Enclosure）１０１およびＤＥ（Drive Enclosure）１０２，１０３を有する。ＣＥ１０１はＣＭ（Controller Module）１１０，１２０を有する。ＣＭ１１０，１２０は、ＤＥ１０２，１０３に対するデータアクセスやストレージ装置１００内のハードウェアモジュールの動作を制御するストレージ制御装置である。ストレージ装置１００の場合、ＣＭ１１０，１２０（ストレージ制御装置）がストレージ装置１００に内蔵されているといえる。なお、ＣＥ１０１をストレージ制御装置と考えてもよい。ただし、ＤＥ１０２，１０３を別個の筐体で用意し、ＣＭ１１０，１２０（あるいはＣＥ１０１）に外付けしてもよい。
【００３５】
ＣＭ１１０，１２０はＣＥ１０１内で冗長化されている。ＣＭ１１０内の各種のハードウェアモジュールもＣＭ１１０内で冗長化されている。ＣＭ１２０についても同様である。
【００３６】
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、フラッシュメモリ１１３、ＣＡ（Channel Adaptor）１１４，１１５、ＮＡ（Network Adaptor）１１６およびＥＸＰ（EXPander）１１７，１１８を有する。
【００３７】
プロセッサ１１１は、ＣＭ１１０の情報処理を制御するプロセッサである。プロセッサ１１１は、マルチプロセッサであってもよい。プロセッサ１１１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１１１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００３８】
ＲＡＭ１１２は、ＣＭ１１０の主記憶装置である。ＲＡＭ１１２は、プロセッサ１１１に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。
フラッシュメモリ１１３は、ＣＭ１１０の補助記憶装置である。フラッシュメモリ１１３は、不揮発性の半導体メモリである。フラッシュメモリ１１３は、ＦＷのプログラムなどを記憶する。
【００３９】
ＣＡ１１４，１１５は、サーバ２００と通信する通信インタフェースである。ＣＡ１１４，１１５は冗長化されている。
ＮＡ１１６は、ネットワーク１０を介してＦＷ配信サーバ３００と通信する通信インタフェースである。ＣＭ１１０は、複数個のＮＡを備えてもよい。
【００４０】
ＥＸＰ１１７，１１８は、ＤＥ１０２，１０３にアクセスするための通信インタフェースである。ＥＸＰ１１７は、ＤＥ１０２に接続されている。ＥＸＰ１１８は、ＤＥ１０３に接続されている。
【００４１】
ＣＭ１２０も、ＣＭ１１０と同様のハードウェアを用いて実現できる。ＣＭ１２０もＤＥ１０２，１０３に接続されている。また、ＣＭ１２０もサーバ２００およびネットワーク１０に接続される（ただし、図示を省略している）。
【００４２】
ＤＥ１０２，１０３は、複数のＨＤＤ（磁気ディスク装置）を収容し、複数のＨＤＤを組み合わせた大容量の記憶領域を利用可能にする。ＤＥ１０２は、ＨＤＤ１０２ａ，１０２ｂ，１０２ｃ，１０２ｄを有している。ＤＥ１０３は、ＨＤＤ１０３ａ，１０３ｂ，１０３ｃ，１０３ｄを有している。ＤＥ１０２，１０３は、ＨＤＤの代わりに、または、ＨＤＤと併せて、ＳＳＤなどの他の不揮発性記憶媒体を備えてもよい。例えば、ＣＭ１１０，１２０は、ＤＥ１０２，１０３に内蔵された複数のＨＤＤを用いてＲＡＩＤ（Redundant Array of Inexpensive Disks）と呼ばれる技術により、アクセス性能や耐障害性を確保した論理的な記憶領域を実現し得る。
【００４３】
図４は、第２の実施の形態のサーバのハードウェア例を示す図である。サーバ２００は、プロセッサ２０１，ＲＡＭ２０２，ＨＤＤ２０３，ＨＢＡ（Host Bus Adaptor）２０４、画像信号処理部２０５、入力信号処理部２０６、読み取り装置２０７および通信インタフェース２０８を有する。ＦＷ配信サーバ３００もサーバ２００と同様のハードウェアを用いて実現できる。
【００４４】
プロセッサ２０１は、マルチプロセッサであってもよい。プロセッサ２０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ２０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４５】
ＲＡＭ２０２は、サーバ２００の主記憶装置である。ＲＡＭ２０２は、プロセッサ２０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０２は、プロセッサ２０１による処理に用いる各種データを記憶する。
【００４６】
ＨＤＤ２０３は、サーバ２００の補助記憶装置である。ＨＤＤ２０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ２０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。サーバ２００は、フラッシュメモリやＳＳＤなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００４７】
ＨＢＡ２０４は、ストレージ装置１００に対するデータの書き込みやストレージ装置１００からのデータの読み出しに用いられる通信インタフェースである。ストレージ装置１００との通信には、例えば、ＳＡＳやＦＣなどを用いることができる。
【００４８】
画像信号処理部２０５は、プロセッサ２０１からの命令に従って、サーバ２００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００４９】
入力信号処理部２０６は、サーバ２００に接続された入力デバイス１２から入力信号を取得し、プロセッサ２０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００５０】
読み取り装置２０７は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置２０７は、例えば、プロセッサ２０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ２０２またはＨＤＤ２０３に格納する。更に、プロセッサ２０１は、記録媒体１３から読み取ったプログラムやデータを、ストレージ装置１００のＲＡＭ１１２やフラッシュメモリ１１３に格納するようストレージ装置１００に指示することもできる。
【００５１】
通信インタフェース２０８は、ネットワーク１０を介してＦＷ配信サーバ３００を含む他のコンピュータと通信を行う。
図５は、第２の実施の形態の機能例を示す図である。ストレージ装置１００は、記憶部１３０、ＦＷ記憶部１４０、バックアップデータ記憶部１５０、ユーザデータ記憶部１６０および制御部１７０を有する。
【００５２】
記憶部１３０は、ＲＡＭ１１２に確保された記憶領域として実現される。記憶部１３０は、ファームウェアのプログラムやファームウェアの処理に用いられる設定データを一時的に記憶する。ファームウェアは、設定データの暗号化および復号を行うための暗号処理プログラムを含む。ファームウェアは、暗号処理プログラムで用いられる鍵の情報なども含む。ＲＡＭ１１２は、揮発性の記憶装置なのでストレージ装置１００（または、ＣＭ１１０）がシャットダウン（電源オフ）されると、記憶部１３０に格納された情報は消去される。
【００５３】
ＦＷ記憶部１４０は、フラッシュメモリ１１３に確保された記憶領域として実現される。フラッシュメモリ１１３は、不揮発性の記憶装置なのでストレージ装置１００（または、ＣＭ１１０）がシャットダウンされても、ＦＷ記憶部１４０に格納された情報は保持される。
【００５４】
ＦＷ記憶部１４０は、ファームウェアのプログラムを記憶する。例えば、プロセッサ１１１がＦＷ記憶部１４０に記憶されたファームウェアのプログラムを読み出して、記憶部１３０に格納し、実行することで、ストレージ装置１００上でファームウェアの機能が発揮される。
【００５５】
ＦＷ記憶部１４０に記憶された情報は書き換え可能である。ファームウェアが更新されると、更新後のファームウェアがＦＷ記憶部１４０に格納される。ファームウェアの更新では、前述の暗号処理プログラムも更新され得る。更新後のファームウェアがＦＷ記憶部１４０に格納された後に、ストレージ装置１００（または、ＣＭ１１０）を再起動することで、記憶部１３０に格納されたファームウェアを更新前のものから更新後のものへ置き換えることができる。
【００５６】
バックアップデータ記憶部１５０は、ＤＥ１０２のＨＤＤに確保された記憶領域として実現される。ＨＤＤは、不揮発性の記憶装置なのでストレージ装置１００がシャットダウンされても、バックアップデータ記憶部１５０に格納された情報は保持される。
【００５７】
バックアップデータ記憶部１５０は、ファームウェアの処理に用いられる設定データを記憶する。ただし、後述するように設定データは暗号化されて、バックアップデータ記憶部１５０に格納される。例えば、ストレージ装置１００（または、ＣＭ１１０）がシャットダウンされる際に、記憶部１３０に格納された設定データを暗号化して、バックアップデータ記憶部１５０に退避しておく。すると、ストレージ装置１００（または、ＣＭ１１０）の次回起動時に、暗号化された設定データをバックアップデータ記憶部１５０から読み出せる。ファームウェアに含まれる暗号処理プログラムを用いて設定データを復号して利用すれば、シャットダウン前の設定を、再起動後も引き継げる。
【００５８】
ユーザデータ記憶部１６０は、ＤＥ１０２のＨＤＤに確保された記憶領域として実現できる。ユーザデータ記憶部１６０は、ユーザの業務処理などに用いられるユーザデータを記憶する。ＤＥ１０３も同様にユーザデータ記憶部を有している。
【００５９】
制御部１７０は、ファームウェアの稼働状況の管理や、ファームウェアの更新を制御する。制御部１７０は、ファームウェアとは別個のプログラムがプロセッサ１１１によって実行されることで実現されてもよいし、ファームウェアの機能の一部として実現されてもよい。
【００６０】
制御部１７０は、ストレージ装置１００やＣＭ１１０がシャットダウンされる際に、記憶部１３０に格納された設定データをバックアップデータ記憶部１５０に退避させる。このとき、制御部１７０は、ファームウェアに含まれる暗号処理プログラムを用いて、設定データを暗号化した上で退避させる。
【００６１】
ここで、設定データは、ＤＥ１０２，ＤＥ１０３へのデータアクセスに用いられる情報を含んでいる。設定データが暗号化されていれば、バックアップデータ記憶部１５０に退避させた設定データの内容を参照することが困難になる。このため、設定データを暗号化することで、ＤＥ１０２，１０３に格納されたユーザデータに対する不正アクセスを抑制できる。
【００６２】
制御部１７０は、暗号化後の設定データの退避とともに、暗号化に用いた暗号処理プログラムの一部分（プログラム断片）を当該暗号処理プログラムの版数に対応付けてバックアップデータ記憶部１５０に退避させる。制御部１７０は、ストレージ装置１００やＣＭ１１０が起動すると、バックアップデータ記憶部１５０に記憶され、暗号化されている設定データを復号して、記憶部１３０に格納する。すると、シャットダウン前と同じ設定を引き継いで、ストレージ装置１００を利用できる。暗号化された設定データの復号方法の詳細については、後述する。
【００６３】
サーバ２００は、記憶部２１０およびＦＷ適用部２２０を有する。記憶部２１０は、ＲＡＭ２０２やＨＤＤ２０３に確保された記憶領域として実現される。記憶部２１０は、ＦＷ配信サーバ３００から取得したストレージ装置１００のファームウェアのプログラムを記憶する。ＦＷ適用部２２０は、最新版のファームウェアのプログラムをＦＷ配信サーバ３００から取得し、ストレージ装置１００に適用する。ただし、ストレージ装置１００が、最新版のファームウェアのプログラムを（サーバ２００を介さずに）ＦＷ配信サーバ３００から取得してもよい。
【００６４】
ＦＷ配信サーバ３００は、記憶部３１０および配信部３２０を有する。記憶部３１０は、ＦＷ配信サーバ３００が備えるＲＡＭやＨＤＤに確保された記憶領域として実現される。記憶部３１０は、ファームウェアのプログラムを記憶する。配信部３２０は、記憶部３１０に格納されたファームウェアのプログラムの配信を行う。
【００６５】
ここで、記憶部３１０に格納されたファームウェアは、歴代の暗号処理プログラムに対して次のような情報を含む。（１）最新の版数の暗号処理プログラムの全体。（２）最新よりも古い版数（過去の版数）の暗号処理プログラムの一部分（プログラム断片）。
【００６６】
なお、前述のように、制御部１７０は、プロセッサ１１１によって実行されるプログラムのモジュールであってもよい。また、ＣＭ１２０も、記憶部１３０、ＦＷ記憶部１４０、バックアップデータ記憶部１５０および制御部１７０と同様の機能を有し、ＣＭ１１０と同様の処理を行える。更に、ＦＷ適用部２２０は、プロセッサ２０１によって実行されるプログラムのモジュールであってもよい。配信部３２０は、ＦＷ配信サーバ３００が備えるプロセッサによって実行されるプログラムのモジュールであってもよい。
【００６７】
図６は、第２の実施の形態の管理テーブルの例を示す図である。管理テーブル１４１は、ファームウェアのプログラムとともにＦＷ配信サーバ３００によって配信される情報である。管理テーブル１４１は、例えばファームウェアに組み込まれており、ファームウェアのプログラムとともにＦＷ記憶部１４０に格納される。管理テーブル１４１は、版数、データサイズおよびプログラム断片の項目を含む。
【００６８】
版数の項目には、暗号処理プログラムの版数が登録される。データサイズの項目には、プログラム断片のサイズが登録される。プログラム断片の項目には、プログラム断片が登録される。プログラム断片は、例えば、バイナリ形式の暗号処理プログラムの一部分である。以下では、プログラム断片を示す場合に“プログラム断片Ａ１”のように記載する。
【００６９】
例えば、管理テーブル１４１には、版数が“１．０”、データサイズが“ａ１バイト”、プログラム断片が“プログラム断片Ａ１”という情報が登録されている。これは、管理テーブル１４１に、版数“１．０”に対応する暗号処理プログラムのプログラム断片Ａ１が含まれており、プログラム断片Ａ１のデータサイズがａ１バイトであることを示している。
【００７０】
管理テーブル１４１には、最新版までの暗号処理プログラムに対して版数、データサイズおよびプログラム断片が登録されることになる。ただし、管理テーブル１４１には、最新版の暗号処理プログラムのプログラム断片の本体は登録されなくてもよい（最新版に関しては、少なくとも最新の版数と当該プログラム断片のデータサイズが登録されていればよい）。
【００７１】
図７は、第２の実施の形態の断片テーブルの例を示す図である。断片テーブル１５１は、制御部１７０によって生成され、バックアップデータ記憶部１５０に格納される。断片テーブル１５１は、版数、データサイズおよびプログラム断片の項目を含む。
【００７２】
版数の項目には、暗号化に用いられた暗号処理プログラムの版数が登録される。データサイズの項目には、プログラム断片のサイズが登録される。
例えば、断片テーブル１５１には、版数が“１．０”、データサイズが“ａ２バイト”、プログラム断片が“プログラム断片Ａ２”という情報が登録されている。これは、断片テーブル１５１に、版数“１．０”に対応する暗号処理プログラムのプログラム断片Ａ２が含まれており、プログラム断片Ａ２のデータサイズがａ２バイトであることを示している。
【００７３】
図８は、第２の実施の形態のプログラム断片の例を示す図である。図８（Ａ）はプログラム断片Ａ１の作成を例示している。図８（Ｂ）はプログラム断片Ａ２の作成を例示している。プログラム断片Ａ１は、暗号処理プログラムＡの一部分である。また、プログラム断片Ａ２は、暗号処理プログラムＡに対してプログラム断片Ａ１の部分を除いた残りの部分である。例えば、プログラム断片Ａ１は、暗号処理プログラムＡの先頭からａ１バイト分の部分（前部分）である。プログラム断片Ａ２は、残りのａ２バイト分の部分（後ろ部分）である。この場合、プログラム断片Ａ１の後方にプログラム断片Ａ２を結合することで、暗号処理プログラムＡを得ることができる。
【００７４】
プログラム断片Ａ１は、配信部３２０により暗号処理プログラムＡから作成され、記憶部３１０に格納された管理テーブルに登録される。配信部３２０は、最新版よりも古い他の暗号処理プログラムについても同様に、サイズと版数とに対応付けてプログラム断片を管理テーブルに登録する。管理テーブルは最新のファームウェアに含めて配布されることになる。
【００７５】
一方、プログラム断片Ａ２は、制御部１７０により暗号処理プログラムＡから作成され、断片テーブル１５１に登録される。このとき、プログラム断片Ａ２のサイズａ２を、プログラム断片Ａ１のサイズａ１よりも大きくする。ファームウェアに含まれる管理テーブルのデータサイズを抑え、配信するファームウェアのサイズをより低減するためである。なお、先頭側をプログラム断片Ａ１としたが、先頭側をプログラム断片Ａ２としてもよい。プログラム断片Ａ２は、第１の実施の形態の第１の部分Ｘ１１の一例である。プログラム断片Ａ１は、第１の実施の形態の第２の部分Ｘ１２の一例である。
【００７６】
図９は、第２の実施の形態の暗号化の例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
（Ｓ１１）ＣＭ１１０は、シャットダウンを開始する。制御部１７０が、ＣＭ１１０のシャットダウンを制御してもよい。
【００７７】
（Ｓ１２）制御部１７０は、現在実行中のファームウェアに含まれる最新版の暗号処理プログラムを用いて、記憶部１３０に格納された設定データを暗号化する。ここで、一例として、暗号化に用いられた暗号処理プログラムは、版数“１．０”の暗号処理プログラムＡであるとする。また、暗号化後の設定データを暗号化データと呼ぶこととする。
【００７８】
（Ｓ１３）制御部１７０は、バックアップデータ記憶部１５０に暗号化データを格納する（暗号化データの退避）。
（Ｓ１４）制御部１７０は、暗号処理プログラムＡを分割してプログラム断片Ａ２を取得する。具体的には、制御部１７０は、管理テーブル１４１を参照して、プログラム断片Ａ１のデータサイズ“ａ１バイト”を取得する。制御部１７０は、暗号処理プログラムＡのうち、先頭のａ１バイト分を除いた部分をプログラム断片Ａ２とする。
【００７９】
（Ｓ１５）制御部１７０は、暗号処理プログラムＡの版数“１．０”、プログラム断片Ａ２のデータサイズ“ａ２バイト”およびプログラム断片Ａ２本体を、バックアップデータ記憶部１５０に格納された断片テーブル１５１に登録する。
【００８０】
（Ｓ１６）ＣＭ１１０は、シャットダウンを完了する。なお、ファームウェアのプログラムを更新する場合、更新後のファームウェアのプログラムが、フラッシュメモリ１１３上のＦＷ記憶部１４０に格納済みの状態で、シャットダウンが完了する。
【００８１】
このように、制御部１７０は、ＣＭ１１０のシャットダウン時（電源オフ時）に、ＲＡＭ１１２上の設定データを暗号化し、フラッシュメモリ１１３上に退避させることで、バックアップを行う。このとき、制御部１７０は、設定データの暗号化に用いられた暗号処理プログラムＡのプログラム断片Ａ２を断片テーブル１５１に登録する。
【００８２】
図１０は、第２の実施の形態の復号の例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
（Ｓ２１）ＣＭ１１０は、起動を開始する。例えば、プロセッサ１１１により、フラッシュメモリ１１３から制御部１７０の機能を記述したプログラムやファームウェアのプログラムがＲＡＭ１１２上にロードされ、これらのプログラムが実行されることで、ＣＭ１１０上で制御部１７０やファームウェアの機能が発揮される。このとき、ＲＡＭ１１２上から読み出されるファームウェアのプログラムが、前回シャットダウン時のファームウェアに対して更新されていることがある。その場合、暗号処理プログラムも更新されていることがある。
【００８３】
（Ｓ２２）制御部１７０は、断片テーブル１５１から、プログラム断片の版数を取得する。例えば、制御部１７０は、プログラム断片Ａ２の版数“１．０”を断片テーブル１５１から取得する。
【００８４】
（Ｓ２３）制御部１７０は、ステップＳ２２で取得した版数と同じ版数が管理テーブル１４１に存在するか否かを判定する。同じ版数が存在する場合、処理をステップＳ２４に進める。同じ版数が存在しない場合、処理を終了する。ステップＳ２２で取得した版数と同じ版数が管理テーブル１４１に存在しない場合は、バックアップデータ記憶部１５０に格納された暗号化データを復号できないことになる。この場合、制御部１７０は、ユーザにエラーを通知してもよい。
【００８５】
（Ｓ２４）制御部１７０は、ステップＳ２２で取得した版数が最新版であるか否かを判定する。最新版である場合、処理をステップＳ２８に進める。最新版でない場合、処理をステップＳ２５に進める。前述のように、ファームウェアには最新版の暗号処理プログラムの全体が含まれている。例えば、版数“１．０”が最新版であれば、ＲＡＭ１１２上にロードされているファームウェアに暗号処理プログラムＡの全体が含まれる。
【００８６】
（Ｓ２５）制御部１７０は、ステップＳ２２で取得した版数に対応するプログラム断片を管理テーブル１４１から取得する。管理テーブル１４１は、例えば、ファームウェアとともに記憶部１３０上にロードされている。版数“１．０”であれば、制御部１７０は、プログラム断片Ａ１を管理テーブル１４１から取得する。
【００８７】
（Ｓ２６）制御部１７０は、断片テーブル１５１からプログラム断片Ａ２を取得する。
（Ｓ２７）制御部１７０は、プログラム断片Ａ１，Ａ２を結合することで、暗号処理プログラムＡを復元する。
【００８８】
（Ｓ２８）制御部１７０は、暗号処理プログラムＡを用いて、バックアップデータ記憶部１５０に格納された暗号化データを復号することで、設定データを取得する。
このようにして、制御部１７０は、暗号処理プログラムＡを復元し、暗号化データを復号することで、設定データを取得する。制御部１７０は、取得した設定データを用いて、ストレージ装置１００の制御を行える。
【００８９】
図１１は、第２の実施の形態の暗号処理の具体例を示す図である。図１１の例では、設定データＣ１およびファームウェアＦ１が記憶部１３０に格納されている。ファームウェアＦ１では、暗号処理プログラムＡが最新版の暗号処理プログラムである。制御部１７０は、暗号処理プログラムＡを用いて、設定データＣ１を暗号化し、暗号化データＥ１を生成する。制御部１７０は、暗号化データＥ１をバックアップデータ記憶部１５０（フラッシュメモリ１１３）に格納する。また、制御部１７０は、暗号処理プログラムＡからプログラム断片Ａ２を取得する。制御部１７０は、暗号処理プログラムＡの版数“１．０”に対応付けて、プログラム断片Ａ２をバックアップデータ記憶部１５０に格納する（ステップＳＴ１）。
【００９０】
その後、ファームウェアＦ１がファームウェアＦ２に交換される。ファームウェアＦ２では、暗号処理プログラムＮが最新版である。ファームウェアＦ２は、暗号処理プログラムＮの版数よりも古い版数に対して、暗号処理プログラムの一部分だけを保持する。例えば、版数“１．０”に対しては、プログラム断片Ａ１だけを保持している。同様に、ファームウェアＦ２は、最新版よりも古いその他の版数に対し、各版数の暗号処理プログラムのプログラム断片Ｂ１，・・・，Ｎ１を含んでいる。なお、プログラム断片Ｎ１は、暗号処理プログラムＮのプログラム断片である。
【００９１】
ＣＭ１１０は、記憶部１３０（ＲＡＭ１１２）にファームウェアＦ２をロードして実行する。制御部１７０は、記憶部１３０に格納されたファームウェアＦ２の情報から、バックアップデータ記憶部１５０に格納されたプログラム断片Ａ２の版数“１．０”に対応するプログラム断片Ａ１を検索する。制御部１７０は、プログラム断片Ａ１，Ａ２を結合することで、暗号処理プログラムＡを復元する（ステップＳＴ２）。
【００９２】
制御部１７０は、バックアップデータ記憶部１５０に記憶された暗号化データＥ１を、復元した暗号処理プログラムＡを用いて復号することで、設定データＣ１を取得する（ステップＳＴ３）。なお、図１１のステップＳＴ３では記憶部１３０のプログラム断片Ａ１の図示を省略している。設定データＣ１は、ファームウェアＦ２の処理に利用される。ステップＳＴ３の復号後、制御部１７０は、暗号処理プログラムＡを記憶部１３０から削除してよい。
【００９３】
図１２は、ファームウェアの比較例を示す図である。図１２（Ａ）は、第２の実施の形態のストレージ装置１００で利用されるファームウェアＦ２を例示している。図１２（Ｂ）は、ファームウェアＦ２に対する比較例であるファームウェアＦａを示している。ファームウェアＦ２は、最新版よりも古い版の暗号処理プログラムについて、各版の暗号処理プログラムの一部分のみを含む。ファームウェアＦａは、全版数の暗号処理プログラムＡ，Ｂ，・・・，Ｎの全体を含んでいる。
【００９４】
第２の実施の形態のストレージ装置１００によれば、ファームウェアのデータ量を低減できる。例えば、上記のように過去の各版数について暗号処理プログラムの全体を、新しいファームウェアに含めることも考えられる。しかし、この方法では、暗号処理プログラムの更改に伴ってファームウェアのデータ量が増大するおそれがある。
【００９５】
ストレージ装置１００によれば、例えば、過去の暗号処理プログラムＡに対し、プログラム断片Ａ１だけを新しいファームウェアＦ２に含めさえすれば、ファームウェアＦ２に更新後も、暗号処理プログラムＡにより暗号化された暗号化データＥ１を復号可能である。このため、過去の暗号処理プログラムの全体をファームウェアＦ２に含めるよりも、ファームウェアＦ２のデータサイズを小さくすることができる。
【００９６】
特に、ストレージ装置１００側でバックアップ時に取得するプログラム断片（例えば、プログラム断片Ａ２）のデータサイズを、ファームウェアに含めるプログラム断片（例えば、プログラム断片Ａ１）のデータサイズよりも大きくする。言い換えれば、ファームウェアに含めるプログラム断片のデータサイズを、ストレージ装置１００側でバックアップ時に取得するプログラム断片よりも小さくする。これにより、ファームウェアのデータ量をより低減できる。
【００９７】
また、ＤＥ１０２のＨＤＤには暗号処理プログラムＡの全体を格納しないので、仮に当該ＨＤＤが第三者に取得されたとしても、暗号化データが復号されて、設定データの内容を不正に取得される可能性を低減できる。
【００９８】
なお、上記の説明では、バックアップデータ記憶部１５０をＤＥ１０２やＤＥ１０３のＨＤＤ上に設けるものとしたが、フラッシュメモリ１１３上に設けてもよい。あるいは、磁気テープや光ディスクなどの可搬型の外部記憶媒体にバックアップデータ記憶部１５０を設けてもよい。例えば、ストレージ装置１００に内蔵された磁気テープ装置や、ストレージ装置１００またはサーバ２００に接続された磁気テープ装置を利用可能なこともある。その場合、磁気テープ装置に挿入された磁気テープに、暗号化データＥ１や断片テーブル１５１を格納することもできる。
【００９９】
［第３の実施の形態］
以下、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１００】
第２の実施の形態では、暗号処理プログラムを前部分と後ろ部分とに分けるものとした。第３の実施の形態では、暗号処理プログラムをより細かい所定サイズの単位（以下、ブロックと称する）に分ける機能を提供する。
【０１０１】
ここで、第３の実施の形態の情報処理システムは、図２で示した第２の実施の形態の情報処理システムと同様である。また、第３の実施の形態の情報処理システムに含まれる装置や機能は、図２〜図５で示した第２の実施の形態の装置や機能と同様である。そこで、第３の実施の形態では、第２の実施の形態と同じ符号、名称を用いる。ただし、管理テーブルおよび断片テーブルに登録される情報が、第２の実施の形態とは異なる。
【０１０２】
図１３は、第３の実施の形態のテーブル例を示す図である。管理テーブル１４２は、管理テーブル１４１に代えて、ファームウェアとともに配信部３２０により配信される。管理テーブル１４２は、版数毎に複数用意され、ファームウェアとともにＦＷ記憶部１４０に格納される。
【０１０３】
管理テーブル１４２は、版数、サイズ、整数、個数およびプログラム断片の情報を含む。版数の項目に登録される情報は、管理テーブル１４１と同様である。
サイズの項目には、１ブロックのサイズ（例えば、２５６キロバイト）が登録される。整数の項目には、整数が登録される。個数の項目には、暗号処理プログラムをブロック単位に分割した場合のブロックの個数が登録される。プログラム断片として、複数のブロックが登録される。
【０１０４】
断片テーブル１５２は、断片テーブル１５１に代えて、バックアップデータ記憶部１５０に格納される。断片テーブル１５２は、版数およびプログラム断片の情報を含む。版数の項目に登録される情報は、断片テーブル１５１と同様である。プログラム断片として、複数のブロックが登録される。
【０１０５】
ここで、管理テーブル１４２および断片テーブル１５２において、プログラム断片を登録する領域よりも前側の所定の領域は、版数、サイズ、整数、個数などの管理情報（分割の条件を示す情報）を格納する領域になっている。ただし、断片テーブル１５２では、データサイズ、整数および個数に相当する領域には、すべて“０”が挿入される。
【０１０６】
例えば、暗号処理プログラムＺを次のように分けることが考えられる。まず、暗号処理プログラムＺをブロック単位に分割すると、ブロックＺ１，Ｚ２，Ｚ３，・・・となる。そして、管理テーブル１４２に登録された版数ｍ（ｍは整数）および整数ｎを用いて数列Ｋ＝｛ｋ1，ｋ2，ｋ3，・・・｝を求める。ここで、ｋi＝ｎ×ｉ＋ｍ（ｉは整数）である。また、管理テーブル１４２に登録されたブロックの個数αとして、ｋi≧αになる最小のｋiが得られるまで、ｉ＝０，１，２，３，・・・のようにｉを１ずつ増加させる。版数ｍが“１．１”などであれば、ｍ＝１のように小数点以下を切り捨てて整数化する（切り上げや四捨五入により整数化してもよい）。
【０１０７】
例えば、ｍ＝３、ｎ＝１０であれば、数列Ｋ＝｛３，１３，２３，３３，・・・｝である。そして、配信部３２０は、暗号処理プログラムＺのブロックＺ１，Ｚ２，Ｚ３，・・・のうち、前からｋi番目のブロックを、プログラム断片Ｚａの要素として、管理テーブル１４２に格納する。例えば、ｍ＝３，ｎ＝１０の例であれば、ブロックＺ３，Ｚ１３，Ｚ２３，・・・が管理テーブル１４２に登録されることになる。
【０１０８】
一方、この場合、制御部１７０は、ブロックＺ３，Ｚ１３，Ｚ２３，・・・以外のブロックＺ１，Ｚ２，Ｚ４，・・・を、プログラム断片Ｚｂの要素として、断片テーブル１５２に登録する。制御部１７０は、プログラム断片ＺｂのブロックＺ３，Ｚ１３，Ｚ２３，・・・に該当する部分（ブロックＺ３の部分であれば、ブロックＺ２，Ｚ４の間の部分）に、ダミーデータ（例えば、“０”のみを並べたデータ）を上書きする。
【０１０９】
すると、制御部１７０は、断片テーブル１５２に登録されたプログラム断片Ｚｂのダミーデータが上書きされた部分（ダミー部分）に、管理テーブル１４２に登録された各ブロックを挿入することで、暗号処理プログラムＺを復元できる。
【０１１０】
次に、第３の実施の形態の処理手順を説明する。まず、ＦＷ配信サーバ３００による管理テーブル１４２の作成手順を説明する。
図１４は、第３の実施の形態の管理テーブルの作成例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。なお、ＦＷ配信サーバ３００は、以下の手順を暗号処理プログラム毎に実行する。
【０１１１】
（Ｓ３１）配信部３２０は、記憶部３１０に格納された暗号処理プログラムＺをブロック単位に分割する。ブロックのサイズは、予め与えられる。配信部３２０は、暗号処理プログラムＺに対して、ブロックＺ１，Ｚ２，Ｚ３，・・・を得る。
【０１１２】
（Ｓ３２）配信部３２０は、暗号処理プログラムＺを分割して得た複数のブロックそれぞれに対し、記憶部３１０の上位アドレス側から番号を付与する。配信部３２０は、番号付けにより、ブロックの個数αを得ることができる。例えば、ブロックＺ１に番号“１”を付与する。ブロックＺ２に番号“２”を付与する。以降のブロックについても同様である。
【０１１３】
（Ｓ３３）配信部３２０は、小さい番号のブロックから順番に１つ取得する。暗号処理プログラムＺに対して、ステップＳ３３を最初に実行するならブロックＺ１を取得する。次にステップＳ３３を実行するときは、ブロックＺ２を取得する。ここで、ステップＳ３３で取得されたブロックを「着目するブロック」と称する。
【０１１４】
（Ｓ３４）配信部３２０は、着目するブロックの番号が数列Ｋ＝｛ｋ1，ｋ2，ｋ3，・・・｝に含まれるか否かを判定する。配信部３２０は、前述のように、ｋi＝ｎ×ｉ＋ｍ（ｉ＝０，１，２，３，・・・）の演算により、数列Ｋの各要素を求めることができる。着目するブロックの番号が数列Ｋに含まれる場合、処理をステップＳ３５に進める。着目するブロックの番号が数列Ｋに含まれない場合、処理をステップＳ３６に進める。
【０１１５】
（Ｓ３５）配信部３２０は、管理テーブルを作成して記憶部３１０に格納し、着目するブロックを登録する。
（Ｓ３６）配信部３２０は、全てのブロックを処理済みであるか否かを判定する。全てのブロックを処理済みである場合、処理をステップＳ３７に進める。全てのブロックを処理済みでない場合、処理をステップＳ３３に進める。
【０１１６】
（Ｓ３７）配信部３２０は、記憶部３１０に格納された管理テーブルに、暗号処理プログラムＺの版数、ブロックのサイズ、整数ｎ、ブロックの個数αを登録する。
このようにして、配信部３２０は、最新版および旧版の暗号処理プログラム毎に管理テーブルを作成し、ファームウェアに含める。配信部３２０は、最新版の暗号処理プログラムの全体もファームウェアに含める。次に、ストレージ装置１００による暗号化の手順を説明する。
【０１１７】
図１５は、第３の実施の形態の暗号化の例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
（Ｓ４１）ＣＭ１１０は、シャットダウンを開始する。制御部１７０が、ＣＭ１１０のシャットダウンを制御してもよい。
【０１１８】
（Ｓ４２）制御部１７０は、現在実行中のファームウェアに含まれる最新版の暗号処理プログラムを用いて、記憶部１３０に格納された設定データを暗号化する。ここで、一例として、暗号化に用いられた暗号処理プログラムは暗号処理プログラムＺであるとする。
【０１１９】
（Ｓ４３）制御部１７０は、バックアップデータ記憶部１５０に暗号化データを格納する（暗号化データの退避）。
（Ｓ４４）制御部１７０は、記憶部１３０に格納された暗号処理プログラムＺをブロック単位に分割する。ブロックのサイズとして、管理テーブルに登録されたサイズ（例えば、２５６キロバイト）を用いる。制御部１７０は、暗号処理プログラムＺに対して、ブロックＺ１，Ｚ２，Ｚ３，・・・を得る。
【０１２０】
（Ｓ４５）制御部１７０は、暗号処理プログラムＺを分割して得た複数のブロックそれぞれに対し、記憶部１３０の上位アドレス側から番号を付与する。制御部１７０は、番号付けにより、ブロックの個数αを得ることができる。例えば、ブロックＺ１に番号“１”を付与する。ブロックＺ２に番号“２”を付与する。以降のブロックについても同様である。
【０１２１】
（Ｓ４６）制御部１７０は、数列Ｋ＝｛ｋ1，ｋ2，ｋ3，・・・｝に含まれる番号のブロック部分にダミーデータ（すべて“０”）を上書きする。制御部１７０は、前述のように、ｋi＝ｎ×ｉ＋ｍ（ｉ＝０，１，２，３，・・・）の演算により、数列Ｋの各要素を求めることができる。制御部１７０は、管理テーブルから整数ｎの値を取得する（暗号処理プログラムＺの版数に対応付けられている）。
【０１２２】
（Ｓ４７）制御部１７０は、暗号処理プログラムＺのうち数列Ｋに含まれる番号のブロック部分にダミーデータを書き込んだプログラム断片Ｚｂを作成する。制御部１７０は、暗号処理プログラムＺの版数に対応付けて、プログラム断片Ｚｂ本体を断片テーブル１５２に登録する。
【０１２３】
（Ｓ４８）ＣＭ１１０は、シャットダウンを完了する。なお、ファームウェアのプログラムを更新する場合、更新後のファームウェアのプログラムが、フラッシュメモリ１１３上のＦＷ記憶部１４０に格納済みの状態で、シャットダウンが完了する。
【０１２４】
このように、制御部１７０は、ＣＭ１１０のシャットダウン時（電源オフ時）に、ＲＡＭ１１２上の設定データを暗号化して退避させることで、バックアップを行う。このとき、制御部１７０は、設定データの暗号化に用いられた暗号処理プログラムＺのプログラム断片Ｚｂを断片テーブル１５２に登録する。
【０１２５】
図１６は、第３の実施の形態の復号の例を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
（Ｓ５１）ＣＭ１１０は、起動を開始する。例えば、プロセッサ１１１により、フラッシュメモリ１１３から制御部１７０の機能を記述したプログラムやファームウェアのプログラムがＲＡＭ１１２上にロードされ、これらのプログラムが実行されることで、ＣＭ１１０上で制御部１７０やファームウェアの機能が発揮される。このとき、ＲＡＭ１１２上から読み出されるファームウェアのプログラムが、前回シャットダウン時のファームウェアに対して更新されていることがある。その場合、暗号処理プログラムも更新されていることがある。
【０１２６】
（Ｓ５２）制御部１７０は、断片テーブル１５２から、プログラム断片Ｚｂに対応付けられた版数を取得する。例えば、制御部１７０は、プログラム断片Ｚｂの版数を断片テーブル１５２から取得する。
【０１２７】
（Ｓ５３）制御部１７０は、ステップＳ５２で取得した版数と同じ版数の管理テーブル１４２が存在するか否かを判定する。各版数に対応する管理テーブル１４２は、例えば、ファームウェアとともに記憶部１３０上にロードされている。存在する場合、処理をステップＳ５４に進める。存在しない場合、処理を終了する。ステップＳ５２で取得した版数と同じ版数の管理テーブル１４２が存在しない場合は、バックアップデータ記憶部１５０に格納された暗号化データを復号できないことになる。この場合、制御部１７０は、ユーザにエラーを通知してもよい。
【０１２８】
（Ｓ５４）制御部１７０は、ステップＳ５２で取得した版数が最新版であるか否かを判定する。最新版である場合、処理をステップＳ６０に進める。最新版でない場合、処理をステップＳ５５に進める。前述のように、ファームウェアには最新版の暗号処理プログラムの全体が含まれている。暗号処理プログラムＺの版数が最新版であれば、ＲＡＭ１１２上にロードされているファームウェアに暗号処理プログラムＺの全体が含まれる。
【０１２９】
（Ｓ５５）制御部１７０は、ステップＳ５２で取得した版数に対応するブロックのサイズ、整数および個数の情報を、管理テーブル１４２から取得する。
（Ｓ５６）制御部１７０は、断片テーブル１５２からプログラム断片Ｚｂを取得し、ＲＡＭ１１２上に展開する。
【０１３０】
（Ｓ５７）制御部１７０は、管理テーブル１４２のプログラム断片Ｚａの中からブロックを１つ取得する（記憶部１３０の上位アドレス側から順番に１つずつ取得する）。例えば、ステップＳ５７を最初に実行するならブロックＺ３を取得する。ステップＳ５７を次に実行するときは、ブロックＺ１３を取得する。
【０１３１】
（Ｓ５８）制御部１７０は、ＲＡＭ１１２上に展開したプログラム断片Ｚｂのダミー部分にステップＳ５７で取得したブロックを上書きする（上位アドレス側のダミー部分から順番に上書きしていく）。
【０１３２】
（Ｓ５９）制御部１７０は、管理テーブル１４２に登録された全てのブロックについて、プログラム断片Ｚｂのダミー部分に上書きする処理を行ったか否かを判定する。全てのブロックを処理済み（ダミー部分に上書き済み）である場合、処理をステップＳ６０に進める。全てのブロックを処理済みでない場合、処理をステップＳ５７に進める。制御部１７０は、全てのブロックをプログラム断片Ｚｂのダミー部分に上書きすることで、暗号処理プログラムＺを得ることができる。
【０１３３】
（Ｓ６０）制御部１７０は、バックアップデータ記憶部１５０に記憶された暗号化データを、暗号処理プログラムＺを用いて復号することで、設定データを取得する。
このようにして、暗号処理プログラムＺを復元し、暗号化データを復号することで、設定データを取得する。制御部１７０は、取得した設定データを用いて、ストレージ装置１００の制御を行える。
【０１３４】
図１７は、第３の実施の形態の暗号処理プログラムの復元の具体例を示す図である。プログラム断片Ｚｂは、前述のように、暗号処理プログラムＺのブロックＺ３，Ｚ１３，Ｚ２３，・・・に相当する部分に、ダミーデータ（例えば、すべて０）が上書きされている。制御部１７０は、管理テーブル１４２からブロックＺ３，Ｚ１３，Ｚ２３，・・・を取得して、プログラム断片Ｚｂの各ダミー部分に上書きすることで、暗号処理プログラムＺを得る。
【０１３５】
なお、プログラム断片Ｚｂにダミー部分を設けるものとしたが、ダミー部分を設けなくてもよい。その場合、プログラム断片Ｚｂのダミー部分を詰めて、各ブロックを配置する（例えば、ブロックＺ２の次に、ダミー部分ではなく、ブロックＺ４を配置する）。すると、プログラム断片Ｚｂのサイズを小さくすることができる。また、制御部１７０は、管理テーブル１４２に格納された情報を基に、プログラム断片Ｚｂのうち、ブロックＺ３，Ｚ１３，Ｚ２３，・・・を挿入する箇所を決定できる。
【０１３６】
例えば、ブロックＺ１の開始アドレス＋ブロックサイズ×（ｋ1−１）のアドレス位置がブロックＺ３を挿入するＲＡＭ１１２上のアドレス位置である。ブロックＺ４のアドレス位置は、１ブロックサイズ分後方にずれることになる。ブロックＺ３の挿入後において、ブロックＺ１の開始アドレス＋ブロックサイズ×（ｋ13−１）のアドレス位置がブロックＺ１３を挿入するアドレス位置である。以降のブロックについても同様である。
【０１３７】
このように、ストレージ装置１００は、プログラム断片Ｚａ，Ｚｂを結合することで、暗号処理プログラムＺを得ることができる。
第３の実施の形態のストレージ装置１００によれば、第２の実施の形態と同様に、制御プログラムのデータ量を低減できる。また、第３の実施の形態では、暗号処理プログラムＺから複数箇所を除去することでプログラム断片Ｚａ，Ｚｂを作成する。このため、第２の実施の形態のように前方／後方部分に分けるよりも、管理テーブル１４２のブロックのサイズや整数の情報なしに、プログラム断片Ｚａ，Ｚｂから暗号処理プログラムＺを復元することを難しくすることができる。このため、仮に、プログラム断片Ｚａ，Ｚｂが不正に取得されたとしても、管理テーブル１４２のブロックのサイズや整数の情報が取得されなければ、暗号処理プログラムＺが不正に復元される可能性を低減できる。
【０１３８】
なお、上記の説明では、バックアップデータ記憶部１５０をＤＥ１０２やＤＥ１０３のＨＤＤ上に設けるものとしたが、フラッシュメモリ１１３上に設けてもよい。あるいは、バックアップデータ記憶部１５０を磁気テープに設けてもよい。例えば、ストレージ装置１００に内蔵された磁気テープ装置や、ストレージ装置１００またはサーバ２００に接続された磁気テープ装置を利用可能なこともある。その場合、磁気テープ装置に挿入された磁気テープに、暗号化データや断片テーブル１５２を格納することもできる。
【０１３９】
また、第１の実施の形態の情報処理は、演算部１ｂとして用いられるプロセッサに、プログラムを実行させることで実現できる。第２，第３の実施の形態の情報処理は、プロセッサ１１１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１３として例示したものなど）に記録できる。プロセッサとＲＡＭとを有するＣＭ１１０，１２０もコンピュータの一例といえる。
【０１４０】
例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、フラッシュメモリ１１３などの記憶装置に格納し（インストールし）、当該記憶装置からＲＡＭ１１２にプログラムを読み込んで実行してもよい。
【符号の説明】
【０１４１】
１  ストレージ制御装置
１ａ  記憶部
１ｂ  演算部
１ｃ  不揮発性記憶媒体
２，２ａ  制御プログラム
３，３ａ  版数の情報
４  設定データ
４ａ  暗号化データ
Ｘ１  暗号処理プログラム
Ｘ１１  第１の部分
Ｘ１２，Ｘ２２  第２の部分
【図１】
2015215727.tif 000003
【図２】
2015215727.tif 000004
【図３】
2015215727.tif 000005
【図４】
2015215727.tif 000006
【図５】
2015215727.tif 000007
【図６】
2015215727.tif 000008
【図７】
2015215727.tif 000009
【図８】
2015215727.tif 000010
【図９】
2015215727.tif 000011
【図１０】
2015215727.tif 000012
【図１１】
2015215727.tif 000013
【図１２】
2015215727.tif 000014
【図１３】
2015215727.tif 000015
【図１４】
2015215727.tif 000016
【図１５】
2015215727.tif 000017
【図１６】
2015215727.tif 000018
【図１７】
2015215727.tif 000019