JP4125995B2 - データ変換システム - Google Patents

データ変換システム Download PDF

Info

Publication number
JP4125995B2
JP4125995B2 JP2003157254A JP2003157254A JP4125995B2 JP 4125995 B2 JP4125995 B2 JP 4125995B2 JP 2003157254 A JP2003157254 A JP 2003157254A JP 2003157254 A JP2003157254 A JP 2003157254A JP 4125995 B2 JP4125995 B2 JP 4125995B2
Authority
JP
Japan
Prior art keywords
error
executable program
program
conversion
correction code
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 - Fee Related
Application number
JP2003157254A
Other languages
English (en)
Other versions
JP2004362077A (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 JP2003157254A priority Critical patent/JP4125995B2/ja
Priority to US10/856,941 priority patent/US7444520B2/en
Publication of JP2004362077A publication Critical patent/JP2004362077A/ja
Application granted granted Critical
Publication of JP4125995B2 publication Critical patent/JP4125995B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Description

【0001】
【発明の属する技術分野】
本発明は、悪意ある解析から実行可能プログラムやデータを保護する技術に関する。
【0002】
【従来の技術】
従来から、コンピュータ上で実行されるソフトウェアに対しての解析・改竄による不正使用が問題となっている。例えば、パスワードを入力しなければ動作しないように作られているソフトウェアがあった場合に、このソフトウェアを解析しパスワードのチェックを行うコード部分を特定し、このチェックを無効にするような改竄を行えば、パスワードを入力することなしにそのソフトウェアを実行させることができる。また、暗号化されたデジタルコンテンツを視聴するためのソフトウェアには暗号を解くための暗号鍵を含んでいる場合があり、このソフトウェアが解析され暗号鍵が特定されたならば、デジタルコンテンツの不正コピーが可能となる。
【0003】
このように、ソフトウェアを解析されると、ソフトウェアやデジタルコンテンツによるビジネスが成り立たなくなるという不都合がある。
そこで、耐タンパソフトウェア技術が考えられてきた。例えば、プログラムの構造等を複雑にしたり、プログラムを冗長化したりして、逆アセンブラなどでの解析を困難にするなどである。(非特許文献1参照)
【0004】
【非特許文献1】
井上智博著「ザ・プロテクトIIプログラム解読法入門」秀和システムトレーディング、1
987年3月
【0005】
【発明が解決しようとする課題】
しかし、これらはいずれもプログラミング時の工夫として実現されるものである。すなわち、どのように難読化技術が施されたソフトウェアであっても、実行される段階ではCPUが理解可能な命令コードの列として表現され、メインメモリ上に展開されている。従って、解析者は、デバッガ等を用いてメモリを参照したり、メモリの内容を書き換えてプログラムの動作を追ったりと、何度も実行と解析を繰り返すことで、ソフトウェアを解析することが可能である。
【0006】
そこで、本発明はかかる問題点に鑑みてなされたものであり、解析者がデバッガ等を用いてソフトウェアの解析を試みても、解析行為に要する時間が長時間となり、結果としてソフトウェアの解析・改竄を防ぐことができるデータ変換システムを提供することを目的とする。
【0007】
【発明を解決するための手段】
上記課題を解決する為に、本発明のデータ変換システムは、秘匿を所望されるデータを取得するデータ取得手段と、取得された前記データに対して、誤りを発生させるという変換を行う誤り発生手段と、前記誤り発生手段による変換後のデータを出力するデータ出力手段とを備え、前記誤り発生手段は、前記変換後のデータと誤り訂正符号とに基づいて訂正できる範囲を限度とした誤りを発生させることを特徴とする。
【0008】
【発明の実施の形態】
<概要>
通常、実行可能プログラムが起動された場合、そのプログラムはローダによってメインメモリ上に配置され、プロセッサにより実行される。この場合、メインメモリ上の実行可能プログラムは、解析に対し何の防御手段も施されてはいない為、いわゆる悪意ある解析に対しては無防備な状態にある。従って、デバッガ等を使用することによりプログラムは解析され、改竄される危険性が大きい。
【0009】
本発明は、実行可能プログラムが起動された場合、ローダによってメインメモリに配置される実行可能プログラムに人為的に誤りを発生させ、悪意ある解析から保護しようとするものである。その人為的に発生させる誤りは、データ送信によって生じる誤り、いわゆるノイズと基本的に同じものである。
しかし、このノイズと本発明の誤りとはその発生過程において相違する。ノイズは、発生しないことが最良の結果であり、データ送信の過程で発生してしまう無用のものである。一方、本発明の誤りは、予め誤りを訂正するための訂正符号を作成しておき、その訂正符号によって訂正することが出来る範囲内の誤りを人為的に発生させるものである。すなわち、本来無用であるノイズを、訂正できることを前提に利用するものである。
【0010】
従って、訂正符号をどのように作成するかによって、様々な形の誤りを発生させることができ、保護しようとするプログラムの重要度によって、発生させる誤りの量と発生場所を自在に変化させることが出来るという利点がある。
また、一定の範囲内でランダムに誤りを発生させればよいことから、プログラムをメインメモリに展開する毎にその誤りを変化させることが容易であり、解析者のトライ&エラーを無駄にし、解析を困難にすることが出来るという利点がある。
【0011】
以下、本発明の実施形態に係るシステムの概要について図1及び図2を用いて説明する。
図1は、本発明の実施形態1に係るシステム及びその機能ブロックの概略図である。
各システム及びデータ等については、以下の実施形態1及び実施形態2において詳細に説明する。
【0012】
まず、本発明の中核をなすシステムは、耐タンパ実行システム9000である。
耐タンパ実行システム9000は、ローディングシステム1000と、プログラム実行システム4000と、メインメモリ1900とからなる。ローディングシステム1000と、プログラム実行システム4000とは、耐タンパ技術により保護されているが、メインメモリ1900は、外部からのアクセスが可能となっている。
【0013】
ローディングシステム1000は、いわゆるローダであって、起動された実行可能プログラム、いわゆる機械語に翻訳されたプログラムをメインメモリに展開する機能を有する。しかし、一般のローダとの相違は、起動された実行可能プログラムをそのままメインメモリに展開するのではなく、誤りを発生させた実行可能プログラムを展開する点が相違する。
【0014】
ここで、ローディングシステム1000は、誤り発生部1210を構成要素とし、誤り発生部1210は、メモリ2300上の誤り発生情報1820を基に、実行可能プログラム1810に誤りを発生させる機能を有する。誤りが発生した実行可能プログラムである変換後プログラム1910は、ローディングシステム1000によってメインメモリ1900に配置される。
【0015】
また、プログラム実行システム4000は、誤りが発生している変換後プログラム1910の誤りを訂正しながら実行する機能を有する。
プログラム実行システム4000は、誤り検出部4600と、誤り訂正部4100と、CPU4200とからなる。
誤り検出部4600は、メモリ2300上の誤り発生情報1820を参照して、メインメモリ1900上の変換後プログラムの誤り位置を検出し、誤り訂正部4100に通知する機能を有する。
【0016】
変換後プログラムの誤り位置の通知を受けた誤り訂正部4100は、メモリ2300上の誤り訂正符号1830を用いてその誤りを訂正し、訂正したプログラムをCPU4200に渡す機能を有する。CPU4200は、メインメモリ上のプログラムを自らフェッチする代わりに、誤り訂正部4100から渡されたプログラム、すなわち命令コードを実行する。
【0017】
次に、コンパイラ2000は、通常のコンパイラが有する機能、すなわちソースコードから機械語に翻訳する機能のほかに、誤り訂正符号を作成する機能を有する。
コンパイラ2000は、コンパイル部2100と、誤り訂正符号作成部2200とからなる。
【0018】
コンパイル部2100は、メモリ2300上のソースプログラムを読み込み機械語に翻訳し、その翻訳されたプログラムである実行可能プログラム1810をメモリ2300上に書き出すとともに、誤り訂正符号作成部2200に渡す機能を有する。
実行可能プログラムを渡された誤り訂正符号作成部2200は、渡された実行可能プログラムとメモリ2300上の誤り発生情報1820とから、誤り訂正符号1830を作成し、メモリ2300に書き出す機能を有する。誤り発生情報1820とは、実行可能プログラムをブロック化する場合のデータブロック長や誤り訂正符号の長さ等を示す情報であり、詳細は後述する。
【0019】
誤り訂正符号作成部2200によって作成された誤り訂正符号1830は、プログラム実行システム4000が変換後プログラム1910の誤りを訂正するときに参照されることになる。
また、誤り発生情報1820は、誤り訂正符号作成部2200によって誤り訂正符号1830が作成される際に参照されるほか、ローディングシステム1000によって実行可能プログラム1810に誤りを発生させる際や、プログラム実行システム4000によって誤りを検出する際等にも用いられる。
【0020】
図2は、耐タンパ実行システム9000の処理を表すフローである。
以下、耐タンパ実行システム9000の動作について、概略を説明する。動作の詳細については、以下の実施形態1で説明する。
耐タンパ実行システム9000は、実行可能プログラムが起動された場合に実行される。
【0021】
実行可能プログラム1810が起動されたら、ローディングシステム1000は起動された実行可能プログラム1810をメモリ1800からローディングシステム1000内の作業領域に読み出す(ステップS61)。
ローディングシステム1000内の誤り発生部1210は、作業領域内の実行可能プログラムに誤りを発生させ(ステップS62)、誤りが発生している実行可能プログラムである変換後プログラム1910をメインメモリ1900に配置する(ステップS63)。誤りを発生させる際、メモリ2300上にある誤り発生情報1820が参照される。
【0022】
メインメモリ1900に配置された変換後プログラム1910は、プログラム実行システム4000によって読み込まれ、誤り検出部4600によって発生している誤りの位置が検出される(ステップS64)。この際、メモリ2300上の誤り発生情報1820が参照される。
誤り検出部4600によって検出された誤り位置は、誤り訂正部4100に通知され、誤り訂正部よって訂正される(ステップS65)。この際、メモリ2300上の誤り訂正符号1830が参照される。
【0023】
誤りが訂正された変換後プログラムは、CPU4200に渡され、実行される(ステップS66)。
変換後プログラム1910が終了するまで、変換プログラムに発生している誤りの訂正とCPUによる実行が繰り返される(ステップS67)。
ステップS61〜ステップS63までの処理がローディングシステム1000によって行われる処理であり、ステップS64〜ステップS66までの処理がプログラム実行システムで行われる処理である。
【0024】
ここで、コンパイラ2000と耐タンパ実行システム9000とは、別の機器上で実行されるのが一般的である。耐タンパ実行システム9000は、実行可能プログラム1810、誤り訂正符号1830及び誤り発生情報1820を耐タンパ実行システム9000内のHDDやローカルメモリに格納しておき、実行する。
【0025】
尚、本発明がメインメモリ上のプログラムの解析を防止することを目的としている為、図では、説明の便宜上、メモリ上の実行可能プログラムはそのままの形で配置している。しかし、実際には、メモリ上の実行可能プログラムは暗号化されており、ローディングシステム1000は、暗号化されている実行可能プログラムを復号した後、誤り発生部1210の処理を行う。
<実施形態1>
以下、本発明の実施形態1に係るコンパイラ及び耐タンパシステムシステムについて図3〜図19を用いて説明する。
【0026】
<構成>
<コンパイラの構成>
図3は、誤り訂正符号を作成する為のコンパイラの機能ブロック図である。
コンパイラ2000は、コンパイル部2100と、誤り訂正符号作成部2200とからなる。コンパイル部2100は、高級言語で記述されたソースプログラム2010を機械語、すなわち実行可能プログラムに翻訳する機能を有するものとする。また、誤り訂正符号作成部2200は誤り発生情報1820と、コンパイル部2100が作成した実行可能プログラム1810とから誤り訂正符号1830を作成する機能を有する。
【0027】
<耐タンパシステムの構成>
耐タンパ実行システム9000は、ローディングシステム1000と、プログラム実行システム4000とからなる(図1参照)。
以下、ローディングシステム1000と、プログラム実行システム4000の構成について説明する。
【0028】
<ローディングシステムの構成>
図4は、本発明の実施形態1に係るローディングシステム1000の機能ブロック図である。
ローディングシステム1000は、データ読込部1100と、データ変換部1200と、データ書出部1300とからなる。
【0029】
ここで、データ読込部1100は、実行可能プログラム読込部1110と、誤り発生情報読込部1120からなり、ローディングシステム1000で必要なデータをメモリ1800から読み込む機能を有する。
実行可能プログラム読込部1110は、メモリ1800上に存在する暗号化されている実行可能プログラム1810をローディングシステム1000内の作業領域に読み込んだ後、読み込んだ暗号化された実行可能プログラムを復号する機能を有する。また、誤り発生情報読込部1120は、同様に、メモリ上の誤り発生情報1820をローディングシステム1000内の作業領域に読み込む機能を有する。
【0030】
尚、誤り発生情報1820については、図6で説明する。また、メモリ1800上の誤り訂正符号1830は、ローディングシステム1000では必要としないが、耐タンパ実行システム9000で使用する情報である為、記載してある。データ変換部1200は、誤り発生部1210からなり、誤り発生部1210は誤り発生情報読込部1120によって読み込まれた誤り発生情報1820に基づいて、実行可能プログラム1810に誤りを発生させる機能を有する。この誤り発生部1210が発生させる誤りについては、図6で説明する。
【0031】
データ書出部1300は、変換後プログラム書出部1310からなり、変換後プログラム1910をメインメモリ1900に書き出す機能を有する。変換後プログラム1910とは、誤り発生部1210によって誤りを発生させた実行可能プログラム1810をいう。
<プログラム実行システムの構成>
図5は、本発明の実施形態1に係るプログラム実行システムの機能ブロック図である。
【0032】
プログラム実行システム4000は、誤り検出部4600と、誤り訂正部4100と、CPU4200とからなる。
誤り検出部4600は、メインメモリ1900上の変換後プログラム1910に発生している誤り位置を、メモリ1800上の誤り発生情報1820を参照し、検出する機能を有する。この際、誤り発生情報内の誤り位置情報を参照する。検出した誤り位置は、誤り訂正部4100に通知される。誤り位置情報については、図7で説明する。
【0033】
誤り検出部4600から誤り位置を受け取った誤り訂正部4100は、変換後プログラム1910に発生しているその誤りを、メモリ1800上の誤り訂正符号1830を参照し訂正する機能を有する。また、誤りを訂正された変換後プログラムをCPUに渡す機能を有する。
誤り訂正部4100から、誤りが訂正された変換後プログラムを渡されたCPU4200は、誤りが訂正された変換後プログラムを実行する機能を有する。
【0034】
<データ>
以下、耐タンパ実行システム9000が用いる主なデータについて図6〜図9を用いて説明する。
図6は、誤り発生情報の構成及び内容例を示す。
誤り発生情報1820は、データブロック長1821と、誤り訂正符号長1822と、誤りビット数1823と、誤り位置情報3820とにより構成される。
【0035】
ここで、データブロック長1821とは、実行可能プログラム1810に誤りを発生させる単位である1データブロックのビット長であり、誤り訂正符号長1822とは、1データブロックのデータの誤りを訂正することができる誤り訂正符号のビット数である。また、誤りビット数1823とは、1データブロックのデータ内に発生させることができる誤りの最大ビット数を示す。
【0036】
例でいうと、実行可能プログラムの32ビットの1データブロック1824中に1ビットの誤りを発生させることができ、この1データブロックに発生させた誤りは6ビットの訂正符号1825で訂正できることを表す。誤りを発生させるとは、誤りを発生させようとするビットの値を反転させることを言う。
図7は、誤り位置情報の構成例及び内容例を示す。誤り位置情報3820は、誤り発生情報1820の一部を構成する情報である。
【0037】
誤り位置情報3820は、誤りを発生させる領域の情報である。この誤り位置情報38201つで、1つの領域を指定することとなる為、複数の連続していない領域に誤りを発生させる場合には、この誤り位置情報3820は誤りを発生させる領域の数分必要となる。
誤り位置情報3820は、開始アドレス3822と、領域サイズ3823とにより構成される。
【0038】
ここで、開始アドレスとは誤りを発生させる領域の先頭アドレスをいい、領域サイズ3823とは、誤りを発生させる領域の大きさをいう。
例でいうと、開始アドレス「C」から、領域サイズ「D−C」(アドレスDからアドレスCを引いた値)の領域内を、32ビットのデータブロックで分割し、各データブロック毎に1ビット以下の誤りを発生させることをいう(図6参照)。「C」、「D−C」については、図8で説明する。
【0039】
図8は、耐タンパ実行システムの入力データの構成例である。
実行可能プログラム2500は、ヘッダ部2031と、誤り発生情報部2035と、誤り訂正符号部2036と、実行コード部2032と、データ部2033と、リロケーション情報部2034とにより構成される。
これらのデータは、耐タンパ実行システムで必要なデータであり、ローディングシステム1000によってメインメモリに配置される。
【0040】
ここで、ヘッダ部2031は、当実行可能プログラムの全体に関する情報、例えばプログラムサイズ、各部の先頭アドレス、各部のサイズ等で構成されている。実行コード部2032は、プログラムの命令で構成されており、データ部2033は、プログラムで使用するデータで構成されている。
また、リロケーション情報部2034は、メインメモリに配置する場合の再配置情報で構成されている。
【0041】
誤り発生情報部2035は、図6と図7の誤り発生情報で構成されている。また、誤り訂正符号部2036は、誤り訂正符号1830で構成されており、誤り訂正符号1825の集合である。
図左のA〜Eは、先頭からの相対アドレスを表す。図9のB、C、Dも同様である。
【0042】
尚、本実施形態で誤りを発生させることが出来る領域である誤り発生可能領域2590は、実行コード部2032、データ部2033、リロケーション情報部2034とし、誤り訂正符号部2036は含まないものとする。従って、この誤り発生可能領域2590内にデータブロック1824が存在することになる。
ここで、図7の補足説明をする。開始アドレス3822「C」は、実行コード部2032の実行可能プログラム2500の先頭からのオフセットアドレスである。また、「D」は実行コード部の後ろに位置するデータ部2033のオフセットアドレスであるから、領域サイズ3823「D−C」の値は、実行コード部の領域のサイズとなる。
【0043】
図9は、実行コード部と誤り訂正符号部の関係を表す図である。
この例では、実行コード部2032は、32ビットの命令で構成されており、1命令が1データブロックとなっている。また、誤り訂正符号部2036は、6ビットの訂正符号で構成されている。
この最初のデータブロック「命令(1)」の誤り訂正符号は、「符号(1)」であり、誤り訂正符号部2036の最初に配置されている。次のデータブロック「命令(2)」の誤り訂正符号「符号(2)」は、「符号(1)」の次に配置されている。このように、データブロックと誤り訂正符号は、それぞれ連続して各領域に配置されている。
【0044】
<動作>
以下、上述した構成を備えるコンパイラ2000及び耐タンパ実行システム9000の動作について図10から図12を用いて説明する。
ソースプログラムが完成したら、そのプログラムの重要度、すなわち解析・改竄を防止したいレベルに応じて、誤り発生情報1820を作成する。例として、データブロック32ビットと、ハミング符号による誤り訂正符号6ビットを使用する。この訂正符号で訂正できるビット数は1ビット以下である。従って、図6の誤り発生情報1820の例のように、データブロック長1821を32ビット、誤り訂正符号長1822を6ビット、誤りビット数1823は1ビットとする。
【0045】
また、誤り位置情報3820を指定し、実行コード部のみに誤りを発生させることとする。実行コード部のみに誤りを発生させる指定は、コンパイラに対して誤りを発生させる領域を指定することにより行うものとする。
まず、コンパイラ2000の処理について、図10を用いて説明する。
図10は、コンパイラの処理を示すフローチャートである。
【0046】
起動されたコンパイラは、メモリからソースプログラム2010を読み出し、コンパイル部2100で機械語に翻訳し、実行可能プログラム1810を作成する(ステップS50)。この実行可能プログラム1810は、誤り訂正符号作成部2200に渡される。
この時、コンパイラは、指定されたコンパイルオプション、すなわち誤りを発生させる領域指定に従って、誤り位置情報3820を作成して誤り発生情報1820に追加する(ステップS51)。具体的には、誤りを発生させる領域の先頭アドレスとその領域の大きさを求め、誤り位置情報3820の開始アドレス3822と領域サイズ3823とに設定する。
【0047】
図7の例のように、開始アドレス3822「C」とその領域サイズ3823「D−C」の誤り位置情報が作成される。
次に、実行可能プログラム1810を渡された誤り訂正符号作成部2200は、この実行可能プログラムと誤り発生情報1820を基に誤り訂正符号1830を作成する。
【0048】
誤り訂正符号作成部2200は、誤りを発生させる開始アドレス3822「C」から、32ビットずつのデータブロック1824を取り出し(ステップS53)、それぞれのデータブロックから6ビットの誤り訂正符号1825を作成する(ステップS53)。誤り訂正符号作成部は、開始アドレスから領域サイズ3823すべてのデータに対し誤り訂正符号を作成する。
【0049】
コンパイラは、ここで作成した誤り訂正符号1825を誤り訂正符号部2036に設定し、実行可能プログラム2500として、出力する(ステップS54)。
次に、実行可能プログラム2500が起動された場合のローディングシステム1000の処理について説明する。
【0050】
実行可能プログラム2500が起動された場合、ローディングシステム1000のデータ読込部1100は必要なデータを作業領域に読み込む。実行可能プログラム読込部1110によって、実行可能プログラムが読み込まれ、また、誤り発生情報読込部1120によって、誤り発生情報1820が読み込まれる。
実行可能プログラム2500の場合は、このプログラムが1つ読み込まれればよい。誤り発生情報部2035を含んでいるからである。
【0051】
データ読込部1100は、実行可能プログラム2500をローディングシステムの作業領域に読み込んだ後、暗号化されている実行可能プログラム2500の復号を行う。
必要なデータが読み込まれたら、データ変換部1200は、実行可能プログラムに誤りを発生させる。この誤り発生の処理については、図11を用い説明する。
【0052】
図11は、誤り発生部の処理のフローチャートである。
誤り発生部1210は、誤り発生情報部2035の誤り位置情報3820から誤りを発生させるべき領域を知り、誤り発生情報1820を基に誤りを発生させる。
但し、誤り発生部1210は、実行可能プログラム2500に存在するリロケーション情報部2034のリロケーション情報を参照し、リロケーションされるデータ部分には誤りを発生させない。
【0053】
実行可能プログラム2500のオフセットアドレス「C」から(ステップS10)、32ビットのデータを順に取り出し、そのデータ内の1ビットを反転させる(ステップS11)。反転させる1ビットは、ランダムに選ぶものとする。この作業をアドレス「C」から領域サイズ「D−C」3823分の領域すべてに対して行う。
【0054】
その後、データ書出部1300の変換後プログラム書出部1310は、アドレス「C」から領域サイズ「D−C」、すなわち、実行コード部2032に誤りを発生させた変換後プログラム1910を、メインメモリ1900に書き出す。
実行可能プログラムがメインメモリに配置された後、その実行可能プログラムは、プログラム実行システムによって実行される。
【0055】
以下、プログラム実行システム4000の処理について、図12を用いて説明する。
図12は、プログラム実行システムの処理のフローチャートである。
ローディングシステム1000が実行可能プログラム2500に誤りを発生させ、変換後プログラムをメインメモリ1900に配置した後、プログラム実行システム4000に制御が移される。
【0056】
制御が移されたプログラム実行システム4000は、メインメモリ上の変換後プログラムに発生している誤りを訂正しながら、その変換後プログラムを実行する。
まず誤り検出部4600が、変換後プログラム1910と誤り発生情報1820とを基に、誤りが発生している可能性があるアドレスのデータかを判断する(ステップ20)。
【0057】
誤りが発生している可能性がないアドレスならば、そのままCPU4200に渡し実行する(ステップS23)。誤りが発生している可能性があるアドレスならば、実際に誤りが発生しているか検査する(ステップS21)。
この検査によって、実際に誤りが発生していた場合は、誤り検出部4600はその誤りの発生しているデータを誤り訂正部4100に渡す。
【0058】
データを受け取った誤り訂正部4100は、誤り訂正符号1830を参照し、発生している誤りを訂正する(ステップS22)。その後、訂正したデータをCPUに渡す。データを受け取ったCPUはデータを実行する(ステップS23)。
実際には誤りが発生していなかった場合には、誤り検出部4600は、データをそのままCPUに渡す。データを受け取ったCPUはデータを実行する(ステップS23)。
【0059】
例でいえば、誤り発生情報部2035の誤り発生情報1820を参照すると、誤りは、実行コード部2032に発生している為(ステップS20)(図7、図8参照)、この実行コード部が参照された場合には、誤りが発生しているか否かの検査を行う(ステップS21)。
誤りが発生しているか否かの検査は、誤り訂正符号部2036の対応する誤り訂正符号1830により行う。
【0060】
この検査により誤りが発生していると判断された場合は、対応する誤り訂正符号により、誤りが訂正され(ステップS22)、訂正後のデータがCPUに渡され処理される(ステップS23)。この検査により誤りが発生していないと判断された場合には、そのままCPUに渡され処理される。
一方で、データ部が参照された場合には、誤りは発生していない為(図7、図8参照)、誤りが発生しているか否かの検査は行わずに、CPUに渡され処理される。
【0061】
<変形例1>
実施形態1で、実行可能プログラムに発生させる誤りは、それ自体では意味を持たないものであるが、その発生している誤りに意味ある情報を含ませておくことも可能である。
例えば、ある実行可能プログラムを実行し、その際の誤りビットを集めたものが、別の暗号化されている実行可能プログラムを実行する際の復号鍵になる場合である。
【0062】
図13は、誤りに意味を持たせる場合のシステム及びその機能ブロック図の概略図である。
図1で示したシステムとの違いは、誤り発生部1210をローディングシステム7100内に有するのではなく、コンパイラ7200内に有することである。各部の機能は、誤り訂正部7600以外は、図1のものと同様である。誤り訂正部7600の処理は、後で詳しく説明する。
【0063】
以下、動作について説明する。
まず、ソースプログラム2010に含ませる意味ある情報を、誤り発生情報1820に設定する。この意味ある情報とは、本ソースプログラムを実行した後に実行する暗号化された実行可能プログラムの復号鍵とする。
コンパイラ7200は、メモリ7300からソースプログラム2010を読み込み、コンパイル部2100で実行可能プログラムを作成する。コンパイル部2100で作成された実行可能プログラムは、誤り発生部1210と誤り訂正符号作成部2200とに渡される。
【0064】
誤り発生部1210は、コンパイル部2100から渡された実行可能プログラムに、意味を含んでいる誤りを発生させる。その際、誤り発生情報1820を参照する。その後、誤りが発生している実行可能プログラムである変換後プログラム1910をメモリ7300に書き出す。
一方、誤り訂正符号作成部2200は、コンパイル部2100から渡された実行可能プログラムを基に、誤り訂正符号1830を作成する。その際、誤り発生情報1820を参照する。その後、作成した誤り訂正符号を、メモリ7300に書き出す。
【0065】
メモリ7300に書き出された変換後プログラム1910は、暗号化され、実行するコンピュータのHDD等に配置される。誤り発生情報1820と、誤り訂正符号1830も同様に、配置される。
その後、変換後プログラム1910が起動された場合、耐タンパ実行システム7000内のローディングシステム7100は、暗号化された変換後プログラム1910を復号し、メインメモリ7400上に配置する。
【0066】
誤り検出部4600は、メインメモリ上の変換後プログラム7400を読み込み、変換後プログラムに発生している誤り位置を検出し、誤りの発生しているデータを誤り訂正部7600に渡す。
誤りの発生しているデータを渡された誤り訂正部7600は、誤りを訂正するとともに、誤りを収集し、意味ある情報である復号鍵を作成する。誤り訂正部は、この復号鍵をローディングシステムに渡す。誤り訂正部7600の処理の詳細は、図14で説明する。
【0067】
図14は、誤りを収集する場合の誤り訂正部の処理を示すフローチャートである。
誤り訂正部7600は、訂正したデータをCPU4200に渡す。データを受け取ったCPUはデータを実行する。
本実行可能プログラムの実行が終了し、次の暗号化された実行可能プログラムが起動された場合に、ローディングシステム7100は、次の暗号化された実行可能プログラムを誤り訂正部4100から受け取った暗号鍵で復号し、メインメモリ7400に配置する。
【0068】
その後、メインメモリに配置された実行可能プログラムは、プログラム実行システムにより実行される。
図14は、誤りを収集する場合の誤り訂正部の処理を表すフローチャートである。
まず、誤り訂正部7600は、その内部の作業領域にデータブロック長1821(図6参照)と同じ大きさの誤り保存領域を持ち、0クリアしてあるものとする。
【0069】
誤り検出部4600から誤りの発生しているデータを受け取った誤り訂正部7600は、受け取ったデータに対応する誤り訂正符号1830を参照し、その誤りを訂正する(ステップS41)。
その訂正した誤りの位置に対応する誤り保存領域のビットをONにする(ステップS42)。
【0070】
実行可能プログラムの誤りをすべて訂正した時点で(ステップS43)、復号鍵は完成する。
その後、完成した復号鍵をローディングシステムに渡す。
<変形例2>
図3で、誤り訂正符号を作成する為のコンパイラの機能ブロック図を示した。図3のコンパイラは、ソースプログラムから実行可能プログラムに翻訳すると同時に、誤り訂正符号を作成するものである。
【0071】
本変形例は、既存のコンパイラにより作成された実行可能プログラム対して、誤り訂正符号を作成する為のツールの例である。
本誤り訂正符号作成ツールを使用することにより、図3のコンパイラでサポートされていない高級言語で作成されているソースプログラムについても、従来のコンパイラで実行可能プログラムを作成しておくことにより、誤り訂正符号1830を作成することができるようになる。また、既にある実行可能プログラムについても、再コンパイルすることなしに誤り訂正符号1830を作成することができるようになる。
【0072】
図15は、誤り訂正符号作成ツールの機能ブロック図である。
誤り訂正符号作成ツール2800は、誤り訂正符号作成部2200のみからなる。図3のコンパイラ2000が、ソースプログラムから実行可能プログラムを作成する機能と、誤り訂正符号を作成する機能を合わせ持つのに対し、誤り訂正符号作成ツール2800は、誤り訂正符号を作成する機能のみを有する点が異なる。
【0073】
また、誤り訂正符号作成ツール2800は、従来のコンパイラを使って作成された実行可能プログラムを使用する点が異なる。
尚、誤り訂正符号作成部2200の機能は、図3のものと同様の機能を有する。
<変形例3>
図5で、本発明の実施形態に係るプログラム実行システムの機能ブロック図を示した。図5で示したプログラム実行システムは、誤りが実行可能プログラムの特定の領域、すなわち誤り位置情報3820で指定した領域、に発生しているものを実行する為のシステムである。
【0074】
本変形例は、誤り発生可能領域2590の全領域に誤りが発生している場合の、プログラム実行システムの例である(図8参照)。
図16は、誤り発生可能領域の全領域に誤りを発生させた場合のプログラム実行システムの機能ブロック図である。
プログラム実行システム4500は、図5のプログラム実行システム4000が有する誤り検出部4600を有しない。誤り発生可能領域の全領域に誤りが発生している変換後プログラムを実行する為のプログラム実行システムであることから、誤りの位置を検出する必要がないためである。すなわち、誤り発生可能領域の先頭から順に誤りを訂正しながら実行することになる。
【0075】
尚、誤り訂正部4100とCPU4200は図5のものと同様の機能を有する。
また、誤り発生情報1820に誤り位置情報3820が含まれていない場合も、誤り発生可能領域2590のすべての領域に誤りを発生させることになる。
<変形例4>
図8で、耐タンパ実行システムの入力データの構成例を示した。図8は、本システムで必要とするデータを1つにまとめた例である。
【0076】
しかし、耐タンパ実行システムで必要なデータの内、誤り発生情報と誤り訂正符号は、必ずしもメインメモリ上に配置されている必要はなく、キャッシュ等の外部メモリでもよい。
図17は、耐タンパシステムで必要とするデータがそれぞれ別に存在する例である。
【0077】
実行可能プログラム1810は、通常のコンパイラの出力結果であるところの実行可能プログラムの構成である。実行可能プログラム1810は、ヘッダ部2031と、実行コード部2032と、データ部2033と、リロケーション情報部2034とにより構成される。図左のX〜Zは、先頭からの相対アドレスを表す。
【0078】
各部の内容は、図8のものと同様である。
<変形例5>
図9で、実行コード部と誤り訂正符号部の関係を示した。図9では、データブロックと誤り訂正符号は、それぞれ連続して実行コード部2032と誤り訂正符号部2036に配置されている。しかし、データブロックは連続している必要はなく、また、誤り訂正符号も連続している必要はない。
【0079】
図18は、データブロックと誤り訂正符号の配置例である。
データ2580は、データブロックとその誤り訂正符号を連続したアドレスに配置した例である。図8の実行可能プログラム2500で考えると、誤り訂正符号部2036と実行コード部2032が分かれずに、アドレスBからアドレスDの間に、データブロック1824と誤り訂正符号1825が交互に配置されることになる。
【0080】
この場合、データブロックとそれに対応する誤り訂正符号とを一度に読み込める利点がある。
<変形例6>
図12で、プログラム実行システムの処理フローを示した。これは、データブロック中であれば、誤りが発生しているビットがどの位置のビットでもよい場合である。
【0081】
しかし、誤りを発生させるビットの位置を、データブロック中の特定の位置に限定することもできる。
図19は、データブロック中のOPコードに誤りを発生させた場合のプログラム実行システムの処理フローである。
これは、発生させる誤りのデータブロック内での位置をOPコード部分とし、その誤りの検出をOS(オペレーティングシステム)にさせようというものである。
【0082】
この場合は、32ビット固定長の機械語命令のうち、先頭1バイトのOPコードに誤りを発生させる。その誤りの発生させ方は、あるOPコードが未定義命令、又は、特定の命令になるように誤りを発生させる。
プログラムの実行は、通常の実行システムと同様に行う。
OPコード部分に誤りを発生させて未定義命令とした場合には、命令例外の時(ステップS30)に制御が渡される割り込み処理の中で誤りを訂正し(ステップS31)、CPUに訂正後の命令が渡され処理される(ステップS32)。
【0083】
OPコード部分に誤りを発生させて特定の命令とした場合には、その命令の時は必ず割り込みが行われるようにしておき、割り込み処理の中で同様の誤り訂正を行う。
<実施形態2>
以下、本発明の実施形態2に係るコンパイラ及び耐タンパシステムについて図20〜図23を用いて説明する。
【0084】
<概要>
図20は、本発明の実施形態2に係るシステム及びその機能ブロックの概略図である。
実施形態1との違いは、2つある。
1つ目の相違点は、実施形態1では、実行可能プログラムを起動する前に、誤り訂正符号を作成しておく必要があったが、実施形態2では、誤り訂正符号をあらかじめ作成しておく必要がない点である。実施形態2では、誤り訂正符号をローディングシステム内で作成するからである。
【0085】
2つ目の相違点は、実施形態1では、誤り発生情報をあらかじめ決定し、メモリ上に作成しておく必要があったが、実施形態2では、誤り発生情報はローディングシステムがコンピュータの性能、プログラムの重要度、実行の回数等に応じて、自動で決定する点である。
コンパイラについては、実施形態2では特別なものは必要ない。実行可能プログラムの実行に際し、実行する実行可能プログラムのみを必要とし、実行に際し前もって誤り訂正符号を作成しておく必要がないからである。従って、ソースプログラム2010は通常のコンパイラ2001でコンパイルし、実行可能プログラム1810を作成しておけばよい。
【0086】
プログラム実行システム6000は、図1の実施形態1のプログラム実行システム4000とほぼ同じである。異なるのは、メモリ1800ではなく耐タンパ実行システム9500内の誤り発生記憶部5400にある誤り発生情報を参照することと、メモリではなくメインメモリ1900上の誤り訂正符号を参照することである。ただし、誤り発生情報記憶部5400と誤り訂正符号1830は、キャッシュ等のメモリ上に置いてもよいため、プログラム実行システム4000との実質的な相違はない。
【0087】
以下、実施形態2について実施形態1との相違点である、ローディングシステムについて説明する。
<構成>
図21は、本発明の実施形態2に係るローディングシステム5000の機能ブロック図である。
【0088】
ローディングシステム5000は、データ読込部5100と、データ変換部5200と、データ書出部5300と、誤り発生情報記憶部5400と、誤り発生情報決定部5500と、誤り発生情報を決定する為の情報記憶部5600とからなる。
図4の実施形態1との違いを以下に示す。
【0089】
データ読込部5100は、実行可能プログラム読込部1110のみで構成されており、誤り発生情報読込部1120を有していない点が異なる。これは、ローディングシステム内部に誤り発生情報記憶部5400を有しているため読み込む必要がないからである。
データ変換部5200は、誤り発生部1210のみではなく、誤り訂正符号作成部2200とで構成されている点が異なる。これは、ローディングシステムで、誤り訂正符号を作成するからである。
【0090】
データ書出部5300は、変換後プログラム書出部1310のみではなく、誤り訂正符号書出部5320とで構成されている点が異なる。ローディングシステムで作成した誤り訂正符号を出力するためである。
それぞれの部の有する機能は、実施形態1と同様である。
次に、実施形態2にのみ存在する誤り発生情報記憶部5400と、誤り発生情報決定部5500と、誤り発生情報を決定する為の情報記憶部5600について説明する。
【0091】
誤り発生記憶部5400には、誤り発生情報1820が記憶されている。
誤り発生情報決定部5500は、実行システムの性能を基に、誤りを発生させる領域を示す誤り発生情報を決定する機能を有する。
誤り発生情報を決定する為の情報記憶部5600は、誤り発生情報を決定する為の情報が記憶してある。誤り発生情報を決定する為の情報については、図22で説明する。
【0092】
<データ>
誤り発生記憶部5400に記憶されている誤り発生情報1820は、実施形態1のデータである図6、図7と同様である。
図22は、誤り発生情報を決定する為の情報の構成及び内容例を示す。
誤り発生情報を決定する為の情報5610は、CPU性能5611と、誤り発生領域5612とで構成される。
【0093】
ここで、CPU性能5611とは、実行可能プログラム1810を実行するコンピュータのCPUの性能である。また、誤り発生領域5612とは、誤りを発生させる領域を示す。
<動作>
実行可能プログラム1810が起動されると、実行可能プログラム読込部1110は、メモリ上の実行可能プログラムをローディングシステム5000の作業領域に読み込む。
【0094】
読み込んだ実行可能プログラムはデータ読込部5100によって復号された後、誤り発生部1210と誤り訂正符号作成部2200に渡される。
実行可能プログラムを受け取った誤り発生部1210は、誤り発生情報記憶部5400上の誤り発生情報1820を参照し、誤りを発生させる。この処理は、実施形態1の誤り発生部の処理と同じである。
【0095】
また、実行可能プログラムを受け取った誤り訂正符号作成部2200は、誤り発生情報記憶部5400上の誤り発生情報1820を参照し、誤り訂正符号を作成する。この処理は、実施形態1のコンパイラの行う処理と同じである。
誤り発生部1210によって誤りが発生している変換後プログラム1910は、変換後プログラム書出部1310によってメインメモリ1900に書き出される。また、誤り訂正符号作成部2200で作成された誤り訂正符号1830は、誤り訂正符号書出部5320によってメインメモリに書き出される。
【0096】
メインメモリに変換後プログラムと誤り訂正符号が書き出された後、プログラム実行システム6000によって変換後プログラムが実行される。
ここで、誤り発生情報決定部の処理である誤り発生情報記憶部5400上の誤り発生情報1820の決定方法について説明する。この誤り発生情報1820は、誤り発生部1210と誤り訂正符号作成部2200とによって参照される。
【0097】
図23は、誤り発生情報決定部の処理を示すフローチャートである。
耐タンパ実行システム9500は、CPU性能を切り替えることができる機器であるものとする。また、本誤り発生情報決定部の処理が行われるのは、CPU性能の切り替え処理が行われた時である。
誤り発生情報決定部5500は、実行環境のCPU性能を取得する(ステップS70)。そのCPU性能値を基に、誤り発生情報を決定する為の情報5610を参照し、誤りを発生させる領域を確定し(ステップS71)、誤り発生情報1820を書き換える。
【0098】
例でいえば、CPU性能が1.8GHzだった場合は、図7の誤り発生位置情報の開始アドレスは「C」で、領域サイズは「D−C」のままである。CPU性能が2.66GHzであった場合には、図7の誤り発生位置情報の開始アドレスは「C」で、領域サイズは「E−C」となる。
<補足>
以上、本発明に係るシステムについて実施形態に基づいて説明したが、このシステムを部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
(1)図22では、誤り発生情報を決定する為の情報5610は、CPU性能と誤りを発生させる領域とを対応させているが、CPU性能と単位データ長あたりの誤りの数等としてもよい。また、プログラムの重要度と単位データ長あたりの誤りの数等としてもよい。この場合、プログラムの重要度に応じた解析防止レベルを取得する手段が必要である。例えば、実行可能プログラムのヘッダ部にその情報を設定しておく等である。
(2)実施形態で示した各システムの各機能を実現させる為の各制御処理(図1等参照)をCPUに実行させる為のプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ICカード、光ディスク、フレキシブルディスク、ROM等がある。流通、頒布されたプログラムは、機器におけるCPUで読み取り可能なメモリ等に格納されることにより利用に供され、そのCPUがそのプログラムを実行することにより実施形態で示した各システムの各機能が実現される。
(3)実施形態のメモリ1800は、キャッシュメモリ等のローカルメモリ、記憶媒体等でもよい。
(4)実施形態2の誤り発生情報記憶部5400と誤り訂正符号1830は、キャッシュ等のメモリにあってもよい。
(5)実施形態2の誤り発生情報決定部5500は、実行環境のCPU性能を基に誤り発生情報1820を決定しているが、実行可能プログラムの重要度等を基に誤り発生情報を決定してもよい。この場合、例えば、実行可能プログラムのヘッダ部に、プログラムの重要度を示す情報を含ませておく等して、誤り発生情報決定部5500に通知する必要がある。
【0099】
また、実施形態2では、誤り発生情報決定部の処理が行われるのは、CPU性能の切り替え処理が行われた時としているが、実行可能プログラムの重要度等を基に誤り発生情報を決定する場合は、その実行可能プログラムの実行前に行うなど、適時に行う必要がある。
(6)図7では、誤りを発生させる領域を指定することとしているが、誤りを発生させるデータブロックの実行可能プログラム内での位置を示すアドレステーブルでもよく、また、アドレスを算出する計算式などでもよい。また、データブロック中の誤りを発生させる位置でもよく、例えば、機械語の命令コード部分を指定してもよい。
(7)実施形態において、誤り発生部1210は、データブロック内に誤りを発生させる際に、誤りを発生させるビットをランダムに選択することとしている(図11の説明参照)。ここで言うランダムとは、実行可能プログラムが起動される場合、毎回異なるルールで誤りを発生させることをいう。また、同一の実行可能プログラムが起動される場合も、前回に起動された時と異なるルールで誤りを発生させることをいう。
【0100】
しかし、実行可能プログラムが起動される場合に、毎回同じルールで誤りを発生させてもよく、また、同一の実行可能プログラムが起動される場合も、毎回同じルールで誤りを発生させてもよい。
さらに、誤りを発生させる場合に、マスクを利用して特定のビットを反転させることとしてもよい。
【0101】
また、誤りを発生させる場合に、誤りビット数1823に示されたビット数分のビットを必ず反転させる必要はなく、誤りビット数1823に示された数以下であれば、反転させるビットの数をランダムに決めることが出来る。
ここで言うランダムとは、データブロックによって反転させるビットの数を変えることや、実行可能プログラムによって反転させるビットの数を変えることをいう。また、同一の実行可能プログラムであっても、起動される毎に反転させるビットの数を変えてもよい。またさらに、同じビット数分反転させることとしてもよい。
【0102】
尚、誤りを発生させるデータブロックに対し、誤りは必ず発生させなければならないわけではなく、発生させなくてもよい。
(8)実施形態では、誤り発生情報を作成し、それに基づいて誤りを発生させる等しているが、予め固定ルールを定めておき、誤りを発生させる等してもよい。
(9)実施形態では、実行可能プログラムのみを暗号化することとしているが、誤り発生情報1820や誤り訂正符号1830等も暗号化することとしてもよい。
(10)誤りを発生させる範囲のデータが、リンカやリロケーション情報部2034の情報によって、コンパイラの出力とは異なった状態でメインメモリ上に配置される場合には、ローディングシステム1000や誤り検出部4600では、メインメモリ上のアドレスと対応する誤り訂正符号が分かるようにしておく必要がある。
(11)実施形態1では、誤り訂正符号1830は、コンパイル部2100が作成した実行可能プログラム1810に対して作成されることとしているが、リンク後のプログラムに対して誤り訂正符号を作成することとしてもよい。
(12)実施形態2では、ローディングシステムがメインメモリから読み込んだ実行可能プログラムに対して、誤り訂正符号を作成することとしているが、リロケーション情報部2034の情報によってリロケートされたプログラムに対して、誤り訂正符号を作成することとしてもよい。
【0103】
【発明の効果】
以上説明したように本発明に係るデータ変換システムは、秘匿を所望されるデータを取得するデータ取得手段と、取得された前記データに対して、誤りを発生させるという変換を行う誤り発生手段と、前記誤り発生手段による変換後のデータを出力するデータ出力手段とを備え、前記誤り発生手段は、前記変換後のデータと誤り訂正符号とに基づいて訂正できる範囲を限度とした誤りを発生させる
ことを特徴とする。
【0104】
ここで、前記データ取得手段は更に、少なくとも、データブロック長とデータブロックに発生させる誤りの許容上限となるビット数とを示す誤り発生情報を取得し、前記誤り発生手段は、前記データブロック長の範囲毎のデータに対し、前記ビット数以下のビットの値を変化させることにより、前記変換を行うこととしてもよい。
【0105】
これにより、訂正符号によって訂正できる範囲でデータに誤りを発生させることができ、データの解析・改竄を困難にすることができるようになる。また、訂正符号によって訂正できる範囲でならば、どのビットに誤りを生じさせてもよい為、データが同じでも変換後のデータは変換する毎に異なるものとすることができ、データの解析・改竄を困難にすることができる。
【0106】
ここで、前記データは、実行可能プログラムであり、前記データ取得手段は、記録媒体から実行可能プログラムと前記誤り発生情報とを読み出して取得し、前記変換後のデータは、データブロック単位に誤りを発生させた実行可能プログラムであり、前記データ出力手段の出力先は、前記実行可能プログラムを実行するCPUがアクセスするメインメモリであることとしてもよい。
【0107】
これにより、メインメモリ上に配置された実行可能プログラムに人為的に誤りを発生させることができ、実行するプログラムの解析・改竄を困難にすることができるようになる。また、同じ実行可能プログラムでも、起動されてメインメモリ上に配置される毎に、異なった誤りを発生させることが出来る為、トライ・アンド・エラーによるプログラム解析が困難になる。
【0108】
さらに、前記データ取得手段による前記取得と、前記誤り発生手段による前記変換と、前記データ出力手段による前記出力とは、前記実行可能プログラムの起動指示を受けた際に行われ、データ変換システムは更に、誤りが発生しているメインメモリ上の実行可能プログラムの誤りを訂正する為の誤り訂正符号を取得する手段と、前記誤り訂正符号を参照し前記実行可能プログラムの誤りを訂正する誤り訂正手段と、前記誤り訂正手段によって誤りが訂正された実行可能プログラムを実行するプログラム実行手段とを備えることとしてもよい。
【0109】
これにより、メインメモリ上の実行可能プログラムに発生している誤りを訂正しながら、プログラムを実行することができる為、誤りが訂正された実行可能プログラムを解析者に参照されることがなく、プログラムの解析・改竄を困難にすることができるようになる。
また、前記誤り発生手段は、前記実行可能プログラムの起動指示を受ける毎に、値を変化させる対象のビットの選択を前回の選択と異なるものとすることにより、前記変換を行うこととしてもよい。
【0110】
これにより、同一の実行可能プログラムを複数回起動する場合に、メインメモリ上に配置される変換後プログラムは、前回に起動されて配置された変換後プログラムと異なるものとなる為、解析者によるトライ・アンド・エラーによるプログラム解析が困難になる。
また、前記誤り発生手段は、実行可能プログラム中の命令コードに誤りを発生させることとしてもよい。
【0111】
これにより、機械語のOPコードが、本来とは違った機能を持つOPコードや命令例外を起こすOPコードとなる為、デバッガ等でのプログラムの解析・改竄が困難となる。また、OSの割り込み処理に機能を追加するだけで、誤りを発生させた実行可能プログラムの実行ができるようになり、開発工数が少なくてすむ。
【0112】
また、前記データ変換システムは更に、前記データ取得手段によって取得されたデータに基づいて、前記誤り訂正符号を作成する誤り訂正符号作成手段と、前記誤り訂正符号を出力する誤り訂正符号出力手段と、少なくとも、データブロック長とデータブロックに発生させる誤りの許容上限となるビット数とを示す誤り発生情報を記憶する誤り発生情報記憶手段とを備え、前記誤り発生手段は、前記データブロック長の範囲毎のデータに対し、前記ビット数以下のビットの値を変化させることにより、前記変換を行うこととしてもよい。
【0113】
これにより、プログラムの実行に際し、予め誤り訂正符号を作成して置く必要がない為、従来のコンパイラで作成した実行可能プログラムであっても、その解析・改竄を困難にすることができる。
また、前記データ変換システムは更に、所定の条件と前記誤り発生情報との対応関係を記憶する手段と、所定の条件のいずれかの条件に合致する状況を検出する手段と、前記誤り発生情報記憶手段に記憶されている誤り発生情報を、検出された状況に合致する所定の条件に対応する誤り発生情報に変更する手段とを備えることとしてもよい。
【0114】
これにより、プログラム実行時に、実行可能プログラムに発生させる誤りの量や誤りを発生させる位置等を変更することが出来る為、実行環境やプログラムの重要度に応じて、プログラム解析の困難性の度合いを変更できるようになる。
また、前記誤り発生情報は、前記データ取得手段によって取得されたデータの先頭からの相対アドレスを特定する為の誤り位置情報を含み、前記誤り発生手段は、前記誤り位置情報で特定される位置に誤りを発生させることとしてもよい。
【0115】
これにより、実行可能プログラムの任意の位置に対して誤りを発生させることができる為、実行可能プログラム内の特に秘匿性を高めたい場所に集中して誤りを発生させることできるようになる。
上記で説明したように本発明に係るプログラム実行システムは、誤りが発生している実行可能プログラムの誤りを訂正する為の誤り訂正符号を取得する手段と、前記誤り訂正符号を参照し、実行可能プログラムの誤りを訂正する誤り訂正手段と、前記誤り訂正手段によって誤りが訂正された実行可能プログラムを実行するプログラム実行手段とを備えることを特徴とする。
【0116】
ここで、プログラム実行システムは更に、実行可能プログラムの誤りの位置を検出する誤り検出手段を備えることとしてもよい。
これにより、誤りが発生している実行可能プログラムの誤りを、訂正しながら実行することができるようになる為、誤りを訂正した実行可能プログラムを解析者に参照されることがなくなり、プログラムの解析・改竄を困難にすることができるようになる。
【0117】
また、前記誤り訂正手段は更に、誤りが発生しているビットの位置又は値の情報を収集し、前記収集した誤りを所定の処理に使用することとしてもよい。
これにより、プログラムを実行するだけで、そのプログラムとは関連性のないデータをコンピュータに保存出来る為、解析者に対しそのデータの存在を秘密にできることから、そのデータを使用して行う処理の解析・改竄を困難にすることができるようになる。
【0118】
また、前記データ変換システムは更に、外部からソースプログラムを取得するソースプログラム取得手段と、前記ソースプログラム取得手段によって取得されたソースプログラムを翻訳して機械語コードを作成するコンパイル手段を備え、前記データは前記機械語コードであり、前記誤り発生手段は、前記機械語コードに対して誤りを発生させる変換を行い、前記変換後のデータは、誤りを発生させた機械語コードであることとしてもよい。
【0119】
これにより、ソースプログラムをコンパイルすると同時に実行可能プログラムに誤りを発生させることができる為、その誤りに意味ある情報を含ませて、耐タンパ実行システムにその情報を伝えることが出来るようになる。また、実行可能プログラムに誤りが発生しているため、本発明に係る耐タンパ実行システム以外の通常の実行システムでは実行できないという利点がある。
【図面の簡単な説明】
【図1】本発明の実施形態1に係るシステム及びその機能ブロックの概略図である。
【図2】耐タンパ実行システム9000の処理を表すフローである。
【図3】誤り訂正符号を作成する為のコンパイラの機能ブロック図である。
【図4】本発明の実施形態1に係るローディングシステム1000の機能ブロック図である。
【図5】本発明の実施形態1に係るプログラム実行システムの機能ブロック図である。
【図6】誤り発生情報の構成及び内容例を示す。
【図7】誤り位置情報の構成例及び内容例を示す。
【図8】耐タンパ実行システムの入力データの構成例である。
【図9】実行コード部と誤り訂正符号部の関係を表す図である。
【図10】コンパイラの処理を示すフローチャートである。
【図11】誤り発生部の処理のフローチャートである。
【図12】プログラム実行システムの処理のフローチャートである。
【図13】誤りに意味を持たせる場合のシステム及びその機能ブロック図の概略図である。
【図14】誤りを収集する場合の誤り訂正部の処理を示すフローチャートである。
【図15】誤り訂正符号作成ツールの機能ブロック図である。
【図16】誤り発生可能領域の全領域に誤りを発生させた場合のプログラム実行システムの機能ブロック図である。
【図17】耐タンパシステムで必要とするデータがそれぞれ別に存在する例である。
【図18】データブロックと誤り訂正符号の配置例である。
【図19】データブロック中のOPコードに誤りを発生させた場合のプログラム実行システムの処理フローである。
【図20】本発明の実施形態2に係るシステム及びその機能ブロックの概略図である。
【図21】本発明の実施形態2に係るローディングシステム5000の機能ブロック図である。
【図22】誤り発生情報を決定する為の情報の構成及び内容例を示す。
【図23】誤り発生情報決定部の処理を示すフローチャートである。
【符号の説明】
1000 5000 7100 ローディングシステム
1100 5100 データ読込部
1110 実行可能プログラム読込部
1120 誤り発生情報読込部
1200 5200 データ変換部
1210 誤り発生部
1300 5300 データ書出部
1310 変換後プログラム書出部
1800 2300 7300 メモリ
1810 実行可能プログラム
1820 誤り発生情報
1825 1830 誤り訂正符号
1900 7400 メインメモリ
1910 7400 変換後プログラム
2000 2001 7200 コンパイラ
2010 ソースプログラム
2100 コンパイル部
2200 誤り訂正符号作成部
2500 実行可能プログラム
2590 誤り発生可能領域
2800 誤り訂正符号作成ツール
3820 誤り位置情報
4000 4500 6000 プログラム実行システム
4100 7600 誤り訂正部
4200 CPU
4600 誤り検出部
5320 誤り訂正符号書出部
5400 誤り発生情報発生記憶部
5500 誤り発生情報決定部
5600 誤り発生情報を決定する為の情報記憶部
7000 9000 9500 耐タンパ実行システム

Claims (15)

  1. 実行可能プログラムの変換を行う変換システムであって、
    記録媒体から実行可能プログラムを読み出して取得する取得手段と、
    取得された前記実行可能プログラムに対して、誤りを発生させる変換を行う誤り発生手段と、
    前記誤り発生手段による変換後の実行可能プログラムをメモリに展開する出力手段とを備え、
    前記誤り発生手段は、前記変換後の実行可能プログラムと誤り訂正符号とに基づいて訂正できる範囲を限度とした誤りを発生させる
    ことを特徴とする変換システム。
  2. 前記誤り発生手段は、前記実行可能プログラムの起動指示を受ける毎に、前記実行可能プログラムに対してランダムな誤りを発生させる変換を行う
    ことを特徴とする請求項1に記載の変換システム。
  3. 記取得手段は更に、少なくとも、データブロック長とデータブロックに発生させる誤りの許容上限となるビット数とを示す誤り発生情報を取得し、
    前記誤り発生手段は、前記データブロック長の範囲毎の実行可能プログラムに対し、前記ビット数以下のビットの値を変化させることにより、前記変換を行う
    ことを特徴とする請求項1または請求項2に記載の変換システム。
  4. 記取得手段は、更に、前記記録媒体から前記誤り発生情報を読み出して取得し、
    前記変換後の実行可能プログラムは、前記誤り発生情報に従ってデータブロック単位に誤りを発生させた実行可能プログラムであ
    ことを特徴とする請求項記載の変換システム。
  5. 記取得手段による前記取得と、前記誤り発生手段による前記変換と、前記出力手段による前記展開とは、前記実行可能プログラムの起動指示を受けた際に行われ、
    前記変換システムは更に、
    メモリに展開され、誤りが発生している実行可能プログラムの誤りを訂正する為の誤り訂正符号を取得する手段と、
    前記誤り訂正符号を参照し前記実行可能プログラムの誤りを訂正する誤り訂正手段と、
    前記誤り訂正手段によって誤りが訂正された実行可能プログラムを実行する実行手段とを備える
    ことを特徴とする請求項記載の変換システム。
  6. 前記誤り発生手段は、前記実行可能プログラムの起動指示を受ける毎に、値を変化させる対象のビットの選択を前回の選択と異なるものとすることにより、前記変換を行う
    ことを特徴とする請求項1から請求項5のいずれか1項に記載の変換システム。
  7. 前記誤り発生手段は、前記実行可能プログラム中の命令コードに誤りを発生させる
    ことを特徴とする請求項1から請求項6のいずれか1項に記載の変換システム。
  8. 記変換システムは更に、
    記取得手段によって取得された実行可能プログラムに基づいて、前記誤り訂正符号を作成する誤り訂正符号作成手段と、
    前記誤り訂正符号を出力する誤り訂正符号出力手段と、
    少なくとも、データブロック長とデータブロックに発生させる誤りの許容上限となるビット数とを示す誤り発生情報を記憶する誤り発生情報記憶手段とを備え、
    前記誤り発生手段は、前記データブロック長の範囲毎の実行可能プログラムに対し、前記ビット数以下のビットの値を変化させることにより、前記変換を行う
    ことを特徴とする請求項1記載の変換システム。
  9. 記変換システムは更に、
    所定の条件と前記誤り発生情報との対応関係を記憶する手段と、
    所定の条件のいずれかの条件に合致する状況を検出する手段と、
    前記誤り発生情報記憶手段に記憶されている誤り発生情報を、検出された状況に合致する所定の条件に対応する誤り発生情報に変更する手段とを備える
    ことを特徴とする請求項記載の変換システム。
  10. 前記誤り発生情報は、前記取得手段によって取得された実行可能プログラムの先頭からの相対アドレスを特定する為の誤り位置情報を含み、
    前記誤り発生手段は、前記誤り位置情報で特定される位置に誤りを発生させる
    ことを特徴とする請求項項3から請求項9のいずれか1項に記載の変換システム。
  11. メモリに展開され、誤りが発生している実行可能プログラムを変換して実行するプログラム実行システムであって、
    当該実行可能プログラムに発生している誤りは、当該実行可能プログラムと当該実行可能プログラムの誤りを訂正する為の誤り訂正符号とに基づいて訂正できる範囲の誤りであり、
    前記誤り訂正符号を取得する手段と、
    前記誤り訂正符号を参照し、前記実行可能プログラムの誤りを訂正する誤り訂正手段と、
    前記誤り訂正手段によって誤りが訂正された実行可能プログラムを実行するプログラム実行手段とを備える
    ことを特徴とするプログラム実行システム。
  12. プログラム実行システムは更に、
    前記実行可能プログラムの誤りの位置を検出する誤り検出手段を備える
    ことを特徴とする請求項11記載のプログラム実行システム。
  13. 前記誤り訂正手段は更に、
    誤りが発生しているビットの位置又は値の情報を収集し、
    前記収集した誤りを所定の処理に使用する
    ことを特徴とする請求項11または請求項12に記載のプログラム実行システム。
  14. 記変換システムは更に、
    外部からソースプログラムを取得するソースプログラム取得手段と、
    前記ソースプログラム取得手段によって取得されたソースプログラムを翻訳して機械語コードを作成するコンパイル手段を備え、
    前記変換の対象となる実行可能プログラムは前記機械語コードであり、
    前記誤り発生手段は、前記機械語コードに対して誤りを発生させる変換を行い、
    前記変換後の実行可能プログラムは、誤りを発生させた機械語コードである
    ことを特徴とする請求項1記載の変換システム。
  15. 記録媒体にアクセスでき、メモリとプロセッサとを備える装置で用いられる変換方法であって、
    前記記録媒体から実行可能プログラムを読み出して取得するステップと、
    前記プロセッサが、取得された前記実行可能プログラムに対して、誤りを発生させる変換を行うステップと、
    前記誤りを発生させるステップによる変換後の実行可能プログラムを前記メモリに展開するステップとを含み
    前記誤りを発生させるステップでは、前記変換後の実行可能プログラムと誤り訂正符号とに基づいて訂正できる範囲を限度とした誤りを発生させる
    ことを特徴とする変換方法。
JP2003157254A 2003-06-02 2003-06-02 データ変換システム Expired - Fee Related JP4125995B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003157254A JP4125995B2 (ja) 2003-06-02 2003-06-02 データ変換システム
US10/856,941 US7444520B2 (en) 2003-06-02 2004-06-01 Data conversion system for protecting software against analysis and tampering

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003157254A JP4125995B2 (ja) 2003-06-02 2003-06-02 データ変換システム

Publications (2)

Publication Number Publication Date
JP2004362077A JP2004362077A (ja) 2004-12-24
JP4125995B2 true JP4125995B2 (ja) 2008-07-30

Family

ID=33516091

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003157254A Expired - Fee Related JP4125995B2 (ja) 2003-06-02 2003-06-02 データ変換システム

Country Status (2)

Country Link
US (1) US7444520B2 (ja)
JP (1) JP4125995B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7502967B1 (en) * 2005-10-31 2009-03-10 Hewlett-Packard Development Company, L.P. Identifying an object in a data file that causes an error in an application
WO2009108245A2 (en) * 2007-12-21 2009-09-03 University Of Virginia Patent Foundation System, method and computer program product for protecting software via continuous anti-t ampering and obfuscation transforms
WO2013147865A1 (en) * 2012-03-30 2013-10-03 Intel Corporation A mechanism for saving and retrieving micro-architecture context
FR3071122B1 (fr) * 2017-09-14 2019-09-13 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'un code binaire d'une fonction securisee par un microprocesseur
EP3696698A1 (en) * 2019-02-18 2020-08-19 Verimatrix Method of protecting a software program against tampering

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1125000A (ja) 1997-06-30 1999-01-29 Sony Corp デジタルデータ判別方法

Also Published As

Publication number Publication date
US20040260980A1 (en) 2004-12-23
US7444520B2 (en) 2008-10-28
JP2004362077A (ja) 2004-12-24

Similar Documents

Publication Publication Date Title
JP4770425B2 (ja) 保護済み実行プログラムの作成のためのプログラム、方法及び装置
JP4976991B2 (ja) 情報処理装置、プログラム検証方法及びプログラム
US20080271001A1 (en) Method of generating program, information processing device and microcomputer
JP5467271B2 (ja) 情報処理装置及びプログラム、情報処理方法、記録媒体
US20070240141A1 (en) Performing dynamic information flow tracking
WO2007125911A1 (ja) データ処理装置、方法、プログラム、集積回路、プログラム生成装置
JP4568489B2 (ja) プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置
JP4931542B2 (ja) ロード先情報に対する改ざん検証機能を備えたプログラムローダ、プログラムローダを含むプロセッサ、プロセッサを含むデータ処理装置、プログラムロード方法、及び集積回路
US20110271350A1 (en) method for protecting software
JP2012118956A (ja) インデックステーブル基盤のコード暗号化及び復号化装置及びその方法
JP2004511031A (ja) ディジタル・データ保護構成
US20040255199A1 (en) Debug system, microprocessor, and debugger
JP2005135265A (ja) 情報処理装置
JP4125995B2 (ja) データ変換システム
JP5953867B2 (ja) プログラム、及びプログラム保護装置
JP2005216027A (ja) 暗号化装置及びこれを備えた暗号化システム並びに復号化装置及びこれを備えた半導体システム
JP3944069B2 (ja) 自己書換え処理追加プログラム、自己書換え処理追加装置及び自己書換え処理追加方法
JP5549810B2 (ja) プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム
CN114579337A (zh) 用于在用户设备中生成核心转储的方法和系统
US6931634B2 (en) Encrypted compiler
JP7008879B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
JP2011123229A (ja) プログラムコード暗号化装置及びプログラム
JP2004272594A (ja) データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム
CN109460640A (zh) 一种Java程序保护方法、装置、设备及可读存储介质
JP6012355B2 (ja) 制御機器、制御システム、データ格納方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060313

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20071004

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071030

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071217

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: 20080415

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: 20080509

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110516

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110516

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20120516

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120516

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20130516

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees