説明

情報処理装置、プログラム保護システム、プログラム保護方法およびプログラム

【課題】特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止可能な情報処理装置を提供する。
【解決手段】情報処理装置は、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムを記憶するプログラム記憶手段と、プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手段と、を含む。仮想マシンは、復号用鍵を記憶する記憶手段と、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手段と、を含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、プログラム保護システム、プログラム保護方法およびプログラムに関し、特には、プログラムを保護できる情報処理装置、プログラム保護システム、プログラム保護方法およびプログラムに関する。
【背景技術】
【0002】
ユーザにて使用されるコンピュータが、サーバ等のコンピュータから配布されたプログラムを受信し、そのプログラムを実行することがある。
【0003】
この場合、ユーザが悪意を有していると、配布されたプログラムは、そのユーザによって改変される可能性がある。例えば、プログラムを違法コピーから保護する処理がスキップされたり、オンラインゲームにおいて不正に得点が上がるように、ユーザはプログラムを改変する可能性がある。
【0004】
また、ユーザにプログラムの内容が知られてしまうと、そのプログラムで用いられている技術が流出する可能性がある。
【0005】
非特許文献1には、悪意のあるユーザからプログラムを保護するためのプログラム保護システムが記載されている。
【0006】
このプログラム保護システムは、プログラムに難読化処理を施すことによって、プログラムを保護する。難読化処理は、プログラムが実行された際に実現される機能を保ったまま、そのプログラムを複雑化する処理であり、暗号化処理とは異なる。このため、難読化処理が施されたプログラムの解析は困難になる。
【0007】
特許文献1には、プログラムを保護するプログラム実行装置が記載されている。
【0008】
このプログラム実行装置は、プログラム鍵を用いて暗号化されたプログラムと、マスタ鍵を用いて暗号化されたプログラム鍵と、を受け付けて格納する。
【0009】
そして、プログラムを実行する状況になると、プログラム実行装置は、暗号化されたプログラム鍵を、マスタ鍵を用いて復号する。続いて、プログラム実行装置は、暗号化されたプログラムを、復号されたプログラム鍵を用いて復号し、復号されたプログラムを実行する。
【0010】
このプログラム実行装置は、暗号化されたプログラムと暗号化されたプログラム鍵とを格納することによって、プログラムを保護する。
【0011】
特許文献2には、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを用いることによって、プログラムを保護するデータ利用装置が記載されている。
【0012】
このデータ利用装置は、コンテンツ鍵を用いて暗号化されたプログラムと、コンテンツ鍵と、を受信すると、プロセッサ固有鍵を用いてコンテンツ鍵を暗号化し、暗号化されたプログラムと、暗号化されたコンテンツ鍵と、を格納する。
【0013】
そして、プログラムを実行する状況になると、データ利用装置内のプロセッサは、暗号化されたコンテンツ鍵を、プロセッサ固有鍵を用いて、プロセッサ内部で復号する。続いて、このプロセッサは、暗号化されたプログラムを、復号されたコンテンツ鍵を用いて、プロセッサ内部で復号し、復号されたプログラムを、プロセッサが有する内部メモリに配置し、そのプログラムを実行する。
【0014】
このデータ利用装置は、暗号化されたプログラムと暗号化されたコンテンツ鍵とを格納し、さらに、復号されたプログラムを、プロセッサの外には出力しないことによって、プログラムを保護する。
【先行技術文献】
【特許文献】
【0015】
【特許文献1】特開2005−100378号公報
【特許文献2】特開2004−272594号公報
【非特許文献】
【0016】
【非特許文献1】「耐タンパ技術」[online]、特許庁、[2009年6月4日検索]、インターネット<URL http://www.jpo.go.jp/shiryou/s#sonota/hyoujun#gijutsu/info#sec#tech/f-2-2.html >
【発明の概要】
【発明が解決しようとする課題】
【0017】
非特許文献1に記載のプログラム保護システムが利用された場合、プログラム配布者自身が、プログラムを難読化しなければならない。プログラムを難読化するには、プログラミング言語に応じた専用のツールが必要であり、プログラムを難読化することは容易ではない。このため、プログラム配布者の負担が大きいという課題があった。
【0018】
特許文献1に記載の技術では、暗号化技術が使用されることにより、プログラム配布者がプログラムを難読化するという負担をなくすことが可能になる。しかしながら、特許文献1には、プログラムを実行する際に復号されたプログラムに対する保護については記載されていないため、プログラムを実行する際に復号されたプログラムが改変されたり不正に解析されたりする可能性が生じるという課題があった。
【0019】
特許文献2に記載の技術では、暗号化技術が使用されることにより、プログラム配布者がプログラムを難読化するという負担をなくすことが可能になる。さらに、特許文献2に記載の技術では、暗号されたプログラムの復号処理をプロセッサ内で行い、復号されたプログラムをプロセッサの外には出力しないことによって、復号されたプログラムが改変されたり不正に解析されたりする可能性を低くできる。
【0020】
しかしながら、特許文献2に記載の技術では、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止するために、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを使用しなければならないという課題があった。
【0021】
なお、非特許文献1および特許文献1には、上記課題が生じるための前提となる技術、具体的には、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止する技術が記載されていない。
【0022】
このため、非特許文献1に記載の技術および特許文献1に記載の技術では、当然のことながら、上記課題、つまり、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止するために、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを使用しなければならないという課題は解決されていない。
【0023】
本発明の目的は、上述した課題を解決可能な、情報処理装置、プログラム保護システム、プログラム保護方法およびプログラムを提供することにある。
【課題を解決するための手段】
【0024】
本発明の情報処理装置は、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムを記憶するプログラム記憶手段と、前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手段と、を含み、前記仮想マシンは、復号用鍵を記憶する記憶手段と、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手段と、を含む。
【0025】
本発明のプログラム保護システムは、上記情報処理装置と、前記情報処理装置内の処理手段に前記暗号化されたプログラムを送信する送信装置と、を含む。
【0026】
本発明のプログラム保護方法は、情報処理装置でのプログラム保護方法であって、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶ステップと、前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成ステップと、復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶ステップと、前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理ステップと、を含む。
【0027】
本発明のプログラムは、コンピュータに、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶手順と、前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手順と、復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶手順と、前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手順と、を実行させる。
【発明の効果】
【0028】
本発明によれば、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止することが可能になる。
【図面の簡単な説明】
【0029】
【図1】本発明の第1実施形態の構成を示すブロック図である。
【図2】第1実施形態の動作を示す流れ図である。
【図3】本発明の第2実施形態の構成を示すプロック図である。
【図4】本発明の第3実施形態の構成を示すプロック図である。
【発明を実施するための形態】
【0030】
次に、本発明を実施するための形態について図面を参照して詳細に説明する。
【0031】
(第1実施形態)
図1は、本発明の第1実施形態のプログラム保護システムを示したブロック図である。
【0032】
図1において、プログラム保護システムは、クライアントマシン100と、プログラム配布者装置150と、を含む。
【0033】
クライアントマシン100は、一般的に情報処理装置と呼ぶことができる。
【0034】
クライアントマシン100は、プログラム記憶部101と、生成部102と、仮想マシン103と、仮想ディスク104と、ホストOS105と、物理メモリ106と、を含む。
【0035】
プログラム記憶部101は、一般的にプログラム記憶手段と呼ぶことができる。
【0036】
プログラム記憶部101は、難読化処理が施された仮想マシン生成用プログラムを記憶する。難読化処理とは、プログラムが実行された際に実現される機能を保ったまま、そのプログラムを複雑化する処理を意味する。
【0037】
難読化処理として、例えば、非特許文献1に記載された技術が用いられる。なお、難読化処理は、非特許文献1に記載された技術に限らず適宜変更可能である。例えば、難読化処理として、プログラム言語で記述されたプログラムを、コンピュータが実行できる機械語に変換する処理が用いられてもよい。
【0038】
また、プログラム記憶部101は、仮想ディスク生成用プログラムを記憶する。
【0039】
生成部102は、一般的に生成手段と呼ぶことができる。
【0040】
生成部102は、プログラム記憶部101内の仮想マシン生成用プログラムを実行することによって、クライアントマシン100内に仮想マシン103を生成する。
【0041】
また、生成部102は、プログラム記憶部101内の仮想ディスク生成用プログラムを実行することによって、クライアントマシン100内に仮想ディスク104を生成する。
【0042】
仮想マシン103には、鍵103a1が埋め込まれている。なお、鍵103a1は、復号用鍵と呼ぶことができる。
【0043】
仮想マシン103は、難読化処理が施された仮想マシン生成用プログラムに従って生成されているため、クライアントマシン100を利用するユーザが鍵103a1を取得することは非常に困難である。
【0044】
仮想ディスク104は、仮想マシン103用のディスクである。仮想ディスク104は、仮想マシン103用のOS(Operating System)104aと、鍵104bと、を格納する。鍵104bは、公開鍵暗号用の鍵であり、公開鍵104b1と秘密鍵104b2とから構成される。通常のPKI(Public Key Infrastructure)と同様、公開鍵104b1には署名が施されており、ユーザは、この署名を確認することで、公開鍵104b1が正規の公開鍵であるか否かを確認できる。
【0045】
OS104aと鍵104bは、仮想マシン103内の鍵103a1にて暗号化された状態で、仮想ディスク104に格納されている。
【0046】
鍵104bは暗号化されているため、クライアントマシン100のユーザは、暗号化されていない鍵104bを直接取得することはできない。
【0047】
さらに言えば、クライアントマシン100のユーザは、鍵103a1を取得できないので、仮想ディスク104に格納された情報(OS104aと鍵104b)を正確に認識することはできない。
【0048】
仮想マシン103は、記憶部103aと、復号部103bと、ゲストOS103cと、仮想メモリ103dと、仮想MMU(Memory Management Unit)103eと、を含む。なお、復号部103bとゲストOS103cとは、処理部103fに含まれる。
【0049】
記憶部103aは、一般的に記憶手段と呼ぶことができる。記憶部103aは、鍵103a1と、乱数103a2と、を記憶する。
【0050】
復号部103bは、仮想マシン103および仮想ディスク104が生成部102によって生成されると、記憶部103a内の鍵103a1を利用して、仮想ディスク104内の情報(OS104aと鍵104b)を復号する。続いて、復号部103bは、仮想ディスク104内のOS104aを読み取り実行して、ゲストOS103cを起動する。
【0051】
ゲストOS103cは、プログラム配布者装置150から、暗号化済プログラム151を受信すると、復号部103bにて復号された鍵104bを用いて、暗号化済プログラム151を復号して、復号済プログラム141を生成し、復号済プログラム141を実行する。
【0052】
本実施形態では、プログラム配布者装置150は、公開鍵104b1を用いて、プログラム152を暗号化して暗号化済プログラム151を生成する。このため、ゲストOS103cは、暗号化済プログラム151を受信すると、秘密鍵104b2を用いて、暗号化済プログラム151を復号する。
【0053】
なお、プログラム配布者装置150は、暗号化の方式として、公開鍵方式ではなく、公開鍵方式と共通鍵方式とを利用したハイブリッド方式を用いてもよい。
【0054】
この場合、プログラム配布者装置150は、共通鍵を生成し、その共通鍵でプログラム152を暗号化して暗号化済プログラム151を生成する。プログラム配布者装置150は、さらに、その共通鍵を公開鍵104b1で暗号化する。プログラム配布者装置150は、暗号化済プログラム151と、共通鍵を公開鍵104b1で暗号化したものと、をゲストOS103cに送信する。
【0055】
ゲストOS103cは、公開鍵104b1を用いて暗号化された共通鍵を、秘密鍵104b2を用いて復号し、その復号された共通鍵を用いて、暗号化済プログラム151を復号化して、復号済プログラム141を生成する。
【0056】
この場合、プログラムの暗号化および復号化の計算量を削減することができる。
【0057】
なお、ゲストOS103cは、仮想メモリ103d上で、暗号化済プログラム151を復号し、仮想メモリ103d内のサンドボックス103d1で、復号済プログラム141を実行する。
【0058】
サンドボックス103d1は、復号済プログラム141が、ゲストOS103c上の他の領域にアクセスできないようにするために使用される。Linux(登録商標)の場合、Linux-VserverやOpenVZ等が、サンドボックス103d1に相当する。
【0059】
サンドボックス103d1を用いることにより、もし、復号済プログラム141にコンピュータウィルスが組み込まれていたとしても、コンピュータウィルスが、ほかの復号済プログラムにアクセスして、その内容を変更したり、その内容を取得したりすることはできない。
【0060】
本実施形態では、仮想マシン103は、ゲストOS103cを実行するために、仮想ディスク104だけではなく、クライアントマシン100内の物理メモリ106も利用する。なお、物理メモリ106は、複数の物理領域(ページ)に分割されている。
【0061】
物理メモリ106に格納された情報を、悪意のあるユーザが見ることで、悪意のあるユーザが、仮想マシン103で実行中のプログラムの内容を変更したり、仮想マシン103で実行中のプログラムの内容を取得したりできるかも知れない。
【0062】
これを防ぐため、仮想マシン103内の仮想MMU103eは、以下のように動作する。なお、仮想MMU103eは、一般的にメモリ管理手段と呼ぶことができる。
【0063】
MMUとは、OS内で動作するプロセスのメモリアドレス(仮想メモリ103dのメモリアドレス)を、物理的なメモリアドレス(物理メモリ106のメモリアドレス)に変換するハードウェアであり、仮想マシン103内にも、仮想ハードウェア(仮想MMU103e)として存在する。メモリアドレスの変換は、ページと呼ばれる単位で変換される。
【0064】
なお、仮想メモリ103dは、複数の仮想領域(ページ)に分割され、仮想領域のそれぞれは、物理メモリ106の複数の物理領域のいずれかに、記憶部103a内の乱数103a2に基づいて対応づけられている。
【0065】
仮想MMU103eは、ゲストOS103c内のプロセスが利用するメモリアドレスを、ホストOS105から取得したメモリアドレスに変換する。例えば、仮想MMU103eは、ゲストOS103cが仮想メモリ103dのアドレスにアクセスする際、そのアドレスを、そのアドレスを有する仮想領域に対応づけられた物理領域のアドレスに変換し、その物理領域のアドレスを用いて、物理メモリ106にアクセスする。
【0066】
ここで、仮想MMU103eは、このアドレス変換を、記憶部103a内の乱数103a2を用いて行う。このため、ホストOS105上の物理メモリ106をページ単位で入れ替えないと、ゲストOS103c内のプロセスが利用している仮想メモリ103d内の情報を正確に得ることはできない。
【0067】
変換に用いられた乱数103a2は、仮想マシン103内にしか存在しない。このため、利用ページ数が十分に多い場合、悪意のあるユーザが、物理メモリ106内の情報からゲストOS103c内で動作するプロセスの仮想メモリ103d内の情報を復元することを、十分に困難にすることができる。
【0068】
処理部103fは、一般的に処理手段と呼ぶことができる。
【0069】
処理部103fは、暗号化済プログラム151を受信すると、暗号化済プログラム151を、記憶部103a内の鍵103a1を利用して復号し、その復号されたプログラム141を実行する。本実施形態では、処理部103fは、仮想ディスク104内の暗号化された鍵104bを、記憶部103a内の鍵103a1を用いて復号し、暗号化済プログラム151を、その復号された鍵104bを用いて復号し、復号済プログラム141を実行する。
【0070】
プログラム配布者装置150は、一般的に送信装置と呼ぶことができる。
【0071】
プログラム配布者装置150は、プログラム152を配布する際、公開鍵104b1をゲストOS103cから取得する。プログラム配布者装置150は、公開鍵104b1が正規の公開鍵であることを確認した後、暗号化部150aで、プログラム152を公開鍵104b1で暗号化して、暗号化済プログラム151を生成する。
【0072】
プログラム配布者装置150は、暗号化済プログラム151をゲストOS103cに送信する。暗号化済プログラム151は、ユーザに取得されても復号化できないので、見られてもよい。
【0073】
次に、動作を説明する。
【0074】
図2は、本実施形態の全体の動作を説明するためのフローチャートである。
【0075】
まず、クライアントマシン100では、仮想マシン103および仮想ディスク104が生成部102によって生成されると、仮想マシン103内の復号部103bが、鍵103a1を用いて、仮想ディスク104内の情報を復号化し、その復号された情報(OS104a)を用いて、ゲストOS103cを起動する(ステップ200)。
【0076】
続いて、ゲストOS103cは、プログラム配布者装置150に対し、公開鍵104b1を渡し、プログラムの配布を要求する(ステップ201)。
【0077】
プログラム配布者装置150は、クライアントマシン100上のゲストOS103cから公開鍵104b1を受け取り(ステップ210)、公開鍵104b1の署名の正当性確認し、さらに、公開鍵104b1が、漏洩した秘密鍵に対応する公開鍵でないことを確認する(ステップ211)。
【0078】
もし署名が正当でない、あるいは、その公開鍵104b1が、漏洩した秘密鍵に対応する公開鍵であれば、プログラム配布者装置150は、エラー処理を行う(ステップ212)。
【0079】
そうでない場合、プログラム配布者装置150は、公開鍵104b1でプログラム152を暗号化して、暗号化済プログラム151を生成する(ステップ213)。なお、プログラム配布者装置150が、暗号化の方式として、ハイブリッド方式を用いる場合には、プログラム配布者装置150は、ステップ213で、任意に共通鍵を作成し、この共通鍵を用いてプログラム152を暗号化した上、その共通鍵を公開鍵104b1で暗号化する。
【0080】
続いて、プログラム配布者装置150は、クライアントマシン100上のゲストOS103cに対し、暗号化済プログラム151を渡す(ステップ214)。なお、プログラム配布者装置150が、暗号化の方式として、ハイブリッド方式を用いる場合には、プログラム配布者装置150は、ステップ214で、ゲストOS103cに対し、暗号化済プログラム151と、公開鍵104b1で暗号化された共通鍵と、を渡す。
【0081】
続いて、クライアントマシン100上のゲストOS103cは、暗号化済プログラム151を取得する(ステップ202)。なお、プログラム配布者装置150が、暗号化の方式として、ハイブリッド方式を用いる場合には、ゲストOS103cは、ステップ202で、暗号化済プログラム151と、公開鍵104b1で暗号化された共通鍵と、を取得する。
【0082】
その後、ゲストOS103cは、暗号化済プログラム151を、秘密鍵104b2を用いて復号化して復号済プログラム141を生成する。なお、プログラム配布者装置150が、暗号化の方式として、ハイブリッド方式を用いる場合には、ゲストOS103cは、暗号化された共通鍵を秘密鍵104b2で復号化した後、その復号化された共通鍵で、暗号化済プログラム151を復号化して、復号済プログラム141を生成する。
【0083】
その後、ゲストOS103cは、サンドボックス103d1内で、復号済プログラム141を実行する(ステップ203)。
【0084】
本実施形態によれば、仮想マシン103内のゲストOS103cが、暗号化済プログラムの復号および実行を、仮想マシン103内で行う。
【0085】
仮想マシン103は、難読化処理が施された仮想マシン生成用プログラムの実行によって生成される。このため、仮想マシン103の動作(ゲストOS103cの動作)は解析困難である。
【0086】
よって、仮想マシン103内のゲストOS103cにて復号されたプログラムが改変されたり不正に解析されたりする可能性を低くできる。また、仮想マシン103を用いるため、特許文献2に記載された特殊なハードウェアを使用する必要が無くなる。また、プログラム配布者がプログラムを難読化するという負担をなくすことが可能になる。
【0087】
なお、プログラム記憶部101と生成部102と仮想マシン103と仮想ディスク104とからなるクライアントマシンでも、特許文献2に記載された特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止することが可能になるという効果を生じることができる。
【0088】
また、本実施形態では、仮想メモリ103d内の仮想領域と物理メモリ106内の物理領域とを対応づけるために用いた乱数が、解析困難な仮想マシン103内に記憶されている。
【0089】
このため、乱数を入手することが困難となり、よって、物理メモリ106内の情報から、仮想メモリ103d内の情報(例えば、復号済プログラム141)を復元することは困難となる。
【0090】
また、本実施形態では、ゲストOS103cは、復号済プログラム141をサンドボックス103d1内で実行する。
【0091】
このため、もし、復号済プログラム141にコンピュータウィルスが組み込まれていたとしても、コンピュータウィルスが、ほかの復号化済プログラムにアクセスして、その内容を変更したり、その内容を取得したりすることを防止することが可能になる。
【0092】
また、上記実施形態では、鍵104bは仮想ディスク104内に存在するものとしたが、鍵104bは仮想マシン103内の仮想ハードウェアとして実現されてもよい。この場合、ゲストOS103cは、仮想ハードウェアにアクセスすることで、鍵104bを取得する。
【0093】
(第2実施形態)
第1実施形態では、仮想ディスク104と仮想マシン103を別のものとして扱ったが、これらを一体とすることもできる。この場合、仮想ディスク104は仮想マシン103に取り込まれるため、仮想ディスク104内の情報を、鍵103a1を用いて暗号および復号することは不要となる。
【0094】
図3は、仮想ディスク104Aが仮想マシン103Aに取り込まれたクライアントマシン100A(第2実施形態)を示したブロック図である。なお、図3において、図1に示したものと同一構成のものには同一符号を付してある。
【0095】
図3において、クライアントマシン100Aは、一般的に情報処理装置と呼ぶことができる。
【0096】
クライアントマシン100Aは、プログラム記憶部101Aと、生成部102Aと、仮想マシン103Aと、ホストOS105と、物理メモリ106と、を含む。
【0097】
プログラム記憶部101Aは、一般的にプログラム記憶手段と呼ぶことができる。
【0098】
プログラム記憶部101Aは、難読化処理が施された仮想マシン生成用プログラムを記憶する。
【0099】
生成部102Aは、一般的に生成手段と呼ぶことができる。
【0100】
生成部102Aは、プログラム記憶部101A内の仮想マシン生成用プログラムを実行することによって、クライアントマシン100A内に仮想マシン103Aを生成する。
【0101】
仮想マシン103Aは、記憶部103aと、ゲストOS103cAと、仮想メモリ103dと、仮想MMU103eと、仮想ディスク104Aと、を含む。
【0102】
なお、クライアントマシン100Aでは、記憶部103aには、鍵103a1は記憶されない。また、クライアントマシン100Aでは、仮想ディスク104Aは記憶手段の一例となり、鍵104bは復号用鍵の一例となる。また、クライアントマシン100Aでは、仮想ディスク104A内の情報は暗号化されていない。
【0103】
ゲストOS103cAは、一般的に処理手段と呼ぶことができる。
【0104】
ゲストOS103cAは、プログラム配布者装置150から、暗号化済プログラム151を受信すると、秘密鍵104b2を用いて、暗号化済プログラム151を復号し、暗号化済プログラム151をサンドボックス103d1内で実行する。
【0105】
本実施形態によれば、仮想マシン103A内のゲストOS103cAが、暗号化済プログラム151の復号および実行を、仮想マシン103A内で行う。このため、第1実施形態と同様の効果を奏する。
【0106】
また、本実施形態によれば、ゲストOS103cAは、仮想ディスク104A内の情報を復号する必要がなく、第1実施形態のゲストOS103cに比べて、ゲストOS103cAの処理を簡略化することが可能になる。
【0107】
なお、プログラム記憶部101Aと生成部102Aと仮想マシン103Aとからなるクライアントマシンでも、特許文献2に記載された特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止することが可能になるという効果を生じることができる。
【0108】
また、本実施形態では、仮想メモリ103d内の仮想領域と物理メモリ106内の物理領域とを対応づけるために用いた乱数が、解析困難な仮想マシン103A内に記憶されている。
【0109】
このため、乱数を入手することが困難となり、よって、物理メモリ106内の情報から、仮想メモリ103d内の情報を復元することは困難となる。
【0110】
また、本実施形態では、ゲストOS103cAは、復号済プログラム141をサンドボックス103d1内で実行する。
【0111】
このため、もし、復号済プログラム141にコンピュータウィルスが組み込まれていたとしても、コンピュータウィルスが、ほかの復号化済プログラムにアクセスして、その内容を変更したり、その内容を取得したりすることを防止することが可能になる。
【0112】
なお、本実施形態においても、プログラム配布者装置150は、暗号化の方式として、公開鍵方式と共通鍵方式とを利用したハイブリッド方式を用いてもよい。
【0113】
この場合、プログラム配布者装置150は、で共通鍵を生成し、その共通鍵でプログラム152を暗号化して暗号化済プログラム151を生成する。プログラム配布者装置150は、さらに、その共通鍵を公開鍵104b1で暗号化する。プログラム配布者装置150は、暗号化済プログラム151と、共通鍵を公開鍵104b1で暗号化したものと、をゲストOS103cAに送信する。
【0114】
ゲストOS103cAは、公開鍵104b1を用いて暗号化された共通鍵を、秘密鍵104b2を用いて復号し、その復号された共通鍵を用いて、暗号化済プログラム151を復号化して、復号済プログラム141を生成する。
【0115】
この場合、プログラムの暗号化および復号化の計算量を削減することができる。
【0116】
なお、上記各実施形態において、鍵104bはユーザごとに異なるようにしてもよい。
【0117】
この場合、万が一、鍵104bが漏洩した場合でも、漏洩した鍵104bの公開鍵104b1を知ることができれば、プログラム配布者装置150が、漏洩した鍵104bの公開鍵104b1を利用したプログラム配布要求を拒否することで、今後配布するプログラム152については、改変や漏洩を防ぐことができる。
【0118】
また、上記各実施形態では、プログラムを明示的に暗号化するものとして扱ったが、ゲストOSと、プログラム配布者装置150と、の間で、SSL(Secure Socket Layer)などにより暗号化された通信路が構成され、その通信路を通して、プログラムが配布されてもよい。
【0119】
(第3実施形態)
次に、本発明の第3実施形態について図面を参照して詳細に説明する。
【0120】
図4を参照すると、本発明の第3実施形態は、プログラム制御により動作するクライアントコンピュータ300と、プログラム制御により動作するサーバコンピュータ310と、を含む。
【0121】
クライアントコンピュータ300は、クライアント側プログラム301を搭載している。
【0122】
例えば、クライアントコンピュータ300は、クライアント側プログラム301が記載された、コンピュータにて読み取り可能な記録媒体(例えば、バードディスク)を含む。
【0123】
クライアントコンピュータ300は、その記録媒体からクライアント側プログラム301を読み取り実行することによって、図1に示したクライアントマシン100、または、図3に示したクライアントマシン100Aとして機能する。
【0124】
サーバコンピュータ310は、プログラム配布プログラム311を搭載している。
【0125】
例えば、サーバコンピュータ310は、プログラム配布プログラム311が記載された、コンピュータにて読み取り可能な記録媒体(例えば、バードディスク)を含む。
【0126】
サーバコンピュータ310は、その記録媒体からプログラム配布プログラム311を読み取り実行することによって、図1に示したプログラム配布者装置150として機能する。
【0127】
上記各実施形態は、プログラムを販売、配布するといった用途に適用できる。また、Webアプリケーションをオフラインで実行する際、サーバ側プログラムをクライアントに配布する、といった用途にも適用可能である。
【0128】
以上説明した各実施形態において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
【符号の説明】
【0129】
100、100A クライアントマシン
101、101A プログラム記憶部
102、102A 生成部
103、103A 仮想マシン
103a 記憶部
103b 復号部
103c、103A ゲストOS
103d 仮想メモリ
103d1 サンドボックス
103e 仮想MMU
103f 処理部
104 仮想ディスク
105 ホストOS
106 物理メモリ
150 プログラム配布者装置
300 クライアントコンピュータ
310 サーバコンピュータ

【特許請求の範囲】
【請求項1】
プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムを記憶するプログラム記憶手段と、
前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手段と、を含み、
前記仮想マシンは、
復号用鍵を記憶する記憶手段と、
暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手段と、を含む、情報処理装置。
【請求項2】
請求項1に記載の情報処理装置において、
暗号化された鍵を格納する格納手段をさらに含み、
前記処理手段は、前記格納手段内の暗号化された鍵を、前記記憶手段内の復号用鍵を用いて復号し、前記暗号化されたプログラムを、当該復号された鍵を用いて復号し、当該復号されたプログラムを実行する、情報処理装置。
【請求項3】
請求項1または2に記載の情報処理装置において、
複数の物理領域に分割された物理メモリをさらに含み、
前記記憶手段は、さらに、乱数を記憶し、
前記仮想マシンは、
複数の仮想領域に分割され、前記仮想領域のそれぞれが、前記複数の物理領域のいずれかに、前記記憶手段内の乱数に基づいて対応づけられた仮想メモリと、
前記処理手段が前記仮想メモリのアドレスにアクセスする際、当該アドレスを、当該アドレスを有する仮想領域に対応づけられた物理領域のアドレスに変換し、当該物理領域のアドレスを用いて、前記物理メモリにアクセスするメモリ管理手段と、をさらに含む、情報処理装置。
【請求項4】
請求項1から3のいずれか1項に記載に情報処理装置において、
前記仮想マシンは、サンドボックスをさらに含み、
前記処理手段は、前記復号されたプログラムを前記サンドボックス内で実行する、情報処理装置。
【請求項5】
請求項1から4のいずれか1項に記載の情報処理装置と、
前記情報処理装置内の処理手段に、前記暗号化されたプログラムを送信する送信装置と、を含むプログラム保護システム。
【請求項6】
情報処理装置でのプログラム保護方法であって、
プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶ステップと、
前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成ステップと、
復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶ステップと、
前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理ステップと、を含むプログラム保護方法。
【請求項7】
請求項6に記載のプログラム保護方法において、
暗号化された鍵を格納手段に格納する格納ステップをさらに含み、
前記処理ステップでは、前記格納手段内の暗号化された鍵を、前記記憶手段内の復号用鍵を用いて復号し、前記暗号化されたプログラムを、当該復号された鍵を用いて復号し、当該復号されたプログラムを実行する、プログラム保護方法。
【請求項8】
コンピュータに、
プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶手順と、
前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手順と、
復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶手順と、
前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手順と、を実行させるためのプログラム。
【請求項9】
請求項8に記載のプログラムにおいて、
前記コンピュータに、暗号化された鍵を格納手段に格納する格納手順をさらに実行させ、
前記処理手順では、前記格納手段内の暗号化された鍵を、前記記憶手段内の復号用鍵を用いて復号し、前記暗号化されたプログラムを、当該復号された鍵を用いて復号し、当該復号されたプログラムを実行する、プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2011−81654(P2011−81654A)
【公開日】平成23年4月21日(2011.4.21)
【国際特許分類】
【出願番号】特願2009−234251(P2009−234251)
【出願日】平成21年10月8日(2009.10.8)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】