[go: up one dir, main page]

JP5182445B1 - アプリケーションプログラムの改竄検知方法 - Google Patents

アプリケーションプログラムの改竄検知方法 Download PDF

Info

Publication number
JP5182445B1
JP5182445B1 JP2012204321A JP2012204321A JP5182445B1 JP 5182445 B1 JP5182445 B1 JP 5182445B1 JP 2012204321 A JP2012204321 A JP 2012204321A JP 2012204321 A JP2012204321 A JP 2012204321A JP 5182445 B1 JP5182445 B1 JP 5182445B1
Authority
JP
Japan
Prior art keywords
program
application
falsification
application program
information
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
JP2012204321A
Other languages
English (en)
Other versions
JP2014059724A (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 JP2012204321A priority Critical patent/JP5182445B1/ja
Application granted granted Critical
Publication of JP5182445B1 publication Critical patent/JP5182445B1/ja
Publication of JP2014059724A publication Critical patent/JP2014059724A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

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

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(登録商標)における電子署名は、あくまでも署名対象データの内容を署名者が保証するものであり、署名者の身元まで保証するものではない。このため、クラッカーは、アプリケーションプログラムの内容を改竄した後、改竄後のアプリケーションプログラムを署名対象データとして自分自身を署名者とする電子署名を新たに行い、この新たな電子署名を付加して改竄後のアプリケーションプログラムを再配布することが可能である。このように、電子署名に対する改竄が行われた場合、上述したAndroid(登録商標)をOSとして利用している端末装置などでは、有効な改竄検知を行うことができない。
一方、前掲の特許文献3,4に記載されているように、予め登録されているアプリケーションプログラムだけについて、その実行を許可するような運用を行った場合、適切な登録作業が行われている限り、改竄されたプログラムの実行を阻止することができる。しかしながら、実際には、配布を受けたプログラムが改竄されたものであるか否かをユーザが正しく判断することは困難であり、また、仮に改竄されていないプログラムであることが判明した場合でも、ユーザがこれを個別に登録する作業を行う必要があるため、ユーザに煩雑な作業負担を課す結果になる。
そこで本発明は、電子署名に対する改竄が行われた場合にも、有効な改竄検知を行うことができるアプリケーションプログラムの改竄検知方法を提供することを目的とする。また、当該検知方法を利用することにより、改竄なしと判定されたアプリケーションプログラムについては、ユーザに登録作業の負担を課すことなしに、実行許可リストへの自動登録が行われるアプリケーションプログラムの実行方法を提供することを目的とする。
(1) 本発明の第1の態様は、改竄チェックの準備を行う準備プロセスと、アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムに対する改竄チェックを行う改竄チェックプロセスと、を有するアプリケーションプログラムの改竄検知方法において、
準備プロセスでは、
アプリケーションプログラムを実行するためのアプリケーション実行用コンピュータが、第1の特定鍵を用いて改竄チェックを行う改竄チェックルーチンを含む改竄チェックプログラムをインストールする改竄チェックプログラム準備段階を行い、
配布プロセスでは、
コンピュータが、配布対象となるアプリケーションプログラムに対してパッケージ化処理を施し、アプリケーションパッケージを作成するパッケージ化段階と、
コンピュータが、アプリケーションパッケージを署名対象データとして、プログラム提供者の第1の鍵を用いた暗号化を利用した電子署名処理を行って署名値を生成し、この署名値とプログラム提供者の第2の鍵とを含む署名情報を作成する署名情報作成段階と、
コンピュータが、アプリケーションパッケージおよび署名情報を構成するデータの中から、プログラム提供者の第2の鍵を含む所定部分を秘匿化対象データとして抽出し、抽出した秘匿化対象データに対して第2の特定鍵を用いた秘匿化処理を施して秘匿情報を作成する秘匿情報作成段階と、
コンピュータが、アプリケーションパッケージと、署名情報と、秘匿情報もしくは秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成する配布用ファイル作成段階と、
コンピュータが、配布用ファイルを出力するファイル出力段階と、
を行い、
改竄チェックプロセスでは、
アプリケーション実行用コンピュータが、配布用ファイルを入力するファイル入力段階と、
アプリケーション実行用コンピュータが、入力した配布用ファイルについて、署名情報に含まれているプログラム提供者の第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の態様に係るアプリケーションプログラムの改竄検知方法において、
改竄チェックプログラム内に第1の特定鍵が含まれているようにしたものである。
(10) 本発明の第10の態様は、上述した第1〜第8の態様に係るアプリケーションプログラムの改竄検知方法において、
改竄チェックプログラム内に、改竄チェックルーチンと、この改竄チェックルーチンが改竄チェックを行うために必要な第1の特定鍵の格納場所を示す所在情報と、が含まれており、
第2の確認段階で、アプリケーション実行用コンピュータが、改竄チェックプログラムから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、格納場所から取り出した第1の特定鍵を用いて改竄チェックルーチンを実行するようにしたものである。
(11) 本発明の第11の態様は、上述した第1〜第8の態様に係るアプリケーションプログラムの改竄検知方法において、
改竄チェックプログラム内に、改竄チェックルーチンと、この改竄チェックルーチンが改竄チェックを行うために必要な第1の特定鍵の格納場所を示す所在情報と、が含まれており、
アプリケーション実行用コンピュータ内に、第1の特定鍵を保存する保存場所を設け、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、保存場所に、第1の特定鍵が保存されていない場合には、改竄チェックプログラムから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、格納場所から第1の特定鍵を取り出すことにより、第1の特定鍵の入手を行うとともに入手した第1の特定鍵を保存場所に保存する処理を行い、保存場所に、第1の特定鍵が保存されている場合には、保存場所から第1の特定鍵を取り出すことにより、当該第1の特定鍵の入手を行い、入手した第1の特定鍵を用いて改竄チェックルーチンを実行するようにしたものである。
(12) 本発明の第12の態様は、上述した第10または第11の態様に係るアプリケーションプログラムの改竄検知方法において、
所定の認証用データを用いた認証機能が備わった格納場所に第1の特定鍵が格納されており、
改竄チェックプログラム内に、認証用データが含まれており、
アプリケーション実行用コンピュータが、格納場所から第1の特定鍵の取り出しを行う際に、認証用データを利用した認証を行うようにしたものである。
(13) 本発明の第13の態様は、上述した第10〜第12の態様に係るアプリケーションプログラムの改竄検知方法において、
第1の特定鍵の格納場所には、第1の特定鍵とともに所定の暗号鍵が格納されており、
改竄チェックプログラム内に、暗号鍵に対応した復号鍵が含まれており、
アプリケーション実行用コンピュータが、格納場所から第1の特定鍵の取り出しを行う際に、通信路上を第1の特定鍵が暗号鍵によって暗号化された状態で送信されるようにし、受信後にこれを復号鍵で復号するようにしたものである。
(14) 本発明の第14の態様は、上述した第1〜第13の態様に係るアプリケーションプログラムの改竄検知方法において、
アプリケーション実行用コンピュータが、改竄ありとの判定が行われた配布用ファイルに含まれているアプリケーションプログラムについては、実行を中止する処理を行うようにしたものである。
(15) 本発明の第15の態様は、上述した第1〜第14の態様に係るアプリケーションプログラムの改竄検知方法において、
アプリケーション実行用コンピュータとして、OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータを用い、
第1の確認段階をOSプログラムに基づいて実行し、
第2の確認段階を改竄チェックプログラムに基づいて実行し、
改竄チェックプログラムを、改竄チェックの対象となるアプリケーションプログラムとは別のアプリケーションプログラムによって構成するか、もしくは、OSプログラムの一部によって構成するようにしたものである。
(16) 本発明の第16の態様は、上述した第1〜第15の態様に係るアプリケーションプログラムの改竄検知方法において、
改竄チェックの対象となるアプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、画像および文字列を含むリソースデータと、XML形式のデータからなるマニフェストファイルと、を含んでおり、
パッケージ化段階において、ZIP方式の圧縮処理を含むパッケージ化処理を実行し、配布用ファイル作成段階において、APK形式のフォーマットをもった配布用ファイルを作成するようにしたものである。
(17) 本発明の第17の態様は、上述した第16の態様に係るアプリケーションプログラムの改竄検知方法において、
配布用ファイル作成段階において、ZIP方式の圧縮フォーマットにおけるコメント領域に秘匿情報もしくは所在情報を記録することにより配布用ファイルを作成するようにしたものである。
(18) 本発明の第18の態様は、上述した第1〜第17の態様に係るアプリケーションプログラムの改竄検知方法において、
配布用ファイル作成段階で、コンピュータが、秘匿情報を含む配布用ファイルを作成し、
第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから秘匿情報を抽出することにより、当該秘匿情報の入手を行うようにしたものである。
(19) 本発明の第19の態様は、上述した第1〜第17の態様に係るアプリケーションプログラムの改竄検知方法において、
配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うようにしたものである。
(20) 本発明の第20の態様は、上述した第1〜第17の態様に係るアプリケーションプログラムの改竄検知方法において、
配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
アプリケーション実行用コンピュータ内に、入力した配布用ファイルについての秘匿情報を保存する保存場所を設け、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、保存場所に、必要な秘匿情報が保存されていない場合には、配布用ファイルから所在情報を抽出し、この所在情報に基づいて格納場所を認識し、格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報を保存場所に保存する処理を行い、保存場所に、必要な秘匿情報が保存されている場合には、保存場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うようにしたものである。
(21) 本発明の第21の態様は、アプリケーションプログラムの改竄を検知するアプリケーションプログラムの改竄検知方法において、
コンピュータが、アプリケーションプログラムと、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルを入力する入力段階と、
コンピュータが、アプリケーションプログラムが改竄されているか否かを判定する判定段階と、
を有し、
署名情報は、アプリケーションプログラムを署名対象データとする電子署名処理によって得られた情報であり、
秘匿情報は、アプリケーションプログラムおよび署名情報を構成するデータの中の所定部分を秘匿化対象データとして抽出し、抽出した秘匿化対象データに対する秘匿化処理を施して得られた情報であり、
判定段階は、署名情報に基づいて改竄の有無を確認する第1の確認段階と、秘匿情報に基づいて改竄の有無を確認する第2の確認段階と、を有し、
コンピュータには、改竄チェックプログラムがインストールされており、改竄チェックプログラムには秘匿化処理で行われた処理プロセスを勘案して秘匿化対象データに対する秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、改竄チェックルーチンを実行することにより第2の確認段階が行われるようにしたものである。
(22) 本発明の第22の態様は、上述した第21の態様に係るアプリケーションプログラムの改竄検知方法において、
一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
秘匿情報が、秘匿化対象データを一方の鍵を用いて暗号化することにより得られた情報であり、
改竄チェックルーチンが、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報を他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイルから抽出した秘匿化対象データとが一致していた場合に、第2の確認段階に関して改竄なしとの判定を行うようにしたものである。
(23) 本発明の第23の態様は、上述した第21の態様に係るアプリケーションプログラムの改竄検知方法において、
秘匿情報が、秘匿化対象データに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して作成された情報であり、
改竄チェックルーチンが、入力段階で入力したデータファイルから抽出した秘匿化対象データに対して、特定鍵を用いたダイジェスト化処理を施して得られる情報が、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報と一致していた場合に、第2の確認段階に関して改竄なしとの判定を行うようにしたものである。
(24) 本発明の第24の態様は、アプリケーションプログラムの配布方法において、上述した第1〜第20の態様に係るアプリケーションプログラムの改竄検知方法における配布プロセスを構成する各段階をコンピュータに実行させるようにしたものである。
(25) 本発明の第25の態様は、アプリケーションプログラムの改竄チェック方法において、上述した第1〜第20の態様に係るアプリケーションプログラムの改竄検知方法における改竄チェックプロセスを構成する各段階をコンピュータに実行させるようにしたものである。
(26) 本発明の第26の態様は、上述した第1〜第20の態様に係るアプリケーションプログラムの改竄検知方法における配布プロセスを構成する各段階を実行するために、コンピュータ用プログラムを用意したものである。
(27) 本発明の第27の態様は、上述した第1〜第20の態様に係るアプリケーションプログラムの改竄検知方法における改竄チェックプロセスを構成する各段階を実行するために、コンピュータ用プログラムを用意したものである。
(28) 本発明の第28の態様は、上述した第1〜第20の態様に係るアプリケーションプログラムの改竄検知方法を利用して、アプリケーション実行用コンピュータが、配布されたアプリケーションプログラムを実行するアプリケーションプログラムの実行方法において、
アプリケーション実行用コンピュータが、上記改竄検知方法により、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階と、
アプリケーション実行用コンピュータが、上記改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別情報を、実行許可リストに登録するリスト自動登録段階と、
アプリケーション実行用コンピュータが、起動状態にあるアプリケーションプログラムの識別情報を認識する起動アプリ認識段階と、
アプリケーション実行用コンピュータが、起動アプリ認識段階において認識した識別情報が実行許可リストに登録されているか否かを判定する登録有無判定段階と、
アプリケーション実行用コンピュータが、登録有無判定段階において未登録と判定された場合に、当該未登録アプリを登録するか否かをユーザに問い合わせる登録照会段階と、
アプリケーション実行用コンピュータが、問い合わせに対するユーザの回答として、登録する旨の回答があった場合には、未登録アプリの識別情報を実行許可リストに登録した上で当該アプリの実行を許可し、登録しない旨の回答があった場合には、当該未登録アプリの実行を中止させる回答処理段階と、
を行うようにしたものである。
(29) 本発明の第29の態様は、上述した第28の態様に係るアプリケーションプログラムの実行方法において、
アプリケーション実行用コンピュータに組み込まれたOSプログラムが、複数のアプリケーションプログラムを所定のタイミングで切り替えながら実行させるマルチタスク処理機能を有しており、
アプリケーション実行用コンピュータが、アプリケーションプログラムの1つとして用意された監視プログラムによって、リスト自動登録段階、起動アプリ認識段階、登録有無判定段階、登録照会段階、回答処理段階を実行するようにしたものである。
(30) 本発明の第30の態様は、上述した第29の態様に係るアプリケーションプログラムの実行方法において、
アプリケーション実行用コンピュータが、OSプログラムによって、個々のアプリケーションプログラムについて、識別情報・起動時・終了時を示すログ情報を記録する処理を実行し、
アプリケーション実行用コンピュータが、監視プログラムによって起動アプリ認識段階を実行する際に、ログ情報を参照することにより起動状態にあるアプリケーションプログラムの識別情報を認識するようにしたものである。
(31) 本発明の第31の態様は、上述した第28〜第30の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階、回答処理段階、および起動アプリ認識段階において、バージョンの異なるアプリケーションプログラムについては、それぞれ異なる識別情報を用いた処理を行うようにしたものである。
(32) 本発明の第32の態様は、上述した第31の態様に係るアプリケーションプログラムの実行方法において、
同一のファイル名をもったデータファイルに含まれるアプリケーションプログラムであっても、ハッシュ値が異なる場合は、異なるバージョンと認識するようにしたものである。
(33) 本発明の第33の態様は、上述した第28〜第30の態様に係るアプリケーションプログラムの実行方法において、
バージョンの異なる同一のアプリケーションプログラムについては共通の識別情報を用いるようにし、
アプリケーション実行用コンピュータが、配布された2組のアプリケーションプログラムについて、その識別情報、署名値、第2の鍵を比較し、相互に署名値は異なるが、識別情報および第2の鍵が一致する場合には、当該2組のアプリケーションプログラムが同一のプログラム提供者によって提供されたバージョン違いのアプリケーションプログラムであると認識し、これら2組のアプリケーションプログラムに対して、予め定められた所定のバージョン更新処理を実行するようにしたものである。
(34) 本発明の第34の態様は、上述した第28〜第33の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが外部の格納場所内に保存された実行許可リストに対する登録を行い、
登録有無判定段階で、アプリケーション実行用コンピュータが外部の格納場所に保存された実行許可リストを参照することにより判定を行うようにしたものである。
(35) 本発明の第35の態様は、上述した第28〜第34の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが実行許可リストを暗号化する処理を行い、
登録有無判定段階で、アプリケーション実行用コンピュータが暗号化されている実行許可リストを復号して内容の参照を行うようにしたものである。
(36) 本発明の第36の態様は、上述した第28〜第35の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが、識別情報とともに、ファイル入力段階で入力した配布用ファイルに含まれている所定のチェックコードを登録するようにし、
登録有無判定段階で、アプリケーション実行用コンピュータが、配布用ファイル内に含まれているチェックコードと実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うようにしたものである。
(37) 本発明の第37の態様は、上述した第28〜第35の態様に係るアプリケーションプログラムの実行方法において、
リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが、識別情報とともに、ファイル入力段階で入力した配布用ファイルに含まれている所定の情報に対して一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードを登録するようにし、
登録有無判定段階で、アプリケーション実行用コンピュータが、配布用ファイル内に含まれている所定の情報に対して一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードと、実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うようにしたものである。
(38) 本発明の第38の態様は、上述した第1〜第23の態様に係るアプリケーションプログラムの改竄検知方法を利用して、アプリケーション実行用コンピュータが、配布されたアプリケーションプログラムを実行するアプリケーションプログラムの実行方法において、
アプリケーション実行用コンピュータが、上記改竄検知方法により、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階と、
アプリケーション実行用コンピュータが、上記改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別情報を、実行許可リストに登録するリスト自動登録段階と、
アプリケーション実行用コンピュータが、実行許可リストを参照して、リストに登録されているアプリケーションプログラムと登録されていないアプリケーションプログラムとの間で異なる処理を実行する段階と、
を行うようにしたものである。
(39) 本発明の第39の態様は、上述した第29または第30の態様に係るアプリケーションプログラムの実行方法における監視プログラムを用意したものである。
本発明に係るアプリケーションプログラムの改竄検知方法では、まず、配布プロセスにおいて、アプリケーションパッケージに対して、署名情報が付加されるとともに、特定のデータを秘匿化対象データとして秘匿化する処理が行われ、その結果として得られた秘匿情報も付加される。一方、改竄チェックプロセスでは、署名情報の正当性だけでなく、秘匿情報の正当性の確認も行われる。このため、アプリケーションパッケージ自体の改竄だけでなく、署名情報の改竄も検知することができるようになり、電子署名に対する改竄が行われた場合にも、有効な改竄検知が可能になる。
また、本発明に係るアプリケーションプログラムの実行方法では、上記改竄検知方法を実行することによって、改竄されていない旨の判定がなされた場合には、実行許可リストへの自動登録が行われる。このため、ユーザが登録作業を行う必要はなくなり、登録作業の負担が軽減される。
署名情報を付加した従来の一般的なアプリケーションプログラムの配布方法を示すブロック図である。 図1に示す配布用ファイル20の具体的な作成方法を示すブロック図である。 図2に示す配布用ファイル20について、署名情報22の正当性を確認する処理を示すブロック図である。 図1に示す従来の配布方法に対してクラッカーXが試みる改竄プロセスを示すブロック図である。 本発明に係るアプリケーションプログラムの改竄検知方法の基本原理を示すブロック図である。 図5に示す配布用ファイル20Aについて、署名情報22の正当性および秘匿情報23の正当性を確認する改竄チェック処理を示すブロック図である。 本発明に係るアプリケーションプログラムの改竄検知方法の基本手順を示す流れ図である。 図5に示す本発明に係る配布用ファイル20Aに対してクラッカーXが試みる改竄プロセスを示すブロック図である。 図5に示す本発明の基本的な実施形態に係る配布プロセスのバリエーションを示すブロック図である。 図5に示す本発明の基本的な実施形態に係る配布プロセスの別なバリエーションを示すブロック図である。 図5に示す本発明に係る配布プロセスにおいて、秘匿情報23として暗号化された情報を用いる具体的実施例を示すブロック図である。 図11に示す配布用ファイル20Aについて、署名情報22の正当性および秘匿情報23の正当性を確認する改竄チェック処理を示すブロック図である。 図5に示す本発明に係る配布プロセスにおいて、秘匿情報23としてダイジェスト化された情報を用いる具体的実施例を示すブロック図である。 図13に示す配布用ファイル20Aについて、署名情報22の正当性および秘匿情報23の正当性を確認する改竄チェック処理を示すブロック図である。 本発明に係るアプリケーションプログラムの改竄検知方法の変形例を示すブロック図である。 本発明に係るアプリケーションプログラムの改竄検知方法の別な変形例を示すブロック図である。 本発明に係るアプリケーションプログラムの改竄検知方法をOSプログラムによって実行した場合の基本手順を示す流れ図である。 本願発明者によって提案されている監視プログラムの処理手順を示す流れ図である。 図18に示す起動アプリ認識段階S31で起動アプリの認識に利用されるログ情報の一例を示す図である。 本発明に係るアプリケーションプログラムの実行方法で利用される実行許可リストの一例を示す図である。 図18に示す登録照会段階S34でユーザに提示されるメッセージ画面の一例を示す図である。 本発明の応用例において、通常アプリを起動したときのOSプログラム、改竄チェックプログラム、監視プログラムの処理手順を示す流れ図である。 改竄チェックプログラムと監視プログラムの構成例のバリエーションを示すブロック図である。
以下、本発明を図示する実施形態に基づいて説明する。
<<< §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を配布する際には、パッケージ化処理および署名情報付加処理が必要である。
Androidの標準仕様によれば、パッケージ化処理は、主に、アプリケーションプログラム10を構成する個々のファイルを圧縮して1つのパッケージにまとめる処理であり(その他、中間コンパイル処理なども併せて行われる)、図1の中段に示すように、このパッケージ化処理を施すことにより、アプリケーションプログラム10は、1つのアプリケーションパッケージ21にまとめられる。圧縮プロセスを経ることにより、アプリケーションパッケージ21のデータ容量は元のアプリケーションプログラム10の容量に比べて削減され、配布に適した形になる。
なお、上述したとおり、Androidの標準仕様では、パッケージ化処理には、少なくとも圧縮処理が含まれるため、以下の説明では、圧縮処理を含むパッケージ化処理の実施例を述べるが、一般にパッケージ化処理とは、配布やOSに応じたインストールを容易にするために、単一のファイルとして取り扱うことが可能な形式にまとめあげる処理を指し、必ずしも圧縮処理が必要になるものではない。たとえば、Windows(登録商標)OSでは、Setup.exeファイルの実行によりインストール可能な形式となるようなパッケージ化処理が行われている。
一方、署名情報付加処理は、このアプリケーションパッケージ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が、プログラミングに対して十分な知識を有していた場合は、プログラム本体部11やサブルーチン群13に対する改竄も可能である)。
続いて、クラッカー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にマーキングの内容が察知されないようにするとともに、秘匿化された情報に基づいてマーキングの内容の正当性を確認する改竄チェックルーチンFを含む改竄チェックプログラム30を別途用意する。以下、その基本原理を詳細に説明する。
図5は、本発明の基本的な実施形態に係るアプリケーションプログラムの改竄検知方法の基本原理を示すブロック図である。この方法では、プログラム提供者Aは、§1で述べた従来方法と同様に、アプリケーションプログラム10をパッケージ化することによって得られたアプリケーションパッケージ21を署名対象データDとして、プログラム提供者Aの第1の鍵K(a1)を用いた暗号化を利用した電子署名処理を行って署名値S(A)を生成し、この署名値S(A)とプログラム提供者Aの第2の鍵K(a2)とを含む署名情報22を作成する。
一方、このアプリケーションプログラム10とは別個に、図5の右下に示すように、改竄チェックプログラム30を用意する。ここに示す基本的な実施形態の場合、この改竄チェックプログラム30は、アプリケーションプログラム10と同様に、Android端末で実行可能な1つの独立したアプリケーションプログラムであり、図示のとおり、改竄チェックルーチンFと第1の特定鍵K(s1)とを含んでいる。ここで、改竄チェックルーチンFは、Aの署名情報22が改竄されているかどうかを確認するためのプログラムであり、第1の特定鍵K(s1)を用いることにより、Aの署名情報22が改竄されているか否かをチェックする機能を有する。具体的なチェックアルゴリズムについては後述する。
この改竄チェックプログラム30による改竄チェックを可能にするために、ここで述べる基本的な実施形態では、Aの署名情報22を秘匿化対象データCとして抽出し(図5では、秘匿化対象データCを太線枠で示す)、この秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報23を作成する。秘匿化処理の具体的な方法は、§7で実例を挙げて説明するが、第2の特定鍵K(s2)を用いた何らかの演算処理によって、元の秘匿化対象データCに対して一義的に秘匿情報23を決定することができる処理であって、この第2の特定鍵K(s2)に対して特別な関係をもった第1の特定鍵K(s1)(すなわち、改竄チェックプログラム30に内蔵されている鍵)を用いることによってのみ、秘匿化対象データCに対する秘匿情報23の正当性が確認できる、という条件を満たす処理であれば、どのような処理を秘匿化処理として採用してもかまわない(後述するように、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、同一の共通特定鍵K(s0)を用いることも可能である)。
こうして、秘匿情報23が作成できたら、プログラム提供者Aは、アプリケーションパッケージ21と、Aの署名情報22と、秘匿情報23と、を含む配布用ファイル20Aを作成し、これをAPKファイルとして配布すればよい。ここで、Aの署名情報22は、アプリケーションパッケージ21が改竄されていないことを確認するために用いられるプログラム提供者Aによる電子署名であり、秘匿情報23は、このAの署名情報22が改竄されていないことを確認するために用いられるマーキング情報ということになる。Android端末では、Aの署名情報22の正当性を確認するとともに、秘匿情報23の正当性を確認することにより、アプリケーションパッケージ21に対する改竄のみならず、Aの署名情報22に対する改竄を検知することができる。
結局、本発明に係るアプリケーションプログラムの改竄検知方法を実行するためには、ユーザUに対して、配布用ファイル20A(アプリケーションプログラム10)を配布するとともに、改竄チェックプログラム30を配布する必要がある。上述したとおり、改竄チェックプログラム30も、アプリケーションプログラムの一種であるので、配布時には、図1に示すように、パッケージ化を行い、更に、Aの署名情報22を付加して配布用ファイル20(APKファイル)の形式にして配布することになる。図では、繁雑になるのを避けるため、改竄チェックプログラム30のパッケージ化等の処理は図示を省略している。
ただ、この改竄チェックプログラム30に対しては、秘匿情報23を付加する処理は行われないので、この改竄チェックプログラム30自身については、本発明に係る改竄検知方法を適用した改善検知を行うことはできない。このため、実用上は、この改竄チェックプログラム30をユーザに配布する際には、クラッカーXによる改竄が行われないような特別な配布ルートを経由して配布するようにするのが好ましい。具体的には、たとえば、特別な認証手続を必要とする特定のサイトからダウンロードさせたり、プログラムを格納した媒体を店頭で配布したりする方法を採るのが好ましい。また、改竄チェックルーチンF自身は、クラッカーXの手に渡っても容易には解析できないような耐タンパ化処理を施しておくのが好ましい。
もちろん、Android端末を販売する際に、この改竄チェックプログラム30をプリインストールソフトとして予め組み込んでおくようにすれば、改竄チェックプログラム30を配布する段階で改竄を受ける危険を回避することができる。また、後に変形例として述べるように、改竄チェックプログラム30をAndroid端末のOSプログラムに組み込み、OS(AndroidOS)の一機能として改竄チェック処理を実行できるようにすれば、改竄チェックプログラム30を単独で配布する必要はない。
なお、改竄チェックプログラム30は、内蔵されている第1の特定鍵K(s1)に対応した第2の特定鍵K(s2)を用いて同一のアルゴリズムに基づく秘匿化処理が行われたアプリケーションプログラムであれば、どのようなアプリケーションプログラムに対しても改竄チェックを行うことができるので、1つの改竄チェックプログラム30によって複数のアプリケーションプログラムに対する改竄チェックを行うことが可能である。たとえば、プログラム提供者Aが複数のアプリケーションプログラム10−1,10−2,10−3,... を提供している場合、いずれのアプリケーションプログラムについても、同一の第2の特定鍵K(s2)を用いた同一のアルゴリズムに基づく秘匿化処理を行えば、当該第2の特定鍵K(s2)に対応した第1の特定鍵K(s1)を内蔵した改竄チェックプログラム30によって、これら複数のアプリケーションプログラム10−1,10−2,10−3,... に対する改竄チェックを行うことができる。
もちろん、プログラム提供者Aとプログラム提供者Bとが、それぞれ異なる第2の特定鍵K(s2a),K(s2b)を用いて秘匿化処理を行っていた場合には、提供者Aから提供されたアプリケーションプログラムについては、第1の特定鍵(s1a)を内蔵した改竄チェックプログラム30Aを用いた改竄チェックを行い、提供者Bから提供されたアプリケーションプログラムについては、第1の特定鍵(s1b)を内蔵した改竄チェックプログラム30Bを用いた改竄チェックを行う必要がある。
したがって、実用上は、とりまとめ役としてのプログラム保証者Gが、個々のプログラム提供者A,B,C,...に、同一の第2の特定鍵K(g2)を提供し、このプログラム保証者Gが、上記第2の特定鍵K(g2)に対応した第1の特定鍵K(g1)を内蔵した改竄チェックプログラム30Gを用意し、これを配布するようにするのが好ましい。個々のプログラム提供者A,B,C,...が、それぞれプログラム保証者Gから提供された同一の第2の特定鍵K(g2)を用いて、予め定められた同一のアルゴリズムに基づく秘匿化処理を行うようにすれば、いずれの提供者から提供されたアプリケーションプログラムに対しても、プログラム保証者Gが配布した改竄チェックプログラム30Gによって改竄チェックが可能になる。
続いて、改竄チェックプログラム30がインストールされたAndroid端末において、新たにダウンロードしたアプリケーションプログラム10についての改竄チェックを行う処理の基本原理を説明する。図6は、図5に示す配布用ファイル20Aについて、署名情報22の正当性および秘匿情報23の正当性を確認する処理を示すブロック図である。図の左側に示す改竄チェックプログラム30は、Android端末に予めインストールされているプログラムであり、この例の場合、「AppCheck.apk」なるファイル名が付されたアプリケーションプログラムである。
実際には、この改竄チェックプログラム30も、パッケージ化された後、APKファイルの形式でインストールされており、アプリケーションパッケージに署名情報が付加されたデータファイルを構成することになるが、ここでは、図が繁雑になるのを避けるため、アプリケーションパッケージの部分のみを図示することにする。前述したとおり、このアプリケーションパッケージ内には、改竄チェックルーチンFと第1の特定鍵K(s1)が含まれている。また、ここでは便宜上、このAPKファイル全体を改竄チェックプログラム30と呼ぶことにする。
ユーザUが、Android端末に配布用ファイル20A(この例では、「PatGame.apk」なるファイル名をもったAPKファイル)をインストールし、これを実行しようとすると、アプリケーションプログラム10の実行前に、AndroidOSの基本機能により、Aの署名情報22の正当性を確認する処理が実行される。すなわち、§1でも述べたように、まず、署名情報22から署名値S(A)およびAの第2の鍵K(a2)を抽出し、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことにより、ハッシュ値H1を得る処理が行われる。続いて、アプリケーションパッケージ21(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行い、ハッシュ値H2を求める処理を行う。そして、ハッシュ値H1とハッシュ値H2とが一致するか否かを確認する処理を行う。ここでは、このような確認処理のプロセスを第1の確認段階と呼ぶことにする。この第1の確認段階では、アプリケーションパッケージ21に対する署名情報22の正当性を確認する処理が行われることになる。
AndroidOSは、この第1の確認段階によって、署名情報22の正当性が確認できた場合、アプリケーションパッケージ21は改竄されていないものと判断し、そこに含まれているアプリケーションプログラム10を実行する。一方、署名情報22の正当性が確認できなかった場合には、何らかの改竄が行われているものと判断し、アプリケーションプログラム10の実行は中止される。したがって、クラッカーXによって、アプリケーションパッケージ21に対する改竄のみが行われていた場合には、このAndroidOSに備わっている第1の確認段階の処理機能によって改竄検知がなされ、改竄されたアプリケーションプログラムの実行は中止される。しかしながら、図4に示す例のように、クラッカーXによる再署名が行われ、署名情報に対する改竄まで行われていた場合、この第1の確認段階では改竄の検知を行うことができない。
本発明に係る改竄検知方法では、ユーザUは、改竄チェックプログラム30を実行することにより、Aの署名情報に対する正当性の確認を行うことができるようになる。前述したとおり、改竄チェックプログラム30内の改竄チェックルーチンFは、内蔵している第1の特定鍵K(s1)を利用して、秘匿化対象データC(この例の場合は、Aの署名情報22)に対する秘匿情報23の正当性を確認する処理を行う。ここでは、このような確認処理のプロセスを第2の確認段階と呼ぶことにする。前述したとおり、秘匿情報23は、秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して得られた情報であり、秘匿化対象データC(Aの署名情報22)に対する秘匿情報23の正当性は、第1の特定鍵K(s1)を用いて確認することができる。正当性が確認できない場合、改竄チェックプログラム30は、配布用ファイル20Aに対する改竄が行われているものと判断する。
かくして、Android端末では、第1の確認段階において、アプリケーションパッケージ21に対する署名情報22の正当性が確認され、かつ、第2の確認段階において、署名情報22に対する秘匿情報23の正当性が確認されることになり、両方の確認段階を実行すれば、アプリケーションパッケージ21に対する改竄と、署名情報22に対する改竄との双方を検知することができる。
<<< §4.本発明の基本的な実施形態に係る改竄検知の手順 >>>
続いて、本発明に係る改竄検知方法の基本手順を、図7の流れ図を参照しながら説明する。この基本手順は、改竄チェックの準備を行う準備プロセスと、アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムに対する改竄チェックを行う改竄チェックプロセスと、によって構成されるアプリケーションプログラムの改竄検知方法の手順ということになる。図示のとおり、準備プロセスでは、ステップS0の段階が実行され、配布プロセスでは、ステップS1〜S5の各段階が実行され、改竄チェックプロセスでは、ステップS6〜S15の各段階が実行される。以下、これら各ステップの内容を順に説明する。
ここでは、便宜上、配布プロセス(ステップS1〜S5)は、プログラム提供者Aが利用するコンピュータによって実行され、準備プロセス(ステップS0)および改竄チェックプロセス(ステップS6〜S15)は、ユーザUが利用するアプリケーション実行用コンピュータ(スマートフォンなどのAndroid端末)によって実行されるものとして以下の説明を行うことにする。なお、配布プロセスを構成するステップS1〜S5は、必ずしも同一のコンピュータで実行する必要はないが、準備プロセスおよび改竄チェックプロセスを構成するステップS0,S6〜S15は、ユーザUが利用する同一のアプリケーション実行用コンピュータにおいて実行されることになる。
まず、準備プロセスを構成するステップS0の改竄チェックプログラム準備段階では、アプリケーションプログラムを実行するためのアプリケーション実行用コンピュータが、第1の特定鍵K(s1)を用いて改竄チェックを行う改竄チェックルーチンFを含む改竄チェックプログラム30をインストールする処理が行われる。前述したように、実用上は、改竄チェックプログラム30として、プログラム保証者Gが配布した改竄チェックプログラム30Gをインストールしておけば、様々なプログラム提供者A,B,C,...が配布するアプリケーションプログラムに対する改竄チェックが可能になる。この場合、改竄チェックプログラム準備段階S0は、1台のアプリケーション実行用コンピュータ(Android端末)に対して1回だけ行えば十分である。
なお、ここでは、改竄チェックプログラム30が1つのアプリケーションプログラムとして配布され、ユーザUの操作に基づいてアプリケーション実行用コンピュータ(Android端末)にインストールされる基本的な実施形態を述べるが、改竄チェックプログラム30をアプリケーション実行用コンピュータ(Android端末)にプリインストールしておく実施形態を採る場合や、アプリケーション実行用コンピュータのOS(AndroidOS)の機能に組み込む実施形態を採る場合は、ステップS0の改竄チェックプログラム準備段階は、当該アプリケーション実行用コンピュータ(Android端末)の出荷前に、当該端末の提供者の元で実行される処理ということになる。
続いて、配布プロセスを構成するステップS1〜S5について説明する。この配布プロセスは、配布対象となるアプリケーションプログラムのそれぞれについて実行される。まず、ステップS1のパッケージ化段階では、図5に示すように、配布対象となるアプリケーションプログラム10に対して、少なくとも圧縮処理を含むパッケージ化処理を施し、アプリケーションパッケージ21を作成する処理が行われる。
§1で述べたように、アプリケーションプログラムをAndroid端末に配布する場合は、その仕様により、アプリケーションプログラム10には、プログラム本体部11と、このプログラム本体部11から呼び出されるサブルーチン群13と、画像および文字列を含むリソースデータ12と、XML形式のデータからなる補助ファイル14(マニフェストファイル)とが含まれることになり、ステップS1のパッケージ化段階では、ZIP方式の圧縮処理を含むパッケージ化処理が実行されることになる。
続くステップS2の署名情報作成段階では、図5に示すように、ステップS1で作成されたアプリケーションパッケージ21を署名対象データDとして、プログラム提供者Aの第1の鍵K(a1)を用いた暗号化を利用した電子署名処理を行って署名値S(A)を生成し、この署名値S(A)とプログラム提供者Aの第2の鍵K(a2)とを含むAの署名情報22を作成する処理が実行される。ここで、プログラム提供者Aの第1の鍵K(a1)および第2の鍵K(a2)としては、公開鍵暗号方式に利用される一対の鍵、すなわち、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵が用いられる。
次に、ステップS3の秘匿情報作成段階では、図5に示すように、Aの署名情報22を秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報23を作成する処理が実行される。ここで、秘匿化処理に利用される第2の特定鍵K(s2)は、改竄チェックプログラム30に含まれている第1の特定鍵K(s1)に対応する鍵である。より具体的には、第1の特定鍵K(s1)および第2の特定鍵K(s2)としては、一方の鍵を用いて秘匿化処理を施したデータの正当性を他方の鍵を用いて確認できる性質をもった一対の鍵が用いられる(後述するように、両者は同一の共通鍵でもかまわない)。
このステップS3で実行する秘匿化処理としては、前述したとおり、第2の特定鍵K(s2)を用いた何らかの演算処理によって、元の秘匿化対象データCに対して一義的に秘匿情報23を決定することができる処理であって、第1の特定鍵K(s1)を用いることによってのみ、秘匿化対象データCに対する秘匿情報23の正当性が確認できる、という条件を満たす処理であれば、どのような処理であってもかまわない。秘匿化処理の具体例は§7で例示する。
一方、ステップS4の配布用ファイル作成段階では、図5に示すように、ステップS1で作成されたアプリケーションパッケージ21と、ステップS2で作成された署名情報22と、ステップS3で作成された秘匿情報23と、をまとめることにより、配布用ファイル20Aが作成される。Android端末に配布する場合は、この配布用ファイル作成段階において、APK形式のフォーマットをもった配布用ファイル20A(拡張子.apkが付されたAPKファイル)が作成されることになる。
なお、APKファイルの実体は、ZIP方式の圧縮フォーマットで圧縮されたファイルであるので、ステップS4の配布用ファイル作成段階でAPKファイルを作成する場合は、ZIP方式の圧縮フォーマットにおけるコメント領域に秘匿情報23を記録することができる。このコメント領域は、本来、APKファイルの作成者が、任意のコメント文を記載できるようにするために設けられた領域であるから、秘匿情報23を構成するデータをコメント文の代わりに記録しても、何ら支障は生じない。別言すれば、コメント領域に秘匿情報23を記録した本発明に係る配布用ファイル20Aは、Androidの仕様に合致したAPKファイルとしての条件を満たしており、そのままAndroid端末に配布しても何ら支障はなく、AndroidOSによって、仕様通りのAPKファイルとして取り扱われることになる。
配布プロセスの最後には、ステップS5のファイル出力段階が行われる。この段階では、ステップS4で作成された配布用ファイル20A(ここに示す例の場合、Androidの仕様通りのAPKファイル)が配布のために出力されることになる。たとえば、配布用のWebサーバなどに出力すれば、配布用ファイル20Aはインタネットを介して一般ユーザへ配布されることになり、光学的記録媒体やICメモリ等の物理的記録媒体に記録して出力すれば、配布用ファイル20Aは、このような物理的記録媒体に格納された状態で配布されることになる。
続いて、配布用ファイル20Aの配布を受けたアプリケーション実行用コンピュータ側で実行される改竄チェックプロセスについて説明する。まず、ステップS6のファイル入力段階では、ユーザUが利用するアプリケーション実行用コンピュータに、上述した配布プロセスによって配布された配布用ファイル20Aが入力される。たとえば、ユーザUがAndroid端末を利用している場合、APKファイルの配布サイトからインターネット経由で配布用ファイル20Aをダウンロードする指示を与えることにより、当該Android端末に配布用ファイル20Aが取り込まれることになり、更に、ユーザUの了承を得て、配布用ファイル20Aのインストールが行われることになる。Android端末の場合、このような処理は、OSプログラムの基本機能によって実行される。
前述したとおり、このアプリケーション実行用コンピュータには、ステップS0の改竄チェックプログラム準備段階において、既に改竄チェックプログラム30がインストールされている。すなわち、当該コンピュータには、ステップS6で入力したアプリケーションプログラムの他に、改竄チェックプログラム30もインストールされていることになる。
図7の流れ図に示すステップS7以降の各段階は、ステップS6で入力したアプリケーションプログラムに対して改竄チェックを行う処理であるが、ステップS8〜S11は、署名情報の正当性を確認するための第1の確認段階に関する処理であり、ステップS12〜S15は、秘匿情報の正当性を確認するための第2の確認段階に関する処理である。ここに示す実施例の場合、アプリケーション実行用コンピュータとしてAndroid端末を用いているため、第1の確認段階に関する処理はOSプログラム(AndroidOS)によって実行される。一方、第2の確認段階に関する処理は、ステップS0でインストールした改竄チェックプログラム30によって実行される。
ステップS7では、第1の確認段階に関する処理もしくは第2の確認段階に関する処理のいずれが選択されたかが判断される(このステップS7の判断自体は、OSプログラムによって行われる)。そして、いずれかの処理が選択された場合、ステップS8もしくはS12へと分岐する。すなわち、第1の確認段階に関する処理が選択された場合は、ステップS7からステップS8へと分岐し、第2の確認段階に関する処理が選択された場合は、ステップS7からステップS12へと分岐する。
第1の確認段階と第2の確認段階とは、並列的な関係にあり、どちらを先に実行してもかまわないが、ここでは説明の便宜上、まず、第1の確認段階に関する処理が選択され、ステップS7からステップS8へと分岐した場合を説明しよう。ここで述べるAndroid端末を用いた実施例の場合、ステップS6で入力したアプリケーションプログラム(改竄チェックの対象となるプログラム)に対する起動指示が与えられた場合に、第1の確認段階に関する処理が選択されたものと判断され、ステップS7からステップS8への分岐が生じることになり、以下、ステップS8〜S11に示す第1の確認段階に関する処理が実行される。より具体的には、Android端末を用いた実施例の場合、AndroidOSが当該アプリケーションプログラムを起動するための起動処理の一環として、ステップS8〜S11の処理が実行されることになる。
なお、アプリケーション実行用コンピュータの中には、第1のアプリケーションプログラムが、第2のアプリケーションプログラムを起動できるような仕様を採用していたり、外部からアクセスしてきた何らかのサービスに基づいてアプリケーションプログラムが起動するような仕様を採用するものも少なくない(Android端末もそのような仕様を採用している)。したがって、図7におけるステップS7からステップS8への移行は、必ずしもユーザU自身が当該アプリケーションプログラムに対して直接的な起動指示を与えた場合に限定されるものではなく、他のアプリケーションからの起動指示や外部サービスからの起動指示に起因しても生じることになる。
まず、ステップS8では、図6に示す第1の確認段階が行われる。この第1の確認段階では、前述したとおり、アプリケーションパッケージ21に対する署名情報22の正当性を確認する処理が行われる。すなわち、ステップS6で入力した配布用ファイル20Aについて、Aの署名情報22に含まれているプログラム提供者Aの第2の鍵K(a2)を用いた復号を利用した署名確認処理を行って、アプリケーションパッケージ21に対する署名情報22の正当性が確認される。
具体的には、図6を用いて説明したように、署名情報22から署名値S(A)およびAの第2の鍵K(a2)を抽出し、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことによりハッシュ値H1を求め、アプリケーションパッケージ21(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行いハッシュ値H2を求め、ハッシュ値H1とハッシュ値H2との一致確認が行われることになる。
ステップS8の第1の確認段階において否定的な結果が得られた場合、すなわち、アプリケーションパッケージ21に対する署名情報22の正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS9を経てステップS10へと進み、当該アプリケーションの起動は中止される。具体的には、OSプログラムによって、たとえば「このアプリケーションプログラムは改竄されているため、実行できません」のような警告メッセージを提示し、起動が中止されたことをユーザUに報知する処理を行えばよい。
これに対して、ステップS8の第1の確認段階において肯定的な結果が得られた場合、すなわち、アプリケーションパッケージ21に対する署名情報22の正当性が確認された場合には、ステップS9を経てステップS11へと進み、アプリケーション起動段階が実行される。すなわち、OSプログラムによって、当該アプリケーションプログラムの起動が正常に行われることになり、ユーザUは、起動したアプリケーションプログラムを利用することができる。
Android端末を用いた実施例の場合、ステップS7〜S11の処理は、すべてOSプログラム(AndroidOS)の基本機能によって実行され、上述した各処理は、いずれもAndroidOSの標準仕様に基づく処理である。これに対して、ステップS12〜S15の処理は、アプリケーションプログラムの1つとしてインストールされた改竄チェックプログラム30によって実行される。図7の改竄チェックプロセスを構成する各ステップS6〜S15に付記した括弧書きの内容は、個々のステップの実行主体が、OSプログラムであるのか、改竄チェックプログラムであるのかを示すものである(後に変形例を示すように、本発明は、これらの実行主体に限定されるものではなく、たとえば、§9に示す実施例では、全ステップがOSプログラムにより実行される)。
ステップS7において、第2の確認段階に関する処理が選択されたものと判断される基本的なケースは、ユーザUによって、改竄チェックプログラム30に対する起動指示が与えられた場合である。この場合、ステップS7からステップS12へと移行し、起動された改竄チェックプログラム30によって、ステップS12〜S15の処理が実行される。
もっとも、ここで述べるAndroid端末を用いた実施例の場合、改竄チェックプログラム30もAndroidOSの管理下で動作する1つのアプリケーションプログラムに違いないので、起動時には、AndroidOSによって、当該改竄チェックプログラム30自身についての署名情報を確認する処理(すなわち、ステップS8〜S11に相当する処理)が実行されることになる。したがって、改竄チェックプログラム30に対する起動指示に基づいてステップS7からステップS12への移行が行われた場合、実際には、ステップS12が実行される前に、改竄チェックプログラム30自身について署名情報を確認する処理が行われることになるが、この処理は、本発明におけるチェック対象となるアプリケーションプログラムに対する改竄チェックには直接関係しない処理であるため、ここでは説明を省略する。
したがって、図7に示すステップS12の処理は、改竄チェックプログラム30自身についての署名情報の確認が完了し、改竄チェックプログラム30が支障なく起動した後の処理ということになる。前述したとおり、実用上は、改竄チェックルーチンFに対しては、クラッカーXの手に渡っても容易には解析できないような耐タンパ化処理を施しておくのが好ましく、また、可能であれば、Android端末を販売する際に、改竄チェックプログラム30をプリインストールソフトとして組み込んでおくのが好ましい。このような手段を講じることにより、改竄チェックプログラム30自身の改竄を防止することができ、ステップS7からステップS12への移行が支障なく行われるようになる。
まず、ステップS12では、チェック対象となるアプリケーションプログラムを決定する処理が行われる。ここでは、チェック対象となるアプリケーションプログラムをユーザUに指定させる運用を採る場合を例にとって説明しよう。この場合は、Android端末等の画面上に、現在インストールされているアプリケーションプログラムのリストを提示し、ユーザUにチェック対象となるアプリケーションプログラムを指定する指示操作を行ってもらえばよい。
ステップS12では、こうしてチェック対象として指定されたアプリケーションプログラムに対して、図6に示す第2の確認段階が行われ、署名情報22に対する秘匿情報23の正当性が確認される。すなわち、ステップS6で入力した配布用ファイル20Aから、秘匿化対象データCとなる署名情報22および秘匿情報23を抽出し、秘匿化対象データCに対する秘匿情報23の正当性を確認する処理が、改竄チェックプログラム30によって実行される。図6に示すとおり、改竄チェックプログラム30には、改竄チェックルーチンFと第1の特定鍵K(s1)とが含まれており、改竄チェックルーチンFは、第1の特定鍵K(s1)を用いて、秘匿化対象データCに対する秘匿情報23の正当性を確認する処理を行うことになる。正当性を確認するための具体的な処理については、§7において実例を挙げて説明する。
結局、このステップS12では、アプリケーション実行用コンピュータ(Android端末)が、ステップS6で入力した配布用ファイル20Aに基づいて秘匿化対象データCおよび秘匿情報23を入手し、秘匿化対象データCに対する秘匿情報23の正当性を、改竄チェックプログラム30を実行することにより確認する処理が行われることになる。
ステップS12の第2の確認段階において否定的な結果が得られた場合、すなわち、秘匿化対象データCに対する秘匿情報23の正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS13を経てステップS14へと進み、改竄検知処理段階が実行される。具体的には、改竄チェックプログラム30によって、たとえば「アプリケーションプログラム○○(チェック対象として指定されたアプリケーションプログラムの名前)は改竄されています」のような判定メッセージを提示し、「改竄あり」との検知結果をユーザUに報知する処理を行えばよい。
これに対して、ステップS12の第2の確認段階において肯定的な結果が得られた場合、すなわち、秘匿化対象データCに対する秘匿情報23の正当性が確認された場合には、ステップS13を経てステップS15へと進み、改竄検知処理段階が実行される。具体的には、改竄チェックプログラム30によって、たとえば「アプリケーションプログラム○○(チェック対象として指定されたアプリケーションプログラムの名前)は改竄されていません」のような判定メッセージを提示し、「改竄なし」との検知結果をユーザUに報知する処理を行えばよい。
もちろん、ステップS12において、複数のアプリケーションプログラムをチェック対象として指定することも可能である。たとえば、現在インストールされているアプリケーションプログラムのリストの中から、ユーザUに、複数のアプリケーションプログラムをチェック対象として指定する指示操作を行ってもらえばよい。このように、チェック対象となるアプリケーションプログラムが複数ある場合には、ステップS12〜S15の処理は、個々のチェック対象ごとに行われることになる。
また、改竄チェックプログラム30が、チェック対象となるアプリケーションプログラムを自動的に決定するような運用を採ることも可能である。この場合、ユーザUは、チェック対象を指定する操作を行う必要はない。改竄チェックプログラム30は、たとえば、現在インストールされているすべてのアプリケーションプログラムを自動的にチェック対象とすることもできるし、現在インストールされているアプリケーションプログラムのうち、§10で述べる実行許可リストに掲載されていないものを自動的にチェック対象とすることもできる。
結局、本発明における改竄チェックプロセスでは、アプリケーション実行用コンピュータ(Android端末)が、ステップS6で入力した配布用ファイル20Aについて、第1の確認段階(ステップS8)および第2の確認段階(ステップS12)の少なくとも一方において否定的な結果が得られた場合に改竄ありとの判定を行うことができる。ここで、図7の流れ図におけるステップS9は、署名情報の正当性を確認する第1の確認段階に基づく改竄判定段階ということになり、ステップS13は、秘匿情報の正当性を確認する第2の確認段階に基づく改竄判定段階ということになる。このように、本発明に係る改竄チェックプロセスでは、署名情報の正当性だけでなく、秘匿情報の正当性の確認も行われる。このため、本発明では、アプリケーションパッケージ自体の改竄だけでなく、署名情報の改竄も検知することができるようになり、電子署名に対する改竄が行われた場合にも、有効な改竄検知が可能になる。
こうして、ステップS14の改竄検知処理段階もしくはステップS15の改竄非検知処理段階が完了すれば、改竄チェックプログラム30はその役目を終えたことになるので、その時点で、改竄チェックプログラム30を終了してもかまわない(この場合、改竄チェックプログラム30が再び起動された時点で、ステップS7からステップS12への移行が生じることになる)。ただ、実用上は、改竄チェックプログラム30をいわゆる「常駐プログラム」として、常に起動状態に維持しておくのが好ましい。
Androidをはじめとする多くのOSは、複数のアプリケーションプログラムを並行して実行させるマルチタスク処理機能を有している。もちろん、一般的なCPUは、同時には1つのアプリケーションプログラムを実行する機能しか有していないが、マルチタスク処理機能を有するOSプログラムは、複数のアプリケーションプログラムを所定のタイミングで順次切り替えながらCPUに実行させる処理を行うことができる。したがって、複数のアプリケーションプログラムを同時に起動状態にして、これらを時分割で切り替えることにより、あたかも複数のアプリケーションプログラムが同時に実行されているような制御が可能になる。
そこで、改竄チェックプログラム30をいわゆる「常駐プログラム」として常に起動状態に維持しておき、新たなアプリケーションプログラムが起動された場合に、当該アプリケーションプログラムに対する改竄チェックが自動的に実行されるようにしておけば、起動指示が与えられたアプリケーションプログラムについては、必ず、ステップS8の第1の確認段階とステップS12の第2の確認段階との双方の確認処理が実行されることになり、理想的な改竄チェック環境が整うことになる。
上述したように、マルチタスク処理機能を有するOS制御下では、複数のアプリケーションプログラムを同時に起動状態にすることができるので、改竄チェックプログラム30を常に起動状態に維持したとしても、他のアプリケーションプログラムの起動に支障が生じることはない。したがって、改竄チェックプログラム30が「常駐プログラム」として起動状態にあったとしても、別なアプリケーションプログラム(改竄チェックの対象となるアプリケーションプログラム)に起動指示が与えられると、OSプログラムによって当該アプリケーションプログラムを起動するための処理が実行される。すなわち、ステップS7からステップS8への移行が生じ、当該チェック対象プログラムに対して第1の確認段階が実行される。ここで肯定的な結果が得られれば、上述したとおり、ステップS9からステップS11へと進み、当該チェック対象プログラムの起動段階が実施され、当該チェック対象プログラムは起動状態になる。
この場合、チェック対象のアプリケーションプログラムは、改竄チェックプログラム30とともに起動状態を維持することになり、両プログラムは、OSのマルチタスク処理機能によって所定のタイミングで順次切り替えながら並行して実行されることになる。そこで、改竄チェックプログラム30に、新たに起動されたアプリケーションプログラムを認識する機能をもたせておき(§10で述べるように、OSが作成するログ情報を利用すれば、どのアプリケーションプログラムがいつ起動したかを認識することが可能である)、実行順が改竄チェックプログラム30に切り替わった時点で、新たに起動されたアプリケーションプログラムに対して第2の確認段階を実行するようにしておけばよい。そうすれば、実行順が改竄チェックプログラム30に切り替わった時点で、ステップS7からステップS12への移行が行われ、新たな起動が認識されたアプリケーションプログラムをチェック対象プログラムとして、ステップS12〜S15の処理が実行されることになる。
こうして、改竄チェックプログラム30を「常駐プログラム」として常に起動状態にしておけば、新たなアプリケーションプログラムを起動するたびに、OSプログラムによる第1の確認段階(ステップS8)が行われるとともに、改竄チェックプログラム30による第2の確認段階(ステップS12)も行われることになるので、各アプリケーションプログラムの起動時に、署名情報の正当性だけでなく、秘匿情報の正当性も含めた改竄チェックが可能になる。いわば改竄チェックプログラム30は、「常駐プログラム」として、新たなアプリケーションプログラムの起動を監視し、新たなアプリケーションプログラムが起動された場合には、これに対して第2の確認段階(ステップS12)を実行する機能を果たすことになる。
なお、ステップS14の改竄検知処理段階で実行される具体的な処理内容として、上述した実施例では、「アプリケーションプログラム○○は改竄されています」のような判定メッセージを提示する例を示したが、当該プログラムが既に起動されていた場合には、改竄チェックプログラム30により、当該プログラムの実行を中止する処理を行うようにしてもよい。Android端末をアプリケーション実行用コンピュータとして用いると、ステップS8の第1の確認段階によって改竄ありとの判定がなされた場合は、ステップS10において起動中止段階が行われることになる。そこで、ステップS12の第2の確認段階によって改竄ありとの判定がなされた場合にも、ステップS14における改竄検知処理段階として、配布用ファイル20Aに含まれているアプリケーションプログラムについて実行を中止する処理が行われるようにすれば、いずれの確認段階で改竄が検知された場合も、改竄されたアプリケーションプログラムに対する実行中止が行われることになる。
上例のように、改竄チェックプログラム30を「常駐プログラム」として常に起動状態にし、新たなアプリケーションプログラムの起動を監視する運用を採用した場合、新たなアプリケーションプログラムが起動されると、当該プログラムに対して自動的にステップS12の第2の確認段階が実行されることになる。ここで、もし改竄が検知された場合、ステップS14の改竄検知処理段階において、当該プログラムの実行が強制的に中止される処理を行うようにすればよい。
ここに示す実施例の場合、改竄チェックプログラム30は、AndroidOSの管理下で動作する1つのアプリケーションプログラムであるが、AndroidOSの仕様によれば、第1のアプリケーションプログラムからAndroidOSに対して、現在起動状態にある第2のアプリケーションプログラムの実行を中止させる要請を行うことができる。そこで、第2の確認段階によって改竄が検知された場合、ステップS14の改竄検知処理段階において、改竄チェックプログラム30からAndroidOSに対して、改竄が検知されたアプリケーションプログラムの実行を中止させる要請を行えばよい。そうすれば、AndroidOSによって、当該改竄が検知されたアプリケーションプログラムを強制的に終了させることができる。
一方、ステップS15の改竄非検知処理段階で実行される具体的な処理内容として、上述した実施例では、「アプリケーションプログラム○○は改竄されていません」のような判定メッセージを提示する例を示したが、改竄チェックプログラム30を「常駐プログラム」として常に起動状態にし、新たなアプリケーションプログラムの起動を監視する運用を採用する場合は、ステップS15の改竄非検知処理段階では何ら判定メーセージを提示しない運用を採ることもできる。改竄チェックプログラム30を「常駐プログラム」として、新たに起動されたアプリケーションプログラムに対して第2の確認段階の処理を実行して自動的に改竄検知を行う運用を採用した場合、ユーザUが意図的に改竄チェックの指示を与えたわけではないので、改竄が検知されなかった場合には、むしろ何らメッセージを提示しない方が好ましい。
図7に示す流れ図における改竄チェックプロセスは、このように、改竄チェックプログラム30を「常駐プログラム」として常時動作させ、新たなアプリケーションプログラムの起動を監視させる運用を行う場合に適した処理手順を示しており、ステップS10,S11,S14,S15からステップS7へ戻るループが構成されている。OSプログラムに対して新たなアプリケーションプログラムの起動指示が与えられると、ステップS7からステップS8への移行が行われ、OSプログラムにより第1の確認段階の処理が行われる。ここで、改竄検知がなされなかった場合には、ステップS11において当該アプリケーションプログラムの起動が行われ、改竄検知がなされた場合には、ステップS10において当該アプリケーションプログラムの起動が中止される。
一方、マルチタスク処理の切り替えにより、「常駐プログラム」として動作している改竄チェックプログラム30に動作が移ると、ステップS7からステップS12への移行が行われ、改竄チェックプログラム30により、新たな起動が認識されたアプリケーションプログラムについての第2の確認段階の処理が行われる。ここで、改竄検知がなされなかった場合には、ステップS15において改竄非検知処理が行われる。上述したように、実際には、改竄検知がなされなかった場合には、検知結果を示すメッセージは何ら提示しないようにするのが好ましく、その場合、ステップS15の改竄非検知処理は何もしない処理ということになる。これに対して、改竄検知がなされた場合には、ステップS14において改竄検知処理が行われる。上述したように、このステップS14の改竄検知処理では、改竄されたアプリケーションプログラムに対する実行中止を行うようにするのが好ましい。
かくして、OSプログラムおよび改竄チェックプログラム30が起動状態にある限り、ステップS7からの一連の処理が繰り返し実行されることになり、新たなアプリケーションプログラムを起動するたびに、当該アプリケーションプログラムが改竄されているか否かが、第1の確認段階の処理と第2の確認段階の処理との双方で判定されることになる。
なお、Andoroid端末の場合、ステップS7からステップS8への移行は、上述したとおり、OSプログラムに対して、特定のアプリケーションプログラムを起動する指示が与えられた場合(前述したとおり、ユーザUによる起動指示だけでなく、他のアプリケーションプログラムによる起動指示や、外部のサービスからのアクセスに基づく起動指示も含む)に生じることになるが、ステップS7からステップS12への移行は、このような起動指示が与えられた場合に限定されるものではない。前述したように、ユーザUが、改竄チェックプログラム30に対して、特定のアプリケーションプログラム(起動されていなくてもよい)をチェック対象として指定した場合には、当該特定のアプリケーションプログラムに対して、第2の確認段階が実行されることになる。
あるいは、ステップS6において、新たなアプリケーションプログラム(配布用ファイル20A)を入力(ダウンロード)した直後や、ダウンロードしたプログラムに対してインストール作業を行った直後に、ステップS7からステップS12への移行が自動的に行われるようにしてもよい。この場合、ダウンロードしたプログラムやインストールしたプログラムをチェック対象として、第2の確認段階が実行されることになる。別言すれば、「常駐プログラム」として動作している改竄チェックプログラム30が、新たなアプリケーションプログラムのダウンロードやインストールを監視し、新たなアプリケーションプログラムがダウンロードされたりインストールされたりしたタイミングで、当該プログラムに対して第2の確認段階による改竄チェックを行うことになる。もちろん、その後、インストールした当該プログラムに対する起動指示を与えると、今度は、OSプログラムによって第1の確認段階による改竄チェックが行われる。この場合、第2の確認段階が第1の確認段階に先行して行われることになる。
このように、OSプログラムの管理下でアプリケーションプログラムの実行を行うアプリケーション実行用コンピュータを用いる場合、ステップS8の第1の確認段階をOSプログラムに基づいて実行し、ステップS12の第2の確認段階を、改竄チェックの対象となるアプリケーションプログラムとは別のアプリケーションプログラムとして構成された改竄チェックプログラム30に基づいて実行する、という役割分担を行うことができる。Android端末のように、もともとOSプログラムが第1の確認段階を行う機能を備えている場合には、このような役割分担を行えば、第1の確認段階を行うためのプログラムを別途用意する手間を省くことができる。
<<< §5.本発明の基本的な実施形態による改竄検知 >>>
ここでは、クラッカーXが、図5に示す方法で作成された配布用ファイル20Aを入手し、これに改竄を加えて再配布した場合に、Android端末において、どのような方法で改竄検知が行われるかについて説明しよう。
図8は、図5に示す配布方法に対してクラッカーXが試みる改竄プロセスを示すブロック図である。クラッカーXは、まず、入手した配布用ファイル20A(図5参照)に含まれるアプリケーションパッケージ21に対して伸張処理を実行し、元のアプリケーションプログラム10を復元し、その中味について改竄を行う。
図8の上段の図は、このような改竄が行われた後のアプリケーションプログラム10Xを示す図である。§2でも述べたとおり、Android端末用のアプリケーションプログラム10の構成要素の中でも、リソースデータ12や補助ファイル14は、容易に改竄することができる。そこで、ここでも、クラッカーXが、リソースデータ12および補助ファイル14に対して改竄を施したものとしよう(もちろん、プログラム本体部11およびサブルーチン群13に対して改竄を受けた場合も、以下に説明する改竄検知処理は有効である)。図8に示すリソースデータ12Xおよび補助ファイル14Xは、クラッカーXによる改竄を受けたものである。続いて、クラッカーXは、アプリケーションプログラム10Xに対する再パッケージ化処理を行い、改竄されたアプリケーションパッケージ21Xを生成する。
もし、クラッカーXが、こうして生成したアプリケーションパッケージ21Xを、図5に示す正規の配布用ファイル20A内の正規のアプリケーションパッケージ21とすり替えて再配布した場合、Android端末で行われる通常の改竄検知処理によって改竄の事実が検知されることは、既に§2で述べたとおりである。すなわち、Aの署名情報22の正当性を確認する処理で不一致が生じることになる。本発明においても、図7に示す実行プロセスにおけるステップS8の第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に示す改竄チェックプロセスにおけるステップS8の第1の確認段階では、このような改竄を検知することはできない。
しかしながら、本発明に係る方法で配布される配布用ファイル20Aには、更に、秘匿情報23が付加されており、この秘匿情報23についての正当性が、ステップS12の第2の確認段階で確認される。秘匿情報23は、図5の下段に示すとおり、秘匿化対象データC(この例では、Aの署名情報22)を第2の特定鍵K(s2)を用いて秘匿化することによって得られる情報であるが、第2の特定鍵K(s2)が秘密の状態で管理されていれば、クラッカーXはこれを入手することができない。したがって、クラッカーXは、自身で作成したXの署名情報22Xを秘匿化対象データC′として、第2の特定鍵K(s2)を用いた秘匿化処理を行い、改竄された秘匿情報23Xを作成することはできない。図8の下段において、×印が付された部分は、実際には、クラッカーXが行うことができない処理やクラッカーXが作成することができない情報を示している。
結局、クラッカーXは、作成した配布用ファイル20X内の秘匿情報については、元のままの状態(秘匿情報23のまま)にしておくか、これを削除してしまうか、あるいは新たに作成した任意の秘匿情報に置き換えるしかない。いずれの方法を採っても、図7に示す改竄チェックプロセスにおけるステップS12の第2の確認段階において、正当性の確認ができないため、改竄の検知が行われることになる。
すなわち、元のままの状態にしておいた場合、第2の確認段階において、Xの署名情報22Xに対する秘匿情報23の正当性を確認する処理が行われることになるが、秘匿情報23は、Aの署名情報22に対して正当性を有する情報であるため、Xの署名情報22Xに対する正当性は確認できない。一方、秘匿情報を削除してしまった場合は、Xの署名情報22Xに対する正当性確認の対象物がないため、そもそも正当性確認の処理を行うことができない。また、新たに作成した任意の秘匿情報に置き換えた場合も、当該置換後の秘匿情報が、Xの署名情報22Xを第2の特定鍵K(s2)を用いて秘匿化することによって得られる情報(別言すれば、第1の特定鍵K(s1)を用いて正当性確認がなされる情報)に偶然一致しない限り、第2の確認段階における正当性確認はなされない。
結局、クラッカーXが、アプリケーションパッケージ21および署名情報22に対する改竄を行ったとしても、秘匿情報23に対する改竄を行うことができなければ、第1の確認段階で改竄が見逃されたとしても、第2の確認段階において改竄が検知されることになる。このように、本発明に係るアプリケーションプログラムの改竄検知方法によれば、電子署名に対する改竄が行われた場合にも、有効な改竄検知を行うことが可能になり、改竄検知後は、必要に応じて、当該アプリケーションプログラムの実行を自動的に中止させることも可能になる。
もちろん、本発明に係るアプリケーションプログラムの改竄検知方法による改竄検知機能は、100%完全なものではない。すなわち、クラッカーXが、改竄チェックプログラム30に対する改竄も行ってしまった場合、第2の確認段階は有効に機能しなくなる。たとえば、改竄チェックプログラム30内の第1の特定鍵K(s1)をクラッカーX自身の特定鍵に書き換えたり、改竄チェックルーチンF自身を無能なルーチンに書き換えてしまえば、第2の確認段階による改竄チェックは正常に機能しなくなる。
したがって、実用上は、前述したように、改竄チェックルーチンF自身は、クラッカーXの手に渡っても容易には解析できないような耐タンパ化処理を施しておくのが好ましい。また、改竄チェックプログラム30は、特別な認証手続を必要とする特定のサイトからダウンロードさせたり、Android端末等に予めプリインストールソフトとして組み込んでおくようにし、配布段階で改竄を受ける危険を回避するようにするのが好ましい。
<<< §6.秘匿化対象データのバリエーション >>>
§3で説明した本発明の基本的な実施形態に係る改竄検知方法では、図5に太線枠で囲って示すように、Aの署名情報22全体(すなわち、署名値S(A)とAの第2の鍵K(a2))を秘匿化対象データCとして、第2の特定鍵K(s2)を用いた秘匿化処理を行い、秘匿情報23を作成している。このようにして作成された秘匿情報23は、Aの署名情報22の痕跡を残す情報というべきものであり、第1の特定鍵K(s1)を用いた所定の確認方法により、Aの署名情報22に対する正当性の確認が可能になるという固有の性質を有している。
このような性質を有する秘匿情報23を配布用ファイル20Aに含ませておけば、Aの署名情報22に対する秘匿情報23の正当性を確認する処理(第2の確認段階)を行うことにより、Aの署名情報22に対する改竄の有無を確認することができるようになる。
もっとも、本発明を実施する上で用いる秘匿化対象データCは、必ずしもAの署名情報22のみに限定されるものではない。ここでは、秘匿化対象データCのバリエーションをいくつか述べておく。
図9は、図5に示す本発明の基本的な実施形態に係る配布方法のバリエーションを示すブロック図である。図5に示す実施形態との相違点は、秘匿化対象データCの設定方法だけである。図5に示す例では、太線枠で囲って示すように、Aの署名情報22全体を秘匿化対象データCに設定しているが、図9に示すバリエーションでは、太線枠で囲って示すように、Aの署名情報22に含まれるAの第2の鍵K(a2)を構成するデータのみを秘匿化対象データCに設定している。
したがって、図9に示すバリエーションの場合、図7のステップS3の秘匿情報作成段階において、第2の特定鍵K(s2)を用いてAの第2の鍵K(a2)を秘匿化することにより秘匿情報23′を作成することになる。また、ステップS12の第2の確認段階において、Aの署名情報22に対する秘匿情報23の正当性を確認する代わりに、このバリエーションにおける秘匿化対象データCであるAの第2の鍵K(a2)に対する秘匿情報23′の正当性が確認されることになる。
このように、秘匿化対象データCとして、Aの署名情報22の代わりにAの第2の鍵K(a2)を用いたとしても、署名情報に対する改竄が行われたか否かを検知する上では支障は生じない。そもそもAの署名情報22は、プログラム提供者Aがアプリケーションパッケージ21を署名対象データDとして、その内容を保証することを示すものであり、プログラム提供者Aの痕跡はAの第2の鍵K(a2)として記録されていることになる。そして、クラッカーXが、署名情報に対する改竄を行う場合、図8に示すように、Aの署名情報22をそっくりXの署名情報22Xに差し替えることになるので、当然、Aの第2の鍵K(a2)もXの第2の鍵K(x2)に差し替えられることになる。
したがって、Aの第2の鍵K(a2)を秘匿化対象データCに設定し、これを秘匿化して秘匿情報23′を作成し、第2の確認段階において、Aの第2の鍵K(a2)に対する秘匿情報23′の正当性を確認するようにしても、署名情報に対する改竄の有無を検知することができる。Aの第2の鍵K(a2)がXの第2の鍵K(x2)に差し替えられていた場合、秘匿情報23′は、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の署名情報22をそっくりXの署名情報22Xに差し替えたとしても、第2の確認段階における改竄検知を免れることはできない。
このように、図5に示す例のように、Aの署名情報22を秘匿化対象データCとして設定することもできるし、図9に示すバリエーションのように、Aの第2の鍵K(a2)を秘匿化対象データCとして設定することもできるし、その他にも種々のバリエーションを採用することができる。
図10は、別なバリエーションを示すブロック図である。このバリエーションでは、太線枠で囲って示すように、アプリケーションパッケージ21とAの署名情報22との双方を構成するデータ全体を秘匿化対象データCに設定している。したがって、このバリエーションの場合、第2の特定鍵K(s2)を用いて、図に太線枠で囲った部分のデータ全体を秘匿化することにより秘匿情報23''を作成することになる。そして第2の確認段階では、この太線枠で囲った部分のデータ全体に対する秘匿情報23''の正当性が確認されることになる。
この図10に示すバリエーションでも、秘匿化対象データCにAの第2の鍵K(a2)が含まれているため、クラッカーXがAの署名情報22をXの署名情報22Xに差し替える改竄を行っても、第2の確認段階による改竄検知が有効に機能することになる。
結局、プログラム提供者Aが署名した痕跡を何らかの形で配布用ファイル20Aに残しておくには、図7のステップS3の秘匿情報作成段階において、アプリケーションパッケージ21および署名情報22を構成するデータの中から、プログラム提供者の第2の鍵K(a2)を含む所定部分を秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対して第2の特定鍵K(s2)を用いた秘匿化処理を施して秘匿情報を作成するようにすればよい。
図5に示す例は、署名情報22を構成するデータ全体を秘匿化対象データCに設定して秘匿情報23を作成した例であり、図9に示す例は、署名情報22に含まれるプログラム提供者の第2の鍵K(a2)を構成するデータを秘匿化対象データCに設定して秘匿情報23′を作成した例であり、図10に示す例は、アプリケーションパッケージ21と署名情報22との双方を構成するデータ全体を秘匿化対象データCに設定して秘匿情報23''を作成した例ということになる。
プログラム提供者Aが署名した痕跡を残しておく、という目的を達成する上では、図9に示す例のように、プログラム提供者の第2の鍵K(a2)のみを秘匿化対象データCとする方法が最も簡便で直接的な方法である。このような観点からは、図5に示す例や図10に示す例は、冗長な方法と言うことができる。しかしながら、プログラム提供者Aが署名した痕跡に加えて、アプリケーションパッケージ21に関する何らかの痕跡も残しておく、という観点では、図5に示す例や図10に示す例は意味のある方法になる。
たとえば、図10に示す例では、太線枠で囲ったアプリケーションパッケージ21と署名情報22との双方が秘匿化対象データCに設定されており、第2の確認段階では、これらのデータ全体に対する秘匿情報23''の正当性の確認が行われることになるので、アプリケーションパッケージ21に対する改竄検知と署名情報22に対する改竄検知との両方を行うことが可能である。
図5に示す基本的な実施形態では、アプリケーションパッケージ21に対する改竄検知は、Aの署名情報22を用いた第1の確認段階で行い、署名情報22に対する改竄検知は、秘匿情報23を用いた第2の確認段階で行うことになるが、図10に示すバリエーションの場合、アプリケーションパッケージ21に対する改竄検知は、Aの署名情報22を用いた第1の確認段階で行われるとともに、秘匿情報23''を用いた第2の確認段階でも重ねて行われることになる。
これまで述べてきた実施形態では、第2の確認段階の処理を、署名情報の改竄検知を行うための処理として捉えてきたが、第2の確認段階の処理は、上述したとおり、アプリケーションパッケージ21に対する改竄検知にも利用することが可能である。
したがって、第2の確認段階の処理を、署名情報の改竄検知ではなく、アプリケーションパッケージ21に対する改竄検知のみに利用するのであれば、秘匿化対象データCには、必ずしもプログラム提供者Aの第2の鍵K(a2)が含まれている必要はない。たとえば、アプリケーションパッケージ21の部分のみを秘匿化対象データCに設定して、秘匿情報23'''を作成した場合、第2の確認段階では、Aの署名情報22に対する改竄検知を行うことはできないが、アプリケーションパッケージ21に対する改竄検知を行うことは可能である。
結局、本発明の基本的な技術思想は、コンピュータが、アプリケーションプログラム10(これまで述べてきた実施形態の場合は、パッケージ化された状態のアプリケーションパッケージ21)と、署名情報22と、秘匿情報23(上述した各バリエーションの場合は、23′,23'',23''')とを含むデータファイルを入力する入力段階と、コンピュータが、当該アプリケーションプログラム10が改竄されているか否かを判定する判定段階と、を有するアプリケーションプログラムの改竄検知方法ということになる。
ここで、署名情報22は、アプリケーションプログラム10(もしくは、アプリケーションパッケージ21)を署名対象データDとする電子署名処理によって得られた情報であり、秘匿情報23(もしくは、23′,23'',23''')は、当該アプリケーションプログラム10(もしくは、アプリケーションパッケージ21)および署名情報22を構成するデータの中の所定部分を秘匿化対象データCとして抽出し、抽出した秘匿化対象データCに対する秘匿化処理を施して得られた情報ということになる。
また、コンピュータによって実行される上記判定段階は、署名情報22に基づいて改竄の有無を確認する第1の確認段階と、秘匿情報23(もしくは、23′,23'',23''')に基づいて改竄の有無を確認する第2の確認段階と、を有している。そして、コンピュータには、改竄チェックプログラム30がインストールされており、この改竄チェックプログラム30には秘匿化処理で行われた処理プロセスを勘案して秘匿化対象データCに対する秘匿情報の正当性を確認する改竄チェックルーチンFが含まれており、この改竄チェックルーチンFを実行することにより第2の確認段階が行われることになる。
これまで述べてきた実施例は、プログラム提供者の第2の鍵K(a2)を含む所定部分を秘匿化対象データCとして用い、OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータによって、第1の確認段階をOSプログラムに基づいて実行し、第2の確認段階をアプリケーションプログラム30内の改竄チェックルーチンFに基づいて実行するようにした例ということになる。
<<< §7.秘匿化処理の具体的な実施形態 >>>
ここでは、本発明における秘匿情報作成段階(図7のステップS3)で行われる秘匿化処理の具体的な実施形態を述べる。図5に示すように、本発明における秘匿情報作成段階では、秘匿化対象データCに対して、第2の特定鍵K(s2)を用いた秘匿化処理が行われ、秘匿情報23が作成される。ここで、秘匿情報23は、秘匿化対象データCおよび第2の特定鍵K(s2)が与えられれば一義的に定まる何らかのデータであり、改竄チェックルーチンFによって実行される第1の特定鍵K(s1)を用いた所定のチェック処理によって、秘匿化対象データCに対する秘匿情報23の正当性が確認されることになる。
秘匿化対象データCを秘匿化して秘匿情報23を作成するには、第2の特定鍵K(s2)が必要である。したがって、第2の特定鍵K(s2)を秘密に管理していれば、クラッカーXは秘匿情報23を生成することができない。また、秘匿情報23は、文字通り「元の秘匿化対象データCを秘匿化」した情報になっており、秘匿情報23だけを用いて、元の秘匿化対象データCを復元することはできない。以下、このような性質を有する秘匿情報23を作成するための具体的な秘匿化処理の方法を述べる。
なお、以下の説明は、§3で述べた基本的な実施形態と同様に、Aの署名情報22を秘匿化対象データCに設定した例(図5の例)についてのものであるが、もちろん、以下に述べる秘匿化処理の具体的な処理方法は、§6で述べたように、秘匿化対象データCについて様々な設定を行うバリエーション(たとえば、図9や図10の例)についても有効である。
<7−1:暗号化処理>
本発明における秘匿化処理に適した第1の処理は、暗号化処理である。秘匿化処理として暗号化処理を利用する場合、秘匿化対象データCと秘匿情報23との関係は、前者を暗号化することにより後者が得られ、後者を復号することにより前者が得られる、という関係になる。
このような暗号化および復号を行うには、公開鍵暗号方式を利用するのが好ましい。公開鍵暗号方式では、一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵が用いられる。したがって、秘匿情報23は、秘匿化対象データCを一方の鍵を用いて暗号化することにより得られることになり、改竄チェックルーチンFは、この秘匿情報23を他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイル20Aから抽出した秘匿化対象データCとが一致していた場合に改竄なしとの確認を行うことになる。
図11は、図5に示す配布方法における秘匿情報23として、暗号化された情報を用いる具体的実施例を示すブロック図である。この実施例は、§3で述べたように、個々のプログラム提供者A,B,C,...とは別個に、とりまとめ役としてのプログラム保証者Gが参画した例である。プログラム保証者Gは、Gの第1の鍵K(g1)を内蔵した改竄チェックプログラム30Gを用意し、個々のプログラム提供者A,B,C,...には、Gの第2の鍵K(g2)を提供する。プログラム保証者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は、予め、自分(G)の第1の鍵K(g1)を用いて改竄チェックを行う改竄チェックルーチンFを用意し、この改竄チェックルーチンFとGの第1の鍵K(g1)とを組み込んだ改竄チェックプログラム30Gを配布するようにする。前述したとおり、この改竄チェックプログラム30Gは、耐タンパ化を施しておき、できるだけ安全な配布経路を介してユーザの手元に配布されるようにするのが好ましい(認証手続を必要とするダウンロードやプリインストールなど)。
一方、プログラム保証者Gは、自分(G)の第2の鍵K(g2)を記録した媒体を、個々のプログラム提供者A,B,C,...に貸し与える。図示の例の場合、プログラム提供者Aは、この媒体を利用して、配布用ファイル20Aを作成することができる。したがって、ここに示す実施形態では、Aの署名情報22は、プログラム提供者Aが、自分自身の鍵を用いてアプリケーションパッケージ21の内容を保証するために付加する情報としての役割を果たし、秘匿情報23は、プログラム保証者Gが、自分自身の鍵を用いてAの署名情報22の内容を保証するために付加する情報としての役割を果たすことになる。
プログラム提供者Aは、まず、従来と同様の方法で、図11の上段に示すようなアプリケーションプログラム10を作成し、これを従来の方法と同様にパッケージ化し(APKファイル作成用の専用プログラムを用いればよい)、アプリケーションパッケージ21を作成する(図7のステップS1のパッケージ化段階)。次に、プログラム提供者Aは、このアプリケーションパッケージ21を署名対象データDとして、自分の第1の鍵K(a1)を用いた電子署名処理を行い、Aの署名情報22を作成する(図7のステップS2の署名情報作成段階)。
続いて、プログラム保証者Gから借り受けた媒体から、Gの第2の鍵K(g2)を読み出し、Aの署名情報22を秘匿化対象データCとして、Gの第2の鍵K(g2)を用いた秘匿化処理を行い、秘匿情報23を作成する(図7のステップS3の秘匿情報作成段階)。この図11に示す実施例の場合、秘匿化処理として暗号化処理を採用しているため、秘匿情報作成段階では、第2の特定鍵(すなわち、プログラム保証者Gの第2の鍵K(g2))を用いて、秘匿化対象データCに対する暗号化処理を施して秘匿情報23が作成される。
最後に、アプリケーションパッケージ21、Aの署名情報22、秘匿情報23をまとめれば、配布用ファイル20A(APKファイル)を作成することができる(図7のステップS4の配布用ファイル作成段階)。そこで、これをWebサーバや物理的媒体に出力して(図7のステップS5のファイル出力段階)、任意の方法で配布すればよい。
一方、アプリケーション実行用コンピュータ(Android端末)は、このような方法で作成された配布用ファイル20A(APKファイル)を入手することになるが(図7のステップS6のファイル入力段階)、このとき、このコンピュータ内には、既に、プログラム保証者Gから配布された改竄チェックプログラム30Gがインストールされている(図7のステップS0)。したがって、新たに入手した配布用ファイル20Aをインストールして実行しようとすると、Android端末のOSプログラムの機能により署名情報22の正当性が確認され(図7のステップS8の第1の確認段階)、改竄チェックプログラム30Gを動作させれば、改竄チェックルーチンFの機能により秘匿情報23の正当性が確認される(図7のステップS12の第2の確認段階)。
図12は、図11に示す配布用ファイル20Aについて、署名情報22の正当性および秘匿情報23の正当性を確認する処理を示すブロック図である。
まず、署名情報22の正当性の確認(第1の確認段階)は、既に述べたように、次のようにして行われる。はじめに、署名情報22から署名値S(A)およびAの第2の鍵K(a2)を抽出し、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことにより、ハッシュ値H1を得る。次に、アプリケーションパッケージ21(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行い、ハッシュ値H2を求める処理を行う。そして、ハッシュ値H1とハッシュ値H2とが一致するか否かを確認する処理を行えば、第1の確認段階は終了する。
一方、秘匿情報23の正当性の確認(第2の確認段階)は、公開鍵暗号方式の基本原理を利用することによって行われる。すなわち、ここに示す実施例では、プログラム保証者Gの第1の鍵K(g1)と第2の鍵K(g2)とは、公開鍵暗号方式における一対の鍵を構成しており、第2の鍵K(g2)を用いて暗号化したデータは、第1の鍵K(g1)を用いて復号することができる。そこで、改竄チェックルーチンFは、次のような方法で第2の確認段階の処理を実行する。
はじめに、図12に示すように、改竄チェックプログラム30Gに内蔵されているプログラム保証者Gの第1の鍵K(g1)を用いて、入力した配布用ファイル20Aから抽出した秘匿情報23を復号し、元の秘匿化対象データCを得る。続いて、この復号によって得られた秘匿化対象データCと、入力した配布用ファイル20Aから抽出した秘匿化対象データC(この例の場合は、Aの署名情報22)とが一致していた場合に、秘匿情報23が正当である旨の確認を行えばよい。
結局、ここで述べた方法は、秘匿化対象データCを暗号化という手法で秘匿化して、秘匿情報23という形で配布用ファイル20Aに付加して配布し、アプリケーション実行用コンピュータ(Android端末)では、秘匿情報23を復号した結果が秘匿化対象データCに一致することを確認することにより、改竄の有無を検知する方法ということができる。クラッカーXは、暗号化に用いられたプログラム保証者Gの第2の鍵K(g2)を入手することができないため、秘匿情報23の改竄を行うことはできない。
<7−2:ダイジェスト化処理>
本発明における秘匿化処理に適した第2の処理は、ダイジェスト化処理である。秘匿化処理としてダイジェスト化処理を利用する場合、秘匿化対象データCと秘匿情報23との関係は、前者をダイジェスト化することにより後者が得られる、という関係になる。
ここで、ダイジェスト化とは、元の情報から情報量を減らす演算処理を行って、元の情報に基づいて一義的に決定できる別な情報を得る処理である。具体的には、元の情報を構成するデータに対して、何らかの一方向性関数を作用させる処理を行えばよい。この場合、秘匿情報23は、秘匿化対象データCに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して得られることになり、改竄チェックルーチンFは、入力段階で入力したデータファイル20Aから抽出した秘匿化対象データCに対して、上記特定鍵と同一の鍵を用いた上記ダイジェスト化処理と同一の処理を施して得られる情報が、入力段階で入力したデータファイル20Aに含まれている秘匿情報20Aと一致していた場合に改竄なしとの確認を行うことになる。
図13は、図5に示す配布方法における秘匿情報23として、ダイジェスト化された情報を用いる具体的実施例を示すブロック図である。この実施例でも、プログラム提供者Aが配布用ファイル20Aを配布する際に、プログラム保証者Gの助力を受けることになる。ただ、第1の特定鍵K(s1)および第2の特定鍵K(s2)としては、同一の共通特定鍵K(s0)を用いる。
プログラム保証者Gは、予め、自己が秘密状態で管理している共通特定鍵K(s0)を用いて改竄チェックを行う改竄チェックルーチンFを作成しておき、この改竄チェックルーチンFと当該共通特定鍵K(s0)とを組み込んだ改竄チェックプログラム30Gを配布する。この改竄チェックプログラム30Gも、耐タンパ化を施しておき、共通特定鍵K(s0)が容易に読み出されないようにしておく。一方、プログラム保証者Gは、個々のプログラム提供者A,B,C,...に対しては、当該共通特定鍵K(s0)が記録された媒体を貸し与える。そうすれば、たとえば、プログラム提供者Aは、この媒体を利用して、配布用ファイル20Aを作成することができる。
具体的には、プログラム提供者Aは、上述した暗号化処理を採用する実施例と同様に、図13の上段に示すようなアプリケーションプログラム10を用意し、これをパッケージ化し、アプリケーションパッケージ21を作成する。そして、プログラム提供者Aは、このアプリケーションパッケージ21を署名対象データDとして、自分の第1の鍵K(a1)を用いた電子署名処理を行い、Aの署名情報22を作成する。
続いて、プログラム保証者Gから借り受けた媒体から、共通特定鍵K(s0)を読み出し、Aの署名情報22を秘匿化対象データCとして、共通特定鍵K(s0)を用いた秘匿化処理を行い、秘匿情報23を作成する。この図13に示す実施例の場合、秘匿化処理としてダイジェスト化処理を採用しているため、秘匿情報作成段階では、共通特定鍵K(s0)を用いて、秘匿化対象データCに対するダイジェスト化処理を施して秘匿情報23が作成される。
ダイジェスト化処理は、前述したように、秘匿化対象データCに対して、共通特定鍵K(s0)をパラメータとして用いた一方向性関数を作用させる処理である。具体的には、共通特定鍵K(s0)をパラメータとして用いたハッシュ関数を作用させる処理を行い、得られるハッシュ値を秘匿情報23とすればよい。
最後に、アプリケーションパッケージ21、Aの署名情報22、秘匿情報23をまとめて配布用ファイル20A(APKファイル)を作成し、これを配布すればよい。
一方、アプリケーション実行用コンピュータ(Android端末)は、このような方法で作成された配布用ファイル20A(APKファイル)について、図14のブロック図に示す方法を行い、署名情報22の正当性および秘匿情報23の正当性を確認する処理を行う。
ここで、署名情報22の正当性の確認(第1の確認段階)は、これまで述べてきた実施例と全く同様である。すなわち、署名値S(A)に対してAの第2の鍵K(a2)を用いた復号処理を行うことによりハッシュ値H1を得る処理を行うとともに、アプリケーションパッケージ21(署名対象データD)に対して、ハッシュ関数HASHを作用させた不可逆変換を行ってハッシュ値H2を得る処理を行い、ハッシュ値H1とハッシュ値H2とが一致するか否かを確認する処理を行うことになる。
一方、秘匿情報23の正当性の確認(第2の確認段階)は、プログラム提供者Aが秘匿情報23を作成する際に行った処理と全く同じ処理を実行し、同じ結果が得られるか否かを確認することによって行われる。もちろん、この場合、コンピュータ内には、既に、プログラム保証者Gから配布された改竄チェックプログラム30G(共通特定鍵K(s0)を用いて改竄チェックを行う改竄チェックルーチンFを含むプログラム)がインストールされている必要があり(図7のステップS0)、以下の改竄チェック処理は、この改竄チェックルーチンFによって実行される。
具体的には、図14に示すように、まず、入力した配布用ファイル20Aから秘匿化対象データC(この例の場合、Aの署名情報22)を抽出する。そして、抽出した秘匿化対象データCに対して、改竄チェックプログラム30Gに内蔵されている共通特定鍵K(s0)を用いたダイジェスト化処理(配布プロセスの秘匿情報作成段階で行われた処理と同一の処理)を実行する。すなわち、配布プロセスで行ったように、共通特定鍵K(s0)をパラメータとして用いたハッシュ関数を作用させる処理を行い、ハッシュ値を得るようにすればよい。このダイジェスト化処理によって得られたハッシュ値が、入力した配布用ファイル20Aに含まれている秘匿情報23と一致していた場合に、当該秘匿情報23が正当である旨の確認を行うことになる。
結局、ここで述べた方法は、秘匿化対象データCをダイジェスト化という手法で秘匿化して、秘匿情報23という形で配布用ファイル20Aに付加して配布し、アプリケーション実行用コンピュータ(Android端末)では、同じ手法で秘匿化対象データCをダイジェスト化して、付加されていた秘匿情報23に一致することを確認することにより、改竄の有無を検知する方法ということができる。改竄チェックプログラム30Gに対して十分な耐タンパ化が施されていれば、クラッカーXは、ダイジェスト化に用いられたプログラム保証者Gの共通特定鍵K(s0)を入手することができないため、秘匿情報23の改竄を行うことはできない。
秘匿化処理として暗号化を採用した場合、得られる秘匿情報には、復号によって元の秘匿化対象データCを復元するために必要な情報がそのまま含まれている。したがって、元の秘匿化対象データCの情報量が多ければ、得られる秘匿情報の情報量も多くなる。このため、たとえば、図10に示す例のように、アプリケーションパッケージ21およびAの署名情報22をそっくり含むデータを秘匿化対象データCとして用いる場合は、得られる秘匿情報23''のデータ容量はかなり大きくなり、配布用ファイル20A''の肥大化を招くことになる。
これに対して、秘匿化処理としてダイジェスト化を採用した場合、得られる秘匿情報から元の秘匿化対象データCを復元する必要はないため、秘匿情報の情報量を大幅に削減することが可能である。このため、たとえば、図10に示す例のように、かなり大きなデータ容量をもつ秘匿化対象データCを設定した場合でも、ダイジェスト化を採用すれば、得られる秘匿情報23''のデータ容量を低く抑えることができ、配布用ファイル20A''の肥大化を防ぐことができる。
<7−3:その他の秘匿化処理>
以上、本発明における秘匿化処理の具体的な実施形態として、暗号化処理とダイジェスト化処理を例示したが、本発明を実施するにあたり、秘匿化処理の具体的な形態は、これら2つの処理に限定されるものではない。
本発明における秘匿化処理は、互いに特別な関係をもった第1の特定鍵K(s1)と第2の特定鍵K(s2)とを用いることを前提とした処理であり、第2の特定鍵K(s2)を用いた何らかの演算処理によって、元の秘匿化対象データCに対して一義的に秘匿情報23を決定することができ、しかも第1の特定鍵K(s1)を用いることによって、秘匿化対象データCに対する秘匿情報23の正当性が確認できる(すなわち、改竄を受けていないことを確認できる)、という条件を満たす処理であれば、どのような処理を秘匿化処理として採用してもかまわない。
前述した暗号化処理では、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、「公開鍵暗号方式に用いる一対の鍵」という互いに特別な関係をもった鍵がが採用されることになる。また、前述したダイジェスト化処理では、第1の特定鍵K(s1)および第2の特定鍵K(s2)として、「同一の共通特定鍵K(s0)である」という互いに特別な関係をもった鍵が採用されることになる。
<<< §8.秘匿情報および特定鍵の引き渡し方法の変形例 >>>
これまで述べてきた実施形態では、秘匿情報23を配布用ファイル20Aに組み込み、第1の特定鍵K(s1)を改竄チェックプログラム30に組み込む方式を採用している。したがって、ユーザUが利用するアプリケーションプログラム実行用コンピュータ(Android端末)には、秘匿情報は配布用ファイルの一部として引き渡され、第1の特定鍵K(s1)は改竄チェックプログラムの一部として引き渡される。しかしながら、秘匿情報および特定鍵をアプリケーションプログラム実行用コンピュータに引き渡す方法は、上記方法に限定されるものではない。以下、この点に関する変形例を述べておく。
<8−1:秘匿情報の引き渡し方法の変形例>
本発明に係るアプリケーションプログラムの改竄検知方法では、まず、配布プロセスにおいて秘匿情報を作成し、続いて、改竄チェックプロセスにおいて、この秘匿情報を利用した改竄有無の判定を行うことになる。したがって、配布プロセスで作成した秘匿情報を、何らかの方法で改竄チェックプロセスに引き渡す必要がある。これまで述べてきた実施形態は、配布用ファイル作成段階において作成する配布用ファイル内に、作成した秘匿情報を組み込むことにより、配布用ファイルとともに秘匿情報の引き渡しが行われるようにしていた。
たとえば、図5に示す実施形態の場合、秘匿情報23は配布用ファイル20A内に組み込まれた状態で配布されることになり、図9に示す実施形態の場合、秘匿情報23′は配布用ファイル20A′内に組み込まれた状態で配布されることになり、図10に示す実施形態の場合、秘匿情報23''は配布用ファイル20A''内に組み込まれた状態で配布されることになる。このように、秘匿情報を配布用ファイル内に組み込んでしまえば、アプリケーション実行用コンピュータは、配布用ファイルを入手した時点で、秘匿情報も併せて入手することが可能になる。
ただ、秘匿情報の引き渡し方法は、必ずしも配布用ファイル内に組み込む方法に限定されるものではない。ここでは、秘匿情報の引き渡し方法の変形例を述べておく。図15は、図5に示す基本的な実施形態について、秘匿情報の引き渡し方法を変えた変形例を示すブロック図である。図の上段はプログラム提供者Aによって実行される配布プロセスを示し、下段はユーザUによって実行される改竄チェックプロセスを示している。この変形例の特徴は、配布プロセスで作成した秘匿情報23を、サーバ100を介して改竄チェックプロセスに引き渡す方法を採る点である。
すなわち、図5に示す基本的な実施形態の場合、秘匿情報23は配布用ファイル20Aに組み込まれて配布されることになるが、図15に示す変形例の場合、秘匿情報23はサーバ100に格納され、その代わりに、この秘匿情報23の所在を示す所在情報24が配布用ファイル20αに組み込まれて配布されることになる。図5に示す配布用ファイル20Aと図15に示す配布用ファイル20αとの相違は、前者の秘匿情報23が後者では所在情報24になっている点のみである。一般に、秘匿情報23のデータ容量が嵩むケースでは、秘匿情報23を配布用ファイル20Aに組み込んでしまうと、配布用ファイル20Aのデータ容量も嵩むことになる。このようなケースでは、図15に示す変形例を採れば、秘匿情報23に比べてデータ容量の小さい所在情報24を組み込んて配布用ファイル20αを作成することができるので、配布用ファイル20αのデータ容量を抑えることができ便利である。
サーバ100は、アプリケーション実行用コンピュータがネットワークを介してアクセス可能なサーバであれば、どのようなサーバであってもかまわない。ここに示す例では、インターネットに接続された任意のファイルサーバをサーバ100として利用している。所在情報24は、サーバ100およびその中における秘匿情報23の格納場所を特定する情報であり、具体的には、秘匿情報23の格納場所を示すURLを所在情報24として用いればよい。結局、図15に示す変形例の場合、プログラム提供者Aは、所在情報24が組み込まれた配布用ファイル20αを配布することになる。一方、ユーザUが利用するアプリケーション実行用コンピュータは、この配布用ファイル20αを入手することにより、所在情報24(この例の場合は、秘匿情報23の格納場所を示すURL)を入手することができるので、この所在情報24を用いてインターネットにアクセスし、秘匿情報23を入手することが可能になる。
このように、この変形例においても、プログラム提供者AからユーザUに対して、秘匿情報23が引き渡される点は、これまで述べてきた実施形態と変わりはないので、秘匿情報23を用いた改竄有無判定処理も、これまで述べてきた実施形態と同様の処理を行えばよいことになる。要するに、本発明の配布プロセスにおける配布用ファイル作成段階では、アプリケーションパッケージと、署名情報と、秘匿情報もしくは秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成すればよく、改竄チェックプロセスにおける第2の確認段階では、入力した配布用ファイルに基づいて秘匿化対象データおよび秘匿情報を入手し、秘匿化対象データに対する秘匿情報の正当性を確認すればよい。
配布用ファイル作成段階で、秘匿情報23を含む配布用ファイル20Aを作成した場合(図5に示す実施形態の場合)は、第2の確認段階で、配布用ファイル20Aから秘匿情報23を直接抽出することにより、秘匿情報23の入手を行うことができる。これに対して、配布用ファイル作成段階で、秘匿情報23を所定の格納場所(サーバ100)に格納する処理を行うとともに、当該格納場所を示す所在情報24を含む配布用ファイル20αを作成した場合(図15に示す変形例の場合)は、第2の確認段階で、配布用ファイル20αから所在情報24を抽出し、この所在情報24に基づいて格納場所(サーバ100)を認識し、格納場所(サーバ100)から秘匿情報23を取り出すことにより、当該秘匿情報の入手を行うことができる。
なお、サーバ100から秘匿情報23を入手する処理は、アプリケーション実行用コンピュータが、配布用ファイル20αに含まれているアプリケーションについての第2の確認段階を実行するたびに毎回行うようにしてもよいが、実用上は、アプリケーション実行用コンピュータ内に、入力した個々の配布用ファイルについて、それぞれ秘匿情報を保存する保存場所(たとえば、アプリケーション実行用コンピュータ内の不揮発性メモリ内の、当該アプリケーションに割り当てられた領域)を設けておき、秘匿情報23を一度入手したら、これをその保存場所に保存するようにし、次回からは、この保存場所に保存されている秘匿情報23を利用するようにするのが好ましい。そうすれば、保存場所に秘匿情報23を保存した後は、インターネットに接続できない状態でも、当該アプリケーションを起動させることができる。
すなわち、アプリケーション実行用コンピュータが、改竄チェックルーチンFによって第2の確認段階を実行する際に、所定の保存場所に、必要な秘匿情報23が保存されていない場合には、配布用ファイル20αから所在情報24を抽出し、この所在情報24に基づいて格納場所(サーバ100)を認識し、この格納場所(サーバ100)から秘匿情報23を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報23をアプリケーション実行用コンピュータ内の保存場所に保存する処理を行うようにすればよい。そして、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、当該コンピュータ内の保存場所に、必要な秘匿情報23が保存されている場合には、この保存場所から秘匿情報23を取り出すことにより、当該秘匿情報の入手を行うようにすればよい。
もちろん、ここで述べる変形例は、図5に示す基本的な実施形態だけでなく、その他の実施形態に対しても適用可能である。また、配布プロセスにおいて、秘匿情報23を任意のサーバに格納する際には、必ずしも1箇所のサーバ100に格納しておく必要はなく、複数箇所に分散して格納するようにしてもよい。たとえば、秘匿情報23を3つのファイルに分割し、第1の分割ファイルを第1のサーバ101に格納し、第2の分割ファイルを第2のサーバ102に格納し、第3の分割ファイルを第3のサーバ103に格納する、という格納方法を採ってもかまわない。この場合、所在情報24は、これら3箇所の格納場所を示す情報ということになる。また、この場合、所在情報24に、分割方法を示す情報も含ませておけば、改竄チェックプロセスにおいて、3箇所から入手した個々の分割ファイルに対して、分割方法を参照した合成処理を行い、元の秘匿情報23を復元することができる。
ここで述べた変形例を採用する場合、改竄チェックルーチンFは、配布用ファイル20αから所在情報24を抽出し、この所在情報24に基づいて格納場所(たとえば、図15のサーバ100)を認識し、認識した格納場所から秘匿情報23を取り出すことにより、当該秘匿情報の入手を行う必要がある。
また、アプリケーション実行用コンピュータ内に秘匿情報23の保存場所を確保するようにする場合は、改竄チェックルーチンFは、コンピュータ内に設けられた秘匿情報の保存場所に秘匿情報23が保存されていない場合には、配布用ファイル20αから所在情報24を抽出し、この所在情報24に基づいて格納場所を認識し、この格納場所から秘匿情報23を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報23を保存場所に保存する処理を行い、この保存場所に秘匿情報23が保存されている場合には、この保存場所から秘匿情報23を取り出すことにより、当該秘匿情報の入手を行うようにすればよい。
なお、所在情報24に基づいてサーバ100から秘匿情報を入手する処理プロセスは、改竄チェックルーチンFによって行ってもよいが、改竄チェックプログラム30内に設けられた別なルーチンによって行ってもかまわない。また、図15では、秘匿情報23を格納する場所として、インターネットを介して接続されたサーバ100を利用した例を示したが、秘匿情報23を格納する外部の格納場所は、必ずしもサーバ装置である必要はない。たとえば、アプリケーション実行用コンピュータに接続可能なICカードやUSBメモリなどの記憶媒体を格納場所として、秘匿情報23を格納するようにしてもかまわない。この場合、所在情報24は、当該記憶媒体内の格納場所を示すことになる。
<8−2:第1の特定鍵の引き渡し方法の変形例>
続いて、第1の特定鍵K(s1)(共通特定鍵K(s0)を第1の特定鍵K(s1)として利用する場合も含む)の引き渡し方法を述べる。本発明に係るアプリケーションプログラムの改竄検知方法では、改竄チェックルーチンFが、第1の特定鍵K(s1)を用いて秘匿化対象データCに対する秘匿情報の正当性を確認する第2の確認段階を実行することになる。そして、たとえば、図5に示す実施形態では、改竄チェックプログラム30内に改竄チェックルーチンFと第1の特定鍵K(s1)とを組み込み、これをユーザUに配布することにより、アプリケーションプログラム実行用コンピュータへの引き渡しが行われるようにしていた。このように、第1の特定鍵K(s1)を改竄チェックプログラム30内に組み込んでしまえば、アプリケーション実行用コンピュータは、改竄チェックプログラム30を入手した時点で、第1の特定鍵K(s1)も併せて入手することが可能になる。
ただ、第1の特定鍵K(s1)の引き渡し方法は、必ずしも改竄チェックプログラム30内に組み込む方法に限定されるものではない。ここでは、第1の特定鍵K(s1)の引き渡し方法の変形例を述べておく。図16は、図5に示す基本的な実施形態について、第1の特定鍵K(s1)の引き渡し方法を変えた変形例を示すブロック図である。図の上段はプログラム保証者Gによって実行される改竄チェックプログラムの配布プロセスを示し、下段はユーザUによって実行される改竄チェックプロセスを示している。この変形例の特徴は、改竄チェック処理に必要な第1の特定鍵K(s1)を、サーバ100を介して引き渡す方法を採る点である。
すなわち、図5に示す基本的な実施形態の場合、第1の特定鍵K(s1)は改竄チェックプログラム30に組み込まれて配布されることになるが、図16に示す変形例の場合、第1の特定鍵K(s1)はサーバ100に格納され、その代わりに、この第1の特定鍵K(s1)の所在を示す所在情報31が改竄チェックプログラム30αに組み込まれて配布されることになる。なお、ここに示す改竄チェックプログラム30αには、図示のとおり、改竄チェックルーチンFおよび第1の特定鍵K(s1)の所在を示す所在情報31の他に、認証用データD(A)および復号鍵K(d)も組み込まれている。
この変形例においても、サーバ100は、アプリケーション実行用コンピュータがネットワークを介してアクセス可能なサーバであれば、どのようなサーバであってもかまわないが、ここでは、インターネットに接続された任意のファイルサーバをサーバ100として利用している。所在情報31は、サーバ100およびその中における第1の特定鍵K(s1)の格納場所を特定する情報であり、具体的には、第1の特定鍵K(s1)の格納場所を示すURLを所在情報31として用いればよい。
なお、ここに示すサーバ100には、図示のとおり、第1の特定鍵K(s1)の他に、認証用データD(A)および暗号鍵K(e)も格納されている。このサーバ100内の認証用データD(A)は、改竄チェックプログラム30α内に組み込まれている認証用データD(A)と同一のデータである。また、サーバ100内の暗号鍵K(e)は、改竄チェックプログラム30α内に組み込まれている復号鍵K(d)に対応した鍵であり、暗号鍵K(e)を用いて暗号化したデータは、復号鍵K(d)を用いて復号することができる。逆に、復号鍵K(d)を用いて暗号化したデータを、暗号鍵K(e)を用いて復号することもできる。
このように、図16に示す変形例の場合、プログラム保証者Gからは、所在情報31が組み込まれた改竄チェックプログラム30αが配布されるので、ユーザUが利用するアプリケーション実行用コンピュータは、この所在情報31(この例の場合は、第1の特定鍵K(s1)の格納場所を示すURL)を用いてインターネットにアクセスし、第1の特定鍵K(s1)を入手することが可能になる。したがって、改竄チェックルーチンFは、こうして入手した第1の特定鍵K(s1)を用いて、これまで述べてきた実施形態と同様の第2の確認段階を実行することができる。
ところで、既に述べたとおり、第1の特定鍵K(s1)がクラッカーXの手に渡ると、クラッカーXによる秘匿情報23の改竄の可能性が高まることになるので好ましくない。そこで、図16に示す変形例では、サーバ100から第1の特定鍵K(s1)を取り出す際に、認証プロセスおよび暗号化プロセスを行い、サーバ100に対する直接攻撃により、第1の特定鍵K(s1)が不正取得されることを防ぐようにしている。
すなわち、ここに示す例の場合、第1の特定鍵K(s1)は、所定の認証用データD(A)を用いた認証機能が備わった格納場所として機能するサーバ100内に安全に保管されている。一方、改竄チェックプログラム30α内にも、同一の認証用データD(A)が含まれているので、改竄チェックプログラム30αがインストールされたアプリケーション実行用コンピュータは、サーバ100から第1の特定鍵K(s1)の取り出しを行う際に、この認証用データD(A)を利用した認証を行うことができる。サーバ100は、外部からのアクセスがあった場合、所定の認証プロセスを実行し、正しい認証結果が得られた場合にのみ、第1の特定鍵K(s1)の取り出しが行われるようにする。
上述したような認証プロセスの手続自体は公知の技術であるため、ここでは詳しい説明は省略するが、たとえば、図示の例の場合、改竄チェックプログラム30α側に含まれている復号鍵K(d)と、サーバ100側に格納されている暗号鍵K(e)を利用すれば、公開鍵暗号方式を利用した認証処理が可能である。ここで、暗号鍵K(e)および復号鍵K(d)は、公開鍵暗号方式による一対の鍵となるようにしておく。なお、ここでは、後述する第1の特定鍵K(s1)の暗号化プロセスに準じて、便宜上、サーバ100側の鍵を暗号鍵K(e)と呼び、改竄チェックプログラム30α側の鍵を復号鍵K(d)と呼んでいるため、認証プロセスにおける暗号化/復号で果たす各鍵の役割は逆になる。すなわち、改竄チェックプログラム30αがサーバ100に対して第1の特定鍵K(s1)の取出要求を行う際には、認証用データD(A)を復号鍵K(d)で暗号化してサーバ100に送信し、サーバ100側では、これを暗号鍵K(e)を用いて復号した上で、格納されている認証用データD(A)と一致するか否かのチェックを行う。そして、両者が一致すれば、正しい認証結果が得られたものとして、第1の特定鍵K(s1)を返信する処理を行えばよい。
一方、第1の特定鍵K(s1)を返信する経路上で、クラッカーXが、これを不正取得することを防ぐためには、第1の特定鍵K(s1)に対する暗号化プロセスが有効である。そこで、図16に示す例の場合、アプリケーション実行用コンピュータが、サーバ100から第1の特定鍵K(s1)の取り出しを行う際に、通信路上を第1の特定鍵K(s1)が暗号鍵K(e)によって暗号化された状態で送信されるようにしている。すなわち、サーバ100は、要求元となるアプリケーション実行用コンピュータに対して第1の特定鍵K(s1)を送信する際に、暗号鍵K(e)によって暗号化してから送信する。アプリケーション実行用コンピュータは、受信後に、これを復号鍵K(d)で復号すれば、第1の特定鍵K(s1)を取得することができる。
もちろん、上述した認証プロセスと暗号化プロセスのいずれか一方だけを実施してもかまわないが、実用上は、これら双方を実施することにより、クラッカーXがサーバ100から第1の特定鍵K(s1)を不正入手することを効果的に防止することが可能になる。
このように、改竄チェックプログラム30α内に、改竄チェックルーチンFと、この改竄チェックルーチンFが改竄チェックを行うために必要な第1の特定鍵K(s1)の格納場所を示す所在情報31と、を含ませておくようにすれば、第2の確認段階で、アプリケーション実行用コンピュータが、改竄チェックプログラム30αから所在情報31を抽出し、この所在情報31に基づいて第1の特定鍵K(s1)の格納場所を認識し、当該格納場所から取り出した第1の特定鍵K(s1)を用いて改竄チェックルーチンFを実行することができる。
なお、サーバ100から第1の特定鍵K(s1)を入手する処理は、アプリケーション実行用コンピュータが、改竄チェックルーチンFに基づいて第2の確認段階を実行するたびに毎回行うようにしてもよいが、実用上は、アプリケーション実行用コンピュータ内に、入手した第1の特定鍵K(s1)を保存する保存場所(たとえば、アプリケーション実行用コンピュータ内の不揮発性メモリ内の、改竄チェックプログラムに割り当てられた領域)を設けておき、第1の特定鍵K(s1)を一度入手したら、これをその保存場所に保存するようにし、次回からは、この保存場所に保存されている第1の特定鍵K(s1)を利用するようにするのが好ましい。そうすれば、保存場所に第1の特定鍵K(s1)を保存した後は、インターネットに接続できない状態でも改竄チェックを行うことができる。
すなわち、アプリケーション実行用コンピュータが、改竄チェックルーチンFによって第2の確認段階を実行する際に、所定の保存場所に、第1の特定鍵K(s1)が保存されていない場合には、改竄チェックプログラム30αに含まれている所在情報31を抽出し、この所在情報31に基づいて格納場所(サーバ100)を認識し、この格納場所(サーバ100)から第1の特定鍵K(s1)を取り出すことにより、第1の特定鍵K(s1)の入手を行うとともにこれをアプリケーション実行用コンピュータ内の保存場所に保存する処理を行うようにすればよい。そして、アプリケーション実行用コンピュータが第2の確認段階を実行する際に、当該コンピュータ内の保存場所に、第1の特定鍵K(s1)が保存されている場合には、この保存場所から第1の特定鍵K(s1)を取り出すことにより、当該第1の特定鍵K(s1)の入手を行うようにすればよい。入手した第1の特定鍵K(s1)を用いて改竄チェックルーチンを実行する点は、これまで述べてきた基本的実施形態と同様である。
なお、所在情報31に基づいてサーバ100から第1の特定鍵K(s1)を入手する処理プロセスは、改竄チェックルーチンFによって行ってもよいが、改竄チェックプログラム30α内に設けられた別なルーチンによって行ってもかまわない。また、図16では、第1の特定鍵K(s1)を格納する場所として、インターネットを介して接続されたサーバ100を利用した例を示したが、第1の特定鍵K(s1)を格納する外部の格納場所は、必ずしもサーバ装置である必要はない。たとえば、アプリケーション実行用コンピュータに接続可能なICカードやUSBメモリなどの記憶媒体を格納場所として、第1の特定鍵K(s1)を格納するようにしてもかまわない。この場合、所在情報31は、当該記憶媒体内の格納場所を示すことになる。
第1の特定鍵K(s1)をサーバ100に格納する形態をとる変形例では、プログラム保証者Gが改竄チェックプログラム30αを配布した後も、第1の特定鍵K(s1)を変更する柔軟な対応が可能になる。すなわち、ユーザに配布した改竄チェックプログラム30α内には、所在情報31しか含まれていないため、プログラム保証者Gは、サーバ100に格納する第1の特定鍵K(s1)を変更することにより、改竄チェックルーチンFが実際に利用する第1の特定鍵K(s1)を変更することが可能になる。
もちろん、サーバ100内の複数箇所にそれぞれ異なる第1の特定鍵K(s1)を格納しておき、所在情報31によって、実際に取得される鍵を変えるようにすることもできる。たとえば、改竄チェックの対象となるアプリケーションプログラムごとに、それぞれ異なる鍵を用いてチェックを行うような運用を採るのであれば、改竄チェックプログラム30α内にキーテーブルを用意し、このキーテーブル内に、個々のアプリケーションプログラムごとに異なる所在情報を収容しておくようにすればよい。サーバ100から第1の特定鍵K(s1)を入手する際には、このキーテーブルを参照して、チェックの対象となるアプリケーションプログラムに応じた格納場所から鍵の入手を行うようにすればよい。
<<< §9.OSプログラムへの組み込み >>>
これまで述べてきた実施形態は、アプリケーションパッケージ21に対する署名情報22の正当性を確認する第1の確認段階(アプリケーションパッケージ21が改竄されていないことを、署名情報22を利用して確認する段階)を、アプリケーション実行用のコンピュータのOSプログラムによって実行し、秘匿化対象データCに対する秘匿情報23の正当性を確認する第2の確認段階(署名情報22が改竄されていないことを、秘匿情報23を利用して確認する段階)を、改竄チェックプログラム30,30G,30αに含まれる改竄チェックルーチンFによって実行する、という役割分担を行っている。図7の流れ図における改竄チェックプロセスは、正に、このような役割分担に基づいて行われるものであり、ステップS6〜S15の各ブロックの脇に記載された「OSプログラム」なる括弧書きの処理は当該処理がOSプログラムによって実行されることを示し、「改竄チェックプログラム」なる括弧書きの処理は当該処理が改竄チェックプログラムによって実行されることを示している。
このような役割分担は、Android仕様のアプリケーションを配布して、Android端末においてこれを実行する環境では極めて有効である。すなわち、上記役割分担を行えば、本発明を実施する上で、Android端末側には何ら改変を加える必要はなく、Android端末には、改竄チェックの対象となるアプリケーションプログラムとともに、改竄チェックプログラムをAPKファイルとして配布すればよい。いずれもAndroid端末から見れば1つのアプリケーションプログラムであるので、本発明に係る改竄検知方法を実行するにあたって、AndroidOSに対する改変は不要である。
しかしながら、本発明に係るアプリケーションプログラムの改竄検知方法は、現在のAndroid仕様の端末を想定したものに限定されるものではないので、上記役割分担は、本発明に必須のものではない。
たとえば、将来、Android仕様が変更になり、AndroidOS自身に改竄チェックプログラム30の機能が組み込まれるようになれば、第2の確認段階はOSプログラムによって実行されることになる。この場合、第1の確認段階と第2の確認段階との双方が、OSプログラムによって行われることになる。逆に、将来、Android仕様が変更になり、現AndroidOSの機能から、第1の確認段階を行う処理機能が除外された場合には、第1の確認段階と第2の確認段階との双方を、改竄チェックプログラム30側で行うようにすることも可能である。
ここでは、AndroidOS自身に改竄チェックプログラム30の機能を組み込んだ場合の本発明の処理手順を、図17の流れ図を参照して説明する。この図17の流れ図に示す手順も、準備プロセス、配布プロセス、改竄チェックプロセスによって構成されている。そして、準備プロセスのステップS0では、アプリケーションプログラムを実行するためのアプリケーション実行用コンピュータ(Android端末)が、第1の特定鍵K(s1)を用いて改竄チェックを行う改竄チェックルーチンFを含む改竄チェックプログラムをインストールする改竄チェックプログラム準備段階が行われる。
但し、これまで述べてきた実施形態の場合、改竄チェックプログラムは、改竄チェックの対象となるアプリケーションプログラムとは別のアプリケーションプログラムによって構成されており、ステップS0の改竄チェックプログラム準備段階では、この1アプリケーションプログラムとして与えられた改竄チェックプログラムをインストールする処理が行われる。これに対して、図17に示す例の場合、改竄チェックプログラムは、OSプログラム(AndroidOS)の一部によって構成されるため、ステップS0の改竄チェックプログラム準備段階とは、アプリケーションプログラム実行用コンピュータ(Android端末)にOSプログラム(AndroidOS)をインストールする処理として行われることになる。したがって、このステップS0は、通常は、Android端末の供給元が出荷前に行う作業ということになる(もちろん、ユーザ自身がバージョンアップなどの目的でAndroidOSをインストールする場合は、そのときにステップS0の処理が行われる)。
一方、ステップS1〜S5の配布プロセスは、改竄チェックの対象となるアプリケーションプログラムを配布するためのプロセスであり、プログラム提供者Aによって行われる処理である。この配布プロセスを構成するステップS1〜S5の処理は、図7の流れ図におけるステップS1〜S5の処理と全く同一であり、詳細は§4で述べたとおりである。
これに対して、ステップS16〜S22の改竄チェックプロセスは、アプリケーションプログラム実行用コンピュータ(Android端末)で実行される処理ということになる。図7の流れ図におけるステップS6〜S15の処理と、図17の流れ図におけるステップS16〜S22の処理とは、改竄チェックを行う基本原理に関しては全く同じであるが、前者では、OSプログラムと改竄チェックプログラムとの役割分担によって改竄チェックが行われていたのに対して、後者では、すべての改竄チェックがOSプログラムによって実行されることになる。
すなわち、まずステップS16のファイル入力段階では、アプリケーション実行用コンピュータ(Android端末)に、上述した配布プロセスによって配布された配布用ファイル20Aが入力される。具体的には、ユーザUが、APKファイルの配布サイトからインターネット経由で配布用ファイル20Aをダウンロードし、これをインストールことにより、ステップS16のファイル入力段階が行われる。Android端末の場合、このような処理は、OSプログラムの基本機能によって実行される。
続くステップS17以降の処理は、ステップS16で入力したアプリケーションプログラムについての起動指示が与えられた場合に実行される。前述したとおり、Android端末の場合、個々のアプリケーションプログラムに対する起動指示は、ユーザUがアイコンをタップするなどの操作を行うことにより与えられる場合もあれば、別なアプリケーションプログラムからの要請により与えられる場合もあるし、外部からアクセスしてきた何らかのサービスに基づいて与えられる場合もある。いずれの場合も、AndroidOSが当該起動指示を認識し、対象となるアプリケーションプログラムを起動する処理を行うことになる。
この起動処理の一環として、AndroidOSが第1の確認段階の処理を実行することは、既に述べたとおりである。すなわち、特定のアプリケーションプログラムに対する起動指示が与えられると、AndroidOSにより、まず、ステップS17における第1の確認段階の処理が行われる。この第1の確認段階では、前述したとおり、アプリケーションパッケージ21に対する署名情報22の正当性を確認する処理が行われる。すなわち、起動指示が与えられたアプリケーションプログラムの配布用ファイル20Aについて、Aの署名情報22に含まれているプログラム提供者Aの第2の鍵K(a2)を用いた復号を利用した署名確認処理を行って、アプリケーションパッケージ21に対する署名情報22の正当性が確認される。
ステップS17の第1の確認段階において肯定的な結果が得られた場合、すなわち、アプリケーションパッケージ21に対する署名情報22の正当性が確認された場合には、ステップS18を経てステップS19へと進み、第2の確認段階が実行される。この、第2の確認段階は、AndroidOSに組み込まれることになった改竄チェックプログラムによって実行される処理であり、既に述べたとおり、署名情報22に対する秘匿情報23の正当性を確認する処理である。改竄チェックプログラムがAndroidOSに組み込まれているため、ステップS17の第1の確認段階に引き続いて、ステップS19の第2の確認段階を行うことができるようになる。
ステップS20では、ステップS19の第2の確認段階の結果に応じて、否定的な結果が得られた場合にはステップS21へ進み、肯定的な結果が得られた場合にはステップS22へ進む分岐処理が行われる。また、ステップS17の第1の確認段階において否定的な結果が得られた場合には、ステップS18を経てステップS21へ進む分岐処理が行われる。
このように、ステップS17の第1の確認段階で否定的な結果が得られた場合には、ステップS18からステップS21へと進むことになり、ステップS19の第2の確認段階で否定的な結果が得られた場合には、ステップS20からステップS21へと進むことになる。いずれの場合も改竄ありとの判定がなされたことになるので、ステップS21では、当該アプリケーションプログラムの実行を中止する処理が行われる。一方、第1の確認段階および第2の確認段階の双方において肯定的な結果が得られた場合には、改竄なしとの判定の下にステップS20からステップS22へと進み、当該アプリケーションプログラムの実行段階が行われる。すなわち、制御がOSから当該アプリケーションプログラムへと移り、当該アプリケーションプログラムを構成するルーチンの処理が開始される。別言すれば、OSプログラムによって、当該アプリケーションプログラムの起動が正常に行われることになり、ユーザUは、起動したアプリケーションプログラムを利用することができる。
ステップS16〜S22の各ブロックの脇に記載された「OSプログラム」なる括弧書きの処理は当該処理がOSプログラムによって実行されることを示している。特に、「OSプログラム(改竄チェック)」なる括弧書きの処理は当該処理がOSプログラムに組み込まれることになった改竄チェックプログラムによって実行されることを示している。なお、ステップS21の実行中止処理は、OSプログラムによって実行される処理であるが、ステップS22の実行段階の処理は、当該アプリケーションプログラムによって実行される処理であり、脇の「OSプログラム アプリケーションプログラム」なる括弧書きは、これを示すものである。
なお、ステップS21の実行中止を行う場合は、たとえば「アプリケーションプログラム○○(改竄ありと判定されたアプリケーションプログラムの名前)は改竄されているため起動できません」のような判定メッセージを提示し、「改竄あり」との検知結果に基づいて実行が中止されたことをユーザUに報知するようにするのが好ましい。
このように、改竄チェックプログラムの機能をOSプログラムに組み込んだ場合のメリットは、第1の確認段階および第2の確認段階の双方の処理をOSプログラムに担当させることができるため、アプリケーションプログラムの起動時に第1の確認段階および第2の確認段階の双方を実施することができるようになり、更に、その結果、改竄ありとの判定がなされた場合には、OSプログラムの権限に基づいて、当該アプリケーションプログラムの実行を中止する措置を採ることができる点である。すなわち、ステップS21では、制御をアプリケーションプログラムに移行することなしに、当該アプリケーションプログラムの実行を中止してしまうため、改竄されたアプリケーションプログラムは、その一部たりとも実行されることはなく、十分な安全性が確保されることになる。また、OSプログラムの権限により、改竄ありと判定されたアプリケーションプログラムについては、強制的なアンインストール処理を行ったり、実行権剥奪処理などを行ったりすることも可能である。
以上、アプリケーションプログラムに対して起動指示が与えられた場合に、第1の確認段階および第2の確認段階を実行して、改竄チェックが行われる例を説明したが、改竄チェックを行うタイミングは、必ずしも起動指示が与えられた場合に限定されるものではない。たとえば、ファイル入力段階S16によってアプリケーションプログラムがダウンロードされた直後やインストールされた直後に、第1の確認段階および第2の確認段階を実行して改竄チェックを行うようにしてもかまわない。
アプリケーションプログラムのダウンロードやインストールは、OSプログラムの管理下で行われるので、OSプログラムは、アプリケーションプログラムのダウンロードやインストールが行われた時点で、上記改竄チェックを行うことが可能である。この場合、必要なら「いまダウンロードしたアプリは改竄されています」や「いまインストールしたアプリについては改竄検知はされませんでした」といったメッセージにより、チェック結果をユーザに報知するようにしてもよい。
<<< §10.実行許可リストに基く実行制御 >>>
ここでは、本発明に係るアプリケーションプログラムの改竄検知方法の好適な応用例を述べる。この応用例の特徴は、アプリケーションプログラムの実行プロセスにおいて、実行許可リストに予め登録されているアプリケーションプログラムについてのみ、その実行を許可するという実行制御方法を採用しつつ、§1〜§9において述べた改竄検知方法を実行し、改竄が検知されなかったアプリケーションプログラムについては、リストへの自動登録を行うようにする点にある。そこで、まず、実行許可リストに基いてアプリケーションプログラムの実行制御を行う具体的な方法を説明する。
ここでは、これまで述べてきた例と同様に、AndroidOSを採用したスマートフォンやタブレット型電子機器(いわゆる、Android端末)への適用例を述べることにする。この場合、Android端末に与えられるアプリケーションプログラムのデータファイルは、たとえば、図5に示すような配布用ファイル20A(APKファイル)の形式で配布されることになる。また、ここでは、§1〜§8において述べたように、改竄チェックプログラムが、1つのアプリケーションプログラムとして用意されている場合についての実施例を述べることにする。
ここで述べる実行許可リストに基く実行制御方法それ自体は、本願発明者が従来から提案している方法である。この実行制御方法では、アプリケーションプログラムの実行端末において、実行許可リストに基づく制御を行うために、専用のプログラムが用意される。このプログラムは、OSの管理下で動作するアプリケーションプログラムの1つであるが、その役割は、専ら他のアプリケーションプログラムの動作を監視し、その制御を行うことにある。そこで、ここでは、このプログラムのことを、他のアプリケーションプログラムとは区別して「監視プログラム」と呼ぶことにする。
既に述べたとおり、Androidをはじめとする多くのOSは、複数のアプリケーションプログラムを並行して実行させるマルチタスク処理機能を有しており、複数のアプリケーションプログラムを所定のタイミングで順次切り替えながらCPUに実行させる処理を行うことができる。これにより、複数のアプリケーションプログラムを同時に起動状態にして、これらを時分割で切り替えることにより、あたかも複数のアプリケーションプログラムが同時に実行されているような制御が可能になる。
そこで、§4では、改竄チェックプログラム30を、いわゆる「常駐プログラム」として常に起動状態に維持しておき、新たに起動されたアプリケーションプログラムに対する改竄チェックを実行させるような実施形態を述べた。ここで述べる監視プログラムも、「常駐プログラム」として常に起動状態に維持するようにして、他のアプリケーションプログラムの監視が行えるようにする。上述したように、マルチタスク処理機能を有するOS制御下では、複数のアプリケーションプログラムを同時に起動状態にすることができるので、監視プログラムを常に起動状態に維持したとしても、他のアプリケーションプログラムの起動に支障が生じることはない。なお、この監視プログラムそれ自体が攻撃されて改竄されてしまうことを防ぐために、実用上は、何らかの耐タンパ化処理が施された監視プログラムを用いるのが好ましい。
図18は、アプリケーションプログラム実行用コンピュータ(Android端末)に組み込まれた監視プログラムによって実行される監視ルーチンの手順を示す流れ図である。このような監視ルーチンをもつ監視プログラム自体は、本願発明者によって従来から提案されているものである。標題部に「監視プログラム(1)」と記載されているのは、ここに示す監視プログラムの手順が、従来提案型の手順であることを示すものである。この§10で述べる本発明の応用例の特徴は、この図18の「監視プログラム(1)」として示す従来の監視プログラムにおける手順を簡略化することにある(簡略化した手順は、図22において「監視プログラム(2)」として後述する)。
ここでは、まず、図18に「監視プログラム(1)」として示す従来提案型の監視プログラムの機能を説明する。この監視プログラムの役割は、常時、アプリケーションプログラムの起動を監視し、新たなアプリケーションプログラムの起動が検知された場合に、当該アプリケーションプログラムが実行許可リストに掲載されているか否かを判断し、掲載されていた場合にはそのまま実行を許可するが、掲載されていなかった場合には、実行を一時中止してリストに登録するか否かをユーザに尋ねることにある。
はじめに、ステップS31において、現在、起動状態にあるアプリケーションプログラムの識別コードを認識する起動アプリ認識段階が実行される。Androidをはじめとする一般的なOSには、個々のアプリケーションプログラムについて、識別コード・起動時・終了時を示すログ情報を記録する処理機能が備わっている。したがって、監視プログラムによって起動アプリ認識段階S31を実行する際には、このログ情報を参照することにより、現時点で起動状態にあるアプリケーションプログラムの識別コードを認識することができる。
図19は、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つであるので、監視プログラム自身の起動や終了を示すログも、ログ情報として記録されることになる。
一方、監視プログラム用の記録領域には、図20に例示するような実行許可リストが用意されている。この実行許可リストは、実行が許可されているアプリケーションプログラムの識別コードを記録したリストであり、いわば「ホワイトリスト」と呼ぶべきリストである。図20(a) に示す例は、AP1,AP2,AP3といったアプリケーションプログラムのファイル名を個々のアプリケーションを特定する識別コードとして用い、これら識別コードを列挙することにより実行許可リストが構成されている。
これに対して、図20(b) に示す例は、アプリケーションプログラムのファイル名にそのバージョン番号を括弧書きで付加したものを識別コードとして用いたものであり、バージョンが異なるアプリケーションプログラムには、それぞれ異なる識別コードが付与され、相互に区別されることになる。たとえば、同一のファイル名AP1をもったアプリケーションプログラムであっても、バージョン1.0のプログラムには識別コードAP1(1.0)が付与され、バージョン2.0のプログラムには識別コードAP1(2.0)が付与され、相互に異なるアプリケーションプログラムとして取り扱われることになる。なお、バージョンを区別して取り扱う場合は、図19に示すログ情報にも、AP1(1.0)のようにバージョン番号を付加した識別コードを用いるようにする。
さて、図18に示す起動アプリ認識段階S31において、現時点で起動状態にあるアプリケーションプログラム(以下、単に、起動アプリという)の識別コードが認識できたら、続いて、認識した識別コードが実行許可リストに登録されているか否かを判定する登録有無判定段階が実行される。すなわち、ステップS32において、図20(a) に示すような実行許可リストが参照され、ステップS33において、認識された起動アプリの識別コードがリストに掲載されているか否かが判定される。なお、ステップS31において起動アプリが複数認識された場合は、ステップS32以下の処理は、ステップS38を経て、個々の起動アプリごとにそれぞれ繰り返し実行されることになる。
前述したように、図19に示すようなログ情報が得られた場合は、アプリケーションAP6が起動アプリとして認識されるので、ステップS32において、実行許可リストを参照することにより、識別コードAP6が掲載されているか否かが判定される。ここで、図20(a) に示すような実行許可リストが用意されていたとすると、識別コードAP6は掲載されているため、起動アプリAP6は登録済みのアプリケーションプログラムと判定されることになる。その結果、ステップS33からステップS38へ進むことになる。
これに対して、登録有無判定段階において未登録と判定された場合、すなわち、ステップS33においてリストに掲載されていないと判定された場合は、ステップS34へ進み登録照会段階が行われる。たとえば、ログ情報から、アプリケーションプログラムAP7が起動アプリとして認識された場合は、識別コードAP7は図20(a) に示す実行許可リストには掲載されていないので、未登録アプリと判定される。その結果、ステップS33からステップS34へと進み、登録照会段階が実行される。
ステップS34の登録照会段階では、当該未登録アプリAP7を実行許可リストに登録するか否かをユーザに問い合わせる処理が行われる。たとえば、Android端末のディスプレイ画面上に、図21に示すようなメッセージ画面を提示する処理を行えばよい。ユーザは、このようなメッセージ画面による問い合わせに対して、「登録する」ボタンまたは「登録しない」ボタンをタップすることにより回答を行う。「登録する」旨の回答は、未登録アプリAP7を登録して実行する指示に相当し、「登録しない」旨の回答は、未登録アプリAP7を登録せず、実行もしない指示に相当する。
ユーザがいずれかのボタンをタップして、問い合わせに対する回答を行うと、当該回答に基づいて回答処理段階が行われる。すなわち、「登録する」ボタンのタップによって登録する旨の回答があった場合には、ステップS35からステップS36へと進み、当該未登録アプリAP7の識別コードを新たに実行許可リストに登録する処理が行われる。この場合、起動状態にある当該アプリAP7は、正式に実行が許可されたことになり、そのまま実行し続けることになる。一方、「登録しない」ボタンのタップによって登録しない旨の回答があった場合には、ステップS35からステップS37へと進み、当該未登録アプリAP7の実行を中止させる処理が行われる。
以上述べたステップS32〜S37の処理が、全起動アプリについて完了するまで、ステップS38を介して繰り返し実行されることになる。そして、全起動アプリについて処理が完了したら、ステップS38からステップS39へ進み、監視プログラムに対する終了指示が与えられていない限り、再び、ステップS31からの処理が繰り返されることになる。前述したとおり、この監視プログラムは、本来、「常駐プログラム」として常に起動状態に維持され、他のアプリケーションプログラムの監視を行うべきものである。したがって、通常は、ユーザによって監視プログラムに対する終了指示が与えられることはなく、ステップS39からステップS31へ戻る処理が繰り返されることになる。
マルチタスク処理機能を有するOS制御下では、OSプログラムおよび同時に起動状態となっている複数のアプリケーションプログラムが所定のタイミングで切り替えられながら順番に実行されることになる。したがって、図18に示す監視プログラム(1) の手順においても、ある時点で中断され、別なアプリケーションプログラムの実行に制御が移り、再び監視プログラムに制御が戻ってきた時点で中断されていた手順が再開される、という処理が繰り返されることになる。§4で述べたように、改竄チェックプログラム30を「常駐プログラム」として常に起動状態に維持した場合は、マルチタスク処理機能を有するOSの切替制御により順番がまわってきたときに、起動状態にあるアプリケーションプログラムに対する改竄チェックが実行されることになる。
もっとも、マルチタスク処理によるアプリケーションプログラムの切替期間は、msec程度のオーダーであるため、ユーザの立場からは、監視プログラムや改竄チェックプログラムを含めた複数のアプリケーションプログラムが同時に動作しているように見える。たとえば、新たなアプリケーションプログラムAP7を起動させると、監視プログラムに制御が移った段階で、アプリAP7が起動アプリとして認識され、ステップS34の登録照会段階が行われる。したがって、ユーザから見ると、アプリAP7を起動させる操作を行ったら、直ちに図21に示すようなメッセージ画面が表示された状態になるので、監視プログラムの処理動作に切り替わったという違和感は生じない。
なお、監視プログラムもアプリAP7も、アプリケーションプログラムという点では対等であり、いずれもOSプログラムの制御下で動作するプログラムであるが、OSの機能を利用して、一方のアプリケーションプログラムから他方のアプリケーションプログラムを強制終了させることが可能である。ステップS37の実行中止処理も、このようなOSの機能を利用して、監視プログラムからアプリAP7を強制終了させる方法を採ればよい。具体的には、監視プログラムからOSに対して、アプリAP7を強制終了させるコマンドを引き渡すようにすれば、OSの制御機能により、アプリAP7を強制終了させ、実行を中止させることができる。
結局、監視プログラムは、図18に示す手順を継続的に実行することにより、実行許可リストに登録されていない未登録アプリが起動状態になったか否かを常に監視する処理を行い、もし未登録アプリが起動状態になっていた場合には、ステップS34の登録照会段階を実行し、ユーザの回答に応じて、当該未登録アプリを登録して実行を許可するか、登録せずに実行を中止させるか、いずれかの処理を採ることになる。かくして、実行許可リストに登録されているアプリケーションプログラムのみが実行を許可されるような制御が可能になる。
以上、図18の流れ図を参照しながら、従来提案型の監視プログラム(1) の手順を説明した。この手順によれば、ユーザがホーム画面やアプリ画面からアイコンをタップして未登録の「通常アプリ」を起動したり、他のアプリケーションプログラムからの指示に基づいて未登録の「通常アプリ」が起動したりした場合、図21のようなメッセージが提示され、実行許可リストに登録するか否かの選択を迫られることになる。Android端末の場合、本発明に係る改竄チェックプログラムの有無に拘らず、「通常アプリ」を起動した場合、OSプログラムによる署名情報の正当性確認(第1の確認段階)は必ず実施されるので、ユーザは、当該「通常アプリ」の安全性をある程度認識することができる。ただ、前述したとおり、署名情報自体が改竄されているケースもあるので、安全性はそれほど高いものではない。したがって、ユーザは、当該アプリの実行により得られるであろうメリットと、改竄されていた場合に被るであろう損害のデメリットとを天秤にかけ、「登録する」/「登録しない」のいずれかを選択することになる。
しかしながら、実際には、上記運用は必ずしも奏功していない。その第1の理由は、一般ユーザにとって、個々のアプリケーションプログラムが改竄されているか否かを判定することが難しいためである。一般ユーザにとって、アプリケーションプログラムの信頼性を評価する手掛かりは、著名なソフトウエアであるとか、信頼性あるベンダーから供給されたソフトウエアであるとか、信頼性あるサイトからダウンロードしたソフトウエアであるといった情報であるが、クラッカーによって改竄されたソフトウエアが流通した場合、これらの手掛かりは役に立たない。したがって、実用上、一般ユーザが、個々のアプリケーションプログラムについて、改竄されているか否かを判定することは極めて困難である。
そして、第2の理由は、一般ユーザにとって、図21に示すようなメッセージに応じて、未登録アプリを実行許可リストに手動登録する作業は煩雑であり、事実上、どのようなアプリケーションプログラムであっても「登録する」ボタンをタップすることが習慣化してしまうためである。もちろん、Android端末の工場出荷時にプリインストールされているアプリケーションプログラム(安全性が保証されているプログラム)については、当初から実行許可リストに掲載しておくようにすれば、初回起動時にユーザが手動登録の操作を行うことを省くことができるが、端末購入後にユーザがダウンロードした「通常アプリ」については、初回起動時にユーザが手動登録せざるを得ない。
この§10で述べる応用例は、この監視プログラムと、§1〜§8で述べた改竄チェックプログラムと、OSプログラムとを協働させ、改竄なしと判定されたアプリケーションプログラムについては、実行許可リストに自動登録する処理を行うようにしたものである。これにより、客観的な判定手法により改竄なしと判定されたアプリケーションプログラムについては、ユーザに登録作業の負担を課すことなしに、実行許可リストへの自動登録を行うことが可能になる。
そのため、ここで述べる実施形態における監視プログラムでは、図18に示す「監視プログラム(1)」の手順に代えて、より簡潔な「監視プログラム(2)」の手順を採用する。ここで述べる「監視プログラム(2)」の手順は、OSプログラムおよび改竄チェックプログラムによる改竄チェックの結果を利用して実現されるものである。そこで、以下、この「監視プログラム(2)」の手順を、OSプログラムの手順および改竄チェックプログラムの手順と連携させた一連の流れとして説明する。
図22は、通常アプリを起動したときの、OSプログラム、改竄チェックプログラム、監視プログラムの連携した処理手順を示す流れ図である。ここでいう「通常アプリ」とは、「監視プログラム」および「改竄チェックプログラム」を除いたアプリケーションプログラム(たとえば、図1に示すアプリケーションプログラム10)を指し、改竄チェックの対象となるプログラムを意味する。
一般に、アプリケーションプログラムは、OSの制御下で起動される。すなわち、特定のアプリケーションプログラムを起動する旨の指示が与えられると、OSが当該特定のアプリケーションプログラムを実行するための環境を整える作業を行う。そして、準備が完了した時点で、当該特定のアプリケーションプログラムのルーチンが実行されることになる。
図22の流れ図は、「通常アプリ」に対して起動指示が与えられた場合の処理手順を示している。起動指示は、たとえば、ユーザによる起動操作によって与えられる。Android端末の場合、ユーザがホーム画面上で特定のアプリケーションプログラムのアイコンをタップする操作を行うと、当該プログラムに対する起動指示が与えられる。なお、既に述べたとおり、起動指示は、必ずしもユーザから与えられるとは限らず、場合によっては、OSや別なアプリケーションプログラムによって与えられる場合もある。
もちろん、「監視プログラム」および「改竄チェックプログラム」も、OSプログラムの制御下で動作する1つのアプリケーションプログラムであることに変わりはない。したがって、これらのプログラムを起動したときの処理手順も図22に示す手順に準じたものになるが、ステップS44,S45は「改竄チェックプログラム」が他のアプリケーションプログラムに対する改竄チェックを行う手順であり、ステップS46,S47は「監視プログラム」が他のアプリケーションプログラムをリストに登録する手順であるため、「監視プログラム」および「改竄チェックプログラム」を起動した場合の処理手順は、図22に示す手順とは若干異なってくる。
この図22に示されているステップS41,S42,S44,S45の手順は、図7の流れ図に改竄チェックプロセスとして示されているステップS8,S9,S12,S13の各手順とそれぞれ同じものであり、各ステップの右脇に記載した括弧書きは、個々の手順の実行主体となるプログラムを示している。
まず、ステップS41では、OSプログラムによって、図6に示す第1の確認段階が行われる。この第1の確認段階は、アプリケーションパッケージ21に対する署名情報22の正当性を確認する処理であり、その詳細は§3で述べたとおりである。第1の確認段階において否定的な結果が得られた場合、すなわち、署名情報の正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS42を経てステップS43へと進み、当該アプリケーションの実行は中止される。すなわち、当該アプリケーションプログラムに含まれるルーチンが実行される前に、OSによって、実行が阻止されることになる。
一方、第1の確認段階において肯定的な結果が得られた場合は、ステップS42を経てステップS44へと進み、第2の確認段階が行われる。この第2の確認段階は、署名情報22に対する秘匿情報23の正当性を確認する処理であり、その詳細は§3で述べたとおりである。第2の確認段階において否定的な結果が得られた場合、すなわち、秘匿情報の正当性が確認されなかった場合には、「改竄あり」との判定がなされ、ステップS45を経てステップS43へと進み、やはり当該アプリケーションの実行は中止される。
もっとも、ステップS44,S45の処理は、OSプログラムではなく、改竄チェックプログラムによって実行される処理である。したがって、ステップS42からS44への移行は、制御がOSプログラムから改竄チェックプログラムへ移行することを示している。前述したとおり、マルチタスク処理機能を有するOS制御下では、OSプログラムおよび同時に起動状態となっている複数のアプリケーションプログラムが所定のタイミングで切り替えられながら順番に実行されるので、ステップS42からS44への移行は、改竄チェックプログラムへの切替タイミングで行われることになる。
なお、ステップS45で否定的な判定がなされてステップS43に移行する際には、改竄チェックプログラムからOSプログラムに対して、改竄ありと判定されたアプリケーションプログラムについての実行を中止させる要請を行えばよい。そうすれば、OSプログラムに制御が移った段階で、ステップS43を実行し、当該改竄が検知されたアプリケーションプログラムを強制的に終了させることができる。
かくして、通常アプリを起動した際には、OSプログラムによる第1の確認段階の処理と、改竄チェックプログラムによる第2の確認段階の処理とが実行され、いずれかの段階において改竄ありと判定された場合には、ステップS43において、当該通常アプリの実行は強制的に中止されることになる。
一方、第1の確認段階の処理と第2の確認段階の処理との双方において肯定的な判定がなされた場合には、当該通常アプリについては改竄なしと判定されたことになり、ステップS45からステップS46へ移行する。ここで、ステップS46,S47の処理は、監視プログラムが、図18に示す監視プログラム(1) の手順の代わりに実行する監視プログラム(2) の手順である。結局、ステップS45からS46への移行は、改竄チェックプログラムから監視プログラムへの切替タイミングで行われることになる。
ステップS46,S47の手順は、改竄なしとの判定がなされたアプリケーションプログラムの識別コードを、実行許可リストに登録するリスト自動登録段階の手順である。すなわち、ステップS46において、当該「通常アプリ」の識別コードが既に実行許可リストに登録されているか否かの判定が行われ、登録済みであった場合には、ステップS46からステップS48へと進むが、未登録であった場合には、ステップS47において、当該識別コードを実行許可リストに登録した上で、ステップS48へと進む処理が行われる。いずれの場合も、ステップS48において、当該アプリが実行されることになり、しかも当該アプリの識別コードが実行許可リストに登録された状態になる。
なお、図22の流れ図では、改竄なしの場合には、説明の便宜上、ステップS41→S42→S44→S45→S46→S47→S48のような順序で各手順が実行される様子が示されているが、実際には、OSプログラム、改竄チェックプログラム、監視プログラムは、マルチタスク処理機能により並行して動作していることになり、上記手順は、適宜、実行主体となるプログラムを切り替えることにより実行される。
続いて、この図22を参照しながら、ある1つの「通常アプリ」を初めて起動した場合に、OSプログラム、改竄チェックプログラム、監視プログラムによってどのような連携処理が行われるかを考えてみよう。この場合、当該「通常アプリ」が改竄がなされていなければ、図22の流れ図に示すように、ステップS41→S42→S44→S45→S46と進み、監視プログラムによるリスト自動登録段階が実行される。具体的には、まず、ステップS46において、当該アプリが登録済みか否かが判断される。初めて起動したアプリであれば、未登録の状態であるのでステップS47へと進み、当該「通常アプリ」は実行許可リストに自動的に登録され、その後、ステップS48へと進み、当該「通常アプリ」が実行される(制御が、監視プログラムからOSプログラムを経て当該「通常アプリ」に切り替えられる)。
なお、図22に示す「通常アプリ」の起動手順は、改竄チェックプログラムが起動状態にあることを前提とした手順であり、改竄チェックプログラムが動作していない場合には、監視プログラムは、図18に示す監視プログラム(1) の手順を実行することになる。この場合は、前述したとおり、「通常アプリ」を初めて起動した場合、ステップS31→S32→S33→S34と進み、ユーザに対して図21に例示するようなメッセージが提示され、登録するか否かの選択が行われることになる。
換言すれば、改竄チェックプログラムが起動状態にある場合は、監視プログラムは、図18に示す監視プログラム(1) に代えて、図22に示す監視プログラム(2) の簡略化された手順を実行することになる。したがって、ユーザは、改竄チェックプログラムを「常駐プログラム」として常時起動状態に維持しておくようにすれば、監視プログラム(2) によるリスト自動登録の恩恵を受けることができる。もちろん、改竄チェックプログラムも1つのアプリケーションプログラムであるので、ユーザは、これを停止することができる。その場合、監視プログラムは、図18に示す監視プログラム(1) を実行することになるが、監視プログラムが、図18に示す監視プログラム(1) のモードで動作していようが、図22に示す監視プログラム(2) のモードで動作していようが、利用する実行許可リストは同一なので、監視プログラム(2) のモードにおいて実行許可リストに自動登録されたアプリケーションプログラムについては、監視プログラム(1) のモードにおいても既にリストに掲載されているアプリケーションプログラムとなり、起動時に、ユーザに対して図21に示すようなメッセージが提示されることはない。
このように、改竄チェックプログラムと監視プログラムとを同時に起動状態にしておくと、監視プログラムは、図22に示す監視プログラム(2) のモードで動作することになり、初めて起動した「通常アプリ」が改竄なしと判定されれば、ステップS47において自動的に実行許可リストに登録されることになる。もちろん、改竄ありと判定された場合は、監視プログラムに制御が引き渡される前に、ステップS43で実行中止となる。したがって、ユーザは、リストに登録するか否かという判断を全く行う必要がない。しかも、実行許可リストは図18に示す監視プログラム(1) のモードでも共通して利用されるため、改竄チェックプログラムを停止して、監視プログラムが監視プログラム(1) のモードで動作していたとしても、リストへの自動登録の結果は反映されることになる。
結局、図22に示す手順は、監視プログラムが、監視プログラム(2) のモードで動作中のとき(改竄チェックプログラムが協働して動作中のとき)に、本発明に係るアプリケーションプログラムの改竄検知方法を利用して、アプリケーション実行用コンピュータが、配布されたアプリケーションプログラムを実行するアプリケーションプログラムの実行方法を示す手順ということなる。ここで、ステップS41〜S45の手順は、当該コンピュータが本発明に係る改竄検知方法により、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階を構成し、ステップS46,S47の手順は、当該コンピュータが、改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別コードを、実行許可リストに登録するリスト自動登録段階を構成する。
一方、図18に示す手順は、監視プログラムが、監視プログラム(1) のモードで動作中のとき(改竄チェックプログラムが動作していないとき)の実行方法を示す手順であり、アプリケーション実行用コンピュータが、起動状態にあるアプリケーションプログラムの識別コードを認識する起動アプリ認識段階と、この起動アプリ認識段階において認識した識別コードが実行許可リストに登録されているか否かを判定する登録有無判定段階と、この登録有無判定段階において未登録と判定された場合に、当該未登録アプリを登録するか否かをユーザに問い合わせる登録照会段階と、この問い合わせに対するユーザの回答として、登録する旨の回答があった場合には、未登録アプリの識別コードを実行許可リストに登録した上で当該アプリの実行を許可し、登録しない旨の回答があった場合には、当該未登録アプリの実行を中止させる回答処理段階と、が行われることになる。
<<< §11.実行許可リストに基く実行制御の変形例 >>>
最後に、§10で述べた実行許可リストに基く実行制御を行う上でのいくつかの変形例を述べておく。
<11−1:アプリケーションプログラムのバーションの区別>
§10で述べた実行許可リストは、実行が許可されたアプリケーションプログラムを特定する識別コードを掲載した「ホワイトリスト」というべきものである。図20(a) には、識別コードとして、各アプリケーションプログラムのファイル名を用いた例を示し、図20(b) には、ファイル名にバージョン番号を付加したコードを用いた例を示した。
一般に、アプリケーションプログラムのバージョンアップ版を提供する場合、差分データファイルだけを配布する形態が採られたり、新バージョンのデータファイルをそっくり配布する形態が採られたりする。後者の場合は、新バージョンのプログラムは旧バージョンのプログラムとは全く別の独立したプログラムになるため、実行許可リスト上でも別個のアプリケーションプログラムとして取り扱うのが好ましい。したがって、実用上は、図20(b) に示す例のように、バージョンごとにそれぞれ異なる識別コードを付与するようにし、リスト自動登録段階、回答処理段階、および起動アプリ認識段階において、バージョンの異なるアプリケーションプログラムについては、それぞれ異なる識別コードを用いた処理を行うようにするのが好ましい。
なお、バージョンの異なるアプリケーションプログラムを確実に区別するには、同一のファイル名をもったデータファイルに含まれるアプリケーションプログラムであっても、ハッシュ値が異なる場合は、異なるバージョンと認識するようにすればよい。一般に、アプリケーションプログラムを構成するデータの内容が完全に同一でなければ、ハッシュ値も同一にはならない。したがって、たとえば、アプリケーションプログラムを構成するデータ(APKファイル全体でもよいし、その一部でもよい)のハッシュ値を、当該アプリケーションプログラムの識別コードとして利用するようにすれば、バージョンの異なるアプリケーションプログラムの識別コードを確実に区別することができる。
相互にバージョンが異なる複数組のアプリケーションプログラムは、署名対象となるデータが異なるため、当然、その署名値も異なる。ただ、通常は、バージョンが異なってもプログラム提供者は共通するため、署名値を得るために用いる第1の鍵および署名情報に含ませる第2の鍵は同じになる。たとえば、図5に示す例の場合、アプリケーションプログラム10のバージョンが異なれば、署名対象データDが異なるため、署名値S(A)は相互に異なるが、Aの署名情報22に含まれるAの第2の鍵K(a2)は共通する。したがって、互いに署名値は異なるが、アプリケーションの識別コードと第2の鍵とが共通するプログラムは、同じプログラム提供者によって作成されたバージョン違いのアプリケーションプログラムであると判断することができる。
この点に着目すれば、配布するアプリケーションプログラムの識別コードとして、同一のアプリケーションプログラムについては、バージョンの違いにかかわらず共通の識別コードを用いるようにしても、アプリケーション実行用コンピュータは、配布された2組のアプリケーションプログラムについて、その識別情報、署名値、第2の鍵を比較し、相互に署名値は異なるが、識別情報および第2の鍵が一致する場合には、当該2組のアプリケーションプログラムが同一のプログラム提供者によって正規に提供されたバージョン違いのアプリケーションプログラムであると認識することができる。したがって、そのような認識がなされた2組のアプリケーションプログラムに対しては、予め定められた所定のバージョン更新処理(たとえば、旧バージョンのプログラムを自動的に削除して、新バージョンに置き換える処理や、ユーザに新旧両バージョンが存在することを通知し、ユーザの指示に応じて、いずれか一方もしくは双方を残す処理など)を実行することが可能になる。
より具体的には、たとえば、実行許可リストに、既存のアプリケーションプログラム(既存アプリ)の「アプリケーション識別コード、署名値、第2の鍵」を登録しておくようにすれば、新たなアプリケーションプログラム(新アプリ)がダウンロードされた場合、当該新アプリから取得した「アプリケーション識別コード、署名値、第2の鍵」を、実行許可リストに登録されている既存アプリの「アプリケーション識別コード、署名値、第2の鍵」と比較し、署名値は異なるが、アプリケーション識別コードおよび第2の鍵が一致した場合、当該新アプリは当該既存アプリと同一の正規のプログラム提供者によって提供されたバージョン違いのアプリケーションプログラムであることが認識できる。
このように、バージョン違いのアプリケーションプログラムであることが認識されたら、たとえば、実行許可リストから旧バージョンの登録を削除して新バージョンの内容に自動的に更新し、バージョンアップがなされたことをユーザに通知するようなバージョン更新処理が可能になる。更に、メモリから旧バージョンのアプリケーションプログラムを自動的に削除することも可能である。もちろん、新旧両バーションのプログラムをそのまま残すようにしてもよいし、ユーザに、旧バージョン/新バージョン/新旧両バージョンのいずれかを選択させて、実行許可リストやメモリには、選択されたバージョンについてのデータが残るようなバージョン更新処理を行うようにしてもよい。
<11−2:実行許可リストの格納場所>
上述したAndroid端末を用いた実施形態の場合、実行許可リストは、Android端末内で「常駐プログラム」として動作する監視プログラムによってアクセスされる情報であるので、Android端末内の記憶装置内に格納するのが最も一般的である。ただ、実行許可リストの格納場所は、必ずしもAndroid端末内に限定されるわけではなく、たとえば、Android端末に接続される外部の記憶装置や、Android端末からネットワークを介してアクセスされるサーバ装置に実行許可リストを格納してもかまわない。
この場合、リスト自動登録段階および回答処理段階で実行許可リストへの登録を行う際に、Android端末等のコンピュータは、外部の記憶装置もしくはサーバ装置内に保存された実行許可リストに対する登録を行い、登録有無判定段階では、当該外部の記憶装置もしくはサーバ装置内に保存された実行許可リストを参照することになる。
<11−3:実行許可リストの暗号化>
§10で述べたアプリケーションプログラムの実行方法では、実行許可リストが重要な役割を果たすことになり、この実行許可リストが何らかの不正操作によって改竄されてしまうと、監視プログラムによる本来の実行制御機能は失われてしまう。そこで、より信頼性の高い制御を行うためには、実行許可リストに対して暗号化対策を施すようにすればよい。
具体的には、リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、実行許可リストを暗号化する処理を行うようにすればよい。たとえば、実行許可リストに登録する識別コードや後述するチェックコードを個別に暗号化した上で登録するようにしてもよいし、実行許可リストを復号した状態で新たな識別コードやチェックコードを登録し、登録後の実行許可リストを再び暗号化するようにしてもよい。登録有無判定段階では、暗号化されている実行許可リストを復号して内容の参照を行うことになる。なお、暗号化および復号には、監視プログラム内に含まれている専用鍵を用いるようにすればよい。
<11−4:チェックコードの付加>
実行許可リストの信頼性を高める別な方法は、識別コードの他に何らかのチェックコードを登録しておく方法である。すなわち、リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、識別コードとともに、入力段階で入力したデータファイル内に含まれている何らかのデータをチェックコードとして登録するようにし、登録有無判定段階で、データファイル内に含まれているチェックコードと実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うようにすればよい。
たとえば、図5に示すAPKファイル20Aの場合、「Aの第2の鍵K(a2)」(プログラム提供者の公開鍵)をチェックコードとして用い、当該アプリケーションプログラムを実行許可リストに登録する際には、識別コードとともに、「Aの第2の鍵K(a2)」をチェックコードとして登録しておくようにする。そして、登録有無判定段階(図18のステップS32,S33)では、実行許可リストに当該識別コードと当該チェックコードの双方が登録されていることが確認された場合に、「登録されている」との判定を行うようにすればよい。
もし、識別コードは掲載されているものの、チェックコードが不一致ということになった場合は、実行許可リストに対して何らかの不正行為(たとえば、不正な方法で、実行許可リストに掲載されている識別コードを別なアプリの識別コードに書き換えるような行為)が行われた可能性があると判断することができる。
もちろん、チェックコードは、プログラム提供者の公開鍵に限定されるものではなく、この他にも様々な情報をチェックコードとして用いることができる。たとえば、図5に示すAPKファイル20Aの場合、「Aの第2の鍵K(a2)」(プログラム提供者の公開鍵)の他、Aの署名情報22全体やAPKファイル20A全体をチェックコードとして用いてもかまわない。
もっとも、Aの署名情報22全体やAPKファイル20A全体を、そのままチェックコードとして用いると、チェックコードのデータ容量が膨大なものになり、チェックコードを登録する実行許可リストのデータ容量も膨大なものになってしまう。そこで、実用上は、入力段階で入力したデータファイル内に含まれている所定の情報(たとえば、図5に示すAの署名情報22全体やAPKファイル20A全体)に対してハッシュ関数のような一方向性関数を作用させるダイジェスト化処理を行い、その結果得られたデータをチェックコードとして登録すればよい。
この場合、登録有無判定段階では、データファイル内に含まれている上記所定の情報に対して、上記一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードと、実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うことになる。なお、ダイジェスト化には、監視プログラム内に含まれている専用鍵を用いるようにすればよい。
<11−5:実行許可リストの活用>
§10で述べた監視プログラムは、監視プログラム(1) のモードで動作している場合は、ユーザの登録指示に基づいてアプリケーションプログラムを実行許可リストへ登録する処理を行い(ステップS36)、監視プログラム(2) のモードで動作している場合は、改竄なしと判定されたアプリケーションプログラムを実行許可リストへ自動登録する処理を行う(ステップS47)。こうして作成された実行許可リストは、監視プログラム以外のプログラムにも利用させることができる。
たとえば、図7に示す改竄チェックプロセスにおいて、OSプログラムに実行許可リストを活用させるようにし、改竄チェックの対象となるアプリケーションプログラムが実行許可リストに掲載されている場合には、ステップS8の第1の確認段階の実質的な処理を省略して、常に、肯定的な判定が行われたものとして取り扱うようにしてもよい。そうすれば、第1の確認段階に必要な様々な演算処理を省くことができる。
同様に、改竄チェックプログラムに実行許可リストを活用させるようにし、改竄チェックの対象となるアプリケーションプログラムが実行許可リストに掲載されている場合には、ステップS12の第2の確認段階の実質的な処理を省略して、常に、肯定的な判定が行われたものとして取り扱うようにしてもよい。そうすれば、第2の確認段階に必要な様々な演算処理を省くことができる。
もちろん、実行許可リストをその他のアプリケーションプログラムに活用させることも可能である。たとえば、第1のアプリケーションプログラムと第2のアプリケーションプログラムとが協力して、相互にデータの受け渡しを行いながらそれぞれの処理作業を行う連携機能を有している場合、相手方のアプリケーションプログラムが実行許可リストに掲載されていることを条件として、そのような連携機能を有効にする、というような運用も可能になる。
要するに、アプリケーションプログラム実行用コンピュータが、本発明に係る改竄検知方法により、入力したアプリケーションプログラムが改竄されているか否かを判定し、改竄されていない旨の判定がなされたアプリケーションプログラムの識別コードを、実行許可リストに登録する処理を行うようにすれば、この実行許可リストを参照して、リストに登録されているアプリケーションプログラムと登録されていないアプリケーションプログラムとの間で異なる処理を実行することができるようになる。たとえば、リストに登録されていないアプリケーションプログラムについては、起動指示を拒否したり、起動していた場合は強制終了させたり、警告メッセージを提示した後に起動を許可したり、といった対応をとることができる。
<11−6:改竄チェックプログラムと監視プログラムの関係>
これまで述べた実施例は、図23(a) に示すように、改竄チェックプログラム30と監視プログラム40とを、それぞれ独立したアプリケーションプログラムとして用意した例であるが、これらのプログラムは、必ずしも別個のアプリケーションプログラムとして用意する必要はない。
たとえば、図23(b) に示すように、改竄チェックプログラム30と監視プログラム40とを、統合管理プログラム50に組み込み、1つのアプリケーションプログラムとして統合してもかまわない。もちろん、この統合管理プログラム50には、更に、ウィルスチェック機能などを備えたマルウエア対策プログラムなどを組み込むようにしてもよい。この統合管理プログラム50も「常駐プログラム」として常に起動状態におくようにすればよい。このように、改竄チェックプログラム30と監視プログラム40とを、1つの統合管理プログラム50に組み込めば、両者の連携がよりスムーズに行われるようになる。
あるいは、図23(c) に示すように、改竄チェックプログラム30と監視プログラム40とを、OSプログラム60に組み込むこともできる。§9では、改竄チェックプログラム30をOSプログラムに組み込んだ実施形態を述べたが、図23(c) に示す例は、更に、監視プログラム40もOSプログラム60に組み込んだ例ということになる。このように、改竄チェックプログラム30と監視プログラム40とを、OSプログラム60に組み込めば、改竄チェックプログラム30および監視プログラム40の機能は、OSプログラムの一機能として実現されることになる。したがって、図22の手順はOSプログラムによって実行されるようになり、三者の連携がよりスムーズに行われるようになる。
ただ、現在提供されているAndroidOSには、改竄チェックプログラム30や監視プログラム40の機能は備わっていないので、現在のAndroid端末を利用して本発明を実施する場合には、図23(a) ,(b) に示す形態が実用的な実施形態といえる。端末装置のOSプログラムが、複数のアプリケーションプログラムを所定のタイミングで切り替えながら実行させるマルチタスク処理機能を有していれば、アプリケーションプログラムの1つとして用意された改竄チェックプログラムによって第2の確認段階の処理を実行することができ、同様に、アプリケーションプログラムの1つとして用意された監視プログラムによって、リスト自動登録段階、起動アプリ認識段階、登録有無判定段階、登録照会段階、回答処理段階を実行することができる。
10:アプリケーションプログラム
10X:改竄されたアプリケーションプログラム
11:プログラム本体部
12:リソースデータ
12X:改竄されたリソースデータ
13:サブルーチン群
14:補助ファイル
14X:改竄された補助ファイル
20:配布用ファイル
20A,20A′,20A'',20α:配布用ファイル
20X:改竄された配布用ファイル
21:アプリケーションパッケージ
21X:改竄されたアプリケーションパッケージ
22:Aの署名情報
22X:Xの署名情報
23,23′,23'':秘匿情報
23X:改竄された秘匿情報
24:秘匿情報の所在情報
30,30G,30α:改竄チェックプログラム
31:第1の特定鍵の所在情報
40:監視プログラム
50:統合管理プログラム
60:OSプログラム
100:サーバ
A:プログラム提供者
AP1〜AP7:アプリケーションプログラムのファイル名
C,C′:秘匿化対象データ
D,D′:署名対象データ
D(A):認証用データ
F:改竄チェックルーチン
G:プログラム保証者
H,H1,H2:ハッシュ値
K(a1):Aの第1の鍵
K(a2):Aの第2の鍵
K(d):復号鍵
K(e):暗号鍵
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):署名値
S0〜S48:流れ図の各ステップ
U,U1〜U3:ユーザ
X:クラッカー

Claims (39)

  1. 改竄チェックの準備を行う準備プロセスと、アプリケーションプログラムを配布する配布プロセスと、配布されたアプリケーションプログラムに対する改竄チェックを行う改竄チェックプロセスと、を有するアプリケーションプログラムの改竄検知方法であって、
    前記準備プロセスでは、
    アプリケーションプログラムを実行するためのアプリケーション実行用コンピュータが、第1の特定鍵を用いて改竄チェックを行う改竄チェックルーチンを含む改竄チェックプログラムをインストールする改竄チェックプログラム準備段階を行い、
    前記配布プロセスでは、
    コンピュータが、配布対象となるアプリケーションプログラムに対してパッケージ化処理を施し、アプリケーションパッケージを作成するパッケージ化段階と、
    コンピュータが、前記アプリケーションパッケージを署名対象データとして、プログラム提供者の第1の鍵を用いた暗号化を利用した電子署名処理を行って署名値を生成し、この署名値と前記プログラム提供者の第2の鍵とを含む署名情報を作成する署名情報作成段階と、
    コンピュータが、前記アプリケーションパッケージおよび前記署名情報を構成するデータの中から、前記プログラム提供者の第2の鍵を含む所定部分を秘匿化対象データとして抽出し、抽出した前記秘匿化対象データに対して第2の特定鍵を用いた秘匿化処理を施して秘匿情報を作成する秘匿情報作成段階と、
    コンピュータが、前記アプリケーションパッケージと、前記署名情報と、前記秘匿情報もしくは前記秘匿情報の所在を示す所在情報と、を含む配布用ファイルを作成する配布用ファイル作成段階と、
    コンピュータが、前記配布用ファイルを出力するファイル出力段階と、
    を行い、
    前記改竄チェックプロセスでは、
    前記アプリケーション実行用コンピュータが、前記配布用ファイルを入力するファイル入力段階と、
    前記アプリケーション実行用コンピュータが、入力した配布用ファイルについて、前記署名情報に含まれている前記プログラム提供者の第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のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    改竄チェックプログラム内に第1の特定鍵が含まれていることを特徴とするアプリケーションプログラムの改竄検知方法。
  10. 請求項1〜8のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    改竄チェックプログラム内に、改竄チェックルーチンと、この改竄チェックルーチンが改竄チェックを行うために必要な第1の特定鍵の格納場所を示す所在情報と、が含まれており、
    第2の確認段階で、アプリケーション実行用コンピュータが、前記改竄チェックプログラムから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から取り出した前記第1の特定鍵を用いて前記改竄チェックルーチンを実行することを特徴とするアプリケーションプログラムの改竄検知方法。
  11. 請求項1〜8のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    改竄チェックプログラム内に、改竄チェックルーチンと、この改竄チェックルーチンが改竄チェックを行うために必要な第1の特定鍵の格納場所を示す所在情報と、が含まれており、
    アプリケーション実行用コンピュータ内に、前記第1の特定鍵を保存する保存場所を設け、前記アプリケーション実行用コンピュータが第2の確認段階を実行する際に、前記保存場所に、前記第1の特定鍵が保存されていない場合には、前記改竄チェックプログラムから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から前記第1の特定鍵を取り出すことにより、前記第1の特定鍵の入手を行うとともに入手した前記第1の特定鍵を前記保存場所に保存する処理を行い、前記保存場所に、前記第1の特定鍵が保存されている場合には、前記保存場所から前記第1の特定鍵を取り出すことにより、前記第1の特定鍵の入手を行い、入手した前記第1の特定鍵を用いて前記改竄チェックルーチンを実行することを特徴とするアプリケーションプログラムの改竄検知方法。
  12. 請求項10または11に記載のアプリケーションプログラムの改竄検知方法において、
    所定の認証用データを用いた認証機能が備わった格納場所に第1の特定鍵が格納されており、
    改竄チェックプログラム内に、前記認証用データが含まれており、
    アプリケーション実行用コンピュータが、前記格納場所から前記第1の特定鍵の取り出しを行う際に、前記認証用データを利用した認証を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  13. 請求項10〜12のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    第1の特定鍵の格納場所には、前記第1の特定鍵とともに所定の暗号鍵が格納されており、
    改竄チェックプログラム内に、前記暗号鍵に対応した復号鍵が含まれており、
    アプリケーション実行用コンピュータが、前記格納場所から前記第1の特定鍵の取り出しを行う際に、通信路上を前記第1の特定鍵が前記暗号鍵によって暗号化された状態で送信されるようにし、受信後にこれを前記復号鍵で復号することを特徴とするアプリケーションプログラムの改竄検知方法。
  14. 請求項1〜13のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    アプリケーション実行用コンピュータが、改竄ありとの判定が行われた配布用ファイルに含まれているアプリケーションプログラムについては、実行を中止する処理を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  15. 請求項1〜14のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    アプリケーション実行用コンピュータとして、OSプログラムの管理下でアプリケーションプログラムの実行を行うコンピュータを用い、
    第1の確認段階を前記OSプログラムに基づいて実行し、
    第2の確認段階を改竄チェックプログラムに基づいて実行し、
    前記改竄チェックプログラムを、改竄チェックの対象となるアプリケーションプログラムとは別のアプリケーションプログラムによって構成するか、もしくは、前記OSプログラムの一部によって構成することを特徴とするアプリケーションプログラムの改竄検知方法。
  16. 請求項1〜15のいずれかに記載のアプリケーションプログラムの改竄検知方法であって、
    改竄チェックの対象となるアプリケーションプログラムが、プログラム本体部と、このプログラム本体部から呼び出されるサブルーチン群と、画像および文字列を含むリソースデータと、XML形式のデータからなるマニフェストファイルと、を含んでおり、
    パッケージ化段階において、ZIP方式の圧縮処理を含むパッケージ化処理を実行し、配布用ファイル作成段階において、APK形式のフォーマットをもった配布用ファイルを作成することを特徴とするアプリケーションプログラムの改竄検知方法。
  17. 請求項16に記載のアプリケーションプログラムの改竄検知方法であって、
    配布用ファイル作成段階において、ZIP方式の圧縮フォーマットにおけるコメント領域に秘匿情報もしくは所在情報を記録することにより配布用ファイルを作成することを特徴とするアプリケーションプログラムの改竄検知方法。
  18. 請求項1〜17のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    配布用ファイル作成段階で、コンピュータが、秘匿情報を含む配布用ファイルを作成し、
    第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから秘匿情報を抽出することにより、当該秘匿情報の入手を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  19. 請求項1〜17のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
    第2の確認段階で、アプリケーション実行用コンピュータが、入力した配布用ファイルから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  20. 請求項1〜17のいずれかに記載のアプリケーションプログラムの改竄検知方法において、
    配布用ファイル作成段階で、コンピュータが、秘匿情報を所定の格納場所に格納する処理を行うとともに、当該格納場所を示す所在情報を含む配布用ファイルを作成し、
    アプリケーション実行用コンピュータ内に、入力した配布用ファイルについての秘匿情報を保存する保存場所を設け、前記アプリケーション実行用コンピュータが第2の確認段階を実行する際に、前記保存場所に、必要な秘匿情報が保存されていない場合には、前記配布用ファイルから前記所在情報を抽出し、この所在情報に基づいて前記格納場所を認識し、前記格納場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うとともに、入手した秘匿情報を前記保存場所に保存する処理を行い、前記保存場所に、必要な秘匿情報が保存されている場合には、前記保存場所から秘匿情報を取り出すことにより、当該秘匿情報の入手を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  21. アプリケーションプログラムの改竄を検知する方法であって、
    コンピュータが、アプリケーションプログラムと、署名情報と、秘匿情報もしくはその所在を示す所在情報と、を含むデータファイルを入力する入力段階と、
    前記コンピュータが、前記アプリケーションプログラムが改竄されているか否かを判定する判定段階と、
    を有し、
    前記署名情報は、前記アプリケーションプログラムを署名対象データとする電子署名処理によって得られた情報であり、
    前記秘匿情報は、前記アプリケーションプログラムおよび前記署名情報を構成するデータの中の所定部分を秘匿化対象データとして抽出し、抽出した前記秘匿化対象データに対する秘匿化処理を施して得られた情報であり、
    前記判定段階は、前記署名情報に基づいて改竄の有無を確認する第1の確認段階と、前記秘匿情報に基づいて改竄の有無を確認する第2の確認段階と、を有し、
    前記コンピュータには、改竄チェックプログラムがインストールされており、前記改竄チェックプログラムには前記秘匿化処理で行われた処理プロセスを勘案して前記秘匿化対象データに対する前記秘匿情報の正当性を確認する改竄チェックルーチンが含まれており、前記改竄チェックルーチンを実行することにより前記第2の確認段階が行われることを特徴とするアプリケーションプログラムの改竄検知方法。
  22. 請求項21に記載のアプリケーションプログラムの改竄検知方法において、
    一方の鍵を用いて暗号化したデータを他方の鍵を用いて復号できる性質をもった一対の鍵を用い、
    秘匿情報が、秘匿化対象データを前記一方の鍵を用いて暗号化することにより得られた情報であり、
    改竄チェックルーチンが、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報を前記他方の鍵を用いて復号し、この復号によって得られた秘匿化対象データと、入力段階で入力したデータファイルから抽出した秘匿化対象データとが一致していた場合に、第2の確認段階に関して改竄なしとの判定を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  23. 請求項21に記載のアプリケーションプログラムの改竄検知方法において、
    秘匿情報が、秘匿化対象データに対して、所定の特定鍵をパラメータとして用いた一方向性関数を作用させるダイジェスト化処理を施して作成された情報であり、
    改竄チェックルーチンが、入力段階で入力したデータファイルから抽出した秘匿化対象データに対して、前記特定鍵を用いた前記ダイジェスト化処理を施して得られる情報が、入力段階で入力したデータファイルに含まれている秘匿情報もしくは入力段階で入力したデータファイルに含まれている所在情報に基づいて入手した秘匿情報と一致していた場合に、第2の確認段階に関して改竄なしとの判定を行うことを特徴とするアプリケーションプログラムの改竄検知方法。
  24. 請求項1〜20のいずれかに記載されたアプリケーションプログラムの改竄検知方法における配布プロセスを構成する各段階を有することを特徴とするアプリケーションプログラムの配布方法。
  25. 請求項1〜20のいずれかに記載されたアプリケーションプログラムの改竄検知方法における改竄チェックプロセスを構成する各段階を有することを特徴とするアプリケーションプログラムの改竄チェック方法。
  26. 請求項1〜20のいずれかに記載されたアプリケーションプログラムの改竄検知方法における配布プロセスを構成する各段階をコンピュータに実行させるプログラム。
  27. 請求項1〜20のいずれかに記載されたアプリケーションプログラムの改竄検知方法における改竄チェックプロセスを構成する各段階をコンピュータに実行させるプログラム。
  28. 請求項1〜20のいずれかに記載されたアプリケーションプログラムの改竄検知方法を利用して、アプリケーション実行用コンピュータが、配布されたアプリケーションプログラムを実行する方法であって、
    前記アプリケーション実行用コンピュータが、前記改竄検知方法により、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階と、
    前記アプリケーション実行用コンピュータが、前記改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別情報を、実行許可リストに登録するリスト自動登録段階と、
    前記アプリケーション実行用コンピュータが、起動状態にあるアプリケーションプログラムの識別情報を認識する起動アプリ認識段階と、
    前記アプリケーション実行用コンピュータが、前記起動アプリ認識段階において認識した識別情報が前記実行許可リストに登録されているか否かを判定する登録有無判定段階と、
    前記アプリケーション実行用コンピュータが、前記登録有無判定段階において未登録と判定された場合に、当該未登録アプリを登録するか否かをユーザに問い合わせる登録照会段階と、
    前記アプリケーション実行用コンピュータが、前記問い合わせに対するユーザの回答として、登録する旨の回答があった場合には、前記未登録アプリの識別情報を前記実行許可リストに登録した上で当該アプリの実行を許可し、登録しない旨の回答があった場合には、当該未登録アプリの実行を中止させる回答処理段階と、
    を実行することを特徴とするアプリケーションプログラムの実行方法。
  29. 請求項28に記載のアプリケーションプログラムの実行方法において、
    アプリケーション実行用コンピュータに組み込まれたOSプログラムが、複数のアプリケーションプログラムを所定のタイミングで切り替えながら実行させるマルチタスク処理機能を有しており、
    前記アプリケーション実行用コンピュータが、アプリケーションプログラムの1つとして用意された監視プログラムによって、リスト自動登録段階、起動アプリ認識段階、登録有無判定段階、登録照会段階、回答処理段階を実行することを特徴とするアプリケーションプログラムの実行方法。
  30. 請求項29に記載のアプリケーションプログラムの実行方法において、
    アプリケーション実行用コンピュータが、OSプログラムによって、個々のアプリケーションプログラムについて、識別情報・起動時・終了時を示すログ情報を記録する処理を実行し、
    前記アプリケーション実行用コンピュータが、監視プログラムによって起動アプリ認識段階を実行する際に、前記ログ情報を参照することにより起動状態にあるアプリケーションプログラムの識別情報を認識することを特徴とするアプリケーションプログラムの実行方法。
  31. 請求項28〜30のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階、回答処理段階、および起動アプリ認識段階において、バージョンの異なるアプリケーションプログラムについては、それぞれ異なる識別情報を用いた処理を行うことを特徴とするアプリケーションプログラムの実行方法。
  32. 請求項31に記載のアプリケーションプログラムの実行方法において、
    同一のファイル名をもったデータファイルに含まれるアプリケーションプログラムであっても、ハッシュ値が異なる場合は、異なるバージョンと認識することを特徴とするアプリケーションプログラムの実行方法。
  33. 請求項28〜30のいずれかに記載のアプリケーションプログラムの実行方法において、
    バージョンの異なる同一のアプリケーションプログラムについては共通の識別情報を用いるようにし、
    アプリケーション実行用コンピュータが、配布された2組のアプリケーションプログラムについて、その識別情報、署名値、第2の鍵を比較し、相互に署名値は異なるが、識別情報および第2の鍵が一致する場合には、当該2組のアプリケーションプログラムが同一のプログラム提供者によって提供されたバージョン違いのアプリケーションプログラムであると認識し、これら2組のアプリケーションプログラムに対して、予め定められた所定のバージョン更新処理を実行することを特徴とするアプリケーションプログラムの実行方法。
  34. 請求項28〜33のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが外部の格納場所内に保存された実行許可リストに対する登録を行い、
    登録有無判定段階で、前記アプリケーション実行用コンピュータが前記外部の格納場所に保存された実行許可リストを参照することにより判定を行うことを特徴とするアプリケーションプログラムの実行方法。
  35. 請求項28〜34のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが実行許可リストを暗号化する処理を行い、
    登録有無判定段階で、前記アプリケーション実行用コンピュータが暗号化されている実行許可リストを復号して内容の参照を行うことを特徴とするアプリケーションプログラムの実行方法。
  36. 請求項28〜35のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが、識別情報とともに、ファイル入力段階で入力した配布用ファイルに含まれている所定のチェックコードを登録するようにし、
    登録有無判定段階で、前記アプリケーション実行用コンピュータが、前記配布用ファイル内に含まれているチェックコードと実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うことを特徴とするアプリケーションプログラムの実行方法。
  37. 請求項28〜35のいずれかに記載のアプリケーションプログラムの実行方法において、
    リスト自動登録段階もしくは回答処理段階で実行許可リストへの登録を行う際に、アプリケーション実行用コンピュータが、識別情報とともに、ファイル入力段階で入力した配布用ファイルに含まれている所定の情報に対して一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードを登録するようにし、
    登録有無判定段階で、前記アプリケーション実行用コンピュータが、前記配布用ファイル内に含まれている前記所定の情報に対して前記一方向性関数を作用させるダイジェスト化処理を行うことにより得られるチェックコードと、実行許可リストに登録されているチェックコードとの一致を確認し、一致確認がなされることを条件として、実行許可リストに登録されている旨の判定を行うことを特徴とするアプリケーションプログラムの実行方法。
  38. 請求項1〜23のいずれかに記載されたアプリケーションプログラムの改竄検知方法を利用して、アプリケーション実行用コンピュータが、配布されたアプリケーションプログラムを実行する方法であって、
    前記アプリケーション実行用コンピュータが、前記改竄検知方法により、入力したアプリケーションプログラムが改竄されているか否かを判定する改竄判定段階と、
    前記アプリケーション実行用コンピュータが、前記改竄判定段階において改竄されていない旨の判定がなされたアプリケーションプログラムの識別情報を、実行許可リストに登録するリスト自動登録段階と、
    前記アプリケーション実行用コンピュータが、前記実行許可リストを参照して、リストに登録されているアプリケーションプログラムと登録されていないアプリケーションプログラムとの間で異なる処理を実行する段階と、
    を実行することを特徴とするアプリケーションプログラムの実行方法。
  39. 請求項29または30に記載のアプリケーションプログラムの実行方法に用いる監視プログラム。
JP2012204321A 2012-09-18 2012-09-18 アプリケーションプログラムの改竄検知方法 Active JP5182445B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012204321A JP5182445B1 (ja) 2012-09-18 2012-09-18 アプリケーションプログラムの改竄検知方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012204321A JP5182445B1 (ja) 2012-09-18 2012-09-18 アプリケーションプログラムの改竄検知方法

Publications (2)

Publication Number Publication Date
JP5182445B1 true JP5182445B1 (ja) 2013-04-17
JP2014059724A JP2014059724A (ja) 2014-04-03

Family

ID=48481363

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012204321A Active JP5182445B1 (ja) 2012-09-18 2012-09-18 アプリケーションプログラムの改竄検知方法

Country Status (1)

Country Link
JP (1) JP5182445B1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11392671B2 (en) * 2015-01-21 2022-07-19 Canon Kabushiki Kaisha Delivery management server and delivery management method for delivering updated application

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6404771B2 (ja) * 2015-05-26 2018-10-17 日本電信電話株式会社 ログ判定装置、ログ判定方法、およびログ判定プログラム
KR102488149B1 (ko) * 2018-01-08 2023-01-16 삼성전자주식회사 디스플레이장치 및 그 제어방법
IT201900017534A1 (it) * 2019-09-30 2021-03-30 Magneti Marelli Spa "Sistema di elaborazione comprendente apparato di calcolo di tipo "trust anchor" e corrispondente procedimento"

Citations (9)

* 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
JP5056955B2 (ja) * 2010-07-30 2012-10-24 トヨタ自動車株式会社 電圧駆動型素子を駆動する駆動装置

Patent Citations (9)

* 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
JP5056955B2 (ja) * 2010-07-30 2012-10-24 トヨタ自動車株式会社 電圧駆動型素子を駆動する駆動装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11392671B2 (en) * 2015-01-21 2022-07-19 Canon Kabushiki Kaisha Delivery management server and delivery management method for delivering updated application

Also Published As

Publication number Publication date
JP2014059724A (ja) 2014-04-03

Similar Documents

Publication Publication Date Title
JP5126447B1 (ja) アプリケーションプログラムの実行方法
US8417964B2 (en) Software module management device and program
JP5190800B2 (ja) プログラムの実行制御システム、実行制御方法、実行制御用コンピュータプログラム
CN112861191B (zh) 一种应用程序监控方法及装置
US9348575B2 (en) Update of a data-carrier application
EP2051181A1 (en) Information terminal, security device, data protection method, and data protection program
JP2002140126A (ja) プログラム配布システム、暗号化プログラム配布装置、プログラム不具合情報収集システム、及びプログラム配布方法
WO2013161974A1 (ja) 改竄検知が可能なアプリケーションプログラムの配布実行方法
JP2008146479A (ja) ソフトウェア部品、ソフトウェア部品管理方法、及びソフトウェア部品管理システム
JP5182445B1 (ja) アプリケーションプログラムの改竄検知方法
CN101977219B (zh) 一种widget应用保护方法及装置
JP5781678B1 (ja) 電子データ利用システム、携帯端末装置、及び電子データ利用システムにおける方法
JP5056995B1 (ja) 改竄検知が可能なアプリケーションプログラムの配布実行方法
JP7331714B2 (ja) 情報処理装置、情報処理方法及びプログラム
JP2006164184A (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
US20150234646A1 (en) Method for Installing Security-Relevant Applications in a Security Element of a Terminal
CN102375954B (zh) 一种软件应用认证方法及装置
KR101711024B1 (ko) 부정조작방지 장치 접근 방법 및 그 방법을 채용한 단말 장치
CN107770144A (zh) 应用监测方法、开发平台、客户端及信息系统
Bahaa-Eldin et al. A comprehensive software copy protection and digital rights management platform
CN102770869B (zh) 计算资源的安全执行
EP3805971A1 (en) Information processing device, information processing method, information processing program, and information processing system
JP5018558B2 (ja) 記憶領域割当方法および情報処理装置
KR100973333B1 (ko) 시간에 기반한 저작물 불법 사용 방지 시스템 및 방법
KR101552557B1 (ko) 휴대 단말기용 어플리케이션의 디컴파일 방지 서비스를 제공하는 관리서버 및 그 방지방법

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121231

R150 Certificate of patent or registration of utility model

Ref document number: 5182445

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: 20160125

Year of fee payment: 3