(57)【要約】【課題】マルチコントローラシステムにおいて、処理時間の過剰な長期化を回避しつつ、プログラムの改竄及び劣化といったリスクに対する適切な保護を低コストで実現することのできる仕組みを提供すること【解決手段】第１コントローラにて実行される第１コントローラ用プログラムが正当であるかを判定する第１判定部、を含む前記第１コントローラと、第２コントローラにて実行される第２コントローラ用プログラムが正当であるかを判定する第２判定部、を含む前記第２コントローラと、を備え、前記第１コントローラは、前記第２コントローラ用プログラムが正当であるかを判定するために前記第２判定部により実行される第２コントローラ用正当性判定プログラムが正当であるかを判定する、コントローラシステムを提供する。対応する方法もまた提供される。【選択図】図３
2020187650.tif 000002
【特許請求の範囲】
【請求項１】
第１コントローラにて実行される第１コントローラ用プログラムが正当であるかを判定する第１判定部、を含む前記第１コントローラと、
第２コントローラにて実行される第２コントローラ用プログラムが正当であるかを判定する第２判定部、を含む前記第２コントローラと、
を備え、
前記第１コントローラは、前記第２コントローラ用プログラムが正当であるかを判定するために前記第２判定部により実行される第２コントローラ用正当性判定プログラムが正当であるかを判定する、
コントローラシステム。
【請求項２】
請求項１に記載のコントローラシステムであって、
前記第１判定部は、信頼の基点を提供し、
前記第２判定部を含む前記第２コントローラは、信頼の基点を提供しない、
コントローラシステム。
【請求項３】
請求項１又は請求項２に記載のコントローラシステムであって、
前記第１コントローラは、前記第２コントローラ用正当性判定プログラムが正当であるかを判定するコントローラ間判定部、をさらに含み、
前記コントローラ間判定部は、前記第１コントローラ用プログラムが正当であると前記第１判定部により判定される場合に、前記第１コントローラ用プログラムの実行に基づいて動作する、
コントローラシステム。
【請求項４】
請求項１乃至３のいずれか１項に記載のコントローラシステムであって、
前記第２コントローラは、前記第２コントローラ用正当性判定プログラムを予め記憶するプログラム記憶部、をさらに含む、
コントローラシステム。
【請求項５】
請求項４に記載のコントローラシステムであって、
前記プログラム記憶部は、前記第２コントローラ用正当性判定プログラムに関連付けられる署名であって、署名鍵で暗号化された暗号化済みハッシュ値を含む前記署名をさらに記憶し、
前記第１コントローラは、前記署名鍵に対応する検証鍵を予め記憶する鍵記憶部、をさらに含み、
前記第１コントローラは、前記暗号化済みハッシュ値を前記検証鍵を用いて復号することにより復元されるハッシュ値が、前記第２コントローラ用正当性判定プログラムから導出されるハッシュ値と一致する場合に、前記第２コントローラ用正当性判定プログラムが正当であると判定する、
コントローラシステム。
【請求項６】
請求項１乃至５のいずれか１項に記載のコントローラシステムであって、
前記第２コントローラ用プログラムは、前記第２コントローラにおいて稼働する第２システムをブートする機能を含み、
前記第２コントローラは、前記第２コントローラ用プログラムが正当であると前記第２判定部により判定される場合に、前記第２コントローラ用プログラムを実行して、前記第２システムをブートする、
コントローラシステム。
【請求項７】
請求項６に記載のコントローラシステムであって、
前記第１コントローラは、前記第２コントローラ用プログラムが正当であるかの前記判定を待つことなく、前記第１コントローラにおいて稼働する第１システムのための処理を実行する、
コントローラシステム。
【請求項８】
請求項１乃至７のいずれか１項に記載のコントローラシステムであって、
第３コントローラにて実行される第３コントローラ用プログラムが正当であるかを判定する第３判定部、を含む前記第３コントローラ、をさらに備え、
前記第２コントローラは、前記第３コントローラ用プログラムが正当であるかを判定するために前記第３コントローラにて実行される第３コントローラ用正当性判定プログラムが正当であるかを判定する、
コントローラシステム。
【請求項９】
請求項１乃至８のいずれか１項に記載のコントローラシステムと、
画像を印刷する印刷部、原稿を走査して前記原稿の画像を読み取る画像読み取り部、及びユーザによる操作を受け付ける操作部、のうちの少なくとも１つと、
を含み、
前記第２コントローラは、前記印刷部、前記画像読み取り部、及び前記操作部のうちの前記少なくとも１つを制御する、
情報処理装置。
【請求項１０】
第１コントローラ及び第２コントローラを備えるコントローラシステムにおけるプログラムの正当性を検証する方法であって、
前記第１コントローラにおいて、第１コントローラにて実行される第１コントローラ用プログラムが正当であるかを判定することと、
前記第１コントローラにおいて、第２コントローラ用プログラムが正当であるかを判定するために前記第２コントローラにて実行される第２コントローラ用正当性判定プログラムが正当であるかを判定することと、
前記第２コントローラにおいて、前記第２コントローラ用プログラムが正当であるかを判定することと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的にコントローラシステムに関し、より具体的には、コントローラシステムにおいてプログラムの正当性を検証することに関する。
【背景技術】
【０００２】
情報機器に組み込まれるファームウェアなどのプログラムを改竄して、情報機器を不正に利用しようとするサイバー攻撃が知られている。そうした攻撃に対する解決策の１つは、セキュアブートである。セキュアブートでは、通常、ブートプログラムをプロセッサのためにロードするブートローダが、ブートプログラムの実行前にブートプログラムのデジタル署名（以下、単に署名ともいう）を検証して、ブートプログラムが正当であることを確認する。ブートローダは、ロジックの書き換えを困難にする形で（例えば、ハードウェアを利用して）実装され、信頼の基点（Root  Of  Trust；ＲｏＴ）を提供する。ＲｏＴとして信頼されるブートローダにより正当であると判定されたブートプログラムは、ＢＩＯＳ（Basic  Input  Output  System）及びオペレーティングシステムといった他のプログラムの正当性を確認する。このようにして信頼の連鎖を形成しながらシステムを構成する全てのプログラムの正当性を確認することで、プログラムの改竄による不正利用に対し情報機器を保護することができる。こうした手法は、プログラムの改竄ではなく、プログラムデータの劣化に起因する動作不良に対する情報機器の保護をも提供する。
【０００３】
プログラムのデジタル署名は、プログラムデータから導出されるハッシュ値を公開鍵暗号の鍵ペアのうちの秘密鍵である署名鍵で暗号化することにより生成される。デジタル署名を生成するための手法として、例えば、ＲＳＡ暗号に基づく方式、ＤＳＡ（Digital  Signature  Algorithm）方式及びＥＣＤＳＡ（Elliptic  Curve  DSA）方式が知られている。生成されたデジタル署名は、典型的には、プログラムデータと共に不揮発性のメモリ内に記憶される。プログラムの正当性の確認は、メモリ内のプログラムデータから導出されるハッシュ値が、検証鍵（鍵ペアのうちの公開鍵）を用いてデジタル署名から復元されるハッシュ値に一致するかを検証することにより行われる。これらハッシュ値が一致する場合には、プログラムデータは改竄されておらず、劣化もしていない。
【０００４】
特許文献１は、１つのコントローラ内に複数のＣＰＵ（Central  Processing  Unit）を含む複合機のプラットフォームにおける改竄検知のための手法を提案している。具体的には、特許文献１により開示された手法では、サブＣＰＵ用のプログラム及びメインＣＰＵ用のプログラムの正当性をサブＣＰＵが一括して検証することで、改竄検知のための処理時間の短縮が実現される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−０２１９５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、相互接続する複数のコントローラが存在するマルチコントローラシステムでは、単一のコントローラが一括して全てのプログラムの正当性を検証しようとすると、コントローラ間の通信のために却って処理時間が長期化し得る。一方、個々のコントローラが互いに独立してコントローラ内のプログラムの正当性を検証する仕組みを実装しようとすると、実装コストが多大となり得る。
【０００７】
したがって、マルチコントローラシステムにおいて、処理時間の過剰な長期化を回避しつつ、プログラムの改竄及び劣化といったリスクに対する適切な保護を低コストで実現することのできる仕組みが提供されることが求められている。
【課題を解決するための手段】
【０００８】
ある観点によれば、第１コントローラにて実行される第１コントローラ用プログラムが正当であるかを判定する第１判定部、を含む上記第１コントローラと、第２コントローラにて実行される第２コントローラ用プログラムが正当であるかを判定する第２判定部、を含む上記第２コントローラと、を備え、上記第１コントローラは、上記第２コントローラ用プログラムが正当であるかを判定するために上記第２判定部により実行される第２コントローラ用正当性判定プログラムが正当であるかを判定する、コントローラシステムが提供される。
【発明の効果】
【０００９】
本開示によれば、マルチコントローラシステムにおいて、処理時間の過剰な長期化を回避しつつ、プログラムの改竄及び劣化といったリスクに対する適切な保護を低コストで実現することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態に係る複合機のハードウェア構成図。
【図２】一実施形態に係るメインコントローラ及びサブコントローラの構成図。
【図３】一実施形態に係る複合機におけるプログラムの配置の一例を信頼の連鎖と共に示すプログラム配置図。
【図４】一実施形態に係るコントローラシステムにより実行される処理の概略的な流れの一例を示すフローチャート。
【図５】図４に示したメインコントローラ用プログラム正当性判定処理の流れの一例を示すフローチャート。
【図６】図４に示したコントローラ間正当性判定処理の流れの一例を示すフローチャート。
【図７】図４に示したサブコントローラ用プログラム正当性判定処理の流れの一例を示すフローチャート。
【図８】一変形例に係る多段階のコントローラ間検証について説明するための説明図。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一の又は同様の構成に同一の参照番号を付し、重複した説明は省略される。
【００１２】
＜＜１．装置の構成例＞＞
＜１−１．全体的な構成＞
本開示に係る技術は、限定ではないものの、複数のコントローラを備えるコントローラシステムをプラットフォームとして有する情報処理装置の全般に適用され得る。本節では、本開示に係る技術がデジタル複合機（Multi-Function  Peripheral（ＭＦＰ））に適用される例を説明する。以下では、デジタル複合機を単に複合機ともいう。しかしながら、本開示に係る技術は、複合機に限定されず、いかなる種類の情報処理装置に適用されてもよい。
【００１３】
図１は、一実施形態に係る複合機１０のハードウェア構成図である。図１を参照すると、複合機１０は、メインコントローラ２０、スキャナコントローラ３０、スキャナ４０、プリンタコントローラ５０、プリンタ６０、ユーザインタフェース（ＵＩ）コントローラ７０、及びＵＩ８０を備える。
【００１４】
メインコントローラ２０は、複合機１０に含まれる複数のコンポーネントの動作を統合的に制御するコントローラである。メインコントローラ２０は、後述するスキャナコントローラ３０、プリンタコントローラ５０及びＵＩコントローラ７０と接続される。メインコントローラ２０は、さらに、複合機１０の外部のネットワーク又は外部装置と有線で又は無線で接続されてもよい。
【００１５】
スキャナコントローラ３０は、スキャナ４０の動作を制御するコントローラである。スキャナ４０は、原稿を走査して当該原稿の画像を読み取る画像読み取り部としての役割を有する。例えば、スキャナ４０により原稿の画像が読み取られると、スキャナコントローラ３０は、読み取られた画像について必要に応じて画像処理を実行し、処理された画像をメインコントローラ２０へ送信する。
【００１６】
プリンタコントローラ５０は、プリンタ６０の動作を制御するコントローラである。プリンタ６０は、画像を印刷する印刷部としての役割を有する。例えば、プリンタコントローラ５０は、印刷されるべき画像をメインコントローラ２０から受信し、受信した画像について必要に応じて画像処理を実行し、処理後の画像をプリンタ６０へ出力する。プリンタ６０は、プリンタコントローラ５０から入力される画像を印刷する。プリンタ６０は、メインコントローラ２０による制御の下で、スキャナ４０により読み取られた画像をスキャナコントローラ３０及びプリンタコントローラ５０を介して受信し、受信した画像を印刷（即ち、コピー）してもよい。
【００１７】
ＵＩコントローラ７０は、ＵＩ８０を介したユーザによる操作の受け付け及びユーザへの情報の出力を制御するコントローラである。ＵＩ８０は、ユーザによる操作を受け付ける操作部としての役割を有する。例えば、ＵＩ８０は、複合機１０の動作に関するメニューをディスプレイ（図示せず）へ表示する。また、ＵＩ８０は、例えばタッチパネル、ボタン又はスイッチといった入力インタフェース（図示せず）を介して、原稿のスキャン若しくはコピー、又は画像の印刷といった機能の実行を求めるユーザ操作を受け付ける。ＵＩコントローラ７０は、こうしたユーザ操作に応じて、対応するコマンドをメインコントローラ２０へ送信する。メインコントローラ２０は、コマンドの受信に応じて、スキャナコントローラ３０を介してスキャナ４０に原稿をスキャンさせ、及び／又はプリンタコントローラ５０を介してプリンタ６０に画像を印刷させる。
【００１８】
以下の説明において、メインコントローラ２０と通信し及びメインコントローラ２０により制御されるスキャナコントローラ３０、プリンタコントローラ５０及びＵＩコントローラ７０の各々を、サブコントローラという。メインコントローラ２０及びサブコントローラの各々は、１つ以上のプログラムを記憶するメモリと、プログラムを実行するプロセッサ（例えば、ＣＰＵ）とを有する。これらプログラムのより詳細な構成について、後にさらに説明する。
【００１９】
＜１−２．メインコントローラの構成＞
図２は、一実施形態に係るメインコントローラ及びサブコントローラの構成図である。ここでは、サブコントローラがプリンタコントローラ５０である例が示されている。
【００２０】
図２を参照すると、メインコントローラ２０は、システムオンチップ（ＳＯＣ）２１、ＤＲＡＭ１２１、ＮＯＲフラッシュメモリ１２２及びＬＥＤ１２５を含む。ＳＯＣ２１は、メインコントローラ２０の制御機能を実現するためのコンポーネントを集積した半導体チップである。具体的には、ＳＯＣ２１は、システムバス１００、ＣＰＵ１０１、ＣＰＵ１０２、ＲＯＭ１０３、ＯＴＰ１０４、セキュアアシスト部１０５及び画像処理部１０６を含む。ＳＯＣ２１は、さらに、ＲＡＭインタフェース（Ｉ／Ｆ）１１１、フラッシュメモリＩ／Ｆ１１２、プリンタコントローラＩ／Ｆ１１３、画像送信部１１４及び外部ポートＩ／Ｆ１１５を含む。システムバス１００は、ＳＯＣ２１に含まれるこれらコンポーネントを相互に接続する。
【００２１】
ＣＰＵ１０１は、後述するブートローダ（ＩＰＬ（Initial  Program  Loader）ともいう）を実行するプロセッサである。ＣＰＵ１０１は、ブートローダを実行してブートプログラムが正当であるか（例えば、改竄又は劣化により変化していないか）を判定し、正当性が肯定されると、ＣＰＵ１０２のリセットを解除する。ブートプログラムが正当であるかの判定は、ブートプログラムに関連付けられる署名を検証することにより行われる。追加的に、ＣＰＵ１０１は、メインコントローラ２０用のブート以外の目的のための１つ以上のプログラムが正当であるかを判定してもよい。
【００２２】
ＣＰＵ１０２は、正当であると判定されたブートプログラムを実行して、メインコントローラ２０のシステムを起動する。さらに、ＣＰＵ１０２は、正当であると判定されたメインコントローラ２０用の他のプログラムを実行して、メインコントローラ２０の多様なコンポーネントを制御してもよい。本実施形態において、メインコントローラ２０用のプログラムは、少なくともメインコントローラ２０において稼働する第１システムをブートする機能を含む。第１システムは、例えば、メインコントローラ２０のＢＩＯＳ及びオペレーティングシステムを含み得る。さらに、本実施形態において、ＣＰＵ１０２は、サブコントローラであるプリンタコントローラ５０において使用される正当性判定プログラムが正当であるかを、当該プログラムに関連付けられる署名を検証することにより判定する。一例として、プリンタコントローラ５０用の正当性判定プログラム及びその署名は、後述するＮＯＲフラッシュメモリ２２２内に予め記憶され、メインコントローラＩ／Ｆ２０８及びプリンタコントローラＩ／Ｆ１１３を介して読み出される。ＣＰＵ１０２は、プリンタコントローラ５０用の正当性判定プログラムが正当であると判定される場合に、プリンタコントローラ５０のＣＰＵ２０２のリセットを解除する。
【００２３】
ＲＯＭ（Read  Only  Memory）１０３は、ＣＰＵ１０１により実行される上述したブートローダを予め記憶する。ＲＯＭ１０３は、例えば、一旦書き込まれたデータの書き換えが不能なマスクＲＯＭで構成され得る。それにより、ブートローダのロジックの書き換えが困難とされ、ブートローダ（あるいはＣＰＵ１０１）をＲｏＴとして位置付けることが可能となる。
【００２４】
ＯＴＰ（One  Time  Programmable  ROM）１０４は、製造時に一度だけ書き込みが可能なＲＯＭであり、個々のプログラムに関連付けられる署名の検証の際に利用される検証鍵を記憶する。検証鍵は、公開鍵暗号の鍵ペアにおける公開鍵に該当し、秘密鍵に該当する署名鍵で暗号化済みのプログラムのハッシュ値（即ち、署名）から正当なハッシュ値を復元することを可能にする。
【００２５】
セキュアアシスト部１０５は、プログラムデータから当該プログラムデータのハッシュ値を算出する機能を提供することにより、署名の検証を支援する。例えば、ＮＯＲフラッシュメモリ１２２から読み出されるブートプログラムのプログラムデータから算出されるハッシュ値が、当該プログラムの署名から復元されるハッシュ値に一致しない場合、ブートプログラムは正当でないと判定され得る。これは、ブートプログラムが改竄又は劣化に起因して正当な開発者の意図に反して変化していることを意味する。同様に、ＮＯＲフラッシュメモリ２２２から読み出される正当性判定プログラムから算出されるハッシュ値が、当該プログラムの署名から復元されるハッシュ値に一致しない場合、その正当性判定プログラムは正当でないと判定され得る。セキュアアシスト部１０５は、さらに、署名鍵で暗号化された暗号化済みデータを、ＯＴＰ１０４に記憶されている検証鍵で復号する機能をも提供する。例えば、セキュアアシスト部１０５は、ブートプログラムに関連付けられる署名の復号、及びプリンタコントローラ５０用の正当性判定プログラムに関連付けられる署名の復号のために使用され得る。複数のプログラムの署名は、それぞれのプログラムに固有の異なる検証鍵で復号されてもよく、又は単一の共通的な検証鍵で復号されてもよい。
【００２６】
画像処理部１０６は、スキャナコントローラ３０から受信される読み取り画像についてのシェーディング、及びプリンタコントローラ５０へ送信される印刷画像についてのハーフトーンといった画像処理を実行するコンポーネントである。
【００２７】
ＲＡＭ  Ｉ／Ｆ１１１は、ＳＯＣ２１によるＤＲＡＭ１２１へのアクセスのためのインタフェースである。ＲＡＭ  Ｉ／Ｆ１１１は、例えば、ＤＲＡＭ１２１からのデータの読み出し及びＤＲＡＭ１２１へのデータの書き込みといった動作を制御し得る。ＤＲＡＭ１２１は、ＣＰＵ１０２及び画像処理部１０６のためのワークメモリとして使用され、ＣＰＵ１０２により実行されるプログラム及びその他のデータを一時的に記憶する。
【００２８】
フラッシュメモリＩ／Ｆ１１２は、ＳＯＣ２１によるＮＯＲフラッシュメモリ１２２へのアクセスのためのインタフェースである。フラッシュメモリＩ／Ｆ１１２は、例えば、ＮＯＲフラッシュメモリ１２２からのデータの読み出し及びＮＯＲフラッシュメモリ１２２へのデータの書き込みといった動作を制御し得る。ＮＯＲフラッシュメモリ１２２は、上述したブートプログラム及び当該ブートプログラムに関連付けられる署名データを記憶する。
【００２９】
プリンタコントローラＩ／Ｆ１１３は、メインコントローラ２０によるプリンタコントローラ５０との通信のためのインタフェースである。本実施形態において、メインコントローラ２０は、プリンタコントローラＩ／Ｆ１１３を介して、後述するプリンタコントローラ５０内のメモリから読み出されるデータ（例えば、プリンタコントローラ５０用の正当性判定プログラム及び署名）を受信し得る。
【００３０】
画像送信部１１４は、プリンタ６０により印刷されるべき画像を、メインコントローラ２０からプリンタコントローラ５０へ送信する。プリンタ６０により印刷されるべき画像は、例えば、画像処理部１０６により処理されたハーフトーン画像であってもよい。
【００３１】
外部ポートＩ／Ｆ１１５は、複合機１０の入出力機能を提供する汎用のポートを制御するインタフェースである。例えば、外部ポートＩ／Ｆ１１５は、必要に応じて、出力ポート（図示せず）を介してＬＥＤ１２５を点灯し、消灯し又は点滅させてもよい。外部ポートＩ／Ｆ１１５は、複合機１０に発生した異常をユーザへ報知するために、（例えば、ソフトウェア異常又はハードウェア異常といった異常の種類に対応するパターンで）ＬＥＤ１２５を点灯させ又は点滅させてもよい。
【００３２】
＜１−３．サブコントローラの構成＞
プリンタコントローラ５０は、上述したように、一実施形態に係る複合機１０のサブコントローラの一例である。
【００３３】
図２を参照すると、プリンタコントローラ５０は、ＳＯＣ５１、ＤＲＡＭ２２１及びＮＯＲフラッシュメモリ２２２を含む。ＳＯＣ５１は、プリンタコントローラ５０の制御機能を実現するためのコンポーネントを集積した半導体チップである。具体的には、ＳＯＣ５１は、システムバス２００、ＣＰＵ２０２、画像処理部２０６、メインコントローラＩ／Ｆ２０８、画像受信部２０９、ＲＡＭ  Ｉ／Ｆ２１１、フラッシュメモリＩ／Ｆ２１２、システム制御部２１５及びプリンタＩ／Ｆ２１６を含む。システムバス２００は、ＳＯＣ５１に含まれるこれらコンポーネントを相互に接続する。
【００３４】
ＣＰＵ２０２は、プリンタコントローラ５０用の正当性判定プログラムがメインコントローラ２０において正当であると判定されると、当該正当性判定プログラムを実行して、プリンタコントローラ５０用の他のプログラムの正当性を判定する。プリンタコントローラ５０用の正当性判定プログラムの正当性は、上述したように、メインコントローラ２０のＣＰＵ１０２において、当該正当性判定プログラムに関連付けられる署名を検証することにより判定され得る。本実施形態において、プリンタコントローラ５０用のプログラムは、少なくともプリンタコントローラ５０において稼働する第２システムをブートする機能を含む。第２システムは、例えば、プリンタコントローラ５０のＢＩＯＳ及びオペレーティングシステムを含み得る。追加的に、ＣＰＵ２０２は、正当であると判定されたプリンタコントローラ５０用の他のプログラムを実行して、プリンタコントローラ５０の多様なコンポーネントを制御してもよい。
【００３５】
画像処理部２０６は、メインコントローラ２０から受信されるハーフトーン画像について、微小変倍及びＰＷＭ（Pulse  Width  Modulation）といった印刷用の事前処理を実行するコンポーネントである。
【００３６】
メインコントローラＩ／Ｆ２０８は、プリンタコントローラ５０によるメインコントローラ２０との通信のためのインタフェースである。本実施形態において、プリンタコントローラ５０は、メインコントローラＩ／Ｆ２０８を介して、後述するＮＯＲフラッシュメモリ２２２から読み出されるプリンタコントローラ５０用の正当性判定プログラム及び署名をメインコントローラ２０へ送信し得る。
【００３７】
画像受信部２０９は、プリンタ６０により印刷されるべき画像を、メインコントローラ２０から受信する。画像受信部２０９により受信される画像は、例えば、メインコントローラ２０において処理されたハーフトーン画像であってもよい。
【００３８】
ＲＡＭ  Ｉ／Ｆ２１１は、ＳＯＣ５１によるＤＲＡＭ２２１へのアクセスのためのインタフェースである。ＲＡＭ  Ｉ／Ｆ２１１は、例えば、ＤＲＡＭ２２１からのデータの読み出し及びＤＲＡＭ２２１へのデータの書き込みといった動作を制御し得る。ＤＲＡＭ２２１は、ＣＰＵ２０２及び画像処理部２０６のためのワークメモリとして使用され、ＣＰＵ２０２により実行されるプログラム及びその他のデータを一時的に記憶する。
【００３９】
フラッシュメモリＩ／Ｆ２１２は、ＳＯＣ５１によるＮＯＲフラッシュメモリ２２２へのアクセスのためのインタフェースである。フラッシュメモリＩ／Ｆ２１２は、例えば、ＮＯＲフラッシュメモリ２２２からのデータの読み出し及びＮＯＲフラッシュメモリ２２２へのデータの書き込みといった動作を制御し得る。ＮＯＲフラッシュメモリ２２２は、上述したプリンタコントローラ５０用の正当性判定プログラム及び当該正当性判定プログラムに関連付けられる署名データを記憶する。
【００４０】
システム制御部２１５は、プリンタコントローラ５０の電源の投入に応じて、プリンタコントローラ５０の最小限の機能をアクティブ化する。例えば、プリンタコントローラ５０の最小限の機能は、メインコントローラＩ／Ｆ２０８、フラッシュメモリＩ／Ｆ２１２及びＮＯＲフラッシュメモリ２２２の機能、並びにそれら機能の間のバスを介した通信機能を含んでもよい。これら機能のアクティブ化は、例えば、ハードシーケンサのみで制御されてもよい。システム制御部２１５は、ＣＰＵ２０２及びメインコントローラＩ／Ｆ２０８と連携して、ＳＯＣ５１におけるクロック制御及びリセット制御を行ってもよい。
【００４１】
プリンタＩ／Ｆ２１６は、プリンタコントローラ５０によるプリンタ６０の制御に関連する制御通信、及び印刷用画像のプリンタ６０への送信のためのインタフェースである。
【００４２】
＜１−４．ソフトウェア構成＞
図３は、一実施形態に係る複合機１０におけるプログラムの配置の一例を信頼の連鎖と共に示すプログラム配置図である。
【００４３】
図３に示した例では、メインコントローラ２０において、ブートローダ３００がメインコントローラ２０のＲＯＭ１０３に配置され、ブートプログラム３１０及びブートプログラムに関連付けられる署名３１４がＮＯＲフラッシュメモリ１２２に配置される。また、サブコントローラであるプリンタコントローラ５０において、正当性判定プログラム３３０、正当性判定プログラム３３０に関連付けられる署名３２４、及びシステム起動プログラム３２５がＮＯＲフラッシュメモリ２２２に配置される。
【００４４】
ブートローダ３００は、複合機１０の電源の投入に応じてＣＰＵ１０１により実行されるプログラムである。ブートローダ３００は、ロジックの書き換えを困難にする形でＲＯＭ１０３に記憶され、それにより、複合機１０のシステム全体の信頼性を保証するための信頼の連鎖の出発点であるＲｏＴを提供する。ブートローダ３００は、第１判定部３０１を含む。
【００４５】
第１判定部３０１は、メインコントローラ２０にて実行される１つ以上のメインコントローラ用プログラムが正当であるかを検証する。図３の例において、メインコントローラ用プログラムは、ブートプログラム３１０を含む。したがって、第１判定部３０１は、ブートプログラム３１０が正当であるかを、ブートプログラム３１０に関連付けられる署名３１４を検証することにより判定する（図中の矢印Ａ１）。より具体的には、例えば、署名３１４に含まれる暗号化済みハッシュ値から復元されるハッシュ値が、ブートプログラム３１０から導出されるハッシュ値に一致する場合には、ブートプログラム３１０は正当であると判定される。これらハッシュ値が一致しない場合には、ブートプログラム３１０が改竄又は劣化に起因して変化していると推定され、ブートプログラム３１０は正当でないと判定される。暗号化済みハッシュ値からのハッシュ値の復元は、ＯＴＰ１０４により予め記憶される検証鍵で暗号化済みハッシュ値を復号することにより行われ得る。なお、署名を生成し及び検証するためのデジタル署名方式として、ＲＳＡ暗号に基づく方式、ＤＳＡ方式及びＥＣＤＳＡ方式といった、いかなる種類の方式が用いられてもよい。第１判定部３０１は、ブートプログラム３１０が正当であると判定される場合には、ＣＰＵ１０２のリセットを解除し、ＣＰＵ１０２にブートプログラム３１０を実行させる。
【００４６】
ブートプログラム３１０は、ブートローダ３００によりブートプログラム３１０が正当であると判定された場合にＣＰＵ１０２により実行される、メインコントローラ２０用のプログラムである。図３の例において、ブートプログラム３１０は、初期化部３１１及びコントローラ間判定部３１２を含む。初期化部３１１は、ＲＡＭ  Ｉ／Ｆ１１１及びプリンタコントローラＩ／Ｆ１１３といったメインコントローラ２０の様々なコンポーネントの初期化を行う。初期化部３１１は、メインコントローラ２０において稼働する第１システムのＢＩＯＳ及びオペレーティングシステムを起動してもよい。
【００４７】
コントローラ間判定部３１２は、後述するプリンタコントローラ５０用の正当性判定プログラム３３０が正当であるかを、正当性判定プログラム３３０に関連付けられる署名３２４を検証することにより判定する（図中の矢印Ａ２）。この正当性の判定は、上述したように、第１判定部３０１により正当であると判定されたブートプログラム３１０（メインコントローラ用プログラムの１つ）の実行に基づく。具体的には、コントローラ間判定部３１２は、署名３２４に含まれる暗号化済みハッシュ値から復元されるハッシュ値が、正当性判定プログラム３３０から導出されるハッシュ値に一致する場合には、正当性判定プログラム３３０は正当であると判定される。これらハッシュ値が一致しない場合には、正当性判定プログラム３３０が改竄又は劣化に起因して変化していると推定され、正当性判定プログラム３３０は正当でないと判定される。暗号化済みハッシュ値からのハッシュ値の復元は、ＯＴＰ１０４により予め記憶される検証鍵で暗号化済みハッシュ値を復号することにより行われ得る。ここでも、デジタル署名方式として、ＲＳＡ暗号に基づく方式、ＤＳＡ方式及びＥＣＤＳＡ方式といった、いかなる種類の方式が用いられてもよい。コントローラ間判定部３１２は、正当性判定プログラム３３０が正当であると判定される場合には、プリンタコントローラ５０のＣＰＵ２０２のリセットを解除し、ＣＰＵ２０２に正当性判定プログラム３３０を実行させる。
【００４８】
なお、図３には、初期化部３１１及びコントローラ間判定部３１２が単一のプログラムに含まれる例を示しているが、初期化部３１１及びコントローラ間判定部３１２は、別個のプログラムにそれぞれ含まれてもよい。
【００４９】
正当性判定プログラム３３０は、プリンタコントローラ５０用の１つ以上のプログラムが正当であるかを判定するためにＣＰＵ２０２により実行されるプログラムである。正当性判定プログラム３３０は、ブートプログラム３１０により正当性判定プログラム３３０が正当であると判定された場合に実行される。図３の例において、正当性判定プログラム３３０は、第２判定部３２１を含む。
【００５０】
第２判定部３２１は、プリンタコントローラ５０にて実行されるプリンタコントローラ５０用の１つ以上のプログラム（即ち、サブコントローラ用プログラム）が正当であるかを検証する。図３の例において、サブコントローラ用プログラムは、システム起動プログラム３２５を含む。したがって、第２判定部３２１は、システム起動プログラム３２５が正当であるかを、例えばシステム起動プログラム３２５に関連付けられる署名又はハッシュ値を検証することにより判定する（図中の矢印Ａ３）。システム起動プログラム３２５の署名又はハッシュ値は、正当性判定プログラム３３０により保持されていてもよく、又はプリンタコントローラ５０内のいずれかのメモリに記憶されていてもよい。ここでの正当性の判定は、上述したブートプログラム３１０及び正当性判定プログラム３３０についての判定と同様に行われてよい。第２判定部３２１は、システム起動プログラム３２５が正当であると判定される場合には、ＣＰＵ２０２にシステム起動プログラム３２５を実行させる。
【００５１】
システム起動プログラム３２５は、第２判定部３２１によりシステム起動プログラム３２５が正当であると判定された場合に実行されるプログラムである。システム起動プログラム３２５は、例えば、プリンタコントローラ５０において稼働する第２システムのＢＩＯＳ及びオペレーティングシステムを起動（即ち、第２システムをブート）してもよい。
【００５２】
ここで、メインコントローラ２０は、プリンタコントローラ５０にて正当性判定プログラム３３０により行われるプリンタコントローラ５０用のプログラムが正当であるかの判定を待つことなく、メインコントローラ２０のシステムのための処理を実行し得る。このように、本実施形態では、正当性が保証されるべきサブコントローラの全てのプログラムについてメインコントローラで正当性が判定されるケースと比較して、より早期にメインコントローラのリソースをシステムの制御のために解放することが可能である。
【００５３】
図３に示したように、メインコントローラ２０のブートローダ３００（あるいは第１判定部３０１）がＲｏＴを提供する一方で、サブコントローラであるプリンタコントローラ５０はＲｏＴを提供しない。このように、本実施形態では、相互接続する複数のコントローラが存在するマルチコントローラシステムにおいて、メインコントローラ以外のコントローラへのＲｏＴの実装が省略されるため、実装コストの増大を抑制することができる。また、本実施形態では、サブコントローラにおいて、サブコントローラにて実行されるサブコントローラ用プログラムの正当性が、サブコントローラ用の正当性判定プログラムの正当性を除いて、サブコントローラ内で判定される。したがって、正当性の検証のためにコントローラ間で数多くのデータビットを通信する必要性が回避されるため、通信負荷を軽減できると共に、（他のコントローラの処理の終了を待つための待ち時間を含む）正当性の検証のための処理時間を短縮することができる。そのうえ、本実施形態では、メインコントローラ２０において提供されるＲｏＴを起点として、複数のコントローラをまたいだ信頼の連鎖が途切れることなく構築される。そのため、マルチコントローラシステム全体として、プログラムの改竄及び劣化といったリスクに対する適切な保護（セキュアブート）を実現することができる。
【００５４】
また、本実施形態において、プリンタコントローラ５０のＮＯＲフラッシュメモリ２２２は、上述したように、サブコントローラ用正当性判定プログラムを当該プログラムに関連付けられる署名と共に予め記憶するプログラム記憶部としての役割を有する。一方、メインコントローラ２０のＯＴＰ１０４は、その署名を生成する際に使用された署名鍵に対応する検証鍵を予め記憶する鍵記憶部としての役割を有する。このように、サブコントローラ側でサブコントローラ用正当性判定プログラム及びその署名を保持し、メインコントローラ側で検証鍵を保持する構成を採用することで、コントローラ間の高いレベルの独立性を確保することができる。即ち、サブコントローラ側のシステムの修正のためにプログラムを正当に変更する場合には、サブコントローラ側のデータ（プログラム及び署名）のみを更新すればよく、メインコントローラへの影響が回避される。
【００５５】
＜＜２．処理の流れの例＞＞
＜２−１．概略的な流れ＞
図４は、一実施形態に係るコントローラシステムにより実行される処理の概略的な流れの一例を示すフローチャートである。図４に示した処理は、第１コントローラ及び第２コントローラを備えるコントローラシステムにおいて、プログラムの正当性を検証するために実行され得る。第１コントローラはメインコントローラであってもよく、第２コントローラはサブコントローラであってもよい。なお、本明細書では、信頼の連鎖において基点を提供するコントローラをメインコントローラ、それ以外のコントローラをサブコントローラと称している。メイン及びサブとの用語は、単に信頼の連鎖における位置関係（信頼の基点を提供するものがメインであり、それ以外がサブである）を意味し、他の何らの階層的関係を示唆するものではない。
【００５６】
具体的な例として、図４に示した処理は、複合機１０のメインコントローラ２０及びプリンタコントローラ５０により実行されるものとする。なお、以下の説明では、処理ステップをＳ（ステップ）を略記する。
【００５７】
まず、Ｓ１０で、メインコントローラ２０は、メインコントローラ用プログラム正当性判定処理を実行する。メインコントローラ用プログラム正当性判定処理は、例えば複合機１０の電源の投入に応じてリセットを解除されたＣＰＵ１０１により実行され得る。メインコントローラ用プログラム正当性判定処理のより詳細な流れの一例について、後にさらに説明する。
【００５８】
メインコントローラ用プログラム正当性判定処理の結果として、メインコントローラ用プログラムが正当であると判定された場合、Ｓ１５での分岐を経て、処理はＳ２０へ進む。メインコントローラ用プログラムが正当でないと判定された場合、処理はＳ４０へ進む。
【００５９】
メインコントローラ用プログラムが正当であると判定された場合、Ｓ２０で、メインコントローラ２０は、さらにコントローラ間正当性判定処理を実行する。コントローラ間正当性判定処理における正当性判定の対象は、プリンタコントローラ５０の正当性判定プログラム３３０のみである。コントローラ間正当性判定処理は、例えばＳ１０における正当性判定の結果リセットを解除されたＣＰＵ１０２により実行され得る。コントローラ間正当性判定処理のより詳細な流れの一例について、後にさらに説明する。
【００６０】
コントローラ間正当性判定処理の結果として、正当性判定プログラム３３０が正当であると判定された場合、Ｓ２５での分岐を経て、処理はＳ３０へ進む。一方、正当性判定プログラム３３０が正当でないと判定された場合、処理はＳ４０へ進む。
【００６１】
正当性判定プログラム３３０が正当であると判定された場合、Ｓ２８で、メインコントローラ２０は、Ｓ３０でのサブコントローラ用プログラムの正当性の判定を待つことなく、メインコントローラ２０のシステムのための処理を実行する。その間、Ｓ３０で、サブコントローラであるプリンタコントローラ５０は、サブコントローラ用プログラム正当性判定処理を実行する。サブコントローラ用プログラム正当性判定処理は、例えばＳ２０における正当性判定の結果リセットを解除されたＣＰＵ２０２により実行され得る。サブコントローラ用プログラム正当性判定処理のより詳細な流れの一例について、後にさらに説明する。
【００６２】
サブコントローラ用プログラム正当性判定処理の結果として、サブコントローラ用プログラムが正当であると判定された場合、Ｓ３５での分岐を経て、処理はＳ３８へ進む。一方、サブコントローラ用プログラムが正当でないと判定された場合、処理はＳ４０へ進む。
【００６３】
サブコントローラ用プログラムが正当であると判定された場合、Ｓ３８で、サブコントローラであるプリンタコントローラ５０は、プリンタコントローラ５０のシステムのための処理を実行する。
【００６４】
Ｓ１０、Ｓ２０及びＳ３０のうちの少なくとも１つでプログラムの正当性が否定された場合、複合機１０の起動は失敗する。この場合、Ｓ４０で、メインコントローラ２０は、エラー通知を実行する。エラー通知は、例えば、ＬＥＤ１２５の点滅、警報音の出力又はディスプレイ上でのエラーメッセージの表示など、いかなる手法で行われてもよい。
【００６５】
＜２−２．メインコントローラ内の正当性判定＞
図５は、図４のＳ１０に示したメインコントローラ用プログラム正当性判定処理の流れの一例を示すフローチャートである。この処理は、装置の電源の投入に応じてリセットを解除されるメインコントローラのプロセッサ（例えば、複合機１０のメインコントローラ２０のＣＰＵ１０１）により実行され得る。
【００６６】
まず、Ｓ１００で、ＣＰＵ１０１は、ＲＯＭ１０３に予め記憶されているブートローダ３００を起動する。
【００６７】
次いで、Ｓ１０１で、ＣＰＵ１０１は、ブートプログラム３１０をＮＯＲフラッシュメモリ１２２から読み出し、ブートプログラム３１０のハッシュ値をセキュアアシスト部１０５に算出させることにより導出する。
【００６８】
次いで、Ｓ１０２で、ＣＰＵ１０１は、ブートプログラム３１０に関連付けられる署名３１４をＮＯＲフラッシュメモリ１２２から読み出す。そして、ＣＰＵ１０１は、ＯＴＰ１０４に記憶されている検証鍵でセキュアアシスト部１０５に署名３１４を復号させることにより、ブートプログラム３１０の正当なハッシュ値を復元する。
【００６９】
次いで、Ｓ１０３で、ＣＰＵ１０１は、Ｓ１０１で導出したハッシュ値がＳ１０２で復元したハッシュ値に一致するかを判定する。これらハッシュ値が一致する場合には、処理はＳ１０４へ進む。一方、ハッシュ値が一致しない場合には、処理はＳ１０６へ進む。
【００７０】
ハッシュ値が一致する場合、Ｓ１０４で、ＣＰＵ１０１は、ブートプログラム３１０が正当であると判定し、Ｓ１０５で、メインコントローラ２０のＣＰＵ１０２のリセットを解除する。その結果、安全であることが確認されたブートプログラム３１０の実行がＣＰＵ１０２により開始され得る。
【００７１】
ハッシュ値が一致しない場合、Ｓ１０６で、ＣＰＵ１０１は、ブートプログラム３１０が正当でないと判定する。その結果、図４のＳ４０において説明したエラー通知が行われ得る。
【００７２】
＜２−３．コントローラ間の正当性判定＞
図６は、図４のＳ２０に示したコントローラ間正当性判定処理の流れの一例を示すフローチャートである。この処理は、メインコントローラ用プログラムの正当性判定の結果としてリセットを解除されるメインコントローラのプロセッサ（例えば、複合機１０のメインコントローラ２０のＣＰＵ１０２）により実行され得る。
【００７３】
まず、Ｓ２００で、ＣＰＵ１０２は、ブートプログラム３１０を起動する。
【００７４】
次いで、Ｓ２０１で、ＣＰＵ１０２は、サブコントローラ向けのインタフェースに相当するプリンタコントローラＩ／Ｆ１１３をアクティブ化する。
【００７５】
次いで、Ｓ２０２で、ＣＰＵ１０２は、プリンタコントローラＩ／Ｆ１１３を介してプリンタコントローラ５０のＮＯＲフラッシュメモリ２２２から正当性判定プログラム３３０を読み出し、正当性判定プログラム３３０のハッシュ値を導出する。正当性判定プログラム３３０のハッシュ値は、例えば正当性判定プログラム３３０のプログラムデータに基づいてセキュアアシスト部１０５により算出され得る。
【００７６】
次いで、Ｓ２０３で、ＣＰＵ１０２は、正当性判定プログラム３３０に関連付けられる署名３２４をＮＯＲフラッシュメモリ２２２から読み出す。さらに、ＣＰＵ１０２は、ＯＴＰ１０４に記憶されている検証鍵でセキュアアシスト部１０５に署名３２４を復号させることにより、正当性判定プログラム３３０の正当なハッシュ値を復元する。
【００７７】
次いで、Ｓ２０４で、ＣＰＵ１０２は、Ｓ２０２で導出したハッシュ値がＳ２０３で復元したハッシュ値に一致するかを判定する。これらハッシュ値が一致する場合には、処理はＳ２０５へ進む。一方、ハッシュ値が一致しない場合には、処理はＳ２０７へ進む。
【００７８】
ハッシュ値が一致する場合、Ｓ２０５で、ＣＰＵ１０２は、正当性判定プログラム３３０が正当であると判定し、Ｓ２０６で、サブコントローラであるプリンタコントローラ５０のＣＰＵ２０２のリセットを解除する。その結果、安全であることが確認された正当性判定プログラム３３０の実行がＣＰＵ２０２により開始され得る。
【００７９】
ハッシュ値が一致しない場合、Ｓ２０７で、ＣＰＵ１０２は、正当性判定プログラム３３０が正当でないと判定する。その結果、図４のＳ４０において説明したエラー通知が行われ得る。
【００８０】
＜２−４．サブコントローラ内の正当性判定＞
図７は、図４のＳ３０に示したサブコントローラ用プログラム正当性判定処理の流れの一例を示すフローチャートである。この処理は、正当性判定プログラムの正当性判定の結果としてリセットを解除されるサブコントローラのプロセッサ（例えば、複合機１０のプリンタコントローラ５０のＣＰＵ２０２）により実行され得る。
【００８１】
なお、サブコントローラ用プログラム正当性判定処理が実行される前に、複合機１０又はプリンタコントローラ５０の電源の投入に応じて、システム制御部２１５によりプリンタコントローラ５０の上述した最小限の機能がアクティブ化されているものとする。
【００８２】
まず、Ｓ３００で、ＣＰＵ２０２は、正当性判定プログラム３３０をＮＯＲフラッシュメモリ２２２から読み出して起動する。
【００８３】
次いで、Ｓ３０１で、ＣＰＵ２０２は、プリンタコントローラ５０用のプログラムをＮＯＲフラッシュメモリ２２２から読み出し、読み出したプログラムのハッシュ値を導出する。
【００８４】
次いで、Ｓ３０２で、ＣＰＵ２０２は、プリンタコントローラ５０用のプログラムの正当なハッシュ値を取得する。プリンタコントローラ５０用のプログラムのハッシュ値は、当該プログラムに関連付けられる署名から復元されてもよく、あるいは暗号化されていない状態で予め保持されていてもよい。
【００８５】
次いで、Ｓ３０３で、ＣＰＵ２０２は、Ｓ３０１で導出したハッシュ値がＳ３０２で取得したハッシュ値に一致するかを判定する。これらハッシュ値が一致する場合には、処理はＳ３０４へ進む。一方、ハッシュ値が一致しない場合には、処理はＳ３０６へ進む。
【００８６】
ハッシュ値が一致する場合、Ｓ３０４で、ＣＰＵ２０２は、プリンタコントローラ５０用のプログラムが正当であると判定し、Ｓ３０５で、プリンタコントローラ５０用のプログラムを起動する。例えば、ＣＰＵ２０２によりシステム起動プログラム３２５が起動され得る。
【００８７】
ハッシュ値が一致しない場合、Ｓ３０６で、ＣＰＵ２０２は、プリンタコントローラ５０用のプログラムが正当でないと判定する。その結果、図４のＳ４０において説明したエラー通知が行われ得る。
【００８８】
以上説明したように、本実施形態によれば、第１コントローラ及び第２コントローラを備えるコントローラシステムにおいて、第１コントローラは、第１コントローラにて実行される第１コントローラ用プログラムが正当であるかを判定する。第１コントローラは、さらに、第２コントローラ用プログラムが正当であるかを判定するために第２コントローラにて実行される第２コントローラ用正当性判定プログラムが正当であるかを判定する。第２コントローラは、第２コントローラ用プログラムが正当であるかを判定する。言い換えると、第２コントローラ用の正当性判定プログラムの正当性は第１コントローラにて判定されるものの、第２コントローラ用の他のプログラムの正当性は当該正当性判定プログラムを実行することにより第２コントローラにて判定される。したがって、正当性の検証のためにコントローラ間で数多くのデータビットを通信する必要性が回避されるため、通信負荷を軽減できると共に、正当性の検証に要する処理時間を短縮することができる。そのうえ、コントローラシステム全体として、プログラムの改竄及び劣化といったリスクに対する適切な保護（セキュアブート）を、低コストで実現することができる。
【００８９】
＜＜３．変形例＞＞
本発明は上記実施形態に限定されず、様々な変形が可能である。例えば上記実施形態では、複合機１０のメインコントローラ２０及びプリンタコントローラ５０への適用例を主に説明した。しかしながら、概して、本開示に係る技術は、少なくとも第１及び第２コントローラを備えるコントローラシステム、又はそうしたコントローラシステムを含む装置に適用可能である。上述した例に関わらず、第１コントローラ及び第２コントローラは、機能的に並列に位置付けられる２つのコントローラ（例えば、スキャナコントローラ３０、プリンタコントローラ５０及びＵＩコントローラ７０のうちの任意の２つのペア）であってもよい。また、１つの第１コントローラに対して、２つ以上の第２コントローラが存在してもよい。
【００９０】
また、説明の簡明さのために図２には示していないが、メインコントローラ２０は、スキャナコントローラ３０と通信するための通信Ｉ／Ｆ、及びＵＩコントローラ７０と通信するための通信Ｉ／Ｆを含み得る。スキャナコントローラ３０は、プリンタコントローラ５０と同様に、少なくとも１つのプロセッサ（例えば、ＣＰＵ）、当該プロセッサにより実行されるプログラムを記憶したメモリ、及びメインコントローラ２０と通信するための通信Ｉ／Ｆを含み得る。ＵＩコントローラ７０もまた、少なくとも１つのプロセッサ、当該プロセッサにより実行されるプログラムを記憶したメモリ、及びメインコントローラ２０と通信するための通信Ｉ／Ｆを含み得る。信頼の連鎖に沿って各コントローラにおいて正当性を判定されるプログラムは、上記実施形態で説明したプログラムに限定されず、いかなる種類のいくつのプログラムであってもよい。
【００９１】
上記実施形態では、１つのメインコントローラと１つのサブコントローラとの間で、正当性判定プログラムを対象とするコントローラ間検証が実行される例を主に説明した。しかしながら、より多くのコントローラの間で多段階のコントローラ間検証が実行されてもよい。図８は、一変形例に係るそうした多段階のコントローラ間検証について説明するための説明図である。
【００９２】
図８には、メインコントローラ２０、第１のサブコントローラとしてのプリンタコントローラ５０、及び第２のサブコントローラとしてのＵＩコントローラ７０内の信頼の連鎖に関与するプログラムが概略的に示されている。
【００９３】
メインコントローラ２０のブートローダ３００は、第１判定部３０１を含み、ＲｏＴを提供する。メインコントローラ２０のブートプログラム３１０は、コントローラ間判定部３１２を含む。第１判定部３０１は、ブートプログラム３１０に関連付けられる署名３１４を検証することにより、ブートプログラム３１０（即ち、コントローラ間判定部３１２）の正当性を判定する（矢印Ｂ１）。
【００９４】
プリンタコントローラ５０の正当性判定プログラム３３０は、第２判定部３２１を含む。メインコントローラ２０のコントローラ間判定部３１２は、正当性判定プログラム３３０に関連付けられる署名３２４を検証することにより、正当性判定プログラム３３０（即ち、第２判定部３２１）の正当性を判定する（矢印Ｂ２）。プリンタコントローラ５０は、サブコントローラ用プログラムとして、システム起動プログラム３２５及びコントローラ間検証プログラム３４０を有する。コントローラ間検証プログラム３４０は、コントローラ間判定部３４２を含む。プリンタコントローラ５０の第２判定部３２１は、システム起動プログラム３２５、及びコントローラ間検証プログラム３４０（即ち、コントローラ間判定部３４２）の正当性を判定する（矢印Ｂ３、Ｂ４）。
【００９５】
ＵＩコントローラ７０の正当性判定プログラム３６０は、ＵＩコントローラ７０にて実行されるＵＩコントローラ７０用のプログラムが正当であるかを判定するプログラムである。正当性判定プログラム３６０は、第３判定部３５１を含む。プリンタコントローラ５０のコントローラ間判定部３４２は、正当性判定プログラム３６０に関連付けられる署名３５４を検証することにより、正当性判定プログラム３６０（即ち、第３判定部３５１）の正当性を判定する（矢印Ｂ５）。ＵＩコントローラ７０は、サブコントローラ用プログラムとして、システム起動プログラム３６５を有する。ＵＩコントローラ７０の第３判定部３５１は、システム起動プログラム３６５の正当性を判定する（矢印Ｂ６）。
【００９６】
本変形例では、相互接続する３つ以上のコントローラが存在するマルチコントローラシステムにおいて、ＲｏＴの実装に起因する実装コストの抑制と、正当性の検証に要する処理時間の長期化の防止とを両立することができる。そのうえ、メインコントローラにおいて提供されるＲｏＴを起点として複数のコントローラをまたいだ信頼の連鎖が途切れることなく構築されるため、意図しないプログラムの変化のリスクに対する適切な保護も実現される。また、本変形例では、コントローラ間の正当性の判定が多段階で順次行われるため、特定のコントローラに判定処理の負荷が集中しない。よって、メインコントローラ及びサブコントローラのリソースを、それぞれのシステムの制御のために早期に解放することが可能である。
【００９７】
＜＜４．その他の実施形態＞＞
本発明は、上述の実施形態の１つ以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出して実行する処理の形式でも実現可能である。また、１つ以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００９８】
本発明は上述した実施形態に制限されるものではなく、発明の精神及び範囲から逸脱することなく、様々な変更及び変形が可能である。したがって、発明の範囲を公にするために請求項を添付する。
【符号の説明】
【００９９】
１０：複合機、２０：メインコントローラ、３０：スキャナ（サブ）コントローラ、５０：プリンタ（サブ）コントローラ、７０：ＵＩ（サブ）コントローラ、３０１：第１判定部、３１２：コントローラ間判定部、３２１：第２判定部
【図１】
2020187650.tif 000003
【図２】
2020187650.tif 000004
【図３】
2020187650.tif 000005
【図４】
2020187650.tif 000006
【図５】
2020187650.tif 000007
【図６】
2020187650.tif 000008
【図７】
2020187650.tif 000009
【図８】
2020187650.tif 000010