JP5126447B1 - アプリケーションプログラムの実行方法 - Google Patents

アプリケーションプログラムの実行方法 Download PDF

Info

Publication number
JP5126447B1
JP5126447B1 JP2012190943A JP2012190943A JP5126447B1 JP 5126447 B1 JP5126447 B1 JP 5126447B1 JP 2012190943 A JP2012190943 A JP 2012190943A JP 2012190943 A JP2012190943 A JP 2012190943A JP 5126447 B1 JP5126447 B1 JP 5126447B1
Authority
JP
Japan
Prior art keywords
program
application program
application
information
stage
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
JP2012190943A
Other languages
English (en)
Other versions
JP2014048866A (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 JP2012190943A priority Critical patent/JP5126447B1/ja
Application granted granted Critical
Publication of JP5126447B1 publication Critical patent/JP5126447B1/ja
Priority to PCT/JP2013/062311 priority patent/WO2013161974A1/ja
Publication of JP2014048866A publication Critical patent/JP2014048866A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】アプリケーションプログラムの改竄の有無を判定し、改竄のないアプリを実行許可リストに自動登録する。
【解決手段】アプリの起動指示を受けて、OSによる署名情報の正当性確認(S7)を行い、更に、当該アプリ自身により、この署名情報に基づいて作成された秘匿情報の正当性確認(S9)を行う。双方で正当性確認がなされたら、改竄なしと判定し、当該アプリの識別コードを実行許可リストに自動登録(S14)した上で、当該アプリの実行を続行する(S12)。改竄ありと判定された場合は、当該アプリの実行を中止する(S11)。OSのマルチタスク処理により、アプリとは別個の監視プログラムを並列動作させ、リストに登録されていないアプリが起動していた場合には、登録するか否かをユーザに回答させる。登録する旨の回答があれば当該アプリを登録し、登録しない旨の回答があれば、当該アプリの実行を中止する。
【選択図】図22

Description

本発明は、アプリケーションプログラムの実行方法に関し、特に、アプリケーションプログラムの改竄を検知する処理を行った上で、これを実行する技術に関する。
ここ数年来、電子機器は、パソコン、スマートホン、電子タブレット等と様々な形態のものが普及してきており、これら様々な電子機器において多様なアプリケーションプログラムが利用されている。このため、実社会で利用されているアプリケーションプログラムの数は膨大な数にのぼり、今後も急激な勢いでその数を増してゆくものと予想される。一方、アプリケーションプログラムの配布形態も、光学的記録媒体やICメモリに格納して提供する形態や、インターネットなどを介してオンラインでデータファイルのみを送信する形態が普及しており、一般ユーザは、様々なルートで入手した様々なアプリケーションプログラムを電子機器にインストールして利用することができる。
このように、膨大な数のアプリケーションプログラムが様々な配布形態で提供されている現状では、配布途中のアプリケーションプログラムは、悪意をもったクラッカーによる改竄の標的になりやすい。たとえば、クラッカーは、インターネット経由で任意のアプリケーションプログラムを入手することが可能であり、入手したアプリケーションプログラムに対して改竄を施した後、これを再びインターネット経由あるいは様々な記録媒体に格納して再配布することができる。
一般ユーザにとって、実社会に配布されているアプリケーションプログラムが、正規のプロバイダーから提供された純正のものであるのか、クラッカーによる改竄が施されたものであるのかを見分けることは困難である。特に、改竄されたアプリケーションプログラムが、正規のアプリケーションプログラムと同じファイル名をもつファイルとして配布されていると、一般ユーザが両者を区別することは非常に困難であり、両者を混同せざるを得ない。
改竄されたアプリケーションプログラムを実行することによって受ける被害は、改竄の内容によって様々である。たとえば、ウイルスを混入させる改竄が行われた場合には、ユーザの電子機器内のファイルが破壊されたり、個人情報が外部へ漏洩されたり、重大な被害が生じることになる。一方、画像データや文字データを差し替えるような改竄が行われた場合、ウイルスほどの被害は生じないにしても、提示される情報が本来のものではなくなってしまうため、ユーザに混乱を生じさせることになる。
しかも、このような改竄されたアプリケーションプログラムの流布による被害は、一般ユーザだけではなく、コンテンツプロバイダにまで及ぶことになる。たとえば、コンテンツプロバイダであるA社が配布した正規のアプリケーションプログラムが、クラッカーによる改竄を受け、改竄されたアプリケーションプログラムが、あたかもA社の正規の製品であるかのようにして再配布された場合を考えてみよう。この場合、改竄されたアプリケーションプログラムをインストールしたユーザが、当該プログラムをA社から提供された正規の製品であると信じて実行したとすれば、A社は不当な評価を受けることになる。たとえば、改竄によってプログラムの動作に不具合が生じたり、公序良俗に反するような内容が表示されたりすれば、A社の製品に対するユーザの評価は低下することになり、A社は風評被害を受けることになる。
このように、コンテンツプロバイダがアプリケーションプログラムを配布し、一般ユーザの電子機器にインストールして実行してもらう上では、クラッカーによる改竄を防止することが不可欠である。通常、デジタルデータの改竄を防止するためには、電子署名の技術が利用されている。たとえば、下記の特許文献1には、携帯電話のメモリ内のデータに電子署名を施し、これをチェックすることにより改竄の有無を検出するシステムが開示されている。また、特許文献2には、情報処理装置内のアプリケーションプログラムの改竄の有無を、電子署名やハッシュ値を利用して監視するシステムが開示されている。
一方、下記の特許文献3および特許文献4には、予め実行対象となるアプリケーションプログラムを登録しておき、未登録のプログラムについては実行を許可しない処理を行う技術が開示されている。この技術を利用すれば、改竄のおそれがない安全なアプリケーションプログラムと判断できるもののみを予め登録しておくようにし、改竄のおそれがあるアプリケーションプログラムの実行を抑制することができるようになる。
特開2007−293847号公報 国際公開第WO2008−047830号公報 特開2002−304318号公報 特開2005−157429号公報
上述したとおり、デジタルデータの改竄を防止するために、当該デジタルデータに対して電子署名を施すことは様々な産業分野で利用されており、前掲の特許文献1,2にも記載されているように、電子機器に配布するアプリケーションプログラムに対する改竄防止にも利用されている。たとえば、Android(登録商標)をOSとして採用するスマートホンの場合、インストールするアプリケーションプログラムには、必ず電子署名が付加されていることが仕様によって定められており、電子署名が付加されていないアプリケーションプログラムや、付加されている電子署名に不整合が生じているアプリケーションプログラムは、OSによって不正なプログラムと判断され、実行が許可されない。
しかしながら、電子署名は、あくまでも署名対象データの内容を署名者が保証するものであり、署名者の身元まで保証するものではない。このため、クラッカーは、アプリケーションプログラムの内容を改竄した後、改竄後のアプリケーションプログラムを署名対象データとして自分自身を署名者とする電子署名を新たに行い、この新たな電子署名を付加して改竄後のアプリケーションプログラムを再配布することが可能である。このように、電子署名に対する改竄が行われた場合、上述したAndroid(登録商標)をOSとして利用している端末装置などでは、有効な改竄検知を行うことができない。
一方、前掲の特許文献3,4に記載されているように、予め登録されているアプリケーションプログラムだけについて、その実行を許可するような運用を行った場合、適切な登録作業が行われている限り、改竄されたプログラムの実行を阻止することができる。しかしながら、実際には、配布を受けたプログラムが改竄されたものであるか否かをユーザが正しく判断することは困難であり、また、仮に改竄されていないプログラムであることが判明した場合でも、ユーザがこれを個別に登録する作業を行う必要があるため、ユーザに煩雑な作業負担を課す結果になる。
そこで本発明は、電子署名に対する改竄が行われた場合にも、有効な改竄検知を行うことができ、更に、改竄なしと判定されたアプリケーションプログラムについては、ユーザに登録作業の負担を課すことなしに、実行許可リストへの自動登録が行われるアプリケーションプログラムの実行方法を提供することを目的とする。
(1) 本発明の第1の態様は、コンピュータが、アプリケーションプログラムを実行するアプリケーションプログラムの実行方法において、
コンピュータが、実行対象となるアプリケーションプログラムを含むデータファイルを入力する入力段階と、
コンピュータが、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階と、
コンピュータが、改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別コードを、実行許可リストに登録するリスト自動登録段階と、
コンピュータが、起動状態にあるアプリケーションプログラムの識別コードを認識する起動アプリ認識段階と、
コンピュータが、起動アプリ認識段階において認識した識別コードが実行許可リストに登録されているか否かを判定する登録有無判定段階と、
コンピュータが、登録有無判定段階において未登録と判定された場合に、当該未登録アプリを登録するか否かをユーザに問い合わせる登録照会段階と、
コンピュータが、問い合わせに対するユーザの回答として、登録する旨の回答があった場合には、未登録アプリの識別コードを実行許可リストに登録した上で当該アプリの実行を許可し、登録しない旨の回答があった場合には、当該未登録アプリの実行を中止させる回答処理段階と、
を行い、
入力段階では、改竄チェック機能付アプリケーションプログラムと、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルを入力し、
署名情報は、アプリケーションプログラムを署名対象データとする電子署名処理によって得られた情報であり、
秘匿情報は、改竄チェック機能付アプリケーションプログラムおよび署名情報を構成するデータの中の所定部分を秘匿化対象データとして抽出し、抽出した秘匿化対象データに対する秘匿化処理を施して得られた情報であり、
改竄判定段階は、署名情報に基づいて改竄の有無を確認する第1の確認段階と、秘匿情報に基づいて改竄の有無を確認する第2の確認段階と、を有し、
改竄チェック機能付アプリケーションプログラムには、秘匿化処理で行われた処理プロセスを勘案して秘匿化対象データに対する秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、改竄チェックルーチンを実行することにより第2の確認段階が行われるようにしたものである。
(2) 本発明の第2の態様は、上述した第1の態様に係るアプリケーションプログラムの実行方法において、
一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
秘匿情報が、秘匿化対象データを一方の鍵を用いて暗号化することにより得られた情報であり、
改竄チェックルーチンが、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報を他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイルから抽出した秘匿化対象データとが一致していた場合に改竄なしとの確認を行うようにしたものである。
(3) 本発明の第3の態様は、上述した第1の態様に係るアプリケーションプログラムの実行方法において、
秘匿情報が、秘匿化対象データに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して作成された情報であり、
改竄チェックルーチンが、入力段階で入力したデータファイルから抽出した秘匿化対象データに対して、特定鍵を用いたダイジェスト化処理を施して得られる情報が、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報と一致していた場合に改竄なしとの確認を行うようにしたものである。
(4) 本発明の第4の態様は、上述した第1〜第3の態様に係るアプリケーションプログラムの実行方法において、
OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータが、第1の確認段階をOSプログラムに基づいて実行し、第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行するようにしたものである。
(5) 本発明の第5の態様は、上述した第4の態様に係るアプリケーションプログラムの実行方法において、
OSプログラムが、複数のアプリケーションプログラムを所定のタイミングで切り替えながら実行させるマルチタスク処理機能を有しており、
コンピュータが、アプリケーションプログラムの1つとして用意された監視プログラムによって、リスト自動登録段階、起動アプリ認識段階、登録有無判定段階、登録照会段階、回答処理段階を実行するようにしたものである。
(6) 本発明の第6の態様は、上述した第5の態様に係るアプリケーションプログラムの実行方法において、
コンピュータが、OSプログラムによって、個々のアプリケーションプログラムについて、識別コード・起動時・終了時を示すログ情報を記録する処理を実行し、
コンピュータが、監視プログラムによって起動アプリ認識段階を実行する際に、ログ情報を参照することにより起動状態にあるアプリケーションプログラムの識別コードを認識するようにしたものである。
(7) 本発明の第7の態様は、上述した第1〜第6の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階、回答処理段階、および起動アプリ認識段階において、バージョンの異なるアプリケーションプログラムについては、それぞれ異なる識別コードを用いた処理を行うようにしたものである。
(8) 本発明の第8の態様は、上述した第7の態様に係るアプリケーションプログラムの実行方法において、
同一のファイル名をもったデータファイルに含まれるアプリケーションプログラムであっても、ハッシュ値が異なる場合は、異なるバージョンと認識するようにしたものである。
(9) 本発明の第9の態様は、上述した第1〜第8の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが外部の記憶装置もしくはサーバ装置内に保存された実行許可リストに対する登録を行い、
登録有無判定段階で、コンピュータが外部の記憶装置もしくはサーバ装置内に保存された実行許可リストを参照することにより判定を行うようにしたものである。
(10) 本発明の第10の態様は、上述した第1〜第9の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが実行許可リストを暗号化する処理を行い、
登録有無判定段階で、コンピュータが暗号化されている実行許可リストを復号して内容の参照を行うようにしたものである。
(11) 本発明の第11の態様は、上述した第1〜第10の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが、識別コードとともに、入力段階で入力したデータファイル内に含まれている所定のチェックコードを登録するようにし、
登録有無判定段階で、コンピュータが、データファイル内に含まれているチェックコードと実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うようにしたものである。
(12) 本発明の第12の態様は、上述した第1〜第10の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが、識別コードとともに、入力段階で入力したデータファイル内に含まれている所定の情報に対して一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードを登録するようにし、
登録有無判定段階で、コンピュータが、データファイル内に含まれている上記所定の情報に対して上記一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードと、実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うようにしたものである。
(13) 本発明の第13の態様は、上述した第5または第6の態様に係るアプリケーションプログラムの実行方法に用いる監視プログラムを独立して配布するようにしたものである。
本発明に係るアプリケーションプログラムの実行方法では、アプリケーションプログラムは、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルとして入力され、署名情報の正当性だけでなく、秘匿情報の正当性の確認も行われる。このため、アプリケーションパッケージ自体の改竄だけでなく、署名情報の改竄も検知することができるようになり、電子署名に対する改竄が行われた場合にも、有効な改竄検知が可能になる。しかも、アプリケーションプログラムに、自分自身が改竄されているか否かを判定する改竄チェックルーチンが含まれているため、当該アプリケーションプログラムを実行することにより、改竄の検知が可能になる。また、改竄されていない旨の判定がなされた場合には、実行許可リストへの自動登録が行われるため、ユーザが登録作業を行う必要はなくなる。
署名情報を付加した従来の一般的なアプリケーションプログラムの配布方法を示すブロック図である。 図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の正当性を確認する処理を示すブロック図である。 本発明に係るアプリケーションプログラムの配布用ファイル作成装置の基本構成を示すブロック図である。 本発明に係るアプリケーションプログラムの配布実行方法の変形例を示すブロック図である。 本発明に係るアプリケーションプログラムの実行方法で利用される監視プログラムの監視ルーチンの手順を示す流れ図である。 図17に示す起動アプリ認識段階S21で起動アプリの認識に利用されるログ情報の一例を示す図である。 本発明に係るアプリケーションプログラムの実行方法で利用される実行許可リストの一例を示す図である。 図17に示す登録照会段階S24でユーザに提示されるメッセージ画面の一例を示す図である。 自己改竄チェック機能をもたない通常アプリを起動したときの処理手順を示す流れ図である。 自己改竄チェック機能をもつアプリを起動したときの処理手順を示す流れ図である。
以下、本発明を図示する実施形態に基づいて説明する。なお、本発明に係るアプリケーションプログラムの実行方法は、特願2012−099139号(平成24年4月24日出願、早期審査に基づき平成24年6月28日特許査定)に記載された発明(以下、先願発明という)に係るアプリケーションプログラムの配布実行方法および改竄検知方法を利用することを前提としている。そこで、以下、§1〜§8において、先願発明に係るアプリケーションプログラムの配布実行方法および改竄検知方法を説明し、§9および§10において、これを利用した本発明に係るアプリケーションプログラムの実行方法を説明することにする。§1〜§8に記載した実施形態は、先願の§1〜§8に記載した実施形態と同一である。
<<< §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が、アプリケーションパッケージ21Aおよび署名情報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(s1)を用いた所定の確認方法により、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を取り出すことにより、当該秘匿情報の入手を行うようにすればよい。
<<< §9.実行許可リストに基く実行制御 >>>
本発明に係るアプリケーションプログラムの実行方法の特徴は、アプリケーションプログラムの実行プロセスにおいて、実行許可リストに予め登録されているアプリケーションプログラムについてのみ、その実行を許可するという実行制御方法を採用しつつ、§1〜§8において述べた改竄検知方法を実行し、改竄が検知されなかったアプリケーションプログラムについては、リストへの自動登録を行うようにする点にある。そこで、まず、実行許可リストに基いてアプリケーションプログラムの実行制御を行う具体的な方法を説明する。
ここでは、これまで述べてきた例と同様に、Android(登録商標)をOSとして採用したスマートホンやタブレット型電子機器(いわゆる、Android端末)への適用例を述べることにする。この場合、Android端末に与えられるデータファイル(改竄チェック機能付アプリケーションプログラムが含まれているデータファイル)は、たとえば、図5に示すような配布用ファイル20A(APKファイル)の形式で配布されることになる。ここで述べる実施形態では、アプリケーションプログラムの実行端末において、実行許可リストに基づく制御を行うために、専用のプログラムが用意される。このプログラムは、OSの管理下で動作するアプリケーションプログラムの1つであるが、その役割は、専ら他のアプリケーションプログラムの動作を監視し、その制御を行うことにある。そこで、本願では、このプログラムのことを、他のアプリケーションプログラムとは区別して「監視プログラム」と呼ぶことにする。また、以下の説明では、単に「アプリケーションプログラム」といった場合、「監視プログラム」を除くアプリケーションプログラムを意味するものとする。
Androidをはじめとする多くのOSは、複数のアプリケーションプログラムを並行して実行させるマルチタスク処理機能を有している。もちろん、一般的なCPUは、同時には1つのアプリケーションプログラムを実行する機能しか有していないが、マルチタスク処理機能を有するOSプログラムは、複数のアプリケーションプログラムを所定のタイミングで順次切り替えながらCPUに実行させる処理を行うことができる。したがって、複数のアプリケーションプログラムを同時に起動状態にして、これらを時分割で切り替えることにより、あたかも複数のアプリケーションプログラムが同時に実行されているような制御が可能になる。
ここで述べる実施形態の場合、監視プログラムは、いわゆる「常駐プログラム」として常に起動状態に維持され、他のアプリケーションプログラムの監視を行う。上述したように、マルチタスク処理機能を有するOS制御下では、複数のアプリケーションプログラムを同時に起動状態にすることができるので、監視プログラムを常に起動状態に維持したとしても、他のアプリケーションプログラムの起動に支障が生じることはない。なお、この監視プログラムそれ自体が攻撃されて改竄されてしまうことを防ぐために、実用上は、何らかの耐タンパ化処理が施された監視プログラムを用いるのが好ましい。
図17は、アプリケーションプログラムの実行端末に組み込まれた監視プログラムによって実行される監視ルーチンの手順を示す流れ図である。標題部に「監視プログラム(1)」と記載されているのは、ここに示す手順が、監視プログラムに含まれている監視ルーチンの手順であることを示すものである。後述するように、この監視プログラムには、「監視プログラム(2)」として示すリスト自動登録ルーチンの手順も含まれている。
まず、ステップS21において、現在、起動状態にあるアプリケーションプログラムの識別コードを認識する起動アプリ認識段階が実行される。Androidをはじめとする一般的なOSには、個々のアプリケーションプログラムについて、識別コード・起動時・終了時を示すログ情報を記録する処理機能が備わっている。したがって、監視プログラムによって起動アプリ認識段階S21を実行する際には、このログ情報を参照することにより、現時点で起動状態にあるアプリケーションプログラムの識別コードを認識することができる。
図18は、AndroidOSによって作成されたログ情報の一例を示す図である。この例では、AP3,AP1,AP6といったアプリケーションプログラムのファイル名を個々のアプリケーションを特定する識別コードとして用いている。そして、この識別コードと、起動もしくは終了のいずれか一方の動作と、日時と、を並べた1行分のデータが単位ログを構成しており、このような単位ログを時系列で複数組並べた集合体によってログ情報が構成されている。
具体的には、1行目の単位ログは、識別コード「AP3」で特定されるアプリケーションAP3が、2012年7月21日16時51分に起動されたことを示し、2行目の単位ログは、識別コード「AP1」で特定されるアプリケーションAP1が、2012年7月21日16時58分に起動されたことを示し、3行目の単位ログは、識別コード「AP1」で特定されるアプリケーションAP1が、2012年7月21日17時14分に終了されたことを示し、4行目の単位ログは、識別コード「AP6」で特定されるアプリケーションAP6が、2012年7月21日17時33分に起動されたことを示し、5行目の単位ログは、識別コード「AP3」で特定されるアプリケーションAP3が、2012年7月21日17時53分に終了されたことを示している。結局、図示のようなログ情報が得られた時点では、アプリケーションAP6のみが起動状態であるとの認識がなされる。
AndroidOSは、インストールされているアプリケーションプログラムが起動されたり、終了されたりするたびに、図示のようなログ情報をOS用の記録領域に記録してゆくことになる。もちろん、監視プログラムもアプリケーションプログラムの1つであるので、監視プログラム自身の起動や終了を示すログも、ログ情報として記録されることになる。
一方、監視プログラム用の記録領域には、図19に例示するような実行許可リストが用意されている。この実行許可リストは、実行が許可されているアプリケーションプログラムの識別コードを記録したリストであり、いわば「ホワイトリスト」と呼ぶべきリストである。図19(a) に示す例は、AP1,AP2,AP3といったアプリケーションプログラムのファイル名を個々のアプリケーションを特定する識別コードとして用い、これら識別コードを列挙することにより実行許可リストが構成されている。
これに対して、図19(b) に示す例は、アプリケーションプログラムのファイル名にそのバージョン番号を括弧書きで付加したものを識別コードとして用いたものであり、バージョンが異なるアプリケーションプログラムには、それぞれ異なる識別コードが付与され、相互に区別されることになる。たとえば、同一のファイル名AP1をもったアプリケーションプログラムであっても、バージョン1.0のプログラムには識別コードAP1(1.0)が付与され、バージョン2.0のプログラムには識別コードAP1(2.0)が付与され、相互に異なるアプリケーションプログラムとして取り扱われることになる。なお、バージョンを区別して取り扱う場合は、図18に示すログ情報にも、AP1(1.0)のようにバージョン番号を付加した識別コードを用いるようにする。
さて、図17に示す起動アプリ認識段階S21において、現時点で起動状態にあるアプリケーションプログラム(以下、単に、起動アプリという)の識別コードが認識できたら、続いて、認識した識別コードが実行許可リストに登録されているか否かを判定する登録有無判定段階が実行される。すなわち、ステップS22において、図19(a) に示すような実行許可リストが参照され、ステップS23において、認識された起動アプリの識別コードがリストに掲載されているか否かが判定される。なお、ステップS21において起動アプリが複数認識された場合は、ステップS22以下の処理は、ステップS28を経て、個々の起動アプリごとにそれぞれ繰り返し実行されることになる。
前述したように、図18に示すようなログ情報が得られた場合は、アプリケーションAP6が起動アプリとして認識されるので、ステップS22において、実行許可リストを参照することにより、識別コードAP6が掲載されているか否かが判定される。ここで、図19(a) に示すような実行許可リストが用意されていたとすると、識別コードAP6は掲載されているため、起動アプリAP6は登録済みのアプリケーションプログラムと判定されることになる。その結果、ステップS23からステップS28へ進むことになる。
これに対して、登録有無判定段階において未登録と判定された場合、すなわち、ステップS23においてリストに掲載されていないと判定された場合は、ステップS24へ進み登録照会段階が行われる。たとえば、ログ情報から、アプリケーションプログラムAP7が起動アプリとして認識された場合は、識別コードAP7は図19(a) に示す実行許可リストには掲載されていないので、未登録アプリと判定される。その結果、ステップS23からステップS24へと進み、登録照会段階が実行される。
ステップS24の登録照会段階では、当該未登録アプリAP7を実行許可リストに登録するか否かをユーザに問い合わせる処理が行われる。たとえば、Android端末のディスプレイ画面上に、図20に示すようなメッセージ画面を提示する処理を行えばよい。ユーザは、このようなメッセージ画面による問い合わせに対して、「登録する」ボタンまたは「登録しない」ボタンをタップすることにより回答を行う。「登録する」旨の回答は、未登録アプリAP7を登録して実行する指示に相当し、「登録しない」旨の回答は、未登録アプリAP7を登録せず、実行もしない指示に相当する。
ユーザがいずれかのボタンをタップして、問い合わせに対する回答を行うと、当該回答に基づいて回答処理段階が行われる。すなわち、「登録する」ボタンのタップによって登録する旨の回答があった場合には、ステップS25からステップS26へと進み、当該未登録アプリAP7の識別コードを新たに実行許可リストに登録する処理が行われる。この場合、起動状態にある当該アプリAP7は、正式に実行が許可されたことになり、そのまま実行し続けることになる。一方、「登録しない」ボタンのタップによって登録しない旨の回答があった場合には、ステップS25からステップS27へと進み、当該未登録アプリAP7の実行を中止させる処理が行われる。
以上述べたステップS22〜S27の処理が、全起動アプリについて完了するまで、ステップS28を介して繰り返し実行されることになる。そして、全起動アプリについて処理が完了したら、ステップS28からステップS29へ進み、監視プログラムに対する終了指示が与えられていない限り、再び、ステップS21からの処理が繰り返されることになる。前述したとおり、この監視プログラムは、本来、「常駐プログラム」として常に起動状態に維持され、他のアプリケーションプログラムの監視を行うべきものである。したがって、通常は、ユーザによって監視プログラムに対する終了指示が与えられることはなく、ステップS29からステップS21へ戻る処理が繰り返されることになる。
上述したように、マルチタスク処理機能を有するOS制御下では、同時に起動状態となっている複数のアプリケーションプログラムが所定のタイミングで切り替えられながら順番に実行されることになる。したがって、図17に示す監視プログラムによる監視ルーチンの手順においても、ある時点で中断され、別なアプリケーションプログラムの実行に制御が移り、再び監視プログラムに制御が戻ってきた時点で中断されていた手順が再開される、という処理が繰り返されることになる。
もっとも、マルチタスク処理によるアプリケーションプログラムの切替期間は、msec程度のオーダーであるため、ユーザの立場からは、監視プログラムを含めた複数のアプリケーションプログラムが同時に動作しているように見える。たとえば、新たなアプリケーションプログラムAP7を起動させると、監視プログラムに制御が移った段階で、アプリAP7が起動アプリとして認識され、ステップS24の登録照会段階が行われる。したがって、ユーザから見ると、アプリAP7を起動させる操作を行ったら、直ちに図20に示すようなメッセージ画面が表示された状態になるので、監視プログラムの処理動作に切り替わったという違和感は生じない。
なお、監視プログラムもアプリAP7も、アプリケーションプログラムという点では対等であり、いずれもOSプログラムの制御下で動作するプログラムであるが、OSの機能を利用して、一方のアプリケーションプログラムから他方のアプリケーションプログラムを強制終了させることが可能である。ステップS27の実行中止処理も、このようなOSの機能を利用して、監視プログラムからアプリAP7を強制終了させる方法を採ればよい。具体的には、監視プログラムからOSに対して、アプリAP7を強制終了させるコマンドを引き渡すようにすれば、OSの制御機能により、アプリAP7を強制終了させ、実行を中止させることができる。
結局、監視プログラムは、図17に示す監視ルーチンを継続的に実行することにより、実行許可リストに登録されていない未登録アプリが起動状態になったか否かを常に監視する処理を行い、もし未登録アプリが起動状態になっていた場合には、ステップS24の登録照会段階を実行し、ユーザの回答に応じて、当該未登録アプリを登録して実行を許可するか、登録せずに実行を中止させるか、いずれかの処理を採ることになる。かくして、実行許可リストに登録されているアプリケーションプログラムのみが実行を許可されるような制御が可能になる。
以上、図17の流れ図を参照しながら、監視プログラムによる監視ルーチンの手順を説明した。続いて、個々のアプリケーションプログラムを起動する際の手順を述べながら、監視プログラムとの関係を説明しよう。
まず、「通常アプリ」を起動するときの処理手順を図21の流れ図を参照して説明する。ここでいう「通常アプリ」とは、自己改竄チェック機能を有していない、従来の一般的なアプリケーションプログラム(たとえば、図1に示すアプリケーションプログラム10)を指す。アプリケーションプログラムは、OSの制御下で起動される。すなわち、特定のアプリケーションプログラムを起動する旨の指示が与えられると、OSが当該特定のアプリケーションプログラムを実行するための環境を整える作業を行う。そして、準備が完了した時点で、当該特定のアプリケーションプログラムのルーチンが実行されることになる。
図21の流れ図は、「通常アプリ」に対して起動指示が与えられた場合の処理手順を示している。起動指示は、たとえば、ユーザによる起動操作によって与えられる。Android端末の場合、ユーザがホーム画面上で特定のアプリケーションプログラムのアイコンをタップする操作を行うと、当該プログラムに対する起動指示が与えられる。なお、既に述べたとおり、起動指示は、必ずしもユーザから与えられるとは限らず、場合によっては、OSや別なアプリケーションプログラムによって与えられる場合もある。
実は、この図21に示されているステップS7,S8,S11,S12の手順は、図7の流れ図に実行プロセスとして示されている同符号の各手順と同じものであり、各ステップの右脇に記載した括弧書きは、個々の手順の実行主体となるプログラムを示している。
まず、ステップS7では、OSプログラムによって、図6に示す第1の確認段階が行われる。この第1の確認段階は、アプリケーションパッケージ21Aに対する署名情報22Aの正当性を確認する処理であり、その詳細は§3で述べたとおりである。第1の確認段階において否定的な結果が得られた場合、すなわち、署名情報の正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS8を経てステップS11へと進み、当該アプリケーションの実行は中止される。すなわち、当該アプリケーションプログラムに含まれるルーチンが実行される前に、OSによって、実行が阻止されることになる。一方、第1の確認段階において肯定的な結果が得られた場合は、ステップS8を経てステップS12へと進み、当該アプリケーションプログラムが実行される。前述したとおり、Android端末の場合、ステップS7,S8,S11の処理は、OSプログラムの標準仕様に基づく処理である。
続いて、「自己改竄チェック機能をもつアプリ」を起動するときの処理手順を図22の流れ図を参照して説明する。ここでいう「自己改竄チェック機能をもつアプリ」とは、図5に示すアプリケーションプログラム10Aのように、改竄チェックルーチンFを含んでおり、自分自身で改竄チェック処理を行う機能をもった本発明に特有のアプリケーションプログラムを指す。
図22の流れ図は、「自己改竄チェック機能をもつアプリ」に対して起動指示が与えられた場合の処理手順を示している。この場合も、起動指示は、ユーザから与えられる場合もあれば、OSや別なアプリケーションプログラムによって与えられる場合もある。この図22に示されている手順のうち、ステップS7〜S12の手順は、図7の流れ図に実行プロセスとして示されている同符号の各手順と同じものである。一方、ステップS13,S14の手順は、監視プログラムによるリスト自動登録ルーチンの手順である。この図22でも、各ステップの右脇に記載した括弧書きは、個々の手順の実行主体となるプログラムを示している。ステップS13,S14の脇に「監視プログラム(2)」と記載されているのは、これらの手順が監視プログラムに含まれているリスト自動登録ルーチンの手順であることを示すものである。
要するに、図22の流れ図に示す手順は、図7の流れ図におけるステップS7以降の手順に、新たにステップS13,S14を追加したものである。§3で述べたとおり、「自己改竄チェック機能をもつアプリ」に対して起動指示が与えられた場合、まずOSプログラムにより、署名情報の正当性を確認する第1の確認段階S7が実行される。そして、改竄なしとの結果が得られた場合は、当該アプリが起動され、自分自身によって、秘匿情報の正当性を確認する第2の確認段階S9が実行される。これらステップS7〜S10の手順は改竄判定段階を構成することになり、ステップS10において肯定的な判定がなされた場合には、署名情報と秘匿情報の双方について正当性が確認されたことになり、最終的に改竄なしとの判定結果が得られたことになる。一方、ステップS8,S10のいずれかで否定的な判定がなされた場合には、改竄判定段階において改竄ありとの判定結果が得られたことになり、ステップS11へと進み、当該「自己改竄チェック機能をもつアプリ」の実行は中止される。
ステップS13,S14の手順は、この改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別コードを、実行許可リストに登録するリスト自動登録段階の手順であり、監視プログラム内の自動登録ルーチンによって実行されることになる。すなわち、ステップS13において、当該「自己改竄チェック機能をもつアプリ」の識別コードが既に実行許可リストに登録されているか否かの判定が行われ、登録済みであった場合には、ステップS13からステップS12へと進むが、未登録であった場合には、ステップS14において、当該識別コードを実行許可リストに登録した上で、ステップS12へと進む処理が行われる。いずれの場合も、ステップS12において、当該アプリが実行されることになり、しかも当該アプリの識別コードが実行許可リストに登録された状態になる。
なお、図22の流れ図では、説明の便宜上、ステップS10→S13→S14→S12のような順序で各手順が実行される様子が示されているが、実際には、自己改竄チェック機能をもつアプリと監視プログラムとは、OSプログラムのマルチタスク処理機能により並行して動作していることになるので、この流れ図は必ずしも時系列的な順序を示しているわけではない。たとえば、ステップS10で肯定的な判定がなされた場合、アプリケーションプログラムは、監視プログラムに対して、自己の識別コードを引き渡して実行許可リストに登録する旨の登録コマンドを与え、そのままステップS12の実行段階を行えばよい。一方、登録コマンドを受け取った監視プログラムは、引き渡された識別コードについて、リスト自動登録段階(ステップS13,S14)を実行すればよい。あるいは、ステップS8を経てアプリが起動されたことを監視プログラムが検知した場合に、監視プログラムによって当該アプリの実行を一旦停止させ、ステップS9,S10をスキップしてステップS13の登録済か否かの判断を行うようにしてもよい。この場合、当該アプリが実行許可リストに登録済であれば、ステップS12へと進み、未登録であれば、ステップS9へ戻るようにすればよい。
続いて、各アプリケーションプログラムと監視プログラムとの関係を見てみよう。まず、従来の「通常アプリ」を初めて起動した場合を考えてみる。この場合、図21の流れ図に示すように、ステップS7の第1の確認段階において署名情報の確認が行われ、改竄なしと判断された場合には、ステップS12において、当該「通常アプリ」が起動され、その実行が開始される。ただ、監視プログラムが並行して実行されているため、図17の流れ図のステップS21において、当該「通常アプリ」の起動が認識される。当該「通常アプリ」は実行許可リストには登録されていない未登録アプリであるため、ステップS24の登録照会段階が実行され、図20に例示するようなメッセージが提示され、登録するか否かの選択が行われる。もちろん、このとき、当該「通常アプリ」も起動状態にあるが、OSのマルチタスク処理機能により、監視プログラムに切り替えられた時点で、図示のメッセージが提示されることになる。
結局、ユーザがホーム画面やアプリ画面からアイコンをタップして未登録の「通常アプリ」を起動したり、他のアプリケーションプログラムからの指示に基づいて未登録の「通常アプリ」が起動したりした場合、図20のようなメッセージが提示され、実行許可リストに登録するか否かの選択を迫られることになる。「通常アプリ」の場合も、一応、署名情報の正当性確認が行われているので、ユーザは、当該「通常アプリ」の安全性をある程度認識することができる。ただ、前述したとおり、署名情報自体が改竄されているケースもあるので、安全性はそれほど高いものではない。したがって、ユーザは、当該アプリの実行により得られるであろうメリットと、改竄されていた場合に被るであろう損害のデメリットとを天秤にかけ、「登録する」/「登録しない」のいずれかを選択することになる。
ユーザが、当該アプリの実行を許可してもよいと判断した場合は、「登録する」ボタンをタップすればよい。そうすれば、ステップS26によって、当該アプリの識別コードが実行許可リストに登録されることになるので、以後、当該アプリに関して図20のようなメッセージが提示されることはなくなる。一方、ユーザが、少なくともその時点では、当該アプリの実行を許可しない方がよいと判断した場合は、「登録しない」ボタンをタップすればよい。そうすれば、ステップS27によって、当該アプリの実行は中止され、未登録の状態のままにおかれる。この場合、当該アプリを起動するたびに、図20のようなメッセージが提示されることになる。
このように、監視プログラムによって、常時、起動状態にあるアプリケーションプログラムの監視を行い、未登録アプリが起動状態にあることが検知されたら、ステップS24の登録照会段階によってユーザの判断を仰ぐようにすれば、実行対象となるプログラムを、ユーザの意思で実行許可リストに登録したプログラムのみに制限することができる。
しかしながら、実際には、上記運用は必ずしも奏功していない。その第1の理由は、一般ユーザにとって、個々のアプリケーションプログラムが改竄されているか否かを判定することが難しいためである。一般ユーザにとって、アプリケーションプログラムの信頼性を評価する手掛かりは、著名なソフトウエアであるとか、信頼性あるベンダーから供給されたソフトウエアであるとか、信頼性あるサイトからダウンロードしたソフトウエアであるといった情報であるが、クラッカーによって改竄されたソフトウエアが流通した場合、これらの手掛かりは役に立たない。したがって、実用上、一般ユーザが、個々のアプリケーションプログラムについて、改竄されているか否かを判定することは極めて困難である。
そして、第2の理由は、一般ユーザにとって、図20に示すようなメッセージに応じて、未登録アプリを実行許可リストに手動登録する作業は煩雑であり、事実上、どのようなアプリケーションプログラムであっても「登録する」ボタンをタップすることが習慣化してしまうためである。もちろん、Android端末の工場出荷時にプリインストールされているアプリケーションプログラム(安全性が保証されているプログラム)については、当初から実行許可リストに掲載しておくようにすれば、初回起動時にユーザが手動登録の操作を行うことを省くことができるが、端末購入後にユーザがダウンロードした「通常アプリ」については、初回起動時にユーザが手動登録せざるを得ない。
本発明に係る「自己改竄チェック機能をもつアプリ」を利用すれば、上記問題を解決することができる。すなわち、「自己改竄チェック機能をもつアプリ」を初めて起動した場合、図22の流れ図に示すように、改竄判定段階(ステップS7〜S10)によって署名情報の正当性および秘匿情報の正当性の確認が行われ、最終的に改竄なしと判定されると、監視プログラムによってリスト自動登録段階(ステップS13,S14)が実行される。これにより、当該アプリの識別コードが実行許可リストに自動登録されることになる。一方、並行して実行されている監視プログラムでは、図17の流れ図のステップS21において、当該「自己改竄チェック機能をもつアプリ」の起動が認識されるが、ステップS23において登録アプリと判定されるため、登録照会段階S24が実行されることはない。
結局、ユーザがホーム画面やアプリ画面からアイコンをタップして未登録の「自己改竄チェック機能をもつアプリ」を起動したり、他のアプリケーションプログラムからの指示に基づいて未登録の「自己改竄チェック機能をもつアプリ」が起動したりした場合、当該アプリが改竄されていなければ、そのまま実行が継続されることになる(改竄されていた場合は、図22のステップS11において実行中止される)。すなわち、ユーザには、図20のようなメッセージが提示されることはないので、ユーザが「登録する」/「登録しない」の選択を行う必要はなくなる。
もちろん、改竄判定段階(ステップS7〜S10)による判定結果は、必ずしも100%の精度をもった結果ではないが、一般ユーザによる判定に比べてはるかに高い精度をもった結果であり、実用上、十分に信頼できる結果である。しかも、そのような十分に信頼できる結果に基づいて、実行許可リストへの自動登録が行われることになる。かくして、ユーザは、改竄の有無を判定したり、煩雑な手動登録の操作を行ったりする必要がなくなる。このように、監視プログラムを導入した装置で、本発明に係る「自己改竄チェック機能をもつアプリ」を実行すれば、改竄なしと判定されたアプリケーションプログラムについては、ユーザに登録作業の負担を課すことなしに実行許可リストへの自動登録を行うことができるメリットが得られる。
<<< §10.実行許可リストに基く実行制御の変形例 >>>
最後に、§9で述べた実行許可リストに基く実行制御を行う上でのいくつかの変形例を述べておく。
<10−1:アプリケーションプログラムのバーションの区別>
本発明に用いる実行許可リストは、実行が許可されたアプリケーションプログラムを特定する識別コードを掲載した「ホワイトリスト」というべきものである。図19(a) には、識別コードとして、各アプリケーションプログラムのファイル名を用いた例を示し、図19(b) には、ファイル名にバージョン番号を付加したコードを用いた例を示した。
一般に、アプリケーションプログラムのバージョンアップ版を提供する場合、差分データファイルだけを配布する形態が採られたり、新バージョンのデータファイルをそっくり配布する形態が採られたりする。後者の場合は、新バージョンのプログラムは旧バージョンのプログラムとは全く別の独立したプログラムになるため、実行許可リスト上でも別個のアプリケーションプログラムとして取り扱うのが好ましい。したがって、実用上は、図19(b) に示す例のように、バージョンごとにそれぞれ異なる識別コードを付与するようにし、リスト自動登録段階、回答処理段階、および起動アプリ認識段階において、バージョンの異なるアプリケーションプログラムについては、それぞれ異なる識別コードを用いた処理を行うようにするのが好ましい。
なお、バージョンの異なるアプリケーションプログラムを確実に区別するには、同一のファイル名をもったデータファイルに含まれるアプリケーションプログラムであっても、ハッシュ値が異なる場合は、異なるバージョンと認識するようにすればよい。一般に、アプリケーションプログラムを構成するデータの内容が完全に同一でなければ、ハッシュ値も同一にはならない。したがって、たとえば、アプリケーションプログラムを構成するデータ(APKファイル全体でもよいし、その一部でもよい)のハッシュ値を、当該アプリケーションプログラムの識別コードとして利用するようにすれば、バージョンの異なるアプリケーションプログラムの識別コードを確実に区別することができる。
<10−2:実行許可リストの格納場所>
上述したAndroid端末を用いた実施形態の場合、実行許可リストは、Android端末内で「常駐プログラム」として動作する監視プログラムによってアクセスされる情報であるので、Android端末内の記憶装置内に格納するのが最も一般的である。ただ、実行許可リストの格納場所は、必ずしもAndroid端末内に限定されるわけではなく、たとえば、Android端末に接続される外部の記憶装置や、Android端末からネットワークを介してアクセスされるサーバ装置に実行許可リストを格納してもかまわない。
この場合、リスト自動登録段階および回答処理段階で実行許可リストへの登録を行う際に、Android端末等のコンピュータは、外部の記憶装置もしくはサーバ装置内に保存された実行許可リストに対する登録を行い、登録有無判定段階では、当該外部の記憶装置もしくはサーバ装置内に保存された実行許可リストを参照することになる。
<10−3:実行許可リストの暗号化>
§9で述べたアプリケーションプログラムの実行方法では、実行許可リストが重要な役割を果たすことになり、この実行許可リストが何らかの不正操作によって改竄されてしまうと、監視プログラムによる本来の実行制御機能は失われてしまう。そこで、より信頼性の高い制御を行うためには、実行許可リストに対して暗号化対策を施すようにすればよい。
具体的には、リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、実行許可リストを暗号化する処理を行うようにすればよい。たとえば、実行許可リストに登録する識別コードや後述するチェックコードを個別に暗号化した上で登録するようにしてもよいし、実行許可リストを復号した状態で新たな識別コードやチェックコードを登録し、登録後の実行許可リストを再び暗号化するようにしてもよい。登録有無判定段階では、暗号化されている実行許可リストを復号して内容の参照を行うことになる。なお、暗号化および復号には、監視プログラム内に含まれている専用鍵を用いるようにすればよい。
<10−4:チェックコードの付加>
実行許可リストの信頼性を高める別な方法は、識別コードの他に何らかのチェックコードを登録しておく方法である。すなわち、リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、識別コードとともに、入力段階で入力したデータファイル内に含まれている何らかのデータをチェックコードとして登録するようにし、登録有無判定段階で、データファイル内に含まれているチェックコードと実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うようにすればよい。
たとえば、図5に示すAPKファイル20Aの場合、「Aの第2の鍵K(a2)」(プログラム提供者の公開鍵)をチェックコードとして用い、当該アプリケーションプログラムを実行許可リストに登録する際には、識別コードとともに、「Aの第2の鍵K(a2)」をチェックコードとして登録しておくようにする。そして、登録有無判定段階(図17のステップS22,S23)では、実行許可リストに当該識別コードと当該チェックコードの双方が登録されていることが確認された場合に、「登録されている」との判定を行うようにすればよい。
もし、識別コードは掲載されているものの、チェックコードが不一致ということになった場合は、実行許可リストに対して何らかの不正行為(たとえば、不正な方法で、実行許可リストに掲載されている識別コードを別なアプリの識別コードに書き換えるような行為)が行われた可能性があると判断することができる。
もちろん、チェックコードは、プログラム提供者の公開鍵に限定されるものではなく、この他にも様々な情報をチェックコードとして用いることができる。たとえば、図5に示すAPKファイル20Aの場合、「Aの第2の鍵K(a2)」(プログラム提供者の公開鍵)の他、Aの署名情報22A全体やAPKファイル20A全体をチェックコードとして用いてもかまわない。
もっとも、Aの署名情報22A全体やAPKファイル20A全体を、そのままチェックコードとして用いると、チェックコードのデータ容量が膨大なものになり、チェックコードを登録する実行許可リストのデータ容量も膨大なものになってしまう。そこで、実用上は、入力段階で入力したデータファイル内に含まれている所定の情報(たとえば、図5に示すAの署名情報22A全体やAPKファイル20A全体)に対してハッシュ関数のような一方向性関数を作用させるダイジェスト化処理を行い、その結果得られたデータをチェックコードとして登録すればよい。
この場合、登録有無判定段階では、データファイル内に含まれている上記所定の情報に対して、上記一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードと、実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うことになる。なお、ダイジェスト化には、監視プログラム内に含まれている専用鍵を用いるようにすればよい。
<10−5:監視プログラムの代替>
これまで述べてきた実施形態では、監視プログラムに、図17の流れ図に示す監視ルーチン(監視プログラム(1)として示す手順)と、図22の流れ図に示すリスト自動登録段階のルーチン(監視プログラム(2)として示す手順)とが含まれる例を示したが、もちろん、監視プログラム(1)と監視プログラム(2)とは、それぞれ別個のプログラムによって構成してもかまわない。
また、監視プログラム(2)の手順は、「自己改竄チェック機能をもつアプリ」内に組み込んでしまうことも可能である。この場合、図22に示すステップS13,S14の手順は「自己改竄チェック機能をもつアプリ」によって実行されることになり、当該アプリケーションプログラムは、自分自身の改竄チェックを行う機能に加えて、自分自身を実行許可リストに登録する機能を備えることになる。
あるいは、監視プログラム(1)および監視プログラム(2)の手順を、そっくりOSプログラムに組み込んでしまうことも可能である。この場合、これまで述べてきた実施形態において監視プログラムの役割として述べた処理は、すべてOSプログラムによって実行されることになる。
ただ、現在提供されているAndroidOSには、監視プログラム(1),(2)の機能は備わっていないので、現在のAndroid端末を利用して本発明を実施する場合には、上述した実施形態のように、監視プログラムとして機能するアプリケーションプログラムを用意するのが好ましい。要するに、端末装置のOSプログラムが、複数のアプリケーションプログラムを所定のタイミングで切り替えながら実行させるマルチタスク処理機能を有していれば、アプリケーションプログラムの1つとして用意された監視プログラムによって、リスト自動登録段階、起動アプリ認識段階、登録有無判定段階、登録照会段階、回答処理段階を実行することができる。
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:プログラム提供者
AP1〜AP7:アプリケーションプログラムのファイル名
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〜S29:流れ図の各ステップ
U,U1〜U3:ユーザ
X:クラッカー

Claims (13)

  1. コンピュータが、アプリケーションプログラムを実行する方法であって、
    コンピュータが、実行対象となるアプリケーションプログラムを含むデータファイルを入力する入力段階と、
    コンピュータが、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階と、
    コンピュータが、前記改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別コードを、実行許可リストに登録するリスト自動登録段階と、
    コンピュータが、起動状態にあるアプリケーションプログラムの識別コードを認識する起動アプリ認識段階と、
    コンピュータが、前記起動アプリ認識段階において認識した識別コードが前記実行許可リストに登録されているか否かを判定する登録有無判定段階と、
    コンピュータが、前記登録有無判定段階において未登録と判定された場合に、当該未登録アプリを登録するか否かをユーザに問い合わせる登録照会段階と、
    コンピュータが、前記問い合わせに対するユーザの回答として、登録する旨の回答があった場合には、前記未登録アプリの識別コードを前記実行許可リストに登録した上で当該アプリの実行を許可し、登録しない旨の回答があった場合には、当該未登録アプリの実行を中止させる回答処理段階と、
    を有し、
    前記入力段階では、改竄チェック機能付アプリケーションプログラムと、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルを入力し、
    前記署名情報は、前記アプリケーションプログラムを署名対象データとする電子署名処理によって得られた情報であり、
    前記秘匿情報は、前記改竄チェック機能付アプリケーションプログラムおよび前記署名情報を構成するデータの中の所定部分を秘匿化対象データとして抽出し、抽出した前記秘匿化対象データに対する秘匿化処理を施して得られた情報であり、
    前記改竄判定段階は、前記署名情報に基づいて改竄の有無を確認する第1の確認段階と、前記秘匿情報に基づいて改竄の有無を確認する第2の確認段階と、を有し、
    前記改竄チェック機能付アプリケーションプログラムには、前記秘匿化処理で行われた処理プロセスを勘案して前記秘匿化対象データに対する前記秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、前記改竄チェックルーチンを実行することにより前記第2の確認段階が行われることを特徴とするアプリケーションプログラムの実行方法。
  2. 請求項1に記載のアプリケーションプログラムの実行方法において、
    一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
    秘匿情報が、秘匿化対象データを前記一方の鍵を用いて暗号化することにより得られた情報であり、
    改竄チェックルーチンが、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報を前記他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイルから抽出した秘匿化対象データとが一致していた場合に改竄なしとの確認を行うことを特徴とするアプリケーションプログラムの実行方法。
  3. 請求項1に記載のアプリケーションプログラムの実行方法において、
    秘匿情報が、秘匿化対象データに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して作成された情報であり、
    改竄チェックルーチンが、入力段階で入力したデータファイルから抽出した秘匿化対象データに対して、前記特定鍵を用いた前記ダイジェスト化処理を施して得られる情報が、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報と一致していた場合に改竄なしとの確認を行うことを特徴とするアプリケーションプログラムの実行方法。
  4. 請求項1〜3のいずれかに記載のアプリケーションプログラムの実行方法において、
    OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータが、第1の確認段階を前記OSプログラムに基づいて実行し、第2の確認段階をアプリケーションプログラム内の改竄チェックルーチンに基づいて実行することを特徴とするアプリケーションプログラムの実行方法。
  5. 請求項4に記載のアプリケーションプログラムの実行方法において、
    OSプログラムが、複数のアプリケーションプログラムを所定のタイミングで切り替えながら実行させるマルチタスク処理機能を有しており、
    コンピュータが、アプリケーションプログラムの1つとして用意された監視プログラムによって、リスト自動登録段階、起動アプリ認識段階、登録有無判定段階、登録照会段階、回答処理段階を実行することを特徴とするアプリケーションプログラムの実行方法。
  6. 請求項5に記載のアプリケーションプログラムの実行方法において、
    コンピュータが、OSプログラムによって、個々のアプリケーションプログラムについて、識別コード・起動時・終了時を示すログ情報を記録する処理を実行し、
    コンピュータが、監視プログラムによって起動アプリ認識段階を実行する際に、前記ログ情報を参照することにより起動状態にあるアプリケーションプログラムの識別コードを認識することを特徴とするアプリケーションプログラムの実行方法。
  7. 請求項1〜6のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階、回答処理段階、および起動アプリ認識段階において、バージョンの異なるアプリケーションプログラムについては、それぞれ異なる識別コードを用いた処理を行うことを特徴とするアプリケーションプログラムの実行方法。
  8. 請求項7に記載のアプリケーションプログラムの実行方法において、
    同一のファイル名をもったデータファイルに含まれるアプリケーションプログラムであっても、ハッシュ値が異なる場合は、異なるバージョンと認識することを特徴とするアプリケーションプログラムの実行方法。
  9. 請求項1〜8のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが外部の記憶装置もしくはサーバ装置内に保存された実行許可リストに対する登録を行い、
    登録有無判定段階で、コンピュータが前記外部の記憶装置もしくはサーバ装置内に保存された実行許可リストを参照することにより判定を行うことを特徴とするアプリケーションプログラムの実行方法。
  10. 請求項1〜9のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが実行許可リストを暗号化する処理を行い、
    登録有無判定段階で、コンピュータが暗号化されている実行許可リストを復号して内容の参照を行うことを特徴とするアプリケーションプログラムの実行方法。
  11. 請求項1〜10のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが、識別コードとともに、入力段階で入力したデータファイル内に含まれている所定のチェックコードを登録するようにし、
    登録有無判定段階で、コンピュータが、データファイル内に含まれているチェックコードと実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うことを特徴とするアプリケーションプログラムの実行方法。
  12. 請求項1〜10のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、コンピュータが、識別コードとともに、入力段階で入力したデータファイル内に含まれている所定の情報に対して一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードを登録するようにし、
    登録有無判定段階で、コンピュータが、データファイル内に含まれている前記所定の情報に対して前記一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードと、実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うことを特徴とするアプリケーションプログラムの実行方法。
  13. 請求項5または6に記載のアプリケーションプログラムの実行方法に用いる監視プログラム。
JP2012190943A 2012-04-24 2012-08-31 アプリケーションプログラムの実行方法 Active JP5126447B1 (ja)

Priority Applications (2)

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

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012190943A JP5126447B1 (ja) 2012-08-31 2012-08-31 アプリケーションプログラムの実行方法

Publications (2)

Publication Number Publication Date
JP5126447B1 true JP5126447B1 (ja) 2013-01-23
JP2014048866A JP2014048866A (ja) 2014-03-17

Family

ID=47692925

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012190943A Active JP5126447B1 (ja) 2012-04-24 2012-08-31 アプリケーションプログラムの実行方法

Country Status (1)

Country Link
JP (1) JP5126447B1 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014164392A (ja) * 2013-02-22 2014-09-08 Dainippon Printing Co Ltd 情報処理装置および情報処理システム
JP2015087997A (ja) * 2013-10-31 2015-05-07 株式会社東芝 電子機器および方法
JP2019040256A (ja) * 2017-08-22 2019-03-14 株式会社東芝 情報処理装置、情報処理方法、および情報処理プログラム
JP2020161189A (ja) * 2020-07-01 2020-10-01 株式会社東芝 情報処理装置、情報処理方法、および情報処理プログラム
CN112885175A (zh) * 2021-01-15 2021-06-01 杭州安恒信息安全技术有限公司 信息安全赛题生成方法、装置、电子装置和存储介质
CN116569167A (zh) * 2020-12-17 2023-08-08 三菱电机株式会社 信息处理装置、信息处理方法及信息处理程序

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10402059B1 (en) * 2013-12-20 2019-09-03 EMC IP Holding Company LLC System and method of smart framework for troubleshooting performance issues
EP3026558A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
EP3026557A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
JP6829168B2 (ja) 2017-09-04 2021-02-10 株式会社東芝 情報処理装置、情報処理方法およびプログラム
CN108460273B (zh) 2017-12-27 2022-10-14 ***股份有限公司 一种终端的应用管理方法、应用服务器及终端
JP6914899B2 (ja) 2018-09-18 2021-08-04 株式会社東芝 情報処理装置、情報処理方法およびプログラム
JP7249968B2 (ja) * 2020-03-09 2023-03-31 株式会社東芝 情報処理装置およびストレージ

Citations (8)

* 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ファイル生成装置
JP2007249782A (ja) * 2006-03-17 2007-09-27 Nifty Corp 電子データ流出防止プログラム
US20080276314A1 (en) * 2007-05-03 2008-11-06 Microsoft Corporation Software protection injection at load time

Patent Citations (8)

* 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ファイル生成装置
JP2007249782A (ja) * 2006-03-17 2007-09-27 Nifty Corp 電子データ流出防止プログラム
US20080276314A1 (en) * 2007-05-03 2008-11-06 Microsoft Corporation Software protection injection at load time

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014164392A (ja) * 2013-02-22 2014-09-08 Dainippon Printing Co Ltd 情報処理装置および情報処理システム
JP2015087997A (ja) * 2013-10-31 2015-05-07 株式会社東芝 電子機器および方法
JP2019040256A (ja) * 2017-08-22 2019-03-14 株式会社東芝 情報処理装置、情報処理方法、および情報処理プログラム
JP2020161189A (ja) * 2020-07-01 2020-10-01 株式会社東芝 情報処理装置、情報処理方法、および情報処理プログラム
JP7074805B2 (ja) 2020-07-01 2022-05-24 株式会社東芝 情報処理装置、情報処理方法、および情報処理プログラム
CN116569167A (zh) * 2020-12-17 2023-08-08 三菱电机株式会社 信息处理装置、信息处理方法及信息处理程序
CN112885175A (zh) * 2021-01-15 2021-06-01 杭州安恒信息安全技术有限公司 信息安全赛题生成方法、装置、电子装置和存储介质
CN112885175B (zh) * 2021-01-15 2022-10-21 杭州安恒信息安全技术有限公司 信息安全赛题生成方法、装置、电子装置和存储介质

Also Published As

Publication number Publication date
JP2014048866A (ja) 2014-03-17

Similar Documents

Publication Publication Date Title
JP5126447B1 (ja) アプリケーションプログラムの実行方法
JP5190800B2 (ja) プログラムの実行制御システム、実行制御方法、実行制御用コンピュータプログラム
CN100578522C (zh) 电子设备、用于电子设备的更新方法和集成电路
US8381307B2 (en) Method for protecting a converted applet (CAP) file including encrypting the CAP file
US8392724B2 (en) Information terminal, security device, data protection method, and data protection program
CN111143869B (zh) 应用程序包处理方法、装置、电子设备及存储介质
US20100063996A1 (en) Information processing device, information recording device, information processing system, program update method, program, and integrated circuit
JP2019519827A (ja) アプリの偽変造が探知可能な2チャンネル認証代行システム及びその方法
CN101872404B (zh) 一种保护Java软件程序的方法
CN112861191B (zh) 一种应用程序监控方法及装置
CN101228531A (zh) 执行装置
WO2013161974A1 (ja) 改竄検知が可能なアプリケーションプログラムの配布実行方法
JP2008146479A (ja) ソフトウェア部品、ソフトウェア部品管理方法、及びソフトウェア部品管理システム
KR101756978B1 (ko) 트러스티드 실행 환경 기반의 어플리케이션 프로그램 보호 방법 및 시스템
JP5056995B1 (ja) 改竄検知が可能なアプリケーションプログラムの配布実行方法
JP2007233426A (ja) アプリケーション実行装置
WO2012051894A1 (zh) 一种widget应用保护方法及装置
Gallery et al. Trusted computing: Security and applications
JP2006164184A (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
JP5182445B1 (ja) アプリケーションプログラムの改竄検知方法
JP7331714B2 (ja) 情報処理装置、情報処理方法及びプログラム
CN111159712B (zh) 检测方法、设备及存储介质
JP2016012902A (ja) 電子データ利用システム、携帯端末装置、及び電子データ利用システムにおける方法
Bahaa-Eldin et al. A comprehensive software copy protection and digital rights management platform
KR101711024B1 (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

R150 Certificate of patent or registration of utility model

Ref document number: 5126447

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20151109

Year of fee payment: 3