(57)【要約】【課題】署名技術を使って、プログラムの作成時点からの正当性検証を可能とする。【解決手段】プログラムを作成する側では、プログラムから特定の値を算出し、算出した特定の値を含む作成者秘匿情報を、プログラムの内部に埋め込む。配布されたプログラムを実行する側では、配布されたプログラムから、作成者秘匿情報を分離し、分離された作成者秘匿情報に含まれる特定の値を取得する。そして、配布されたプログラムから特定の値を算出し、作成者秘匿情報から取得した特定の値と比較して、配布されたプログラムの検証を行う。【選択図】図１
2019186848.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを作成する作成側情報処理装置と、前記作成側情報処理装置で作成され配布されたプログラムを実行する実行側情報処理装置とを備えた情報処理システムであって、
前記作成側情報処理装置は、
前記プログラムに暗号化された作成者秘匿情報を埋め込み、作成者秘匿情報埋め込み済みプログラムを生成するプログラム作成部を備え、
前記実行側情報処理装置は、
配布された前記プログラムから取り出した前記作成者秘匿情報を復号化する復号化部と、
前記復号化部が取り出した前記作成者秘匿情報に含まれる特定の値と、配布された前記プログラムから算出した特定の値とを比較して、配布された前記プログラムの正当性を検証する比較部と、を備える
情報処理システム。
【請求項２】
前記作成側情報処理装置の前記プログラム作成部は、前記プログラムのハッシュ値を算出し、算出したハッシュ値を含む前記作成者秘匿情報を、プログラム作成者の秘密鍵を用いて暗号化して前記プログラムの内部に埋め込み、
前記実行側情報処理装置の前記復号化部は、前記作成側情報処理装置から配布された検証用プログラムに含まれる前記プログラム作成者の公開鍵を用いて、作成者秘匿情報を復号化して、作成者秘匿情報に含まれるハッシュ値を得、
前記実行側情報処理装置の前記比較部は、配布された前記プログラムのハッシュ値を算出し、前記復号化部で得たハッシュ値と比較する
請求項１に記載の情報処理システム。
【請求項３】
前記プログラム作成者の公開鍵は、前記プログラムとは別に、前記作成側情報処理装置から配布された検証用プログラムを使って、前記実行側情報処理装置が取得する
請求項２に記載の情報処理システム。
【請求項４】
前記実行側情報処理装置は、
前記比較部でハッシュ値が一致したとき、配布された前記プログラムを実行し、前記比較部でハッシュ値が一致しないとき、配布された前記プログラムの実行を抑止する
請求項３に記載の情報処理システム。
【請求項５】
さらに、前記実行側情報処理装置は、前記作成側情報処理装置から配布された前記作成者秘匿情報埋め込み済みプログラムのハッシュ値を算出し、算出したハッシュ値を含む実行者秘匿情報を、プログラム実行者の秘密鍵を用いて暗号化して前記作成者秘匿情報埋め込み済みプログラムの内部に埋め込み、
埋め込まれた実行者秘匿情報を取り出して、前記プログラム実行者の公開鍵を用いて復号化して得たハッシュ値と、前記作成者秘匿情報埋め込み済みプログラムから算出したハッシュ値とを比較し、その比較でハッシュ値が一致したとき、配布された前記プログラムを実行し、ハッシュ値が一致しないとき、配布された前記プログラムの実行を抑止する
請求項４に記載の情報処理システム。
【請求項６】
作成側情報処理装置で作成され配布されたプログラムを、実行側情報処理装置で実行するプログラム実行制御方法において、
配布された前記プログラムから、作成者秘匿情報を分離し、分離した作成者秘匿情報を、プログラム作成者の公開鍵を用いて復号化して、作成者秘匿情報に含まれる特定の値を取り出す復号化処理と、
配布された前記プログラムの特定の値を算出し、前記復号化処理で取り出した特定の値と比較する比較処理と、を含む
プログラム実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムおよびプログラム実行制御方法に関する。
【背景技術】
【０００２】
情報処理装置において、不正なプログラムの実行を阻止するためには、実行されたプログラムの正当性を検証する必要がある。従来、情報処理装置が取り扱うデータやプログラムの正当性検証では、ハッシュ値を利用した署名技術が利用されている。
【０００３】
署名技術を利用したデータやプログラムの正当性検証では、データ参照やプログラム実行に先立ち、データやプログラムに対して署名情報の付加（署名）を行う必要がある。
例えば、ある情報処理装置で作成されたプログラムを、他の情報処理装置に配布したとき、プログラムが配布された情報処理装置にてプログラムを実行する前に、プログラム実行者が配布されたプログラムに対して署名情報を付加（署名）する。
【０００４】
例えば特許文献１には、プログラムの作成元で、固有の秘密データを、署名対象となるデータである契約内容識別データＩＤに付加し、これらを１６進数に置き換えて数値化して、この数値にハッシュ関数を作用させたハッシュ値を得ることが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−０３０１２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、従来から署名技術を使ってプログラムの正当性を検証することが行われている。
しかしながら、署名技術を使ったプログラムの正当性の検証を行っても、改竄を検知できない場合がある。すなわち、プログラムの配布過程ですでにプログラムが改竄されてしまった場合には、改竄された不正なプログラムに対して署名情報を付加（署名）してしまうことになり、不正なプログラムを正当なものであると判断してしまうという問題が発生する。
【０００７】
本発明の目的は、署名技術を使って、プログラムの作成時点からの正当性検証を可能とする情報処理システムおよびプログラム実行制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。
本願は、上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、プログラムを作成する作成側情報処理装置と、作成側情報処理装置で作成され配布されたプログラムを実行する実行側情報処理装置とを備えた情報処理システムである。
作成側情報処理装置は、プログラムに暗号化された作成者秘匿情報を埋め込み、作成者秘匿情報埋め込み済みプログラムを生成するプログラム作成部を備える。
実行側情報処理装置は、配布されたプログラムから取り出した作成者秘匿情報に含まれる特定の値と、配布されたプログラムから算出した特定の値とを比較して、配布されたプログラムの正当性を検証する比較部を備える。
【発明の効果】
【０００９】
本発明によると、配布されたプログラムが万一改竄されたプログラムである場合、作成者秘匿情報から取得した特定の値と、プログラムから算出した特定の値が一致しなくなる。このため、プログラム作成時に付加された作成者秘匿情報を使って、配布されたプログラムの正当性を的確に検証することができる。
上記した以外の課題、構成および効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施の形態例による情報処理システムの構成例を示すブロック図である。
【図２】本発明の一実施の形態例による情報処理システムが備える情報処理装置のハードウェア構成例を示すブロック図である。
【図３】本発明の一実施の形態例によるプログラムへの作成者秘匿情報埋め込み処理の概要を示す説明図である。
【図４】本発明の一実施の形態例によるプログラムへの実行者秘匿情報付加（署名）処理の概要を示す説明図である。
【図５】本発明の一実施の形態例によるプログラムからの実行者秘匿情報取り出し処理およびハッシュ値比較処理の概要を示す説明図である。
【図６】本発明の一実施の形態例によるプログラムからの作成者秘匿情報取り出し処理およびハッシュ値比較処理の概要を示す説明図である。
【図７】本発明の一実施の形態例によるプログラム実行制御処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための一実施の形態例（以下「本例」と称する）を、添付図面を参照して詳細に説明する。
【００１２】
［１．システム全体の概要］
図１は、本例の情報処理システムの一例を示したブロック図である。本例の情報処理システムは、プログラムを作成する作成側情報処理装置１００と、情報処理装置１００で作成されたプログラムが配布され、配布されたプログラムを実行する実行側情報処理装置１１０とを備える。図１では、作成側情報処理装置を情報処理装置（作成側）、実行側情報処理装置を情報処理装置（実行側）と記載している。
また、以下の説明では、作成側情報処理装置１００を作成側装置１００、実行側情報処理装置１１０を実行側装置１１０と略記する。作成側装置１００および実行側装置１１０は、例えば図２で後述するコンピュータ装置で構成される。
【００１３】
ここでは、作成側装置１００は、プログラム作成者ａの操作に基づいてプログラムを作成する処理を行う。実行側装置１１０は、プログラム実行者ｂの操作に基づいてプログラムを実行する。
【００１４】
プログラム作成者ａは、作成側装置１００を使って、プログラム（Ａ）１０１を作成する。このとき、作成側装置１００は、プログラム（Ａ）１０１から算出するハッシュ値を、プログラム作成者ａが管理する秘密鍵（Ａ）１０３を使用して暗号化する。そして、作成側装置１００は、暗号化したハッシュ値を含む作成者秘匿情報１０４を生成し、作成者秘匿情報１０４をプログラム（Ａ）１０１に埋め込む。
【００１５】
プログラム（Ａ）１０１は、作成者秘匿情報１０４が埋め込まれることでプログラム（Ａ´）１０２となり、このプログラム（Ａ´）１０２が、作成側装置１００から実行側装置１１０に配布される。
また、作成側装置１００は、プログラム（Ａ´）１０２とは別に、プログラム認証カーネルモジュール１０６を、実行側装置１１０に配布する。プログラム認証カーネルモジュール１０６には、プログラム作成者ａが管理する公開鍵（Ａ）１０５が含まれる。このプログラム認証カーネルモジュール１０６は、作成側装置１００から配布されたプログラム（Ａ´）１０２の正当性を検証する検証用プログラムに相当する。
【００１６】
プログラム（Ａ´）１０２およびプログラム認証カーネルモジュール１０６は、ネットワークを経由した配布、メモリやディスクなどの媒体を使った配布など、いずれの形態で配布してもよい。すなわち、プログラム（Ａ´）１０２およびプログラム認証カーネルモジュール１０６は、ネットワークあるいは各種媒体を介して配布される。媒体としては、ＤＶＤ（Digital Versatile Disc）などの光学記録媒体や、ＵＳＢ（Universal Serial Bus）メモリなどの半導体記録媒体、ＨＤＤ（Hard Disk Drive）などの磁気記録媒体が適用可能である。したがって、実行側装置１１０と作成側装置１００とは、必ずしもネットワークで接続されている必要はない。
なお、プログラム（Ａ´）１０２の配布とプログラム認証カーネルモジュール１０６の配布は、別のネットワークや媒体を使って配布してもよい。
【００１７】
作成側装置１００から実行側装置１１０にプログラム（Ａ´）を配布する際には、プログラム（Ａ）１０１のハッシュ値を基にした正当性確認を行うプログラム認証カーネルモジュール１０６も、同時に配布される。プログラム認証カーネルモジュール１０６には、プログラム作成者ａが管理する作成者秘匿情報１０４の復号化に使用する公開鍵（Ａ）１０５が含まれている。
【００１８】
実行側装置１１０に配布されたプログラム認証カーネルモジュール１０６は、実行側装置１１０のカーネル本体１１５に組み込まれる。
プログラム実行者ｂは、配布されたプログラム（Ａ´）１０２に対して、実行側装置１１０での実行を許可するために、プログラム（Ａ´）１０２に署名情報１１１を付加（署名）する。署名情報１１１には、配布されたプログラム（Ａ´）１０２から算出するハッシュ値を、プログラム実行者ｂが管理する秘密鍵（Ｂ）１１２を使用して暗号化した実行者秘匿情報１１３が含まれている。
さらに、プログラム実行者ｂは、プログラム実行者ｂが管理する実行者秘匿情報１１３の復号化に使用する公開鍵（Ｂ）１１４を、実行側装置１１０のカーネル本体１１５に登録する。
なお、本明細書で述べるハッシュ値は、対象となるプログラム（Ａ）１０１またはプログラム（Ａ´）１０２から予め決められた演算で算出できる値であり、プログラムの一部に変更がある場合は、ハッシュ値が異なる値になる。
【００１９】
［２．ハードウェア構成例］
図２は、作成側装置１００および実行側装置１１０として使用されるコンピュータ装置のハードウェア構成例を示す。
図２に示すコンピュータは、バス８にそれぞれ接続されたＣＰＵ（Control Processing Unit：中央処理装置）１、ＲＯＭ（Read Only Memory）２、およびＲＡＭ（Random Access Memory３）を備える。さらに、コンピュータは、記憶装置４、操作部５、表示部６、および通信インターフェース７を備える。
【００２０】
ＣＰＵ１は、本実施の形態例に係る各機能を実現するソフトウェアのプログラムコードをＲＯＭ２から読み出して実行する。
ＲＡＭ３には、演算処理の途中に発生した変数やパラメータ等が一時的に書き込まれる。本実施の形態例に係る各システムおよび装置における処理の実行は、主にＣＰＵ１がプログラムコードを実行することにより実現される。図１に示すプログラム認証カーネルモジュール１０６やカーネル本体１１５についても、ＣＰＵ１がプログラムコードを実行することで実現される。さらに、後述する図３〜図６に示すプログラム作成部１００ａ、実行者秘匿情報付加部１１０ａ、第１比較部１１０ｂ、復号化部１１０ｃ、ハッシュ値算出部１１０ｄ、および第２比較部１１０ｅについても、ＣＰＵ１がプログラムコードを実行することで実現される。
【００２１】
表示部６は、例えば、液晶ディスプレイモニタであり、この表示部６によりコンピュータで実行される処理の結果が利用者であるプログラム作成者ａおよびプログラム実行者ｂに表示される。
操作部５には、例えば、キーボード、マウスなどが用いられ、利用者は操作部５を用いて所定の入力を行う。
記憶装置４には、例えば、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）などの大容量データ記憶媒体が用いられる。記憶装置４には、作成したプログラム（Ａ）１０１または配布されたプログラム（Ａ´）１０２や、このコンピュータ装置を作成側装置１００または実行側装置１１０として機能させるためのプログラムが記録される。
通信インターフェース７には、例えば、ＮＩＣ（Network Interface Card）などが用いられる。通信インターフェース７は、端子が接続されたＬＡＮ（Local Area Network）、専用線などを介して外部と各種データの送受信を行う。
【００２２】
［３．プログラム作成時の作成者秘匿情報の埋め込み処理］
図３は、作成側装置１００に用意されるプログラム作成部１００ａで行われる、プログラム（Ａ）１０１に作成者秘匿情報１０４を埋め込むための処理を行う手順および装置の構成を示している。
作成側装置１００では、プログラム（Ａ）１０１からハッシュ値（Ａ）２００を算出する処理が行われる。このハッシュ値（Ａ）２００は、プログラム作成者ａが管理する秘密鍵（Ａ）１０３を使用して暗号化され、作成者秘匿情報１０４が作成される。
【００２３】
作成者秘匿情報１０４は、プログラム（Ａ）１０１の内部に埋め込まれる。このように作成者秘匿情報１０４が埋め込まれることで、作成者秘匿情報１０４を内包するプログラム（Ａ´）１０２が形成される。
そして、プログラム作成部１００ａで得られた、作成者秘匿情報１０４を内包するプログラム（Ａ´）１０２が、実行側装置１１０に配布される。
【００２４】
［４．プログラム実行時の正当性確認処理］
図４〜図６は、実行側装置１１０が、配布されたプログラム（Ａ´）１０２を実行する際における、プログラムの正当性を確認する処理を行う手順および装置の構成を示す。
図４は、実行側装置１１０に配布されたプログラム（Ａ´）１０２を復号して、実行者秘匿情報を付加する処理を行う実行者秘匿情報付加部１１０ａの構成を示している。
まず、実行者秘匿情報付加部１１０ａは、プログラム（Ａ´）１０２からハッシュ値（Ａ´）３００を算出する。ここでハッシュ値（Ａ´）３００を算出するプログラム（Ａ´）１０２は、作成者秘匿情報１０４を内包するプログラム（Ａ´）１０２である。
【００２５】
そして、実行者秘匿情報付加部１１０ａは、算出したハッシュ値（Ａ´）３００をプログラム実行者ｂの秘密鍵（Ｂ）１１２により暗号化し、暗号化されたハッシュ値（Ａ´）３００を含む実行者秘匿情報１１３を作成する。
さらに、実行者秘匿情報付加部１１０ａは、実行者秘匿情報１１３を内包する署名情報１１１を、プログラム（Ａ´）１０２に付加（署名）する。
【００２６】
図５は、実行側装置１１０において、実行者秘匿情報１１３に含まれるハッシュ値（Ａ´）３００を使って、プログラム（Ａ´）１０２の正当性を確認するための処理とこれを実行するための第１比較部１１０ｂの構成を示す。この第１比較部１１０ｂは、図１に示すカーネル本体１１５およびプログラム認証カーネルモジュール１０６内に設けられる構成である。
第１比較部１１０ｂは、プログラム（Ａ´）１０２に付加（署名）された署名情報１１１から、実行者秘匿情報１１３を取り出す。取り出された実行者秘匿情報１１３は、プログラム実行者ｂが管理する公開鍵（Ｂ）１１４を使用して復号化され、実行者秘匿情報１１３に含まれるハッシュ値（Ａ´）３００が得られる。
【００２７】
さらに、第１比較部１１０ｂは、作成者秘匿情報１０４を内包するプログラム（Ａ´）１０２からハッシュ値（ａ´）４００を算出する。そして、第１比較部１１０ｂは、プログラム（Ａ´）１０２から算出したハッシュ値（ａ´）４００と、実行者秘匿情報１１３に含まれるハッシュ値（Ａ´）３００とを比較する。そして、この比較結果に基づいて、第１比較部１１０ｂは、プログラム（Ａ´）１０２の正当性を確認する。
【００２８】
図６は、実行側装置１１０において、作成者秘匿情報１０４に含まれるハッシュ値（Ａ）２００を使って、プログラム（Ａ´）１０２の正当性を確認する処理を行う手順とそれを実行するための構成を示す。実行側装置１１０は、作成者秘匿情報１０４から正当性を確認する構成として、復号化部１１０ｃ、ハッシュ値算出部１１０ｄ、および第２比較部１１０ｅを備える。これらの復号化部１１０ｃ、ハッシュ値算出部１１０ｄ、および第２比較部１１０ｅは、図１に示すカーネル本体１１５およびプログラム認証カーネルモジュール１０６内に設けられている。
【００２９】
復号化部１１０ｃは、プログラム（Ａ´）１０２から作成者秘匿情報１０４を分離し、分離した作成者秘匿情報１０４を、プログラム作成者ａの公開鍵（Ａ）１０５を使って復号化する。作成者秘匿情報１０４の復号化により、作成者秘匿情報１０４に含まれるハッシュ値（Ａ）２００が得られる。復号化に使用するプログラム作成者ａの公開鍵（Ａ）１０５は、作成側装置１００から配布されたプログラム認証カーネルモジュール１０６（図１）から取得される。
【００３０】
また、プログラム（Ａ´）１０２から作成者秘匿情報１０４を分離することで、プログラム（Ａ）１０１が復元される。ハッシュ値算出部１１０ｄは、このプログラム（Ａ）１０１からハッシュ値（ａ）５００を算出する。
【００３１】
そして、第２比較部１１０ｅは、復号化部１１０ｃで得られた作成者秘匿情報１０４に含まれるハッシュ値（Ａ）２００と、ハッシュ値算出部１１０ｄで算出されたプログラム（Ａ）１０１のハッシュ値（ａ）５００とを比較する。この比較結果に基づいて、第２比較部１１０ｅは、プログラム（Ａ）１０１の正当性を確認する。
【００３２】
［５．プログラム実行時の正当性確認処理の流れ］
図７は、実行側装置１１０において、配布されたプログラムを実行する際の正当性の確認処理の流れを示すフローチャートである。この正当性の確認処理は、カーネル本体１１５およびプログラム認証カーネルモジュール１０６にて行われる。
正当性の確認処理は、プログラム実行者ｂが、署名情報１１１を付加（署名）済みのプログラム（Ａ´）１０２の実行を指示することで開始される。
【００３３】
正当性の確認処理が開始されると、カーネル本体１１５がプログラム（Ａ´）１０２をメモリに読込む（ステップＳ１１）。そして、カーネル本体１１５は、プログラム（Ａ´）１０２に署名情報１１１が付加（署名）しているか否かを判断する（ステップＳ１２）。ここで、署名情報１１１が付加（署名）されていないと判断した場合（ステップＳ１２のＮＯ）、カーネル本体１１５は、ステップＳ２２のプログラム（Ａ）の実行抑止処理へ移る。
【００３４】
また、ステップＳ１２において、署名情報１１１が付加（署名）されていると判断したとき（ステップＳ１２のＹＥＳ）、カーネル本体１１５は、署名情報１１１をメモリに読込み、署名情報１１１から実行者秘匿情報１１３を取り出す。そして、公開鍵（Ｂ）１１４を使用して実行者秘匿情報１１３を復号化する復号化処理を行い、プログラム（Ａ´）１０２のハッシュ値（Ａ´）３００を得る（ステップＳ１３）。
【００３５】
その後、カーネル本体１１５は、ステップ１００１で読込んだプログラム（Ａ´）１０２のハッシュ値（ａ´）４００を算出する（ステップＳ１４）。
そして、カーネル本体１１５は、ステップ１００３で得たハッシュ値（Ａ´）３００と、ステップ１００４で算出したハッシュ値（ａ´）４００を比較し、一致しているか否かを判断する（ステップＳ１５）。ここで、一致していないと判断した場合（ステップＳ１５のＮＯ）、カーネル本体１１５は、ステップＳ２２のプログラム（Ａ）の実行抑止処理へ移る。
【００３６】
また、ステップＳ１５において、ハッシュ値が一致していると判断した場合には（ステップＳ１５のＹＥＳ）、プログラム認証カーネルモジュール１０６は、ステップＳ１１で読込んだプログラム（Ａ´）１０２に、作成者秘匿情報１０４が埋め込まれているか否かを判断する（ステップＳ１６）。ここで、埋め込まれていないと判断した場合（ステップＳ１６のＮＯ）、カーネル本体１１５は、ステップＳ２２のプログラム（Ａ）の実行抑止処理へ移る。
【００３７】
また、ステップＳ１６において、作成者秘匿情報１０４が埋め込まれていると判断した場合には（ステップＳ１６のＹＥＳ）、プログラム認証カーネルモジュール１０６は、ステップＳ１１で読込んだプログラム（Ａ´）１０２の分離処理を行う（ステップＳ１７）。この分離処理では、プログラム（Ａ´）１０２を、プログラム（Ａ）１０１と作成者秘匿情報１０４とに分離する。
【００３８】
そして、プログラム認証カーネルモジュール１０６は、ステップＳ１７で分離した作成者秘匿情報１０４を、公開鍵（Ａ）１０５を使用して復号化する復号化処理を行い、プログラム（Ａ）１０１のハッシュ値（Ａ）２００を得る（ステップＳ１８）。
さらに、プログラム認証カーネルモジュール１０６は、ステップＳ１７で分離したプログラム（Ａ）１０１のハッシュ値（ａ）５００を算出する（ステップＳ１９）。
【００３９】
その後、プログラム認証カーネルモジュール１０６は、ステップＳ１８で得たハッシュ値（Ａ）２００と、ステップＳ１９で算出したハッシュ値（ａ）５００を比較し、一致しているか否かを判断する（ステップＳ２０）。ここで、ハッシュ値が一致していないと判断した場合（ステップＳ２０のＮＯ）、カーネル本体１１５は、ステップＳ２２のプログラム（Ａ）の実行抑止処理へ移る。
また、ステップＳ２０において、ハッシュ値が一致していると判断した場合には（ステップＳ２０のＹＥＳ）、カーネル本体１１５は、プログラム（Ａ）１０１を実行する（ステップＳ２１）。
【００４０】
このように、実行側装置１１０は、実行者秘匿情報１１３に含まれるハッシュ値（Ａ´）３００が算出値と一致し、かつ、作成者秘匿情報１０４に含まれるハッシュ値（Ａ）２００が算出値と一致した場合にのみ、プログラム（Ａ）１０１を実行する。したがって、作成側装置１００で作成されてから、実行側装置１１０で実行するまでの間に、プログラム（Ａ）１０１に何らかの変更があった場合には、該当するプログラムの実行が阻止されるので、不正なプログラムの実行を確実に阻止することができる。
【００４１】
［６．不正プログラムの場合の動作例］
ここで、正規のプログラム作成者ａではないプログラム作成者が作成した不正プログラム（Ｘ）が配布された場合（不正プログラムが混入した場合）の動作を、図７のフローチャートに基づいて説明する。
【００４２】
実行側装置１１０に不正プログラム（Ｘ）が配布された場合、不正プログラム（Ｘ）には、プログラム実行者ｂが実行側装置１１０での実行を許可していないために、署名情報が付加（署名）されていない。したがって、ステップＳ１２において、不正プログラム（Ｘ）には署名情報が付加（署名）されていないと判断され、ステップＳ２２に移り、カーネル本体１１５が不正プログラム（Ｘ）の実行を抑止する。
【００４３】
また、実行側装置１１０に不正プログラム（Ｘ）が配布された場合において、プログラム実行者ｂが不正プログラムであることに気付かず、不正プログラム（Ｘ）に署名情報を付加（署名）して、実行側装置１１０での実行を許可した場合には、以下に示す動作が行われる。
すなわち、プログラム実行者ｂは、配布された不正プログラム（Ｘ）に対して、実行側装置１１０での実行を許可するために、署名情報を付加（署名）する。この署名情報は、不正プログラム（Ｘ）から算出するハッシュ値（Ｘ）を、プログラム実行者ｂが管理する秘密鍵（Ｂ）１１２を使用して暗号化した実行者秘匿情報を内包する。
【００４４】
この場合には、図７のフローチャートに示す処理手順の内で、ステップＳ１５では、ステップＳ１３で得たハッシュ値（Ｘ）と、ステップＳ１４で算出したハッシュ値（ｘ）との比較により、両者が一致していると判断される。しかしながら、次のステップＳ１６での作成者秘匿情報が埋め込まれているか否かの判断で、不正プログラム（Ｘ）には作成者秘匿情報が埋め込まれていないため、ステップＳ２２に移り、カーネル本体１１５により不正プログラム（Ｘ）の実行が抑止される。
【００４５】
このように、実行側装置１１０に不正プログラム（Ｘ）が配布されてしまい、かつ、プログラム実行者ｂがそれに気付かず、不正プログラム（Ｘ）に署名情報を付加（署名）してしまった場合であっても、不正プログラム（Ｘ）の実行は抑止される。
【００４６】
次に、実行側装置１１０に配布されたプログラム（Ａ´）１０２が、プログラム実行者ｂによって署名情報１１１を付加（署名）される前に、改竄されてしまった場合の動作について説明する。
【００４７】
この場合、実行側装置１１０に配布されたプログラム（Ａ´）１０２は、改竄されて不正プログラム（Ｍ´）となる。不正プログラム（Ｍ´）は、プログラム作成者ａが生成したプログラム（Ａ）１０１に基づいて生成された作成者秘匿情報１０４が埋め込まれたままであるが、プログラム（Ａ）１０１そのものは改竄された不正プログラム（Ｍ´）となっている。
【００４８】
プログラム実行者ｂは、プログラム（Ａ´）１０２が改竄され不正プログラム（Ｍ´）になっていることに気付かず、不正プログラム（Ｍ´）に対して、実行側装置１１０での実行を許可するために、不正プログラム（Ｍ´）に署名情報を付加（署名）する。この署名情報は、不正プログラム（Ｍ´）から算出するハッシュ値（Ｍ´）を、プログラム実行者ｂが管理する秘密鍵（Ｂ）１１２を使用して暗号化した実行者秘匿情報を内包している。
【００４９】
この場合には、図７のフローチャートに示す処理手順の内で、ステップＳ１２では、不正プログラム（Ｍ´）に署名情報が付加（署名）されているため、カーネル本体１１５は、ステップＳ１３に移行し、不正プログラム（Ｍ´）のハッシュ値（Ｍ´）を得る。そして、ステップＳ１４において、カーネル本体１１５は、ステップＳ１１で読込んだ不正プログラム（Ｍ´）のハッシュ値（ｍ´）を算出し、ステップＳ１５において、ハッシュ値（Ｍ´）とハッシュ値（ｍ´）とが一致しているか否かを判断する。さらに、ステップＳ１６において、プログラム認証カーネルモジュール１０６は、ステップＳ１１で読込んだ不正プログラム（Ｍ´）に作成者秘匿情報が埋め込まれていると判断し、ステップＳ１７〜Ｓ２０の処理を実行する。
【００５０】
ステップＳ２０において、プログラム認証カーネルモジュール１０６が、ステップＳ１８で得たハッシュ値（Ａ）２００と、ステップＳ１９で算出したハッシュ値（ｍ）とを比較する処理が行われる。このとき、不正プログラム（Ｍ）はプログラム（Ａ）が改竄されたものであり、ハッシュ値（Ａ）２００とハッシュ値（ｍ）とが一致せず、ステップＳ２２に移って、カーネル本体１１５が不正プログラム（Ｍ）の実行を抑止する。
【００５１】
このように、実行側装置１１０に配布されたプログラム（Ａ´）１０２が、署名情報１１１が付加（署名）される前に改竄されて、不正プログラム（Ｍ´）となった場合であっても、不正プログラム（Ｍ´）の実行は確実に抑止される。
【００５２】
［７．変形例］
なお、上述した実施の形態例では、実行側装置１１０が、正当性の検証用プログラムであるプログラム認証カーネルモジュール１０６を使って、プログラムからハッシュ値を算出し、そのハッシュ値を比較するようにした。検証用としてハッシュ値を使用するのは一例であり、プログラムを使った演算で算出可能な特定の値であれば、ハッシュ値以外の値を使用してもよい。
【００５３】
また、本発明は、上述した実施の形態例に限定されるものではなく、様々な変形例が含まれる。また、上述した実施の形態例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
また、構成図や機能ブロック図では、制御線や情報線は説明上必要と考えられるものだけを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
なお、機能ブロック図として示した処理部については、ソフトウェアで実現する場合の他、それらの一部または全部を、例えば集積回路で設計するなどによってハードウェアで実現してもよい。
さらに、図７のフローチャートにおいて、実施の形態例の処理結果に影響がない範囲で、一部の処理ステップの実行順序を入れ替えたり、一部の処理ステップを同時に実行するようにしてもよい。
【符号の説明】
【００５４】
１…中央制御ユニット（ＣＰＵ）、２…ＲＯＭ、３…ＲＡＭ、４…記憶装置、５…操作部、６…表示部、７…通信インターフェース、８…バスライン、１００…作成側情報処理装置（作成側装置）、１００ａ…プログラム作成部、１０１…プログラム、１０２…プログラム（作成者秘匿情報埋め込み済）、１０３…秘密鍵、１０４…作成者秘匿情報、１０５…公開鍵、１０６…プログラム認証カーネルモジュール、１１０…実行側情報処理装置（実行側装置）、１１０ａ…実行者秘匿情報付加部、１１０ｂ…第１比較部、１１０ｃ…復号化部、１１０ｄ…ハッシュ値算出部、１１０ｅ…第２比較部、１１１…署名情報、１１２…秘密鍵、１１３…作成者秘匿情報、１１４…公開鍵
【図１】
2019186848.tif 000003
【図２】
2019186848.tif 000004
【図３】
2019186848.tif 000005
【図４】
2019186848.tif 000006
【図５】
2019186848.tif 000007
【図６】
2019186848.tif 000008
【図７】
2019186848.tif 000009