JP4475894B2 - 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法 - Google Patents

暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法 Download PDF

Info

Publication number
JP4475894B2
JP4475894B2 JP2003282663A JP2003282663A JP4475894B2 JP 4475894 B2 JP4475894 B2 JP 4475894B2 JP 2003282663 A JP2003282663 A JP 2003282663A JP 2003282663 A JP2003282663 A JP 2003282663A JP 4475894 B2 JP4475894 B2 JP 4475894B2
Authority
JP
Japan
Prior art keywords
program
partial
memory
information
partial program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2003282663A
Other languages
English (en)
Other versions
JP2005018725A5 (ja
JP2005018725A (ja
Inventor
理恵子 浅井
幸恵 庄田
照人 廣田
好克 井藤
太一 佐藤
秀樹 松島
敏久 阿部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2003282663A priority Critical patent/JP4475894B2/ja
Publication of JP2005018725A publication Critical patent/JP2005018725A/ja
Publication of JP2005018725A5 publication Critical patent/JP2005018725A5/ja
Application granted granted Critical
Publication of JP4475894B2 publication Critical patent/JP4475894B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

本発明は、暗号化されたデータ、特にプログラムを実行又は使用するに当たって復号する暗号化データ復号装置であり、さらにいえば、機密保護を実現しながら復号を行う装置、また、そうした復号方法に関する。
従来、機密保護などの目的で暗号化されたデータやプログラムを、コンピュータシステム上での再生又は実行のために復号する場合は、コンピュータシステム上で復号支援プログラムを実行させる。しかし、仕様が公開されたオープンなコンピュータシステムにおいては、プログラムの解析および改変が容易である。そのため、復号支援プログラムを改変して、本来参照や改変が許されないはずの復号後プログラムを参照・改変が可能な状態にする、という不正行為も可能となってしまう。
そこで、機密保護の強化のために、復号支援プログラム自体を暗号化しておき、復号処理時には復号支援プログラムを復号してデータ復号処理を行わせる方式(特許文献1:特開平09−006232)や、復号処理開始前に復号支援プログラムの正当性をチェックする方式(特許文献2:特開平11−039156)が提案されている。これらは、復号支援プログラムの改変を防止することで、復号後のプログラムやデータの機密を保護しようというものである。
特開平09−006232号公報 特開平11−039156号公報
しかしながら、正当な復号支援プログラムを実行して復号処理を行った場合でも、復号されたプログラムやデータがコンピュータシステムのメモリにロードされた時点で、不正な割り込み等により制御が奪われると、ロードされているプログラムやデータは参照や改変が可能となり、機密を保護できなくなる。
本発明は上記課題に鑑み、暗号化プログラムやデータの復号から実行の過程における機密性を高める暗号化データ復号装置及び復号方法、更に言えば、復号されてメモリにロードされた状態にあるプログラムやデータについて、不正な参照や改変を防止したり、不正参照される内容を最小限に抑えたりすることによって機密保護を実現する暗号化データ復号装置及び復号方法を提供することを目的とする。
上記の目的を達成するために、本発明は、暗号化された形で保存されているプログラムをコンピュータシステム上での実行のために復号する暗号化データ復号装置であって、プログラムを暗号化された複数の部分プログラムの集合の形で保持している記憶手段と、前記部分プログラムの各々について、復号のタイミングを示すタイミング情報と、復号後の前記実行用メモリ空間における配置エリアを示す位置情報とからなるメモリ配置情報を生成するメモリ配置情報生成手段と、前記記憶手段から前記タイミング情報に従って部分プログラムを順次読み出して復号する復号手段と、前記復号手段によって復号された部分プログラムを前記位置情報に従って前記実行用メモリ空間内の配置エリアに配置するロード手段と、を有することを特徴とする暗号化データ復号装置を提供する。
本発明の暗号化データ復号装置は、上記のような構成であるため、実行用メモリに配置されるのはプログラムの一部のみとなり、割り込みなどを利用してメモリ上のデータを不正に参照される事態になったとしても、被害は最小限に抑制できる。また、前記メモリ配置情報における位置情報を、前記複数の部分プログラムの少なくとも一部について、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容とすれば、特定の部分プログラムが実行用メモリ上に存在する時間が短くなり、その分、不正参照されにくくなる。
また、前記メモリ配置情報のうち前記位置情報は暗号化された状態で保持されており、前記ロード手段は、前記位置情報を復号し、復号後の位置情報が示す配置エリアに復号後の部分プログラムを配置すること、としてもよい。この構成によれば、メモリ配置情報が不正参照されることで復号後の部分プログラムのロード位置が知られるという事態を防止できるので、メモリロード後のプログラムの機密性を高めることができる。
また、前記ロード手段は、配置エリアに部分プログラムをロードする際、当該配置エリアのサイズが当該部分プログラムのサイズより大きければ、サイズ差によって生じる当該配置エリアの空き領域にダミーデータを書き込むこと、としてもよい。この構成によれば、部分プログラムのうち、上書きによって消去されない部分についても、長時間メモリ上に残される事態を防止できるので、この部分が不正参照される危険性は低くなる。
また、前記ロード手段は、ある配置エリアにロードされた部分プログラムの実行が終了した時点から所定時間が経過しても当該配置エリアヘの次の部分プログラムの配置が行われない場合、当該配置エリア内に配置されている部分プログラムを消去すること、としてもよい。この構成によれば、処理の終了した部分プログラムが長時間メモリ上に残される事態を防止できるので、この部分プログラムが不正参照される危険性は低くなる。
また、暗号化処理の際に予め、前記複数の部分プログラムの少なくとも一部に、他の部分プログラムの復号処理に用いられる暗号鍵の一部又は全部を埋め込んでおく鍵埋め込み手段をさらに有し、前記復号手段は、部分プログラムを復号する場合、それ以前に復号されて前記実行用メモリ空間に配置されている1個以上の他の部分プログラムに埋め込まれた暗号鍵を取得して当該復号対象の部分プログラムを復号すること、としてもよい。この構成によれば、不正利用者がシステムの制御を奪って、特定の部分プログラムを不正参照の目的でメモリ上にロードさせようとしても、当該部分プログラムの復号に必要な暗号鍵を有する他の部分プログラムがメモリ上に存在しないため、その不正参照はできない。
なお、同様の効果を得るために、暗号化処理の際に予め、前記複数の部分プログラムの少なくとも一部に、他の部分プログラムの復号処理に用いられる暗号鍵の全部又は一部を生成するための暗号鍵生成プログラムを埋め込んでおくプログラム埋め込み手段をさらに有し、前記復号手段は、部分プログラムを復号する場合、それ以前に復号されて前記実行用メモリ空間に配置されている1個以上の他の部分プログラムに埋め込まれていた暗号鍵生成プログラムの実行によって生成された暗号鍵を用いて当該復号対象の部分プログラムを復号すること、または、暗号化処理の際に予め、前記複数の部分プログラムの少なくとも一部に、他の部分プログラムの復号処理に用いられる暗号鍵を復号するための鍵用暗号鍵を埋め込んでおく鍵用暗号鍵埋め込み手段をさらに有し、前記復号手段は、部分プログラムを復号する場合、それ以前に復号されて前記実行用メモリ空間に配置されている他の部分プログラムから取得した鍵用暗号鍵を用いて復号した暗号鍵によって当該復号対象の部分プログラムを復号すること、という構成も考えられる。
また、前記ロード手段は、最初に復号される部分プログラムの実行用メモリ空間への配置に先立って前記配置エリアの絶対アドレスを動的に決定すること、としてもよい。この構成によれば、プログラムのメモリ上ロード位置が実行のたびに変わるので、不正利用者がロード位置を推測しながらメモリの内容を観察することでプログラムの内容を不正参照しようとしても、成功する可能性は低い。
また、前記復号手段による復号処理は復号支援プログラムを用いて行われ、前記復号支援プログラムの正当性を確認する復号プログラム確認手段を更に有し、前記復号手段は、部分プログラムの復号に先立って、前記復号支援プログラム認証部に前記復号支援プログラムの正当性確認を行わせ、正当性が認証された場合にのみ部分プログラムの復号を行うこと、としてもよい。この構成によれば、復号支援プログラムを悪用してプログラムの内容を不正参照することは不可能であり、復号処理時の機密性を向上させることができる。
また、割込みが検知された場合に、不正アクセス防止処理として、前記実行用メモリ空間上に配置済みの部分プログラムを消去する不正アクセス防止手段を更に有すること、としてもよい。この構成によれば、割り込みを悪用してプログラムの内容を不正参照することは不可能となる。これに加え、前記不正アクセス防止手段は、前記不正アクセス防止処理実行の際に、ダミープログラムを実行させること、とすることもできる。また、前記不正アクセス防止手段は、正当なプログラム逆解析のための割込み発生位置の登録を予め受け付けておき、検知された割込みが当該登録された割込み発生位置で発生していた場合は、前記不正アクセス防止処理を実行しないこと、とすれば、不正参照防止のために正当な割り込みまでが禁止されるという不都合は生じない。
また、前記部分プログラムの各々について、前記記憶手段における格納位置を示す格納位置情報を暗号化した状態で保持する格納位置情報保持部を更に有し、前記復号手段は、前記格納位置情報保持部から読み出して復号した格納位置情報に従って、前記記憶手段から部分プログラムを読み出し、復号すること、としてもよい。この構成によれば、正当な部分プログラムだけが実施される。すなわち、不正利用者が記憶装置に格納しておいた不正参照用のプログラムを正当な部分プログラムの代わりに実行させる、という形での不正参照を防止できる。これに加え、前記格納位置情報が正当なものか否かを判定する格納位置情報認証部を更に有し、前記復号手段は、前記格納位置情報認証部によって格納位置情報が正当と判定された場合に、前記記憶手段から部分プログラムを読み出し、復号すること、としてもよい。
また、暗号化された形で保存されているプログラムをコンピュータシステム上での実行のために復号する暗号化データ復号装置であって、プログラムを暗号化された複数の部分プログラムの集合の形で保持している記憶手段と、前記記憶手段から、実行対象の部分プログラムを読み出して復号する復号手段と、前記実行対象の部分プログラムの実行用メモリ空間における配置位置を動的に決定するメモリ配置決定手段と、前記復号手段によって復号された部分プログラムを、実行用メモリ空間内の前記メモリ配置決定手段が決定した配置位置に配置するロード手段と、を有することを特徴とする暗号化データ復号装置も効果的である。この構成によれば、プログラムのメモリ上配置位置が実行のたびに変わるので、不正利用者がロード位置を推測しながらメモリの内容を観察することでプログラムの内容を不正参照しようとしても、成功する可能性は低い。さらに、前記メモリ配置決定手段は、すくなくとも一部の部分プログラムについては、前期実行用メモリ空間のうち別の部分プログラムが配置済みのエリアに上書き配置されるよう前記配置位置を決定すること、とすれば効果的である。また、前記実行用メモリ空間の先頭アドレス及びサイズの少なくとも一方を、前記プログラムの実行開始前に動的に決定する実行用メモリ決定手段を更に有すること、とすれば、不正参照はさらに困難になる。また、前記メモリ配置決定手段は、ある部分プログラムの配置位置を、前期配置済みの別部分プログラムが配置されているエリアに上書き配置されるように決定する場合、最も早く前期実行用メモリ空間に配置された部分プログラムに上書きされるように前記配置位置を決定すること、又は、前記メモリ配置決定手段は、ある部分プログラムの配置位置を、前期配置済みの別部分プログラムが配置されているエリアに上書き配置されるように決定する場合、2つ以上の配置済み部分プログラムにまたがって上書き配置されるように前記配置位置を決定すること、とするのが好ましい。
また、上に述べた効果は、上記の特徴を有する暗号化データ復号装置が実行する暗号化データ復号方法や、当該復号方法をコンピュータに実行させるプログラムによっても達成することができる。また、上記の特徴を有する暗号化データ復号装置によって利用されるメモリ配置情報、暗号鍵、暗号鍵生成プログラム、鍵用暗号鍵を生成しながらプログラムの暗号化を行う暗号化プログラム生成装置も、上記の効果を得る上で有用である。
以下、本発明に関わる暗号化データ復号装置の実施の形態について、図面を参照しながら説明する。
(概要)
図1は、本発明に関わる暗号化データ復号装置の実施の形態であるプログラムローダ1とその関連装置との構成を、これらが動作するコンピュータシステム上の他装置と共に示すブロック図である。なお、本実施の形態において、暗号化データ復号装置が復号する暗号化データはプログラムとする。
本実施の形態におけるプログラムローダ1は、オペレーションシステム(以下、「OS」)からの指示に応じて、2次記憶装置Sから暗号化プログラムを読み出して復号したうえで、実行用の共有メモリM上にロードする。「ロード」とは、プログラムを実行のためにメモリ空間に配置することである。
プログラムローダ1の特徴は、本来はメモリ管理の手法であるオーバーレイを暗号化プログラムの機密保護の用途に用いる点である。オーバーレイは、プログラムサイズよりも小さいメモリにプログラムを収めるために使われる手法であり、プログラムをセグメント(以下、「部分プログラム」という)に分割しておいて、同じメモリ領域に時間をずらして配置する、というものである。本実施の形態におけるプログラムローダ1は、プログラム全体を同時に配置できるだけの大きなメモリを使用できるにも関わらず、あえてオーバーレイ技法を採用することで機密保護を実現する。すなわち、プログラムを複数の部分プログラムの集合の形で暗号化して保存しておき、プログラム実行にあたっては、この部分プログラムの単位で復号し、共有メモリMの同一領域に順次上書きする形でロードする。さらに、部分プログラムの配置位置および配置タイミングの決定にあたって秘匿性を考慮するので、その分、機密保護能力が高い。
復号及びロードの処理単位である部分プログラムは、1つのソースファイル又は、互いに関連する複数のソースファイルのグループから生成されたオブジェクトコードを指す。オブジェクトコードとは、具体的には、プログラム構成部分を意味するサブプログラム、あるいはライブラリモジュールそのものを指す。
このように、部分に分けてロードすることで、不正参照が行われても、プログラム全体の内容が把握されてしまうおそれは小さくなる。全体を参照するには、各部分プログラムがロードされる度に不正参照を繰り返さなければならないからである。
ただし、本来はメモリ資源節約を目的とするオーバーレイには、機密保護に関する配慮がない。そのため、処理の終った部分プログラムは、次の部分プログラムが上書きされるまで、そのままメモリ上に残される。また、プログラムがロードされるエリアのアドレスが固定されているため、プログラムヘのアクセスが容易に解読できてしまう。また、割込み機能を悪用したり、復号支援プログラムを改ざんしたりすれば、部分的とは言え、プログラムの不正な参照や改変も可能となる。
そこで、本実施の形態のプログラムローダ1では、オーバーレイの処理方式を、機密保護処理を考慮した形にアレンジして実行するほか、割込み機能の悪用や復号支援プログラムの改ざんチェックなどの処理も行う。
(構成)
(概要)
以下、プログラムローダ1の構成について説明する。
プログラムローダ1は、全体の処理を制御する制御部11、復号支援プログラムPを用いて暗号化部分プログラムなどの暗号化データの復号を行う復号部12、復号に先立って復号支援プログラムPの妥当性チェックを行う復号支援プログラム認証部13、復号後の部分プログラムの共有メモリM上での配置位置および配置タイミングを決定するメモリ配置定義部14、共有メモリM上で実行中の部分プログラムに対する割込みを用いた不正アクセスを防止する不正アクセス防止部15を有する。
さらに、プログラムローダ1は、プログラム復号処理に用いられる各種の暗号化された情報、及び、暗号鍵を保持する保持部16に加え、保持部16が保持する格納アドレス情報(詳細は後述)の認証を行う格納アドレス情報認証部17を有する。また、暗号化データ復号部12は、扱うデータの種類に応じて、格納アドレス復号部121、メモリ配置情報復号部122、部分プログラム復号部123に分かれる。
保持部16が保持する情報には、復号処理に使用される暗号鍵161、復号対象の暗号化部分プログラムの2次記憶装置Sにおける格納位置を示す情報である格納アドレス情報162、復号後の部分プログラムを共有メモリMのどの位置に配置するかを示すメモリ配置情報163がある。
格納アドレス情報162は復号対象の暗号化部分プログラムを2次記憶装置Sから読み出す際に参照されるが、暗号化された形で保持されているので、格納アドレス復号部121によって復号される。さらに、復号後は格納アドレス情報認証部17によって妥当性チェック(改ざん有無のチェック)が行われる。
図2は、格納アドレス情報162とそれが示す部分プログラムの2次記憶装置S上の格納位置との対応を示すイメージ図である。格納アドレス情報は、対応する部分プログラムの識別情報210と当該部分プログラムの2次記憶装置S上の格納位置を示すアドレス情報220とからなり、部分プログラムの個数分存在する。このうち暗号化されているのはアドレス情報220の部分である。
また、メモリ配置情報163は、復号後の部分プログラムを共有メモリM上のどの位置に配置するかを規定する情報である。このように、あらかじめ配置位置を定めておくことは、データを所定の領域に順次上書きするオーバーレイ方式を実施するための前提である。メモリ配置情報163は暗号化された形で保持されており、メモリ配置情報復号部122によって参照の際に復号される。
図3はメモリ配置情報の構成と内容の一例とを示す概念図である。メモリ配置情報は、共有メモリM上に、どの部分プログラムをどのタイミング(順番)で配置するかを示す。共有メモリMの部分プログラム格納用領域は3つのエリアに分けられている。
図3に示すメモリ配置情報163は、エリア識別情報部310と部分プログラム識別情報部320とからなる。エリア識別情報部310には、いずれのエリアに関する情報かを示す識別情報が格納されており、部分プログラム識別情報部320には、エリア識別情報部310に格納された識別情報が示すエリアに配置される部分プログラムの識別情報が、配置される順番を示すデータとともに格納されている。
メモリ配置情報163は、共有メモリM内の部分プログラム格納用領域が3つのエリアに分割されていること、エリア1には3つ、エリア2には4つ、エリア3には2つの部分プログラムが順次配置されること、を示している。
図4は、プログラム実行時に、復号された部分プログラムが、メモリ配置情報163にしたがって、共有メモリM上にどのように配置されるかを示した概念図である。図4は、共有メモリM内に存在する3つの格納用エリアの各々に配置される部分プログラムを、プログラムの処理実行時間軸(横軸)に沿って示す。例えば、エリア1には、部分プログラムA,B,Cが順次配置され、時間帯t1においては、部分プログラムA(エリア1)、部分プログラムD(エリア2)、部分プログラムH(エリア3)が共有メモリM上に共存している。同じ時間帯に共有メモリMに共存する部分プログラムには、それぞれが処理の過程で他の部分プログラムの処理を呼び出すなどの形で依存関係を有するものである。
こうしたメモリ配置情報は、メモリ配置定義部14が、暗号化対象プログラムの暗号化処理に先立ってあらかじめ生成しておくものである。生成処理は従来のオーバーレイ方式において使用される同種の配置情報と基本的に同じであるが、本実施の形態では機密保護も考慮したやり方で生成される。本実施の形態における生成処理の特徴については後述する。
(主要構成部の説明)
以下、上で概要を述べた構成部のうち主要なものについて、さらに詳しく説明する。
<復号支援プログラム認証部13>
復号支援プログラム認証部13は、各種暗号化データの復号に先立って、復号支援プログラムPの正当性を認証する。具体的には、復号支援プログラム認証部13は、部分プログラム復号部123が暗号化部分プログラムを復号しようとする場合、格納アドレス復号部121が暗号化状態の格納アドレス情報を復号しようとする場合、メモリ配置情報復号部122が暗号化状態のメモリ配置情報を復号しようとする場合に、これら構成部からの要求に応じて復号支援プログラムPの認証処理を行う。復号支援プログラム認証部13は認証処理の結果を要求元に返し、認証結果が「正当(改ざん無し)」であった場合は、要求元から復号対象データを受け取って復号支援プログラムPに送り、さらには、復号処理結果を復号支援プログラムPから受け取って要求元に送る。
復号支援プログラム認証部13による認証処理は、復号支援プログラムPが以前の実行時から現在までの問に改ざんされていないかを確認するもので、判定の基準として、復号支援プログラムPのサイズ変化の有無、更新日時、あるいは復号支援プログラムPの一方向ハッシュ値などを参照する。ただし、手法はこれらに限定されず、電子署名認証技術などの技術を用いてもよい。復号支援プログラム認証部13は、この認証処理のために、復号支援プログラムPの初回実行時のサイズや更新日時情報、ハッシュ値を保持しておく。
<格納アドレス情報認証部17>
格納アドレス情報認証部17は、格納アドレス復号部121からの指示に応じて復号支援プログラムPが復号した格納アドレス情報の正当性を認証する。これは、以前の実行時から現在までの間に格納アドレス情報が改ざんされていないかを確認するものである。
格納アドレス情報認証部17は、一方向ハッシュ関数等、一般に用いられている認証技術を用いて格納アドレス情報の認証処理を行い、結果を格納アドレス復号部121に返す。格納アドレス情報認証部17は、この認証処理のために、各格納アドレス情報について必要な情報(初回復号時のハッシュ値、認証処理に用いる情報全般)を保持しておく。
<制御部11>
制御部11は、復号すべき部分プログラムをOSから指示されると、対象の部分プログラムの識別情報を格納アドレス復号部121に送って、当該部分プログラムの格納アドレスを取得、復号するように指示する。そして、格納アドレス復号部121から復号後の格納アドレスが出力されてくると、これを部分プログラム復号部123に渡し、当該部分プログラムを復号するよう指示する。また、それと平行して、メモリ配置情報復号部122に処理対象の部分プログラムの識別情報を送り、当該部分プログラム用のメモリ配置情報を復号するよう指示する。
そして、制御部11は、部分プログラム復号部123から出力されてきた復号後の部分プログラムを、メモリ配置情報復号部122から出力されてくるメモリ配置情報に従って、共有メモリM上のエリアのいずれかにロードする。なお、メモリ配置情報は、図3に示すとおり、部分プログラムの識別情報とエリアの識別情報とからなっていて、各エリアの絶対アドレス値を示す情報は含まれていない。各エリアの絶対アドレス値については、制御部11が保持しておくものとする。
また、制御部11は、上記処理の過程で復号支援プログラムPや格納アドレス情報に問題が生じた場合(正当性が認証できなかった場合)、他構成部に対して処理停止を指示するとともに、その時点で復号済みの各種データ(部分プログラム、メモリ配置情報、格納アドレス情報)を消去するための処理を行う。
<メモリ配置定義部14>
メモリ配置定義部14は、復号処理において上記のように参照されるメモリ配置情報163を、部分プログラムの暗号化処理時に生成して、保持部16に格納しておく。部分プログラムの暗号化は、暗号化プログラム生成装置Cが行う。暗号化プログラム生成装置Cは、メモリ配置情報に設定された順序で各部分プログラムがメモリに配置されるように暗号化対象のプログラム(部分プログラムの集合)を実行形式に変換したうえで暗号化し、2次記憶装置Sに格納する。
まず、メモリ配置定義部14は、ヘッダ情報などから、部分プログラムのメモリ配置の決定に必要な各種情報を得る。さらには、部分プログラムの実行時の配置先である共有メモリMに関する情報(部分プログラム格納領域及びそれに含まれるエリアの数及びサイズ)など、決定時に重視すべき条件(パラメータとしてシステム管理者から指定されるもの)を得て、これら情報からメモリ配置情報を生成する。メモリ配置情報生成時にメモリ配置定義部14が参照する情報は、具体的には下記のようになる。
(1)各部分プログラムのサイズ(暗号化前、すなわち復号後のサイズ)
(2)部分プログラム間の依存関係(コールする側とコールされる側との関係、及びコール回数)
(3)各部分プログラムの秘匿性のレベル
(4)求められるパフォーマンスのレベル
このような情報を元にメモリ配置を決定する処理は、従来のオーバーレイ処理実行においても行われるものであるが、本実施の形態では、プログラムの機密保護を目的としているので、通常のオーバーレイを想定したメモリ配置の場合に比べて、特に(3)を重視し、(4)の優先度を低くする。
そこで、メモリ配置定義部14は、秘匿性の高い部分プログラムについては、こまめにロードと消去とを繰り返して、必要最小限の時間だけ共有メモリM上に配置し、処理が終れば直ちに別の部分プログラムが上書きされる、という形になるようなメモリ配置情報を生成する。部分プログラムの秘匿性のレベルについては、システム管理者が部分プログラムごとに評価し、その秘匿性の評価値をパラメータとしてメモリ配置定義部14に入力する、などの設定の仕方が考えられる。
さらに言えば、以下のようなメモリ配置情報設定方法も考えられる。すなわち、メモリ配置定義部14は、従来のメモリ配置情報決定のアルゴリズムを用いて複数パターンの候補配置情報を生成する。そして、それら複数の候補配置情報を機密保護の観点から定めた基準に従って評価し、もっとも優れたものを配置情報とする。基準としては、「秘匿性の高い部分プログラムがメモリ上に存在する時間長の予測値」が考えられる。または、メモリ配置定義部14が生成した候補配置情報をシステム管理者が参照して、その中から1つを選択してもよい。
また、同時にメモリ上に展開されている部分プログラムのサイズの合計値(一度に不正参照できるプログラムの大きさ)を小さくしたい場合は、部分プログラムがロードされるメモリのサイズを小さく設定すればよい。
なお、メモリ配置定義部14は、プログラムローダ1ではなく暗号化プログラム生成装置Cの構成要素とすることもできる。
<不正アクセス防止部15>
不正アクセス防止部15は、共有メモリM上で実行されている部分プログラムに対する、割り込みを利用した、不正なプログラム解析を防止するための処理を行う。
割り込みとは、コンピュータシステム上である処理の実行中に、より優先度の高い他イベントが発生することである。一般的に、割り込みが発生すると、実行中の処理は一時的に中断され、割り込みイベントに対応した処理が行われることになる。この機能を利用すれば、プログラムを任意の箇所で停止させ、その時点でのメモリやレジスタの内容を参照したり、あるいは変更したうえで処理を再開させたりすることが可能になる。
例えば、本プログラムローダ1が格納アドレス情報の復号を行った直後に割り込みを発生させれば、復号された格納アドレス情報を参照することができる。また、部分プログラムの復号及びロードが完了した後で割り込みを発生させれば、共有メモリM上に配置された部分プログラムの内容が参照可能になる。
不正アクセス防止部15は、こうした事態を防止するために、割り込みが検知されると、他の構成部が実行中の処理を中止させたり、共有メモリM上にロードされている部分プログラムを消去させたりする。
具体的には、不正アクセス防止部15は、割り込みを検知すると、プログラムローダ1が存在するコンピュータシステム上で実行中のプログラムの処理を中断させるトラップ命令を発行し、CPUのIDT(Interrupt Descriptor Table)を参照する。IDTテーブルには割り込み命令に対応したハンドラの情報が定義されている。本実施例では、プログラムの中止、共有メモリMの復号部分プログラム格納領域にある内容の消去といった動作を実行するためのハンドラが定義されている。そして、不正アクセス防止部15は、上記ハンドラに処理を移し、プログラムの中断、メモリ内容の消去を実行させる。
また、不正アクセス防止部15は、上記の処理と平行して、ダミープログラム実行のための処理を行う。ダミープログラムは、上記のプログラム中断及びメモリ内容の消去の間、不正割り込みを行って制御を奪おうとする者の注意をそらすためのものである。ダミープログラムの処理内容は、他プログラムの処理に影響を与えないもの、例えば、「文字列の表示のみ行う」又は「暗号化プログラムの実行結果と反対の結果を出力する」といった内容としておく。不正アクセス防止部15は、割り込みを検知すると、予め実行環境にロードされているダミープログラムをコールすることで、これを実行させる。
(動作)
次いで、上記の構成を有するプログラムローダ1の動作について、図面を参照しながら、制御部11を中心に説明する。
図5は、暗号化プログラムの復号及びロード処理におけるプログラムローダ1の動作を示すフローチャートである。ただし不正アクセス防止部15の処理については、割り込み的に実行されるものなので本図には示していない。また、プログラムの暗号化、それに平行して行われるメモリ配置情報の生成処理も本図の対象外である。
復号・ロード処理は、制御部11が、外部(OS又はシステム上で実行中のプログラム)から処理実行指示(処理対象の部分プログラムを指定する識別情報を含むもの)を受け取った時点で開始される(S501:Yes)。OSから処理実行指示が送られてくるのは、対象プログラムの起動の際、そして、起動後、復号・ロードされて実行中の部分プログラムが他の部分プログラムを呼び出した場合である。起動時の指示では、プログラムのエントリポイントを持つ部分プログラムが復号の対象となり、起動後の指示では、呼び出された部分プログラムの識別情報が処理対象となる。
指示を受けた制御部11は、指定された部分プログラムを2次記憶装置Sから読み出させるために、格納アドレス復号部121に対して指定された部分プログラムの識別情報を渡し、格納アドレス情報の復号を指示する。
格納アドレス復号部121は、制御部11からの指示を受けると、保持部16から当該部分プログラム用の格納アドレス情報(暗号化状態)を読み出すと共に(S502)、復号支援プログラム認証部13に指示して復号支援プログラムPの正当性認証処理を行わせる。
復号支援プログラムPの正当性が認証された場合(S503:Yes)、格納アドレス復号部121は、ステップS502で読み出した格納アドレス情報を、復号支援プログラムPを用いて復号する。その際、格納アドレス復号部121は、保持部16から当該情報復号用の暗号鍵を取得して、これを暗号化格納アドレス情報と共に復号支援プログラムPに送り、復号処理を行わせる(S504)。
逆に、復号支援プログラムの正当性が認証されなかった(改ざんありと判定された)場合(S503:No)、復号支援プログラム認証部13はその旨を制御部11に通知し、制御部11はOSに改ざんの検出を通知した上で、復号・ロード処理を中断する(S514)。
ステップS504で復号後の格納アドレス情報を得た格納アドレス復号部121は、これを格納アドレス情報認証部17に送り、正当性の認証処理を行わせる。格納アドレス情報認証部17は、一方向ハッシュ関数等、一般に用いられている認証技術を用いて認証処理を行い、結果を格納アドレス復号部121に返す。格納アドレス復号部121は結果を制御部11に送る。
認証処理の結果、格納アドレス情報の正当性が確認されなかった場合(S505:No)、制御部11はOSに「格納アドレスに不正がある」旨を通知して、復号・ロード処理を中止する(S514)。
一方、格納アドレス情報の正当性が認証された場合(S505:Yes)、制御部11は、復号された格納アドレス情報を格納アドレス復号部121から得て、復号・ロード対象の部分プログラムを2次記憶装置Sから読み出して復号するための処理に移る。具体的には、先ず、復号処理を実行する部分プログラム復号部123に対し、処理開始を指示する。
部分プログラム復号部123は、制御部11からの指示を受けると、先ず、指示された暗号化部分プログラムと部分プログラム復号用の暗号鍵とを2次記憶装置Sの格納位置から読み出す(S506)。そして、復号支援プログラム認証部13に指示して復号支援プログラムPの正当性認証処理を行わせ、その結果を制御部11に返す。
復号支援プログラムPの正当性が認証された場合(S507:Yes)、部分プログラム復号部123は、ステップS506で得た暗号化部分プログラムを暗号鍵と共に復号支援プログラムPに送って当該部分プログラムの復号処理を行わせる(S508)。
逆に、復号支援プログラムPの正当性が認証されなかった場合(S507:No)、その結果は部分プログラム復号部123から制御部11へ伝えられ、制御部11は、OSに「復号支援プログラムの改ざん検出」を通知し、当該部分プログラムの復号・ロード処理を中断する。また、この時点で共有メモリM上にロード済みの復号部分プログラムがあれば、それを消去し、さらに、復号された格納アドレスも消去させる(S514)。
部分プログラムの復号処理を終えると、部分プログラム復号部123は、復号した部分プログラムを制御部11に出力する。制御部11は、これを共有メモリ空間M上に配置するための処理を行う。具体的には、先ず、制御部11はメモリ配置情報復号部122に指示して、保持部16が保持する暗号化メモリ配置情報を暗号鍵と共に読み出させる(S509)。
メモリ配置情報復号部122は、復号支援プログラムPの正当性認証処理を復号支援プログラム認証部13に行わせる。
復号支援プログラムPの正当性が認証された場合(S510:Yes)、メモリ配置情報復号部122は、暗号化状態のメモリ配置情報を暗号鍵とともに復号支援プログラムPに送って復号処理を行わせ、復号後のメモリ配置情報を制御部11に返す(S511)。制御部11は、復号されたメモリ配置位置情報に基づいて、ステップS508で得た復号後の部分プログラムを共有メモリM上に配置する(S512)。
ステップS510で復号支援プログラムPの正当性が認証されなかった場合(S510:No)、メモリ配置情報復号部122は、その旨を制御部11に通知する。制御部11は、ステップS508で復号された部分プログラムを消去して、処理を中断する(S514)。なお、この時点でメモリ空間上にロード済みの部分プログラムがあれば、それも消去する。
以上の処理は、対象プログラム全体の処理が終了するまで繰り返される(S513:Yes)。
(まとめ)
上記の通り、本実施の形態におけるプログラムローダ1は、復号対象の暗号化プログラムに関して、部分プログラムの単位で分けて復号を行い、復号した部分プログラムは、機密保護を考慮して設定されたメモリ配置情報に従ってメモリ上の所定エリアに上書き配置する、というオーバーレイ方式を採用することで、プログラム全体が不正参照されることを防止している。さらに、以下のような処理を行うことで、機密保護の厳密化を図っている。(1)個々の部分プログラム復号のたびに復号支援プログラムの正当性をチェックすることで、復号支援プログラムの改ざんによる不正をチェックする。(2)復号後の部分プログラムのメモリ配置を示すメモリ配置情報も暗号化しておくことで、復号後のプログラムの不正参照を困難にする。(3)割込み検知時は復号済みのデータ(部分プログラムなど)を消去することで、割込みを用いた不正参照を防止する。
(変形例)
以下、上記の実施の形態に関して考えられる6つの変形例について説明する。
(変形例1)
上記の実施の形態では、不正アクセス防止部15が、割り込み発生を常に不正なものと判断して、処理停止と復号済みデータの消去とが行われているが、割り込みの中には正当なものもある。そこで、本変形例では、正当な割り込みについては認めるよう処理を行う。
本変形例における暗号化データ復号装置全体の構成については、上記実施の形態と同じであり、不正アクセス防止部の処理内容が部分的に異なるのみである。よって構成図は省略するが、区別のために、以下、「不正アクセス防止部15’」と言う。
本変形例における不正アクセス防止部15’は、正当なデバッガのための割り込みを認めることで、割り込みの不正使用によるプログラムの逆解析を防止する一方で、正当な用途である不良箇所調査などのためのデバッガに関連する割り込みについては可能とする。デバッガは不良調査のために、プログラムの処理を所望の位置で停止させて(ブレークして)、その状態でのメモリの内容を参照したり書き換えたりできるようにする機能である。
ブレークによるプログラム停止は、ブレークを発生させるブレークポイントを予め設定しておき、処理がブレークポイントに到達するたびに、割り込みが発生させられてプログラムが停止させられる、という形で行われる。またブレークポイントにおいてプログラムを停止させる前提となる条件を詳細に設定することもできる。しかし、上記実施の形態における不正アクセス防止部15の処理方式では、OSがブレークのための割り込みを発生させた時点でプログラムが停止されるので、不良調査はできない。
そこで、本変形例での不正アクセス防止部15’は、デバッガに関わる割り込み(ブレーク用割り込み)とそれ以外の割り込みとを下記のような手順で区別する。
不正アクセス防止部15’は、暗号化対象のプログラムが暗号化プログラム生成装置Cによって実行形式に変換された後、これが暗号化される前の段階で、正当な権限を有する利用者から、実行形式プログラムに対するブレークポイントの設定を受け付ける。そして、設定したブレークポイントの位置情報(行番号、関数名、アドレス等で表されるもの)を保持しておく。
そして、プログラムの復号及びロードの段階において、不正アクセス防止部15’は割り込みを監視する(不正アクセス防止部15と同じ)。そして、プログラムの実行途中で割り込みが発生すると、発生位置を、保持しているブレークポイント位置情報に照会する。そして、発生位置がブレークポイント位置情報で予め設定されていたブレークポイントの位置に一致していれば、実施の形態で述べたようなメモリ内容の消去などの処理は行わず、利用者に実行を続けさせる。
逆に、予め設定されていた位置と異なる位置で割り込みが発生していた場合、不正アクセス防止部15’は、不正アクセス防止部15と同様に、プログラムの実行を中断して、メモリMの部分プログラムなどの復号済みデータを消去するための処理を行う。
(変形例2)
次に、メモリ配置情報の機密保護をさらに厳密に行う変形例について説明する。
上記の実施の形態では、いったん生成されたメモリ配置情報は、対象となる暗号化プログラムの復号及びロードが行われる度に毎回同じ内容の情報が使用される。つまり、ある暗号化プログラムの実行時、これを構成する部分プログラムの各々が、毎回、同じタイミングでメモリ空間上の同じアドレスに配置される。そのため、メモリ空間上のデータを監視しながらプログラム繰り返し実行することで、メモリ配置情報の内容が解読されてしまう可能性も皆無とはいえない。メモリ配置情報が解読されると、これを利用して不正参照が行われることになる。
そこで、本変形例では、メモリ配置情報が解読されることを防止し、それによって、暗号化プログラムの機密保護をより確実に行えるようにする。そのために、本変形例では、プログラムの実行のたびに、これを構成する部分プログラムのメモリ配置位置が動的に変化するように、メモリ配置情報を生成する。
具体的には、共有メモリM内の3つのエリアそれぞれに割り当てる絶対アドレスの値が、プログラム実行のたびに切り替わるようにメモリ配置情報を設定する。
本変形例における暗号化データ復号装置全体の構成については、上記実施の形態と同じであり、メモリ配置定義部の処理内容が部分的に異なるのみである。よって装置全体の構成図は省略するが、区別のために、以下、本変形例におけるメモリ配置定義部については、「メモリ配置定義部14’」とする。
図6は、メモリ配置定義部14’がエリアのアドレス切り替えのために保持する3パターンのエリアアドレス情報601、602、603を示す。各エリアアドレス情報は、エリアとこれに割り当てられる絶対アドレスとの組み合わせで成り、エリア識別子部610と絶対アドレス値部620とから成る。
エリアアドレス情報に相当する情報は、上記実施の形態では制御部11が1種類だけ(例えば、エリアアドレス情報601)保持して使用していた。本変形例では、メモリ配置定義部14’が3パターンのエリアアドレス情報から1つを選び、メモリ配置情報生成時に制御部11に渡しておく。制御部11は、部分プログラムの復号及びロード時、選ばれたパターンのエリアアドレス情報の内容に従って各エリアの絶対アドレスを決定し、さらには、各エリアの絶対アドレスとメモリ配置情報とから、復号後の部分プログラムの共有メモリMにおける配置アドレスを得る。
メモリ配置定義部14’が、エリアアドレス情報のパターン選択を行うタイミングは、プログラムの実行指示がプログラムローダ1に入力されたタイミングでもよいし、プログラムの復号及びロード処理が開始されて、最初の部分プログラムのロードを行うタイミングでもよい。
なお、エリアの絶対アドレスの切り替えは、必ずしも、上記のようなパターン切り替えという形で行う必要はない。絶対アドレスを「ずらす」形でメモリ配置位置を変えることもできる。
図7は、「ずらす」形での切り替えに使用されるエリアアドレス情報を示す。エリアアドレス情報700は、各エリアと絶対アドレス値とを1対1で対応づけているが、各絶対アドレス値が変数(ずらし幅)α、β、γを含んでおり、メモリ配置定義部14’は、これら変数の値を変更することで、各エリアの絶対アドレスを切り替える。
変数の値は乱数発生プログラム(乱数発生関数、タイマの保持する時刻情報を用いるもの、など)で任意の値に決定すればよいが、「あるエリアに対応する変数(ずらし幅)の値と当該エリアに配置される部分プログラムのサイズとの和は、当該エリアのサイズ以下である」という条件に従って決定する。これは、ずらすことによって、部分プログラムがエリア外にはみ出す形で配置される事態を防止するためである。
なお、メモリ配置定義部14’は、直前のプログラム実行時のエリアアドレスの内容を記憶しておき、それを参照することで、各エリアの絶対アドレスが必ず直前の実行時のアドレスと異なるようにすること、としてもよい。
なお、こうしたエリアアドレスの変更は、上記のようにメモリ配置定義部14’が保持する情報に従って制御部11が行うのでなく、制御部が単独で行うこともできる。
(変形例3)
次に、特定の部分プログラムが長時間共有メモリM上に配置されたままになることを防止することで、メモリ上での部分プログラムの機密保護をさらに厳密に行う、という変形例について説明する。
実施の形態の場合のように、同一エリアに部分プログラムを上書きするオーバーレイを採用しているのは、特定の部分プログラムが長時間共有メモリ上に配置されたままになっていると、その分、不正参照される危険性が高まるためである。しかし、上書きされる部分プログラムのサイズによっては、オーバーレイ方式を採用していても、処理の終った部分プログラムの一部が消去されずにメモリ上に残ってしまう。
例えば、図4に示す形で部分プログラムのメモリ配置が行われた場合、エリア1に順次配置された3つの部分プログラムのうち、最初に配置された部分プログラムAのサイズに比べ、後から上書きされた部分プログラムB、Cそれぞれのサイズがその半分しかなかったとする。すると、部分プログラムAの後半部分の内容は、部分プログラムB、Cの上書きによっては消去されず、エリア1に残ることとなる。もし部分プログラムAの後半が特に秘匿性の高い内容であれば、このように長時間配置されたままになることは機密保護の観点から好ましくない。
また、エリア3については、時間帯t1で部分プログラムHの処理は完了しているにも関わらず、時間帯t2の開始時点から次の部分プログラムIが配置されるまでの間、部分プログラムHのデータが残されてしまう。
本変形例では、1つの部分プログラムを復号してメモリ空間に配置するたびに、配置先のエリアのサイズと当該部分プログラムのサイズとの差分の有無をチェックし、エリアサイズの方が大きい場合は、エリアの空き領域部分にダミーデータ(ダミープログラム)を埋め込む(上書きする)ことで、上記の問題の解消を図る。また、ある部分プログラムの処理が完了すると、そこから経過時間を計測し、経過時間が長くなった場合には、当該エリア全体にダミーデータを上書きする。上記処理は制御部が行う(以下、実施の形態における制御部11と区別して「制御部11’」とする)。
図8は、こうしたダミーデータ埋め込み処理の概要を示すイメージ図であり、特定のエリアNにおける部分プログラムの配置、及びダミーデータの埋め込みの状況を時間経過に沿って示している。時間帯T2、T3、T5においては、それぞれで配置された部分プログラムのサイズが小さいので、エリアサイズと部分プログラムサイズとの差分にダミーデータが埋め込まれている。また、時間帯T4では、直前の部分プログラム終了後に生じる空き時間が長いため、エリア全体にダミーデータが埋め込まれている。
制御部11’は、部分プログラム復号部123が復号した部分プログラムを、メモリ配置情報に従って共有メモリM内のいずれかのエリアに配置する時点で、当該部分プログラムの復号後のサイズ(メモリ配置定義部14’がメモリ配置情報の一部として設定しておくもの)を得るとともに、配置先エリアのサイズを、共有メモリMを参照して得る。
制御部11’は、これら2つのサイズの値を比較し、エリアのサイズの方が大きければ、両サイズの差分に応じた量だけ、ダミープログラムデータをダミープログラム格納領域から読み出し、当該エリアの空き領域(部分プログラムの終端以降の領域、及び/又は、先頭より前の領域)に埋め込む。これによって、同エリアに直前に配置されていた部分プログラムのデータは完全に消去される。
空き時間に対応してのダミーデータ埋め込みは、ある部分プログラムの処理が完了した後に行われる。制御部11’は、あるエリアにロードされていた部分プログラムの処理が終了すると、当該エリア用の内蔵タイマで経過時間の計測を開始し、経過時間が所定値に達した時点で、次に当該エリアにロードされる部分プログラムの復号が行われていなければ、当該エリア全体にダミーデータを埋め込む。
これによって、同エリアに直前に配置されていた部分プログラムのデータは完全に消去される。ダミーデータの実体は、実際には実行されないプログラム、又は、実行されても意味のある処理は行わないプログラムのコードとする。
(変形例4)
本変形例においては、暗号鍵を格納する場所、及び取得のための手順について工夫することで、部分プログラムごとに機密保護を強化する。具体的には、各部分プログラムの復号用の暗号鍵を、当該部分プログラムに先立って共有メモリMに正当にロードされている別の部分プログラムから取得するようにする。
本変形例では、各部分プログラムの中に、当該部分プログラムがコールする部分プログラムの復号用の暗号鍵そのもの、又は暗号鍵を得るためのデータを埋め込んでおき、新たにコールされた部分プログラムの復号時には、コール元部分プログラムに埋め込まれた暗号鍵又は暗号鍵を得るためのデータを使用する。
<基本形>
この方式の実施様態として最も基本的なものは、以下の通りである。先ず、暗号化プログラム生成装置Cが部分プログラムを暗号化する前に、当該部分プログラムによってコールされる別の部分プログラムの暗号化に用いる暗号鍵を埋め込んだ上で暗号化し、さらに、その暗号鍵の埋め込み位置の情報を保持部16に格納しておく。
そして、部分プログラム復号の際は、部分プログラム復号部123が、復号対象部分プログラムのコール元である部分プログラムに関する埋め込み位置情報を保持部16から読み出し、その埋め込み位置情報を元に、共有メモリM上にある当該コール元部分プログラムから暗号鍵を読み出し、これを使って復号対象の部分プログラムを復号する。
例えば、不正利用者が制御を不正に奪って所望の部分プログラムをメモリ上にロードさせるためのコール命令を発行させたとする。その場合、正当なコール元の部分プログラムは共有メモリM上に存在しないため、本変形例の方式では暗号鍵が得られず、復号もできない。よって、不正利用者が望んだ部分プログラムの共有メモリMへのロードは行われず、不正参照は防止される。
<応用例>
本変形例の基本的な様態は上記の通りであるが、さらに手を加えて機密保護の厳密化を図ることもできる。そうした応用例について以下に説明する。
<応用1>
図9は、暗号化処理を行う構成部(暗号化プログラム生成装置C9)と復号処理を行う構成部(部分プログラム復号部923)とで同じ暗号鍵生成手段(鍵生成部901a、901b)を共有し、コール元の部分プログラムのコードの一部から、コール対象の部分プログラムの暗号化/復号に用いられる暗号鍵を生成する、という本例のプログラムローダ9を示す。なお、実施の形態におけるプログラムローダ1と同一の処理を行う構成については同一の参照番号を付して説明は省略する。
・暗号化時の処理
暗号化プログラム生成装置C9は、まず、各部分プログラム間の呼出関係を示す呼出関係情報を生成し、さらに各部分プログラムを実行形式に変換する。そして、呼出関係情報を参照しながら各部分プログラム用の暗号鍵を生成する。そして、この暗号鍵を用いて部分プログラムの暗号化を行う。
図10は、部分プログラム間の呼出関係を示す模式図である。
暗号化プログラム生成装置C9が、1つの部分プログラムを暗号化する処理を以下に説明する。先ず、前記呼出関係情報を参照して、当該部分プログラムを呼び出すコール元部分プログラムを検出する。そして、コール元部分プログラムの実行形式コードの一部を読み出す。そして、読み出したコードを鍵生成部901aに渡し、暗号鍵生成を指示する。鍵生成部901aは、当該コードのハッシュ値を算出し、これを暗号鍵として暗号化プログラム生成装置C9に返す。暗号化プログラム生成部C9は、この暗号鍵を用いて部分プログラムを暗号化すると、暗号化した部分プログラムに、暗号鍵生成に用いたコードの位置(当該コードのコール元部分プログラムの実行形式におけるオフセット)を示す情報を付加する。そして、2次記憶装置Sに、この暗号化した部分プログラムを格納する。
なお、1つの部分プログラムが複数の部分プログラムから呼び出される場合、当該部分プログラムは、それぞれのコール元部分プログラムのコードから得られる暗号鍵によって暗号化される。よって、1つの部分プログラムから複数パターン暗号化部分プログラムが生成されることになる。その場合は、それぞれの暗号化部分プログラムに対応するコール元部分プログラムの識別情報を付加した上で2次記憶装置Sに格納するなどして、復号処理を行う構成部が対応関係を把握できるようにしておく必要がある。ただし、複数の部分プログラムからコールされる場合でも、暗号鍵が必要なのは対象部分プログラムがメモリ上にない状況でコールされる場合のみであるから、対象部分プログラムが必ずメモリ上にある状況でこれをコールするコール元部分プログラムからは暗号鍵を生成する必要がない。
例えば、図10に示す部分プログラムHの場合、コール元である部分プログラムC、Fから暗号鍵が生成される。ただし、(1)「部分プログラムFからコールされることで部分プログラムHは復号・ロードされる」、しかも、(2)「部分プログラムCが部分プログラムHをコールする時には、すでに部分プログラムHはメモリにロード済みであることが、メモリ配置情報により規定されている」のであれば、部分プログラムH復号用の暗号鍵は部分プログラムFからのみ生成すればよく、部分プログラムCから暗号鍵を生成する必要はない。
・復号時の処理
次いで、プログラムの実行段階において、部分プログラム復号部923が、1つの暗号化部分プログラムを復号する処理を以下に説明する。まず、部分プログラム復号部923は、復号して共有メモリM上にロードすべき部分プログラムの識別情報を、そのコール元の部分プログラムの識別情報とともに制御部911から受け取る。そして、まず、2次記憶装置Sから復号対象の暗号化部分プログラムを読み出す。
そして、部分プログラム復号部923は、この暗号化部分プログラムから、暗号鍵の元になるコードの位置を示す情報を読み出すと、共有メモリMにロードされているコール元部分プログラムから、当該コード位置が示す位置のコードを読み出す。その後、鍵生成部901bに読み出したコードを渡して暗号鍵を生成させ、この暗号鍵を用いて対象の暗号化部分プログラムを復号する。復号を終えると、暗号鍵を直ちに消去する。
図11は、復号処理時の部分プログラムのメモリ配置を時間軸に沿って示す模式図である。この図に示す例では、部分プログラムHは、先にエリア1にロードされていた部分プログラムFからコールされることでエリア3にロードされる。そしてその後、エリア3にロード済みの部分プログラムHを、後からエリア2にロードされた部分プログラムCがコールする、という順序になっている。
よって、部分プログラム復号部923は、部分プログラムFから生成された暗号鍵を用いて部分プログラムHを復号し、部分プログラムCが部分プログラムHをコールした時点では、復号処理は行わない。部分プログラムCによるコール時に復号処理が不要と判定するのは、制御部911でも部分プログラム復号部923でもよい。判定は、コール先の部分プログラムの識別情報をメモリ配置情報に照会することで行ってもよいし、コール先部分プログラムがメモリM上にロード済みか否かをチェックすることで行ってもよい。
<応用2>
次に、もう1つの応用例について説明する。
図12示す本応用例の暗号化プログラム生成装置C12は、暗号化処理において、コール元部分プログラム内に、コール対象部分プログラム用の暗号鍵を取得する鍵取得プログラムを埋め込んでおく(鍵取得プログラム生成部1201、暗号化プログラム生成装置C12)。そして、復号時、部分プログラム復号部1223は、復号対象部分プログラムのコール元部分プログラムに埋め込まれた鍵取得プログラムを実行することで暗号鍵を取得し、これを使用して当該復号対象部分プログラムの復号を行う。
・暗号化時の処理
暗号化プログラム生成装置C12が、暗号化対象のプログラムを実行形式に変換した上で部分プログラムに分割するまでの処理は、既に述べた実施の形態の場合と同じである。以下、暗号化プログラム生成装置C12が、1つの部分プログラムの暗号化にともなって行う処理を説明する。
暗号化プログラム生成装置C12は、暗号化対象の部分プログラムに関して暗号鍵Kを生成する。そして、暗号鍵を予め定めた格納位置に格納し、格納位置を示す情報(アドレス、オフセット等)を保存する。この格納位置は、2次記憶装置S内の所定領域、あるいは、当該部分プログラム復号時に共有メモリM上にロードされている他の部分プログラムの中などである。そして、当該格納位置を鍵取得プログラム生成部1201に渡して、「この格納位置から暗号鍵Kを読み出して、保持部16内の所定位置(当該部分プログラム用の暗号鍵K格納に割り当てられた領域)に書き出す処理」を行う鍵取得プログラムを生成させる。
ある部分プログラムに関して上記の処理を完了した暗号化プログラム生成装置C12は、当該部分プログラムのコール元となる別の部分プログラムに鍵取得プログラムを埋め込む。埋め込み位置は、例えば、当該部分プログラムがコールされる処理の直前とする。
全部分プログラムについて、鍵取得プログラムの生成とコール元部分プログラムヘの埋め込みとを終えると、暗号化プログラム生成装置C12は、部分プログラムの暗号化を行う。
・復号時の処理
復号時の暗号鍵取得のための処理は、実施の形態の場合とほとんど同じである。部分プログラム復号部1223は、ある部分プログラムの復号指示を受けると、格納部16内の領域で、当該部分プログラム用暗号鍵Kの格納用に割り当てられた領域を参照して暗号鍵Kを読み出し、これを用いて復号を行う。当該暗号鍵Kは、既に共有メモリM上にロード済みのコール元部分プログラムに埋め込まれた鍵取得プログラムが実行されたことによって、当該領域に書き出されていたものである。なお、復号を終えた部分プログラム復号部1223は、当該領域から暗号鍵Kを消去しておく。同じ部分プログラムがまたコールされることがあるとしても、その時には、コール元に埋め込まれた鍵取得プログラムが同じ領域に書き出してくれるので消去しても問題はない。
以上のようにすることで、本変形例では、保持部など所定の場所に全部分プログラム共通の暗号鍵を恒常的に保管しておく場合に比べ、暗号鍵が盗まれる危険性を小さくできる。また、ある部分プログラムに関する暗号鍵が万一盗まれても、他の部分プログラムには影響しない。さらに、各部分プログラムが、プログラム本来の正しい処理の流れの中で正当なコール元から呼び出された場合にしか復号できないようにすることができるので、不正に制御を奪った者が不正参照の目的で特定の部分プログラムをメモリにロードさせようとしても、暗号鍵が得られないので不正参照は不可能である。
<変形例4の備考>
なお、上記の説明では、ある部分プログラムの復号用暗号鍵を得るためのデータ又はプログラムがコール元の部分プログラムに埋め込まれていることとしているが、それ以外の場所に埋め込む方法も考えられる。例えば、コールのタイミングで共有メモリ上に存在する部分プログラム(コール元以外のもの)のいずれかに暗号鍵取得のためのデータ又はプログラムを埋め込んでおいてもよい。また、ある部分プログラムの実行が終って共有メモリから消去されるタイミングで、そこに埋め込まれていた暗号鍵取得のためのデータ又はプログラムのみ制御部が読み出して専用エリアに保存しておき、その後実行される部分プログラムの復号に使用する、という方式も考えられる。
なお、上記の説明では、暗号鍵を得るためのデータ又はプログラムが単一の部分プログラム(コール元)に埋め込まれていることとしているが、複数の部分プログラムに分けて埋め込んでおいてもよい。
例えば、暗号鍵自体を埋め込む場合、復号対象の部分プログラムがコールされる時点で共有メモリMにある複数の部分プログラムに暗号鍵を分けて埋め込んでおいて、復号時には、部分プログラム復号部がこれらを読み出し、組み合わせて暗号鍵を得る。どの部分プログラムのどの位置から読み出すか、読み出した複数の分割暗号鍵をどのような順序で組み合わせて暗号鍵とするかを示す情報は、暗号化処理時に、例えばメモリ配置定義部が別途設定しておく。
暗号鍵取得プログラムを使う場合、例えば、部分プログラムA−C−Hの順で実行される際の部分プログラムH用の暗号鍵は、以下の手順で取得することもできる。まず、部分プログラムA実行時、これに埋め込まれた暗号鍵取得プログラムは、部分プログラムH用の暗号鍵の前半部分を、保持部16内の暗号鍵格納用エリアの前半に書き込み、同暗号鍵の後半部分は部分プログラムC実行時、これに埋め込まれた暗号鍵取得プログラムによって暗号鍵格納用エリアの後半に書き込まれる。これによって、部分プログラムHコール時には、部分プログラムH用の暗号鍵は保持部に完成した形で保持されている。
なお、以上に述べた複数の方式については、矛盾が生じない限りにおいて組み合わせた形で実施することも可能である。
また、上の説明では、暗号化プログラムに暗号鍵を埋め込む処理を行う構成部(鍵生成部901a、鍵取得プログラム生成部1201)を暗号化プログラム生成部装置の一部としているが、メモリ配置定義部と同様、プログラムローダの一部としてもよい。
また、本変形例の場合、暗号化プログラム生成部装置の一部として暗号化プログラムに暗号鍵を埋め込む処理を行う構成部(鍵生成部901a、鍵取得プログラム生成部1201)とプログラムローダとを合わせたものが、本発明の暗号化データ復号装置を構成している。
(変形例5)
本変形例は、部分プログラムの暗号化/復号に用いる暗号鍵を鍵用の暗号鍵で暗号化しておくことで、機密保護を強化するというものである。さらに、鍵用暗号鍵は、各部分プログラム毎に個別のものを、プログラム暗号化処理に先立って生成しておく。これら鍵用暗号鍵は、それぞれが対応する部分プログラムからコールされる部分プログラムの暗号化/復号の際に暗号鍵の暗号化/復号に使用される。
図13は、本変形例でのプログラムローダ1bと関連する装置の構成を示すブロック図である。実施の形態における構成に、個別暗号鍵生成部1301(暗号化プログラム生成装置C13側)と暗号鍵復号部1302(プログラムローダ1b側)とが追加された構成である。
・暗号化時の処理
暗号化プログラム生成装置C13が、1つの部分プログラムを暗号化する処理を以下に説明する。先ず、暗号化プログラム生成装置C13は、個別暗号鍵生成部1301に指示して、各部分プログラムに個別の鍵用暗号鍵を生成させる。そしてこれら鍵用暗号鍵を各部分プログラムに埋め込み、それと同時に埋め込み位置を示す情報(「埋め込み位置情報」)を生成する。
次いで、暗号化プログラム生成装置C13は、部分プログラムを、プログラム暗号化用の暗号鍵(全部分プログラムに共通のもの)を用いて暗号化する。その後、変形例4で用いたのと同じ呼出関係情報を参照して、当該部分プログラムを呼び出すコール元部分プログラムを検出する。
そして、当該コール元部分プログラムに対応する鍵用暗号鍵を用いて、部分プログラム暗号化用の暗号鍵を暗号化する。そして、暗号化した暗号鍵を、対応する部分プログラム及びコール元部分プログラムの識別情報、そして、先に生成しておいた「埋め込み位置情報」と共に保持部16に送り、暗号化暗号鍵用の領域に保持させる。
・復号における処理
復号処理は、暗号鍵復号部1302と部分プログラム復号部1323とで行う。
ある部分プログラムを復号しようとする部分プログラム復号部1323は先ず、暗号鍵復号部1302に対し、復号対象の部分プログラム及び、そのコール元部分プログラムの識別情報(制御部11から取得するもの)を通知する。暗号鍵復号部1302は、これらを元に、保持部16が各部分プログラムに対応して保持している「暗号化された暗号鍵」及び「鍵用暗号鍵の埋め込み位置情報」の組の中から、当該復号対象およびコール元の部分プログラムの組み合わせに対応するものを読み出す。
ついで、暗号鍵復号部1302は、共有メモリM上の部分プログラムのうち、上記埋め込み位置情報が示すコール元部分プログラムの所定位置から鍵用暗号鍵を読み出す。そして、この鍵用暗号鍵を用いて、復号対象の部分プログラム用の「暗号化暗号鍵」を復号して暗号鍵を得ると、これを部分プログラム復号部1323に出力する。
部分プログラム復号部1323は、復号された暗号鍵を用いて当該部分プログラムを復号する。
なお、上の説明では、部分プログラム暗号化処理に用いる暗号鍵を共通とし、それを暗号化する鍵用暗号鍵のみを部分プログラム毎に別々のものとしたが、暗号鍵自体についても部分プログラム毎に個別の内容とすることにしてもよい。
また、上の説明では、個別暗号鍵生成部1301、埋め込み位置情報を生成する構成部、暗号化暗号鍵や埋め込み位置情報を保持部16に格納する処理を行う構成部を暗号化プログラム生成部装置の一部としているが、メモリ配置定義部と同様、プログラムローダの一部としてもよい。
また、本変形例の場合、暗号化プログラム生成部装置の一部である、個別暗号鍵生成部1301、埋め込み位置情報を生成する構成部、暗号化暗号鍵や埋め込み位置情報を保持部16に格納する処理を行う構成部と、プログラムローダとを合わせたものが、本発明の暗号化データ復号装置を構成している。
(変形例6)
本変形例は、部分プログラムの共有メモリM上に配置する際、プログラム配置エリア内で配置位置を動的に決定するものである。この変形例の場合、メモリ配置情報に従って配置位置が固定されている実施の形態の場合と異なり、部分プログラムは実行のたびに異なる位置に配置されるので、メモリ上にロードされた部分プログラムの不正参照や改ざんの危険性を小さくでき、機密保護は厳密なものとなる。
(構成)
図14は、本変形例でのプログラムローダ1cを示すブロック図である。実施の形態におけるプログラムローダ1と共通の構成に関しては同じ参照番号を付加してある。プログラムローダ1cの構成上の特徴は、メモリ配置情報復号部152の代わりにメモリ配置決定部140を有し、メモリ配置情報の代わりにメモリ管理情報160を保持する点である。
メモリ配置決定部140は、ある部分プログラムが呼び出されてメモリM上に配置される際に、制御部11からの指示に応じて当該部分プログラムのメモリ配置位置を決定し、制御部11に伝える。さらに、メモリ上の各部分プログラムのメモリ配置位置を管理するメモリ管理情報の生成および更新を行う。以下、プログラム配置の具体例を見ながら、メモリ配置決定部140の処理内容をさらに詳しく説明する。
図15は、プログラム実行時に、復号された部分プログラムが共有メモリM上のプログラム配置エリア150にどのように配置されるかを示す概念図である。メモリ配置決定部140は、新たに配置しようとする部分プログラムを配置できるだけの大きさのある空きエリアをプログラム配置エリア150内で探し、そうした空きエリアがあれば、当該空きエリアのアドレスを配置位置として制御部11に通知する。一方、そうした空きエリアが存在しない場合、既にプログラム配置エリア150内に配置されている部分プログラムの配置エリアのアドレスを制御部11に通知し、新たな部分プログラムを配置済み部分プログラムに上書きさせる。
図16は、図15に示すように配置される部分プログラムに関して、順次、メモリ配置決定部140によって生成又は更新されるメモリ管理情報160の内容を示す図である。メモリ管理情報160は、対象の部分プログラムを示す識別情報1601、部分プログラムの格納位置(その先頭のアドレス)を示す先頭アドレス1602、サイズ1603、何番目に共有メモリM上に配置されたかを示す配置順1604の項目から成る。メモリ配置決定部140は、新たに配置される部分プログラムに関しては新規のメモリ管理情報を生成し、上書きされる部分プログラムに関するメモリ管理情報は消去するので、メモリ管理情報はプログラム配置エリア150上に現在配置されている部分プログラムと同じ数だけ存在する。
図15を見ると、先ず、プログラム配置エリア150に部分プログラムA、B、Cが順次配置される(図15(a))。これに応じて、メモリ配置決定部140は、これら部分プログラムに対応するメモリ管理情報を順次生成する(図16(a))。なお、図では、最初に配置される部分プログラムAの配置位置をプログラム配置エリア150の先頭としているが、先頭に固定はしない。先頭に固定すると、最初の部分プログラムとその後続の部分プログラムのいくつかについては必然的に、実行のたびにほぼ同じ位置に配置されることになり、配置位置を実行のたびに動的に変化させて不正参照を困難にする、という本変形例の目的が達成されないからである。よって、最初の部分プログラム配置時は、乱数に基づいて決めたオフセット分ずらすなどして、配置位置がプログラム配置エリア150の先頭に固定されることを防ぐ。
図15(a)の状態から、部分プログラムCから部分プログラムDが呼び出される。この時点で、配置領域上には部分プログラムDを配置できるだけの大きさの空きエリアがないため、部分プログラムDが、この時点でメモリM上に存在する時間が最も長い部分プログラムAに上書きされる形でメモリ配置されるように、メモリ配置決定部140は、部分プログラムDのメモリ配置位置を決定する。すなわち、部分プログラムDのメモリ上での先頭位置を部分プログラムAのそれと同じ値に決定する。図15(b)は、そうしたメモリ配置に従って部分プログラムDが配置された状態を示す。部分プログラムDのサイズは大きいため、その後半は部分プログラムBの前半部分にもかかっている。なお、この時点で、メモリ配置決定部140は部分プログラムA、Bに関するメモリ管理情報を消去し、部分プログラムDに関するメモリ管理情報を生成する。
その後も、メモリ配置決定部140は、部分プログラムE(図15(c))、部分プログラムF(図15(d))、部分プログラムG(図15(e))の順番でメモリ配置位置を決定する。それに応じて、メモリ管理情報160も更新し、図16(2)、図16(c)に示す内容に順次更新していく(図16(b)は図15(c)に対応、図16(c)は図15(e)に対応)。
上書きの形でメモリ配置する場合は、常に図15(b)のように、最も長くメモリ上にある部分プログラムの先頭位置から上書きされるようにメモリ配置を決定するとは限らず、図15(d)に示すように、部分プログラムの途中の位置から上書きされるように配置位置を決定する場合もある。これは、1回の上書きで、複数の部分プログラムが(完全に又は部分的に)消去されるようにするためである。図15(d)では、部分プログラムDよりもサイズの小さい部分プログラムFを部分プログラムDの途中位置から上書きすることで、部分プログラムEの前半も上書きされるようにしている。
こうすることで、例えば、図15(d)でメモリMの内容が不正参照されたとしても、完全な形で参照できる部分プログラムは部分プログラムFのみとなる。もし、部分プログラムFを部分プログラムDの先頭位置から上書きしていれば、部分プログラムFに加えて部分プログラムEも完全な形で参照されていたはずである。図15(d)のような上書き処理の要否及び上書き開始位置については、メモリ配置決定部140は、部分プログラムDおよび後続の部分プログラムEのプログラム配置エリアにおける位置、上書き配置する部分プログラムFのサイズから判断する。
なお、上記の処理を行うために、メモリ配置決定部140は、制御部11からメモリ配置処理対象の部分プログラムの識別情報とサイズとを得る。また、メモリMにおけるプログラム配置エリアの先頭アドレスおよびサイズの情報を予め保持しておく。
(動作)
次いで、部分プログラムのメモリ配置決定におけるプログラムローダ1c(特にメモリ配置決定部140)の動作について説明する。
図17は、ある部分プログラムのメモリ配置決定の処理の流れを示すフローチャートである。なお、同図に示す処理はプログラムローダ1cによるプログラムの復号、メモリ配置処理の一部であり、図5に示した実施の形態におけるプログラムローダ1によるステップS509〜S511の処理に代わるものである。
先ず、ある部分プログラムのロード要求を受け付けた制御部11からメモリ配置決定部140に対し、メモリ配置決定の要求が当該部分プログラムの識別情報及びサイズと共に送られる(S1701)。なお、この要求に先立って、制御部11は、当該部分プログラムの2次記憶装置Sからの読み出し、復号を終えているものとする。
メモリ配置決定部140は、メモリ管理情報160のうち配置済み部分プログラムのサイズ1603及び先頭アドレス1602の情報を参照して、プログラム配置エリア150内の空き領域の位置やサイズをチェックし、これを制御部11から得た部分プログラムのサイズと比較して、当該部分プログラムを配置できるだけの空き領域があるか否か判定する(S1702)。
充分な大きさの空き領域が存在する場合(S1703:Yes)、メモリ配置決定部140は制御部11に当該空きエリアのアドレスを通知し(S1704)、当該部分プログラム用のメモリ管理情報を生成する(S1708)。メモリ管理情報160のうち、識別情報1601とサイズ1603については制御部11から通知された情報をそのまま設定し、先頭アドレス1602としては、制御部11に通知したアドレスを設定する。メモリ配置決定部140は、内蔵するカウンタで配置した部分プログラムの数をカウントし、そのカウンタ値を用いて配置順1604に値を設定する。
充分な大きさの空き領域が存在しない場合(S1703:No)、メモリ配置決定部140は、メモリ管理情報160のうち配置順1604の情報を参照して、現在メモリ上にある部分プログラムのうち最も早くメモリ配置された部分プログラム(配置順1604の値が最小のもの)を消去対象の部分プログラムと判定する(S1705)。そして、この消去対象部分プログラムの配置されたエリアのアドレスを制御部11に通知する(S1706)。
新たに配置される部分プログラムのサイズが消去対象部分プログラムのサイズより大きい場合(図15(b)参照)、制御部11に通知されるのは、消去対象部分プログラムの先頭アドレスとなる。一方、新たに配置される部分プログラムのサイズが消去対象部分プログラムのサイズ以下である場合(図15(d)参照)、制御部11に通知されるのは、消去対象部分プログラムが配置されたエリアの途中の位置を示すアドレスとなる。これは、上で説明したように、1つの部分プログラムのロードで既にメモリ上にある部分プログラムが複数上書きされるようにするためである。このアドレスの値は、新たに配置される部分プログラムが、消去対象の部分プログラムとその後続の部分プログラム(図15(4)では部分プログラムD、E)との境界をまたぐことになるような値とし、これは、消去対象の部分プログラムの終端アドレス、その後続の部分プログラムの先頭アドレス、新たに配置される部分プログラムのサイズから求めることができる。
さらにメモリ配置決定部140は、新たに配置された部分プログラム用のメモリ管理情報を生成するとともに(S1708)、この配置によって上書きされた部分プログラムのメモリ管理情報を消去する(S1707)。
(まとめ)
このように、本変形例のプログラムローダ1cによれば、メモリ配置位置が動的に決定されるため、メモリ上にロードされた部分プログラムの不正参照や改ざんが行われる危険性を小さくでき、機密保護はさらに厳密なものとなる。
なお、上記の説明では、以前からある部分プログラムの上に新たに配置される部分プログラムを上書きすることとしたが、以前からある部分プログラムを消去した上で、消去後のエリアに新たな部分プログラムを配置してもよい。上書きでは、以前からある部分プログラムの方が新たに配置される部分プログラムよりもサイズが大きい場合、以前からある部分プログラムの一部がメモリ上に残ってしまうが、消去の上で配置する方式であれば、一部が残るという事態は防げる。ただし、この「一部が残る」ことを防止するには、新たな部分プログラムを上書きの上で、残った一部をダミーデータで上書きしてもよい。ダミーデータで上書きする範囲は、以前からある部分プログラム及び新たな部分プログラムそれぞれの先頭および終端の位置から判断できる。
また、上の説明では、プログラム配置エリアの内部でプログラム実行のたびに配置エリアを動的に変化させることとしたが、プログラム配置エリアのアドレスもプログラム実行のたびに変化させることにしてもよい。その場合は、制御部11がプログラム実行開始時にプログラム配置エリアのアドレスを決定してメモリ配置決定部に通知しておく。そうすれば、プログラム配置エリアの内容の不正参照はさらに困難となり、機密保護のレベルが向上する。
また、プログラム配置エリアのサイズに関しても、任意に設定することにしてもよい。サイズを小さくすればそれだけ、配置される部分プログラムの数は少なくなって、万が一不正参照された場合も、漏洩する情報は限定される。
また、本変形例は、「部分プログラムの配置位置が固定されることで不正参照が容易になる」という事態を防止することを目的とする点が変形例2、変形例3と共通である。そこで、本変形例とこれら変形例とを組み合わせることも可能である。すなわち、本変形例のプログラム配置エリアのアドレスを、変形例2に示す技法を用いて実行の度に変化させる。また、図15(b)、(d)に示すように元からある部分プログラムの一部が残る形で新たな部分プログラムが上書き配置される場合は、変形例3のように、上書きされずに残る部分をダミーデータで上書きする(ダミーデータで上書きする範囲は、上書きされる部分プログラムの先頭位置とサイズ、上書き配置される部分プログラムの先頭位置とサイズ、から判定できる)。
(産業上の利用分野)
本発明の暗号化データ復号装置は、実行や参照にあたって復号されるデータ全般に関して、復号処理中及び復号後の機密保護を高めるのに有用である。
(備考)
以下、これまでに記した実施の形態、及び変形例に関して、他に留意すべきことがらを述べる。
上で述べた実施の形態では、復号支援プログラムによって復号される側のプログラムのみが部分プログラムに分割されて機密保護を実現しているが、復号支援プログラムについても、同様に部分プログラムの集合の形で暗号化しておき、部分プログラム単位で復号してメモリにロード、実行させることとしてもよい。そうすれば、復号処理方式のアルゴリズムや暗号鍵の内容が、メモリ上の復号支援プログラムから読み取られてしまう危険性を低減できるので、より高度な機密保護が実現できる。
また、上で述べた実施の形態の処理に加え、各部分プログラムについて、メモリMへのロード時点と実行完了時点とでその内容を比較することで、当該部分プログラムがメモリMへのロード後、実行中に改変されていないかをチェックすることとしてもよい。そして、改変を検出した場合は、処理を打ち切って復号済みデータを消去する。
また、上記の暗号鍵は、具体的には例えばDESのような暗号化方式に用いる暗号鍵であり、通常、プログラムの一定領域に埋め込まれるかあるいはユーザには見えない部分あるいはファイルに秘匿されている、としているが、暗号方式はこれ以外のものでもよい。簡易化する方法として、単に値の排他的論理和を取る方法等でもよい。また秘匿の方法も上記のものに限定されない。
また、部分プログラム復号部、格納アドレス復号部、メモリ配置情報復号部は、まとめて単一の構成としてもよいし個別の構成としてもよい。単一の構成とする場合、復号処理の要求元が復号対象のデータの種類を示す情報をパラメータとして設定し、復号部はこれを参照してデータの種類に応じた復号処理を行うこととする。
また、プログラムを復号処理の対象として説明したが、プログラム以外のデータであってもよい。
また、部分プログラムについては、元となるプログラムをモジュールやルーチンの単位で分割することにより生成されるものとしてもよいが、DLLなどのように予め用意されている部品を組み合わせて単一のプログラムとして動作させる場合は、こうした部品を単独で、又は組み合わせて部分プログラムとしてもよい。本発明の前提は複数の部分プログラムが集合して単一のプログラムとして動作する、ということであり、部分プログラムがどのように生成されるかは本質的問題ではない。
また、実施の形態、及び変形例で示した各装置は、コンピュータによって実行されるプログラムの形で実現することもできる。そして、プログラムとして実現する場合は、その暗号化データ復号プログラム自身も暗号化部分プログラムの集合の状態で保存しておき、部分プログラム単位で復号のうえ実行する形としてもよい。
また、実施の形態、及び変形例のそれぞれに関して示した特徴的な構成は、互いが矛盾しない限り組み合わせて利用することも可能である。
本発明に関わる暗号化データ復号装置の1実施の形態であるプログラムローダの構成を、これが動作するコンピュータシステムにおいて示すブロック図である。 同実施の形態における格納アドレス情報とそれが示す部分プログラムの2次記憶装置上の格納位置との対応を示すイメージ図である。 同実施の形態におけるメモリ配置情報の構成と内容の一例とを示す概念図である。 同実施の形態において復号された部分プログラムが共有メモリ上にどう配置されるかを示した概念図である。 同実施の形態における暗号化プログラムの復号及びロード処理におけるプログラムローダの動作を示すフローチャートである。 エリアアドレス情報の例を示す図である。 別のエリアアドレス情報の例を示す図である。 ダミーデータ埋め込み処理の概要を時間経過に沿って示すイメージ図である。 ある変形例におけるプログラムローダの構成を示すブロック図である。 呼出関係情報によって定義される部分プログラム間の呼出関係を示す模式図である。 復号処理時の部分プログラムのメモリ配置を時間軸に沿って示す模式図である。 ある変形例におけるプログラムローダの構成を示すブロック図である。 ある変形例におけるプログラムローダの構成を示すブロック図である。 ある変形例におけるプログラムローダの構成を示すブロック図である。 同変形例における部分プログラムのメモリ配置の例を示す図である。 同変形例におけるメモリ管理情報の内容を示す図である。 同変形例における部分プログラムのメモリ配置決定の処理の流れを示すフローチャートである。
符号の説明
1、1b、1c、9、9a プログラムローダ
11、911 制御部
12 復号部
121 格納アドレス復号部
122 メモリ配置情報復号部
123、923、1223、1323 部分プログラム復号部
13 復号支援プログラム認証部
14 メモリ配置定義部
140 メモリ配置決定部
15 不正アクセス防止部
16 保持部
17 格納アドレス情報認証部
901a 鍵生成部
1201 鍵取得プログラム生成部
1301 個別暗号鍵生成部
C、C12、C13 暗号化プログラム生成装置
M 共有メモリ
S 2次記憶装置

Claims (25)

  1. 暗号化された形で保存されているプログラムをコンピュータシステム上での実行のために復号する暗号化データ復号装置であって、
    プログラムを、暗号化された複数の部分プログラムの集合の形で保持している記憶手段と、
    前記部分プログラムの各々について、復号後の実行用メモリ空間における配置エリアを示すメモリ配置情報を読み込むメモリ配置情報読込手段と、
    前記部分プログラムを順次読み出して復号する復号手段と、
    前記復号手段によって復号された部分プログラムを、前記メモリ配置情報に従って前記実行用メモリ空間内の配置エリアに配置するロード手段と、を有し、
    前記メモリ配置情報は、前記複数の部分プログラムのうち少なくとも1つについて、当該部分プログラムの少なくとも一部が、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容となっていること、
    を特徴とする暗号化データ復号装置。
  2. 前記メモリ配置情報の少なくとも一部は暗号化された状態で保持されており、
    前記ロード手段は、前記暗号化されたメモリ配置情報を復号した後、復号された部分プログラムを配置エリアに配置すること、
    を特徴とする請求項1に記載の暗号化データ復号装置。
  3. 前記ロード手段は、部分プログラムを配置エリアに配置する際、当該配置エリアのサイズが当該部分プログラムのサイズよりも大きければ、サイズ差によって生じる当該配置エリアの空き領域にダミーデータを書き込むこと、
    を特徴とする請求項1または2に記載の暗号化データ復号装置。
  4. 前記ロード手段は、ある配置エリアに配置された部分プログラムの実行が終了した後、当該配置エリアに次の部分プログラムの配置が行われない場合、当該配置エリアに配置されている部分プログラムを消去すること、
    を特徴とする請求項1乃至3のいずれかに記載の暗号化データ復号装置。
  5. 前記復号手段は、部分プログラムを復号する場合、それ以前に復号されて前記実行用メモリ空間に配置されている1個以上の他の部分プログラムに埋め込まれた暗号鍵を取得して、当該復号対象の部分プログラムの復号に用いること、
    を特徴とする請求項1乃至4のいずれかに記載の暗号化データ復号装置。
  6. 前記ロード手段は、最初に復号される部分プログラムの実行用メモリ空間への配置に先立って、前記配置エリアの絶対アドレスを動的に決定すること、
    を特徴とする請求項1乃至5のいずれかに記載の暗号化データ復号装置。
  7. メモリ配置決定手段をさらに有し、
    前記ロード手段は、前記部分プログラムを配置した配置位置の情報を保持するメモリ管理情報保持部をさらに有し、
    前記メモリ配置決定手段は、前記メモリ管理情報保持部が保持する情報に基づいて前記メモリ配置情報を生成すること、
    を特徴とする請求項6に記載の暗号化データ復号装置。
  8. 前記メモリ配置決定手段は、実行のたびに生成する乱数に基づいて前記メモリ配置情報を生成すること、
    を特徴とする請求項7に記載の暗号化データ復号装置。
  9. 前記メモリ管理情報保持部は、前記ロード手段が前記部分プログラムを配置した順番の情報をさらに保持しており、
    前記メモリ配置決定手段は、前記順番の情報に基づいてメモリ配置情報を生成すること、
    を特徴とする請求項7に記載の暗号化データ復号装置。
  10. 前記復号手段による復号は復号支援プログラムを用いて行われ、
    前記復号支援プログラムの正当性を確認する復号プログラム確認手段をさらに有し、
    前記復号手段は、復号に先立って、前記復号プログラム確認手段に前記復号支援プログラムの正当性確認を行わせ、正当性が認証された場合にのみ復号を行うこと、
    を特徴とする請求項1乃至9のいずれかに記載の暗号化データ復号装置。
  11. 割込みが検知された場合に、不正アクセス防止処理として、前記実行用メモリ空間上に配置済みの部分プログラムを消去する不正アクセス防止手段をさらに有すること、
    を特徴とする請求項1乃至10のいずれかに記載の暗号化データ復号装置。
  12. 割込みが検知された場合に、プログラムの処理を停止させる目的で予め設定されたブレークポイントにおいて発生させられた割込みか否かを判定し、ブレークポイントにおいて発生させられた割込みではない場合に、不正アクセス防止処理として、前記実行用メモリ空間上に配置済みの部分プログラムを消去する不正アクセス防止手段をさらに有すること、
    を特徴とする請求項1乃至10のいずれかに記載の暗号化データ復号装置。
  13. 前記不正アクセス防止手段は、前記不正アクセス防止処理を実行する際にダミープログラムを実行させること、
    を特徴とする請求項11または12に記載の暗号化データ復号装置。
  14. 前記記憶手段における部分プログラムの格納位置を示す格納位置情報が正当か否かを判定する格納位置情報認証手段をさらに有し、
    前記復号手段は、格納位置情報認証手段によって格納位置情報が正当と判定された場合に、前記記憶手段から部分プログラムを読み出して復号すること、
    を特徴とする請求項1乃至13のいずれかに記載の暗号化データ復号装置。
  15. 暗号化された形で保存されているプログラムをコンピュータシステム上での実行のために復号するために、メモリ配置情報読込手段と、復号手段と、ロード手段とを備える暗号化データ復号装置が実行する暗号化データ復号方法であって、
    前記メモリ配置情報読込手段により、記憶手段に保持されている部分プログラムの各々について、ステップ復号後の実行用メモリ空間におけるメモリ配置エリアを示すメモリ配置情報を読み込むメモリ配置情報読込ステップと、
    前記復号手段により、前記部分プログラムを順次読み出して復号する復号ステップと、
    前記ロード手段により、前記復号ステップにおいて復号された部分プログラムを、前記メモリ配置情報に従って前記実行用メモリ空間内の配置エリアに配置するロードステップと、を有し、
    前記メモリ配置情報は、前記複数の部分プログラムのうち少なくとも1つについて、当該部分プログラムの少なくとも一部が、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容となっていること、
    特徴とする暗号化データ復号方法。
  16. 暗号化された形で保存されているプログラムをコンピュータシステム上での実行のために復号する暗号化データ復号装置としてコンピュータを動作させるためのプログラムであって、
    前記暗号化データ復号装置が、
    記憶手段に保持されている部分プログラムの各々について、復号後の実行用メモリ空間におけるメモリ配置エリアを示すメモリ配置情報を読み込むメモリ配置情報読込手段と、
    前記記憶手段に保持されている前記部分プログラムを順次読み出して復号する復号手段と、
    前記復号手段によって復号された部分プログラムを、前記メモリ配置情報に従って前記実行用メモリ空間内の配置エリアに配置するロード手段と、を有し、
    前記メモリ配置情報は、前記複数の部分プログラムのうち少なくとも1つについて、当該部分プログラムの少なくとも一部が、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容となっていること、
    を特徴とするプログラム。
  17. コンピュータシステム上での実行を前提としてプログラムを暗号化する暗号化プログラム生成装置であって、
    プログラムを実行用メモリ空間に配置され実行される部分プログラムの単位で分割するプログラム分割手段と、
    前記プログラムを分割された複数の部分プログラムの集合の形で暗号化するプログラム暗号化手段と、
    前記プログラム暗号化手段が暗号化した複数の部分プログラムの各々について、復号後に配置される前記実行用メモリ空間における配置エリアを示すメモリ配置情報を生成するメモリ配置情報生成手段と、を有し、
    前記メモリ配置情報は、前記複数の部分プログラムのうち少なくとも1つについて、当該部分プログラムの少なくとも一部が、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容となっていること、
    を特徴とする暗号化プログラム生成装置。
  18. 前記プログラム分割手段は、前記複数の部分プログラムの少なくとも1つに対し、他の部分プログラムの復号処理に用いられる情報を埋め込み、部分プログラムが復号される際には、それ以前に復号された他の部分プログラムに埋め込まれていた情報が用いられること、
    を特徴とする請求項17に記載の暗号化プログラム生成装置。
  19. 前記部分プログラムの復号処理に用いられる情報は、他の部分プログラムの復号処理に用いられる暗号鍵の一部または全部であること、
    を特徴とする請求項18に記載の暗号化プログラム生成装置。
  20. 前記部分プログラムの復号処理に用いられる情報は、他の部分プログラムの復号処理に用いられる暗号鍵の一部または全部を生成するための暗号鍵生成プログラムであること、
    を特徴とする請求項18に記載の暗号化プログラム生成装置。
  21. 前記部分プログラムの復号処理に用いられる情報は、他の部分プログラムの復号処理に用いられる暗号鍵を復号するための鍵用暗号鍵であって、
    部分プログラムの復号処理は、それ以前に復号されて前記実行用メモリ空間に配置されている他の部分プログラムから取得される鍵用暗号鍵を用いて復号された暗号鍵を用いて行われること、
    を特徴とする請求項18に記載の暗号化プログラム生成装置。
  22. 前記メモリ配置情報生成手段は、最初に復号される部分プログラムの実行用メモリ空間への配置に先立って、前記配置エリアの絶対アドレスを動的に決定すること、
    を特徴とする請求項17乃至21のいずれかに記載の暗号化プログラム生成装置。
  23. 前記メモリ配置情報生成手段は、実行のたびに生成する乱数に基づいて前記メモリ配置情報を生成すること、
    を特徴とする請求項17乃至22のいずれかに記載の暗号化プログラム生成装置。
  24. コンピュータシステム上での実行を前提としてプログラムを暗号化するために、プログラム分割手段と、プログラム暗号化手段と、メモリ配置情報生成手段とを備える暗号化プログラム生成装置としてコンピュータが実行する暗号化プログラム生成方法であって、
    前記プログラム分割手段により、プログラムを実行用メモリ空間に配置され実行される部分プログラムの単位で分割するプログラム分割ステップと、
    前記プログラム暗号化手段により、前記プログラムを分割された複数の部分プログラムの集合の形で暗号化するプログラム暗号化ステップと、
    前記メモリ配置情報生成手段により、前記プログラム暗号化ステップにおいて暗号化された複数の部分プログラムの各々について、復号後に配置される前記実行用メモリ空間における配置エリアを示すメモリ配置情報を生成するメモリ配置情報生成ステップと、を有し、
    前記メモリ配置情報は、前記複数の部分プログラムのうち少なくとも1つについて、当該部分プログラムの少なくとも一部が、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容となっていること、
    を特徴とする暗号化プログラム生成方法。
  25. コンピュータシステム上での実行を前提としてプログラムを暗号化する暗号化プログラム生成装置としてコンピュータを動作させるためのプログラムであって、
    前記暗号化プログラム生成装置が、
    プログラムを実行用メモリ空間に配置され実行される部分プログラムの単位で分割するプログラム分割手段と、
    前記プログラムを分割された複数の部分プログラムの集合の形で暗号化するプログラム暗号化手段と、
    前記プログラム暗号化手段が暗号化した複数の部分プログラムの各々について、復号後に配置される前記実行用メモリ空間における配置エリアを示すメモリ配置情報を生成するメモリ配置情報生成手段と、を有し、
    前記メモリ配置情報は、前記複数の部分プログラムのうち少なくとも1つについて、当該部分プログラムの少なくとも一部が、当該部分プログラムの復号より前に別の部分プログラムが配置されていた配置エリアに上書きされるような内容となっていること、
    を特徴とするプログラム。
JP2003282663A 2002-08-01 2003-07-30 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法 Expired - Lifetime JP4475894B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003282663A JP4475894B2 (ja) 2002-08-01 2003-07-30 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2002225289 2002-08-01
JP2002359072 2002-12-11
JP2003157255 2003-06-02
JP2003282663A JP4475894B2 (ja) 2002-08-01 2003-07-30 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法

Publications (3)

Publication Number Publication Date
JP2005018725A JP2005018725A (ja) 2005-01-20
JP2005018725A5 JP2005018725A5 (ja) 2007-11-22
JP4475894B2 true JP4475894B2 (ja) 2010-06-09

Family

ID=34199126

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003282663A Expired - Lifetime JP4475894B2 (ja) 2002-08-01 2003-07-30 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法

Country Status (1)

Country Link
JP (1) JP4475894B2 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1871568B (zh) 2003-08-26 2010-04-28 松下电器产业株式会社 程序执行设备
JP4548025B2 (ja) * 2004-07-14 2010-09-22 ソニー株式会社 情報処理装置および情報処理方法、並びにプログラム
JP2006238154A (ja) * 2005-02-25 2006-09-07 Sony Corp データ処理方法
JP4840782B2 (ja) 2005-03-25 2011-12-21 パナソニック株式会社 プログラム変換装置、セキュア処理装置、コンピュータプログラム及び記録媒体
JP2006303963A (ja) 2005-04-21 2006-11-02 Internatl Business Mach Corp <Ibm> 情報を管理するシステム、方法およびプログラム
US7953985B2 (en) 2005-05-09 2011-05-31 Panasonic Corporation Memory card, application program holding method, and holding program
KR20080013940A (ko) 2005-06-01 2008-02-13 마츠시타 덴끼 산교 가부시키가이샤 전자기기, 갱신 서버장치, 키 갱신장치
JP4631658B2 (ja) 2005-11-09 2011-02-16 ソニー株式会社 デジタル放送受信システム及びデジタル放送受信装置
JP4048382B1 (ja) 2006-09-01 2008-02-20 富士ゼロックス株式会社 情報処理システムおよびプログラム
JP5178500B2 (ja) * 2008-12-26 2013-04-10 三菱電機株式会社 データ処理装置及びデータ処理方法
JP2010217975A (ja) * 2009-03-13 2010-09-30 Nec System Technologies Ltd 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
EP2430584B1 (en) * 2009-05-06 2019-11-13 Irdeto B.V. Interlocked binary protection using whitebox cryptography
JP5644194B2 (ja) * 2010-06-10 2014-12-24 株式会社リコー 情報保護装置及び情報保護プログラム
JP5775738B2 (ja) 2011-04-28 2015-09-09 富士通株式会社 情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラム
JP5839659B2 (ja) * 2011-06-20 2016-01-06 ルネサスエレクトロニクス株式会社 半導体装置
JP5988473B2 (ja) * 2011-09-20 2016-09-07 株式会社Dnpハイパーテック モジュールの暗号化/復号化プログラム
JP2013250739A (ja) * 2012-05-31 2013-12-12 Fujitsu Ltd 情報処理装置、情報処理方法およびプログラム
JP5574550B2 (ja) * 2012-11-22 2014-08-20 京セラドキュメントソリューションズ株式会社 情報秘匿化方法および情報秘匿化装置
JP6343869B2 (ja) * 2013-02-20 2018-06-20 凸版印刷株式会社 携帯端末装置及び復号処理プログラム
JP6322961B2 (ja) * 2013-11-07 2018-05-16 大日本印刷株式会社 アプリケーションプログラムおよびその実行方法
US9607178B2 (en) * 2014-03-20 2017-03-28 Qualcomm Incorporated Protection against key tampering
KR101566145B1 (ko) * 2014-10-23 2015-11-06 숭실대학교산학협력단 모바일 기기 및 상기 모바일 기기의 동작 방법
JP5986279B2 (ja) * 2015-08-28 2016-09-06 ルネサスエレクトロニクス株式会社 半導体装置
JP2016028334A (ja) * 2015-09-25 2016-02-25 株式会社Dnpハイパーテック モジュールの暗号化/復号化プログラム
JP6374453B2 (ja) * 2016-08-08 2018-08-15 株式会社Dnpハイパーテック モジュールの暗号化/復号化プログラム
JP6374454B2 (ja) * 2016-08-08 2018-08-15 株式会社Dnpハイパーテック モジュールの暗号化/復号化プログラム
JP7348701B2 (ja) * 2019-05-03 2023-09-21 ライン プラス コーポレーション メモリ上に実行可能イメージをロードする方法およびシステム
JP7056785B1 (ja) * 2021-03-26 2022-04-19 三菱電機株式会社 管理システム及びプログラム

Also Published As

Publication number Publication date
JP2005018725A (ja) 2005-01-20

Similar Documents

Publication Publication Date Title
JP4475894B2 (ja) 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法
US7747870B2 (en) Apparatuses and methods for decrypting encrypted data and locating the decrypted data in a memory space used for execution
US6983374B2 (en) Tamper resistant microprocessor
JP3880933B2 (ja) 耐タンパマイクロプロセッサ及びキャッシュメモリ搭載プロセッサによるデータアクセス制御方法
JP4226760B2 (ja) マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法
US7930743B2 (en) Information processing system, information processing method, information processing program, computer readable medium and computer data signal
JP4115759B2 (ja) 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム
TWI567580B (zh) 用於防止惡意軟體執行的方法與系統
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
US20060137016A1 (en) Method for blocking unauthorized use of a software application
JPH08305558A (ja) 暗号化プログラム演算装置
JP2003131949A (ja) データ管理システム
US7603566B2 (en) Authenticated process switching on a microprocessor
JP2010217975A (ja) 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
US20150039900A1 (en) Program execution method and decryption apparatus
KR20050023248A (ko) 암호화된 데이터를 해독하고 해독된 데이터를 실행을 위해사용되는 메모리 공간에 로케이트시키는 장치 및 방법
JP2006339732A (ja) 電子情報暗号化システム、その電子情報暗号化方法、その記憶媒体及びそのプログラム
CN116724310A (zh) 用于控制对资源的访问的方法和设备
US20050210274A1 (en) Apparatus and method for intellectual property protection using the microprocessor serial number
JP2007156904A (ja) マイコンシステム
JP2002328740A (ja) ソフトウエア不正使用防止装置及びそのプログラム
MXPA00005079A (en) Method and apparatus for controlling access to confidential data

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060724

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060724

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071005

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091029

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100114

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100209

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100309

R150 Certificate of patent or registration of utility model

Ref document number: 4475894

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130319

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130319

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140319

Year of fee payment: 4

EXPY Cancellation because of completion of term