(57)【要約】【課題】ＭＦＰを制御する制御システムが、複数のＳＯＣで制御されている場合に、１つのＳＯＣが正常に立ち上がっても、他のＳＯＣが異常に立ち上がってしまうと、そのＳＯＣが担当する機能が正しく動作しないなどの問題が生じる。【解決手段】少なくとも第１制御手段と第２制御手段とを有する情報処理装置であって、  前記情報処理装置が起動されると前記第１制御手段は、前記第２制御手段に対して、前記第２制御手段が実行するブートプログラムの改ざんの検知処理を実行するように指示し、前記指示に応じて前記第２制御手段で実行された前記検知処理の結果が改ざん無しを示す場合は、前記第１制御手段により前記第２制御手段を起動させ、前記検知処理の結果が改ざん有りを示す場合は、前記第１制御手段は、前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信する。【選択図】  図６
2020154601.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１制御手段と第２制御手段とを有する情報処理装置であって、
前記情報処理装置が起動されると前記第１制御手段は、前記第２制御手段に対して、前記第２制御手段が実行するブートプログラムの改ざんの検知処理を実行するように指示し、
前記指示に応じて前記第２制御手段で実行された前記検知処理の結果が改ざん無しを示す場合は、前記第１制御手段により前記第２制御手段を起動させ、
前記検知処理の結果が改ざん有りを示す場合は、前記第１制御手段は、前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信することを特徴とする情報処理装置。
【請求項２】
前記第１制御手段はさらに、前記第２制御手段に送信したブートプログラムの改ざんの検知処理の結果が改ざん無しを示す場合は、前記第１制御手段により前記第２制御手段を起動させ、前記検知処理の結果が改ざん有りを示す場合は、エラー処理を実行することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２制御手段は、前記第２制御手段が実行するブートプログラムを不揮発に記憶する第１記憶手段を有し、
前記第２制御手段は、前記指示に応じて、前記第１記憶手段に記憶されている前記ブートプログラムの改ざん検知処理を実行することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記第１制御手段は、前記第２制御手段が実行するブートプログラムを不揮発に記憶する第２記憶手段を有し、
前記検知処理の結果が改ざん有りを示す場合は、前記第１制御手段は、前記第２記憶手段から読み出した、前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記第１制御手段は、前記検知処理の結果が改ざん有りを示す場合、ネットワークを介して前記情報処理装置に接続されているサーバから受信した、第２制御手段が実行するブートプログラムを前記第２制御手段に送信することを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記第１制御手段は、前記検知処理の結果が改ざん有りを示す場合は、前記第２制御手段が実行するブートプログラムの識別情報を生成し、当該識別情報に対応するブートプログラムを前記第２制御手段に送信することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記第１制御手段は、前記第２制御手段に対して行う処理を前記第１制御手段に実行させるためのプログラムを記憶する、書き込みできない不揮発メモリを有することを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記第１制御手段が、前記検知処理の結果が改ざん有りを示す場合に前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信すると、前記第２制御手段は、さらに当該ブートプログラムの改ざんの検知処理を実行することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
少なくとも第１制御手段と第２制御手段とを有する情報処理装置を制御する制御方法であって、
前記情報処理装置が起動されると前記第１制御手段は、前記第２制御手段に対して、前記第２制御手段が実行するブートプログラムの改ざんの検知処理を実行するように指示する工程と、
前記指示に応じて前記第２制御手段で実行された前記検知処理の結果が改ざん無しを示す場合は、前記第１制御手段は前記第２制御手段を起動させる工程と、
前記検知処理の結果が改ざん有りを示す場合は、前記第１制御手段は、前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信する工程と、
を有することを特徴とする制御方法。
【請求項１０】
前記送信する工程で、前記第１制御手段が、前記検知処理の結果が改ざん有りを示す場合に前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信すると、前記第２制御手段は、さらに当該ブートプログラムの改ざんの検知処理を実行する工程を、更に有することを特徴とする請求項９に記載の制御方法。
【請求項１１】
コンピュータに、請求項９又は１０に記載の制御方法の各工程を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置とその制御方法、及びプログラムに関するものである。
【背景技術】
【０００２】
近年、ネットワークに接続された情報機器のセキュリティの脆弱性（セキュリティホール）を突いて、情報機器内のファームウェアが改ざんされる問題に対処することが重要となっている。ＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ、以下、「複合機」）においても、ネットワークに接続された状態でのクラウドサービスが展開されており、情報のセキュリティ対策が求められている。
【０００３】
その情報のセキュリティ対策の一環として、セキュアブートが導入されてきている。セキュアブートとは、情報機器の起動時に、デジタル署名されていない、或いは、デジタル署名がされていても第三者により改ざんされたファームウェアを実行しないようにする技術である。このようにブートローダの書き換え（改ざん）を検出し、改ざんされていないかをチェックし終えてから起動することで、第三者により改造されたプログラムによる不正な動作を不可能とする。例えば特許文献１には、ＣＰＵのファームウェアに異常が検知された場合に、そのファームウェアを修復するような装置構成及び制御方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１７９０４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら上記従来の方式では、ファームウェアの異常検知しかしていないため、ＣＰＵの立ち上がり時（以降、ブート時）に使用されるブートプログラムが改ざんされていた場合に対応できない。従って、ブートプログラムが改ざんされた場合には、異常な動作をしてしまう可能性がある。
【０００６】
また、ＭＦＰを制御する制御システムが、複数のＳＯＣ（System On Chip）で制御されている場合に、１つのＳＯＣが正常に立ち上がっても、他のＳＯＣが異常に立ち上がってしまうと、そのＳＯＣが担当する機能（例えば、ＭＦＰの画像スキャン機能）が正しく動作しないなどの問題が生じる可能性がある。
【０００７】
本発明の目的は、上記従来技術の問題点の少なくとも一つを解決することにある。
【０００８】
本発明の目的は、複数の制御手段を備える情報処理装置において、複数の制御手段が正常に立ち上がった場合にのみ、その装置が起動できるようにすることで、上記課題を解決する技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
少なくとも第１制御手段と第２制御手段とを有する情報処理装置であって、
前記情報処理装置が起動されると前記第１制御手段は、前記第２制御手段に対して、前記第２制御手段が実行するブートプログラムの改ざんの検知処理を実行するように指示し、
前記指示に応じて前記第２制御手段で実行された前記検知処理の結果が改ざん無しを示す場合は、前記第１制御手段により前記第２制御手段を起動させ、
前記検知処理の結果が改ざん有りを示す場合は、前記第１制御手段は、前記第２制御手段が実行するブートプログラムを前記第２制御手段に送信することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、複数の制御手段を備える情報処理装置において、複数の制御手段が正常に立ち上がった場合にのみ、その装置が起動できるようにできる。また、ある制御手段が安全に起動できない場合は、その制御手段のブートプログラムを修復して、安全に起動させることができる。
【００１１】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。尚、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１２】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】実施形態１に係る複合機のハードウェア構成を説明するブロック図。
【図２】実施形態１に係る複合機が有するソフトウェアモジュールを説明するブロック図。
【図３】起動シーケンスを説明する図。
【図４】実施形態１に係る複合機のコントローラとスキャナ及びプリンタのそれぞれの制御構成を説明するブロック図。
【図５】複合機とネットワークを介して接続されるサーバを含むシステム構成図。
【図６】実施形態１に係る複合機のメインコントローラによる制御処理を説明するフローチャート。
【図７】実施形態１に係るスキャナコントローラによる処理を説明するフローチャート。
【図８】実施形態２に係る複合機のメインコントローラによる制御処理を説明するフローチャート。
【図９】本発明の実施形態２に係るサーバによる処理を説明するフローチャート。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これら複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一もしくは同様の構成に同一の参照番号を付し、重複した説明は省略する。尚、以下の実施形態では、本発明に係る情報処理装置の一例を複合機を例に説明する。
【００１４】
［実施形態１］
図１は、実施形態１に係る複合機１００のハードウェア構成を説明するブロック図である。
【００１５】
コントローラ１１０は、複合機１００の制御を行うためのハードウェアモジュールを有する。実施形態１では、コントローラ１１０は半導体チップとして構成されているものとして説明する。クロック生成部１０３は、クロック信号を生成して複合機１００の各モジュールに適した周波数のクロック信号（外部クロック）を供給する。実施形態１では、クロック生成部１０３は、クロック信号１０５をコントローラ１１０内のＰＬＬ（Ｐｈａｓｅ  Ｌｏｃｋｅｄ  Ｌｏｏｐ）１２３に供給する。尚、このクロック信号１０５の周波数はクロック制御信号１０７によって変更可能である。
【００１６】
クロック制御部１２１は、ＰＬＬ１２３を内部クロック制御信号１０８で制御する。これによりＰＬＬ１２３は、クロック信号１０５の周波数を逓倍し、周波数が逓倍されたクロック信号をコントローラ１１０の各モジュールに供給する。クロック制御部１２１は、コントローラ１１０の起動時や動作時に、ＰＬＬ１２３に対して逓倍の設定を変更することで、ＰＬＬ１２３が各モジュールに最適な周波数のクロック（内部クロック）を供給するように制御を行う。またクロック制御部１２１は、各モジュールごとに、クロックをゲートして、クロック信号の供給を停止させることができる。
【００１７】
リセット生成部１０４は、リセット信号１０６を生成して出力することにより、複合機１００の各モジュールへリセットを掛けたり解除したりする半導体チップである。図１ではコントローラ１１０へ供給するリセット信号１０６しか図示していないが、フラッシュメモリ１４５、ＬＥＤ１４７、スキャナ１４１やプリンタ１４２などのモジュールにも接続されているものとする。
【００１８】
複合機１００の電源がオンされると、一定時間（例えば、供給電源電圧が安定するまで）リセット信号１０６のリセット状態を保持した後、リセット信号１０６を解除状態にしてコントローラ１１０のリセットを解除する。リセット信号１０６がアサートされている状態がリセット状態であり、リセット信号１０６がデアサートされている状態がリセット信号１０６の解除状態である。コントローラ１１０のリセットが解除されると、リセット制御部１２２は、コントローラ１１０内部の各モジュールのリセット制御を行う。このリセット制御は、コントローラ１１０の起動時や動作時に、各モジュールをリセット状態にしたり、リセット解除状態にする制御を指す。
【００１９】
ＣＰＵ１０１は、複合機１００のソフトウェアプログラムを実行し、機器全体の制御を行う。ＲＡＭ１０２は、ＣＰＵ１０１が複合機１００を制御する際に、プログラムや、データの一時的な格納などに使用される揮発性のランダムアクセスメモリである。ＨＤＤ１４４はハードディスクドライブであり、一部のアプリケーションや各種データを格納する。このＨＤＤ１４４は、ＣＰＵ１０１が実行するＪａｖａプログラム２１４（図２）を格納している。尚、Ｊａｖａプログラム２１４については後述する（以下、ＢＩＯＳ２１０などについても同様）。フラッシュメモリ１４５は、複合機１００の固定パラメータ等を格納している。またフラッシュメモリ１４５は、ＣＰＵ１０１が実行するＢＩＯＳ２１０（図２）を格納している。更にフラッシュメモリ１４５は、ＣＰＵ１０１が実行するローダ２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３（いずれも図２）を格納する。尚、ＨＤＤ１４４とフラッシュメモリ１４５は同一のストレージモジュールであっても良い。
【００２０】
ＣＰＵ１１１は、ＣＰＵ１０１が実行するソフトウェアプログラムの改ざんを検知する改ざん検知ソフトウェアプログラムを実行する他、ＣＰＵ１０１と分担して複合機１００の一部の制御を行う。ＲＯＭ１１２は、不揮発性のリードオンリーメモリであり、ＣＰＵ１１１により実行される改ざん検知ソフトウェアプログラムや後述の公開鍵などを格納している。またＲＯＭ１１２は、ＣＰＵ１１１が実行するブートプログラム２０９を格納している。ここでＲＯＭ１１２は、外部からのＩ／Ｆから書き換えられないように論理回路で構成されたマスクＲＯＭ、もしくは製造時に一度だけ書き込みが可能なＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍｍａｂｌｅ）ＲＯＭで構成されている。ＲＡＭ１１３は、揮発性のランダムアクセスメモリであり、ＣＰＵ１１１が複合機１００を制御する際に、プログラムや一時的なデータの格納などに使用される。尚、ＲＡＭ１０２とＲＡＭ１１３は同一のモジュールであっても良い。
【００２１】
電源制御部１２０は、コントローラ１１０の各モジュールに対する電力供給を制御するＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。コントローラ１１０（複合機１００）の起動時や動作時に、各モジュール部に対して所定の電力を供給したり停止したりすることができる。スキャナＩ／Ｆ制御部１３１は、スキャナ１４１による原稿の読み取り制御する。プリンタＩ／Ｆ制御部１３２は、プリンタ１４２による印刷処理などを制御する。パネル制御部１３３は、タッチパネル式の操作パネル１４３を制御し、各種情報の表示、ユーザからの指示の入力を受け付ける。ＨＤＤ制御部１３４は、ＨＤＤ１４４に対してデータを読み書きする制御を行う。例えば、ＲＡＭ１０２に格納されている画像データをシステムバス１０９経由でＨＤＤ１４４に格納することができる。フラッシュメモリ制御部１３５は、フラッシュメモリ１４５に対してデータを読み書きする制御を行う。フラッシュメモリ制御部１３５は、フラッシュメモリ１４５に格納されているプログラムを読み出してシステムバス１０９経由でＲＡＭ１１３へ展開する。ネットワークＩ／Ｆ制御部１３６は、ネットワーク１４６上の他のデバイスやサーバとのデータの送受信を制御する。外部ポート制御部１３７は、コントローラ１１０の入出力ポート制御部である。例えば出力ポートを制御することにより、ＬＥＤ１４７を必要に応じて点灯し、ソフトウェアやハードウェアの異常を外部に伝えることができる。画像処理部１３８は、スキャナ１４１で原稿を読み取って得られた画像データをシェーディング補正したり、プリンタ１４２に出力するためにハーフトーン処理やスムージング処理したりする処理部である。システムバス１０９は、システムバス１０９に接続されている各モジュールを相互に接続する。このシステムバス１０９を介して、ＣＰＵ１０１やＣＰＵ１１１からの制御信号や各装置間のデータ信号が送受信される。
【００２２】
図２は、実施形態１に係る複合機１００が有するソフトウェアモジュールを説明するブロック図である。これらのソフトウェアはＣＰＵ１０１又はＣＰＵ１１１が実行するものとして説明する。
【００２３】
通信管理部２０７は、ネットワーク１４６に接続されるネットワークＩ／Ｆ制御部１３６を制御し、ネットワーク１４６を介して外部とデータの送受信を行う。ＵＩ制御部２０３は、パネル制御部１３３を介して操作パネル１４３に入力された指示内容を受け取り、入力に応じた処理や操作パネル１４３への画面出力を行う。
【００２４】
ブートプログラム２０９は、複合機１００の電源がオンされるとＣＰＵ１１１で実行されるプログラムであり、起動に関わる処理としてコントローラ１１０に対して起動シーケンスを実行する。このブートプログラム２０９は、ＢＩＯＳ２１０の改ざん検知を行うＢＩＯＳ改ざん検知部２０１を有する。ＢＩＯＳ２１０は、ＣＰＵ１１１によるブートプログラム２０９の実行後に、ＣＰＵ１０１で実行されるプログラムであり、起動に関わる処理を行う他に、ローダ２１１の改ざん検知を行うローダ改ざん検知部２０２を有する。
【００２５】
ローダ２１１は、ＢＩＯＳ２１０の処理が終わった後にＣＰＵ１０１で実行されるプログラムであり、起動に関わる処理を行う他に、カーネルの改ざん検知を行うカーネル改ざん検知部２０４を有する。カーネル２１２は、ローダ２１１の処理が終わった後にＣＰＵ１０１で実行されるプログラムであり、起動に関わる処理を行う他に、Ｎａｔｉｖｅプログラム２１３の改ざん検知を行うプログラム改ざん検知部２０５を有する。
【００２６】
Ｎａｔｉｖｅプログラム２１３は、ＣＰＵ１０１で実行されるプログラムであり、複合機１００のＪａｖａプログラム２１４と連携して各機能を提供する複数のプログラムを有している。これら複数のプログラムは、例えば、スキャナＩＦ制御部１３１やプリンタＩＦ制御部１３２を制御するプログラムや起動プログラムなどを含む。この起動プログラムは、カーネル２１２によってＮａｔｉｖｅプログラム２１３の中から呼び出され、起動処理を行う。またＮａｔｉｖｅプログラム２１３は、プログラムの中の一つとしてＪａｖａプログラムの改ざん検知を行うＪａｖａプログラム改ざん検知部２０６を有する。Ｊａｖａプログラム２１４は、ＣＰＵ１０１で実行されるプログラムであり、複合機１００のＮａｔｉｖｅプログラム２１３と連携して各機能を提供するプログラム（例えば、操作パネル１４３に画面を表示するプログラムなど）である。
【００２７】
次に、複合機の起動シーケンスについて図３を参照して説明する。
【００２８】
図３（Ａ）は、改ざん検知を行わずに複合機が起動する順序を示す起動シーケンス模式図である。
【００２９】
ブートプログラムがＢＩＯＳを起動し、ＢＩＯＳがローダを起動し、ローダがカーネルを起動し、カーネルがＮａｔｉｖｅプログラムの中から起動プログラムを起動する。そして起動プログラムの中でＪａｖａプログラムが起動され、以降はＮａｔｉｖｅプログラムとＪａｖａプログラムが連携して複合機の有する各機能を提供する。
【００３０】
図３（Ｂ）は、ブートプログラム２０９からＢＩＯＳ２１０、ローダ２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３、Ｊａｖａプログラム２１４が、それぞれ改ざん検知を行う処理の流れを表した起動シーケンスの模式図である。図中、各プログラムの保存場所、デジタル署名（以下、単に「署名」と呼ぶ）と公開鍵の保存場所をも表している。
【００３１】
ここで署名とは、例えば正規のプログラム（データ列）を所定のハッシュ関数によってハッシュ値（メッセージ・ダイジェスト）に変換し、公開鍵に対応する秘密鍵でハッシュ値を暗号化したものである。この暗号化されたハッシュ値を公開鍵で復号することで正規のプログラムのハッシュ値を求める。そして、改ざんの有無の検証対象であるプログラムを前述のハッシュ関数によってハッシュ値に変換する。そして、これら２つのハッシュ値を比較する。そして、２つのハッシュ値が等しければ、検証対象のプログラムは正規のプログラムから改ざんされていないと判定できる。一方、もし２つのハッシュ値が一致しなければ、検証対象のプログラムは正規のプログラムから改ざんされていると判定できる。
【００３２】
このように署名を用いて検証対象のプログラムの改ざんの有無を調べる方法を、以降では「署名検証」と呼ぶ。また、プログラムが改ざんされていない（検証対象のプログラムが正規のものである）場合は、署名検証に成功すると呼び、プログラムが改ざんされている（検証対象のプログラムが正規のものでない）場合は、署名検証に失敗すると呼ぶ。
【００３３】
実施形態１では、プログラムの改ざんの有無を判定する方法として、このような署名及び公開鍵を用いる方法を採るが、改ざんの有無を判定する他の方法でも良い。
【００３４】
ＲＯＭ１１２には、ブートプログラム２０９の他にＢＩＯＳ署名検証用の公開鍵３００が含まれる。
【００３５】
フラッシュメモリ１４５には、ＢＩＯＳ２１０、ローダ２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３、Ｊａｖａプログラム２１４の他に、次のものも含まれている。暗号化されたＢＩＯＳ署名３０２、ローダ検証用公開鍵３０３、暗号化されたローダ署名３０４、カーネル検証用公開鍵３０５、暗号化されたカーネル署名３０６、Ｎａｔｉｖｅプログラム検証用公開鍵３０７である。更に、暗号化されたＮａｔｉｖｅプログラム署名３０８、Ｊａｖａプログラム検証用公開鍵３０９、暗号化されたＪａｖａプログラム署名３１０もフラッシュメモリ１４５に記憶されている。これらの公開鍵と署名は、予め複合機１００を製造する段階でプログラムに対して付与されたものとする。
【００３６】
改ざん検知部２０１，２０２，２０４，２０５，２０６が、次に起動するプログラムが改ざんされているかどうかを検証し、そのプログラムが改ざんされていなければ、そのプログラムを起動する。このようにプログラムの改ざん検知及びプログラムの起動を順次行う起動シーケンスに従い複合機１００は起動する。
【００３７】
以上のようにして、複合機全体の動作を管理するコントローラ１１０のブートプログラムなどの改ざん検知を行う。実施形態１では、コントローラ１１０のブートプログラムの改ざんの検知を行うのみならず、スキャナ１４１やプリンタ１４２の動作を制御するそれぞれのコントローラについても、ブートプログラムの改ざん検知を行う例で説明する。尚、以下では、説明を簡単にするために、各プログラムで最初に起動されるブートプログラムの改ざん検知のみについて説明する。
【００３８】
図４は、実施形態１に係る複合機１００のコントローラ１１０とスキャナ１４１及びプリンタ１４２のそれぞれの制御構成を説明するブロック図である。尚、コントローラ１１０において、ここでの説明が不要なものについては表示を省略している。
【００３９】
コントローラ１１０は、ＲＯＭ１１２に複数で、且つ同一のブートプログラムを格納している。ＣＰＵ１１１によってブートプログラムの改ざん検知を行う際には、予め決められた場所に格納された第一のブートプログラムに対して改ざん検知を行う。第一のブートプログラムが改ざんされていると検知された場合は、第二のブートプログラムに対して改ざん検知を行う。第二のブートプログラムが改ざんされていないと検知された場合は、第一のブートプログラムを第二のブートプログラムで上書き処理を行うことで修復する。
【００４０】
これによりコントローラ１１０は安全に起動することができる。このように、ブートプログラムの改ざん検知を行い、改ざんされている場合に第二のブートプログラムで修復し、コントローラ１１０が安全に立ち上がるような制御方法を、実施形態ではセキュアブートと呼ぶ。
【００４１】
スキャナ１４１は、スキャナコントローラ４１とスキャナエンジン４４１とを含んでいる。スキャナエンジン４４１は、実際に原稿を読み込んでデジタルデータを生成する部分である。スキャナコントローラ４１は、スキャナＩ／Ｆ制御部１３１を介してコントローラ１１０と接続されている。スキャナコントローラ４１は、コントローラ１１０と同様に、スキャナコントローラ４１全体を制御するＣＰＵ４１１と、スキャナコントローラ用のブートプログラムの改ざん検知を行うＣＰＵ４１３の２つのＣＰＵを持つ。ＣＰＵ４１１は、ＲＡＭ４１２を使用して不揮発メモリ４１４からロードされたブートプログラムを実行する。ＣＰＵ４１３は、ＲＡＭ４１５を使用して不揮発メモリ４１４から読み出されたブートプログラムの改ざん検知を行う。スキャナ制御部４１６は、スキャナコントローラ４１とスキャナエンジン４４１とを接続し、スキャナエンジン４４１からのデジタルデータの受信やスキャナエンジン４４１の動作制御信号などをやり取りする。
【００４２】
プリンタ１４２は、プリンタコントローラ４２とプリンタエンジン４４２とを有している。プリンタエンジン４４２は、デジタルデータを受信して、実際に用紙上に画像を形成する。プリンタコントローラ４２は、プリンタＩ／Ｆ制御部１３２を介してコントローラ１１０と接続されている。プリンタコントローラ４２は、コントローラ１１０と同様に、プリンタコントローラ４２の全体を制御するＣＰＵ４２１と、プリンタコントローラ用のブートプログラムの改ざん検知を行うＣＰＵ４２３の２つのＣＰＵを持つ。ＣＰＵ４２１は、ＲＡＭ４２２を使用して、不揮発メモリ４２４からロードされたブートプログラムを実行する。ＣＰＵ４２３は、ＲＡＭ４２５を使用して、不揮発メモリ４２４から読み出されたブートプログラムの改ざん検知を行う。プリンタ制御部４２６は、プリンタコントローラ４２とプリンタエンジン４４２とを接続し、プリンタエンジン４４２へのデジタルデータの送信や、プリンタエンジン４４２の動作制御信号などをやり取りする。
【００４３】
ここで、スキャナコントローラ４１の不揮発メモリ４１４、及びプリンタコントローラの不揮発メモリ４２４には、１つのブートプログラムしか格納されていない。これはプログラムの格納数を制限することで、各メモリの容量を削減することができ、複合機１００全体のコストダウンを図るためである。
【００４４】
一方、こうした構成の複合機１００においては、スキャナコントローラ４１もしくはプリンタコントローラ４２の各不揮発メモリに格納されたブートプログラムが改ざんされている場合、スキャナ１４１、もしくはプリンタ１４２が正しい動作ができない可能性が高い。このため、ブートプログラムが改ざんされている場合には、スキャナ動作やプリンタ動作ができないため、一部機能の使用停止もしくは複合機１００全体が使用停止に陥ってしまう。
【００４５】
このような場合においても、ブートプログラムを修復し、安全に起動するための方法について、図５、図６及び図７を用いて以下に説明する。尚、以下説明を簡単にするため、コントローラ１１０をメインコントローラと呼ぶ。
【００４６】
図５は、複合機１００とネットワークを介して接続されるサーバ５００を含むシステム構成図である。
【００４７】
図５において、メインコントローラ１１０はスキャナコントローラ４１に対してリセット解除などを行うため、最初に立ち上がる必要がある。またメインコントローラ１１０は複数のブートプログラムをＲＯＭ１１２に格納しており、セキュアブート制御によって安全に立ち上がっているものとする。
【００４８】
図６は、実施形態１に係る複合機１００のメインコントローラ１１０による制御処理を説明するフローチャートであり、このフローチャートで示す処理は、ＣＰＵ１０１もしくはＣＰＵ１１１によって実行される。いずれの制御がどちらのＣＰＵにて行われるかについては、その都度説明する。
【００４９】
まずＳ６０１でＣＰＵ１１１は、メインコントローラ１１０用のブートプログラムの改ざん検知を行う。次いでＳ６０２に進みＣＰＵ１０１を起動させ各種プログラムを実行させ、これ以降、メインコントローラ１１０はＣＰＵ１０１によって安全に動作する。
【００５０】
次Ｓ６０３に進みＣＰＵ１０１は、スキャナコントローラ４１に改ざん検知の開始を指示する通知を送信する。このときスキャナコントローラ４１はリセット状態となっており、この改ざん検知の開始通知によって、図示しないリセット制御部により、スキャナコントローラ４１のＣＰＵ４１３のみが起動される。こうしてＣＰＵ４１３は、不揮発メモリ４１４に格納されたブートプログラムの改ざん検知動作を開始する。このときスキャナコントローラ４１のＣＰＵ４１１はまだリセット状態である。次にＳ６０４に進み、スキャナコントローラ４１から改ざんが検知されなかったことを示す完了通知が来たかどうか、或いは、Ｓ６０５でスキャナコントローラ４１でブートプログラムの改ざんを検知した旨の通知が来るかどうかを待つ。
【００５１】
図７は、実施形態１に係るスキャナコントローラ４１による処理を説明するフローチャートであり、特に断らない限り内部ＣＰＵ４１３によって実行される。次に図７のフローチャートを参照して、スキャナコントローラ４１の動作を説明する。
【００５２】
この処理は、スキャナコントローラ４１ではＣＰＵ４１３のリセットが解除されて、スキャナコントローラ４１による改ざん検知処理の実行が図６のＳ６０３で指示されることにより開始される。まずＳ７０１でＣＰＵ４１３は、不揮発メモリ４１４の所定アドレスに格納されたブートプログラムを読み出し、そのブートプログラムの改ざんの検知を行う。次にＳ７０２に進みＣＰＵ４１３は、そのブートプログラムが改ざんされているかどうかを判定する。Ｓ７０２でＣＰＵ４１３は、ブートプログラムが改ざんが検知されていないと判定した場合はＳ７１０に進みＣＰＵ４１３は、メインコントローラ１１０に対してブートプログラムが改ざんされていないことを通知して、この処理を終了する。尚、この通知は、図６のＳ６０４でメインコントローラ１１０が受信する。
【００５３】
一方、Ｓ７０２でＣＰＵ４１３は、ブートプログラムが改ざんが検知されていると判定した場合はＳ７０３に進みＣＰＵ４１３は、メインコントローラ１１０に対してブートプログラムが改ざんされていることを通知する。これは図６のＳ６０５でメインコントローラ１１０により受信される。そしてＳ７０４でＣＰＵ４１３は、図６のＳ６０８でメインコントローラ１１０から送信されるブートプログラムの受信を待つ。
【００５４】
次に図６のフローチャートにおいて、メインコントローラ１１０のＣＰＵ１０１はＳ６０５で、スキャナコントローラ４１からブートプログラムの改ざんを検知した旨の通知を受信したかどうか判定し、改ざんを検知した旨の通知を受信するとＳ６０６に進み、そうでないときはＳ６０４に進む。
【００５５】
Ｓ６０６でＣＰＵ１０１は、そのブートプログラムの改ざんを検知した旨の通知に基づいて、そのブートプログラム識別情報を作成する。このブートプログラムの識別情報は、どのスキャナコントローラでブートプログラム改ざんが発生したかの情報を含む。実施形態１は、例えばスキャナコントローラ４１からの通知であれば、スキャンコントローラ４１のブートプログラム、複数のスキャナコントローラが接続されていれば、そのスキャナコントローラのブートプログラムであることを示す。
【００５６】
次にＳ６０７に進みＣＰＵ１０１は、Ｓ６０６で作成したブートプログラムの識別情報に基づいて、ＨＤＤ１４４の所定の場所に予め格納されている、対応するブートプログラムを読み出して取得する。この時、このブートプログラム識別情報に紐づいて、ＨＤＤ１４４に予め格納されたブートプログラムの場所情報及びデータ長情報がＣＰＵ１０１で実行されるプログラムに用意されている。従ってＣＰＵ１０１は、これらを参照して、ＨＤＤ１４４からスキャナコントローラ４１用のブートプログラムを取得する。そしてＳ６０８に進みＣＰＵ１０１は、Ｓ６０８で取得したブートプログラムをスキャナコントローラ４１に送信する。その後、Ｓ６０９でＣＰＵ１０１は、その送信したブートプログラムが改ざんされているかどうかの検証結果をスキャナコントローラ４１から受信するのを待ち、改ざんされていないという通知を受信するとＳ６１１に進んで、そのスキャナコントローラ４１の起動を許可して、この処理を終了する。一方、検証結果を受信しないときはＳ６１０に進み、Ｓ６０８で送信したブートプログラムが改ざんされていたという検証結果を受信したかどうか判定し、そのような検証結果を受信しないときはＳ６０９に進む。Ｓ６１０で、送信したブートプログラムが改ざんされていたという検証結果を受信するとＳ６１２に進み、エラー処理を行って、この処理を終了する。
【００５７】
次に図７のフローチャートにて、スキャナコントローラ４１のＣＰＵ４１３は、Ｓ７０４で、図６のＳ６０８で、メインコントローラ１１０から送信されるブートプログラムを受信したかどうか判定する。そしてブートプログラムを受信するとＳ７０５に進みＣＰＵ４１２は、Ｓ７０１と同様にして、そのブートプログラムの改ざん検知処理を行う。そしてＳ７０６に進みＣＰＵ４１３は、そのブートプログラムが改ざんされているかどうか判定し、改ざんされていないと判定した場合は、その受信した取得したブートプログラムが安全であるとしてＳ７０７に進んで、不揮発メモリ４１４のブートプログラムを修復する。このブートプログラムの修復とは、Ｓ７０２で改ざんされていたと判定された不揮発メモリ４１４のブートプログラムを、Ｓ７０４で受信したブートプログラムで上書きすることである。次にＳ７０８に進みＣＰＵ４１３は、メインコントローラ１１０に対して改ざん検知の完了通知を行い、スキャンコントローラ４１側のブートプログラム改ざん検知動作制御は終了となる。一方、Ｓ７０６に進みＣＰＵ４１３は、そのブートプログラムが改ざんされていると判定した場合はＳ７０９に進み、ＣＰＵ４１３はエラー処理を実行して、この処理を終了する。
【００５８】
次に、図６のフローチャートにおいて、メインコントローラ１１０のＣＰＵ１０１は、Ｓ６０９で、図７のＳ７０８でスキャナコントローラ４１から送信されるブートプログラムに改ざんが無いという通知を受信するとＳ６１１に進む。Ｓ６１１でＣＰＵ１０１は、スキャナコントローラ４１での改ざんの検知処理が完了したと判定して、スキャナコントローラ４１のＣＰＵ４１１のリセットを解除し、スキャナコントローラ４１は安全に起動することになる。
【００５９】
尚、Ｓ７０５で取得したブートプログラムに改ざんがあるとＳ７０６で判定された場合には、Ｓ７０９にてエラー状態となり、スキャナコントローラ４１はメインコントローラ１１０に対してエラー通知を行う。この場合は図６には記載していないが、メインコントローラは、ＨＤＤ１４４が不正に利用されていると判定して、ＨＤＤ１４４へのアクセスの禁止、並びに操作パネル１４３にエラー表示をし、複合機１００が使用できない旨ユーザーに通知するなどをしても良い。
【００６０】
以上説明したように実施形態１によれば、メインコントローラとスキャナコントローラ及びメインコントローラに接続されたＨＤＤを用いて、起動時に用いられるブートプログラムのセキュアブート制御を実行し、複合機が安全に立ち上げることが可能となる。
【００６１】
尚、実施形態１では説明を簡単にするために、スキャナコントローラ４１にてブートプログラムのセキュアブート制御を行うように説明したが、プリントコントローラ４２でも同様のセキュアブート制御が行えることは言うまでもない。また、スキャナコントローラ４１とプリントコントローラ４２の両方でセキュアブート制御が行えるような構成・制御でも良い。
【００６２】
［実施形態２］
実施形態１に対して、スキャナコントローラ用のブートプログラムを取得する場所が異なる実施形態２について図５、図７、図８及び図９を参照して説明する。
【００６３】
図８は、実施形態２に係る複合機１００のメインコントローラ１１０による制御処理を説明するフローチャートであり、このフローチャートで示す処理は、ＣＰＵ１０１もしくはＣＰＵ１１１によって実行される。いずれの制御がどちらのＣＰＵにて行われるかについては、その都度説明する。尚、図８において、前述の図６と共通する処理は同じ参照符号を付して、その説明を省略する。
【００６４】
図９は、実施形態２に係るサーバ５００による処理を説明するフローチャートである。  図８のＳ６０５で、スキャナコントローラ４１からブートプログラムの改ざんを検知した旨の通知を受信するとＳ６０６に進み、そのブートプログラムの改ざん検知の通知に基づいて、ブートプログラムの識別情報を作成する。このブートプログラムの識別情報は、どのスキャナコントローラでブートプログラムの改ざんが発生したかの情報を含む。実施形態２では、例えばスキャナコントローラ４１からであれば、その識別情報はスキャンコントローラ４１のブートプログラムを示し、複数のスキャナコントローラが接続されていれば、その改ざんを検知したスキャナコントローラのブートプログラムであることを示す。
【００６５】
次にＳ８０１に進みＣＰＵ１０１は、その作成したブートプログラムの識別情報をサーバ５００に送信する。この時、サーバ５００とメインコントローラ１１０との間はネットワーク１４６で接続されているが、既に、メインコントローラ１１０は安全に起動されているため、サーバ５００とは、ＳＳＬ通信など安全な通信方法でブートプログラム識別情報は送信される。
【００６６】
サーバ５００は、その記憶手段内に、取得したブートプログラムの識別情報に紐付いたブートプログラムを格納しているものとする。例えば、スキャナコントローラ４１の要因で作成されたブートプログラムの識別情報に対しては、スキャナコントローラ４１用のブートプログラムを格納している。また、プリンタコントローラ４２の要因で作成されたブートプログラムの識別情報に対しては、プリンタコントローラ４２用のブートプログラムを格納している。またサーバ５００には、実施形態２で説明する複合機１００とは別の機種の複合機の各種ブートプログラムが格納されている構成でも良く、複合機１００に起因するブートプログラムの識別情報は、別の機種の複合機のブートプログラムの識別情報とは異なる。よって、それぞれのブートプログラムの識別情報を基に、それに紐付いて格納された１つのブートプログラムを特定することができる。
【００６７】
図９は、本発明の実施形態２に係るサーバ５００による処理を説明するフローチャートである。
【００６８】
サーバ５００はＳ９０１で、複合機１００からブートプログラムの問い合わせがあったかどうかを判定する。ここでは、複合機１００からブートプログラムの識別情報を受信するとＳ９０２に遷移する。Ｓ９０２でサーバ５００は、受信したブートプログラムの識別情報を解析し、複合機１００から送信されたこと、ブートプログラムの種類などを判定する。これにより、対象のブートプログラムは一意に特定される。次にＳ９０３に進みサーバ５００は、対応するブートプログラムをサーバ５００に接続されている図示しない記憶手段から読み出す。そしてＳ９０４に進みサーバ５００は、その読み出したブートプログラムを、ネットワーク１４６を介して複合機１００に送信する。このときも、ＳＳＬ通信など安全な通信方法で送信されるものとする。
【００６９】
これにより図８のフローチャートにおいて、この間メインコントローラ１１０は、サーバ５００からスキャナコントローラ４１用ブートプログラムが送信されるまでＳ８０２で炊きしている。そしてＣＰＵ１０１は、サーバ５００からスキャナコントローラ４１用のブートプログラムを受信するとＳ８０２からＳ６０８に進み、その受信したブートプログラムをスキャナコントローラ４１に送信する。その後、Ｓ６０９で、スキャナコントローラ４１からブートプログラムの改ざん検知が完了したか、或いはＳ６１０で、送信したブートプログラムが改ざんされていたがどうかの検証結果を待つ。
【００７０】
この場合のスキャナコントローラ４１の処理は前述の実施形態１と同様であるため、その説明を省略する。
【００７１】
以上説明したように実施形態２によれば、メインコントローラとスキャナコントローラ及びネットワークを介して接続されたサーバを用いて、起動時に用いられるブートプログラムのセキュアブート制御を実行し、複合機が安全に立ち上げることが可能となる。
【００７２】
尚、実施形態１では説明を簡単にするために、スキャナコントローラ４１にてブートプログラムのセキュアブート制御を行うように説明したが、プリントコントローラ４２でも同様のセキュアブート制御が行えることは言うまでもない。また、スキャナコントローラ４１とプリントコントローラ４２の両方でセキュアブート制御が行えるような構成・制御でも良い。
【００７３】
尚、前述の実施形態１のように、ＨＤＤに格納されたブートプログラムが改ざんされている場合は、複合機で安全に起動できるブートプログラムが存在しない可能性が高いことが想定される。このため実施形態２では、よりセキュリティが高いサーバに格納されたブートプログラムを受け取り、より安全に起動する構成を提供するものである。
【００７４】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００７５】
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から逸脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００７６】
４１…スキャナコントローラ、４２…プリンタコントローラ、１００…複合機、１０１，１１１…ＣＰＵ（コントローラ）、１１０…コントローラ、４１４，４２４…不揮発メモリ
【図１】
2020154601.tif 000003
【図２】
2020154601.tif 000004
【図３】
2020154601.tif 000005
【図４】
2020154601.tif 000006
【図５】
2020154601.tif 000007
【図６】
2020154601.tif 000008
【図７】
2020154601.tif 000009
【図８】
2020154601.tif 000010
【図９】
2020154601.tif 000011