(57)【要約】      （修正有）【課題】複数のブートコードの改竄検知を行う情報処理装置のコストを低減する。【解決手段】情報処理装置（ＭＦＰ１）は、コントローラ１１５、１２６と、プロセッサ１０１、１２４と、プロセッサ１０１、１２４が実行する複数のプログラムを格納する第１のメモリ１１２、１２７と、複数のプログラムのリカバリを行うためのデータを格納する第２のメモリ１１２と、を備える。コントローラ１１５、１２６は、第１のメモリ１１２、１２７から複数のプログラムを読み出し、読み出した複数のプログラムの正当性を検証し、複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、第２のメモリ１１２に格納されたデータに基づいて、１つの第１のメモリに格納された、正当性が確認できなかったプログラムをリカバリする。【選択図】図１
2020187649.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
少なくとも１つのコントローラと、複数のプロセッサと、前記複数のプロセッサが実行する複数のプログラムを格納する少なくとも１つの第１のメモリと、前記複数のプログラムのリカバリを行うためのデータを格納する１つの第２のメモリと、を備え、
前記少なくとも１つのコントローラは、
前記少なくとも１つの第１のメモリから前記複数のプログラムを読み出す読出手段と、
前記読出手段で読み出した前記複数のプログラムの正当性を検証する検証手段と、
前記検証手段が前記複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第２のメモリに格納された前記データに基づいて、前記少なくとも１つの第１のメモリに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記少なくとも１つの第１のメモリのいずれかは、前記少なくとも１つのコントローラがロードして実行することで、前記読出手段、前記検証手段、および前記リカバリ手段の少なくともいずれかとして機能させるためのプログラムをさらに格納することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記少なくとも１つの第１のメモリのうちのいずれかが、前記第２のメモリとして機能することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記リカバリ手段は、前記第２のメモリに格納された前記データに基づいて、前記正当性が確認できなかったプログラムをリカバリする場合に、前記少なくとも１つの第１のメモリと前記少なくとも１つのコントローラとの間のインタフェースに応じてプロトコル変換を行うことを特徴とする請求項１から３の何れか１項に記載の情報処理装置。
【請求項５】
前記インタフェースは、Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（Ｉ２Ｃ）プロトコルまたはＳｅｒｉａｌ  Ｐｅｒｉｐｈｅｒａｌ  Ｉｎｔｅｒｆａｃｅ（ＳＰＩ）プロトコルであることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記少なくとも１つのコントローラは、
前記検証手段が前記複数のプログラムの少なくともいずれかの正当性が確認できた場合に、正当性が確認できたプログラムに対応するプロセッサに、前記正当性が確認できたプログラムのロードを促すリセット信号を送信するリセット手段を有することを特徴とする請求項１から５のいずれか１項に記載の情報処理装置。
【請求項７】
前記検証手段は、プログラムの署名から取得したハッシュ値と、前記プログラムに基づいて計算したハッシュ値とを比較することで前記プログラムの正当性を検証することを特徴とする請求項１から６のいずれか１項に記載の情報処理装置。
【請求項８】
前記検証手段は、前記プログラムの署名をＲＳＡ２０４８またはＥｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅ  Ａｌｇｏｒｉｔｈｍ（ＥＣＤＳＡ）を用いて復号化することで前記署名から前記ハッシュ値を取得することを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記複数のプロセッサのそれぞれに対応する個別の第１のメモリが設けられることを特徴とする請求項１から８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記複数のプロセッサのそれぞれに対応する個別のコントローラが設けられることを特徴とする請求項１から９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記リカバリ手段は、前記データで前記正当性が確認できなかったプログラムを上書きすることでリカバリを行うことを特徴とする請求項１から１０のいずれか１項に記載の情報処理装置。
【請求項１２】
情報処理装置であって、
前記情報処理装置の全体を制御する第１のプロセッサと、
前記第１のプロセッサが実行する第１のプログラムを格納する第１のメモリと、
記憶部のデータ入出力を制御する第２のプロセッサと、
前記第２のプロセッサが実行する第２のプログラムを格納する第２のメモリと、
コントローラと、
前記第１および第２のプログラムのリカバリを行うためのデータを格納する第３のメモリと、
を備え、
前記コントローラは、
前記第１および第２のメモリから前記第１および第２のプログラムを読み出す読出手段と、
前記読出手段で読み出した前記第１および第２のプログラムの正当性を検証する検証手段と、
前記検証手段が前記第１および第２のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第３のメモリに格納された前記データに基づいて、前記第１および第２のプログラムの少なくともいずれかに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ手段と、
を有することを特徴とする情報処理装置。
【請求項１３】
前記第３のメモリは、前記コントローラがロードして実行することで、前記読出手段、前記検証手段、および前記リカバリ手段の少なくともいずれかとして機能させるためのプログラムをさらに格納することを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
情報処理装置の制御方法であって、
複数のプロセッサが実行する複数のプログラムを格納する少なくとも１つの第１のメモリから前記複数のプログラムをロードするロード工程と、
前記ロード工程において読み出した前記複数のプログラムの正当性を検証する検証工程と、
前記検証工程において前記複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記複数のプログラムのリカバリを行うためのデータを格納する１つの第２のメモリに格納された前記データに基づいて、前記少なくとも１つの第１のメモリに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ工程と、
を含むことを特徴とする制御方法。
【請求項１５】
情報処理装置の全体を制御する第１のプロセッサと、
前記第１のプロセッサが実行する第１のプログラムを格納する第１のメモリと、
記憶部のデータ入出力を制御する第２のプロセッサと、
前記第２のプロセッサが実行する第２のプログラムを格納する第２のメモリと、
コントローラと、
前記第１および第２のプログラムのリカバリを行うためのデータを格納する第３のメモリと、
を備える情報処理装置の制御方法であって、
前記第１および第２のメモリから前記第１および第２のプログラムを読み出す読出工程と、
前記読出工程において読み出した前記第１および第２のプログラムの正当性を検証する検証工程と、
前記検証工程において前記第１および第２のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第３のメモリに格納された前記データに基づいて、前記第１および第２のプログラムの少なくともいずれかに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ工程と、
を含むことを特徴とする制御方法。
【請求項１６】
コンピュータを請求項１から１１のいずれか１項に記載の情報処理装置として動作させるためのプログラム。
【請求項１７】
コンピュータを請求項１２または１３に記載の情報処理装置として動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサが実行するプログラムの正当性を検証する情報処理装置、制御方法、およびプログラムに関する。
【背景技術】
【０００２】
従来の画像処理装置（ＭＦＰ）におけるブートコードの改竄検知方法において、メインＣＰＵが実行するブートコードをメインＣＰＵが起動する前にコントローラが読み出し、コントローラは読み出したブートコードが改竄されていないかを検証する。また、コントローラは読み出したブートコードの改竄を検知した場合、リカバリ用のブートコードをコピーして復旧する、あるいは、メインＣＰＵの動作を停止する方法がある。
【０００３】
例えば、特許文献１には、第一のブートイメージを検証し、改竄を検知した場合、第二のブートイメージを使用し、使用不可能な場合、第三のブートイメージを実行する制御例が示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−１６４７８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
画像処理装置などの情報処理装置は、メインＣＰＵの他に、別の機能手段を備える場合があり、前記機能手段は、メインＣＰＵとは別のＣＰＵで動作する場合がある。このような場合、それぞれのブートコードの改竄検知処理を行う必要がある。すなわち、メインＣＰＵまたは別のＣＰＵのブートコードが改竄または故障している場合、別のＦＬＡＳＨ  ＲＯＭから起動する、またはリカバリ用のＦＬＡＳＨ  ＲＯＭからデータをコピーする。このため、メインＣＰＵおよび別のＣＰＵのそれぞれにデフォルトのＦＬＡＳＨ  ＲＯＭと、リカバリ用のＦＬＡＳＨ  ＲＯＭとが必要となるため、ＦＬＡＳＨ  ＲＯＭが各所に２重に必要となりコストがかさむ課題があった。
【０００６】
本発明は、上述の問題に鑑みて成されたものであり、複数のブートコードの改竄検知を行う情報処理装置のコストを低減することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、例えば情報処理装置であって、少なくとも１つのコントローラと、複数のプロセッサと、前記複数のプロセッサが実行する複数のプログラムを格納する少なくとも１つの第１のメモリと、前記複数のプログラムのリカバリを行うためのデータを格納する１つの第２のメモリと、を備え、前記少なくとも１つのコントローラは、前記少なくとも１つの第１のメモリから前記複数のプログラムを読み出す読出手段と、前記読出手段で読み出した前記複数のプログラムの正当性を検証する検証手段と、前記検証手段が前記複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第２のメモリに格納された前記データに基づいて、前記少なくとも１つの第１のメモリに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ手段と、を備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、複数のブートコードの改竄検知を行う情報処理装置のコストを低減することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係るＭＦＰの構成を示す図。
【図２】一実施形態に係るメインＣＰＵの構成を示す図。
【図３】一実施形態に係るサブＣＰＵの構成を示す図。
【図４】一実施形態に係るＨＤＤおよびＨＤＤ制御部の構成を示す図。
【図５】第１の実施形態に係るＦＬＡＳＨ  ＲＯＭのメモリマップを示す図。
【図６】第１の実施形態に係るサブＣＰＵの処理を示すフローチャート。
【図７】第２の実施形態に係るＭＦＰの構成を示す図。
【図８】第２の実施形態に係るＦＬＡＳＨ  ＲＯＭのメモリマップを示す図。
【図９】第２の実施形態に係るサブＣＰＵの処理を示すフローチャート。
【図１０】第３の実施形態に係るＭＦＰの構成を示す図。
【図１１】第３の実施形態に係るサブＣＰＵの処理を示すフローチャート。
【図１２】第１の実施形態に係るサブＣＰＵ２の処理を示すフローチャート。
【図１３】第１の実施形態に係るＦＬＡＳＨ  ＲＯＭ２のメモリマップを示す図。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものではなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１１】
＜第１の実施形態＞
以下、本実施形態に係るブートコードの改竄検知処理を実行する情報処理装置（ＭＦＰ）について説明する。なお、特に断らない限り、本実施形態に係る機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。
【００１２】
図１は、本実施形態に係るＭＦＰ１の構成を表す図である。図１において、ＭＦＰ１はメインＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０２、およびネットワークＩ／Ｆ（インタフェース）１０４を備える。また、ＭＦＰ１は操作部１０３、プリンタ部１０５、スキャナ部１０６、ＦＡＸ１０７、画像処理部１１１、および電源処理部１１８を備える。
【００１３】
メインＣＰＵ１０１は、ＭＦＰ１全体の制御を司るプロセッサである。ＤＲＡＭ１０２は、メインＣＰＵ１０１で実行されるプログラムを格納すると共に一時的なデータのワークエリアとして機能する。操作部１０３は、ユーザ操作を受付け、操作部Ｉ／Ｆ１１３を介してメインＣＰＵ１０１に受け付けたユーザ操作を通知する。ネットワークＩ／Ｆ１０４は、有線接続または無線接続を介してＬＡＮ１３０と接続して外部機器と通信を行う。プリンタ部１０５は、画像データを紙面上に印字する。スキャナ部１０６は、紙面上の画像を光学的に読み取り電気信号に変換してスキャン画像を生成する。ＦＡＸ１０７は、公衆回線１１０と接続して外部機器とファクシミリ通信を行う。信号バス１０９は、各モジュールを相互に接続し、通信を可能にする。
【００１４】
公衆回線１１０は、ＦＡＸ１０７と外部機器を相互接続する。画像処理部１１１は、ネットワークＩ／Ｆ１０４で受信したプリントジョブをプリンタ部１０５で印刷するのに適した画像への変換処理、スキャナ部１０６で読み取ったスキャン画像のノイズ除去や色空間変換、回転、圧縮等の処理を実行する。また、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１２５に保管されたスキャン画像の画像処理を実行する。
【００１５】
電源制御部１１８は、ＭＦＰ１内の各モジュールの電力供給を制御する。電源線１１９は、電源制御部１１８から各モジュールに電力を供給する。電源供給線１２０は、電源制御部１１８から商業用ＡＣ電源が供給される。
【００１６】
また、図１で、ＭＦＰ１は、リセット回路１２２、ＨＤＤ制御部１２４、ＨＤＤ１２５、サブＣＰＵ１１５、サブＣＰＵ２  １２６、ＦＬＡＳＨ  ＲＯＭ（ＦＬＡＳＨ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１２、およびＦＬＡＳＨ  ＲＯＭ２  １２７を備える。
【００１７】
リセット回路１２２は、システムの電源がＯＮされると所定の遅延時間後にサブＣＰＵへのリセット信号１２３を「Ｌｏ」レベルから「Ｈｉ」レベルに遷移する。サブＣＰＵリセット信号１２３は、リセット回路１２２から出力されてサブＣＰＵ１１５のリセット端子に接続される。サブＣＰＵリセット信号１２３が「Ｈｉ」レベルになると、サブＣＰＵ１１５はリセットが解除されて起動を開始する。すなわち、リセット回路１２２は、起動時に後述する改竄検知処理を実行させるトリガとなるリセット信号１２３をサブＣＰＵ１１５およびサブＣＰＵ２  １２６に送信する。サブＣＰＵ１１５はメインＣＰＵ１０１が実行するブートコード（プログラム）の正当性を検証するためのコントローラである。サブＣＰＵ２  １２６は、ＨＤＤ制御部１２４が実行するブートコード（プログラム）の正当性を検証するためのコントローラである。すなわち、サブＣＰＵは、複数のＣＰＵのそれぞれに対して個別に設けられる。
【００１８】
ＨＤＤ１２５は、ＨＤＤ制御部１２４を介してメインＣＰＵ１０１で実行されるプログラムを格納すると共にプリントジョブやスキャンジョブ等のスプール領域としても利用される。また、スキャン画像を保管し再利用するための領域としても利用される。ＨＤＤ制御部１２４は、ＨＤＤ１２５のデータ入出力を制御する。
【００１９】
ＦＬＡＳＨ  ＲＯＭ１１２は、メインＣＰＵ１０１で実行されるブートコードを含むプログラムを格納すると共にＭＦＰ１のデフォルト設定値を記憶するための記憶部（メモリ）である。ＦＬＡＳＨ  ＲＯＭ１２７は、ＨＤＤ制御部１２４で実行されるブートコードを含むプログラムを格納するための記憶部（メモリ）である。すなわち、ＦＬＡＳＨ  ＲＯＭは、複数のＣＰＵのそれぞれに対して個別に設けられる。一例では、ＦＬＡＳＨ  ＲＯＭ１１２に格納されたデータは、暗号化されている。操作部Ｉ／Ｆ１１３は、操作部１０３と信号バス１０９を相互接続する。Ｓｅｒｉａｌ  Ｐｅｒｉｐｈｅｒａｌ  Ｉｎｔｅｒｆａｃｅ（ＳＰＩ）バス１１４は、メインＣＰＵ１０１、ＦＬＡＳＨ  ＲＯＭ１１２、サブＣＰＵ１１５を相互接続する。
【００２０】
サブＣＰＵ１１５は、ＭＦＰ１の起動時に、メインＣＰＵ１０１が起動する前にＦＬＡＳＨ  ＲＯＭ１１２からブートコードを読み出して、正当性を検証する。すなわち、改竄がされていないか、ＦＬＡＳＨ  ＲＯＭ１１２の故障などによりデータの変化が発生していないかを検証する。改竄の検知方法としては、例えばブートコードのデジタル署名の公開鍵情報（ハッシュ値を公開鍵暗号化した値）を製造時にサブＣＰＵ１１５内のＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍ）３０４領域に記憶させておく。そして、読み出したブートコードをこの公開鍵情報で復号化して検証を行う。公開鍵暗号の方法としてはＲＳＡ２０４８、ＥＣＤＳＡ（Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅ  Ａｌｇｏｒｉｔｈｍ）などを含む。リセット信号１１７は、サブＣＰＵ１１５のＧＰＩＯポートから出力されてメインＣＰＵ１０１のリセット端子に接続される。
【００２１】
サブＣＰＵ２  １２６は、ＭＦＰ１の起動時に、ＨＤＤ制御部１２４が起動する前にＦＬＡＳＨ  ＲＯＭ２  １２７からブートコードを読み出して、正当性を検証する。すなわち、改竄がされていないか、ＦＬＡＳＨ  ＲＯＭ２  １２７の故障などによりデータの損失が発生していないかを検証する。改竄の検知方法としては、例えばブートコードのデジタル署名の公開鍵情報（ハッシュ値を公開鍵暗号化した値）を製造時にサブＣＰＵ１１５内のＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍ）領域に記憶させておく。そして、読み出したブートコードをこの公開鍵情報で復号化して検証を行う。公開鍵暗号の方法としてはＲＳＡ２０４８、ＥＣＤＳＡ（Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅ  Ａｌｇｏｒｉｔｈｍ）などを含む。リセット信号１２９は、サブＣＰＵ２  １２６のＧＰＩＯポートから出力されてＨＤＤ制御部１２４のリセット処理用に接続される。
【００２２】
次に、図２を参照してメインＣＰＵ１０１の構成を説明する。図２において、メインＣＰＵ１０１は、ＣＰＵコア２０１、ＳＰＩ  Ｍａｓｔｅｒ２０２を備える。ＣＰＵコア２０１は、ＣＰＵの基本機能を担っている。ＳＰＩ  Ｍａｓｔｅｒ２０２は、外部のＳＰＩデバイスと相互に接続してデータの読み書きを行う。
【００２３】
また、メインＣＰＵ１０１は、外部のＳＰＩデバイスと電気的に接続するためにＳＰＩバス２０６を備える。信号バス２０９は、メインＣＰＵ１０１内の各モジュールを接続する。「Ｌｏ」レベルのリセット信号１１７が入力された場合、メインＣＰＵ１０１はリセット状態に遷移する。「Ｈｉ」レベルのリセット信号１１７が入力された場合、メインＣＰＵ１０１はリセット解除状態に遷移する。リセット信号１１７がリセット状態からリセット解除状態に遷移すると、ＣＰＵコア２０１は先ず、ＦＬＡＳＨ  ＲＯＭ１１２内に記憶されているメインＣＰＵ  ＢＩＯＳ５０１をＤＲＡＭ１０２にロードして実行する。
【００２４】
次に、図３を参照してサブＣＰＵ１１５の構成を説明する。図３において、サブＣＰＵ１１５はＣＰＵコア３０１、ＳＰＩ  Ｍａｓｔｅｒ３０２、ＧＰＩＯ（Ｇｅｎｅｒａｌ−ｐｕｒｐｏｓｅ  ｉｎｐｕｔ／ｏｕｔｐｕｔ）３０３、およびＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍｍａｂｌｅ）を備える。また、サブＣＰＵ１１５はＳＲＡＭ３０５、暗号処理部３０８、Ｂｏｏｔ  ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３１０、およびＣｒｙｐｔｏ  ＲＡＭ３１１を備える。サブＣＰＵ１１５内のモジュールは、信号バス３０９によって通信可能に接続される。
【００２５】
ＣＰＵコア３０１は、サブＣＰＵ１１５の基本機能を担っている。ＳＰＩ  Ｍａｓｔｅｒ３０２は、外部のＳＰＩデバイスと相互に接続してデータの読み書きを行う。本実施形態において、サブＣＰＵ１１５のＳＰＩ  Ｍａｓｔｅｒ３０２はバス１１４およびバス１２８に接続する。ＧＰＩＯ３０３は、外部のデバイスと相互に接続してデータの送受信を行う。サブＣＰＵ１１５のＧＰＩＯ３０３は、メインＣＰＵ１０１にリセット信号１１７を送信する。ＯＴＰメモリ領域３０４は、製造時にサブＣＰＵ  ＦＷ（Ｆｉｒｍｗａｒｅ）のハッシュ値を公開鍵暗号化した値およびＴａｇのアドレスが書き込まれる。この領域に書き込まれたデータは一度書き込まれると二度と書換えることはできない。
【００２６】
ＳＲＡＭ３０５は、サブＣＰＵ１１５内のワークメモリとして使用される。暗号処理部３０８は、公開鍵暗号化した値からサブＣＰＵ  ＦＷのハッシュ値を復号するほか、公開鍵暗号化したメインＣＰＵ  ＢＩＯＳのハッシュ値を復号する。Ｂｏｏｔ  ＲＯＭ３１０は、サブＣＰＵ１１５のブートコードを記憶する。
【００２７】
ＧＰＩＯ３０３が出力するリセット信号１１７が「Ｌｏ」レベルの場合、メインＣＰＵ１０１はリセット状態となり、リセット信号１１７が「Ｈｉ」レベルの場合、メインＣＰＵ１０１はリセット解除状態となる。リセット信号１１７がリセット状態からリセット解除状態に遷移すると、ＣＰＵコア３０１は先ず、Ｂｏｏｔ  ＲＯＭ３１０から自身のブートコードを読み出し実行する。Ｃｒｙｐｔｏ  ＲＡＭ３１１は、暗号処理部３０８で利用する機密性の高いデータ等を記憶する。
【００２８】
なお、サブＣＰＵ２  １２６も、サブＣＰＵ１１５と同様の構成を備える。サブＣＰＵ２  １２６のＧＰＩＯは、ＨＤＤ制御部１２４にリセット信号１２９を送信する。また、サブＣＰＵ２  １２６のＳＰＩ  Ｍａｓｔｅｒはバス１２８に接続する。
【００２９】
次に、図４を参照してＨＤＤ制御部１２４およびＨＤＤ１２５の構成を説明する。図４において、ＨＤＤ制御部１２４はＣＰＵコア４０１、ＳＰＩ  Ｍａｓｔｅｒ４０２、ＨＤＤ転送制御部１  ４０３、およびＨＤＤ転送制御部２  ４０４を備える。ＨＤＤ制御部１２４内のモジュールは、内部データバス４０７によって通信可能に接続される。
【００３０】
ＣＰＵコア４０１は、ＨＤＤ制御部１２４を制御するためのＣＰＵの基本機能を担っている。ＳＰＩ  Ｍａｓｔｅｒ４０２は、外部のＳＰＩデバイスと相互に接続してデータの読み書きを行う。
【００３１】
ＨＤＤ転送制御部１  ４０３のおよびＨＤＤ転送制御部２  ４０４は、ＣＰＵコア４０１の命令により、ＨＤＤ１２５の読み書き処理の制御を行う。ＨＤＤ１２５の読み出し動作の場合、ＣＰＵコア４０１はＨＤＤ転送制御部２  ４０４にＨＤＤの読み出しを設定する。そして、設定されたデータをＨＤＤ転送制御部２  ４０４がＨＤＤから読み出し、ＳＡＴＡインタフェースバス４０８を経由してＣＰＵコア４０１に送信する。そして、ＨＤＤ転送制御部２  ４０４、ＨＤＤ制御部１２４の内部データバス４０７、およびＨＤＤ転送制御部１  ４０３を経由して、データバス４０５を介してＤＲＡＭ１０２に書き込む動作を行う。
【００３２】
また、ＨＤＤ１２５の書き込み動作の場合、ＣＰＵコア４０１はＨＤＤ転送制御部２  ４０４にＨＤＤ１２５の書き込みを設定する。その後、データバス４０５から転送されたデータをＨＤＤ転送制御部１  ４０３、ＨＤＤ制御部１２４の内部データバス４０７、ＨＤＤ転送制御部２  ４０４、およびＳＡＴＡインタフェースバス４０８を経由して、ＨＤＤ１２５へ書き込み動作を実行する。ＳＰＩバス４０６は、外部のＳＰＩデバイスと電気的に接続する。
【００３３】
ＣＰＵコア４０１に入力されるリセット信号１２９が「Ｌｏ」レベルである場合、ＨＤＤ制御部１２４はリセット状態となり、リセット信号１２９が「Ｈｉ」レベルである場合、ＨＤＤ制御部１２４はリセット解除状態となる。リセット信号１２９がリセット状態からリセット解除状態に遷移すると、ＣＰＵコア４０１は先ず、ＦＬＡＳＨ  ＲＯＭ２  １２７内に記憶されているＨＤＤ制御部ＣＰＵ  ＢＩＯＳをＳＰＩ  Ｍａｓｔｅｒ４０２にロードして実行する。
【００３４】
次に、図５を参照してＦＬＡＳＨ  ＲＯＭ１１２のメモリマップの一例を説明する。図５において、ＦＬＡＳＨ  ＲＯＭ１１２のメモリマップは、メインＣＰＵ  ＢＩＯＳ５０１、メインＣＰＵ  ＢＩＯＳ署名５０２、Ｔａｇ５０３、サブＣＰＵ  ＦＷ５０４、ＦＷ署名５０５、およびＲＯＭ−ＩＤ５０６を含む。また、ＦＬＡＳＨ  ＲＯＭ１１２のメモリマップは、Ｔａｇ０  ５０７、Ｔａｇ１  ５０８、リカバリブートコード０  ５０９、およびリカバリブートコード１  ５１０を含む。
【００３５】
メインＣＰＵ  ＢＩＯＳ５０１には、メインＣＰＵ１０１で実行されるコードが記憶される。ＢＩＯＳ署名５０２には、メインＣＰＵ  ＢＩＯＳのハッシュ値に対するＲＳＡ署名値が格納される。Ｔａｇ５０３は、サブＣＰＵ  ＦＷ５０４の先頭アドレスが記憶されている。Ｔａｇ５０３自体のアドレスはＯＴＰ３０４に記憶されている。
【００３６】
サブＣＰＵ  ＦＷ５０４には、サブＣＰＵ１１５で実行されるコードが記憶されている。ＦＷ署名５０５には、サブＣＰＵ  ＦＷ５０４、またはサブＣＰＵ  ＦＷ５０４の先頭の特定部分のＥＣＤＳＡ署名値が記憶されている。ＲＯＭ−ＩＤ５０６は、メインＣＰＵ  ＢＩＯＳ５０１の先頭アドレス、サイズおよびメインＣＰＵ  ＢＩＯＳ署名５０２のアドレスが記憶されている。
【００３７】
Ｔａｇ０  ５０７には、リカバリブートコード０  ５０９の先頭アドレスが記憶されている。Ｔａｇ０  ５０７自体のアドレスはＯＴＰ３０４に記憶されている。Ｔａｇ１  ５０８には、リカバリブートコード１  ５１０の先頭アドレスが記憶されている。Ｔａｇ１  ５０８自体のアドレスはＯＴＰ３０４に記憶されている。
【００３８】
次に、図１３を参照してＦＬＡＳＨ  ＲＯＭ２  １２７のメモリマップの一例を説明する。図１３において、ＦＬＡＳＨ  ＲＯＭ２  １２７のメモリマップは、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１、ＨＤＤ制御部ＣＰＵ署名１３０２、Ｔａｇ１３０３、サブＣＰＵ  ＦＷ１３０４、ＦＷ署名１３０５、およびＲＯＭ−ＩＤ１３０６を含む。
【００３９】
ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１は、ＨＤＤ制御部１２４のＣＰＵコア４０１によって実行されるコードが記憶される。ＨＤＤ制御部ＣＰＵ署名１３０２には、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳのハッシュ値に対するＲＳＡ署名値が格納される。Ｔａｇ１３０３には、サブＣＰＵ  ＦＷ１３０４の先頭アドレスが記憶されている。
【００４０】
サブＣＰＵ  ＦＷ１３０４には、サブＣＰＵ２  １２６によって実行されるコードが記憶されている。ＦＷ署名１３０５には、サブＣＰＵ  ＦＷ１３０４の先頭の特定部分のＥＣＤＳＡ署名値が記憶されている。ＲＯＭ−ＩＤ１３０６は、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１の先頭アドレス、サイズおよびＨＤＤ制御部ＣＰＵ署名１３０２のアドレスが記憶されている。
【００４１】
次に、本実施形態におけるサブＣＰＵ１１５の処理手順を図６のフローチャートを用いて説明する。図６の処理は、ＭＦＰ１の電源投入時にサブＣＰＵ１１５によって実行される。
【００４２】
まず、Ｓ６０１で、サブＣＰＵ１１５は起動すると直ちにＢｏｏｔ  ＲＯＭ３１０内のコードを実行し、ＳＰＩバス１１４を介してＦＬＡＳＨ  ＲＯＭ１１２からサブＣＰＵ  ＦＷ５０４をＳＲＡＭ３０５に読み込む。続いて、サブＣＰＵ１１５は処理をＳ６０２に進め、暗号処理部３０８によってＦＷ署名５０５をＯＴＰ３０４内の公開鍵で復号化して、正解となるハッシュ値を得る。続いてサブＣＰＵ  １１５は処理をＳ６０３に進め、暗号処理部３０８によってサブＣＰＵ  ＦＷ５０４のハッシュ値を計算する。次にサブＣＰＵ１１５は処理をＳ６０４に進め、Ｓ６０２で取得したハッシュ値とＳ６０３で計算したハッシュ値を比較し、不一致の場合（Ｓ６０４でＮＯ）は処理を終了する。Ｓ６０２のハッシュ値とＳ６０３のハッシュ値とが一致した場合（Ｓ６０４でＹＥＳ）、サブＣＰＵ１１５は処理をＳ６０５に進め、サブＣＰＵ  ＦＷ５０４をＳＲＡＭ３０５に読み込み、サブＣＰＵ１１５はサブＣＰＵ  ＦＷ５０４を実行する。
【００４３】
次にサブＣＰＵ１１５は処理をＳ６０６に進め、ＲＯＭ−ＩＤ５０６をＦＬＡＳＨ  ＲＯＭ１１２からＣｒｙｐｔｏ  ＲＡＭ３１１に読み込む。続いてサブＣＰＵ１１５は処理をＳ６０７に進め、ＲＯＭ−ＩＤ５０６からメインＣＰＵ  ＢＩＯＳ５０１のアドレスとメインＣＰＵ  ＢＩＯＳ署名５０２のアドレスとを得る。次にサブＣＰＵ１１５は処理をＳ６０８に進め、メインＣＰＵ  ＢＩＯＳ署名５０２をＳＲＡＭ３０５に読み込む。続いてサブＣＰＵ１１５は処理をＳ６０９に進め、暗号処理部３０８によってメインＣＰＵ  ＢＩＯＳ署名５０２をサブＣＰＵ  ＦＷ５０４に付属している公開鍵で復号化してハッシュ値を得る。
【００４４】
次にサブＣＰＵ１１５は処理をＳ６１０に進め、メインＣＰＵ  ＢＩＯＳ５０１をＳＲＡＭ３０５に読み込む。次にサブＣＰＵ１１５はＳ６１１に進め、暗号処理部３０８によってメインＣＰＵ  ＢＩＯＳ５０１のハッシュ値を計算する。そして、サブＣＰＵ１１５はＳ６１２に処理を進め、Ｓ６０９のハッシュ値とＳ６１１のハッシュ値とを比較する。Ｓ６０９のハッシュ値とＳ６１１のハッシュ値とが一致する場合（Ｓ６１２でＹＥＳ）、サブＣＰＵ１１５は処理をＳ６１８に進める。また、Ｓ６０９のハッシュ値とＳ６１１のハッシュ値とが不一致の場合（Ｓ６１２でＮＯ）、サブＣＰＵ１１５は処理をＳ６１３に進め、ＯＴＰ３０４のリカバリ用Ｔａｇを取得する。すなわち、サブＣＰＵ１１５は、Ｓ６１３において、Ｓ６１１で計算したハッシュ値がＳ６０９のハッシュ値と一致しないため、メインＣＰＵ  ＢＩＯＳ５０１に改竄またはデータの破損が発生したと判定し、リカバリ用Ｔａｇ０  ５０７を取得する。リカバリ用Ｔａｇ０  ５０７にはリカバリブートコード０  ５０９の先頭アドレスが記憶されている。
【００４５】
続いて、サブＣＰＵ１１５は処理をＳ６１４に進め、再度、暗号処理部３０８によってメインＣＰＵ  ＢＩＯＳ署名５０２をサブＣＰＵ  ＦＷ５０４に付属している公開鍵で復号化してハッシュ値を得る。次にサブＣＰＵ１１５は処理をＳ６１５に進め、リカバリブートコード０  ５０９をＳＲＡＭ３０５に読み込む。なお、一例では、Ｓ６１５においてサブＣＰＵ１１５はリカバリブートコード０  ５０９でメインＣＰＵ  ＢＩＯＳを上書きすることでメインＣＰＵ  ＢＩＯＳのリカバリを行ってもよい。
【００４６】
次にサブＣＰＵ１１５は処理をＳ６１６に進め、暗号処理部３０８によってリカバリブートコード０  ５０９のハッシュ値を計算する。そして、サブＣＰＵ１１５は処理をＳ６１７に進め、Ｓ６１４のハッシュ値とＳ６１６のハッシュ値とを比較する。Ｓ６１４のハッシュ値とＳ６１６のハッシュ値とが一致した場合（Ｓ６１７でＹＥＳ）は、サブＣＰＵ１１５は処理をＳ６１８に進めてＧＰＩＯ３０３を制御して「Ｈｉ」レベルのリセット信号１１７を出力する。Ｓ６１４のハッシュ値とＳ６１６のハッシュ値とが一致しない場合（Ｓ６１７でＮＯ）、サブＣＰＵ１１５は図６の処理を終了する。
【００４７】
次に、サブＣＰＵ２  １２６の処理手順を図１２のフローチャートを用いて説明する。図１２の処理は、サブＣＰＵ２  １２６が「Ｈｉ」レベルのサブＣＰＵリセット信号１２３を入力された場合に実行される。
【００４８】
まず、Ｓ１２０１において、サブＣＰＵ２  １２６はＨＤＤ制御部ＣＰＵ  ＢＩＯＳ署名１３０２をＦＬＡＳＨ  ＲＯＭ２  １２７から取得する。続いて、サブＣＰＵ２  １２６はＳ１２０２に処理を進め、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ署名１３０２をＳＲＡＭ３０５に読み込む。続いてサブＣＰＵ２  １２６は処理をＳ１２０３に進め、暗号処理部３０８によってＨＤＤ制御部ＣＰＵ  ＢＩＯＳ署名１３０２をサブＣＰＵ  ＦＷ１３０４に付属している公開鍵で復号化してハッシュ値を得る。次にサブＣＰＵ２  １２６は処理をＳ１２０４に進め、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１をＳＲＡＭ３０５に読み込む。
【００４９】
次にサブＣＰＵ２  １２６は処理をＳ１２０５に進め、暗号処理部３０８によってＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１のハッシュ値を計算する。そして、サブＣＰＵ２  １２６は処理をＳ１２０６に進め、Ｓ１２０３のハッシュ値とＳ１２０５のハッシュ値とを比較する。Ｓ１２０３のハッシュ値とＳ１２０５のハッシュ値とが不一致の場合（Ｓ１２０６でＮＯ）、サブＣＰＵ２  １２６は、処理をＳ１２０７に進めてＯＴＰ３０４のリカバリ用Ｔａｇ１を取得する。すなわち、Ｓ１２０３のハッシュ値とＳ１２０５のハッシュ値とが一致しないため、サブＣＰＵ２  １２６はＳ１２０７でＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１に改竄または故障が発生したと判定し、リカバリ用Ｔａｇ１  ５０８を取得する。リカバリ用Ｔａｇ１  ５０８にはＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１のリカバリ用のリカバリブートコード１  ５１０の先頭アドレスが記憶されている。
【００５０】
ここで、サブＣＰＵ２  １２６は、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１に対応するリカバリブートコード１  ５１０を、Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（Ｉ２Ｃ）バス１２８を経由して、ＦＬＡＳＨ  ＲＯＭ１１２から取得する。ここで、サブＣＰＵ２  １２６は、不図示のバスによってＦＬＡＳＨ  ＲＯＭ１１２に接続されてもよいし、サブＣＰＵ１１５を介してＦＬＡＳＨ  ＲＯＭ１１２にアクセスしてもよい。そして、サブＣＰＵ２  １２６はＳ１２０８に進め、ＦＬＡＳＨ  ＲＯＭ２  １２７への上書きによる書き換えを行うことでＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１のリカバリを行う。続いて、サブＣＰＵ２  １２６は処理をＳ１２０９に進め、書き換えの完了を確認する。書き換えが完了していない場合は（Ｓ１２０９でＮＯ）、処理をＳ１２０８に戻す。一方、書き換えが完了した場合（Ｓ１２０９でＹＥＳ）は、処理をＳ１２１０に進め、暗号処理部３０８によって署名をサブＣＰＵ  ＦＷ１３０４に付属している公開鍵で復号化してハッシュ値を得る。
【００５１】
続いて、サブＣＰＵ２  １２６は処理をＳ１２１１に進め、ＦＬＡＳＨ  ＲＯＭ２  １２７から書き換え後のＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１をＳＲＡＭ３０５に読み込む。次にサブＣＰＵ２  １２６は処理をＳ１２１２に進め、暗号処理部３０８によって書き換え後の、ＨＤＤ制御部ＣＰＵ  ＢＩＯＳ１３０１のハッシュ値を計算する。そして、サブＣＰＵ２  １２６は処理をＳ１２１３に進め、Ｓ１２１０のハッシュ値とＳ１２１２のハッシュ値とを比較する。Ｓ１２１０のハッシュ値とＳ１２１２のハッシュ値とが一致した場合（Ｓ１２１３でＹＥＳ）、サブＣＰＵ２  １２６は処理をＳ１２１４に進め、ＧＰＩＯ３０３を制御して「Ｈｉ」レベルのリセット信号１２９を出力する。Ｓ１２１０のハッシュ値とＳ１２１２のハッシュ値とが一致しない場合は図１２の処理を終了する。
【００５２】
以上説明した様に、本実施形態に係るＭＦＰ１は、メインＣＰＵ１０１およびＨＤＤ制御部１２４の構成となるＣＰＵコア４０１において、起動時に各々のＲＯＭのブートコードおよびシステムファームウェアの改竄検知を行う。これによって、検証が不一致の場合、各々のＲＯＭのリカバリ用のデータを１つのＦＬＡＳＨ  ＲＯＭ１１２に配置することが可能となる。これにより、１つのＦＬＡＳＨ  ＲＯＭから各領域のリカバリを実行することが可能となり、コストを安価に製造し、かつ、システムのセキュリティを確保することが可能となる。
【００５３】
なお、本実施形態では、正当性が確認できなかった場合に、サブＣＰＵがリカバリブートコードで起動用のプログラムを上書きするものとして説明を行ったが、サブＣＰＵはリカバリブートコードに基づいて誤り訂正を行い、ブートコードの修復を行ってもよい。
【００５４】
＜第２の実施形態＞
第２の実施形態では、複数のＣＰＵのための複数のブートコードのリカバリ用データを格納する１つのＦＬＡＳＨ  ＲＯＭを、複数のＣＰＵのための複数のブートコードを格納するＦＬＡＳＨ  ＲＯＭとは別個のＲＯＭとして備えるＭＦＰについて説明する。なお、特に断らない限り、本実施形態に係る機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。また、第１の実施形態と同様の構成または処理には同一の参照符号を付し、説明は省略する。
【００５５】
図７は、本実施形態に係るＭＦＰ１００１の構成を表す図である。図７において、ＭＦＰ１００１は、ＳＰＩバス１１４に接続されたリカバリ用ＦＬＡＳＨ  ＲＯＭ（ＦＬＡＳＨ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３１を備える。ＦＬＡＳＨ  ＲＯＭ１３１は、メインＣＰＵ１０１およびＨＤＤ制御部１２４の構成となるＣＰＵコア４０１で実行されるブートコードを含むプログラムのリカバリデータを格納すると共にＭＦＰ１のデフォルト設定値を記憶する。
【００５６】
図８は、リカバリ用ＦＬＡＳＨ  ＲＯＭ  １３１のメモリマップを示す図である。図８において、リカバリ用ＦＬＡＳＨ  ＲＯＭ  １３１のメモリマップは、Ｔａｇ０  ８０１、Ｔａｇ１  ８０２、リカバリブートコード０  ８０３、およびリカバリブートコード１  ８０４を含む。
【００５７】
Ｔａｇ０  ８０１には、リカバリブートコード０  ８０３の先頭アドレスが記憶されている。Ｔａｇ１  ８０２には、リカバリブートコード１  ８０４の先頭アドレスが記憶されている。リカバリブートコード０  ８０３には、メインＣＰＵ１０１で実行されるコードが記憶されている。リカバリブートコード１  ８０４には、ＨＤＤ制御部１２４におけるＣＰＵコア４０１で実行されるコードが記憶されている。
【００５８】
次に、本実施形態におけるサブＣＰＵ１１５およびサブＣＰＵ２  １２６の処理手順を図９のフローチャートを用いて説明する。図９のフローチャートは、ＭＦＰ１００１の電源投入時に、サブＣＰＵ２  １２６によって実行される。
【００５９】
まず、サブＣＰＵ２  １２６は起動するとＳ９０１でＢｏｏｔ  ＲＯＭ３１０内のコードを実行し、ＳＰＩバス１２８を介してＦＬＡＳＨ  ＲＯＭ２  １２７からサブＣＰＵ  ＦＷ１１０４をＳＲＡＭ３０５に読み込む。次にサブＣＰＵ２  １２６は処理をＳ９０２に進め、暗号処理部３０８によってＦＷ署名１１０５をＯＴＰ３０４内の公開鍵で復号化して、ハッシュ値を得る。続いてサブＣＰＵ２  １２６は処理をＳ９０３に進め、暗号処理部３０８によってサブＣＰＵ  ＦＷ１１０４のハッシュ値を計算する。次にサブＣＰＵ２  １２６は処理をＳ９０４に進め、Ｓ９０２において復号化で得られたハッシュ値と、Ｓ９０３において計算したハッシュ値を比較する。Ｓ９０２のハッシュ値とＳ９０３のハッシュ値とが一致する場合（Ｓ９０４でＹＥＳ）は処理をＳ９１０に進める。
【００６０】
Ｓ９０２のハッシュ値とＳ９０３のハッシュ値とが不一致の場合（Ｓ９０４でＮＯ）はＳ９０５に処理を進め、ＯＴＰ３０４のリカバリ用ＴＡＧを取得する。すなわち、Ｓ９０２のハッシュ値とＳ９０３のハッシュ値とが一致しないため、サブＣＰＵ２  １２６はサブＣＰＵ  ＦＷに改竄または故障が発生したと判定し、リカバリ用Ｔａｇ１  ５０７を取得する。リカバリ用Ｔａｇ１  ５０８にはリカバリブートコード１  ５１０の先頭アドレスが記憶されている。
【００６１】
続いて、サブＣＰＵ２  １２６は処理をＳ９０６に進め、再度、暗号処理部３０８によって署名をサブＣＰＵ  ＦＷ５０４に付属している公開鍵で復号化してハッシュ値を得る。次にサブＣＰＵ２  １２６は処理をＳ９０７に進め、リカバリ用ＦＬＡＳＨ  ＲＯＭ１３１からリカバリブートコード１  ５１０をＳＲＡＭ３０５に読み込む。次に、サブＣＰＵ２  １２６は処理をＳ９０８に進め、サブＣＰＵ２  １２６の暗号処理部３０８によってリカバリブートコード１  ５１０のハッシュ値を計算する。そして、サブＣＰＵ２  １２６は処理をＳ９０９に進め、Ｓ９０６のハッシュ値とＳ９０８のハッシュ値とを比較する。Ｓ９０６のハッシュ値とＳ９０８のハッシュ値とが一致しない場合（Ｓ９０９でＮＯ）は図９の処理を終了する。Ｓ９０６のハッシュ値とＳ９０８のハッシュ値とが一致する場合（Ｓ９０９でＹＥＳ）は、サブＣＰＵ２  １２６は処理をＳ９１０に進め、ＧＰＩＯ３０３を制御して「Ｈｉ」レベルのリセット信号１２９を出力する。
【００６２】
以上説明した様に、本実施形態に係るＭＦＰ１００１は、メインＣＰＵ１０１およびＨＤＤ制御部１２４の構成となるＣＰＵコア４０１において、各々のＲＯＭのブートコードの改竄検知を行う。これによって、検証が不一致の場合、ブートコードのリカバリ処理を行うＲＯＭとして、ＦＬＡＳＨ  ＲＯＭ１３１を構成することも可能となる。
【００６３】
＜第３の実施形態＞
第３の実施形態では、複数のＣＰＵのための複数のブートコードを格納するＦＬＡＳＨ  ＲＯＭと、複数のブートコードの正当性を検証するコントローラとの間のインタフェースに応じてリカバリ用データのプロトコル変換を行うＭＦＰについて説明する。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。また、第１または第２の実施形態と同様の構成または処理には同一の参照符号を付し、説明は省略する。
【００６４】
本実施形態ではメインＣＰＵ１０１およびＨＤＤ制御部１２４のＣＰＵコア４０１において、各々のＲＯＭのブートコードを検証するサブＣＰＵ１１５とサブＣＰＵ２  １２６の接続インタフェースが異なる場合の処理について説明する。
【００６５】
まず、図１０を参照して、本実施形態に係るＭＦＰ１１０１の構成例を説明する。ＭＦＰ１１０１は、ＳＰＩバス１１４に接続されたリカバリ用ＦＬＡＳＨ  ＲＯＭ１３１を備える。また、サブＣＰＵ１１５は、ＳＰＩバスと異なるＩ２Ｃバス１３２に接続し、プロトコル変換を行う。Ｉ２Ｃバス１３２を介して、サブＣＰＵ２  １２６、ＦＬＡＳＨ  ＲＯＭ２  １２７、ＨＤＤ制御部１２４の構成となるＣＰＵコア４０１を相互接続する構成を備える。
【００６６】
図１１は、電源投入時にサブＣＰＵ２  １２６によって実行される処理手順の一例を示す。
【００６７】
まず、サブＣＰＵ２  １２６は起動するとＳ１１０１でＢｏｏｔ  ＲＯＭ３１０内のコードを実行し、Ｉ２Ｃバス１３２を介してＦＬＡＳＨ  ＲＯＭ２  １２７からサブＣＰＵ  ＦＷ１１０４をＳＲＡＭ３０５に読み込む。次にサブＣＰＵ２  １２６は処理をＳ１１０２に進め暗号処理部３０８によってＦＷ署名１１０５をＯＴＰ３０４内の公開鍵で復号化して、正解となるハッシュ値を得る。続いてサブＣＰＵ２  １２６は処理をＳ１１０３に進め、暗号処理部３０８によってサブＣＰＵ  ＦＷ１１０４のハッシュ値を計算する。次にサブＣＰＵ２  １２６は処理をＳ１１０４に進め、Ｓ１１０２において復号化で得られたハッシュ値とＳ１１０３において計算したハッシュ値とを比較する。Ｓ１１０２のハッシュ値とＳ１１０３のハッシュ値とが一致する場合（Ｓ１１０４でＹＥＳ）はサブＣＰＵ２  １２６は処理をＳ１１１１に進める。Ｓ１１０２のハッシュ値とＳ１１０３のハッシュ値とが不一致の場合（Ｓ１１０４でＮＯ）はＳ１１０５に処理を進め、ＯＴＰ３０４のリカバリ用ＴＡＧを取得する。リカバリ用Ｔａｇ１  ５０８にはリカバリブートコード１  ５１０の先頭アドレスが記憶されている。
【００６８】
続いて、サブＣＰＵ２  １２６は処理をＳ１１０６に処理を進め、再度、暗号処理部３０８によって署名をサブＣＰＵ  ＦＷ５０４に付属している公開鍵で復号化してハッシュ値を得る。次にサブＣＰＵ１１５はＳ１１０７に処理を進め、リカバリブートコード１  ５１０のインタフェース変換を行い、ＳＰＩからＩ２Ｃのインタフェース変換を行い、サブＣＰＵ２  １２６にリカバリブートコード１  ５１０を送信する。次にサブＣＰＵ２  １２６は処理をＳ１１０８に進め、リカバリブートコード１  ５１０をＳＲＡＭ３０５に上書きする。次にサブＣＰＵ２  １２６は処理をＳ１１０９に進め、暗号処理部３０８によってリカバリブートコード１  ５１０のハッシュ値を計算する。そして、サブＣＰＵ２  １２６は処理をＳ１１１０に進め、Ｓ１１０６のハッシュ値とＳ１１０９のハッシュ値とを比較する。Ｓ１１０６のハッシュ値とＳ１１０９のハッシュ値とが一致した場合（Ｓ１１１０でＹＥＳ）はサブＣＰＵ２  １２６は処理をＳ１１１１に進め、ＧＰＩＯ３０３を制御して「Ｈｉ」レベルのリセット信号１２９を出力する。
【００６９】
以上説明した様に、本実施形態に係るＭＦＰ１１０１は、メインＣＰＵ１０１およびＨＤＤ制御部１２４のＣＰＵコア４０１において、各々のＲＯＭのブートコードの改竄検知を行う。また、検証が不一致におけるブートコードのリカバリ処理において、サブＣＰＵ１１５と各々のＦＬＡＳＨ  ＲＯＭとの間の接続インタフェースにおいて、異なるプロトコルの場合もインタフェース変換を行う。これによって、異なるプロトコルを用いるＦＬＡＳＨ  ＲＯＭを用いたリカバリ対応処理が可能となる。
【００７０】
＜その他の実施形態＞
上述の各実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００７１】
１：ＭＦＰ、１０１：メインＣＰＵ、１１２：ＦＬＡＳＨ  ＲＯＭ、１１５：サブＣＰＵ、１１７：リセット信号
【図１】
2020187649.tif 000003
【図２】
2020187649.tif 000004
【図３】
2020187649.tif 000005
【図４】
2020187649.tif 000006
【図５】
2020187649.tif 000007
【図６】
2020187649.tif 000008
【図７】
2020187649.tif 000009
【図８】
2020187649.tif 000010
【図９】
2020187649.tif 000011
【図１０】
2020187649.tif 000012
【図１１】
2020187649.tif 000013
【図１２】
2020187649.tif 000014
【図１３】
2020187649.tif 000015