(57)【特許請求の範囲】
【請求項１】
アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成部と、
前記実行ファイルに対する署名データを生成する署名生成部と、
前記実行ファイルと、前記署名データと、前記アプリケーションが動作する際に前記実行ファイルに基づいて、前記署名データを検証する検証データを生成し、生成した検証データを用いて前記署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成部と、
を備え、
前記アプリケーションの実行ファイルは、第１のプログラミング言語により記述されたソースコードに基づいて生成される中間コードであり、前記検証モジュールは、前記アプリケーションの実行ファイルから呼び出されて動作するものであり、前記第１のプログラミング言語よりも実行ファイルからソースコードが解析され難い第２のプログラミング言語により記述されたソースコードに基づいて生成されるネイティブコードである
ことを特徴とするパッケージ生成装置。
【請求項２】
前記検証モジュールは、前記アプリケーションが動作するために必要な機能を備えており、前記アプリケーションが当該機能を動作させる際に実行され、前記検証モジュールは、前記検証処理の処理結果に基づいて前記機能を実行する
ことを特徴とする請求項１に記載のパッケージ生成装置。
【請求項３】
前記署名データには、検証処理に不要なダミーデータが含まれる
ことを特徴とする請求項１または請求項２に記載のパッケージ生成装置。
【請求項４】
前記署名データは、ダミーデータの個数、複数のダミーデータのうちの何番目に正しい署名データが存在するかを示す情報、複数のダミーデータのうちの改行されている箇所を示す情報に基づいて生成される
ことを特徴とする請求項１から請求項３までのいずれか１項に記載のパッケージ生成装置。
【請求項５】
第１のパッケージ生成部が、アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成ステップと、
署名生成部が、前記実行ファイルに対する署名データを生成する署名生成ステップと、
第２のパッケージ生成部が、前記実行ファイルと、前記署名データと、前記アプリケーションが動作する際に前記実行ファイルに基づいて、前記署名データを検証する検証データを生成し、生成した検証データを用いて前記署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成ステップと、
を備え、
前記アプリケーションの実行ファイルは、第１のプログラミング言語により記述されたソースコードに基づいて生成される中間コードであり、前記検証モジュールは、前記アプリケーションの実行ファイルから呼び出されて動作するものであり、前記第１のプログラミング言語よりも実行ファイルからソースコードが解析され難い第２のプログラミング言語により記述されたソースコードに基づいて生成されるネイティブコードである
ことを特徴とするパッケージ生成方法。
【請求項６】
アプリケーションの実行ファイルと、前記実行ファイルに対して生成された署名データとが記憶されているコンピュータを、
アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成手段、
前記実行ファイルに対する署名データを生成する署名手段、
前記実行ファイルと、前記署名データと、前記アプリケーションが動作する際に前記実行ファイルに基づいて、前記署名データを検証する検証データを生成し、生成した検証データを用いて前記署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成手段、
として動作させるプログラムであり、前記アプリケーションの実行ファイルは、第１のプログラミング言語により記述されたソースコードに基づいて生成される中間コードであり、前記検証モジュールは、前記アプリケーションの実行ファイルから呼び出されて動作するものであり、前記第１のプログラミング言語よりも実行ファイルからソースコードが解析され難い第２のプログラミング言語により記述されたソースコードに基づいて生成されるネイティブコードである
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの正当性を検証する技術に関する。
【背景技術】
【０００２】
コンピュータ装置にアプリケーションをインストールするアプリケーションパッケージには、そのアプリケーションの処理を行う実行ファイルの他に、そのアプリケーションを動作させるための設定情報や、アプリケーションを動作する際に画面に表示させる画像データ等が含まれる。このようなアプリケーションパッケージに、そのアプリケーションパッケージの作成者の電子署名を含ませておき、アプリケーションをコンピュータ装置にインストールする際に電子署名に基づく検証処理を行うことにより、そのアプリケーションパッケージの正当性を検証することができる（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００７−５３５０５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述のような検証方法では、そのアプリケーションパッケージが、開発完了時点のものと同一であることを検証することはできない。例えば、他者が開発して生成したアプリケーションパッケージをリバースエンジニアリングし、改ざん等を行って新たな配布者が無断でパッケージ化して配布する場合でも、その新たな配布者が自身の電子署名を付して新たなアプリケーションパッケージを配布すれば、電子署名による検証結果は正当と判定される。これでは、開発者がアプリケーションパッケージを配布した後に、アプリケーションが第三者によって改ざんされたり、悪意のあるコードが追加されたりして新たに作成されたアプリケーションパッケージが配布される可能性があると考えられる。すなわち、上述のような検証方法では、そのアプリケーションパッケージに基づいてアプリケーションがインストールされ、利用される段階において、そのアプリケーションが開発完了後に第三者によって改ざん等されたものでなく、開発完了時点のものと同一であることを検証することはできない。そこで、このようなアプリケーションパッケージが、そのアプリケーションの開発者によって作成された開発完了時点と同一であり、改ざん等がされていない正当なものであるか否かを検証し、作成時の正当性を担保することが望ましい。
【０００５】
本発明は、このような状況に鑑みてなされたもので、アプリケーションの正当性を検証するパッケージ生成装置、パッケージ生成方法、プログラムを提供する。
【課題を解決するための手段】
【０００６】
上述した課題を解決するために、本発明は、アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成部と、前記実行ファイルに対する署名データを生成する署名生成部と、前記実行ファイルと、前記署名データと、前記アプリケーションが動作する際に前記実行ファイルに基づいて、前記署名データを検証する検証データを生成し、生成した検証データを用いて前記署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成部と、を備え、前記アプリケーションの実行ファイルは、第１のプログラミング言語により記述されたソースコードに基づいて生成される中間コードであり、前記検証モジュールは、前記アプリケーションの実行ファイルから呼び出されて動作するものであり、前記第１のプログラミング言語よりも実行ファイルからソースコードが解析され難い第２のプログラミング言語により記述されたソースコードに基づいて生成されるネイティブコードであることを特徴とする。
【０００８】
また、本発明は、検証モジュールは、アプリケーションが動作するために必要な機能を備えており、アプリケーションが機能を動作させる際に実行され、検証モジュールは、検証処理の処理結果に基づいて機能を実行することを特徴とする。
【０００９】
また、本発明は、署名データには、検証処理に不要なダミーデータが含まれることを特徴とする。
【００１０】
また、本発明は、前記署名データが、ダミーデータの個数、複数のダミーデータのうちの何番目に正しい署名データが存在するかを示す情報、複数のダミーデータのうちの改行されている箇所を示す情報に基づいて生成されることを特徴とする。
【００１１】
また、本発明は、第１のパッケージ生成部が、アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成ステップと、署名生成部が、前記実行ファイルに対する署名データを生成する署名生成ステップと、第２のパッケージ生成部が、前記実行ファイルと、前記署名データと、前記アプリケーションが動作する際に前記実行ファイルに基づいて、前記署名データを検証する検証データを生成し、生成した検証データを用いて前記署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成ステップと、を備え、前記アプリケーションの実行ファイルは、第１のプログラミング言語により記述されたソースコードに基づいて生成される中間コードであり、前記検証モジュールは、前記アプリケーションの実行ファイルから呼び出されて動作するものであり、前記第１のプログラミング言語よりも実行ファイルからソースコードが解析され難い第２のプログラミング言語により記述されたソースコードに基づいて生成されるネイティブコードであることを特徴とする。
【００１２】
また、本発明は、アプリケーションの実行ファイルと、前記実行ファイルに対して生成された署名データとが記憶されているコンピュータを、アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成手段、前記実行ファイルに対する署名データを生成する署名手段、前記実行ファイルと、前記署名データと、前記アプリケーションが動作する際に前記実行ファイルに基づいて、前記署名データを検証する検証データを生成し、生成した検証データを用いて前記署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成手段、として動作させるプログラムであり、前記アプリケーションの実行ファイルは、第１のプログラミング言語により記述されたソースコードに基づいて生成される中間コードであり、前記検証モジュールは、前記アプリケーションの実行ファイルから呼び出されて動作するものであり、前記第１のプログラミング言語よりも実行ファイルからソースコードが解析され難い第２のプログラミング言語により記述されたソースコードに基づいて生成されるネイティブコードであることを特徴とするプログラムである。
【発明の効果】
【００１３】
以上説明したように、本発明によれば、パッケージ生成装置が、アプリケーションの実行ファイルが含まれる第１のパッケージを生成する第１のパッケージ生成部と、実行ファイルに対する署名データを生成する署名生成部と、実行ファイルと、署名データと、アプリケーションが動作する際に実行ファイルに基づいて、署名データを検証する検証データを生成し、生成した検証データを用いて署名データの検証処理を行う検証モジュールと、が含まれる第２のパッケージを生成する第２のパッケージ生成部と、を備えるようにしたので、アプリケーションの正当性を検証することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態によるパッケージ生成装置の構成例を示すブロック図である。
【図２】本発明の一実施形態によるアプリケーションがインストールされたユーザ端末の構成例を示すブロック図である。
【図３】本発明の一実施形態によるパッケージ生成装置の動作例を示すフローチャートである。
【図４】本発明の一実施形態によるアプリケーションがインストールされたユーザ端末の動作例を示すフローチャートである。
【図５】本発明の一実施形態による難読化処理の例を示す図である。
【図６】本発明の一実施形態によるパッケージ生成装置の構成例を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本発明の一実施形態について、図面を参照して説明する。
図１は、本実施形態によるパッケージ生成装置１０の構成例を示すブロック図である。パッケージ生成装置１０は、アプリケーションソースコード記憶部１１と、検証モジュールソースコード記憶部１２と、検証モジュールビルド部１３と、検証モジュール記憶部１４と、第１のパッケージ生成部１５と、署名生成部１６と、署名データ記憶部１７と、第２のパッケージ生成部１８とを備えており、アプリケーションパッケージを生成する。パッケージ生成装置１０が生成するアプリケーションパッケージは、ＰＣ（パーソナルコンピュータ）、タブレットＰＣ、スマートフォン等のコンピュータ装置にインストールされてアプリケーションを実行するものであり、本実施形態では、特にスマートフォンにインストールされるアプリケーションパッケージを想定して説明する。
【００１６】
アプリケーションソースコード記憶部１１には、アプリケーションを実行する処理が記述されたソースコードであるアプリケーションソースコードが予め記憶されている。
検証モジュールソースコード記憶部１２には、検証モジュールのソースコードである検証モジュールソースコードが予め記憶されている。検証モジュールは、アプリケーションソースコードに基づいて生成される実行ファイルの正当性を検証する検証処理を行うプログラムの実行ファイルである。検証モジュールは、アプリケーションの実行ファイルから呼び出されて動作する。すなわち、アプリケーションソースコードには、検証モジュールを呼び出して実行する処理の記述が含まれる。
【００１７】
ここで、アプリケーションソースコードと検証モジュールソースコードとは、異なるプログラミング言語により記述されているものとし、検証モジュールソースコードは、アプリケーションソースコードに用いられる第１のプログラミング言語よりも、実行ファイルからソースコードが解析されにくい第２のプログラミング言語により記述されるものとする。例えば、第１のプログラミング言語は、ビルドすると中間コードやクラス定義情報が生成されるＪＡＶＡ（登録商標）であり、第２のプログラミング言語は、ビルドするとネイティブコードが生成されるＣ言語である。すなわち、アプリケーションの実行ファイルは第１のプログラミング言語により記述されたソースコードに基づいて生成された中間コードであり、検証モジュールは、第１のプログラミング言語よりも実行ファイルからソースコードが解析されにくい第２のプログラミング言語により記述されたソースコードに基づいて生成されたネイティブコードである。
【００１８】
検証モジュールビルド部１３は、検証モジュールソースコード記憶部１２に記憶されている検証モジュールソースコードをビルドして、検証モジュールの実行ファイルを生成し、生成した検証モジュールの実行ファイルを検証モジュール記憶部１４に記憶させる。
検証モジュール記憶部１４には、検証モジュールの実行ファイルが記憶される。
【００１９】
第１のパッケージ生成部１５は、アプリケーションソースコード記憶部１１に記憶されているアプリケーションソースコードと、検証モジュール記憶部１４に記憶されている検証モジュールとをビルドし、第１のアプリケーションパッケージを生成する。符号ａは、第１のアプリケーションパッケージの概要を示す図である。第１のアプリケーションパッケージには、アプリケーションソースコード記憶部１１に記憶されているアプリケーションソースコードに基づいて生成されたアプリケーション実行ファイル（符号ａ１）と、検証モジュール記憶部１４から読み出された検証モジュール（符号ａ２）とが含まれる。
【００２０】
署名生成部１６は、第１のパッケージ生成部１５が生成した第１のアプリケーションパッケージに含まれるアプリケーション実行ファイルに対する署名データを生成する。例えば、署名生成部１６は、署名データを生成する対象である検証対象ファイル（アプリケーション実行ファイル）や、署名鍵、ハッシュアルゴリズム（例えば、ＳＨＡ−２５６等）、生成した署名データを格納する場所（パス）等を定めた検証定義情報を自身の記憶領域に記憶しておく。署名生成部１６は、検証定義情報に定められたハッシュアルゴリズムにより、アプリケーション実行ファイルに基づくハッシュ値を算出し、算出したハッシュ値を署名鍵によって暗号化した演算結果を署名データとして生成する。署名生成部１６は、生成した署名データを、署名データ記憶部１７に記憶させる。
署名データ記憶部１７には、署名生成部１６によって生成された署名データが記憶される。
【００２１】
第２のパッケージ生成部１８は、アプリケーションソースコード記憶部１１に記憶されているアプリケーションソースコードと、検証モジュール記憶部１４に記憶されている検証モジュールと、署名データ記憶部１７に記憶されている署名データとをビルドし、第２のアプリケーションパッケージを生成する。符号ｂは、第２のアプリケーションパッケージの概要を示す図である。第２のアプリケーションパッケージには、第１のアプリケーションパッケージに含まれるアプリケーション実行ファイルと同様のアプリケーション実行ファイル（符号ｂ１）と、第１のアプリケーションパッケージに含まれる検証モジュールと同様の検証モジュール（符号ｂ２）とに加えて、署名データ（符号ｂ３）が含まれる。ここで、符号ｂ１に示すアプリケーション実行ファイルは、アプリケーションソースコード記憶部１１に記憶されているソースコードに基づいて再びビルドされたものであるが、第１のアプリケーションパッケージを生成する際のアプリケーションソースコードと第２のアプリケーションパッケージを生成する際のアプリケーションソースコードとは同一であるため、同一のバイナリファイルである中間コードが生成される。
【００２２】
図２は、このように生成された第２のアプリケーションパッケージに基づいてアプリケーションを実行するユーザ端末３０の構成例を示す図である。例えば、ユーザ端末３０は、スマートフォンである。ユーザ端末３０は、ネットワークを介してパッケージ配布装置２０に接続されており、パッケージ生成装置１０によって生成された第２のアプリケーションパッケージを、パッケージ配布装置２０からダウンロードする。ユーザ端末３０は、入力部３１と、出力部３２と、通信部３３と、記憶部３４と、制御部４０とを備えている。
【００２３】
入力部３１は、ボタンやタッチパネル等の入力デバイスであり、ユーザからの入力を受け付ける。
出力部３２は、ディスプレイやスピーカ等の出力デバイスであり、情報を出力する。
通信部３３は、他のコンピュータ装置とネットワークを介して通信する。
【００２４】
記憶部３４には、ユーザ端末３０が動作するために利用される情報が記憶される。例えば、記憶部３４には、ＯＳや各種アプリケーションのプログラムが記憶されている。また、記憶部３４には、パッケージ配布装置２０からダウンロードした第２のアプリケーションパッケージ３５が記憶されている。
第２のアプリケーションパッケージ３５は、パッケージ生成装置１０によって生成され、ユーザ端末３０がパッケージ配布装置２０からダウンロードし、インストールして記憶部３４に記憶させたファイルである。第２のアプリケーションパッケージ３５には、アプリケーション実行ファイル３６と、検証モジュール３７と、署名データ３８とが含まれる、
【００２５】
アプリケーション実行ファイル３６は、アプリケーションを実行するメインプログラムである。
検証モジュール３７は、アプリケーション実行ファイル３６が、正当な開発者により生成されたファイルであるか否かを検証するプログラムである。
署名データ３８は、アプリケーション実行ファイル３６に対して生成された署名データである。
【００２６】
制御部４０は、記憶部３４に記憶されているプログラムを実行し、ユーザ端末３０が備える各部を制御する。ここで、制御部４０は、記憶部３４に記憶されている第２のアプリケーションパッケージ３５を読み出し、アプリケーションを実行するために起動部４１と検証処理部４２とアプリケーション実行部４３とを構成する。起動部４１とアプリケーション実行部４３とは、アプリケーション実行ファイル３６によって構成され、検証処理部４２は、検証モジュール３７によって構成される。
【００２７】
起動部４１は、ユーザから入力部３１に入力される操作情報に応じて、アプリケーションを起動する起動処理を行う。ここで、起動部４１は、ユーザから入力部３１にアプリケーションの起動要求が入力されると、検証処理部４２に検証要求を入力する。起動部４１は、検証処理部４２による検証結果によって、アプリケーション実行ファイル３６が正当であることが示される場合には、アプリケーション実行部４３に実行要求を入力し、アプリケーションを起動させる。一方、検証処理部４２による検証結果によって、アプリケーション実行ファイル３６が正当でないことが示される場合にはエラー処理を行い、アプリケーション実行部４３を起動させずに処理を終了する。
【００２８】
検証処理部４２は、起動部４１からの検証要求に応じて、アプリケーション実行ファイル３６が正当であるか否かを判定する検証処理を行う。例えば、検証処理部４２は、パッケージ生成装置１０の署名生成部１６に記憶されている検証定義情報と同様の検証定義情報を、自身の記憶領域に記憶しておく。ただし、検証処理部４２に記憶されている検証定義情報には署名鍵は含まれず、パッケージ生成装置１０の署名生成部１６においてハッシュ値を暗号化した署名鍵に対応する検証鍵が含まれる。検証処理部４２は、検証定義情報に定められる検証鍵により署名データ３８を復号し、ハッシュ値を取り出す。そして、アプリケーション実行ファイル３６に基づいて、検証定義情報に定められたハッシュアルゴリズムによりハッシュ値である検証データを算出する。検証モジュール３７は、復号したハッシュ値と、検証データとが一致すれば、アプリケーション実行ファイル３６は正当であると判定し、一致しなければ、正当でない（不当である）と判定する。
アプリケーション実行部４３は、起動部４１からの実行要求に応じて、アプリケーションを実行する。
【００２９】
次に、図面を参照して、本実施形態によるパッケージ生成装置１０の動作例を説明する。図３は、本実施形態によるパッケージ生成装置１０の動作例を示すフローチャートである。
検証モジュールビルド部１３は、検証モジュールソースコード記憶部１２に記憶されている検証モジュールソースコードを読み出してビルドし、検証モジュールの実行ファイルを生成して検証モジュール記憶部１４に記憶させる（ステップＳ１）。第１のパッケージ生成部１５は、アプリケーションソースコード記憶部１１に記憶されているアプリケーションソースコードを読み出し、検証モジュール記憶部１４に記憶されている検証モジュールを読み出して、読み出したアプリケーションソースコードに検証モジュールを組み込んでビルドし、第１のアプリケーションパッケージを生成する（ステップＳ２）。
【００３０】
署名生成部１６は、自身の記憶領域に記憶されている検証定義情報に含まれる署名鍵等に基づいて、第１のパッケージ生成部１５によって生成された第１のアプリケーションパッケージに含まれるアプリケーション実行ファイルに対する署名データを生成し、署名データ記憶部１７に記憶させる（ステップＳ３）。そして、第２のパッケージ生成部１８は、アプリケーションソースコード記憶部１１に記憶されているアプリケーションソースコードを読み出し、検証モジュール記憶部１４に記憶されている検証モジュールを読み出し、署名データ記憶部１７に記憶されている署名データを読み出して、アプリケーション実行ファイルと、検証モジュールと、署名データとが含まれる第２のアプリケーションパッケージを生成する（ステップＳ４）。
【００３１】
次に、図面を参照して、本実施形態により生成された第２のアプリケーションパッケージがインストールされたユーザ端末３０の動作例を説明する。図４は、本実施形態によるユーザ端末３０の動作例を示すフローチャートである。
ユーザ端末３０は、パッケージ配布装置２０に、第２のアプリケーションパッケージのダウンロード要求を送信する。パッケージ配布装置２０は、ユーザ端末３０から送信されたダウンロード要求に応じて、第２のアプリケーションパッケージをユーザ端末３０に送信する。ユーザ端末３０は、パッケージ配布装置２０から送信された第２のアプリケーションパッケージを受信すると、受信した第２のアプリケーションパッケージをインストールし、記憶部３４に記憶させる（ステップＳ１１）。
【００３２】
入力部３１にアプリケーションの実行要求が入力されると（ステップＳ１２）、制御部４０は、記憶部３４に記憶されている第２のアプリケーションパッケージ３５を読み出し、起動部４１と、検証処理部４２と、アプリケーション実行部４３とを構成する。起動部４１は、検証処理部４２に検証要求を入力する。検証処理部４２は、検証定義情報に定められたハッシュアルゴリズムにより、アプリケーション実行ファイル３６に基づくハッシュ値である検証データを算出する（ステップＳ１３）。
【００３３】
検証処理部４２は、ステップＳ３において使用された署名鍵に対応する検証鍵を自身の記憶領域に記憶されている検証定義情報から読み出し、読み出した検証鍵により署名データ３８を復号してハッシュ値を算出し、ステップＳ１３において算出したハッシュ値である検証データと比較する（ステップＳ１４）。検証処理部４２が、復号したハッシュ値と検証データとが一致し、アプリケーション実行ファイル３６が正当であると判定すると（ステップＳ１４：ＹＥＳ）、アプリケーション実行部４３が、アプリケーション処理を実行する（ステップＳ１５）。アプリケーション実行ファイル３６が正当でないと判定すると（ステップＳ１４：ＮＯ）、アプリケーション実行部４３は、エラーとして処理を終了する（ステップＳ１６）。
【００３４】
なお、ユーザ端末３０に記憶される第２のアプリケーションパッケージ３５には、署名データ３８が含まれるため、アプリケーションを改ざんしようとする攻撃者が、署名データ３８の解析を試みる場合があると考えられる。そこで、署名生成部１６が署名データを生成する際には、生成する署名データの難読化処理を行うこともできる。例えば、署名生成部１６は、署名データには、検証処理に不要なダミーデータを含ませる。図５は、署名生成部１６が難読化処理を行って生成する署名データの例を示す図である。まず、署名生成部１６は、（ａ）に示すように、アプリケーション実行ファイルに対する署名データ（符号Ａ）を生成する。また、署名生成部１６は、（ｂ）に示すように、署名データのダミーデータ（符号Ｂ１〜Ｂ６）を生成する。そして、署名生成部１６は、（ｃ）に示すように、署名データ（符号Ａ）と、ダミーデータ（符号Ｂ１〜Ｂ６）とを合わせて、署名データとして生成する。さらに、署名生成部１６は、（ｄ）に示すように、署名データ（符号Ａ）とダミーデータ（符号Ｂ１〜Ｂ６）とをランダムに改行し、署名データとして生成する。この他にも、例えば、署名データのバイト列の定められた箇所に不要なバイト列を挿入することなどにより、難読化処理を行うこともできる。
【００３５】
ここで、署名生成部１６は、自身の記憶領域に記憶している検証定義情報に、このような難読化処理のルールについて定義したルール情報を含ませておき、検証定義情報に基づいて署名データを生成する。難読化処理のルール情報には、例えば、ダミーデータの個数、複数のダミーデータのうちの何番目に正しい署名データが存在するかを示す情報、複数のダミーデータのうちの改行されている箇所を示す情報等が含まれる。ユーザ端末３０の検証処理部４２にも、同様の検証定義情報を記憶させておき、検証処理部４２は、このような検証定義情報に基づいて検証処理を行う。例えば、検証処理部４２は、難読化処理のルール情報に基づいて、署名データに含まれるダミーデータを削除したり、改行を削除したりすること等により、署名データに含まれる複数のダミーデータのうちから正しい署名データを検出する。これによれば、アプリケーションを改ざんしようとする攻撃者が、署名データ３８の内容を解析し難くすることができる。
【００３６】
上述の実施形態では、ユーザ端末３０におけるアプリケーションの起動時に、起動部４１が検証処理部４２に検証要求を入力して検証処理を行う例を示したが、検証処理は、起動時のみでなく、アプリケーションの実行中にも、適宜行うこともできる。例えば、アプリケーション実行部４３が、一定時間（例えば、５分）毎に、検証処理部４２に検証要求を入力し、検証処理部４２による検証結果が、アプリケーション実行ファイル３６が正当であることを示す場合には処理を続行し、アプリケーション実行ファイル３６が正当でないことを示す場合には処理を終了することもできる。
【００３７】
あるいは、検証モジュール３７に、検証処理を行うプログラムのみでなく、アプリケーション実行部４３がアプリケーションを実行するために必須であるプログラムや情報等を含ませておき、アプリケーション実行部４３が動作する際には検証モジュール３７に基づくプログラム等を呼び出さなければアプリケーションを実行できないようにして、検証モジュール３７に基づくプログラムが呼び出された際に検証処理を行うようにすることもできる。図６は、このようなユーザ端末３０の構成の例を示す図である。ここで、制御部４０は、検証モジュール３７に基づいて、検証処理部４２に加えてアプリケーション処理部４４を構成する。
【００３８】
アプリケーション処理部４４は、アプリケーションソースコードに基づいて生成されるアプリケーションの実行ファイルが動作するために必要な機能を実行する。例えば、アプリケーション処理部４４は、アプリケーション実行ファイル３６が通信部３３を介して他のコンピュータ装置と通信する機能を実行する。また、アプリケーション処理部４４は、その機能を実行する際には、検証処理部４２を動作させて検証処理を行わせ、アプリケーション実行ファイル３６が正当であるとの検証結果が生成された場合にはその機能を実行し、正当でないとの検証結果が生成された場合にはその機能を実行しない。
【００３９】
一方、アプリケーション実行部４３は、他のコンピュータ装置と通信を行う際には必ず検証モジュール３７のアプリケーション処理部４４を呼び出し、呼び出さなければ、他のコンピュータ装置と通信を行うことができないように構成する。このように、検証処理部４２は、アプリケーション実行ファイル３６がその機能を動作させる際に実行され、アプリケーション処理部４４は、検証処理の処理結果に基づいて機能を実行する。これにより、第２のアプリケーションパッケージ３５によって提供されるアプリケーションを実行する際には、アプリケーション処理部４４が呼び出され、検証を行うことができる。
【００４０】
以上説明したように、本実施形態によれば、アプリケーション実行ファイル３６が正当であるか否かを検証することができるため、改ざんされたアプリケーションが配布され、実行されることを防ぐことができる。例えば、従来のアプリケーションのインストール時における検証処理は、ユーザ端末３０が検証機能を備えており、アプリケーションパッケージに含まれる電子署名に対応する検証鍵（公開鍵）を、ネットワークを介して取得して検証するようなものであった。これに対し、本実施形態によれば、ユーザ端末３０は、ネットワーク通信を行うことなく、検証処理を行うことができる。さらに、第２のアプリケーションパッケージ３５に含まれるプログラムのみで検証処理を実行することができるため、アプリケーションのインストール時のみでなく、起動時や動作中においても、検証処理を行うことができる。
【００４１】
さらに、検証モジュール３７は、アプリケーション実行ファイル３６よりも解析が困難なプログラミング言語により記述されビルドされたものであるため、例えば、攻撃者がアプリケーション実行ファイル３６をリバースエンジニアリングしようとする際、アプリケーション実行ファイル３６の内容はある程度解析できたとしても、検証モジュール３７の内容を解析することは困難である。さらに、解析困難な検証モジュール３７の処理を利用しなければアプリケーションが動作できないようにしたので、アプリケーション実行ファイル３６が解析された場合でも、改ざんしたアプリケーションを動作させることができない。これにより、例えば、アプリケーション実行ファイル３６の部分に、アプリケーションが有料であるか無料であるかを示す情報が記憶されているとき、リバースエンジニアリングによりその部分が改ざんされて有料が無料に書き換えられた場合でも、そのアプリケーションを動作させないようにすることができる。これにより、リバースエンジニアリングしやすいプログラミング言語によってアプリケーションが作成されることが定められているようなプラットフォームにおいてアプリケーションを提供する場合でも、そのプログラミング言語よりも解析困難なプログラミング言語により生成したモジュールを組み合わせて実行させることで、改ざんされたアプリケーションが使用されることを防ぐことが可能となる。
【００４２】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりパッケージの生成やアプリケーションの検証を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００４３】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【００４４】
１０  パッケージ生成装置
１１  アプリケーションソースコード記憶部
１２  検証モジュールソースコード記憶部
１３  検証モジュールビルド部
１４  検証モジュール記憶部
１５  第１のパッケージ生成部
１６  署名生成部
１７  署名データ記憶部
１８  第２のパッケージ生成部
２０  パッケージ配布装置
３０  ユーザ端末
３１  入力部
３２  出力部
３３  通信部
３４  記憶部
３５  第２のアプリケーションパッケージ
３６  アプリケーション実行ファイル
３７  検証モジュール
３８  署名データ
４０  制御部
４１  起動部
４２  検証処理部
４３  アプリケーション実行部
４４  アプリケーション処理部
【図１】
0005798959.tif 000002
【図２】
0005798959.tif 000003
【図３】
0005798959.tif 000004
【図４】
0005798959.tif 000005
【図５】
0005798959.tif 000006
【図６】
0005798959.tif 000007