(57)【要約】      （修正有）【課題】第２のＣＰＵのプログラムが第１のＣＰＵによって検証され終えるのを待たずに第２のＣＰＵがブートを開始し、第１のＣＰＵが使用するメモリの内容を書き換えるように改竄され、第１のＣＰＵの検証処理が正常に終わらない場合でも、検証失敗時のエラー通知を行なう。【解決手段】第１のＣＰＵと、第１のＣＰＵにより実行されるブートプログラム及びプログラムを検証する鍵を記憶する第１のメモリと、第１のＣＰＵが実行するプログラムを記憶する第２のメモリと、第２のメモリにアクセスできる第２のＣＰＵと、第２のＣＰＵが実行するプログラムを記憶する第３のメモリと、を有する。第１のＣＰＵは、ブートプログラムの実行時、鍵を用いて第２のメモリを検証し、検証に成功すると第３のメモリを鍵を用いて検証し、第３のメモリの検証に成功すると、第２のＣＰＵを第１のＣＰＵのシステムにアクセス可能にする。【選択図】図８
2020107003.tif 000002
【特許請求の範囲】
【請求項１】
第１のＣＰＵと、
前記第１のＣＰＵにより実行されるブートプログラム及び、プログラムを検証するための鍵を記憶する第１のメモリと、
前記第１のＣＰＵにより実行されるプログラムを記憶する第２のメモリと、
前記第２のメモリにアクセスできる第２のＣＰＵと、
前記第２のＣＰＵにより実行されるプログラムを記憶する第３のメモリと、を有し、
前記第１のＣＰＵは前記ブートプログラムの実行時、前記鍵を用いて前記第２のメモリを検証し、前記第２のメモリの検証に成功すると前記第３のメモリを前記鍵を用いて検証し、前記第３のメモリの検証に成功すると前記第２のＣＰＵが前記第１のＣＰＵのシステムにアクセスできるようにすることを特徴とする情報処理装置。
【請求項２】
前記第２のメモリの検証では、前記第２のメモリに記憶されている電子署名を前記鍵で復号することにより検証することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第３のメモリの検証では、前記第３のメモリに記憶されている電子署名を前記鍵で復号することにより検証することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記第１のＣＰＵは、前記第３のメモリの検証に失敗すると、当該第３のメモリに記憶されているプログラムのイレーズ処理、及び正しいプログラムの書き込み処理を行うことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第１のＣＰＵは更に、前記第２のメモリの検証に失敗するとエラー表示を行うことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第１のＣＰＵと前記第２のＣＰＵとを接続するインタフェース手段を更に有し、
前記第１のＣＰＵは、前記第２のメモリの検証に成功するまでは、前記インタフェース手段を介した前記第２のＣＰＵからのアクセスを禁止することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記インタフェース手段を介した前記第２のＣＰＵからのアクセスの禁止及び解除は、前記第１のＣＰＵから前記インタフェース手段への所定のデータの書き込みにより行われることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記第１のＣＰＵと前記第２のＣＰＵとを接続するインタフェース手段と、
前記第２のＣＰＵをリセットさせるリセット手段とを、更に有し、
前記第２のＣＰＵを動作可能にすることは、前記第１のＣＰＵが前記インタフェース手段を介して前記リセット手段によるリセットを解除することにより行われることを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記第２のＣＰＵをリセットさせるリセット手段を、更に有し、
前記第１のＣＰＵは、前記第３のメモリに記憶されているプログラムのイレーズ処理を行う前に前記リセット手段により前記第２のＣＰＵをリセットさせ、前記正しいプログラムの書き込み処理が終了した後、前記リセット手段により前記第２のＣＰＵのリセットを解除することを特徴とする請求項４に記載の情報処理装置。
【請求項１０】
前記インタフェース手段は、ＰＣＩｅ規格のインタフェースであることを特徴とする請求項６又は７に記載の情報処理装置。
【請求項１１】
第１のＣＰＵと、
前記第１のＣＰＵにより実行されるブートプログラム及び、プログラムを検証するための鍵を記憶する第１のメモリと、
前記第１のＣＰＵにより実行されるプログラムを記憶する第２のメモリと、
前記第２のメモリにアクセスできる第２のＣＰＵと、
前記第２のＣＰＵにより実行されるプログラムを記憶する第３のメモリと、を有する情報処理装置の起動方法であって、
前記第１のＣＰＵにより前記ブートプログラムを実行させ、
前記ブートプログラムの実行時、前記第１のＣＰＵにより前記鍵を用いて前記第２のメモリを検証させ、
前記第２のメモリの検証に成功すると、前記第１のＣＰＵにより前記第３のメモリを前記鍵を用いて検証させ、
前記第３のメモリの検証に成功すると、前記第１のＣＰＵが前記第２のＣＰＵが前記第１のＣＰＵのシステムにアクセスできるようにすることを特徴とする起動方法。
【請求項１２】
前記第１のＣＰＵに、請求項１１に記載の起動方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置と当該情報処理装置の起動方法、並びにプログラムに関するものである。
【背景技術】
【０００２】
ソフトウェアの脆弱性をついてソフトウェアを改竄し、コンピュータを悪用する攻撃が問題となっている。そのような攻撃に対する対策として、改竄が物理的に難しいメモリのプログラムでブートした第１のＣＰＵが、第２のＣＰＵがブートする前に、その第２のＣＰＵが実行するプログラムをデジタル署名などで検証し改竄が無いことを保証する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００９／０１３８２５号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述の従来技術において、第１のＣＰＵがプログラムを検証するのを待たずに第２のＣＰＵがそのプログラムのブートを開始する。そして、その後、第１のＣＰＵがそのプログラムの検証に成功すれば改竄が無いことを保証でき、第２のＣＰＵによるブートが終了するまでの時間を短縮できる。しかしながら、このような構成にすると、仮に第１のＣＰＵが使用するメモリの内容を書き換えるように改竄されていた場合は、第１のＣＰＵによる検証処理が正常に終わらず、検証失敗時のエラー通知などができなくなるという課題がある。
【０００５】
本発明の目的は、上記従来技術の問題点の少なくとも一つを解決することにある。
【０００６】
本発明の目的は、第１のＣＰＵが使用するメモリの内容が改竄されていた場合でも、第１のＣＰＵによるメモリの検証を行って、第２のＣＰＵへの影響をなくすことができる技術を提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
第１のＣＰＵと、
前記第１のＣＰＵにより実行されるブートプログラム及び、プログラムを検証するための鍵を記憶する第１のメモリと、
前記第１のＣＰＵにより実行されるプログラムを記憶する第２のメモリと、
前記第２のメモリにアクセスできる第２のＣＰＵと、
前記第２のＣＰＵにより実行されるプログラムを記憶する第３のメモリと、を有し、
前記第１のＣＰＵは前記ブートプログラムの実行時、前記鍵を用いて前記第２のメモリを検証し、前記第２のメモリの検証に成功すると前記第３のメモリを前記鍵を用いて検証し、前記第３のメモリの検証に成功すると前記第２のＣＰＵが前記第１のＣＰＵ側のシステムにアクセスできるようにすることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、第１のＣＰＵが使用するメモリの内容が改竄されていた場合でも、第１のＣＰＵによるメモリの検証を行って、第２のＣＰＵへの影響をなくすことができるという効果がある。
【０００９】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。なお、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１０】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】本発明の実施形態１に係る複合機のハードウェア構成を説明するブロック図。
【図２】実施形態に係るメイン制御部のハードウェア構成を説明するブロック図。
【図３】実施形態に係るメイン制御部において、マスタになり得るモジュールが、どのモジュールをスレーブとしてアクセスできるように構成されているかを○と×で示すテーブルの一例を示す図。
【図４】実施形態に係るサブ制御部のハードウェア構成を説明するブロック図。
【図５】実施形態に係るサブ制御部において、マスタになり得るモジュールが、どのモジュールをスレーブとしてアクセスできるように構成されているかを○と×で示すテーブルの一例を示す図。
【図６】実施形態に係るサブ制御部のＰＣＩｅ制御部の内部構成を示すブロック図。
【図７】プロトコル変換部によるメモリ要求（Memory Request）が持つアドレスの変換例を示す図。
【図８】実施形態に係るメイン制御部による起動処理を説明するフローチャート（Ａ）と、実施形態に係るサブ制御部１０２による処理を説明するフローチャート（Ｂ）。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。尚、実施形態に係る情報処理装置として複合機（デジタル複合機／ＭＦＰ：Multi-Function Peripheral）を例に説明する。しかしながら本発明の適用範囲は複合機に限定はせず、情報処理装置であればよい。
【００１２】
図１は、本発明の実施形態に係る複合機１００のハードウェア構成を説明するブロック図である。
【００１３】
メイン制御部１０１は、複合機１００を統括制御する。メイン制御部１０１は、ネットワーク１０９と接続し、ネットワーク１０９を介して印刷データの受信、読み取りデータの送信等を行う。メイン制御部１０１はまた、タッチパネル式の操作パネル１１０と接続され、操作パネル１１０を介してユーザからの指示を受けるとともに、複合機１００のステータス等をユーザに表示する。サブ制御部１０２は、メイン制御部１０１から印刷データを受信し、プリンタ１１２を制御して印刷を行う。またサブ制御部１０２はスキャナ１１１を制御し、スキャナ１１１による原稿などの読み取りを制御するとともに、スキャナ１１１が原稿を読み取って得られた画像データをメイン制御部１０１へ送信する。
【００１４】
図２は、実施形態に係るメイン制御部１０１のハードウェア構成を説明するブロック図である。
【００１５】
メインチップ２０１は、特定の用途向けの半導体集積回路であり、ＣＰＵ２１１、ＲＯＭ２１２、ＰＣＩｅ制御部２０３、操作パネル制御部２０４、ＤＲＡＭ制御部２０５、フラッシュメモリ制御部２０６、ネットワークＩ／Ｆ（インタフェース）２０７を含む。これらの各部（モジュール）は、バス２０２を介して相互に接続されている。バス２０２は、マスタとなるモジュールが出力するリード又はライトコマンドを、そのコマンドが持つアドレスに従ってスレーブとなるモジュールを選択し、そのコマンドを、その選択したモジュールへ転送する。
【００１６】
図３は、実施形態に係るメイン制御部１０１において、マスタになり得るモジュールが、どのモジュールをスレーブとしてアクセスできるように構成されているかを○と×で示すテーブルの一例を示す図である。ここでは、対応するマスタとスレーブがアクセス可能に接続されていれば○で示す。×となっているマスタとスレーブの組み合わせは、複合機１００の動作上不要なので、回路規模削減のため接続されない。また、このテーブルは、スレーブが選択される際に参照されるスレーブとアドレス領域との対応を示している。
【００１７】
マスタがライトコマンドを出力した場合、マスタは、それに続いてライトデータを出力し、バス２０２はそれらをスレーブへ転送する。またマスタがリードコマンドを出力した場合は、スレーブがバス２０２を介してリードコマンド受信し、その後、スレーブがリードデータをバス２０２を介してマスタへ返す。
【００１８】
次にスレーブがＲＯＭ２１２の場合のスレーブの動作を説明する。
【００１９】
ＲＯＭ２１２がライトコマンドを受けた場合、その後にライトデータを受信するが、ＲＯＭ２１２は書き込みができないので、その書き込み処理は行わない。従って、ＲＯＭ２１２はバス２０２を介して改竄することはできない。一方、ＲＯＭ２１２がリードコマンドを受けた場合は、そのリードコマンドが持つアドレスが示すＲＯＭ２１２のアドレスに格納されているデータを読出し、その読み出したデータをバス２０２を介してマスタへ返す。
【００２０】
次にスレーブがＤＲＡＭ制御部２０５の場合のスレーブの動作を説明する。
【００２１】
ＤＲＡＭ制御部２０５がライトコマンドを受信した場合は、そのライトコマンドが持つアドレスが示すＤＲＡＭ２２０のアドレスにライトデータを書き込むようにＤＲＡＭ２２０を制御する。またＤＲＡＭ制御部２０５がリードコマンドを受信した場合は、そのリードコマンドが持つアドレスが示すＤＲＡＭ２２０のアドレスからデータを読み出して出力するようにＤＲＡＭ２２０を制御する。ＤＲＡＭ２２０が読み出したデータは、ＤＲＡＭ制御部２０５、バス２０２を介してマスタへ返される。
【００２２】
次に、スレーブがフラッシュメモリ制御部２０６の場合のスレーブの動作を説明する。
【００２３】
この場合は、ＤＲＡＭ制御部２０５の場合と同様に、フラッシュメモリ制御部２０６がフラッシュメモリ２２１に対してライト制御、リード制御を行う。そしてリードの場合は、フラッシュメモリ２２１からのリードデータは、バス２０２を介してマスタへ返される。
【００２４】
またスレーブがネットワークＩ／Ｆ２０７の場合のスレーブの動作を説明する。
【００２５】
ＣＰＵ２１１がネットワークＩ／Ｆ２０７にアクセスする用途は、例えば、ネットワークＩ／Ｆ２０７に、ネットワーク１０９とＤＲＡＭ２２０との間のＤＭＡ（Direct Memory Access）を指示する場合である。この指示は、ネットワークＩ／Ｆ２０７のスレーブアドレス領域０ｘＦ８０１００００−０ｘＦ８０１ＦＦＦＦ内の所定の制御レジスタへの書き込み処理によって行われる。尚、ＰＣＩｅ制御部２０３のスレーブ動作については後述する。
【００２６】
次にマスタとなるモジュールについて説明する。
【００２７】
ＣＰＵ２１１は、他の全てのモジュールにアクセスする必要があるので、図３のＣＰＵ２１１の行は全て○である。
【００２８】
ネットワークＩ／Ｆ２０７は、上述のＣＰＵ２１１からの指示を受けた場合にバス２０２のマスタとなり、マスタ動作とネットワーク１０９へのアクセス制御とを協調することによって、ネットワーク１０９とＤＲＡＭ２２０と間でデータの送受信を行う。従って、ネットワークＩ／Ｆ２０７は、ＤＲＡＭ制御部２０５に対してのみマスタとしてアクセスできるようにバス２０２が構成される。尚、ＰＣＩｅ制御部２０３のマスタとしての動作については後述する。
【００２９】
図４は、実施形態に係るサブ制御部１０２のハードウェア構成を説明するブロック図である。
【００３０】
サブチップ４０１は、特定の用途向けの半導体集積回路であり、ＣＰＵ４１１、ＰＣＩｅ制御部４０３、ＤＲＡＭ制御部４０５、フラッシュメモリ制御部４０６、スキャナ制御部４０８、プリンタ制御部４０７、ＣＰＵリセットレジスタ４０９を含む。これらのモジュールは、バス４０２を介して相互に接続される。このバス４０２の機能は、図２で説明したバス２０２と同様である。
【００３１】
図５は、実施形態に係るサブ制御部１０２において、マスタになり得るモジュールが、どのモジュールをスレーブとしてアクセスできるように構成されているかを○と×で示すテーブルの一例を示す図である。この表記方法は図３と同様である。
【００３２】
ＤＲＡＭ制御部４０５とフラッシュメモリ制御部４０６については、図２のＤＲＡＭ制御部２０５、フラッシュメモリ制御部２０６と同様であるため、その説明を省略する。
【００３３】
スレーブがスキャナ制御部４０８の場合、ＣＰＵ４１１がアクセスする用途は、例えばスキャナ制御部４０８にスキャナ１１１からＤＲＡＭ４２０への読み取りデータの転送を指示する場合である。この読み取りデータの転送指示は、スキャナ制御部４０８のスレーブアドレス領域０ｘＤ００１００００−０ｘＤ００１ＦＦＦＦ内の所定の制御レジスタへの書き込み処理によって行われる。
【００３４】
スレーブがプリンタ制御部４０７の場合、ＣＰＵ４１１がアクセスする用途は、例えばプリンタ制御部４０７にＤＲＡＭ４２０からプリンタ１１２へ印刷データの転送を指示する場合である。この印刷データの転送指示は、プリンタ制御部４０７のスレーブアドレス領域０ｘＤ００２００００−０ｘＤ００２ＦＦＦＦ内の所定の制御レジスタへの書き込み処理によって行われる。
【００３５】
ＣＰＵリセットレジスタ４０９は、後述の方法で、メイン制御部１０１のＣＰＵ２１１がサブ制御部１０２のＣＰＵ４１１にリセットをかけるためのレジスタである。電源オン時、リセット信号４６０によりＣＰＵリセットレジスタ４０９は「０」に初期化される。ＣＰＵリセットレジスタ４０９の出力は、リセット信号４６０と論理和がとられてＣＰＵ４１１に接続されている。よって、このＣＰＵリセットレジスタ４０９が「０」のときは、ＣＰＵ４１１のリセット入力はリセット信号４６０と同じ論理である。ＣＰＵリセットレジスタ４０９が「１」のときはＣＰＵ４１１はリセットされる。尚、ＰＣＩｅ制御部４０３のスレーブ動作については後述する。
【００３６】
次に図５でマスタとなるモジュールについて説明する。
【００３７】
ＣＰＵ４１１は、ＣＰＵリセットレジスタ４０９以外のスレーブにマスタとしてアクセスできる。
【００３８】
スキャナ制御部４０８は、ＣＰＵ４１１からの読み取りデータの転送指示を受けた場合にバス４０２のマスタとなる。そして、マスタ動作と、スキャナ１１１への画像読み取り制御とを協調することによって、スキャナ１１１からＤＲＡＭ４２０へのデータの送信を行う。従って、スキャナ制御部４０８は、ＤＲＡＭ制御部４０５に対してのみマスタとしてアクセスできるようにバス４０２が構成される。
【００３９】
プリンタ制御部４０７は、ＣＰＵ４１１からの印刷データの転送指示を受けた場合にバス４０２のマスタとなる。そしてマスタ動作とプリンタ１１２への印刷制御とを協調することによって、ＤＲＡＭ制御部４０５によりＤＲＡＭ４２０からプリンタ１１２へのデータの送信を行う。従って、プリンタ制御部４０７は、ＤＲＡＭ制御部４０５に対してのみマスタとしてアクセスできるようにバス４０２が構成される。
【００４０】
次にＰＣＩｅ制御部２０３、ＰＣＩｅ制御部４０３を介してメイン制御部１０１とサブ制御部１０２が通信する例として、ＰＣＩｅのコンフィグトランザクション（Configuration Transaction）とメモリトランザクション（Memory Transaction）を説明する。
【００４１】
コンフィグトランザクションは、ＰＣＩｅのルート（Root）となるＰＣＩｅ制御部２０３がエンドポイントとなるＰＣＩｅ制御部４０３の諸設定を行うものである。この諸設定は、ＰＣＩｅ制御部４０３内のコンフィグレーションレジスタ（Configuration Register）を設定することである。そのためにＰＣＩｅ制御部２０３からＰＣＩｅ制御部４０３へ一方向に、コンフィグレーション書き込み要求（Configuration Write Request）を送信する。
【００４２】
ＰＣＩｅ制御部４０３が持つコンフィグレーションレジスタを初期設定する場合、ＣＰＵ２１１は、アドレス領域０ｘＤ１００００００−０ｘＤ１ＦＦＦＦＦＦ内のアドレスにライトコマンドとライトデータを出力する。この領域は、メイン制御部１０１のＰＣＩｅ制御部２０３に該当するため、バス２０２は、このライトコマンドとライトデータをＰＣＩｅ制御部２０３転送する。これらライトコマンドとライトデータを受信したＰＣＩｅ制御部２０３は、そのコマンドのアドレス属性が０ｘＤ１００００００以上の場合に、ライトデータとアドレスの下位２４ビットを、コンフィグレーションアドレス（Configuration Address）として持つコンフィグレーション書き込み要求を生成して送信する。ここでコマンドのアドレスが０ｘＤ１００００００未満の場合は、ＤＲＡＭ４２０又はフラッシュメモリ４２１又はＣＰＵリセットレジスタ４０９へのアクセスを意図するメモリ書き込み要求を生成して送信する。
【００４３】
図６は、サブ制御部１０２のＰＣＩｅ制御部４０３の内部構成を示すブロック図である。ここでは図６を参照して、コンフィグレーション書き込み要求を受信したＰＣＩｅ制御部４０３の動作を説明する。
【００４４】
図７は、プロトコル変換部６０１によるメモリ要求（Memory Request）が持つアドレスの変換例を示す図である。
【００４５】
プロトコル変換部６０１は、メモリトランザクションを受けると、図７に示すアドレス変換を含むプロトコルによりコマンドへ変換してバス４０２へ出力する。ここではコンフィグレーション書き込み要求を受信したため、アドレスデコーダ６０２へコンフィグレーション書き込み要求が持つコンフィグレーションアドレスを出力する。そして、これと同時に、コンフィグレーション書き込み要求が持つライトデータを出力する。
【００４６】
アドレスデコーダ６０２は、入力されたアドレスに従って、複数のセレクト信号の内一つだけを「１」にして、そのアドレスに対応するコンフィグレーションレジスタを選択する。各コンフィグレーションレジスタは、最大でライトデータのビット数のレジスタからなる。ここではバスマスタイネーブルレジスタ６０３のみ図示する。
【００４７】
このレジスタ６０３は、コンフィグレーションアドレスが「０ｘ４」のとき、ライトデータのビット２（ｂｉｔ２）の値がセットされる。つまりアドレスデコーダ６０２からバスマスタイネーブルレジスタ６０３のセレクト入力へ接続されるセレクト信号６０４は、コンフィグレーションアドレスが「０ｘ４」のとき「１」となる。バスマスタイネーブルレジスタ６０３のＤ入力には、このライトデータのビット２が接続される。バスマスタイネーブルレジスタ６０３は、セレクト信号６０４が「１」のとき、データ（Ｄ入力）の値を保持する。またバスマスタイネーブルレジスタ６０３は、電源オン時に印加されるリセット信号がリセット端子に入力されているので、デフォルトの値は「０」である。
【００４８】
次にＰＣＩｅのメモリトランザクションについて説明する。このメモリトランザクションは対称的であり、ＰＣＩｅ制御部２０３とＰＣＩｅ制御部４０３のどちらからも実行可能である。
【００４９】
ここで述べた対称性は、ＰＣＩｅ制御部４０３のバスマスタイネーブルレジスタ６０３に「１」がセットされたときの状態である。このバスマスタイネーブルレジスタ６０３の機能を、サブ制御部１０２のＣＰＵ４１１が、図１のＰＣＩｅ１０８を介して、メイン制御部１０１のＤＲＡＭ２２０へデータをライトする動作を通して説明する。
【００５０】
ＣＰＵ４１１が、ＤＲＡＭ２２０の例えばアドレス０ｘ１００へのライトアクセスを意図して、アドレス０ｘ８００００１００を持つライトコマンドとライトデータを送信する。これらは、このアドレスに対応するＰＣＩｅ制御部４０３へバス４０２を介して転送される。ここでバスマスタイネーブルレジスタ６０３の出力「０」のとき、ＰＣＩｅ制御部４０３が受信したライトコマンドとライトデータは、図６のマスタイネーブル回路６０５によってマスクされて、プロトコル変換部６０１へは伝わらない。
【００５１】
バスマスタイネーブルレジスタ６０３の出力「１」であれば、プロトコル変換部６０１は、マスタイネーブル回路６０５を介してライトコマンドとライトデータを受信し、それらからアドレス０ｘ１００と上記ライトデータを持つメモリ書き込み要求を生成してＰＣＩｅ制御部２０３へ送信する。
【００５２】
このメモリ書き込み要求を受信したＰＣＩｅ制御部２０３は、そのメモリ書き込み要求から、アドレス属性０ｘ１００を持つライトコマンドと、メモリ書き込み要求が持つライトデータをマスタとしてバス２０２へ送信する。バス２０２は、そのアドレスからスレーブとしてＤＲＡＭ制御部２０５を選択し、ライトコマンドとライトデータをＤＲＡＭ制御部２０５へ送信する。こうしてＤＲＡＭ制御部２０５は、ＤＲＡＭ２２０のアドレス０ｘ１００へ、そのライトデータを書き込む。
【００５３】
以上説明したように、サブ制御部１０２のＣＰＵ４１１が、アドレス０ｘ８００００１００に書き込むことにより、メイン制御部１０１のＤＲＡＭ２２０のアドレス０ｘ１００にデータを書き込むことができる。これはアドレス０ｘ８０００００００からのオフセットが変わっても同様であるため、ＣＰＵ４１１からは０ｘ８０００００００−０ｘＢＦＦＦＦＦＦＦの領域に、メイン制御部１０１のＤＲＡＭ２２０が見えることとなる。
【００５４】
またＣＰＵ２１１からも同様に、０ｘ８０００００００−０ｘＢＦＦＦＦＦＦＦの領域にサブ制御部１０３のＤＲＡＭ４２０が見える。つまり実施形態によれば、各ＣＰＵが他の制御部のＤＲＡＭをアクセス可能である。こうしてＤＲＡＭ２２０，ＤＲＡＭ４２０の所定のアドレス領域を、ＣＰＵ２１１とＣＰＵ４１１との間の通信に使用することができる。
【００５５】
更にＣＰＵ２１１は、アドレス０ｘＣ０００００００−０ｘＣＦＦＦＦＦＦＦの領域にアクセスした場合、バス２０２、ＰＣＩｅ制御部２０３、ＰＣＩｅ制御部４０３、バス４０２を介してフラッシュメモリ制御部４０６にアクセスできる。これは図７に示すように、プロトコル変換部６０１が、メモリ要求のアドレス０ｘＣ０００００００−０ｘＣＦＦＦＦＦＦＦをフラッシュメモリ４２１のアドレス領域に変換するためである。このアクセスは、後述のＣＰＵ２１１が、フラッシュメモリ４２１内のサブプログラム４４０を検証する際（Ｓ８０６）に行われる。
【００５６】
またメイン制御部１０１のＣＰＵ２１１は、アドレス０ｘＤ０００００００にアクセスすることにより、バス２０２、ＰＣＩｅ制御部２０３、ＰＣＩｅ制御部４０３、バス４０２を介して、ＣＰＵリセットレジスタ４０９の値を制御することができる。これは図７に示すように、プロトコル変換部６０１が、メモリ要求のアドレス０ｘＤ０００００００を、ＣＰＵリセットレジスタ４０９のアドレス０ｘＤ００３００００に変換するためである。このアクセスは後述のＳ８１１，Ｓ８１３で行われる。
【００５７】
以上説明した実施形態に係る複合機１００における立ち上げ処理を図８のフローチャートを参照して説明する。
【００５８】
図８（Ａ）は、実施形態に係るメイン制御部１０１による起動処理を説明するフローチャートである。
【００５９】
また図８（Ｂ）は、実施形態に係るサブ制御部１０２による処理を説明するフローチャートである。
【００６０】
メイン制御部１０１とサブ制御部１０２は、電源が投入されるとリセット回路２３０とリセット回路４３０が各リセット信号を所定時間印加し各制御部の状態を初期化する（Ｓ８０１，Ｓ８２１）。このときリセット信号４６０は、バスマスタイネーブルレジスタ６０３を「０」にリセットする。
【００６１】
リセット信号４６０が解除されるとＣＰＵ２１１は、ＲＯＭ２１２のブートプログラム２４０の実行を開始する。ＲＯＭ２１２のブートプログラム２４０、公開鍵２５０、公開鍵２５２は、複合機１００が出荷される前に既に格納されている。ＲＯＭ２１２は、ソフト的に書き換え不可能であり、チップ内の実装のため物理的に改竄も困難なので、改竄の無いことが保障される。リセット信号４６０が解除されるとＣＰＵ４１１は、フラッシュメモリ４２１のブートプログラムの実行を開始する。これ以降の図８（Ａ）のフローチャートのＳ８０２〜Ｓ８０８は全てＣＰＵ２１１が制御し、またこれ以降の図８（Ｂ）のフローチャートのＳ８２２はＣＰＵ４１１が制御する。
【００６２】
Ｓ８０２でＣＰＵ２１１は、ＲＯＭ２１２の内容をＤＲＡＭ２２０へコピーし、プログラムの読み取りアドレスをＲＯＭ２１２からＤＲＡＭ２２０に移す。これはプログラムの読み取り速度がＲＯＭ２１２よりＤＲＡＭ２２０が速いため、プログラムの実行速度が上がるためである。ＣＰＵ２１１はまた、これ以降のプログラムが使用する変数の格納場所としてＤＲＡＭ２２０の空き領域を使用する。一方ＣＰＵ４１１も同様に、Ｓ８２２でフラッシュメモリ４２１の内容をＤＲＡＭ４２０にコピーし、プログラムの読み取りアドレスをフラッシュメモリ４２１からＤＲＡＭ４２０に移す。
【００６３】
次にＳ８０３でＣＰＵ２１１は、ＰＣＩｅ制御部２０３を介して、ＰＣＩｅ制御部４０３のコンフィグレーションレジスタの設定を行い、ＰＣＩｅ制御部２０３が、メモリ書き込み要求（Memory Write Request）又はメモリ読み出し要求（Memory Read Request）を送信可能にする。但し、Ｓ８０３では、ＰＣＩｅ制御部４０３のバスマスタイネーブルレジスタ６０３に「１」をセットしない。
【００６４】
尚、ＣＰＵ４１１の立ち上げ動作はＳ８２２で終了する。但し、図８（Ｂ）のフローチャートは、フラッシュメモリ４２１が改竄されていない場合である。ここで例えば、フラッシュメモリ４２１のアドレス０ｘ８０００００００−０ｘＢＦＦＦＦＦＦＦの領域をライトアクセスするように改竄された場合を考察する。上述したように、ＣＰＵ４１１から見た上記アドレス領域は、メイン制御部１０１のＤＲＡＭ２２０に該当する。従って、バスマスタイネーブルレジスタ６０３がセットされているとＣＰＵ２１１が実行するプログラム、或いは変数領域を壊してＣＰＵ２１１の処理が暴走する恐れがある。よって、Ｓ８０３でバスマスタイネーブルレジスタ６０３に「１」をセットしないことにより、ＣＰＵ４１１がメイン制御部１０１内へアクセスできないようしている。
【００６５】
次にＳ８０４に進みＣＰＵ２１１は、フラッシュメモリ２２１の電子署名２５１を公開鍵２５０で検証する。
【００６６】
ここで検証の内容について説明しておく。この電子署名は、ＲＯＭ２１２の内容から生成したハッシュ値を秘密鍵で暗号化したものである。よって、この電子署名を公開鍵で復号化できれば、その電子署名が秘密鍵で暗号化されたことになり、ハッシュ値が本物であることがわかる。このように書き換え不可能なＲＯＭ２１２の内容から新たにハッシュ値を生成し、それが復号されたハッシュ値と一致すれば、フラッシュメモリ２２１が改竄されていないことが保証できる。
【００６７】
こうしてＳ８０５でＣＰＵ２１１は、検証に成功したかどうか判定し、成功しないときはＳ８１０に進み、操作パネル１１０へエラー表示を行って、メイン制御部１０１の立ち上げ処理を終了する。
【００６８】
一方、Ｓ８０５で検証に成功したと判定するとＳ８０６に進みＣＰＵ２１１は、前述したようにバス２０２、ＰＣＩｅ制御部２０３、ＰＣＩｅ制御部４０３、バス４０２、フラッシュメモリ制御部４０６を介してフラッシュメモリ４２１へリードアクセスする。そしてＳ８０７に進んで、フラッシュメモリ４２１内の電子署名４５０を公開鍵２５２で検証する。この検証内容は、ＣＰＵ２１１がフラッシュメモリ２２１を検証した方法と同様である。
【００６９】
Ｓ８０７での検証に成功するとＳ８０８に進みＣＰＵ２１１は、アドレス０ｘＤ１０００００４へライトデータのビット２を「１」にして、ライトコマンドとライトデータを出力する。これらはバス２０２を介してＰＣＩｅ制御部２０３へ転送され、そこでコンフィグレーション書き込み要求に変換されて送信される。コンフィグレーション書き込み要求を受信したＰＣＩｅ制御部４０３のプロトコル変換部６０１は、コンフィグアドレスデコーダ６０２に０ｘ４を出力するとともに、ライトデータのビット２を「１」にする。これによりアドレスデコーダ６０２はセレクト信号６０４を「１」にする。こうしてバスマスタイネーブルレジスタ６０３は、そのときのＤ入力の「１」を取り込んで、これ以降「１」を維持する。よってこれ以降、イネーブル回路６０５は、バス４０２から出力されるコマンド又はライトデータをマスクせずにプロトコル変換部６０１へ伝える。こうしてＣＰＵ４１１が動作可能になり、ＣＰＵ４１１からメイン制御部１０１へのアクセスが初めて可能になる。こうしてＳ８０８でＣＰＵ２１１の改竄検知処理が終了して、メイン制御部１０１の立ち上げ処理が終了する。こうして立ち上げ処理が終了した後、ＣＰＵ２１１はメインプログラム２４１の実行を開始する。
【００７０】
一方、Ｓ８０７で検証が失敗して改竄が検出された場合はＳ８１１へ分岐する。実施形態では、ＣＰＵ２１１をリセットし、フラッシュメモリ４２１を更新した後にＣＰＵ４１１を再起動する例で説明する。
【００７１】
Ｓ８１１でＣＰＵ２１１は、ＣＰＵ４１１をリセットするためにアドレス０ｘＤ０００００００へライトコマンドとデータ「１」を送信する。これらはＰＣＩｅ制御部２０３でメモリ書き込み要求に変換される。このメモリ書き込み要求を受信したＰＣＩｅ制御部４０３内のプロトコル変換部６０１は、図７に示すアドレス変換論理に従ってアドレス０ｘＤ０００３０００を持つライトコマンドとライトデータの０ｘ１をバス４０２へ出力する。バス４０２は、図５に示すスレーブ選択論理に従って、ライトコマンドをＣＰＵリセットレジスタ４０９へ出力し、ＣＰＵリセットレジスタ４０９は「１」をセットし出力する。これによりＣＰＵ４１１はリセット状態になる。
【００７２】
次にＳ８１２に進みＣＰＵ２１１は、フラッシュメモリ４２１を正しいＲＯＭデータで更新する。このときＣＰＵ２１１は、フラッシュメモリ４２１はアドレス領域０ｘＣ０００００００−０ｘＣＦＦＦＦＦＦＦで見ることができるため、フラッシュメモリ４２１にアクセスすることができる。フラッシュメモリ４２１の更新処理は、イレーズ処理とプログラム処理を順に行うことにより行われる。イレーズ処理は、フラッシュメモリ４２１の所定のアドレスへの所定のデータのライトの組み合わせで行われる。またプログラム処理は、全てのアドレスの書き込み処理を含み、各書き込み処理は、フラッシュメモリ４２１の所定のアドレスへの所定のデータのライトの組み合わせで行われる。尚、ここで正しいＲＯＭデータは、圧縮されてメインプログラム２４１の一部として含んでも良く、或いはネットワーク１０９を介して所定のサーバからダウンロードしても良い。
【００７３】
そしてＳ８１３に進みＣＰＵ２２１は、ＣＰＵ４１１のリセットを解除するために、アドレス０ｘＤ００００００へデータ「０」を書き込んでメイン制御部１０１の立ち上げ処理を終了する。これはＳ８１１のデータを「１」から「０」にしただけであるので、この書き込みの結果、ＣＰＵリセットレジスタ４０９が「１」から「０」に変化する。これによりＣＰＵリセットレジスタ４０９とリセット信号４６０の論理和であるＣＰＵ４１１のリセット信号が「０」となってＣＰＵ４１１のリセットが解除される。これはＣＰＵ４１１にとって、Ｓ８２１のリセット信号が印加されたときと同じであるため、ＣＰＵ４１１はサブプログラム４４０の実行を開始することによりＳ８２２の処理を実行してサブ制御部１０２の立ち上げ処理を終了する。
【００７４】
以上説明したように実施形態によれば、メイン制御部のＣＰＵが、改竄されないメモリに記憶されている鍵を使用して、改竄される可能性のあるメモリの内容を検証し、その検証に成功するとサブ制御部の改竄される可能性のあるメモリの内容を検証する。そして、サブ制御部のメモリの検証に成功して初めてサブ制御部のＣＰＵが動作を開始できるようにする。これにより、メイン制御部のＣＰＵが使用するメモリの内容を書き換えるように改竄されていた場合でもメイン制御部のＣＰＵによる検証処理が正常に終了して、エラー通知ができるようになる。
【００７５】
またサブ制御部のメモリが改竄されていた場合でも、メイン制御部のＣＰＵはその改竄を検知し、その改竄されていたメモリの内容を正常なデータに戻した後、サブ制御部のＣＰＵの動作を開始させることができる。これにより、サブ制御部のメモリが改竄されることによるサブ制御部のＣＰＵの暴走等を防止することができる。
【００７６】
尚、上記実施形態では、サブ制御部のＣＰＵ４１１がメイン制御部１０１へアクセスするのを禁止する手段として、ＰＣＩｅ規格のバスマスタイネーブルを例に説明したが、本発明はこれに限られるものではない。またメイン制御部１０１とサブ制御部１０２とを接続するインターフェースとしてＰＣＩｅを用いたが、本発明はこれに限られることではない。
【００７７】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００７８】
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から逸脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００７９】
１００…複合機、１０１…メイン制御部、１０２…サブ制御部、２１１，４１１…ＣＰＵ、２０３，４０３…ＰＣＩｅ制御部、２１２…ＲＯＭ、２２０…ＤＲＡＭ、２２１，４２１…フラッシュメモリ、２４０…ブートプログラム、２４１…メインプログラム
【図１】
2020107003.tif 000003
【図２】
2020107003.tif 000004
【図３】
2020107003.tif 000005
【図４】
2020107003.tif 000006
【図５】
2020107003.tif 000007
【図６】
2020107003.tif 000008
【図７】
2020107003.tif 000009
【図８】
2020107003.tif 000010