(57)【要約】      （修正有）【課題】基板実装時にサブＣＰＵからのリセット信号の端子に半田ブリッジやゴミが付着するなどの原因により、リセット信号が正しく出力されない場合、サブＣＰＵによるブートコードの改竄検知をすりぬけて、メインＣＰＵが起動することがない方法を提供する。【解決手段】サブＣＰＵは、起動後、改竄検知動作が完了するまでは、メインＣＰＵからＦｌａｓｈＲＯＭへのアクセスを監視する。メインＣＰＵによるＦｌａｓｈＲＯＭへのアクセスを検知した場合、アクセス不能信号を出力し、メインＣＰＵによるＦｌａｓｈＲＯＭへのアクセスを不能にする。【選択図】図８
2020102129.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置の起動後に実行されるコードを記憶する記憶手段と、
前記コードを実行する第１のＣＰＵと、
前記第１のＣＰＵが前記コードを実行する前に前記コードの異常の検証をする第２のＣＰＵと、
を有する情報処理装置であって、
前記第２のＣＰＵは、前記検証を行っているとき、前記第１のＣＰＵによる前記記憶手段へのアクセスを不能にする
ことを特徴とする情報処理装置。
【請求項２】
前記第２のＣＰＵは、前記第１のＣＰＵの起動を不能とする第１の信号を送信することができる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２のＣＰＵは、前記検証において前記コードに異常が生じたことを検知すると、前記第１の信号を送信する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第１のＣＰＵと前記記憶手段とを接続し、かつ、前記第２のＣＰＵと前記記憶手段とを接続するアクセス手段を有する
ことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第２のＣＰＵが前記アクセス手段を介して前記記憶手段と接続しているとき、前記第１のＣＰＵは前記アクセス手段を介して前記記憶手段と接続することができない
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記第２のＣＰＵは、第２の信号を送信することにより、前記第１のＣＰＵによる前記記憶手段へのアクセスを不能にする
ことを特徴とする請求項４又は５に記載の情報処理装置。
【請求項７】
前記第２の信号は、前記アクセス手段を介して送信される
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記第２のＣＰＵは、前記第１のＣＰＵが前記記憶手段へアクセスすると、第３の信号が送信されることより前記第１のＣＰＵが前記記憶手段へアクセスしたことを検知する
ことを特徴とする請求項４乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記第３の信号は、前記アクセス手段を介して送信される
ことを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記第２のＣＰＵは、前記第３の信号が送信されると、前記第１のＣＰＵによる前記記憶手段へのアクセスを不能にする第２の信号を送信する
ことを特徴とする請求項８又は９に記載の情報処理装置。
【請求項１１】
前記第２のＣＰＵは、前記コードが改竄されたことによる異常の検証をする
ことを特徴とする請求項１乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
さらに、画像処理手段を有する
ことを特徴とする請求項１乃至１１のいずれか１項に記載の情報処理装置。
【請求項１３】
情報処理装置の起動後に実行されるコードを記憶する記憶手段と、
前記コードを実行する第１のＣＰＵと、
前記第１のＣＰＵが前記コードを実行する前に前記コードの異常の検証をする第２のＣＰＵと、
を有する情報処理装置の制御方法であって、
前記第２のＣＰＵが前記検証を行っているとき、前記第１のＣＰＵによる前記記憶手段へのアクセスを不能にする工程を有する
ことを特徴とする情報処理装置の制御方法。
【請求項１４】
請求項１３の情報処理装置の制御方法をコンピュータにより実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブートコードなどのコードの改竄を検知する機能を有する情報処理装置、情報処理装置の制御方法、及びプログラムに関するものである。
【背景技術】
【０００２】
従来、画像処理装置においてはブートコードが備えられているが、画像処理装置がネットワークに接続されている場合、ブートコードが改竄されてしまうおそれがある。このため、画像処理装置において、メインＣＰＵが実行するブートコードをメインＣＰＵが起動する前にサブＣＰＵが読み出し、サブＣＰＵが読み出したブートコードが改竄されていないかを検証する方法がある。
そして、サブＣＰＵがブートコードの改竄を検知した場合の処理として、メインＣＰＵを起動させないために、メインＣＰＵに入力するリセット信号をサブＣＰＵが制御することにより、メインＣＰＵをリセット状態にする方法が考えられる。
【０００３】
一方、メインＣＰＵを起動させない方法としては、メインＣＰＵの起動が一旦完了したら直ちに割り込み待ち状態に移行させ、サブＣＰＵが起動して割り込み信号を送信したら、メインＣＰＵは割り込み状態から復帰してその後の処理を可能にするものがある。（例えば、特許文献１を参照。）
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１３７７５公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、基板実装時に、サブＣＰＵから出力するリセット信号の端子に半田ブリッジやゴミが付着するなどの原因により、サブＣＰＵからリセット信号が正しく出力されない場合がある。そして、リセット信号が正しく出力されずに、リセット解除を示す状態でメインＣＰＵが固定されてしまうと、サブＣＰＵによるブートコードの改竄検知をすり抜けて、メインＣＰＵが起動してしまう可能性がある。
この場合、メインＣＰＵが、正常に起動したのか、あるいは、サブＣＰＵによるブートコードの改竄検知をすりぬけて起動したのかを区別することができない。したがって、サブＣＰＵによるブートコードの改竄検知が完了するまでは、メインＣＰＵの起動を確実に停止させることが必要となる。
【課題を解決するための手段】
【０００６】
本発明は、情報処理装置の起動後に実行されるコードを記憶する記憶手段と、前記コードを実行する第１のＣＰＵと、前記第１のＣＰＵが前記コードを実行する前に前記コードの異常の検証をする第２のＣＰＵと、を有する情報処理装置であって、前記第２のＣＰＵは、前記検証を行っているとき、前記第１のＣＰＵによる前記記憶手段へのアクセスを不能にすることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、コードの検証が完了するまでは、コードの実行をするＣＰＵを確実に起動させないことができる。
【図面の簡単な説明】
【０００８】
【図１】ＭＦＰのハードウェア構成を示す図である。
【図２】メインＣＰＵの構成を示す図である。
【図３】サブＣＰＵの構成を示す図である。
【図４】ＦｌａｓｈＲＯＭのメモリマップである。
【図５】サブＣＰＵの起動時の処理を示すフローチャートである。
【図６】メインＣＰＵの起動時の処理を示すフローチャートである。
【図７】正常起動時のタイミングチャートである。
【図８】異常起動時のタイミングチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明を実施するための形態について実施例を用いて説明する。
【実施例１】
【００１０】
本発明が適用される装置として、以下では、画像処理装置（以下、「ＭＦＰ」（Multi Function Peripheral）という）を用いた実施例について説明する。ただし、ブートコードの改竄検知機能の機能が実行できる装置であれば、画像処理装置以外の情報処理装置であってもよく、また、単体の装置であっても、複数の装置からなるシステムであってもよいことは言うまでもない。
【００１１】
図１は、ＭＦＰ１００のハードウェア構成を表すブロック図である。
図１において、メインＣＰＵ（Central Processing Unit）１０１は、ＭＦＰ１００全体の制御を司る。ＤＲＡＭ（Dynamic Random Access Memory）１０２は、メインＣＰＵ１０１で実行されるプログラムを格納すると共に、一時的なデータのワークエリアとして機能する。操作部１０３は、操作部Ｉ／Ｆ（Interface）１１３を介して、ユーザによる操作をメインＣＰＵ１０１に通知する。ネットワークＩ／Ｆ１０４は、ＬＡＮ（Local Area Network）１３０と接続して、不図示の外部機器との通信を行う。
【００１２】
プリンタ部１０５は、画像データを紙面上に印字する。スキャナ部１０６は、紙面上の画像を光学的に読み取り、電気信号に変換してスキャン画像を生成する。ＦＡＸ１０７は、公衆回線１１０と接続して、不図示の外部機器とファクシミリ通信を行う。
ＨＤＤ（Hard Disk Drive）１０８は、メインＣＰＵ１０１で実行されるプログラムを格納すると共に、プリントジョブやスキャンジョブなどのスプール領域としても利用される。また、ＨＤＤ１０８は、スキャン画像を保管し、再利用するための領域としても利用される。
信号バス１０９は、各モジュールを相互に接続して通信を行う。公衆回線１１０は、ＦＡＸ１０７と不図示の外部機器とを相互接続する。
【００１３】
画像処理部１１１は、ネットワークＩ／Ｆ１０４で受信したプリントジョブに対して、プリンタ部１０５で印刷するのに適した画像への変換処理を実行する。また、画像処理部１１１は、スキャナ部１０６で読み取ったスキャン画像に対して、ノイズ除去や色空間変換、回転、圧縮などの処理を実行する。また、画像処理部１１１は、ＨＤＤ１０８に保管されたスキャン画像に対して画像処理を実行する。
ＦｌａｓｈＲＯＭ（Flash Read Only Memory）１１２は、ＭＦＰ１００の起動時にメインＣＰＵ１０１で実行されるブートコードを含むプログラムを格納すると共に、ＭＦＰ１００のデフォルト設定値を記憶する。
操作部Ｉ／Ｆ１１３は、操作部１０３と信号バス１０９を相互接続する。
【００１４】
ＳＰＩ（Serial Peripheral Interface）バス１１４は、メインＣＰＵ１０１、ＦｌａｓｈＲＯＭ１１２、サブＣＰＵ１１５を相互接続する。
そして、メインＣＰＵ１０１は、ＳＰＩバス１１４を介して、ＦｌａｓｈＲＯＭ１１２にアクセスする。また、サブＣＰＵ１１５も、ＳＰＩバス１１４を介して、ＦｌａｓｈＲＯＭ１１２にアクセスする。ただし、ＳＰＩバス１１４が占有されている状態では、競合が生じるため、ＳＰＩバス１１４を介してＦｌａｓｈＲＯＭ１１２にアクセスすることはできない。
【００１５】
サブＣＰＵ１１５は、ＭＦＰ１００の起動後、メインＣＰＵ１０１が起動する前にＦｌａｓｈＲＯＭ１１２からブートコードを読み出して、ブートコードが改竄され、異常が生じていないかを検知する。改竄の検知方法としては、例えば、製造時に、ブートコードのデジタル署名の公開鍵情報（ハッシュ値を公開鍵暗号化した値）をサブＣＰＵ１１５内のＯＴＰ３０４（図３で後述）に記憶させておく。そして、起動時に読み出したブートコードを公開鍵情報で復号化することにより改竄の検知をする。公開鍵暗号の方法としては、ＲＳＡ２０４８、ＥＣＤＳＡなどがある。
【００１６】
アクセス検知信号１１６は、メインＣＰＵ１０１からＦｌａｓｈＲＯＭ１１２へのアクセスを検知するための信号であって、ＳＰＩバス１１４のＣＳ（Chip Select）信号に接続されている。メインＣＰＵ１０１がＳＰＩバス１１４を介してＦｌａｓｈＲＯＭ１１２にアクセスしているとき、ＣＳ信号のレベルは、ＧＰＩＯ３０３（図３で後述）を通してアクティブ状態のＬｏｗになっている。サブＣＰＵ１１５は、アクセス検知信号１１６が送信されることにより、メインＣＰＵ１０１がＦｌａｓｈＲＯＭ１１２にアクセスしていることを検知することができる。
【００１７】
リセット信号（後述の「メインＣＰＵリセット信号」）１１７は、サブＣＰＵ１１５のＧＰＩＯポートから出力されて、メインＣＰＵ１０１のリセット端子に接続される。サブＣＰＵ１１５は、ブートコードが改竄されたことを検知すると、リセット信号１１７を送信して、メインＣＰＵ１０１をリセット状態にする。
【００１８】
電源制御部１１８は、ＭＦＰ１００内の各モジュールへの電力供給を制御する。電源線１１９は、各モジュールに電力を供給する。電源供給線１２０は、商業用ＡＣ電源から電源を供給する。
【００１９】
アクセス不能信号１２１は、メインＣＰＵ１０１からＦｌａｓｈＲＯＭ１１２へのアクセスを不能にする信号である。サブＣＰＵ１１５は、アクセス検知信号１１６を介して、メインＣＰＵ１０１がＦｌａｓｈＲＯＭ１１２にアクセスしていることを検知すると、アクセス不能信号１２１をＬｏｗにする。アクセス不能信号１２１は、ＳＰＩバス１１４のＣＬＫ信号に接続されており、ソフトウェアによってＧＰＩＯ３０３を制御することで、ＳＰＩバス１１４のＣＬＫ信号をＬｏｗに固定することができる。サブＣＰＵ１１５がアクセス不能信号１２１を送信することにより、メインＣＰＵ１０１は、ＦｌａｓｈＲＯＭ１１２にアクセス不能になる。
【００２０】
リセット回路１２２は、ＭＦＰ１００の電源がＯＮされると、所定の遅延時間を経た一定時間後に、リセット信号（サブＣＰＵリセット信号）１２３をＬｏｗからＨｉｇｈに遷移させる。サブＣＰＵリセット信号１２３は、リセット回路１２２から出力されて、サブＣＰＵ１１５のリセット端子に接続される。サブＣＰＵリセット信号１２３がＨｉｇｈになると、サブＣＰＵ１１５はリセットが解除されて起動を開始する。
【００２１】
図２は、メインＣＰＵ１０１の内部構成を示すブロック図である。
図２において、ＣＰＵコア２０１は、ＣＰＵとしての基本機能を担っている。ＳＰＩ Ｍａｓｔｅｒ２０２は、外部のＳＰＩデバイスと相互に接続して、データの読み書きを行う。信号バスインターフェース２０３は、信号バス１０９とメインＣＰＵ１０１内の信号バス２０９を接続する。
ＳＰＩ２０６バスは、ＳＰＩ Ｍａｓｔｅｒ２０２と外部のＳＰＩデバイスとを電気的に接続する。信号バス２０９は、メインＣＰＵ１０１内の各モジュールを接続する。
【００２２】
図２において、メインＣＰＵリセット信号１１７がＬｏｗの場合、メインＣＰＵ２０１はリセット状態となり、起動不可となる。一方、メインＣＰＵリセット信号１１７がＨｉｇｈの場合、メインＣＰＵ２０１はリセット解除状態となり、起動可能となる。
メインＣＰＵ１０１がリセット状態からリセット解除状態に遷移すると、ＣＰＵコア２０１は、ＦｌａｓｈＲＯＭ１１２内に記憶されているメインＣＰＵ ＢＩＯＳ４０１（図４で後述）をＤＲＡＭ１０２に読み出して実行する。
【００２３】
図３は、サブＣＰＵ１１５の内部構成を示すブロック図である。
図３において、ＣＰＵコア３０１は、ＣＰＵとしての基本機能を担っている。
ＳＰＩ Ｍａｓｔｅｒ３０２は、外部のＳＰＩデバイスと相互に接続して、データの読み書きを行う。
【００２４】
ＧＰＩＯ（General-Purpose Input/Output）３０３は、外部のデバイスと相互に接続して、データの送受信を行う。ＧＰＩＯ３０３には３本の信号が接続されている。１つ目の信号は、メインＣＰＵ１０１をリセット状態にするためのメインＣＰＵリセット信号１１７である。２つ目の信号は、メインＣＰＵ１０１がＦｌａｓｈＲＯＭ１１２にアクセスしていることを検知するアクセス検知信号１１６である。３つ目の信号は、メインＣＰＵ１０１のＦｌａｓｈＲＯＭ１１２へのアクセスを不能にするアクセス不能信号１２１である。
【００２５】
ＯＴＰ（One Time Program）３０４は、メモリ領域であって、製造時に、サブＣＰＵ ＦＷ（Firmware）４０４（図４で後述）のハッシュ値を公開鍵暗号化した値、及び、Ｔａｇ４０３（図４で後述）のアドレスが書き込まれる。ＯＴＰ３０４の領域に書き込まれたデータは、一度書き込まれると二度と書き換えることはできない。
ＳＲＡＭ（Static Random Access Memory）３０５は、サブＣＰＵ１１５内のワークメモリとして使用される。暗号処理部３０８は、公開鍵暗号化した値からサブＣＰＵ ＦＷ４０４のハッシュ値を復号するほか、公開鍵暗号化したメインＣＰＵ ＢＩＯＳ４０１（図４で後述）のハッシュ値を復号する。
【００２６】
信号バス３０９は、サブＣＰＵ内の各モジュールを接続する。ＢｏｏｔＲＯＭ（Read Only Memory）３１０は、サブＣＰＵ１１５のブートコードを記憶する。
ＣｒｙｐｔｏＲＯＭ３１１は、暗号処理部３０８で利用する機密性の高いデータを記憶する。
【００２７】
図３において、サブＣＰＵリセット信号１２３がＬｏｗの場合、サブＣＰＵ１１５はリセット状態となり、起動不可となる。一方、サブＣＰＵリセット信号１２３がＨｉｇｈの場合、サブＣＰＵ１１５はリセット解除状態となり、起動可能となる。
サブＣＰＵ１１５がリセット状態からリセット解除状態に遷移すると、ＣＰＵコア３０１は、ＢｏｏｔＲＯＭ３１０から自身のブートコードを読み出し実行する。
【００２８】
図４は、ＦｌａｓｈＲＯＭ１１２のメモリマップを示す図である。
図４において、メインＣＰＵ ＢＩＯＳ４０１には、メインＣＰＵ１０１で実行されるコードが記憶されている。ＢＩＯＳ署名４０２には、メインＣＰＵ ＢＩＯＳ４０１のハッシュ値に対するＲＳＡ署名値が記憶されている。
Ｔａｇ４０３には、サブＣＰＵ ＦＷ４０４の先頭アドレスが記憶されている。なお、Ｔａｇ４０３自体のアドレスはＯＴＰ３０４に記憶されている。
【００２９】
サブＣＰＵ ＦＷ４０４には、サブＣＰＵ１１５で実行されるコードが記憶されている。ＦＷ署名４０５には、サブＣＰＵ ＦＷ４０４、または、サブＣＰＵ ＦＷ４０４の先頭の特定部分のＥＣＤＳＡ署名値が記憶されている。
ＲＯＭ−ＩＤ４０６には、メインＣＰＵ ＢＩＯＳ４０１の先頭アドレス、サイズ、ＢＩＯＳ署名４０２のアドレスが記憶されている。
【００３０】
なお、本実施例では、メインＣＰＵ ＢＩＯＳ４０１、ＢＩＯＳ署名４０２、Ｔａｇ４０３、サブＣＰＵ ＦＷ４０４、ＦＷ署名４０５は、一組のセットのみを記憶した場合の例を示している。ただし、これらを複数のセットで記憶しておき、必要に応じて切り替えて使用することも当然ながら可能である。
【００３１】
次に、図５のフローチャートを用いて、サブＣＰＵ１１５における起動時の処理手順を説明する。
サブＣＰＵ１１５は、ＭＦＰ１００の電源がＯＮされると、直ちに起動する。そして、サブＣＰＵ１１５はＢｏｏｔＲＯＭ３１０内のブートコードを読み出す。
【００３２】
そして、サブＣＰＵ１１５は、ＧＰＩＯ３０３を設定し、メインＣＰＵ１０１がＦｌａｓｈＲＯＭ１１２にアクセスしたことにより、アクセス検知信号１１６にＬｏｗが入力されたときに、割り込みを発生するように設定する（Ｓ５０１）。
続いて、サブＣＰＵ１１５は、起動直後では割り込み禁止に設定されているが、割り込みを許可に切り替える（Ｓ５０２）。この時点から、メインＣＰＵ１０１のリセット状態が誤って解除されて起動することにより、メインＣＰＵ１０１がＦｌａｓｈＲＯＭ１１２にアクセスした場合、サブＣＰＵ１１５は、アクセス検知信号１１６によりこれを検知できるようになる。
【００３３】
なお、割り込みが許可されているとき、メインＣＰＵ１０１がＦｌａｓｈＲＯＭ１１２にアクセスしようとしたことにより、割り込みが発生した場合、サブＣＰＵ１１５は、まず、割り込みを禁止状態にする（Ｓ５１９）。これは、割り込みが多重に入って誤動作することを防ぐためである。
【００３４】
そして、サブＣＰＵ１１５は、ＧＰＩＯ３０３に接続されているアクセス不能信号１２１をＬｏｗにする（Ｓ５２０）。これにより、メインＣＰＵ１０１は、ＳＰＩバス１１４のＣＬＫ信号をＨｉｇｈにすることができなくなる。これ以降、メインＣＰＵ１０１は、ＦｌａｓｈＲＯＭ１１２にアクセス不能となり、メインＣＰＵ ＢＩＯＳ４０１を読み出すことができなくなる。そして、本フローチャートの処理を終了する。
【００３５】
Ｓ５０２に続いて、サブＣＰＵ１１５は、ＳＰＩバス１１４を介してＦｌａｓｈＲＯＭ１１２からサブＣＰＵ ＦＷ４０４とＦＷ署名４０５をＳＲＡＭ３０５に読み込む。また、サブＣＰＵ１１５は、ＦｌａｓｈＲＯＭ１１２をリードするので、リードの前には割り込みを禁止し、リードの後には割り込みを許可する（Ｓ５０３）。これは、サブＣＰＵ１１５がＳＰＩバス１１４にアクセスしてＣＳ信号がアサートされたことにより割り込みが入るのを防止するためである。
【００３６】
続いて、サブＣＰＵ１１５は、暗号処理部３０８によって、ＦＷ署名４０５をＯＴＰ３０４内の公開鍵で復号化して、正解となるハッシュ値を取得する（Ｓ５０４）。
続いて、サブＣＰＵ１１５は、暗号処理部３０８によって、サブＣＰＵ ＦＷ４０４のハッシュ値を計算する（Ｓ５０５）。
【００３７】
続いて、サブＣＰＵ１１５は、Ｓ５０４で取得したハッシュ値とＳ５０５で計算したハッシュ値を比較する（Ｓ５０６）。
ここで、両者のハッシュ値が不一致の場合（Ｓ５０６でＮＯ）、サブＣＰＵ１１５が実装不良などの原因などにより正常でない可能性がある。そこで、ブートコードの改竄をすり抜けて、メインＣＰＵ１０１が起動してしまわないように、Ｓ５１９とＳ５２０の処理をして、本フローチャートの処理を終了する。
【００３８】
一方、両者のハッシュ値が一致した場合（Ｓ５０６でＹＥＳ）は、割り込み禁止にした後、サブＣＰＵ１１５は、ＲＯＭ−ＩＤ４０６をＦｌａｓｈＲＯＭ１１２からＣｒｙｐｔｏＲＯＭ３１１に読み込み、割り込みを許可する（Ｓ５０７）。
続いて、サブＣＰＵ１１５は、ＲＯＭ−ＩＤ４０６からメインＣＰＵ ＢＩＯＳ４０１のアドレスとＢＩＯＳ署名４０２のアドレスを取得する（Ｓ５０８）。
【００３９】
続いて、サブＣＰＵ１１５は、割り込みを禁止し、ＢＩＯＳ署名４０２をＳＲＡＭ３０５に読み込み、その後、再び割り込みを許可する（Ｓ５０９）。
続いて、サブＣＰＵ１１５は、暗号処理部３０８によって、ＢＩＯＳ署名４０２をサブＣＰＵ ＦＷ４０４に付属している公開鍵で復号化して、ハッシュ値を取得する（Ｓ５１０）。
【００４０】
これ以降は、ＦｌａｓｈＲＯＭ１１２のメインＣＰＵ ＢＩＯＳ４０１の全領域を読み出すため、サブＣＰＵ１１５は割り込みを禁止する（Ｓ５１１）。
そして、サブＣＰＵ１１５は、メインＣＰＵ ＢＩＯＳ４０１をＳＲＡＭ３０５に読み込む（Ｓ５１２）。
【００４１】
続いて、サブＣＰＵ１１５は、メインＣＰＵ ＢＩＯＳ４０１の読み出しにエラーがあるかを検知する（Ｓ５１３）。
エラーがあった場合（Ｓ５１３でＹＥＳ）、サブＣＰＵ１１５はメインＣＰＵ１０１とのＳＰＩバス１１４の競合があった可能性がある。そのため、Ｓ５１９とＳ５２０の処理をして、本フローチャートの処理を終了する。
【００４２】
エラーがなければ（Ｓ５１３でＮＯ）、サブＣＰＵ１１５は、メインＣＰＵ ＢＩＯＳ４０１を最後まで読み出したかを確認する（Ｓ５１４）。
まだ最後まで読み出していない場合（Ｓ５１４でＮＯ）、Ｓ５１２に戻り、サブＣＰＵ１１５はループ処理を続ける。
最後まで読み出した場合（Ｓ５１４でＹＥＳ）は、サブＣＰＵ１１５は、割り込みを許可し、暗号処理部３０８によって、メインＣＰＵ ＢＩＯＳ４０１のハッシュ値を計算する（Ｓ５１５）。
【００４３】
そして、サブＣＰＵ１１５は、Ｓ５１０で取得したハッシュ値とＳ５１５で計算したハッシュ値を比較する（Ｓ５１６）。
両者のハッシュ値が一致しなかった場合（Ｓ５１６でＮＯ）、サブＣＰＵ１１５とメインＣＰＵ１０１とのＳＰＩバス１１４へのアクセスの競合によりデータ異常が発生した可能性がある。そのため、Ｓ５１９とＳ５２０の処理をして、本フローチャートの処理を終了する。
【００４４】
一方、両者のハッシュ値が一致した場合（Ｓ５１６でＹＥＳ）は、サブＣＰＵ１１５による改竄検知は完了したことになる。そこで、サブＣＰＵ１１５は、メインＣＰＵ１０１による誤ったアクセスの検知を終了するために、割り込みを禁止する（Ｓ５１７）。
続いて、サブＣＰＵ１１５は、ＧＰＩＯ３０３を制御してメインＣＰＵリセット信号１１７をＨｉｇｈにし、電力消費の最も少ないスリープ状態に入り、その状態を維持する（Ｓ５１８）。
【００４５】
なお、スリープ状態では、ＧＰＩＯ３０３の出力状態を維持している。また、一度スリープ状態に入った後は、通常状態に戻る必要はないため、割り込み信号を受信する必要はない。ただし、サブＣＰＵ１１５を改竄検知以外の用途にも利用するのであれば、割り込み信号の受信を許可して、通常状態へ復帰させることも可能である。
【００４６】
次に、図６のフローチャートを用いて、メインＣＰＵ１０１における起動時の処理手順を説明する。
メインＣＰＵ１０１は、サブＣＰＵ１１５による改竄検知が完了し、リセット状態から解除されると、直ちにＦｌａｓｈＲＯＭ１１２に記憶されたメインＣＰＵ ＢＩＯＳ４０１をＤＲＡＭ１０２に読み込む（Ｓ６０１）。
続いて、メインＣＰＵ１０１は、メインＣＰＵ ＢＩＯＳ４０１を実行し、メインＣＰＵ１０１内の入出力の初期化を行う（Ｓ６０２）。
【００４７】
続いて、メインＣＰＵ１０１は、ＨＤＤ１０８からＯＳ（Operating System）をＤＲＡＭ１０２に読み込む（Ｓ６０３）。
ＯＳを読み込んだ後、メインＣＰＵ１０１はＯＳを起動する（Ｓ６０４）。
続いて、メインＣＰＵ１０１は、プリンタ部１０５、スキャナ部１０６、ＦＡＸ１０７、画像処理部１１１、ネットワークＩ／Ｆ１０４操作部１０３の各モジュールを初期化して、ＭＦＰ１００を起動可能な状態にする（Ｓ６０５）。
【００４８】
次に、図７のタイミングチャートを用いて、正常に起動した時のメインＣＰＵ１０１とサブＣＰＵ１１５の動作を説明する。
Ｔ７０１において、ＭＦＰ１００に電源が投入されると、一定時間後にサブＣＰＵリセット信号１２３が解除され、サブＣＰＵ１１５が起動を開始する。なお、この時点において、メインＣＰＵリセット信号１１７はＬｏｗのレベルにあるため、メインＣＰＵ１０１はリセット状態にあり起動しない。
【００４９】
そして、サブＣＰＵ１１５は、順次、ＢｏｏｔＲＯＭ３１０の検証、サブＣＰＵ ＦＷ４０４の検証、メインＣＰＵ ＢＩＯＳ４０１の検証、からなるブートコードの改竄検知動作を行う。なお、ＢｏｏｔＲＯＭ３１０の検証は、図５のフローチャートではＳ５０１において行われる。同様に、サブＣＰＵ ＦＷ４０４の検証、メインＣＰＵ ＢＩＯＳ４０１の検証は、それぞれ、Ｓ５０３〜Ｓ５０６、Ｓ５０７〜Ｓ５１６において、行われる。
【００５０】
Ｔ７０２において、改竄検知動作が完了すると、サブＣＰＵ１１５はメインＣＰＵリセット信号１１７をＨｉｇｈにする。これにより、メインＣＰＵ１０１のリセット状態が解除され、メインＣＰＵ１０１は起動を開始する。
メインＣＰＵ１０１が起動すると、メインＣＰＵ ＢＩＯＳ４０１の読み込みが行われる。
Ｔ７０３において、メインＣＰＵ ＢＩＯＳ４０１の読み込みが終了すると、メインＣＰＵ１０１は、ＯＳを起動し、アプリケーションを起動し、一連の起動が完了する。
【００５１】
なお、サブＣＰＵ１１５がメインＣＰＵリセット信号１１７をＬｏｗにしているときには、ＳＰＩバス１１４へのアクセスはサブＣＰＵ１１５が行い、メインＣＰＵ１０１はアクセスしないのが正常である。サブＣＰＵ１１５がメインＣＰＵリセット信号１１７をＨｉｇｈに切り替えることで、メインＣＰＵ１０１によるＳＰＩバス１１４へのアクセスが開始する。このとき、サブＣＰＵ１１５がＳＰＩバス１１４にアクセスすると、メインＣＰＵ１０１の正常な起動を妨げることになる。
【００５２】
次に、図８のタイミングチャートを用いて、異常があった時のメインＣＰＵ１０１とサブＣＰＵ１１５の動作を説明する。
ここでは、メインＣＰＵリセット信号１１７が意図せずにＨｉｇｈに固定されていて、電源投入とともにメインＣＰＵ１０１が起動を開始してしまう例について説明する。
【００５３】
Ｔ８０１において、ＭＦＰ１００に電源が投入されると、一定時間後にサブＣＰＵリセット信号１２３が解除され、サブＣＰＵ１１５が起動を開始する。
ここでは、メインＣＰＵ１０１リセット信号１１７がＨｉｇｈであることから、サブＣＰＵ１１５の起動とほぼ同時に、メインＣＰＵ１０１も起動を開始する。
【００５４】
メインＣＰＵ１０１が起動すると、図７で説明した正常時における動作と同様に、メインＣＰＵ１０１はＦｌａｓｈＲＯＭ１１２へのアクセスを開始する。同様に、サブＣＰＵ１１５はブートコードの改竄検知動作を開始する。
正常時であれば、メインＣＰＵ１０１によるＦｌａｓｈＲＯＭ１１２へのアクセスはＴ８０２で完了するまで継続する。同様に、サブＣＰＵ１１５による改竄検知動作はＴ８０３で完了するまで継続する。
【００５５】
しかし、図８のタイミングチャートに示されるように、これらの２つの期間は重なっている。したがって、実際には、ＭＦＰ１００に電源が投入されると、直後のＴ８０４において、メインＣＰＵ１０１とサブＣＰＵ１１５によるＳＰＩバス１１４へのアクセスの競合が発生する。あるいは、サブＣＰＵ１１５に割り込みが入り、メインＣＰＵ１０１が意図せず起動していることがアクセス検知信号１１６により検知され、アクセス不能信号１２１が出力される。
そのため、Ｔ８０４以降は、メインＣＰＵ１０１によるＳＰＩバス１１４へのアクセスは不能になり、メインＣＰＵ１０１は起動を停止する。また、サブＣＰＵ１１５も改竄検知動作を中断する。
【００５６】
以上のとおり、サブＣＰＵ１１５のブートコードの改竄検知が完了するまで、メインＣＰＵ１０１がＳＰＩバス１１４にアクセスすることを監視することで、改竄検知のすり抜けを検出できる。検出時はアクセス不能信号１２１をＬｏｗにすることで、メインＣＰＵが起動してしまうことを確実に防止することが可能となる。
【００５７】
（その他の実施例）
本発明は、上述の実施例の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。
本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形が可能であり、それらを本発明の範囲から除外するものではない。すなわち、上述した実施例及びその変形例を組み合わせた構成もすべて本発明に含まれるものである。
【符号の説明】
【００５８】
１００      ＭＦＰ
１０１      メインＣＰＵ
１１２      ＦｌａｓｈＲＯＭ
１１４      ＳＰＩバス
１１５      サブＣＰＵ
１１６      アクセス検知信号
１１７      メインＣＰＵリセット信号
１２１      アクセス不能信号
【図１】
2020102129.tif 000003
【図２】
2020102129.tif 000004
【図３】
2020102129.tif 000005
【図４】
2020102129.tif 000006
【図５】
2020102129.tif 000007
【図６】
2020102129.tif 000008
【図７】
2020102129.tif 000009
【図８】
2020102129.tif 000010