(57)【要約】      （修正有）【課題】動的に起動されるソフトウェアが改ざんされていないことを検証するための実行時検証機能自体が改ざんされていないことを保証し、実行時検証機能の検証結果を信頼できるものとする。【解決手段】ＭＦＰにおいて、装置の起動時に、ハードウェア検証手段によるハードウェアのハードウェア検証を実行し、第１の検証手段によるプログラムのソフトウェア検証を実行し、装置の起動が完了した後、特定の機能が実行されることに伴い、第２の検証手段によるプログラムのソフトウェア検証を実行する。【選択図】図１０
2019191698.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェア検証手段と、複数のプログラムを記憶する記憶手段と、前記複数のプログラムの実行を制御する制御手段と、を有する情報処理装置であって、
前記ハードウェア検証手段によるハードウェアのハードウェア検証を実行し検証が成功したことを契機にして前記制御手段による前記記憶手段に記憶されたプログラムのソフトウェア検証を実行する第１の検証手段と、
前記第１の検証手段による２つの検証が成功したことで前記装置の起動が完了した後、特定の機能が実行されることに伴い前記制御手段による前記記憶手段に記憶されたプログラムのソフトウェア検証を実行する第２の検証手段と、
前記第１の検証手段、または前記第２の検証手段による検証が失敗したことに伴い、前記装置の利用を制限する制限手段と、を有することを特徴とする情報処理装置。
【請求項２】
前記第２の検証手段による検証が失敗したことに伴う前記制限手段による制限とは前記プログラムの利用の停止であり、停止に伴い改ざんを検知したことを前記装置の画面上に通知することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１の検証手段による検証は前記装置の電源が供給され起動処理が開始されたタイミングで実行され、前記第２の検証手段による検証は前記装置の機能を実行することが指示されたタイミングで実行されることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記第１の検証手段による検証の内の前記ソフトウェア検証ではプログラム内の各プログラムの起動順に従い前記各プログラムのソフトウェア検証を順番に実行し、何れかのプログラムのソフトウェア検証が失敗したことで、前記制限手段により前記装置の利用が制限されることを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項５】
前記第１の検証手段によるソフトウェア検証ではプログラム内で次に起動するプログラムのハッシュ値を計算し、前記第１の検証手段に利用するため記憶した第１のハッシュ値のリストに含まれるハッシュ値との比較を実行することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記第２の検証手段によるソフトウェア検証ではユーザにより選択された機能に対応するプログラムのハッシュ値を計算し、前記第２の検証手段による検証に利用するため記憶した第２のハッシュ値のリストに含まれるハッシュ値との比較を実行することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記制限手段は、前記第２の検証手段によるソフトウェア検証が失敗したことに応じて当該プログラムが既知のプログラムであるか否かを判断し、既知のプログラムでないと判断した場合は前記装置のシステムを停止せずに未知のプログラムの実行を制限した旨を通知することを特徴とする請求項１乃至６の何れか１項に記載の情報処理装置。
【請求項８】
前記ハードウェア検証手段により検証されるハードウェアとはＢＩＯＳであり、前記制御手段により検証されるプログラムとはＯＳを構成するプログラムおよび／またはアプリケーションプログラムであることを特徴とする請求項１乃至７の何れか１項に記載の情報処理装置。
【請求項９】
ハードウェア検証手段によるハードウェア検証ステップと、複数のプログラムを記憶手段に記憶する記憶ステップと、前記複数のプログラムの実行を制御する制御手段による制御ステップと、を実行する情報処理装置の制御方法であって、
前記ハードウェア検証手段によるハードウェアのハードウェア検証を実行し検証が成功したことを契機にして前記制御手段による前記記憶手段に記憶されたプログラムのソフトウェア検証を実行する第１の検証ステップと、
前記第１の検証ステップにおいて２つの検証が成功したことで前記装置の起動が完了した後、特定の機能が実行されることに伴い前記制御手段による前記記憶手段に記憶されたプログラムのソフトウェア検証を実行する第２の検証ステップと、
前記第１の検証ステップ、または前記第２の検証ステップにおいて検証が失敗したことに伴い、前記装置の利用を制限する制限ステップと、を含む制御方法。
【請求項１０】
ハードウェア検証手段によるハードウェア検証ステップと、複数のプログラムを記憶手段に記憶する記憶ステップと、前記複数のプログラムの実行を制御する制御手段による制御ステップと、を実行する情報処理装置の制御方法のプログラムであって、
前記ハードウェア検証手段によるハードウェアのハードウェア検証を実行し検証が成功したことを契機にして前記制御手段による前記記憶手段に記憶されたプログラムのソフトウェア検証を実行する第１の検証ステップと、
前記第１の検証ステップにおいて２つの検証が成功したことで前記装置の起動が完了した後、特定の機能が実行されることに伴い前記制御手段による前記記憶手段に記憶されたプログラムのソフトウェア検証を実行する第２の検証ステップと、
前記第１の検証ステップ、または前記第２の検証ステップにおいて検証が失敗したことに伴い、前記装置の利用を制限する制限ステップと、を含むプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェア改ざん検知機能を有する情報処理装置、制御方法、およびそのプログラムである。
【背景技術】
【０００２】
機器を制御するソフトウェアを第三者が改ざんし、不正利用する攻撃が問題になっている。不正利用されてしまうと、情報資産を盗まれたり、他のシステムを攻撃する踏み台に利用されたりすることで、機器の所有者に甚大な被害を引き起こす危険性がある。そういった攻撃に対し、ソフトウェアが改ざんされていないことを機器利用時に検証する手段が考案されている（特許文献１を参照）。
【０００３】
機器が有する機能増加、複雑化に伴いソフトウェアを機能単位毎に分割して機器内に配置し、分割された単位で必要に応じて実行する構成が一般的になっている。分割方法としては、複数の記憶媒体を機器に搭載し、記憶媒体毎に別のソフトウェアを配置する構成と、記憶媒体上にファイルシステムを構築して、ファイル毎に別のソフトウェアを配置する構成がある。一般的にコンピュータや組み込み機器は両方の手段を併用して複雑なソフトウェアの機能性を実現している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−１５３０４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ユーザが機能を利用する時にソフトウェアが改ざんされていないことを保証するためには、連続的分な処理としてソフトウェアを検証し、実行する必要がある。あらかじめ検証しておく形態では、検証してから実行するまでの間に改ざんされるケースに対応できないためである。検証方法としては、例えば、正解値として対象ソフトウェアのハッシュ値をあらかじめ作成しておき、検証時に対象ソフトウェアのハッシュ値を再度計算し、両者が一致しない場合に改ざんされていると判断する。
【０００６】
実行時のソフトウェア検証処理において、検証を行う処理自体もソフトウェアによって実現されている。ここで、検証を行うソフトウェア自身が改ざんされている可能性があると、検証結果の信頼性が確保できない問題がある。
【０００７】
本願発明の目的は、信頼性の高い検証方法により正当性が確認されたソフトウェアによって機器の制御ソフトウェアの正当性を確認することで、機器をセキュアに利用させることを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために以下の構成によるシステムを提供する。
【０００９】
複数に分割され、段階的に起動される部分ソフトウェアに対して、システム起動時にハードウェアに固定化された方法によって部分ソフトウェアを検証する手段と、検証済みの部分ソフトウェアによって他の部分ソフトウェアを検証する手段からなる起動時検証手段を有し、任意のタイミングで実行されるソフトウェアを実行に先立って検証する実行時検証手段を有し、起動時検証手段によって実行時検証を行うソフトウェアを検証することで、ハードウェアを起点とする検証の連鎖を実行時検証結果まで適用することを特徴とする画像形成装置。さらに、実行時検証により正当性を検証できなかったソフトウェアが既知のソフトウェアであるか否かに応じて、システム全体を停止するか否かを切り替えることを特徴とする画像形成装置。さらに、起動時検証機能と実行時検証機能をそれぞれ有効にするか否かを選択できる設定を設けた上で、実行時検証機能だけを有効化できない様に設定手段を制御することを特徴とする画像形成装置。
【発明の効果】
【００１０】
信頼性の高い検証方法により正当性が確認されたソフトウェアによって機器の制御ソフトウェアの正当性が確認されるので、ユーザはセキュアに機器を利用することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明に係わるＭＦＰとクライアントＰＣの接続形態を示すブロック構成図である。
【図２】ＭＦＰのコントローラ部の内部構成図である。
【図３】ＭＦＰのコントローラ内で実行されるソフトウェアのブロック構成図である。
【図４】正解値リスト、ホワイトリストの例である。
【図５】設定に係る画面構成図である。
【図６】設定に係る画面構成図である。
【図７】設定に係る画面構成図である。
【図８】設定に係る画面構成図である。
【図９】設定に係る画面構成図である。
【図１０】本発明のＭＦＰ側の処理を実施するフロー図である。
【図１１】本発明のＭＦＰ側の処理を実施するフロー図である。
【図１２】本発明のＭＦＰ側の処理を実施するフロー図である。
【図１３】本発明のＭＦＰ側の処理を実施するフロー図である。
【図１４】本発明のＭＦＰ側の処理を実施するフロー図である。
【発明を実施するための形態】
【００１２】
［実施例１］
以下、本発明の実施の形態を図面に基づいて解説する。本実施例では、システム起動時、機能実行時のソフトウェア検証処理、ソフトウェア更新時の正解値の更新処理、および検証設定の操作部制御処理について説明する。ここではＭＦＰ（Ｍｕｌｔｉ−Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ：複合機）を例に実施例を説明するが、本発明は複合機以外の任意の情報処理装置に適用可能な技術である。
【００１３】
図１は本発明に係るＭＦＰとクライアントＰＣの接続形態を示すブロック図である。ＭＦＰ１００とクライアントＰＣ１２０はＬＡＮ１５０を介して接続されている。ＭＦＰ１００はユーザとの入出力を行う操作部１０２を有する。ＭＦＰ１００は電子データを紙媒体に出力するプリンタ部１０３を有する。ＭＦＰ１００は紙媒体を読み込み電子データに変換するスキャナ部１０４を有する。操作部１０２とプリンタ部１０３とスキャナ部１０４はコントローラ部１０１に接続され、コントローラ部１０１の制御に従い複合機としての機能を実現する。クライアントＰＣ１２０はＭＦＰ１００に対してプリントジョブの送信といった処理を行う。
【００１４】
図２はＭＦＰのコントローラ部１０１の詳細を示すブロック図である。ＣＰＵ２０１はコントローラ内の主な演算処理を行う。ＣＰＵ２０１はバスを介してＤＲＡＭ２０２と接続される。ＤＲＡＭ２０２はＣＰＵ２０１が演算する過程で演算命令を表すプログラムデータや、処理対象のデータを一時的に配置するための作業メモリとしてＣＰＵ２０１によって使用される。ＣＰＵ２０１はバスを介してＩ／Ｏコントローラ２０３と接続される。Ｉ／Ｏコントローラ２０３はＣＰＵ２０１の指示に従い各種デバイスに対する入出力を行う。Ｉ／Ｏコントローラ２０３にはＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）Ｉ／Ｆ２０５が接続され、その先にＦｌａｓｈＲＯＭ２１１が接続される。ＣＰＵ２０１はＦｌａｓｈＲＯＭ２１１をＭＦＰの機能を実現するためのプログラム、およびドキュメントファイルを永続的に記憶するために使用する。Ｉ／Ｏコントローラ２０３にはネットワークＩ／Ｆ２０４が接続され。ネットワークＩ／Ｆ２０４の先には、有線ＬＡＮデバイス２１０が接続される。
【００１５】
ＣＰＵ２０１はネットワークＩ／Ｆ２０４を介して有線ＬＡＮデバイス２１０を制御することで、ＬＡＮ１５０上の通信を実現する。Ｉ／Ｏコントローラ２０３にはパネルＩ／Ｆ２０６が接続され、ＣＰＵ２０１はパネルＩ／Ｆ２０６を介して操作部１０２に対するユーザ向けの入出力を実現する。Ｉ／Ｏコントローラ２０３にはプリンタＩ／Ｆ２０７が接続され、ＣＰＵ２０１はプリンタＩ／Ｆ２０７を介してプリンタ部１０３を利用した紙媒体の出力処理を実現する。Ｉ／Ｏコントローラ２０３にはスキャナＩ／Ｆ２０８が接続され、ＣＰＵ２０１はスキャナＩ／Ｆ２０８を介してスキャナ部１０４を利用した原稿の読み込み処理を実現する。Ｉ／Ｏコントローラ２０３にはＵＳＢ  Ｉ／Ｆ２０９が接続され、ＵＳＢ  Ｉ／Ｆに接続された任意の機器の制御を行う。ＲＯＭ２２０はＣＰＵ２０１とバスで接続されていて、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）を実現する制御プログラムが記憶している。
【００１６】
ＢＩＯＳ検証ユニット２２１はＲＯＭ２２０およびＣＰＵ２０１とバスで接続されていて、ＲＯＭ２２０に記憶されたＢＩＯＳデータの検証と、ＣＰＵへのＢＩＯＳ起動指示を行う。ここで、ＢＩＯＳ検証ユニット２２１はハードウェアであることを明記し、ＢＩＯＳ検証がハードウェア検証であることを確認しておく。ＢＩＯＳ検証ユニット２２１とＣＰＵ２０１を繋ぐバスは悪意のある第三者に細工をされないために、同一チップ、またはそれに準ずる構成で実現され外部から物理的に確認できない形態になっている。実施例１では、ＢＩＯＳ検証ユニット２２１の制御機構は集積回路としてハードウェアで実現されている構成を想定するが、専用のＣＰＵ、制御ソフトを記憶したＲＯＭといった要素を同一チップ内に実装し、製造後に変更できない構成であっても良い。
【００１７】
コピー機能を実施する場合は、ＣＰＵ２０１がＳＡＴＡ  Ｉ／Ｆ２０５を介してＦｌａｓｈＲＯＭ２１１からプログラムデータをＤＲＡＭ２０２に読み込む。ＣＰＵ２０１がＤＲＡＭ２０２に読み込まれたプログラムに従いパネルＩ／Ｆ２０６を介して操作部１０２に対するユーザからのコピー指示を検出する。ＣＰＵ２０１はコピー指示を検出するとスキャナＩ／Ｆ２０８を介してスキャナ部１０４から原稿を電子データとして受け取りＤＲＡＭ２０２に格納する。ＣＰＵ２０１はＤＲＡＭ２０２に格納した画像データに対して出力に適した色変換処理などを実施する。ＣＰＵ２０１はＤＲＡＭ２０２に格納した画像データをプリンタＩ／Ｆ２０７を介してプリンタ部１０３に転送し、紙媒体への出力処理を実施する。
【００１８】
ＰＤＬ印刷を実施する場合は、クライアントＰＣ１２０がＬＡＮ１５０を介して印刷指示を行う。ＣＰＵ２０１はＳＡＴＡ  Ｉ／Ｆ２０５を介してＦｌａｓｈ２１１からプログラムデータをＤＲＡＭ２０２に読み込み、ＤＲＡＭ２０２に読み込まれたプログラムに従いネットワークＩ／Ｆ２０４を介して印刷指示を検出する。ＣＰＵ２０１はＰＤＬ送信指示を検出するとネットワークＩ／Ｆ２０４を介して印刷データを受信し、ＳＡＴＡ  Ｉ／Ｆ２０５を介してＦｌａｓｈＲＯＭ２１１に印刷データを保存する。ＣＰＵ２０１は印刷データの保存が完了すると、ＦｌａｓｈＲＯＭ２１１に保存した印刷データをＤＲＡＭ２０２に画像データとして展開する。ＣＰＵ２０１はＤＲＡＭ２０２に格納した画像データに対して出力に適した色変換処理などを実施する。ＣＰＵ２０１はＤＲＡＭ２０２に格納した画像データをプリンタＩ／Ｆ２０７を介してプリンタ部１０３に転送し、紙媒体への出力処理を実施する。
【００１９】
図３はＭＦＰのコントローラ部１０１で実行されるソフトウェアの構造をあらわすブロック図である。コントローラ部１０１で実行されるソフトウェアは全て、ＣＰＵ２０１が実行する。ＣＰＵ２０１は、ＲＯＭ２２０に記憶されたＢＩＯＳ３６０を実行する。ＣＰＵ２０１は、ＦｌａｓｈＲＯＭ２１１に記憶された、ローダ３７０、Ｉｎｉｔｒｄ３８０、コントローラソフト３００をＤＲＡＭ２０２に読み込んだ後に実行する。ＢＩＯＳ３６０はＩ／Ｏコントローラ２０３やＤＲＡＭ２０２をＣＰＵ２０１が制御するための基本処理を実行する。
【００２０】
ＢＩＯＳ３６０は内部的にＢＩＯＳとしての制御ソフトと制御ソフトに対応する署名データで構成されている。ローダ読み込み検証部３６１はＢＩＯＳ３６０の制御ソフトに含まれ、ローダを検証する処理とローダに付与された署名に対応する公開鍵を含む。さらにＢＩＯＳ３６０はＦｌａｓｈＲＯＭ２１１からローダ３７０を読み込み、開始する処理を含む。ローダ３７０はＦｌａｓｈＲＯＭ２１１からカーネル３９０、Ｉｎｉｔｒｄ３８０を読み込み、開始する処理を実行する。ローダ３７０は内部的にローダとしての制御ソフトと制御ソフトに対応する署名データで構成されている。
【００２１】
カーネル、Ｉｎｉｔｒｄ読み込み検証部３７１はローダ３７０に含まれ、カーネル、Ｉｎｉｔｒｄを検証する処理とカーネル、Ｉｎｉｔｒｄに付与された署名に対する公開鍵を含む。Ｉｎｉｔｒｄ３８０はＦｌａｓｈＲＯＭ２１１からコントローラソフト３００を読み込み、開始する処理を実行する。Ｉｎｉｔｒｄ３８０は内部的にＩｎｉｔｒｄとしての制御ソフトと制御ソフトに対する署名データで構成されている。起動時検証部３８１はＩｎｉｔｒｄ３８０に含まれ、コントローラソフト３００を構成する、全てのプログラムファイルを起動時に検証する処理と、付与された署名に対する公開鍵を含む。ここで、全ての署名データに対する秘密鍵はソフトウェアの開発時のみ利用され一般に流通することはない。
【００２２】
操作制御部３０１は操作部１０２にユーザ向けの画面イメージを表示、およびユーザ操作の検知と画面上に表示したボタン等の画面部品に紐づけられた処理を実行する。データ記憶部３０２は他の制御部からの要求でデータをＦｌａｓｈＲＯＭ２１１に記憶、および読み出しを行う。例えば、ユーザが何らかの機器設定を変更したい場合は、操作部１０２にユーザが入力した内容を操作制御部３０１が検知し、操作制御部３０１からの要求でデータ記憶部３０２が設定値としてＦｌａｓｈＲＯＭ２１１に保存する。ネットワーク制御部３０７はデータ記憶部３０２に記憶された設定値に従い、システム起動時や、設定変更検出時にＩＰアドレスなどネットワーク設定をＴＣＰ／ＩＰ制御部３０８に行う。
【００２３】
ＴＣＰ／ＩＰ制御部３０８は他の制御からの指示に従い、ネットワークＩ／Ｆ２０４を介して、ネットワークパケットの送受信処理を行う。ジョブ制御部３０３は他の制御部からの指示に従って、ジョブ実行の制御を行う。画像処理部３０４はジョブ制御部３０３からの指示に従って、画像データを用途ごとに適した形式に加工する。印刷処理部３０５はジョブ制御部３０３からの指示に従い、プリンタＩ／Ｆ２０７を介して、紙媒体に画像を印刷し出力する。読み取り制御部３０６はジョブ制御部３０３からの指示時に従い、スキャナＩ／Ｆ２０８を介して、設置された原稿を読み込む。
【００２４】
認証部３０９は管理者権限が必要な操作に対して、操作者が管理者であるか否かを判断する処理を行う。ソフトウェア更新部３１０はコントローラソフト３００を構成するプログラムファイルを、設置環境で更新する処理を行う。ＵＳＢ制御部３１１はＵＳＢ  Ｉ／Ｆ２０９を制御し、ＵＳＢ接続された任意の機器の制御を行う。起動時検証用正解値リスト３２１は起動時検証部３８１が検証処理に利用する正解値のリストである。実行時検証部３２２は、コントローラソフト３００を構成する、全てのプログラムファイルを実行時に検証する処理を含む。実行時検証用ホワイトリスト３２３は実行時検証部３２２が検証処理に利用する正解値のリストである。
【００２５】
例えば、コピー機能を実行する場合は操作制御部３０１がコピー機能の開始要求を検知し、ジョブ制御部３０３にコピーを指示する。ジョブ制御部３０３は読み取り制御部３０６に原稿読み取りを指示し、スキャン画像を取得する。ジョブ制御部３０３は画像処理部３０４に指示し、スキャン画像を印刷に適した形式に変換する。ジョブ制御部３０３は印刷処理部３０５に印刷を指示し、コピー結果を出力する。
【００２６】
図４は起動時検証用正解値リスト３２１、および実行時検証用ホワイトリスト３２３のデータ形式のサンプルである。コントローラソフト３００に含まれる全てのプログラムファイルに対して、ファイル名３００１とハッシュ３００２の組み合わせをリスト化したものである。プログラムファイルにはＯＳのプログラムおよび／または機能を提供するアプリケーションプログラムが含まれる。データの内容としては、少なくともファイル名称、ファイルの配置場所（ディレクトリ上の位置）、ファイルから計算したハッシュ値を含むものとし、ハッシュ値等の情報がリスト化される。
【００２７】
起動時検証用正解値リスト３２１と実行時検証用ホワイトリスト３２３は同じファイルとすることも可能であるが、生成タイミングの違い、利用形態の違いから、ここでは別のファイルとして配置する。また、実行時検証用ホワイトリスト３２３は、ユーザが選択した機能に対応するアプリケーションプログラムを検証する目的からも、アプリケーションプログラムのハッシュ値のみ含むリストとしている。
【００２８】
図５は操作部１０２に表示される、メニュー画面４０１であり複合機が持つさまざまな機能の実行をユーザが指示するためのものである。ボタン４０２はコピー機能をユーザが指示するために利用される。ボタン４０３はスキャンして保存する機能をユーザが指示するために利用される。ボタン４０４はスキャンして送信する機能をユーザが指示するために利用される。ボタン４０５は機器の設定変更をユーザが指示するために利用される。ボタン４０５を押すことで、設定画面５０１を表示することができる。メッセージ表示領域４０６は機器の動作中に発生したさまざまなユーザ向けのメッセージを表示する。
【００２９】
図６は操作部１０２に表示される、設定画面５０１でありさまざまな設定をユーザが指示するためのものである。この画面自体に具体的な設定項目はなく、詳細な設定項目へのガイドとなる中間階層である。ボタン５０２を押すことでセキュリティ設定画面７０１を表示することができる。ボタン５０３を押すことで、不図示の機器設定画面を表示することができる。ボタン５０４を押すことで、不図示のユーザ設定画面を表示することができる。ボタン５０５を押すことで、ソフトウェアの更新を開始することができる。メッセージ表示領域５０６は機器の動作中に発生したさまざまなユーザ向けのメッセージを表示する。
【００３０】
図７は操作部１０２に表示される、管理者認証画面６０１であり管理者認証コードをユーザが入力するためのものである。この画面は、管理者権限が必要な機能の実施に先立って表示され、管理者権限を有する操作者であることを確認する。例えば、セキュリティ設定画面７０１の表示前や、ボタン５０５押下してからソフトウェアの更新を開始する前に表示される。６０２はユーザが管理者認証コードを入力する領域であり、ボタン６０３は６０２に入力した認証コードの確認開始するために使われる。認証コードの確認は、認証部３０９によって行われ、認証に成功した場合は管理者権限が必要な処理を実行し、失敗した場合は管理者権限が必要な処理の実行を中止する。
【００３１】
図８はセキュリティ設定画面７０１であり、ＭＦＰ１００に対するセキュリティ設定を行う。起動時検証７０２が選択された場合はシステム起動時に行うソフトウェア検証機能が有効化される。実行時検証７０３が選択された場合は機能実行時に行うソフトウェア検証機能が有効化される。ボタン７０４を押下すると、セキュリティ設定画面７０１の選択状態が、機器設定としてデータ記憶部３０２に記憶される。ソフトウェア検証機能は検証のための計算時間が必要なため、検証しない場合に比べて機器の動作速度が劣化する。つまり、安全性と処理性能がトレードオフの関係にある。管理者は運用、設置ポリシー、ユーザの満足度を鑑みて設定する必要がある。ＭＦＰ１００はマルチユーザデバイスであるが、この画面は管理者権限を持つ操作者しか操作することができない。設定の影響を受けるのは全ユーザであるが、設定を行うのは管理者のみである。
【００３２】
図９は操作部１０２に表示される、エラー画面８０１である。この画面はシステム停止エラーとしてユーザにファームウェアが改ざんされ、システムを停止したことを通知している。また、この画面から通常の機能実行画面に遷移することはできず、ユーザはＭＦＰ１００を利用することはない。
【００３３】
図１０を用いて、ＭＦＰ１００が起動時にソフトウェアを検証する処理フローを説明する。図１０の検証処理は起動時検証７０２が選択されている場合のみ実行される。この処理は、起動するたびに一度行われる。ここで図１０（Ａ）のＭＦＰ１００が実施する処理は、ＢＩＯＳ検証ユニット２２１が実施するものである。以下の説明で、図（Ａ）の検証処理をハードウェア検証と呼ぶ。図１０（Ｂ）のＭＦＰ１００が実施する処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムをＣＰＵ２０１がＤＲＡＭ２０２に読み込んだのち、ＣＰＵ２０１の演算処理として実施するものである。以下の説明で、図１０（Ｂ）の検証処理をソフトウェア検証と呼ぶ。夫々の検証処理は同じＭＦＰ１００による検証処理であっても、検証主体が異なること、ハードウェア検証はＣＰＵ２０１の実行するソフトウェアの検証処理ではないことに留意されたい。
【００３４】
電源が供給され、起動処理が開始されるとＢＩＯＳ検証ユニット２２１が起動され、Ｓ１００１としてＢＩＯＳの検証処理を開始する。Ｓ１００２でＭＦＰ１００はＢＩＯＳ３６０の検証処理を実施し、成功したかどうか確認する。成功した場合はＳ１００３を実行し、失敗した場合はＳ１００５を実行する。検証処理としてはＢＩＯＳ検証ユニット２２１がＲＯＭ２２０から読み込んだＢＩＯＳ３６０の署名に対して、ＢＩＯＳ検証ユニット２２１に配置された公開鍵を用いて署名検証を行う。本発明の起動時検証は、起動順序を考慮した署名検証であり、署名検証主体は次に起動する主体の署名検証を行うことでセキュリティ性を担保する。
【００３５】
Ｓ１００３でＭＦＰ１００はＣＰＵ２０１に指示することでＢＩＯＳ３６０を起動する。Ｓ１００５でＭＦＰ１００はＢＩＯＳの起動を行わず、起動シーケンスをこのステップで中止することでシステムを停止する。ここで、ＢＩＯＳ検証ユニット２２１はユーザ通知に関するデバイスを持たないため、通知は行わないが、ＬＥＤ（Ｌｉｇｈｔ  Ｅｍｉｔｔｉｎｇ  Ｄｉｏｄｅ）を接続して、発光させることで通知をおこなっても良い。Ｓ１００４でＭＦＰ１００はＢＩＯＳ３６０の検証処理を終了する。ハードウェア検証は、ハードウェアで実装された検証方法であり、この検証処理を改ざんするためには集積回路の改ざんが必要であり、極めて堅牢な検証方法である。
【００３６】
ＢＩＯＳ３６０が起動されると、Ｓ１０１１としてＦｌａｓｈＲＯＭ２１１に配置されたソフトウェアの検証処理を開始する。すなわち、検証の成功を契機にして次の主体の検証が行われる。
【００３７】
Ｓ１０１２でＭＦＰ１００はローダ読み込み検証部３６１を利用して、ローダ３７０の検証処理を実施し、成功したかどうか確認する。成功した場合はＳ１０１３を実行し、失敗した場合はＳ１０２２を実行する。検証処理としてはＦｌａｓｈＲＯＭ２１１から読み込んだ、次の起動対象であるローダ３７０の署名に対して、ローダ読み込み検証部３６１が持つ公開鍵を用いて署名検証を行う。
【００３８】
Ｓ１０１３でＭＦＰ１００はローダを起動する。Ｓ１０１４でＭＦＰはカーネル、Ｉｎｉｔｒｄ読み込み検証部３７１を利用して、カーネル３９０の検証処理を実施し、成功したかどうか確認する。成功した場合はＳ１０１５を実行し、失敗した場合はＳ１０２２を実行する。検証処理としてはＦｌａｓｈＲＯＭ２１１から読み込んだ、次の起動対象であるカーネル３９０の署名に対して、Ｉｎｉｔｒｄ読み込み検証部３７１が持つカーネル３９０の署名に対する公開鍵を用いて署名検証を行う。Ｓ１０１５でＭＦＰ１００はカーネルを起動する。
【００３９】
Ｓ１０１６でＭＦＰはカーネル、Ｉｎｉｔｒｄ読み込み検証部３７１を利用して、Ｉｎｉｔｒｄ３８０の検証処理を実施し、成功したかどうか確認する。成功した場合はＳ１０１７を実行し、失敗した場合はＳ１０２２を実行する。検証処理としてはＦｌａｓｈＲＯＭ２１１から読み込んだ、次の起動対象であるＩｎｉｔｒｄ３８０の署名に対して、Ｉｎｉｔｒｄ読み込み検証部３７１が持つＩｎｉｔｒｄ３８０の署名に対する公開鍵を用いて署名検証を行う。Ｓ１０１７でＭＦＰ１００はＩｎｉｔｒｄ３８０を起動する。
【００４０】
Ｓ１０１８でＭＦＰ１００は起動時検証部３８１を利用して、コントローラソフト３００の検証を実施し、成功したかどうか確認する。成功した場合はＳ１０２０を実行し、失敗した場合はＳ１０２２を実行する。検証処理としてはＦｌａｓｈＲＯＭ２１１から読み込んだ次の起動対象である、起動時検証用正解値リスト３２１に記載された、コントローラソフト３００に含まれる全プログラムファイルのハッシュ値を取得する。そして、ＦｌａｓｈＲＯＭ２１１を読み込んで再計算した全プログラムファイルのハッシュ値と、ファイル毎に比較する処理が行われる。Ｓ１０１９でＭＦＰ１００はコントローラソフト３００の起動を開始する。コントローラソフト３００は複数のプログラムファイルに分割されているため、システムの起動のために必要なプログラムファイルが順次起動される。
【００４１】
Ｓ１０２０でＭＦＰ１００は実行時検証部３２２を起動する。Ｓ１０２２でＭＦＰ１００は改ざんを検知したことを、操作部１０２にエラー画面８０１を表示することでユーザに通知する。Ｓ１０２３でＭＦＰ１００は起動シーケンスをこのステップで中止することでシステムを停止する。なお、Ｓ１０２２およびＳ１００５ではシステム停止としたが、一部機能の利用を停止させる方法なども考えられ、その制限の方法は停止に限らない。Ｓ１０２１でＭＦＰ１００はＦｌａｓｈＲＯＭ２１１に配置されたソフトウェアの検証処理を終了する。
【００４２】
一般的にソフトウェア検証はソフトウェアであるプログラムによって実装された検証方法であるため、記憶部のソフトウェアを書き換えることで改ざんすることができる。上記フローの様に、検証を行うソフトウェアをあらかじめ別の構成部によって検証しておくことで、改ざんされていないことを保証できる。そして、プログラム内の各プログラムは順番にソフトウェア検証を行うが、１つ前のソフトウェア検証を起点にシステム全体が改ざんされていないことを保証できる。さらに、実行時検証部の起動にソフトウェア検証を適用させることで、システム起動後の改ざんに対しても、ハードウェア検証を起点とする強固な信頼性を確保できる。
【００４３】
図１１を用いて、ＭＦＰ１００が機能実行時にソフトウェアを検証する処理フローを説明する。図１１の検証処理は起動時検証７０２が選択されている場合のみ実行される。この処理は図４に示す各機能を実行するたびに行われることを特徴とし、図９のフローのように起動時に一度行われる処理ではない。起動時に検証しているソフトウェアであっても機能実行時に再度検証することで、起動してから機能実行までに改ざんされた場合であっても適切に検知することができる。
【００４４】
また、機能実行時の検証だけではハードウェア検証に基づく強固な検証にならないことから、起動時検証と実行時検証を両方実施することで強固な信頼性を確保できる。図１１のＭＦＰ１００が実施する処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムをＣＰＵ２０１がＤＲＡＭ２０２に読み込んだのち、ＣＰＵ２０１の演算処理として実施するものである。なお、図１０のソフトウェア検証処理を、図９のソフトウェア検証処理と区別するためプログラム検証処理と呼称することもある。
【００４５】
ＭＦＰ１００が機能を実行する場合、必要なソフトウェアに対応するプログラムファイルの起動が必要になり、それに先立ってＳ１１０１として機能実行時の検証処理を開始する。例えば、ユーザがボタン４０２を押下してコピー機能を開始すると、コピー機能の実行に必要なプログラムファイルが検証、起動される。実施例１はＭＦＰ１００であるため、ソフトウェア検証とはコピー機能やスキャン機能と言った画像形成機能に関するプログラムのソフトウェア検証である。
【００４６】
Ｓ１１０２でＭＦＰ１００は実行時検証部３２２を利用して、起動対象のプログラムを検証し、検証に成功したかどうか確認する。成功した場合はＳ１１０３を実行し、失敗した場合はＳ１１０５を実行する。検証処理としては、実行時検証部３２２が実行時検証用ホワイトリスト３２３を参照し、起動対象プログラムに対応するハッシュ値を特定する。このハッシュ値と、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムファイルから再計算したハッシュ値を比較することで、検証を行う。また、実行時検証用ホワイトリスト３２３から、起動対象プログラムのハッシュ値を特定できなかった場合は、検証失敗と判断する。
【００４７】
Ｓ１１０３でＭＦＰ１００は対象プログラムを起動する。Ｓ１１０５でＭＦＰ１００は実行時検証部３２２を利用して、対象プログラムが既知のプログラムかどうか特定する。既知のプログラムであった場合はＳ１１０７を実行し、未知のプログラムであった場合はＳ１１０６を実行する。未知のプログラムであった場合とは、Ｓ１１０２で起動対象プログラムのハッシュ値を特定できなかった場合であり、ソフトウェア更新部３１０による正規の手順でシステムに追加されたプログラムではないことを表している。通常、システムは改ざんさせない為に、ソフトウェア更新部３１０以外がプログラムを追加することができない構成をとるが、システムに含まれる何らかの脆弱性を利用して不正なプログラムが配置されたとしても、実行をブロックできる。この様な万が一に備えたブロック機構は、機密レベルの高い業務においてユーザが安心して利用するために必要である。
【００４８】
既知のプログラムが改ざんされた場合、システムの制御に必要なソフトウェア部品が損なわれた状態であり、システムとしての動作を保証できない。そのため、システム全体を停止する必要がある。未知のプログラムのみが改ざんされた場合、システムの制御に必要なソフトウェア部品は全て正常な状態である。そのため、システムは停止せずに、動作を継続できる。
【００４９】
Ｓ１１０６でＭＦＰ１００は操作部１０２に表示されるメッセージ表示領域４０６に、システム継続エラーとして未知のプログラムの実行をブロックした旨をユーザに通知する。この場合、メニュー画面４０１の各種ボタンは押下可能で、ＭＦＰ１００はシステムとしての動作を継続する。Ｓ１１０７でＭＦＰ１００は操作部１０２にエラー画面８０１を表示することでシステム停止エラーとして改ざんが行われたことをユーザに通知する。なお、ここでの制限方法も停止としたが、必ずしも停止による制限になるとは限らない。
【００５０】
Ｓ１１０８でＭＦＰ１００はネットワーク制御部３０７を利用し、ネットワークからのジョブの投入を停止する。また、操作部１０２はエラー画面８０１から他の画面に遷移することはできず、ＭＦＰ１００はシステムとしての動作を停止する。Ｓ１１０４でＭＦＰ１００は機能実行時の検証処理を終了する。
【００５１】
図１２を用いて、ＭＦＰ１００がコントローラソフト３００を更新する処理フローを説明する。図１２のＭＦＰ１００が実施する処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムをＣＰＵ２０１がＤＲＡＭ２０２に読み込んだのち、ＣＰＵ２０１の演算処理として実施するものである。ボタン５０５が押下され、ソフトウェア更新が指示された後、管理者認証画面６０１で管理者認証が成功すると、ＭＦＰ１００はＳ１２０１としてソフトウェアの更新処理を開始する。
【００５２】
Ｓ１２０２でＭＦＰ１００はＵＳＢ制御部３１１を利用してＵＳＢストレージが接続済みであるか確認する。確認が取れた場合はＳ１２０３を実行し、取れなかった場合はＳ１２１０を実行する。Ｓ１２０３でＭＦＰ１００はＵＳＢ制御部３１１を利用してＵＳＢストレージに更新用のファイルが存在するか確認する。確認できた場合はＳ１２０４を実行し、確認できなかった場合はＳ１２１０を実行する。この時、ファイル名やファイルフォーマット、ファイルの署名を検証するなどして、正当な更新用ファイルであることを確認しても良い。
【００５３】
Ｓ１２０４でＭＦＰ１００はＵＳＢ制御部３１１を利用してＵＳＢストレージに在る更新用ファイルを、データ記憶部３０２を利用してＦｌａｓｈＲＯＭ２１１内の一時領域に展開する。Ｓ１２０５でＭＦＰ１００はデータ記憶部３０２を利用して、更新用ファイルに含まれる新しい起動時検証用正解値リスト３２１をＦｌａｓｈＲＯＭ２１１の起動時検証用正解リスト格納領域に反映する。
【００５４】
Ｓ１２０６でＭＦＰ１００はデータ記憶部３０２を利用して、更新用ファイルに含まれるプログラムファイルをＦｌａｓｈＲＯＭ２１１のプログラム格納領域に反映する。この時反映されるプログラムファイルは、変更が必要な差分のファイルであっても良いし、変更のないファイルを含めた全ファイルであっても良い。
【００５５】
Ｓ１２０７でＭＦＰ１００は実行時検証部３２２を利用して、Ｓ１２０６で反映したプログラムファイルを実行時検証用ホワイトリスト３２３に反映する。実行時検証用ホワイトリスト３２３はプログラムファイルのファイル名、ファイルパス、ハッシュ値を含むデータである。また、拡張機能をアプリケーションとして追加可能は機器である場合は、ソフトウェア更新部３１０が、アプリケーションを追加したタイミングで実行時検証用ホワイトリスト３２３にアプリケーションに対応する情報を追加する。こうすることで、アプリケーションを後から追加可能な機器であっても、ソフトウェアの改ざんを検知することができる。
【００５６】
Ｓ１２０８でＭＦＰ１００はシステムを再起動する。この時、図９に記載した起動時検証処理が実行される。
【００５７】
Ｓ１２１０でＭＦＰ１００は操作部１０２に表示される、メッセージ表示領域５０６にエラーメッセージを表示する。Ｓ１２０９でＭＦＰ１００はソフトウェアの更新処理を終了する。
【００５８】
図１３を用いて、ＭＦＰ１００がセキュリティ設定画面７０１の設定項目を制御する処理フローを説明する。ＭＦＰ１００がセキュリティ設定画面７０１を表示した時、もしくはユーザが起動時検証７０２の選択状態を変更した時に、ＭＦＰ１００は設定項目制御としてＳ１３０１を開始する。セキュリティ設定画面７０１を表示した時の起動時検証７０２、および実行時検証７０３の選択状態は、データ記憶部３０２に記憶された設定状態を反映したものである。
【００５９】
Ｓ１３０２でＭＦＰ１００は起動時検証７０２が選択状態であるか確認する。選択状態である場合はＳ１３０３を実行し、選択状態でない場合はＳ１３０５を実行する。Ｓ１３０３でＭＦＰ１００は実行時検証７０３を選択可能な画面部品に設定する。Ｓ１３０５でＭＦＰ１００は実行時検証７０３を選択不可能な画面部品に設定する。Ｓ１３０４でＭＦＰ１００は設定項目制御を終了する。
【００６０】
起動時検証、実行時検証はそれぞれ信頼性を高める機能であるが、引き換えに動作速度の劣化が発生する。信頼性と動作速度のバランスはユーザが柔軟に選べるべきである。起動時検証は単体でもハードウェア検証による保証ができるが、実行時検証は起動時検証と組み合わせないとハードウェア検証による強固な保証ができない。起動時検証と実行時検証の設定項目をそれぞれ設け、画面部品を適切に制御することで、安全に利用できる組み合わせをユーザが選択することができる。以上のフローにより、ユーザはＭＦＰ１００で実行時検証の信頼性を起動時検証によって確保することができる。
【００６１】
以上、実施例１により、信頼性の高い検証方法により正当性が確認されたソフトウェアによって機器の制御ソフトウェアの正当性が確認されるので、ユーザはセキュアに機器を利用することができる。
【００６２】
［実施例２］
以下、本発明の実施の形態を図面に基づいて解説する。本実施例では、セキュリティ設定画面７０１の制御する他の形態について説明する。記載を省略した部分については、実施例１と同じ構成および処理である。
【００６３】
図１４を用いて、ＭＦＰ１００がセキュリティ設定画面７０１の設定項目を制御する処理フローを説明する。セキュリティ設定画面７０１を表示した時の起動時検証７０２、および実行時検証７０３の選択状態は、データ記憶部３０２に記憶された設定状態を反映したものである。
【００６４】
ユーザが実行時検証７０３の選択状態を変更した時に、ＭＦＰ１００は設定項目制御としてＳ１４０１を開始する。Ｓ１４０２でＭＦＰ１００は実行時検証７０３が選択状態であるか確認する。選択状態である場合はＳ１４０３を実行し、選択状態でない場合はＳ１４０４を実行する。Ｓ１４０３でＭＦＰ１００は起動時検証７０２を選択状態に設定する。Ｓ１４０４でＭＦＰ１００は設定項目制御を終了する。
【００６５】
ユーザが起動時検証７０２の選択状態を変更した時に、ＭＦＰ１００は設定項目制御としてＳ１４１１を開始する。Ｓ１４１２でＭＦＰ１００は起動時検証７０２が選択状態であるか確認する。選択状態である場合はＳ１４１４を実行し、選択状態でない場合はＳ１４１３を実行する。Ｓ１４１３でＭＦＰ１００は実行時検証７０３を非選択状態に設定する。Ｓ１４１４でＭＦＰ１００は設定項目制御を終了する。設定項目に対応する画面部品の選択状態を自動的に連動させることで、ユーザはストレスなく安全に利用できる組み合わせで、信頼性と動作速度のトレードオフを選択することができる。以上のフローにより、ユーザはＭＦＰ１００で実行時検証の信頼性を起動時検証によって確保することができる。
【００６６】
［その他の実施例］
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００６７】
１００  ＭＦＰ
２２０  ＣＰＵ
２２１  ＢＩＯＳ検証ユニット
３８１  起動時検証部
３２１  起動時検証用正解値リスト
３２２  実行時検証部
３２３  実行時検証用ホワイトリスト
７０１  セキュリティ設定画面
【図１】
2019191698.tif 000003
【図２】
2019191698.tif 000004
【図３】
2019191698.tif 000005
【図４】
2019191698.tif 000006
【図５】
2019191698.tif 000007
【図６】
2019191698.tif 000008
【図７】
2019191698.tif 000009
【図８】
2019191698.tif 000010
【図９】
2019191698.tif 000011
【図１０】
2019191698.tif 000012
【図１１】
2019191698.tif 000013
【図１２】
2019191698.tif 000014
【図１３】
2019191698.tif 000015
【図１４】
2019191698.tif 000016