(57)【特許請求の範囲】
【請求項１】
共通鍵と署名検証処理と第１の署名処理とが埋め込まれていると共に、第１の署名情報が付加されているプログラムに従った処理を実行する端末装置と、前記プログラムの改竄の有無を検証すると共に前記プログラムを認証する管理装置とを備えたプログラム管理システムであって、
前記端末装置は、
前記プログラムを記憶する第１の記憶手段と、
前記第１の記憶手段から前記プログラムを読み出し、前記プログラムに従った処理を実行するプログラム実行手段とを備え、
前記署名検証処理は、前記第１の署名情報を検証し、検証結果情報を前記管理装置へ送信する処理であり、
前記第１の署名処理は、前記管理装置から検証用情報を受信し、前記検証用情報を前記共通鍵で暗号化して第２の署名情報を生成し、前記第２の署名情報を前記管理装置へ送信する処理であり、
前記管理装置は、
前記端末装置から受信した前記検証結果情報に基づいて前記プログラムの改竄の有無を検証する第１の検証手段と、
前記検証用情報を前記端末装置へ送信し、前記端末装置から受信した前記第２の署名情報を前記共通鍵で復号化して得た前記検証用情報を検証することにより前記プログラムを認証する認証手段とを備えた
ことを特徴とするプログラム管理システム。
【請求項２】
前記プログラムに従った処理の実行により生成される実行結果情報に対する第３の署名情報を生成し、前記実行結果情報と共に前記管理装置へ送信する第２の署名処理が前記プログラムに埋め込まれており、
前記管理装置はさらに、前記端末装置から前記実行結果情報および前記第３の署名情報を受信し、前記第３の署名情報を検証する第２の検証手段を備えた
ことを特徴とする請求項１に記載のプログラム管理システム。
【請求項３】
前記管理装置はさらに、
前記プログラムを生成して前記端末装置へ送信するプログラム生成手段と、
前記共通鍵および前記第１の署名処理の少なくともいずれかを前記プログラムに埋め込む位置を制御する埋め込み位置制御手段と、
を備えたことを特徴とする請求項１または請求項２に記載のプログラム管理システム。
【請求項４】
前記管理装置はさらに、前記共通鍵の識別情報と前記共通鍵の有効期限が関連付けられた有効期限情報を記憶する第２の記憶手段と、
前記第２の記憶手段から前記有効期限情報を読み出し、前記有効期限情報に基づいて前記共通鍵が有効であるか否かを判定する判定手段と、
を備えたことを特徴とする請求項１〜請求項３のいずれかに記載のプログラム管理システム。
【請求項５】
前記プログラムが複数の部分プログラムの集合体であり、各々の前記部分プログラムには、他の前記部分プログラムの実行中のプロセス状態を確認する状態確認処理が埋め込まれていることを特徴とする請求項１〜請求項４のいずれかに記載のプログラム管理システム。
【請求項６】
共通鍵と署名検証処理と第１の署名処理とが埋め込まれていると共に、第１の署名情報が付加されているプログラムの改竄の有無を検証すると共に前記プログラムを認証する管理装置と通信する端末装置であって、
前記プログラムを記憶する記憶手段と、
前記記憶手段から前記プログラムを読み出し、前記プログラムに従った処理を実行するプログラム実行手段とを備え、
前記署名検証処理は、前記第１の署名情報を検証し、検証結果情報を前記管理装置へ送信する処理であり、
前記第１の署名処理は、前記管理装置から検証用情報を受信し、前記検証用情報を前記共通鍵で暗号化して第２の署名情報を生成し、前記第２の署名情報を前記管理装置へ送信する処理である
ことを特徴とする端末装置。
【請求項７】
前記プログラムに従った処理の実行により生成される実行結果情報に対する第３の署名情報を生成し、前記実行結果情報と共に前記管理装置へ送信する第２の署名処理が前記プログラムに埋め込まれていることを特徴とする請求項６に記載の端末装置。
【請求項８】
前記プログラムが複数の部分プログラムの集合体であり、各々の前記部分プログラムには、他の前記部分プログラムの実行時のプロセス状態を確認する状態確認処理が埋め込まれていることを特徴とする請求項６または請求項７に記載の端末装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、端末装置上で起動されるプログラムの状態を確認するプログラム管理システムに関する。また、本発明は、プログラムが起動される端末装置にも関する。
【背景技術】
【０００２】
安全性の不明な端末装置の完全性（改竄されていないこと）を検証する仕組みとして、TPM（Trusted Platform Module）がある（例えば非特許文献１参照）。これは、BIOS（Basic Input/Output System）、ブートローダ、OS（Operating System）、アプリケーションが正しい状態であるときのそれらのハッシュ値をTPM内のハッシュ格納領域に保存しておき、ホストが起動する度にそれらのハッシュ値を、保存されている正しいとされるハッシュ値と比較することで改変を検知する仕組みである。
【０００３】
ハッシュ値同士の比較による改変の有無の確認は以下の手順で行われる。まず、BIOSの改変の有無を確認して、BIOSが正しい状態であることを確認した後に、この正しいBIOSからブートローダの改変の有無を確認する。改変が無い場合には、ブートローダが正しい状態であるとして、次に正しいとされるブートローダからOSを起動する。OSに改変が無い場合には、OSが正しい状態であるとして、このOSからアプリケーションを起動する。このとき、アプリケーションにも改変が無い場合には、正しいアプリケーションが起動されたとみなされる。
【非特許文献１】R. Sailer, X. Zhang, T. Jaeger, and L. v. Doorn, "Design and Implementation of a TCG-based Integrity Measurement Architecture," Proceedings of 13th USENIX Security Symposium, pp.223-238, August, 2004
【発明の開示】
【発明が解決しようとする課題】
【０００４】
OSやアプリケーションについては、セキュリティパッチやバグを修正するための状態更新が頻繁に行われる。しかし、TPM内のハッシュ格納領域に一旦保存されたハッシュ値をOSやアプリケーションの更新に合わせて変更することができないため、改変の有無の確認を正しく行うことができなくなる。こうした時間の経過と共に変化する状態について、TPMで正しい状態の連鎖を管理する手順は規定されていない。
【０００５】
本発明は、上述した問題点に鑑みてなされたものであって、端末装置上で起動されるプログラムの改竄の有無を検証することができるプログラム管理システムおよび端末装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するためになされたもので、共通鍵と署名検証処理と第１の署名処理とが埋め込まれていると共に、第１の署名情報が付加されているプログラムに従った処理を実行する端末装置と、前記プログラムの改竄の有無を検証すると共に前記プログラムを認証する管理装置とを備えたプログラム管理システムであって、前記端末装置は、前記プログラムを記憶する第１の記憶手段と、前記第１の記憶手段から前記プログラムを読み出し、前記プログラムに従った処理を実行するプログラム実行手段とを備え、前記署名検証処理は、前記第１の署名情報を検証し、検証結果情報を前記管理装置へ送信する処理であり、前記第１の署名処理は、前記管理装置から検証用情報を受信し、前記検証用情報を前記共通鍵で暗号化して第２の署名情報を生成し、前記第２の署名情報を前記管理装置へ送信する処理であり、前記管理装置は、前記端末装置から受信した前記検証結果情報に基づいて前記プログラムの改竄の有無を検証する第１の検証手段と、前記検証用情報を前記端末装置へ送信し、前記端末装置から受信した前記第２の署名情報を前記共通鍵で復号化して得た前記検証用情報を検証することにより前記プログラムを認証する認証手段とを備えたことを特徴とするプログラム管理システムである。
【０００７】
また、本発明のプログラム管理システムは、前記プログラムに従った処理の実行により生成される実行結果情報に対する第３の署名情報を生成し、前記実行結果情報と共に前記管理装置へ送信する第２の署名処理が前記プログラムに埋め込まれており、前記管理装置はさらに、前記端末装置から前記実行結果情報および前記第３の署名情報を受信し、前記第３の署名情報を検証する第２の検証手段を備えたことを特徴とする。
【０００８】
また、本発明のプログラム管理システムにおいて、前記管理装置はさらに、前記プログラムを生成して前記端末装置へ送信するプログラム生成手段と、前記共通鍵および前記第１の署名処理の少なくともいずれかを前記プログラムに埋め込む位置を制御する埋め込み位置制御手段とを備えたことを特徴とする。
【０００９】
また、本発明のプログラム管理システムにおいて、前記管理装置はさらに、前記共通鍵の識別情報と前記共通鍵の有効期限が関連付けられた有効期限情報を記憶する第２の記憶手段と、前記第２の記憶手段から前記有効期限情報を読み出し、前記有効期限情報に基づいて前記共通鍵が有効であるか否かを判定する判定手段とを備えたことを特徴とする。
【００１０】
また、本発明のプログラム管理システムにおいて、前記プログラムが複数の部分プログラムの集合体であり、各々の前記部分プログラムには、他の前記部分プログラムの実行中のプロセス状態を確認する状態確認処理が埋め込まれていることを特徴とする。
【００１１】
また、本発明は、共通鍵と署名検証処理と第１の署名処理とが埋め込まれていると共に、第１の署名情報が付加されているプログラムの改竄の有無を検証すると共に前記プログラムを認証する管理装置と通信する端末装置であって、前記プログラムを記憶する記憶手段と、前記記憶手段から前記プログラムを読み出し、前記プログラムに従った処理を実行するプログラム実行手段とを備え、前記署名検証処理は、前記第１の署名情報を検証し、検証結果情報を前記管理装置へ送信する処理であり、前記第１の署名処理は、前記管理装置から検証用情報を受信し、前記検証用情報を前記共通鍵で暗号化して第２の署名情報を生成し、前記第２の署名情報を前記管理装置へ送信する処理であることを特徴とする端末装置である。
【００１２】
また、本発明の端末装置において、前記プログラムに従った処理の実行により生成される実行結果情報に対する第３の署名情報を生成し、前記実行結果情報と共に前記管理装置へ送信する第２の署名処理が前記プログラムに埋め込まれていることを特徴とする。
【００１３】
また、本発明の端末装置において、前記プログラムが複数の部分プログラムの集合体であり、各々の前記部分プログラムには、他の前記部分プログラムの実行時のプロセス状態を確認する状態確認処理が埋め込まれていることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、プログラムに埋め込まれている署名検証処理を実行し、プログラムに付加されている第１の署名情報を検証することによって、記憶手段に格納されているプログラムの改竄の有無を検証することができるという効果が得られる。また、第２の署名情報を復号化して得た検証用情報を検証することによって、プログラムの認証を行うことができるという効果が得られる。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照し、本発明の実施形態を説明する。図１は、本発明の一実施形態によるプログラム管理システムの構成を示している。本プログラム管理システムは、信頼性のある管理局１（本発明の管理装置に対応）と、安全性の不明な端末２（本発明の端末装置に対応）とから構成されている。管理局１と端末２は、図示せぬ通信ネットワーク（有線あるいは無線のＬＡＮ（Local Area Network）等の小ネットワーク、および小ネットワークどうしを結ぶ基幹ネットワークの集合体としてのネットワーク）を介して通信を行う。
【００１６】
端末２は、携帯電話、ＰＨＳ（Personal Handyphone System）、ＰＤＡ（Personal Digital Assistance）等の端末であり、図１では１台のみが図示されているが、当然、複数台が存在していてもよい。また、管理局１および端末２の構成に関して、図１では本実施形態で必須となる構成のみが示されており、管理局１および端末２が、図１に示される構成以外の構成を備えていても構わない。
【００１７】
管理局１において、HDD（Hard Disk Drive）１０には、端末２がダウンロードするプログラムであるダウンロードソフトウェアや、管理局１の動作用のソフトウェア、管理局１の公開鍵および秘密鍵、端末２と共有する共通鍵が格納される。CPU（Central Processing Unit）１１（本発明の管理装置が備える各手段に対応）は、管理局１が起動されるとHDD１０から動作用ソフトウェアを読み出し、メモリ１２上にロードして、動作用ソフトウェアに従った処理を実行する。通信制御部１３は、例えばネットワークインタフェースカード内に設けられており、端末２との通信を制御する。端末２も管理局１と同様に、HDD２０（本発明の記憶手段に対応）、CPU２１（本発明のプログラム実行手段に対応）、メモリ２２、および通信制御部２３を備えている。
【００１８】
本プログラム管理システムの動作を説明する。本プログラム管理システムの動作によって、端末２がダウンロードするダウンロードソフトウェアの完全性の検証（改竄の有無の検証）が可能となると共に、ダウンロードソフトウェアの認証が可能となる。特に、ダウンロードソフトウェアの完全性の検証に関しては、HDD２０に格納されたダウンロードソフトウェアの完全性の検証と、メモリ２２上にロードされた起動中のダウンロードソフトウェアの出力結果の完全性の検証とが可能となる。
【００１９】
本実施形態におけるダウンロードソフトウェアは、例えばネットショッピング等で発生した料金を端末２のユーザに請求するのに必要な情報を収集して管理局１に通知するソフトウェアである。正常な料金請求を行うため、ダウンロードソフトウェアの完全性の検証とダウンロードソフトウェアの出力結果の検証が必要となる。
【００２０】
次に、図１および図２を参照しながら本プログラム管理システムの動作を説明する。管理局１のCPU１１は、ダウンロードソフトウェアを生成する際に、共通鍵を生成し（ステップＳ１０）、ダウンロードソフトウェアに対して共通鍵と各種処理を埋め込む（ステップＳ２０）。各種処理とは、起動通知と署名処理（本発明の第１の署名処理に対応）、自己署名検証処理（本発明の署名検証処理に対応）、結果署名と通知処理（本発明の第２の署名処理に対応）であり、各処理の詳細は後述する。
【００２１】
続いて、CPU１１は、生成したダウンロードソフトウェアのハッシュ値を算出し、HDD１０から読み出した管理局１の秘密鍵でハッシュ値を暗号化することによって電子署名を生成し（ステップＳ３０）、その電子署名を自己署名（本発明の第１の署名情報に対応）として付加したダウンロードソフトウェアをHDD１０に格納する。
【００２２】
端末２からの要求に応じて、管理局１はダウンロードソフトウェアを端末２へ送信する。このとき、管理局１のCPU１１はHDD１０からダウンロードソフトウェアを読み出し、メモリ１２に一時的に格納しながら、通信制御部１３へダウンロードソフトウェアを出力する。通信制御部１３は、通信ネットワークを介してダウンロードソフトウェアを端末２へ送信する（ステップＳ４０）。
【００２３】
端末２の通信制御部２３はダウンロードソフトウェアを受信し、CPU２１へ出力する。CPU２１は、ダウンロードソフトウェアをメモリ２２に一時的に格納しながら、受信された全てのダウンロードソフトウェアを最終的にHDD２０に格納する（ステップＳ５０）。
【００２４】
続いて、ユーザまたは起動中の他のソフトウェアからの指示を受け、CPU２１はHDD２０からダウンロードソフトウェアを読み出してメモリ２２上にロードする（ステップＳ６０）。これによって、ダウンロードソフトウェアが起動され、CPU２１は、ダウンロードソフトウェアに従った処理を実行する。
【００２５】
まず、CPU２１は、ダウンロードソフトウェアに埋め込まれている自己署名検証処理を実行する。この自己署名検証処理は、HDD２０に格納されたダウンロードソフトウェアの完全性の検証に必要な処理である。CPU２１はHDD２０からダウンロードソフトウェアを読み出し、そのダウンロードソフトウェアに付加されている自己署名を検証する。すなわち、CPU２１は、HDD２０に予め格納されている管理局１の公開鍵を読み出し、その公開鍵で自己署名を復号化してハッシュ値を取得すると共に、ダウンロードソフトウェアのハッシュ値を算出し、２つのハッシュ値を比較することにより、自己署名の検証を行う（ステップＳ７０）。
【００２６】
本実施形態では、２つのハッシュ値が一致した場合には、ダウンロードソフトウェアが改竄されていないとみなされ、２つのハッシュ値が一致しなかった場合には、ダウンロードソフトウェアが改竄されているとみなされる。ダウンロードソフトウェアの完全性を確認できた場合には、以下で説明するように、その旨が管理局１に通知される。また、ダウンロードソフトウェアの完全性を確認できなかった場合には、例えばその旨が管理局１に通知される、あるいはダウンロードソフトウェアの起動が中止される。
【００２７】
続いて、CPU２１は、ダウンロードソフトウェアに埋め込まれている起動通知と署名処理を行う。この起動通知と署名処理は、ダウンロードソフトウェアの完全性を管理局１に通知し、管理局１による認証を受けるのに必要な処理である。CPU２１はダウンロードソフトウェアの完全性を示す起動通知を生成し、通信制御部２３へ出力する。通信制御部２３は、通信ネットワークを介して起動通知を管理局１へ送信する（ステップＳ８０）。
【００２８】
管理局１の通信制御部１３は起動通知を受信し、CPU１１へ出力する。CPU１１は、起動通知に基づいて、ダウンロードソフトウェアの認証処理を開始する。すなわち、CPU１１は乱数（本発明の検証用情報に対応）を生成し、通信制御部１３へ出力する。通信制御部１３は、通信ネットワークを介して乱数を端末２へ送信する（ステップＳ９０）。
【００２９】
端末２の通信制御部２３は乱数を受信し、CPU２１へ出力する。CPU２１は、ダウンロードソフトウェアに埋め込まれている共通鍵を取り出し、共通鍵で乱数を暗号化することにより署名情報（本発明の第２の署名情報に対応）を生成し、通信制御部２３へ出力する。通信制御部２３は、通信ネットワークを介して署名情報を管理局１へ送信する（ステップＳ１００）。
【００３０】
管理局１の通信制御部１３は署名情報を受信し、CPU１１へ出力する。CPU１１は共通鍵で署名情報を復号化して乱数を取得し、端末２へ送信した乱数と比較することにより、署名の検証を行う。本実施形態では、２つの乱数が一致した場合には、端末２が使用した共通鍵が管理局１の所持する共通鍵と同一であることが保証され、端末２で起動しているダウンロードソフトウェアが、管理局１で生成されたダウンロードソフトウェアである（認証成功）とみなされる。一方、２つの乱数が一致しなかった場合には、端末２で起動しているダウンロードソフトウェアが、管理局１で生成されたダウンロードソフトウェアではない（認証失敗）とみなされる。また、ダウンロードソフトウェアの認証に失敗した場合には、例えばその後に端末２から送信されてくるダウンロードソフトウェアの出力結果を信頼できないと判断される。
【００３１】
CPU２１は、ダウンロードソフトウェアに従って処理を実行した結果をHDD２０に格納する際には、ダウンロードソフトウェアに埋め込まれている結果署名と通知処理を行う。この結果署名と通知処理は、メモリ２２上にロードされた起動中のダウンロードソフトウェアの出力結果の完全性の検証に必要な処理である。CPU２１は、ダウンロードソフトウェアの出力結果（本発明の実行結果情報に対応）を生成した際に、出力結果のハッシュ値を算出し、ダウンロードソフトウェアに埋め込まれている共通鍵でハッシュ値を暗号化することによって署名情報（本発明の第３の署名情報に対応）を生成し、その署名情報を結果署名として付加した出力結果をHDD２０に格納する（ステップＳ１１０）。
【００３２】
続いて、CPU２１は、結果署名の付加された出力結果を通信制御部２３へ出力する。通信制御部２３は、通信ネットワークを介して出力結果を管理局１へ送信する（ステップＳ１２０）。管理局１の通信制御部１３は出力結果を受信し、CPU１１へ出力する。CPU１１は共通鍵で結果署名を復号化してハッシュ値を取得すると共に、出力結果のハッシュ値を算出し、２つのハッシュ値を比較することにより、結果署名の検証を行う（ステップＳ１３０）。本実施形態では、２つのハッシュ値が一致した場合には、ダウンロードソフトウェアの出力結果が改竄されていないとみなされ、２つのハッシュ値が一致しなかった場合には、ダウンロードソフトウェアの出力結果が改竄されているとみなされる。
【００３３】
上記の処理によれば、ダウンロードソフトウェアに埋め込まれている自己署名検証処理を端末２が実行し、ダウンロードソフトウェアに付加されている自己署名を検証することによって、HDD２０に格納されたダウンロードソフトウェアの改竄の有無を検証することができる。TPMでは、OSやアプリケーションが更新される場合には、それらの完全性を保証することができないが、本実施形態によれば、ダウンロードソフトウェアに埋め込まれている自己署名検証処理の実行により、ダウンロードソフトウェアの完全性が保証される。
【００３４】
また、端末２から受信した署名情報（管理局１から受信した乱数を端末２が共通鍵で暗号化したもの）を復号化して得た乱数を管理局１が検証することによって、ダウンロードソフトウェアの認証を行うことができる。さらに、端末２から受信した結果署名（ダウンロードソフトウェアの出力結果に対する端末２の署名）を管理局１が検証することによって、ダウンロードソフトウェアの出力結果の改竄の有無を行うことができる。
【００３５】
上記において、本プログラム管理システムの基本的な機能および動作を説明したが、以下のような変形も可能である。まず、共通鍵の管理方法を説明する。ダウンロードソフトウェアに埋め込まれる共通鍵を複数のダウンロードソフトウェアで共通にしてもよいが、ダウンロードソフトウェア毎に異なる共通鍵を埋め込むことが望ましい。その場合には、管理局１は、共通鍵毎に異なる共通鍵IDを付与し、各共通鍵IDを管理する。
【００３６】
具体的には、以下のようにして共通鍵IDが管理される。管理局１のHDD１０には、共通鍵とその共通鍵IDとが関連付けられた共通鍵情報が格納される。これにより、図２のステップＳ８０〜Ｓ１００に対応した処理は以下のようになる（図３参照）。前述した動作と同様にして、管理局１は端末２へ乱数を送信する（ステップＳ２１０）。端末２はこの乱数を受信する。
【００３７】
端末２のCPU２１は、ダウンロードソフトウェアに埋め込まれている共通鍵で乱数を暗号化することにより署名情報を生成する。署名情報は共通鍵IDと共に管理局１へ送信される（ステップＳ２２０）。管理局１は署名情報と共通鍵IDを受信する。管理局１のCPU１１は、署名情報に付加されている共通鍵IDに対応する共通鍵をHDD１０から読み出し、その共通鍵で署名情報を復号化して乱数を取得し（ステップＳ２３０）、端末２へ送信した乱数と比較することにより、署名の検証を行う（ステップＳ２４０）。ダウンロードソフトウェアの出力結果に付加される結果署名の検証の際にも端末２から管理局１に共通鍵IDが通知され、その共通鍵IDに対応した共通鍵が結果署名の復号化に使用される。
【００３８】
管理局１が上記のように共通鍵と共通鍵IDの対応関係だけでなく、ダウンロードソフトウェアのダウンロード先の端末と共通鍵の対応関係も管理するようにしてもよい。図４はこの様子を示している。管理局１のHDD１０には、端末IDと共通鍵IDが関連付けられたダウンロードソフトウェア管理リスト４００が格納される。この場合には、上述したステップＳ２２０で端末２が管理局１へ共通鍵IDを送信しなくてもよい。
【００３９】
端末２によるダウンロード毎に同じ共通鍵を使用した場合、端末２側でダウンロードソフトウェアから共通鍵が取り出されて、偽のソフトウェアに組み込まれる可能性がある。また、毎回ソフトウェアの同じ位置に共通鍵と署名処理（前述した起動通知と署名処理）を埋め込んだ場合にも、悪意のユーザに共通鍵を抜き出される可能性がある。
【００４０】
そこで、共通鍵にワンタイム性を持たせるために、共通鍵を頻繁に更新する機能と、共通鍵と署名処理のソフトウェアへの埋め込み位置を変化させる機能を管理局１は有している。共通鍵の更新に関して、管理局１は共通鍵の有効期限を管理する。管理局１のHDD１０には、共通鍵IDと有効期限が関連付けられた有効期限リスト（図５参照）（本発明の有効期限情報に対応）が格納されている。
【００４１】
端末２は、管理局１から受信した乱数を共通鍵で暗号化した署名情報と共通鍵IDを管理局１へ送信する。管理局１のCPU１１は、HDD１０に格納されている有効期限リストを読み出し、受信された共通鍵IDに基づいて、有効期限リストから、該当する共通鍵の有効期限を検索する。CPU１１は署名情報の検証と共通鍵の有効期限の確認（共通鍵が有効であるか否かの判定）を行った結果に基づいて、ダウンロードソフトウェアの認証を行う。このとき、例えば共通鍵の有効期限が切れていた場合には、ダウンロードソフトウェアの認証に失敗したと判断される。
【００４２】
また、端末２は、ダウンロードソフトウェアの出力結果のハッシュ値を共通鍵で暗号化した署名情報と共通鍵IDを管理局１へ送信する。管理局１のCPU１１は、上記と同様にして、署名情報の検証と共通鍵の有効期限の確認（共通鍵が有効であるか否かの判定）を行った結果に基づいて、出力結果の検証を行う。このとき、例えば共通鍵の有効期限が切れていた場合には、出力結果の検証に失敗したと判断される。
【００４３】
共通鍵と署名処理のソフトウェアへの埋め込み位置に関して、管理局１のCPU１１は、ダウンロードソフトウェアを生成する毎に、共通鍵と署名処理の少なくともいずれかをダウンロードソフトウェアに埋め込む位置を制御する機能を有する。一般にソフトウェアは、複数の機能がサブルーチン毎の小さな単位に分けられており、CPU１１はランダムにサブルーチンの間の位置を選択し、その位置に共通鍵と署名処理を埋め込む。
【００４４】
これにより、同じダウンロードソフトウェアであっても、ダウンロード毎に共通鍵と署名処理の埋め込み位置がランダムに変化する。共通鍵と署名処理を１つの機能にまとめてもよいし、それぞれ分離してもよい。上記のように共通鍵と署名処理の埋め込み位置を変化させることによって、ダウンロードソフトウェアに埋め込まれた共通鍵を悪意のユーザが取り出して使用することがより困難になる。
【００４５】
管理局１のCPU１１は以下のようにしてダウンロードソフトウェアを生成する（図６参照）。HDD１０には、ダウンロードソフトウェアのソース（ソースファイル）について、本来の機能のソースがサブルーチン単位で格納されている。また、本実施形態で提供される各種の付加機能（完全性検証や認証等に必要な機能）のソースについても、サブルーチン単位でHDD１０に格納されている。
【００４６】
CPU１１は、ダウンロードソフトウェアを生成する際に、本来の機能のサブルーチン、付加機能のサブルーチン、および共通鍵の配置位置を決定してダウンロードソフトウェアのソースを構成し、ソースファイル６００を生成する。CPU１１は、コンパイラの機能に従って、ソースファイル６００から実行ファイル６０１を生成する。CPU１１は実行ファイル６０１のハッシュ値を算出し、そのハッシュ値を管理局１の秘密鍵で暗号化することによって電子署名（自己署名６０３）を生成し、実行ファイル６０１に添付する。
【００４７】
次に、ダウンロードソフトウェアの攻撃耐性を高める方法を説明する。起動されたソフトウェアが、起動後に他のプロセスに入れ替えられる攻撃や、バッファオーバフロー攻撃により改竄される可能性がある。そこで、１つのダウンロードソフトウェアを複数の部分ソフトウェア（本発明の部分プログラムに対応）に分割し、各部分ソフトウェアが相互に実行中のプロセス状態をシステムコール等で確認するようにする。
【００４８】
ダウンロードソフトウェアは複数の部分ソフトウェアの集合体であり、各々の部分ソフトウェアには、他の部分ソフトウェアの実行中のプロセス状態を確認する状態確認処理が埋め込まれている。図７に示される例では、機能Ａの部分ソフトウェアであるダウンロードソフトウェアモジュール７００と、機能Ｂの部分ソフトウェアであるダウンロードソフトウェアモジュール７０１が端末２のHDD２０に格納されている。
【００４９】
機能Ａのダウンロードソフトウェアモジュール７００には、機能Ｂのダウンロードソフトウェアモジュール７０１のプロセス状態を確認する状態確認処理７０２が埋め込まれている。また、機能Ｂのダウンロードソフトウェアモジュール７０１には、機能Ａのダウンロードソフトウェアモジュール７００のプロセス状態を確認する状態確認処理７０３が埋め込まれている。
【００５０】
端末２のCPU２１は、HDD２０からダウンロードソフトウェアモジュール７００と７０１を読み出してメモリ２２上にロードする。これによって、ダウンロードソフトウェアが起動され、CPU２１は、ダウンロードソフトウェアに従った処理を実行する。プロセスの実行中において、状態確認処理７０２により、機能Ｂのダウンロードソフトウェアモジュール７０１のプロセスIDの変更や異常なプロセス時間の増加の有無が確認される。また、状態確認処理７０３により、機能Ａのダウンロードソフトウェアモジュール７００のプロセスIDの変更や異常なプロセス時間の増加の有無が確認される。
【００５１】
ダウンロードソフトウェアが複数の部分ソフトウェアの集合体として構成されていない場合には、攻撃を受けてダウンロードソフトウェアが動作を停止してしまうと、管理局１は端末２の異常を検知することができない。これに対して、ダウンロードソフトウェアが複数の部分ソフトウェアの集合体として構成されている場合には、例えば攻撃により機能Ａのダウンロードソフトウェアモジュール７００が動作を停止してしまっても、動作中のダウンロードソフトウェアモジュール７０１の状態確認処理７０３により、ダウンロードソフトウェアモジュール７００の異常が検出される。
【００５２】
各状態確認処理の中に管理局１への異常通知処理を組み込んでおけば、いずれかの部分ソフトウェアの異常が検出された場合に、管理局１にその旨が通知される。これによって、管理局１が端末２の異常を検出することができる。
【００５３】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【図面の簡単な説明】
【００５４】
【図１】本発明の一実施形態によるプログラム管理システムの構成を示すブロック図である。
【図２】本発明の一実施形態によるプログラム管理システムの動作の手順を示すシーケンス図である。
【図３】本発明の一実施形態における共通鍵の管理方法を説明するためのシーケンス図である。
【図４】本発明の一実施形態における共通鍵の管理方法を説明するための説明図である。
【図５】本発明の一実施形態における有効期限管理リストの内容を示す参考図である。
【図６】本発明の一実施形態におけるダウンロードソフトウェアの生成方法を説明するための説明図である。
【図７】本発明の一実施形態におけるダウンロードソフトウェアの攻撃耐性を高める方法を説明するための説明図である。
【符号の説明】
【００５５】
１・・・管理局、２・・・端末、１０，２０・・・HDD、１１，２１・・・CPU、１２，２２・・・メモリ、１３，２３・・・通信制御部
【図１】
0004818824.tif 000002
【図２】
0004818824.tif 000003
【図３】
0004818824.tif 000004
【図４】
0004818824.tif 000005
【図５】
0004818824.tif 000006
【図６】
0004818824.tif 000007
【図７】
0004818824.tif 000008