(57)【要約】【課題】起動エラー時であっても、ユーザにわかりやすいエラー通知を提供する。【解決手段】ユーザとのインタフェースを行うユーザインタフェースと、ローディングプログラムを格納する書き換え不可能な不揮発メモリと、ブートプログラム及びエラーを通知するプログラムを格納する書き換え可能な第１不揮発メモリとを有し、起動時、ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、当該ブートプログラムの改ざんを検知した場合、前記エラーを通知するプログラムを起動し前記ユーザインタフェースを介してエラーを通知する。【選択図】  図３
2020057040.tif 000002
【特許請求の範囲】
【請求項１】
ユーザとのインタフェースを行うユーザインタフェースと、
ローディングプログラムを格納する書き換え不可能な不揮発メモリと、
ブートプログラム及びエラーを通知するプログラムを格納する書き換え可能な第１不揮発メモリと、
起動時、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、当該ブートプログラムの改ざんを検知した場合、前記エラーを通知するプログラムを起動し前記ユーザインタフェースを介してエラーを通知する制御手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記ブートプログラムの改ざんを検知した場合、前記エラーを通知するプログラムの改ざんを検証し、前記エラーを通知するプログラムの改ざんを検知しなかった場合に前記エラーを通知するプログラムを起動して前記エラーを通知することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御手段が前記エラーを通知するプログラムの改ざんを検知した場合に、エラーを通知するための通知手段を、更に有することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記制御手段により実行されるメインプログラムを格納する書き換え可能な第２不揮発メモリを更に有し、
前記制御手段は、前記ブートプログラムの改ざんを検知しなかった場合、前記ブートプログラムを起動して前記メインプログラムの改ざんを検知し、前記メインプログラムの改ざんを検知しなかった場合に前記メインプログラムを実行することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記制御手段は、前記ブートプログラムの改ざんを検知した場合、前記メインプログラムの起動エラーを前記ユーザインタフェースを介して通知することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記ユーザインタフェースは表示部を有し、
前記エラーを通知するプログラムは、前記表示部に前記エラーの内容を表示することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項７】
前記制御手段は、第１ＣＰＵと第２ＣＰＵとを有し、
前記第１ＣＰＵは、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、前記ブートプログラムの改ざんを検知しなかった場合、前記ブートプログラムを起動して前記メインプログラムの改ざんを検知し、前記メインプログラムの改ざんを検知しなかった場合に前記メインプログラムをメモリに展開し、前記第２ＣＰＵを起動して前記メインプログラムを実行させることを特徴とする請求項４又は５に記載の情報処理装置。
【請求項８】
ユーザとのインタフェースを行うユーザインタフェースと、
ローディングプログラムを格納する書き換え不可能な不揮発メモリと、
ブートプログラムと、当該ブートプログラムの複製を格納する書き換え可能な不揮発メモリと、
起動時、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、当該ブートプログラムの改ざんを検知した場合、エラーの発生を記憶する記憶手段と、
前記ブートプログラムの改ざんを検知した場合前記ブートプログラムの複製の改ざんを検証し、前記ブートプログラムの複製の改ざんを検知しなかった場合に、前記記憶手段に前記エラーの発生が記憶されていると前記ユーザインタフェースを介してエラーを通知する制御手段と、
を有することを特徴とする情報処理装置。
【請求項９】
前記制御手段により実行されるメインプログラムを格納する書き換え可能な第２不揮発メモリを更に有し、
前記制御手段は、前記ブートプログラムの改ざんを検知しなかった場合は、前記ブートプログラムを起動して前記メインプログラムの改ざんを検知し、前記メインプログラムの改ざんを検知しなかった場合に前記メインプログラムを実行することを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記制御手段が、前記ブートプログラムの改ざんを検知した後、前記ブートプログラムの複製の改ざんを検知した場合に、エラーを通知するための通知手段を、更に有することを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記制御手段は、第１ＣＰＵと第２ＣＰＵとを有し、
前記第１ＣＰＵは、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、前記ブートプログラムの改ざんを検知しなかった場合、前記ブートプログラムを起動して前記メインプログラムの改ざんを検知し、前記メインプログラムの改ざんを検知しなかった場合に前記メインプログラムをメモリに展開し、前記第２ＣＰＵを起動して前記メインプログラムを実行させることを特徴とする請求項９又は１０に記載の情報処理装置。
【請求項１２】
ローディングプログラムを格納する書き換え不可能な不揮発メモリと、ブートプログラム及びエラーを通知するプログラムを格納する書き換え可能な不揮発メモリとを有する情報処理装置を制御する制御方法であって、
起動時、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証する工程と、
前記ブートプログラムの改ざんを検知した場合、前記エラーを通知するプログラムを起動してエラーを通知する工程と、
前記ブートプログラムの改ざんを検知しなかった場合、メインプログラムの改ざんを検証する工程と、
前記メインプログラムの改ざんを検知しなかった場合に、前記メインプログラムを実行する工程と、
を有することを特徴とする制御方法。
【請求項１３】
ローディングプログラムを格納する書き換え不可能な不揮発メモリと、ブートプログラムと、当該ブートプログラムの複製を格納する書き換え可能な不揮発メモリとを有する情報処理装置を制御する制御方法であって、
起動時、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、当該ブートプログラムの改ざんを検知した場合、エラーの発生を記憶する記憶工程と、
前記ブートプログラムの改ざんを検知した場合前記ブートプログラムの複製の改ざんを検証する工程と、
前記ブートプログラムの複製の改ざんを検知しなかった場合に、前記記憶工程で前記エラーの発生が記憶されているとエラーを通知する工程と、
前記ブートプログラムの改ざんを検知しなかった場合、メインプログラムの改ざんを検証する工程と、
前記メインプログラムの改ざんを検知しなかった場合に、前記メインプログラムを実行する工程と、
を有することを特徴とする制御方法。
【請求項１４】
コンピュータを、請求項１乃至１１のいずれか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置とその制御方法、及びプログラムに関するものである。
【背景技術】
【０００２】
ソフトウェアの脆弱性をついてソフトウェアを改ざんし、コンピュータを悪用する攻撃が問題となっている。そのような攻撃の対策として、起動する度にブートプログラムのハッシュ値を再計算して検証を行うことで改ざんを検知する方法が知られている。そして起動時にブートプログラムの改ざんを検知した場合は、冗長構成のブートプログラムによって自動復旧を行う方法が提案されている（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１３８２６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術を用いても起動が不可能である場合、ユーザに対して何らかの手段で、その状況を通知することが望ましい。起動エラー時に、ユーザにとって状況が分かり易いリッチな通知手段（例えばＵＩ画面にメッセージを表示）を提供するためには、システムの初期化等、ブートプログラム同等の処理を、改ざん検知プログラムに組み込む必要がある。そのため、改ざん検知プログラムを保持するＲＯＭのメモリ容量が増大し、ＲＯＭに記憶した場合は、通知内容の変更ができない等の問題があった。
【０００５】
このため従来は、起動エラー時の通知は、例えば、ＧＰＩＯ制御によるＬＥＤの点灯やブザーの鳴動等に限られ、ユーザにとってエラーの状況が分かりにくいという課題があった。
【０００６】
本発明の目的は、上記従来技術の問題点の少なくとも一つを解決することにある。
【０００７】
本発明の目的は、起動時に、ローディングプログラムによりブートプログラムの改ざんの有無を検知し、ブートプログラムの改ざんが検知されるとエラーを通知するプログラムを起動してエラーを通知することにより、ユーザに対してエラーの状況を分かり易く通知することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
ユーザとのインタフェースを行うユーザインタフェースと、
ローディングプログラムを格納する書き換え不可能な不揮発メモリと、
ブートプログラム及びエラーを通知するプログラムを格納する書き換え可能な第１不揮発メモリと、
起動時、前記ローディングプログラムを実行して前記ブートプログラムの改ざんを検証し、当該ブートプログラムの改ざんを検知した場合、前記エラーを通知するプログラムを起動し前記ユーザインタフェースを介してエラーを通知する制御手段と、を有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、起動時に、ローディングプログラムによりブートプログラムの改ざんの有無を検知し、ブートプログラムの改ざんが検知した場合、エラーを通知するプログラムを起動してエラーを通知することにより、ユーザに対してエラーの状況を分かり易く通知できる。
【００１０】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。尚、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１１】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】実施形態１に係る複合機の構成を説明するブロック図。
【図２】実施形態１に係る複合機が有するソフトウェアモジュールを説明する図。
【図３】実施形態１に係る複合機のＣＰＵ１０３による起動時の処理を説明するフローチャート。
【図４】実施形態１に係るＵＩ部に表示されるエラーメッセージの一例を示す図。
【図５】実施形態２に係る複合機が有するソフトウェアモジュールを説明する図。
【図６】実施形態２に係る複合機のＣＰＵ１０３による起動時の処理を説明するフローチャート。
【図７】図６のＳ６０３、Ｓ６０７で実行されるブート処理を説明するフローチャート。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。尚、実施形態に係る情報処理装置として複合機（デジタル複合機（ＭＦＰ）：Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を例に説明する。しかしながら適用範囲は複合機に限定されるものでなく、例えばＰＣ、通信装置等含む情報処理装置にも適用できる。
【００１３】
［実施形態１］
図１は、実施形態１に係る複合機１０の構成を説明するブロック図である。
【００１４】
コントローラ（制御部）２０は、複合機１０を制御するためのモジュールを有し、実施形態１では半導体チップとして構成されているものとして説明する。ＲＯＭ１０２は、マスクＲＯＭで構成されたリードオンリーメモリ（書き換え不可能な不揮発メモリ）で、ＣＰＵ１０３により実行されるローダ（ローディングプログラム）２００等を格納している。ＮＯＲフラッシュメモリ１４５は、ＣＰＵ１０３により実行されるブートプログラム２０２（図２）、エラー通知プログラム２０３（図２）等を格納している。ＮＡＮＤフラッシュメモリ１４６は、ＣＰＵ１０１により実行されるメインプログラム２０８（図２）を格納している。各フラッシュメモリは書き換え可能な不揮発メモリで、ＮＯＲフラッシュメモリ制御部１３５、ＮＡＮＤフラッシュメモリ制御部１３６を介して、ＣＰＵ１０１，ＣＰＵ１０３からアクセスすることができる。ＣＰＵ１０３は、ＮＯＲフラッシュメモリ１４５、及びＮＡＮＤフラッシュメモリ１４６に格納された各プログラムの署名検証や各制御部の初期化、及びＣＰＵ１０１のリセット解除を行う。またＣＰＵ１０１は、複合機１０の全体を制御する。ＯＰＴ１０９は、製造時に一度だけ書き込みが可能なＲＯＭ（Ｏｎｅ Ｔｉｍｅ Ｐｒｏｇｒａｍｍａｂｌｅ ＲＯＭ）で、署名検証のための公開鍵を保持している。ＲＡＭ１０４は、例えばＳＲＡＭで構成されたランダムアクセスメモリで、プログラムや一時的なデータの格納等に使用される。スキャナＩ／Ｆ（インタフェース）制御部１０５は、スキャナ１１１による原稿の読み取りを制御する。プリンタＩ／Ｆ制御部１０７は、プリンタ１１２による印刷処理等を制御する。画像処理部１０６は、スキャナ１１１から入力した原稿の画像データに対するシェーディング処理や、プリンタ１１２へ出力するためのハーフトーン処理を行う。ＵＩ制御部１０８は、ＵＩ（ユーザインタフェース）部１１０とコントローラ２０との間のインタフェースを制御する。
【００１５】
ＤＲＡＭ１４４は、ＣＰＵ１０１で実行されるプログラムや画像処理部１０６のワークメモリとして使用される。メモリ制御部１３４は、ＤＲＡＭ１４４へアクセスするための各種コマンド制御を行う。ＵＩ部１１０は、不図示のタッチパネルのユーザインターフェースで、ユーザからの操作の受け付けや画面への表示を行う。ＵＩ制御部１０８は、ＵＩ部１１０のタッチパネルへの表示タイミングの生成、及びタッチパネルからの入力コマンドの受け付けを行う。ネットワークＩ／Ｆ１３７は、ネットワーク１４７を介した、不図示のパーソナルコンピュータ（ＰＣ）からの印刷コマンドの受け付けや、ネットワーク１４７へのスキャンデータの送信等を行う。外部ポート制御部１３８は汎用の入出力ポートであり、例えば出力ポートを制御することにより、ＬＥＤ（表示器）１４８を必要に応じて点灯して、ソフトウェアやハードウェアの異常を外部に伝えることができる。システムバス１００は、接続されているモジュールを相互に接続する。システムバス１００を介して、ＣＰＵ１０１とＣＰＵ１０３及び各モジュール間で各種データや制御コマンド等を送受信する。
【００１６】
図２は、実施形態１に係る複合機１０が有するソフトウェアモジュールを説明する図である。
【００１７】
ローダ２００は、複合機１０の電源がオンになるとＣＰＵ１０３により実行されるプログラムで、ＲＯＭ１０２に格納されている。ローダ２００は、改ざん検知部２０１を有し、ブートプログラム２０２の署名検証に成功した後、ブートプログラム２０２の実行を開始する。またブートプログラム２０２の署名検証に失敗した場合は、エラー通知プログラム２０３を署名検証して実行を開始する。この処理の詳細については後述する。
【００１８】
ブートプログラム２０２は、ローダ２００によるブートプログラム２０２の署名検証後にＣＰＵ１０３で実行されるプログラムで、ＮＯＲフラッシュメモリ１４５に格納されている。システム初期化部２０４は、メモリ制御部１３４等の各種初期化を行う。メインプログラム改ざん検知部２０５は、メインプログラム２０８の署名検証を行う。この署名検証に成功すると、メインプログラム２０８をＤＲＡＭ１４４へ展開した後、ＣＰＵ１０１のリセットを解除する。ＣＰＵ１０１は、リセットが解除されると、ＤＲＡＭ１４４に展開されたメインプログラム２０８の実行を開始する。
【００１９】
メインプログラム２０８はＣＰＵ１０１により実行されるプログラムで、ＮＡＮＤフラッシュメモリ１４６に格納されている。カーネル２０９は、複合機１０の制御システムの核となるプログラムで、アプリケーション２１０に提供する各種リソースの制御やスケジューリング等を行う。アプリケーション２１０は、複合機１０が提供する各種機能（コピー、ＳＥＮＤ、プリント等）を実現するためのプログラムである。アプリケーション２１０には、スキャナＩ／Ｆ制御部１０５、プリンタＩ／Ｆ制御部１０７、画像処理部１０６の制御や、ＵＩ部１１０に表示する画面の生成、及び複合機１０の総合的な状態制御等が含まれる。
【００２０】
エラー通知プログラム２０３は、ＣＰＵ１０３によりで実行されるプログラムで、ＮＯＲフラッシュメモリ１４５に格納されている。ローダ２００によってブートプログラム２０２の改ざんを検知した場合、エラー通知プログラム２０３はローダ２００に代わってＵＩ部１１０を通じてエラーを通知する。ＵＩ初期化部２０６は、ＵＩ部１１０にエラー通知を表示するために必要となるＵＩ制御部１０８とメモリ制御部１３４の初期化を行う。ＵＩ初期化部２０６は、ブートプログラム２０２のシステム初期化部２０４と異なり、ＵＩ部１１０にエラーを通知するのに必要となるモジュールのみ初期化し、通知に必要でないモジュールの初期化は行わない。エラー表示部２０７は、ユーザにエラー状態を通知するためのメッセージを作成してＵＩ部１１０へ表示させる。
【００２１】
図３は、実施形態１に係る複合機１０のＣＰＵ１０３による起動時の処理を説明するフローチャートである。尚、このフローチャートで示す処理は、ＣＰＵ１０３がＮＯＲフラッシュメモリ１４５に格納されているプログラムをＲＡＭ１０４に展開して実行することにより実現される。尚、この処理は、複合機１０の電源が投入されてコントローラ２０のリセットが解除されることにより開始される。尚、図３中に示す破線は、各処理がローダ２００、ブートプログラム２０２、エラー通知プログラム２０３のいずれで実行されるのかを示す。
【００２２】
ＣＰＵ１０３はリセットが解除されると、先ずＳ３０１でローダ２００を実行する。ローダ２００が開始されるとＳ３０１でＣＰＵ１０３は、ＮＯＲフラッシュメモリ１４５に格納されているブートプログラム２０２の署名検証を行う。ここで署名検証に成功するとＳ３０２に進みＣＰＵ１０３は、ブートプログラム２０２を起動する。こうしてブートプログラム２０２が起動されるとＳ３０３に進みＣＰＵ１０３はコントローラ２０を制御して、ステム全体の初期化を行う。そしてＳ３０４に進みＣＰＵ１０３は、ＮＡＮＤフラッシュメモリ１４６に格納され、ＣＰＵ１０１で実行されるメインプログラム２０８の署名検証を行う。Ｓ３０４でメインプログラム２０８の署名検証に成功するとＳ３０５に進みＣＰＵ１０３は、メインプログラム２０８をＤＲＡＭ１１４に展開した後、ＣＰＵ１０１のリセットを解除する。これによりＣＰＵ１０１が起動される。尚、ＣＰＵ１０１は、Ｓ３０５でＣＰＵ１０３がＣＰＵ１０１のリセットを解除するまでは動作しない。以上が起動時に、プログラムの署名検証に成功して正常に起動できた場合の処理フローである。
【００２３】
次に、プログラムの署名検証に失敗して、プログラムを正常に起動できない場合の処理を説明する。
【００２４】
Ｓ３０１でブートプログラム２０２の署名検証に失敗した場合はＳ３０７に進みＣＰＵ１０３は、エラー通知プログラム２０３の署名検証を行う。このエラー通知プログラム２０３の署名検証に成功した場合はＳ３０８に進みＣＰＵ１０３は、エラー通知プログラム２０３を起動する。こうしてエラー通知プログラム２０３が起動されるとＳ３０９でＣＰＵ１０３は、ＵＩ部１１０の初期化を行う。そしてＳ３１０に進んでＣＰＵ１０３は、ブートプログラムの起動エラーを示すエラーメッセージをＵＩ部１１０に表示して起動フローを終了する。尚、Ｓ３０７でエラー通知プログラム２０３の署名検証を行うのは、エラー通知プログラム２０３自体が改ざんされて不正な処理が実行されることを防ぐためである。
【００２５】
一方、Ｓ３０７でエラー通知プログラム２０３の署名検証も失敗した場合はＳ３１１に進みＣＰＵ１０３は、残されたエラー通知手段であるＬＥＤ１４８を点灯させてユーザにエラーを通知した後、この起動フローを終了する。この状態になった場合は、ユーザは複合機１０のマニュアルを参照して機器の異常を認識することとなる。一方で、エラー通知プログラム２０３によって、エラーメッセージがＵＩ部１１０に表示されていれば、ユーザは直ちに機器の異常を認識することができるようになる。
【００２６】
またブートプログラム２０２のＳ３０４で、メインプログラム２０８の署名検証に失敗した場合も同様に、Ｓ３０６に進みブートプログラム２０２はＵＩ部１１０にエラーメッセージを表示することで、ユーザにメインプログラム２０８の起動エラーを通知して、この処理を終了する。
【００２７】
図４は、実施形態１に係るＵＩ部１１０に表示されるエラーメッセージの一例を示す図である。
【００２８】
エラーメッセージは、主に３つの要素を有している。まず、説明表示４００には、機器の現在の状態を、ユーザにも分かる言葉で説明する。例えば、「起動エラーが発生しました」等である。これによりユーザは、現在の機器の状態を容易に認識することが可能となる。
【００２９】
ステータス表示４０１は、より詳細に機器の状態を提示するためのメッセージである。このメッセージは、例えば「ステータス１」等の表示であり、ユーザは意味を理解することができない。しかし、後にサポートへの問い合わせ時やサービスマンによる点検時には、このステータスを読み取ることにより、Ｓ３０１でブートプログラム検証に失敗したのか、或いはＳ３０４でメインプログラム検証に失敗したのかを、切り分けることが可能となる。更に、それ以外の予期せぬエラーである場合の切り分けも可能となる。
【００３０】
ユーザアクション表示４０２は、ユーザが次にとるべきアクションを提示するためのメッセージを表示する。例えば、「ユーザサポートに問い合わせてください」等の表示である。尚、実施形態１で示したメッセージはあくまでも一例であり、また表示順番もこの順に限らない。例えば、ステータス表示４０１を省略することや、メッセージの表示順を入れ替えること等も考えられる。また、表示レイアウトや表示する内容も、この実施形態に限定されるものではない。
【００３１】
以上説明したように実施形態１によれば、エラー通知プログラムを個別に用意することにより、ブートプログラムの署名検証に失敗した場合でも、ユーザにとって分かり易いエラー通知を提供することが可能となる。これは、エラー通知処理をローダ（ＲＯＭ）に持たせず、独立して、フラッシュメモリに格納することにより、半導体チップ内部のマスクＲＯＭに入りきらないＵＩ部の制御や画面生成等の処理が実現できることによる。
【００３２】
更に、エラー通知プログラムもブートプログラムと同様に署名検証することにより、例え、フラッシュメモリのエラー通知プログラムが改ざんされたとしても、不正なコードが実行されて装置の不具合が生じるなどの事態の発生を防止できる。
【００３３】
［実施形態２］
実施形態２について説明する。前述の実施形態１では、ブートプログラム２０２が冗長構成となっておらず、一度、署名検証に失敗すれば起動エラーとなる例で説明した。しかし、特許文献１にあるように、耐タンパ性や耐故障性を向上するために、ブートプログラムを冗長構成にすることが考えられる。そこで実施形態２では、ブートプログラム２０２を冗長構成にした場合における、プログラムの署名検証に失敗した場合のエラー通知方法について説明する。尚、実施形態２に係る複合機１０の構成等は前述の実施形態１と同様であるため、その説明を省略する。
【００３４】
図５は、実施形態２に係る複合機１０が有するソフトウェアモジュールを説明する図である。ローダ５００は、複合機１０の電源を入れるとＣＰＵ１０３で実行されるプログラムで、ＲＯＭ１０２に格納される。ローダ５００は、改ざん検知部５０１を有し、ブートプログラム５０２の署名検証に成功した後にブートプログラム５０２を起動する。また、ブートプログラム５０２の署名検証に失敗した場合には、エラー通知プログラム５０３を署名検証して起動する。この処理の詳細については後述する。
【００３５】
ブートプログラム５０２，５０３は、ローダ５００による署名検証後にＣＰＵ１０３で実行されるプログラムで、ＮＯＲフラッシュＲＯＭ１４５に格納される。尚、ブートプログラム５０３は、ブートプログラム５０２の複製であり、これらは同一のプログラムである。システム初期化部５０４は、メモリ制御部１３４等の各種初期化を行う。メインプログラム改ざん検知部５０６は、メインプログラム２０８の署名検証を行う。メインプログラム２０８の署名検証に成功すると、メインプログラム２０８をＤＲＡＭ１４４へ展開した後に、ＣＰＵ１０１のリセットを解除する。ＣＰＵ１０１は、リセットが解除されるとＤＲＡＭ１４４に展開されたメインプログラム２０８の実行を開始する。エラー処理部５０５は、ローダ５００がブートプログラム５０２の改ざんを検知した場合に、ローダ５００に代わってＵＩ部１１０を通じてエラーを通知する。
【００３６】
メインプログラム２０８は、ブートプログラム５０２，５０３による署名検証後にＣＰＵ１０１で実行されるプログラムで、ＮＡＮＤフラッシュメモリ１４６に格納される。メインプログラム２０８の構成は実施形態１と同様である。
【００３７】
図６及び図７は、実施形態２に係る複合機１０のＣＰＵ１０３による起動時の処理を説明するフローチャートである。尚、このフローチャートで示す処理は、ＣＰＵ１０３がＮＯＲフラッシュメモリ１４５に格納されているプログラムをＲＡＭ１０４に展開して実行することにより実現される。尚、この処理は、複合機１０の電源が投入されてコントローラ２０のリセットが解除されることにより開始される。尚、図６に示す破線は、各処理がローダ５００、ブートプログラム５０２，５０３のいずれで実行されるのかを示す。
【００３８】
図６は、実施形態２に係るＣＰＵ１０３による起動時の処理フローを説明するフローチャートである。全ての処理はＣＰＵ１０３によって実行される。本起動フローは複合機１０の電源が投入されてコントローラ２０のリセットが解除されると開始される。尚、図６中に示す破線は、各処理がローダ５００、ブートプログラム５０２、５０３のいずれで実行されるのかを示す。
【００３９】
ＣＰＵ１０３はリセットが解除されると、先ずローダ５００が実行される。ローダ５００が実行されるとＳ６０１で、ＮＯＲフラッシュ１４５に格納されているブートプログラム５０２を署名検証する。ここでブートプログラム５０２の署名検証に成功するとＳ６０２に進みＣＰＵ１０３は、ブートプログラム５０２を起動する。こうしてブートプログラム５０２を起動するとＳ６０３に進み、ブート処理が実行される。このブート処理の説明は図７を参照して後述する。
【００４０】
一方、Ｓ６０１でブートプログラム５０２の署名検証に失敗した場合はＳ６０４に進み、エラーフラグをセットする。このエラーフラグは、ＣＰＵ１０３内部に保持してもよく、又はＲＡＭ１０４に保持してもよい。こうしてエラーフラグをセットした後Ｓ６０５に進みＣＰＵ１０３は、ブートプログラム５０３の署名検証に成功したかどうか判定する。ここでブートプログラム５０３の署名検証に成功するとＳ６０６に進みＣＰＵ１０３は、ブートプログラム５０３を起動する。そしてＳ６０７に進んでブートプログラム５０３によるブート処理を実行する。
【００４１】
またＳ６０５でブートプログラム５０３の署名検証に失敗した場合はＳ６０８に進みＣＰＵ１０３は、ＬＥＤ１４８を点灯してエラーを通知する。これは実施形態１と同様である。
【００４２】
図７は、図６のＳ６０３、Ｓ６０７で実行されるブート処理を説明するフローチャートである。
【００４３】
先ずＳ７０１でＣＰＵ１０３は、コントローラ２０のシステム全体の初期化を実行する。次にＳ７０２に進みＣＰＵ１０３は、エラーフラグの確認を行う。このエラーフラグは、前述したように、ローダ５００によるブートプログラム５０２，５０３の署名検証においてエラーが発生したかどうかを示すフラグである。従って、図６のＳ６０３を実行するときは、即ち、ブートプログラム５０２のブート処理では、エラーフラグは必ず立っていない。なぜならば、ローダ５００による署名検証が成功していなければ、ブートプログラム５０２は起動してないからである。従って、この場合はＳ７０２からＳ７０３に進みＣＰＵ１０３は、メインプログラム２０８の署名検証を行う。そしてメインプログラム２０８の署名検証に成功するとＳ７０４に進み、メインプログラム２０８をＤＲＡＭ１１４に展開した後に、ＣＰＵ１０１のリセットを解除してＣＰＵ１０１を起動する。
【００４４】
一方、Ｓ６０７のブート処理のときはＳ６１０でエラーフラグが立っていると判定されてＳ７０５に処理が進む。Ｓ７０５でＣＰＵ１０３は、エラーステータスをＵＩ部１１０に表示してＳ７０３に進む。このエラーステータスは、ブートプログラム５０２の署名検証が失敗したことを表し、ブートプログラム５０３がローダ５００に代わってユーザに通知する。そしてＳ７０３でＣＰＵ１０３は、メインプログラム２０８の署名検証を行う。ここでメインプログラム２０８の署名検証に成功するとＳ７０４に進んで前述の処理を実行するが、Ｓ７０３でメインプログラム２０８の署名検証が失敗した場合はＳ７０６に進み、ＣＰＵ１０３は、ＵＩ部１１０にメインプログラム２０８の起動エラーを表示する。これは実施形態１のＳ３１０と同様である。
【００４５】
以上説明したように実施形態２によれば、ブートプログラムが冗長構成であっても、ローダによるプログラムの署名検証の結果を受けて、ブートプログラムがＵＩ部にエラーを表示することが可能となる。
【００４６】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００４７】
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００４８】
２００，５００…ローダ、２０２，５０２，５０３…ブートプログラム、２０３…エラー通知プログラム、２０８…メインプログラム
【図１】
2020057040.tif 000003
【図２】
2020057040.tif 000004
【図３】
2020057040.tif 000005
【図４】
2020057040.tif 000006
【図５】
2020057040.tif 000007
【図６】
2020057040.tif 000008
【図７】
2020057040.tif 000009