説明

プログラム実行保護プロセッサ

【課題】プログラムの実行が中断された際に暗号化などの処理負荷をかけずに、タスクの実行環境を外部からの不正なアクセスから保護することができるプログラム実行保護プロセッサを提供すること。
【解決手段】タスクを実行するタスク実行手段と、タスクからの要求に応じて、復号鍵が暗号化された暗号情報を取得する暗号情報取得手段4と、暗号情報取得手段4によって取得された暗号情報を復号化し、この復号化で得られた復号鍵をもって、暗号化されたプログラムコードおよび/またはデータを復号化する復号化手段5と、タスクからの要求に応じて割り当てられ、少なくとも復号化手段5によって復号化されたプログラムコードおよび/またはデータを記憶するプライベートページを有する内部メモリ7と、タスクによる上記プライベートページへのアクセスを許可するか否かを判断するアクセス判断手段8とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マイクロプロセッサに関し、詳しくは、オペレーティングシステム(Operating System;以下「OS」という。)上で実行されるタスクの実行環境を、外部からの不正なアクセスから保護するマイクロプロセッサに関するものである。
【背景技術】
【0002】
近時、コンピュータの高機能化・高性能化に加え、プログラム自体に対する知的財産的保護価値が重要視されることなどに伴い、コンピュータにおいて実行されるプログラムやこのプログラムが扱うデータの安全性が求められている。そして、このような観点から、OSのマルチタスク環境下において実行されるプログラムやこのプログラムが扱うデータを、OSカーネル、デバッガ、エミュレータ装置などを介した外部からの不正なアクセスから保護することを目的としたマイクロプロセッサが提供されている。
【0003】
このようなマイクロプロセッサとして、例えば下記特許文献1に開示されるものがある。特許文献1に開示されるマイクロプロセッサは、暗号化されたプログラムを第1の暗号鍵を用いて復号化し、復号化されたプログラムの実行対象であるデータを、第2の暗号鍵を用いて暗号化/復号化し、第1および第2の鍵を関連付けて第1の記憶領域に格納し、これらの鍵を特定する識別子を、プログラムに関連するデータとともに第2の記憶領域に格納することによって、プログラム自体の秘密と、プログラムが扱うデータの秘密の双方を暗号学的に保証するものである。
【0004】
しかし、上記マイクロプロセッサでは、割り込みなどによって復号されたプログラムの実行が中断される場合、このプログラムおよびプログラムによって処理されていたデータを暗号化し、外部のメモリなどに退避させるため、マイクロプロセッサへの処理負荷が大きくなるといった問題があった。
【0005】
また、別の従来技術としては、タタスクに対して特権レベルを割り当て、特権レベルの高低によってタスク間に優先順位をつけることで、OSカーネルなど優先順位の高い特権タスクを作り、特権タスクの管理下でユーザタスク間の分離や切り替えを実現するものがある(下記非特許文献1参照)。
【0006】
しかし、このような方法では、ユーザタスク間の分離や切り替えが暗号化を伴わないので高速に実行できるが、特権タスクに対するユーザタスクの秘匿性や独立性が実現できない。
【特許文献1】特開2002−140236号公報
【非特許文献1】IA−32 インテル(R) アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、上巻:基本アーキテクチャ、インテル株式会社、[平成17年1月28日検索]、インターネット〈URL:http://www.intel.co.jp/jp/developer/download/index.htm〉<URL:ftp://download.intel.co.jp/jp/developer/jpdoc/ia32_arh_dev_man_vol1_online_i.pdf>
【発明の開示】
【発明が解決しようとする課題】
【0007】
そこで本発明は、上記の問題点に鑑みて、プログラムの実行が中断された際に、このプログラムおよびプログラムによって処理されていたデータを外部のメモリなどに退避させることなく、プログラムやプログラムが扱うデータを外部からの不正なアクセスから保護することができるプログラム実行保護プロセッサを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明のプログラム実行保護プロセッサは、上記の課題を解決するものとして、タスクを実行するタスク実行手段と、タスク実行手段によって実行されるタスクからの要求に応じて、復号鍵が暗号化された暗号情報を取得する暗号情報取得手段と、暗号情報取得手段によって取得された暗号情報を復号化し、この復号化で得られた復号鍵をもって、暗号化されたプログラムコードおよび/またはデータを復号化する復号化手段と、タスク実行手段によって実行されるタスクからの要求に応じて割り当てられ、少なくとも復号化手段によって復号化されたプログラムコードおよび/またはデータを記憶するプライベートページを有する内部メモリと、タスク実行手段によって実行されるタスクによる上記プライベートページへのアクセスを許可するか否かを判断するアクセス判断手段とを備えたことを特徴とする。
【0009】
また、上記プログラム実行保護プロセッサにおいては、暗号情報取得手段が、タスク実行手段によって実行されるタスクからの要求に応じて、プログラムコードおよび/またはデータが暗号化された暗号情報を取得するものであり、復号化手段が、暗号情報取得手段によって取得された暗号情報を復号化するものとしてもよい。
【0010】
これらの構成によれば、ネットワーク上の送受信におけるプログラムコードやデータの秘匿性が暗号学的に保証されるとともに、プログラム実行保護プロセッサの内部に設けられたプライベートページへのアクセスは、アクセス判断手段によって許可されたタスクに制限される。
【0011】
また、上記のプログラム実行保護プロセッサにおいては、アクセス判断手段が、タスク実行手段によって実行されるタスクが、アクセス要求されるプライベートページを割り当てられたタスクか否かに基づき、タスク実行手段によって実行されるタスクによるプライベートページへのアクセスを許可するか否かを判断するものとしてもよい。
【0012】
この構成によれば、プログラム実行保護プロセッサの内部に設けられたプライベートページへのアクセスは、アクセス要求されるプライベートページを割り当てられたタスクに制限される。
【0013】
また、上記のプログラム実行保護プロセッサにおいては、内部メモリが、プライベートページを割り当てられたタスクを識別するための所属タスク識別子を記憶し、アクセス判断手段が、上記所属タスク識別子に基づき、タスク実行手段によって実行されるタスクによるプライベートページへのアクセスを許可するか否かを判断するものとすることでもよい。
【0014】
この構成によれば、プログラム実行保護プロセッサの内部に設けられたプライベートページへのアクセスは、所属タスク識別子に基づいた判断の下に制限されることになる。
【0015】
さらに、上記のプログラム実行保護プロセッサにおいては、内部メモリが、タスクが記述されたタスクプログラムコードを識別するためのプログラム識別子と、タスク実行手段によって実行されるタスクからプライベートページへのアクセス条件が記述されたアクセス制御情報とを記憶し、アクセス判断手段が、上記プログラム識別子が上記アクセス制御情報に記述されるアクセス条件を満たすものであるか否かに基づき、タスク実行手段によって実行されるタスクによるプライベートページへのアクセスを許可するか否かを判断するものであるとしてもよい。
【0016】
この構成によれば、プログラム実行保護プロセッサの内部に設けられたプライベートページへのアクセスは、プログラム識別子やアクセス制御情報にも基づいた判断の下に制限されることになる。
【0017】
さらに、上記のプログラム実行保護プロセッサにおいては、タスクプログラムコードとプログラム識別子との関係を証明するプログラム証明書を検証するプログラム証明書検証手段を備えるものであってもよい。
【0018】
この構成によれば、タスクプログラムコードとプログラム識別子との関係がプログラム証明書によって保証されるため、改竄されたタスクプログラムコードに基づいて実行されるタスクによる実行環境への不正なアクセスが防止される。
【0019】
さらに、上記のプログラム実行保護プロセッサにおいては、公開鍵および秘密鍵よりなる鍵ペアを、タスク毎に生成する鍵ペア生成手段を備え、暗号情報取得手段が、鍵ペア生成手段によって生成された公開鍵をもって暗号化された暗号情報を取得するものであり、復号化手段が、鍵ペア生成手段によって生成された秘密鍵をもって、暗号情報取得手段によって取得された暗号情報の復号を行うものであるとしてもよい。
【0020】
この構成によれば、暗号情報がタスク毎に生成された秘密鍵をもって復号されるため、プログラム実行保護プロセッサの外部におけるプログラムコードの漏洩が防止される。
【0021】
さらに、上記のプログラム実行保護プロセッサにおいては、内部メモリは、メモリ上の指定された情報単位それぞれに対応する、外部からの読み出し手段を有しない秘密情報格納領域を1つ以上有し、各秘密情報格納領域は、A.未定義値が格納されている秘密情報格納領域に、未定義値ではない値であり新たに発生させた乱数を格納する、B.秘密情報格納領域に格納されている値を、未定義値が格納されている別の秘密情報格納領域に複写する、C.2つの秘密情報格納領域に格納される値を比較し、この比較結果を得る、D.メモリ上の情報単位が開放される場合に、これに対応する秘密情報格納領域に未定義値を格納する、の処理のみがなされるものであると構成することでもよい。
【0022】
また、タスクに対応する秘密情報格納領域に、そのタスクを表す乱数であるタスク秘密情報を格納し、プライベートページに対応する秘密情報格納領域に、そのプライベートページを割り当てられたタスクを表す乱数であるタスク秘密情報を格納するようにしてもよい。
【0023】
この構成によれば、秘密情報格納領域に格納されるタスク秘密情報に対して、プロセッサの命令実行に伴う読み出しや書き込みなどのプラグラムからの通常のアクセスは禁止され、タスク実行手段(内の論理回路)による、上記4つの処理に伴う内部的な読み出し、書き込みのみが可能である。
【0024】
秘密情報格納領域に格納される乱数は、外部から予測不可能な値であれば、乱数生成器により発生させた真の乱数に限らず、アルゴリズムによって発生させた擬似乱数でもよい。
【0025】
また、秘密情報格納領域に格納されるタスク秘密情報の値について、外部から予測不可能であること、命令の実行による読み出しと書き込みが禁止されていること、タスク秘密情報がプロセッサ内部に置かれてその内容がバス上に出力されないことによって、OSカーネルやデバッガなどのソフトウェアによる攻撃およびエミュレータなどのハードウェアによる攻撃に対しても、タスク秘密情報の秘匿性が保証され、さらに、対応するタスクやプライベートページが開放されない限り、タスク秘密情報の一致性に基づいたタスクとプライベートページの対応付けが保証される。
【0026】
さらに、タスクとプライベートページの対応付けが変更される場合には、その内容を消去するように構成される。
【発明の効果】
【0027】
本発明のプログラム実行保護プロセッサによれば、プログラム実行保護プロセッサにおいて実行されるプログラムの実行が中断された際に、このプログラムおよびプログラムによって処理されていたデータを外部のメモリなどに退避させることなく、プログラムやプログラムが扱うデータを、当該タスクあるいは関連したタスク以外の外部からの不正なアクセスから保護することができる。
【発明を実施するための最良の形態】
【0028】
以下、本発明のプログラム実行保護プロセッサの実施形態について、図面を参照して説明する。
【0029】
まず、この明細書においてタスクとは、OSカーネルや、OS上で実行されるプログラムの1実行単位を表し、プロセスやスレッドと呼ばれるものも含む。また、複数のスレッドを含むプログラム全体であるプロセスを1つの実行単位として見た場合に、これもタスクに含める。なお、タスクが記述されたプログラムコードをタスクプログラムコードということにする。
【0030】
また、この明細書においてプログラムコードとは、後述するタスク実行手段(2)によって実行されるタスクから呼び出される、サブルーチンやライブラリなどのモジュールを実行するための命令が記述されたものである。このプログラムコードは、外部からの不正なアクセスから保護される対象であって、タスクプログラムコードとは別に、暗号化された状態で供給される。
【0031】
さらに、この明細書では、後述するタスク実行手段(2)によって実行されているタスクを「実行タスク」ということにする。また、後述するメインメモリ(11)やページメモリ(6)などの記憶装置からの命令の取り出し、データの読み取りおよびメインメモリ(11)やページメモリ(6)などの記憶装置に対するデータの書き込みを「アクセス」ということにする。
【0032】
<第1の実施形態>
図1は、プログラム実行保護プロセッサ(1)を含むプログラム実行装置(10)のハードウェア構成を例示したブロック図である。また図2は、第1の実施形態に関するプログラム実行保護プロセッサ(1)の内部構成を示したブロック図である。
【0033】
図1に例示するように、プログラム実行装置(10)は、本発明であるプログラム実行保護プロセッサ(1)、メインメモリ(揮発性メモリであるRAM(Random Access Memory)が利用されるものである。)(11)、不揮発性メモリであるROM(Read Only Memory)(120)、ハードディスクなどの外部記憶装置(130)、キーボードやポインティングデバイスなどの入力装置(160)、画像を表示するモニタ装置(150)、およびプログラム実行装置(10)の外部に有線および/または無線通信可能であって、ネットワークを介して他の通信装置と通信を行うネットワークインタフェイス(140)並びにこれらの入力装置(160)、モニタ装置(150)、ネットワークインタフェイス(140)、プログラム実行保護プロセッサ(1)、RAM(11)、ROM(120)、外部記憶装置(130)間のデータのやり取りが可能なように接続するバス(170)を備えている。また必要に応じて、プログラム実行装置(10)に、CD−ROMなどの記憶媒体を読み書きできる装置(ドライブ)やスピーカなどを設けるとしてもよい。なお、プログラム実行装置(10)は、コンピュータ装置、携帯端末、または通信機能を備えた家電製品などによって構成するとしてもよい。
【0034】
プログラム実行保護プロセッサ(1)は、その内部に不揮発性あるいは揮発性の半導体メモリ(内部メモリ)を備えるCPU(Central Processing Unit)である。そして、より具体的には、プログラム実行保護プロセッサ(1)は、タスクを実行するタスク実行手段(2)と、公開鍵暗号系(例えばRSA暗号系)における公開鍵および秘密鍵よりなる鍵ペアをタスク毎に生成する鍵ペア生成手段(3)と、タスク実行手段(2)において実行されるタスクからの要求に応じて、復号鍵が暗号化された暗号情報を取得する暗号情報取得手段(4)と、取得された暗号情報を復号化し、この復号化で得られた復号鍵をもって、暗号化されたプログラムコードやデータを復号鍵によって復号化する復号化手段(5)と、後述する内部メモリと、タスク実行手段(2)において実行されるタスクによる内部メモリのプライベートページへのアクセスを許可するか否かを判断するアクセス判断手段(8)とを備えている。
【0035】
この実施形態において内部メモリは、プログラム実行保護プロセッサ(1)内部に2つ備わるものとする。即ち、内部メモリの1つはページメモリ(6)であり、内部メモリのもう1つはタスクプライベート情報メモリ(7)である。もちろん、1つの半導体メモリにおいて、記憶容量を適宜振り分けることで、ページメモリ(6)およびタスクプライベート情報メモリ(7)としての機能を持つようにしてもよい。
【0036】
内部メモリは、メモリ上の指定された情報単位それぞれに対応する、外部からの読み出し手段を有しない秘密情報格納領域を1つ以上有している。
【0037】
この秘密情報格納領域は、内部メモリに対するデータの読み出し/書き込みなどの制御を行うコントローラ(例えば、本実施形態ではタスク実行手段(2)に相当する。)による上述した4つの処理に伴う内部的な読み出し、書き込みが可能である。このようにして、内部メモリの秘密情報格納領域に格納される値は、プロセッサの外部に対して秘匿性を有するものとなっている。
【0038】
また、秘密情報格納領域は、コントローラの制御によって、秘密情報格納領域に格納される値(この値は、未定義値に限定されない。)を、予め未定義値が格納されている秘密情報格納領域に複写することができ、さらに、2つの秘密情報格納領域に格納される値を比較し、この比較結果を外部へ出力することができるようになっている。なお、秘密情報格納領域に格納される値が共に未定義値の場合には、比較結果は不一致であるとするようになっている。
【0039】
また、未定義値が格納されている秘密情報格納領域に対しては、コントローラから出力される(未定義値ではない)乱数だけを格納することができるようになっている。
【0040】
さらに、秘密情報格納領域は、この秘密情報格納領域に対応付けられるメモリ上の情報単位の記憶内容が消去されるなどによって開放される場合に、コントローラの制御の下に、未定義値が格納されるようになっている。逆に、秘密情報格納領域に格納される値は、秘密情報格納領域に対応付けられるメモリ上の情報単位の記憶内容が消去されるなどによって開放されるまで、所定の値を格納し続けることになる。
【0041】
この実施形態において秘密情報格納領域は、後述するタスク秘密情報の格納に利用される。
【0042】
ページメモリ(6)は、復号化手段(5)によって復号化されたプログラムコードやデータを記憶するものであるプライベートページ(50)を有する。なお、ここでのデータとは、プログラムコードに基づいて実行される命令によって利用されるものに限らない。プライベートページ(50)は、後述するアクセス判断手段(8)によってアクセス許可された場合にアクセス可能となっているので、復号化手段(5)で復号化されたプログラムコードやデータに限らず、およそ自在にアクセスされることが好ましくない情報であれば、このプライベートページに格納するようにしてよいものである。
【0043】
タスクプライベート情報メモリ(7)は、他のタスクから秘匿する情報であってタスクを管理するためのタスクプライベート情報が記憶されるタスクプライベート情報格納領域(40)を有する。
【0044】
ここで、メインメモリ(11)、タスクプライベート情報メモリ(7)およびページメモリ(6)のそれぞれに記憶された情報について図面を参照して説明する。
【0045】
図3(a)は、メインメモリ(11)のメモリマップの概念図である。
メインメモリ(11)は、タスクプログラムコード、およびタスクプログラムコードに基づいて実行される命令によって利用されるデータが記憶されるページ(30)を有している。また、メインメモリ(11)は、OSカーネルなどの特権タスクからは秘匿化しない情報であってタスクを管理するためのタスク管理情報が記憶されるタスク管理情報格納領域(31)を有し、タスク管理情報は、タスク実行手段(2)によって起動されているタスク毎に、タスク管理情報格納領域(31)に記憶される。
【0046】
タスク管理情報格納領域(31)に記憶されるタスク管理情報には、タスクを識別するためのタスク識別子(32)と、プライベートページ(50)またはページ(30)の物理アドレスを示すページテーブルエントリよりなるページテーブル(33)とが含まれる。なお、実行タスクは、ページテーブル(33)を構成するページテーブルエントリに従ってプライベートページ(50)またはページ(30)にアクセスするようになっている。
【0047】
図3(b)は、タスクプライベート情報メモリ(7)のメモリマップの概念図である。
タスクプライベート情報メモリ(7)のタスクプライベート情報格納領域(40)に記憶されるタスクプライベート情報には、メインメモリ(11)におけるタスク管理情報格納領域(31)の記憶アドレスを表すタスク管理情報ポインタ(41)と、タスク毎に生成されるタスク秘密情報(44)と、鍵ペア生成手段(3)によって生成された秘密鍵(42)および公開鍵(43)とが含まれる。また、タスクプライベート情報は、タスク実行手段(2)によって起動されているタスク毎に、タスクプライベート情報格納領域(40)に記憶される。
【0048】
なお、タスク実行手段(2)は、プログラム実行保護プロセッサ(1)の外部、およびタスク実行手段(2)によって実行されるOSカーネルを含むいかなるタスクの要求に基づいても、タスクプライベート情報メモリ(7)のタスクプライベート情報格納領域(40)に対する、命令の実行による読み出し、書き込みおよび実行などの通常のアクセスができないようになっている。換言すれば、タスクプライベート情報格納領域(40)へのアクセスは、タスク実行手段(2)の動作による内部的な呼び出しによってできるものである。
【0049】
図3(c)は、ページメモリ(6)のメモリマップの概念図である。
ページメモリ(6)は、上記のとおりプライベートページ(50)を有しており、また、各プライベートページ(50)に対応して、各プライベートページ(50)に関する情報を記憶するページヘッダ(51)を有している。ページヘッダ(51)には、プライベートページ(50)を割り当てられたタスクのタスク識別子(32)と同じ値が設定される所属タスク識別子(52)と、プライベートページ(50)が割り当てられたタスクのタスクプライベート情報に含まれるタスク秘密情報(44)と同じ値が設定されるタスク秘密情報(53)が記憶される。
【0050】
なお、タスク実行手段(2)は、プログラム実行保護プロセッサ(1)の外部、およびタスク実行手段(2)によって実行されるOSカーネルを含むいかなるタスクの要求に基づいても、ページメモリ(6)のページヘッダ(51)に対する、命令の実行による読み出し、書き込みおよび実行などの通常のアクセスできないようになっている。
【0051】
また、タスク実行手段(2)は、プログラム実行保護プロセッサ(1)の外部、および、アクセス判断手段(8)によってアクセスが許可されたものを除くタスクの要求に基づいては、ページメモリ(6)のプライベートページ(50)に対する、命令の実行による読み出し、書き込みおよび実行などの通常のアクセスできないようになっている。
【0052】
また、プログラム実行保護プロセッサ(1)は、後述するページメモリレジスタ(9)と、タスク実行手段(2)によって実行されているタスクを示す情報が記憶される実行タスクレジスタ(13)と、タスク実行手段(2)によって実行されているタスクに関する情報(例えば、特権レベルや割り込みの可否など)が記憶されるプロセッサ状態レジスタ(14)とを備えている。
【0053】
なお、プログラム実行保護プロセッサ(1)は、図示しないものの、公知のCPUが備える算術論理演算ユニット、汎用レジスタ、プログラムカウンタ、データバッファなどをも備えているとする。
【0054】
タスク実行手段(2)は、複数のタスクを起動することができ、起動した複数のタスクから1つのタスクを選択して、このタスクを実行するための命令をメインメモリ(11)やページメモリ(6)から取り出し、取り出した命令を解読し、解読した命令に従ってメインメモリ(11)やページメモリ(6)からデータを読み取ったり、メインメモリ(11)やページメモリ(6)にデータを書き込んだりすることができる。また、タスク実行手段(2)は、実行されるタスクの要求などに応じてアクセス判断手段(8)、暗号情報取得手段(4)、復号化手段(5)、メインメモリ(11)などの動作処理を制御するようにもなっている。
【0055】
暗号情報取得手段(4)は、ネットワークインタフェイス(140)を介して、鍵ペア生成手段(3)によって生成された公開鍵、およびタスクによって要求されたプログラムコードを識別するためのコード識別情報を図示しないサーバ装置に送信する。
【0056】
ここでサーバ装置とは、タスクプログラムコードのベンダーや公的な機関などの信頼される機関に設置されているものである。サーバ装置は、ネットワークに通信可能に接続されているので、暗号情報取得手段(4)によって送信された公開鍵およびコード識別情報を受信できるようになっている。また、サーバ装置は、受信したコード識別情報に応じた復号鍵を、受信した公開鍵で暗号化し、暗号化した暗号情報をプログラム実行装置(10)に送信するようになっている。
【0057】
そして、暗号情報取得手段(4)は、公開鍵およびコード識別情報の送信を受けたサーバ装置によって送信された暗号情報を、ネットワークインタフェイス(140)を介して受信する。
【0058】
復号化手段(5)は、暗号情報取得手段(4)によって取得された暗号情報を鍵ペア生成手段(3)によって生成された秘密鍵をもって復号化し、復号化して得られた復号鍵もって、暗号化されたプログラムコードやデータを復号する。
【0059】
暗号化されたプログラムコードやデータは、プログラム実行装置(10)のハードディスクなどの外部記憶装置(13)に既に記憶されているものとする。プログラム実行装置(10)は、暗号化されたプログラムコードやデータを、ネットワークやCD−ROMなどの記録媒体を介して取得するようにしてもよい。
【0060】
なお、ここでは、サーバ装置から受信する暗号情報は、暗号化されたプログラムコードやデータを復号するため復号鍵が公開鍵によって暗号化されたものとした。しかし、このような形態に限るものではなく、サーバ装置から受信する暗号情報は、公開鍵で暗号化されたプログラムコードやデータとし、この暗号情報を復号化手段(5)において秘密鍵をもって復号するとしてもよい。
【0061】
図4は、メインメモリ(11)、タスクプライベート情報メモリ(7)、およびページメモリ(6)のそれぞれに記憶された情報の関連を示す関連図である。
【0062】
実行タスクレジスタ(13)には、実行タスクに対応するタスク管理情報格納領域(31)のメインメモリ(11)における記憶アドレスが記憶される。また、タスク管理情報格納領域(31)のタスク管理情報に含まれるタスク識別子(32)には、タスクプライベート情報格納領域(40)のインデックスが設定されており、タスク実行手段(2)は、タスク識別子(32)に基づいてタスクプライベート情報格納領域(40)のタスクプライベート情報を取得することができる。
【0063】
上述のとおり、タスクプライベート情報格納領域(40)のタスクプライベート情報に含まれるタスク管理情報ポインタ(41)は、メインメモリ(11)におけるタスク管理情報格納領域(31)の記憶アドレスを表している。従って、タスク管理情報格納領域(31)のタスク管理情報に含まれるタスク識別子(32)に基づいて取得されるタスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)が、タスク管理情報格納領域(31)の記憶アドレスを表すか否かによって、タスク識別子(32)が改竄のない正当なものであるか否かを検証することができる。
【0064】
ページテーブル(33)は、論理アドレステーブルを構成し、ページテーブル(33)を構成する各ページテーブルエントリは、プライベートページ(50)またはページ(30)を示す物理アドレスが記憶されている。すなわち、ページテーブル(33)は、論理アドレスを物理アドレスに変換するために参照される。
【0065】
ところで、ページメモリレジスタ(9)は、物理アドレスのどの領域にプライベートページ(50)をマップするかを表す情報(マップ情報)を記憶するようになっている。つまり、ページメモリレジスタ(9)に記憶されるマップ情報を参照することによって、プライベートページ(50)かであるか否かが判別することになる。もしプライベートページ(50)ではない物理アドレスが示されるならば、ページ(30)を示していることになる。ここで、プライベートページ(50)を連続する物理アドレス領域にマップする場合には、ページメモリレジスタ(9)は、マップする領域の先頭アドレスとサイズまたは終端アドレスとを記憶するようにすることができる。なお、サイズや終端アドレスは、ページメモリ(6)中のプライベートページ(50)に割り当てられた記憶容量から得るようにしてもよい。
【0066】
なお、ページヘッダ(51)とプライベートページ(50)とは、ページメモリ(6)における記憶順序で対応付けられている。もちろん、ページヘッダ(51)の記憶領域とプライベートページ(50)とを連続した領域に割り当てることによって対応付けてもよく、あるいは、ページヘッダ(51)にプライベートページ(50)を示すページメモリ(6)内の位置情報を含めて対応付けてもよい。
【0067】
このため、実行タスクがページテーブル(33)のページテーブルエントリに基づいてプライベートページ(50)にアクセス要求する場合には、このプライベートページ(50)に対応するページヘッダ(51)のタスク秘密情報(53)と、タスクプライベート情報格納領域(40)のタスク秘密情報(44)とが一致するか否かに基づいて、ページヘッダ(51)とタスクプライベート情報格納領域(40)とが正しく対応付けられているか否かを検証することができることになる。
【0068】
次に、アクセス判断手段(8)について説明する。アクセス判断手段(8)は、実行タスクによってプライベートページ(50)へのアクセス要求があった場合に、プライベートページ(50)に対するアクセスを許可するか否かを判断するようになっている。
【0069】
具体的には、アクセス判断手段(8)は、実行タスクに対応するタスク管理情報格納領域(31)のタスク識別子(32)と、アクセスが要求されたプライベートページ(50)に対応するページヘッダ(51)の所属タスク識別子(52)とが等しいか否かに基づいて、実行タスクによるプライベートページ(50)に対するアクセスを許可するか否かを判断するようになっている。
【0070】
なお、アクセス判断手段(8)は、上述したページメモリレジスタ(9)に記憶されたマップ情報に基づいて、実行タスクが要求する物理アドレスへのアクセスが、プライベートページ(50)に対するものか、メインメモリ(11)のページ(30)に対するものかの何れであるかを判断するようになっている。
【0071】
以下に、プログラム実行保護プロセッサ(1)の動作を説明する。
図5は、プログラム実行保護プロセッサ(1)におけるタスク起動動作を示すフローチャートである。
【0072】
タスクが起動されると、まず、タスク管理情報を記憶するための領域であるタスク管理情報格納領域(31)がOSによってメインメモリ(11)に割り当てられて初期化される(S1)。なお、タスク管理情報格納領域(31)が初期化された際に、タスク管理情報格納領域(31)のタスク識別子(32)は所定の未定義値に設定される。
【0073】
次に、タスクプライベート情報を記憶するための領域であるタスクプライベート情報格納領域(40)が、タスク実行手段(2)によって、タスクプライベート情報メモリ(7)に割り当てられて初期化される(S2)。そして、タスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)には、ステップS1において初期化されたタスク管理情報格納領域(31)のメインメモリ(11)における記憶アドレスが設定される(S3)。また、タスク実行手段(2)は、乱数を生成して、これをタスクプライベート情報格納領域(40)のタスク秘密情報(44)に設定する(S4)。なお、ここでの乱数は、外部から予測不可能であれば擬似乱数生成アルゴリズムに基づく擬似乱数であってもよい。
【0074】
次に、タスク実行手段(2)は、ステップS2において初期化されたタスクプライベート情報格納領域(40)のインデックスを、ステップS1において初期化されたタスク管理情報格納領域(31)のタスク識別子(32)に設定する(S5)。
【0075】
次に、公開鍵および秘密鍵からなる鍵ペアが鍵ペア生成手段(3)によって生成される(S6)。そして、鍵ペア生成手段(3)で生成された公開鍵および秘密鍵は、タスクプライベート情報格納領域(40)の公開鍵(43)および秘密鍵(42)として設定される(S7)。
【0076】
なお、タスクプログラムコードにおいて鍵ペア生成に必要な一連の処理を不可分に行う鍵生成命令が記述されることで、タスク実行手段(2)において、その鍵生成命令を実行して鍵ペアを生成するようにしてもよい。
【0077】
上述したタスク起動動作において、ステップS6以降の各ステップは、タスク起動時に処理されるものとして限定されるのではなく、実行タスクによる動的な要求に応じて処理されるようにしてもよい。
【0078】
また、プログラム実行保護プロセッサ(1)は、プライベートページ(50)を要しないタスクにも適用することができる。この場合、プライベートページ(50)を要しないタスクに対しては、ステップS2以降の各ステップを処理しない。従って、プライベートページ(50)を要しないタスクに対するタスク識別子(32)は、タスク実行時において未定義値となる。
【0079】
図6は、プログラム実行保護プロセッサ(1)におけるプログラムコード要求動作を示すフローチャートである。プログラムコード要求動作は、実行タスクによってプログラムコードの読み込み要求があった時に、タスク実行手段(2)によって実行される。また、プログラムコードの場合だけでなく、データの読み込み要求があった場合も同様の手順で処理される。なお、以下に説明するプログラムコード要求動作は、プライベートページ(50)を要しないタスクに対しては行われない。
【0080】
まず、プライベートページ(50)がページメモリ(6)に割り当てられて確保される(S10)。続いて、プライベートページ(50)に関する情報を記憶するページヘッダ(51)がページメモリ(6)に割り当てられて初期化される(S11)。
【0081】
次に、ページヘッダ(51)の所属タスク識別子(52)が、実行タスクに対応するタスク管理情報格納領域(31)のタスク識別子(32)と同じ値に設定される(S12)。さらに、ページヘッダ(51)のタスク秘密情報(53)が、タスク識別子(32)に基づいて得られるタスクプライベート情報格納領域(40)のタスク秘密情報(44)と同じ値に設定される(S13)。
【0082】
次に、タスクプライベート情報格納領域(40)の公開鍵(43)および実行タスクによって要求されたプログラムコードを識別するためのコード識別情報が、暗号情報取得手段(4)によってネットワークインタフェイス(140)を介してサーバ装置に送信される(S14)。なお、コード識別情報は、タスクプログラムコードに記述されていて、タスク実行時にメインメモリ(11)から呼び出される。
【0083】
暗号情報取得手段(4)によって送信された公開鍵(43)およびコード識別情報は、上述したサーバ装置によって受信される。サーバ装置は、コード識別情報に応じたプログラムコードやデータを復号するための復号鍵を、公開鍵(43)をもって暗号化し、この暗号化された暗号情報を、ネットワークを介してプログラム実行装置(10)に送信する。
【0084】
サーバ装置から送信された暗号情報は、ネットワークインタフェイス(140)を介して暗号情報取得手段(4)によって受信される(S15)。受信された暗号情報は、復号化手段(5)によって、タスクプライベート情報格納領域(40)の秘密鍵(42)をもって復号化され、復号鍵が得られる(S16)。
【0085】
次に、復号化手段(5)は、復号化して得られた復号鍵をもって、実行タスクによって要求されたプログラムコードを復号化し(S17)、ステップS10において割り当てられたプライベートページ(50)に書き込む(S18)。なお、ステップS17およびステップS18は、不可分の処理として実行してもよい。即ち、プログラムコードを復号化しながらプライベートページ(50)への書き込みを実行するのである。なお、ここでプログラムコードやデータは、外部記憶装置(13)からメインメモリ(11)に呼び出されているものとする。
【0086】
なお、プログラム実行保護プロセッサ(1)は、1つのタスクに対して、複数のプライベートページ(50)を動的に割り当てることができるようになっている。例えば、複数のタスクが起動されることによって、プライベートページ(50)が割り当てられる場合もあるし、1つのタスクの起動によって、プログラムコード要求動作が複数回実行される場合もある。
【0087】
上述したプログラムコード要求動作は、実行タスクに対応するタスク管理情報格納領域(31)のタスク識別子(32)に基づいて、タスクプライベート情報格納領域(40)のインデックスを取得し、この取得したインデックスが示すタスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)が、メインメモリ(11)における実行タスクに対応するタスク管理情報格納領域(31)の記憶アドレスを表していることを検証した後に行うようにしてもよい。
【0088】
上記のプログラムコード要求動作で割り当て・初期化されるプライベートページは、実行タスクによって読み込み要求のあったプログラムコードを書き込むためのものとして説明したが、プライベートページは、プログラムコードを書き込むためだけに割り当て・初期化されるものではない。例えば、プログラムで内部的に用いるデータを書き込むためにプライベートページが用いられるものであってもよい。さらに、実行可能なコードを含まないプログラムデータ要求動作によってプライベートページが割り当て・初期化されるとしてもよい。
【0089】
図7は、プログラム実行保護プロセッサ(1)におけるプライベートページ(50)に対するアクセス判断動作を示すフローチャートである。以下に説明するプライベートページ(50)に対するアクセス判断動作は、実行タスクによってプライベートページ(50)に対するアクセス要求があった時にアクセス判断手段(8)によって実行される。
【0090】
実行タスクによってプライベートページ(50)に対するアクセス要求がなされると、アクセス判断手段(8)はまず、アクセスが要求されたプライベートページ(50)に対応するページヘッダ(51)をページメモリ(6)から取得する(S20)。続いて、取得されたページヘッダ(51)の所属タスク識別子(52)に基づいてタスクプライベート情報メモリ(7)からタスクプライベート情報格納領域(40)のタスクプライベート情報を取得する(S21)。
【0091】
ここで、ページヘッダ(51)とタスクプライベート情報格納領域(40)とが正しく対応付けられているか否かを検証するために、ページヘッダ(51)のタスク秘密情報(53)とタスクプライベート情報格納領域(40)のタスク秘密情報(44)とが等しいか否かを判断する(S22)。
【0092】
タスク秘密情報(53)とタスク秘密情報(44)とが等しくないと判断された場合には、プライベートページ(50)に対するアクセスは禁止される(S23)。一方、タスク秘密情報(53)とタスク秘密情報(44)とが等しいと判断された場合には、アクセス判断手段(8)は、タスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)に基づいて、メインメモリ(11)からタスク管理情報格納領域(31)の記憶アドレスを取得する(S24)。
【0093】
次に、取得されたタスク管理情報格納領域(31)の記憶アドレスが、実行タスクレジスタ(13)に記憶されるタスク管理情報格納領域(31)の記憶アドレスと等しいか否かが判断される(S25)。取得されたタスク管理情報格納領域(31)の記憶アドレスが、実行タスクレジスタ(13)に記憶されるタスク管理情報格納領域(31)の記憶アドレスと等しくないと判断された場合には、プライベートページ(50)に対するアクセスは禁止される(S23)。即ち、プライベートページ(50)を割り当てられたタスクと、実行タスクとが異なる場合には、プライベートページ(50)に対するアクセスは禁止されるのである。
【0094】
一方、取得されたタスク管理情報格納領域(31)の記憶アドレスが、実行タスクレジスタ(13)に記憶されるタスク管理情報格納領域(31)の記憶アドレスと等しいと判断された場合には、ステップS24において取得された記憶アドレスに示されるタスク管理情報格納領域(31)のタスク識別子(32)とページヘッダ(51)の所属タスク識別子(52)とが等しいか否かが判断される(S26)。
【0095】
タスク識別子(32)と所属タスク識別子(52)とが等しいと判断された場合には、プライベートページ(50)に対するアクセスは許可される(S27)。しかし、タスク識別子(32)と所属タスク識別子(52)とが等しくないと判断された場合には、プライベートページ(50)に対するアクセスは禁止される(S23)。
【0096】
なお、ステップS22において、タスク秘密情報(53)とタスク秘密情報(44)とが等しくないと判断された場合には、タスク実行手段(2)によって、タスク秘密情報(53)を含むページヘッダ(51)およびこのページヘッダ(51)と対応するプライベートページ(50)に記憶された情報を復元できないように消去してからページヘッダ(51)およびプライベートページ(50)を開放するようにしてもよい。
【0097】
また、ステップS23において、プライベートページ(50)に対するアクセスを禁止するのに加えて、実行タスクに対する例外処理(例えば強制終了など)を実行するようにしてもよい。
【0098】
図8は、プログラム実行保護プロセッサ(1)におけるタスク終了動作を示すフローチャートである。以下に説明するタスク終了動作は、実行タスクが終了するときに実行される。
【0099】
タスク実行手段(2)は、実行タスクに対応するタスク管理情報格納領域(31)のページテーブル(33)を構成する全てのページテーブルエントリについて、順次、下記のステップS31〜S34を繰り返す。
まず、タスク実行手段(2)は、実行タスクに対応するタスク管理情報格納領域(31)のページテーブル(33)を構成するあるページテーブルエントリが、ページ(30)を示すものであるか、あるいはプライベートページ(50)を示すものであるかを、ページメモリレジスタ(9)に記憶されたマップ情報に基づいて判断する(S30、S31)。
【0100】
ステップS31において、ページテーブルエントリがページ(30)を示すと判断された場合には、メインメモリ(11)に記憶された該当のページ(30)がタスク実行手段(2)によって開放される(S32)。一方、ページテーブルエントリがプライベートページ(50)を示すと判断された場合には、ページメモリ(6)の該当のプライベートページ(50)に記憶された情報が復元できないようにタスク実行手段(2)によって消去されてからプライベートページ(50)が開放される(S33)。
【0101】
さらに、プライベートページ(50)と対応するページヘッダ(51)についても、ページヘッダ(51)に含まれる情報が復元できないようにタスク実行手段(2)によって消去され、ページヘッダ(51)が開放される(S34)。
【0102】
あるページテーブルエントリについてステップS34が終了すると、次のページテーブルエントリについてステップS31〜S34の繰り返すことによって、全てのページテーブルエントリについてステップS31〜S34の処理が実行される。
【0103】
以上の処理の後、タスクプライベート情報メモリ(7)に対するタスクプライベート情報格納領域(40)のインデックスがタスク管理情報(31)のタスク識別子(32)に基づいてタスク実行手段(2)によって取得される。そして、取得されたインデックスに示されるタスクプライベート情報格納領域(40)のタスクプライベート情報が復元できないようにタスク実行手段(2)によって消去されてから、タスクプライベート情報格納領域(40)が開放される(S36)。
【0104】
次に、実行タスクに対応する、メインメモリ(11)に記憶されたタスク管理情報格納領域(31)のタスク管理情報が復元できないようにOSによって消去されてからタスク管理情報格納領域(31)が開放される(S37)。
【0105】
なお、ステップS33およびステップS34を処理する前に、ページヘッダ(51)に含まれる所属タスク識別子(52)に基づいてタスクプライベート情報格納領域(40)のインデックスを取得し、取得したインデックスに示されるタスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)によって示されたタスク管理情報格納領域(31)の記憶アドレスが、実行タスクレジスタ(13)に記憶されるタスク管理情報格納領域(31)の記憶アドレスと等しいか否かを検証した後に、ステップS33およびステップS34を処理するようにしてもよい。
【0106】
また、ステップS32からステップS34までの各処理は、実行タスクからの要求に応じて動的に処理されるようにしてもよい。
【0107】
また、ステップS36を処理する前に、タスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)に示されたタスク管理情報格納領域(31)の記憶アドレスが、実行タスクレジスタ(13)に記憶されるタスク管理情報格納領域(31)の記憶アドレスと等しいか否かを検証した後にステップS36を処理するようにしてもよい。
【0108】
以上で説明したタスク終了動作において、メインメモリ(11)に記憶されたタスク管理情報格納領域(31)のタスク識別子(32)やページテーブル(33)が他のタスクなどによって書き換えられていた場合には、プライベートページ(50)、ページヘッダ(51)およびタスクプライベート情報格納領域(40)が消去されないままになる可能性が生じる。このため、タスク実行手段(2)は、以下に示す不要情報消去動作を実行するようになっている。
【0109】
図9は、プログラム実行保護プロセッサ(1)における不要情報消去動作を示すフローチャートである。なお、以下に説明する不要情報消去動作は、タスク実行手段(2)によって、定期的に実行されるようにしてもよいし、各タスクを起動する前や各タスクが終了した後に実行されるようにしてもよい。
【0110】
タスクプライベート情報メモリ(7)に記憶された全てのタスクプライベート情報格納領域(40)について、順次、下記のステップS41〜S44を繰り返す。
まず、タスクプライベート情報メモリ(7)に記憶されたあるタスクプライベート情報格納領域(40)のタスク管理情報ポインタ(41)に基づいて、メインメモリ(11)におけるタスク管理情報格納領域(31)のタスク管理情報を取得する(S40、S41)。
【0111】
もしステップ41において、タスク管理情報格納領域(31)のタスク管理情報が取得されなかった場合には、タスクプライベート情報格納領域(40)のタスクプライベート情報に対応するタスクが存在しないことになるため、タスクプライベート情報格納領域(40)が復元できないように消去されてからタスクプライベート情報格納領域(40)が開放される(S42)。
【0112】
次に、ステップS41でタスク管理情報格納領域(31)のタスク管理情報が取得された場合、取得されたタスク管理情報のタスク識別子(32)がタスクプライベート情報格納領域(40)のインデックスと一致するか否かが判断される(S43)。
【0113】
タスク識別子(32)がタスクプライベート情報格納領域(40)のインデックスと一致しないと判断された場合には、タスクプライベート情報格納領域(40)とタスクとの対応が正しくないことになるため、タスクプライベート情報格納領域(40)が復元できないように消去されてからタスクプライベート情報格納領域(40)が開放される(S42)。
【0114】
ステップ43において、タスク識別子(32)がタスクプライベート情報格納領域(40)のインデックスと一致すると判断された場合は、ステップS44において、全てのタスクプライベート情報格納領域について、上記処理が終了したと判断し、もし終了していないならば、次のタスクプライベート情報格納領域(40)についてステップS41〜S44を処理する。
ステップS44において、全てのタスクプライベート情報格納領域(40)について上記ステップの処理がなされたと判断されたら、続く下記のステップに移行する。
【0115】
以上の処理の後、ページメモリ(6)に記憶された全てのページヘッダ(51)について、順次、下記のステップS46〜S50を繰り返す。
まず、ページメモリ(6)に記憶されたあるページヘッダ(51)の所属タスク識別子(52)に基づいて、タスクプライベート情報メモリ(7)におけるタスクプライベート情報格納領域(40)のタスクプライベート情報を取得する(S45、S46)。
【0116】
もしステップ46で、タスクプライベート情報格納領域(40)のタスクプライベート情報が未割り当てまたは開放済みなどの理由によって取得されなかった場合には、ページヘッダ(51)に対応するタスクプライベート情報格納領域(40)が存在しないことになるため、ページヘッダ(51)が復元できないように消去されてからページヘッダ(51)が開放される(S47)。
【0117】
続いて、ページヘッダ(51)に対応するプライベートページ(50)に記憶された情報が復元できないように消去されてからプライベートページ(50)が開放される(S48)。
【0118】
次に、ステップS46においてタスクプライベート情報格納領域(40)のタスクプライベート情報が取得された場合、取得されたタスクプライベート情報のタスク秘密情報(44)とページヘッダ(51)のタスク秘密情報(53)とが等しいか否かが判断される(S49)。
【0119】
ここで、タスク秘密情報(44)とタスク秘密情報(53)とが等しくないと判断された場合には、ページヘッダ(51)とタスクプライベート情報格納領域(40)とが正しく対応付けられていないことになるため、ページヘッダ(51)が復元できないように消去されてからページヘッダ(51)が開放される(S47)。
【0120】
続いて、ページヘッダ(51)に対応するプライベートページ(50)に記憶された情報が復元できないように消去されてからプライベートページ(50)が開放される(S48)。
【0121】
ステップS49において、タスク秘密情報(44)とタスク秘密情報(53)とが等しいと判断された場合には、ステップS50において、全てのページヘッダーについて上記処理が終了したかを判断し、もし終了していないならば、次のページヘッダ(51)についてステップS46〜S50を処理する。ステップS50において、全てのページヘッダについて上記処理が終了したと判断されれば、不要情報消去処理は終了する。
【0122】
以上説明したように、本発明の第1の実施形態のプログラム実行保護プロセッサ(1)によれば、プログラム実行保護プロセッサ(1)内部に設けられたプライベートページ(50)に対するアクセスが、アクセス判断手段(8)によって許可されたタスクに制限されるため、プログラムの実行が中断された際にプログラムコードの暗号化などの処理負荷をかけずに、タスクの実行環境を外部からの不正なアクセスから保護することができる。
【0123】
<第2の実施形態>
図10は、本発明の第2の実施形態に係るプログラム実行保護プロセッサ(61)を含むプログラム実行装置(60)の構成を示すブロック図である。なお、本発明の第2の実施形態におけるプログラム実行装置(60)においては、上述した第1の実施形態におけるプログラム実行装置(10)の構成要素と同一の構成要素に同一の符号を付して、その説明を省略する。
【0124】
プログラム実行装置(60)は、CPUによって構成されるプログラム実行保護プロセッサ(61)と、メインメモリ(11)と、ネットワークインタフェイス(140)とを備えている。
【0125】
ここで、第2の実施形態におけるプログラム実行保護プロセッサ(61)においては、上述した第1の実施形態におけるプログラム実行保護プロセッサ(1)の構成要素と同一の構成要素に同一の符号を付して、その説明を省略する。
【0126】
プログラム実行保護プロセッサ(61)は、タスク実行手段(2)と、鍵ペア生成手段(3)と、暗号情報取得手段(4)と、復号化手段(5)と、ページメモリ(6)と、他のタスクから秘匿化する情報であってタスクを管理するためのタスクプライベート情報を記憶するタスクプライベート情報メモリ(62)と、実行タスクによるプライベートページに対するアクセスを許可するか否かを判断するアクセス判断手段(63)と、ページメモリレジスタ(9)と、実行タスクレジスタ(13)と、プロセッサ状態レジスタ(14)とを備えている。
【0127】
図11は、タスクプライベート情報メモリ(62)のメモリマップの概念図である。タスクプライベート情報メモリ(62)は、タスクプライベート情報を記憶するタスクプライベート情報格納領域(70)を有する。タスクプライベート情報には、第1の実施形態において説明したタスクプライベート情報格納領域(40)と同様に、タスク管理情報ポインタ(41)と、タスク秘密情報(44)と、秘密鍵(42)と、公開鍵(43)とが含まれる。また、このタスクプライベート情報は、タスク実行手段(2)によって起動されているタスク毎に、タスクプライベート情報格納領域(70)に記憶される。
【0128】
また、タスクプライベート情報格納領域(70)のタスクプライベート情報には、タスク実行手段(2)によって実行されるタスクの処理が記述されたタスクプログラムコードを識別する第1プログラム識別子(71)と、プライベートページ(50)に対する他のタスクからのアクセス条件が記述されたアクセス制御情報(72)とがさらに含まれる。アクセス制御情報(72)は、プライベートページ(50)が割り当てられたタスク毎に設けられる。
【0129】
ここで、プログラム識別子(71)は、グローバルに割り当てられるもので、例えば、プログラムベンダーの識別子と、プログラムベンダー内のローカルな識別子との組み合わせやプログラム名などよりなる。なお、タスクプログラムコードに異なるバージョンがある場合などには、複数のタスクプログラムコードに対して1つのプログラム識別子が割り当てられていてもよい。
【0130】
図12は、アクセス制御情報(72)のデータ構成図である。
アクセス制御情報(72)は、プライベートページ(50)などのリソースに対するアクセスを要求するタスクが記述されたタスクプログラムコードを識別するためのプログラム識別子(74)と、アクセス対象のリソース(75)と、読み出し、書込み、および実行などを表すアクセス種別(76)と、リソースにアクセスするタスクの実行ユーザの属性や実行環境などの環境情報の制約を表す付加条件(77)と、アクセスの可否を表すアクセス可否(78)を含む複数のアクセス条件(73)によって構成される。なお、ここで実行環境とは、タスクが実行される特権レベル、割り込み許可条件、ハードウェア構成情報などを含むものである。
【0131】
アクセス判断手段(63)は、実行タスクと対応するタスク管理情報格納領域(31)のタスク識別子(32)と、アクセスが要求されたプライベートページ(50)に対応するページヘッダ(51)の所属タスク識別子(52)とが等しいか否かに加えて、上記アクセス制御情報(72)に基づいて、実行タスクによるプライベートページ(50)へのアクセスを許可するか否かを判断するようになっている。
【0132】
プログラム実行保護プロセッサ(61)は、さらに、タスクプログラムコードとプログラム識別子との関係を証明するプログラム証明書を検証するプログラム証明書検証手段(64)をさらに備えている。
【0133】
ここで、プログラム証明書について図面を参照して説明する。
図13は、プログラム証明書のデータ構成図である。
【0134】
メインメモリ(11)に記憶されるプログラム証明書(80)は、プログラム識別子(81)と、タスクプログラムコードの不変部分を一方向性ハッシュ関数にかけることよって得られるプログラムフィンガープリント(82)と、タスクプログラムコードとプログラム識別子(81)との関係を証明する条件を表す証明条件情報(83)と、プログラム証明書(80)の発行日時(84)と、プログラム証明書(80)の有効期間(85)と、タスクプログラムコードのベンダーやバージョンなどのタスクプログラムコードに関する情報を含む属性情報(86)と、アクセス制御情報(72)を生成する元のデータであるアクセス制御情報(87)と、プログラム証明書(80)の発行機関(88)とを含んでいる。ここで、証明条件情報(83)には、タスクの実行ユーザの属性や実行環境などの制約などの証明条件が記述されている。
【0135】
また、プログラム証明書(80)は、プログラム識別子(81)、プログラムフィンガープリント(82)、証明条件情報(83)、発行日時(84)、有効期間(85)、属性情報(86)、アクセス制御情報(87)、および発行機関(88)に対する署名情報(89)を含んでいる。
【0136】
署名情報(89)は、上記各情報を一方向性ハッシュ関数にかけた値を発行機関(88)に示される機関の秘密鍵を用いて計算したディジタル署名や認証子(MAC;Message Authentication Code)などである。ここで、発行機関(88)は、タスクプログラムコードのベンダーや公的な機関などの信頼される機関である。
【0137】
プログラム証明書検証手段(64)は、署名情報(89)をもってプログラム証明書(80)が改竄されていないことを検証するようになっている。また、プログラム証明書検証手段(64)は、ユーザの属性、タスクプログラムコードの属性、日時、およびプログラム実行装置(60)の属性などの環境情報に基づいて証明条件情報(83)に記述された証明条件を満たしているか否かを判断するようになっている。
【0138】
さらに、プログラム証明書検証手段(64)は、発行日時(84)および有効期間(85)に基づいてプログラム証明書(80)の有効期限を現在日時が過ぎているか否かを判断するようになっている。また、プログラム証明書検証手段(64)は、プログラムフィンガープリント(82)をもってタスクプログラムコードが改竄されていないことを検証するようになっている。
【0139】
プログラム証明書検証手段(64)は、署名情報(89)に基づき、プログラム証明書(80)を検証することによって、タスクプログラムコードとプログラム識別子(81)との関係を証明すると共に、アクセス制御情報(87)が改竄されていないことを証明した上で、証明したプログラム識別子(81)をタスクプライベート情報格納領域(70)の第1プログラム識別子(71)に設定し、証明したアクセス制御情報(87)をタスクプライベート情報格納領域(70)のアクセス制御情報(72)に設定する。
【0140】
プログラム証明書検証手段(64)は、タスク実行手段(2)によって起動されるタスクのタスクプログラムコードに基づいてプログラムフィンガープリントを算出し、算出したプログラムフィンガープリントに基づいてプログラム証明書(80)を取得するようになっている。なお、タスクプログラムコードに埋め込まれたプログラム識別子(81)に基づいてプログラム証明書(80)を取得するようにしてもよい。
【0141】
なお、プログラム証明書検証手段(64)は、ネットワーク上のサーバ装置や、ハードディスクなどの不揮発性の記憶装置、および着脱可能な記憶媒体などからプログラム証明書(80)を取得するようにしてもよい。
【0142】
以下に、プログラム実行保護プロセッサ(61)の動作を説明する。
なお、以下に説明するプログラム実行保護プロセッサ(61)の動作において、タスク起動動作、プログラムコード要求動作、タスク終了動作、および不要情報消去動作については、第1の実施形態で説明したものと同様であるためその説明を省略する。
【0143】
図14は、プログラム実行保護プロセッサ(61)におけるプログラム証明書検証動作を示すフローチャートである。以下に説明するプログラム証明書検証動作は、タスク起動動作に続いて実行される。
【0144】
まず、プログラム証明書検証手段(64)によってプログラム証明書(80)がメインメモリ(11)から取得される(S60)。ステップS60において、プログラム証明書(80)が取得できた場合には、プログラム証明書(80)に含まれる署名情報(89)をもってプログラム証明書(80)が改竄されていないかが検証される(S61)。
【0145】
ステップS61において、プログラム証明書(80)が改竄されていないと検証された場合には、ユーザの属性、タスクプログラムコードの属性、日時およびプログラム実行装置(60)の属性などの環境情報がプログラム証明書(80)に含まれる証明条件情報(83)に記述された証明条件を満たしているか否かがプログラム証明書検証手段(64)によって判断される(S62)。なお、ここでユーザの属性とは、特権ユーザか否かなどを表し、タスクプログラムコードの属性とは、読み出し、書き込みおよび実行などの許可設定、実行時の特権モードの指定などを表し、プログラム実行装置(60)の属性とは、サポートする機能や構成要素に関する情報などを表すものである。
【0146】
ステップS62において、環境情報が証明条件情報(83)に記述された証明条件を満たしていると判断された場合には、プログラム証明書(80)に含まれる発行日時(84)および有効期間(85)に基づいてプログラム証明書(80)の有効期限を現在日時が過ぎているか否かがプログラム証明書検証手段(64)によって検証される(S63)。
【0147】
ステップS63において、プログラム証明書(80)の有効期限を現在日時が過ぎていないと判断された場合には、プログラム証明書(80)に含まれるプログラムフィンガープリント(82)をもってタスクプログラムコードが改竄されていないことがプログラム証明書検証手段(64)によって検証される(S64)。
【0148】
ステップS64において、タスクプログラムコードが改竄されていないと検証された場合には、プログラム証明書(80)に含まれるプログラム識別子(81)がプログラム証明書検証手段(64)によってタスクプライベート情報格納領域(70)に含まれる第1プログラム識別子(71)に設定され(S65)、続いて、プログラム証明書(80)に含まれるアクセス制御情報(87)がタスクプライベート情報格納領域(70)のアクセス制御情報(72)に設定される(S66)。
【0149】
なお、プログラム実行保護プロセッサ(61)においては、図5を参照して説明したタスク起動動作のステップS2でタスクプライベート情報格納領域(70)が初期化された時に、タスクプライベート情報格納領域(70)の第1プログラム識別子(71)およびアクセス制御情報(72)は、所定の未定義値に設定される。
【0150】
従って、プログラム証明書(80)が取得できなかった場合(S60)、プログラム証明書(80)が改竄されていないと検証されなかった場合(S61)、環境情報が証明条件情報(83)に記述された証明条件を満たしていないと判断された場合(S62)、プログラム証明書(80)の有効期限を現在日時が過ぎていると判断された場合(S63)、または、タスクプログラムコードが改竄されていないと検証されなかった場合(S64)には、タスクプライベート情報格納領域(70)の第1プログラム識別子(71)およびアクセス制御情報(72)は、未定義値のままとなる。
【0151】
この場合には、タスクプライベート情報格納領域(70)のタスクプライベート情報に対応するタスクは、他のタスクに割り当てられたプライベートページ(50)にアクセスすることが禁止され、自己に割り当てられたプライベートページ(50)が他のタスクからアクセスされることも禁止される。
【0152】
なお、上述したプログラム証明書検証動作は、タスク起動動作に続いて実行されるものとしたが、各タスクが、他のタスクに割り当てられたプライベートページ(50)にアクセスする際や、自己に割り当てられたプライベートページ(50)に対して他のタスクからアクセスが要求された際に動的に実行されるようにしてもよい。
【0153】
また、プログラム証明書検証動作によって、タスクプライベート情報格納領域(70)の第1プログラム識別子(71)およびアクセス制御情報(72)が設定されなかった場合には、実行タスクに例外処理を実行させることによって、正当なプログラム証明書(80)を要求するようにしてもよい。
【0154】
また、ステップS64において、タスクプログラムコードが改竄されていないと検証されなかった場合には、このタスクプログラムコードに基づいてタスク実行手段(2)によって実行されるタスクを強制終了するようにしてもよい。
【0155】
図15は、プログラム実行保護プロセッサ(61)におけるプライベートページ(50)に対するアクセス判断動作を示すフローチャートである。なお、以下に説明するプライベートページ(50)に対するアクセス判断動作は、実行タスクによってプライベートページ(50)に対するアクセス要求があった時にアクセス判断手段(63)によって実行される。
【0156】
まず、アクセスが要求されたプライベートページ(50)に対応するページヘッダ(51)がページメモリ(6)から取得される(S70)。続いて、取得されたページヘッダ(51)に含まれる所属タスク識別子(52)に基づいて、タスクプライベート情報メモリ(62)におけるタスクプライベート情報格納領域(70)のインデックスが取得される(S71)。
【0157】
ここで、ページヘッダ(51)とタスクプライベート情報格納領域(70)とが正しく対応付けられているか否かを検証するために、ページヘッダ(51)に含まれるタスク秘密情報(53)とタスクプライベート情報格納領域(70)のタスク秘密情報(44)とが等しいか否かが判断される(S72)。
【0158】
タスク秘密情報(53)とタスク秘密情報(44)とが等しくないと判断された場合には、プライベートページ(50)に対するアクセスは禁止される(S73)。一方、タスク秘密情報(53)とタスク秘密情報(44)とが等しいと判断された場合には、タスクプライベート情報格納領域(70)のタスク管理情報ポインタ(41)に基づいて、メインメモリ(11)におけるタスク管理情報格納領域(31)の記憶アドレスが取得される(S74)。
【0159】
次に、取得されたタスク管理情報格納領域(31)の記憶アドレスが、実行タスクレジスタ(13)に記憶されるタスク管理情報格納領域(31)の記憶アドレスと等しいか否かが
判断される(S75)。タスク管理情報格納領域(31)の記憶アドレスと実行タスクレジスタ(13)に記憶される記憶アドレスと等しいと判断された場合には、ステップS74において取得された記憶アドレスに示されるタスク管理情報格納領域(31)のタスク識別子(32)とページヘッダ(51)の所属タスク識別子(52)とが等しいか否かを判断する(S76)。
【0160】
タスク識別子(32)と所属タスク識別子(52)とが等しいと判断された場合には、プライベートページ(50)に対するアクセスは許可される(S77)。しかし、タスク識別子(32)と所属タスク識別子(52)とが等しくないと判断された場合には、プライベートページ(50)に対するアクセスは禁止される(S73)。
【0161】
ステップS75において、タスク管理情報格納領域(31)の記憶アドレスと実行タスクレジスタ(13)に記憶される記憶アドレスとが等しくないと判断された場合には、タスク管理情報格納領域(31)のタスク識別子(32)と、ステップS71で取得されたタスクプライベート情報格納領域(70)のインデックスとが等しいか否かに基づいて、タスク管理情報格納領域(31)のタスク識別子(32)が正当なものであるか否かを検証する(S78)。
【0162】
タスク管理情報格納領域(31)のタスク識別子(32)が正当なものであると検証されなかった場合には、プライベートページ(50)に対するアクセスは禁止される(S73)。一方、タスク管理情報格納領域(31)のタスク識別子(32)が正当なものであると検証された場合には、実行タスクレジスタ(13)に記憶される記憶アドレスが示すタスク管理情報格納領域(31)のタスク管理情報が取得される(S79)。続いて、取得されたタスク管理情報に含まれるタスク識別子(32)に基づいて、実行タスクに対応するタスクプライベート情報格納領域(70)のタスクプライベート情報が取得される(S80)。
【0163】
次に、ステップS80で取得されたタスクプライベート情報に含まれるタスク管理情報ポインタ(41)が、実行タスクに対応するタスク管理情報格納領域(31)の記憶アドレスを示すか否かに基づいて、実行タスクに対応するタスク管理情報格納領域(31)のタスク識別子(32)が正当なものであるか否かが検証される(S81)。
【0164】
ステップS81において、実行タスクに対応するタスク管理情報格納領域(31)のタスク識別子(32)が正当なものであると検証されなかった場合には、プライベートページ(50)に対するアクセスは禁止される(S73)。一方、実行タスクに対応するタスク管理情報格納領域(31)のタスク識別子(32)が正当なものであると検証された場合には、実行タスクに対応するタスクプライベート情報格納領域(70)の第1プログラム識別子(71)や環境情報が、ステップS71で取得されたタスクプライベート情報格納領域(70)のアクセス制御情報(72)を構成する各アクセス条件(73)を満たすか否かが判断される(S82)。
【0165】
第1プログラム識別子(71)や環境情報が、アクセス制御情報(72)を構成する各アクセス条件(73)を満たすと判断された場合には、プライベートページ(50)に対するアクセスは許可される(S77)。しかし、第1プログラム識別子(71)や環境情報が、アクセス制御情報(72)を構成する各アクセス条件(73)を満たさないと判断された場合には、プライベートページ(50)に対するアクセスは禁止される(S73)。
【0166】
なお、ステップS72において、タスク秘密情報(53)とタスク秘密情報(44)とが等しくないと判断された場合には、タスク秘密情報(53)を含むページヘッダ(51)と、このページヘッダ(51)に対応するプライベートページ(50)に記憶された情報とを復元できないように消去してからページヘッダ(51)およびプライベートページ(50)を開放するようにしてもよい。
【0167】
また、ステップS73において、プライベートページ(50)に対するアクセスを禁止するのに加えて、実行タスクに対して例外処理(例えば強制終了など)を実行するようにしてもよい。
【0168】
以上説明したように、プログラム実行保護プロセッサ(61)によれば、プログラム実行保護プロセッサ(61)の内部に設けられたプライベートページ(50)に対するアクセスを、第1プログラム識別子(71)に基づいてアクセス制御情報(72)の各アクセス条件(73)を満たすか否かによって制限するようになっている。このため、プログラムの実行が中断された際に暗号化などの処理負荷をかけずに、タスクの実行環境を外部からの不正なアクセスから保護することができる。
【0169】
さらに、プログラム証明書(80)に基づき、予め指定したプログラムコードを実行する他のタスクからプライベートページ(50)上の保護されたプログラムコードやデータに対するアクセス制御を行うことで、タスク間の通信を安全かつ高速に行うことができる。
【0170】
なお、上述した第1の実施形態および第2の実施形態において、暗号情報取得手段(4)が、暗号化されたプログラムコードを復号するための復号鍵が暗号化された暗号情報を取得し、復号化手段(5)が、暗号情報取得手段(4)によって取得された暗号情報を鍵ペア生成手段(3)によって生成された秘密鍵をもって復号化し、復号化して得られた復号鍵で暗号化されたプログラムコードを復号するように構成したが、別実施形態として、暗号情報取得手段(4)が、暗号化されたプログラムコードよりなる暗号情報を取得し、復号化手段(5)が、暗号情報取得手段(4)によって取得された暗号情報を鍵ペア生成手段(3)によって生成された秘密鍵をもって復号化し、プログラムコードを得るようにしてもよい。
【図面の簡単な説明】
【0171】
【図1】プログラム実行保護プロセッサ(1)を含むプログラム実行装置(10)のハードウェア構成を例示したブロック図。
【図2】第1の実施形態に係るプログラム実行保護プロセッサの内部構成を示すブロック図。
【図3】第1の実施形態に係るページメモリ、タスクプライベート情報メモリ、およびメインメモリのメモリマップの概念図。
【図4】第1の実施形態に係るページメモリ、タスクプライベート情報メモリ、およびメインメモリのそれぞれに記憶された情報の関連を示す関連図。
【図5】第1の実施形態に係るプログラム実行保護プロセッサにおけるタスク起動動作を示すフローチャート。
【図6】第1の実施形態に係るプログラム実行保護プロセッサにおけるプログラムコード要求動作を示すフローチャート。
【図7】第1の実施形態に係るプログラム実行保護プロセッサにおけるプライベートページのアクセス判断動作を示すフローチャート。
【図8】第1の実施形態に係るプログラム実行保護プロセッサにおけるタスク終了動作を示すフローチャート。
【図9】第1の実施形態に係るプログラム実行保護プロセッサにおける不要情報消去動作を示すフローチャート。
【図10】第2の実施形態に係るプログラム実行保護プロセッサを含むプログラム実行保護装置の構成を示すブロック図。
【図11】第2の実施形態に係るタスクプライベート情報メモリのメモリマップの概念図。
【図12】第2の実施形態に係るタスクプライベート情報メモリに記憶されるアクセス制御情報のデータ構成図。
【図13】第2の実施形態に係るプログラム証明書のデータ構成図。
【図14】第2の実施形態に係るプログラム実行保護プロセッサにおけるプログラム証明書検証動作を示すフローチャート。
【図15】第2の実施形態に係るプログラム実行保護プロセッサにおけるプライベートページのアクセス判断動作を示すフローチャート。
【符号の説明】
【0172】
1、61 プログラム実行保護プロセッサ
2 タスク実行手段
3 鍵ペア生成手段
4 暗号情報取得手段
5 復号化手段
6 ページメモリ
7、62 タスクプライベート情報メモリ
8、63 アクセス判断手段
9 ページメモリレジスタ
10、60 プログラム実行装置
11 メインメモリ
13 実行タスクレジスタ
14 プロセッサ状態レジスタ
30 ページ
31 タスク管理情報格納領域
32 タスク識別子
33 ページテーブル
40、70 タスクプライベート情報格納領域
41 タスク管理情報ポインタ
42 秘密鍵
43 公開鍵
44 タスク秘密情報
50 プライベートページ
51 ページヘッダ
52 所属タスク識別子
53 タスク秘密情報
64 プログラム証明書検証手段
71 第1プログラム識別子
72 アクセス制御情報
73 アクセス条件
74 プログラム識別子
75 リソース
76 アクセス種別
77 付加条件
78 アクセス可否
80 プログラム証明書
81 プログラム識別子
82 プログラムフィンガープリント
83 証明条件情報
84 発行日時
85 有効期間
86 属性情報
87 アクセス制御情報
88 発行機関
89 署名情報

【特許請求の範囲】
【請求項1】
タスクを実行するタスク実行手段と、
タスク実行手段によって実行されるタスクからの要求に応じて、復号鍵が暗号化された暗号情報を取得する暗号情報取得手段と、
暗号情報取得手段によって取得された暗号情報を復号化し、この復号化で得られた復号鍵をもって、暗号化されたプログラムコードおよび/またはデータを復号化する復号化手段と、
タスク実行手段によって実行されるタスクからの要求に応じて割り当てられ、少なくとも復号化手段によって復号化されたプログラムコードおよび/またはデータを記憶するプライベートページを有する内部メモリと、
タスク実行手段によって実行されるタスクによる上記プライベートページへのアクセスを許可するか否かを判断するアクセス判断手段と、
を備えたことを特徴とするプログラム実行保護プロセッサ。
【請求項2】
暗号情報取得手段が、タスク実行手段によって実行されるタスクからの要求に応じて、プログラムコードおよび/またはデータが暗号化された暗号情報を取得するものであり、
復号化手段が、暗号情報取得手段によって取得された暗号情報を復号化するものである
ことを特徴とする請求項1に記載のプログラム実行保護プロセッサ。
【請求項3】
アクセス判断手段が、
タスク実行手段によって実行されるタスクが、アクセス要求されるプライベートページを割り当てられたタスクか否かに基づき、タスク実行手段によって実行されるタスクによるプライベートページへのアクセスを許可するか否かを判断するものである
ことを特徴とする請求項1または2に記載のプログラム実行保護プロセッサ。
【請求項4】
内部メモリが、
プライベートページを割り当てられたタスクを識別するための所属タスク識別子を記憶し、
アクセス判断手段が、
上記所属タスク識別子に基づき、タスク実行手段によって実行されるタスクによるプライベートページへのアクセスを許可するか否かを判断するものである
ことを特徴とする請求項1または3に記載のプログラム実行保護プロセッサ。
【請求項5】
内部メモリが、
タスクが記述されたタスクプログラムコードを識別するためのプログラム識別子と、
タスク実行手段によって実行されるタスクからプライベートページへのアクセス条件が記述されたアクセス制御情報と
を記憶し、
アクセス判断手段が、
上記プログラム識別子が上記アクセス制御情報に記述されるアクセス条件を満たすものであるか否かに基づき、タスク実行手段によって実行されるタスクによるプライベートページへのアクセスを許可するか否かを判断するものである
ことを特徴とする請求項1から請求項4のいずれかに記載のプログラム実行保護プロセッサ。
【請求項6】
タスクプログラムコードとプログラム識別子との関係を証明するプログラム証明書を検証するプログラム証明書検証手段を備えた請求項5に記載のプログラム実行保護プロセッサ。
【請求項7】
公開鍵および秘密鍵よりなる鍵ペアを、タスク毎に生成する鍵ペア生成手段を備え、
暗号情報取得手段が、鍵ペア生成手段によって生成された公開鍵をもって暗号化された暗号情報を取得するものであり、
復号化手段が、鍵ペア生成手段によって生成された秘密鍵をもって、暗号情報取得手段によって取得された暗号情報の復号を行うものである
ことを特徴とする請求項1から請求項6のいずれかに記載のプログラム実行保護プロセッサ。
【請求項8】
内部メモリは、
メモリ上の指定された情報単位それぞれに対応する、外部からの読み出し手段を有しない秘密情報格納領域を1つ以上有し、
各秘密情報格納領域は、
A.未定義値が格納されている秘密情報格納領域に、未定義値ではない値であり新たに発生させた乱数を格納する、
B.秘密情報格納領域に格納されている値を、未定義値が格納されている別の秘密情報格納領域に複写する、
C.2つの秘密情報格納領域に格納される値を比較し、この比較結果を得る、
D.メモリ上の情報単位が開放される場合に、これに対応する秘密情報格納領域に未定義値を格納する、
の処理のみがなされるものである
ことを特徴とする請求項1から請求項7のいずれかに記載のプログラム実行保護プロセッサ。
【請求項9】
タスクに対応する秘密情報格納領域に、そのタスクを表す乱数であるタスク秘密情報を格納し、
プライベートページに対応する秘密情報格納領域に、そのプライベートページを割り当てられたタスクを表す乱数であるタスク秘密情報を格納する
ことを特徴とする請求項8に記載のプログラム実行保護プロセッサ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2006−209703(P2006−209703A)
【公開日】平成18年8月10日(2006.8.10)
【国際特許分類】
【出願番号】特願2005−24561(P2005−24561)
【出願日】平成17年1月31日(2005.1.31)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】