(57)【要約】【課題】特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止可能な情報処理装置を提供する。【解決手段】情報処理装置は、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムを記憶するプログラム記憶手段と、プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手段と、を含む。仮想マシンは、復号用鍵を記憶する記憶手段と、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手段と、を含む。【選択図】図１
2011081654.tif 000002
【特許請求の範囲】
【請求項１】
プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムを記憶するプログラム記憶手段と、
前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手段と、を含み、
前記仮想マシンは、
復号用鍵を記憶する記憶手段と、
暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手段と、を含む、情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
暗号化された鍵を格納する格納手段をさらに含み、
前記処理手段は、前記格納手段内の暗号化された鍵を、前記記憶手段内の復号用鍵を用いて復号し、前記暗号化されたプログラムを、当該復号された鍵を用いて復号し、当該復号されたプログラムを実行する、情報処理装置。
【請求項３】
請求項１または２に記載の情報処理装置において、
複数の物理領域に分割された物理メモリをさらに含み、
前記記憶手段は、さらに、乱数を記憶し、
前記仮想マシンは、
複数の仮想領域に分割され、前記仮想領域のそれぞれが、前記複数の物理領域のいずれかに、前記記憶手段内の乱数に基づいて対応づけられた仮想メモリと、
前記処理手段が前記仮想メモリのアドレスにアクセスする際、当該アドレスを、当該アドレスを有する仮想領域に対応づけられた物理領域のアドレスに変換し、当該物理領域のアドレスを用いて、前記物理メモリにアクセスするメモリ管理手段と、をさらに含む、情報処理装置。
【請求項４】
請求項１から３のいずれか１項に記載に情報処理装置において、
前記仮想マシンは、サンドボックスをさらに含み、
前記処理手段は、前記復号されたプログラムを前記サンドボックス内で実行する、情報処理装置。
【請求項５】
請求項１から４のいずれか１項に記載の情報処理装置と、
前記情報処理装置内の処理手段に、前記暗号化されたプログラムを送信する送信装置と、を含むプログラム保護システム。
【請求項６】
情報処理装置でのプログラム保護方法であって、
プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶ステップと、
前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成ステップと、
復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶ステップと、
前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理ステップと、を含むプログラム保護方法。
【請求項７】
請求項６に記載のプログラム保護方法において、
暗号化された鍵を格納手段に格納する格納ステップをさらに含み、
前記処理ステップでは、前記格納手段内の暗号化された鍵を、前記記憶手段内の復号用鍵を用いて復号し、前記暗号化されたプログラムを、当該復号された鍵を用いて復号し、当該復号されたプログラムを実行する、プログラム保護方法。
【請求項８】
コンピュータに、
プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶手順と、
前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手順と、
復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶手順と、
前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手順と、を実行させるためのプログラム。
【請求項９】
請求項８に記載のプログラムにおいて、
前記コンピュータに、暗号化された鍵を格納手段に格納する格納手順をさらに実行させ、
前記処理手順では、前記格納手段内の暗号化された鍵を、前記記憶手段内の復号用鍵を用いて復号し、前記暗号化されたプログラムを、当該復号された鍵を用いて復号し、当該復号されたプログラムを実行する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プログラム保護システム、プログラム保護方法およびプログラムに関し、特には、プログラムを保護できる情報処理装置、プログラム保護システム、プログラム保護方法およびプログラムに関する。
【背景技術】
【０００２】
ユーザにて使用されるコンピュータが、サーバ等のコンピュータから配布されたプログラムを受信し、そのプログラムを実行することがある。
【０００３】
この場合、ユーザが悪意を有していると、配布されたプログラムは、そのユーザによって改変される可能性がある。例えば、プログラムを違法コピーから保護する処理がスキップされたり、オンラインゲームにおいて不正に得点が上がるように、ユーザはプログラムを改変する可能性がある。
【０００４】
また、ユーザにプログラムの内容が知られてしまうと、そのプログラムで用いられている技術が流出する可能性がある。
【０００５】
非特許文献１には、悪意のあるユーザからプログラムを保護するためのプログラム保護システムが記載されている。
【０００６】
このプログラム保護システムは、プログラムに難読化処理を施すことによって、プログラムを保護する。難読化処理は、プログラムが実行された際に実現される機能を保ったまま、そのプログラムを複雑化する処理であり、暗号化処理とは異なる。このため、難読化処理が施されたプログラムの解析は困難になる。
【０００７】
特許文献１には、プログラムを保護するプログラム実行装置が記載されている。
【０００８】
このプログラム実行装置は、プログラム鍵を用いて暗号化されたプログラムと、マスタ鍵を用いて暗号化されたプログラム鍵と、を受け付けて格納する。
【０００９】
そして、プログラムを実行する状況になると、プログラム実行装置は、暗号化されたプログラム鍵を、マスタ鍵を用いて復号する。続いて、プログラム実行装置は、暗号化されたプログラムを、復号されたプログラム鍵を用いて復号し、復号されたプログラムを実行する。
【００１０】
このプログラム実行装置は、暗号化されたプログラムと暗号化されたプログラム鍵とを格納することによって、プログラムを保護する。
【００１１】
特許文献２には、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを用いることによって、プログラムを保護するデータ利用装置が記載されている。
【００１２】
このデータ利用装置は、コンテンツ鍵を用いて暗号化されたプログラムと、コンテンツ鍵と、を受信すると、プロセッサ固有鍵を用いてコンテンツ鍵を暗号化し、暗号化されたプログラムと、暗号化されたコンテンツ鍵と、を格納する。
【００１３】
そして、プログラムを実行する状況になると、データ利用装置内のプロセッサは、暗号化されたコンテンツ鍵を、プロセッサ固有鍵を用いて、プロセッサ内部で復号する。続いて、このプロセッサは、暗号化されたプログラムを、復号されたコンテンツ鍵を用いて、プロセッサ内部で復号し、復号されたプログラムを、プロセッサが有する内部メモリに配置し、そのプログラムを実行する。
【００１４】
このデータ利用装置は、暗号化されたプログラムと暗号化されたコンテンツ鍵とを格納し、さらに、復号されたプログラムを、プロセッサの外には出力しないことによって、プログラムを保護する。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００５−１００３７８号公報
【特許文献２】特開２００４−２７２５９４号公報
【非特許文献】
【００１６】
【非特許文献１】「耐タンパ技術」［online］、特許庁、[2009年6月4日検索]、インターネット＜URL http://www.jpo.go.jp/shiryou/s#sonota/hyoujun#gijutsu/info#sec#tech/f-2-2.html ＞
【発明の概要】
【発明が解決しようとする課題】
【００１７】
非特許文献１に記載のプログラム保護システムが利用された場合、プログラム配布者自身が、プログラムを難読化しなければならない。プログラムを難読化するには、プログラミング言語に応じた専用のツールが必要であり、プログラムを難読化することは容易ではない。このため、プログラム配布者の負担が大きいという課題があった。
【００１８】
特許文献１に記載の技術では、暗号化技術が使用されることにより、プログラム配布者がプログラムを難読化するという負担をなくすことが可能になる。しかしながら、特許文献１には、プログラムを実行する際に復号されたプログラムに対する保護については記載されていないため、プログラムを実行する際に復号されたプログラムが改変されたり不正に解析されたりする可能性が生じるという課題があった。
【００１９】
特許文献２に記載の技術では、暗号化技術が使用されることにより、プログラム配布者がプログラムを難読化するという負担をなくすことが可能になる。さらに、特許文献２に記載の技術では、暗号されたプログラムの復号処理をプロセッサ内で行い、復号されたプログラムをプロセッサの外には出力しないことによって、復号されたプログラムが改変されたり不正に解析されたりする可能性を低くできる。
【００２０】
しかしながら、特許文献２に記載の技術では、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止するために、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを使用しなければならないという課題があった。
【００２１】
なお、非特許文献１および特許文献１には、上記課題が生じるための前提となる技術、具体的には、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止する技術が記載されていない。
【００２２】
このため、非特許文献１に記載の技術および特許文献１に記載の技術では、当然のことながら、上記課題、つまり、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止するために、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを使用しなければならないという課題は解決されていない。
【００２３】
本発明の目的は、上述した課題を解決可能な、情報処理装置、プログラム保護システム、プログラム保護方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００２４】
本発明の情報処理装置は、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムを記憶するプログラム記憶手段と、前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手段と、を含み、前記仮想マシンは、復号用鍵を記憶する記憶手段と、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手段と、を含む。
【００２５】
本発明のプログラム保護システムは、上記情報処理装置と、前記情報処理装置内の処理手段に前記暗号化されたプログラムを送信する送信装置と、を含む。
【００２６】
本発明のプログラム保護方法は、情報処理装置でのプログラム保護方法であって、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶ステップと、前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成ステップと、復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶ステップと、前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理ステップと、を含む。
【００２７】
本発明のプログラムは、コンピュータに、プログラムが実行された際に実現される機能を保ったまま当該プログラムを複雑化する処理である難読化処理が施された仮想マシン生成用プログラムをプログラム記憶手段に記憶するプログラム記憶手順と、前記プログラム記憶手段内の仮想マシン生成用プログラムを実行することによって仮想マシンを生成する生成手順と、復号用鍵を前記仮想マシン内の記憶手段に記憶する記憶手順と、前記仮想マシンが、暗号化されたプログラムを受信すると、当該暗号化されたプログラムを、前記記憶手段内の復号用鍵を用いて復号し、当該復号されたプログラムを実行する処理手順と、を実行させる。
【発明の効果】
【００２８】
本発明によれば、内部にプロセッサ固有鍵を秘匿可能なプロセッサという特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止することが可能になる。
【図面の簡単な説明】
【００２９】
【図１】本発明の第１実施形態の構成を示すブロック図である。
【図２】第１実施形態の動作を示す流れ図である。
【図３】本発明の第２実施形態の構成を示すプロック図である。
【図４】本発明の第３実施形態の構成を示すプロック図である。
【発明を実施するための形態】
【００３０】
次に、本発明を実施するための形態について図面を参照して詳細に説明する。
【００３１】
（第１実施形態）
図１は、本発明の第１実施形態のプログラム保護システムを示したブロック図である。
【００３２】
図１において、プログラム保護システムは、クライアントマシン１００と、プログラム配布者装置１５０と、を含む。
【００３３】
クライアントマシン１００は、一般的に情報処理装置と呼ぶことができる。
【００３４】
クライアントマシン１００は、プログラム記憶部１０１と、生成部１０２と、仮想マシン１０３と、仮想ディスク１０４と、ホストＯＳ１０５と、物理メモリ１０６と、を含む。
【００３５】
プログラム記憶部１０１は、一般的にプログラム記憶手段と呼ぶことができる。
【００３６】
プログラム記憶部１０１は、難読化処理が施された仮想マシン生成用プログラムを記憶する。難読化処理とは、プログラムが実行された際に実現される機能を保ったまま、そのプログラムを複雑化する処理を意味する。
【００３７】
難読化処理として、例えば、非特許文献１に記載された技術が用いられる。なお、難読化処理は、非特許文献１に記載された技術に限らず適宜変更可能である。例えば、難読化処理として、プログラム言語で記述されたプログラムを、コンピュータが実行できる機械語に変換する処理が用いられてもよい。
【００３８】
また、プログラム記憶部１０１は、仮想ディスク生成用プログラムを記憶する。
【００３９】
生成部１０２は、一般的に生成手段と呼ぶことができる。
【００４０】
生成部１０２は、プログラム記憶部１０１内の仮想マシン生成用プログラムを実行することによって、クライアントマシン１００内に仮想マシン１０３を生成する。
【００４１】
また、生成部１０２は、プログラム記憶部１０１内の仮想ディスク生成用プログラムを実行することによって、クライアントマシン１００内に仮想ディスク１０４を生成する。
【００４２】
仮想マシン１０３には、鍵１０３ａ１が埋め込まれている。なお、鍵１０３ａ１は、復号用鍵と呼ぶことができる。
【００４３】
仮想マシン１０３は、難読化処理が施された仮想マシン生成用プログラムに従って生成されているため、クライアントマシン１００を利用するユーザが鍵１０３ａ１を取得することは非常に困難である。
【００４４】
仮想ディスク１０４は、仮想マシン１０３用のディスクである。仮想ディスク１０４は、仮想マシン１０３用のＯＳ（Operating System）１０４ａと、鍵１０４ｂと、を格納する。鍵１０４ｂは、公開鍵暗号用の鍵であり、公開鍵１０４ｂ１と秘密鍵１０４ｂ２とから構成される。通常のＰＫＩ（Public Key Infrastructure）と同様、公開鍵１０４ｂ１には署名が施されており、ユーザは、この署名を確認することで、公開鍵１０４ｂ１が正規の公開鍵であるか否かを確認できる。
【００４５】
ＯＳ１０４ａと鍵１０４ｂは、仮想マシン１０３内の鍵１０３ａ１にて暗号化された状態で、仮想ディスク１０４に格納されている。
【００４６】
鍵１０４ｂは暗号化されているため、クライアントマシン１００のユーザは、暗号化されていない鍵１０４ｂを直接取得することはできない。
【００４７】
さらに言えば、クライアントマシン１００のユーザは、鍵１０３ａ１を取得できないので、仮想ディスク１０４に格納された情報（ＯＳ１０４ａと鍵１０４ｂ）を正確に認識することはできない。
【００４８】
仮想マシン１０３は、記憶部１０３ａと、復号部１０３ｂと、ゲストＯＳ１０３ｃと、仮想メモリ１０３ｄと、仮想ＭＭＵ（Memory Management Unit）１０３ｅと、を含む。なお、復号部１０３ｂとゲストＯＳ１０３ｃとは、処理部１０３ｆに含まれる。
【００４９】
記憶部１０３ａは、一般的に記憶手段と呼ぶことができる。記憶部１０３ａは、鍵１０３ａ１と、乱数１０３ａ２と、を記憶する。
【００５０】
復号部１０３ｂは、仮想マシン１０３および仮想ディスク１０４が生成部１０２によって生成されると、記憶部１０３ａ内の鍵１０３ａ１を利用して、仮想ディスク１０４内の情報（ＯＳ１０４ａと鍵１０４ｂ）を復号する。続いて、復号部１０３ｂは、仮想ディスク１０４内のＯＳ１０４ａを読み取り実行して、ゲストＯＳ１０３ｃを起動する。
【００５１】
ゲストＯＳ１０３ｃは、プログラム配布者装置１５０から、暗号化済プログラム１５１を受信すると、復号部１０３ｂにて復号された鍵１０４ｂを用いて、暗号化済プログラム１５１を復号して、復号済プログラム１４１を生成し、復号済プログラム１４１を実行する。
【００５２】
本実施形態では、プログラム配布者装置１５０は、公開鍵１０４ｂ１を用いて、プログラム１５２を暗号化して暗号化済プログラム１５１を生成する。このため、ゲストＯＳ１０３ｃは、暗号化済プログラム１５１を受信すると、秘密鍵１０４ｂ２を用いて、暗号化済プログラム１５１を復号する。
【００５３】
なお、プログラム配布者装置１５０は、暗号化の方式として、公開鍵方式ではなく、公開鍵方式と共通鍵方式とを利用したハイブリッド方式を用いてもよい。
【００５４】
この場合、プログラム配布者装置１５０は、共通鍵を生成し、その共通鍵でプログラム１５２を暗号化して暗号化済プログラム１５１を生成する。プログラム配布者装置１５０は、さらに、その共通鍵を公開鍵１０４ｂ１で暗号化する。プログラム配布者装置１５０は、暗号化済プログラム１５１と、共通鍵を公開鍵１０４ｂ１で暗号化したものと、をゲストＯＳ１０３ｃに送信する。
【００５５】
ゲストＯＳ１０３ｃは、公開鍵１０４ｂ１を用いて暗号化された共通鍵を、秘密鍵１０４ｂ２を用いて復号し、その復号された共通鍵を用いて、暗号化済プログラム１５１を復号化して、復号済プログラム１４１を生成する。
【００５６】
この場合、プログラムの暗号化および復号化の計算量を削減することができる。
【００５７】
なお、ゲストＯＳ１０３ｃは、仮想メモリ１０３ｄ上で、暗号化済プログラム１５１を復号し、仮想メモリ１０３ｄ内のサンドボックス１０３ｄ１で、復号済プログラム１４１を実行する。
【００５８】
サンドボックス１０３ｄ１は、復号済プログラム１４１が、ゲストＯＳ１０３ｃ上の他の領域にアクセスできないようにするために使用される。Linux（登録商標）の場合、Linux-VserverやOpenVZ等が、サンドボックス１０３ｄ１に相当する。
【００５９】
サンドボックス１０３ｄ１を用いることにより、もし、復号済プログラム１４１にコンピュータウィルスが組み込まれていたとしても、コンピュータウィルスが、ほかの復号済プログラムにアクセスして、その内容を変更したり、その内容を取得したりすることはできない。
【００６０】
本実施形態では、仮想マシン１０３は、ゲストＯＳ１０３ｃを実行するために、仮想ディスク１０４だけではなく、クライアントマシン１００内の物理メモリ１０６も利用する。なお、物理メモリ１０６は、複数の物理領域（ページ）に分割されている。
【００６１】
物理メモリ１０６に格納された情報を、悪意のあるユーザが見ることで、悪意のあるユーザが、仮想マシン１０３で実行中のプログラムの内容を変更したり、仮想マシン１０３で実行中のプログラムの内容を取得したりできるかも知れない。
【００６２】
これを防ぐため、仮想マシン１０３内の仮想ＭＭＵ１０３ｅは、以下のように動作する。なお、仮想ＭＭＵ１０３ｅは、一般的にメモリ管理手段と呼ぶことができる。
【００６３】
ＭＭＵとは、ＯＳ内で動作するプロセスのメモリアドレス（仮想メモリ１０３ｄのメモリアドレス）を、物理的なメモリアドレス（物理メモリ１０６のメモリアドレス）に変換するハードウェアであり、仮想マシン１０３内にも、仮想ハードウェア（仮想ＭＭＵ１０３ｅ）として存在する。メモリアドレスの変換は、ページと呼ばれる単位で変換される。
【００６４】
なお、仮想メモリ１０３ｄは、複数の仮想領域（ページ）に分割され、仮想領域のそれぞれは、物理メモリ１０６の複数の物理領域のいずれかに、記憶部１０３ａ内の乱数１０３ａ２に基づいて対応づけられている。
【００６５】
仮想ＭＭＵ１０３ｅは、ゲストＯＳ１０３ｃ内のプロセスが利用するメモリアドレスを、ホストＯＳ１０５から取得したメモリアドレスに変換する。例えば、仮想ＭＭＵ１０３ｅは、ゲストＯＳ１０３ｃが仮想メモリ１０３ｄのアドレスにアクセスする際、そのアドレスを、そのアドレスを有する仮想領域に対応づけられた物理領域のアドレスに変換し、その物理領域のアドレスを用いて、物理メモリ１０６にアクセスする。
【００６６】
ここで、仮想ＭＭＵ１０３ｅは、このアドレス変換を、記憶部１０３ａ内の乱数１０３ａ２を用いて行う。このため、ホストＯＳ１０５上の物理メモリ１０６をページ単位で入れ替えないと、ゲストＯＳ１０３ｃ内のプロセスが利用している仮想メモリ１０３ｄ内の情報を正確に得ることはできない。
【００６７】
変換に用いられた乱数１０３ａ２は、仮想マシン１０３内にしか存在しない。このため、利用ページ数が十分に多い場合、悪意のあるユーザが、物理メモリ１０６内の情報からゲストＯＳ１０３ｃ内で動作するプロセスの仮想メモリ１０３ｄ内の情報を復元することを、十分に困難にすることができる。
【００６８】
処理部１０３ｆは、一般的に処理手段と呼ぶことができる。
【００６９】
処理部１０３ｆは、暗号化済プログラム１５１を受信すると、暗号化済プログラム１５１を、記憶部１０３ａ内の鍵１０３ａ１を利用して復号し、その復号されたプログラム１４１を実行する。本実施形態では、処理部１０３ｆは、仮想ディスク１０４内の暗号化された鍵１０４ｂを、記憶部１０３ａ内の鍵１０３ａ１を用いて復号し、暗号化済プログラム１５１を、その復号された鍵１０４ｂを用いて復号し、復号済プログラム１４１を実行する。
【００７０】
プログラム配布者装置１５０は、一般的に送信装置と呼ぶことができる。
【００７１】
プログラム配布者装置１５０は、プログラム１５２を配布する際、公開鍵１０４ｂ１をゲストＯＳ１０３ｃから取得する。プログラム配布者装置１５０は、公開鍵１０４ｂ１が正規の公開鍵であることを確認した後、暗号化部１５０ａで、プログラム１５２を公開鍵１０４ｂ１で暗号化して、暗号化済プログラム１５１を生成する。
【００７２】
プログラム配布者装置１５０は、暗号化済プログラム１５１をゲストＯＳ１０３ｃに送信する。暗号化済プログラム１５１は、ユーザに取得されても復号化できないので、見られてもよい。
【００７３】
次に、動作を説明する。
【００７４】
図２は、本実施形態の全体の動作を説明するためのフローチャートである。
【００７５】
まず、クライアントマシン１００では、仮想マシン１０３および仮想ディスク１０４が生成部１０２によって生成されると、仮想マシン１０３内の復号部１０３ｂが、鍵１０３ａ１を用いて、仮想ディスク１０４内の情報を復号化し、その復号された情報（ＯＳ１０４ａ）を用いて、ゲストＯＳ１０３ｃを起動する（ステップ２００）。
【００７６】
続いて、ゲストＯＳ１０３ｃは、プログラム配布者装置１５０に対し、公開鍵１０４ｂ１を渡し、プログラムの配布を要求する（ステップ２０１）。
【００７７】
プログラム配布者装置１５０は、クライアントマシン１００上のゲストＯＳ１０３ｃから公開鍵１０４ｂ１を受け取り（ステップ２１０）、公開鍵１０４ｂ１の署名の正当性確認し、さらに、公開鍵１０４ｂ１が、漏洩した秘密鍵に対応する公開鍵でないことを確認する（ステップ２１１）。
【００７８】
もし署名が正当でない、あるいは、その公開鍵１０４ｂ１が、漏洩した秘密鍵に対応する公開鍵であれば、プログラム配布者装置１５０は、エラー処理を行う（ステップ２１２）。
【００７９】
そうでない場合、プログラム配布者装置１５０は、公開鍵１０４ｂ１でプログラム１５２を暗号化して、暗号化済プログラム１５１を生成する（ステップ２１３）。なお、プログラム配布者装置１５０が、暗号化の方式として、ハイブリッド方式を用いる場合には、プログラム配布者装置１５０は、ステップ２１３で、任意に共通鍵を作成し、この共通鍵を用いてプログラム１５２を暗号化した上、その共通鍵を公開鍵１０４ｂ１で暗号化する。
【００８０】
続いて、プログラム配布者装置１５０は、クライアントマシン１００上のゲストＯＳ１０３ｃに対し、暗号化済プログラム１５１を渡す（ステップ２１４）。なお、プログラム配布者装置１５０が、暗号化の方式として、ハイブリッド方式を用いる場合には、プログラム配布者装置１５０は、ステップ２１４で、ゲストＯＳ１０３ｃに対し、暗号化済プログラム１５１と、公開鍵１０４ｂ１で暗号化された共通鍵と、を渡す。
【００８１】
続いて、クライアントマシン１００上のゲストＯＳ１０３ｃは、暗号化済プログラム１５１を取得する（ステップ２０２）。なお、プログラム配布者装置１５０が、暗号化の方式として、ハイブリッド方式を用いる場合には、ゲストＯＳ１０３ｃは、ステップ２０２で、暗号化済プログラム１５１と、公開鍵１０４ｂ１で暗号化された共通鍵と、を取得する。
【００８２】
その後、ゲストＯＳ１０３ｃは、暗号化済プログラム１５１を、秘密鍵１０４ｂ２を用いて復号化して復号済プログラム１４１を生成する。なお、プログラム配布者装置１５０が、暗号化の方式として、ハイブリッド方式を用いる場合には、ゲストＯＳ１０３ｃは、暗号化された共通鍵を秘密鍵１０４ｂ２で復号化した後、その復号化された共通鍵で、暗号化済プログラム１５１を復号化して、復号済プログラム１４１を生成する。
【００８３】
その後、ゲストＯＳ１０３ｃは、サンドボックス１０３ｄ１内で、復号済プログラム１４１を実行する（ステップ２０３）。
【００８４】
本実施形態によれば、仮想マシン１０３内のゲストＯＳ１０３ｃが、暗号化済プログラムの復号および実行を、仮想マシン１０３内で行う。
【００８５】
仮想マシン１０３は、難読化処理が施された仮想マシン生成用プログラムの実行によって生成される。このため、仮想マシン１０３の動作（ゲストＯＳ１０３ｃの動作）は解析困難である。
【００８６】
よって、仮想マシン１０３内のゲストＯＳ１０３ｃにて復号されたプログラムが改変されたり不正に解析されたりする可能性を低くできる。また、仮想マシン１０３を用いるため、特許文献２に記載された特殊なハードウェアを使用する必要が無くなる。また、プログラム配布者がプログラムを難読化するという負担をなくすことが可能になる。
【００８７】
なお、プログラム記憶部１０１と生成部１０２と仮想マシン１０３と仮想ディスク１０４とからなるクライアントマシンでも、特許文献２に記載された特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止することが可能になるという効果を生じることができる。
【００８８】
また、本実施形態では、仮想メモリ１０３ｄ内の仮想領域と物理メモリ１０６内の物理領域とを対応づけるために用いた乱数が、解析困難な仮想マシン１０３内に記憶されている。
【００８９】
このため、乱数を入手することが困難となり、よって、物理メモリ１０６内の情報から、仮想メモリ１０３ｄ内の情報（例えば、復号済プログラム１４１）を復元することは困難となる。
【００９０】
また、本実施形態では、ゲストＯＳ１０３ｃは、復号済プログラム１４１をサンドボックス１０３ｄ１内で実行する。
【００９１】
このため、もし、復号済プログラム１４１にコンピュータウィルスが組み込まれていたとしても、コンピュータウィルスが、ほかの復号化済プログラムにアクセスして、その内容を変更したり、その内容を取得したりすることを防止することが可能になる。
【００９２】
また、上記実施形態では、鍵１０４ｂは仮想ディスク１０４内に存在するものとしたが、鍵１０４ｂは仮想マシン１０３内の仮想ハードウェアとして実現されてもよい。この場合、ゲストＯＳ１０３ｃは、仮想ハードウェアにアクセスすることで、鍵１０４ｂを取得する。
【００９３】
（第２実施形態）
第１実施形態では、仮想ディスク１０４と仮想マシン１０３を別のものとして扱ったが、これらを一体とすることもできる。この場合、仮想ディスク１０４は仮想マシン１０３に取り込まれるため、仮想ディスク１０４内の情報を、鍵１０３ａ１を用いて暗号および復号することは不要となる。
【００９４】
図３は、仮想ディスク１０４Ａが仮想マシン１０３Ａに取り込まれたクライアントマシン１００Ａ（第２実施形態）を示したブロック図である。なお、図３において、図１に示したものと同一構成のものには同一符号を付してある。
【００９５】
図３において、クライアントマシン１００Ａは、一般的に情報処理装置と呼ぶことができる。
【００９６】
クライアントマシン１００Ａは、プログラム記憶部１０１Ａと、生成部１０２Ａと、仮想マシン１０３Ａと、ホストＯＳ１０５と、物理メモリ１０６と、を含む。
【００９７】
プログラム記憶部１０１Ａは、一般的にプログラム記憶手段と呼ぶことができる。
【００９８】
プログラム記憶部１０１Ａは、難読化処理が施された仮想マシン生成用プログラムを記憶する。
【００９９】
生成部１０２Ａは、一般的に生成手段と呼ぶことができる。
【０１００】
生成部１０２Ａは、プログラム記憶部１０１Ａ内の仮想マシン生成用プログラムを実行することによって、クライアントマシン１００Ａ内に仮想マシン１０３Ａを生成する。
【０１０１】
仮想マシン１０３Ａは、記憶部１０３ａと、ゲストＯＳ１０３ｃＡと、仮想メモリ１０３ｄと、仮想ＭＭＵ１０３ｅと、仮想ディスク１０４Ａと、を含む。
【０１０２】
なお、クライアントマシン１００Ａでは、記憶部１０３ａには、鍵１０３ａ１は記憶されない。また、クライアントマシン１００Ａでは、仮想ディスク１０４Ａは記憶手段の一例となり、鍵１０４ｂは復号用鍵の一例となる。また、クライアントマシン１００Ａでは、仮想ディスク１０４Ａ内の情報は暗号化されていない。
【０１０３】
ゲストＯＳ１０３ｃＡは、一般的に処理手段と呼ぶことができる。
【０１０４】
ゲストＯＳ１０３ｃＡは、プログラム配布者装置１５０から、暗号化済プログラム１５１を受信すると、秘密鍵１０４ｂ２を用いて、暗号化済プログラム１５１を復号し、暗号化済プログラム１５１をサンドボックス１０３ｄ１内で実行する。
【０１０５】
本実施形態によれば、仮想マシン１０３Ａ内のゲストＯＳ１０３ｃＡが、暗号化済プログラム１５１の復号および実行を、仮想マシン１０３Ａ内で行う。このため、第１実施形態と同様の効果を奏する。
【０１０６】
また、本実施形態によれば、ゲストＯＳ１０３ｃＡは、仮想ディスク１０４Ａ内の情報を復号する必要がなく、第１実施形態のゲストＯＳ１０３ｃに比べて、ゲストＯＳ１０３ｃＡの処理を簡略化することが可能になる。
【０１０７】
なお、プログラム記憶部１０１Ａと生成部１０２Ａと仮想マシン１０３Ａとからなるクライアントマシンでも、特許文献２に記載された特殊なハードウェアを使用することなく、プログラム配布者の負担を少なくすると共に、復号されたプログラムが改変されたり不正に解析されたりすることを防止することが可能になるという効果を生じることができる。
【０１０８】
また、本実施形態では、仮想メモリ１０３ｄ内の仮想領域と物理メモリ１０６内の物理領域とを対応づけるために用いた乱数が、解析困難な仮想マシン１０３Ａ内に記憶されている。
【０１０９】
このため、乱数を入手することが困難となり、よって、物理メモリ１０６内の情報から、仮想メモリ１０３ｄ内の情報を復元することは困難となる。
【０１１０】
また、本実施形態では、ゲストＯＳ１０３ｃＡは、復号済プログラム１４１をサンドボックス１０３ｄ１内で実行する。
【０１１１】
このため、もし、復号済プログラム１４１にコンピュータウィルスが組み込まれていたとしても、コンピュータウィルスが、ほかの復号化済プログラムにアクセスして、その内容を変更したり、その内容を取得したりすることを防止することが可能になる。
【０１１２】
なお、本実施形態においても、プログラム配布者装置１５０は、暗号化の方式として、公開鍵方式と共通鍵方式とを利用したハイブリッド方式を用いてもよい。
【０１１３】
この場合、プログラム配布者装置１５０は、で共通鍵を生成し、その共通鍵でプログラム１５２を暗号化して暗号化済プログラム１５１を生成する。プログラム配布者装置１５０は、さらに、その共通鍵を公開鍵１０４ｂ１で暗号化する。プログラム配布者装置１５０は、暗号化済プログラム１５１と、共通鍵を公開鍵１０４ｂ１で暗号化したものと、をゲストＯＳ１０３ｃＡに送信する。
【０１１４】
ゲストＯＳ１０３ｃＡは、公開鍵１０４ｂ１を用いて暗号化された共通鍵を、秘密鍵１０４ｂ２を用いて復号し、その復号された共通鍵を用いて、暗号化済プログラム１５１を復号化して、復号済プログラム１４１を生成する。
【０１１５】
この場合、プログラムの暗号化および復号化の計算量を削減することができる。
【０１１６】
なお、上記各実施形態において、鍵１０４ｂはユーザごとに異なるようにしてもよい。
【０１１７】
この場合、万が一、鍵１０４ｂが漏洩した場合でも、漏洩した鍵１０４ｂの公開鍵１０４ｂ１を知ることができれば、プログラム配布者装置１５０が、漏洩した鍵１０４ｂの公開鍵１０４ｂ１を利用したプログラム配布要求を拒否することで、今後配布するプログラム１５２については、改変や漏洩を防ぐことができる。
【０１１８】
また、上記各実施形態では、プログラムを明示的に暗号化するものとして扱ったが、ゲストＯＳと、プログラム配布者装置１５０と、の間で、ＳＳＬ（Secure Socket Layer）などにより暗号化された通信路が構成され、その通信路を通して、プログラムが配布されてもよい。
【０１１９】
（第３実施形態）
次に、本発明の第３実施形態について図面を参照して詳細に説明する。
【０１２０】
図４を参照すると、本発明の第３実施形態は、プログラム制御により動作するクライアントコンピュータ３００と、プログラム制御により動作するサーバコンピュータ３１０と、を含む。
【０１２１】
クライアントコンピュータ３００は、クライアント側プログラム３０１を搭載している。
【０１２２】
例えば、クライアントコンピュータ３００は、クライアント側プログラム３０１が記載された、コンピュータにて読み取り可能な記録媒体（例えば、バードディスク）を含む。
【０１２３】
クライアントコンピュータ３００は、その記録媒体からクライアント側プログラム３０１を読み取り実行することによって、図１に示したクライアントマシン１００、または、図３に示したクライアントマシン１００Ａとして機能する。
【０１２４】
サーバコンピュータ３１０は、プログラム配布プログラム３１１を搭載している。
【０１２５】
例えば、サーバコンピュータ３１０は、プログラム配布プログラム３１１が記載された、コンピュータにて読み取り可能な記録媒体（例えば、バードディスク）を含む。
【０１２６】
サーバコンピュータ３１０は、その記録媒体からプログラム配布プログラム３１１を読み取り実行することによって、図１に示したプログラム配布者装置１５０として機能する。
【０１２７】
上記各実施形態は、プログラムを販売、配布するといった用途に適用できる。また、Ｗｅｂアプリケーションをオフラインで実行する際、サーバ側プログラムをクライアントに配布する、といった用途にも適用可能である。
【０１２８】
以上説明した各実施形態において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
【符号の説明】
【０１２９】
１００、１００Ａ  クライアントマシン
１０１、１０１Ａ  プログラム記憶部
１０２、１０２Ａ  生成部
１０３、１０３Ａ  仮想マシン
１０３ａ    記憶部
１０３ｂ    復号部
１０３ｃ、１０３Ａ  ゲストＯＳ
１０３ｄ    仮想メモリ
１０３ｄ１  サンドボックス
１０３ｅ    仮想ＭＭＵ
１０３ｆ    処理部
１０４      仮想ディスク
１０５      ホストＯＳ
１０６      物理メモリ
１５０      プログラム配布者装置
３００      クライアントコンピュータ
３１０      サーバコンピュータ
【図１】
2011081654.tif 000003
【図２】
2011081654.tif 000004
【図３】
2011081654.tif 000005
【図４】
2011081654.tif 000006