(57)【要約】【課題】互換性を保つために書き換えられたプログラムについて、改ざんされていないにもかかわらず改ざんされたものと誤検知されることを防止できる。【解決手段】本発明の情報処理装置は、情報処理装置であって、第１のプログラムを、情報処理装置での動作環境に適合するように書き換えてインストールするインストール手段と、インストール手段によって書き換えられた第１のプログラムに基づいて、第１の検証データを生成する生成手段と、生成手段によって生成された第１の検証データに基づいて、インストール後の第１のプログラムの改ざんを検知する第１の検知手段と、を有する。【選択図】図５
2020052597.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
第１のプログラムを、前記情報処理装置での動作環境に適合するように書き換えてインストールするインストール手段と、
前記インストール手段によって書き換えられた前記第１のプログラムに基づいて、第１の検証データを生成する生成手段と、
前記生成手段によって生成された前記第１の検証データに基づいて、インストール後の前記第１のプログラムの改ざんを検知する第１の検知手段と、
を有する情報処理装置。
【請求項２】
前記第１の検知手段によってインストール後の前記第１のプログラムの改ざんが検知されなかった場合、前記第１のプログラムを起動するよう制御する第１の制御手段を更に有する請求項１記載の情報処理装置。
【請求項３】
前記第１の検知手段によってインストール後の前記第１のプログラムの改ざんが検知された場合、前記第１のプログラムを起動しないよう制御する第２の制御手段を更に有する請求項１又は２記載の情報処理装置。
【請求項４】
前記第１の検知手段によってインストール後の前記第１のプログラムの改ざんが検知された場合、改ざんされた旨を通知する通知手段を更に有する請求項１乃至３何れか１項記載の情報処理装置。
【請求項５】
前記生成手段は、前記インストール手段によって書き換えられた前記第１のプログラムに基づいて、前記第１の検証データとしてハッシュ値を生成し、
前記第１の検知手段は、前記インストール手段によってインストールされた前記第１のプログラムに基づいて生成されたハッシュ値と、前記生成手段によって生成されたハッシュ値と、に基づいて、インストール後の前記第１のプログラムの改ざんを検知する請求項１乃至４何れか１項記載の情報処理装置。
【請求項６】
前記生成手段は、前記インストール手段によって書き換えられた前記第１のプログラムと、第１の秘密鍵と、に基づいて、前記第１の検証データとしてデジタル署名を生成し、
前記第１の検知手段は、前記生成手段によって生成されたデジタル署名と、前記第１の秘密鍵に対応する第１の公開鍵と、に基づいて、インストール後の前記第１のプログラムの改ざんを検知する請求項１乃至４何れか１項記載の情報処理装置。
【請求項７】
前記第１のプログラムを取得する取得手段を更に有し、
第２の検証データに基づいて前記取得手段によって取得された前記第１のプログラムの改ざんが検知されなかった場合、前記インストール手段は、前記取得手段によって取得された前記第１のプログラムを、前記情報処理装置での動作環境に適合するように書き換えてインストールする請求項１乃至６何れか１項記載の情報処理装置。
【請求項８】
前記第２の検証データに基づいて前記取得手段によって取得された前記第１のプログラムの改ざんが検知された場合、前記インストール手段は、前記第１のプログラムをインストールしない請求項７記載の情報処理装置。
【請求項９】
前記第２の検証データは、第２の秘密鍵に基づいて生成されたデジタル署名であり、
前記第２の検証データであるデジタル署名と、前記第２の秘密鍵に対応する第２の公開鍵と、に基づいて、前記取得手段によって取得された前記第１のプログラムの改ざんを検知する第２の検知手段を更に有し、
前記第２の検知手段によって前記第１のプログラムの改ざんが検知されなかった場合、前記インストール手段は、前記取得手段によって取得された前記第１のプログラムを、前記情報処理装置での動作環境に適合するように書き換えてインストールする請求項７又は８記載の情報処理装置。
【請求項１０】
前記情報処理装置は、複合機である請求項１乃至９何れか１項記載の情報処理装置。
【請求項１１】
情報処理装置の制御方法であって、
第１のプログラムを、前記情報処理装置での動作環境に適合するように書き換えてインストールするインストールステップと、
前記インストールステップによって書き換えられた前記第１のプログラムに基づいて、第１の検証データを生成する生成ステップと、
前記生成ステップによって生成された前記第１の検証データに基づいて、インストール後の前記第１のプログラムの改ざんを検知する検知ステップと、
を含む情報処理装置の制御方法。
【請求項１２】
コンピュータを、請求項１乃至１０何れか１項記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法、及び、プログラムに関する。
【背景技術】
【０００２】
ソフトウェアの脆弱性を利用してソフトウェアを改ざんし、コンピュータを悪用する攻撃が問題となっている。
特許文献１では、第１のフラッシュメモリと第１のＣＰＵとを有する耐タンパ性を有するモジュールと、第２のフラッシュメモリと第２のＣＰＵとを有する本体部と、を備えた端末装置が開示されている。第１のフラッシュメモリは、予め設定されたブートプログラムを含むブート部のハッシュ値を記憶する。第１のＣＰＵは、入力されるブート部のハッシュ値を算出し、当該算出したブート部のハッシュ値と、前記記憶されたブート部のハッシュ値と、が一致するか否かを判別し、その判別結果を出力する。第２のフラッシュメモリは、ブート部を記憶する。第２のＣＰＵは、ブート部に記憶されたプログラムの実行により、ブート部を第１のＣＰＵに入力してその判別結果を取得し、当該判別結果においてハッシュ値が一致する場合に、ブート部の使用を伴う端末装置の動作を許可に設定する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２４４９９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来は、情報処理装置内の全てのプログラム（ソフトウェア）を、配布の段階で秘密鍵を用いてデジタル署名をつける。このため、プログラム配布後のあらゆる書き換えは改ざんとみなされる。
一方、プログラムの一部は、外部ソフトウェアとして情報処理装置にインストールされて動作する。このようなプログラムは第三者が作ったものもあり、過去のプログラムも互換性を維持して動作させたいという要求がある。
【０００５】
しかし、プログラムを動作させる情報処理装置のプラットホームに変更等がある場合、当該プログラムが包含しているライブラリ等の互換性が取れないことがある。例えばグラフィック関連の仕様が変わった場合、プログラムは、そのままでは正常に動作しない場合がある。このような場合には当該プログラムを改変することで、プログラムを正常に動作させることができる場合がある。より具体的には、当該プログラムが包含するライブラリを、互換性を保証できるライブラリに置き換えることによって、プログラムを正常に動作させることができる場合がある。この置き換えは情報処理装置へのプログラムのインストール時に実施される。しかしながら、このように書き換えられたプログラムは、改ざんされたものと誤検知される場合があるため、上記のように互換性を保つ上での課題となっている。特許文献１には、このような課題やその解決方法についての記載はない。
【課題を解決するための手段】
【０００６】
本発明の情報処理装置は、情報処理装置であって、第１のプログラムを、前記情報処理装置での動作環境に適合するように書き換えてインストールするインストール手段と、前記インストール手段によって書き換えられた前記第１のプログラムに基づいて、第１の検証データを生成する生成手段と、前記生成手段によって生成された前記第１の検証データに基づいて、インストール後の前記第１のプログラムの改ざんを検知する第１の検知手段と、を有する。
【発明の効果】
【０００７】
本発明によれば、互換性を保つために書き換えられたプログラムについて、改ざんされていないにもかかわらず改ざんされたものと誤検知されることを防止できる。
【図面の簡単な説明】
【０００８】
【図１】複合機のハードウェア構成の一例を示す図である。
【図２】複合機のソフトウェア構成の一例を示す図である。
【図３】複合機が起動する処理の流れの例を示す図である。
【図４】複合機の起動処理の一例を示すフローチャートである。
【図５】インストール処理の一例を示すフローチャートである。
【図６】インストール処理の一例を示すフローチャートである。
【図７】複合機が起動する処理の流れの一例を示す図である。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１を参照して、複合機１００のハードウェア構成について説明する。図１は、複合機１００のハードウェア構成の一例を示す図である。複合機１００は、情報処理装置の一例である。
ＣＰＵ１０１は、複合機１００のプログラム（ソフトウェア）を実行し、複合機１００の制御を行う。
ＲＯＭ１０２は、リードオンリーメモリであり、複合機１００のＢＩＯＳ、固定パラメータ等を格納している。
ＲＡＭ１０３は、ランダムアクセスメモリである。ＲＡＭ１０３には、ＣＰＵ１０１が複合機１００を制御する際に実行するプログラムが展開される。また、ＲＡＭ１０３は一時的なデータ等を格納する。
【００１０】
ＨＤＤ１０４は、ハードディスクドライブであり、一部のアプリケーションプログラム及び各種データを格納する。
フラッシュメモリ１１４は、ローダー２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３等を格納する。ＲＯＭ１０２、ＨＤＤ１０４、及び、フラッシュメモリ１１４は、それぞれ、記憶媒体の一例である。
Ｅｍｂｅｄｄｅｄ  Ｃｏｎｔｒｏｌｌｅｒ１１３は、ＣＰＵ１１５とＲＡＭ１１６とを有する。ＣＰＵ１１５は、Ｅｍｂｅｄｄｅｄ  Ｃｏｎｔｒｏｌｌｅｒ１１３のプログラムを実行し、複合機１００の中で一部の制御を行う。ＲＡＭ１１６は、ランダムアクセスメモリである。ＲＡＭ１１６には、ＣＰＵ１１５が複合機１００を制御する際に実行するプログラムが展開される。また、ＲＡＭ１１６は、一時的なデータ等を格納する。
【００１１】
ネットワークＩ／Ｆ制御部１０５は、ネットワーク１２０を介した外部装置とのデータの送受信を制御する。
スキャナＩ／Ｆ制御部１０６は、スキャナ１１１が原稿の読み取り等を行うようにスキャナ１１１を制御する。
プリンタＩ／Ｆ制御部１０７は、プリンタ１１２が印刷処理等を行うようにプリンタ１１２を制御する。
パネル制御部１０８は、各種情報の表示をしたり、使用者からの指示を受け付けたりするようタッチパネル式の操作パネル１１０を制御する。
バス１０９は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、ＨＤＤ１０４、ネットワークＩ／Ｆ制御部１０５、スキャナＩ／Ｆ制御部１０６、プリンタＩ／Ｆ制御部１０７を相互に接続する。バス１０９は、更に、パネル制御部１０８、Ｅｍｂｅｄｄｅｄ  Ｃｏｎｔｒｏｌｌｅｒ１１３、フラッシュメモリ１１４、ＬＥＤ１１７を相互に接続する。バス１０９を介して、ＣＰＵ１０１からの制御信号、及び、各装置間のデータ信号が送受信される。
ＬＥＤ１１７は、ＣＰＵ１０１の制御に基づいて点灯し、プログラム及びハードウェアの異常を外部に伝えるために利用される。
【００１２】
次に、図２を参照して、複合機１００のソフトウェア構成について説明する。図２は、複合機１００のソフトウェア構成の一例を示す図である。
通信管理部２０７は、ネットワーク１２０に接続されるネットワークＩ／Ｆ制御部１０５を制御して、ネットワーク１２０を介して外部装置とデータの送受信を行う。
ＵＩ制御部２０３は、パネル制御部１０８を介して操作パネル１１０への入力を受け取ったり、入力に応じた処理及び操作パネル１１０への画面出力を行ったりする。
ブートプログラム２０９は、複合機１００の電源を入れるとＥｍｂｅｄｄｅｄ Ｃｏｎｔｒｏｌｌｅｒ１１３のＣＰＵ１１５で実行されるプログラムである。ブートプログラム２０９は、複合機１００の起動に関わる処理を行う。また、ブートプログラム２０９は、ＢＩＯＳの改ざん検知を行うＢＩＯＳ改ざん検知処理部２０１を有する。
【００１３】
ＢＩＯＳ２１０は、ブートプログラム２０９の実行後にＣＰＵ１０１で実行されるプログラムである。ＢＩＯＳ２１０は、複合機１００の起動に関わる処理を行う。また、ＢＩＯＳ２１０は、ローダー２１１の改ざん検知を行うローダー改ざん検知処理部２０２を有する。
ローダー２１１は、ＢＩＯＳ２１０の処理が終わった後にＣＰＵ１０１で実行されるプログラムである。ローダー２１１は、複合機１００の起動に関わる処理を行う。また、ローダー２１１は、カーネルの改ざん検知を行うカーネル改ざん検知処理部２０４を有する。
カーネル２１２は、ローダー２１１の処理が終わった後にＣＰＵ１０１で実行されるプログラムである。カーネル２１２は、複合機１００の起動に関わる処理を行う。また、カーネル２１２は、Ｎａｔｉｖｅプログラム２１３の改ざん検知を行うプログラム改ざん検知処理部２０５を有する。
【００１４】
Ｎａｔｉｖｅプログラム２１３は、ＣＰＵ１０１で実行されるプログラムである。Ｎａｔｉｖｅプログラム２１３は、複合機１００のＪａｖａ（登録商標）プログラム２１４と連携して各機能を提供する複数のプログラムから構成される。Ｎａｔｉｖｅプログラム２１３として、例えばスキャナＩ／Ｆ制御部１０６及びプリンタＩ／Ｆ制御部１０７を制御するプログラム、並びに、起動プログラム等がある。カーネル２１２によってＮａｔｉｖｅプログラムの中から起動プログラムが呼び出されて、起動処理が行われる。この起動処理には、Ｊａｖａプログラム２１４の起動、操作パネル１１０を操作可能にする処理、プリンタ１１２及びスキャナ１１１を動作可能にする処理、並びに、ネットワーク１２０を介したデータの送受信を可能する処理等が含まれる。また、Ｎａｔｉｖｅプログラム２１３の一つとして、Ｊａｖａプログラム２１４の改ざん検知を行うＪａｖａプログラム改ざん検知処理部２０６がある。
【００１５】
Ｊａｖａプログラム２１４は、ＣＰＵ１０１で実行されるプログラムである。Ｊａｖａプログラム２１４は、複合機１００のＮａｔｉｖｅプログラム２１３と連携して各機能を提供するプログラム（例えば操作パネル１１０に画面を表示するプログラム）である。Ｊａｖａプログラム２１４として、Ｊａｖａプログラムインストール部２１５が存在する。Ｊａｖａプログラムインストール部２１５は、Ｊａｖａプログラム２１４のインストールを実施するプログラムである。Ｊａｖａプログラムインストール部２１５を介さずしてＪａｖａプログラム２１４をインストールすることは、通常はできない。
ハッシュリスト保管部２１６は、ＨＤＤ１０４等の不揮発メモリ上に生成されるリストであり、Ｊａｖａプログラム２１４のハッシュ値を保存するファイルである。ハッシュリスト保管部２１６には、後述のハッシュリスト３１０が記憶されている。
【００１６】
次に、図３（ａ）を参照して、改ざん検知を行わずに複合機１００が起動する処理の流れについて説明する。図３（ａ）は、複合機１００が起動する処理の流れの一例を示す模式図である。
図３（ａ）に示すように、複合機１００が起動すると、ブートプログラム２０９が起動する。そして、ブートプログラム２０９がＢＩＯＳ２１０を起動し、ＢＩＯＳ２１０がローダー２１１を起動し、ローダー２１１がカーネル２１２を起動し、カーネル２１２がＮａｔｉｖｅプログラム２１３に含まれる起動プログラムを起動する。そして、起動プログラムの中でＪａｖａプログラム２１４が起動され、以降は、Ｎａｔｉｖｅプログラム２１３とＪａｖａプログラム２１４とが連携して複合機１００の機能を提供する。
【００１７】
次に、図３（ｂ）を参照して、改ざん検知を行いながら複合機１００が起動する処理の流れについて説明する。図３（ｂ）は、複合機１００が起動する処理の流れの一例を示す模式図である。図３（ｂ）では各プログラムの保存場所、デジタル署名（以下署名と呼ぶ）及び公開鍵の保存場所が示されている。以降では、ＲＯＭ１０２にブートプログラム２０９とＢＩＯＳ２１０、フラッシュメモリ１１４にローダー２１１とカーネル２１２とＮａｔｉｖｅプログラム２１３、ＨＤＤ１０４にＪａｖａプログラム２１４が保存されているものとして説明する。
【００１８】
ブートプログラム２０９には、ＢＩＯＳ署名検証用の公開鍵３００が含まれている。ＢＩＯＳ２１０には、ＢＩＯＳ署名３０２とローダー検証用公開鍵３０３とが含まれている。ローダー２１１には、ローダー署名３０４とカーネル検証用公開鍵３０５とが含まれている。カーネル２１２には、カーネル署名３０６とＮａｔｉｖｅプログラム検証用公開鍵３０７とが含まれている。Ｎａｔｉｖｅプログラム２１３には、Ｊａｖａプログラム検証用公開鍵３０８とＮａｔｉｖｅプログラム署名３０９とが含まれている。ここで説明したこれらの公開鍵及び署名は予め複合機１００出荷前に各プログラムに対して付与されたものとする。
【００１９】
図３（ｂ）に示すように、複合機１００が起動すると、ブートプログラム２０９が起動する。ブートプログラム２０９のＢＩＯＳ改ざん検知処理部２０１がＢＩＯＳ２１０を検証し、問題がなければ、ブートプログラム２０９がＢＩＯＳ２１０を起動する。ＢＩＯＳ２１０のローダー改ざん検知処理部２０２がローダー２１１を検証し、問題がなければ、ＢＩＯＳ２１０がローダー２１１を起動する。ローダー２１１のカーネル改ざん検知処理部２０４がカーネル２１２を検証し、問題がなければ、ローダー２１１がカーネル２１２を起動する。カーネル２１２のプログラム改ざん検知処理部２０５がＮａｔｉｖｅプログラム２１３を検証し、問題がなければ、カーネル２１２がＮａｔｉｖｅプログラム２１３を起動する。Ｎａｔｉｖｅプログラム２１３のＪａｖａプログラム改ざん検知処理部２０６がＪａｖａプログラム２１４を検証し、問題がなければ、Ｎａｔｉｖｅプログラム２１３がＪａｖａプログラム２１４を起動する。
【００２０】
次に、図４を参照して、図３（ｂ）の処理の詳細について説明する。図４は、複合機１００の起動処理の一例を示すフローチャートである。
複合機の電源を入れると、ＲＯＭ１０２からＲＡＭ１１６にブートプログラム２０９が読み込まれてＣＰＵ１１５によって実行される。ブートプログラム２０９に含まれるＢＩＯＳ改ざん検知処理部２０１は、フラッシュメモリ１１４からＢＩＯＳ２１０とローダー検証用公開鍵３０３とＢＩＯＳ署名３０２とをＲＡＭ１１６に読み込む。そして、Ｓ４０１の処理が行われる。
【００２１】
Ｓ４０１において、ＢＩＯＳ改ざん検知処理部２０１は、Ｓ４０１にてＢＩＯＳ検証用の公開鍵３００を用いて、ＢＩＯＳ署名３０２の検証を行い、ＢＩＯＳ署名３０２の検証に成功したか否かを判定する。ＢＩＯＳ署名３０２の検証に成功したと判定した場合、ＢＩＯＳ改ざん検知処理部２０１は、ＣＰＵ１０１に通電し、処理をＳ４０２に進め、ブートプログラム２０９の処理を終了する。ＢＩＯＳ署名３０２の検証に成功した場合が、ＢＩＯＳ２１０の改ざんがなかった場合に対応する。ＢＩＯＳ署名３０２の検証に失敗したと判定した場合、ＢＩＯＳ改ざん検知処理部２０１は、Ｓ４０３において、ＬＥＤ１１７を点灯させることでＢＩＯＳ２１０の改ざんを検知した旨を通知して、図４の処理を終了する。
ＣＰＵ１０１は、通電されると、Ｓ４０２にてＲＯＭ１０２からＢＩＯＳ２１０とローダー検証用公開鍵３０３とをＲＡＭ１０３に読み込み、ＢＩＯＳ２１０を起動する。以降説明する図４の処理は全てＣＰＵ１０１によって処理される。
【００２２】
ＢＩＯＳ２１０は、起動されると、各種初期化処理を行い、ＢＩＯＳ２１０に含まれるローダー改ざん検知処理部２０２が、フラッシュメモリ１１４から、ローダー２１１とカーネル検証用公開鍵３０５とローダー署名３０４とをＲＡＭ１０３に読み込む。
Ｓ４０４において、ローダー改ざん検知処理部２０２は、ローダー検証用公開鍵３０３を用いてローダー署名３０４の検証を行い、ローダー署名３０４の検証に成功したか否かを判定する。ローダー署名３０４の検証に失敗したと判定した場合、ローダー改ざん検知処理部２０２は、Ｓ４１２において、操作パネル１１０にエラーメッセージを表示することでローダー２１１の改ざんを検知した旨を通知して、図４の処理を終了する。ローダー署名３０４の検証に成功したと判定した場合、ローダー改ざん検知処理部２０２は、処理をＳ４０５に進めて、ローダー改ざん検知処理部２０４は処理を終了する。ローダー署名３０４の検証に成功した場合が、ローダー２１１の改ざんがなかった場合に対応する。
【００２３】
Ｓ４０５において、ＢＩＯＳ２１０は、ＲＡＭ１０３に読み込まれたローダー２１１を起動する。ローダー２１１は、起動されると、各種初期化処理を行う。次に、ローダー２１１に含まれるカーネル改ざん検知処理部２０４は、フラッシュメモリ１１４からカーネル２１２とＮａｔｉｖｅプログラム検証用公開鍵３０７とカーネル署名３０６とをＲＡＭ１０３に読み込む。
Ｓ４０６において、カーネル改ざん検知処理部２０４は、カーネル検証用公開鍵３０５を用いて、カーネル署名３０６の検証を行い、カーネル署名３０６の検証に成功したか否かを判定する。カーネル署名３０６の検証に失敗したと判定した場合、カーネル改ざん検知処理部２０４は、Ｓ４１２において、操作パネル１１０にエラーメッセージを表示することでカーネル２１２の改ざんを検知した旨を通知して、図４の処理を終了する。カーネル署名３０６の検証に成功したと判定した場合、カーネル改ざん検知処理部２０４は、処理をＳ４０７に進めて、カーネル改ざん検知処理部２０４は処理を終了する。カーネル署名３０６の検証に成功した場合が、カーネル２１２の改ざんがなかった場合に対応する。
【００２４】
Ｓ４０７において、ローダー２１１は、ＲＡＭ１０３に読み込まれたカーネル２１２を起動する。カーネル２１２は、起動されると、各種初期化処理を行う。次に、カーネル２１２に含まれるプログラム改ざん検知処理部２０５は、フラッシュメモリ１１４からＮａｔｉｖｅプログラム２１３とＪａｖａプログラム検証用公開鍵３０８とＮａｔｉｖｅプログラム署名３０９とをＲＡＭ１０３に読み込む。
Ｓ４０８において、プログラム改ざん検知処理部２０５は、Ｎａｔｉｖｅプログラム検証用公開鍵３０７を用いて、Ｎａｔｉｖｅプログラム署名３０９の検証を行い、Ｎａｔｉｖｅプログラム署名３０９の検証に成功したか否かを判定する。Ｎａｔｉｖｅプログラム署名３０９の検証に失敗したと判定した場合、プログラム改ざん検知処理部２０５は、Ｓ４１２において、次の処理を行う。すなわち、プログラム改ざん検知処理部２０５は、操作パネル１１０にエラーメッセージを表示することでＮａｔｉｖｅプログラム２１３の改ざんを検知した旨を通知して、図４の処理を終了する。Ｎａｔｉｖｅプログラム署名３０９の検証に成功したと判定した場合、プログラム改ざん検知処理部２０５は、処理をＳ４０９に進めて、プログラム改ざん検知処理部２０５は処理を終了する。Ｎａｔｉｖｅプログラム署名３０９の検証に成功した場合が、Ｎａｔｉｖｅプログラム２１３の改ざんが検知されなかった場合に対応する。
【００２５】
Ｓ４０９において、カーネル２１２は、Ｊａｖａプログラム改ざん検知処理部２０６を含むＮａｔｉｖｅプログラム２１３を起動する。次いで、Ｊａｖａプログラム改ざん検知処理部２０６は、ＨＤＤ１０４からＪａｖａプログラム２１４とハッシュリスト３１０とをＲＡＭ１０３に読み込む。ハッシュリスト３１０には、ハッシュ値が格納されている。ハッシュリスト３１０のハッシュ値は、正規なＪａｖａプログラム２１４であることを検証するための検証データであり、ハッシュ関数を用いて計算された値である。ハッシュリスト３１０の生成方法については後述する。
【００２６】
Ｓ４１０において、Ｊａｖａプログラム改ざん検知処理部２０６は、起動するＪａｖａプログラム２１４のバイナリコード全体について、既知のＳＨＡ−２５６等のハッシュアルゴリズムを用いてハッシュ値を生成する。そして、Ｊａｖａプログラム改ざん検知処理部２０６は、生成したハッシュ値とハッシュリスト３１０とに基づいて、起動するＪａｖａプログラム２１４の検証を行う。起動するＪａｖａプログラム２１４のファイル名がハッシュリスト３１０に存在しない場合、Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に失敗したと判定する。起動するＪａｖａプログラム２１４のファイル名に対応するハッシュリスト３１０のハッシュ値が、生成したハッシュ値と一致する場合、Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に成功したと判定する。起動するＪａｖａプログラム２１４のファイル名に対応するハッシュリスト３１０のハッシュ値が、生成したハッシュ値と異なる場合、Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に失敗したと判定する。Ｊａｖａプログラム２１４の検証に失敗したと判定した場合、Ｊａｖａプログラム改ざん検知処理部２０６は、Ｓ４１２において、次の処理を行う。すなわち、Ｊａｖａプログラム改ざん検知処理部２０６は、操作パネル１１０にエラーメッセージを表示することで、Ｊａｖａプログラム２１４の改ざんを検知した旨を通知して、図４の処理を終了する。Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に成功したと判定した場合、処理をＳ４１１に進めて、Ｊａｖａプログラム改ざん検知処理部２０５は処理を終了する。Ｓ４１０においてＪａｖａプログラム２１４の検証に成功した場合が、Ｊａｖａプログラム２１４のインストール後にＪａｖａプログラム２１４の改ざんが検知されなかった場合に対応する。
Ｓ４１１において、Ｎａｔｉｖｅプログラム２１３は、Ｊａｖａプログラム２１４を起動する。
【００２７】
次に、図５を参照して、Ｊａｖａプログラム２１４を複合機１００にインストールするインストール処理について説明する。図５は、Ｊａｖａプログラム２１４のインストール処理の一例を示すフローチャートである。図５の処理は、Ｊａｖａプログラムインストール部２１５によって行われる。Ｊａｖａプログラムインストール部２１５は、複合機１００にインストールされたＪａｖａプログラム２１４の一つである。Ｊａｖａプログラムインストール部２１５は、それ自身が署名検証されており、改ざんされていないことが確認されてから実行される。
図５の処理は、操作パネル１１０によってＪａｖａプログラム２１４のインストールが指示された場合に開始する。
【００２８】
Ｓ５０１において、Ｊａｖａプログラムインストール部２１５は、Ｊａｖａプログラム２１４のパッケージを取得する。Ｊａｖａプログラムインストール部２１５は、ネットワーク１２０を介してサーバからＪａｖａプログラム２１４のパッケージをダウンロードして取得してもよい。また、Ｊａｖａプログラムインストール部２１５は、不図示のＵＳＢ等のローカルインタフェイスに接続されたＵＳＢメモリ等のメディア媒体からＪａｖａプログラム２１４のパッケージを取得してもよい。
Ｓ５０２において、Ｊａｖａプログラムインストール部２１５は、Ｊａｖａプログラム検証用公開鍵３０８とＪａｖａプログラム２１４のパッケージの署名とに基づいて、Ｊａｖａプログラム２１４のパッケージの署名の検証を実施する。Ｊａｖａプログラム検証用公開鍵３０８は、Ｊａｖａプログラム２１４のパッケージの署名の生成時に使用された秘密鍵に対応する。Ｊａｖａプログラム２１４のパッケージの署名は、正規なパッケージであることを検証するための検証データである。
【００２９】
Ｓ５０３において、Ｊａｖａプログラムインストール部２１５は、Ｊａｖａプログラム２１４のパッケージの署名検証に成功したか否かを判定する。Ｊａｖａプログラム２１４のパッケージの署名検証に成功したと判定した場合、Ｊａｖａプログラムインストール部２１５は、処理をＳ５０４に進める。Ｊａｖａプログラムのパッケージの署名検証に成功した場合が、Ｊａｖａプログラムのパッケージに改ざんが検知されなかった場合に対応する。Ｊａｖａプログラムのパッケージの署名検証に失敗したと判定した場合、Ｊａｖａプログラムインストール部２１５は、処理をＳ５０７に進める。
【００３０】
Ｓ５０４において、Ｊａｖａプログラムインストール部２１５は、Ｓ５０１で取得したＪａｖａプログラム２１４のパッケージをＨＤＤ１０４に展開する。Ｊａｖａプログラム２１４のパッケージには、入れ子状態で他のパッケージが入っていることがある。この場合、Ｊａｖａプログラムインストール部２１５は、Ｊａｖａプログラムのパッケージに入っている全てのパッケージをＨＤＤ１０４に展開する。これにより、入れ子状態で入っているパッケージを展開しない場合と比べて、インストールするＪａｖａプログラム２１４の動作が高速化される。
【００３１】
Ｓ５０５において、Ｊａｖａプログラムインストール部２１５は、Ｓ５０４で展開したパッケージの書き換えを行う。Ｓ５０５で実施されるパッケージの書き換えは、Ｊａｖａプログラム２１４の互換性を維持して動作を可能とさせるための正規の書き換えである。
パッケージの書き換えについて、より詳しく説明する。複合機１００の動作環境が、インストールするＪａｖａプログラム２１４が元々想定する動作環境とは異なる場合がある。この場合、Ｊａｖａプログラムインストール部２１５は、複合機１００でのＪａｖａプログラム２１４の実行環境に適合するように、Ｓ５０４で展開したパッケージを書き換える。この書き換えにより、Ｊａｖａプログラム２１４が複合機１００で正常に動作するようになる。より具体的には、Ｊａｖａプログラムインストール部２１５は、Ｓ５０４で展開したパッケージに含まれるライブラリを書き換える。この書き換えによって、Ｊａｖａプログラム２１４を動作させるＪＶＭ（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：Ｊａｖａ動作環境）の非互換性や、操作パネル１１０に表示を行うグラフィックライブラリの違いが吸収される。また、Ｊａｖａプログラムインストール部２１５は、互換性を維持するために、インストールするＪａｖａプログラム２１４のコードを書き換えてもよい。Ｓ５０５において、パッケージの書き換えを行うことで、過去のアプリケーション資産を有効に活用することができる。Ｓ５０５ではインストールされるＪａｖａプログラム２１４に対応するパッケージが書き換えられる。このため、Ｓ５０５ではＪａｖａプログラム２１４が書き換えられることになる。
【００３２】
Ｓ５０６において、Ｊａｖａプログラムインストール部２１５は、Ｓ５０５で書き換えたパッケージのハッシュ値を生成する。ここで計算されるハッシュ値は、Ｊａｖａプログラム２１４のパッケージからＳＨＡ−２５６等の所定のハッシュアルゴリズムを用いて計算された固定サイズ（例えば３２ｂｙｔｅ）のハッシュ値である。計算の元になるパッケージのデータが１ｂｉｔでも異なる場合は異なるハッシュ値が生成される。また、ハッシュ値は、ハッシュ値から元のデータを推定できない一方向性を持つため、Ｊａｖａプログラム２１４の改ざんの検知が可能である。Ｊａｖａプログラムインストール部２１５は、インストールするＪａｖａプログラム２１４のファイル名と計算したハッシュ値とを対応付けたデータをハッシュリスト３１０に追加する。そして、Ｊａｖａプログラムインストール部２１５は、図５の処理を終了する。Ｓ５０６で更新されるハッシュリスト３１０は、図４のＳ４１０で行われるＪａｖａプログラム２１４の検証に使われる。Ｓ５０６の処理によって、Ｓ５０１で取得したパッケージに対応するＪａｖａプログラム２１４の複合機１００へのインストールが完了する。
Ｓ５０７において、Ｊａｖａプログラムインストール部２１５は、操作パネル１１０にエラーメッセージを表示することで、Ｊａｖａプログラム２１４のパッケージが改ざんされている旨を通知して、図５の処理を終了する。
【００３３】
次に、ハッシュリスト３１０について説明する。ハッシュリスト３１０は、インストールされたＪａｖａプログラム２１４が正規のものであるか否かを検証することを可能とするリストである。ハッシュリスト３１０は、Ｊａｖａプログラムのファイル名とハッシュ値とを対応付けたデータを１つ以上含むリストである。ハッシュリスト３１０の構成例を次の表１に示す。
【００３４】
【表１】
2020052597.tif 000003
【００３５】
Ｎａｔｉｖｅプログラム２１３は、複合機１００にインストールされた任意のＪａｖａプログラム２１４を起動させる場合、まず、起動させるＪａｖａプログラム２１４のファイル名と１カラム目の名前が一致するハッシュリスト３１０の行を検索する。そして、Ｎａｔｉｖｅプログラム２１３は、検索したハッシュリスト３１０の行の２カラム目のハッシュ値を取得する。これにより、Ｎａｔｉｖｅプログラム２１３は、起動させるＪａｖａプログラム２１４の正しいハッシュ値を取得できる。
ハッシュリスト３１０も改ざんされる可能性がある。そこで、Ｊａｖａプログラムインストール部２１５は、ハッシュリスト３１０の保護のために、ハッシュリスト３１０自体に署名をつける。ハッシュリスト３１０に署名をつける際、複合機１００内で秘密鍵を保持する必要がある。複合機１００は、例えば、ＴＰＭ（Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）のようなハードウェアを用いて、秘密鍵を保管する。これにより、秘密鍵を安全に保持できる。ハッシュリスト３１０は、複合機１００外の安全なサーバに保管してもよい。ハッシュリスト３１０は改ざんされなければよく、ハッシュリスト３１０の管理方法の詳細は割愛する。
また、ハッシュリスト３１０は、表１に示す構成を持つファイルに限定されるものではなく、一般的なデータベース管理システムで管理されるデータの集合（データベース）であってもよい。
【００３６】
以上説明したように、複合機１００は、Ｊａｖａプログラム２１４をインストールする際、図５のＳ５０５において、Ｊａｖａプログラム２１４が複合機１００で正常に動作するように、パッケージの書き換えを行う。これにより、過去のプログラムの動作互換性が確保され、過去のアプリケーション資産を有効に活用できる。また、図５のＳ５０６において、Ｓ５０５で書き換えたパッケージのハッシュ値を計算して、ハッシュリスト３１０を更新する。これにより、互換性を保つために書き換えられたプログラムについて改ざんされていないにもかかわらず改ざんされたものと誤検知されることが防止され、正確に改ざんの検知ができる。
また、複合機１００は、ＢＩＯＳ２１０、ローダー２１１、カーネル２１２、Ｎａｔｉｖｅプログラム２１３、Ｊａｖａプログラム２１４の何れかが改ざんされた場合、耐タンパ性を有するモジュールを使用することなく、改ざんを検知することができる。
【００３７】
（第２の実施形態）
次に、第２の実施形態について説明する。第２の実施形態の説明では、第１の実施形態と共通する事項について説明を省略し、第１の実施形態と異なる事項についての説明を行う。また、第１の実施形態と同じ要素については同じ符号を付しており、その詳細な説明は省略する。
第１の実施形態において、Ｊａｖａプログラム２１４の改ざんを検知するための検証データとしてハッシュ値を用い、ハッシュリスト３１０に登録された正規なハッシュ値と一致しかた否かによって改ざん検知を可能としていた。しかし、改ざんを検知する方法はハッシュ値ではなく、署名によってでも実現することも可能である。第２の実施形態ではその方法を説明する。
【００３８】
図７を参照して、改ざん検知を行いながら第２の実施形態の複合機１００が起動する処理の流れについて説明する。図７は、複合機１００が起動する処理の流れの一例を示す模式図である。第２の実施形態でも、図３（ｂ）を参照して説明した第１の実施形態と同様に、ブートプログラム２０９がＢＩＯＳ２１０を起動し、ＢＩＯＳ２１０がローダー２１１を起動し、ローダー２１１がカーネル２１２を起動する。そして、カーネル２１２がＮａｔｉｖｅプログラム２１３を起動し、Ｎａｔｉｖｅプログラム２１３がＪａｖａプログラム２１４を起動する。ここで、各プログラムは、起動対象のプログラムの検証に成功した場合に、起動対象のプログラムを起動する。
図７における図３（ｂ）と異なる点は、図７では、ハッシュリスト３１０のかわりに、鍵ペア７１０が使われる点である。鍵ペア７１０には、公開鍵暗号方式を用いた暗号方式における秘密鍵と公開鍵とが含まれる。鍵ペア７１０は、Ｊａｖａプログラムの書き換え後の署名作成及び検証のために用いられる。また、鍵ペア７１０は、複合機１００ごとに異なる。鍵ペア７１０の公開鍵は、鍵ペア７１０の秘密鍵に対応する。
【００３９】
次に、図６を参照して、Ｊａｖａプログラムを複合機１００にインストールするインストール処理について説明する。図６は、Ｊａｖａプログラムのインストール処理の一例を示すフローチャートである。
Ｓ６０１からＳ６０５までの処理は、図５のＳ５０１からＳ５０５までの処理と同様である。Ｓ６０７の処理は、図５のＳ５０７の処理と同様である。
Ｓ６０６において、Ｊａｖａプログラムインストール部２１５は、鍵ペア７１０の秘密鍵を使用して、Ｓ６０５で書き換えられたパッケージの署名を生成し、パッケージに添付する。
鍵ペア７１０の秘密鍵が漏洩すると不正に署名を作成することが可能となる。複合機１００は、例えば、ＴＰＭのようなハードウェアを用いて、秘密鍵を保管する。これにより、秘密鍵を安全に保持できる。
【００４０】
図６の処理でインストールされたＪａｖａプログラム２１４は、図４のＳ４１０、Ｓ４１１の処理で、Ｎａｔｉｖｅプログラム２１３によって起動される。ただし、第２の実施形態では、Ｓ４１０の処理は、次のように行われる。
第２の実施形態のＳ４１０において、Ｊａｖａプログラム改ざん検知処理部２０６は、鍵ペア７１０の公開鍵を用いて、Ｓ６０６でＪａｖａプログラム２１４のパッケージに添付された署名の検証を行う。そして、Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に成功したか否かを判定する。Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に失敗したと判定した場合、Ｓ４１２において、操作パネル１１０にエラーメッセージを表示し、図４の処理を終了する。Ｊａｖａプログラム改ざん検知処理部２０６は、Ｊａｖａプログラム２１４の検証に成功したと判定した場合、処理をＳ４１１に進めて、Ｊａｖａプログラム改ざん検知処理部２０５は処理を終了する。
【００４１】
以上説明したように、第２の実施形態においても、第１の実施形態と同様に、互換性を保つために書き換えられたプログラムについて改ざんされていないにもかかわらず改ざんされたものと誤検知されることが防止される。そして、互換性を保つために書き換えられたプログラムについて、正確に改ざんの検知ができる。
【００４２】
（変形例）
上記の実施形態では使用される公開鍵が全て異なるものであるとして説明したが、同じものがあってもよい。また、各プログラムの保存場所としてＲＯＭ１０２、フラッシュメモリ１１４、ＨＤＤ１０４があるものとして説明したが、保存場所を限定するものではなく、別の記憶媒体であってもよい。また、プログラムの保存場所が説明した箇所になくてもよく、例えば、ＲＯＭ１０２上にローダー２１１を記憶する構成であってもよい。
【００４３】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００４４】
以上、本発明を実施形態と共に説明したが、上記実施形態は本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
例えば、複合機１００のハードウェア構成として、ＣＰＵは複数存在してもよく、複数のＣＰＵが各装置のＨＤＤ等に記憶されているプログラムに基づき処理を実行するようにしてもよい。また、複合機１００のハードウェア構成として、ＣＰＵに替えてＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いることとしてもよい。ソフトウェア構成の一部は、複合機１００のハードウェアとして実装されてもよい。また、上記の実施形態を任意に組み合わせてもよい。
【００４５】
以上、上述した実施形態によれば、互換性を保つために書き換えられたプログラムについて、改ざんされていないにもかかわらず改ざんされたものと誤検知されることを防止できる。
【符号の説明】
【００４６】
１００  複合機
２０１  ＢＩＯＳ改ざん検知処理部
２０２  ローダー改ざん検知処理部
２０４  カーネル改ざん検知処理部
２０５  プログラム改ざん検知処理部
２０６  Ｊａｖａプログラム改ざん検知処理部
２１５  Ｊａｖａプログラムインストール部
【図１】
2020052597.tif 000004
【図２】
2020052597.tif 000005
【図３】
2020052597.tif 000006
【図４】
2020052597.tif 000007
【図５】
2020052597.tif 000008
【図６】
2020052597.tif 000009
【図７】
2020052597.tif 000010