JP5056995B1 - 改竄検知が可能なアプリケーションプログラムの配布実行方法 - Google Patents

改竄検知が可能なアプリケーションプログラムの配布実行方法 Download PDF

Info

Publication number
JP5056995B1
JP5056995B1 JP2012099139A JP2012099139A JP5056995B1 JP 5056995 B1 JP5056995 B1 JP 5056995B1 JP 2012099139 A JP2012099139 A JP 2012099139A JP 2012099139 A JP2012099139 A JP 2012099139A JP 5056995 B1 JP5056995 B1 JP 5056995B1
Authority
JP
Japan
Prior art keywords
information
application program
program
key
distribution
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.)
Active
Application number
JP2012099139A
Other languages
English (en)
Other versions
JP2013228814A (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.)
Dai Nippon Printing Co Ltd
Original Assignee
Dai Nippon Printing 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 Dai Nippon Printing Co Ltd filed Critical Dai Nippon Printing Co Ltd
Priority to JP2012099139A priority Critical patent/JP5056995B1/ja
Application granted granted Critical
Publication of JP5056995B1 publication Critical patent/JP5056995B1/ja
Priority to PCT/JP2013/062311 priority patent/WO2013161974A1/ja
Publication of JP2013228814A publication Critical patent/JP2013228814A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

【課題】電子署名付加ファイルに対する改竄が行われた場合にも、有効な改竄検知を行う。
【解決手段】プログラム本体部11Aと、第1の特定鍵K(s1)を利用する改竄チェックルーチンFと、を含むアプリケーション10Aは、パッケージ21Aとしてパッケージ化される。このパッケージ21Aを署名対象データDとして、プログラム提供者Aの第1の鍵K(a1)を用いた電子署名処理が行われ、署名情報22Aが作成される。更に、この署名情報22Aを秘匿化対象データCとして、第2の特定鍵K(s2)を用いた秘匿化処理が行われ、秘匿情報23Aが作成される。パッケージ21A,署名情報22A,秘匿情報23Aを含む配布用ファイル20Aの配布を受けた電子機器は、OSによる署名情報22Aの正当性確認処理と、改竄チェックルーチンFによる秘匿情報23Aの正当性確認処理と、の双方による確認がとれた場合に限り当該アプリケーションを実行する。
【選択図】図5

Description

本発明は、アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムを実行する実行プロセスと、を有するアプリケーションプログラムの配布実行方法に関し、特に、配布中や配布後に行われたアプリケーションプログラムの改竄を検知して、改竄されたアプリケーションプログラムについてはその実行を中止させる技術に関する。
ここ数年来、電子機器は、パソコン、スマートホン、電子タブレット等と様々な形態のものが普及してきており、これら様々な電子機器において多様なアプリケーションプログラムが利用されている。このため、実社会で利用されているアプリケーションプログラムの数は膨大な数にのぼり、今後も急激な勢いでその数を増してゆくものと予想される。一方、アプリケーションプログラムの配布形態も、光学的記録媒体やICメモリに格納して提供する形態や、インターネットなどを介してオンラインでデータファイルのみを送信する形態が普及しており、一般ユーザは、様々なルートで入手した様々なアプリケーションプログラムを電子機器にインストールして利用することができる。
このように、膨大な数のアプリケーションプログラムが様々な配布形態で提供されている現状では、配布途中のアプリケーションプログラムは、悪意をもったクラッカーによる改竄の標的になりやすい。たとえば、クラッカーは、インターネット経由で任意のアプリケーションプログラムを入手することが可能であり、入手したアプリケーションプログラムに対して改竄を施した後、これを再びインターネット経由あるいは様々な記録媒体に格納して再配布することができる。
一般ユーザにとって、実社会に配布されているアプリケーションプログラムが、正規のプロバイダーから提供された純正のものであるのか、クラッカーによる改竄が施されたものであるのかを見分けることは困難である。特に、改竄されたアプリケーションプログラムが、正規のアプリケーションプログラムと同じファイル名をもつファイルとして配布されていると、一般ユーザが両者を区別することは非常に困難であり、両者を混同せざるを得ない。
改竄されたアプリケーションプログラムを実行することによって受ける被害は、改竄の内容によって様々である。たとえば、ウイルスを混入させる改竄が行われた場合には、ユーザの電子機器内のファイルが破壊されたり、個人情報が外部へ漏洩されたり、重大な被害が生じることになる。一方、画像データや文字データを差し替えるような改竄が行われた場合、ウイルスほどの被害は生じないにしても、提示される情報が本来のものではなくなってしまうため、ユーザに混乱を生じさせることになる。
しかも、このような改竄されたアプリケーションプログラムの流布による被害は、一般ユーザだけではなく、コンテンツプロバイダにまで及ぶことになる。たとえば、コンテンツプロバイダであるA社が配布した正規のアプリケーションプログラムが、クラッカーによる改竄を受け、改竄されたアプリケーションプログラムが、あたかもA社の正規の製品であるかのようにして再配布された場合を考えてみよう。この場合、改竄されたアプリケーションプログラムをインストールしたユーザが、当該プログラムをA社から提供された正規の製品であると信じて実行したとすれば、A社は不当な評価を受けることになる。たとえば、改竄によってプログラムの動作に不具合が生じたり、公序良俗に反するような内容が表示されたりすれば、A社の製品に対するユーザの評価は低下することになり、A社は風評被害を受けることになる。
このように、コンテンツプロバイダがアプリケーションプログラムを配布し、一般ユーザの電子機器にインストールして実行してもらう上では、クラッカーによる改竄を防止することが不可欠である。通常、デジタルデータの改竄を防止するためには、電子署名の技術が利用されている。たとえば、下記の特許文献1には、携帯電話のメモリ内のデータに電子署名を施し、これをチェックすることにより改竄の有無を検出するシステムが開示されている。また、特許文献2には、情報処理装置内のアプリケーションプログラムの改竄の有無を、電子署名やハッシュ値を利用して監視するシステムが開示されている。
特開2007−293847号公報 国際公開第WO2008−047830号公報
上述したとおり、デジタルデータの改竄を防止するために、当該デジタルデータに対して電子署名を施すことは様々な産業分野で利用されており、前掲の各特許文献にも記載されているように、電子機器に配布するアプリケーションプログラムに対する改竄防止にも利用されている。たとえば、Android(登録商標)をOSとして採用するスマートホンの場合、インストールするアプリケーションプログラムには、必ず電子署名が付加されていることが仕様によって定められており、電子署名が付加されていないアプリケーションプログラムや、付加されている電子署名に不整合が生じているアプリケーションプログラムは、OSによって不正なプログラムと判断され、実行が許可されない。
しかしながら、電子署名は、あくまでも署名対象データの内容を署名者が保証するものであり、署名者の身元まで保証するものではない。このため、クラッカーは、アプリケーションプログラムの内容を改竄した後、改竄後のアプリケーションプログラムを署名対象データとして自分自身を署名者とする電子署名を新たに行い、この新たな電子署名を付加して改竄後のアプリケーションプログラムを再配布することが可能である。このように、電子署名に対する改竄が行われた場合、上述したAndroid(登録商標)をOSとして利用している端末装置などでは、有効な改竄検知を行うことができない。
そこで本発明は、電子署名に対する改竄が行われた場合にも、有効な改竄検知を行うことが可能なアプリケーションプログラムの配布実行方法を提供することを目的とする。
(1) 本発明の第1の態様は、アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムを実行する実行プロセスと、を有する改竄検知が可能なアプリケーションプログラムの配布実行方法において、
配布プロセスでは、
コンピュータが、第1の特定鍵を含むアプリケーションプログラムに対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージを作成するパッケージ化段階と、
コンピュータが、アプリケーションパッケージを署名対象データとして、プログラム提供者の第1の鍵を用いた暗号化を利用した電子署名処理を行って署名値を生成し、この署名値とプログラム提供者の第2の鍵とを含む署名情報を作成する署名情報作成段階と、
コンピュータが、アプリケーションパッケージおよび署名情報を構成するデータの中から、プログラム提供者の第2の鍵を含む所定部分を秘匿化対象データとして抽出し、抽出した秘匿化対象データに対して第2の特定鍵を用いた秘匿化処理を施して秘匿情報を作成する秘匿情報作成段階と、
コンピュータが、アプリケーションパッケージと、署名情報と、秘匿情報もしくは秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成する配布用ファイル作成段階と、
コンピュータが、配布用ファイルを出力するファイル出力段階と、
を行い、
実行プロセスでは、
アプリケーション実行用コンピュータが、配布用ファイルを入力するファイル入力段階と、
アプリケーション実行用コンピュータが、入力した配布用ファイルについて、署名情報に含まれているプログラム提供者の第2の鍵を用いた復号を利用した署名確認処理を行って、アプリケーションパッケージに対する署名情報の正当性を確認する第1の確認段階と、
アプリケーション実行用コンピュータが、入力した配布用ファイルに基づいて秘匿化対象データおよび秘匿情報を入手し、秘匿化対象データに対する秘匿情報の正当性を、アプリケーションプログラムに含まれている第1の特定鍵を用いて確認する第2の確認段階と、
アプリケーション実行用コンピュータが、入力した配布用ファイルについて、第1の確認段階および第2の確認段階の双方において肯定的な結果が得られた場合には改竄なし、第1の確認段階および第2の確認段階の少なくとも一方において否定的な結果が得られた場合には改竄あり、との判断を行う改竄判定段階と、
アプリケーション実行用コンピュータが、改竄判定段階において、改竄なしとの判断が得られた場合にのみ、配布されたアプリケーションプログラムを正常に実行する実行段階と、
を行い、
プログラム提供者の第1の鍵および第2の鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、第1の特定鍵および第2の特定鍵として、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対もしくは同一の鍵を用いるようにしたものである。
(2) 本発明の第2の態様は、上述した第1の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
第1の特定鍵および第2の特定鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
秘匿情報作成段階で、第2の特定鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
第2の確認段階で、第1の特定鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、入力した配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うようにしたものである。
(3) 本発明の第3の態様は、上述した第2の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
第1の特定鍵としてプログラム保証者の第1の鍵を用い、第2の特定鍵としてプログラム保証者の第2の鍵を用い、プログラム保証者の第2の鍵を用いて暗号化したデータをプログラム保証者の第1の鍵を用いて復号できるようにし、
パッケージ化段階で、プログラム保証者の第1の鍵を含むアプリケーションプログラムに対するパッケージ化処理を実行し、
秘匿情報作成段階で、プログラム保証者の第2の鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
第2の確認段階で、プログラム保証者の第1の鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、入力した配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うようにしたものである。
(4) 本発明の第4の態様は、上述した第1の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
第1の特定鍵および第2の特定鍵として同一の共通特定鍵を用い、
パッケージ化段階で、共通特定鍵を含むアプリケーションプログラムに対するパッケージ化処理を実行し、
秘匿情報作成段階で、秘匿化対象データに対して、共通特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して秘匿情報を作成し、
第2の確認段階で、入力した配布用ファイルから秘匿化対象データおよび共通特定鍵を抽出し、抽出した秘匿化対象データに対して、抽出した共通特定鍵を用いたダイジェスト化処理を施して得られる情報が、入力した配布用ファイルに基づいて入手した秘匿情報と一致していた場合に、秘匿情報が正当である旨の確認を行うようにしたものである。
(5) 本発明の第5の態様は、上述した第4の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
秘匿情報作成段階および第2の確認段階で、共通特定鍵をパラメータとして用いたハッシュ関数を作用させるダイジェスト化処理を施して得られるハッシュ値を秘匿情報とするようにしたものである。
(6) 本発明の第6の態様は、上述した第1〜第5の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
秘匿化対象データとして、署名情報を構成するデータ全体を用いるようにしたものである。
(7) 本発明の第7の態様は、上述した第1〜第5の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
秘匿化対象データとして、署名情報に含まれるプログラム提供者の第2の鍵を構成するデータを用いるようにしたものである。
(8) 本発明の第8の態様は、上述した第1〜第5の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
秘匿化対象データとして、アプリケーションパッケージと署名情報との双方を構成するデータ全体を用いるようにしたものである。
(9) 本発明の第9の態様は、上述した第1〜第8の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
パッケージ化段階で、第2の確認段階を実行するための改竄チェックルーチンを含むアプリケーションプログラムに対するパッケージ化処理を行い、
アプリケーション実行用コンピュータが、改竄チェックルーチンを実行することにより第2の確認段階を実行するようにしたものである。
(10) 本発明の第10の態様は、上述した第9の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
改竄チェックルーチン内に第1の特定鍵を含ませるようにしたものである。
(11) 本発明の第11の態様は、上述した第9または第10の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
アプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、を含み、サブルーチン群は、改竄チェックルーチンを含み、改竄チェックルーチンは、第2の確認段階の実行結果をサブルーチンの実行結果として返す機能を有し、
プログラム本体部には、改竄チェックルーチンをコールするサブルーチンコール命令と、改竄チェックルーチンから返された結果が肯定的な結果であった場合には以後の命令群を引き続き実行し、否定的な結果であった場合には以後の命令群の実行を中止するプログラムと、が組み込まれているようにしたものである。
(12) 本発明の第12の態様は、上述した第9または第10の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
アプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、を含み、サブルーチン群は、改竄チェックルーチンを含み、
プログラム本体部には、改竄チェックルーチンをコールするサブルーチンコール命令と、改竄チェックルーチンから肯定的な結果が返された場合には以後の命令群を引き続き実行するプログラムと、が組み込まれており、
改竄チェックルーチンは、第2の確認段階の実行結果が肯定的な結果であった場合には、当該結果をサブルーチンの実行結果として返す機能を有し、第2の確認段階の実行結果が否定的な結果であった場合には、アプリケーションプログラムの実行を中止する機能を有するようにしたものである。
(13) 本発明の第13の態様は、上述した第11または第12の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
プログラム本体部には、アプリケーションプログラムの本来の機能を果たすための命令群の前に改竄チェックルーチンをコールするサブルーチンコール命令が組み込まれているようにしたものである。
(14) 本発明の第14の態様は、上述した第9〜第13の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
実行プロセスでは、OSプログラムの管理下でアプリケーションプログラムの実行を行うアプリケーション実行用コンピュータを用い、
第1の確認段階をOSプログラムに基づいて実行し、
第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行するようにしたものである。
(15) 本発明の第15の態様は、上述した第14の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
OSプログラムに基づく第1の確認段階が行われた後に、改竄チェックルーチンに基づく第2の確認段階を実行するようにし、
第1の確認段階において否定的な結果が得られた場合には、OSプログラムにより改竄ありとの判断を伴う改竄判定段階を実行し、第2の確認段階を行わずに、当該判断対象となったアプリケーションプログラムの実行をOSプログラムの管理下で中止し、
第1の確認段階において肯定的な結果が得られた場合には、OSプログラムの管理下で当該判断対象となったアプリケーションプログラムを実行して第2の確認段階を行い、
第2の確認段階において否定的な結果が得られた場合には、当該アプリケーションプログラム自身により改竄ありとの判断を伴う改竄判定段階を実行し、当該アプリケーションプログラム自身により、以後の処理の実行を中止し、
第2の確認段階において肯定的な結果が得られた場合には、当該アプリケーションプログラム自身により改竄なしとの判断を伴う改竄判定段階を実行し、当該アプリケーションプログラム自身により、以後の処理を引き続き実行するようにしたものである。
(16) 本発明の第16の態様は、上述した第9〜第15の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
改竄チェックルーチン内に、プログラム提供者の識別コードを埋め込むようにしたものである。
(17) 本発明の第17の態様は、上述した第1〜第16の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
アプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、画像および文字列を含むリソースデータと、XML形式のデータからなるマニフェストファイルと、を含んでおり、
パッケージ化段階において、ZIP方式の圧縮処理を含むパッケージ化処理を実行し、配布用ファイル作成段階において、APK形式のフォーマットをもった配布用ファイルを作成するようにしたものである。
(18) 本発明の第18の態様は、上述した第17の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
配布用ファイル作成段階において、ZIP方式の圧縮フォーマットにおけるコメント領域に秘匿情報もしくは所在情報を記録することにより配布用ファイルを作成するようにしたものである。
(19) 本発明の第19の態様は、上述した第1〜第18の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
配布用ファイル作成段階で、コンピュータが、秘匿情報を含む配布用ファイルを作成し、
第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから秘匿情報を抽出することにより、当該秘匿情報の入手を行うようにしたものである。
(20) 本発明の第20の態様は、上述した第1〜第18の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、この格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うようにしたものである。
(21) 本発明の第21の態様は、上述した第1〜第18の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法において、
配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
アプリケーション実行用コンピュータ内に、入力した配布用ファイルについての秘匿情報を保存する保存場所を設け、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、この保存場所に、必要な秘匿情報が保存されていない場合には、配布用ファイルから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、この格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報を保存場所に保存する処理を行い、保存場所に、必要な秘匿情報が保存されている場合には、保存場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うようにしたものである。
(22) 本発明の第22の態様は、上述した第1〜第21の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法における配布プロセスを構成する各段階を行って、アプリケーションプログラムを配布するようにしたものである。
(23) 本発明の第23の態様は、上述した第1〜第21の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法における実行プロセスを構成する各段階のうち、少なくとも、第1の確認段階、第2の確認段階、改竄判定段階、および実行段階を行って、アプリケーションプログラムを実行するようにしたものである。
(24) 本発明の第24の態様は、上述した第1〜第21の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法における配布プロセスを構成する各段階を、コンピュータにプログラムを組み込んで実行させるようにしたものである。
(25) 本発明の第25の態様は、上述した第1〜第21の態様に係る改竄検知が可能なアプリケーションプログラムの配布実行方法における実行プロセスを構成する各段階のうち、少なくとも、第1の確認段階、第2の確認段階、改竄判定段階、および実行段階を、コンピュータにプログラムを組み込んで実行させるようにしたものである。
(26) 本発明の第26の態様は、アプリケーションプログラムの配布用ファイルを作成するアプリケーションプログラムの配布用ファイル作成装置において、
配布対象となるアプリケーションプログラムを格納するアプリケーションプログラム格納ユニットと、
第1の特定鍵を内蔵した改竄チェックルーチンを格納する改竄チェックルーチン格納ユニットと、
第2の特定鍵、プログラム提供者の第1の鍵、プログラム提供者の第2の鍵を格納する鍵格納ユニットと、
アプリケーションプログラム格納ユニットに格納されているアプリケーションプログラムに改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンを付加する改竄チェックルーチン付加ユニットと、
改竄チェックルーチンが付加されたアプリケーションプログラムに対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージを作成するパッケージ化処理ユニットと、
アプリケーションパッケージを署名対象データとして、プログラム提供者の第1の鍵を用いた暗号化を利用した電子署名処理を行って署名値を生成し、この署名値とプログラム提供者の第2の鍵とを含む署名情報を作成する署名情報作成ユニットと、
アプリケーションパッケージおよび署名情報を構成するデータの中から、プログラム提供者の第2の鍵を含む所定部分を秘匿化対象データとして抽出し、抽出した秘匿化対象データに対して第2の特定鍵を用いた秘匿化処理を施して秘匿情報を作成する秘匿情報作成ユニットと、
アプリケーションパッケージと、署名情報と、秘匿情報もしくは秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成する配布用ファイル作成ユニットと、
を設け、
改竄チェックルーチンは、配布用ファイルに基づいて秘匿化対象データおよび秘匿情報を入手し、秘匿化対象データに対する秘匿情報の正当性を、内蔵している第1の特定鍵を用いて確認し、正当性が確認できない場合には、アプリケーションプログラムが改竄された旨の判定を行う機能を有し、
プログラム提供者の第1の鍵および第2の鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、第1の特定鍵および第2の特定鍵として、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対もしくは同一の鍵を用いるようにしたものである。
(27) 本発明の第27の態様は、上述した第26の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、アプリケーションプログラムが改竄された旨の判定が行われた場合に、当該アプリケーションプログラムの以後の処理の実行を中止させる処理を行うようにしたものである。
(28) 本発明の第28の態様は、上述した第26または第27の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
第1の特定鍵および第2の特定鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵が用いられており、
秘匿情報作成ユニットが、第2の特定鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、第1の特定鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うようにしたものである。
(29) 本発明の第29の態様は、上述した第28の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
第1の特定鍵としてプログラム保証者の第1の鍵を用い、第2の特定鍵としてプログラム保証者の第2の鍵を用い、プログラム保証者の第2の鍵を用いて暗号化したデータをプログラム保証者の第1の鍵を用いて復号できるようにし、
秘匿情報作成ユニットが、プログラム保証者の第2の鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、プログラム保証者の第1の鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うようにしたものである。
(30) 本発明の第30の態様は、上述した第26または第27の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
第1の特定鍵および第2の特定鍵として同一の共通特定鍵が用いられており、
秘匿情報作成ユニットが、秘匿化対象データに対して、共通特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して秘匿情報を作成し、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、配布用ファイルから秘匿化対象データおよび共通特定鍵を抽出し、抽出した秘匿化対象データに対して、抽出した共通特定鍵を用いたダイジェスト化処理を施して得られる情報が、配布用ファイルに基づいて入手した秘匿情報と一致していた場合に、秘匿情報が正当である旨の確認を行うようにしたものである。
(31) 本発明の第31の態様は、上述した第30の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
秘匿情報作成ユニットが、共通特定鍵をパラメータとして用いたハッシュ関数を作用させるダイジェスト化処理を施して得られるハッシュ値を秘匿情報とし、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、共通特定鍵を用いたダイジェスト化処理を施して得られるハッシュ値を秘匿情報とするようにしたものである。
(32) 本発明の第32の態様は、上述した第26〜第31の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
秘匿情報作成ユニットが、秘匿化対象データとして、署名情報を構成するデータ全体を用いるようにしたものである。
(33) 本発明の第33の態様は、上述した第26〜第31の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
秘匿情報作成ユニットが、秘匿化対象データとして、署名情報に含まれるプログラム提供者の第2の鍵を構成するデータを用いるようにしたものである。
(34) 本発明の第34の態様は、上述した第26〜第31の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
秘匿情報作成ユニットが、秘匿化対象データとして、アプリケーションパッケージと署名情報との双方を構成するデータ全体を用いるようにしたものである。
(35) 本発明の第35の態様は、上述した第26〜第34の態様に係る配布用ファイル作成装置において、
配布用ファイル作成ユニットが、秘匿情報を含む配布用ファイルを作成し、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、配布用ファイルから秘匿情報を抽出することにより、当該秘匿情報の入手を行うようにしたものである。
(36) 本発明の第36の態様は、上述した第26〜第34の態様に係る配布用ファイル作成装置において、
配布用ファイル作成ユニットが、秘匿情報作成ユニットによって作成された秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、配布用ファイルから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、この格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うようにしたものである。
(37) 本発明の第37の態様は、上述した第26〜第34の態様に係る配布用ファイル作成装置において、
配布用ファイル作成ユニットが、秘匿情報作成ユニットによって作成された秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、当該改竄チェックルーチンを実行しているコンピュータ内に設けられた秘匿情報の保存場所に秘匿情報が保存されていない場合には、配布用ファイルから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、この格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報を保存場所に保存する処理を行い、保存場所に秘匿情報が保存されている場合には、この保存場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うようにしたものである。
(38) 本発明の第38の態様は、上述した第26〜第37の態様に係るアプリケーションプログラムの配布用ファイル作成装置において、
改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンに、プログラム提供者の識別コードが埋め込まれているようにしたものである。
(39) 本発明の第39の態様は、上述した第26〜第38の態様に係るアプリケーションプログラムの配布用ファイル作成装置によって作成された配布用ファイルを、デジタルデータとしてデータ記録媒体に格納するようにしたものである。
(40) 本発明の第40の態様は、アプリケーションプログラムの改竄を検知するアプリケーションプログラムの改竄検知方法において、
コンピュータが、アプリケーションプログラムと、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルを入力する入力段階と、
コンピュータが、アプリケーションプログラムが改竄されているか否かを判定する判定段階と、
を行い、
署名情報は、アプリケーションプログラムを署名対象データとする電子署名処理によって得られた情報であり、
秘匿情報は、アプリケーションプログラムおよび署名情報を構成するデータの中の所定部分を秘匿化対象データとして抽出し、抽出した秘匿化対象データに対する秘匿化処理を施して得られた情報であり、
判定段階は、署名情報に基づいて改竄の有無を確認する第1の確認段階と、秘匿情報に基づいて改竄の有無を確認する第2の確認段階と、を有し、
アプリケーションプログラムには、秘匿化処理で行われた処理プロセスを勘案して秘匿化対象データに対する秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、改竄チェックルーチンを実行することにより第2の確認段階が行われるようにしたものである。
(41) 本発明の第41の態様は、上述した第40の態様に係るアプリケーションプログラムの改竄検知方法において、
一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
秘匿情報が、秘匿化対象データを一方の鍵を用いて暗号化することにより得られた情報であり、
改竄チェックルーチンが、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報を他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイルから抽出した秘匿化対象データとが一致していた場合に改竄なしとの確認を行うようにしたものである。
(42) 本発明の第42の態様は、上述した第40の態様に係るアプリケーションプログラムの改竄検知方法において、
秘匿情報が、秘匿化対象データに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して作成された情報であり、
改竄チェックルーチンが、入力段階で入力したデータファイルから抽出した秘匿化対象データに対して、特定鍵を用いたダイジェスト化処理を施して得られる情報が、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報と一致していた場合に改竄なしとの確認を行うようにしたものである。
(43) 本発明の第43の態様は、上述した第40〜第42の態様に係るアプリケーションプログラムの改竄検知方法において、
OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータが、第1の確認段階をOSプログラムに基づいて実行し、第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行するようにしたものである。
本発明の配布プロセスでは、アプリケーションパッケージに対して、署名情報が付加されるとともに、特定のデータを秘匿化対象データとして秘匿化する処理が行われ、その結果として得られた秘匿情報も付加される。一方、本発明の実行プロセスでは、署名情報の正当性だけでなく、秘匿情報の正当性の確認も行われる。このため、アプリケーションパッケージ自体の改竄だけでなく、署名情報の改竄も検知することができるようになり、電子署名に対する改竄が行われた場合にも、有効な改竄検知が可能になる。
また、本発明に係る配布用ファイル作成装置を用いれば、アプリケーションパッケージ自体の改竄だけでなく、署名情報の改竄も検知することができる配布用ファイルを作成することができる。
更に、本発明に係るアプリケーションプログラムの改竄検知方法によれば、アプリケーションプログラムに、自分自身が改竄されているか否かを判定する改竄チェックルーチンが含まれているため、当該アプリケーションプログラムを実行することにより、改竄の検知が可能になる。
署名情報を付加した従来の一般的なアプリケーションプログラムの配布方法を示すブロック図である。 図1に示す配布用ファイル20の具体的な作成方法を示すブロック図である。 図2に示す配布用ファイル20について、署名情報22の正当性を確認する処理を示すブロック図である。 図1に示す従来の配布方法に対してクラッカーXが試みる改竄プロセスを示すブロック図である。 本発明に係るアプリケーションプログラムの配布方法の基本原理を示すブロック図である。 図5に示す配布用ファイル20Aについて、署名情報22Aの正当性および秘匿情報23Aの正当性を確認する処理を示すブロック図である。 本発明に係るアプリケーションプログラムの配布実行方法の基本手順を示す流れ図である。 図5に示す本発明に係る配布方法に対してクラッカーXが試みる改竄プロセスを示すブロック図である。 図5に示す本発明の基本的な実施形態に係る配布方法のバリエーションを示すブロック図である。 図5に示す本発明の基本的な実施形態に係る配布方法の別なバリエーションを示すブロック図である。 図5に示す本発明に係る配布方法において、秘匿情報23Aとして暗号化された情報を用いる具体的実施例を示すブロック図である。 図11に示す配布用ファイル20Aについて、署名情報22Aの正当性および秘匿情報23Aの正当性を確認する処理を示すブロック図である。 図5に示す本発明に係る配布方法において、秘匿情報23Aとしてダイジェスト化された情報を用いる具体的実施例を示すブロック図である。 図13に示す配布用ファイル20Aについて、署名情報22Aの正当性および秘匿情報23Aの正当性を確認する処理を示すブロック図である。 本発明に係るアプリケーションプログラムの配布用ファイル作成装置の基本構成を示すブロック図である。 本発明に係るアプリケーションプログラムの配布実行方法の変形例を示すブロック図である。
以下、本発明を図示する実施形態に基づいて説明する。
<<< §1.署名情報を付加する一般的な配布方法 >>>
ここでは、説明の便宜上、署名情報を付加した従来の一般的なアプリケーションプログラムの配布方法を簡単に説明しておく。図1は、このような従来の配布方法を示すブロック図である。ここでは、具体的な例として、Android(登録商標)をOSとして採用するスマートホンやタブレット型電子機器(いわゆる、Android端末)に対して、アプリケーションプログラムを配布する場合を例にとって説明する。
Android端末用のアプリケーションプログラムのデータ構造およびその配布形態については、世界的な標準仕様が定められており、一般的なアプリケーションプログラムは、いずれもこの標準仕様に基づいて作成され、配布されることになる。
具体的には、プログラム提供者A(コンテンツプロバイダー)は、まず、図1の上段に示すようなデータ構造を有するアプリケーションプログラム10を作成する。Androidの標準仕様では、アプリケーションプログラム10は、基本的には、図示のとおり、プログラム本体部11,リソースデータ12,サブルーチン群13,補助ファイル14によって構成され、場合によっては、この他にもいくつかのファイルが付加されたり、いくつかが省略されたりする(たとえば、プログラム本体部11がサブルーチンを利用しないケースでは、サブルーチン群13は不要である)。
ここで、プログラム本体部11はJava(登録商標)で記述されたプログラムのコンパイル後のファイルであり、アプリケーションプログラムの中枢を構成する要素になる。アプリケーションプログラム10が起動されると、このプログラム本体部11の先頭から命令コードが順次実行されることになる。
リソースデータ12は、プログラム本体部11が必要に応じて利用する画像や文字列のデータ群である。画像データは、JPEG形式、GIF形式、BMP形式、PNG形式など、様々なフォーマットで記述されたデータファイルとして用意され、文字列データも同様に、XML形式など、様々なフォーマットで記述されたデータファイルとして用意される。
一方、サブルーチン群13は、「Shared Object」と呼ばれている汎用のサブルーチンプログラム群から構成される。個々のサブルーチンは、プログラム本体部11からのサブルーチンコール命令によって呼び出され、それぞれの役割に応じた所定の処理を実行する。呼び出されたサブルーチンプログラムがその任務を完了すると、制御は再びプログラム本体部11内のプログラムに戻ることになる。プログラム本体部11は、サブルーチンコールを行う際に、必要に応じて何らかのデータを引数としてサブルーチンへ引き渡すことができ、各サブルーチンプログラムは、必要に応じて、その実行結果をプログラム本体部11へ引き渡すことができる。
補助ファイル14は、一般に「マニフェスト」と呼ばれている補助的な情報を記述したXML形式のファイルである。ここには、Android端末で当該アプリケーションプログラムを実行する際のパーミッション情報(たとえば、当該プログラムが、インターネット接続を行うか否か、GPS情報を参照するか否か、電話機能を利用するか否か、といった情報)などが記録される。このパーミッション情報は、当該アプリケーションプログラムのインストール時や起動時にユーザに提示され、ユーザがこれに納得する旨の確認入力を行った場合に限り、インストールや起動が行われることになる。
以上、Android端末用アプリケーションプログラム10の基本データ構造を説明したが、アプリケーションプログラム10は、このままの状態では配布することができない。Androidの標準仕様によると、このアプリケーションプログラム10を配布する際には、パッケージ化処理および署名情報付加処理が必要である。
パッケージ化処理は、主に、アプリケーションプログラム10を構成する個々のファイルを圧縮して1つのパッケージにまとめる処理であり(その他、中間コンパイル処理なども併せて行われる)、図1の中段に示すように、このパッケージ化処理を施すことにより、アプリケーションプログラム10は、1つのアプリケーションパッケージ21にまとめられる。圧縮プロセスを経ることにより、アプリケーションパッケージ21のデータ容量は元のアプリケーションプログラム10の容量に比べて削減され、配布に適した形になる。
一方、署名情報付加処理は、このアプリケーションパッケージ21を署名対象データDとして、プログラム提供者Aが自己の署名を施す処理であり、この処理によって、Aの署名情報22が作成される。具体的には、公開鍵暗号方式を利用した電子署名処理が採用されており、プログラム提供者Aの第1の鍵K(a1)を用いて、署名対象データD(すなわち、アプリケーションパッケージ21)に対する署名値S(A)を作成する処理が行われ、作成された署名値S(A)と、プログラム提供者Aの第2の鍵K(a2)とを含むAの署名情報22が作成される。図1において太線で囲って示す部分は、署名対象データDとなる部分を示しており、署名情報22は、この太線枠内のデータに対して、プログラム提供者Aが署名したことを示す情報ということになる。
ここで、第1の鍵K(a1)と第2の鍵K(a2)とは、公開鍵暗号方式における秘密鍵と公開鍵との関係を有するデジタルデータであり、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもっている。通常、第1の鍵K(a1)として秘密鍵が、第2の鍵K(a2)として公開鍵が、それぞれ用いられ、Androidの標準仕様上では、前者を秘密にし、後者を公開する取り決めになっているが、本願では、単に、第1の鍵K(a1),第2の鍵K(a2)と呼ぶことにする。
こうして作成されたAの署名情報22は、署名対象となるアプリケーションパッケージ21について、プログラム提供者Aがその内容を保証するための情報であり、万一、アプリケーションパッケージ21の内容が改竄されていた場合には、後述するように、Aの署名情報22との間に不整合が生じることになるので、このAの署名情報22を利用した改竄検知が可能になる。
配布用ファイル20は、アプリケーションパッケージ21にAの署名情報22を付加することによって構成されるファイルである。プログラム提供者Aは、アプリケーションプログラム10に対して、上述したパッケージ化処理および署名情報付加処理を施して配布用ファイル20を作成し、インターネット等を介して多数のユーザU1,U2,U3へと配布することになる。もちろん、光学的記録媒体やICメモリ等に格納した状態で配布することも可能である。
Androidの仕様では、このようなデータ構造を有する配布用ファイル20は、APKファイルと呼ばれており、Android端末に配布するアプリケーションプログラムは、すべてこのAPKファイルの形式で配布する必要がある。別言すれば、Androidの仕様では、配布するすべてのアプリケーションプログラムに署名情報を付加することが義務づけられており、Android端末では、配布されたAPKファイルを実行する際に、署名情報に基づく改竄検知が行われることになる。
図2は、図1に示す配布用ファイル20の具体的な作成方法、特に、署名情報22の具体的な作成方法を示すブロック図である。署名情報付加処理では、まず、署名対象データD(すなわち、アプリケーションパッケージ21)に対してハッシュ関数HASHを作用させた不可逆変換が行われ、ハッシュ値H=HASH(D)が求められる。ハッシュ関数は代表的な一方向性関数であり、もとのデータDに対しては常に一義的なハッシュ値Hが得られるが、逆に、ハッシュ値HからはもとのデータDを復元することはできない性質をもっている。このため、ハッシュ値Hは、もとのデータD(図示の例の場合は、アプリケーションパッケージ21を構成する全データ)に比べてデータ容量を極めて小さくできる。
次に、このハッシュ値Hを、プログラム提供者Aの第1の鍵K(a1)を用いた公開鍵暗号方式の暗号化アルゴリズムを用いて暗号化し、署名値S(A)を求める。すなわち、署名値S(A)は、ハッシュ値Hを暗号化したデータであり、プログラム提供者Aの第2の鍵K(a2)を用いた復号を行うことにより、元のハッシュ値Hが得られることになる。結局、アプリケーションパッケージ21を署名対象データDとして、プログラム提供者Aの第1の鍵K(a1)を用いた暗号化を利用した電子署名処理を行って署名値S(A)を生成し、この署名値S(A)とプログラム提供者Aの第2の鍵K(a2)とによって、Aの署名情報22が作成されることになる。
前述したとおり、配布用ファイル(APKファイル)20は、アプリケーションパッケージ21にAの署名情報22を付加したファイルであり、Android端末に対しては、このような形式をもったファイルとして、アプリケーションプログラム10が配布されることになる。ここでは、便宜上、この配布用ファイル20が「PatGame.apk」なるファイル名をもったゲーム用アプリケーションファイルとして配布されたものとしよう(ファイル名の拡張子.apkは、このファイルがAPKファイルであることを示している)。
この配布用ファイル20の実行時には、上述したとおり、署名情報に基づく改竄検知(署名情報22の正当性確認)が行われる。図3は、Android端末において実行される署名情報22の正当性確認処理を示すブロック図である。
Android端末が入手した「PatGame.apk」なるファイル名をもった配布用ファイル20には、アプリケーションパッケージ21とAの署名情報22とが含まれている。ここで、署名情報22には、署名値S(A)とAの第2の鍵K(a2)とが含まれており、前述したように、署名値S(A)に対して、Aの第2の鍵K(a2)を用いた復号処理を行うことにより、元のハッシュ値Hを得ることができる。図3では、このような署名値S(A)の復号によって得られたハッシュ値をハッシュ値H1と呼ぶことにする。
一方、アプリケーションパッケージ21(署名対象データD)に対して、図2に示すハッシュ関数HASHを作用させた不可逆変換を行い、ハッシュ値H=HASH(D)を求める処理も行う。図3では、このような不可逆変換によって得られたハッシュ値をハッシュ値H2と呼ぶことにする。もし、Android端末が入手した「PatGame.apk」なるファイル名をもった配布用ファイル20に含まれているアプリケーションパッケージ21の内容が、図2の上段に示すアプリケーションパッケージ21の内容と完全に同一であれば、ハッシュ値H1,H2は一致するはずである。
そこで、ユーザUが利用するAndroid端末において、ハッシュ値H1,H2の一致を確認する処理を実行すれば、アプリケーションパッケージ21に対する改竄が行われているか否かを判定することができる。AndroidOSには、アプリケーションプログラムの実行前にこのような一致確認を行い、両者が不一致であった場合には、アプリケーションパッケージ21に対して何らかの改竄が行われたものと判断し、当該アプリケーションプログラムの実行を中止する機能が備わっている。
<<< §2.従来の配布方法の具体的な問題点 >>>
§1で述べたとおり、Android端末用のアプリケーションプログラムは、図1に示すように、配布用ファイル(APKファイル)20の形式で広く配布されることになるので、一般ユーザU1,U2,U3は、インターネット等を介してこれをダウンロードすることにより容易に入手することができる。これは、悪意をもったクラッカーXも、配布用ファイル20を容易に入手できることを意味する。したがって、クラッカーXが、入手した配布用ファイル20に対して改竄を施し、これをインターネット等を介して再配布することも容易である。
しかも、APKファイルの仕様は広く公開されているため、クラッカーXの立場からすると、改竄も容易であり、かつ、再配布も容易であるという、不正行為が行いやすい環境が整っていることになる。特に、アプリケーションプログラム10を構成する各要素のうち、リソースデータ12や補助ファイル14に対する改竄は非常に容易である。
たとえば、リソースデータ12を構成する画像データファイルや文字列データファイルは、JPEG形式,GIF形式,BMP形式,PNG形式,XML形式など、ごく一般的なファイルフォーマットで記述されたデータであるため、ファイルの内容を書き換えたり、ファイルを入れ替えるだけで改竄が可能になる。このため、本来の画像を猥褻な画像に入れ替えたり、本来の文字列を不適切な文字列に入れ替えたりする改竄は容易に行い得る。また、「YESボタン」の画像と「NOボタン」の画像とを入れ替えるような改竄が行われると、一見したところ改竄の事実に気づかないが、ユーザの回答入力画面における「YES」と「NO」の表示だけが入れ替わってしまうという重大な支障が生じることになる。
一方、補助ファイル14(マニフェストファイル)も、XML形式で記載された判読容易な文字列データによって構成されているため、改竄の対象になりやすい。具体的には、補助ファイル14内には、当該アプリケーションプログラムが、インターネット接続を行うか否か、GPS情報を参照するか否か、電話機能を利用するか否か、といったパーミッション情報が含まれており、この情報が改竄されると、ユーザが許可していない動作が実行されることになる。たとえば、インターネット接続および電話機能の利用を「行う」旨のパーミッション情報をもつアプリケーションプログラムについて、更に、GPS情報の参照を「行う」旨のパーミッション情報を追加するような改竄が行われると、本来のパーミッション情報では許可していない「GPS情報の参照」という動作が実行されることになり、GPS情報が外部に流出するといった被害が発生するおそれがある。
このような改竄による被害は、ユーザだけではなく、コンテンツプロバイダにまで及ぶ。たとえば、プログラム提供者Aが配布している「PatGame.apk」なるアプリケーションプログラムの評判を聞いたユーザUが、当該プログラムの正規の配布用ファイルの代わりに、改竄されたファイルをダウンロードして実行してしまった場合を考えてみよう。クラッカーXは、通常、元のファイルと同じファイル名で改竄したファイルを再配布するので、「PatGame.apk」というファイル名を確認しただけでは、それが純正のファイルであるのか、改竄されたファイルであるのかを識別することができない。
この場合、たとえば、プログラム提供者Aの本来のロゴ画像が猥褻な画像に入れ替わっているような顕著な改竄が行われたケースであれば、ユーザは、実行しているアプリケーションプログラムが改竄されたものであると認識することができるであろう。しかしながら、ユーザが改竄に気づかないケースでは、当該アプリケーションプログラムの不具合の責任は、プログラム提供者Aにあると考えるであろう。このような不当な評価がインターネット等を介して流布すると、プログラム提供者Aは風評被害を受けることになる。
もちろん、Androidの仕様によれば、§1で述べたとおり、配布用ファイル20には、アプリケーションパッケージ21とともに署名情報22が付加されており、Android端末では、図3に示す手順に従って、アプリケーションパッケージ21に対する署名情報22の正当性が確認される。したがって、クラッカーXが、リソースデータ12内の画像ファイルや文字列ファイルを別なファイルに差し替えたり、補助ファイル14内のパーミッション情報を書き替えたりしただけでは、図3に示す確認処理において不一致が生じ、改竄の事実を検知することができる。
すなわち、図3に示す例において、クラッカーXがアプリケーションパッケージ21の内容を書き替えた場合、署名対象データDがD′に変わってしまうため、得られるハッシュ値H2も変わってしまうことになる。その結果、署名対象データDに基づいて作成された署名値S(A)を復号して得られるハッシュ値H1と不一致が生じることになり、改竄の事実が検知される。
このように、§1で述べた従来の配布方法では、アプリケーションパッケージ21のみに対して行われた改竄については検知が可能である。しかしながら、署名情報22に対する改竄まで行われてしまうと、これを検知することはできない。以下にその理由を説明する。
ここでは、図1に示すように、プログラム提供者Aが配布した正規の配布用ファイル20を、クラッカーXが入手したものとしよう。図4は、このようにして入手した正規の配布用ファイル20に対して、クラッカーXが試みる改竄プロセスを示すブロック図である。クラッカーXは、まず、入手した配布用ファイル20に含まれるアプリケーションパッケージ21に対して伸張処理を実行し、元のアプリケーションプログラム10を復元する。パッケージ化処理は、基本的にはファイルの圧縮処理であるため、この圧縮処理に応じた伸張処理を行うことにより、元のアプリケーションプログラム10を容易に復元することができる。§1で述べたとおり、アプリケーションプログラム10は、プログラム本体部11,リソースデータ12,サブルーチン群13,補助ファイル14という要素によって構成されている(この他にもいくつかの要素が付加される場合もある)。
クラッカーXは、これらの各要素に対して改竄を施すことになるが、前述したとおり、リソースデータ12や補助ファイル14に対する改竄は非常に容易であり、データファイルの入れ替えや、テキストデータの書き替えという簡単な作業によって行うことができる。そこで、ここでは、クラッカーXが、図示のとおり、リソースデータ12をリソースデータ12Xに改竄し、補助ファイル14を補助ファイル14Xに改竄したものとしよう。プログラム本体部11およびサブルーチン群13に対する改竄は行われていないが、改竄されたリソースデータ12Xおよび改竄された補助ファイル14Xを含むアプリケーションプログラム10Xは、もはや正常動作を行わないものになっている。
続いて、クラッカーXは、アプリケーションプログラム10Xに対する再パッケージ化処理を行い、改竄されたアプリケーションパッケージ21Xを生成する。こうして生成したアプリケーションパッケージ21Xを、正規の配布用ファイル20内の正規のアプリケーションパッケージ21とすり替えただけでは、Android端末で行われる通常の改竄検知処理によって改竄の事実が検知されることになる。すなわち、Aの署名情報22の正当性を確認する処理で不一致が生じることになる。
ところが、クラッカーXは、改竄されたアプリケーションパッケージ21Xを署名対象データD′として、自分自身を署名者とする署名を行うことにより、Xの署名情報22Xを作成することができる。具体的には、クラッカーXの第1の鍵K(x1)を用いて、署名対象データD′(すなわち、改竄されたアプリケーションパッケージ21X)に対する署名値S(X)を作成する処理を行い、作成された署名値S(X)と、クラッカーXの第2の鍵K(x2)とを含むXの署名情報22Xを作成すればよい。
プログラム提供者Aが、第1の鍵K(a1)を秘密鍵として管理していれば、クラッカーXは、Aの第1の鍵K(a1)を入手することができないので、クラッカーXが、改竄された署名対象データD′に対して、署名者Aとして署名を行うことはできない。しかしながら、クラッカーXは、自分自身の第1の鍵K(x1)を用いて、署名者Xとして署名を行うことは可能であり、そのようにして得られた署名値S(X)に、自分自身の第2の鍵K(x2)を付加して、Xの署名情報22Xを作成することはできる。こうして作成された署名情報22Xは、いわばクラッカーXによる再署名というべき情報であり、改竄されたアプリケーションパッケージ21Xに対して正当性を有している。
こうして、クラッカーXが、改竄されたアプリケーションパッケージ21XにXの署名情報22Xを付加すれば、改竄された配布用ファイル20Xを得ることができる。そして、この配布用ファイル20Xを、「PatGame.apk」なるファイル名をもったAPKファイルとして再配布すれば、一見したところ、正規のAPKファイルと区別できない改竄されたファイルを流布させることができる。
Androidの仕様は広く公開されており、APKファイルの作成作業を支援するための様々なツールも広く普及している。たとえば、アプリケーションプログラム10をパッケージ化してアプリケーションパッケージ21を作成するツール、アプリケーションパッケージ21に任意の者の署名情報22を付加してAPKファイル20を作成するツール、APKファイル20内のアプリケーションパッケージ21を伸張して元のアプリケーションプログラム10を復元するツールなどは、インターネット上の様々なサイトから入手可能であり、クラッカーXは、これらのツールを利用して、図4に示す改竄プロセスを実行し、改竄されたAPKファイル20Xを作成することができる。
このように、アプリケーションパッケージ21に対する改竄とともに、署名情報22に対する改竄が行われた場合、図3に示す従来の改竄検知方法では、改竄の検知を行うことができない。すなわち、図4に示す配布用ファイル20Xにおいて、Xの署名情報22Xは、アプリケーションパッケージ21Xを署名対象データD′としてクラッカーXが署名を行うことによって得られた情報であるから、図3に示す従来の改竄検知方法では何ら支障なく一致確認が得られることになる。したがって、一般ユーザUが、改竄された配布用ファイル20XをAndroid端末にダウンロードして実行すれば、改竄されたアプリケーションプログラム10Xは、正規のアプリケーションプログラムとして実行されてしまうことになる。
このように、改竄されたアプリケーションパッケージ21に対してクラッカーXによる再署名が行われ、この再署名によって得られた署名情報による差し替えが行われてしまうと、署名情報の正当性は確保されてしまうため、Android端末の一般的な改竄検知機能によっては改竄の検知を行うことができない。これは、Androidの仕様が、そもそも署名者の身元まで確認した改竄検知を行うようになっていないためである。すなわち、Android端末は、正規のコンテンツプロバイダーであるプログラム提供者AとクラッカーXとを区別することはできないので、署名者がAであろうがXであろうが、署名対象データと署名情報との間に整合性が確認できれば、改竄なしと判断せざるを得ない。
もちろん、認証サーバなどへ問い合わせを行えば、署名者の身元確認を行うことができる。官公庁への電子申請や電子商取引などを行う場合、通常、認証サーバなどへ問い合わせを行い、署名者の身元確認を行う処理が行われる。しかしながら、Android端末の場合、少なくともアプリケーションプログラムを実行する際の改竄判定処理では、署名者の身元確認まで行う仕様にはなっていない。これは、Android端末がオフライン状態(外部の認証サーバへの問い合わせができない状態)であっても、アプリケーションプログラムを支障なく実行できるようにするためだと思われる。
このように、署名情報の一致確認は行うものの、署名者の身元確認までは行わない端末装置に対してアプリケーションプログラムを配信する場合に、署名情報に対する改竄までが行われてしまうと、有効な改竄検知を行うことができない。本発明は、このような問題に対処するための新たなアプリケーションプログラムの効果的な配布実行方法を提供するものである。
<<< §3.本発明の基本的な実施形態に係る配布実行方法 >>>
ここに示す基本的な実施形態の原理は、図1に示す配布用ファイル20において、配布前に、Aの署名情報22についての何らかのマーキングを行っておき、実行時には、このマーキングを利用して、Aの署名情報22に対する改竄の有無を検知する、というものである。クラッカーXが、図4に示す方法で、Aの署名情報22をXの署名情報22Xにすり替えたとしても、Aの署名情報22に関する何らかの痕跡をマーキングしておけば、署名情報のすり替えを検知することができる。
もっとも、このマーキングの内容がクラッカーXに察知されてしまうと、マーキングを含めた改竄が行われてしまうことになる。そこで、本発明では、マーキング対象を特定の方法で秘匿化するようにし、クラッカーXにマーキングの内容が察知されないようにするとともに、秘匿化された情報に基づいてマーキングの内容の正当性を確認する改竄チェックルーチンを、アプリケーションプログラム10自身に組み込むという手法を採る。以下、その基本原理を詳細に説明する。
図5は、本発明の基本的な実施形態に係るアプリケーションプログラムの配布方法の基本原理を示すブロック図である。この方法では、プログラム提供者Aは、図1に示すアプリケーションプログラム10の代わりに、図5に示すアプリケーションプログラム10Aを用意し、これをパッケージ化してアプリケーションパッケージ21Aを作成する。アプリケーションプログラム10Aは、アプリケーションプログラム10内のプログラム本体部11をプログラム本体部11Aに置き換え、サブルーチン群13をサブルーチン群13Aに置き換えたものである。
サブルーチン群13Aは、サブルーチン群13に、改竄チェックルーチンFを付加したものである。この改竄チェックルーチンFは、後述するアルゴリズムに基づいて、Aの署名情報22Aが改竄されているかどうかを確認する機能をもったサブルーチンプログラムであり、第1の特定鍵K(s1)を内蔵している。この第1の特定鍵K(s1)は、Aの署名情報22Aの改竄の有無を調べるために必須の鍵になる。
一方、プログラム本体部11Aは、プログラム本体部11の所定箇所に、改竄チェックルーチンFをコールするサブルーチンコール命令と、改竄チェックルーチンFから「改竄あり」との判定結果が返された場合に、以後の命令群の実行を中止する命令と、を挿入したものである。したがって、改竄チェックルーチンFから「改竄なし」との判定結果が返された場合には、プログラム本体部11Aは、以後の命令群の実行を引き続き実行することになるが、改竄チェックルーチンFから「改竄あり」との判定結果が返された場合には、以後の命令群の実行は中止され、アプリケーションプログラム10Aは終了することになる。
結局、アプリケーションプログラム10Aは、基本的には、アプリケーションプログラム10と同等の処理機能をもったプログラムであるが、改竄チェックルーチンFを利用した自己改竄チェック機能が付加されたプログラムと言うことができる。Android端末において、このアプリケーションプログラム10Aが実行されると、改竄チェックルーチンFによる改竄チェック処理が実行され、署名情報22Aに対する改竄の有無が判定される。そして、改竄ありとの判定結果が得られた場合には、アプリケーションプログラム10Aの実行は中止されることになる。したがって、実用上は、プログラム本体部11Aにおけるアプリケーションプログラム本来の機能を果たすための命令群の前に、改竄チェックルーチンFをコールするサブルーチンコール命令を組み込むようにし、アプリケーションプログラム10Aの実行初期段階で改竄チェックルーチンFが実行されるようにするのが好ましい。
続いて、§1で述べた従来方法と同様に、パッケージ化によって得られたアプリケーションパッケージ21Aを署名対象データDとして、プログラム提供者Aの第1の鍵K(a1)を用いた暗号化を利用した電子署名処理を行って署名値S(A)を生成し、この署名値S(A)とプログラム提供者Aの第2の鍵K(a2)とを含む署名情報22Aを作成する。
ここで述べる基本的な実施形態では、更に、Aの署名情報22Aを秘匿化対象データCとして抽出し(図5では、秘匿化対象データCを太線枠で示す)、この秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報23Aを作成する。秘匿化処理の具体的な方法は、§6で実例を挙げて説明するが、第2の特定鍵K(s2)を用いた何らかの演算処理によって、元の秘匿化対象データCに対して一義的に秘匿情報23Aを決定することができる処理であって、この第2の特定鍵K(s2)に対して特別な関係をもった第1の特定鍵K(s1)(すなわち、改竄チェックルーチンFに内蔵されている鍵)を用いることによってのみ、秘匿化対象データCに対する秘匿情報23Aの正当性が確認できる、という条件を満たす処理であれば、どのような処理を秘匿化処理として採用してもかまわない(後述するように、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、同一の共通特定鍵K(s0)を用いることも可能である)。
こうして、秘匿情報23Aが作成できたら、プログラム提供者Aは、アプリケーションパッケージ21Aと、Aの署名情報22Aと、秘匿情報23Aと、を含む配布用ファイル20Aを作成し、これをAPKファイルとして配布すればよい。ここで、Aの署名情報22Aは、アプリケーションパッケージ21Aが改竄されていないことを確認するために用いられるプログラム提供者Aによる電子署名であり、秘匿情報23Aは、このAの署名情報22Aが改竄されていないことを確認するために用いられるマーキング情報ということになる。Android端末では、Aの署名情報22Aの正当性を確認するとともに、秘匿情報23Aの正当性を確認することにより、アプリケーションパッケージ21Aに対する改竄のみならず、Aの署名情報22Aに対する改竄を検知することができる。
図6は、図5に示す配布用ファイル20Aについて、署名情報22Aの正当性および秘匿情報23Aの正当性を確認する処理を示すブロック図である。ユーザUが、Android端末に配布用ファイル20Aをインストールし、これを実行しようとすると、アプリケーションプログラム10Aの実行前に、AndroidOSの基本機能により、Aの署名情報22Aの正当性を確認する処理が実行される。
すなわち、§1でも述べたように、まず、署名情報22Aから署名値S(A)およびAの第2の鍵K(a2)を抽出し、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことにより、ハッシュ値H1を得る処理が行われる。続いて、アプリケーションパッケージ21A(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行い、ハッシュ値H2を求める処理を行う。そして、ハッシュ値H1とハッシュ値H2とが一致するか否かを確認する処理を行う。ここでは、このような確認処理のプロセスを第1の確認段階と呼ぶことにする。この第1の確認段階では、アプリケーションパッケージ21Aに対する署名情報22Aの正当性を確認する処理が行われることになる。
AndroidOSは、この第1の確認段階によって、署名情報22Aの正当性が確認できた場合、アプリケーションパッケージ21Aは改竄されていないものと判断し、そこに含まれているアプリケーションプログラム10Aを実行する。ただ、アプリケーションプログラム10Aの構成要素となるプログラム本体部11Aには、前述したとおり、改竄チェックルーチンFをコールするサブルーチンコール命令が組み込まれているため、アプリケーションプログラム10Aの実行により、改竄チェックルーチンFが実行されることになる。
ここで、改竄チェックルーチンFは、内蔵している第1の特定鍵K(s1)を利用して、秘匿化対象データC(この例の場合は、Aの署名情報22A)に対する秘匿情報23Aの正当性を確認する処理を行う。ここでは、このような確認処理のプロセスを第2の確認段階と呼ぶことにする。前述したとおり、秘匿情報23Aは、秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して得られた情報であり、秘匿化対象データC(Aの署名情報22A)に対する秘匿情報23Aの正当性は、第1の特定鍵K(s1)を用いて確認することができる。
改竄チェックルーチンFは、こうして実行された第2の確認段階の結果を、サブルーチンの実行結果としてプログラム本体部11Aへと返すことになる。プログラム本体部11Aは、改竄チェックルーチンFから肯定的な判定結果(秘匿情報23Aの正当性が確認された旨の判定結果)が返された場合には、以後の命令群を引き続き実行することになるが、否定的な実行結果(秘匿情報23Aの正当性が確認されなかった旨の判定結果)が返された場合には、以後の命令群の実行を中止する。
かくして、Android端末では、第1の確認段階において、アプリケーションパッケージ21Aに対する署名情報22Aの正当性が確認され、かつ、第2の確認段階において、署名情報22Aに対する秘匿情報23Aの正当性が確認された場合にのみ、アプリケーションプログラム10Aは正常に実行されることになる。
図7は、ここに示す基本的な実施形態の基本手順を示す流れ図である。この基本手順は、アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムを実行する実行プロセスと、によって構成されるアプリケーションプログラムの配布実行方法の手順ということになる。図示のとおり、前半の配布プロセスでは、ステップS1〜S5の各段階が実行され、後半の実行プロセスでは、ステップS6〜S12の各段階が実行される。以下、これら各ステップの内容を順に説明する。
ここでは、便宜上、前半の配布プロセス(ステップS1〜S5)は、プログラム提供者Aが利用するコンピュータによって実行され、後半の実行プロセス(ステップS6〜S12)は、ユーザUが利用するアプリケーション実行用コンピュータ(スマートホンなどのAndroid端末)によって実行されるものとして以下の説明を行うことにする。なお、前半の配布プロセスを構成するステップS1〜S5は、必ずしも同一のコンピュータで実行する必要はないが、後半の実行プロセスを構成するステップS6〜S12は、ユーザUが利用する同一のアプリケーション実行用コンピュータにおいて実行されることになる。
まず、ステップS1のパッケージ化段階では、図5に示すように、第1の特定鍵K(s1)を含むアプリケーションプログラム10Aに対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージ21Aを作成する処理が行われる。ここで、パッケージ化処理の対象となるアプリケーションプログラム10Aには、図6に示す第2の確認段階を実行するための改竄チェックルーチンFが含まれており、第1の特定鍵K(s1)は、この改竄チェックルーチンF内に含まれている。
特に、Android端末に配布する場合は、その仕様により、アプリケーションプログラム10Aには、プログラム本体部11Aと、このプログラム本体部11Aから呼び出されるサブルーチン群13Aと、画像および文字列を含むリソースデータ12と、XML形式のデータからなる補助ファイル14(マニフェストファイル)とが含まれることになり、ステップS1のパッケージ化段階では、ZIP方式の圧縮処理を含むパッケージ化処理が実行されることになる。
続くステップS2の署名情報作成段階では、図5に示すように、ステップS1で作成されたアプリケーションパッケージ21Aを署名対象データDとして、プログラム提供者Aの第1の鍵K(a1)を用いた暗号化を利用した電子署名処理を行って署名値S(A)を生成し、この署名値S(A)とプログラム提供者Aの第2の鍵K(a2)とを含むAの署名情報22Aを作成する処理が実行される。ここで、プログラム提供者Aの第1の鍵K(a1)および第2の鍵K(a2)としては、公開鍵暗号方式に利用される一対の鍵、すなわち、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵が用いられる。
次に、ステップS3の秘匿情報作成段階では、Aの署名情報22Aを秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報23Aを作成する処理が実行される。ここで、第1の特定鍵K(s1)および第2の特定鍵K(s2)としては、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対の鍵が用いられる(後述するように、両者は同一の共通鍵でもかまわない)。
このステップS3で実行する秘匿化処理としては、前述したとおり、第2の特定鍵K(s2)を用いた何らかの演算処理によって、元の秘匿化対象データCに対して一義的に秘匿情報23Aを決定することができる処理であって、第1の特定鍵K(s1)を用いることによってのみ、秘匿化対象データCに対する秘匿情報23Aの正当性が確認できる、という条件を満たす処理であれば、どのような処理であってもかまわない。秘匿化処理の具体例は§6で例示する。
一方、ステップS4の配布用ファイル作成段階では、ステップS1で作成されたアプリケーションパッケージ21Aと、ステップS2で作成された署名情報22Aと、ステップS3で作成された秘匿情報23Aと、をまとめることにより、配布用ファイル20Aが作成される。Android端末に配布する場合は、この配布用ファイル作成段階において、APK形式のフォーマットをもった配布用ファイル20A(拡張子.apkが付されたAPKファイル)が作成されることになる。
なお、APKファイルの実体は、ZIP方式の圧縮フォーマットで圧縮されたファイルであるので、ステップS4の配布用ファイル作成段階でAPKファイルを作成する場合は、ZIP方式の圧縮フォーマットにおけるコメント領域に秘匿情報23Aを記録することができる。このコメント領域は、本来、APKファイルの作成者が、任意のコメント文を記載できるようにするために設けられた領域であるから、秘匿情報23Aを構成するデータをコメント文の代わりに記録しても、何ら支障は生じない。別言すれば、コメント領域に秘匿情報23Aを記録した本発明に係る配布用ファイル20Aは、Androidの仕様に合致したAPKファイルとしての条件を満たしており、そのままAndroid端末に配布しても何ら支障はなく、AndroidOSによって、仕様通りのAPKファイルとして取り扱われることになる。
配布プロセスの最後には、ステップS5のファイル出力段階が行われる。この段階では、ステップS4で作成された配布用ファイル20A(ここに示す例の場合、Androidの仕様通りのAPKファイル)が配布のために出力されることになる。たとえば、配布用のWebサーバなどに出力すれば、配布用ファイル20Aはインタネットを介して一般ユーザへ配布されることになり、光学的記録媒体やICメモリ等の物理的記録媒体に記録して出力すれば、配布用ファイル20Aは、このような物理的記録媒体に格納された状態で配布されることになる。
続いて、後半の実行プロセスについて説明する。まず、ステップS6のファイル入力段階では、ユーザUが利用するアプリケーション実行用コンピュータによって、前半の配布プロセスによって配布された配布用ファイル20Aが入力される。たとえば、ユーザUがAndroid端末を利用している場合、APKファイルの配布サイトからインターネット経由で配布用ファイル20Aをダウンロードする指示を与えることにより、当該Android端末に配布用ファイル20Aが取り込まれることになり、更に、ユーザUの了承を得て、配布用ファイル20Aのインストールが行われることになる。Android端末の場合、このような処理は、OSプログラムの基本機能によって実行される。
続くステップS7以降の各段階は、ユーザUもしくは他のアプリケーションやサービスが、ステップS6でインストールしたアプリケーションプログラム(配布用ファイル20A)について、実行指示を与えた場合に行われる(第1のアプリケーションプログラムが、第2のアプリケーションプログラムを起動する機能を有しているケースでは、ユーザUが、当該第1のアプリケーションプログラムの実行指示を与えた時点ではなく、その後、当該第1のアプリケーションプログラムが、当該第2のアプリケーションプログラムを起動する処理を実行した時点で、ステップS7以降の各段階が行われることになる。)。
まず、ステップS7では、図6に示す第1の確認段階が行われる。この第1の確認段階では、アプリケーションパッケージ21Aに対する署名情報22Aの正当性を確認する処理が行われる。すなわち、ステップS6で入力した配布用ファイル20Aについて、Aの署名情報22Aに含まれているプログラム提供者Aの第2の鍵K(a2)を用いた復号を利用した署名確認処理を行って、アプリケーションパッケージ21Aに対する署名情報22Aの正当性が確認される。
具体的には、図6を用いて説明したように、署名情報22Aから署名値S(A)およびAの第2の鍵K(a2)を抽出し、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことによりハッシュ値H1を求め、アプリケーションパッケージ21A(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行いハッシュ値H2を求め、ハッシュ値H1とハッシュ値H2との一致確認が行われることになる。Android端末の場合、この第1の確認段階も、OSプログラムの基本機能によって実行される。
ステップS7の第1の確認段階において肯定的な結果が得られた場合、すなわち、アプリケーションパッケージ21Aに対する署名情報22Aの正当性が確認された場合には、ステップS8を経てステップS9へと進み、第2の確認段階が実行される。これに対して、ステップS7の第1の確認段階において否定的な結果が得られた場合、すなわち、アプリケーションパッケージ21Aに対する署名情報22Aの正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS8を経てステップS11へと進み、当該アプリケーションの実行は中止される。
Android端末の場合、ステップS8の分岐処理もOSプログラムの基本機能によって実行される。すなわち、ステップS7で肯定的な結果が得られた場合は、OSプログラムはアプリケーションプログラム10Aを起動する処理を行い、ステップS7で否定的な結果が得られた場合は、OSプログラムはアプリケーションプログラム10Aの起動を中止する。このような処理は、AndroidOSの標準仕様に基づく処理である。
ステップS9では、図6に示す第2の確認段階が行われる。この第2の確認段階では、署名情報22Aに対する秘匿情報23Aの正当性を確認する処理が行われる。すなわち、ステップS6で入力した配布用ファイル20Aから、秘匿化対象データCとなるAの署名情報22Aおよび秘匿情報23Aを抽出し、秘匿化対象データCに対する秘匿情報23Aの正当性が確認される。実際には、アプリケーションパッケージ21Aを伸張して得られるアプリケーションプログラム10Aに含まれている改竄チェックルーチンFによって、第2の確認段階の処理が行われる。
前述したとおり、改竄チェックルーチンFは、第1の特定鍵K(s1)を内蔵しており、この第1の特定鍵K(s1)を用いて、秘匿化対象データCに対する秘匿情報23Aの正当性を確認する。正当性を確認するための具体的な処理については、§6において実例を挙げて説明する。改竄チェックルーチンFは、アプリケーションプログラム10A内に組み込まれているサブルーチンであるから、結局、ステップS9の処理は、アプリケーションプログラム10Aによって実行される処理ということになる。
ステップS9の第2の確認段階において肯定的な結果が得られた場合、すなわち、秘匿化対象データCに対する秘匿情報23Aの正当性が確認された場合には、ステップS10を経てステップS12へと進み、アプリケーションプログラム10Aの処理を続行する実行段階が行われる。これに対して、ステップS9の第2の確認段階において否定的な結果が得られた場合、すなわち、秘匿化対象データCに対する秘匿情報23Aの正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS10を経てステップS11へと進み、当該アプリケーションの実行は中止される。
結局、ステップS8およびステップS10は、「改竄あり」もしくは「改竄なし」との判断を行う改竄判定段階を構成する処理になる。すなわち、ステップS6で入力した配布用ファイル20Aについて、ステップS7の第1の確認段階およびステップS9の第2の確認段階の双方において肯定的な結果が得られた場合には「改竄なし」との判断が行われ、第1の確認段階および第2の確認段階の少なくとも一方において否定的な結果が得られた場合には「改竄あり」との判断が行われる。
そして、この改竄判定段階において、「改竄なし」との判断が得られた場合は、ステップS12へと進み、配布されたアプリケーションプログラム10Aを正常に実行する実行段階が行われるが、「改竄あり」との判断が行われた場合は、ステップS11へと進み、配布されたアプリケーションプログラム10Aの実行は中止される。
このように、実行プロセスを、OSプログラムの管理下でアプリケーションプログラムの実行を行うアプリケーション実行用コンピュータを用いる場合、ステップS7の第1の確認段階をOSプログラムに基づいて実行し、ステップS9の第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行する、という役割分担を行うことができる。Android端末のように、もともとOSプログラムが第1の確認段階を行う機能を備えている場合には、このような役割分担を行えば、第1の確認段階を行うためのプログラムを別途用意する手間を省くことができる。
Android端末の場合、ステップS7の第1の確認段階は、OSプログラムの基本機能によって実行され、ステップS8において「改竄あり」との判断に基づいてステップS11に分岐した場合の実行中止処理は、OSプログラムによって実行されることになる。この場合、ユーザUからは、アプリケーションプログラム10Aを起動する旨の指示が与えられているものの、実際には、アプリケーションプログラム10Aはまだ起動していない状態である。したがって、ステップS8からステップS11に分岐した場合の実行中止処理とは、ユーザUからの指示にかかわらず、OSプログラムがアプリケーションプログラム10Aの起動を拒否する処理ということになる。
一方、ステップS9の第2の確認段階は、アプリケーションプログラム10Aが起動された後に、当該アプリケーションプログラム10A内の改竄チェックルーチンによって実行される処理ということになる。より詳細に説明すれば、アプリケーションプログラム10A内のプログラム本体部11Aからサブルーチン群13A内の改竄チェックルーチンFがサブルーチンとしてコールされ、当該サブルーチン内のプロセスとして、第2の確認段階が実行されることになる。したがって、ステップS10からステップS11に分岐した場合の実行中止処理とは、アプリケーションプログラム10A自身が、以後の処理の実行を中止して終了する処理(制御をOSプログラムへ返す処理)ということになる。もちろん、ステップS10において「改竄なし」との判断がなされた場合は、ステップS12の実行段階の処理、すなわち、アプリケーションプログラム10Aが、以後の処理を継続して実行する処理が行われることなる。
要するに、図7に示す実施形態では、OSプログラムに基づく第1の確認段階(ステップS7)が行われた後に、アプリケーションプログラム内の改竄チェックルーチンFに基づく第2の確認段階(ステップS9)が実行されるようにしつつ、第1の確認段階において否定的な結果が得られた場合には、OSプログラムにより改竄ありとの判断を伴う改竄判定段階(ステップS8)を実行し、第2の確認段階(ステップS9)を行わずに、当該判断対象となったアプリケーションプログラムの実行をOSプログラムの管理下で中止(ステップS11)することになる。
一方、第1の確認段階(ステップS7)において肯定的な結果が得られた場合には、OSプログラムの管理下で当該判断対象となったアプリケーションプログラムを実行して第2の確認段階(ステップS9)を行う。そして、この第2の確認段階において否定的な結果が得られた場合には、当該アプリケーションプログラム自身により改竄ありとの判断を伴う改竄判定段階(ステップS10)を実行し、当該アプリケーションプログラム自身により、以後の処理の実行を中止(ステップS11)する。また、第2の確認段階(ステップS9)において肯定的な結果が得られた場合には、当該アプリケーションプログラム自身により改竄なしとの判断を伴う改竄判定段階(ステップS10)を実行し、当該アプリケーションプログラム自身により、以後の処理を引き続き実行する(ステップS12)ことになる。
<<< §4.本発明の基本的な実施形態による改竄検知 >>>
ここでは、クラッカーXが、図5に示す方法で作成された配布用ファイル20Aを入手し、これに改竄を加えて再配布した場合に、Android端末において、どのような方法で改竄検知が行われるかについて説明しよう。
図8は、図5に示す配布方法に対してクラッカーXが試みる改竄プロセスを示すブロック図である。クラッカーXは、まず、入手した配布用ファイル20Aに含まれるアプリケーションパッケージ21Aに対して伸張処理を実行し、元のアプリケーションプログラム10Aを復元し、その中味について改竄を行う。
図8の上段の図は、このような改竄が行われた後のアプリケーションプログラム10X′を示す図である。§2でも述べたとおり、Android端末用のアプリケーションプログラム10の構成要素の中でも、リソースデータ12や補助ファイル14は、容易に改竄することができる。そこで、ここでも、クラッカーXが、リソースデータ12および補助ファイル14に対して改竄を施したものとしよう。図8に示すリソースデータ12Xおよび補助ファイル14Xは、クラッカーXによる改竄を受けたものである。続いて、クラッカーXは、アプリケーションプログラム10X′に対する再パッケージ化処理を行い、改竄されたアプリケーションパッケージ21X′を生成する。
もし、クラッカーXが、こうして生成したアプリケーションパッケージ21X′を、正規の配布用ファイル20A内の正規のアプリケーションパッケージ21Aとすり替えて再配布した場合、Android端末で行われる通常の改竄検知処理によって改竄の事実が検知されることは、既に§2で述べたとおりである。すなわち、Aの署名情報22Aの正当性を確認する処理で不一致が生じることになる。本発明においても、図7に示す実行プロセスにおけるステップS7の第1の確認段階において、OSプログラムによって当該改竄の検知が行われる。
そこで、ここでは、クラッカーXが署名情報に対する改竄も行った場合を考えてみる。すなわち、図8の下段に示すように、クラッカーXは、自分の第1の鍵K(x1)を用いて、署名対象データD′(すなわち、改竄されたアプリケーションパッケージ21X′)に対する署名値S(X′)を作成する処理を行い、作成された署名値S(X′)と、自分の第2の鍵K(x2)とを含むXの署名情報22X′を作成し、改竄されたアプリケーションパッケージ21X′にXの署名情報22X′を付加することにより、改竄された配布用ファイル20X′を作成する。
このように署名情報に対する改竄も行われると、クラッカーXによる再署名が行われたことになるので、Xの署名情報22X′は署名対象データD′に対する正当性を有する。したがって、従来の方法では、このようにして作成された配布用ファイル20X′については、改竄検知を行うことができない。本発明においても、図7に示す実行プロセスにおけるステップS7の第1の確認段階では、このような改竄を検知することはできない。
しかしながら、本発明に係る方法で配布される配布用ファイル20Aには、更に、秘匿情報23Aが付加されており、この秘匿情報23Aについての正当性が、ステップS9の第2の確認段階で確認される。秘匿情報23Aは、図5の下段に示すとおり、秘匿化対象データC(この例では、Aの署名情報22A)を第2の特定鍵K(s2)を用いて秘匿化することによって得られる情報であるが、第2の特定鍵K(s2)が秘密の状態で管理されていれば、クラッカーXはこれを入手することができない。したがって、クラッカーXは、自身で作成したXの署名情報22X′を秘匿化対象データC′として、第2の特定鍵K(s2)を用いた秘匿化処理を行い、改竄された秘匿情報23Xを作成することはできない。図8の下段において、×印が付された部分は、実際には、クラッカーXが行うことができない処理やクラッカーXが作成することができない情報を示している。
結局、クラッカーXは、作成した配布用ファイル20X′内の秘匿情報については、元のままの状態(秘匿情報23Aのまま)にしておくか、これを削除してしまうか、あるいは新たに作成した任意の秘匿情報に置き換えるしかない。いずれの方法を採っても、図7に示す実行プロセスにおけるステップS9の第2の確認段階において、正当性の確認ができないため、改竄の検知が行われることになる。
すなわち、元のままの状態にしておいた場合、第2の確認段階において、Xの署名情報22X′に対する秘匿情報23Aの正当性を確認する処理が行われることになるが、秘匿情報23Aは、Aの署名情報22Aに対して正当性を有する情報であるため、Xの署名情報22X′に対する正当性は確認できない。一方、秘匿情報を削除してしまった場合は、Xの署名情報22X′に対する正当性確認の対象物がないため、そもそも正当性確認の処理を行うことができない。また、新たに作成した任意の秘匿情報に置き換えた場合も、当該置換後の秘匿情報が、Xの署名情報22X′を第2の特定鍵K(s2)を用いて秘匿化することによって得られる情報(別言すれば、第1の特定鍵K(s1)を用いて正当性確認がなされる情報)に偶然一致しない限り、第2の確認段階における正当性確認はなされない。
結局、クラッカーXが、アプリケーションパッケージ10Aおよび署名情報22Aに対する改竄を行ったとしても、秘匿情報23Aに対する改竄を行うことができなければ、第2の確認段階において改竄が検知されるので、改竄されたアプリケーションプログラムの実行は中止され、改竄検知後のプロセスが正常に実行されることはない。このように、本発明に係るアプリケーションプログラムの配布実行方法によれば、電子署名に対する改竄が行われた場合にも、有効な改竄検知を行うことが可能になり、改竄検知後は、当該アプリケーションプログラムの実行を中止することが可能になる。
もちろん、本発明に係るアプリケーションプログラムの配布実行方法による改竄検知機能は、100%完全なものではない。理論的には、第1の確認段階と第2の確認段階との双方をパスするような改竄を施すことは可能である。
たとえば、サブルーチン群13Aを解析することにより、第1の特定鍵K(s1)の所在を特定することができれば、この第1の特定鍵K(s1)を別な鍵に書き替えることにより、第2の確認段階で正当性が確認されるような改竄を行うことが可能になる。また、サブルーチン群13Aを解析することにより、改竄チェックルーチンFを構成するコード群を特定することができれば、改竄チェックルーチンF自身を改竄してしまうことにより、どのような場合にも第2の確認段階では改竄検知ができないようにすることも可能である。あるいは、プログラム本体部11Aを解析することにより、改竄チェックルーチンFを呼び出すサブルーチンコール命令の所在を特定することができれば、当該サブルーチンコール命令を無意味な別な命令に書き替えてしまうことにより、改竄チェックルーチンFが実行されないようにすることも可能である。
このように、プログラム本体部11A内のプログラムやサブルーチン群13A内のプログラムの内容を逐一解析した上で、プログラム本体部11Aやサブルーチン群13Aに対して第2の確認段階を不正な方法で回避するような改竄が施された場合、本発明では改竄検知を行うことはできない(もちろん、改竄チェックルーチン以外のサブルーチンの改竄や、改竄チェックルーチンをコールする部分以外のプログラム本体部の改竄など、第2の確認段階の実行が回避されないような改竄であれば、本発明により当該改竄の検知を行うことができる。)。しかしながら、実際には、プログラム本体部11Aやサブルーチン群13Aに対する改竄を行うには、プログラムに関する高度な知識をもったクラッカーが、十分な時間と労力を費やして作業を行う必要がある。これに対して、リソースデータ12や補助ファイル14に対する改竄は、APKファイルに対する若干の知識をもったクラッカーであれば行うことができ、時間や労力も必要としない。
本発明は、このように比較的簡単に行われる可能性のある改竄に対して有効な検知方法を提供することを主目的とするものであり、実用上、改竄されたアプリケーションプログラムの多くを検知する十分な効果を奏するものである。特に、これまで述べてきた基本的実施形態では、改竄チェックルーチンFがサブルーチン群13A内の1つのサブルーチンとして、アプリケーションプログラム10A内に組み込まれているため、第2の確認段階を実施するために、別なプログラムを改めて用意する必要はない。すなわち、配布用ファイル20Aの中に、自分自身が改竄されているか否かを判定する改竄チェックルーチンFが組み込まれていることになり、これを実行するコンピュータ側には、改竄チェックのために別なアプリケーションを用意する必要はない。
一般に、改竄チェック用のアプリケーションを別途用意すると、当該アプリケーションを管理し、これを配布するための余分なコストが必要になる。そこで、これまで述べてきた基本的実施形態のように、改竄チェックルーチンFをアプリケーションプログラム10A内に組み込む方法を採用すれば、改竄チェックプログラムを別体として管理したり配布したりする必要がなくなり、アプリケーションプログラム10Aだけを管理・配布すれば足りるため、余分なコストを削減できるというメリットが得られる。また、アプリケーション実行用コンピュータ側でも、アプリケーションプログラム10Aだけを実行すれば改竄チェックが可能になる。すなわち、アプリケーションプログラムの配布、インストール、実行という一連の流れに着目した場合、従来どおりの流れを何ら阻害せずに本発明を適用して改竄検知を行うことが可能になる。
たとえば、Android端末に対して配布するアプリケーションプログラムに本発明を適用する場合、入手した配布用ファイル20A(すなわち、APKファイル)が改竄されているか否かを判定する改竄チェックルーチンFが、当該APKファイル自身に含まれているため、AndroidOSは、当該APKファイルに対して、通常どおり第1の確認段階を実行して署名情報の正当性を確認した後、当該APKファイルに含まれるアプリケーションプログラムを実行する処理を行うだけでよい。Android端末は、本発明に係るAPKファイルを、一般のAPKファイルと同等に取り扱うことができ、APKファイルの実行により第2の確認段階が行われるので、Android端末に特別な機能は要求されない。また、第2の確認段階を行う際に、外部の認証サーバへの問い合わせ処理なども不要であり、改竄チェックルーチンFは、Android端末がオフライン状態(外部に対する通信が遮断されている状態)であっても、何ら支障なくその処理機能を果たすことができる。
<<< §5.秘匿化対象データのバリエーション >>>
§3で説明した本発明の基本的な実施形態に係る配布実行方法では、図5に太線枠で囲って示すように、Aの署名情報22A全体(すなわち、署名値S(A)とAの第2の鍵K(a2))を秘匿化対象データCとして、第2の特定鍵K(s2)を用いた秘匿化処理を行い、秘匿情報23Aを作成している。このようにして作成された秘匿情報23Aは、Aの署名情報22Aの痕跡を残す情報というべきものであり、第1の特定鍵K(s2)を用いた所定の確認方法により、Aの署名情報22Aに対する正当性の確認が可能になるという固有の性質を有している。
このような性質を有する秘匿情報23Aを配布用ファイル20Aに含ませておけば、Aの署名情報22Aに対する秘匿情報23Aの正当性を確認する処理(第2の確認処理)を行うことにより、Aの署名情報22Aに対する改竄の有無を確認することができるようになる。
もっとも、本発明を実施する上で用いる秘匿化対象データCは、必ずしもAの署名情報22Aのみに限定されるものではない。ここでは、秘匿化対象データCのバリエーションをいくつか述べておく。
図9は、図5に示す本発明の基本的な実施形態に係る配布方法のバリエーションを示すブロック図である。図5に示す実施形態との相違点は、秘匿化対象データCの設定方法だけである。図5に示す例では、太線枠で囲って示すように、Aの署名情報22A全体を秘匿化対象データCに設定しているが、図9に示すバリエーションでは、太線枠で囲って示すように、Aの署名情報22Aに含まれるAの第2の鍵K(a2)を構成するデータのみを秘匿化対象データCに設定している。
したがって、図9に示すバリエーションの場合、図7のステップS3の秘匿情報作成段階において、第2の特定鍵K(s2)を用いてAの第2の鍵K(a2)を秘匿化することにより秘匿情報23A′を作成することになる。また、ステップS9の第2の確認段階において、Aの署名情報22Aに対する秘匿情報23Aの正当性を確認する代わりに、このバリエーションにおける秘匿化対象データCであるAの第2の鍵K(a2)に対する秘匿情報23A′の正当性が確認されることになる。
このように、秘匿化対象データCとして、Aの署名情報22Aの代わりにAの第2の鍵K(a2)を用いたとしても、署名情報に対する改竄が行われたか否かを検知する上では支障は生じない。そもそもAの署名情報22Aは、プログラム提供者Aがアプリケーションパッケージ21Aを署名対象データDとして、その内容を保証することを示すものであり、プログラム提供者Aの痕跡はAの第2の鍵K(a2)として記録されていることになる。そして、クラッカーXが、署名情報に対する改竄を行う場合、図8に示すように、Aの署名情報22AをそっくりXの署名情報22X′に差し替えることになるので、当然、Aの第2の鍵K(a2)もXの第2の鍵K(x2)に差し替えられることになる。
したがって、Aの第2の鍵K(a2)を秘匿化対象データCに設定し、これを秘匿化して秘匿情報23A′を作成し、第2の確認段階において、Aの第2の鍵K(a2)に対する秘匿情報23A′の正当性を確認するようにしても、署名情報に対する改竄の有無を検知することができる。Aの第2の鍵K(a2)がXの第2の鍵K(x2)に差し替えられていた場合、秘匿情報23A′は、Aの第2の鍵K(a2)を秘匿化対象データCとして作成された情報であるから、差し替えられたXの第2の鍵K(x2)に対しての正当性は確認できない。
結局、秘匿化対象データCとして、少なくともプログラム提供者Aの第2の鍵K(a2)を含むデータを用いるようにすれば、クラッカーXが、署名情報に対する改竄を行ったとしても、第2の確認段階において、これを検知することができる。クラッカーXは、第2の特定鍵K(s2)を入手しない限り、改竄チェックルーチンF(第1の特定鍵K(s1)によって正当性の確認を行うルーチン)によって正当性の確認が可能な秘匿情報23Xを作成することはできないので、Aの署名情報22AをそっくりXの署名情報22X′に差し替えたとしても、第2の確認段階における改竄検知を免れることはできない。
このように、図5に示す例のように、Aの署名情報22Aを秘匿化対象データCとして設定することもできるし、図9に示すバリエーションのように、Aの第2の鍵K(a2)を秘匿化対象データCとして設定することもできるし、その他にも種々のバリエーションを採用することができる。
図10は、別なバリエーションを示すブロック図である。このバリエーションでは、太線枠で囲って示すように、アプリケーションパッケージ21AとAの署名情報22Aとの双方を構成するデータ全体を秘匿化対象データCに設定している。したがって、このバリエーションの場合、第2の特定鍵K(s2)を用いて、図に太線枠で囲った部分のデータ全体を秘匿化することにより秘匿情報23A''を作成することになる。そして第2の確認段階では、この太線枠で囲った部分のデータ全体に対する秘匿情報23A''の正当性が確認されることになる。
この図10に示すバリエーションでも、秘匿化対象データCにAの第2の鍵K(a2)が含まれているため、クラッカーXがAの署名情報22AをXの署名情報22X′に差し替える改竄を行っても、第2の確認段階による改竄検知が有効に機能することになる。
結局、プログラム提供者Aが署名した痕跡を何らかの形で配布用ファイル20Aに残しておくには、図7のステップS3の秘匿情報作成段階において、アプリケーションパッケージ21Aおよび署名情報22Aを構成するデータの中から、プログラム提供者の第2の鍵K(a2)を含む所定部分を秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報を作成するようにすればよい。
図5に示す例は、署名情報22Aを構成するデータ全体を秘匿化対象データCに設定して秘匿情報23Aを作成した例であり、図9に示す例は、署名情報22Aに含まれるプログラム提供者の第2の鍵K(a2)を構成するデータを秘匿化対象データCに設定して秘匿情報23A′を作成した例であり、図10に示す例は、アプリケーションパッケージ21Aと署名情報22Aとの双方を構成するデータ全体を秘匿化対象データCに設定して秘匿情報23A''を作成した例ということになる。
プログラム提供者Aが署名した痕跡を残しておく、という目的を達成する上では、図9に示す例のように、プログラム提供者の第2の鍵K(a2)のみを秘匿化対象データCとする方法が最も簡便で直接的な方法である。このような観点からは、図5に示す例や図10に示す例は、冗長な方法と言うことができる。しかしながら、プログラム提供者Aが署名した痕跡に加えて、アプリケーションパッケージ21Aに関する何らかの痕跡も残しておく、という観点では、図5に示す例や図10に示す例は意味のある方法になる。
たとえば、図10に示す例では、太線枠で囲ったアプリケーションパッケージ21Aと署名情報22Aとの双方が秘匿化対象データCに設定されており、第2の確認段階では、これらのデータ全体に対する秘匿情報23A''の正当性の確認が行われることになるので、アプリケーションパッケージ21Aに対する改竄検知と署名情報22Aに対する改竄検知との両方を行うことが可能である。
図5に示す基本的な実施形態では、アプリケーションパッケージ21Aに対する改竄検知は、Aの署名情報22Aを用いた第1の確認段階で行い、署名情報22Aに対する改竄検知は、秘匿情報23Aを用いた第2の確認段階で行うことになるが、図10に示すバリエーションの場合、アプリケーションパッケージ21Aに対する改竄検知は、Aの署名情報22Aを用いた第1の確認段階で行われるとともに、秘匿情報23A''を用いた第2の確認段階でも重ねて行われることになる。
これまで述べてきた実施形態では、第2の確認段階の処理を、署名情報の改竄検知を行うための処理として捉えてきたが、第2の確認段階の処理は、上述したとおり、アプリケーションパッケージ21Aに対する改竄検知にも利用することが可能である。
したがって、第2の確認段階の処理を、署名情報の改竄検知ではなく、アプリケーションパッケージ21Aに対する改竄検知のみに利用するのであれば、秘匿化対象データCには、必ずしもプログラム提供者Aの第2の鍵K(a2)が含まれている必要はない。たとえば、アプリケーションパッケージ21Aの部分のみを秘匿化対象データCに設定して、秘匿情報23A'''を作成した場合、第2の確認段階では、Aの署名情報22Aに対する改竄検知を行うことはできないが、アプリケーションパッケージ21Aに対する改竄検知を行うことは可能である。
結局、本発明の基本的な技術思想は、アプリケーションプログラムの改竄を検知する方法として捉えることが可能である。この改竄検知方法は、コンピュータが、アプリケーションプログラム10A(これまで述べてきた実施形態の場合は、パッケージ化された状態のアプリケーションパッケージ21A)と、署名情報22Aと、秘匿情報23A(上述した各バリエーションの場合は、23A′,23A'',23A''')とを含むデータファイルを入力する入力段階と、コンピュータが、当該アプリケーションプログラム10Aが改竄されているか否かを判定する判定段階と、を有する。
ここで、署名情報22Aは、アプリケーションプログラム10A(もしくは、アプリケーションパッケージ21A)を署名対象データDとする電子署名処理によって得られた情報であり、秘匿情報23A(もしくは、23A′,23A'',23A''')は、当該アプリケーションプログラム10A(もしくは、アプリケーションパッケージ21A)および署名情報22Aを構成するデータの中の所定部分を秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対する秘匿化処理を施して得られた情報ということになる。
そして、判定段階は、署名情報22Aに基づいて改竄の有無を確認する第1の確認段階と、秘匿情報23A(もしくは、23A′,23A'',23A''')に基づいて改竄の有無を確認する第2の確認段階と、を有しており、アプリケーションプログラム10Aには、秘匿化処理で行われた処理プロセスを勘案して秘匿化対象データCに対する秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、この改竄チェックルーチンを実行することにより第2の確認段階が行われることになる。
これまで述べてきた実施例は、このような改竄検知方法をアプリケーションプログラムの配布実行方法に組み込んだものであり、プログラム提供者の第2の鍵K(a2)を含む所定部分を秘匿化対象データCとして用い、OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータによって、第1の確認段階をOSプログラムに基づいて実行し、第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行するようにした例ということになる。
<<< §6.秘匿化処理の具体的な実施形態 >>>
ここでは、本発明における秘匿情報作成段階(図7のステップS3)で行われる秘匿化処理の具体的な実施形態を述べる。図5に示すように、本発明における秘匿情報作成段階では、秘匿化対象データCに対して、第2の特定鍵K(s2)を用いた秘匿化処理が行われ、秘匿情報23Aが作成される。ここで、秘匿情報23Aは、秘匿化対象データCおよび第2の特定鍵K(s2)が与えられれば一義的に定まる何らかのデータであり、改竄チェックルーチンによって実行される第1の特定鍵K(s1)を用いた所定のチェック処理によって、秘匿化対象データCに対する秘匿情報23Aの正当性が確認されることになる。
秘匿化対象データCを秘匿化して秘匿情報23Aを作成するには、第2の特定鍵K(s2)が必要である。したがって、第2の特定鍵K(s2)を秘密に管理していれば、クラッカーXは秘匿情報23Aを生成することができない。また、秘匿情報23Aは、文字通り「元の秘匿化対象データCを秘匿化」した情報になっており、秘匿情報23Aだけを用いて、元の秘匿化対象データCを復元することはできない。以下、このような性質を有する秘匿情報23Aを作成するための具体的な秘匿化処理の方法を述べる。
なお、以下の説明は、§3で述べた基本的な実施形態と同様に、Aの署名情報22Aを秘匿化対象データCに設定した例(図5の例)についてのものであるが、もちろん、以下に述べる秘匿化処理の具体的な処理方法は、§5で述べたように、秘匿化対象データCについて様々な設定を行うバリエーション(たとえば、図9や図10の例)についても有効である。
<6−1:暗号化処理>
本発明における秘匿化処理に適した第1の処理は、暗号化処理である。秘匿化処理として暗号化処理を利用する場合、秘匿化対象データCと秘匿情報23Aとの関係は、前者を暗号化することにより後者が得られ、後者を復号することにより前者が得られる、という関係になる。
このような暗号化および復号を行うには、公開鍵暗号方式を利用するのが好ましい。公開鍵暗号方式では、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵が用いられる。したがって、秘匿情報23Aは、秘匿化対象データCを一方の鍵を用いて暗号化することにより得られることになり、改竄チェックルーチンFは、この秘匿情報23Aを他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイル20Aから抽出した秘匿化対象データCとが一致していた場合に改竄なしとの確認を行うことになる。
図11は、図5に示す配布方法における秘匿情報23Aとして、暗号化された情報を用いる具体的実施例を示すブロック図である。この実施例では、プログラム提供者Aが配布用ファイル20Aを配布する際に、プログラム保証者Gの助力を受けることになる。プログラム保証者Gは、公的機関であってもよいし、民間企業であってもよいが、社会的に信用があり、安全に鍵を管理する能力をもった団体がその役割を担うようにするのが好ましい。
上述したとおり、秘匿化処理として、公開鍵暗号方式を利用した暗号化処理を採用する場合、図5に示す第1の特定鍵K(s1)および第2の特定鍵K(s2)として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用いることになる。図11に示す例は、プログラム保証者Gの第1の鍵K(g1)を第1の特定鍵K(s1)として用い、プログラム保証者Gの第2の鍵K(g2)を第2の特定鍵K(s2)として用いた例である。より具体的には、第1の鍵K(g1)としては、プログラム保証者Gの公開鍵を用い、第2の鍵K(g2)としては、プログラム保証者Gの秘密鍵を用いればよい。もっとも、公開鍵と秘密鍵とを入れ替えて用いても、本発明を実施することは可能である。
プログラム保証者Gは、予め、自分の第1の鍵K(g1)を内蔵した改竄チェックルーチンFを作成しておき、この改竄チェックルーチンFと、自分の第2の鍵K(g2)とを記録した媒体を、プログラム提供者Aに貸し与えればよい。そうすれば、プログラム提供者Aは、この媒体を利用して、配布用ファイル20Aを作成することができる。したがって、ここに示す実施形態では、Aの署名情報22Aは、プログラム提供者Aが、自分自身の鍵を用いてアプリケーションパッケージ21Aの内容を保証するために付加する情報としての役割を果たし、秘匿情報23Aは、プログラム保証者Gが、自分自身の鍵を用いてAの署名情報22Aの内容を保証するために付加する情報としての役割を果たすことになる。
プログラム提供者Aは、まず、従来と同様の方法で、図1の上段に示すようなアプリケーションプログラム10を作成する。続いて、プログラム保証者Gから借り受けた媒体から、改竄チェックルーチンFを読み出し、これをサブルーチン群13に付加することにより、図11の上段に示すようなサブルーチン群13Aを作成する。また、プログラム本体部11に、改竄チェックルーチンFを呼び出すためのサブルーチンコール命令と、この改竄チェックルーチンFから返された実行結果に基づいて、プログラムの実行を続行するか中止する処理プログラム(「改竄なし」の実行結果が返された場合には、プログラムの実行を続行し、「改竄あり」の実行結果が返された場合には、プログラムの実行を中止するプログラム)とを追加することにより、プログラム本体部11Aを作成する。
このようなプロセスを経れば、図11の上段に示すようなアプリケーションプログラム10Aを作成できる。このアプリケーションプログラム10Aには、プログラム保証者Gの第1の鍵K(g1)を含む改竄チェックルーチンFが組み込まれていることになる。こうしてアプリケーションプログラム10Aが用意できたら、これを従来の方法と同様にパッケージ化し(APKファイル作成用の専用プログラムを用いればよい)、アプリケーションパッケージ21Aを作成する(図7のステップS1のパッケージ化段階)。次に、プログラム提供者Aは、このアプリケーションパッケージ21Aを署名対象データDとして、自分の第1の鍵K(a1)を用いた電子署名処理を行い、Aの署名情報22Aを作成する(図7のステップS2の署名情報作成段階)。
続いて、今度は、プログラム保証者Gから借り受けた媒体から、Gの第2の鍵K(g2)を読み出し、Aの署名情報22Aを秘匿化対象データCとして、Gの第2の鍵K(g2)を用いた秘匿化処理を行い、秘匿情報23Aを作成する(図7のステップS3の秘匿情報作成段階)。この図11に示す実施例の場合、秘匿化処理として暗号化処理を採用しているため、秘匿情報作成段階では、第2の特定鍵(すなわち、プログラム保証者Gの第2の鍵K(g2))を用いて、秘匿化対象データCに対する暗号化処理を施して秘匿情報23Aが作成される。
最後に、アプリケーションパッケージ21A、Aの署名情報22A、秘匿情報23Aをまとめれば、配布用ファイル20A(APKファイル)を作成することができる(図7のステップS4の配布用ファイル作成段階)。そこで、これをWebサーバや物理的媒体に出力して(図7のステップS5のファイル出力段階)、任意の方法で配布すればよい。
一方、アプリケーション実行用コンピュータ(Android端末)は、このような方法で作成された配布用ファイル20A(APKファイル)を入手し(図7のステップS6のファイル入力段階)、これを実行することになるが、まず、OSプログラムの機能により署名情報22Aの正当性が確認され(図7のステップS7の第1の確認段階)、続いて、当該配布用ファイル20Aに組み込まれている改竄チェックルーチンFの機能により秘匿情報23Aの正当性が確認される(図7のステップS9の第2の確認段階)。
図12は、図11に示す配布用ファイル20Aについて、署名情報22Aの正当性および秘匿情報23Aの正当性を確認する処理を示すブロック図である。
まず、署名情報22Aの正当性の確認(第1の確認段階)は、既に述べたように、次のようにして行われる。はじめに、署名情報22Aから署名値S(A)およびAの第2の鍵K(a2)を抽出し、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことにより、ハッシュ値H1を得る。次に、アプリケーションパッケージ21A(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行い、ハッシュ値H2を求める処理を行う。そして、ハッシュ値H1とハッシュ値H2とが一致するか否かを確認する処理を行えば、第1の確認段階は終了する。
一方、秘匿情報23Aの正当性の確認(第2の確認段階)は、公開鍵暗号方式の基本原理を利用することによって行われる。すなわち、ここに示す実施例では、プログラム保証者Gの第1の鍵K(g1)と第2の鍵K(g2)とは、公開鍵暗号方式における一対の鍵を構成しており、第2の鍵K(g2)を用いて暗号化したデータは、第1の鍵K(g1)を用いて復号することができる。そこで、改竄チェックルーチンFは、次のような方法で第2の確認段階の処理を実行する。
はじめに、図12に示すように、改竄チェックルーチンFに内蔵されているプログラム保証者Gの第1の鍵K(g1)を用いて、入力した配布用ファイル20Aから抽出した秘匿情報23Aを復号し、元の秘匿化対象データCを得る。続いて、この復号によって得られた秘匿化対象データCと、入力した配布用ファイル20Aから抽出した秘匿化対象データC(この例の場合は、Aの署名情報22A)とが一致していた場合に、秘匿情報23Aが正当である旨の確認を行えばよい。
結局、ここで述べた方法は、秘匿化対象データCを暗号化という手法で秘匿化して、秘匿情報23Aという形で配布用ファイル20Aに付加して配布し、アプリケーション実行用コンピュータ(Android端末)では、秘匿情報23Aを復号した結果が秘匿化対象データCに一致することを確認することにより、改竄の有無を検知する方法ということができる。クラッカーXは、暗号化に用いられたプログラム保証者Gの第2の鍵K(g2)を入手することができないため、秘匿情報23Aの改竄を行うことはできない。
<6−2:ダイジェスト化処理>
本発明における秘匿化処理に適した第2の処理は、ダイジェスト化処理である。秘匿化処理としてダイジェスト化処理を利用する場合、秘匿化対象データCと秘匿情報23Aとの関係は、前者をダイジェスト化することにより後者が得られる、という関係になる。
ここで、ダイジェスト化とは、元の情報から情報量を減らす演算処理を行って、元の情報に基づいて一義的に決定できる別な情報を得る処理である。具体的には、元の情報を構成するデータに対して、何らかの一方向性関数を作用させる処理を行えばよい。この場合、秘匿情報23Aは、秘匿化対象データCに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して得られることになり、改竄チェックルーチンFは、入力段階で入力したデータファイル20Aから抽出した秘匿化対象データCに対して、上記特定鍵と同一の鍵を用いた上記ダイジェスト化処理と同一の処理を施して得られる情報が、入力段階で入力したデータファイル20Aに含まれている秘匿情報20Aと一致していた場合に改竄なしとの確認を行うことになる。
図13は、図5に示す配布方法における秘匿情報23Aとして、ダイジェスト化された情報を用いる具体的実施例を示すブロック図である。この実施例でも、プログラム提供者Aが配布用ファイル20Aを配布する際に、プログラム保証者Gの助力を受けることになる。ただ、第1の特定鍵K(s1)および第2の特定鍵K(s2)としては、同一の共通特定鍵K(s0)を用いる。
プログラム保証者Gは、予め、自己が秘密状態で管理している共通特定鍵K(s0)を内蔵した改竄チェックルーチンFを作成しておき、この改竄チェックルーチンFと、当該共通特定鍵K(s0)とを記録した媒体を、プログラム提供者Aに貸し与えればよい。そうすれば、プログラム提供者Aは、この媒体を利用して、配布用ファイル20Aを作成することができる。
具体的には、プログラム提供者Aは、上述した暗号化処理を採用する実施例と同様に、プログラム保証者Gから借り受けた媒体を利用して、図13の上段に示すようなアプリケーションプログラム10Aを作成する。このアプリケーションプログラム10Aには、プログラム保証者Gの共通特定鍵K(s0)を含む改竄チェックルーチンFが組み込まれていることになる。
こうしてアプリケーションプログラム10Aが用意できたら、これをパッケージ化し、アプリケーションパッケージ21Aを作成する。そして、プログラム提供者Aは、このアプリケーションパッケージ21Aを署名対象データDとして、自分の第1の鍵K(a1)を用いた電子署名処理を行い、Aの署名情報22Aを作成する。
続いて、プログラム保証者Gから借り受けた媒体から、共通特定鍵K(s0)を読み出し、Aの署名情報22Aを秘匿化対象データCとして、共通特定鍵K(s0)を用いた秘匿化処理を行い、秘匿情報23Aを作成する。この図13に示す実施例の場合、秘匿化処理としてダイジェスト化処理を採用しているため、秘匿情報作成段階では、共通特定鍵K(s0)を用いて、秘匿化対象データCに対するダイジェスト化処理を施して秘匿情報23Aが作成される。
ダイジェスト化処理は、前述したように、秘匿化対象データCに対して、共通特定鍵K(s0)をパラメータとして用いた一方向性関数を作用させる処理である。具体的には、共通特定鍵K(s0)をパラメータとして用いたハッシュ関数を作用させる処理を行い、得られるハッシュ値を秘匿情報23Aとすればよい。
最後に、アプリケーションパッケージ21A、Aの署名情報22A、秘匿情報23Aをまとめて配布用ファイル20A(APKファイル)を作成し、これを配布すればよい。
一方、アプリケーション実行用コンピュータ(Android端末)は、このような方法で作成された配布用ファイル20A(APKファイル)について、図14のブロック図に示す方法を行い、署名情報22Aの正当性および秘匿情報23Aの正当性を確認する処理を行う。
ここで、署名情報22Aの正当性の確認(第1の確認段階)は、これまで述べてきた実施例と全く同様である。すなわち、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことによりハッシュ値H1を得る処理を行うとともに、アプリケーションパッケージ21A(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行ってハッシュ値H2を得る処理を行い、ハッシュ値H1とハッシュ値H2とが一致するか否かを確認する処理を行うことになる。
一方、秘匿情報23Aの正当性の確認(第2の確認段階)は、プログラム提供者Aが秘匿情報23Aを作成する際に行った処理と全く同じ処理を実行し、同じ結果が得られるか否かを確認することによって行われる。
具体的には、まず、入力した配布用ファイル20Aから秘匿化対象データC(この例の場合、Aの署名情報22A)および改竄チェックルーチンFに内蔵されている共通特定鍵K(s0)を抽出する。そして、抽出した秘匿化対象データCに対して、抽出した共通特定鍵K(s0)を用いたダイジェスト化処理(配布プロセスの秘匿情報作成段階で行われた処理と同一の処理)を実行する。すなわち、配布プロセスで行ったように、共通特定鍵K(s0)をパラメータとして用いたハッシュ関数を作用させる処理を行い、ハッシュ値を得るようにすればよい。このダイジェスト化処理によって得られたハッシュ値が、入力した配布用ファイル20Aに含まれている秘匿情報23Aと一致していた場合に、当該秘匿情報23Aが正当である旨の確認を行うことになる。
結局、ここで述べた方法は、秘匿化対象データCをダイジェスト化という手法で秘匿化して、秘匿情報23Aという形で配布用ファイル20Aに付加して配布し、アプリケーション実行用コンピュータ(Android端末)では、同じ手法で秘匿化対象データCをダイジェスト化して、付加されていた秘匿情報23Aに一致することを確認することにより、改竄の有無を検知する方法ということができる。クラッカーXは、ダイジェスト化に用いられたプログラム保証者Gの共通特定鍵K(s0)を入手することができないため、秘匿情報23Aの改竄を行うことはできない。
秘匿化処理として暗号化を採用した場合、得られる秘匿情報には、復号によって元の秘匿化対象データCを復元するために必要な情報がそのまま含まれている。したがって、元の秘匿化対象データCの情報量が多ければ、得られる秘匿情報の情報量も多くなる。このため、たとえば、図10に示す例のように、アプリケーションパッケージ21AおよびAの署名情報22Aをそっくり含むデータを秘匿化対象データCとして用いる場合は、得られる秘匿情報23A''のデータ容量はかなり大きくなり、配布用ファイル20A''の肥大化を招くことになる。
これに対して、秘匿化処理としてダイジェスト化を採用した場合、得られる秘匿情報から元の秘匿化対象データCを復元する必要はないため、秘匿情報の情報量を大幅に削減することが可能である。このため、たとえば、図10に示す例のように、かなり大きなデータ容量をもつ秘匿化対象データCを設定した場合でも、ダイジェスト化を採用すれば、得られる秘匿情報23A''のデータ容量を低く抑えることができ、配布用ファイル20A''の肥大化を防ぐことができる。
<6−3:その他の秘匿化処理>
以上、本発明における秘匿化処理の具体的な実施形態として、暗号化処理とダイジェスト化処理を例示したが、本発明を実施するにあたり、秘匿化処理の具体的な形態は、これら2つの処理に限定されるものではない。
本発明における秘匿化処理は、互いに特別な関係をもった第1の特定鍵K(s1)と第2の特定鍵K(s2)とを用いることを前提とした処理であり、第2の特定鍵K(s2)を用いた何らかの演算処理によって、元の秘匿化対象データCに対して一義的に秘匿情報23Aを決定することができ、しかも第1の特定鍵K(s1)を用いることによって、秘匿化対象データCに対する秘匿情報23Aの正当性が確認できる(すなわち、改竄を受けていないことを確認できる)、という条件を満たす処理であれば、どのような処理を秘匿化処理として採用してもかまわない。
前述した暗号化処理では、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、「公開鍵暗号方式に用いる一対の鍵」という互いに特別な関係をもった鍵がが採用されることになる。また、前述したダイジェスト化処理では、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、「同一の共通特定鍵K(s0)である」という互いに特別な関係をもった鍵が採用されることになる。
<<< §7.配布用ファイル作成装置 >>>
次に、本発明に係る配布用ファイル作成装置の基本構成および動作を、図15に示す実施形態に基づいて説明する。図15にブロック図を示す装置は、アプリケーションプログラムの配布用ファイルを作成する装置であり、図7に示す配布プロセス(ステップS1〜S5)を実行する機能を有する。ここでは、プログラム提供者Aが、この装置を用いて、Android端末に配布するための配布用ファイル(APKファイル)を作成する場合を例にとって、装置の構成および動作を説明する。
図15のブロック図において、矩形のブロックは、この配布用ファイル作成装置の基本構成要素を示し、楕円のブロックは、これらの基本構成要素によって取り扱われる情報(プログラム、データ、ファイル)を示している。なお、楕円のブロックで示す個々の情報については、これまでの説明で用いてきた符号と同一の符号を付してある。
図示のとおり、この作成装置は、3つの格納ユニット110,120,130を有している。アプリケーションプログラム格納ユニット110は、配布対象となるアプリケーションプログラム10を格納するためのユニットである。ここで言う配布対象となるアプリケーションプログラム10とは、図1の上段に示す形態のものに対応し、パッケージ化や本発明に特有の処理を行う前の状態のアプリケーションプログラムを指している。
既に述べたとおり、Android仕様によると、このアプリケーションプログラム10は、プログラム本体部11と、画像および文字列を含むリソースデータ12と、プログラム本体部11から呼び出されるサブルーチン群13と、XML形式のデータからなる補助ファイル(マニフェストファイル)14と、を含んでいる。
一方、改竄チェックルーチン格納ユニット120は、第1の特定鍵K(s1)を内蔵した改竄チェックルーチンFを格納したユニットであり、鍵格納ユニット130は、第2の特定鍵K(s2)、プログラム提供者Aの第1の鍵K(a1)、プログラム提供者Aの第2の鍵K(a2)を格納したユニットである。もちろん、本願における「鍵」とは、特定の者によって管理される特定の文字やコードの配列からなるデータであり、鍵格納ユニット130は、そのようなデータを記録する機能をもった構成要素であれば、どのような形態のものでもかまわない。
ここで、プログラム提供者Aの第1の鍵K(a1)および第2の鍵K(a2)は、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵であり、より具体的には、プログラム提供者A自身の公開鍵および秘密鍵(公開鍵暗号方式に用いる一対の鍵)である。これに対して、第1の特定鍵K(s1)および第2の特定鍵K(s2)は、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対もしくは同一の鍵であり、プログラム提供者A自身が管理する鍵でもよいが、§6で述べたように、プログラム保証者Gが介在する実施形態を採用する場合は、当該プログラム保証者Gが管理する鍵ということになる。
改竄チェックルーチン付加ユニット140は、アプリケーションプログラム格納ユニット110に格納されているアプリケーションプログラム10に改竄チェックルーチン格納ユニット120に格納されている改竄チェックルーチンFを付加する処理を行うユニットである。すなわち、図1の上段に示すアプリケーションプログラム10内のサブルーチン群13に、改竄チェックルーチンFを付加して、図5の上段に示すサブルーチン群13Aを作成する処理を実行する。
一方、プログラム提供者Aは、アプリケーションプログラム10に、この改竄チェックルーチンFを呼び出すためのサブルーチンコール命令と、この改竄チェックルーチンFから返された実行結果に基づいて、プログラムの実行を続行するか中止する続行中止処理プログラムとを追加することにより、図5の上段に示すプログラム本体部11Aを作成する。
なお、アプリケーションプログラム10をアプリケーションプログラム10Aに変更する処理は、プログラム提供者Aによる手作業ではなく、改竄チェックルーチン付加ユニット140による自動作業によって行うようにしてもよい。具体的には、改竄チェックルーチン付加ユニット140内に、予め、上述したサブルーチンコール命令および続行中止処理プログラムを用意しておけば、これらをアプリケーションプログラム10の所定箇所(たとえば、プログラムの先頭や、Android仕様によって必須の初期設定処理が終了した直後など)に自動的に挿入する機能を、ユニット140自身にもたせることができる。そうすれば、アプリケーションプログラム10をアプリケーションプログラム10Aに変更する処理は、すべて改竄チェックルーチン付加ユニット140による自動作業によって行うことができるようになる。
もちろん、アプリケーションプログラム格納ユニット110内に、プログラム本体部11A(上述したサブルーチンコール命令および続行中止処理プログラムが組み込まれたプログラム)を含むアプリケーションプログラムを用意しておくようにすれば、改竄チェックルーチン付加ユニット140は、サブルーチン群13に、改竄チェックルーチンFを付加してサブルーチン群13Aを作成する処理を行うだけでよい。
パッケージ化処理ユニット150は、改竄チェックルーチンFが付加されたアプリケーションプログラム10Aに対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージ21Aを作成する処理を行う。Android仕様によれば、ZIP方式の圧縮処理を含むパッケージ化処理が実行されることになる。
署名情報作成ユニット160は、こうして作成されたアプリケーションパッケージ21Aを署名対象データとして、プログラム提供者Aの第1の鍵K(a1)を用いた暗号化を利用した電子署名処理を行って署名値S(A)を生成し、この署名値S(A)とプログラム提供者の第2の鍵K(a2)とを含むAの署名情報22Aを作成する。
一方、秘匿情報作成ユニット170は、アプリケーションパッケージ21Aおよび署名情報22Aを構成するデータの中から、プログラム提供者Aの第2の鍵を含む所定部分を秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報23Aを作成する。
図5に示す実施形態の場合、Aの署名情報22Aを秘匿化対象データCとして設定しているため、図15に示すように、秘匿情報作成ユニット170は、署名情報作成ユニット160が作成した署名情報22Aを構成するデータ全体を秘匿化対象データCとして、秘匿情報23Aを作成する処理を行うことになる。もちろん、図9に示すバリエーションを採用する場合は、秘匿情報作成ユニット170は、署名情報22Aに含まれるプログラム提供者Aの第2の鍵K(a2)を構成するデータ部分だけを秘匿化対象データCとして用いることになり、図10に示すバリエーションを採用する場合は、秘匿情報作成ユニット170は、アプリケーションパッケージ21Aと署名情報22Aとの双方を構成するデータ全体を秘匿化対象データCとして用いることになる。
配布用ファイル作成ユニット180は、アプリケーションパッケージ21Aと、署名情報22Aと、秘匿情報23Aと、をまとめることにより、図5の下段に示すような配布用ファイル20Aを作成する処理を行う。Android仕様に基づくのであれば、APK形式のフォーマットをもった配布用ファイルを作成する処理が行われることになる。前述したとおり、ZIP方式の圧縮フォーマットを採用したAPKファイルには、任意のコメント文が記載可能なコメント領域が設けられているので、秘匿情報23Aを、このコメント領域に記録するようにすれば、配布用ファイル20Aは、Android仕様に合致したAPKファイルとしての条件を満たすことになる。この配布用ファイル20Aは、デジタルデータとしてデータ記録媒体に格納した状態で配布することもできるし、インターネットなどのネットワークを介してデジタルデータの形のまま配布することもできる。
こうして配布された配布用ファイル(APKファイル)20Aには、自分自身が改竄されているか否かを、付加された秘匿情報23Aを利用して判定する改竄チェックルーチンFが含まれており、アプリケーション実行用コンピュータにおいて、この改竄チェックルーチンFを実行することにより改竄検知を行うことができる。
既に述べたとおり、改竄チェックルーチンFは、配布用ファイル20Aから秘匿化対象データCおよび秘匿情報23Aを抽出し、秘匿化対象データCに対する秘匿情報23Aの正当性を、内蔵している第1の特定鍵K(s1)を用いて確認し、正当性が確認できない場合には、アプリケーションプログラムが改竄された旨の判定を行う機能を有している。そして、アプリケーションプログラムが改竄された旨の判定が行われた場合には、当該アプリケーションプログラムの以後の処理の実行を中止させる処理を行う機能も有している。
秘匿情報作成ユニット170が秘匿情報23Aを作成する際に行う秘匿化処理の具体的な方法としては、§6−1で述べた暗号化処理や、§6−2で述べたダイジェスト化処理を採用すればよい。
暗号化処理を採用する場合は、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵(公開鍵暗号方式に用いる一対の鍵)を用意し、秘匿情報作成ユニット170が、第2の特定鍵K(s2)を用いて、秘匿化対象データCに対する暗号化処理を施して秘匿情報23Aを作成すればよい。
プログラム保証者Gを介在させる実施形態の場合、第1の特定鍵K(s1)としてプログラム保証者Gの第1の鍵K(g1)(たとえば、公開鍵)を用い、第2の特定鍵K(s2)としてプログラム保証者Gの第2の鍵K(g2)(たとえば、秘密鍵)を用い、Gの第2の鍵K(g2)を用いて暗号化したデータを、Gの第1の鍵K(g1)を用いて復号できるようにしておけばよい。秘匿情報作成ユニット170は、Gの第2の鍵K(s2)を用いて、秘匿化対象データCに対する暗号化処理を施して秘匿情報23Aを作成することになる。
一方、改竄チェックルーチン格納ユニット120には、第1の特定鍵K(s1)(すなわち、プログラム保証者Gの第1の鍵K(g1))を用いて秘匿情報23Aを復号し、この復号によって得られた秘匿化対象データCと、配布用ファイル20Aから抽出した秘匿化対象データCとが一致していた場合に、秘匿情報23Aが正当である旨の確認を行う機能をもった改竄チェックルーチンFを用意しておけばよい。
これに対して、ダイジェスト化処理を採用する場合は、第1の特定鍵K(s1)および第2の特定鍵K(s2)として同一の共通特定鍵K(s0)を用いるようにし、秘匿情報作成ユニット170が、秘匿化対象データCに対して、共通特定鍵K(s0)をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して秘匿情報23Aを作成すればよい。具体的には、共通特定鍵K(s0)をパラメータとして用いたハッシュ関数を作用させるダイジェスト化処理を施して得られるハッシュ値を秘匿情報23Aとすればよい。
この場合、改竄チェックルーチン格納ユニット120には、配布用ファイル20Aから秘匿化対象データCおよび共通特定鍵K(s0)を抽出し、抽出した秘匿化対象データCに対して、抽出した共通特定鍵K(s0)を用いたダイジェスト化処理(秘匿情報作成ユニット170で実行されたダイジェスト化処理と全く同じ処理)を施して得られる情報が、配布用ファイル20Aに含まれている秘匿情報23Aと一致していた場合に、当該秘匿情報23Aが正当である旨の確認を行う機能をもった改竄チェックルーチンFを用意しておけばよい。
なお、図15に示す配布用ファイル作成装置は、実際には、汎用のコンピュータに専用のプログラムやデータを組み込むことによって構成されるものである。この場合、図15に矩形ブロックで示す各構成要素は、必ずしも1台の同一コンピュータによって構成する必要はなく、各構成要素を、互いにネットワークで接続可能な複数台のコンピュータに分散して配置するようにしてもかまわない。
<<< §8.その他の変形例 >>>
最後に、これまで述べてきた種々の実施形態について適用可能な変形例をいくつか述べておく。
<8−1:改竄検知時の中止処理>
図5に示す基本的な実施形態の場合、アプリケーションプログラム10Aには、プログラム本体部11Aと、このプログラム本体部11Aから呼び出されるサブルーチン群13Aと、が含まれており、サブルーチン群13Aには、改竄チェックルーチンFが含まれている。
ここで、この改竄チェックルーチンFは、プログラム本体部11Aから呼び出されたときに、秘匿化対象データCに対する秘匿情報23Aの正当性を確認する第2の確認段階を実行して、その実行結果をサブルーチンの実行結果としてプログラム本体部11Aへ返す機能を有している。
一方、プログラム本体部11Aには、改竄チェックルーチンFをコールするサブルーチンコール命令と、改竄チェックルーチンFから返された実行結果に応じて、以後の処理の続行もしくは中止を行う続行中止プログラムと、が組み込まれている。この続行中止プログラムは、改竄チェックルーチンFから返された実行結果が肯定的な結果であった場合には以後の命令群を引き続き実行し、否定的な結果であった場合には以後の命令群の実行を中止する。
このように、これまで述べた実施形態では、改竄チェックルーチンFは、あくまでも秘匿情報23Aの正当性を確認する第2の確認段階を実行し、その結果をプログラム本体部11Aに報告する機能しか有していなかった。別言すれば、第2の確認段階において改竄が検知された場合、改竄チェックルーチンFは、否定的な実行結果をプログラム本体部11Aに返す処理を行い、プログラム本体部11A内の続行中止プログラムによって、以後の命令群の実行が中止されることになる。すなわち、アプリケーションプログラムの中止処理は、あくまでもプログラム本体部11Aの機能として実行されることになる(具体的には、プログラム本体部11A内のプログラムによって、アプリケーションを終了する処理が行われ、制御がOSプログラムに返されることになる)。
一般に、サブルーチン群13Aを構成するサブルーチンプログラムは、プログラム本体部11Aから呼び出されて実行される性質のプログラムであり、サブルーチンの実行が完了すれば、元のプログラム本体部11A内の命令群が引き続き実行されることになる。したがって、通常は、プログラム本体部11Aからサブルーチンが呼び出されると、CPUの実行対象コードは、一旦、サブルーチン内のコードに移り、サブルーチンが終了した時点で、再びプログラム本体部11A内のコードに戻ることになる。これまで述べた実施形態は、このような一般原則に基づいた処理であり、改竄チェックルーチンFによって改竄が検知された場合も、プログラム本体部11Aによって、アプリケーションを終了する処理が行われることになる。
ただ、改竄が検知された場合のアプリケーション終了処理は、必ずしもプログラム本体部11Aによって行う必要はなく、改竄チェックルーチンFによって行ってもかまわない。上述したように、一般原則に従えば、サブルーチンの処理が終了した場合には、当該サブルーチンを呼び出したプログラム本体部11Aに制御を戻すべきであるが、改竄チェックルーチンFによって改竄が検知された場合は、いずれにしても当該アプリケーションを終了する必要があるので、制御をプログラム本体部11Aに戻すことなしに、改竄チェックルーチンF自身によって当該アプリケーションを終了する処理を行う運用を採ってもかまわない。
このような運用を採る場合、プログラム本体部11Aには、改竄チェックルーチンFをコールするサブルーチンコール命令と、この改竄チェックルーチンFから肯定的な結果が返された場合に、以後の命令群を引き続き実行するプログラムを組み込んでおき、改竄チェックルーチンFには、第2の確認段階の実行結果が肯定的な結果であった場合には、当該結果をサブルーチンの実行結果としてプログラム本体部11Aに返す機能と、第2の確認段階の実行結果が否定的な結果であった場合には、当該アプリケーションプログラムの実行を中止する機能(アプリケーションを終了して、制御をOSプログラムに返す機能)とを組み込んでおけばよい。
なお、改竄チェックルーチンFの実行は、できるだけ早く改竄検知を行うことができるように、できるだけ早い段階で行うのが好ましい。したがって、実用上は、プログラム本体部11Aには、アプリケーションプログラムの本来の機能を果たすための命令群の前に(たとえば、プログラム本体部11Aの先頭部分に)改竄チェックルーチンFをコールするサブルーチンコール命令を組み込んでおくようにし、アプリケーションプログラムの本来の機能に関する命令群が実行される前に、改竄の検知が行われるようにするのが好ましい。
<8−2:プログラム保証者Gによる貸与形態>
§7では、プログラム保証者Gが介在する実施形態を述べた。このように、プログラム保証者Gが介在する場合は、第1の特定鍵K(s1)および第2の特定鍵K(s2)は、プログラム保証者Gから提供される鍵となり、改竄チェックルーチンFも、プログラム保証者Gから提供されるプログラムになる。
この場合、プログラム保証者Gは、改竄チェックルーチンFと、第2の特定鍵K(s2)と、図15に示す各ユニット140,150,160,170,180としての機能をコンピュータに実行させるためのプログラムと、を含むデジタルデータの記録媒体を、プログラム提供者Aに貸し与えるようにすればよい。そうすれば、プログラム提供者Aは、汎用のコンピュータに、この記録媒体に記録されているデータやプログラムをインストールすることにより、図15に示す配布用ファイル作成装置を構成することができる(プログラム提供者Aの第1の鍵K(a1)および第2の鍵K(a2)については、自分が管理している鍵を鍵格納ユニット130に組み込む必要がある)。
なお、第1の特定鍵K(s1)を含む改竄チェックルーチンFや、第2の特定鍵K(s2)は、本来、プログラム保証者Gが秘密状態で管理すべき情報であるため、これらは、十分なセキュリティが確保された電子トークン(たとえば、ICカードやUSBメモリなど)に格納した状態でプログラム提供者Aに貸与するようにし、プログラム提供者Aによる直接アクセスができない状態にしておくのが好ましい。
<8−3:プログラム提供者の識別コードの埋め込み>
前述したように、プログラム保証者Gが介在する実施形態を採用する場合、プログラム保証者Gは、プログラム提供者Aだけでなく、他のプログラム提供者B,C等に対しても同様のサービスを提供するのが一般的である。このような場合、各プログラム提供者A,B,Cに貸し与える改竄チェックルーチンF内に、各プログラム提供者(コンテンツプロバイダー)の識別コードを埋め込んでおくようにするのが好ましい。
そうすれば、各プログラム提供者A,B,Cが、汎用のコンピュータを用いて、それぞれ図15に示すような配布用ファイル作成装置を構築した場合、改竄チェックルーチン格納ユニット120に格納されている改竄チェックルーチンFに、プログラム提供者A,B,Cの識別コードが埋め込まれることになるので、各プログラム提供者A,B,Cが作成した配布用ファイル20Aに含まれている改竄チェックルーチンFにも識別コードが埋め込まれた状態になり、配布用ファイル20Aを解析すれば、どのプログラム提供者が作成したファイルであるかを確認することができる。
たとえば、プログラム保証者Gが、プログラム提供者A,B,Cに貸し与える改竄チェックルーチンFに、それぞれプログラム提供者A,B,Cの識別コードID(A),ID(B),ID(C)を埋め込んでおくようにすれば(最も単純な埋め込み方法としては、改竄チェックルーチンFのファイル名に識別コードID(A),ID(B),ID(C)を含ませればよい)、個々の改竄チェックルーチンF(A),F(B),F(C)は相互に区別することができるようになる。そうすれば、配布用ファイル20Aには、どのプログラム提供者に貸し与えた改竄チェックルーチンFが含まれているのかを確認することができるので、万一、改竄チェックルーチンF自体が漏洩するような事態が生じても、責任の所在を明確にすることができるようになる。
<8−4:第1および第2の確認段階の役割分担>
これまで述べてきた実施形態は、アプリケーションパッケージ21Aに対する署名情報22Aの正当性を確認する第1の確認段階(アプリケーションパッケージ21Aが改竄されていないことを、署名情報22Aを利用して確認する段階)を、アプリケーション実行用のコンピュータのOSプログラムによって実行し、秘匿化対象データCに対する秘匿情報23Aの正当性を確認する第2の確認段階(署名情報22Aが改竄されていないことを、秘匿情報23Aを利用して確認する段階)を、アプリケーションパッケージ21Aに含まれる改竄チェックプログラムによって実行する、という役割分担を行っている。
このような役割分担は、Android仕様のアプリケーションを配布して、Android端末においてこれを実行する環境では極めて有効である。すなわち、上記役割分担を行えば、本発明を実施する上で、Android端末側には何ら改変を加える必要はなく、配布対象となるAPKファイルを図15に示す装置で作成すれば足りる。
しかしながら、本発明の適用は、現在のAndroid仕様のアプリケーションの配布および実行に限定されるものではないので、上記役割分担は、本発明に必須のものではない。
たとえば、将来、Android仕様が変更になり、AndroidOS自身に、第2の確認段階を実行するプログラムが組み込まれるようになれば、配布する個々のアプリケーションパッケージ20Aには、第1の特定鍵K(s1)のみを組み込んでおけば足り、改竄チェックルーチンFのその余の部分は組み込む必要はなくなる。この場合、第2の確認段階はOSプログラムによって実行されることになり、改竄が検知された場合のアプリケーションの中止処理も、OSプログラムによって実行されることになる。別言すれば、第1の確認段階と第2の確認段階との双方が、OSプログラムによって行われることになる。
逆に、将来、Android仕様が変更になり、現AndroidOSの機能から、第1の確認段階を行う処理機能が除外された場合には、第1の確認段階と第2の確認段階との双方を、アプリケーションプログラム側で行うようにすることも可能である。
<8−5:秘匿情報の引き渡し方法の変形例>
本発明に係るアプリケーションプログラムの配布実行方法では、まず、配布プロセスにおいて秘匿情報を作成し、続いて、実行プロセスにおいて、この秘匿情報を利用した改竄有無の判定を行うことになる。したがって、配布プロセスで作成した秘匿情報を、何らかの方法で実行プロセスに引き渡す必要がある。これまで述べてきた実施形態は、配布用ファイル作成段階において作成する配布用ファイル内に、作成した秘匿情報を組み込むことにより、配布用ファイルとともに秘匿情報の引き渡しが行われるようにしていた。
たとえば、図5に示す実施形態の場合、秘匿情報23Aは配布用ファイル20A内に組み込まれた状態で配布されることになり、図9に示す実施形態の場合、秘匿情報23A′は配布用ファイル20A′内に組み込まれた状態で配布されることになり、図10に示す実施形態の場合、秘匿情報23A''は配布用ファイル20A''内に組み込まれた状態で配布されることになる。このように、秘匿情報を配布用ファイル内に組み込んでしまえば、アプリケーション実行用コンピュータは、配布用ファイルを入手した時点で、秘匿情報も併せて入手することが可能になる。
ただ、秘匿情報の引き渡し方法は、必ずしも配布用ファイル内に組み込む方法に限定されるものではない。ここでは、秘匿情報の引き渡し方法の変形例を述べておく。図16は、図5に示す基本的な実施形態について、秘匿情報の引き渡し方法を変えた変形例を示すブロック図である。図の上段はプログラム提供者Aによって実行される配布プロセスを示し、下段はユーザUによって実行される実行プロセスを示している。この変形例の特徴は、配布プロセスで作成した秘匿情報23Aを、サーバ30を介して実行プロセスに引き渡す方法を採る点である。
すなわち、図5に示す基本的な実施形態の場合、秘匿情報23Aは配布用ファイル20Aに組み込まれて配布されることになるが、図16に示す変形例の場合、秘匿情報23Aはサーバ30に格納され、その代わりに、この秘匿情報23Aの所在を示す所在情報24Aが配布用ファイル20AAに組み込まれて配布されることになる。図5に示す配布用ファイル20Aと図16に示す配布用ファイル20AAとの相違は、前者の秘匿情報23Aが後者では所在情報24Aになっている点のみである。一般に、秘匿情報23Aのデータ容量が嵩むケースでは、秘匿情報23Aを配布用ファイル20Aに組み込んでしまうと、配布用ファイル20Aのデータ容量も嵩むことになる。このようなケースでは、図16に示す変形例を採れば、秘匿情報23Aに比べてデータ容量の小さい所在情報24Aを組み込んて配布用ファイル20AAを作成することができるので、配布用ファイル20AAのデータ容量を抑えることができ便利である。
サーバ30は、アプリケーション実行用コンピュータがネットワークを介してアクセス可能なサーバであれば、どのようなサーバであってもかまわない。ここに示す例では、インターネットに接続された任意のファイルサーバをサーバ30として利用している。所在情報24Aは、サーバ30およびその中における秘匿情報23Aの格納場所を特定する情報であり、具体的には、秘匿情報23Aの格納場所を示すURLを所在情報24Aとして用いればよい。結局、図16に示す変形例の場合、プログラム提供者Aは、所在情報24Aが組み込まれた配布用ファイル20AAを配布することになる。一方、ユーザUは、この配布用ファイル20AAを入手することにより、所在情報24A(この例の場合は、秘匿情報23Aの格納場所を示すURL)を入手することができるので、この所在情報24Aを用いてインターネットにアクセスし、秘匿情報23Aを入手することが可能になる。
このように、この変形例においても、プログラム提供者AからユーザUに対して、秘匿情報23Aが引き渡される点は、これまで述べてきた実施形態と変わりはないので、秘匿情報23Aを用いた改竄有無判定処理も、これまで述べてきた実施形態と同様の処理を行えばよいことになる。要するに、本発明の配布プロセスにおける配布用ファイル作成段階では、アプリケーションパッケージと、署名情報と、秘匿情報もしくは秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成すればよく、実施プロセスにおける第2の確認段階では、入力した配布用ファイルに基づいて秘匿化対象データおよび秘匿情報を入手し、秘匿化対象データに対する秘匿情報の正当性を確認すればよい。
配布用ファイル作成段階で、秘匿情報23Aを含む配布用ファイル20Aを作成した場合(図5に示す実施形態の場合)は、第2の確認段階で、配布用ファイル20Aから秘匿情報23Aを直接抽出することにより、秘匿情報23Aの入手を行うことができる。これに対して、配布用ファイル作成段階で、秘匿情報23Aを所定の格納場所(サーバ30)に格納する処理を行うとともに、当該格納場所を示す所在情報24Aを含む配布用ファイル20AAを作成した場合(図16に示す変形例の場合)は、第2の確認段階で、配布用ファイル20AAから所在情報24Aを抽出し、この所在情報24Aに基づいて格納場所(サーバ30)を認識し、格納場所(サーバ30)から秘匿情報23Aを取り出すことにより、当該秘匿情報の入手を行うことができる。
なお、サーバ30から秘匿情報23Aを入手する処理は、アプリケーション実行用コンピュータが、配布用ファイル20AAに含まれているアプリケーションについての第2の確認段階を実行するたびに毎回行うようにしてもよいが、実用上は、アプリケーション実行用コンピュータ内に、入力した個々の配布用ファイルについて、それぞれ秘匿情報を保存する保存場所(たとえば、アプリケーション実行用コンピュータ内の不揮発性メモリ内の、当該アプリケーションに割り当てられた領域)を設けておき、秘匿情報23Aを一度入手したら、これをその保存場所に保存するようにし、次回からは、この保存場所に保存されている秘匿情報23Aを利用するようにするのが好ましい。そうすれば、保存場所に秘匿情報23Aを保存した後は、インターネットに接続できない状態でも、当該アプリケーションを起動させることができる。
すなわち、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、所定の保存場所に、必要な秘匿情報23Aが保存されていない場合には、配布用ファイル20AAから所在情報24Aを抽出し、この所在情報24Aに基づいて格納場所(サーバ30)を認識し、この格納場所(サーバ30)から秘匿情報23Aを取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報23Aをアプリケーション実行用コンピュータ内の保存場所に保存する処理を行うようにすればよい。そして、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、当該コンピュータ内の保存場所に、必要な秘匿情報23Aが保存されている場合には、この保存場所から秘匿情報23Aを取り出すことにより、当該秘匿情報の入手を行うようにすればよい。
もちろん、ここで述べる変形例は、図5に示す基本的な実施形態だけでなく、その他の実施形態に対しても適用可能である。また、配布プロセスにおいて、秘匿情報23Aを任意のサーバに格納する際には、必ずしも1箇所のサーバ30に格納しておく必要はなく、複数箇所に分散して格納するようにしてもよい。たとえば、秘匿情報23Aを3つのファイルに分割し、第1の分割ファイルを第1のサーバ31に格納し、第2の分割ファイルを第2のサーバ32に格納し、第3の分割ファイルを第3のサーバ33に格納する、という格納方法を採ってもかまわない。この場合、所在情報24Aは、これら3箇所の格納場所を示す情報ということになる。また、この場合、所在情報24Aに、分割方法を示す情報も含ませておけば、実行プロセスにおいて、3箇所から入手した個々の分割ファイルに対して、分割方法を参照した合成処理を行い、元の秘匿情報23Aを復元することができる。
ここで述べた変形例を採用する場合、図15に示す配布用ファイル作成装置にも若干の変更を行う必要がある。前述の§7で説明した配布用ファイル作成装置の場合、配布用ファイル作成ユニット180は、秘匿情報23Aを含む配布用ファイル20Aを作成し、改竄チェックルーチン格納ユニット120に格納されている改竄チェックルーチンFは、配布用ファイル20Aから秘匿情報23Aを抽出することにより、当該秘匿情報の入手を行うことになっていた。
これに対して、ここで述べた変形例を採用する場合は、配布用ファイル作成ユニット180が、秘匿情報作成ユニット170によって作成された秘匿情報23Aを所定の格納場所(たとえば、図16のサーバ30)に格納する処理を行うとともに、当該格納場所を示す所在情報24Aを含む配布用ファイル20AAを作成し、改竄チェックルーチン格納ユニット120に格納されている改竄チェックルーチンFが、この配布用ファイル20AAから所在情報24Aを抽出し、この所在情報24Aに基づいて格納場所(たとえば、図16のサーバ30)を認識し、認識した格納場所から秘匿情報23Aを取り出すことにより、当該秘匿情報の入手を行うようにすればよい。
また、アプリケーション実行用コンピュータ内に秘匿情報23Aの保存場所を確保するようにする場合は、改竄チェックルーチン格納ユニット120に格納されている改竄チェックルーチンFが、当該改竄チェックルーチンを実行しているコンピュータ内に設けられた秘匿情報の保存場所に秘匿情報23Aが保存されていない場合には、配布用ファイル20AAから所在情報24Aを抽出し、この所在情報24Aに基づいて格納場所を認識し、この格納場所から秘匿情報23Aを取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報23Aを保存場所に保存する処理を行い、この保存場所に秘匿情報23Aが保存されている場合には、この保存場所から秘匿情報23Aを取り出すことにより、当該秘匿情報の入手を行うようにすればよい。
10:アプリケーションプログラム
10A:アプリケーションプログラム
10X,10X′:改竄されたアプリケーションプログラム
11:プログラム本体部
11A:プログラム本体部
12:リソースデータ
12X:改竄されたリソースデータ
13:サブルーチン群
13A:サブルーチン群
14:補助ファイル
14X:改竄された補助ファイル
20:配布用ファイル
20A,20A′,20A'',20AA:配布用ファイル
20X,20X′:改竄された配布用ファイル
21:アプリケーションパッケージ
21A:アプリケーションパッケージ
21X,21X′:改竄されたアプリケーションパッケージ
22:Aの署名情報
22A:Aの署名情報
22X,22X′:Xの署名情報
23A,23A′,23A'':秘匿情報
23X:改竄された秘匿情報
24A:所在情報
30:サーバ
110:アプリケーションプログラム格納ユニット
120:改竄チェックルーチン格納ユニット
130:鍵格納ユニット
140:改竄チェックルーチン付加ユニット
150:パッケージ化処理ユニット
160:署名情報作成ユニット
170:秘匿情報作成ユニット
180:配布用ファイル作成ユニット
A:プログラム提供者
C,C′:秘匿化対象データ
D,D′:署名対象データ
F:改竄チェックルーチン
G:プログラム保証者
H,H1,H2:ハッシュ値
K(a1):Aの第1の鍵
K(a2):Aの第2の鍵
K(g1):Gの第1の鍵
K(g2):Gの第2の鍵
K(s0):共通特定鍵
K(s1):第1の特定鍵
K(s2):第2の特定鍵
K(x1):Xの第1の鍵
K(x2):Xの第2の鍵
S(A):署名値
S(X),S(X′):署名値
S1〜S12:流れ図の各ステップ
U,U1〜U3:ユーザ
X:クラッカー

Claims (43)

  1. アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムを実行する実行プロセスと、を有するアプリケーションプログラムの配布実行方法であって、
    前記配布プロセスでは、
    コンピュータが、第1の特定鍵を含むアプリケーションプログラムに対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージを作成するパッケージ化段階と、
    コンピュータが、前記アプリケーションパッケージを署名対象データとして、プログラム提供者の第1の鍵を用いた暗号化を利用した電子署名処理を行って署名値を生成し、この署名値と前記プログラム提供者の第2の鍵とを含む署名情報を作成する署名情報作成段階と、
    コンピュータが、前記アプリケーションパッケージおよび前記署名情報を構成するデータの中から、前記プログラム提供者の第2の鍵を含む所定部分を秘匿化対象データとして抽出し、抽出した前記秘匿化対象データに対して第2の特定鍵を用いた秘匿化処理を施して秘匿情報を作成する秘匿情報作成段階と、
    コンピュータが、前記アプリケーションパッケージと、前記署名情報と、前記秘匿情報もしくは前記秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成する配布用ファイル作成段階と、
    コンピュータが、前記配布用ファイルを出力するファイル出力段階と、
    を行い、
    前記実行プロセスでは、
    アプリケーション実行用コンピュータが、前記配布用ファイルを入力するファイル入力段階と、
    前記アプリケーション実行用コンピュータが、入力した配布用ファイルについて、前記署名情報に含まれている前記プログラム提供者の第2の鍵を用いた復号を利用した署名確認処理を行って、前記アプリケーションパッケージに対する前記署名情報の正当性を確認する第1の確認段階と、
    前記アプリケーション実行用コンピュータが、入力した配布用ファイルに基づいて前記秘匿化対象データおよび前記秘匿情報を入手し、前記秘匿化対象データに対する前記秘匿情報の正当性を、前記アプリケーションプログラムに含まれている前記第1の特定鍵を用いて確認する第2の確認段階と、
    前記アプリケーション実行用コンピュータが、入力した配布用ファイルについて、前記第1の確認段階および前記第2の確認段階の双方において肯定的な結果が得られた場合には改竄なし、前記第1の確認段階および前記第2の確認段階の少なくとも一方において否定的な結果が得られた場合には改竄あり、との判断を行う改竄判定段階と、
    前記アプリケーション実行用コンピュータが、前記改竄判定段階において、改竄なしとの判断が得られた場合にのみ、配布されたアプリケーションプログラムを正常に実行する実行段階と、
    を行い、
    前記プログラム提供者の第1の鍵および第2の鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、前記第1の特定鍵および前記第2の特定鍵として、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対もしくは同一の鍵を用いることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  2. 請求項1に記載のアプリケーションプログラムの配布実行方法において、
    第1の特定鍵および第2の特定鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
    秘匿情報作成段階で、前記第2の特定鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
    第2の確認段階で、前記第1の特定鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、入力した配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  3. 請求項2に記載のアプリケーションプログラムの配布実行方法において、
    第1の特定鍵としてプログラム保証者の第1の鍵を用い、第2の特定鍵として前記プログラム保証者の第2の鍵を用い、前記プログラム保証者の第2の鍵を用いて暗号化したデータを前記プログラム保証者の第1の鍵を用いて復号できるようにし、
    パッケージ化段階で、前記プログラム保証者の第1の鍵を含むアプリケーションプログラムに対するパッケージ化処理を実行し、
    秘匿情報作成段階で、前記プログラム保証者の第2の鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
    第2の確認段階で、前記プログラム保証者の第1の鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、入力した配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  4. 請求項1に記載のアプリケーションプログラムの配布実行方法において、
    第1の特定鍵および第2の特定鍵として同一の共通特定鍵を用い、
    パッケージ化段階で、前記共通特定鍵を含むアプリケーションプログラムに対するパッケージ化処理を実行し、
    秘匿情報作成段階で、秘匿化対象データに対して、前記共通特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して秘匿情報を作成し、
    第2の確認段階で、入力した配布用ファイルから前記秘匿化対象データおよび前記共通特定鍵を抽出し、抽出した秘匿化対象データに対して、抽出した共通特定鍵を用いた前記ダイジェスト化処理を施して得られる情報が、入力した配布用ファイルに基づいて入手した前記秘匿情報と一致していた場合に、秘匿情報が正当である旨の確認を行うことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  5. 請求項4に記載のアプリケーションプログラムの配布実行方法において、
    秘匿情報作成段階および第2の確認段階で、共通特定鍵をパラメータとして用いたハッシュ関数を作用させるダイジェスト化処理を施して得られるハッシュ値を秘匿情報とすることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  6. 請求項1〜5のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    秘匿化対象データとして、署名情報を構成するデータ全体を用いることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  7. 請求項1〜5のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    秘匿化対象データとして、署名情報に含まれるプログラム提供者の第2の鍵を構成するデータを用いることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  8. 請求項1〜5のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    秘匿化対象データとして、アプリケーションパッケージと署名情報との双方を構成するデータ全体を用いることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  9. 請求項1〜8のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    パッケージ化段階で、第2の確認段階を実行するための改竄チェックルーチンを含むアプリケーションプログラムに対するパッケージ化処理を行い、
    アプリケーション実行用コンピュータが、前記改竄チェックルーチンを実行することにより第2の確認段階を実行することを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  10. 請求項9に記載のアプリケーションプログラムの配布実行方法において、
    改竄チェックルーチン内に第1の特定鍵が含まれていることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  11. 請求項9または10に記載のアプリケーションプログラムの配布実行方法において、
    アプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、を含み、前記サブルーチン群は、改竄チェックルーチンを含み、前記改竄チェックルーチンは、第2の確認段階の実行結果をサブルーチンの実行結果として返す機能を有し、
    前記プログラム本体部には、前記改竄チェックルーチンをコールするサブルーチンコール命令と、前記改竄チェックルーチンから返された結果が肯定的な結果であった場合には以後の命令群を引き続き実行し、否定的な結果であった場合には以後の命令群の実行を中止するプログラムと、が組み込まれていることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  12. 請求項9または10に記載のアプリケーションプログラムの配布実行方法において、
    アプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、を含み、前記サブルーチン群は、改竄チェックルーチンを含み、
    前記プログラム本体部には、前記改竄チェックルーチンをコールするサブルーチンコール命令と、前記改竄チェックルーチンから肯定的な結果が返された場合には以後の命令群を引き続き実行するプログラムと、が組み込まれており、
    前記改竄チェックルーチンは、第2の確認段階の実行結果が肯定的な結果であった場合には、当該結果をサブルーチンの実行結果として返す機能を有し、第2の確認段階の実行結果が否定的な結果であった場合には、前記アプリケーションプログラムの実行を中止する機能を有することを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  13. 請求項11または12に記載のアプリケーションプログラムの配布実行方法において、
    プログラム本体部には、アプリケーションプログラムの本来の機能を果たすための命令群の前に改竄チェックルーチンをコールするサブルーチンコール命令が組み込まれていることを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  14. 請求項9〜13のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    実行プロセスでは、OSプログラムの管理下でアプリケーションプログラムの実行を行うアプリケーション実行用コンピュータを用い、
    第1の確認段階を前記OSプログラムに基づいて実行し、
    第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行することを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  15. 請求項14に記載のアプリケーションプログラムの配布実行方法において、
    OSプログラムに基づく第1の確認段階が行われた後に、改竄チェックルーチンに基づく第2の確認段階を実行するようにし、
    第1の確認段階において否定的な結果が得られた場合には、OSプログラムにより改竄ありとの判断を伴う改竄判定段階を実行し、第2の確認段階を行わずに、当該判断対象となったアプリケーションプログラムの実行をOSプログラムの管理下で中止し、
    第1の確認段階において肯定的な結果が得られた場合には、OSプログラムの管理下で当該判断対象となったアプリケーションプログラムを実行して第2の確認段階を行い、
    第2の確認段階において否定的な結果が得られた場合には、当該アプリケーションプログラム自身により改竄ありとの判断を伴う改竄判定段階を実行し、当該アプリケーションプログラム自身により、以後の処理の実行を中止し、
    第2の確認段階において肯定的な結果が得られた場合には、当該アプリケーションプログラム自身により改竄なしとの判断を伴う改竄判定段階を実行し、当該アプリケーションプログラム自身により、以後の処理を引き続き実行することを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  16. 請求項9〜15のいずれかに記載のアプリケーションプログラムの配布実行方法であって、
    改竄チェックルーチン内に、プログラム提供者の識別コードを埋め込むことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  17. 請求項1〜16のいずれかに記載のアプリケーションプログラムの配布実行方法であって、
    アプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、画像および文字列を含むリソースデータと、XML形式のデータからなるマニフェストファイルと、を含んでおり、
    パッケージ化段階において、ZIP方式の圧縮処理を含むパッケージ化処理を実行し、配布用ファイル作成段階において、APK形式のフォーマットをもった配布用ファイルを作成することを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  18. 請求項17に記載のアプリケーションプログラムの配布実行方法であって、
    配布用ファイル作成段階において、ZIP方式の圧縮フォーマットにおけるコメント領域に秘匿情報もしくは所在情報を記録することにより配布用ファイルを作成することを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  19. 請求項1〜18のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    配布用ファイル作成段階で、コンピュータが、秘匿情報を含む配布用ファイルを作成し、
    第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから秘匿情報を抽出することにより、当該秘匿情報の入手を行うことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  20. 請求項1〜18のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
    第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  21. 請求項1〜18のいずれかに記載のアプリケーションプログラムの配布実行方法において、
    配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
    アプリケーション実行用コンピュータ内に、入力した配布用ファイルについての秘匿情報を保存する保存場所を設け、前記アプリケーション実行用コンピュータが第2の確認段階を実行する際に、前記保存場所に、必要な秘匿情報が保存されていない場合には、前記配布用ファイルから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報を前記保存場所に保存する処理を行い、前記保存場所に、必要な秘匿情報が保存されている場合には、前記保存場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うことを特徴とする改竄検知が可能なアプリケーションプログラムの配布実行方法。
  22. 請求項1〜21のいずれかに記載されたアプリケーションプログラムの配布実行方法における配布プロセスを構成する各段階を有することを特徴とする改竄検知が可能なアプリケーションプログラムの配布方法。
  23. 請求項1〜21のいずれかに記載されたアプリケーションプログラムの配布実行方法における実行プロセスを構成する各段階のうち、少なくとも、第1の確認段階、第2の確認段階、改竄判定段階、および実行段階を有することを特徴とする改竄検知が可能なアプリケーションプログラムの実行方法。
  24. 請求項1〜21のいずれかに記載されたアプリケーションプログラムの配布実行方法における配布プロセスを構成する各段階をコンピュータに実行させるプログラム。
  25. 請求項1〜21のいずれかに記載されたアプリケーションプログラムの配布実行方法における実行プロセスを構成する各段階のうち、少なくとも、第1の確認段階、第2の確認段階、改竄判定段階、および実行段階をコンピュータに実行させるプログラム。
  26. アプリケーションプログラムの配布用ファイルを作成する装置であって、
    配布対象となるアプリケーションプログラムを格納するアプリケーションプログラム格納ユニットと、
    第1の特定鍵を内蔵した改竄チェックルーチンを格納する改竄チェックルーチン格納ユニットと、
    第2の特定鍵、プログラム提供者の第1の鍵、プログラム提供者の第2の鍵を格納する鍵格納ユニットと、
    前記アプリケーションプログラム格納ユニットに格納されているアプリケーションプログラムに前記改竄チェックルーチン格納ユニットに格納されている前記改竄チェックルーチンを付加する改竄チェックルーチン付加ユニットと、
    前記改竄チェックルーチンが付加された前記アプリケーションプログラムに対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージを作成するパッケージ化処理ユニットと、
    前記アプリケーションパッケージを署名対象データとして、前記プログラム提供者の第1の鍵を用いた暗号化を利用した電子署名処理を行って署名値を生成し、この署名値と前記プログラム提供者の第2の鍵とを含む署名情報を作成する署名情報作成ユニットと、
    前記アプリケーションパッケージおよび前記署名情報を構成するデータの中から、前記プログラム提供者の第2の鍵を含む所定部分を秘匿化対象データとして抽出し、抽出した前記秘匿化対象データに対して前記第2の特定鍵を用いた秘匿化処理を施して秘匿情報を作成する秘匿情報作成ユニットと、
    前記アプリケーションパッケージと、前記署名情報と、前記秘匿情報もしくは前記秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成する配布用ファイル作成ユニットと、
    を備え、
    前記改竄チェックルーチンは、前記配布用ファイルに基づいて前記秘匿化対象データおよび前記秘匿情報を入手し、前記秘匿化対象データに対する前記秘匿情報の正当性を、内蔵している前記第1の特定鍵を用いて確認し、正当性が確認できない場合には、前記アプリケーションプログラムが改竄された旨の判定を行う機能を有し、
    前記プログラム提供者の第1の鍵および第2の鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、前記第1の特定鍵および前記第2の特定鍵として、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対もしくは同一の鍵を用いることを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  27. 請求項26に記載の配布用ファイル作成装置において、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、アプリケーションプログラムが改竄された旨の判定が行われた場合に、当該アプリケーションプログラムの以後の処理の実行を中止させる処理を行うことを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  28. 請求項26または27に記載の配布用ファイル作成装置において、
    第1の特定鍵および第2の特定鍵として、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵が用いられており、
    秘匿情報作成ユニットが、前記第2の特定鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、前記第1の特定鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うことを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  29. 請求項28に記載の配布用ファイル作成装置において、
    第1の特定鍵としてプログラム保証者の第1の鍵を用い、第2の特定鍵として前記プログラム保証者の第2の鍵を用い、前記プログラム保証者の第2の鍵を用いて暗号化したデータを前記プログラム保証者の第1の鍵を用いて復号できるようにし、
    秘匿情報作成ユニットが、前記プログラム保証者の第2の鍵を用いて、秘匿化対象データに対する暗号化処理を施して秘匿情報を作成し、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、前記プログラム保証者の第1の鍵を用いて秘匿情報を復号し、この復号によって得られた秘匿化対象データと、配布用ファイルから抽出した秘匿化対象データとが一致していた場合に、秘匿情報が正当である旨の確認を行うことを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  30. 請求項26または27に記載の配布用ファイル作成装置において、
    第1の特定鍵および第2の特定鍵として同一の共通特定鍵が用いられており、
    秘匿情報作成ユニットが、秘匿化対象データに対して、前記共通特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して秘匿情報を作成し、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、配布用ファイルから前記秘匿化対象データおよび前記共通特定鍵を抽出し、抽出した秘匿化対象データに対して、抽出した共通特定鍵を用いた前記ダイジェスト化処理を施して得られる情報が、配布用ファイルに基づいて入手した前記秘匿情報と一致していた場合に、秘匿情報が正当である旨の確認を行うことを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  31. 請求項30に記載の配布用ファイル作成装置において、
    秘匿情報作成ユニットが、共通特定鍵をパラメータとして用いたハッシュ関数を作用させるダイジェスト化処理を施して得られるハッシュ値を秘匿情報とし、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、前記共通特定鍵を用いた前記ダイジェスト化処理を施して得られるハッシュ値を秘匿情報とすることを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  32. 請求項26〜31のいずれかに記載の配布用ファイル作成装置において、
    秘匿情報作成ユニットが、秘匿化対象データとして、署名情報を構成するデータ全体を用いることを特徴とする配布用ファイル作成装置。
  33. 請求項26〜31のいずれかに記載の配布用ファイル作成装置において、
    秘匿情報作成ユニットが、秘匿化対象データとして、署名情報に含まれるプログラム提供者の第2の鍵を構成するデータを用いることを特徴とする配布用ファイル作成装置。
  34. 請求項26〜31のいずれかに記載の配布用ファイル作成装置において、
    秘匿情報作成ユニットが、秘匿化対象データとして、アプリケーションパッケージと署名情報との双方を構成するデータ全体を用いることを特徴とする配布用ファイル作成装置。
  35. 請求項26〜34のいずれかに記載の配布用ファイル作成装置において、
    配布用ファイル作成ユニットが、秘匿情報を含む配布用ファイルを作成し、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、配布用ファイルから秘匿情報を抽出することにより、当該秘匿情報の入手を行うことを特徴とする配布用ファイル作成装置。
  36. 請求項26〜34のいずれかに記載の配布用ファイル作成装置において、
    配布用ファイル作成ユニットが、秘匿情報作成ユニットによって作成された秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、配布用ファイルから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うことを特徴とする配布用ファイル作成装置。
  37. 請求項26〜34のいずれかに記載の配布用ファイル作成装置において、
    配布用ファイル作成ユニットが、秘匿情報作成ユニットによって作成された秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンが、当該改竄チェックルーチンを実行しているコンピュータ内に設けられた秘匿情報の保存場所に秘匿情報が保存されていない場合には、前記配布用ファイルから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報を前記保存場所に保存する処理を行い、前記保存場所に秘匿情報が保存されている場合には、前記保存場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うことを特徴とする配布用ファイル作成装置。
  38. 請求項26〜37のいずれかに記載の配布用ファイル作成装置において、
    改竄チェックルーチン格納ユニットに格納されている改竄チェックルーチンに、プログラム提供者の識別コードが埋め込まれていることを特徴とするアプリケーションプログラムの配布用ファイル作成装置。
  39. 請求項26〜38のいずれかに記載の配布用ファイル作成装置によって作成されたアプリケーションプログラムの配布用ファイルをデジタルデータとして格納したデータ記録媒体。
  40. アプリケーションプログラムの改竄を検知する方法であって、
    コンピュータが、アプリケーションプログラムと、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルを入力する入力段階と、
    コンピュータが、前記アプリケーションプログラムが改竄されているか否かを判定する判定段階と、
    を有し、
    前記署名情報は、前記アプリケーションプログラムを署名対象データとする電子署名処理によって得られた情報であり、
    前記秘匿情報は、前記アプリケーションプログラムおよび前記署名情報を構成するデータの中の所定部分を秘匿化対象データとして抽出し、抽出した前記秘匿化対象データに対する秘匿化処理を施して得られた情報であり、
    前記判定段階は、前記署名情報に基づいて改竄の有無を確認する第1の確認段階と、前記秘匿情報に基づいて改竄の有無を確認する第2の確認段階と、を有し、
    前記アプリケーションプログラムには、前記秘匿化処理で行われた処理プロセスを勘案して前記秘匿化対象データに対する前記秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、前記改竄チェックルーチンを実行することにより前記第2の確認段階が行われることを特徴とするアプリケーションプログラムの改竄検知方法。
  41. 請求項40に記載のアプリケーションプログラムの改竄検知方法において、
    一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
    秘匿情報が、秘匿化対象データを前記一方の鍵を用いて暗号化することにより得られた情報であり、
    改竄チェックルーチンが、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報を前記他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイルから抽出した秘匿化対象データとが一致していた場合に改竄なしとの確認を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  42. 請求項40に記載のアプリケーションプログラムの改竄検知方法において、
    秘匿情報が、秘匿化対象データに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して作成された情報であり、
    改竄チェックルーチンが、入力段階で入力したデータファイルから抽出した秘匿化対象データに対して、前記特定鍵を用いた前記ダイジェスト化処理を施して得られる情報が、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報と一致していた場合に改竄なしとの確認を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  43. 請求項40〜42のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータが、第1の確認段階を前記OSプログラムに基づいて実行し、第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行することを特徴とするアプリケーションプログラムの改竄検知方法。
JP2012099139A 2012-04-24 2012-04-24 改竄検知が可能なアプリケーションプログラムの配布実行方法 Active JP5056995B1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012099139A JP5056995B1 (ja) 2012-04-24 2012-04-24 改竄検知が可能なアプリケーションプログラムの配布実行方法
PCT/JP2013/062311 WO2013161974A1 (ja) 2012-04-24 2013-04-19 改竄検知が可能なアプリケーションプログラムの配布実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012099139A JP5056995B1 (ja) 2012-04-24 2012-04-24 改竄検知が可能なアプリケーションプログラムの配布実行方法

Publications (2)

Publication Number Publication Date
JP5056995B1 true JP5056995B1 (ja) 2012-10-24
JP2013228814A JP2013228814A (ja) 2013-11-07

Family

ID=47189538

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012099139A Active JP5056995B1 (ja) 2012-04-24 2012-04-24 改竄検知が可能なアプリケーションプログラムの配布実行方法

Country Status (1)

Country Link
JP (1) JP5056995B1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014106716A (ja) * 2012-11-27 2014-06-09 Nippon Telegr & Teleph Corp <Ntt> 制御装置、制御システム、制御方法および制御プログラム
JP2016522649A (ja) * 2013-05-30 2016-07-28 マイクロソフト テクノロジー ライセンシング,エルエルシー バンドルパッケージ署名
CN112885175A (zh) * 2021-01-15 2021-06-01 杭州安恒信息安全技术有限公司 信息安全赛题生成方法、装置、电子装置和存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10878123B2 (en) * 2016-04-11 2020-12-29 Hewlett-Packard Development Company, L.P. Application approval

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04163627A (ja) * 1990-10-29 1992-06-09 Hitachi Ltd プログラム変換方法
JPH07146788A (ja) * 1993-11-22 1995-06-06 Fujitsu Ltd ウイルス診断機構の作成システムと作成方法並びにウイルス診断機構と診断方法
JP2002230511A (ja) * 2001-02-01 2002-08-16 Dainippon Printing Co Ltd 多重認証可搬情報処理媒体
JP2004213339A (ja) * 2002-12-27 2004-07-29 Toshiba Corp ソフトウェア無線機及びその制御方法
JP2005293109A (ja) * 2004-03-31 2005-10-20 Canon Inc ソフトウェア実行管理装置、ソフトウェア実行管理方法、及び制御プログラム
WO2006016407A1 (ja) * 2004-08-12 2006-02-16 Fujitsu Limited Javaアプレット、JARファイル生成方法、JARファイル生成プログラム、JARファイル生成装置
US20080276314A1 (en) * 2007-05-03 2008-11-06 Microsoft Corporation Software protection injection at load time

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04163627A (ja) * 1990-10-29 1992-06-09 Hitachi Ltd プログラム変換方法
JPH07146788A (ja) * 1993-11-22 1995-06-06 Fujitsu Ltd ウイルス診断機構の作成システムと作成方法並びにウイルス診断機構と診断方法
JP2002230511A (ja) * 2001-02-01 2002-08-16 Dainippon Printing Co Ltd 多重認証可搬情報処理媒体
JP2004213339A (ja) * 2002-12-27 2004-07-29 Toshiba Corp ソフトウェア無線機及びその制御方法
JP2005293109A (ja) * 2004-03-31 2005-10-20 Canon Inc ソフトウェア実行管理装置、ソフトウェア実行管理方法、及び制御プログラム
WO2006016407A1 (ja) * 2004-08-12 2006-02-16 Fujitsu Limited Javaアプレット、JARファイル生成方法、JARファイル生成プログラム、JARファイル生成装置
US20080276314A1 (en) * 2007-05-03 2008-11-06 Microsoft Corporation Software protection injection at load time

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014106716A (ja) * 2012-11-27 2014-06-09 Nippon Telegr & Teleph Corp <Ntt> 制御装置、制御システム、制御方法および制御プログラム
JP2016522649A (ja) * 2013-05-30 2016-07-28 マイクロソフト テクノロジー ライセンシング,エルエルシー バンドルパッケージ署名
CN112885175A (zh) * 2021-01-15 2021-06-01 杭州安恒信息安全技术有限公司 信息安全赛题生成方法、装置、电子装置和存储介质
CN112885175B (zh) * 2021-01-15 2022-10-21 杭州安恒信息安全技术有限公司 信息安全赛题生成方法、装置、电子装置和存储介质

Also Published As

Publication number Publication date
JP2013228814A (ja) 2013-11-07

Similar Documents

Publication Publication Date Title
JP5126447B1 (ja) アプリケーションプログラムの実行方法
JP5190800B2 (ja) プログラムの実行制御システム、実行制御方法、実行制御用コンピュータプログラム
CN102073826B (zh) 利用轻量级数字水印添加组件的数字版权管理的系统和方法
CN106295255B (zh) 应用程序的加固方法和装置
CN106778103A (zh) 一种安卓应用程序防逆向破解的加固方法、系统及解密方法
CN101872404B (zh) 一种保护Java软件程序的方法
CN101189617A (zh) 电子设备、更新服务器装置、密钥更新装置
CN110798315A (zh) 基于区块链的数据处理方法、装置及终端
CN101977183B (zh) 适用多类终端设备的高可信数字内容服务方法
Piao et al. Server‐based code obfuscation scheme for APK tamper detection
CN104318155A (zh) 一种防逆向apk文件的动态加载方法
CN111143869A (zh) 应用程序包处理方法、装置、电子设备及存储介质
CN107231490A (zh) 动态更新ios系统应用程序的方法、客户端及服务器
KR101756978B1 (ko) 트러스티드 실행 환경 기반의 어플리케이션 프로그램 보호 방법 및 시스템
WO2013161974A1 (ja) 改竄検知が可能なアプリケーションプログラムの配布実行方法
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
JP5056995B1 (ja) 改竄検知が可能なアプリケーションプログラムの配布実行方法
Gora et al. A flexible design flow for software IP binding in FPGA
CN107609394A (zh) Android安装包的防篡改方法、存储设备及装置
JP2008287706A (ja) 情報セキュリティ装置、セキュリティシステム及び入力情報漏洩防止方法
JP7331714B2 (ja) 情報処理装置、情報処理方法及びプログラム
CN101977219A (zh) 一种widget应用保护方法及装置
Park et al. A methodology for the decryption of encrypted smartphone backup data on android platform: A case study on the latest samsung smartphone backup system
JP5182445B1 (ja) アプリケーションプログラムの改竄検知方法
KR102585405B1 (ko) 데이터 보안 장치

Legal Events

Date Code Title Description
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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120716

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

Free format text: PAYMENT UNTIL: 20150810

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5056995

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150