図面 (/)

技術 プログラム実行装置及びプログラム実行方法

出願人 株式会社NTTドコモ
発明者 行友英記金野晃中山雄大鈴木敬
出願日 2004年8月12日 (16年4ヶ月経過) 出願番号 2004-235430
公開日 2006年2月23日 (14年10ヶ月経過) 公開番号 2006-053787
状態 特許登録済
技術分野 ストアードプログラムにおける機密保護 デバッグ/監視 ストアードプログラム制御
主要キーワード プログラム命令列 C言語 引数領域 プログラム装置 呼び出し元プログラム ベースポインタ 特権プログラム 呼び出し検出
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2006年2月23日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

効率良くプログラム改ざんを検知することができるプログラム実行装置を提供する。

解決手段

プログラム実行装置11は、実行するプログラムを、プログラムの命令列によって分割した単位であるページ毎に蓄積する1次記憶手段13と、実行中のプログラムが特権プログラムの機能を呼び出したことを検出する特権プログラム機能呼び出し検出手段16と、特権プログラム機能呼び出し検出手段16により検出が行われた場合、1次記憶手段13に蓄積されている実行中のページの改ざんの有無を検証するメッセージダイジェスト検証手段15とを備える。

概要

背景

ユーザがネットワークを経由してダウンロードしたプログラムを実行する場合、プログラムを実行する装置やその装置の利用者危害を及ぼす可能性がないことを確認する必要がある。ここで、「危害」とは、許可されていない装置内の個人情報をプログラムが不正に閲覧したり、その情報をプログラムの実行装置外に送出したり、装置自体を停止させてしまったりすることである。

従来、このような危害が及ぶことがないように、図25に示すようなプログラムの安全性を検証する方法が開示されている(例えば、特許文献1参照)。図25において、プログラム作成システム301は、プログラム302及びプログラムの実行に必要なリソース権限を列挙したアクセス制御リスト(以下、「ACL」という。)303を作成する。次に、プログラム作成システム301は、これらをプログラム作成者プログラム実行者双方が信頼する認証機関304へ送付し、証明機関304は、プログラム、ACLそれぞれに署名を施し、プログラム作成システム301へ返送する。プログラム作成システム301は、このように作成したプログラム、ACL及びそれぞれの署名をサーバ305に蓄積する。

プログラム実行装置306は、サーバ305より、プログラム307、ACL308及びそれぞれの署名をダウンロードする。そして、プログラムの実行を開始する際、検証手段309は、プログラムの署名が信頼する証明機関によるものであるか否か検証する。この署名の検証は、公開鍵暗号等の技術を用い、予め証明機関304の公開鍵入手しておくことで容易に可能である(例えば、非特許文献1参照)。署名検証により、プログラムに施された署名が証明機関304のものであると判断できれば、プログラム実行装置306はプログラム307を実行し、そうでなければ実行を拒絶することで、安全性を確保する。

しかし、プログラムに信頼する証明機関による署名が施されていても、バッファオーバーフローのような脆弱性がプログラムに存在した場合、悪意あるデータがプログラムに入力されれば、データ入力者がプログラム実行装置に任意の動作を行わせることが可能な場合あり、危険である(例えば、非特許文献2参照)。

具体的には、特許文献1において示される方法で署名を施されたプログラムをサーバ(プログラム実行装置)上で実行し、インターネットを介した顧客からの入力データに応じて、商品販売するサービスを提供する場合を想定する。非特許文献2に示すような脆弱性がプログラムに存在した場合、本来商品の名前が入力として期待されるデータに、非特許文献2が示すような巧妙に仕組まれたプログラムを挿入することで、悪意のある顧客は動作中のプログラムを改ざんし、サーバ上にある他の顧客の個人情報を盗むことが可能となる場合がある。

この問題を解決する方法として、プログラムの実行を一旦開始した後も、動的にプログラムが改ざんされているか否か検証を行い、改ざんが検出されれば、その段階で実行を停止する方法が開示されている(例えば、非特許文献3参照)。

プログラム全体が改ざんされているか否かを検証するには時間を要するため、非特許文献3では、プログラム全体ではなく、プログラムの命令列を分割し、その分割単位(以下、「ページ」という。)が2次記憶手段から1次記憶手段へ複製される度に、各ページが改ざんされているか否かを検証する。

より詳細に説明すると、図26に示すように、一般にパーソナルコンピュータワークステーション等のプログラム実行装置111は、高価であるが高速に読み書き可能な小容量の1次記憶手段113と、安価で低速な大容量の2次記憶手段114とを有し、これらに記憶されたデータに対し、計算手段112を用いて演算を繰り返すことでプログラムを実行する。そのため、実行していないプログラムは2次記憶手段114に蓄積しておき、プログラムを実行する際に1次記憶手段113に複製し、この上でプログラムを実行する。

1次記憶装置手段113の容量は、一般に小さいため、この複製の管理単位はプログラム全体ではなく、プログラムの命令列を分割したページ単位で行う。図26に示す例では、実行しようとするプログラムAはページ1〜4の4ページ、1次記憶手段113のページ格納領域は3つあるものとする。

又、プログラムAの各ページについては、メッセージダイジェストが予め計算されているものとする。各ページは、プログラムの一部、即ち計算手段112の命令列であることから、バイト列みなすことができ、各ページのメッセージダイジェストは、SHA−1やRSAといった一般的な一方向性関数により作成される(例えば、非特許文献1参照)。

各プログラムのページのメッセージダイジェスト114a、114b、114c、114dは、2次記憶手段114に蓄積されており、プログラムAを実行する際に2次記憶手段114からメッセージダイジェスト蓄積手段117へ複製する。メッセージダイジェスト蓄積手段117は、実行中のプログラムからは読み書きできない記憶手段とする。

プログラム実行装置111は、メッセージダイジェストを複製した後、プログラムAを実行するが、実行順序は図27に示すように時刻t、t+1、t+2、t+3、t+4、t+5にはそれぞれページ1、ページ2、ページ3、ページ1、ページ2、ページ4の順で進み、以後ページ1に戻って繰り返すこととし、図27ではt+8までの様子を記述している。

プログラム実行装置111は、計算手段112を用いて、必要に応じて2次記憶手段114からプログラムAのページを1次記憶手段113へ複製しつつ、プログラムAの実行を進めるが、1次記憶装置113のページ格納領域は限られているので、空きがなくなると古いものから順に上書きされる。時刻t、t+1、t+2、t+3、t+4、t+5の一次記憶手段113の内容は、図27に示すとおりである。

非特許文献2に開示する方法は、2次記憶手段114から1次記憶手段113にプログラムAのページを複製するタイミングにおいて、各ページが改ざんされているか否か、プログラムページのメッセージダイジェストを用いて検証する方法である。図27の例では、時刻tにページ1、時刻t+1にページ2、時刻t+2及び時刻t+8にページ3、時刻t+5にページ4が改ざんされているか否か検証を行う。

改ざんされているか否かの検証は、メッセージダイジェスト検証手段115が、1次記憶手段113に蓄積されるプログラムのページについて再度メッセージダイジェストを計算し、これがメッセージダイジェスト蓄積手段117に蓄積されているメッセージダイジェストと一致するか否かにより行う。一致していれば改ざんはなかったと判定し、不一致の場合は、プログラムが改ざんされたと判断する。

又、当該プログラム実行装置111において実行される他のプログラムが改ざんされ、そのプログラムにより2次記憶手段114に蓄積されたプログラムAのページが改ざんされたとしても、各ページのメッセージダイジェストが安全なメッセージダイジェスト蓄積手段117に複製されていることから、改ざんを検出することが可能となる。
特開平10−83310号公報
Applied Cryptgraphy, second edition, Bruce Schneier, 1996, John Wiley&Sons, ISBN 0-71-11709-9
”A Comparison of Public available Tools for Dynamic Buffer Overflow Prevention”, John Wilander and Marian Kamkar, NDSS2003
”A virtual Machine Introspection Based Architecture for intrusion detection”, Tal Garfinkel, Mendel Rosenblum, NDSS 2003

概要

効率良くプログラムの改ざんを検知することができるプログラム実行装置を提供する。プログラム実行装置11は、実行するプログラムを、プログラムの命令列によって分割した単位であるページ毎に蓄積する1次記憶手段13と、実行中のプログラムが特権プログラムの機能を呼び出したことを検出する特権プログラム機能呼び出し検出手段16と、特権プログラム機能呼び出し検出手段16により検出が行われた場合、1次記憶手段13に蓄積されている実行中のページの改ざんの有無を検証するメッセージダイジェスト検証手段15とを備える。

目的

そこで、本発明は、上記の課題に鑑み、効率良くプログラムの改ざんを検知することができるプログラム実行装置及びプログラム実行方法を提供することを目的とする。

効果

実績

技術文献被引用数
6件
牽制数
1件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

実行するプログラムを、プログラムの命令列によって分割した単位であるページ毎に蓄積する1次記憶手段と、実行中の前記プログラムが特権プログラムの機能を呼び出したことを検出する特権プログラム機能呼び出し検出手段と、前記特権プログラム機能呼び出し検出手段により検出が行われた場合、前記1次記憶手段に蓄積されている実行中のページの改ざんの有無を検証する検証手段とを備えることを特徴とするプログラム実行装置

請求項2

前記プログラムの実行前に、前記ページ毎のメッセージダイジェストを予め蓄積するメッセージダイジェスト蓄積手段を更に備え、前記検証手段は、前記1次記憶手段に蓄積されたページのメッセージダイジェストを計算し、前記メッセージダイジェスト蓄積手段に蓄積されたメッセージダイジェストと比較することにより、改ざんの有無を検証することを特徴とする請求項1に記載のプログラム実行装置。

請求項3

前記プログラムの実行が開始されてから所定の時間間隔で、時間の経過を通知するタイマ手段を更に備え、前記検証手段は、前記タイマ手段から通知があった場合、前記1次記憶手段に蓄積されている実行中のページの改ざんの有無を検証することを特徴とする請求項1又は2に記載のプログラム実行装置。

請求項4

前記プログラムが実行されたときの関数呼び出し履歴を蓄積する関数呼び出し履歴蓄積手段とを更に備え、前記検証手段は、前記関数呼び出し履歴蓄積手段に蓄積されているページの改ざんの有無を検証することを特徴とする請求項1〜3のいずれか1項に記載のプログラム実行装置。

請求項5

前記検証手段は、予め定められた時間内に既に検証を行ったページについては、改ざんの有無を検証しないことを特徴とする請求項1〜4のいずれか1項に記載のプログラム実行装置。

請求項6

前記1次記憶手段は、前記ページ毎にフラグを有し、前記認証手段は、前記フラグの値に応じて、ページの改ざんの有無を検証することを特徴とする請求項1〜5のいずれか1項に記載のプログラム実行装置。

請求項7

前記プログラム単体負荷、あるいはプログラム実行装置全体の負荷を計測する負荷計測手段を更に備え、前記検証手段は、前記負荷計測手段によって計測された負荷が高い場合、プログラム実行中は検証すべきプログラムのページを記録し、前記負荷計測手段によって計測された負荷が低くなったときに、ページの改ざんの有無を検証することを特徴とする請求項1〜6のいずれか1項に記載のプログラム実行装置。

請求項8

実行するプログラムを、プログラムの命令列によって分割した単位であるページ毎に蓄積するステップと、実行中の前記プログラムが特権プログラムの機能を呼び出したことを検出するステップと、前記検出するステップにより検出が行われた場合、前記蓄積されている実行中のページの改ざんの有無を検証するステップとを含むことを特徴とするプログラム実行方法

技術分野

0001

本発明は、プログラム実行装置及びプログラム実行方法に関する。

背景技術

0002

ユーザがネットワークを経由してダウンロードしたプログラムを実行する場合、プログラムを実行する装置やその装置の利用者危害を及ぼす可能性がないことを確認する必要がある。ここで、「危害」とは、許可されていない装置内の個人情報をプログラムが不正に閲覧したり、その情報をプログラムの実行装置外に送出したり、装置自体を停止させてしまったりすることである。

0003

従来、このような危害が及ぶことがないように、図25に示すようなプログラムの安全性を検証する方法が開示されている(例えば、特許文献1参照)。図25において、プログラム作成システム301は、プログラム302及びプログラムの実行に必要なリソース権限を列挙したアクセス制御リスト(以下、「ACL」という。)303を作成する。次に、プログラム作成システム301は、これらをプログラム作成者プログラム実行者双方が信頼する認証機関304へ送付し、証明機関304は、プログラム、ACLそれぞれに署名を施し、プログラム作成システム301へ返送する。プログラム作成システム301は、このように作成したプログラム、ACL及びそれぞれの署名をサーバ305に蓄積する。

0004

プログラム実行装置306は、サーバ305より、プログラム307、ACL308及びそれぞれの署名をダウンロードする。そして、プログラムの実行を開始する際、検証手段309は、プログラムの署名が信頼する証明機関によるものであるか否か検証する。この署名の検証は、公開鍵暗号等の技術を用い、予め証明機関304の公開鍵入手しておくことで容易に可能である(例えば、非特許文献1参照)。署名検証により、プログラムに施された署名が証明機関304のものであると判断できれば、プログラム実行装置306はプログラム307を実行し、そうでなければ実行を拒絶することで、安全性を確保する。

0005

しかし、プログラムに信頼する証明機関による署名が施されていても、バッファオーバーフローのような脆弱性がプログラムに存在した場合、悪意あるデータがプログラムに入力されれば、データ入力者がプログラム実行装置に任意の動作を行わせることが可能な場合あり、危険である(例えば、非特許文献2参照)。

0006

具体的には、特許文献1において示される方法で署名を施されたプログラムをサーバ(プログラム実行装置)上で実行し、インターネットを介した顧客からの入力データに応じて、商品販売するサービスを提供する場合を想定する。非特許文献2に示すような脆弱性がプログラムに存在した場合、本来商品の名前が入力として期待されるデータに、非特許文献2が示すような巧妙に仕組まれたプログラムを挿入することで、悪意のある顧客は動作中のプログラムを改ざんし、サーバ上にある他の顧客の個人情報を盗むことが可能となる場合がある。

0007

この問題を解決する方法として、プログラムの実行を一旦開始した後も、動的にプログラムが改ざんされているか否か検証を行い、改ざんが検出されれば、その段階で実行を停止する方法が開示されている(例えば、非特許文献3参照)。

0008

プログラム全体が改ざんされているか否かを検証するには時間を要するため、非特許文献3では、プログラム全体ではなく、プログラムの命令列を分割し、その分割単位(以下、「ページ」という。)が2次記憶手段から1次記憶手段へ複製される度に、各ページが改ざんされているか否かを検証する。

0009

より詳細に説明すると、図26に示すように、一般にパーソナルコンピュータワークステーション等のプログラム実行装置111は、高価であるが高速に読み書き可能な小容量の1次記憶手段113と、安価で低速な大容量の2次記憶手段114とを有し、これらに記憶されたデータに対し、計算手段112を用いて演算を繰り返すことでプログラムを実行する。そのため、実行していないプログラムは2次記憶手段114に蓄積しておき、プログラムを実行する際に1次記憶手段113に複製し、この上でプログラムを実行する。

0010

1次記憶装置手段113の容量は、一般に小さいため、この複製の管理単位はプログラム全体ではなく、プログラムの命令列を分割したページ単位で行う。図26に示す例では、実行しようとするプログラムAはページ1〜4の4ページ、1次記憶手段113のページ格納領域は3つあるものとする。

0011

又、プログラムAの各ページについては、メッセージダイジェストが予め計算されているものとする。各ページは、プログラムの一部、即ち計算手段112の命令列であることから、バイト列みなすことができ、各ページのメッセージダイジェストは、SHA−1やRSAといった一般的な一方向性関数により作成される(例えば、非特許文献1参照)。

0012

各プログラムのページのメッセージダイジェスト114a、114b、114c、114dは、2次記憶手段114に蓄積されており、プログラムAを実行する際に2次記憶手段114からメッセージダイジェスト蓄積手段117へ複製する。メッセージダイジェスト蓄積手段117は、実行中のプログラムからは読み書きできない記憶手段とする。

0013

プログラム実行装置111は、メッセージダイジェストを複製した後、プログラムAを実行するが、実行順序図27に示すように時刻t、t+1、t+2、t+3、t+4、t+5にはそれぞれページ1、ページ2、ページ3、ページ1、ページ2、ページ4の順で進み、以後ページ1に戻って繰り返すこととし、図27ではt+8までの様子を記述している。

0014

プログラム実行装置111は、計算手段112を用いて、必要に応じて2次記憶手段114からプログラムAのページを1次記憶手段113へ複製しつつ、プログラムAの実行を進めるが、1次記憶装置113のページ格納領域は限られているので、空きがなくなると古いものから順に上書きされる。時刻t、t+1、t+2、t+3、t+4、t+5の一次記憶手段113の内容は、図27に示すとおりである。

0015

非特許文献2に開示する方法は、2次記憶手段114から1次記憶手段113にプログラムAのページを複製するタイミングにおいて、各ページが改ざんされているか否か、プログラムページのメッセージダイジェストを用いて検証する方法である。図27の例では、時刻tにページ1、時刻t+1にページ2、時刻t+2及び時刻t+8にページ3、時刻t+5にページ4が改ざんされているか否か検証を行う。

0016

改ざんされているか否かの検証は、メッセージダイジェスト検証手段115が、1次記憶手段113に蓄積されるプログラムのページについて再度メッセージダイジェストを計算し、これがメッセージダイジェスト蓄積手段117に蓄積されているメッセージダイジェストと一致するか否かにより行う。一致していれば改ざんはなかったと判定し、不一致の場合は、プログラムが改ざんされたと判断する。

0017

又、当該プログラム実行装置111において実行される他のプログラムが改ざんされ、そのプログラムにより2次記憶手段114に蓄積されたプログラムAのページが改ざんされたとしても、各ページのメッセージダイジェストが安全なメッセージダイジェスト蓄積手段117に複製されていることから、改ざんを検出することが可能となる。
特開平10−83310号公報
Applied Cryptgraphy, second edition, Bruce Schneier, 1996, John Wiley&Sons, ISBN 0-71-11709-9
”A Comparison of Public available Tools for Dynamic Buffer Overflow Prevention”, John Wilander and Marian Kamkar, NDSS2003
”A virtual Machine Introspection Based Architecture for intrusion detection”, Tal Garfinkel, Mendel Rosenblum, NDSS 2003

発明が解決しようとする課題

0018

しかしながら、上述した非特許文献3に開示される技術では、プログラムを実行している間、頻繁に実行されているページは1次記憶手段113に常に複製されており、2次記憶手段114から複製される機会がないため、プログラムが改ざんされているか否かの検証が行えないという問題点があった。例えば、図27において、常に1次記憶手段113に存在するプログラムのページ、即ちページ1やページ2に脆弱性があった場合、各ページが改ざんされているか否かを検証する機会が少ないため、ページ1やページ2を改ざんされても検知することが困難である。

0019

そこで、本発明は、上記の課題に鑑み、効率良くプログラムの改ざんを検知することができるプログラム実行装置及びプログラム実行方法を提供することを目的とする。

課題を解決するための手段

0020

上記目的を達成するため、本発明の第1の特徴は、(イ)実行するプログラムを、プログラムの命令列によって分割した単位であるページ毎に蓄積する1次記憶手段と、(ロ)実行中のプログラムが特権プログラムの機能を呼び出したことを検出する特権プログラム機能呼び出し検出手段と、(ハ)特権プログラム機能呼び出し検出手段により検出が行われた場合、1次記憶手段に蓄積されている実行中のページの改ざんの有無を検証する検証手段とを備えるプログラム実行装置であることを要旨とする。ここで「特権プログラム」とは、プログラム実行装置におけるプログラムの実行を管理するためのプログラム(システムコール)である。

0021

第1の特徴に係るプログラム実行装置によると、特権プログラムが呼び出されたときに改ざんの有無を検証するため、効率良くプログラムの改ざんを検知することができる。

0022

又、第1の特徴に係るプログラム実行装置は、プログラムの実行前に、ページ毎のメッセージダイジェストを予め蓄積するメッセージダイジェスト蓄積手段を更に備え、検証手段は、1次記憶手段に蓄積されたページのメッセージダイジェストを計算し、メッセージダイジェスト蓄積手段に蓄積されたメッセージダイジェストと比較することにより、改ざんの有無を検証してもよい。このプログラム実行装置によると、メッセージダイジェスト(ハッシュ値)を用いて改ざんの有無を検証することができる。

0023

又、第1の特徴に係るプログラム実行装置は、プログラムの実行が開始されてから所定の時間間隔で、時間の経過を通知するタイマ手段を更に備え、検証手段は、タイマ手段から通知があった場合、1次記憶手段に蓄積されている実行中のページの改ざんの有無を検証してもよい。このプログラム実行装置によると、改ざんの有無を検証する頻度増し、より確実に改ざんを検知することができる。

0024

又、第1の特徴に係るプログラム実行装置は、プログラムが実行されたときの関数呼び出し履歴を蓄積する関数呼び出し履歴蓄積手段とを更に備え、検証手段は、関数呼び出し履歴蓄積手段に蓄積されているページの改ざんの有無を検証してもよい。このプログラム実行装置によると、共通関数などから特権プログラム機能を呼び出した場合でも、プログラムの改ざんを検知することができる。

0025

又、第1の特徴に係るプログラム実行装置の検証手段は、予め定められた時間内に既に検証を行ったページについては、改ざんの有無を検証しなくてもよい。このプログラム実行装置によると、改ざん検証回数を減らすことができ、高速にプログラム実行を行いつつ、改ざんの検知を行うことができる。

0026

又、第1の特徴に係るプログラム実行装置において、1次記憶手段は、ページ毎にフラグを有し、認証手段は、フラグの値に応じて、ページの改ざんの有無を検証してもよい。このプログラム実行装置によると、改ざん検証を行うページを任意に指定することができ、改ざん検証の回数を減らすことができる。

0027

又、第1の特徴に係るプログラム実行装置は、プログラム単体負荷、あるいはプログラム実行装置全体の負荷を計測する負荷計測手段を更に備え、検証手段は、負荷計測手段によって計測された負荷が高い場合、プログラム実行中は検証すべきプログラムのページを記録し、負荷計測手段によって計測された負荷が低くなったときに、ページの改ざんの有無を検証してもよい。このプログラム実行装置によると、低い負荷のときにプログラムの改ざん検証を行うことができ、プログラム本来の実行速度を維持することができる。

0028

本発明の第2の特徴は、実行するプログラムを、プログラムの命令列によって分割した単位であるページ毎に蓄積するステップと、実行中のプログラムが特権プログラムの機能を呼び出したことを検出するステップと、前記検出するステップにより検出が行われた場合、前記蓄積されている実行中のページの改ざんの有無を検証するステップとを含むプログラム実行方法であることを要旨とする。

0029

第2の特徴に係るプログラム実行方法によると、特権プログラムが呼び出されたときに改ざんの有無を検証するため、効率良くプログラムの改ざんを検知することができる。

発明の効果

0030

本発明によると、効率良くプログラムの改ざんを検知するプログラム実行装置及びプログラム実行方法を提供することができる。

発明を実施するための最良の形態

0031

次に、図面を参照して、本発明の第1〜第5の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。

0032

<第1の実施の形態>
(プログラム実行装置)
第1の実施の形態に係るプログラム実行装置11は、図1に示すように、計算手段12と、1次記憶手段13と、2次記憶手段14と、メッセージダイジェスト検証手段15と、特権プログラム機能呼び出し検出手段16と、メッセージダイジェスト蓄積手段17と、入出力手段18とを備える。尚、図1では、各構成手段(計算手段12、1次記憶手段13、2次記憶手段14、メッセージダイジェスト検証手段15、特権プログラム機能呼び出し検出手段16、メッセージダイジェスト蓄積手段17、入出力手段18)が1つの場合を例示しているが、これらの構成手段は複数あっても良いことは勿論である。

0033

まず、第1の実施の形態に係るプログラム実行装置11が実行するプログラムA141について、説明する。

0034

プログラムAは、図2に示すように、計算手段12に与える命令列141aと、命令列を分割したページ毎に与えられるメッセージダイジェスト141bと、ページ毎のメッセージダイジェストへの署名141cより構成される。ページ毎のメッセージダイジェストは、第1の実施の形態では、プログラム配布時に予め用意されるものとするが、2次記憶手段14上に蓄積される間は作成されず、1次記憶手段13に複製するときやプログラム起動時に一括して作成してもよい。この場合、ページ毎のメッセージダイジェストへの署名141cは存在しないとするか、又は、プログラム命令列全体に対する署名を有してもよい。あるいは、プログラムによって予め用意したり、1次記憶手段13に複製するときに用意したり選択できるようにしてもよい。

0035

図2の例では、プログラムAの命令列141aは、4つのページに分割され、それぞれのページに対してメッセージダイジェストH1、H2、H3、H4を有している。命令列の分割単位は、第1の実施の形態では、1次記憶手段13と2次記憶手段14との間で複製を管理する単位とするが、メッセージダイジェストの計算を行う単位は必ずしもこれに一致する必要はない。例えば、図3に示すように、1次記憶手段13と2次記憶手段14との間の複製を管理する単位の半分でメッセージダイジェストの計算を行うようにしてもよい。

0036

各ページのメッセージダイジェストを計算する方法は幾通りもあるが、例えば、図4に示すように、プログラムの各ページをN個のワード列(ここでは64bitとする)で表現(B0、B1、B2、…、Bn)し、各ページのメッセージダイジェストを計算する。具体的には、X,Vを初期化し(ステップS101)、N個のワード列がすべて関数H(x)によって計算されるまで繰り返す(ステップS102〜104)。ここで、関数H(x)は、SHA−1やMD5のような一般的な一方向性関数やx=H(x)となるような関数を用いればよい。

0037

又、ページ毎のメッセージダイジェストへの署名を算出する方法は幾通りもあるが、例えば、図5に示すように、プログラムの各ページのメッセージダイジェストV0、V1、V2、…、Vnから署名を算出する。具体的には、X,Vを初期化し(ステップS201)、N個のメッセージダイジェストがすべて関数H(x)によって計算されるまで繰り返す(ステップS202〜204)。そして、関数S(x,k)によって、署名を算出する(ステップS205)。ここで、関数S(x,k)は、RSA暗号等の一般的な公開鍵暗号を用いて実現すればよい。ステップS205において、公開鍵暗号の計算に必要な鍵Ksはプログラムを作成した者の秘密鍵を用いることとし、プログラムがプログラム実行装置の外部で作成された場合は、署名は予めプログラムの作成者により作成されているものとする。尚、2次記憶手段14上のプログラムに、改ざんのおそれがない場合は、署名は省略することも可能である。

0038

次に、図1に示す第1の実施の形態に係るプログラム実行装置11の各構成手段について、詳細に説明する。

0039

計算手段12は、2次記憶手段14に蓄積されたプログラムA141を1次記憶手段13のプログラム格納領域131へ複製する。又、計算手段12は、ページに分割された実行可能な命令列よりなるプログラムA141を実行し、1次記憶手段13や2次記憶手段14の内容を四則演算等により更新する。又、計算手段12は、特権プログラム機能呼び出し手段16から特権プログラムが呼び出されたことを通知された場合、メッセージダイジェスト検証手段15に、その旨を通知する。更に、計算手段12は、メッセージダイジェスト検証手段15から検証結果を受信し、検証結果に基づいて、プログラムの実行を停止する。尚、計算手段12は、実行するプログラムに署名が添付されている場合、プログラムを複製する前に署名の検証を行う。

0040

1次記憶手段13は、2次記憶手段14に蓄積されたプログラムの一部又は全部を複製し、蓄積する。1次記憶手段13は、1つ又は複数のプログラムの複製を蓄積するためのプログラム格納領域131と、特権プログラム132とを有する。又、1次記憶手段13は、2次記憶手段14に比べ、高速に読み書きできることが求められることから、例えば、RAMなどのデバイスを用いることが望ましい。

0041

第1の実施の形態に係るプログラム格納領域131は、例えば、図6に示すように、1つのプログラムに対し、3つのプログラムのページを格納するページ格納領域131aを有する。

0042

2次記憶手段14は、1つ又は複数のプログラムを蓄積する。2次記憶手段14は、より多くのプログラムを蓄積することが望まれるため、ハードディスクフラッシュメモリなど比較的安価なデバイスを用いて実現することが望ましい。

0043

メッセージダイジェスト蓄積手段17は、プログラムを実行する前に当該プログラムの各メッセージダイジェストを蓄積する。又、メッセージダイジェスト蓄積手段17は、図1に示すように、他の構成手段と独立した構成としてもよく、特権プログラムの機能として1次記憶手段13や2次記憶手段14上に実装してもよいが、特権プログラム以外のプログラムからは読み書きできない記憶空間としておく必要がある。

0044

特権プログラム機能呼び出し検出手段16は、特権プログラムが呼び出されたことを検出する。プログラムA141等の通常のプログラムは、ファイルへのアクセス等、高度で複雑な処理は特権プログラムに処理を依頼し、処理結果を特権プログラムから受け取ることにより処理を実現する。特権プログラム機能呼び出し検出手段16は、このように特権プログラムが呼び出されたタイミングを検出し、計算手段12へ通知する。そして、計算手段12は、メッセージダイジェスト検証手段15へ特権プログラムが呼び出されたことを通知する。

0045

メッセージダイジェスト検証手段15は、特権プログラムが呼び出された場合、1次記憶手段13上にあるプログラムのページのメッセージダイジェストを計算し、予めメッセージダイジェスト蓄積手段17に蓄積された当該プログラムのページのメッセージダイジェストと比較する。メッセージダイジェスト検証手段15は、比較結果が一致すれば、プログラムの改ざんがないことを、比較結果が異なれば、プログラムの改ざんがあったことを計算手段12に通知する。図1では、メッセージダイジェスト検証手段15は、独立した構成とするが、特権プログラムの機能として実現してもよい。

0046

入出力手段18は、データの入力あるいは出力を行う。入力手段としては、キーボードマウス等の機器などが用いられ、フロッピーディスク登録商標)装置、CD−ROM装置、DVD装置等も含む。入力手段から入力操作が行われると対応するキー情報や位置情報が計算手段12に伝達される。又、出力手段としては、モニタなどの画面が用いられ、液晶表示装置(LCD)、発光ダイオードLED)パネルエレクトロルミネッセンス(EL)パネル等が使用可能である。又、入出力手段18は、インターネットなどを介して外部との通信を行う通信手段として機能してもよい。この場合、入出力手段18は、プログラムAや後に詳述する署名の検証時に必要な公開鍵をインターネットを介してダウンロードすることができる。

0047

又、第1の実施の形態に係るプログラム実行装置11は、処理制御装置(CPU)を有し、計算手段12、メッセージダイジェスト検証手段15、特権機能プログラム呼び出し検出手段16などをモジュールとしてCPUに内蔵する構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。

0048

又、図示していないが、プログラム実行装置11は、計算処理、メッセージダイジェスト検証処理、特権プログラム機能呼び出し検出処理などを処理制御装置(CPU)に実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、RAM、ROM、ハードディスク、フレキシブルディスクコンパクトディスクICチップカセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。

0049

(プログラム実行方法)
次に、第1の実施の形態に係るプログラム実行方法について、説明する。ここでは、プログラムA141を実行する。

0050

まず、プログラムAをC言語で記述したものを図7に示す。図7(a)は、プログラムAのコード、即ち、関数main、funcA、funcBの定義を含む。又、図7(a)の中の関数funcBは、libcなどの共通ライブラリに含まれる関数とし、図7(b)にその定義を示す。これらをコンパイルし、プログラム実行装置11の計算手段12で実行可能な命令列に変換し、ページに分割した例を図8に示す。

0051

図8では、最左列アドレスを、中央列にラベルを、最右列に命令列の一部を記述している。最左列のアドレスは、プログラム内における命令の格納順を表し、ラベルはJUMP命令等の制御命令の指定のために便宜上付しているプログラムの位置情報である。命令列の一部について、以下に説明する。

0052

CALL命令は、指定された関数を呼び出して実行することを意味し、RET命令により元の実行位置に戻ることとする。INTR命令は、特権プログラムの機能呼び出しを行うことを示し、JUMP命令は、指定されたアドレス(ラベル)へプログラムの実行を移すものとする。尚、ここでは、説明を簡便にするため、条件分岐をC言語のまま記述するが、一般的なプログラム実行装置の条件分岐命令などに変換することは容易に可能である。

0053

図7及び図8に示したプログラムAを実行することを例にとり、以下に、プログラム実行方法について図9図12を用いて説明する。

0054

まず、プログラム実行装置11の計算手段12は、2次記憶手段14よりプログラムAを検索して、実行を開始する。このとき、第1の実施の形態では、プログラムAに署名が添付されていることから、図9のステップS301において、計算手段12は、署名の検証を行う。

0055

具体的には、図10に示すように、X,Vを初期化し(ステップS401)、N個のメッセージダイジェストがすべて関数H(x)によって計算されるまで繰り返す(ステップS402〜404)。そして、関数D(x,y)を計算し、メッセージダイジェストVと一致するか否か判断する(ステップS405)。ここで、関数D(x,y)は公開鍵暗号等で利用する復号化関数であり、図5に示すS(x,y)と対になるものを利用すればよい。ステップS405における関数D(x,y)の引数Kpは、署名者、この場合はプログラム作成者の公開鍵であり、予め取得しておくことが望ましい。これは、プログラム実行装置11に対し、外部との通信が可能な入出力手段を負荷し、検証時にこの入出力手段を通じて取得することも可能である。署名が正しければ、図9のステップS302へ進み、正しくない場合は、ステップS406へ進み、プログラムの実行を停止する。

0056

次に、図9のステップS302において、計算手段12は、2次記憶手段14に蓄積されたプログラムA141を1次記憶手段13のプログラム格納領域131へ複製する。又、計算手段12は、プログラムA141に含まれるメッセージダイジェストをメッセージダイジェスト蓄積手段17へ複製する。

0057

プログラムAは、図7及び図8に示す命令列となっていることから、計算手段12は、プログラムをページ1、ページ2、ページ4、ページ1、ページ2、ページ3の順に実行していき、以後これを繰り返す。プログラム11は、初めてページ1の命令列を実行するとき、まず、ページ1の内容を2次記憶手段14から1次記憶手段13へ複製する。1次記憶手段13には複数のプログラム格納領域が存在するが、その特定はプログラム実行時に各プログラムを一意識別するIDを付与することなどにより、容易に可能である。

0058

プログラムの複製は、具体的には、図11に示すように、プログラム格納領域131のページ格納領域に空きがあるか否か判断する(ステップS501)。空きがある場合は、空いているページ格納領域にページを複製し(ステップS502)、空きがない場合は、最も古く利用されたページ格納領域の内容を消去し、上書きする(ステップS503)。

0059

次に、図9のステップS303において、計算手段12は、プログラムAを実行する。

0060

次に、図9のステップS304において、特権プログラム呼び出し検出手段16は、特権プログラムが呼び出されたか否か検出する。例えば、2次記憶手段14から1次記憶手段13への複製は、特権プログラムの機能として実現することも可能である。この場合、複製時に、特権プログラム機能呼び出し検出手段16は、特権プログラム機能呼び出しを検出する。特権プログラム機能が呼び出された場合は、ステップS305へ進み、呼び出されなかった場合は、ステップS302へ戻る。

0061

次に、ステップS305において、特権プログラム機能呼び出し手段16から特権プログラム機能の呼び出しの通知を受けた計算手段12は、一旦プログラムAの実行を停止する。

0062

そして、ステップS306において、計算手段12から通知を受けたメッセージダイジェスト検証手段15は、メッセージダイジェストの計算を行う。

0063

具体的には、図12に示すように、メッセージダイジェスト検証手段15は、1次記憶手段13上のページに対するメッセージダイジェストV’を計算し(ステップS601)、メッセージダイジェスト蓄積手段17に蓄積されたメッセージダイジェストVを取得する(ステップS602)。そして、メッセージダイジェストV’とメッセージダイジェストVとを比較し(ステップS603)、異なる場合は、改ざんがあったとして、プログラムの実行を停止する(ステップS304)。メッセージダイジェストV’とメッセージダイジェストVとが一致する場合は、改ざんはなかったとして、図9のステップS307へ進む。

0064

そして、プログラムが終了するまでステップS302〜306を繰り返す。

0065

以下、図7及び図8に示すプログラムAを続けて実行した場合の動作について、詳細に説明する。

0066

ページ1内のプログラムの実行を進めると、特権プログラムの機能呼び出し(図8の201)が存在することから、プログラム実行装置11は、プログラムAの実行中、特権プログラムの機能呼び出しを行う。特権プログラム機能呼び出し検出手段16がこれを検出すると、プログラム実行装置11は、一旦プログラムAの実行を停止し、1次記憶手段13上にあるプログラムAのページ1の複製を用いてメッセージダイジェストの計算を行う。プログラムAの実行を停止する際に、計算手段12は、プログラムAの実行中のアドレスを記憶しておけば、計算手段12は、検証すべきページがページ1であることを容易に知り得、メッセージダイジェストの計算が可能である。

0067

ページ1が改ざんされていれば、プログラム実行装置11はプログラムAの実行を停止するが、改ざんが検知されなければ実行を進める。

0068

プログラム実行装置11は、プログラムAの実行を更に進めると、図8の関数funcAを呼び出す図8の203)。関数funcAのはページ2にあることから、プログラム実行装置11は、ページ2を2次記憶手段14より図11に示す手順に従って、1次記憶手段13に複製し、関数funcAの命令列を実行する。

0069

関数funcAの実行中、再度特権プログラム機能の呼び出しを行う(図8の202)。このとき、プログラム実行装置11は、ページ2に関してもメッセージダイジェスト検証手段15を用いてページが改ざんされているか否か検証を行う。

0070

プログラム実行装置11は、更にプログラムAの実行を進めると、関数funcBを呼び出し、ページ4に実行を移すため、ページ4を2次記憶手段14より複製する。関数funcBの中にも特権プログラム機能呼び出し(図8の204)があることから、プログラム実行装置11はこれを実行する。特権プログラム機能呼び出し検出手段16により、特権プログラム機能呼び出しを検出したプログラム実行装置11は、ページ4が改ざんされているか否かの検証を行う。

0071

プログラム実行装置11は、プログラムAの実行中、関数funcBの処理が終わると、RET命令(図8の205)により、関数funcAに実行を移す。条件分岐のための設定を行った後、JUMP命令で実行を移し、RET命令により関数funcAも終了して、ページ1に実行を移す(図8の207)。

0072

このとき、funcAはページ2に、mainはページ1にあるため、1次記憶手段13上にあるプログラム格納領域にあるページは、古い順にページ1、ページ2、ページ4となる。

0073

関数funcAの終了後、JUMP命令(図8の207)によりプログラムの実行は、図8の201から207の間を繰り返す。よって、プログラム実行装置11は、再び関数funcAの実行を行う。

0074

関数funcAの実行は、前回の実行から条件判定の値が異なるため、特権プログラム機能の呼び出し(図8の202)の後、条件判定により、関数funcCを呼び出す。関数funcCはページ3にあるため、2次記憶手段14より1次記憶手段13に図11に示す手順によって複製するが、既に1次記憶手段13の格納領域はいっぱいのため、一番古く利用されたページ4の複製を廃棄し、ページ格納領域3にページ3を複製する。

0075

関数funcCも特権プログラムの機能呼び出しを呼び出すことから、このときにページ4が改ざんされているか検証を行う。

0076

以後、ページ1、ページ2、ページ4、ページ1、ページ2、ページ3の順でプログラムの実行を繰り返す。

0077

(作用及び効果)
第1の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、特権プログラムが呼び出されたときに改ざんの有無を検証するため、効率良くプログラムの改ざんを検知することができる。

0078

又、第1の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、メッセージダイジェスト(ハッシュ値)を用いて改ざんの有無を検証することができる。

0079

又、第1の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、1次記憶手段13と2次記憶手段14との間のプログラムの複製の管理単位より、改ざん検証を行う単位(メッセージダイジェストの計算を行う単位)を小さくすることができる。このような構成によると、1次記憶手段13と2次記憶手段14との間の複製の手間を省くことができ、高速にプログラム実行を行いつつ、改ざんの検知を行うことができる。

0080

<第2の実施の形態>
第2の実施の形態では、第1の実施の形態において説明した特権プログラム機能呼び出し検出手段だけでなく、周期的な時間の経過を通知可能なタイマ手段からの通知に基づいて、プログラムが改ざんされているか否かの検証を行う。

0081

(プログラム実行装置)
第2の実施の形態に係るプログラム実行装置11は、図13に示すように、計算手段12と、1次記憶手段13と、2次記憶手段14と、メッセージダイジェスト検証手段15と、特権プログラム機能呼び出し検出手段16と、メッセージダイジェスト蓄積手段17と、入出力手段18と、タイマ手段19とを備える。

0082

タイマ手段19は、プログラムの実行が開始されてから所定の時間間隔で、時間の経過を計算手段12へ通知する。所定の時間は、プログラムの実行開始時に設定されてもよく、プログラム実行装置11を起動したときに設定されてもよい。

0083

計算手段12は、タイマ手段19から通知を受ける度に、メッセージダイジェスト検証手段15へ所定の時間が経過したことを通知する。

0084

メッセージダイジェスト検証手段15は、特権プログラムが呼び出された場合、あるいは、所定の時間が経過した場合、1次記憶手段13上にあるプログラムのページのメッセージダイジェストを計算し、予めメッセージダイジェスト蓄積手段17に蓄積された当該プログラムのページのメッセージダイジェストと比較する。メッセージダイジェスト検証手段15は、比較結果が一致すれば、プログラムの改ざんがないことを、比較結果が異なれば、プログラムの改ざんがあったことを計算手段12に通知する。

0085

計算手段のその他の動作、1次記憶手段13、2次記憶手段14、メッセージダイジェスト検証手段15のその他の動作、特権プログラム機能呼び出し検出手段16、メッセージダイジェスト蓄積手段17、入出力手段18については、第1の実施の形態と同様であるので、ここでは説明を省略する。

0086

(プログラム実行方法)
次に、第2の実施の形態に係るプログラム実行方法について、図14を用いて説明する。

0087

まず、ステップS701〜S703については、図9のステップS301〜303と同様であるので、ここでは説明を省略する。

0088

ステップS704において、特権プログラム呼び出し検出手段16は、特権プログラムが呼び出されたか否か検出する。そして、タイマ手段19は、一定時間が経過したか否か検出する。特権プログラム機能の呼び出し、あるいは、一定時間が経過した場合、ステップS705へ進み、どちらにも該当しない場合は、ステップS702へ戻る。

0089

ステップS705〜707については、図9のステップS305〜307と同様であるので、ここでは説明を省略する。

0090

(作用及び効果)
第2の実施の形態に係るプログラム実行装置11及びプログラム実行方法によると、タイマ手段19を備えることにより、第1の実施の形態よりプログラムが改ざんされたか否か検証を行う頻度が増し、より確実に改ざんを検知することができる。

0091

<第3の実施の形態>
第1の実施の形態では、特権プログラム機能を呼び出したページしかページの改ざん検証を行わないが、第3の実施の形態では、関数呼び出し履歴蓄積手段に蓄積されたページについても改ざん検証を行う。

0092

(プログラム実行装置)
第3の実施の形態に係るプログラム装置11は、図15に示すように、計算手段12と、1次記憶手段13と、2次記憶手段14と、メッセージダイジェスト検証手段15と、特権プログラム機能呼び出し検出手段16と、メッセージダイジェスト蓄積手段17と、入出力手段18と、関数呼び出し履歴蓄積手段20とを備える。

0093

関数呼び出し履歴蓄積手段20は、プログラムが実行されたときの関数呼び出しの履歴を蓄積する。一般にプログラムの実行を行う際、このような関数呼び出しの履歴は、プログラム毎スタックと呼ばれるデータ構造として1次記憶手段13上に蓄積されることから、関数呼び出し履歴蓄積手段20は、このようなデータ構造で代用することも可能である。

0094

第3の実施の形態では、このスタックを用いて関数呼び出し履歴蓄積手段20を実現する例を、図16を用いて説明する。

0095

プログラム実行装置11は、プログラムを実行中、新たな関数を呼び出す度に、フレームと呼ばれるデータ構造をスタックに積み上げ、関数の実行が終了すると、スタックからフレームの内容を消去することを繰り返す。この操作は、最後に積み上げたフレームからしか消去できないラストインファーストアウト形式で行う。図16では、スタック中にフレーム20aとフレーム20bの2つのフレームが積み上げられている例を示している。フレームの中には関数実行中のみ参照可能な局所変数を格納する局所変数領域と、一段前のフレームのスタック上の位置を示すオールベースポインタと、関数呼び出し元のプログラムの実行位置を表す戻り先アドレスと、関数の呼び出しの際に与える引数を格納する引数領域が含まれる。関数呼び出し時におけるスタックの動作については、非特許文献2に詳しい。

0096

スタックのフレームに含まれる構成要素のうち、戻り先アドレスは関数を呼び出す際の呼び出し元の実行位置を示す。

0097

例えば、プログラム実行装置11が、図7及び図8に示すプログラムを実行中であるとすると、図16のスタックの構成例は、フレーム20aが図8の203の位置で関数funcAを呼び出したときに作成されるフレームであり、フレーム20bが図8の202の位置で関数funcBを呼び出したときに作成されるフレームであることを表す。よって、それぞれの戻り先アドレスには、0x00400300、0x00407000が入る。

0098

この戻り先アドレスから呼び出し元プログラムのページを特定する方法は幾通りもあるが、例えば、プログラムのページの大きさを固定長としておき、戻り先アドレスの下位アドレスを0とすれば、ページの先頭アドレスに一致することから、容易に特定可能である。

0099

ここでは、下位6ビットを0として扱うようにすれば、0x00400300、0x00407000は、0x00400000、0x00404000となり、ページ1、ページ2の先頭アドレスに一致する。第3の実施の形態では、このように関数の呼び出し元のページに変換したものを、関数呼び出し履歴蓄積手段として扱う。

0100

図17に、図7及び図8に示すプログラムを実施したときの関数呼び出し履歴蓄積手段20の蓄積内容を示す。

0101

ページの改ざん検知は、第1の実施の形態では、特権プログラム機能を呼び出したページしか行わないが、第3の実施の形態では、関数呼び出し履歴蓄積手段20に含まれるページも改ざん検知を行う。即ち、メッセージダイジェスト検証手段15は、関数呼び出し履歴蓄積手段20に蓄積されているページの改ざんの有無を検証する。この場合、例えば、図8の202の位置において、特権プログラム機能の呼び出しが含まれなかった場合、第1の実施の形態では、ページ2の改ざんを検知することができないが、第3の実施の形態では、図8の202の位置において、関数呼び出し履歴蓄積手段20にページ2が含まれるため、ページの検証を行うことが可能である。

0102

計算手段12、1次記憶手段13、2次記憶手段14、メッセージダイジェスト検証手段15のその他の動作、特権プログラム機能呼び出し検出手段16、メッセージダイジェスト蓄積手段17、入出力手段18については、第1の実施の形態と同様であるので、ここでは説明を省略する。

0103

(プログラム実行方法)
次に、第3の実施の形態に係るプログラム実行方法について、図9及び図18を用いて説明する。

0104

第3の実施の形態に係るプログラム実行方法は、図9に示す第1の実施の形態に係るプログラム実行方法と、メッセージダイジェストの計算(ステップS306)の詳細のみが異なる。

0105

メッセージダイジェストの計算の詳細は、図18に示すように、メッセージダイジェスト検証手段15は、関数呼び出し履歴蓄積手段20上のページに対するメッセージダイジェストV’を計算し(ステップS801)、メッセージダイジェスト蓄積手段17に蓄積されたメッセージダイジェストVを取得する(ステップS802)。そして、メッセージダイジェストV’とメッセージダイジェストVとを比較し(ステップS803)、異なる場合は、改ざんがあったとして、プログラムの実行を停止する(ステップS804)。メッセージダイジェストV’とメッセージダイジェストVとが一致する場合は、改ざんはなかったとして、図9のステップS307へ進む。

0106

第3の実施の形態において、図9のステップS306以外のステップは、第1の実施の形態と同様であるので、ここでは説明を省略する。

0107

(作用及び効果)
第3の実施の形態に係るプログラム実行装置11及びプログラム実行方法によると、関数呼び出し履歴蓄積手段20を備えることにより、共通関数などから特権プログラムの機能を呼び出した場合でも、プログラムの改ざんを検知することができる。

0108

<第4の実施の形態>
第4の実施の形態では、メッセージダイジェスト蓄積手段が、検証が行われた時刻を蓄積することにより、一定の時刻が経過していない場合は、メッセージダイジェストを再計算しない。

0109

(プログラム実行装置)
第4の実施の形態に係るプログラム装置11は、図1に示すように、計算手段12と、1次記憶手段13と、2次記憶手段14と、メッセージダイジェスト検証手段15と、特権プログラム機能呼び出し検出手段16と、メッセージダイジェスト蓄積手段17と、入出力手段18とを備える。

0110

メッセージダイジェスト蓄積手段17は、図19に示すように、メッセージダイジェスト17a、各ページが検証された時刻17b、検証を行うか否かを判定するしきい値17cとを備える。

0111

計算手段12は、現在時刻検証時刻17bとの差が、検証時刻しきいい値17cより大きい場合のみ、メッセージダイジェスト検証手段15に、改ざん検知の検証を行う通知を行う。

0112

メッセージダイジェスト検証手段15は、予め定められた時間内に既に検証を行ったページについては、改ざんの有無を検証しない。

0113

例えば、現在の時刻がTであり、ページ1において特権プログラム機能呼び出しが行われたとする。ページ1が最後に改ざんされたか否かを検証した時刻はT1であることから、現在時刻との差分T−T1が検証時刻しきい値17cより小さければ、1次記憶手段13にあるページ1のメッセージダイジェストを再計算する必要はないと判断する。このようにすれば特権プログラム機能の呼び出しを検出した際に、ページが改ざんされたか否かを検証する必要がない。

0114

又、検証時刻しきい値17cの値は、プログラム実行装置11の負荷が高いときは大きく、負荷が小さいときは小さく動的に変更することも可能である。

0115

計算手段12のその他の動作、1次記憶手段13、2次記憶手段14、メッセージダイジェスト検証手段15のその他の動作、特権プログラム機能呼び出し検出手段16、入出力手段18については、第1の実施の形態と同様であるので、ここでは説明を省略する。

0116

(プログラム実行方法)
次に、第4の実施の形態に係るプログラム実行方法について、図9及び図20を用いて説明する。

0117

第4の実施の形態に係るプログラム実行方法は、図9に示す第1の実施の形態に係るプログラム実行方法と、メッセージダイジェストの計算(ステップS306)の詳細のみが異なる。

0118

メッセージダイジェストの計算の詳細は、図20に示すように、まず、計算手段12は、特権プログラム機能の呼び出しが検出されたページの検証時刻が検証時刻しきい値より大きいか判断する(ステップS901)。そして、小さい場合は、改ざん検知を行わず、図9のステップS307へ進む。大きい場合は、メッセージダイジェスト検証手段15は、該当するページに対するメッセージダイジェストV’を計算し(ステップS902)、メッセージダイジェスト蓄積手段17に蓄積されたメッセージダイジェストVを取得する(ステップS903)。そして、メッセージダイジェストV’とメッセージダイジェストVとを比較し(ステップS904)、異なる場合は、改ざんがあったとして、プログラムの実行を停止する(ステップS905)。メッセージダイジェストV’とメッセージダイジェストVとが一致する場合は、改ざんはなかったとして、図9のステップS307へ進む。

0119

第4の実施の形態において、図9のステップS306以外のステップは、第1の実施の形態と同様であるので、ここでは説明を省略する。

0120

(作用及び効果)
第4の実施の形態に係るプログラム実行装置11及びプログラム実行方法によると、メッセージダイジェスト蓄積手段17が検証時刻17b及び検証時刻しきい値17を備え、現在時刻と検証時刻との差が検証時刻しきい値より大きい場合のみ、改ざんの検知を行う。このように、特権プログラム機能の呼び出しを検出した場合にすべて必ずページが改ざんされたか否かを検証するわけではないため、検証を行う回数を減らすことができ、高速にプログラム実行を行いつつ、改ざんの検知を行うことができる。

0121

<第5の実施の形態>
第5の実施の形態では、プログラムAに記述された改ざん検証を行うか否かのフラグ及び負荷に応じて、ページの改ざん検証を行う。

0122

(プログラム実行装置)
第5の実施の形態に係るプログラム装置11は、図21に示すように、計算手段12と、1次記憶手段13と、2次記憶手段14と、メッセージダイジェスト検証手段15と、特権プログラム機能呼び出し検出手段16と、メッセージダイジェスト蓄積手段17と、入出力手段18と、負荷計測手段21とを備える。

0123

負荷計測手段21は、改ざん検証を行うプログラム単体の負荷、プログラム実行装置11全体の負荷のいずれか、あるは、両方を計測する。負荷の計測には、様々な方法があるが、例えば、単位時間あたりに計算手段12が実行する命令の数やプログラム実行装置11で実行中のプログラムの数などを用いればよい。

0124

プログラムA141は、図22に示すように、計算手段12に与える命令列141aと、命令列を分割したページ毎に与えられるメッセージダイジェスト141bと、ページ毎のメッセージダイジェストへの署名141cと、改ざん検証を行うか否かを示すフラグ141dとにより構成される。このように、プログラム作成者はプログラムの各ページに対し、フラグ141dをプログラムに記しておくこととし、「○」が検証を行う、「×」が検証を行わないと解釈する。このフラグ141dの記述は、プログラム作成者が手動で行ってもよく、ページ当たりの特権プログラム機能の呼び出しの数が、一定の値より大きければ検するなど自動で行ってもよい。

0125

1次記憶手段13上のプログラム格納領域131は、図23に示すように、ページ格納領域131a毎にフラグ131bを有する。計算手段12が2次記憶手段14から1次記憶手段13へページを複製するとき、プログラムA141のフラグ141dの値をプログラム格納領域131のフラグ131bへに複製する。

0126

計算手段12は、特権プログラム機能の呼び出しが検出された際、フラグ131bの値を確認して、改ざん検証を行うべきという情報が記述してあれば、メッセージダイジェスト検証手段15へ改ざん検証を行うことを通知する。

0127

メッセージダイジェスト検証手段15は、フラグ131bの値に応じて、ページの改ざんの有無を検証する。

0128

又、フラグが「○」である場合、すぐに検証を行うとし、「×」である場合、負荷計測手段21によって計測された負荷が高い場合、あとで検証を行うとしてもよい。この場合、負荷が下がってきたときに、ページが改ざんされたか否かの検証を行うとする。

0129

即ち、メッセージダイジェスト検証手段15は、負荷計測手段21によって計測された負荷が高い場合、プログラム実行中は検証すべきプログラムのページを記録しておき、負荷計測手段21によって計測された負荷が低くなったときに、まとめて改ざんの検証を行う。

0130

計算手段12のその他の動作、2次記憶手段14、メッセージダイジェスト検証手段15のその他の動作、特権プログラム機能呼び出し検出手段16、入出力手段18については、第1の実施の形態と同様であるので、ここでは説明を省略する。

0131

(プログラム実行方法)
次に、第5の実施の形態に係るプログラム実行方法について、図9及び図24を用いて説明する。

0132

第5の実施の形態に係るプログラム実行方法は、図9に示す第1の実施の形態に係るプログラム実行方法と、メッセージダイジェストの計算(ステップS306)の詳細のみが異なる。

0133

メッセージダイジェストの計算の詳細は、図24に示すように、まず、負荷計測手段21は、プログラムの負荷やプログラム実行装置11の負荷を計測する(ステップS1001)。計算手段12は、プログラム格納領域131のフラグ131bと負荷計測手段21に応じて、改ざん検知を行うか否か判断する(ステップS1002)。そして、改ざん検知を行う場合、メッセージダイジェスト検証手段15は、該当するページに対するメッセージダイジェストV’を計算し(ステップS1002)、メッセージダイジェスト蓄積手段17に蓄積されたメッセージダイジェストVを取得する(ステップS1003)。そして、メッセージダイジェストV’とメッセージダイジェストVとを比較し(ステップS1004)、異なる場合は、改ざんがあったとして、プログラムの実行を停止する(ステップS1005)。メッセージダイジェストV’とメッセージダイジェストVとが一致する場合は、改ざんはなかったとして、図9のステップS307へ進む。

0134

第5の実施の形態において、図9のステップS306以外のステップは、第1の実施の形態と同様であるので、ここでは説明を省略する。

0135

(作用及び効果)
第5の実施の形態に係るプログラム実行装置11及びプログラム実行方法によると、フラグ及び負荷に応じて、改ざんの検知を行うか否か判断する。

0136

即ち、第5の実施の形態に係るプログラム実行装置11及びプログラム実行方法は、ページ毎に有するフラグの値に応じて、ページの改ざんの有無を検証することができる。このため、改ざん検証を行うページを任意に指定することができ、改ざん検証の回数を減らすことができる。

0137

又、第5の実施の形態に係るプログラム実行装置11及びプログラム実行方法は、負荷計測手段によって計測された負荷が高い場合、プログラム実行中は検証すべきプログラムのページを記録し、負荷計測手段によって計測された負荷が低くなったときに、ページの改ざんの有無を検証することができる。このため、低い負荷のときにプログラムの改ざん検証を行うことができ、プログラム本来の実行速度を維持することができる。

0138

(その他の実施形態)
本発明は上記の実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。

0139

例えば、第1〜第5の実施の形態に係るプログラム実行装置において、検証手段として、メッセージダイジェストを用いた検証を行ったが、検証方法はこれに限られるわけではなく、通常、プログラムの改ざん検証に用いられる方法を適宜選択することができる。

0140

例えば、計算手段12、メッセージダイジェスト検証手段15、特権プログラム機能呼び出し検出手段16をモジュールとして一つのCPUに備えてもよいと説明したが、それぞれ異なるCPUに備えられ、異なる装置としてもよい。その場合、複数の装置間をバスなどで接続するものとする。

0141

このように、本発明はここでは記載していない様々な実施形態等を含むことは勿論である。従って、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。

図面の簡単な説明

0142

第1の実施の形態に係るプログラム実行装置の構成ブロック図である。
第1の実施の形態に係るプログラムAの構成を示す図である(その1)。
第1の実施の形態に係るプログラムAの構成を示す図である(その2)。
メッセージダイジェストを求める一例を示すフローチャートである。
署名を算出する一例を示すフローチャートである。
第1の実施の形態に係るプログラム格納領域の構成を示す図である。
第1の実施の形態に係るプログラムAのコードである。
第1の実施の形態に係るプログラムAのコードがメモリ上に配置された図である。
第1の実施の形態に係るプログラム実行方法を示すフローチャートである。
第1の実施の形態に係る署名の検証方法(図9のステップS301)の詳細を示すフローチャートである。
第1の実施の形態に係るプログラムの複製方法図9のステップS302)の詳細を示すフローチャートである。
第1の実施の形態に係るメッセージダイジェストの計算方法図9のステップS306)の詳細を示すフローチャートである。
第2の実施の形態に係るプログラム実行装置の構成ブロック図である。
第2の実施の形態に係るプログラム実行方法を示すフローチャートである。
第3の実施の形態に係るプログラム実行装置の構成ブロック図である。
第3の実施の形態に係る関数呼び出し履歴蓄積手段の構成を示す図である。
第3の実施の形態に係る関数呼び出し履歴蓄積手段に蓄積されるページを示す図である。
第3の実施の形態に係るメッセージダイジェストの計算方法(図9のステップS306)の詳細を示すフローチャートである。
第4の実施の形態に係るプログラム実行装置のメッセージダイジェスト蓄積手段の構成を示す図である。
第4の実施の形態に係るメッセージダイジェストの計算方法(図9のステップS306)の詳細を示すフローチャートである。
第5の実施の形態に係るプログラム実行装置の構成ブロック図である。
第5の実施形態に係るプログラムAの構成を示す図である。
第5の実施形態に係るプログラム格納領域の構成を示す図である。
第5の実施の形態に係るメッセージダイジェストの計算方法(図9のステップS306)の詳細を示すフローチャートである。
従来のプログラム実行方法を説明するための図である。
従来のプログラム実行装置の構成ブロック図である。
従来のプログラム実行方法におけるプログラムの実行タイミングを表す図である。

符号の説明

0143

11…プログラム実行装置
12…計算手段
13…1次記憶手段
14…2次記憶手段
15…メッセージダイジェスト検証手段
16…特権プログラム機能呼び出し検出手段
17…メッセージダイジェスト蓄積手段
18…入出力手段
19…タイマ手段
20…関数呼び出し履歴蓄積手段
21…負荷計測手段

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ