(57)【要約】      （修正有）【課題】改竄検知機能を持たない制御手段も安全に起動できる技術を提供する。【解決手段】少なくとも第１制御手段１０１と第２制御手段１０４とを有する情報処理装置であって、第２制御手段は、ＣＰＵ２２０と、ＣＰＵにより実行される第１プログラムを不揮発に記憶する第１記憶手段２２９とを有し、第１制御手段は、情報処理装置の起動時、第１記憶手段に記憶されている第１プログラムの改竄の有無を検証し、検証により第１プログラムが改竄されていないことを確認した後、ＣＰＵを起動させる。【選択図】図２
2020170256.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１制御手段と第２制御手段とを有する情報処理装置であって、
前記第２制御手段は、ＣＰＵと、当該ＣＰＵにより実行される第１プログラムを不揮発に記憶する第１記憶手段とを有し、
前記第１制御手段は、前記情報処理装置の起動時、前記第１記憶手段に記憶されている前記第１プログラムの改竄の有無を検証し、
前記検証により前記第１プログラムが改竄されていないことを確認した後、前記ＣＰＵを起動させることを特徴とする情報処理装置。
【請求項２】
前記ＣＰＵが起動する前に、前記第１制御手段と第２制御手段との間で通信が可能な通信手段を、更に有し、
前記第１制御手段は、前記情報処理装置の起動時、前記通信手段により前記第２制御手段から送信された前記第１記憶手段の前記第１プログラムに基づいて、当該第１プログラムの改竄の有無を検証することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記通信手段は、前記情報処理装置の電源がオンされることにより、前記第１制御手段と第２制御手段との間の通信が可能な状態とすることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第１プログラムの改竄の有無の検証は、前記第１記憶手段に記憶されている前記第１プログラムの第１ハッシュ値を求め、
前記第１プログラムの署名データを検証鍵を使用して復号して第２ハッシュ値を取得し、前記第１ハッシュ値と前記第２ハッシュ値とが一致するかどうかに基づいて行われることを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第１制御手段は、
第１ＣＰＵと、
第２ＣＰＵと、
前記第１ＣＰＵにより実行されるブートプログラムを不揮発に記憶するＲＯＭと、
前記第２ＣＰＵにより実行される第２プログラムを不揮発に記憶する第２記憶手段と、を有し、
前記情報処理装置の起動時、前記第１ＣＰＵは前記ＲＯＭに記憶されたブートプログラムを実行して前記第２記憶手段に記憶されている前記第２プログラムの改竄の有無を検証し、
当該検証により前記第２プログラムが改竄されていないことを確認した後、前記第２ＣＰＵを起動させることにより前記第２ＣＰＵが前記第２記憶手段に記憶されている前記第２プログラムを実行することにより、前記第１制御手段が、前記第１記憶手段に記憶されている前記第１プログラムの改竄の有無を検証することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第２プログラムの改竄の有無の検証は、前記第２記憶手段に記憶されている前記第２プログラムの第１ハッシュ値を求め、
前記第２プログラムの署名データを検証鍵を使用して復号して第２ハッシュ値を取得し、前記第１ハッシュ値と前記第２ハッシュ値とが一致するかどうかに基づいて行われることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
少なくとも第１制御手段と第２制御手段とを有する情報処理装置であって、
前記第２制御手段は、
ＣＰＵと、
当該ＣＰＵにより実行される第１プログラムを不揮発に記憶する第１記憶手段と、
前記第１記憶手段に記憶されている前記第１プログラムのハッシュ値を取得する取得手段と、を有し、
前記第１制御手段は、前記情報処理装置の起動時、前記取得手段により取得された前記ハッシュ値に基づいて前記第１プログラムの改竄の有無を検証し、
前記検証により前記第１プログラムが改竄されていないことを確認した後、前記ＣＰＵを起動させることを特徴とする情報処理装置。
【請求項８】
前記第１プログラムの改竄の有無の検証は、前記取得手段により取得された前記ハッシュ値と、前記第１プログラムの署名データを検証鍵を使用して復号して得られたハッシュ値とが一致するかどうかに基づいて行われることを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記第１制御手段は、
第１ＣＰＵと、
第２ＣＰＵと、
前記第１ＣＰＵにより実行されるブートプログラムを不揮発に記憶するＲＯＭと、
前記第２ＣＰＵにより実行される第２プログラムを不揮発に記憶する第２記憶手段と、を有し、
前記情報処理装置の起動時、前記第１ＣＰＵは前記ＲＯＭに記憶されたブートプログラムを実行して前記第２記憶手段に記憶されている前記第２プログラムの改竄の有無を検証し、
前記検証により前記第２プログラムが改竄されていないことを確認した後、前記第２ＣＰＵを起動させることにより前記第２ＣＰＵが前記第２記憶手段に記憶されている前記第２プログラムを実行し、前記取得手段により取得された前記ハッシュ値に基づいて前記第１プログラムの改竄の有無を検証することを特徴とする請求項７又は８に記載の情報処理装置。
【請求項１０】
前記ＣＰＵの起動は、前記ＣＰＵのリセットを解除することにより行われることを特徴とする請求項１乃至９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記第１記憶手段は、フラッシュメモリを含むことを特徴とする請求項１乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記第２記憶手段は、フラッシュメモリを含むことを特徴とする請求項５又は６又は９に記載の情報処理装置。
【請求項１３】
ＣＰＵと、通信ハードウェアモジュールと、を有する第１制御手段と、
ＣＰＵと、通信ハードウェアモジュールと、を有する第２制御手段と、
を有する情報処理装置であって、
前記情報処理装置の起動時、前記第１制御手段は、前記第２制御手段の前記ＣＰＵのブートプログラムを検証し、前記第２制御手段の前記ＣＰＵは、当該検証によって正当であることが確認された前記ブートプログラムを実行する情報処理装置において、
前記第１制御手段の前記通信ハードウェアモジュールは、前記第２制御手段の前記ＣＰＵが前記ブートプログラムを実行する前に、前記第２制御手段の前記ＣＰＵの前記ブートプログラムの通信を、前記第２制御手段の前記通信ハードウェアモジュールと行うことを特徴とする情報処理装置。
【請求項１４】
少なくとも第１制御手段と、ＣＰＵと、当該ＣＰＵにより実行される第１プログラムを不揮発に記憶する第１記憶手段とを有する第２制御手段とを備えた情報処理装置を制御する制御方法であって、
前記第１制御手段が、前記情報処理装置の起動時、前記第１記憶手段に記憶されている前記第１プログラムの改竄の有無を検証する工程と、
前記第１制御手段が、前記検証により前記第１プログラムが改竄されていないことを確認した後、前記第２制御手段の前記ＣＰＵを起動させる工程と、
を有することを特徴とする制御方法。
【請求項１５】
少なくとも第１制御手段と、ＣＰＵと、当該ＣＰＵにより実行される第１プログラムを不揮発に記憶する第１記憶手段とを有する第２制御手段とを備えた情報処理装置を制御する制御方法であって、
前記第２制御手段が、前記情報処理装置の起動時、前記第１記憶手段に記憶されている前記第１プログラムのハッシュ値を取得する取得工程と、
前記第１制御手段が、前記取得工程で取得した前記ハッシュ値に基づいて、前記第１プログラムの改竄の有無を検証する検証工程と、
前記第１制御手段が、前記検証工程で前記第１プログラムが改竄されていないことを確認した後、前記第２制御手段の前記ＣＰＵを起動させる工程と、
を有することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置とその制御方法に関するものである。
【背景技術】
【０００２】
情報機器の脆弱性をついてファームウェアを改竄して情報機器を悪用する攻撃が問題となっている。そういった攻撃対策として、ブートプログラムのデジタル署名（以下、署名と呼ぶ）を用いたセキュアブートが知られている。セキュアブートは、ブートローダによって、ブートプログラムの起動前に署名を検証してその有効性を確認することで、信頼されたブートプログラムを機器上で動作させる技術である。署名の検証（以下、署名検証と呼ぶ）を実行するブートローダは通常、書き換えの困難なハードウェア等に格納される。このブートローダを信頼の基点（Ｒｏｏｔ  ｏｆ  Ｔｒｕｓｔ、以下ＲｏＴ）とし、ＲｏＴによって信頼されたブートプログラムが、同様にＯＳやアプリケーションプログラムを順次検証して起動する。これにより、情報機器上で動作する全てのプログラムを信頼のチェーンでつなぐことが可能となる。
【０００３】
各プログラムの署名は、ＲＳＡやＤＳＡ／ＥＣＤＳＡといった暗号アルゴリズムに従って、プログラムのハッシュ値と署名鍵を用いて事前に生成され、不揮発性メモリにプログラムとともに格納される。そして署名検証時には、プログラム、署名、及び検証鍵を用いて、上述の暗号アルゴリズムに従った検証処理がなされる。このような署名検証により、プログラムが改ざんされているかどうかを確認してから起動することが可能となる。
【０００４】
特許文献１には、１つのコントローラ内に複数のＣＰＵと各ＣＰＵの動作プログラムを有し、複数のＣＰＵが１つの改竄検知機能を提供するモジュールであるＴＰＭ（Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）を共有し、それぞれの動作プログラムを署名検証する方法が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−２１９５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＣＰＵと、そのＣＰＵが動作するプログラムとを有するコントローラが複数接続されるシステムにおいて、改竄検知機能を全てのコントローラで持つとコストが上昇する。また、各コントローラが改竄検知機能を持たない場合、改竄検知機能を持たないコントローラがブートすると、情報機器を悪用する攻撃を受ける可能性がある。
【０００７】
本発明の目的は、上記従来技術の問題点の少なくとも一つを解決することにある。
【０００８】
本発明の目的は、複数の制御手段を有する装置において、プログラムの改竄検知機能を有さない制御手段のプログラムに対しても改竄検知を行うことにより、改竄検知機能を持たない制御手段も安全に起動できる技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
少なくとも第１制御手段と第２制御手段とを有する情報処理装置であって、
前記第２制御手段は、ＣＰＵと、当該ＣＰＵにより実行される第１プログラムを不揮発に記憶する第１記憶手段とを有し、
前記第１制御手段は、前記情報処理装置の起動時、前記第１記憶手段に記憶されている前記第１プログラムの改竄の有無を検証し、
前記検証により前記第１プログラムが改竄されていないことを確認した後、前記ＣＰＵを起動させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、複数の制御手段を有する装置において、プログラムの改竄検知機能を有さない制御手段のプログラムに対しても改竄検知を行うことにより、改竄検知機能を持たない制御手段も安全に起動できるという効果がある。
【００１１】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。なお、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１２】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】本発明の実施形態１に係る複合機のハードウェア構成を説明するブロック図。
【図２】実施形態１に係るメインコントローラとプリンタコントローラのハードウェア構成を説明するブロック図。
【図３】実施形態１に係る複合機が有するソフトウェアモジュールを説明するブロック図。
【図４】実施形態１に係る複合機のＣＰＵ２０１がＮＯＲフラッシュメモリに格納されたブートプログラムの署名検証を実行するときの処理を説明するフローチャート。
【図５】実施形態１に係る複合機のＣＰＵ２０２がＮＯＲフラッシュメモリのブートプログラムを実行するときの処理を説明するフローチャート。
【図６】実施形態１に係る複合機のプリンタコントローラの起動処理を説明するフローチャート。
【図７】実施形態２に係るメインコントローラとプリンタコントローラのハードウェア構成を説明するブロック図。
【図８】実施形態２に係る複合機のＣＰＵ２０２がＮＯＲフラッシュメモリのブートプログラムを実行するときの処理を説明するフローチャート。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これら複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一もしくは同様の構成に同一の参照番号を付し、重複した説明は省略する。尚、実施形態に係る情報処理装置として複合機（デジタル複合機／ＭＦＰ／Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を例に説明する。しかしながら適用範囲は複合機に限定はせず、情報処理装置であればよい。
【００１４】
［実施形態１］
図１は、本発明の実施形態１に係る複合機１００のハードウェア構成を説明するブロック図である。
【００１５】
メインコントローラ１０１は複合機１００の全体の制御及び管理を行うコントローラである。後述するスキャナコントローラ１０６、プリンタコントローラ１０４、操作部コントローラ１０２との間で相互に通信が可能であり、また画像データの転送を行うこともできる。例えば、操作部コントローラ１０２から、操作部１０３を介したユーザの操作に基づく命令を受信する。また各コントローラと通信を行い、例えば、スキャナ１０７で得られた読み取り画像データに画像処理を施してプリンタ１０５に転送して印刷させるコピージョブ等のジョブを実行する。
【００１６】
スキャナコントローラ１０６は、スキャナ１０７の制御と、スキャナ１０７とメインコントローラ１０１との間の通信制御を行う。またスキャナ１０７で得られた画像データに対して画像処理を施してメインコントローラ１０１に送信する。プリンタコントローラ１０４は、プリンタ１０５の制御と、プリンタ１０５とメインコントローラ１０１との間の通信制御を行う。またプリンタコントローラ１０４は、メインコントローラ１０１から受信した画像データに対し画像処理を施してプリンタ１０５に送信して印刷させる。操作部コントローラ１０２は、操作部１０３の制御と、操作部１０３とメインコントローラ１０１との間の通信制御を行う。操作部コントローラ１０２はまた、メインコントローラ１０１から受信した表示情報を操作部１０３に送信して、操作部１０３にユーザへの画面表示を実行させる。実施形態１では、メインコントローラ１０１、スキャナコントローラ１０６、プリンタコントローラ１０４、操作部コントローラ１０２は、それぞれＣＰＵとＣＰＵが各コントローラを制御するための制御プログラムを有する。
【００１７】
図２は、実施形態１に係るメインコントローラ１０１とプリンタコントローラ１０４のハードウェア構成を説明するブロック図である。
【００１８】
メインコントローラＳＯＣ２００は、メインコントローラ１０１の制御を行うモジュールである。実施形態１では、メインコントローラＳＯＣ２００は半導体チップとして構成されているものとして説明する。ＲＯＭ２０３はマスクＲＯＭで、ＣＰＵ２０１で実行されるローダ３００（図３）を格納している。ＮＯＲフラッシュメモリ２１３は、ＣＰＵ２０２で実行されるブートプログラム３１０（図３）及び、対応する署名データ３１４（図３）を格納している。ＣＰＵ２０１，ＣＰＵ２０２は、ＮＯＲフラッシュメモリ制御部２０８を介してＮＯＲフラッシュメモリ２１３にアクセスすることができる。
【００１９】
ＣＰＵ２０１は、ＮＯＲフラッシュメモリ２１３に格納されたブートプログラム３１０の署名検証とＣＰＵ２０２のリセットの解除を行う。ＣＰＵ２０２は、改ざんされていないと判定されたブートプログラム３１０を実行して起動し、メインコントローラ１０１の制御を行う。また実施形態１では、ＣＰＵ２０１は、プリンタコントローラ１０４のＮＯＲフラッシュメモリ２２９に格納されるブートプログラム３２０（図３）の署名検証を行い、プリンタコントローラＳＯＣ２３０のＣＰＵ２２０のリセットの解除も行う。
【００２０】
ＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍｍａｂｌｅ）ＲＯＭ（以下、ＯＴＰと呼ぶ）２０４は、製造時に一度だけ書き込みが可能なＲＯＭで、ブートプログラムの署名検証のための検証鍵を保持している。この検証鍵は、後述する署名鍵で暗号化したブートプログラムの署名データを復号できる鍵である。セキュアアシスト部２０５は、プログラムのハッシュ値を計算するハードアシスト機能を有する。
【００２１】
実施形態１では、セキュアアシスト部２０５は、ＮＯＲフラッシュメモリ２１３やＮＯＲフラッシュメモリ２２９に格納されているブートプログラムを読み出し、そのハッシュ値を計算する。また署名鍵で暗号化されたデータを、ＯＴＰ２０４に格納される検証鍵で復号する機能も持つ。実施形態１では、この検証鍵は、ブートプログラム署名データ３１４及び３２４（図３）を復号するのに用いられる。
【００２２】
画像処理部２０６は、スキャナコントローラ１０６から受信した画像データに対するシェーディング処理や、プリンタコントローラ１０４へ出力するためのハーフトーン処理を行う。メモリ制御部２０７は、ＤＲＡＭ２１２へアクセスするための各種コマンド制御を行う。ＤＲＡＭ２１２は、ＣＰＵ２０２で実行されるプログラムや、画像処理部２０６のワークメモリとして使用される。プリンタコントローラ通信部２０９は、プリンタコントローラ１０４と通信するための通信制御を行う通信ハードウェアモジュールである。実施形態１では、ＣＰＵ２０２は、プリンタコントローラ通信部２０９を介してプリンタコントローラＳＯＣ２３０の各ハードウェアモジュール（例えばＮＯＲフラッシュメモリ制御部２２５やメモリ制御部２２４）にアクセスすることも可能である。プリンタコントローラ画像送信部２１０は、画像処理部２０６で処理したハーフトーン画像データをプリンタコントローラ１０４に転送する。外部ポート制御部２１１は汎用の入出力ポートであり、例えば出力ポートを制御することによりＬＥＤ２１４を必要に応じて点灯し、ソフトウェアやハードウェアの異常を外部に伝える。システムバス２１５は、接続されているモジュールを相互に接続する。システムバス２１５を介して、各サブモジュールは各モジュール間で各種データや制御コマンド等を送受信する。
【００２３】
次にプリンタコントローラ１０４について説明する。
【００２４】
プリンタコントローラＳＯＣ２３０は、プリンタコントローラ１０４を制御するためのモジュールで、実施形態１では半導体チップとして構成されているものとして説明する。ＮＯＲフラッシュメモリ２２９は、ＣＰＵ２２０で実行されるブートプログラム３２０、及び、対応する署名データ３２４（図３）を格納する。ＣＰＵ２２０は、ＮＯＲフラッシュメモリ制御部２２５を介してＮＯＲフラッシュメモリ２２９にアクセスすることができる。メインコントローラ通信部２２１は、メインコントローラ１０１と通信するための通信ハードウェアモジュールである。このメインコントローラ通信部２２１は、プリンタコントローラ通信部２０９と通信線で物理的に接続されている。後述の通り、ＣＰＵ２２０のブートプログラム３２０は、複合機１００の起動時、ＣＰＵ２２０がブートプログラム３２０を実行する前に、この通信線を介して、プリンタコントローラ通信部２０９とメインコントローラ通信部２２１との間で送信される。プリンタコントローラ通信部２０９は、ＣＰＵ２２０がブートプログラム３２０を実行する前に、当該ブートプログラム３２０の通信を、メインコントローラ通信部２２１と行う。画像受信部２２２は、メインコントローラ１０１から入力されるハーフトーン画像データを受信する。画像処理部２２３は、メインコントローラ１０１から受信したハーフトーン画像データに対し、プリンタ１０５へ出力するための微小変倍処理やＰＷＭ処理等の画像処理を行う。プリンタＩＦ制御部２２７は、ＣＰＵ２２０がプリンタ１０５を制御するための通信制御、及び、画像処理部２２３が処理した画像データをプリンタ１０５に転送する。メモリ制御部２２４は、ＤＲＡＭ２２８へアクセスするための各種コマンド制御を行う。ＤＲＡＭ２２８は、ＣＰＵ２２０で実行されるプログラムや、画像処理部２２３のワークメモリとして使用される。
【００２５】
システム制御部２２６は、プリンタコントローラ１０４の電源がオンされて起動したとき、プリンタコントローラＳＯＣ２３０が最低限必要な起動処理のみを実行する。実施形態１において最低限必要な起動処理とは、メインコントローラ通信部２２１とＮＯＲフラッシュメモリ制御部２２５とＮＯＲフラッシュメモリ２２９とそのモジュール間の通信を実現するシステムバス２３１のみを動作可能とすることである。この起動処理は、ハードシーケンサのみで制御される。またシステム制御部２２６は、ＣＰＵ２２０や、メインコントローラ通信部２２１を介して、プリンタコントローラＳＯＣ２３０のクロック制御及びリセット制御が可能である。システムバス２３１は、接続されているモジュールを相互に接続する。システムバス２３１を介して、各サブモジュールは各モジュール間で各種データや制御コマンド等を送受信する。
【００２６】
図３は、実施形態１に係る複合機１００が有するソフトウェアモジュールを説明するブロック図である。
【００２７】
ローダ３００は、複合機１００の電源がオンされるとＣＰＵ２０１で実行されるプログラムで、ＲＯＭ２０３に格納されている。ローダ３００は、プログラムロード部３０１を有し、ＯＴＰ２０４に格納された検証鍵、及びブートプログラム署名データ３１４を用いてブートプログラム３１０を署名検証した後、ＣＰＵ２０２のリセットを解除する。プログラムロード部３０１の処理の詳細については図４のフローチャートを参照して後述する。
【００２８】
ブートプログラム３１０は、ローダ３００による署名検証後にＣＰＵ２０２で実行されるプログラムで、ＮＯＲフラッシュメモリ２１３に格納されている。ブートプログラム署名データ３１４は、署名鍵及びブートプログラム３１０のハッシュ値から算出した、ブートプログラム３１０のデジタル署名データである。ここでは署名データの生成、検証アルゴリズムとして、ＲＳＡ、ＤＳＡ、もしくはＥＣＤＳＡが使用される。システム初期化部３１１は、メモリ制御部２０７やプリンタコントローラ通信部２０９等の各種初期化を行う。外部プログラムロード部３１２は、ＯＴＰ２０４に格納された検証鍵、及びブートプログラム署名データ３２４を用いて、プリンタコントローラ１０４のＮＯＲフラッシュメモリ２１３に格納されているブートプログラム３２０を署名検証した後、ＣＰＵ２２０のリセットを解除する。外部プログラムロード部３１２の処理の詳細は、図５のフローチャートを参照して後述する。
【００２９】
ブートプログラム３２０は、ブートプログラム３１０による署名検証後、プリンタコントローラ１０４のＣＰＵ２２０で実行されるプログラムで、ＮＯＲフラッシュメモリ２２９に格納されている。ブートプログラム署名データ３２４は、署名鍵及びブートプログラム３２０のハッシュ値から算出した、ブートプログラム３２０のデジタル署名データである。ここでは署名データの生成、検証アルゴリズムとして、ＲＳＡ、ＤＳＡ、もしくはＥＣＤＳＡが使用される。
【００３０】
図４は、実施形態１に係る複合機１００のＣＰＵ２０１がプログラムロード部３０１を実行して、ＮＯＲフラッシュメモリ２１３に格納されたブートプログラム３１０の署名検証を実行するときの処理を説明するフローチャートである。このフローチャートで示す処理は、複合機１００の電源が投入されてメインコントローラ１０１のリセットが解除されることにより開始される。
【００３１】
まずＳ４０１でＣＰＵ２０１は、セキュアアシスト部２０５を使用し、ブートプログラム３１０をＮＯＲフラッシュメモリ２１３から読み出して、そのハッシュ値を計算させる。次にＳ４０２に進みＣＰＵ２０１は、セキュアアシスト部２０５を使用し、ブートプログラム署名データ３１４をＮＯＲフラッシュメモリ２１３から読み出し、ＯＴＰ２０４に格納された検証鍵を使用して、ブートプログラム署名データ３１４を復号して、そのハッシュ値を取得する。そしてＳ４０３に進みＣＰＵ２０１は、Ｓ４０１で計算により求めたハッシュ値と、Ｓ４０２で復号して得られたハッシュ値とが一致するか否か、即ち、改竄の有無を検証する。ここで一致すると判定した場合は、ブートプログラム３１０が改竄されていない、即ち検証結果が正当であるためＳ４０４に進み、メインことローラ１０１のＣＰＵ２０２のリセットを解除する。これによりＣＰＵ２０２は、改竄されていない安全なブートプログラム３１０をＮＯＲフラッシュメモリ２１３から読み出して処理を開始する。
【００３２】
一方、Ｓ４０３で、Ｓ４０１で計算により求めたハッシュ値と、Ｓ４０２でブートプログラム署名データ３１４を復号して取得したハッシュ値とが一致しない場合は、ブートプログラム３１０が改竄されていると判定してＳ４０５に進む。Ｓ４０５でＣＰＵ２０１は、エラー通知を行う。例えば、ＬＥＤ２１４を点滅させてユーザに警告する処理を行って、この処理を終了する。
【００３３】
図５は、実施形態１に係る複合機１００のＣＰＵ２０２がＮＯＲフラッシュメモリ２１３のブートプログラムを実行するときの処理を説明するフローチャートである。このフローチャートで示す処理は、図４のＳ４０４でＣＰＵ２０２のリセットが解除され、ＣＰＵ２０２がシステム初期化部３１１を実行して、メインコントローラ１０１が全て動作可能となるようが初期化された後に開始される。
【００３４】
この処理を示すフローチャートは、図４で説明したＣＰＵ２０１がローダを実行するときの処理とはほぼ同じである。相違点は、検証対象であるブートプログラムと、ブートプログラム署名データの読み出し先が、外部コントローラであるプリンタコントローラ１０４である点と、改竄されていない事が確認された後にリセット解除するＣＰＵがプリンタコントローラ１０４のＣＰＵ２２０である点である。以下に詳しく説明する。
【００３５】
まずＳ５０１でＣＰＵ２０２はセキュアアシスト部２０５を使用し、ブートプログラム３２０を、プリンタコントローラ１０４のＮＯＲフラッシュメモリ２２９から読み出し、そのハッシュ値を計算させる。次にＳ５０２に進みＣＰＵ２０２は、セキュアアシスト部２０５を使用し、ブートプログラム署名データ３２４をＮＯＲフラッシュメモリ２２９から読み出し、ＯＴＰ２０４に格納された検証鍵を使用して、そのブートプログラム署名データ３２４を復号して、そのハッシュ値を取得する。次にＳ５０３に進みＣＰＵ２０２は、Ｓ５０１で計算により求めたハッシュ値と、Ｓ５０２で復号して取得したハッシュ値とが一致するかどうか判定し、一致する場合は、ＮＯＲフラッシュメモリ２２９のブートプログラム３２０が改竄されていないと判定してＳ５０４に進む。Ｓ５０４でＣＰＵ２０２は、プリンタコントローラ１０４のＣＰＵ２２０のリセットを解除する。こうしてＣＰＵ２２０のリセットが解除されると、ＣＰＵ２２０は、ＮＯＲフラッシュメモリ２２９から、改竄されていない安全なブートプログラム３２０を読み出して処理を開始する。
【００３６】
一方、Ｓ５０３でＣＰＵ２０２は、Ｓ５０１で計算で求めたハッシュ値と、Ｓ５０２で復号して取得したしたハッシュ値とが一致しないと判定すると、ＮＯＲフラッシュメモリ２２９のブートプログラム３２０が改竄されていると判定してＳ５０５に進む。Ｓ５０５でＣＰＵ２０２は、エラー通知を行う。ここでは例えば、ＬＥＤ２１４を点滅させる等の処理を行って、この処理を終了する。
【００３７】
図６は、実施形態１に係る複合機１００のプリンタコントローラ１０４の起動処理を説明するフローチャートである。
【００３８】
Ｓ６０１で、プリンタコントローラ１０４の電源がオンされるとシステム制御部２２６は、メインコントローラ通信部２２１とＮＯＲフラッシュメモリ制御部２２５とＮＯＲフラッシュメモリ２２９とそのモジュール間の通信を実現するシステムバス２３１のみ起動させる。次にＳ６０２に進み、前述の図５のＳ５０４で、ＣＰＵ２２０のリセットが解除がされるのを待つ。ＣＰＵ２２０のリセット解除がされるまでは、メインコントローラ１０１の外部プログラムロード部３１２がプリンタコントローラ１０４のブートプログラム３２０の改竄の有無を検証中である。そしてブートプログラム３２０が改竄されていない場合は、Ｓ６０２でＣＰＵ２２０のリセットが解除されてＳ６０３に移行する。Ｓ６０３でＣＰＵ２２０は、ＮＯＲフラッシュメモリ２２９のブートプログラム３２０を読み出して起動する。尚、Ｓ６０２でＣＰＵ２２０のリセットが解除されない場合は、ブートプログラム３２０が改竄されている状態であり、Ｓ６０３の処理に進むことはない。
【００３９】
以上説明したように実施形態１によれば、改竄検知機能を持たない第１のコントローラが起動する前に、改竄検知機能を持つ第２のコントローラが、第１のコントローラのプログラムの改竄検知を実行する。これにより、改竄検知機能を持たない第１のコントローラも安全に起動することが可能となる。
【００４０】
また実施形態１では、改竄検知機能を持たない第１のコントローラを、プリンタコントローラ１０４を例に説明したが、プリンタコントローラに限定するものでなく、例えばスキャナコントローラ１０７、或いは他のコントローラでもよい。前述したようにメインコントローラＳＯＣ２００は、スキャナコントローラ１０６や操作部コントローラ１０２を通信する同様の通信部を持っている。また、スキャナコントローラ１０６と操作部コントローラ１０２は、プリンタコントローラ１０４と同様にＣＰＵと各コントローラを制御するプログラムを格納するＮＯＲフラッシュメモリとメインコントローラとの通信部を有している。従って、実施形態１と同様の手法で、改竄検知機能を持たないスキャナコントローラ１０６や操作部コントローラ１０２の改竄検知を行うことができる。
【００４１】
また、実施形態１では、改竄検知の対象となるプログラムとしてブートプログラムを例に説明したが、各コントローラを制御する全てのプログラムに適用可能であり、ブートプログラムに限定するものではない。
【００４２】
［実施形態２］
上述の実施形態１では、メインコントローラ１０１のセキュアアシスト部２０５がプリンタコントローラ１０４のＮＯＲフラッシュメモリ２２９のブートプログラム３２０を読み出して、改竄されているか検証した。ブートプログラム３２０の読み出し時間は、プリンタコントローラ通信部２０９とメインコントローラ通信部２２１のデータ転送性能により大きく変動する。例えば、メインコントローラＳＯＣ２００及びプリンタコントローラＳＯＣ２３０のＩＯピン数を削減するためシリアル通信インタフェースを採用した場合や、コストのかかる高速シリアル通信インタフェースではない低速な通信インタフェースを使用した場合には特に転送時間が長くなる。つまり、複合機１００が安全に起動するためにはメインコントローラ１０１だけでなく、プログラムを記憶している各外部コントローラの全てのプログラムが改竄されていないどうか確認する必要があり、各コントローラのプログラムの転送に多くの時間を必要とすることが想定される。その結果、複合機１００の起動時間が長くなってしまうおそれがある。そこで実施形態２では、外部コントローラにセキュアアシスト部を設けることにより、プログラムの転送に要する時間を短縮して、複合機１００の起動時間を短縮する例を説明する。
【００４３】
図７は、実施形態２に係るメインコントローラ１０１とプリンタコントローラ１０４のハードウェア構成を説明するブロック図で、前述の図２と共通する箇所は同じ参照番号で示し、それらの説明を省略する。
【００４４】
実施形態２に係るプリンタコントローラＳＯＣ２３０は、実施形態１に係るセキュアアシスト部２０５と同等の機能を有するセキュアアシスト部７０１を有している。また実施形態２に係るプリンタコントローラＳＯＣ２３０では、実施形態１に係るシステム制御部２２６が実行する、プリンタコントローラＳＯＣ２３０が最低限必要な起動処理を実行する起動制御部７０２が追加されている。
【００４５】
図８は、実施形態２に係る複合機１００のＣＰＵ２０２がＮＯＲフラッシュメモリ２１３のブートプログラムを実行するときの処理を説明するフローチャートである。このフローチャートで示す処理は、図４のＳ４０４でＣＰＵ２０２のリセットが解除され、ＣＰＵ２０２がシステム初期化部３１１を実行して、メインコントローラ１０１が全て動作可能となるようが初期化された後に動作する。
【００４６】
Ｓ８０１でＣＰＵ２０２は、プリンタコントローラＳＯＣ２３０のセキュアアシスト部７０１を使用して、プリンタコントローラ１０４のＮＯＲフラッシュメモリ２２９からブートプログラム３２０を読み出して、そのハッシュ値を計算させる。次にＳ８０２に進みＣＰＵ２０２は、Ｓ８０１で計算したハッシュ値を、プリンタコントローラ１０４のセキュアアシスト部７０１から取得する。次にＳ８０３に進みＣＰＵ２０２は、セキュアアシスト部７０１を使用して、ブートプログラム署名データ３２４をＮＯＲフラッシュメモリ２２９から取得する。そして検証鍵を使用して、そのブートプログラム署名データ３２４を復号して、そのハッシュ値を取得する。そしてＳ８０４に進みＣＰＵ２０２は、Ｓ８０２で取得したハッシュ値と、Ｓ８０３で復号して取得したハッシュ値とが一致するかどうか判定し、一致する場合は、ＮＯＲフラッシュメモリ２２９のブートプログラム３２０が改竄されていないと判定してＳ８０５に進む。Ｓ８０５でＣＰＵ２０２は、プリンタコントローラ１０４のＣＰＵ２２０のリセットを解除する。こうしてＣＰＵ２２０のリセットが解除されると、ＣＰＵ２２０は、ＮＯＲフラッシュメモリ２２９から、改竄されていない安全なブートプログラム３２０を読み出して処理を開始する。
【００４７】
一方、Ｓ８０４でＣＰＵ２０２は、Ｓ８０２で取得したハッシュ値と、Ｓ８０３で復号して取得したハッシュ値とが一致しないと判定すると、ＮＯＲフラッシュメモリ２２９のブートプログラム３２０が改竄されていると判定してＳ８０６に進む。Ｓ８０６でＣＰＵ２０２は、エラー通知を行う。ここでは例えば、ＬＥＤ２１４を点滅させる等の処理を行って、この処理を終了する。
【００４８】
以上説明したように実施形態２によれば、外部コントローラにブートプログラムのハッシュ値を計算させる仕組みを持つことで、ブートプログラムをメインコントローラから全て読み出すことなく、改竄検知が可能となる。つまり、外部コントローラのブートプログラムを、メインコントローラで全て読み出すことによるプログラムの転送時間を削減し、複合機の改竄検知に要する時間を短縮することができる。
【００４９】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００５０】
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から逸脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００５１】
１０１…メインコントローラ、１０４…プリンタコントローラ、２０１，２０２，２２０…ＣＰＵ、２０５，７０１…セキュアアシスト部、２０８，２２５…ＮＯＲフラッシュメモリ制御部、２１３，２２９…ＮＯＲフラッシュメモリ
【図１】
2020170256.tif 000003
【図２】
2020170256.tif 000004
【図３】
2020170256.tif 000005
【図４】
2020170256.tif 000006
【図５】
2020170256.tif 000007
【図６】
2020170256.tif 000008
【図７】
2020170256.tif 000009
【図８】
2020170256.tif 000010