(57)【要約】      （修正有）【課題】放熱や消費電力を増大させ過ぎずに、プログラムの改ざんの有無を検知するのにかかる時間を短縮する情報処理装置及びその制御方法を提供する。【解決手段】情報処理装置は、プログラムを記憶するメモリと、システムバスと、メモリに記憶されているプログラムをシステムバスを介して読み込み、読み込まれたプログラムが改竄されているかを判定する第１制御部と、改竄されていないと判定されたプログラムをメモリからシステムバスを介して読み込み、実行する第２制御部と、システムバスおよび第１制御部の少なくとも１つのモジュールへのクロック供給を制御するクロック制御部と、を有する。クロック制御部は、少なくとも１つのモジュールについて、第１制御部によるプログラムの読み込みの開始から少なくとも読み込みの完了までに供給されるクロックの周波数を、プログラムについての判定の後に供給されるクロックの周波数よりも高くする。【選択図】図５
2020071723.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶するメモリと、
システムバスと、
前記メモリに記憶されているプログラムを前記システムバスを介して読み込み、該読み込まれたプログラムが改竄されているかを判定する第１制御部と、
改竄されていないと判定された前記プログラムを前記メモリから前記システムバスを介して読み込み、実行する第２制御部と、
前記システムバスおよび前記第１制御部の少なくとも１つのモジュールへ供給されるクロックの周波数を制御するクロック制御部と、
を有し、
前記クロック制御部は、前記少なくとも１つのモジュールについて、前記第１制御部による前記プログラムの読み込みの開始から少なくとも当該読み込みの完了までに供給されるクロックの周波数を、当該プログラムについての前記判定の後に供給されるクロックの周波数よりも高くすることを特徴とする情報処理装置。
【請求項２】
前記クロック制御部は、前記システムバスおよび前記第１制御部のそれぞれについて、前記第１制御部による前記プログラムの読み込みの開始から少なくとも当該読み込みの完了までに供給されるクロックの周波数を、当該プログラムについての前記判定の後に供給されるクロックの周波数よりも高くすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記システムバスおよび前記第１制御部に供給されるクロックの周波数は異なることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記システムバスに供給されるクロックの周波数は、前記第１制御部に供給されるクロックの周波数よりも高いことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記システムバスおよび前記第１制御部の少なくとも１つのモジュールにクロックを供給するクロック供給部を有し、
前記クロック制御部は、前記クロック供給部が供給するクロックの周波数を前記クロック供給部に対して設定して、クロックの周波数を制御することを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記第１制御部および前記第２制御部への電力供給を制御する電力制御部と、
前記電力制御部は、前記第１制御部による前記プログラムの読み込みの開始から前記判定の完了まで、前記第１制御部に電力を供給するが前記第２制御部に電力を供給せず、当該判定の完了後、前記第１制御部および前記第２制御部に電力を供給することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記メモリは、秘密鍵で暗号化された前記プログラムの署名を記憶し、
前記第１制御部は、
前記メモリから前記システムバスを介して読み込まれた前記プログラムの署名を計算する計算手段と、
前記暗号化された前記署名を前記メモリから読み込む読み込み手段と、
前記読み込まれた前記暗号化された前記署名を、公開鍵で復号する復号手段と、
を有し、
前記計算された署名と、前記復号された署名とを比較することで前記メモリに記憶された前記プログラムが改ざんされているかを判定することを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項８】
前記署名とは、前記プログラムのハッシュ値であることを特徴とする請求項７に記載の情報処理装置。
【請求項９】
プログラムを記憶するメモリと、
システムバスと、
前記メモリに記憶されているプログラムを前記システムバスを介して読み込み、該読み込まれたプログラムが改竄されているかを判定する第１制御部と、
改竄されていないと判定された前記プログラムを前記メモリから前記システムバスを介して読み込み、実行する第２制御部と、
を有する情報処理装置の制御方法であって、
前記システムバスおよび前記第１制御部にクロックを供給する供給工程を有し、
前記供給工程は、前記システムバスおよび前記第１制御部の少なくとも１つのモジュールについて、前記第１制御部による前記プログラムの読み込みの開始から少なくとも当該読み込みの完了までに供給されるクロックの周波数を、当該プログラムについての前記判定の後に供給されるクロックの周波数よりも高くする工程を有することを特徴とする情報処理装置の制御方法。
【請求項１０】
前記高くする工程は、前記システムバスおよび前記第１制御部のそれぞれについて、前記第１制御部による前記プログラムの読み込みの開始から少なくとも当該読み込みの完了までに供給されるクロックの周波数を、当該プログラムについての前記判定の後に供給されるクロックの周波数よりも高くすることを特徴とする請求項９に記載の情報処理装置の制御方法。
【請求項１１】
前記システムバスおよび前記第１制御部に供給されるクロックの周波数は異なることを特徴とする請求項９または１０に記載の情報処理装置の制御方法。
【請求項１２】
前記システムバスに供給されるクロックの周波数は、前記第１制御部に供給されるクロックの周波数よりも高いことを特徴とする請求項１１に記載の情報処理装置の制御方法。
【請求項１３】
前記情報処理装置は、前記システムバスおよび前記第１制御部に供給されるクロックを生成するクロック供給部を有し、
前記高くする工程は、供給するクロックの周波数を前記クロック供給部に対して設定して、クロックの周波数を制御することを特徴とする請求項９乃至１２の何れか１項に記載の情報処理装置の制御方法。
【請求項１４】
前記第１制御部および前記第２制御部への電力供給を制御する電力制御工程をさらに有し、
前記電力制御工程は、前記第１制御部による前記プログラムの読み込みの開始から前記判定の完了まで、前記第１制御部に電力を供給するが前記第２制御部に電力を供給せず、当該判定の完了後、前記第１制御部および前記第２制御部に電力を供給することを特徴とする請求項９乃至１３の何れか１項に記載の情報処理装置の制御方法。
【請求項１５】
前記メモリは、秘密鍵で暗号化された前記プログラムの署名を記憶し、
前記第１制御部による前記判定は、
前記メモリから前記システムバスを介して読み込まれた前記プログラムの署名を計算する計算工程と、
前記メモリから前記暗号化された前記署名を読み込む読み込み工程と、
前記読み込まれた前記暗号化された前記署名を、公開鍵で復号する復号工程と、
を有し、
前記計算された署名と、前記復号された署名とを比較することで前記メモリに記憶された前記プログラムが改ざんされているかを判定することを特徴とする請求項９乃至１４の何れか１項に記載の情報処理装置の制御方法。
【請求項１６】
前記署名とは、前記プログラムのハッシュ値であることを特徴とする請求項１５に記載の情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びその制御方法に関するものである。
【背景技術】
【０００２】
ソフトウェアの脆弱性をついて、ソフトウェアを改ざんし、コンピュータを悪用する攻撃が問題となっている。
【０００３】
特許文献１は、第１のＣＰＵ、第２のＣＰＵ、第２のＣＰＵが実行するプログラムを記憶する不揮発メモリを有する情報処理装置を開示する。この情報処理装置では、第１のＣＰＵが、第２のＣＰＵが実行するプログラムを不揮発メモリから読み出して、そのプログラムの改竄の有無を検証し、その検証の結果に応じて、そのプログラムを第２ＣＰＵに出力する。そして第２ＣＰＵは、改竄がなされていないプログラムを実行するので、セキュリティを向上させることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開ＷＯ０９／０１３８２５
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プログラムをメモリから読み出して改竄の有無を検証するシステムにおいて、改竄の有無を検知するのにかかる時間は、システムバスやＣＰＵ等のモジュールに供給されるクロック周波数が高ければ短時間で済む。しかし、モジュールに供給されるクロックの周波数が高いと、モジュールからの放熱量の増大や消費電力量の増大等の課題が生じる。
【課題を解決するための手段】
【０００６】
本発明は、プログラムを記憶するメモリと、システムバスと、前記メモリに記憶されているプログラムを前記システムバスを介して読み込み、該読み込まれたプログラムが改竄されているかを判定する第１制御部と、改竄されていないと判定された前記プログラムを前記メモリから前記システムバスを介して読み込み、実行する第２制御部と、前記システムバスおよび前記第１制御部の少なくとも１つのモジュールへのクロック供給を制御するクロック制御部と、を有し、前記クロック制御部は、前記少なくとも１つのモジュールについて、前記第１制御部による前記プログラムの読み込みの開始から少なくとも当該読み込みの完了までに供給されるクロックの周波数を、当該プログラムについての前記判定の後に供給されるクロックの周波数よりも高くすることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、放熱や消費電力を増大させ過ぎずに、プログラムの改ざんの有無を検知するのにかかる時間を短縮することができる。
【図面の簡単な説明】
【０００８】
【図１】実施例１の複合機のハードウェア構成図
【図２】ＣＰＵ１１１による改竄検知処理時の電力供給状態を示す図
【図３】複合機のソフトウェア構成図
【図４】起動時の動作を示す模式図
【図５】実施例１の処理を示すフローチャート
【図６】実施例１の処理を示すフローチャート
【図７】実施例２の複合機のハードウェア構成図
【図８】実施例２の処理を示すフローチャート
【発明を実施するための形態】
【０００９】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、本発明は、以下の実施形態のみに限定されるものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。尚、実施形態に係る情報処理装置として複合機（デジタル複合機／ＭＦＰ／Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を例に説明する。しかしながら適用範囲は複合機に限定はせず、情報処理装置であればよい。
【００１０】
（実施例１）
図１は実施例１に係る複合機１０のハードウェア構成を説明するブロック図である。
【００１１】
コントローラ２０は、複合機１０の制御を行うための後述する１０１〜１３７のハードウェアモジュールで構成される。本実施例では半導体チップとして構成されているものとして説明する。
【００１２】
クロック生成部３０は、クロックを生成して複合機１０内部の各モジュールに適した周波数のクロック信号（外部クロック）を供給する。本実施形態ではクロック生成部３０は、クロック信号３１をコントローラ２０内のＰＬＬ（Ｐｈａｓｅ  Ｌｏｃｋｅｄ  Ｌｏｏｐ）１２３に供給する。このＰＬＬ１２３は、周波数が可変なクロックを供給するクロック供給部として機能する。周波数はクロック制御信号３２によって変更可能である。
【００１３】
リセット生成部４０は、リセット信号を生成して複合機１０内部の各モジュールへリセットを掛けたり解除したりする半導体チップである。本実施例ではコントローラ２０へ供給するリセット信号４１しか図示していないがスキャナ１４１やプリンタ１４２などのモジュールにも接続されているものとする。複合機１０の電源が供給されると一定時間（例えば供給電源電圧が安定するまで）リセット信号４１のリセット状態を保持した後にリセット信号４１を解除状態にしてコントローラ２０のリセットを解除する。リセット信号４１がアサートされている状態がリセット信号４１のリセット状態であり、リセット信号４１がデアサートされている状態がリセット信号４１の解除状態である。コントローラ２０のリセットが解除されると、コントローラ２０内のモジュールが動作を開始する。
【００１４】
ＣＰＵ１０１は、複合機１０のソフトウェアプログラムを実行し、装置全体の制御を行う。
【００１５】
ＲＡＭ１０３は、ランダムアクセスメモリで、ＣＰＵ１０１が複合機１０を制御する際に、プログラムや一時的なデータの格納などに使用される。
【００１６】
ＨＤＤ１４４は、ハードディスクドライブで一部のアプリケーション、各種データを格納する。このＨＤＤ１４４は、ＣＰＵ１０１が実行するＪａｖａ（登録商標）プログラム２１４を格納している。
【００１７】
フラッシュメモリ１４５は、複合機１０の固定パラメータ等を格納している。またフラッシュメモリ１４５は、ＣＰＵ１０１が実行するＢＩＯＳ２１０を格納している。さらにＣＰＵ１０１が実行するローダー２１１・カーネル２１２・Ｎａｔｉｖｅプログラム２１３を格納する。なお、ＨＤＤ１４４とフラッシュメモリ１４５は同一のストレージモジュールであっても良いものとする。
【００１８】
ＣＰＵ１１１は、ＣＰＵ１０１が実行するソフトウェアプログラムの改竄を検知する改竄検知ソフトウェアプログラムを実行し、複合機１０の中で一部の制御を行う。
【００１９】
ＲＯＭ１１２はリードオンリーメモリで、前記改竄検知ソフトウェアプログラムや後述の公開鍵などを格納している。またＲＯＭ１１２は、ＣＰＵ１１１が実行するブートプログラム２０９を格納している。
【００２０】
なおＲＯＭ１１２は、データの内容が書き換え不可能なマスクＲＯＭもしくは製造時に一度だけ書き込みが可能なＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍｍａｂｌｅ）  ＲＯＭで構成されている。
【００２１】
ＲＡＭ１１３は、ランダムアクセスメモリで、ＣＰＵ１１１が複合機１０を制御する際に、プログラムや一時的なデータの格納などに使用される。なおＲＡＭ１０３とＲＡＭ１１３は同一のモジュールであっても良いものとする。
【００２２】
電源制御部（電力制御部）１２０は、コントローラ２０内部の各モジュール部に対して電力供給を制御するＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。コントローラ２０（複合機１０）の起動時や動作時に、各モジュール部に対して所定の電力を供給したり停止したりすることができる。
【００２３】
クロック制御部１２１は、ＰＬＬ１２３を内部クロック制御信号３３で制御する。これにより、ＰＬＬ１２３は、クロック信号３１の周波数を逓倍し、周波数が逓倍されたクロック信号をコントローラ２０内部の各モジュール部に対して供給する。クロック制御部１２１は、コントローラ２０の起動時や動作時に、ＰＬＬ１２３に対して逓倍の設定を変更することで、ＰＬＬ１２３が各モジュール部に最適な周波数のクロック（内部クロック）を供給するように制御を行う。またクロック制御部１２１は、モジュールごとに個別にクロックをゲートして停止させることができる。
【００２４】
リセット制御部１２２はコントローラ２０内部の各モジュール部に対してリセット制御する。コントローラ２０の起動時や動作時に、各モジュールをリセット状態にしたりリセット解除状態にしたりする制御を行う。
【００２５】
スキャナＩ／Ｆ制御部１３１は、スキャナ１４１による原稿の読み取り制御する。プリンタＩ／Ｆ制御部１３２は、プリンタ１４２による印刷処理などを制御する。パネル制御部１３３は、タッチパネル式の操作パネル１４３を制御し、各種情報の表示、使用者からの指示入力を制御する。
【００２６】
ＨＤＤ制御部１３４は、ＨＤＤ１４４に対してデータを読み書きする制御を行う。例えばＲＡＭ１０３に格納されている画像データをシステムバス１０９経由でＨＤＤ１４４に書きだして格納することができる。
【００２７】
フラッシュメモリ制御部１３５は、フラッシュメモリ１４５に対してデータを読み書きする制御を行う。フラッシュメモリ制御部１３５は、コントローラ２０の起動時にフラッシュメモリ１４５に格納されているプログラムを読みだしてシステムバス１０９経由でＲＡＭ１１３へ展開することができる。
【００２８】
ネットワークＩ／Ｆ制御部１３６は、ネットワーク１４６上の他のデバイスやサーバーとのデータの送受信を制御する。
【００２９】
外部ポート制御部１３７は、コントローラ２０の入出力ポート制御部である。例えば出力ポートを制御することによりＬＥＤ１４７を必要に応じて点灯し、ソフトウェアやハードウェアの異常を外部に伝えることが可能である。
【００３０】
画像処理部１３８は、スキャナ１４１から読み取った画像データをシェーディング補正したり、プリンタ１４２に出力するためにハーフトーン処理やスムージング処理したりする処理部である。
【００３１】
システムバス１０９は、システムバス１０９に接続されている各モジュールを相互に接続する。このシステムバス１０９を介して、ＣＰＵ１０１やＣＰＵ１１１からの制御信号や各装置間のデータ信号が送受信される。
【００３２】
図３は、実施形態１に係る複合機１０が有するソフトウェアモジュールを説明するブロック図である。これらのソフトウェアはＣＰＵ１０１、またはＣＰＵ１１１が実行するものとして説明する。
【００３３】
通信管理部２０７は、ネットワーク１４６に接続されるネットワークＩ／Ｆ制御装置１３６を制御して、ネットワーク１４６を介して外部とデータの送受信を行う。
【００３４】
ＵＩ制御部２０３は、パネル制御部１３３を介して操作パネル１４３への入力を受け取り、入力に応じた処理や操作パネル１４３への画面出力を行う。
【００３５】
ブートプログラム２０９は、複合機１０の電源を入れるとＣＰＵ１１１で実行されるプログラムであり、起動に関わる処理としてコントローラ２０に対して起動シーケンスを実行する。起動シーケンスについては図４を用いて後述する。このブートプログラム２０９は、起動後にＢＩＯＳの改ざん検知を行うＢＩＯＳ改ざん検知処理部２０１を有する。
【００３６】
ＢＩＯＳ２１０は、ブートプログラム２０９実行後にＣＰＵ１０１で実行されるプログラムであり、起動に関わる処理を行うほかにローダー２１１の改ざん検知を行うローダー改ざん検知処理部２０２を有する。
【００３７】
ローダー２１１は、ＢＩＯＳ２１０の処理が終わった後にＣＰＵ１０１で実行されるプログラムであり、起動に関わる処理を行うほかにカーネルの改ざん検知を行うカーネル改ざん検知処理部２０４を有する。
【００３８】
カーネル２１２は、ローダー２１１の処理が終わった後にＣＰＵ１０１で実行されるプログラムであり、起動に関わる処理を行うほかにＮａｔｉｖｅプログラム２１３の改ざん検知を行うＮａｔｉｖｅ改ざん検知処理部２０５を有する。
【００３９】
Ｎａｔｉｖｅプログラム２１３は、ＣＰＵ１０１で実行されるプログラムであり、複合機１０のＪａｖａプログラム２１４と連携して各機能を提供する複数のプログラムで構成される。この複数のプログラムは、例えばスキャナＩＦ制御部１０６やプリンタＩＦ制御部１０６を制御するプログラムや起動プログラムなどを含む。この起動プログラムは、カーネル２１２によってＮａｔｉｖｅプログラムの中から呼び出され、起動処理を行う。またＮａｔｉｖｅプログラム２１３は、プログラムの中の一つとしてＪａｖａプログラムの改ざん検知を行うＪａｖａプログラム改ざん検知処理部を有する。
【００４０】
Ｊａｖａプログラム２１４は、ＣＰＵ１０１で実行されるプログラムであり、複合機１０のＮａｔｉｖｅプログラム２１３と連携して各機能を提供するプログラム（たとえば操作パネル１４３に画面を表示するプログラム）である。
【００４１】
次に複写機１０の起動シーケンスについて図４を用いて説明する。
【００４２】
図４（ａ）は改ざん検知を行わずに複合機１０が起動する順序を示す起動シーケンス模式図である。ブートプログラム２０９がＢＩＯＳ２１０を起動し、ＢＩＯＳ２１０がローダー２１１を起動し、ローダー２１１がカーネル２１２を起動し、カーネル２１２がＮａｔｉｖｅプログラム２１３の中から起動プログラムを起動する。起動プログラムの中でＪａｖａプログラム２１４が起動され、以降はＮａｔｉｖｅプログラム２１３とＪａｖａプログラム２１４が連携して複合機１０の有する各機能を提供する。
【００４３】
図４（ｂ）はブートプログラム２０９からＢＩＯＳ２１０、ローダー２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３、Ｊａｖａプログラム２１４が改ざん検知を行いながら起動する処理の流れを表した起動シーケンスの模式図である。また、図４（ｂ）は各プログラムの保存場所、デジタル署名（以下署名と呼ぶ）と公開鍵の保存場所を表した模式図でもある。
【００４４】
署名とは、例えば正規のプログラム（データ列）を所定のハッシュ関数によってハッシュ値に変換し、公開鍵に対応する秘密鍵でハッシュ値を暗号化したものである。この暗号化されたハッシュ値を公開鍵で復号することで正規のプログラムのハッシュ値を計算し、改ざんの有無の検証対象であるプログラムを前述のハッシュ関数によってハッシュ値に変換し、これら２つのハッシュ値を比較する。２つのハッシュ値が等しければ検証対象のプログラムは正規のプログラムから改ざんされていないと判定できる。またもし２つのハッシュ値が異なれば検証対象のプログラムは正規のプログラムから改ざんされていると判定できる。このように署名を用いて検証対象のプログラムの改ざん有無を調べる方法を、以降では、プログラムの署名検証と呼ぶ。また、プログラムが改ざんされていないことを、署名検証に成功すると呼び、プログラムが改ざんされていることを、署名検証に失敗すると呼ぶ。本実施例では、プログラムの改ざん有無を調べる方法として、このような署名および公開鍵を用いる方法を採るが、改ざん有無を調べる他の方法でも良い。
【００４５】
ＲＯＭ１１２には、ブートプログラム２０９の他に、ＢＩＯＳ署名検証用の公開鍵３００が格納される。フラッシュメモリ１４５には、ＢＩＯＳ２１０、ローダー２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３、Ｊａｖａプログラム２１４の他に、次のものが格納される。ＢＩＯＳ署名３０２、ローダー検証用公開鍵３０３、ローダー署名３０４、カーネル検証用公開鍵３０５、カーネル署名３０６、Ｎａｔｉｖｅプログラム検証用公開鍵３０７である。また、Ｎａｔｉｖｅプログラム署名３０９、Ｊａｖａプログラム検証用公開鍵３０８、Ｊａｖａプログラム署名３１０もフラッシュメモリ１４５に格納される。これらの公開鍵と署名はあらかじめ複合機１０の出荷前にＲＯＭ１１２およびフラッシュメモリ１４５に格納されたものとする。
【００４６】
改ざん検知処理部２０１、２０２、２０４〜２０６が次のプログラムが改ざんされているかどうかを検証し、改ざんされていなければ次のプログラムを起動する。このようにプログラムの改ざん検知および起動を順次行う起動シーケンスにしたがって複合機１０は起動する。
【００４７】
ここで、本実施例の特徴である前記起動シーケンスにおいて改竄検知プログラムを実施する際に周波数を最高速度で動作する方法について図４、図６を用いて説明をする。
【００４８】
図４はＣＰＵ１１１が実行する起動シーケンスの処理のフローチャートであり、図６はＣＰＵ１０１が実行する起動シーケンスの処理のフローチャートである。
【００４９】
本実施例では初期状態においては次の設定で動作してから図４のフローチャートの処理が実行されるものとする。
【００５０】
複合機１０の電源が入ると電源制御部１２０は、コントローラ２０の各部に電力を供給するように制御を行う。またクロック制御部１２１は、電力が供給されると、クロック制御信号３２をクロック生成部３０に出力することで、クロック生成部３０の発振器もしくは振動子にクロック信号３１を生成させるように制御する。またクロック制御部１２１は、内部クロック制御信号３３をＰＬＬ１２３に出力することで、ＰＬＬ１２３に所望のコントローラ２０の内部クロックを生成させるように制御する。電源投入時のデフォルト状態ではＰＬＬ１２３の逓倍機能が動作しておらず、クロック信号３１はバイパスされて内部クロックとして出力されているものとする。したがって内部クロックは通常動作時の１／１０程度の低周波数である。
【００５１】
次にリセット生成部４０は、リセット信号４１を介してリセット制御部１２２に対するリセットを解除する。
【００５２】
リセット制御部１２２に対するリセットが解除されると、まずリセット制御部１２２は、ＣＰＵ１１１、ＲＯＭ１１２、システムバス１０９のリセットを解除する。このときはまだ、ＣＰＵ１０１はリセット状態のままである。またＣＰＵ１１１のリセットベクターは、ＲＯＭ１１２のアドレスである。すなわち、ＣＰＵ１１１のリセットが解除されるとＣＰＵ１１１は、ＲＯＭ１１２に記憶されているプログラムを実行する。ＣＰＵ１０１のリセットベクターは、フラッシュメモリ１４５のアドレスであり、ＣＰＵ１０１のリセットが解除されると、ＣＰＵ１０１は、フラッシュメモリ１４５に記憶されているプログラムを実行する。
【００５３】
以下にＳ４０１〜Ｓ４１０はＣＰＵ１１１が実行する起動シーケンスを図４に沿って説明する。すなわちＣＰＵ１１１が実行する図３に示されるソフトウェアモジュールによって以下の処理が行われる。この起動シーケンスの特徴は、Ｓ４０２、Ｓ４０３、Ｓ４０７、Ｓ４０８である。すなわち、プログラムの改竄有無を判定する処理（この処理を以降、改竄検知処理と呼ぶ）の間は、この改竄検知処理に関わるモジュールの少なくとも１つに高周波数のクロックが供給され、かつ、コントローラ２０内の一部のモジュールのみに電力が供給される。この改竄検知処理に関わるモジュールとは、例えばＣＰＵ１１１、システムバス１０９等である。そして、この改竄検知処理（図５）後は、コントローラ２０内の全モジュールに電力が供給され、かつ、前記少なくとも１つのモジュールに低周波数のクロックが供給される。例えば、クロック制御部１２１がＰＬＬ１２３を制御し、ＣＰＵ１１１によるＢＩＯＳ２１０のＲＯＭ１０２からの読み出し開始から少なくともＢＩＯＳ２１０の読み出し完了まで高周波数のクロックがＣＰＵ１１１、システムバス１０９に供給されるようにする。またクロック制御部１２１はＰＬＬ１２３を制御し、ＣＰＵ１１１によるＢＩＯＳ２１０の改竄検知処理後に低周波数のクロックがＣＰＵ１１１、システムバス１０９に供給されるようにする。
【００５４】
Ｓ４０１においてＣＰＵ１１１のリセットが解除されると、ＣＰＵ１１１は、ＲＯＭ１１２に記憶されているブートプログラムを、システムバス１０９を介して読み出して実行する。
【００５５】
Ｓ４０２においてＣＰＵ１１１は、ブートプログラムに従って電源制御（電力制御）を行う。ここでは改竄検知を行うために必要なコントローラ２０内の一部のモジュールのみに電源を供給するように制御を行う。なお、本実施例では改竄検知処理時に必要な次の所定のモジュールには少なくとも電源を供給する。クロック制御部１２１、リセット制御部１２２、ＰＬＬ１２３、電源制御部１２０である。また、ＣＰＵ１０１、ＲＡＭ１０３、ＣＰＵ１１１、ＲＯＭ１１２、ＲＡＭ１１３、ＨＤＤ制御部１３４、フラッシュメモリ制御部１３５、フラッシュメモリ１４５、外部ポート制御部１３７である。また、図２で灰色で塗られたモジュールには、電源が供給されない。
【００５６】
Ｓ４０３においてＣＰＵ１１１は、ブートプログラムに従って以下のクロック制御を行う。コントローラ２０の起動完了後にコントローラ２０内の各モジュールの動作周波数は複合機１０の製品仕様に応じて異なる。しかしながら起動時間の短縮のために、起動シーケンスにおいて改竄検知処理を行う間、改竄検知処理に関連するモジュール（例えばＣＰＵ１１１やシステムバス１０９）に供給されるクロックの周波数を高周波数に設定するのが良い。
【００５７】
そこで本実施例では、クロック制御部１２１は、クロック制御信号３２によってクロック生成部３０に対して、高周波数のクロック信号３１を供給するように指示する。なお、外部クロックを変更した場合は水晶振動子や水晶発振器が安定するまで一定時間待つ必要がある。
【００５８】
さらにクロック制御部１２１は、内部クロック制御信号３３によってＰＬＬ１２３に対して、コントローラ２０内の必要なモジュールに対して供給される内部クロックの周波数を高周波数に設定する。こうすることでＣＰＵ１１１やシステムバス１０９、フラッシュメモリ制御部１３５の処理速度を高速で行うことが可能となる。
【００５９】
なおクロック制御部１２１は、内部クロックの周波数を変更するために、次の処理を行う。すなわちクロック制御部１２１は、ＰＬＬ１２３からのクロックを一旦ゲートして、ＰＬＬ１２３をバイパスした外部クロックに切り替え、ＰＬＬ１２３で生成される内部クロックが安定してから、高速な内部クロックを各モジュールに供給する制御を行う。ここで内部クロックを切り替える制御はＣＰＵ１１１へのクロック供給も停止してしまうのでクロック制御部１２１の内部にハードシーケンサを設けて行うものとする。
【００６０】
クロック制御部１２１は、ＣＰＵ１０１、ＲＡＭ１０３、ＣＰＵ１１１、ＲＯＭ１１２、ＲＡＭ１１３、システムバス１０９、ＨＤＤ制御部１３４、フラッシュメモリ制御部１３５、フラッシュメモリ１４５に供給されるクロック周波数の設定を行う。設定されるクロック周波数は後述のＳ４０７において設定される周波数よりも高い周波数である。供給されるクロックの周波数は、供給先のモジュールによって異ならせてよい。例えばＣＰＵ１１１には１５０ＭＨｚのクロック、システムバス１０９には６００ＭＨｚのクロック等の異なる周波数のクロックが供給されてよい。こうすることで後述の処理を最短で実行することができる。とくにフラッシュメモリ１４５から読み出すＢＩＯＳ、ローダー、カーネルはデータ量が大きく読み出し時間や改竄検知処理のための暗号復号処理が起動時間に大きく影響するものである。したがってシステムバス１０９やフラッシュメモリ制御部１３５およびＣＰＵ１１１の動作周波数を最大にすることで起動時間を短縮することが可能となる。
【００６１】
Ｓ４０４においてＣＰＵ１１１は、ブートプログラムに従ってリセット解除を行う。すなわちＣＰＵ１１１は、改竄検知処理に必要なモジュールのリセットを解除する。具体的にはＲＡＭ１１３、ＨＤＤ制御部１３４、フラッシュメモリ制御部１３５、フラッシュメモリ１４５のリセットが解除される。
【００６２】
Ｓ４０５においてＣＰＵ１１１は、ブートプログラムに従ってＢＩＯＳ２１０の署名検証を行う。ブートプログラム２０９に含まれるＢＩＯＳ改ざん検知処理部２０１は、フラッシュメモリ１４５からシステムバス１０９を介してＢＩＯＳ２１０およびＢＩＯＳ署名３０２をＲＡＭ１１３に読み込む。次にＢＩＯＳ改ざん検知処理部２０１は、ブートプログラムＢＩＯＳ検証用公開鍵３００を用いてＢＩＯＳ署名３０２の検証を行う。
【００６３】
Ｓ４０６においてＣＰＵ１１１は、ＢＩＯＳ２１０の署名検証が成功したかを判定する。署名検証の結果、ＢＩＯＳが改ざんされていない（ハッシュ値と署名の値とが一致する）ならば、署名検証に成功したとして、処理はＳ４０７に進む。ＢＩＯＳが改ざんされている（ハッシュ値と署名の値とが一致しない）ならば、署名検証に失敗したとして、処理はＳ４１０に進む。
【００６４】
Ｓ４０７においてＣＰＵ１１１は、クロック制御部１２１を制御して、ＰＬＬ１２３が供給するクロックの周波数を、Ｓ４０３において設定した高周波数から、複合機１０の製品仕様に応じた相対的に低い動作周波数に変更する。供給されるクロックの周波数は、供給先のモジュールによって異ならせてよい。例えばＣＰＵ１１１には１００ＭＨｚ、システムバス１０９には４００ＭＨｚのクロックをそれぞれ供給してよい。動作周波数の変更方法についてはＳ４０３で説明したものと同様のため割愛する。
【００６５】
Ｓ４０８においてＣＰＵ１１１は、電源制御部１２０を制御して、コントローラ２０内の全モジュールに電源を供給するように制御を行う。
【００６６】
Ｓ４０９においてＣＰＵ１１１は、リセット制御部１２２を制御してＣＰＵ１０１、ＲＡＭ１０３のリセットを解除し、ブートプログラム２０９の処理を終了する。そして起動シーケンスは後述のＳ５０１へ遷移する。すなわちＣＰＵ１０１がＢＩＯＳ２１０を実行してＢＩＯＳ２１０が起動する。
【００６７】
Ｓ４１０においてＢＩＯＳ改ざん検知処理部２０１（ＣＰＵ１１１）は、Ｓ４０６で署名検証に失敗したことを通知するために、外部ポート制御部１３７を制御してＬＥＤ１４７を点灯させ、ブートプログラム２０９の処理を終了する。
【００６８】
なお、Ｓ４０７の制御は後述のＣＰＵ１０１が実行するプログラムのＢＩＯＳやカーネルで実行しても良いものとする。そうすることでＣＰＵ１０１の起動シーケンスを高速周波数で動作させてさらに起動時間を短縮効果が得られる。なお、製品仕様によっては電源容量や熱容量があるため高速周波数が動作保証できる範囲でクロック制御、電源制御は行われるものとする。
【００６９】
以上のシーケンスを実行することでＣＰＵ１０１は改竄されていないＢＩＯＳ２１０を実行することが可能となる。
【００７０】
以下にＳ５０１〜Ｓ５１０はＣＰＵ１０１が実行する起動シーケンスを図６に沿って説明する。すなわちＣＰＵ１０１が実行する図３に示されるソフトウェアモジュールによって以下の処理が行われる。なお、下記の説明においてプログラム（ローダー２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３、Ｊａｖａプログラム２１４）の改ざん検知の有無の判定方法は一例であり、プログラムの改ざんを検知する方法であれば他の方法が実行されてもよい。
【００７１】
Ｓ５０１においてＣＰＵ１０１は、フラッシュメモリ１４５からシステムバス１０９を介してＢＩＯＳ２１０をフラッシュＢＩＯＳ２１０は起動されると、各種初期化処理を行う。このときＢＩＯＳ２１０に含まれるローダー改ざん検知処理部２０２が、フラッシュメモリ１４５から、ローダー２１１とカーネル検証用公開鍵３０５、ローダー署名３０４を、ＲＡＭ１０３に読み込む。ここでの初期化シーケンスは例えばＨＤＤ制御部１３４の初期化を行いＨＤＤ１４４へアクセスができるようにする。
【００７２】
Ｓ５０２においてローダー改ざん検知処理部２０２は、ローダー検証用公開鍵３０３およびローダー署名３０４を用いてローダー２１１の署名検証を行い、署名検証に成功したか判定する。署名検証に失敗した場合、Ｓ５１０にてローダー改ざん検知処理部２０２は、パネル制御部１３３の初期化を行って操作パネル１４３にエラーメッセージを表示し処理を終了する。署名検証に成功した場合、ローダー改ざん検知処理部２０４は処理を終了し、ＢＩＯＳ２１０がＲＡＭ１０３に読み込まれたローダー２１１を起動する。
【００７３】
Ｓ５０３においてローダー２１１は起動されると、各種初期化処理を行う。ここでの初期化は例えばパネル制御部１３３の初期化を行って操作パネル１４３に起動画面を表示させたりする。また、ローダー２１１に含まれるカーネル改ざん検知処理部２０４が、フラッシュメモリ１４５から、カーネル２１２とＮａｔｉｖｅプログラム検証用公開鍵３０７とカーネル署名３０６を、ＲＡＭ１０３に読み込む。
【００７４】
Ｓ５０４においてカーネル改ざん検知処理２０４は、カーネル検証用公開鍵３０５およびカーネル署名３０６を用いてカーネル２１２の署名検証を行い、署名検証に成功したか判定する。署名検証に失敗した場合、Ｓ５１０にてカーネル改ざん検知処理部２０４は、操作パネル１４３にエラーメッセージを表示し処理を終了する。署名検証に成功した場合、カーネル改ざん検知処理部２０４は処理を終了し、ローダー２１１がＲＡＭ１０３に読み込まれたカーネル２１２を起動する。
【００７５】
Ｓ５０５においてカーネル２１２は起動されると、各種初期化処理を行う。ここでの初期化は例えばネットワークＩ／Ｆ制御部１３６の初期化を行ってネットワーク１４６との通信が行えるようにする。次にカーネル２１２に含まれるプログラム改ざん検知処理部２０５が、フラッシュメモリ１４５から、Ｎａｔｉｖｅプログラム２１３・Ｊａｖａプログラム２１４に対する検証用公開鍵３０８と、Ｎａｔｉｖｅプログラム署名３０９を、ＲＡＭ１０３に読み込む。
【００７６】
Ｓ５０６においてプログラム改ざん検知処理部２０５は、検証用公開鍵３０８およびＮａｔｉｖｅプログラム署名３０９を用いてＮａｔｉｖｅプログラム２１３の署名検証を行い、署名検証に成功したか判定する。署名検証に失敗した場合、Ｓ５１０にてプログラム改ざん検知処理部２０４は、操作パネル１４３にエラーメッセージを表示し処理を終了する。署名検証に成功した場合、プログラム改ざん検知処理部２０５は処理を終了し、Ｎａｔｉｖｅプログラム２１３を起動する。
【００７７】
Ｓ５０７においてＮａｔｉｖｅプログラム２１３のうち、改ざん検知の処理を行うＪａｖａプログラム改ざん検知処理部２０６が起動されると、ＨＤＤ１４４から、Ｊａｖａプログラム２１４とＪａｖａプログラム署名３１０を、ＲＡＭ１０３に読み込む。
【００７８】
Ｓ５０８においてＪａｖａプログラム改ざん検知処理部２０６は、検証用公開鍵３０８およびＪａｖａプログラム署名３１０を用いてＪａｖａプログラム２１４の署名検証を行い、署名検証に成功したか判定する。署名検証に失敗した場合、Ｓ５１０にてＪａｖａプログラム改ざん検知処理部２０６は操作パネル１４３にエラーメッセージを表示し処理を終了する。署名の検証に成功した場合、Ｊａｖａプログラム改ざん検知処理部２０５は処理を終了し、Ｓ５０９にてＪａｖａプログラム２１４を起動する。
【００７９】
なおＳ５１０の処理は、操作パネル１４３へエラーメッセージを表示するが、これに代えて、Ｓ４１０の処理のように、外部ポート制御部１３７を制御してＬＥＤ１４７を点灯させるようにしてもよい。また操作パネル１４３へのエラーメッセージの表示およびＬＥＤ１４７の点灯の両方が行われてもよい。
【００８０】
以上説明したように実施形態１によれば、ブートプログラム２０９がＢＩＯＳ２１０の改ざんを検知する処理を高速に実行させるようにすることで起動時間を短縮することができる。
【００８１】
本実施例ではクロック制御を最大周波数から複合機１０の製品仕様に応じて通常時の動作周波数は変更する処理をブートプログラム２０９が実行中におこなっている。しかし、クロック制御を行うプログラムは本実施例のものに限定されず、ＢＩＯＳ２１０やカーネル２１２などがクロック制御を実行してもよい。
【００８２】
また、本実施例では公開鍵がすべて異なるものであるとして説明したが、同じものがあってもよい。またブートプログラム２０９以外のプログラムの保存場所は限定されるものではなく、別の記憶媒体であってもよい。またプログラムの保存場所が上記で説明した箇所とは異なる箇所であってもよく、たとえばＲＯＭ１１２上にローダー２１１を記憶する構成であってもよい。
【００８３】
（実施例２）
実施例２について説明する。前述の実施例１ではコントローラ２０を１つのＬＳＩで構成するもので説明したが、実施例２では起動時の改竄検知を行う専用チップを用いた構成で行う方法について実施例１との差分のみ説明する。
【００８４】
図７は本実施例の複合機１０の構成図である。実施例１との差分は改竄検知コントローラ５０がＩＣで構成されている点である。改竄検知コントローラ５０は、実施例１のコントローラ２０内部のＣＰＵ１１１、ＲＯＭ１１２、ＲＡＭ１１３、ＬＥＤ１４７、システムバス１０９の機能に相当するＣＰＵ５０１、ＲＯＭ５０２、ＲＡＭ５０３、ＬＥＤ１４８、システムバス５０９を持つ。さらに電源制御部５２０、クロック制御部５２１、リセット制御部５２２、外部ポート制御部５０４、フラッシュメモリ制御部５０５も持つ。
【００８５】
また改竄検知コントローラ５０は、クロック生成部１２１を制御するためのクロック制御信号３２と、コントローラ２０のリセット解除を行うためのコントローラリセット信号４２とが接続されている。また改竄検知コントローラ５０は、フラッシュメモリ１４５、ＬＥＤ１４８にも接続されている。なお、コントローラ２０と改竄検知コントローラ５０との両方がフラッシュメモリ１４５に同時にアクセスできないため、スイッチ１４９がアクセス制御を行う。つまりスイッチ１４９は、コントローラ２０からのフラッシュメモリ１４５へのアクセスが行われている間、改竄検知コントローラ５０からのフラッシュメモリ１４５へのアクセスができないようにする。またスイッチ１４９は、改竄検知コントローラ５０からのフラッシュメモリ１４５へのアクセスが行われている間、コントローラ２０からのフラッシュメモリ１４５へのアクセスができないようにする。
【００８６】
本実施例２では初期状態においては以下の設定で動作するものとする。
【００８７】
複合機１０の電源を入れると電源制御部５２０の制御によってクロック制御部５２１、リセット制御部５２２、ＣＰＵ５０１、ＲＯＭ５０２、ＲＡＭ５０３に電力が供給される。リセット生成部４０からリセット信号４１を介して改竄検知コントローラ５０に対するリセット解除がなされる。またクロック制御部５２１は、電力が供給されると、複合機１０内のクロック生成部３０の発振器もしくは振動子、および、不図示の改竄検知コントローラ２０内のＰＬＬ１２３が、それぞれ所定のクロック生成するための制御を行う。さらにリセット制御部５２２は、改竄検知コントローラ５０に対するリセット解除がなされるとＣＰＵ５０１のリセットを解除する。またＣＰＵ５０１のリセットベクターはＲＯＭ５０２のアドレスに設定されており、ＣＰＵ５０１のリセットが解除されるとＣＰＵ５０１はまずＲＯＭ５０２に格納されているプログラムを実行する。一方リセット制御部１２２は、コントローラ２０に対するリセット解除がコントローラリセット信号４２を介してなされると、ＣＰＵ１０１のリセットを解除する。ＣＰＵ１０１のリセットベクターがフラッシュメモリ１４５のアドレスに設定されていると、リセットが解除されたＣＰＵ１０１はまずフラッシュメモリ１４５に格納されているプログラムを実行する。
【００８８】
図８は改竄検知を行う専用チップを用いた起動シーケンスである。Ｓ７０１〜Ｓ７１０はＣＰＵ５０１が実行するものとして説明する。Ｓ７０９以外については実施例１と同様のため説明を割愛する。つまりＳ７０１〜Ｓ７０８、Ｓ７１０の処理はそれぞれ、Ｓ４０１〜Ｓ４０８、Ｓ４１０の処理と同様である。ただし、Ｓ４０１からＳ４１０におけるコントローラ２０のモジュールであるＣＰＵ１１１、ＲＯＭ１１２、ＲＡＭ１１３は改竄検知コントローラ５０のモジュールＣＰＵ５０１、ＲＯＭ５０２、ＲＡＭ５０３に対応する。またフラッシュメモリ制御部１３５、外部ポート制御部１３７、システムバス１０９、フラッシュメモリ制御部５０５、外部ポート制御部５０４、システムバス５０９に対応する。さらに電源制御部１２０、クロック制御部１２１、リセット制御部１２２は電源制御部５２０、クロック制御部５２１、リセット制御部５２２に対応する。
【００８９】
Ｓ７０９においてＣＰＵ５０１は、リセット制御部５２２を制御することでコントローラ２０に対するコントローラリセット信号４２のリセット状態を解除し、ブートプログラム２０９の処理を終了する。
【００９０】
以上説明したように実施形態２によれば、Ｓ７０１〜Ｓ７１０の起動シーケンスによってブートプログラム２０９がＢＩＯＳ２１０の改ざんを検知する処理を高速に実行させるようにすることで起動時間を短縮することができる。
【００９１】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
2020071723.tif 000003
【図２】
2020071723.tif 000004
【図３】
2020071723.tif 000005
【図４】
2020071723.tif 000006
【図５】
2020071723.tif 000007
【図６】
2020071723.tif 000008
【図７】
2020071723.tif 000009
【図８】
2020071723.tif 000010