(57)【要約】【課題】情報処理装置の起動時に、サブＣＰＵによるブートプログラムの検証の完了前に、メインＣＰＵがブートプログラムを実行することを防止する技術を提供する。【解決手段】メインＣＰＵ１０１は、ＭＦＰ１の起動時に、ＯＴＰ領域に格納されているプログラムを実行することにより、フラッシュＲＯＭ１１２に格納されているブートコードの検証結果を示す信号の受信を待つ状態に移行する。サブＣＰＵ１１５は、ＭＦＰ１の起動時に、フラッシュＲＯＭ１１２に格納されているブートコードの正当性を検証し、当該検証の結果を示す検証終了信号１１６をメインＣＰＵ１０１へ送信する。メインＣＰＵ１０１は、サブＣＰＵ１１５から検証終了信号１１６を受信すると、フラッシュＲＯＭ１１２に格納されているブートコードを実行する。【選択図】図１
2020047064.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
ブートプログラムが格納された不揮発性の記憶手段と、
書き換えが不可能なメモリ領域を有し、前記情報処理装置の起動時に、前記メモリ領域に格納されているプログラムを実行することにより、前記記憶手段に格納されている前記ブートプログラムの検証結果を示す信号の受信を待つ状態に移行する第１制御手段と、
前記記憶手段に格納されている前記ブートプログラムの正当性を検証し、当該検証の結果を示す前記信号を前記第１制御手段へ送信する第２制御手段と、を備え、
前記第１制御手段は、前記第２制御手段から前記信号を受信すると、前記記憶手段に格納されている前記ブートプログラムを実行する
ことを特徴とする情報処理装置。
【請求項２】
前記第２制御手段は、前記検証の結果、前記記憶手段に格納されている前記ブートプログラムが正当であれば、特定パターンを有する信号を前記信号として前記第１制御手段へ送信し、
前記第１制御手段は、前記特定パターンを有する信号を前記第２制御手段から受信すると、前記記憶手段に格納されている前記ブートプログラムを実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２制御手段は、前記検証の結果、前記記憶手段に格納されている前記ブートプログラムが正当でなければ、前記特定パターンを有する信号を前記第１制御手段へ送信せずに、前記ブートプログラムの改ざんを報知する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第１制御手段は、前記特定パターンを有する信号を前記第２制御手段から受信すると、受信確認信号を前記第２制御手段へ送信し、当該受信確認信号に応じて前記第２制御手段から送信される前記特定パターンを有する信号を受信すると、前記記憶手段から前記ブートプログラムを読み出して実行する
ことを特徴とする請求項２又は３に記載の情報処理装置。
【請求項５】
前記メモリ領域には、前記情報処理装置が電源オフ状態から起動した後に前記第１制御手段によって最初に実行されるプログラムが予め書き込まれている格納されている
ことを特徴とする請求項１から４のいずれか１項に記載の情報処理装置。
【請求項６】
前記情報処理装置が電源オフ状態から起動すると、前記第１制御手段及び前記第２制御手段のリセット状態を解除する解除手段を更に備え、
前記第１制御手段は、前記解除手段によって前記リセット状態が解除されると、前記メモリ領域に格納されている前記プログラムの実行を開始する
ことを特徴とする請求項１から５のいずれか１項に記載の情報処理装置。
【請求項７】
前記第２制御手段は、前記解除手段によって前記リセット状態が解除されると、前記記憶手段に格納されている前記ブートプログラムの前記検証を開始する
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記第２制御手段は、前記ブートプログラムから得られた暗号情報が予め格納された、書き換えが不可能なメモリ領域を有し、
前記第２制御手段は、前記メモリ領域に格納されている前記暗号情報を復号して得られたハッシュ値と、前記記憶手段から読み出した前記ブートプログラムのハッシュ値とを比較することにより、前記ブートプログラムの正当性を検証する
ことを特徴とする請求項１から７のいずれか１項に記載の情報処理装置。
【請求項９】
前記第２制御手段は、前記ブートプログラムの前記検証が終了し、前記第１制御手段へ前記信号を送信した後に、省電力状態へ移行する
ことを特徴とする請求項１から８のいずれか１項に記載の情報処理装置。
【請求項１０】
ブートプログラムが格納された不揮発性の記憶手段と、書き換えが不可能なメモリ領域を有する第１制御手段と、第２制御手段と、を備える情報処理装置の制御方法であって、
前記第１制御手段が、前記情報処理装置の起動時に、前記メモリ領域に格納されているプログラムを実行することにより、前記記憶手段に格納されている前記ブートプログラムの検証結果を示す信号の受信を待つ状態に移行する工程と、
前記第２制御手段が、前記記憶手段に格納されている前記ブートプログラムの正当性を検証し、当該検証の結果を示す前記信号を前記第１制御手段へ送信する工程と、
前記第１制御手段が、前記第２制御手段から前記信号を受信すると、前記記憶手段に格納されている前記ブートプログラムを実行する工程と、
を含むことを特徴とする情報処理装置の制御方法。
【請求項１１】
請求項１０に記載の情報処理装置の制御方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びその制御方法、並びにプログラムに関するものである。
【背景技術】
【０００２】
近年、複合機（ＭＦＰ）等の情報処理装置では、システムの起動開始の時点で、当該システムに含まれるソフトウェアの改ざんの有無を調べ、改ざんされている可能性のあるソフトウェアを動作させない仕組み（改ざん検知機能）が導入されつつある。例えば、メインＣＰＵが実行するブートコード（ブートプログラム）を、メインＣＰＵの起動前にサブＣＰＵが読み出し、読み出したブートコードの改ざんの有無をサブＣＰＵが検証する。ブートコードの改ざんを検知した場合には、改ざんされたブートコードをメインＣＰＵが実行することを防止するために、メインＣＰＵを起動させないようにすることが望ましい。
【０００３】
メインＣＰＵを起動させないためには、例えば、メインＣＰＵに入力されるリセット信号を制御して、メインＣＰＵをリセット状態に維持する方法がある。また、特許文献１には、メインＣＰＵの起動が一旦完了したら直ちにメインＣＰＵを割込み待ち状態に移行させる方法が記載されている。この方法では、サブＣＰＵが起動して割込み信号をメインＣＰＵへ送信することで、メインＣＰＵが割込み状態から復帰してその後の処理を実行可能になる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１３７７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、サブＣＰＵからメインＣＰＵへ出力するリセット信号の制御によりメインＣＰＵをリセット状態に維持する場合、以下のような要因により、メインＣＰＵのリセット状態が不適切に解除されてしまう可能性がある。例えば、サブＣＰＵにおけるリセット信号の出力用の端子に、基板実装時の半田ブリッジが生じた場合、若しくはゴミが付着した場合、又は、サブＣＰＵ自体が故障した場合、サブＣＰＵからメインＣＰＵへ正しいリセット信号が出力されなくなる。その結果、不正なリセット信号によりメインＣＰＵのリセット状態が解除されると、サブＣＰＵによるブートコードの検証の完了を待たずに、改ざんされたブートコードをメインＣＰＵが実行してしまう可能性がある。
【０００６】
また、悪意のある第三者によって、サブＣＰＵからメイン信号へのリセット信号用の配線が意図的に改造され、正しいブートコードが書き込まれたＲＯＭが、不正なブートコードが書き込まれたＲＯＭにすり替えられる可能性がある。その場合、ブートコードの検証の完了を待たずに、不正なブートコードをメインＣＰＵが実行することで、予期しない処理を画像処理装置が実行してしまう可能性がある。
【０００７】
本発明は、上述の課題に鑑みてなされたものである。本発明は、情報処理装置の起動時に、サブＣＰＵによるブートプログラムの検証の完了前に、メインＣＰＵがブートプログラムを実行することを防止する技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様に係る情報処理装置は、ブートプログラムが格納された不揮発性の記憶手段と、書き換えが不可能なメモリ領域を有し、前記情報処理装置の起動時に、前記メモリ領域に格納されているプログラムを実行することにより、前記記憶手段に格納されている前記ブートプログラムの検証結果を示す信号の受信を待つ状態に移行する第１制御手段と、前記記憶手段に格納されている前記ブートプログラムの正当性を検証し、当該検証の結果を示す前記信号を前記第１制御手段へ送信する第２制御手段と、を備え、前記第１制御手段は、前記第２制御手段から前記信号を受信すると、前記記憶手段に格納されている前記ブートプログラムを実行することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、情報処理装置の起動時に、サブＣＰＵによるブートプログラムの検証の完了前に、メインＣＰＵがブートプログラムを実行することを防止できる。
【図面の簡単な説明】
【００１０】
【図１】ＭＦＰのハードウェア構成例を示すブロック図。
【図２】メインＣＰＵのハードウェア構成例を示すブロック図。
【図３】サブＣＰＵのハードウェア構成例を示すブロック図。
【図４】検証終了信号の信号波形の例を示す図。
【図５】サブＣＰＵによる処理の手順を示すフローチャート。
【図６】メインＣＰＵによる処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を用いて説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものでなく、また実施形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
【００１２】
＜ＭＦＰの構成＞
図１は、本発明の実施形態に係る画像処理装置である複合機（ＭＦＰ）のハードウェア構成例を示すブロック図である。本実施形態は、情報処理装置の一例として、メインＣＰＵ及びサブＣＰＵを備え、画像処理を行う画像処理装置（画像形成装置）であるＭＦＰに本発明を適用した例について説明する。なお、本発明は、メインＣＰＵ及びサブＣＰＵを備える情報処理装置に適用可能であり、例えば、印刷装置、読取装置、複写機、及びファクシミリ装置等にも適用可能である。
【００１３】
本実施形態のＭＦＰ１は、メインＣＰＵ（Central Processing Unit）１０１、ＤＲＡＭ（Dynamic Random Access Memory）１０２、及び操作部Ｉ／Ｆ（インタフェース）１０３を備える。ＭＦＰ１は、更に、ネットワークＩ／Ｆ１０４、プリンタ部１０５、スキャナ部１０６、ＦＡＸ（ファクシミリ）部１０７、ＨＤＤ（Hard Disk Drive）１０８、画像処理部１１１、及び電源制御部１１８を備える。これらのデバイスは、信号バス１０９に接続されており、信号バス１０９を介して相互に通信可能である。ＭＦＰ１は、更に、操作部１０３、フラッシュＲＯＭ（Read Only Memory）１１２、サブＣＰＵ１１５、及びリセット制御部１２１を備える。メインＣＰＵ１０１、フラッシュＲＯＭ１１２、及びサブＣＰＵ１１５は、ＳＰＩ（Serial Peripheral Interface）バス１１４に接続されており、ＳＰＩバス１１４を介して相互に通信可能である。
【００１４】
メインＣＰＵ１０１は、ＭＦＰ１全体を制御する。ＤＲＡＭ１０２は、メインＣＰＵ１０１によって実行されるプログラムを格納するとともに、一時的なデータ用のワークエリアとしても使用される。操作部１０３は、操作部Ｉ／Ｆ１１３を介して信号バス１０９に接続されている。操作部１０３は、ユーザによる操作を受け付けて、当該受け付けた操作を、操作部Ｉ／Ｆ１１３を介してメインＣＰＵ１０１に通知する。
【００１５】
ＨＤＤ１０８は、メインＣＰＵ１０１によって実行されるプログラムを格納するとともに、プリントジョブ又はスキャンジョブ等のジョブのスプール領域としても使用される。また、ＨＤＤ１０８は、スキャン画像等の画像データを保存するために使用される。フラッシュＲＯＭ１１２は、メインＣＰＵ１０１によって実行されるブートコード（ブートプログラム）を含むプログラムを格納するとともに、ＭＦＰ１のデフォルト設定値を格納する、不揮発性のメモリ（記憶装置）である。
【００１６】
ネットワークＩ／Ｆ１０４は、ＬＡＮ１３０に接続されており、ＬＡＮ１３０を介して外部装置との通信を行う。例えば、ネットワークＩ／Ｆ１０４は、外部装置から送信されたプリントジョブを受信する。プリンタ部１０５は、入力された画像データに基づいてシート等の記録媒体に画像を形成（印刷）する。スキャナ部１０６は、原稿の画像を光学的に読み取って電気信号に変換することで、スキャン画像の画像データを生成する。ＦＡＸ（ファクシミリ）部１０７は、公衆回線１１０に接続されており、公衆回線１１０を介して外部装置とのＦＡＸ通信を行う。
【００１７】
画像処理部１１１は、プリンタ部１０５による印刷に用いられる画像データに対して、プリンタ部１０５による印刷に適した画像への変換処理を行う。また、画像処理部１１１は、スキャナ部１０６により生成された、又はＨＤＤ１０８に保存されている画像データに対して、ノイズ除去、色空間変換、回転、及び圧縮等の画像処理を実行する。
【００１８】
サブＣＰＵ１１５は、ＭＦＰ１が起動した際、メインＣＰＵ１０１の起動の完了前にフラッシュＲＯＭ１１２からブートコードを読み出し、読み出したブートコードの正当性（即ち、ブートコードが改ざんされているか否か）を検証する検証処理を行う。この検証処理により、ブートコードの改ざんを検知可能である。サブＣＰＵ１１５は、ブートコードの検証結果を示す検証終了信号１１６を、メインＣＰＵ１０１へ出力する。
【００１９】
サブＣＰＵ１１５によって使用される改ざん検知方法は、例えば以下の方法である。まず、ブートコードのデジタル署名の公開鍵情報（ブートコードのハッシュ値を公開鍵暗号化して得られる暗号情報）を、ＭＦＰ１の製造時にサブＣＰＵ１１５内のＯＴＰ（One Time Program）領域２０４（図２）に格納しておく。更に、サブＣＰＵ１１５が、ＯＴＰ領域２０４に格納されている暗号情報を用いて、フラッシュＲＯＭ１１２から読み出したブートコードの改ざんの有無（ブートコードの正当性）を検証する。なお、公開鍵暗号の方法としては、ＲＳＡ２０４８又はＥＣＤＳＡ等が使用されうる。
【００２０】
電源制御部１１８は、商業用ＡＣ電源から電源供給線１２０を介して電力の供給を受ける。また、電源制御部１１８は、電源線１１９を介して、ＭＦＰ１内の各モジュールへの電力の供給を制御する。
【００２１】
リセット制御部１２１は、メインＣＰＵ１０１及びサブＣＰＵ１１５に出力するリセット信号１１７を用いて、メインＣＰＵ１０１及びサブＣＰＵ１１５の動作状態を、リセット状態とリセット解除状態との間で制御する。リセット信号１１７がＬ（ロー）レベルである場合、メインＣＰＵ１０１及びサブＣＰＵ１１５は、リセット状態となる。リセット信号１１７がＨ（ハイ）レベルである場合、メインＣＰＵ１０１及びサブＣＰＵ１１５は、リセット解除状態となる。
【００２２】
リセット制御部１２１は、供給される電源電圧が所定電圧を超えてから所定時間が経過すると、メインＣＰＵ１０１及びサブＣＰＵ１１５に出力するリセット信号１１７を、ＬレベルからＨレベルに遷移させる。これにより、リセット制御部１２１は、メインＣＰＵ１０１及びサブＣＰＵ１１５のリセット解除を行う。即ち、リセット制御部１２１は、ＭＦＰ１が電源オフ状態から起動すると、リセット信号１１７を用いてメインＣＰＵ１０１及びサブＣＰＵ１１５のリセット状態を解除する。
【００２３】
なお、本実施形態において、メインＣＰＵ１０１は、第１制御手段の一例として機能し、サブＣＰＵ１１５は、第２制御手段の一例として機能する。また、リセット制御部１２１は、第１制御手段及び第２制御手段のリセット状態を解除する解除手段の一例として機能する。
【００２４】
＜メインＣＰＵの構成＞
図２は、メインＣＰＵ１０１のハードウェア構成例を示すブロック図である。メインＣＰＵ１０１は、信号バス２０９に接続されたモジュールとして、ＣＰＵコア２０１、ＳＰＩ Ｉ／Ｆ２０２、ＧＰＩＯ（General-purpose input/output）２０３、ＯＴＰ領域２０４、及びＳＲＡＭ２０５を備える。
【００２５】
ＣＰＵコア２０１は、ＣＰＵの基本機能を担っている。ＳＰＩ Ｉ／Ｆ２０２は、ＳＰＩバス１１４に接続されており、ＳＰＩバス１１４を介して外部のＳＰＩデバイスとの間でデータの読み書きを行う。ＧＰＩＯ２０３は、外部のデバイスと通信可能に接続され、外部のデバイスとの間でデータの送受信を行う。例えば、ＧＰＩＯ２０３は、サブＣＰＵ１１５から送信された検証終了信号１１６を受信する。
【００２６】
ＯＴＰ領域２０４は、プログラムを一度のみ書き込み可能なメモリ領域であり、書き換えが不可能なメモリ領域である。ＯＴＰ領域２０４にプログラムが書き込まれると、当該プログラムを二度と書き換えることはできない。ＯＴＰ領域２０４には、ＭＦＰ１が電源オフ状態から起動した後に最初に実行されるプログラムが予め格納されている。このプログラムは、ＭＦＰ１の製造時にＯＴＰ領域２０４に書き込まれる。ＳＲＡＭ２０５は、メインＣＰＵ１０１内のワークメモリとして使用される。
【００２７】
リセット制御部１２１から出力されたリセット信号１１７は、メインＣＰＵ１０１のリセット端子を介してＣＰＵコア２０１に入力される。リセット信号１１７がＬレベルの場合、メインＣＰＵ１０１はリセット状態となる。リセット信号１１７がＨレベルの場合、メインＣＰＵ１０１はリセット解除状態となる。リセット信号１１７がＬレベルからＨレベルに遷移（即ち、メインＣＰＵ１０１がリセット状態からリセット解除状態に遷移）すると、ＣＰＵコア２０１は、まず、ＯＴＰ領域２０４に格納されているプログラムを読み出して実行する。即ち、ＣＰＵコア２０１は、ＭＦＰ１の起動時に、ＯＴＰ領域２０４に格納されているプログラムを最初に実行する。
【００２８】
＜サブＣＰＵの構成＞
図３は、サブＣＰＵ１１５のハードウェア構成例を示すブロック図である。サブＣＰＵ１１５は、信号バス３０９に接続されたモジュールとして、ＣＰＵコア３０１、ＳＰＩ Ｉ／Ｆ３０２、ＧＰＩＯ３０３、ＯＴＰ領域３０４、ＳＲＡＭ２０５、暗号処理部３０８、及びＲＯＭ３１０を備える。
【００２９】
ＣＰＵコア３０１は、ＣＰＵの基本機能を担っている。ＳＰＩ Ｉ／Ｆ３０２は、ＳＰＩバス１１４に接続されており、ＳＰＩバス１１４を介して外部のＳＰＩデバイスとの間でデータの読み書きを行う。ＧＰＩＯ３０３は、外部のデバイスと通信可能に接続され、外部のデバイスとの間でデータの送受信を行う。例えば、ＧＰＩＯ３０３は、フラッシュＲＯＭ１１２から読み出されたブートコードの検証結果を示す検証終了信号１１６を、メインＣＰＵ１０１へ送信する。
【００３０】
ＯＴＰ領域３０４は、プログラムを一度のみ書き込み可能なメモリ領域であり、書き換えが不可能なメモリ領域である。ＯＴＰ領域３０４にプログラムが書き込まれると、当該プログラムを二度と書き換えることはできない。ＯＴＰ領域３０４には、ブートコードのハッシュ値を公開鍵暗号化して得られる暗号情報が予め格納されている。この暗号情報は、ＭＦＰ１の製造時にＯＴＰ領域３０４に書き込まれる。ＳＲＡＭ３０５は、サブＣＰＵ１１５内のワークメモリとして使用される。
【００３１】
暗号処理部３０８は、ＯＴＰ領域３０４に格納されている暗号情報を復号して、ブートコードのハッシュ値を復元する。ＲＯＭ３１０は、サブＣＰＵ１１５用のブートコードを格納している。
【００３２】
リセット制御部１２１から出力されたリセット信号１１７は、サブＣＰＵ１１５のリセット端子を介してＣＰＵコア３０１に入力される。リセット信号１１７がＬレベルの場合、サブＣＰＵ１１５はリセット状態となる。リセット信号１１７がＨレベルの場合、サブＣＰＵ１１５はリセット解除状態となる。リセット信号１１７がＬレベルからＨレベルに遷移（即ち、サブＣＰＵ１１５がリセット状態からリセット解除状態に遷移）すると、ＣＰＵコア３０１は、まず、ＲＯＭ３１０に格納されている、サブＣＰＵ１１５用のブートコードを読み出して実行する。
【００３３】
次に、ＣＰＵコア３０１は、ＳＰＩ Ｉ／Ｆ３０２を介して、フラッシュＲＯＭ１１２に格納されている、メインＣＰＵ１０１用のブートコードを読み出して、当該ブートコードのハッシュ値を計算する。また、ＣＰＵコア３０１は、ＯＴＰ領域３０４に格納されている暗号情報を、暗号処理部３０８を用いて復号してブートコードのハッシュ値を復元する。ＣＰＵコア３０１は、ＯＴＰ領域３０４に格納されている暗号情報を復号して得られたハッシュ値と、フラッシュＲＯＭ１１２から読み出したブートコードのハッシュ値とを比較することにより、ブートコードの改ざんの有無を検証する。ＣＰＵコア３０１は、その検証結果を、ＧＰＩＯ３０３を介して検証終了信号１１６としてメインＣＰＵ１０１に通知する。
【００３４】
＜検証終了信号＞
図４は、サブＣＰＵ１１５が出力する検証終了信号１１６の信号波形の例を示す図である。信号波形４０１は、ブートコードが正しい（改ざんされていない）との検証結果が得られた場合に出力される信号の波形である。信号波形４０２は、ブートコードが不正である（改ざんされている）との検証結果が得られた場合に出力される信号の波形である。
【００３５】
本実施形態では、サブＣＰＵ１１５は、ブートコードが正しいとの検証結果が得られた場合、ＨレベルとＬレベルとを所定の周期で所定の回数繰り返す信号波形４０１を、検証終了信号１１６として出力する。一方、サブＣＰＵ１１５は、ブートコードが不正であるとの検証結果が得られた場合、一定のレベルで変化しない信号波形４０２を、検証終了信号１１６として出力する。
【００３６】
検証終了信号１１６の周期は、メインＣＰＵ１０１がＧＰＩＯ２０３への信号入力をサンプリング可能な周期（サンプリング周期）に設定される必要がある。サンプリング定理によれば、サブＣＰＵ１１５から出力される検証終了信号１１６の周期は、メインＣＰＵ１０１のサンプリング周期の２倍以上（誤差等を考慮し、実用的には１０倍程度）に設定される必要がある。例えば、メインＣＰＵ１０１のサンプリング周期が１ｍｓの場合、検証終了信号１１６の周期は１０ｍｓに設定される。
【００３７】
このように、サブＣＰＵ１１５は、ブートコードの検証処理の結果、ブートコードが正しいとの検証結果が得られた場合には、特定パターンを有する信号を、検証終了信号１１６としてメインＣＰＵ１０１へ送信（出力）する。これにより、サブＣＰＵ１１５は、メインＣＰＵ１０１に対して、ブートコードが正しいとの検証結果が得られたことを通知する。なお、図４の例では、検証終了信号１１６の信号波形４０１として、ＨレベルとＬレベルとを単純に繰り返すパターンを示しているが、より複雑なパターンが用いられてもよい。信号波形４０１のパターンを複雑にするほど、検証終了信号１１６自体が不正に操作される可能性を低くできる。
【００３８】
＜サブＣＰＵの処理＞
図５は、サブＣＰＵ１１５によって実行される処理の手順を示すフローチャートである。ＭＦＰ１が電源オフ状態から起動して、リセット制御部１２１から出力されるリセット信号１１７に従ってリセット状態が解除されると、サブＣＰＵ１１５は、図５の手順による処理を実行する。
【００３９】
まずＳ５０１で、サブＣＰＵ１１５（ＣＰＵコア３０１）は、ＳＰＩバス１１４を介してフラッシュＲＯＭ１１２から、メインＣＰＵ１０１用のブートコードを読み出す。次にＳ５０２で、サブＣＰＵ１１５は、フラッシュＲＯＭ１１２から読み出したブートコードの検証処理（ブートコードの正当性を検証する処理）を実行する。このように、サブＣＰＵ１１５は、リセット制御部１２１によってリセット状態が解除されると、フラッシュＲＯＭ１１２に格納されているブートコードの検証を開始する。
【００４０】
Ｓ５０３で、サブＣＰＵ１１５は、Ｓ５０２の検証処理の結果に基づいて、ブートコードが正しいか否かを判定する。サブＣＰＵ１１５は、ブートコードが不正である（正当ではない）場合には、処理を終了する。なお、ブートコードが不正である場合に、サブＣＰＵ１１５は、ブートコードの改ざんを報知してもよい。例えば、サブＣＰＵ１１５は、ＭＦＰ１内に配置された基板上のＬＥＤ（図示せず）を点灯させてもよいし、操作部１０３にエラー表示を行わせることにより、ブートコードの改ざんを報知してもよい。一方、サブＣＰＵ１１５は、ブートコードが正しい（正当である）場合には、Ｓ５０４へ処理を進める。
【００４１】
Ｓ５０４で、サブＣＰＵ１１５は、ＧＰＩＯ３０３を介して、（図４に信号波形４０１として例示される）特定パターンを有する検証終了信号１１６を、メインＣＰＵ１０１へ送信する。このように、サブＣＰＵ１１５は、Ｓ５０２の検証処理の結果、フラッシュＲＯＭ１１２に格納されているブートコードが正当であれば、特定パターンを有する検証終了信号１１６をメインＣＰＵ１０１へ送信する。その後、Ｓ５０５で、サブＣＰＵ１１５は、消費電力の低減のために、スリープ状態（省電力状態）へ移行し、処理を終了する。
【００４２】
＜メインＣＰＵの処理＞
図６は、メインＣＰＵ１０１によって実行される処理の手順を示すフローチャートである。ＭＦＰ１が電源オフ状態から起動して、リセット制御部１２１から出力されるリセット信号１１７に従ってリセット状態が解除されると、メインＣＰＵ１０１は、図６の手順による処理を実行する。
【００４３】
まずＳ６０１で、メインＣＰＵ１０１は、ＯＴＰ領域２０４に格納されたプログラムを実行する。このプログラムは、メインＣＰＵ１０１のリセット解除時に、Ｓ６０２の処理を実行するためのプログラムである。このように、メインＣＰＵ１０１は、リセット制御部１２１によってリセット状態が解除されると、ＯＴＰ領域２０４に格納されているプログラムの実行を開始する。
【００４４】
次にＳ６０２で、メインＣＰＵ１０１は、（図４に信号波形４０１として例示される）特定パターンを有する検証終了信号１１６を、サブＣＰＵ１１５から受信したか否かを判定する。この判定により、メインＣＰＵ１０１は、検証終了信号１１６として特定パターンを有する信号をサブＣＰＵ１１５から受信するまで待機する。即ち、メインＣＰＵ１０１は、ＭＦＰ１の起動時に、ＯＴＰ領域２０４に格納されているプログラムを実行することにより、検証終了信号１１６の受信を待つ状態に移行する。メインＣＰＵ１０１は、特定パターンを有する信号を検証終了信号１１６として受信すると、Ｓ６０３へ処理を進める。
【００４５】
Ｓ６０３で、メインＣＰＵ１０１は、正しいことが検証されたブートコードをフラッシュＲＯＭ１１２から読み出す。更にＳ６０４で、メインＣＰＵ１０１は、読み出したブートコードを実行する。このように、メインＣＰＵ１０１は、特定パターンを有する信号をサブＣＰＵ１１５から受信すると、フラッシュＲＯＭ１１２に格納されているブートコードを実行する。その後、メインＣＰＵ１０１は、図６の手順による処理を終了する
【００４６】
以上説明したように、本実施形態では、メインＣＰＵ１０１は、ＭＦＰ１の起動時に、ＯＴＰ領域２０４に格納されているプログラムを実行する。これにより、メインＣＰＵ１０１は、フラッシュＲＯＭ１１２に格納されているブートコード（ブートプログラム）の検証結果を示す信号の受信を待つ状態に移行する。サブＣＰＵ１１５は、フラッシュＲＯＭ１１２に格納されているブートコードの正当性を検証し、当該検証の結果を示す検証終了信号１１６をメインＣＰＵ１０１へ送信する。メインＣＰＵ１０１は、サブＣＰＵ１１５から検証終了信号１１６を受信すると、フラッシュＲＯＭ１１２に格納されているブートコードを実行する。
【００４７】
このように、メインＣＰＵ１０１は、ＭＦＰ１の起動時のリセット解除後に、まずＯＴＰ領域２０４に格納されているプログラムを実行することにより、検証終了信号１１６の受信を待つ状態に移行する。更に、メインＣＰＵ１０１は、ブートコードの検証の完了後にサブＣＰＵ１１５から送信される検証終了信号１１６を受信すると、フラッシュＲＯＭ１１２に格納されているブートコードを実行する。即ち、メインＣＰＵ１０１は、リセット状態の解除に応じてブートコードの実行を開始するのではなく、リセット状態が解除された後、検証終了信号１１６を受信することでブートコードの実行を開始する。
【００４８】
これにより、不正なリセット信号がメインＣＰＵ１０１に入力されたとしても、サブＣＰＵ１１５によるブートコードの検証の完了前に、メインＣＰＵ１０１がブートコードを実行することを防ぐことが可能になる。したがって、したがって、例えば、サブＣＰＵにおけるリセット信号の出力用の端子にゴミが付着した場合やサブＣＰＵ自体が故障した場合に、ブートコードの検証の完了を待たずに不正なブートコードをメインＣＰＵが実行することを防止できる。また、サブＣＰＵからメイン信号へのリセット信号用の配線が意図的に改造された場合でも、不正なブートコードをメインＣＰＵが実行することを防止できる。
【００４９】
なお、上述の実施形態では、サブＣＰＵ１１５からメインＣＰＵ１０１への片方向の信号送信の例を示している。この点について、検証終了信号１１６を受信したメインＣＰＵ１０１が、サブＣＰＵ１１５へ受信確認信号を送信し、当該受信確認信号に応じて、サブＣＰＵ１１５が、再度、検証終了信号１１６をメインＣＰＵ１０１へ送信してもよい。その場合、メインＣＰＵ１０１は、検証終了信号１１６を再び受信した場合に、フラッシュＲＯＭ１１２からブートコードを読み出して実行してもよい。これにより、検証終了信号１１６を用いたメインＣＰＵ１０１の制御についての信頼性を高めることが可能となる。
【００５０】
［その他の実施形態］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５１】
１：ＭＦＰ、１０１：メインＣＰＵ、１１２：フラッシュＲＯＭ、１１５：サブＣＰＵ、１１６：検証終了信号、１１７：リセット信号、２０１：ＣＰＵコア、２０４：ＯＴＰ領域、３０１：ＣＰＵコア、３０４：ＯＴＰ領域
【図１】
2020047064.tif 000003
【図２】
2020047064.tif 000004
【図３】
2020047064.tif 000005
【図４】
2020047064.tif 000006
【図５】
2020047064.tif 000007
【図６】
2020047064.tif 000008