(57)【要約】      （修正有）【課題】プログラムの検証後に、該プログラムを記憶している記憶領域が不正な状態かを検証する。【解決手段】情報処理装置は、プログラムを記憶する記憶領域を有する記憶手段と、プログラムを読み出して読み出されたプログラムの正しさを検証する第１の検証手段と、検証によって正しいと判定されたプログラムを実行する実行手段と、検証によって正しくないと判定されたプログラムが記憶されている記憶領域が正常な状態であるかを検証する第２の検証手段と、を有する。【選択図】図３
2020095470.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶する記憶領域を有する記憶手段と、
前記プログラムを読み出して当該読み出されたプログラムの正しさを検証する第１の検証手段と、
前記検証によって正しいと判定されたプログラムを実行する実行手段と、
前記検証によって正しくないと判定された前記プログラムが記憶されている前記記憶領域が正常な状態であるかを検証する第２の検証手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記第２の検証手段は、データを前記記憶領域に書き込んで、当該データが書き込まれた前記記憶領域からデータを読み出し、当該読み出されたデータに基づいて、前記記憶領域が正常な状態であるかを検証することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２の検証手段は、前記読み出されたデータから該データのハッシュ値を計算する手段と、前記データに対応する正しいハッシュ値を取得する手段と、前記計算されたハッシュ値と前記取得されたハッシュ値とを比較して両ハッシュ値が一致していれば前記記憶領域が正常な状態であると判定する手段と、を有することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記書き込まれるデータは前記プログラムのバックアップであることを特徴とする請求項２または３に記載の情報処理装置。
【請求項５】
前記書き込まれるデータは、前記記憶領域とは異なる、前記記憶手段の記憶領域に記憶されていることを特徴とする請求項２乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記第２の検証手段は、前記書き込まれたデータと前記読み出されたデータとを比較して、両データが一致していれば前記記憶領域が正常な状態であると判定する手段を有することを特徴とする請求項２に記載の情報処理装置。
【請求項７】
前記第１の検証手段、前記実行手段、前記第２の検証手段は、１つの制御部で実装されることを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項８】
前記第１の検証手段および前記第２の検証手段は、１つの制御部で実装され、前記実行手段は、別の制御部で実装されることを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項９】
前記第２の検証手段による検証の結果に対応する通知を行う通知手段をさらに有することを特徴とする請求項１乃至８の何れか１項に記載の情報処理装置。
【請求項１０】
前記第２の検証手段は、前記情報処理装置をリブートさせる手段を有し、前記検証の少なくとも一部を当該リブートの後に実行することを特徴とする請求項１乃至９の何れか１項に記載の情報処理装置。
【請求項１１】
前記第１の検証手段は、前記読み出されたプログラムから該プログラムのハッシュ値を計算する手段と、前記プログラムに対応する正しいハッシュ値を取得する手段と、前記計算されたハッシュ値と前記取得されたハッシュ値とを比較して両ハッシュ値が一致していれば前記読み出されたプログラムが正しいと判定する手段と、を有することを特徴とする請求項１乃至１０の何れか１項に記載の情報処理装置。
【請求項１２】
プログラムを記憶する記憶領域を有する記憶手段を有する情報処理装置の制御方法であって、
前記プログラムを読み出して当該読み出されたプログラムの正しさを検証する第１の検証工程と、
前記検証によって正しいと判定されたプログラムを実行する実行工程と、
前記検証によって正しくないと判定された前記プログラムが記憶されている前記記憶領域が正常な状態であるかを検証する第２の検証工程と、
を有することを特徴とする情報処理装置の制御方法。
【請求項１３】
前記第２の検証工程は、データを前記記憶領域に書き込んで、当該データが書き込まれた前記記憶領域からデータを読み出し、当該読み出されたデータに基づいて、前記記憶領域が正常な状態であるかを検証することを特徴とする請求項１２に記載の情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを検証する情報処理装置及びその制御方法に関する。
【背景技術】
【０００２】
プログラムを検証してからそのプログラムを実行することが行われている。このようにプログラムを検証することで、改竄されたプログラムや破損したプログラムを実行してしまうことを防ぐことができる。
【０００３】
特許文献１は、メインＣＰＵとサブＣＰＵを有する次の装置を開示する。装置の電源がＯＮされると、サブＣＰＵが、メインＣＰＵで実行するデバイス初期化用のプログラムをＲＯＭからロードしてそのハッシュ値を計算し、ハッシュ値を計算したプログラムの認証を行ってからメインＣＰＵのリセットを解除する。リセットが解除されたメインＣＰＵは動作を開始し、認証が完了しているデバイス初期化用のプログラムを起動してデバイスの初期化処理や診断処理を実行する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−２１９５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プログラムを格納するメモリ自体が破損することがある。この破損によって、メモリから正しくないデータが読み出されることがある。装置の起動時に、このような破損があるメモリに格納されているプログラムを検証すると、プログラムが正当なものでないと判断されることがある。そこで、プログラムを検証する前にメモリが破損しているかを検査する構成を採ると、メモリに破損がない場合でも装置の起動時にメモリの破損検査が行われてしまい、装置の起動完了までの時間がかかってしまう。
【課題を解決するための手段】
【０００６】
本発明の情報処理装置は、プログラムを記憶する記憶領域を有する記憶手段と、前記プログラムを読み出して当該読み出されたプログラムの正しさを検証する第１の検証手段と、前記検証によって正しいと判定されたプログラムを実行する実行手段と、前記検証によって正しくないと判定された前記プログラムが記憶されている前記記憶領域が正常な状態であるかを検証する第２の検証手段と、を有することを特徴とする。
【発明の効果】
【０００７】
プログラムの検証結果に基づいて、該プログラムを記憶している記憶手段の記憶領域が不正な状態であるかを検証することができる。
【図面の簡単な説明】
【０００８】
【図１】複合機のハードウェア構成を示すブロック図
【図２】複合機のソフトウェア構成を示すブロック図
【図３】実施形態１の起動時の署名検証動作を示すフローチャート
【図４】実施形態２の起動時の署名検証動作を示すフローチャート
【図５】実施形態３の起動時の署名検証動作を示すフローチャート
【発明を実施するための形態】
【０００９】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。尚、実施形態に係る情報処理装置として複合機（デジタル複合機／ＭＦＰ／Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を例に説明する。しかしながら適用範囲は複合機に限定はせず、情報処理装置であればよい。
【００１０】
（実施形態１）
図１は実施形態１に係る複合機１０のハードウェア構成を説明するブロック図である。
【００１１】
コントローラ２０は複合機１０の制御を行うためのモジュールで構成される。本実施形態では半導体チップとして構成されているものとして説明する。
【００１２】
ＲＯＭ１０２は、マスクＲＯＭで構成されたリードオンリーメモリで、ＣＰＵ１０３で実行されるローダー２００を格納している。
【００１３】
ＮＯＲフラッシュメモリ１４５は、ＣＰＵ１０３で実行されるブートプログラム２０２とそのバックアッププログラム２０３、およびそれぞれに対応する署名データ２０６、２０７を格納する。ＮＡＮＤフラッシュメモリ１４６は、ＣＰＵ１０１で実行されるメインプログラム２０８とそのバックアッププログラム２１１、およびそれぞれに対応する署名データ２１２、２１３を格納する。各フラッシュメモリは、ＮＯＲフラッシュメモリ制御部１３５、ＮＡＮＤフラッシュメモリ制御部１３６を介して、ＣＰＵ１０１、ＣＰＵ１０３からアクセスすることができる。
【００１４】
ＣＰＵ１０３は、ＮＯＲフラッシュメモリ１４５、およびＮＡＮＤフラッシュメモリ１４６に格納された各プログラムの署名検証や各制御部の初期化、およびＣＰＵ１０１のリセット解除を行う制御部である。プログラムの署名検証とは、プログラムの正当性（正しさ）を検証する方法である。具体的には、検証対象のプログラムに対応づけられた暗号化済ハッシュ値を、後述の検証鍵で復号することで正しいハッシュ値を取得する工程、検証対象のプログラムのハッシュ値を計算する工程、これら両ハッシュ値を比較する工程を含む。両ハッシュ値の比較の結果、一致していればプログラムは正当である（改ざんされていない）と判定され、不一致であればプログラムは正当でない（改ざんされている）と判定される。なお本明細書において説明する署名検証は、プログラムの正当性を検証する方法の一例である。
【００１５】
ＣＰＵ１０１は、改ざんされていないと判定されたメインプログラム２０８あるいはメインプログラムのバックアップ２１１を実行し、複合機１０の装置全体の制御を行う別の制御部である。
【００１６】
ＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍｍａｂｌｅ）  ＲＯＭ（以下、ＯＴＰと呼ぶ）１０９は、製造時に一度だけ書き込みが可能なＲＯＭで、ブートプログラムおよびメインプログラムの署名検証のための検証鍵が保持される。
【００１７】
ＲＡＭ１０４は、ＳＲＡＭで構成されたランダムアクセスメモリで、プログラムや一時的なデータの格納などに使用される。
【００１８】
スキャナＩ／Ｆ制御部１０５は、スキャナ１１１による原稿の読み取り制御する。プリンタＩ／Ｆ制御部１０７は、プリンタ１１２による印刷処理などを制御する。
【００１９】
画像処理部１０６はスキャナ１１１から読み取った原稿データに対するシェーディング処理や、プリンタ１１２へ出力するためのハーフトーン処理を行う。
【００２０】
ＤＲＡＭ１４４は、ＣＰＵ１０１で実行されるプログラムや画像処理部１０６のワークメモリとして使用される。
【００２１】
メモリ制御部１３４は、ＤＲＡＭ１４４へアクセスするための各種コマンド制御を行う。
【００２２】
ＵＩ部１１０は、不図示のＬＣＤタッチパネルのユーザインターフェースで、ユーザからの操作受け付け、および画面表示を行う。ＵＩ制御部１０８は、ＬＣＤへの表示タイミング生成およびタッチパネルからの入力コマンドの受け付けを行う。
【００２３】
ネットワークＩ／Ｆ１３７は、ネットワーク１４７を介して不図示のパーソナルコンピュータに対して、印刷コマンドの受け付けやスキャンデータの送信等を行う。外部ポート制御部１３８は、汎用の入出力ポートであり、たとえば出力ポートを制御することによりＬＥＤ１４８を必要に応じて点灯し、ソフトウェアやハードウェアの異常を外部に伝える。
【００２４】
システムバス１００は、接続されているモジュールを相互に接続する。システムバス１００を介して、ＣＰＵ１０１やＣＰＵ１０３と各モジュール間で各種データや制御コマンド等を送受信する。
【００２５】
図２は、実施形態１に係る複合機１０が有するソフトウェアモジュールを説明するブロック図である。
【００２６】
ローダー２００は、複合機１０の電源を入れるとＣＰＵ１０３で実行されるプログラムであって、ＲＯＭ１０２に格納される。ローダー２００は、プログラムロード部２０１を有し、検証鍵、およびブートプログラム署名データ２０６を用いてブートプログラム２０２を署名検証したのちに、ブートプログラム２０２の実行を開始する。プログラムロード部２０１の処理の詳細については図３で説明する。
【００２７】
ブートプログラム２０２は、ローダー２００による署名検証後にＣＰＵ１０３で実行されるプログラムで、ＮＯＲフラッシュメモリ１４５に格納される。ブートプログラム署名データ２０６は、ブートプログラム２０２のハッシュ値を署名鍵で暗号化したものであり、ブートプログラム２０６のデジタル署名データである。署名データ生成、検証アルゴリズムとして、ＲＳＡ、ＤＳＡ、もしくはＥＣＤＳＡが使用される。
【００２８】
システム初期化部２０４は、メモリ制御部１３４等の各種初期化を行う。プログラムロード部２０５は、検証鍵、およびメインプログラム署名データ２１２を用いてメインプログラム２０８の署名検証を行う。署名検証の方法は上述の通りである。署名検証が成功すると、システム初期化部２０４は、メインプログラム２０８をＤＲＡＭ１４４へ展開したのちに、ＣＰＵ１０１のリセットを解除する。ＣＰＵ１０１は、リセットが解除されるとＤＲＡＭ１４４に展開されたメインプログラム２０８の実行を開始する。なお、ブートプログラム２０２におけるプログラムロード部２０５の署名検証処理自体は、ローダー２００におけるプログラムロード部２０１の署名検証処理と同等の内容である。
【００２９】
メインプログラム２０８は、ＣＰＵ１０１で実行されるプログラムで、ＮＡＮＤフラッシュメモリ１４６に格納される。カーネル２０９は複合機１０の制御システムの核となるプログラムで、アプリケーション２１０に提供する各種リソース制御やスケジューリング等を行う。アプリケーション２１０は、複合機１０が提供する各種機能（コピー、ＳＥＮＤ、プリント等）を実現するためのプログラムである。アプリケーション２１０には、スキャナ制御部１０５、プリンタ制御部１０７、画像処理部１０６の制御や、ＵＩ部１１０に表示する画面の生成、および複合機１０の総合的な状態制御などが含まれる。
【００３０】
バックアッププログラム２０３、２１１は、ブートプログラム２０２、メインプログラム２０８それぞれのバックアップであり、ブートプログラム２０２、メインプログラム２０８と同一の内容である。ブートプログラム２０２、メインプログラム２０８の改ざん等が発生した場合（署名検証によってプログラムが正当でないと判定された場合）は、これらのバックアッププログラムを用いて復旧が行われる。バックアッププログラム２０３、２１１は対応する署名データ２０７、２１３をそれぞれ持つ。
【００３１】
図３は、実施形態１に係るプログラムロード部が行う処理のフローチャートである。なお、ローダー２００におけるプログラムロード部２０１と、ブートプログラム２０２におけるプログラムロード部２０５の処理は、ロードする対象がブートプログラムであるかメインプログラムであるかの違いのみである。よって本実施形態ではローダー２００におけるプログラムロード部２０１について説明する。
【００３２】
本フローは複合機１０の電源が投入されてコントローラ２０のリセットが解除されると開始される。
【００３３】
Ｓ３０１では、プログラムロード部２０１は、ＮＯＲフラッシュメモリ１４５に格納されているブートプログラム２０２を署名検証する。すなわちブートプログラム２０２の正当性が検証される。署名検証では前述のとおり、ＯＴＰ１０９に格納された検証鍵でブートプログラム署名データ２０６を復号して得られた正しいハッシュ値と、ブートプログラム２０２のハッシュ値計算で得られたハッシュ値との比較が行われる。ハッシュ値が一致すればブートプログラム２０２が正当であると判定され、そうでなければブートプログラム２０２が正当でないと判定される。ハッシュ値が一致することを署名検証が成功するといい、ハッシュ値が不一致であることを署名検証が失敗するという。
【００３４】
Ｓ３０２では、プログラムロード部２０１は、Ｓ３０１で行われた署名検証が成功したかどうかを判断する。
【００３５】
署名検証が成功すると、Ｓ３０３でブートプログラム２０２を起動して本フローを終了する。すなわちＣＰＵ１０３は、署名検証によって正当であると判定されたブートプログラム２０２を実行する。ここでのＣＰＵ１０３は、ＮＯＲフラッシュメモリ１４５から読み出したブートプログラム２０２の正当性の検証の結果に基づいて、ブートプログラム２０２をＮＯＲフラッシュメモリ１４５から読み出して実行する手段として機能している。
【００３６】
署名検証が失敗すると、Ｓ３０４の処理が行われる。Ｓ３０４では、プログラムロード部２０１は、ＮＯＲフラッシュメモリ１４５に格納されているバックアッププログラム２０３を、ＮＯＲフラッシュメモリ１４５上のブートプログラム２０２が格納されているメモリ領域（記憶領域）に上書きする。また、同時に署名データについても、バックアッププログラム署名データ２０７をブートプログラム署名データ２０６のメモリ領域に上書きする。ここでもしメモリ領域が破損していなければ、バックアッププログラム２０３およびバックアッププログラム署名データ２０７を用いた署名検証が成功するはずである。
【００３７】
Ｓ３０５では、プログラムロード部２０１は、Ｓ３０４で上書き更新されたブートプログラム（すなわちバックアッププログラム２０３）を署名検証する。すなわちメモリ領域に上書きされたバックアッププログラム２０３の正当性が検証される。
【００３８】
Ｓ３０６では、プログラムロード部２０１は、Ｓ３０５で行われた署名検証が成功したかどうかを判断する。この署名検証が成功したと判定された場合（Ｓ３０６でＹ）、Ｓ３０１で行われた署名検証の失敗の要因が一時的なデータ破損（改ざん）であり、Ｓ３０４において復旧されたと判断する。なぜならブートプログラム２０２だけでなくバックアッププログラム２０３も改ざんされることは確率的に非常に低いためである。ブートプログラム２０２の署名検証に失敗し、かつ、バックアッププログラム２０３の署名検証に成功することは、ブートプログラム２０２が改ざんされていたことを意味する。
【００３９】
Ｓ３０７では、プログラムロード部２０１は、第１の処理（改ざん後処理）として、ブートプログラム２０２の改ざんを検知したこと、および復旧されたことを示す表示をＵＩ部１１０に表示する。この表示は、ＵＩ部１１０に限らず、たとえばＬＥＤ１４８を特定のパターンで点灯あるいは点滅させる等でもよい。あるいは、表示は一切行わず、改ざん検知回数を内部的にカウントして保持させることで、複合機１０の管理者が別途管理用アプリケーションを通じて検知回数を把握するような構成としてもよい。
【００４０】
Ｓ３０５で行われた署名検証が失敗したと判定された場合（Ｓ３０６でＮ）は、Ｓ３０１で行われた署名検証失敗の要因が一時的なデータ破損（改ざん）ではなく、恒常的なデータ破損（メモリエラー）であり、Ｓ３０４で復旧されなかったと判断する。ここでいうメモリエラーとは、ＮＯＲフラッシュメモリ１４５における部分的な故障によって引き起こされ得るものであり、メモリ領域が不正な状態であることを指す。メモリエラーでは、この故障部分以外の部分に対するメモリアクセスは正常に行え得る。すなわちブートプログラム２０２が格納されているメモリ領域に対するメモリアクセスは正常に行えないが、それ以外のメモリ領域に対するメモリアクセスは正常に行え得る。またメモリエラーでは、ＮＯＲフラッシュメモリ１４５におけるこの故障部分に対するメモリアクセス自体は行えるが、この故障部分にアクセスして読み出せるデータ（値）は、以前書き込んだデータと異なり得る。
【００４１】
Ｓ３０８では、プログラムロード部２０１は、第２の処理（メモリエラー後処理）として、複合機１０において上記メモリエラーが発生していることを示す表示をＵＩ部１１０に表示する。あるいは、ＬＥＤ１４８を、Ｓ３０７の点灯パターンあるいは点滅パターンとは異なる特定のパターンで点灯させることで、メモリエラーを複合機１０外部に通知してもよい。
【００４２】
Ｓ３０７で改ざん後処理を行った後は、プログラムロード部２０１は、Ｓ３０４のコピー処理で復旧（復元）されたブートプログラムをＳ３０３において起動させて本フローを終了する。Ｓ３０８でメモリエラー後処理を行った後は、プログラムロード部２０１は、ブートプログラムを起動することなく本フローを終了する。
【００４３】
なお、Ｓ３０８においてメモリエラー後処理を行った後に、ブートプログラムを起動することなく終了しているが次のようにしてもよい。すなわち、バックアッププログラム２０３をブートプログラム２０２のメモリ領域に上書きすることなく署名検証し、その署名検証が成功した場合はバックアッププログラム２０３をそのまま起動させてもよい。すなわち、メモリエラーがＮＯＲフラッシュメモリ１４５におけるブートプログラム２０２のメモリ領域のみに発生しており、バックアッププログラム２０３のメモリ領域からは正常に、バックアッププログラムを読み出すことができる場合がある。この場合、ブートプログラムのメモリ領域からではなく、バックアッププログラムのメモリ領域から、バックアッププログラム２０３の先頭アドレスよりブートプログラムを起動する構成をとることも可能である。
【００４４】
このようにプログラムロード部２０１（ＣＰＵ１０３）は、ＣＰＵ１０３が実行するブートプログラム２０２の署名検証を行う。すなわち、ブートプログラム２０２の検証手段および実行手段は同一のＣＰＵ１０３によって実装される。
【００４５】
一方、プログラムロード部２０１（ＣＰＵ１０１）が、ＣＰＵ１０１が実行するメインプログラム２０８（ＣＰＵ１０１のブートプログラム）の署名検証を行う（Ｓ３０１、Ｓ３０２）場合、次のようになる。すなわち、署名検証が成功すれば、ＣＰＵ１０３は、ＣＰＵ１０１のリセットを解除することで、ＣＰＵ１０１を、メインプログラム２０８をＮＡＮＤフラッシュメモリ１４６から読み出して実行可能な状態にする（Ｓ３０２でＹ、Ｓ３０３）。署名検証が失敗すれば、ＣＰＵ１０３は、メインプログラムのバックアップ２１１をＮＡＮＤフラッシュメモリ１４６から読み出し、メインプログラム２０８のメモリ領域に上書きして署名検証を行う。そしてこの署名検証の結果に基づいて、ＮＡＮＤフラッシュメモリ１４６のメインプログラム２０８のメモリ領域が不正な状態であるか検証（判定）する。（Ｓ３０２でＮ、Ｓ３０４〜Ｓ３０６）。この検証の結果に対応した処理（Ｓ３０７、Ｓ３０８）をＣＰＵ１０３は行う。このようにメインプログラム２０８の検証手段はＣＰＵ１０３によって実装され、メインプログラム２０８の実行手段はＣＰＵ１０１によって実装される。
【００４６】
このように本実施形態では、Ｓ３０４からＳ３０６において、ブートプログラム２０２の署名検証失敗の原因が一時的（改ざん）か、恒常的（メモリエラー）かを切り分けることで、ユーザに対して部品の点検、交換といった対処を促すことが可能となる。またＳ３０１における署名検証の結果に基づいて、Ｓ３０５において、ＮＯＲフラッシュメモリ１４５中のブートプログラム２０２を記憶しているメモリ領域が不正な状態であるかを検証できるので、効率的にメモリ領域が不正な状態であるかを検証可能である。
【００４７】
以上、説明したように実施形態１によれば、プログラムの署名検証が失敗した場合に、バックアップブログラム２０３を、ブートプログラム２０２のメモリ領域に上書きしてその上書きされたプログラムの署名検証を実施する。これにより、署名検証失敗の要因を一時的なものか恒常的なものかを切り分けることが可能となり、恒常的な要因発生時の信頼性、利便性の低下を、未然に抑制するための対処をユーザに対して促すことが可能となる。
【００４８】
（実施形態２）
実施形態１では、バックアップブログラム２０３を、ブートプログラム２０２のメモリ領域に上書きして、署名検証を再実行することで、ブートプログラム２０２の署名検証の失敗要因を切り分けた。実施形態１はブートプログラム２０２が二重化されており、ブートプログラム２０２の破損時には、ローダー２００によって自動的に復旧処理まで行うことが可能な構成を前提としている。一方で、実施形態２では、ブートプログラム２０２が二重化されておらず、復旧するためにはネットワーク１３７や、不図示の復旧用ＩＦを介して復旧させる場合の、署名検証の失敗要因を切り分ける方法を示す。
【００４９】
図４は、実施形態２に係るプログラムロード部２０１が行う処理のフローチャートである。
【００５０】
本フローは複合機１０の電源が投入されてコントローラ２０のリセットが解除されると開始される。Ｓ４０１からＳ４０３の署名検証処理については実施形態１のＳ３０１からＳ３０３と同様である。
【００５１】
Ｓ４０２で署名検証が失敗すると、Ｓ４０４では、プログラムロード部２０１は、メモリテスト用のデータ列を生成する。ここでプログラムロード部２０１は、生成したデータ列をＲＡＭ１０４に格納しておく。なお、データ列としては、あらかじめ決められたデータパターンであってもよく、特定の値を基準にした疑似乱数であってもよい。
【００５２】
Ｓ４０５では、プログラムロード部２０１は、Ｓ４０４で生成したデータ列を、ＮＯＲフラッシュメモリ１４５上のブートプログラム２０２のメモリ領域に対して書き込みを行う。
【００５３】
Ｓ４０６では、プログラムロード部２０１は、Ｓ４０５で書き込みを行ったデータ列を読み出す。
【００５４】
Ｓ４０７では、プログラムロード部２０１は、Ｓ４０６で読みだされたデータ列が、Ｓ４０５で書き込まれたデータ列と一致しているかどうかを判断する。すなわち両データを比較して両データが一致しているかどうかが判定される。この判断においてプログラムロード部２０１は、Ｓ４０４でＲＡＭ１０４に格納しておいたデータ列と、Ｓ４０６で読み出したデータ列とを比較する。この比較の結果、２つのデータ列が一致していると判断された場合には、プログラムロード部２０１は、Ｓ４０１における署名検証の失敗要因が、一時的（改ざん）であると判断する。２つのデータ列が一致していないと判断された場合には、プログラムロード部２０１は、Ｓ４０１における署名検証の失敗要因が、恒常的（メモリエラー）であると判断する。
【００５５】
要因が一時的と判断された場合、Ｓ４０８では、プログラムロード部２０１は、複合機１０においてブートプログラムの改ざんが発生していること、および所定の復旧手段を用いて普及を促す表示をＵＩ部１１０に表示する。あるいは、同様の内容を、ＬＥＤ１４８を特定のパターンで点灯あるいは点滅させることで複合機１０外部に通知してもよい。一方、要因を恒常的と判断した場合、Ｓ４０９では、プログラムロード部２０１は、複合機１０においてメモリエラーが発生していること、および部品の交換を促す表示をＵＩ部１１０に表示する。あるいは、同様の内容を、ＬＥＤ１４８を別の特定のパターンで点灯あるいは点滅させることで複合機１０外部に通知してもよい。
【００５６】
以上説明したように、実施形態２によれば、署名検証の失敗時に、特定のデータ列をブートプログラム２０２のメモリ領域へ書き込み、読み出してメモリ検査を実施することで、署名検証失敗の要因を一時的なものか恒常的なものかを切り分けることが可能となる。これにより、ブートプログラム２０２が二重化されていない場合であっても、署名検証の失敗要因が一時的なものか恒常的なものかを切り分けることで、不要な復旧処理をユーザに課すことなく、部品の交換といった正しい対処を促すことが可能となる。
【００５７】
（実施形態３）
実施形態１では、ローダー２００において、署名検証を再実行することで、ブートプログラム２０２の署名検証の失敗要因を切り分けた。すなわち、実施形態１では、ローダー２００において、２回の署名検証を行っている。実施形態３では、２回目の署名検証を行う前に、再起動を挟む形態について説明する。
【００５８】
図５は、実施形態３に係るプログラムロード部２０１が行う処理のフローチャートである。
【００５９】
本フローは複合機１０の電源が投入されてコントローラ２０のリセットが解除されると開始される。Ｓ５０１、Ｓ５０２の署名検証処理については実施形態１のＳ３０１、Ｓ３０２と同様である。
【００６０】
Ｓ５０２で署名検証が成功すると、プログラムロード部２０１は、Ｓ５０３において、ＮＯＲフラッシュメモリ１４５上に格納された復旧フラグをクリアした後、Ｓ５０４でブートプログラムを起動して、本制御フローを終了する。この復旧フラグは、バックアッププログラム２０３によるブートプログラム２０２の復旧が試みられたか否かを示す情報である。前回の起動時にブートプログラム２０２の復旧が試みられていると、この復旧フラグがセットされ、そうでない場合にはクリアされている。
【００６１】
Ｓ５０２において署名検証が失敗した場合、プログラムロード部２０１は、Ｓ５０５では、復旧フラグがセットされているかを判断する。復旧フラグがセットされている場合、前回の起動時に復旧が試みられたにも関わらず、署名検証が失敗していることから、プログラムロード部２０１は、今回の署名検証の失敗要因を恒常的（メモリエラー）と判断し、Ｓ５０９に処理を進める。Ｓ５０９では、プログラムロード部２０１は、複合機１０においてメモリエラーが発生していること、および部品の交換を促す表示をＵＩ部１１０に表示する。あるいは、同様の内容を、ＬＥＤ１４８を別の特定のパターンで点灯あるいは点滅させることで複合機１０外部に通知してもよい。
【００６２】
Ｓ５０２で復旧フラグがセットされていない場合は、Ｓ５０６においてプログラムロード部２０１は、バックアッププログラム２０３をブートプログラム２０２のメモリ領域へ上書きして復旧を試みる。Ｓ５０７では復旧フラグをＮＯＲフラッシュメモリ１４５上にセットして、Ｓ５０８でＣＰＵのリセットをアサートして再起動を行う。再起動とは複合機１０を一旦シャットダウンしてから起動を行う、いわゆるリブートのことである。再起動後は再度Ｓ５０１へと戻る。すなわち、リブート前にデータ（ブートプログラム２０２のバックアップ２０３）をブートプログラム２０２のメモリ領域に書き込んでおき、このメモリ領域に書き込まれたデータをリブート後に検証する。このようにデータの検証の少なくとも一部は、リブート後に行われる。
【００６３】
以上説明したように、実施形態３によれば、バックアッププログラム２０３による、ブートプログラム２０２の復旧時に、復旧を示す復旧フラグをＮＯＲフラッシュメモリ１４５にセットする。これにより、再起動後に復旧フラグを確認して、署名検証エラーの要因が恒常的なものかどうかを切り分けることが可能となる。なお、本実施形態では、Ｓ５０３で復旧フラグをクリアする前に、復旧済みであるかどうかを確認しない。別の実施形態として、Ｓ５０３で復旧フラグをクリアする前に、復旧フラグの有無を確認することで、現在の状態が正常起動であるか、一時的なエラー（改ざん）後に復旧したのかを切り分けることも可能である。何れの形態であっても、署名検証失敗の要因が恒常的なものか否かを切り分けることで、恒常的な要因発生時の信頼性、利便性の低下を、未然に抑制するための対処をユーザに対して促すことが可能となる。
【００６４】
（他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
2020095470.tif 000003
【図２】
2020095470.tif 000004
【図３】
2020095470.tif 000005
【図４】
2020095470.tif 000006
【図５】
2020095470.tif 000007