(57)【要約】      （修正有）【課題】複数のモードで起動する機器でのファームウェア更新機能に対する信頼性を向上する画像形成装置を提供する。【解決手段】通常時に使用する通常ファームウェアと通常ファームウェアのアップデート時に使用するセーフモードのファームウェアを有する画像形成装置では、通常ファームウェアをアップデートする前に通常ファームアップデート処理手段を検証する検証処理ステップＳ６０４を実施し、検証に失敗した場合は通常ファームアップデート処理手段のプログラムデータをセーフモードのファームアップデート処理手段のものに置きかえる。【選択図】図６Ａ
2015097022.tif 000002
【特許請求の範囲】
【請求項１】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、
前記第１のファームウェアをアップデートする第１のアップデート手段と、
前記第１のファームウェアをアップデートする前に、前記第１のアップデート手段が正しく動作するかを検証する第１の検証手段と、
前記第１の検証手段による検証が成功した場合は、前記第１のアップデート手段による前記第１のファームウェアのアップデートを実施させる第１の制御手段と、
前記第２のファームウェアをアップデートする第２のアップデート手段と、
前記第２のファームウェアをアップデートする前に、前記第２のアップデート手段が正しく動作するかを検証する第２の検証手段と、
前記第２の検証手段による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御手段とを備えることを特徴とする画像形成装置。
【請求項２】
前記第１の検証手段による検証が失敗した場合に、前記第２のアップデート手段のプログラムデータを取得する取得手段と、
前記第１のアップデート手段のプログラムデータを、前記取得手段により取得したプログラムデータに置き換える置き換え手段とをさらに備えることを特徴とする請求項１に記載の画像形成装置。
【請求項３】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、
前記第１のファームウェアをアップデートする第１のアップデート手段と、
前記第１のファームウェアをアップデートする前に、前記第１のアップデート手段が正しく動作するかを検証する第１の検証手段と、
前記第１の検証手段による検証が成功した場合は、前記第１のアップデート手段による前記第１のファームウェアのアップデートを実施させる第１の制御手段と、
前記第２のファームウェアをアップデートする第２のアップデート手段と、
前記第２のファームウェアをアップデートする前に、前記第２のアップデート手段が正しく動作するかを検証する第２の検証手段と、
前記第２の検証手段による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御手段とを備えることを特徴とする画像形成装置。
【請求項４】
前記第２の検証手段による検証が失敗した場合に、前記第１のアップデート手段のプログラムデータを取得する取得手段と、
前記第２のアップデート手段のプログラムデータを、前記取得手段により取得したプログラムデータに置き換える置き換え手段とをさらに備えることを特徴とする請求項３に記載の画像形成装置。
【請求項５】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、
前記第１のファームウェアをアップデートする第１のアップデート手段と、
前記第１のファームウェアをアップデートする前に、前記第１のアップデート手段が正しく動作するかを検証する第１の検証手段と、
前記第１の検証手段による検証が失敗した場合はフラグを記録して、前記第１のアップデート手段による前記第１のファームウェアのアップデートを中止する第１の制御手段と、
前記第２のファームウェアをアップデートする第２のアップデート手段と、
前記第２のファームウェアをアップデートする前に、前記第２のアップデート手段が正しく動作するかを検証する第２の検証手段と、
前記第２の検証手段による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御手段と、
前記第２のアップデート手段による前記第２のファームウェアのアップデート後に前記フラグが記録されているか否かを判定する判定手段とを備え、
前記第１の制御手段は、前記判定手段により前記フラグが記録されていると判定された場合は、前記第１のアップデート手段による第１のファームウェアのアップデートを再度実施させることを特徴とする画像形成装置。
【請求項６】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、
前記第１のファームウェアをアップデートする第１のアップデート手段と、
前記第１のアップデート手段が正しく動作するかを検証する第１の検証手段と、
前記第２のファームウェアをアップデートする第２のアップデート手段と、
前記第２のアップデート手段が正しく動作するかを検証する第２の検証手段と、
前記第１の検証手段及び前記第２の検証手段が正しく動作するか否かの検証指示を受け付ける受付手段と、
前記受付手段により指示を受け付けると、前記第１の検証手段による検証結果と前記第２の検証手段による検証結果を比較する比較手段と、
前記比較手段による結果に応じて検証が成功または失敗した旨を通知する通知手段とを備えることを特徴とする画像形成装置。
【請求項７】
前記比較手段による結果から前記第１の検証手段による検証結果と前記第２の検証手段による検証結果が一致する場合には、前記通知手段は、検証が成功した旨を通知することを特徴とする請求項６に記載の画像形成装置。
【請求項８】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、
前記第１のファームウェアをアップデートする第１のアップデート手段と、
前記第１のアップデート手段が正しく動作するかを検証する第１の検証手段と、
前記第２のファームウェアをアップデートする第２のアップデート手段と、
前記第２のアップデート手段が正しく動作するかを検証する第２の検証手段と、
外部装置から前記第１の検証手段及び前記第２の検証手段の検証用データを受信する受信手段とを備え、
前記第１の検証手段により、前記受信した検証用データを用いて前記第１のアップデート手段が正しく動作するかを検証させ、前記第２の検証手段により、前記受信した検証用データを用いて前記第２のアップデート手段が正しく動作するかを検証させる第１の制御手段と、
前記第１の制御手段による検証結果を外部装置に送信して、前記第１の検証手段及び前記第２の検証手段が正しく動作するかを問い合わせる通知手段と、
前記外部装置から通知された内容に応じて、前記第１のアップデート手段及び前記第２のアップデート手段によるアップデートを実施または中止させる第２の制御手段とを備えることを特徴とする画像形成装置。
【請求項９】
前記第２の制御手段は、前記外部装置から通知された内容から前記第１の検証手段及び前記第２の検証手段が正しく動作していると判断した場合は、前記第１のアップデート手段及び前記第２のアップデート手段によるアップデートを実施させることを特徴とする請求項８に記載の画像形成装置。
【請求項１０】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置の制御方法において、
前記第１のファームウェアをアップデートする前に、前記第１のファームウェアをアップデートする第１のアップデート手段が正しく動作するかを検証する第１の検証工程と、
前記第１の検証工程による検証が成功した場合は、前記第１のアップデート工程による前記第１のファームウェアのアップデートを実施させる第１の制御工程と、
前記第２のファームウェアをアップデートする前に、前記第２のファームウェアをアップデートする第２のアップデート手段が正しく動作するかを検証する第２の検証工程と、
前記第２の検証工程による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御工程とを備えることを特徴とする制御方法。
【請求項１１】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置の制御方法において、
前記第１のファームウェアをアップデートする前に、前記第１のファームウェアをアップデートする第１のアップデート手段が正しく動作するかを検証する第１の検証工程と、
前記第１の検証工程による検証が成功した場合は、前記第１のアップデート工程による前記第１のファームウェアのアップデートを実施させる第１の制御工程と、
前記第２のファームウェアをアップデートする前に、前記第２のファームウェアをアップデートする第２のアップデート手段が正しく動作するかを検証する第２の検証工程と、
前記第２の検証工程による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御工程とを備えることを特徴とする制御方法。
【請求項１２】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置の制御方法において、
前記第１のファームウェアをアップデートする前に、前記第１のファームウェアをアップデートする第１のアップデート手段が正しく動作するかを検証する第１の検証工程と、
前記第１の検証工程による検証が失敗した場合はフラグを記録して、前記第１のアップデート手段による前記第１のファームウェアのアップデートを中止する第１の制御工程と、
前記第２のファームウェアをアップデートする前に、前記第２のファームウェアをアップデートする第２のアップデート手段が正しく動作するかを検証する第２の検証工程と、
前記第２の検証工程による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御工程と、
前記第２のアップデート手段による前記第２のファームウェアのアップデート後に前記フラグが記録されているか否かを判定する判定工程と、
前記判定工程により前記フラグが記録されていると判定された場合は、前記第１のアップデート手段による第１のファームウェアのアップデートを再度実施させる第３の制御工程とを備えることを特徴とする制御方法。
【請求項１３】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、
前記第１のファームウェアをアップデートする第１のアップデート手段が正しく動作するかを検証する第１の検証工程と、
前記第２のファームウェアをアップデートする第２のアップデート手段が正しく動作するかを検証する第２の検証工程と、
前記第１の検証工程及び前記第２の検証工程が正しく動作するか否かの検証指示を受け付ける受付工程と、
前記受付工程にて指示を受け付けると、前記第１の検証工程による検証結果と前記第２の検証工程による検証結果を比較する比較工程と、
前記比較工程による結果に応じて検証が成功または失敗した旨を通知する通知工程とを備えることを特徴とする制御方法。
【請求項１４】
通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置の制御方法において、
前記第１のファームウェアをアップデートする第１のアップデート手段が正しく動作するかを検証する第１の検証工程と、
前記第２のファームウェアをアップデートする第２のアップデート手段が正しく動作するかを検証する第２の検証工程と、
外部装置から前記第１の検証工程及び前記第２の検証工程で利用する検証用データを受信する受信工程と、
前記第１の検証工程にて、前記受信した検証用データを用いて前記第１のアップデート手段が正しく動作するかを検証させ、前記第２の検証工程にて、前記受信した検証用データを用いて前記第２のアップデート手段が正しく動作するかを検証させる第１の制御工程と、
前記第１の制御工程による検証結果を外部装置に送信して、前記第１の検証工程及び前記第２の検証工程が正しく動作するかを問い合わせる通知工程と、
前記外部装置から通知された内容に応じて、前記第１のアップデート手段及び前記第２のアップデート手段によるアップデートを実施または中止させる第２の制御工程とを備えることを特徴とする制御方法。
【請求項１５】
請求項１０乃至１４のいずれか１項に記載の制御方法を画像形成装置に実行させるためのコンピュータに読み取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置及びその制御方法、並びにプログラムに関し、特に、画像形成装置におけるファームアップデート機能の検証技術に関する。
【背景技術】
【０００２】
従来、複合機のような組み込み機器において、ファームウェアを更新する際に一度システムをシャットダウンさせ、ファームウェア更新のために別の起動モードで起動し、同システムのファームウェア更新を行うものがある。このような複合機のファームウェア更新の仕組みとして、例えば特許文献１が提案されている。特許文献１では、複合機としての動作を行うメインプログラムと、メインプログラムの更新を行うためのサブプログラムを有する複合機が開示されている。この複合機におけるファームウェアの更新時には、メインプログラムを動作させて更新データをサーバ装置等から取得し、システムをリブートしたのち、サブプログラムを動作させてメインプログラムを更新する。更新が完了すると、再度システムをリブートさせて、更新されたメインプログラムを動作させるものである。
【０００３】
このように、ファームウェア更新時には、誤って改ざんされた更新データを使ってメインプログラムを更新してしまうことで、組み込み機器に不正なファームウェアが混入してしまうおそれがある。不正なファームウェアによる更新を防止するため、更新するファームウェアを署名等で検証し、正当性を確認してから更新する手法が用いられている。
【０００４】
しかしながら、このファームウェアの検証機能が、故障や改ざんにより正しく機能しなければ不正なファームウェアの混入を防止することができない。そのため、ファームウェア検証機能の正当性を確認する手法として、例えば特許文献２が提案されている。特許文献２によると、画像形成装置内に複数ある更新モジュールが相互に改ざんの有無を検証し合い、結果を管理装置に送信する。その結果を元に管理装置が正当ではないと判断した更新モジュールを無効化する。これにより、不正な更新モジュールが動作することを防止することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−０１８５２３号公報
【特許文献２】特開２０１０−１５２８７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献２に記載された技術では、特許文献１のようにメインプログラムとサブプログラムとが分離されていると起動しているプログラムが異なるため、更新モジュールの相互検証は困難である。また、特許文献２では、更新モジュールの検証を画像形成装置内で実施し、その結果を管理装置に送信しているため、全ての更新モジュールが不正となった場合や、その通信内容が改ざんされた場合は、更新モジュールが正当でないことを発見することができない。
【０００７】
本発明は、上記問題を鑑み成されたものであり、複数のモードで起動する機器でのファームウェア更新機能に対する信頼性を向上する方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明の画像形成装置は、通常時に使用する第１のファームウェアと前記第１のファームウェアのアップデート時に使用する第２のファームウェアを異なる記憶領域に記憶する記憶手段を有する画像形成装置において、前記第１のファームウェアをアップデートする第１のアップデート手段と、前記第１のファームウェアをアップデートする前に、前記第１のアップデート手段が正しく動作するかを検証する第１の検証手段と、前記第１の検証手段による検証が成功した場合は、前記第１のアップデート手段による前記第１のファームウェアのアップデートを実施させる第１の制御手段と、前記第２のファームウェアをアップデートする第２のアップデート手段と、前記第２のファームウェアをアップデートする前に、前記第２のアップデート手段が正しく動作するかを検証する第２の検証手段と、前記第２の検証手段による検証が成功した場合は、前記第２のアップデート手段による前記第２のファームウェアのアップデートを実施させる第２の制御手段とを備えることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、複数のモードで起動する機器に対するファームウェア更新機能に対する信頼性を向上することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態に係る画像形成装置の概略構成を示すブロック図である。
【図２】制御部のＣＰＵにより実行されるプログラムの概略構成を示す図である。
【図３】（ａ）ｓｔｄファームアップデート処理プログラムが実行されたときに実現されるアップデート機能の一例を示すブロック図、（ｂ）ｓａｆｅファームアップデート処理プログラムが実行されたときに実現されるアップデート機能の一例を示すブロック図である。
【図４】（ａ）〜（ｅ）アップデート処理時に操作部に表示される画面の一例を示す図である。
【図５】ファームアップデート部によるアップデート用ファームウェアの署名検証処理の流れを示すフローチャートである。
【図６Ａ】第１の実施形態における署名検証処理の正当性を検証する処理の流れを示すフローチャートである。
【図６Ｂ】第１の実施形態における署名検証処理の正当性を検証する処理の流れを示すフローチャートである。
【図７】図６ＡのステップＳ６０４におけるｓｔｄファームアップデート処理検証部による処理の詳細を示すフローチャートである。
【図８Ａ】本発明の第２の実施形態における署名認証処理の正当性を検証する処理の流れを示すフローチャートである。
【図８Ｂ】本発明の第２の実施形態における署名認証処理の正当性を検証する処理の流れを示すフローチャートである。
【図９】本発明の第３の実施形態におけるファームウェアのアップデート処理の検証処理の流れを示すフローチャートである。
【図１０】本発明の第４の実施形態におけるファームウェアのアップデート処理の検証処理の流れを示すフローチャートである。
【図１１】図１０のステップＳ１００２におけるファームウェアのアップデート処理の検証処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面を参照して詳細に説明する。
【００１２】
［第１の実施形態］
図１は、本発明の第１の実施形態に係る画像形成装置の概略構成を示すブロック図である。
【００１３】
図１において、制御部２００は、画像形成装置１００全体の動作を制御するための構成として以下に示すものを含む。
【００１４】
ＣＰＵ２１０は、ＦｌａｓｈＲＯＭ２１１に記憶されたプログラム（ファームウェア）をＲＡＭ２１２に読み出して読取制御や印刷制御、ファームウェアのアップデート制御などの各種制御処理を実行する。ＦｌａｓｈＲＯＭ２１１には、ファームウェアのアップデート用のファイル格納領域、ワークエリア、ユーザデータ領域としても用いられるメモリである。なお、ＵＳＢメモリにアップデート用のファームウェアを格納し、ダウンロードしてＦｌａｓｈＲＯＭ２１１のファイル格納領域に置くケースもある。
【００１５】
ＲＡＭ２１２は、ＣＰＵ２１０の主メモリ、ワークエリア等の一時記憶領域として用いられるメモリである。ハードディスクドライブ（ＨＤＤ）２１３は、画像データやユーザデータ等を記憶するメモリである。また、ＨＤＤ２１３は、ネットワークＩ／Ｆ２１８を介してＰＣ２２６から受信した印刷データをも記憶する。なお、ＨＤＤ２１３がＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）であってもよい。また、制御部２００が複数のＣＰＵを有する構成であってもよい。
【００１６】
操作部Ｉ／Ｆ２１４は、操作部２１９と制御部２００とを接続するインターフェース（Ｉ／Ｆ）である。操作部２１９には、不図示のタッチパネル機能を有する液晶表示部やキーボードなどが備えられている。
【００１７】
プリンタＩ／Ｆ２１５は、プリンタエンジン２２０と制御部２００とを接続するＩ／Ｆである。プリンタエンジン２２０は、プリンタＩ／Ｆ２１５を介してＨＤＤ２１３から転送された画像データに基づいて、用紙等の記録媒体にプリントを行う。
【００１８】
スキャナＩ／Ｆ２１６は、スキャナエンジン２２１と制御部２００とを接続するＩ／Ｆである。スキャナエンジン２２１は、原稿上の画像を読み取って画像データを生成し、スキャナＩ／Ｆ２１６を介してＨＤＤ２１３に転送する。
【００１９】
ＵＳＢ−ＨｏｓｔＩ／Ｆ２１７は、制御部２００と、ＵＳＢ−ＦＡＸエンジン２２３及び／又は外部ＵＳＢデバイス２２４とを接続するＩ／Ｆである。ＵＳＢ−ＦＡＸエンジン２２３は、スキャナエンジン２２１により読み取った画像データを、ＦＡＸ回線１１５を介してＦＡＸ送信する機能を持つ。外部ＵＳＢデバイス２２４は、例えばＵＳＢメモリやＵＳＢキーボードなどが挙げられる。
【００２０】
ネットワークＩ／Ｆ２１８は、ＬＡＮ１１０に接続するためのネットワークインターフェースである。ネットワークＩ／Ｆ２１８は、ＬＡＮ１１０上の外部装置（例えば、外部サーバ２２５やＰＣ２２６）に画像データや情報を送信したり、逆にアップデート用ファームウェアや各種情報を受信したりする。なお、外部サーバ２２５は、インターネット上に存在してもよい。
【００２１】
次に、制御部２００のＣＰＵ２１０により実行されるプログラムの構成について図２を用いて説明する。
【００２２】
図２は、制御部２００のＣＰＵ２１０により実行されるプログラムの概略構成を示す図である。なお、図２に示すプログラムは、ＦｌａｓｈＲＯＭ２１１に記憶され、制御部２００のＣＰＵ２１０により実行されることにより各種機能モジュールとして動作する。
【００２３】
ＦｌａｓｈＲＯＭ２１１は、２つのパーティションに分かれており、例えばｓｔｄパーティション３００とｓａｆｅパーティション３１０に分かれている。
【００２４】
ｓｔｄパーティション３００は、２つの起動モードに利用される。１つは通常起動モード３０１であり、コピージョブやプリントジョブなどを実行するモードである。もう１つはｓａｆｅアップデートモード３０２であり、ｓａｆｅパーティション３１０をアップデートするモードである。
【００２５】
一方、ｓａｆｅパーティション３１０は、ｓｔｄパーティション３００をアップデートするための起動モードであるアップデートモード３１１で利用される。
【００２６】
ｓｔｄパーティション３００は、ｓｔｄプログラム領域３０６と、ｓｔｄデータ領域３０３に分かれている。ｓｔｄプログラム領域３０６には、通常起動モード時（通常時）に動作するｓｔｄファーム３０４と、ｓａｆｅアップデートモード時に動作するｓｔｄファーム３０５が格納されている。
【００２７】
ｓａｆｅアップデートモード時に動作するｓｔｄファーム３０５は、ｓａｆｅファームアップデート処理プログラム３０９を含む。ここで、図示していないが、ｓｔｄファーム３０４，３０５は、ｓａｆｅファームアップデート処理プログラム３０９以外にも複数のプログラムモジュールを含む。
【００２８】
本実施形態では、便宜上、ｓｔｄファーム３０４とｓｔｄファーム３０５を分けて図示しているが、実際は同じファームウェアである。起動モードの違いにより、ｓｔｄファーム３０４，３０５に含まれる複数のプログラムの中で、どのプログラムが起動するかが異なる。簡単な例として、通常起動モード３０１とｓａｆｅアップデートモード３０２とで起動するＯＳ（オペレーティングシステム）は同じだが、通常起動モード３０１では、例えばコピーアプリケーションプログラムなどが起動する。一方、ｓａｆｅアップデートモード３０２では、アップデートプログラムだけが起動する。
【００２９】
ｓａｆｅファームアップデート処理プログラム３０９は、ｓａｆｅパーティション３１０内のｓａｆｅファーム３１４をアップデートする処理を含むプログラムである。
【００３０】
ｓｔｄデータ領域３０３は、ｓｔｄファーム３０４が動作するときに使用するワーク領域やユーザデータ等の置き場所として使用される。また、ｓｔｄデータ領域３０３には、ファーム退避場所３２１が確保されている。ファーム退避場所３２１は、ファームウェアのアップデート時に一時的にアップデート前のファームウェアを退避しておくために利用される。これにより、アップデート中に何らかのエラーが発生した場合は、アップデート前のファームウェアに書き戻すことが可能となる。
【００３１】
ｓａｆｅパーティション３１０は、ｓａｆｅプログラム領域３１６とｓａｆｅデータ領域３１３に分かれている。ｓａｆｅプログラム領域３１６には、アップデートモード３１１時に動作するためのｓａｆｅファーム３１４が格納されている。更に、ｓｔｄファーム３０５は、ｓｔｄファームアップデート処理プログラム３１９を含む。ｓｔｄファームアップデート処理プログラム３１９は、ｓｔｄパーティション３００内のｓｔｄファーム３０４，３０５をアップデートする処理を含む。ｓａｆｅデータ領域３１３には、アップデートファーム配置場所３２０が確保されている。
【００３２】
アップデートファーム配置場所３２０には、図１における外部ＵＳＢデバイス２２４（例えばＵＳＢメモリ）や、外部サーバ２２５、ＰＣ２２６などからダウンロードされたアップデート用ファームウェアが置かれる。
【００３３】
次に、ｓｔｄファームアップデート処理プログラム３１９、ｓａｆｅファームアップデート処理プログラム３０９がそれぞれ実行されたときに実現されるアップデート機能について説明する。
【００３４】
図３（ａ）は、ｓｔｄファームアップデート処理プログラム３１９が実行されたときに実現されるアップデート機能の一例を示すブロック図である。図４（ａ）〜図４（ｅ）は、アップデート処理時に操作部２１９に表示される画面の一例を示す図である。
【００３５】
アップデート処理を実行する場合、まずベースのファームウェアのバージョンを確認する必要があるため、図４（ａ）に示すようにバージョン情報が表示される。図示では、ｓｔｄファーム３０４，３０５のバージョンが３．００と表示されている。本実施形態では、バージョン３．００を４．００にアップデートするケースを考える。ここで、アップデート後には、操作部２１９の表示が図４（ｂ）のようになることを期待する。
【００３６】
まず、アップデートモード３１１において、ｓｔｄファームアップデート処理プログラム３１９が実行されることにより、ｓｔｄファーム３０４，３０５がアップデートされる処理について説明する。
【００３７】
図３（ａ）において、ｓｔｄファームアップデート処理プログラム３１９は、アップデートファームチェック部３３１、ｓｔｄファーム退避処理部３３２、ｓｔｄファームアップデート処理検証部３３６、ｓｔｄファームアップデート部３３３という機能を備える。
【００３８】
アップデートファームチェック部３３１は、アップデートファーム配置場所３２０にダウンロードされたアップデート用ファームウェアのデータに破損がないかどうかの確認を実施する。例えば、チェックサムの確認やアップデート用ファームウェアの存在確認などを行う。これにより、アップデート用ファームウェアのダウンロード時のデータ欠損等を発見することができる。このとき、操作部２１９には図４（ｃ）のような表示がなされる。
【００３９】
ｓｔｄファーム退避処理部３３２は、ｓｔｄファーム３０４，３０５をｓｔｄパーティション３００のファーム退避場所３２１に退避させる。このとき、ｓｔｄパーティション３００は、起動したアップデートモード３１１から見える場所にある状態である（ファイルシステムとしてマウントした状態である）。
【００４０】
ファーム退避場所３２１には、ｓｔｄパーティション３００のｓｔｄデータ領域３０３が使用されている。このｓｔｄデータ領域３０３は、通常起動モード３０１でコピーやプリントなどの処理を行うために利用される。その際、ｓｔｄデータ領域３０３は、ＲＡＭ２１２と同様にワーク領域等に使われるが、アップデートモード３１１起動時には使用しない領域で、ＦｌａｓｈＲＯＭ２１１の領域を効率的に使うため、別領域を確保するようなことはせず、使いまわしが実施される。
【００４１】
ｓｔｄファーム退避処理部３３２による動作が終わると、ｓｔｄファームアップデート処理検証部３３６は、ｓｔｄファームアップデート部３３３が正しく動作するかを検証する。
【００４２】
ｓｔｄファームアップデート処理検証部３３６による検証結果からｓｔｄファームアップデート部３３３が正しく動作することが判明する。すると、ｓｔｄファームアップデート部３３３は、ｓｔｄパーティション３００のｓｔｄファーム３０４，３０５のアップデートを実施する。
【００４３】
ｓｔｄファームアップデート部３３３は、まずアップデートファーム配置場所３２０に置かれたアップデート用ファームウェアが正当のファームウェアであるか否かの署名検証を実施する。署名検証の結果から正当性が確認された場合には、当該アップデート用ファームウェアによりアップデートを実行する。このとき、操作部２１９は、図４（ｄ）のような進捗表示を行い、最終的に成功すると、図４（ｅ）のような表示となる。
【００４４】
以上により、アップデートモード３１１におけるｓｔｄファーム３０４，３０５のアップデート処理は完了する。
【００４５】
次に、ｓａｆｅアップデートモード３０２において、ｓａｆｅファームアップデート処理プログラム３０９が実行されることにより、ｓａｆｅファーム３１４がアップデートされる処理について説明する。
【００４６】
図３（ｂ）は、ｓａｆｅファームアップデート処理プログラム３０９が実行されたときに実現されるアップデート機能の一例を示すブロック図である。
【００４７】
図３（ｂ）において、ｓａｆｅファームアップデート処理プログラム３０９は、ｓａｆｅファーム退避処理部３３４、ｓａｆｅファームアップデート処理検証部３３７、及びｓａｆｅファームアップデート部３３５という機能を備える。
【００４８】
ｓａｆｅファーム退避処理部３３４は、上述したｓｔｄファーム退避処理部３３２と同様に、ｓａｆｅファーム３１４をファーム退避場所３２１に退避させる。
【００４９】
ｓａｆｅファーム退避処理部３３４による動作が終わると、ｓａｆｅファームアップデート処理検証部３３７は、ｓａｆｅファームアップデート部３３５が正しく動作するかを検証する。
【００５０】
ｓａｆｅファームアップデート処理検証部３３７による検証結果からｓａｆｅファームアップデート部３３５が正しく動作することが判明すると、ｓａｆｅファームアップデート部３３５は、ｓａｆｅファーム３１４のアップデートを実施する。ｓａｆｅファームアップデート部３３５は、アップデート用ファームウェアが正当のファームウェアであるか否かの署名検証を実施し、正当性が確認された場合には、当該アップデート用ファームウェアによりアップデートを実行する。アップデートが成功した場合は、図４（ｂ）に示す画面が操作部２１９に表示され、ｓｔｄファーム３０４，３０５がバージョン４．００になっていることを確認することができる。
【００５１】
次に、上述した図３（ａ）に示すｓｔｄファームアップデート部３３３及び図３（ｂ）に示すｓａｆｅファームアップデート部３３５によるアップデート用ファームウェアの署名検証処理について図５を用いて詳細に説明する。
【００５２】
図５は、ファームアップデート部によるアップデート用ファームウェアの署名検証処理の流れを示すフローチャートである。なお、本処理は、制御部２００のＦｌａｓｈＲＯＭ２１１に記憶されたｓｔｄファームアップデート処理プログラム３１９もしくはｓａｆｅファームアップデート処理プログラム３０９がＣＰＵ２１０により実行されることによって実現される。また、処理の主体は、ｓｔｄファームアップデート部３３３及びｓａｆｅファームアップデート部３３５によるアップデート処理が共通であるため、ここではファームアップデート処理部として説明する。
【００５３】
ファームアップデート処理部では、ダウンロードしたアップデート用ファームウェアのデータが正当な発行元から発行され、途中経路で不正な手段で書き換えられていないことを保証するため、初めにアップデートファーム検証を実施する。
【００５４】
まず、ステップＳ５０１では、ファームアップデート処理部は、アップデートファーム配置場所３２０からアップデート用ファームウェアのデータを読み込む。ここで、アップデート用ファームウェアに付与されているデジタル署名を抽出する。
【００５５】
次に、ステップＳ５０２では、ファームアップデート処理部は、予め画像形成装置１００が保持する公開鍵を用いて、ステップＳ５０１で抽出したデジタル署名の検証を行う。デジタル署名は、例えばＲＳＡ公開鍵暗号方式を使った方式が一般的である。公開鍵方式によるデジタル署名では、署名対象（この場合、ファームウェア）から一方向関数によるダイジェストを生成し、発行元は前記ダイジェストを自身の秘密鍵で暗号化を行い、画像形成装置１００は発行元の公開鍵を使って署名検証を実施する。秘密鍵は正規な発行元だけが保持しており、正しい公開鍵を使った署名検証が成功すれば署名対象が正規なものであることが証明できる。ここでデジタル署名に使用する公開鍵は発行元が保持する公開鍵ペアを利用するものであり、予め発行元から画像形成装置１００に渡されるものである。受け渡し方法に関してはネットワークを使った場合には公開鍵インフラ（ＰＫＩ）を利用した第３者証明、あるいはメモリカードによる物理的配布などが考えられるが、既知の手法を使えばよいため詳細な説明は省略する。
【００５６】
ステップＳ５０３で署名検証が成功したと判断した場合、ファームアップデート処理部は、ファームウェアのアップデートを実行し（ステップＳ５０４）、ステップＳ５０５へ進む。一方、ステップＳ５０３で署名検証が失敗したと判断した場合、ステップＳ５０７に進む。
【００５７】
ステップＳ５０５では、ファームアップデート処理部は、ファームウェアのアップデートが成功したか否かを判定し、成功したと判定した場合にはステップＳ５０６へ進み、ファームウェアのアップデートは成功したとして本処理を終了する。一方、ステップＳ５０５でファームウェアのアップデートが正常に終了しなかったと判断した場合は、ステップＳ５０７へ進み、ファームウェアのアップデートは失敗したとして本処理を終了する。なお、上記ステップＳ５０２におけるアップデート用ファームウェアの署名検証処理は、デジタル署名を利用したものに限ったものではなく、ファームウェアの正当性が確認できるその他の方法（例えば、ハッシュ値比較のみ）でもよい。
【００５８】
図５のステップＳ５０２における署名検証処理が改ざんや故障により正しく動作しない場合、誤ってステップＳ５０３でアップデート用ファームウェアの検証が成功したと判断され、不正なファームウェアが画像形成装置１００にインストールされる恐れがある。そこで、不正なファームウェアによるアップデートが誤って実施されないように、アップデート前に署名検証処理（ステップＳ５０２）の正当性を確認する方法について説明する。なお、ｓｔｄファームアップデート処理プログラム３１９とｓａｆｅファームアップデート処理プログラム３０９に含まれる署名検証処理（ステップＳ５０２）は共通の処理であり、両者とも同じプログラムを有しているものとする。
【００５９】
図６Ａ及び図６Ｂは、第１の実施形態における署名検証処理の正当性を検証する処理の流れを示すフローチャートである。本処理は、制御部２００のＦｌａｓｈＲＯＭ２１１に記憶され、ＣＰＵ２１０により実行される。
【００６０】
まず、ステップＳ６０１では、ＣＰＵ２１０は、ｓａｆｅパーティション３１０のｓａｆｅファーム３１４をＲＡＭ２１２に読み込み、アップデートモード３１１で起動する。
【００６１】
次に、ステップＳ６０２では、ＣＰＵ２１０は、アップデートファーム配置場所３２０にダウンロードしたアップデート用ファームウェアのデータに対して、アップデートファームチェック部３３１によるチェックを実施する。アップデートファームチェック部３３１が実施するチェックの内容は上述のとおりである。
【００６２】
次に、ステップＳ６０３に進み、ＣＰＵ２１０は、ｓｔｄファーム退避処理部３３２によりｓｔｄファーム３０４，３０５を、ファーム退避場所３２１に退避させる。
【００６３】
次に、ステップＳ６０４では、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６により、ｓｔｄファームアップデート部３３３が正しく動作するか否かの検証を実施する。ここで、ステップＳ６０４におけるｓｔｄファームアップデート処理検証部３３６による動作処理について図７を用いて詳細に説明する。
【００６４】
図７は、図６ＡのステップＳ６０４におけるｓｔｄファームアップデート処理検証部３３６による処理の詳細を示すフローチャートである。
【００６５】
図７において、ステップＳ７０１では、ＣＰＵ２１０は、ｓｔｄファームアップデート部３３３により、実施する署名検証（ステップＳ５０２）での暗号処理が正しく動作するかを確認するために、既知の入力を用いて暗号処理を実施する。本実施形態では、図５で説明したように、署名検証としてＲＳＡの暗号処理を利用するため、ＲＳＡによる暗号・復号処理を実行する。
【００６６】
次に、ステップＳ７０２では、ＣＰＵ２１０は、ステップＳ７０１での処理結果と既知解とを比較する。暗号処理のロジックが正しければ、特定の入力からは特定の値が出力されるため、処理結果が既知解と等しければ暗号処理のロジックは正常であると判断できる。ここで、既知解はｓｔｄファームアップデート処理プログラム３１９に含まれているものとするが、ｓａｆｅデータ領域３１３に入力値と共に事前に配置しておく方法でもよい。
【００６７】
ステップＳ７０３で値が一致すると判断した場合、ステップＳ７０４へ進み、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６により、ｓｔｄファームアップデート部３３３内の署名検証処理にかかるプログラムデータを読み込む。
【００６８】
次に、ステップＳ７０５では、ＣＰＵ２１０は、ステップＳ７０４で読みこんだプログラムデータからハッシュ値を算出する。
【００６９】
次に、ステップＳ７０６では、ＣＰＵ２１０は、予めｓｔｄデータ領域３０３に保持されているハッシュ値とステップＳ７０５で算出したハッシュ値との比較を行う。このハッシュ値の比較により、ｓｔｄファームアップデート部３３３の署名検証処理プログラムデータの完全性が確認できる。なお、本実施形態では、ハッシュ値の比較による完全性の検証を実施したが、デジタル署名を利用した方法でもよい。
【００７０】
ステップＳ７０７でハッシュ値が一致すると判断した場合は、ＣＰＵ２１０は、ｓｔｄファームアップデート部３３３の署名検証処理（図５のステップＳ５０２）が成功したと判断し（ステップＳ７０８）、検証成功としてリターンする。一方、ステップＳ７０７でハッシュ値が一致しないと判断した場合は、ＣＰＵ２１０は、ｓｔｄファームアップデート部３３３内の署名検証処理が失敗であると判断し（ステップＳ７０９）、検証失敗としてリターンする。
【００７１】
以上がｓｔｄファームアップデート処理検証部３３６による検証処理である。なお、ｓａｆｅファームアップデート処理検証部３３７も同様の方法で検証を実施する。
【００７２】
図６Ａに戻り、ステップＳ６０５でｓｔｄファームアップデート処理検証部３３６による検証成功と判断した場合は、ファームウェアのアップデート処理を継続するため、ステップＳ６０６に進む。一方、ステップＳ６０５で検証失敗と判断した場合は、ステップＳ６０８に進む。検証に失敗したファームアップデート部を用いてアップデートを実施すると不正なファームウェアが画像形成装置１００にインストールされる可能性がある。そのため、ステップＳ６０８では、ＣＰＵ２１０は、ｓｔｄファームアップデート処理プログラム３１９の更新を行う。すなわち、ステップＳ６０８では、ＣＰＵ２１０は、ｓｔｄパーティション３００にあるｓａｆｅファームアップデート処理プログラム３０９のｓａｆｅファームアップデート部３３５に含まれる署名検証処理のプログラムデータを取得する。そして、ｓｔｄファームアップデート処理プログラム３１９のｓｔｄファームアップデート部３３３のプログラムデータを、取得したプログラムデータに置き換える。
【００７３】
次に、ステップＳ６０９では、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６により、更新されたｓｔｄファームアップデート部３３３に対して再び検証処理を実施する。この処理の内容はステップＳ６０４と同様である（図７参照）。
【００７４】
ステップＳ６１０でｓｔｄファームアップデート処理検証部３３６による検証成功と判断した場合は、ファームウェアのアップデート処理を継続するため、ステップＳ６０６に進む。一方、ステップＳ６１０で検証失敗と判断した場合は、ステップＳ６１１に進み、ファームウェアのアップデート処理を中止する。そして、ステップＳ６１２では、ＣＰＵ２１０は、ステップＳ６０３で退避させておいたｓｔｄファーム３０４，３０５を書き戻す。そして、ステップＳ６１３に進む。
【００７５】
ステップＳ６０６では、ＣＰＵ２１０は、ｓｔｄファームアップデート部３３３により、ｓｔｄファーム３０４，３０５のアップデート処理を行う。ステップＳ６０６におけるアップデート処理は図５で説明した通りである。
【００７６】
次に、ステップＳ６０７では、ＣＰＵ２１０は、ｓｔｄファームアップデート部３３３によるｓｔｄファーム３０４，３０５のアップデートが成功したかの判断を行う。成功したと判断した場合は、ステップＳ６１３に進む。一方、ステップＳ６０７でアップデートに失敗したと判断した場合は、ステップＳ６１１に進み、ｓｔｄファーム３０４，３０５のアップデートを中止する。
【００７７】
図６Ｂにおいて、ステップＳ６１３では、ＣＰＵ２１０は、画像形成装置１００を再起動させる。次に、ステップＳ６１４では、ＣＰＵ２１０は、ｓａｆｅファーム３１４のアップデートを実施するため、ｓｔｄパーティション３００のｓｔｄファーム３０５をＲＡＭ２１２に読み込み、ｓａｆｅアップデートモード３０２で起動する。
【００７８】
ステップＳ６１５では、ＣＰＵ２１０は、ｓａｆｅファーム退避処理部３３４により、ｓａｆｅファーム３１４をファーム退避場所３２１に退避させる。
【００７９】
次に、ステップＳ６１６では、ＣＰＵ２１０は、ｓａｆｅファームアップデート処理検証部３３７により、ｓａｆｅファームアップデート部３３５が正しく動作するか否かの検証を実施する。検証の方法はステップＳ６０４と同様であるため説明を省略するが、ここではｓａｆｅファームアップデート部３３５内の署名検証処理（ステップＳ５０２）に対して検証を実施する。
【００８０】
ステップＳ６１７では、ＣＰＵ２１０は、ｓａｆｅファームアップデート処理検証部３３７による検証が成功したかの判断を行う。ステップＳ６１７で検証成功と判断した場合は、ステップＳ６１８に進む一方、検証失敗と判断した場合は、ステップＳ６２２に進む。
【００８１】
ステップＳ６２２では、ステップＳ６０８とは逆に、ＣＰＵ２１０は、ｓａｆｅパーティション３１０にあるｓｔｄファームアップデート処理プログラム３１９のｓｔｄファームアップデート部３３３に含まれる署名検証処理のプログラムデータを取得する。そして、ｓａｆｅファームアップデート部３３５のプログラムデータを取得したデータに置き換える。
【００８２】
次に、ステップＳ６２３では、ＣＰＵ２１０は、ｓａｆｅファームアップデート処理検証部３３７により、更新されたｓａｆｅファームアップデート部３３５に対して再び検証処理を実施する（図７参照）。
【００８３】
ステップＳ６２４でｓａｆｅファームアップデート処理検証部３３７による検証成功と判断した場合は、ファームウェアのアップデート処理を継続するため、ステップＳ６１８に進む。一方、ステップＳ６２４で検証失敗と判断した場合は、ステップＳ６２５に進み、ファームウェアのアップデートを中止する。
【００８４】
ステップＳ６１８では、ＣＰＵ２１０は、ｓａｆｅファームアップデート部３３５により、ｓａｆｅファーム３１４のアップデート処理を行う。ステップＳ６１８におけるアップデート処理は、ステップＳ６０６と同様に、図５で説明した通りである。
【００８５】
次に、ステップＳ６１９では、ＣＰＵ２１０は、ｓａｆｅファームアップデート部３３５によるｓａｆｅファーム３１４のアップデートが成功したかの判断を行う。成功と判断した場合は、ステップＳ６２０に進む。
【００８６】
ステップＳ６２０では、ＣＰＵ２１０は、画像形成装置１００の再起動を実施し、ステップＳ６２１に進み、ｓｔｄパーティション３００のｓｔｄファーム３０４をＲＡＭ２１２に読み込み、通常起動モード３０１で起動して、本処理を終了する。
【００８７】
一方、ステップＳ６１９で失敗したと判断した場合はステップＳ６２５に進み、ＣＰＵ２１０は、ｓａｆｅファーム３１４のアップデートを中止する。そして、ステップＳ６２６では、ＣＰＵ２１０は、ステップＳ６１５で退避させておいたｓａｆｅファーム３１４を書き戻し、ステップＳ６２０以降のステップを実施して、本処理を終了する。
【００８８】
上記実施形態によれば、ｓｔｄファーム３０４，３０５またはｓａｆｅファーム３１４のファームウェアのアップデートを実施する前に、それぞれをアップデートするファームアップデート部のプログラムを検証する。これにより、不正なファームウェアが画像形成装置に混入（インストール等）することを防止し、複数のモードで起動する機器に対するファームウェア更新機能に対する信頼性を向上することが可能となる。
【００８９】
［第２の実施形態］
次に、本発明の第２の実施形態として、ファームアップデート部の検証処理が失敗した場合に、もう一方のパーティションのアップデート処理を先に実施して、ファームアップデート部を更新する方法について図８Ａ及び図８Ｂを用いて説明する。
【００９０】
本発明の第２の実施の形態に係る画像形成装置１００は、その構成（図１）が上記第１の実施の形態と同じであり、第１の実施の形態と同様の部分については、同一の符号を用いてその説明を省略する。以下に、上記第１の実施の形態と異なる点のみを説明する。
【００９１】
図８Ａ及び図８Ｂは、本発明の第２の実施形態における署名認証処理の正当性を検証する処理の流れを示すフローチャートである。本処理は、制御部２００のＦｌａｓｈＲＯＭ２１１に記憶され、ＣＰＵ２１０により実行される。なお、図６Ａ及び図６Ｂと同様のステップについては同一の符号を付して、それらの説明を省略する。
【００９２】
図８Ａにおいて、ステップＳ６０５でｓｔｄファームアップデート処理検証部３３６による検証失敗と判断した場合は、ステップＳ６８１に進む。
【００９３】
ステップＳ６８１では、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６により、検証失敗フラグがＯＮか否かを判断する。検証失敗フラグがＯＮでないと判断した場合、ステップＳ６８２に進み、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６により、検証失敗フラグをＯＮにして、ステップＳ６１２へ進む。検証失敗フラグは、ＦｌａｓｈＲＯＭ２１１等の不揮発メモリに記録される。本実施の形態では、ｓｔｄデータ領域３０３に特定のファイルを生成することで検証失敗フラグが立っているか否かを判断するが、方法はそれに限らない。
【００９４】
一方、ステップＳ６８１において、検証失敗フラグがＯＮであると判断した場合は、既に一度検証が失敗しているとしてアップデート処理を実施せず、図８ＢのステップＳ６２１へ進む。
【００９５】
図８Ｂにおいて、ステップＳ６２０で画像形成装置１００が再起動した後、ステップＳ６８３に進み、ＣＰＵ２１０は、検証失敗フラグがＯＮか否かの判断を行う。検証失敗フラグがＯＮであると判断した場合は、図８ＡのステップＳ６０１にもどり、ＣＰＵ２１０は、ｓａｆｅパーティション３１０のｓａｆｅファーム３１４をＲＡＭ２１２に読み込み、再度アップデートモード３１１で起動する。そして、ｓｔｄファームのアップデート処理を再度実施する。つまり、ステップＳ６０５でｓｔｄファームアップデート部３３３の検証が失敗したと判断しても、ステップＳ６１４〜ステップＳ６２０の処理でｓａｆｅファーム３１４がアップデートされる。そのため、アップデートされたｓａｆｅファーム３１４に含まれるｓｔｄファームアップデート部３３３を用いることで、ｓｔｄファーム３０４，３０５のアップデートが可能となる。
【００９６】
上記実施形態によれば、ｓｔｄパーティション３００及びｓａｆｅパーティション３１０のいずれか一方のファームアップデート部が不正な状態となった場合でも、もう一方のファームアップデート部を用いてアップデートを実施する。これにより、複数のモードで起動する機器に対するファームウェア更新機能を正常に保つことが可能となる。
【００９７】
［第３の実施形態］
次に、本発明の第３の実施形態として、画像形成装置１００の管理者が任意のタイミングでファームウェアのアップデート処理の正当性を検証する方法について図９を用いて説明する。
【００９８】
本発明の第３の実施の形態に係る画像形成装置１００は、その構成（図１）が上記第１の実施の形態と同じであり、第１の実施の形態と同様の部分については、同一の符号を用いてその説明を省略する。以下に、上記第１の実施の形態と異なる点のみを説明する。
【００９９】
図９は、本発明の第３の実施形態におけるファームウェアのアップデート処理の検証処理の流れを示すフローチャートである。なお、本処理は、制御部２００のＦｌａｓｈＲＯＭ２１１に記憶され、ＣＰＵ２１０により実行される。
【０１００】
図９において、ステップＳ９０１では、ＣＰＵ２１０は、ｓｔｄパーティション３００のｓｔｄファーム３０４をＲＡＭ２１２に読み込み、通常起動モード３０１で起動する。
【０１０１】
次に、ステップＳ９０２では、ＣＰＵ２１０は検証指示を受付ける。検証指示は、操作部２１９に表示された不図示のメニュー画面から管理者が「アップデート処理の検証」を選択した結果として受信される。なお、操作部２１９から指示を受け付けた場合について説明するが、外部の装置等からネットワークＩ／Ｆ２１８を介して指示を受信する場合でも構わない。
【０１０２】
次に、ステップＳ９０３では、ＣＰＵ２１０は、ｓｔｄパーティション３００のｓａｆｅファームアップデート処理検証部３３７による検証を実施する。検証方法は図７を用いて説明したとおりである。検証の結果、ステップＳ９０４において検証失敗と判断した場合は、ステップＳ９１１に進む。一方、ステップＳ９０４で検証成功と判断した場合、ｓａｆｅパーティション３１０にあるｓｔｄファームアップデート部３３３の検証を実施するため、ステップＳ９０５に進む。
【０１０３】
ステップＳ９０５では、ＣＰＵ２１０は、利用していないｓａｆｅパーティション３１０をマウントし、ｓｔｄファームアップデート処理プログラム３１９をＲＡＭ２１２に読み込む。
【０１０４】
次に、ステップＳ９０６では、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６による検証を実施する。検証方法は図７を用いて説明した通りである。検証の結果、ステップＳ９０７において検証失敗と判断した場合は、ステップＳ９１１に進む。一方、ステップＳ９０７で検証成功と判断した場合、ステップＳ９０８に進み、ＣＰＵ２１０は、ステップＳ９０３の検証結果とステップＳ９０６の検証結果とを比較する。
【０１０５】
次に、ＣＰＵ２１０は、ステップＳ９０９で検証結果が一致しないと判断した場合は、ステップＳ９１１に進む。一方、ステップＳ９０９で検証結果が一致すると判断した場合はステップＳ９１０へ進み、ＣＰＵ２１０は、検証結果として、ファームアップデート部が正当である旨を操作部２１９に表示する。
【０１０６】
ステップＳ９１１では、ＣＰＵ２１０は、検証結果として、ファームアップデート部が正当でない旨を操作部２１９に表示する。なお、ステップＳ９０２での検証指示をネットワークＩ／Ｆ２１８を介して外部の装置から受信した場合には、ＣＰＵ２１０は、その返答をネットワークＩ／Ｆ２１８を介して外部の装置に通知する。
【０１０７】
上記実施形態によれば、ファームウェアの更新機能が正しく動作するかを管理者が任意のタイミングで確認することが可能となる。
【０１０８】
［第４の実施形態］
上記第１から上記第３の実施形態では、ファームアップデート部の検証処理を図７に示す通り、画像形成装置１００内で実施していた。この方法では、ファームアップデート処理検証部自体が全て置き換えられた場合に、正しく検証結果を出力することができない。そこで、本発明の第４の実施形態として、ＰＣ２２６や外部サーバ２２５からファームウェアをダウンロードする際に通知される値を用いてファームアップデート部の検証処理を実施する方法について図１０を用いて説明する。
【０１０９】
本発明の第４の実施の形態に係る画像形成装置１００は、その構成（図１）が上記第１の実施の形態と同じであり、第１の実施の形態と同様の部分については、同一の符号を用いてその説明を省略する。以下に、上記第１の実施の形態と異なる点のみを説明する。
【０１１０】
図１０は、外部サーバ２２５からＬＡＮ１１０、ネットワークＩ／Ｆ２１８を介して、アップデート用のファームウェアをダウンロードする際の処理の流れを示すフローチャートである。本処理は、画像形成装置１００が外部サーバ２２５と通信を行い、ファームウェアをダウンロードした後、ｓａｆｅパーティション３１０にあるアップデートファーム配置場所３２０にファームウェアを格納するまでの処理である。また、本処理は、制御部２００のＦｌａｓｈＲＯＭ２１１に記憶され、ＣＰＵ２１０により実行される。
【０１１１】
まず、ステップＳ１００１では、ＣＰＵ２１０は、ネットワークＩ／Ｆ２１８を介して外部サーバ２２５と通信を行い、ファームアップデート部の検証用のデータを受信する。
【０１１２】
次に、ステップＳ１００２では、ＣＰＵ２１０は、受信した検証用データを用いて、ｓａｆｅファームアップデート処理検証部３３７により、ｓａｆｅファームアップデート部３３５が正しく動作するか否かの検証を実施する。ここで、ステップＳ１００２で実施される検証処理の詳細について図１１を用いて説明する。
【０１１３】
図１１は、図１０のステップＳ１００２におけるファームウェアのアップデート処理の検証処理の流れを示すフローチャートである。
【０１１４】
図１１において、ステップＳ１１０１では、ＣＰＵ２１０は、ｓａｆｅファームアップデート処理検証部３３７により、ｓａｆｅファームアップデート部３３５内の署名検証処理にかかるプログラムデータを読み込む。
【０１１５】
次に、ステップＳ１１０２では、ＣＰＵ２１０は、ｓａｆｅファームアップデート処理検証部３３７により、読み込んだプログラムデータのハッシュ値を算出する。
【０１１６】
次に、ステップＳ１１０３では、ＣＰＵ２１０は、外部サーバ２２５から受信した検証用データとステップＳ１１０２で算出したハッシュ値を使って、署名検証で利用する暗号処理を実施し、ステップＳ１１０４に進み、その出力値を取得してリターンする。
【０１１７】
図１０に戻り、ステップＳ１００３では、ステップＳ１００２と同様に、ＣＰＵ２１０は、ｓｔｄファームアップデート処理検証部３３６により、ｓｔｄファームアップデート部３３３が正しく動作するか否かの検証を実施する。
【０１１８】
次に、ステップＳ１００４では、ＣＰＵ２１０は、外部サーバ２２５にステップＳ１００２及びステップＳ１００３で実施した検証処理の結果を送信する。
【０１１９】
外部サーバ２２５では、画像形成装置１００から受信した検証処理の結果に基づいて、検証処理の結果が正しいか否かの確認を実施し、その結果を画像形成装置１００に通知する。
【０１２０】
ＣＰＵ２１０は、外部サーバ２２５から返信された検証処理の結果が正しい（成功）と判断した場合（ステップＳ１００５でＹＥＳ）、外部サーバ２２５からアップデート用ファームウェアをダウンロードし、アップデートファーム配置場所３２０に格納する。そして、ＣＰＵ２１０は、ダウンロードしたアップデート用ファームウェアを用いてアップデート処理を実施する（ステップＳ１００７）。
【０１２１】
一方、ＣＰＵ２１０は、外部サーバ２２５から検証エラーを通知されたときは（ステップＳ１００８）、検証処理の結果が正しくないと判断して、ファームウェアのダウンロード処理を中止（ステップＳ１００９）して本処理を終了する。
【０１２２】
なお、本実施形態では、プログラムデータのハッシュ値と検証用データを用いて検証する方法について説明したが、署名検証処理の正当性を確認できるその他の方法でもよい。また、正当性の確認はアップデートファームダウンロード時に限らず、任意のタイミングで実施してもよい。
【０１２３】
上記実施形態によれば、外部サーバ２２５から受信した検証用データを用いてファームアップデート部の検証を実施することで、検証結果のなりすましを防止でき、より信頼性の高い検証を実施することが可能となる。
【０１２４】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１２５】
２１１  ＦｌａｓｈＲＯＭ
２２０  プリンタエンジン
２２１  スキャナエンジン
２２３  ＵＳＢ−ＦＡＸエンジン
３００  ｓｔｄパーティション
３０１  通常起動モード
３０２  ｓａｆｅアップデートモード
３１０  ｓａｆｅパーティション
３１１  アップデートモード
３３６  ｓｔｄファームアップデート処理検証部
３３７  ｓａｆｅファームアップデート処理検証部
【図１】
2015097022.tif 000003
【図２】
2015097022.tif 000004
【図３】
2015097022.tif 000005
【図４】
2015097022.tif 000006
【図５】
2015097022.tif 000007
【図６Ａ】
2015097022.tif 000008
【図６Ｂ】
2015097022.tif 000009
【図７】
2015097022.tif 000010
【図８Ａ】
2015097022.tif 000011
【図８Ｂ】
2015097022.tif 000012
【図９】
2015097022.tif 000013
【図１０】
2015097022.tif 000014
【図１１】
2015097022.tif 000015