JP2007233426A - アプリケーション実行装置 - Google Patents

アプリケーション実行装置 Download PDF

Info

Publication number
JP2007233426A
JP2007233426A JP2004110781A JP2004110781A JP2007233426A JP 2007233426 A JP2007233426 A JP 2007233426A JP 2004110781 A JP2004110781 A JP 2004110781A JP 2004110781 A JP2004110781 A JP 2004110781A JP 2007233426 A JP2007233426 A JP 2007233426A
Authority
JP
Japan
Prior art keywords
program
native code
encryption
code
class
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.)
Pending
Application number
JP2004110781A
Other languages
English (en)
Inventor
Mitsuru Kurotaki
満 黒瀧
Tomonori Nakamura
智典 中村
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 Holdings Corp
Original Assignee
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2004110781A priority Critical patent/JP2007233426A/ja
Priority to PCT/JP2005/006307 priority patent/WO2005098570A1/ja
Publication of JP2007233426A publication Critical patent/JP2007233426A/ja
Pending 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/121Restricting unauthorised execution of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

【課題】従来のJava(R)アプリケーション保護技術では、ネイティブコードに対する盗聴、改ざんに対抗できないため、Java(R)アプリケーションを高速に実行し、かつ、アプリケーションを保護することができない。
【解決手段】JITコンパイルにより生成されたネイティブコードを、改ざんのできない安全な実行部で暗号化を行い、ネイティブコード実行時のみ必要な箇所を復号化し、メソッドの実行終了後に即座に暗号化を行う。
【選択図】図1

Description

本発明は、仮想マシン方式(特にJava(R)仮想マシン)によりプログラムを実行する機能を持つ端末装置において、インターネットやDVD等の端末外部のメディアからダウンロードしたプログラムを実行する時に、プログラムが盗聴、改竄されることを防止することに関する。
従来のデジタルTVや携帯電話などの電子機器では、Java(R)言語で記述されたプログラムをダウンロードし、実行する機能を搭載するものが増加している。例えば携帯電話では、NTT DoCoMoがi−アプリと呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからJava(R)プログラムをダウンロードして、端末上で実行する。また、欧州では、DVB−MHP(Digital Video Broadcasting−Multimedia Home Platform)と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。DVB−MHP規格に基づくデジタル放送では、放送波に多重化されたJava(R)プログラムをデジタルTVが受信し、それを実行する。
このようなプログラム配信サービスにおいて、配信されるプログラムはそのプログラムの開発者の知的財産権で保護されており、これを悪意のある攻撃者が盗聴することは防がなくてはならない。また、悪意のある攻撃者により改ざんされたプログラムが、利用者やアプリ製作者の意図しない動作をすることを防がなくてはならない。これらを実現するために、従来の電子機器は以下のような機能を備えている。
暗号化したプログラムをダウンロードし、端末内部で復号することにより、通信途中の盗聴、改ざんを防止する。
ハッシュ関数等を使い、ダウンロード時にプログラムが改ざんの有無を検証し、改ざんされたプログラムの実行を防止する。
従来のプログラムが盗聴、改竄されることを防止する方法の一例は、特開2002−132364号公報に記載されている。図2に示すように、この従来のプログラムが盗聴、改竄されることを防止する方法は、主に暗号化されたプログラム201と復号化手段202と仮想機械203とCPU204から構成されている。
暗号化プログラム201は、仮想機械203が解釈実行可能な仮想オペレーションコードを暗号化して含んでいる。仮想機械203は暗号化プログラム201が含む仮想オペレーションコードを直接実行する。または仮想機械203は暗号化プログラム201実行する際、復号化手段202に暗号化プログラム201を復号化させて仮想オペレーションコードを取り出し、解釈実行をする。CPU204は、仮想機械203を実行する。
従来技術では、以上の手段によりプログラムが盗聴、改竄されることを防止していた。
特開2002−132364号公報
近年の電子機器は、多数のソフトウェアモジュールから構成されている。専門的な知識を有する者であれば、これらのソフトウェアモジュールのバグを悪用することで端末内のソフトウェアを改ざんすることも可能である。また、デバッガやICE(In−Circuit Emulator)等のツールを用いることでも同様のことは実現可能である。さらにデバッガやICEを使用する場合には、実行中のJava(R)仮想マシンにブレークポイントを設定することにより、任意のタイミングでJava(R)仮想マシンの動作を一時停止や、Java(R)仮想マシンが使用しているメモリを盗聴、改ざんすることが可能になる。暗号化されて配信されるアプリケーションも、実行時には復号され平文となる。そのため、攻撃者がJava(R)仮想マシンの処理のうち、クラスをロードする処理やメソッドを実行する処理にブレークポイントを設置すると、攻撃者は平文のアプリケーションにアクセスすることができる。
しかしながら、従来の技術においては、Java(R)仮想マシンのインタプリタ実行中にJava(R)バイトコードを盗聴、改ざんから保護することはできるが、プログラムをJava(R)仮想マシン内部形式に変換するクラスロード処理中やプログラムの正当性を確認するベリファイ処理中に、バイトコードを保護することができない。また、実行速度を向上させるため、Java(R)仮想マシンが、Java(R)プログラム実行中にバイトコードをネイティブコードに変換するJITコンパイラを備え利用する場合、JITコンパイル後のネイティブコードを保護することができないという問題がある。
そのため、JITコンパイル後のネイティブコードをターゲットにして盗聴、改ざんを行うことができる。Java(R)プログラムによるサービスは、年々肥大化・多様化しており、Java(R)プログラムの実行速度を向上させるJITコンパイラの搭載はJava(R)仮想マシンにとって必須の機能である。今後、インターネット等を利用したJava(R)プログラムの配信ビジネスが本格化するに従い、JITコンパイラにより生成されるネイティブコードの盗聴、改ざんの問題が深刻化すると予想される。
本発明は、前記従来の課題を解決するもので、実行中のJava(R)プログラムを盗聴、改ざんから保護するJava(R)プログラム実行環境を提供することを目的とする。
前記従来の課題を解決するために、本発明は、暗号化されたバイトコードを復号する復号処理部と、バイトコードをネイティブコードに変換するJITコンパイルと、ネイティブコードを暗号化する暗号処理部と、暗号化されたネイティブコードを復号化する復号処理部と、バイトコードとネイティブコードを解釈実行し、実行が終わったバイトコードとネイティブコードを再び暗号化させるJava(R)実行環境を有し、JITコンパイルにより生成されるネイティブコードを暗号化する。
本構成によってJava(R)プログラムを盗聴・改ざんから保護することができる。
本発明によれば、プログラム実行中に復号化されるクラスファイル、バイトコード、ネイティブコードがメモリ上に配置される時間を大幅に短縮し、かつプログラムの実行速度を向上させることが可能となり、Java(R)プログラムの盗聴、改ざんを極めて困難にさせることができる。
また、本発明を用いることで、暗号に用いる暗号鍵やアルゴリズムを実行中に切り替えるが可能となり、暗号強度の向上と、データの重要度や実行速度に応じた暗号鍵やアルゴリズムの選択を実現することができる。
以下本発明の実施の形態について、図面を参照しながら説明する。
まず、図1を参考にして本実施の形態におけるJava(R)アプリケーション実行装置の構成について説明をする。
ダウンロード可能なプログラム100はJava(R)アプリケーション実行装置110(アプリケーション実行装置110と称す)からダウンロード可能なプログラムである。具体的には、Java(R)アプリケーションが該当する。
アプリケーション実行装置110は、実行部120と安全な実行部130から構成され、ダウンロード可能なプログラム100をダウンロードし実行する装置である。アプリケーション実行装置110は、具体的にはデジタルテレビ、セットトップボックス、DVDレコーダー、BlueRayDisc(BD)レコーダー、カーナビ端末、携帯電話、PDAなどの、Java(R)仮想マシンを搭載する電子機器全般が該当する。
実行部120は、通常のパーソナルコンピュータやデジタル家電機器等に搭載されているプログラム実行手段と同様のものであり、アプリ取得プログラム121、Java(R)仮想マシン122(仮想マシン122と称す)、OS123、第1CPU124、第1RAM125、第1ROM126から構成される。実行部120は主に、ダウンロード可能なプログラム110の実行と、安全な実行部130への暗号化命令、復号化命令の送信を行う。後ほど、各構成要素の詳細を説明する。
安全な実行部130は、復号処理部131、暗号処理部132、第2CPU133、第2RAM134、第2ROM135から構成され、悪意のある第3者からの攻撃を防御しつつ安全にプログラムを実行させることができるプログラム実行手段であり、主な機能は第1RAM134に格納されているデータの暗号化・復号化を行う。後ほど、各構成要素の詳細を説明する。
本実施の形態では、Java(R)アプリケーション実行装置110は2つのCPUを備えているが、一つのCPUが動作モードを切り替えるなどの方法で仮想的に二つのCPUのように振舞ってもよい。また、安全な実行部130全体をハードウェアにより実現してもよい。
以上が、本実施の形態におけるアプリケーション実行装置110の構成である。
次に、図1を参考にして実行部120の構成要素について詳細を説明する。
アプリ取得プログラム121は、任意の手法でダウンロード可能なプログラム100を、アプリケーション実行装置110の外から取得し、ダウンロード可能なプログラム100が含むJava(R)クラスファイルまたはJarファイルを、第1RAM125へ格納するプログラムである。
Java(R)クラスファイルは、バイトコードなどの情報を含むファイルであり、図3にクラスファイルの構成を示す。クラスファイルについての詳細は書籍「Java(R) Virtual Machine Specification(ISBN 0−201−63451―)」で定義されている。ここでは、各構成要素について簡潔に説明し、詳細な説明は省略する。magic_number301は、Java(R)クラスファイルはCAFEBABEという固定値をもちJava(R)クラスファイルは必ずこの値から始まる。minor_version302はこのクラスファイルのマイナーバージョンを示す。major_version303は、このクラスファイルのメジャーバージョンを示す。constant_pool_count304は、constant_pool305の要素数を示す。constant_pool305は、このクラスの名前やメソッド名などの情報の配列である。access_flags306は、このクラスへのアクセス権を示す。this_class307は、このクラス自身を示すconstant_pool305のインデックスを示す。super_class308は、このクラスの親クラスを示すconstant_pool305のインデックスを示す。interfaces_count309は、interfaces310の個数を示す。interfaces310は、このクラスが持つインターフェースについて情報の配列である。fields_count311は、fields312の個数である。fields312は、このクラスがもつフィールドについての情報の配列である。methods_count313は、methods314の個数である。methods314は、このクラスが持つメソッドについての情報の配列である。attributes_count315は、attributes316の個数である。attributes316は、このクラスの属性情報の配列である。
また、Jarファイルは、複数のJava(R)クラスファイルを1つの圧縮ファイルとして扱える形式のファイルである。
アプリ取得プログラム121は、例えば、インターネット上にあるサーバから、TLS(Transport Layer Security)、HTTP(Hypertext Transfer Protocol)等のプロトコルに従いJava(R)アプリケーションをダウンロードするJava(R)プログラムが相当する。TLSは暗号化により通信時のデータの盗聴、改ざんを防ぐデータ転送方式である。TLSの詳細はRFC2246に記載されており、ここでは詳細な説明を省略する。HTTPは、インターネット上のデータ通信で一般的に用いられているデータ転送方式である。HTTPの詳細はRFC2616に記載されており、ここでは詳細な説明を省略する。
また、アプリ取得プログラム121は、デジタル放送のデータ放送として、MPEG2トランスポートストリーム内に埋め込まれたJava(R)アプリケーションを端末内に読み出すJava(R)プログラムであってもよい。MPEG2トランスポートストリームの詳細はMPEG規格書 ISO/IEC138181−1に記載されており、本実施の形態では詳細は省略する。MPEG2トランスポートストリームにJava(R)プログラムを埋め込む方法は、DSMCC方式として、MPEG規格書ISO/IEC138181−6に記述されている。ここではDSMCCの詳細な説明は省略する。DSMCC方式は、MPEG2トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。
また、アプリ取得プログラム121は、SDカード、CD−ROM、DVD、BlueRayDisc等に記録されたJava(R)アプリケーションを、第1RAM125に出力するJava(R)プログラムであってもよい。
また、アプリ取得プログラム121は、アプリケーション実行装置110内にある第1ROM126内に記録されたJava(R)アプリケーションを、第1RAM125に出力するJava(R)プログラムであってもよい。
また、アプリ取得プログラム121は、仮想マシン122に組み込まれたクラスライブラリであってもよい。
尚、本実施の形態ではアプリ取得プログラム121はJava(R)言語で記述されたJava(R)プログラムとするが、同等の機能を有するネイティブ言語で記述されたプログラムや、ハードウェアで実現されていても同様に本発明を実施できる。
仮想マシン122は、第1RAM125に格納されるバイトコードやJava(R)クラスを解釈し実行するJava(R)バーチャルマシンである。Java(R)言語で記述されたプログラムは、バイトコードと呼ばれるハードウエアに依存しない中間コードにコンパイルされる。Java(R)バーチャルマシンは、このバイトコードを解釈し実行するソフトウェア、またはハードウェアである。
また、一部のJava(R)バーチャルマシンは、バイトコードを第1CPU124が理解可能な実行形式に翻訳するJITコンパイラ機能を持つ。また、Java(R)バーチャルマシンは、一部もしくは全部のバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタから構成される。Java(R)言語の詳細は、書籍「Java(R) Language Specification(ISBN 0−201−63451−1)」等の多くの書籍で解説されている。後ほど、本発明の実施の形態における仮想マシン122の構成について詳細を説明する。
OS123は、アプリケーション実行装置110にユーザが電源を投入した後、第1CPU124が起動するOSである。OSは、オペレーティングシステムの略であり、Linux等が一例である。OS123は、他のサブプログラムを平行して実行するカーネル及び、ライブラリで構成される公知の技術の総称であり、詳細な説明は省略する。OS123は仮想マシン122をサブプログラムとして実行する。
第1CPU124は、第1RAM125に格納されている命令を実行し、第1RAM125に格納されているデータに対して演算を行う演算装置である。また、第1CPU124は第2CPU133との間でセキュアな通信によるデータ通信を行う。
また、第1CPU124は第2CPU133へ、暗号化命令、復号化命令、第1RAM125に格納されているデータ、データのアドレスを第2CPUに送信する。また、第1CPU124は、第2CPU133へ暗号化命令を送信する際は、暗号の強度を示す暗号強度を送信し、さらに送信したデータを第1RAM125から消去する。また、第1CPU124は、第2CPU133からデータを受信し、受信したデータを第1RAM125に格納する。また、第1CPU124は、ユーザがアプリケーション実行装置110の電源を投入すると、OS123を起動する。また第1CPU124は第2CPU133と、復号化命令、暗号化命令、第1RAM125に格納されているデータ、データのアドレス、暗号強度以外の信号を送受信してもよい。
第1RAM125は、具体的にはSRAM、DRAM等の一次記憶メモリで構成され、第1CPU124が処理を行う際、一時的にデータを保存するために使用される。本実施の形態では、第1RAMには、図3に示すクラスファイル300、図4に示すクラスヘッダ400、図5に示す暗号化クラスファイル500、図6に示すクラスブロック600、図8に示す暗号化クラスブロック800が格納される。後ほど、クラスヘッダ400、暗号化クラスファイル500、クラスブロック600、暗号化クラスブロック800の構成について詳細を説明する。
尚、第1RAM125は、クラスファイル400、暗号化クラスファイル500、クラスブロック600、暗号化クラスブロック800以外のデータを記憶していてもよい。
第1ROM126は、具体的にはフラッシュメモリやハードディスク等の不揮発性メモリで構成され、第1CPU124から指示されたデータやプログラムを記憶する。本実施の形態では、第1ROM126には、仮想マシン122、アプリ取得プログラム121が格納されている。尚、第1ROM126には、仮想マシン122、アプリ取得プログラム121以外のデータを記憶していてもよい。
以上が、本発明の実施の形態で用いる実行部120の構成の詳細である。
次に、図1を参考にして実行部130の構成要素についての詳細を説明する。
第2ROM135は、読み出し専用の不揮発性メモリで、第2CPU133以外からは第2ROM135が記憶するデータを読みだすことが出来ないことを保証するものである。図10に第2ROM135が記憶するデータの一例を示す。第2ROM135には、暗号鍵、復号鍵のペアと暗号アルゴリズムの組み合わせを鍵IDで特定することができる鍵テーブル1000が格納されている。
尚、第2ROM135は図10に示した以外のデータを記憶していてもよい。また、鍵テーブル1000は、暗号鍵、復号鍵、暗号アルゴリズム以外の項目を持っても良い。また、暗号アルゴリズムによっては暗号鍵、復号鍵が同じであってもよい。また、暗号アルゴリズムが1つ場合は、鍵テーブル1000に暗号アルゴリズムの項目は無くても良い。
第2RAM134は、具体的にはDRAMやSRAM等で構成され、第2CPU133が処理を行う際、一時的にデータを保存するために使用され、第2CPU133以外からは第2RAM134が記憶するデータを読むことも書くことも出来ないことを保証するものである。第2RAM134はCPU133に混載されていてもよい。
図11に第2RAM134が記憶するデータの一例を示す。第2RAM134には、アドレスと鍵IDの対応表1101が格納されている。アドレスと鍵IDの対応表1101におけるアドレスは、第1RAM125に格納されている各暗号データのアドレスであり、鍵IDは対応するアドレスに格納されている暗号データを暗号化した際に用いた鍵テーブル1000の鍵IDである。また、第2RAM134には、暗号化対象のデータ1102と、暗号化されたデータである暗号化データ1103が格納される。また、データ1102は、暗号化データ1103を復号化したデータでもあり得る。尚、第2RAM134には、図11に示した以外のデータを記憶していてもよい。
第2CPU133は、第2RAM134、第2ROM135に格納されているデータを処理する演算装置である。また、第2CPU133は第1CPU124とセキュアな通信を行い、復号化命令、暗号化命令、第1RAM125に格納されているデータ、データのアドレスを受信し、受信したデータを第2RAM134に格納し、復号処理部131または暗号処理部132に受信したデータのアドレスと復号化命令または暗号化命令を送信する。
また、第2CPU133は、第1CPU124から暗号化命令を受信する際は、暗号強度を受信し、暗号処理部132に受信した暗号強度を送信する。
また、第2CPU133は、第2RAM134に格納されているデータを第1CPU124に送信し、第1RAM125に格納させる。また第2CPU133は第1CPU124と、復号化命令、暗号化命令、第1RAM125に格納されているデータ、データのアドレス、暗号強度以外の信号を送受信してもよい。
復号処理部131は、第2RAM134に格納されている暗号化データ1103を復号化し、復号化したデータ1102を第2RAM134に格納するモジュールである。復号処理部131は、第2CPU133から復号化命令とアドレスを受信し、アドレスと鍵IDの対応表1101から受信したアドレスに対応する鍵IDを特定し、特定した鍵IDと鍵テーブル1000から復号化に用いる復号鍵を特定し、特定した復号鍵と暗号アルゴリズムを用いて暗号化データ1103の復号化を行い、復号化したデータ1102を第2RAM134に格納する。尚、復号処理部131は、ソフトウェア、ハードウェアどちらであっても良い。
暗号処理部132は、第2CPU133から暗号化命令とアドレスと暗号強度を受信し、鍵テーブル1000から暗号化に用いる鍵IDを選択し、データ1102の暗号化を行い、暗号化した暗号化データ1103を第2RAM134へ格納する。また、暗号処理部132は、暗号化を完了した際、アドレスと鍵IDの対応表1101に、受信したアドレスと暗号に用いた鍵IDを追加する。尚、暗号処理部132は、ソフトウェア、ハードウェアどちらであっても良い。
以上が、本実施の形態で用いる安全な実行部130の構成についての詳細である。尚、安全な実行部130はスマートカードやICカードのように、アプリケーション実行装置110から取り外し可能な装置であってもよい。スマートカード、ICカードはカード内部にCPUやメモリ、セキュリティ回路を含む公知の技術であり、詳細な説明を省略する。
次に、図4を参考にして、本実施の形態におけるクラスヘッダ400の構成について詳細を説明する。
クラスヘッダ400は、仮想マシン122の実行中に使われるクラスファイル300毎に作成され、対応付けられるデータであって、暗号強度ヘッダ401と分割情報402から構成される。
暗号強度ヘッダ401は、クラスファイル300を暗号化する際の、暗号強度を示す。
分割情報402は、クラスファイル300を分割した際に、分割されたデータを元に戻すために必要なデータである。本実施の形態におけるクラスファイルの分割情報402は、301〜316の項目または301〜316をグループ化した項目と、301〜316のデータをさらに分割し、分割した後の各データの先頭アドレスを分割前の順番に並べた値を保持する。図4の例では、magic_number301とminor_version302とmajor_version303はグループ化され、グループ化されたデータの先頭アドレスは0x430012dである。fields312は、他の項目とグループ化はされないが2つに分割され、分割された1つ目の先頭アドレスは0x05d8cb321であり、2つ目の先頭アドレスは0x05e0abcdとなる。
尚、クラスファイルの分割情報402の形式は、後に述べるメソッドの分割情報702にも適用される。
本実施の形態に示すように、クラスファイルまたは第1RAM125に格納される他のデータを分割し、分割したそれぞれのデータに異なる暗号鍵を用いて暗号化を施すことで、暗号強度を高めることができる。また、分割・暗号化されたデータを必要なときに必要な分だけ復号化することで、重要なデータが復号化された状態で第1RAMに格納される時間を削減することが可能になる。
以上が、本実施の形態におけるクラスヘッダ400の構成の詳細説明である。
次に、図5を参考にして本実施の形態における暗号化クラスファイル500の構成について説明をする。
暗号化クラスファイル500は、クラスファイル300を暗号化したデータあって、本実施の形態における暗号化クラスファイル500は、クラスファイル301〜316をそれぞれ分割し、暗号化したデータ501〜515から構成される。尚、暗号化クラスファイル500は、クラスファイル300を任意の単位で分割し、暗号化したデータから構成されてもよい。また、クラスファイル300を分割する単位は、Java(R)仮想マシンが行うベリファイの各パスで使われる情報毎であってもよい。ベリファイについての詳細は書籍「Java(R) Virtual Machine Specification(ISBN 0−201−63451−X)」で定義されている。ここでは詳細な説明は省略する。以上が本実施の形態における暗号クラスファイル500の構成である。
次に、図6と図7を参考にして本実施の形態におけるクラスブロック600の構成について説明する。
クラスブロック600は、クラスファイル300を仮想マシン122の内部形式に変換したデータであり、クラスヘッダ400、クラス情報601、メソッド610から構成される。
クラスヘッダ400は、クラスブロック600の元になったクラスに対応していたクラスヘッダと同じデータである。またクラスヘッダ600がもつ分割情報402は、クラス情報601とメソッド610を分割した際の情報を保持する。
クラス情報601は、クラスファイル300の構成要素301〜312、314、315、316を、仮想マシン122の内部形式に変換したデータである。
メソッド610は、methods314を仮想マシン122の内部形式に変換し、付加データを加えたデータであり、メソッドヘッダ611とコード612から構成される。また、メソッド610は、1つのクラスブロック600に対し、methods_counts313の数だけ存在する。
次にメソッドヘッダ611の構成を、図7を用いて説明する。メソッドヘッダ611は、暗号強度ヘッダ701、分割情報702、JITヘッダ703、最適化ヘッダ704、メソッド情報705から構成される。暗号強度ヘッダ701には、コード612を暗号化する際の暗号強度が記されている。分割情報702は、コード612を分割した際の、分割後の各データの第1RAM125におけるアドレスを保持している。分割情報702は、図4に示すクラスファイルの分割情報402と同様な形式で情報を保持している。分割情報702の場合、図4における項目は、メソッド名であったり、コード612を分岐の含まれない一連の命令群で分割した後の各部分に割り当てた番号であったり、コード612が含む命令に割り振った番号であっても良い。また、分割情報402は、その他の形式で分割情報を保持しても良い。
JITヘッダ703は、コード612に対してJITコンパイラを行うか否か、コード612がJITコンパイル済かどうかを示すの情報を保持している。
最適化ヘッダ704には、コード612に対して最適化を行うか否か、現在の最適化のレベル、目標となる最適化レベルが記されている。また、最適化ヘッダには、実行速度やコードサイズなど、実施する最適化の種類または割合も記されている。
メソッド情報705は、methods314に含まれるバイトコード以外の情報を、仮想マシン122の内部形式に変換したデータである。
コード612は、methods314のCode属性であるバイトコード、またはバイトコードを第1CPU124が解釈実行できる形式に変換したネイティブコード、またはネイティブコードに最適化処理を施した最適化ネイティブコードの何れかを保持する。
以上が、本実施の形態におけるクラスブロック600の構成である。
次に、図8を参考にして本実施の形態における暗号化クラスブロック800の構成について説明をする。
暗号化クラスブロック800は、クラスブロック600を暗号化したデータであり、暗号化クラスヘッダ801、暗号化クラス情報802、暗号化メソッド810から構成される。暗号化クラスヘッダ801は、クラスヘッダ400暗号化したデータある。暗号化クラス情報802は、クラス情報601を分割し、暗号化したデータである。暗号化メソッド810は、メソッド610を分割し、暗号化したデータで、暗号化メソッドヘッダ811と暗号化コード812から構成される。暗号化メソッドヘッダ811は、メソッドヘッダ611を分割し、暗号化したデータであり、暗号化コード812は、コードブロック612を分割し、分割後の各コードを暗号化したデータである。
以上が、本実施の形態における暗号化クラスファイル800の構成の説明である。
次に、図9を参考にして、本実施の形態における仮想マシン122の構成の詳細を説明する。
仮想マシン122は、クラスローダ201、ベリファイヤ202、バイトコードインタプリタ203、Java(R)ヒープ管理部204(ヒープ管理部204と称す)、Java(R)ネイティブライブラリ205(ネイティブライブラリ205と称す)、JITコンパイラ206で構成されている。
クラスローダ201は、バイトコードインタプリタ203からクラスロード命令を受信し、第1RAM125に格納されているクラスファイル300から仮想マシン122の内部形式であるクラスブロック600を作成し、第1RAM125に格納する。また、クラスブロック600を分割し、クラスブロック600の暗号化命令を第1CPUに送信する。また、クラスローダ201は、クラスアンロード処理も行う。クラスアンロード処理は、実行が終了し不要になったクラスを仮想マシン122から取り除く処理である。
ベリファイヤ202は、第1RAM125にあるクラスブロック600を入力とし、クラスのデータ形式の不備や、クラスに含まれるバイトコードの安全性を判定する。バイトコードの安全性の検査方法は、Java(R) Language Specificationで定義されているため詳細な説明は省略する。
バイトコードインタプリタ203は、コード612解釈実行するモジュールである。バイトコードインタプリタ203は、暗号化メソッド810の復号化命令を出力し、復号化されたメソッド610のコード612の解釈実行や、第1CPUへのネイティブコードの実行命令出力を行う。また、バイトコードインタプリタ203は、バイトコードのJITコンパイル命令をJITコンパイラ206に出力したりし、ネイティブコードの最適化を最適化部207に出力したりする。
ヒープ管理部204は、Java(R)アプリケーションが使用するワーキングメモリの確保を行う。ワーキングメモリは第1RAM125内に確保される。また、ヒープ管理部204は、ガベージコレクションも行う。ガベージコレクションは、アプリケーション実行において不要になったワーキングメモリを開放し、他の用途に再利用できるようにする公知の技術であり、詳細な説明は省略する。
ネイティブライブラリ205は、Java(R)アプリケーションから呼び出されるライブラリで、OS123や、アプリケーション実行装置210が備える図1には記載されていないハードウェア、サブプログラム等で提供される機能をJava(R)アプリケーションへ提供する。
JITコンパイラ206は、バイトコードから第1CPUが解釈実行可能なネイティブコードを生成するモジュールであり、バイトコードインタプリタ203からJITコンパイル命令を受信し、バイトコードからネイティブコードを作成し第1RAM125に格納する。また、JITコンパイラ206は、最適化ネイティブコードの暗号化命令を第1CPU124に送信する。
最適化部207は、ネイティブコードの最適化処理を行うモジュールであって、バイトコードインタプリタ203から最適化命令を受信し、ネイティブコードを最適化し、第1RAM125に格納する。また、最適化部207は、最適化されたネイティブコードの暗号化命令を第1CPU124に送信する。
以上が、本実施の形態における仮想マシン122の構成の詳細である。
次に、図12を参考にして本実施の形態におけるアプリケーション実行装置110の動作手順について説明する。
まず、ユーザによりアプリケーション実行装置110の電源が投入される(S101)。次に第1CPU124が、OS123を起動する(S102)。
次に、第1CPU124が仮想マシン122起動する(S103)。
次に、仮想マシン122が、アプリ取得プログラム121を起動し、アプリ取得処理を行う。アプリ取得処理では、ダウンロード可能なプログラム100を入手し、クラスファイル300を取り出して暗号化し、暗号化クラスファイル500を第1RAM125に作成する(S104)。アプリ取得処理については、後ほど詳細を説明する。
次に、クラスローダ201がクラスロード処理を実行する。クラスロード処理では、暗号化クラスファイル500を復号化し、クラスファイル300からクラスブロック600を生成し、さらに暗号化を行い、暗号化クラスブロック800を第1RAMに格納する。クラスロード処理については、後ほど詳細を説明する。
次に、ベリファイヤ202が、ベリファイ処理を実行する。ベリファイ処理では、暗号化クラスブロック800を復号化して得たクラスブロック600をもとにクラスの正当性を確認する。ベリファイ処理については、後ほど詳細を説明する。
次に、バイトコードインタプリタ203がコード612の実行をするインタプリタ処理を行う。インタプリタ処理では、暗号化コード812を復号化して得たコードを実行し、実行し終わったらコード612の暗号化命令を送信する。また必要ならばJITコンパイラ206へのJITコンパイル命令送信や最適化部207へ最適化命令の送信を行う。インタプリタ処理については、後ほど詳細を説明する。
尚、アプリ取得プログラム121が仮想マシン122へ組み込まれたクラスライブラリである場合は、ステップS104とステップS105の動作をまとめて、実行してもよい。またその際、暗号化、復号化の中間処理を省略してもよい。
以上が、本実施の形態におけるアプリケーション実行装置110の動作手順である。
次に、図13を参考にして、本実施の形態におけるアプリ取得処理の動作手順について説明をする。
まず、アプリ取得プログラム121が、ダウンロード可能なプログラム100を取得し、ダウンロード可能なプログラム100のクラスファイル300を第1RAM125へ格納する(S201)。また、クラスヘッダ400もダウンロードした場合は、クラスヘッダ400を第1RAM125に格納する。このときの第1RAM125に格納されているデータの一例を図14に示す。
次に、クラスファイル300とクラスヘッダ400が既に暗号化されている場合は、暗号化命令を送信せず、アプリ取得処理を終了する(S202)。
次に、アプリ取得プログラム121が、クラスファイル300を分割する。分割した情報を分割情報402に記録する(S203)。ここで、分割するデータの単位は、クラスファイル300の構成要素である301〜316を任意に組み合わせたもので良い。つまり301〜316をそれぞれ暗号化しても良いし、まとめて暗号化しても良い。
次に、アプリ取得プログラム121がクラスファイル300とクラスヘッダ400のアドレスと暗号化強度と暗号化命令を第1CPUに送信し、暗号処理部132が、第1CPU経由で第2CPUから暗号化命令を受信し、暗号処理を行い、暗号化クラスファイル500と暗号化クラスヘッダ801の作成を行う。また、第1CPUは、クラスファイル300とクラスヘッダ400の削除を行う(S203)。暗号処理の詳細は、後で説明する。このときの第1RAM125に格納されているデータの一例を図15に示す。
以上が、本実施の形態におけるアプリ取得処理の動作手順である。
次に、図18を参照にして本発明の実施の形態におけるクラスロード処理の動作手順を説明する。
まず、クラスローダ201が、バイトコードインタプリタ203からクラスロード命令を受信する(S301)。
次にクラスローダ201が暗号化クラスヘッダ801のアドレスと復号化命令を第1CPU124に送信する(S302)。
次に、復号処理部131が第1CPU124経由で第2CPU133から復号化命令を受信し、復号処理を行い、クラスヘッダ400の作成を行う(S303)。復号処理については後に詳細を説明する。
次に、クラスローダ201は、クラスヘッダ400の情報を元に暗号化クラスファイル500のアドレスのアドレスと復号化命令を第1CPUに送信する。(S304)。ここで、暗号化クラスファイル500が分割されている場合は、分割された各データのアドレスも送信する。
次に、復号処理部131は、受信したアドレスに格納されているデータの復号化を行い、クラスファイル300を作成する(S305)。クラスファイル300が分割されている場合は、クラスローダ201が分割されているデータを統合してクラスファイル300を作成する。
次に、クラスローダ201は、クラスファイル300とクラスヘッダ400からクラスブロック600を作成し、クラスファイル300を削除する(S306)。この時点での第1RAM125に格納されているデータの一例を図16に示す。
次に、クラスローダ201が、クラスブロック600を分割し、分割情報402に分割情報を書き込む(S307)。
次に、クラスローダ201が、分割したクラスブロック600の各アドレスと暗号化命令を第1CPUに送信し、暗号処理部132が、第1CPU経由で第2CPUからアドレスと暗号化命令を受信し、暗号処理を行い、暗号化クラスブロック800の作成を行う。また、第1CPUがクラスブロック600の削除をする。(S308)。この時点での第1RAM125に格納されているデータの一例を図17に示す。
以上が、本実施の形態におけるクラスロード処理の動作手順である。
次に、図19を参考にして、本実施の形態におけるベリファイ処理の動作手順について説明をする。
まず、ベリファイヤ202が、バイトコードインタプリタ203からベリファイ命令を受信する(S401)。
次に、ベリファイヤ202が、ベリファイに必要なクラスファイル300の構成要素301〜316のすべて、または一部を特定する(S402)。
次に、ベリファイヤ202は、暗号化クラスヘッダ801の復号化命令を第1CPUに送信し、復号処理部131がクラスヘッダ400を作成する(S403)。
次に、ベリファイヤ202は、ステップS402で特定したデータに対応する暗号化クラスブロック800の構成要素のアドレスと復号化命令を第1CPU124に送信し、復号処理部131が第1CPU124経由で第2CPU133からアドレスと復号化命令を受信し、復号処理を行い、ステップS402で特定されたベリファイに必要なデータの作成を行う(S404)。
次に、ベリファイヤ202が、ステップS404で作成されたベリファイに必要な情報に対し、ベリファイを実行する(S405)。
次に、ベリファイヤ202が、ベリファイを継続するためにさらにクラスファイル300の構成要素または他のクラスの情報が必要かどうかを判定する。必要である場合はステップS404の処理を実行する。さらなる情報が必要ない場合は、ベリファイを継続しベリファイを完了させる(S406)。
ここで、クラスファイル300の構成要素または他のクラスの情報がさらに必要な場合の一例を説明する。例えば、ベリファイヤが確認する項目は2つあり、それぞれ項目A、項目Bとする。項目Aは、クラスファイル300内の情報のみで確認できる項目であり、項目Bは確認のため他のクラスブロックの情報も必要とする項目であるとする。まず、ベリファイヤは項目Aを確認するためにクラスファイル300の構成要素を復号化して項目Aを確認する。この時点では、他のクラスブロックの情報は必要ない。次に、ベリファイヤは項目Bを確認するが、その際は他のクラスブロックの情報が必要となる。このように、確認する項目によって必要な情報は異なるため、必要な情報を必要なときのみ復号化することで、復号化された情報がメモリ上に置かれる時間を削減することが可能となる。
次に、ベリファイヤ202が、クラスブロック600の分割を行い、分割情報402に分割情報を書き込む(S407)。
次に、ベリファイヤ202が、クラスブロック600とクラスヘッダ400のアドレスと暗号化命令を第1CPU124へ送信し、暗号処理部132が、第1CPU124経由で第2CPU133からアドレスと暗号化命令を受信し、暗号処理を行い、暗号化クラスブロック800の作成をする。また、第1CPUがクラスブロック600を消去する(S408)。
以上が、本実施の形態におけるベリファイ処理の動作手順詳細である。
次に、図20を参考にして、本実施の形態におけるインタプリタ処理の動作手順について説明をする。
まず、バイトコードインタプリタ203が実行するメソッドを特定する(S501)。
次に、バイトコードインタプリタ203が、暗号化メソッドヘッダ811のアドレスと復号化命令を第1CPU124に送信し、復号処理部が第2CPU133経由で復号化命令とアドレスを受信し、メソッドヘッダ611の作成を行う(S502)。
次に、バイトコードインタプリタ203は、コード612がJITコンパイル済であるかどうかをJITヘッダ703の値により判定する(S503)。JITコンパイル済みである場合は、ステップS504へ進み、最適化処理を行う。最適化処理については、後ほど詳細を説明する。JITコンパイル済でない場合は、ステップS505へ進む。
次に、バイトコードインタプリタ203は、コード612に対してJITコンパイルを行うかどうかをJITヘッダ703の値により判定する(S505)。JITコンパイルを行う場合は、ステップS506へ進みJITコンパイル処理を行う。JITコンパイル処理については、後ほど詳細を説明する。JITコンパイルを行わない場合は、ステップS507へ進む。
次に、バイトコードインタプリタ203が、分割情報702をもとに、暗号化コード812を分割した各部分のアドレスの一部と、復号化命令を第1CPU124へ送信する。また、復号処理部131が第1CPU124経由で第2CPU133からアドレスと復号化命令を受信し、復号処理を行い、コード612の一部を作成する(S507)。
次に、バイトコードインタプリタ203が、ステップS507で復号化されたコード612の一部を解釈実行する。コード612がバイトコードならば、バイトコードインタプリタが解釈実行し、JITコンパイルまたは最適化処理されたネイティブコードまたはネイティブライブラリ205であるならば、第1CPUに実行させる(S508)。
次に、ステップS508の実行中、さらにコード612の復号化が必要である場合は、分割情報702から復号化が必要なデータのアドレスを読み取り、ステップS507に移る(S509)。ここで、さらにコード612の復号化が必要な場合とは、例えば、暗号化コード812の復号化された部分を実行し終わり、次に、残りの暗号化されている部分の実行が必要になる場合などである。
次に、コード612の実行が終わると、バイトコードインタプリタ203は、コード612の分割または結合を行い、分割または結合後のデータのアドレスを分割情報702に書き込む(S510)。尚、ここでの分割または結合の度合は、暗号強度ヘッダやコード612の実行時間などに応じて決定してもよい。
次に、バイトコードインタプリタ203は、分割したコード612の各部分のアドレスと暗号強度と暗号化命令を第1CPU124へ送信する。また、暗号処理部132は、第1CPU124経由で第2CPU133からアドレスと暗号化命令を受信し、暗号処理を行い、暗号化コード812を作成する。また、第1CPU124は、コード612を削除する(S511)。尚、このときにメソッドヘッダ611を暗号化し、暗号化メソッドヘッダ811を作成してもよい。
以上が、本実施の形態におけるインタプリタ処理の動作手順である。
次に、図21を参考にして、本実施の形態におけるJITコンパイル処理の動作手順について説明をする。
まず、JITコンパイラ206が、バイトコードインタプリタ203から、JITコンパイル対象となるコード612とメソッドヘッダ611とJITコンパイル命令を受信する(S601)。この時の、第1RAM125に格納されているデータの一例を図22に示す。この時のコード612は、バイトコードを暗号化した暗号化バイトコード2201である。
次に、JITコンパイラ206が、分割情報402を元に各暗号化バイトコード2201のアドレスと復号化命令を第1CPUへ送信する(S602)。
次に、復号処理部131が、第1CPU124経由で第2CPU133からアドレスと復号化命令を受信し、復号処理を行い、コード612またはその一部の作成を行う(S603)。この時の、第1RAM125に格納されているデータの一例を図23に示す。この時のコード612は、バイトコードインタプリタ203が解釈可能なバイトコード2301である。
次に、JITコンパイラ206が、バイトコード2301を変換して中間コードを作成し、中間コードからネイティブコードを作成し、さらにバイトコード2301を削除する(S604)。また、暗号化バイトコード2201も削除しても良い。この時の、第1RAM125に格納されているデータの一例を図24に示す。このときのコード612は、ネイティブコード2402である。また、第1RAM125には、中間コード2401も存在している。
次に、JITコンパイラ206が、ネイティブコード2402と中間コード2401を分割し、分割した情報を分割情報702に書き込む(S605)。
次に、JITコンパイラ206が、分割されたネイティブコード2402と中間コード2401の各部分のアドレスと暗号化命令と暗号強度を第1CPU124へ送信し、暗号処理部132が暗号処理を行う。また、第1CPU124が、ネイティブコード2402と中間コード2401を消去する(S606)。この時の、第1RAM125に格納されているデータの一例を図25に示す。この時の暗号化コード812は、ネイティブコードを暗号化した暗号化ネイティブコード2502である。また、中間コードを暗号化した暗号化中間コード2501も存在している。
尚、JITコンパイルを行うタイミングは、CPUの使用率が低いときなど、任意のタイミングでよい。また、JITコンパイラ206は、中間コード2401を生成せず、直接ネイティブコード2402を生成してもよい。
以上が、本実施の形態におけるJITコンパイル処理の動作手順について説明である。
次に、図26を参考にして、本実施の形態における最適化処理の動作手順について説明をする。
まず、バイトコードインタプリタ203から、メソッドヘッダ611と最適化対象の暗号化コード812と最適化命令を受信する(S701)。このときの第1RAM125に格納されているデータの一例を図27に示す。このとき、暗号化コード812は、ネイティブコードを暗号化した暗号化ネイティブコード2502である。また、中間コードを暗号化した暗号中間コード2501も存在している。
次に、最適化部207は、最適化ヘッダ704から、現在の最適化レベルと目標最適化レベルを読み込み、最適化を行う必要があるかどうかの判定を行う。また、実行する最適化のレベルを設定する。最適化を行う必要がなければ、最適化処理を終了する。最適化の必要があればステップS703へ進む(S702)。
次に、最適化部207は、ステップS702で設定されたレベルの最適化を実行するに必要なネイティブコードまたは中間コードを特定し、分割情報702から分割されている暗号化ネイティブコード2502または暗号化中間コード2501の各部分のアドレスと復号化命令を第1CPU124へ送信する。さらに、復号処理部131は、第1CPU124経由で第2CPU133からアドレスと復号化命令を受信し、復号処理を行い、ネイティブコードまたは中間コードを復号化する(S703)。このときの第1RAM125に格納されているデータの一例を図28に示す。このとき、ネイティブコード2802または中間コード2801が存在している。
次に、最適化部207は、ネイティブコード2802または中間コード2801に対しステップS702で設定された最適化レベルでの最適化を行い、図29に示す最適化ネイティブコード2902または最適化中間コード2901を作成し、中間コード2801またはネイティブコード2802を削除する(S704)。ここで行う最適化手法は、従来のコンパイラ技術を用いることで実現する。コンパイラ技術については公知技術であるため、ここでの説明は省略する。また、最適化には、実行速度の最適化、コードサイズの最適化などの種類があるが、どの最適化を行うかは最適化ヘッダに記されている種類を用いる。最適化のこのときの第1RAM125に格納されているデータの一例を図29に示す。このとき、コード612は、最適化ネイティブコード2902となる。また、最適化中間コード2901が存在している。
次に、最適化部207は、最適化ネイティブコード2902または最適化中間コード2901を分割し、分割後のデータのアドレスを分割情報702に書き込む(S705)。
次に、最適化部207は、分割した最適化ネイティブコード2902または最適化中間コード2901の各要素のアドレスと暗号化命令と暗号強度を第1CPU124へ送信する。暗号処理部132は、第1CPU124経由で第2CPU133から分割された最適化ネイティブコード2902または最適化中間コード2901の各部分のアドレスと暗号化命令を受信し、暗号処理を行い、図30に示す暗号化最適化ネイティブコード3002または暗号化最適化中間コード3001を作成する。また第1CPU124は、最適化ネイティブコード2902または最適化中間コード2901の削除を行う(S706)。このときの第1RAM125に格納されているデータの一例を図30に示す。このとき、暗号化コード812は、暗号化最適化ネイティブコード3002となる。また、最適化中間コードを暗号化した暗号化最適化中間コード3001も存在している。
尚、最適化を行うタイミングは、CPUの使用率が低いときや、メソッドの使用頻度が低い間や、任意のタイミングでよい。また、JITコンパイラ206が中間コード2401を生成しない場合は、最適化中間コード2901、暗号化最適化中間コード3001は第1RAM125に存在しなくてもよい。
以上が、本実施の形態における最適化処理の動作手順について説明である。
次に、図31を参考にして、本実施の形態における暗号化処理の動作手順の説明をする。
まず、第2CPU133が第1CPU124から、暗号化命令または復号化命令と、第1RAM125に格納されているデータとデータのアドレスを受信し、受信したデータを受け取る(S801)。
次に、第2CPU133は、受信したデータ第2RAM134に格納し、暗号処理部132に受信したデータのアドレスと暗号強度と暗号化命令を送信する(S802)。ここで、第2CPU133が第2RAM134に格納したデータは、データ1102である。
次に、第1CPU124が、暗号対象となるデータを第1RAM125から削除する(S803)。
次に、暗号処理部132が、鍵テーブル501から鍵IDを選択する(S804)。ここで鍵IDを選択するアルゴリズムは、受信した暗号強度レベル、暗号対象のデータの重要度、使用頻度、暗号化命令発信プログラムが決定した暗号化レベル、暗号化命令発信プログラムの処理時間、実行時の時刻、ランダムな値などをもとに、鍵IDを選択するなどの任意の方法で良い。また、暗号処理部132は、暗号鍵と復号鍵を新たに生成し、生成した鍵を鍵テーブルに登録し、生成した鍵に割り振られた鍵IDを用いても良い。
次に、S804で選択した鍵IDに対応する暗号鍵を使い、データ1102暗号化し、暗号化データ1103を作成(S805)。
次に、第2CPU133が、第2RAMに格納されている暗号化データ1103を第1CPUへ送信し、第1CPU124は受信した暗号化データ1103を第1RAM125へ格納する。
次に、暗号処理部132が、暗号化したデータを格納する第1RAM125上のアドレスと暗号に用いた鍵IDを、アドレスと鍵IDの対応表1101に書きこむ(S807)。尚、暗号対象となるデータの削除ステップS803は任意のタイミングに実行してもよく、暗号処理部132以外のモジュールが行っても良い。
以上が、本実施の形態における暗号化処理の動作手順の説明である。
次に、図32を参考にして、本実施の形態における復号化処理の動作手順の説明をする。
まず、第2CPU133が第1CPU124から、復号化命令と復号化対象のデータとデータのアドレスを受信し、受信したデータを第2RAM134に格納する。このとき格納されるデータが暗号化データ1103である。また、第2CPU133が復号処理部131に、復号化命令とデータのアドレスを送信する(S901)。
次に、復号処理部131が、ステップS901で受信したアドレスをもとに、アドレスと鍵IDの対応表1101から暗号化に用いた鍵IDを特定する。また、特定した鍵IDをもとに、鍵テーブル1000から復号鍵を特定する(S902)。
次に、復号処理部131は、暗号化データ1103を復号化し、復号したデータ1102を第2RAM134に格納する。また、復号処理部131は、アドレスと鍵IDの対応表から、ステップS901で受信したアドレスの行を削除する。(S904)。
以上が、本発明の実施の形態における復号化処理の動作手順の説明である。
尚、本発明の実施の形態において実施される、第1RAM125に格納されているデータの暗号化処理、復号化処理は、任意の組み合わせで省略してもよい。
暗号化処理、復号化処理を省略することで、実行速度の向上や使用メモリの削減を実現することができる。例えば、アプリ取得処理S104とクラスロード処理S105の間で、クラスファイル300の暗号化と復号化を省略してもよい。また、クラスロード処理S105とベリファイ処理S106の間でクラスブロック600とその構成要素の暗号化、復号化を省略してもよい。また、ベリファイ処理S106とインタプリタ処理S107の間で、クラスブロック600とその構成要素の暗号化、復号化を省略してもよい。また、JITコンパイル処理S506と最適化処理S504の間で、クラスブロック600とその構成要素の暗号化、復号化を省略してもよい。また、最適化処理S504と暗号コードの復号化S507の間で、クラスブロック600とその構成要素の暗号化、復号化を省略してもよい。
また、本実施の形態において、暗号強度ヘッダ701やJITヘッダ703や最適化ヘッダ704の内容を、プログラム実行中に計測したプロファイル情報を元に、実行中の任意のタイミングで書き換えても良い。
以上が、本発明における実施の形態の説明である。本発明により、暗号化されていないデータがRAM上に置かれる時間を短縮することが可能となり、ソフトウェアの解析を極めて困難にする。
本発明に係るアプリケーション実行装置は、クラスロード、ベリファイ、バイトコード実行、JITコンパイル時においてメモリ上に置かれるクラス情報を暗号化する機能を有し、さらに実行時に復号化されたデータがメモリ上に置かれる時間を短縮する機能を有することで、ダウンロードされたアプリケーションを実行時の盗聴、改ざんから保護することができる。本発明を利用することで、今後本格展開が予想されるアプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護することができる。
本発明アプリケーション実行装置の実施の形態の構成図 従来のアプリケーション実行装置の実施の形態の構成図 本発明に係るクラスファイルの構成の一例の図 本発明に係るクラスヘッダの構成図 本発明における実施の形態の暗号化クラスファイルの構成図 本発明における実行の形態のクラスブロックの構成図 本発明における実行の形態のメソッドヘッダの構成図 本発明における実行の形態の暗号化クラスブロックの構成図 本発明に係る仮想マシンの構成の一例の構成図 本発明に係るアプリケーション実行装置が備える第2のROMに記憶されている情報の一例の構成図 本発明に係るアプリケーション実行装置が備える第2のRAMに記憶されている情報の一例の構成図 本発明に係るアプリケーション実行装置の動作手順を示すフローチャート 本発明に係るアプリケーション実行装置のアプリ取得処理の手順を示す図 本発明に係るアプリケーション実行装置のアプリ取得処理時のステップS201後に、第1RAMに記憶されている情報の一例の構成図 本発明に係るアプリケーション実行装置のアプリ取得処理後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンのクラスロード処理におけるステップS306後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンのクラスロード処理後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンのクラスロード処理の動作手順を示すフローチャート 本発明に係る仮想マシンのベリファイ処理の動作手順を示すフローチャート 本発明に係る仮想マシンのインタプリタ処理の動作手順を示すフローチャート 本発明に係る仮想マシンのJITコンパイル処理の動作手順を示すフローチャート 本発明に係る仮想マシンのJITコンパイル処理のステップS601後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンのJITコンパイル処理のステップS603後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンのJITコンパイル処理のステップS604後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンのJITコンパイル処理のステップS606後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンの最適化処理の動作手順を示すフローチャート 本発明に係る仮想マシンの最適化処理のステップS701後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンの最適化処理のステップS703後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンの最適化処理のステップS704後に、第1RAMに記憶されている情報の一例の構成図 本発明に係る仮想マシンの最適化処理のステップS706後に、第1RAMに記憶されている情報の一例の構成図 本発明に係るアプリケーション実行環境における暗号化処理の動作手順を示すフローチャート 本発明に係るアプリケーション実行環境における復号化処理の動作手順を示すフローチャート
符号の説明
100 ダウンロード可能なプログラム
110 アプリケーション実行装置
120 実行部
121 アプリ取得プログラム
122 仮想マシン
123 OS
124 第1CPU
125 第1RAM
126 第1ROM
130 安全な実行部
131 復号処理部
132 暗号処理部
133 第2CPU
134 第2RAM
135 第2ROM

Claims (19)

  1. オブジェクト指向言語で記述されたプログラムを暗号化した暗号化プログラムを実行するプログラム実行環境において
    前記暗号化プログラムを格納する暗号化プログラム格納手段と、
    前記暗号化プログラム格納手段に格納されている暗号化プログラムを復号する復号化手段と、
    前記復号化手段により復号化されたプログラムを、プログラム実行中に前記プログラム実行環境を動作させている演算装置が解釈実行可能なネイティブコードに変換するプログラム変換手段と、
    前記プログラム変換手段により変換したネイティブコードを格納するネイティブコード格納手段と、
    前記プログラム変換手段により変換されたネイティブコードを暗号化するネイティブコード暗号化手段とを含むことを特徴とするプログラム変換方法。
  2. 前記ネイティブコード暗号化手段は、前記ネイティブコードを所定の単位に分割し、分割した各々のコードに対して暗号化することを特徴とする請求項1に記載のプログラム変換方法。
  3. 請求項2における所定の単位とは、オブジェクト指向言語でのメソッドであることを特徴とする請求項2に記載のプログラム変換方法。
  4. 請求項2における所定の単位とは、分岐を含まない一連の命令群毎であることを特徴とする請求項2に記載のプログラム変換方法。
  5. 請求項2における所定の単位とは、1命令毎であることを特徴とする請求項2に記載のプログラム変換方法。
  6. 前記ネイティブコード暗号化手段は、暗号化を実行する度に暗号鍵を変更することを特徴とする請求項1または請求項2に記載のプログラム変換方法。
  7. 前記ネイティブコード暗号化手段は、暗号化を実行する度に暗号アルゴリズムを変更することを特徴とする請求項1または請求項2に記載のプログラム変換方法。
  8. 前記プログラム変換手段は、前記プログラムに付加された値により、プログラム変換を行うかどうかを判定することを特徴とする請求項1に記載のプログラム変換方法。
  9. 前記ネイティブコード暗号化手段は、前記プログラムに付加された値により、暗号鍵または暗号化アルゴリズムを決定することを特徴とする請求項1に記載のプログラム変換方法。
  10. 前記プログラム変換手段は、前記ネイティブコードを生成した後、前記プログラムまたは前記暗号化プログラムを削除することを特徴とすることを特徴とする請求項1または請求項2に記載のプログラム変換方法。
  11. 暗号化ネイティブコードを復号化するネイティブコード復号化手段と、復号化されたネイティブコードを実行することネイティブコード実行手段を備えることを特徴とするプログラム実行装置。
  12. 前記ネイティブコード復号化手段は、前記暗号化ネイティブコードが分割された単位で復号化し、前記ネイティブコード実行手段は、前記ネイティブコード復号化手段で復号化された単位毎に、ネイティブコードを実行することを特徴とする請求項11に記載のプログラム実行装置。
  13. 前記ネイティブコード実行手段は、実行済の前記ネイティブコードまたは前記ネイティブコードの部分を暗号化することを特徴とする請求項11に記載のプログラム実行装置。
  14. 前記ネイティブコード実行手段は、実行済の前記ネイティブコードまたは前記ネイティブコードの部分を削除することを特徴とする請求項11に記載のプログラム実行装置。
  15. 前記ネイティブコードを最適化し、最適化が施されたネイティブコードを暗号化するネイティブコード最適化手段をもつことを特徴とする請求項1に記載のプログラム変換方法。
  16. 前記ネイティブコード最適化手段は、前記プログラム変換手段によるプログラムの変換とは違うタイミングで最適化を行うことを特徴とする請求項15に記載のプログラム変換方法。
  17. 前記ネイティブコード最適化手段は、最適化前のネイティブコードを削除することを特徴とする請求項15に記載のプログラム変換方法。
  18. 暗号化プログラムを復号化し、復号化された前記プログラムに対し安全性を検査する、プログラムベリファイ方法。
  19. 前記プログラムベリファイ方法は、複数の検査項目をもち、各検査項目に必要な情報のみを復号化し、復号化された情報に対し安全性をチェックし、各検査項目が終了した後、復号化された情報を削除または暗号化する請求項18に記載のプログラムベリファイ方法。
JP2004110781A 2004-04-05 2004-04-05 アプリケーション実行装置 Pending JP2007233426A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004110781A JP2007233426A (ja) 2004-04-05 2004-04-05 アプリケーション実行装置
PCT/JP2005/006307 WO2005098570A1 (ja) 2004-04-05 2005-03-31 実行装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004110781A JP2007233426A (ja) 2004-04-05 2004-04-05 アプリケーション実行装置

Publications (1)

Publication Number Publication Date
JP2007233426A true JP2007233426A (ja) 2007-09-13

Family

ID=35125246

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004110781A Pending JP2007233426A (ja) 2004-04-05 2004-04-05 アプリケーション実行装置

Country Status (2)

Country Link
JP (1) JP2007233426A (ja)
WO (1) WO2005098570A1 (ja)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007094728A (ja) * 2005-09-28 2007-04-12 Digital Electronics Corp 情報処理装置、情報処理システム、プログラムおよび記録媒体
JP2009175880A (ja) * 2008-01-22 2009-08-06 Toshiba Corp 情報処理装置及びプログラム
JP2010217975A (ja) * 2009-03-13 2010-09-30 Nec System Technologies Ltd 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
JP2012531663A (ja) * 2009-06-26 2012-12-10 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ・システム中の安全オブジェクトに対するサポート
US8954752B2 (en) 2011-02-23 2015-02-10 International Business Machines Corporation Building and distributing secure object software
US9098442B2 (en) 2009-06-26 2015-08-04 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
JP2016503541A (ja) * 2013-08-14 2016-02-04 スンシル ユニバーシティー リサーチ コンソルティウム テクノーパークSoongsil University Research Consortium Techno−Park コード難読化装置及びその方法
US9298894B2 (en) 2009-06-26 2016-03-29 International Business Machines Corporation Cache structure for a computer system providing support for secure objects
JP2016126705A (ja) * 2015-01-08 2016-07-11 三菱日立パワーシステムズ株式会社 制御システム、制御方法およびプログラム
JP2017146967A (ja) * 2016-02-18 2017-08-24 Line株式会社 中間言語ファイルのロード速度改善のための方法およびシステム
US9846789B2 (en) 2011-09-06 2017-12-19 International Business Machines Corporation Protecting application programs from malicious software or malware
JP2017538217A (ja) * 2014-11-28 2017-12-21 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス
US9864853B2 (en) 2011-02-23 2018-01-09 International Business Machines Corporation Enhanced security mechanism for authentication of users of a system
US9954875B2 (en) 2009-06-26 2018-04-24 International Business Machines Corporation Protecting from unintentional malware download

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4631658B2 (ja) 2005-11-09 2011-02-16 ソニー株式会社 デジタル放送受信システム及びデジタル放送受信装置
JP2009258772A (ja) * 2006-08-09 2009-11-05 Panasonic Corp アプリケーション実行装置
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
JP5775738B2 (ja) 2011-04-28 2015-09-09 富士通株式会社 情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラム
JP6083348B2 (ja) * 2013-07-31 2017-02-22 株式会社ソシオネクスト プログラム実行方法および復号装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09233067A (ja) * 1990-07-31 1997-09-05 Hiroichi Okano 知的情報処理方法および装置
JP4042280B2 (ja) * 1999-12-21 2008-02-06 富士ゼロックス株式会社 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体
JP2002132364A (ja) * 2000-10-19 2002-05-10 Yutaka Iizuka プログラムを内部解析から保護する方法、コンピュータ読み取り可能な記録媒体及びプログラムの配布方法

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007094728A (ja) * 2005-09-28 2007-04-12 Digital Electronics Corp 情報処理装置、情報処理システム、プログラムおよび記録媒体
JP4727366B2 (ja) * 2005-09-28 2011-07-20 株式会社デジタル 情報処理装置、情報処理システム、プログラムおよび記録媒体
JP2009175880A (ja) * 2008-01-22 2009-08-06 Toshiba Corp 情報処理装置及びプログラム
JP2010217975A (ja) * 2009-03-13 2010-09-30 Nec System Technologies Ltd 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
US10785240B2 (en) 2009-06-26 2020-09-22 International Business Machines Corporation Protecting from unintentional malware download
US8819446B2 (en) 2009-06-26 2014-08-26 International Business Machines Corporation Support for secure objects in a computer system
JP2012531663A (ja) * 2009-06-26 2012-12-10 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ・システム中の安全オブジェクトに対するサポート
US9098442B2 (en) 2009-06-26 2015-08-04 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
US9875193B2 (en) 2009-06-26 2018-01-23 International Business Machines Corporation Cache structure for a computer system providing support for secure objects
US9298894B2 (en) 2009-06-26 2016-03-29 International Business Machines Corporation Cache structure for a computer system providing support for secure objects
US9372967B2 (en) 2009-06-26 2016-06-21 International Business Machines Corporation Support for secure objects in a computer system
US10362045B2 (en) 2009-06-26 2019-07-23 International Business Machines Corporation Protecting from unintentional malware download
US9471513B2 (en) 2009-06-26 2016-10-18 International Business Machines Corporation Cache structure for a computer system providing support for secure objects
US9690717B2 (en) 2009-06-26 2017-06-27 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
US9727709B2 (en) 2009-06-26 2017-08-08 International Business Machines Corporation Support for secure objects in a computer system
US10007793B2 (en) 2009-06-26 2018-06-26 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
US9954875B2 (en) 2009-06-26 2018-04-24 International Business Machines Corporation Protecting from unintentional malware download
US8954752B2 (en) 2011-02-23 2015-02-10 International Business Machines Corporation Building and distributing secure object software
US9864853B2 (en) 2011-02-23 2018-01-09 International Business Machines Corporation Enhanced security mechanism for authentication of users of a system
US9846789B2 (en) 2011-09-06 2017-12-19 International Business Machines Corporation Protecting application programs from malicious software or malware
US10007808B2 (en) 2011-09-06 2018-06-26 International Business Machines Corporation Protecting application programs from malicious software or malware
JP2016503541A (ja) * 2013-08-14 2016-02-04 スンシル ユニバーシティー リサーチ コンソルティウム テクノーパークSoongsil University Research Consortium Techno−Park コード難読化装置及びその方法
JP2017538217A (ja) * 2014-11-28 2017-12-21 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス
JP2016126705A (ja) * 2015-01-08 2016-07-11 三菱日立パワーシステムズ株式会社 制御システム、制御方法およびプログラム
JP2017146967A (ja) * 2016-02-18 2017-08-24 Line株式会社 中間言語ファイルのロード速度改善のための方法およびシステム

Also Published As

Publication number Publication date
WO2005098570A1 (ja) 2005-10-20

Similar Documents

Publication Publication Date Title
US10148625B2 (en) Secure transfer and tracking of data using removable nonvolatile memory devices
US20070271446A1 (en) Application Execution Device and Application Execution Device Application Execution Method
JP2007233426A (ja) アプリケーション実行装置
US20160203087A1 (en) Method for providing security for common intermediate language-based program
US20080270806A1 (en) Execution Device
EP1909244A1 (en) Execution device
JP2007226277A (ja) 仮想マシン改ざん検査方法、および仮想マシン改ざん検査装置
KR20030071460A (ko) 메모리카드
CN103210396A (zh) 包括用于保护敏感代码和数据的架构的方法和装置
WO2007008919A2 (en) Method and system for software protection using binary encoding
CN104239757A (zh) 应用程序防止逆向的方法及装置、运行方法及终端
EP2051181A1 (en) Information terminal, security device, data protection method, and data protection program
CN104866739A (zh) 安卓系统中应用程序加密方法及系统
US10103884B2 (en) Information processing device and information processing method
KR20090064698A (ko) 신뢰 플랫폼 모듈을 이용한 drm 방법 및 시스템
JP4664055B2 (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
KR101749209B1 (ko) 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치
CN108875321A (zh) 一种指令集的生成方法、装置和电子设备
KR20140139392A (ko) 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置
JP6698775B2 (ja) 共有オブジェクトのコード保護のための保安提供装置と方法、及び保安実行装置と方法
CN113221077B (zh) 基于spring容器的class文件加密方法及设备
CN101112040A (zh) 用于保护数字权限文件描述的方法
CN114943062B (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
KR101704703B1 (ko) 더미 코드를 사용하는 애플리케이션 코드 은닉 장치 및 이를 이용한 애플리케이션 코드 은닉 방법