(57)【要約】【課題】インストール中のプログラムが、改竄プログラムにすり替えられた場合に、ユーザに認識させる。【解決手段】アプリ３００の初回起動時に、登録処理ルーチン３３０により、ユーザのみが知りうる固有情報Ｐ１を入力し、これをネット経由でサーバ装置４００に識別情報Ｉとともに固有情報Ｐ２として格納し、登録履歴Ｈを記録する登録処理を行う。次回以降の起動時には、登録履歴Ｈを参照すれば過去に登録処理が行われていることが認識できるので、提示処理ルーチン３４０により、サーバ装置４００から識別情報Ｉに対応づけられた固有情報Ｐ２を取り出し、これを固有情報Ｐ３もしくはその派生情報Ｑ３としてユーザに提示する提示処理を行い、その後に、主処理ルーチン３２０を実行する。アプリ３００が改竄プログラムにすり替えられると、起動時に正しい提示処理が行われないため、ユーザは不正事項の発生を認識できる。【選択図】図１２
2015090640.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、所定の主処理を実行させる主処理ルーチンと、
コンピュータに、起動処理を実行させる起動処理ルーチンと、
コンピュータに、ユーザの指示に基づいて固有情報を入力し、入力した固有情報を所定の格納場所に格納する登録処理を実行させる登録処理ルーチンと、
コンピュータに、前記格納場所から前記固有情報を取り出し、取り出した前記固有情報もしくは取り出した前記固有情報に基づいて生成した派生情報をユーザに提示する提示処理を実行させる提示処理ルーチンと、
を有するアプリケーションプログラムであって、
前記起動処理が、特定のコンピュータにおいて前記アプリケーションプログラムが起動されたときに、前記特定のコンピュータについて過去に前記登録処理が実行されていた場合には、前記特定のコンピュータに、前記提示処理と前記主処理とを実行させる処理であることを特徴とするアプリケーションプログラム。
【請求項２】
請求項１に記載のアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、文字列、記号、画像、動画、音声もしくは振動を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
提示処理が、固有情報もしくは派生情報として、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせをユーザに提示する処理を含むことを特徴とするアプリケーションプログラム。
【請求項３】
請求項１または２に記載のアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、提示方法を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
提示処理が、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを前記提示方法に基づいてユーザに提示する処理を含むことを特徴とするアプリケーションプログラム。
【請求項４】
請求項１〜３のいずれかに記載のアプリケーションプログラムにおいて、
登録処理が、固有情報の入力を行う際に、当該固有情報が前記アプリケーションプログラムの正当性を確認するための提示処理に利用される情報である旨の説明メッセージを提示する処理を含むことを特徴とするアプリケーションプログラム。
【請求項５】
請求項１〜４のいずれかに記載のアプリケーションプログラムにおいて、
起動処理が、特定のコンピュータにおいて前記アプリケーションプログラムが起動されたときに、前記特定のコンピュータについて過去に登録処理が実行されていた場合には、前記特定のコンピュータに、提示処理の実行後に主処理を実行させる処理であることを特徴とするアプリケーションプログラム。
【請求項６】
請求項５に記載のアプリケーションプログラムにおいて、
提示処理の実行後に所定の提示時間が経過した後、自動的に主処理が実行されることを特徴とするアプリケーションプログラム。
【請求項７】
請求項５または６に記載のアプリケーションプログラムにおいて、
提示処理の実行後に、ユーザによる所定の操作があったときに、主処理が実行されることを特徴とするアプリケーションプログラム。
【請求項８】
コンピュータに、所定の主処理を実行させる主処理ルーチンと、
コンピュータに、起動処理を実行させる起動処理ルーチンと、
コンピュータに、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、入力した固有情報を所定の格納場所に格納する登録処理を実行させる登録処理ルーチンと、
コンピュータに、前記格納場所から前記固有情報を取り出し、取り出した前記固有情報と当該コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理を実行させる確認処理ルーチンと、
を有するアプリケーションプログラムであって、
前記起動処理が、特定のコンピュータにおいて前記アプリケーションプログラムが起動されたときに、前記特定のコンピュータについて過去に前記登録処理が実行されていた場合には、前記特定のコンピュータに、前記確認処理で合致が確認された場合にのみ前記主処理を実行させる処理であることを特徴とするアプリケーションプログラム。
【請求項９】
請求項８に記載のアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、特定の方角を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
確認処理が、前記固有情報に含まれている前記特定の方角と、コンピュータに備わっている方位センサが検出した当該コンピュータの地理的な向きと、が合致するか否かを確認する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１０】
請求項８に記載のアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、特定の角度を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
確認処理が、前記固有情報に含まれている前記特定の角度と、コンピュータに備わっている加速度センサが検出した当該コンピュータの姿勢を示す角度と、が合致するか否かを確認する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１１】
請求項８〜１０のいずれかに記載のアプリケーションプログラムにおいて、
登録処理が、固有情報の入力を行う際に、当該固有情報が前記アプリケーションプログラムの正当性を確認するための確認処理に利用される情報である旨の説明メッセージを提示する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１２】
請求項１〜１１のいずれかに記載のアプリケーションプログラムにおいて、
登録処理が、ユーザの登録指示に基づいて実行されることを特徴とするアプリケーションプログラム。
【請求項１３】
請求項１〜１１のいずれかに記載のアプリケーションプログラムにおいて、
起動処理が、特定のコンピュータにおいて前記アプリケーションプログラムが起動されたときに、前記特定のコンピュータについて過去に登録処理が実行されていなかった場合には、前記特定のコンピュータに、登録処理の実行後に主処理を実行させる処理を含むことを特徴とするアプリケーションプログラム。
【請求項１４】
請求項１〜１３のいずれかに記載のアプリケーションプログラムにおいて、
起動処理が、登録処理によって格納が行われるべき所定の格納場所に、固有情報が格納されているか否かに基づいて、過去に前記登録処理が実行されたか否かを判定する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１５】
請求項１〜１３のいずれかに記載のアプリケーションプログラムにおいて、
登録処理が、特定のコンピュータについて固有情報を所定の格納場所に格納したことを登録履歴として記録する処理を含み、
起動処理が、前記登録履歴の有無に基づいて、前記特定のコンピュータについて過去に前記登録処理が実行されたか否かを判定する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１６】
請求項１５に記載のアプリケーションプログラムにおいて、
登録履歴の記録場所として、登録処理を実行する特定のコンピュータ内の不揮発性メモリ領域が設定されていることを特徴とするアプリケーションプログラム。
【請求項１７】
請求項１４〜１６に記載のアプリケーションプログラムにおいて、
起動処理が、前記アプリケーションプログラムと同一のグループに所属する別のプログラムによって固有情報が所定の場所に格納されているか否かに基づいて、もしくは、前記別のプログラムによって記録された登録履歴に基づいて、過去に登録処理が実行されたか否かを判定する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１８】
請求項１７に記載のアプリケーションプログラムにおいて、
起動処理が、前記アプリケーションプログラムに対して旧バージョンの関係にあるアプリケーションプログラムによって固有情報が所定の場所に格納されているか否かに基づいて、もしくは、前記旧バージョンの関係にあるアプリケーションプログラムによって記録された登録履歴に基づいて、過去に登録処理が実行されたか否かを判定する処理を含むことを特徴とするアプリケーションプログラム。
【請求項１９】
請求項１〜１８のいずれかに記載のアプリケーションプログラムにおいて、
登録処理が、当該登録処理を実行中の特定のコンピュータ内の記憶装置もしくは当該特定のコンピュータに接続された外部の記憶装置を格納場所として固有情報を格納する処理を含み、
提示処理もしくは確認処理が、前記いずれかの記憶装置に格納されている前記固有情報を取り出す処理を含むことを特徴とするアプリケーションプログラム。
【請求項２０】
請求項１〜１８のいずれかに記載のアプリケーションプログラムにおいて、
登録処理が、当該登録処理を実行中の特定のコンピュータに対してネットワークを介して接続されたサーバ装置を格納場所として固有情報を格納する処理を含み、
提示処理もしくは確認処理が、前記サーバ装置に格納されている前記固有情報をネットワークを介して取り出す処理を含むことを特徴とするアプリケーションプログラム。
【請求項２１】
請求項２０に記載のアプリケーションプログラムにおいて、
登録処理が、当該登録処理を実行中の特定のコンピュータもしくは当該特定のコンピュータを利用している特定のユーザを識別するための識別情報に対応づけて、登録処理の対象となる固有情報をサーバ装置に格納する処理を含み、
提示処理もしくは確認処理が、前記識別情報を利用して、前記識別情報に対応づけて格納されている前記固有情報を取り出す処理を含むことを特徴とするアプリケーションプログラム。
【請求項２２】
請求項１〜２１のいずれかに記載のアプリケーションプログラムにおいて、
コンピュータに、前記アプリケーションプログラムを構成するファイル全体のデータサイズを確認し、確認したデータサイズが予め設定されている設定サイズと一致するか否かを提示するサイズ確認処理を実行させるサイズ確認処理ルーチンを更に有することを特徴とするアプリケーションプログラム。
【請求項２３】
請求項１〜２２のいずれかに記載のアプリケーションプログラムにおいて、
主処理ルーチン、起動処理ルーチン、登録処理ルーチン、提示処理ルーチン、確認処理ルーチン、サイズ確認処理ルーチンのうち、前記アプリケーションプログラムに組み込まれているルーチンが、Android（登録商標）ＯＳプログラムの下で動作するプログラムにより構成されていることを特徴とするアプリケーションプログラム。
【請求項２４】
請求項１〜２３のいずれかに記載のアプリケーションプログラムを記録したコンピュータ読み取り可能な記録媒体または前記アプリケーションプログラムがインストールされたコンピュータ。
【請求項２５】
コンピュータが、特定のアプリケーションプログラムに対する起動指示を受けたときに、過去に前記特定のアプリケーションプログラムに関する登録処理段階が実行されているか否かを判定する登録有無判定段階と、
前記登録有無判定段階において否定的判定がなされたときに、前記コンピュータが、ユーザの指示に基づいて固有情報を入力し、前記特定のアプリケーションプログラムに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
前記登録有無判定段階において肯定的判定がなされたときに、前記コンピュータが、前記格納場所に前記特定のアプリケーションプログラムに対応づけて格納されている前記固有情報を取り出し、取り出した前記固有情報もしくは取り出した前記固有情報に基づいて生成した派生情報をユーザに提示する提示処理段階と、
前記コンピュータが、前記登録処理段階もしくは前記提示処理段階を実行した後に、前記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を有することを特徴とするアプリケーションプログラムの実行方法。
【請求項２６】
登録用コンピュータが、ユーザの指示に基づいて固有情報を入力し、特定の実行用コンピュータと特定のアプリケーションプログラムとの組み合わせに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
前記特定の実行用コンピュータが、前記特定のアプリケーションプログラムに対する起動指示を受けたときに、前記格納場所に前記特定の実行用コンピュータと前記特定のアプリケーションプログラムとの組み合わせに対応づけて格納されている前記固有情報を取り出し、取り出した前記固有情報もしくは取り出した前記固有情報に基づいて生成した派生情報をユーザに提示する提示処理段階と、
前記特定の実行用コンピュータが、前記提示処理段階を実行した後に、前記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を有することを特徴とするアプリケーションプログラムの実行方法。
【請求項２７】
請求項２５または２６に記載のアプリケーションプログラムの実行方法において、
登録処理段階で、文字列、記号、画像、動画、音声もしくは振動を含む固有情報を所定の格納場所に格納し、
提示処理段階で、前記固有情報もしくは前記固有情報に基づいて生成した派生情報として、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを提示することを特徴とするアプリケーションプログラムの実行方法。
【請求項２８】
請求項２５〜２７のいずれかに記載のアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて固有情報の入力を行う際に、当該固有情報が前記アプリケーションプログラムの正当性を確認するために提示処理段階で利用される情報である旨の説明メッセージを提示することを特徴とするアプリケーションプログラムの実行方法。
【請求項２９】
請求項２５に記載のアプリケーションプログラムの実行方法において、
アプリケーションプログラムによる登録処理段階および提示処理段階の処理動作を監視する監視プログラムを用意し、
コンピュータが、前記監視プログラムを実行することにより、前記登録処理段階で所定の格納場所に格納された固有情報を、別な格納場所にもコピーして格納する照合準備段階と、
コンピュータが、前記監視プログラムを実行することにより、前記提示処理段階で提示された固有情報もしくは派生情報と、前記別な格納場所に格納されている固有情報もしくはこれに基づいて生成した派生情報とが合致するか否かを照合し、照合結果をユーザに報知する照合処理段階と、
を更に行うことを特徴とするアプリケーションプログラムの実行方法。
【請求項３０】
コンピュータが、特定のアプリケーションプログラムに対する起動指示を受けたときに、過去に前記特定のアプリケーションプログラムに関する登録処理段階が実行されているか否かを判定する登録有無判定段階と、
前記登録有無判定段階において否定的判定がなされたときに、前記コンピュータが、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、前記特定のアプリケーションプログラムに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
前記登録有無判定段階において肯定的判定がなされたときに、前記コンピュータが、前記格納場所に前記特定のアプリケーションプログラムに対応づけて格納されている前記固有情報を取り出し、取り出した前記固有情報と前記コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理段階と、
前記コンピュータが、前記登録処理段階を実行した後に、もしくは、前記確認処理段階を実行して合致が確認されたときに、前記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を有することを特徴とするアプリケーションプログラムの実行方法。
【請求項３１】
登録用コンピュータが、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、特定の実行用コンピュータと特定のアプリケーションプログラムとの組み合わせに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
前記特定の実行用コンピュータが、前記特定のアプリケーションプログラムに対する起動指示を受けたときに、前記格納場所に前記特定の実行用コンピュータと前記特定のアプリケーションプログラムとの組み合わせに対応づけて格納されている前記固有情報を取り出し、取り出した前記固有情報と前記特定の実行用コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理段階と、
前記特定の実行用コンピュータが、前記確認処理段階を実行して合致が確認されたときに、前記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を有することを特徴とするアプリケーションプログラムの実行方法。
【請求項３２】
請求項３０または３１に記載のアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて、特定の方角を含む固有情報を入力し、これを所定の格納場所に格納し、
確認処理段階で、前記固有情報に含まれている前記特定の方角と、コンピュータに備わっている方位センサが検出した当該コンピュータの地理的な向きと、が合致するか否かを確認し、確認結果をユーザに報知することを特徴とするアプリケーションプログラムの実行方法。
【請求項３３】
請求項３０または３１に記載のアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて、特定の角度を含む固有情報を入力し、これを所定の格納場所に格納し、
確認処理段階で、前記固有情報に含まれている前記特定の角度と、コンピュータに備わっている加速度センサが検出した当該コンピュータの姿勢を示す角度と、が合致するか否かを確認し、確認結果をユーザに報知することを特徴とするアプリケーションプログラムの実行方法。
【請求項３４】
請求項３０〜３３のいずれかに記載のアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて固有情報の入力を行う際に、当該固有情報が前記アプリケーションプログラムの正当性を確認するために確認処理段階で利用される情報である旨の説明メッセージを提示することを特徴とするアプリケーションプログラムの実行方法。
【請求項３５】
請求項２５〜３４のいずれかに記載のアプリケーションプログラムの実行方法において、
登録処理段階で、同一のグループに所属する複数のアプリケーションプログラムについては、これら複数のアプリケーションプログラムに共通の固有情報を対応づけて格納する処理を行うことを特徴とするアプリケーションプログラムの実行方法。
【請求項３６】
請求項２５〜３５のいずれかに記載のアプリケーションプログラムの実行方法において、
コンピュータにアプリケーションプログラムがインストールされたときに、当該アプリケーションプログラムに対応づけた固有情報を所定の格納場所に格納する登録処理段階が実行されることを特徴とするアプリケーションプログラムの実行方法。
【請求項３７】
請求項２５〜３６のいずれかに記載のアプリケーションプログラムの実行方法において、
登録処理段階で、当該登録処理段階を実行中のコンピュータに対してネットワークを介して接続されたサーバ装置を格納場所として固有情報を格納し、
提示処理段階もしくは確認処理段階で、前記サーバ装置に格納されている前記固有情報をネットワークを介して取り出すことを特徴とするアプリケーションプログラムの実行方法。
【請求項３８】
請求項３７に記載のアプリケーションプログラムの実行方法において、
Ｗｅｂブラウザプログラムもしくは電子メールプログラムを利用して、登録処理段階が実行されることを特徴とするアプリケーションプログラムの実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムおよびその実行方法に関し、特に、インストールされたアプリケーションプログラムが不正な手段で改竄された場合に、これを検知してユーザに認識させる技術に関する。
【背景技術】
【０００２】
現在、コンピュータとして機能する電子機器は、いわゆるデスクトップパソコンやノートパソコンから、スマートフォンや電子タブレットに至るまで多岐にわたっており、これら様々な電子機器において多様なアプリケーションプログラムが利用されている。このため、実社会で利用されているアプリケーションプログラムの数は膨大な数にのぼり、今後も急激な勢いでその数を増してゆくものと予想される。一方、アプリケーションプログラムの提供形態も、物理的な記録媒体に格納して配布する従来の形態から、インターネットを介してオンラインでデータを送信する形態に移行しつつあり、一般ユーザは、Ｗｅｂ上の所定のサイトをアクセスして、ネットワーク経由でアプリケーションプログラムをインストールして利用することができるようになってきている。
【０００３】
このように、ネットワーク経由でアプリケーションプログラムを配布する形態が普及したため、マルウェアの流布も容易になってきており、実害の発生が社会的な問題となってきている。最近は、金融取引や信販取引でのオンライン決済を行うためのアプリケーションプログラムも広く利用されるようになってきており、クラッカーが、このようなアプリケーションプログラムに改竄を加えた上で、これを偽サイトなどを通じてユーザに再配布して詐欺行為を行う事例も多くなってきている。ユーザが、改竄されたアプリケーションプログラムを知らずにインストールし、これを実行してしまうと、パスワードをはじめとする様々な情報がクラッカーの手に盗み出されてしまい、金銭的な実害が発生することになる。
【０００４】
通常、デジタルデータの改竄を防止するためには、電子署名の技術が利用されている。たとえば、下記の特許文献１には、携帯電話のメモリ内のデータに電子署名を施し、これをチェックすることにより改竄の有無を検出するシステムが開示されている。また、特許文献２には、情報処理装置内のアプリケーションプログラムの改竄の有無を、電子署名やハッシュ値を利用して監視するシステムが開示されている。一方、下記の特許文献３には、電子署名付加ファイルに対する改竄が行われた場合にも、有効な改竄検知を行う技術が開示されており、特許文献４には、更に、改竄のないアプリを実行許可リストに自動登録する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２９３８４７号公報
【特許文献２】国際公開第ＷＯ２００８−０４７８３０号公報
【特許文献３】特許第５０５６９９５号公報
【特許文献４】特許第５１２６４４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したとおり、デジタルデータの改竄を防止するために、当該デジタルデータに対して電子署名を施すことは様々な産業分野で利用されており、前掲の特許文献１，２にも記載されているように、電子機器に配布するアプリケーションプログラムに対する改竄防止にも利用されている。たとえば、Android（登録商標）をＯＳとして採用するスマートフォンの場合、インストールするアプリケーションプログラムには、必ず電子署名を付加することが仕様によって定められており、電子署名が付加されていないアプリケーションプログラムや、付加されている電子署名との間に不整合が生じているアプリケーションプログラムは、ＯＳによって不正なプログラムと判断され、実行が許可されない。
【０００７】
しかしながら、Android（登録商標）における電子署名は、あくまでも署名対象となるアプリケーションプログラムデータの内容を署名者が保証するものであり、署名者の身元まで保証するものではない。このため、クラッカーは、アプリケーションプログラムの内容を改竄した後、改竄後のアプリケーションプログラムを署名対象データとして自分自身を署名者とする電子署名を新たに行い、この新たな電子署名を付加して改竄後のアプリケーションプログラムを再配布することが可能である。このように、電子署名に対する改竄が行われた場合、上述したAndroid（登録商標）をＯＳとして利用している端末装置などでは、有効な改竄検知を行うことができない。
【０００８】
そこで、前掲の特許文献３，４には、電子署名に対する改竄をも有効に検知する改竄チェックルーチンをアプリケーションプログラム自身に組み込む技術が開示されている。しかしながら、そのような改竄検知ルーチンが存在しても、当然ながら、当該ルーチン自身が実際に実行されないと、その役割を果たすことはできない。このため、改竄されたアプリケーションプログラムによって、正規のアプリケーションプログラムが置き換えられ、改竄されたアプリケーションプログラムが実行された場合は、改竄検知を行うことができない。
【０００９】
特に、Android（登録商標）ＯＳについては、ＯＳの脆弱性を突いて、いわゆるインジェクションと呼ばれている改竄手法が可能になることが判明し、このような改竄手法による実害も発生している。このインジェクションと呼ばれている改竄手法は、Android（登録商標）ＯＳ用のアプリケーションプログラムが、パッケージ化された状態で配布される点を利用して、正規のアプリケーションパッケージの中に、正規のプログラム等をそのまま残し状態で、改竄されたプログラムを埋め込む手法を採用するものである。当該手法により改竄プログラムが埋め込まれたアプリケーションパッケージは、Android（登録商標）ＯＳの脆弱性により、電子署名は正当なものと判断され、しかもプログラムを起動する指示を与えると、新たに埋め込まれた改竄プログラムの方が実行されてしまうという問題を抱えている。
【００１０】
現在は、この脆弱性に対するパッチ処理が完了しているが、パッチ処理が実施されていない端末装置では、依然として、このインジェクションと呼ばれている改竄手法の脅威にさらされていることになる。
【００１１】
一方、Android（登録商標）ＯＳ用のアプリケーションプログラムをはじめとして、最近のアプリケーションプログラムには、オンラインでバージョンアップを行う機能が備わっている。通常、新バージョンのプログラムが利用可能な状態になると、オンラインでユーザへの通知が行われ、ユーザが許可すれば、オンラインでバージョンアップが実行され、インストールされていたプログラムは最新版に置き換わる。ユーザにとっては非常に便利な機能であるが、新バージョンの通知が偽メールや偽サイトから行われたものであると、新バージョンのプログラムではなく、改竄されたプログラムへのすり替えが行われてしまう。
【００１２】
特に、この改竄されたプログラムが、上述したようなインジェクションによる改竄プログラムであったとすると、上記パッチ処理が完了していない端末装置では、改竄を有効に検知することができなくなる。もちろん、このような問題は、Android（登録商標）ＯＳのみにおいて生じる問題ではなく、脆弱性をもった他のＯＳについても生じうる問題である。
【００１３】
そこで本発明は、インストールされている正規のプログラムが、改竄プログラムにすり替えられた場合に、すり替えの事実をユーザに認識させることが可能なアプリケーションプログラムおよびその実行方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
(1)   本発明の第１の態様は、
コンピュータに、所定の主処理を実行させる主処理ルーチンと、
コンピュータに、起動処理を実行させる起動処理ルーチンと、
コンピュータに、ユーザの指示に基づいて固有情報を入力し、入力した固有情報を所定の格納場所に格納する登録処理を実行させる登録処理ルーチンと、
コンピュータに、上記格納場所から固有情報を取り出し、取り出した固有情報もしくはこれに基づいて生成した派生情報をユーザに提示する提示処理を実行させる提示処理ルーチンと、
をアプリケーションプログラムに組み込み、
起動処理によって、特定のコンピュータにおいてアプリケーションプログラムが起動されたときに、当該特定のコンピュータについて過去に登録処理が実行されていた場合には、当該特定のコンピュータに、提示処理と主処理とを実行させるようにしたものである。
【００１５】
(2)   本発明の第２の態様は、上述した第１の態様に係るアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、文字列、記号、画像、動画、音声もしくは振動を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
提示処理が、固有情報もしくは派生情報として、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせをユーザに提示する処理を含むようにしたものである。
【００１６】
(3)   本発明の第３の態様は、上述した第１または第２の態様に係るアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、所定の提示方法を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
提示処理が、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを上記提示方法に基づいてユーザに提示する処理を含むようにしたものである。
【００１７】
(4)   本発明の第４の態様は、上述した第１〜第３の態様に係るアプリケーションプログラムにおいて、
登録処理が、固有情報の入力を行う際に、当該固有情報が当該アプリケーションプログラムの正当性を確認するための提示処理に利用される情報である旨の説明メッセージを提示する処理を含むようにしたものである。
【００１８】
(5)   本発明の第５の態様は、上述した第１〜第４の態様に係るアプリケーションプログラムにおいて、
起動処理として、特定のコンピュータにおいてアプリケーションプログラムが起動されたときに、当該特定のコンピュータについて過去に登録処理が実行されていた場合には、当該特定のコンピュータに、提示処理の実行後に主処理を実行させる処理が行われるようにしたものである。
【００１９】
(6)   本発明の第６の態様は、上述した第５の態様に係るアプリケーションプログラムにおいて、
提示処理の実行後に所定の提示時間が経過した後、自動的に主処理が実行されるようにしたものである。
【００２０】
(7)   本発明の第７の態様は、上述した第５または第６の態様に係るアプリケーションプログラムにおいて、
提示処理の実行後に、ユーザによる所定の操作があったときに、主処理が実行されるようにしたものである。
【００２１】
(8)   本発明の第８の態様は、
コンピュータに、所定の主処理を実行させる主処理ルーチンと、
コンピュータに、起動処理を実行させる起動処理ルーチンと、
コンピュータに、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、入力した固有情報を所定の格納場所に格納する登録処理を実行させる登録処理ルーチンと、
コンピュータに、上記格納場所から固有情報を取り出し、取り出した固有情報と当該コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理を実行させる確認処理ルーチンと、
をアプリケーションプログラムに組み込み、
起動処理によって、特定のコンピュータにおいてアプリケーションプログラムが起動されたときに、当該特定のコンピュータについて過去に登録処理が実行されていた場合には、当該特定のコンピュータに、確認処理で合致が確認された場合にのみ主処理を実行させるようにしたものである。
【００２２】
(9)   本発明の第９の態様は、上述した第８の態様に係るアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、特定の方角を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
確認処理が、固有情報に含まれている特定の方角と、コンピュータに備わっている方位センサが検出した当該コンピュータの地理的な向きと、が合致するか否かを確認する処理を含むようにしたものである。
【００２３】
(10)  本発明の第１０の態様は、上述した第８の態様に係るアプリケーションプログラムにおいて、
登録処理が、ユーザの指示に基づいて、特定の角度を含む固有情報を入力し、これを所定の格納場所に格納する処理を含み、
確認処理が、固有情報に含まれている特定の角度と、コンピュータに備わっている加速度センサが検出した当該コンピュータの姿勢を示す角度と、が合致するか否かを確認する処理を含むようにしたものである。
【００２４】
(11)  本発明の第１１の態様は、上述した第８〜第１０の態様に係るアプリケーションプログラムにおいて、
登録処理が、固有情報の入力を行う際に、当該固有情報が当該アプリケーションプログラムの正当性を確認するための確認処理に利用される情報である旨の説明メッセージを提示する処理を含むようにしたものである。
【００２５】
(12)  本発明の第１２の態様は、上述した第１〜第１１の態様に係るアプリケーションプログラムにおいて、
登録処理が、ユーザの登録指示に基づいて実行されるようにしたものである。
【００２６】
(13)  本発明の第１３の態様は、上述した第１〜第１１の態様に係るアプリケーションプログラムにおいて、
起動処理が、特定のコンピュータにおいて当該アプリケーションプログラムが起動されたときに、当該特定のコンピュータについて過去に登録処理が実行されていなかった場合には、当該特定のコンピュータに、登録処理の実行後に主処理を実行させる処理を含むようにしたものである。
【００２７】
(14)  本発明の第１４の態様は、上述した第１〜第１３の態様に係るアプリケーションプログラムにおいて、
起動処理が、登録処理によって格納が行われるべき所定の格納場所に、固有情報が格納されているか否かに基づいて、過去に登録処理が実行されたか否かを判定する処理を含むようにしたものである。
【００２８】
(15)  本発明の第１５の態様は、上述した第１〜第１３の態様に係るアプリケーションプログラムにおいて、
登録処理が、特定のコンピュータについて固有情報を所定の格納場所に格納したことを登録履歴として記録する処理を含み、
起動処理が、登録履歴の有無に基づいて、当該特定のコンピュータについて過去に登録処理が実行されたか否かを判定する処理を含むようにしたものである。
【００２９】
(16)  本発明の第１６の態様は、上述した第１５の態様に係るアプリケーションプログラムにおいて、
登録履歴の記録場所として、登録処理を実行する特定のコンピュータ内の不揮発性メモリ領域を設定したものである。
【００３０】
(17)  本発明の第１７の態様は、上述した第１４〜第１６の態様に係るアプリケーションプログラムにおいて、
起動処理が、当該アプリケーションプログラムと同一のグループに所属する別のプログラムによって固有情報が所定の場所に格納されているか否かに基づいて、もしくは、当該別のプログラムによって記録された登録履歴に基づいて、過去に登録処理が実行されたか否かを判定する処理を含むようにしたものである。
【００３１】
(18)  本発明の第１８の態様は、上述した第１７の態様に係るアプリケーションプログラムにおいて、
起動処理が、当該アプリケーションプログラムに対して旧バージョンの関係にあるアプリケーションプログラムによって固有情報が所定の場所に格納されているか否かに基づいて、もしくは、当該旧バージョンの関係にあるアプリケーションプログラムによって記録された登録履歴に基づいて、過去に登録処理が実行されたか否かを判定する処理を含むようにしたものである。
【００３２】
(19)  本発明の第１９の態様は、上述した第１〜第１８の態様に係るアプリケーションプログラムにおいて、
登録処理が、当該登録処理を実行中の特定のコンピュータ内の記憶装置もしくは当該特定のコンピュータに接続された外部の記憶装置を格納場所として固有情報を格納する処理を含み、
提示処理もしくは確認処理が、いずれかの記憶装置に格納されている固有情報を取り出す処理を含むようにしたものである。
【００３３】
(20)  本発明の第２０の態様は、上述した第１〜第１８の態様に係るアプリケーションプログラムにおいて、
登録処理が、当該登録処理を実行中の特定のコンピュータに対してネットワークを介して接続されたサーバ装置を格納場所として固有情報を格納する処理を含み、
提示処理もしくは確認処理が、上記サーバ装置に格納されている固有情報をネットワークを介して取り出す処理を含むようにしたものである。
【００３４】
(21)  本発明の第２１の態様は、上述した第２０の態様に係るアプリケーションプログラムにおいて、
登録処理が、当該登録処理を実行中の特定のコンピュータもしくは当該特定のコンピュータを利用している特定のユーザを識別するための識別情報に対応づけて、登録処理の対象となる固有情報をサーバ装置に格納する処理を含み、
提示処理もしくは確認処理が、この識別情報を利用して、この識別情報に対応づけて格納されている固有情報を取り出す処理を含むようにしたものである。
【００３５】
(22)  本発明の第２２の態様は、上述した第１〜第２１の態様に係るアプリケーションプログラムにおいて、
当該アプリケーションプログラムを構成するファイル全体のデータサイズを確認し、確認したデータサイズが予め設定されている設定サイズと一致するか否かを提示するサイズ確認処理を実行させるサイズ確認処理ルーチンを更に組み込むようにしたものである。
【００３６】
(23)  本発明の第２３の態様は、上述した第１〜第２２の態様に係るアプリケーションプログラムにおいて、
主処理ルーチン、起動処理ルーチン、登録処理ルーチン、提示処理ルーチン、確認処理ルーチン、サイズ確認処理ルーチンのうち、当該アプリケーションプログラムに組み込まれているルーチンが、Android（登録商標）ＯＳプログラムの下で動作するプログラムにより構成されているようにしたものである。
【００３７】
(24)  本発明の第２４の態様は、上述した第１〜第２３の態様に係るアプリケーションプログラムをコンピュータ読み取り可能な記録媒体に記録して配布し、あるいは、当該アプリケーションプログラムをコンピュータにインストールした状態で配布するようにしたものである。
【００３８】
(25)  本発明の第２５の態様は、アプリケーションプログラムの実行方法において、
コンピュータが、特定のアプリケーションプログラムに対する起動指示を受けたときに、過去に特定のアプリケーションプログラムに関する登録処理段階が実行されているか否かを判定する登録有無判定段階と、
登録有無判定段階において否定的判定がなされたときに、コンピュータが、ユーザの指示に基づいて固有情報を入力し、上記特定のアプリケーションプログラムに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
登録有無判定段階において肯定的判定がなされたときに、コンピュータが、上記格納場所に上記特定のアプリケーションプログラムに対応づけて格納されている固有情報を取り出し、取り出した固有情報もしくはこれに基づいて生成した派生情報をユーザに提示する提示処理段階と、
コンピュータが、登録処理段階もしくは提示処理段階を実行した後に、上記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を行うようにしたものである。
【００３９】
(26)  本発明の第２６の態様は、アプリケーションプログラムの実行方法において、
登録用コンピュータが、ユーザの指示に基づいて固有情報を入力し、特定の実行用コンピュータと特定のアプリケーションプログラムとの組み合わせに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
上記特定の実行用コンピュータが、上記特定のアプリケーションプログラムに対する起動指示を受けたときに、上記格納場所に上記特定の実行用コンピュータと上記特定のアプリケーションプログラムとの組み合わせに対応づけて格納されている固有情報を取り出し、取り出した固有情報もしくはこれに基づいて生成した派生情報をユーザに提示する提示処理段階と、
上記特定の実行用コンピュータが、提示処理段階を実行した後に、上記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を行うようにしたものである。
【００４０】
(27)  本発明の第２７の態様は、上述した第２５または第２６の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、文字列、記号、画像、動画、音声もしくは振動を含む固有情報を所定の格納場所に格納し、
提示処理段階で、固有情報もしくは派生情報として、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを提示するようにしたものである。
【００４１】
(28)  本発明の第２８の態様は、上述した第２５〜第２７の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて固有情報の入力を行う際に、当該固有情報が当該アプリケーションプログラムの正当性を確認するために提示処理段階で利用される情報である旨の説明メッセージを提示するようにしたものである。
【００４２】
(29)  本発明の第２９の態様は、上述した第２５の態様に係るアプリケーションプログラムの実行方法において、
アプリケーションプログラムによる登録処理段階および提示処理段階の処理動作を監視する監視プログラムを用意し、
コンピュータが、監視プログラムを実行することにより、登録処理段階で所定の格納場所に格納された固有情報を、別な格納場所にもコピーして格納する照合準備段階と、
コンピュータが、監視プログラムを実行することにより、提示処理段階で提示された固有情報もしくは派生情報と、上記別な格納場所に格納されている固有情報もしくはこれに基づいて生成した派生情報とが合致するか否かを照合し、照合結果をユーザに報知する照合処理段階と、
を更に行うようにしたものである。
【００４３】
(30)  本発明の第３０の態様は、アプリケーションプログラムの実行方法において、
コンピュータが、特定のアプリケーションプログラムに対する起動指示を受けたときに、過去に当該特定のアプリケーションプログラムに関する登録処理段階が実行されているか否かを判定する登録有無判定段階と、
登録有無判定段階において否定的判定がなされたときに、コンピュータが、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、当該特定のアプリケーションプログラムに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
登録有無判定段階において肯定的判定がなされたときに、コンピュータが、上記格納場所に当該特定のアプリケーションプログラムに対応づけて格納されている固有情報を取り出し、取り出した固有情報とコンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理段階と、
コンピュータが、登録処理段階を実行した後に、もしくは、確認処理段階を実行して合致が確認されたときに、特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を行うようにしたものである。
【００４４】
(31)  本発明の第３１の態様は、アプリケーションプログラムの実行方法において、
登録用コンピュータが、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、特定の実行用コンピュータと特定のアプリケーションプログラムとの組み合わせに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、
上記特定の実行用コンピュータが、上記特定のアプリケーションプログラムに対する起動指示を受けたときに、上記格納場所に上記特定の実行用コンピュータと上記特定のアプリケーションプログラムとの組み合わせに対応づけて格納されている固有情報を取り出し、取り出した固有情報と上記特定の実行用コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理段階と、
上記特定の実行用コンピュータが、確認処理段階を実行して合致が確認されたときに、上記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、
を行うようにしたものである。
【００４５】
(32)  本発明の第３２の態様は、上述した第３０または第３１の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて、特定の方角を含む固有情報を入力し、これを所定の格納場所に格納し、
確認処理段階で、上記固有情報に含まれている特定の方角と、コンピュータに備わっている方位センサが検出した当該コンピュータの地理的な向きと、が合致するか否かを確認し、確認結果をユーザに報知するようにしたものである。
【００４６】
(33)  本発明の第３３の態様は、上述した第３０または第３１の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて、特定の角度を含む固有情報を入力し、これを所定の格納場所に格納し、
確認処理段階で、上記固有情報に含まれている特定の角度と、コンピュータに備わっている加速度センサが検出した当該コンピュータの姿勢を示す角度と、が合致するか否かを確認し、確認結果をユーザに報知するようにしたものである。
【００４７】
(34)  本発明の第３４の態様は、上述した第３０〜第３３の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、ユーザの指示に基づいて固有情報の入力を行う際に、当該固有情報が当該アプリケーションプログラムの正当性を確認するために確認処理段階で利用される情報である旨の説明メッセージを提示するようにしたものである。
【００４８】
(35)  本発明の第３５の態様は、上述した第２５〜第３４の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、同一のグループに所属する複数のアプリケーションプログラムについては、これら複数のアプリケーションプログラムに共通の固有情報を対応づけて格納する処理を行うようにしたものである。
【００４９】
(36)  本発明の第３６の態様は、上述した第２５〜第３５の態様に係るアプリケーションプログラムの実行方法において、
コンピュータにアプリケーションプログラムがインストールされたときに、当該アプリケーションプログラムに対応づけた固有情報を所定の格納場所に格納する登録処理段階が実行されるようにしたものである。
【００５０】
(37)  本発明の第３７の態様は、上述した第２５〜第３６の態様に係るアプリケーションプログラムの実行方法において、
登録処理段階で、当該登録処理段階を実行中のコンピュータに対してネットワークを介して接続されたサーバ装置を格納場所として固有情報を格納し、
提示処理段階もしくは確認処理段階で、上記サーバ装置に格納されている固有情報をネットワークを介して取り出すようにしたものである。
【００５１】
(38)  本発明の第３８の態様は、上述した第３７の態様に係るアプリケーションプログラムの実行方法において、
Ｗｅｂブラウザプログラムもしくは電子メールプログラムを利用して、登録処理段階が実行されるようにしたものである。
【発明の効果】
【００５２】
本発明の基本的な実施形態に係るアプリケーションプログラムおよびその実行方法によれば、アプリケーションプログラム内の登録処理ルーチンを用いて、ユーザは、任意の固有情報を所定の格納場所に格納する登録処理を行うことができる。この登録処理を行った後に当該アプリケーションプログラムを起動すると、提示処理ルーチンによって、登録しておいた固有情報がユーザに対して提示されるとともに、当該アプリケーションプログラムの本来の処理である主処理が実行されることになる。したがって、ユーザは、主処理の実行の際に提示される固有情報が正しいことを確認することにより、当該アプリケーションプログラムの正当性を認識することができる。
【００５３】
クラッカーの不法行為により、アプリケーションプログラムのすり替えが行われ、正規のプログラムの代わりに改竄プログラムが起動された場合、提示処理ルーチンによる正しい固有情報の提示が行われないため、ユーザは、当該アプリケーションプログラムの正当性を疑うことができ、改竄プログラムによる被害を抑えることができる。
【００５４】
一方、提示処理ルーチンの代わりに、確認処理ルーチンを実行する実施形態の場合、登録処理を行った後にアプリケーションプログラムを起動すると、登録しておいた固有情報がコンピュータの使用環境と合致するか否かを確認する処理が行われ、その結果がユーザに報知されるので、やはりユーザは、当該アプリケーションプログラムの正当性を認識することができる。しかも主処理は、合致の確認がされた場合にのみ実行されるので、改竄プログラムによる被害を抑えることができる。
【００５５】
このように、本発明に係るアプリケーションプログラムおよびその実行方法によれば、インストールされている正規のプログラムが、改竄プログラムにすり替えられた場合に、すり替えの事実をユーザに認識させることが可能になり、改竄プログラムによる被害を抑えることができる。
【図面の簡単な説明】
【００５６】
【図１】コンピュータ内でのアプリケーションプログラムのすり替え事例を示すブロック図である。
【図２】パッケージ化されたAndroid（登録商標）ＯＳ用のアプリケーションプログラムの構成例を示すブロック図である。
【図３】図２に示すパッケージに対して、改竄プログラムがインジェクションにより埋め込まれた状態を示すブロック図である。
【図４】本発明の基本的な実施形態に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。
【図５】図４に示すアプリケーションプログラムの実行手順を示す流れ図である。
【図６】図４に示すアプリケーションプログラムの登録処理ルーチン３３０によって実行される登録処理における画面表示例を示す図である。
【図７】図６に示す登録処理に応じて、提示処理ルーチン３４０によって実行される提示処理における画面表示例を示す図である。
【図８】図４に示すアプリケーションプログラムの登録処理ルーチン３３０によって実行される登録処理における別な画面表示例を示す図である。
【図９】図８に示す登録処理に応じて、提示処理ルーチン３４０によって実行される提示処理における画面表示例を示す図である。
【図１０】図４に示すアプリケーションプログラムの提示処理ルーチン３４０によって実行される提示処理における更に別な画面表示例を示す図である。
【図１１】本発明の格納場所に関する変形例に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。
【図１２】本発明の格納場所に関する別な変形例に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。
【図１３】本発明の確認処理を行う変形例に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。
【図１４】図１３に示すアプリケーションプログラムの実行手順を示す流れ図である。
【図１５】図１３に示すアプリケーションプログラムの登録処理ルーチン３３５によって実行される登録処理における画面表示例を示す図である。
【図１６】図１５に示す登録処理に応じて、確認処理ルーチン３４５によって実行される確認処理における画面表示例を示す図である。
【図１７】図１３に示すアプリケーションプログラムの登録処理ルーチン３３５によって実行される登録処理の別な形態を示す図である。
【図１８】本発明のサイズ確認処理を行う変形例に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。
【図１９】本発明の監視プログラムを用いる変形例に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。
【図２０】本発明に係るアプリケーションプログラムの実行方法の基本的な実施形態を示す流れ図である。
【図２１】本発明に係るアプリケーションプログラムの実行方法の変形例を示す流れ図である。
【発明を実施するための形態】
【００５７】
以下、本発明を図示する実施形態に基づいて説明する。
【００５８】
＜＜＜  §１．  改竄プログラムへのすり替え  ＞＞＞
はじめに、本発明による課題解決の対象となる改竄プログラムへのすり替え事例の実体を簡単に説明しておく。図１は、このようなすり替え事例の典型例を示すブロック図である。
【００５９】
いま、図１(a) に示すように、コンピュータ１００内に３つのアプリケーションプログラムＡ，Ｂ，Ｃ（以下、アプリＡ，Ｂ，Ｃという）がインストールされているものとしよう。コンピュータ１００は、パソコンをはじめ、スマートフォン、電子タブレットなど、アプリケーションプログラムを実行可能な電子機器であれば、どのようなものでもかまわない。一般的なユーザの場合、より多数のアプリをインストールして利用しているのが実情であるが、図では、説明の便宜上、３種類のアプリＡ，Ｂ，Ｃのみがインストールされた単純な例を示す。
【００６０】
また、ここでは、アプリＡは「Ａｄｄｒｅｓｓ」なるプログラム名が付された住所録管理用のプログラムであり、アプリＢは「Ｂａｎｋ」なるプログラム名が付されたオンラインバンキング用のプログラムであり、アプリＣは「Ｃｈｅｓｓ」なるプログラム名が付されたチェスゲーム用のプログラムであるものとしよう。これらのアプリＡ，Ｂ，Ｃは、ＯＳプログラム２００の管理下で実行される。なお、実際には、コンピュータ１００には、ＣＰＵ，メモリ，ディスプレイ，入力装置などのハードウエアが備わっているが、ここでは、便宜上、インストールされた基本的なプログラムの構成のみを図示することにする。
【００６１】
通常、プログラムにはバージョン番号が付され、バージョンアップされるたびに、新たなバージョン番号が付された新プログラムによって置き換えられてゆく。図１(a) に示す例の場合、アプリＡは、バージョン番号「Ver. 3」が付されたプログラムＡ３によって構成されており、アプリＢは、バージョン番号「Ver. 5」が付されたプログラムＢ５によって構成されており、アプリＣは、バージョン番号「Ver. 1」が付されたプログラムＣ１によって構成されている。
【００６２】
さて、ここでは、「Ｃｈｅｓｓ」なるアプリＣが「Ver. 1」から「Ver. 2」にバージョンアップされ、アプリＣ′に置き換えられた場合を考えてみよう。図１(b) は、このようなバージョンアップが完了したときの状態を示している。バージョンアップ後も、同じ「Ｃｈｅｓｓ」なるプログラム名が付されているが、アプリＣ′は、バージョン番号「Ver. 2」が付されたプログラムＣ２であり、「Ver. 1」が付されたプログラムＣ１とは異なるプログラムである。
【００６３】
既に述べたように、Android（登録商標）ＯＳ用のアプリケーションプログラムをはじめとして、最近のアプリケーションプログラムには、オンラインでバージョンアップを行う機能が備わっている。したがって、図１(a) から(b) に示すようなバージョンアップ処理も、通常、オンラインによる処理として行われる。このようなオンラインによるバージョンアップ処理は、ユーザにとっては非常に便利な機能であるが、バージョンアップを行うサイトが正規のサイトではなく偽サイトであった場合、正規のバージョンアップ版のプログラムではなく、改竄された偽プログラム（マルウェア）がダウンロードされる結果となる。
【００６４】
図１(c) は、図１(a) に示す状態において、偽サイトをアクセスしてバージョンアップを行ってしまったため、マルウェアであるプログラムＸがダウンロードされた状態を示す。図示のとおり、「Ｃｈｅｓｓ」なるアプリＣは、プログラムＸ（マルウェア）なるアプリＣ''に置き換えられてしまっている。アプリＣ''も同じ「Ｃｈｅｓｓ」なるプログラム名を有しているため、ほとんどのユーザは、実際にはマルウェアに置換されてしまったことに気付くことはない。すなわち、ユーザ自身は、「Ｃｈｅｓｓ」なるアプリＣを「Ver. 1」から「Ver. 2」にバージョンアップしたつもりであり、正常にバージョンアップ処理が完了したものと考えている。
【００６５】
実際、偽の電子メールなどによってユーザを偽サイトに導き（いわゆる「Phishing」と呼ばれている手法）、新バージョンのアプリがリリースされているとの説明のもとにバージョンアップ操作を促し、マルウェアをインストールさせる詐欺行為が問題となってきている。また、ウイルスに感染したコンピュータの場合、このウイルスの働きによって、偽のプログラムＸをインストールされてしまうケースもある。この偽のプログラムＸが、正規のプログラムに類似した画面表示を行うように作られていると、ユーザは、マルウェアであることに気付かず、プログラムＸを長期間にわたって利用し続けるケースすらありうる。
【００６６】
ここで、プログラムＸ内に、たとえば、ユーザの個人情報などを盗み出してクラッカーに送信するルーチンが含まれていると、重要な情報がすべてクラッカーの手にわたってしまうことになる。特に、オンラインバンキング用のアプリＢなどがマルウェアに置き換わってしまうと、ユーザが入力した銀行口座のアカウントやパスワードが、そのままクラッカーの手にわたってしまうため、重大な経済的被害が生じることになる。
【００６７】
このような改竄プログラムの流布を抑止するため、たとえば、Android（登録商標）ＯＳ用のアプリケーションプログラムには、電子署名を付与することが仕様で定められている。Android（登録商標）ＯＳ用のアプリケーションプログラムは、実際には複数のファイルの集合体から構成されており、ＺＩＰ形式での圧縮を含むパッケージ化処理を行い、署名情報を付加した上で、ＡＰＫファイルと呼ばれる形式の１ファイルとして配布することになっている。図２は、このようなパッケージ化されたＡＰＫファイルの実体構成を示すブロック図である。
【００６８】
図示の例は、「Ｃｈｅｓｓ」なるアプリＣの構成例を示すものであり、パッケージ化されたＡＰＫファイルに対して、「Chess.apk」なるファイル名が付されている（拡張子.apkは、Android（登録商標）ＯＳの仕様で定められたＡＰＫファイルであることを示す）。この例の場合、アプリＣは、「classes.dex」なるファイル名が付されたプログラム本体部１０（Java（登録商標）プログラム）と、「resources.arsc」なるファイル名が付されたリソースデータ２０（画像・文字列のデータ）と、「AndroidManifest.xml」なるファイル名が付された補助ファイル３０（マニフェストと呼ばれるxml形式のデータ）と、署名情報４０と、によって構成されている（この他、必要に応じて、Shared Objectと呼ばれるサブルーチン群などのファイルが追加される）。
【００６９】
ここで、署名情報４０は、プログラム本体部１０，リソースデータ２０，補助ファイル３０の部分を圧縮してパッケージ化し、当該パッケージについてのハッシュ値を求め、このハッシュ値をプログラム提供者の鍵を用いて暗号化した情報として作成される。プログラム本体部１０，リソースデータ２０，補助ファイル３０に対して何らかの改竄が行われると、署名情報４０との整合性が失われることになるので、この整合性を確認するチェック処理を行うことにより、改竄の有無を検知することができる。
【００７０】
Android（登録商標）ＯＳでは、電子署名が付加されていないアプリケーションプログラムや、付加されている電子署名に不整合が生じているアプリケーションプログラムは、不正なプログラムとして実行が許可されない仕様になっている。しかしながら、前述したとおり、最近、Android（登録商標）ＯＳの脆弱性を突いたインジェクションと呼ばれている改竄手法が問題視されている。
【００７１】
図３は、図２に示す正規のＡＰＫファイルに対して、このインジェクションの手法により改竄プログラム５０が埋め込まれた状態を示すブロック図である。図示のとおり、インジェクションの手法では、もとのＡＰＫファイル（アプリＣ）に含まれていた正規のプログラム本体部１０，リソースデータ２０，補助ファイル３０，署名情報４０はそのままの状態で残し、新たに改竄プログラム５０を埋め込むことにより、アプリＣ''を作成する、という方法がとられる。図１(c) に示すプログラムＸが、このような方法で作成されたアプリＣ''であった場合、ＯＳの脆弱性により、当該アプリＣ''が支障なく実行されてしまうことになる。
【００７２】
脆弱性をもったAndroid（登録商標）ＯＳの第１の問題点は、図３に示すアプリＣ''についての署名情報のチェック処理では、インジェクションによる改竄の事実が発見されない点である。署名情報４０に対するチェック処理は、プログラム本体部１０，リソースデータ２０，補助ファイル３０に対して、署名情報４０が整合性を有するか否かを判定する処理として行われるため、改竄プログラム５０が埋め込まれていたとしても、整合性ありとの判定が行われてしまうことになる。
【００７３】
そして、脆弱性をもったAndroid（登録商標）ＯＳの第２の問題点は、このアプリＣ''を起動した場合、正規のプログラム本体部１０ではなく、改竄プログラム５０が実行されてしまう点である。これは、プログラム本体部１０も改竄プログラム５０も、「classes.dex」という同じファイル名（仕様上、ＡＰＫファイルにおいて実行ファイルに付与すべきファイル名）が付与されており、インジェクションが行われた場合、改竄プログラム５０の方が実行されてしまう仕様になっているためである。
【００７４】
現在は、端末メーカ側では、
この脆弱性に対するパッチ処理がほぼ完了しているが、パッチ処理が実施されていない端末装置では、依然として、このインジェクションと呼ばれている改竄手法の脅威にさらされている。図１に示した例のように、ユーザが所定のサイトでバージョンアップ作業を行って、アプリＣをアプリＣ′に改訂したつもりでいても、当該サイトが偽サイトであった場合、コンピュータ１００内にインストールされるのは、アプリＣ′ではなく、図３に示すようなアプリＣ''ということになる。したがって、脆弱性に対するパッチ処理が施されていない場合、ユーザが「Ｃｈｅｓｓ」なるアプリを起動すると、改竄プログラム５０が実行されることになる。
【００７５】
通常、改竄プログラム５０は、正規のプログラム本体１０を元に作成されたプログラムになっており、表向きは、正規のプログラムが実行されているように見せながら、裏で、個人情報を盗み出すような処理を実行する仕組になっていることが多い。このように、ユーザ自身が、全く気付かずに改竄アプリを利用し続けてしまうと、被害は大きく広がることになる。
【００７６】
本発明の主目的は、上例のように、インストールされている正規のプログラムが、改竄プログラムにすり替えられた場合に、すり替えの事実をユーザに認識させることにより、被害を最小限に抑えることにある。なお、図３には、最近、重大な問題提起がなされているAndroid（登録商標）ＯＳ用アプリにおけるインジェクションによる改竄が行われた例を示したが、もちろん、本発明は、インジェクションの手法によって作成された改竄プログラムへの対処に限定されるものではなく、不正なすり替え行為が行われた場合に広く適用可能な技術を提供するものである。また、本発明は、必ずしもAndroid（登録商標）ＯＳ用アプリへの適用に限定されるものではなく、任意のＯＳ用アプリにも適用可能である。
【００７７】
＜＜＜  §２．  本発明の基本的な実施形態  ＞＞＞
図４は、本発明の基本的な実施形態に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。図には、説明の便宜上、コンピュータ１００内に、ＯＳプログラム２００とともに１組のアプリケーションプログラム３００のみが格納されている状態が示されているが、実際には、より多数のアプリケーションプログラムが格納され、ユーザの選択により適宜実行されることになる。もちろん、コンピュータ１００は、パソコン、スマートフォン、電子タブレットなど、アプリケーションプログラムを実行可能な電子機器であれば、どのようなものでもかまわない。
【００７８】
通常、コンピュータ１００には、ＣＰＵ，メモリ，ディスプレイ，入力装置などのハードウエアが備わっているが、ここでは、便宜上、ＯＳプログラム２００、アプリケーションプログラム３００、格納場所２５０のみを図示してある。ここで、格納場所２５０は、後述するように、固有情報を格納するための記憶領域であり、たとえば、コンピュータ１００に内蔵されているＳＳＤ（Solid State Drive）などの不揮発性メモリ内に確保された、アプリケーションプログラム３００用の設定データなどを格納するための領域を利用すればよい。
【００７９】
図示されているアプリケーションプログラム３００は、本発明に係るアプリケーションプログラムの一例であり、起動処理ルーチン３１０、主処理ルーチン３２０、登録処理ルーチン３３０、提示処理ルーチン３４０が組み込まれている。アプリケーションプログラム３００が、Android（登録商標）ＯＳ用のプログラムの場合、これら各ルーチンは、Android（登録商標）ＯＳプログラムの下で動作するプログラムにより構成されており、図２に示す例において、プログラム本体部１０を構成するJava（登録商標）プログラムの一部ということになる。もちろん、このアプリケーションプログラム３００は、コンピュータ読み取り可能な記録媒体に格納して配布することもできるし、オンラインで配布することもできる。
【００８０】
起動処理ルーチン３１０は、ＯＳプログラム２００からの指示を受けて、当該アプリケーションプログラム３００が起動した時点で実行される起動時の制御を行うためのプログラムである。また、主処理ルーチン３２０は、所定の主処理を実行するためのプログラムである。ここで、主処理とは、このアプリケーションプログラム３００の本来の機能を提供するための一連の処理であり、たとえば、図１に示すアプリＡの場合は住所録管理処理、アプリＢの場合はオンラインバンキング処理、アプリＣの場合はチェスゲームの進行処理、ということになる。
【００８１】
一方、登録処理ルーチン３３０は、ユーザの指示に基づいて固有情報を入力し、入力した固有情報を所定の格納場所２５０に格納する登録処理を実行するためのプログラムである。また、提示処理ルーチン３４０は、格納場所２５０から固有情報を取り出し、取り出した固有情報もしくは当該固有情報に基づいて生成した派生情報をユーザに提示する提示処理を実行するためのプログラムである。
【００８２】
図では、説明の便宜上、ユーザの指示に基づいて入力された固有情報を符号Ｐ１で示し、格納場所２５０に格納された固有情報を符号Ｐ２で示し、ユーザに提示された固有情報を符号Ｐ３で示しているが、これら各固有情報Ｐ１，Ｐ２，Ｐ３の実体は同じものである。これに対して、派生情報Ｑ３は、固有情報Ｐ３から派生的に生成された情報であり、固有情報Ｐ３自体ではないが、固有情報Ｐ３に基づいて作成された関連情報ということになる。
【００８３】
このコンピュータ１００を利用するユーザが、ＯＳプログラム２００に対して、アプリケーションプログラム３００に対する起動指示を与えると（あるいは、別なアプリケーションプログラムからの連携指示によって、アプリケーションプログラム３００に対する起動指示が与えられると）、まず、アプリケーションプログラム３００内の起動処理ルーチン３１０による起動処理が実行される。
【００８４】
この起動処理は、このコンピュータ１００においてアプリケーションプログラム３００が起動されたときに、当該コンピュータ１００について過去に登録処理が実行されているか否かを判定し、登録処理が実行されていた場合には、まず、提示処理ルーチン３４０を実行した後に、主処理ルーチン３２０が実行されるような制御を行う機能を有する。また、ここに述べる実施形態の場合、過去に登録処理が実行されていなかった場合には、まず、登録処理ルーチン３３０を実行した後に、主処理ルーチン３２０が実行されるような制御を行う機能を有する。
【００８５】
図５は、図４に示すアプリケーションプログラム３００の実行手順を示す流れ図である。ステップＳ１０において、アプリケーションプログラム３００の起動処理が開始すると、まず、起動処理ルーチン３１０が、ステップＳ１１において、このコンピュータ１００について過去に登録処理が実行されているか否かを判定する処理を行う。図４に示す例の場合、過去に登録処理が実行されていた場合には、所定の格納場所２５０（アプリケーションプログラム３００用の設定データ格納領域）に固有情報Ｐ２が格納されているので、起動処理ルーチン３１０は、この格納場所２５０における固有情報Ｐ２の有無に基づいて、ステップＳ１１の判定を行うことができる。
【００８６】
そして、ステップＳ１１において、肯定的な判定がなされた場合にはステップＳ１２へ進み、否定的な判定がなされた場合にはステップＳ１３へ進むことになる。ここでは、このアプリケーションプログラム３００が、コンピュータ１００において初めて起動された場合を想定し、過去に登録処理が実行されていなかった（格納場所２５０に、まだ固有情報Ｐ２が格納されていなかった）ものとしよう。
【００８７】
この場合、ステップＳ１１からステップＳ１３へと進み、起動処理ルーチン３１０から登録処理ルーチン３３０への移行が行われる。そして、ステップＳ１３では、登録処理ルーチン３３０による登録処理が実行される。すなわち、ユーザに対して、固有情報の入力を促すメッセージを表示し、ユーザの指示に基づいて固有情報Ｐ１を入力し、入力した固有情報Ｐ１を格納場所２５０に固有情報Ｐ２として格納する処理が実行される。
【００８８】
このような登録処理が完了すると、ステップＳ１６へと進み、登録処理ルーチン３３０から主処理ルーチン３２０への移行が行われる。主処理ルーチン３２０によって実行される主処理が、当該アプリケーションプログラム３００の本来の機能を提供するための一連の処理であることは既に述べたとおりであり、この主処理の具体的な説明は、ここでは省略する。なお、主処理が完了すると、すなわち、アプリケーションプログラム３００が終了すると、制御はＯＳプログラム２００に移行することになる。
【００８９】
こうして、アプリケーションプログラム３００の初回起動が終了すると、格納場所２５０には固有情報Ｐ２が格納されている状態になるので、以後、アプリケーションプログラム３００の２回目以降の起動が行われると、ステップＳ１１において肯定的な判定がなされ、ステップＳ１２の提示処理が実行される。すなわち、起動処理ルーチン３１０から提示処理ルーチン３４０への移行が行われ、格納場所２５０から固有情報Ｐ２を取り出し、これをそのまま固有情報Ｐ３としてユーザに提示するか、もしくは、当該固有情報Ｐ３に基づいて生成した派生情報Ｑ３をユーザに提示する提示処理が実行される。
【００９０】
このような提示処理が完了すると、ステップＳ１４，Ｓ１５を経て、提示処理ルーチン３４０から主処理ルーチン３２０への移行が行われる。ステップＳ１４，Ｓ１５は、提示処理から主処理への移行タイミングを決定するためのプロセスである。ここに示す実施例の場合、まず、ステップＳ１４において、ユーザによる所定の操作があったか否かが判定され、所定の操作があった場合には、ステップＳ１６へと進み、主処理への移行が行われる。ユーザによる所定の操作がなかった場合には、続いて、ステップＳ１５において、固有情報Ｐ３もしくは派生情報Ｑ３の提示が行われてから、所定の提示時間が経過したか否かが判定され、所定の提示時間が経過していた場合には、ステップＳ１６へと進み、主処理への移行が行われる。ステップＳ１４，Ｓ１５の双方で否定的判定が行われた場合には、再び、ステップＳ１４へ戻り、同様の処理が繰り返し実行されることになる。
【００９１】
このように、提示処理から主処理への移行は、提示処理の実行後に、ユーザによる所定の操作があったときに（たとえば、コンピュータ１００としてスマートフォンを利用している場合は、画面上でのタップ操作があったとき、あるいは、スマートフォン本体を傾けたり、揺すったりしたときに）、主処理が実行される（ステップＳ１４）ようにしてもよいし、提示処理の実行後に所定の提示時間が経過した後（たとえば、５秒間の提示時間が経過した後）、自動的に主処理が実行される（ステップＳ１５）ようにしてもよい。図５に示す例では、ステップＳ１４，Ｓ１５の双方を設けているが、もちろん、いずれか一方だけでも十分である。
【００９２】
また、図５に示す例の場合、ステップＳ１１において否定的な判定がなされた場合には、ステップＳ１３において必ず登録処理が実行されることになっているため、結局、アプリケーションプログラム３００を初めて起動した場合には、必ず登録処理が実行されることになるが、登録処理は必ずしも初回起動時に行われるようにする必要はなく、ユーザの登録指示に基づいて実行されるようにしてもよい。この場合、図５のステップＳ１３は省略し、ステップＳ１１において否定的な判定がなされた場合には、そのままステップＳ１６へ進み主処理へ移行するようにすればよい。この場合、登録処理ルーチン３３０は、主処理ルーチン３４０から必要なときに（たとえば、ユーザが登録指示コマンドを入力したとき）呼び出して実行することになる。
【００９３】
もっとも、ユーザの登録指示に基づいて登録処理が実行されるようにすると、ユーザが登録指示を与えない限り、固有情報の登録は行われず、提示処理も実行されないことになり、本発明の作用効果を奏することができない。したがって、実用上は、図５に示す例のように、初回起動時に登録処理が自動的に行われるような態様を採るのが好ましい。
【００９４】
また、実用上は、登録処理を行った後も、必要に応じて、格納場所２５０に格納されている固有情報Ｐ２を書き換える処理が可能になるようにしておくのが好ましい。この場合も、主処理ルーチン３４０から、必要なときに（たとえば、ユーザが登録指示コマンドを入力したとき）、登録処理ルーチン３３０を呼び出して実行することができるようにしておき、登録処理ルーチン３３０は、新たな固有情報Ｐ１が入力された場合には、既に格納場所２５０に格納されている旧固有情報Ｐ２を書き換える処理を行うようにすればよい。
【００９５】
本発明の特徴は、固有情報の登録処理を行った後にアプリケーションプログラム３００を起動すると、提示処理ルーチン３４０によって、登録しておいた固有情報もしくはこれから派生した派生情報がユーザに対して提示される点である。固有情報は、ユーザ自身が入力した情報であり、いわばユーザ自身しか知り得ない情報ということになる。登録処理を行った後は、アプリケーションプログラム３００の起動のたびに、この登録情報もしくは派生情報が提示されることになるので、ユーザは、毎回、登録情報もしくは派生情報が正しいものかを確認した上で、アプリケーションプログラム３００の利用を行うことができる。
【００９６】
ところで、図５に示す処理手順の場合、過去に登録処理が実行されていた場合、まず、ステップＳ１２の提示処理が実行され、続いて、ステップＳ１６へ進んで主処理へ移行することになるので、必ず提示処理の実行後に主処理が実行されることになる。しかしながら、本発明を実行するにあたって、提示処理と主処理の実行順序は、必ずしも図５に示す例に限定されるものではなく、たとえば、提示処理と主処理とを同時に並行して実行するようにしてもかまわない。最近のＯＳは、複数のプログラムを並行して動作させるマルチタスク機能を備えているのが一般的であり、提示処理と主処理とを同時に実行することも可能である。要するに、本発明に係るアプリケーションプログラムの起動処理ルーチンは、過去に登録処理が実行されていた場合に、提示処理と主処理との双方を実行させれば足り、このときの両処理の実行順序は不問である。
【００９７】
しかしながら、改竄プログラムによる不正防止という観点からは、図５に示す処理手順のように、提示処理を先に行うようにするのが好ましい。ユーザは、提示処理により、起動したアプリケーションプログラムが正規のプログラムであるのか、すり替えが行われた不正な改竄プログラムであるのかの判断を行うことになるので、万一、改竄プログラムであることが判明した場合は、当該アプリケーションプログラムを直ちに中止できるようにすべきである。このような観点からは、先に提示処理を行い、その後で主処理が実行されるようにするのが好ましい。
【００９８】
ただ、実用上は、アプリケーションプログラムを起動するたびに、毎回、提示処理の実行完了を待った後に主処理を実行する、という方式を採ると、主処理が実行されるまでの時間が遅延することは否めない。特に、固有情報として動画情報を登録した場合、動画の提示が終了した後に主処理へ移行することにすると、主処理開始までにかなり時間がかかってしまう。このようなケースでは、提示処理と主処理とが同時に並行して実行されるようにすればよい。そうすれば、提示処理により動画が提示されている間に、主処理の先頭部分（通常は、種々の準備プロセス）が並行して実行されることになり、主処理の実体的な部分が開始されるまでの時間を短縮することができる。
【００９９】
なお、主処理のはじめに、ユーザがＩＤとパスワードの入力操作を行うようなアプリケーションプログラムの場合は、ＩＤやパスワードの入力操作が行われる前に提示処理が完了するような設計をしておくのが好ましい。そうすれば、ユーザは、提示処理によって正規のプログラムであることを確認した上で、ＩＤやパスワードの入力操作を安心して行うことが可能になる。
【０１００】
図２に例示するAndroid（登録商標）ＯＳ用のアプリＣが、本発明に係るアプリケーションプログラムであった場合、すなわち、プログラム本体部１０内に、図４に示す各ルーチン３１０，３２０，３３０，３４０が組み込まれていた場合、アプリＣの初回起動時に所定の固有情報の登録が行われると、以後は、毎起動時に、登録されていた固有情報もしくはこれに基づく派生情報が提示されることになる。ユーザは、アプリＣを起動するたびに、この固有情報もしくは派生情報を確認した上で、アプリＣを利用することになる。
【０１０１】
ここで、図１(b) に示すように、正規のサイトを利用して、アプリＣをアプリＣ′にバージョンアップした場合を考えてみよう。アプリＣ（Ver. 1）の正規のプログラム提供者が、アプリＣ′（Ver. 2）についても、図４に示す各ルーチン３１０，３２０，３３０，３４０に相当するルーチンを組み込んでおくようにすれば、バージョンアップ後のアプリＣ′を起動すると、格納場所２５０に固有情報Ｐ２が格納されているので、アプリＣ′内の起動処理ルーチン３１０は、過去に登録処理が実行されていると判断することになり、提示処理ルーチン３４０が実行されることになる。このため、アプリＣ′の起動時には、やはり固有情報もしくはこれに基づく派生情報が提示されることになる。
【０１０２】
前述したように、格納場所２５０は、アプリケーションプログラム３００（この例の場合、「Ｃｈｅｓｓ」なるプログラム名が付されたゲームプログラム）用の設定データなどを格納するための領域に設けられた場所であり、アプリＣ（Ver. 1）からアプリＣ′（Ver. 2）にバージョンアップされた場合でも、通常、引き続き利用される領域になる。このため、同じプログラム名が付された「Ｃｈｅｓｓ」なるアプリであれば、アプリＣ（Ver. 1）からアプリＣ′（Ver. 2）にバージョンアップされても、旧バージョンで登録された固有情報Ｐ２は、新バージョンでも引き続き利用可能である。したがって、バージョンアップされたアプリＣ′（Ver. 2）については初回起動時であっても、「Ｃｈｅｓｓ」なるアプリとしては、過去に登録処理が実行されているため、図５のステップＳ１１では肯定的な判定がなされ、ステップＳ１２の提示処理が実行されることになる。
【０１０３】
結局、ユーザから見れば、アプリＣ（Ver. 1）からアプリＣ′（Ver. 2）にバージョンアップした後も、バージョンアップ前と同様に、アプリの毎起動時に、固有情報もしくは派生情報の確認を行うことができるようになる。今後、アプリＣ′（Ver. 2）が更にバージョンアップした場合も同様である。要するに、同一のプログラム名が付されたアプリであれば、一度登録処理を行っておけば、以後、何度バージョンアップが行われても、毎起動時に、最初に登録した固有情報もしくは派生情報が提示されるので、ユーザは、これを確認した上で、安心して当該アプリを利用することができる。
【０１０４】
一方、図１(c) に示すように、このユーザが偽サイトに導かれ、アプリＣをアプリＣ′にバージョンアップするつもりが、実際には、マルウェアであるアプリＣ''に置き換える処理を行ってしまった場合を考えてみよう。このとき、アプリＣ''が、図３に示すようなインジェクションの手法によって改竄されたプログラムであったとすると、§１で述べたように、脆弱性をもったＯＳの下では、署名情報のチェック処理では、インジェクションによる改竄の事実は発見されず、しかも、この「Ｃｈｅｓｓ」なるアプリに対して起動操作を行うと、正規のプログラム本体部１０の代わりに、偽の改竄プログラム５０の方が実行されてしまうことになる。
【０１０５】
ここで、改竄プログラム５０は、正規のプログラムではないため、通常、図４に示すような起動処理ルーチン３１０，登録処理ルーチン３３０，提示処理ルーチン３４０を有していない。したがって、改竄プログラム５０が起動されたとしても、図５に示すステップＳ１１〜Ｓ１５の処理は実行されず、主処理ルーチン３２０（この場合は、クラッカーが作成したマルウェアプログラムＸ）の実行が行われることになる。別言すれば、アプリＣ''を起動した場合、固有情報や派生情報の提示は行われないことになる。このため、ユーザは、これまで毎起動時に提示されていた固有情報や派生情報が、突然、提示されなくなったことに不審を抱くことができ、バージョンアップ後のアプリケーションプログラムの正当性を疑うことができる。こうして、ユーザは、バージョンアップ時にアプリケーションプログラムの不正な「すり替え」が行われたことを認識することができ、被害を最小限に抑えることができる。
【０１０６】
もちろん、上例の場合、ユーザが「すり替え」に気付いた時点で、既に、改竄プログラム５０は実行されてしまっているため、当該アプリをあわてて終了したとしても、個人情報の流出などを防ぐことができない場合もあろう。しかしながら、少なくとも、当該アプリがマルウェアにすり替わっていることを認識することができるので、それ以後、当該アプリを削除するなどの防御策を採ることができる。また、少なくとも、アカウントやパスワードを入力するような操作入力を行う前に、マルウェアであることを認識できるので、被害の拡大を防ぐことができる。
【０１０７】
もちろん、クラッカーの中には、正規のプログラム本体部１０を十分に解析し、その中に、起動処理ルーチン３１０，登録処理ルーチン３３０，提示処理ルーチン３４０が含まれていることを認識し、改竄プログラム５０の中に、これらと同等のルーチンを組み込むような細工を行う者も現れるかもしれない。そのような「非常に巧みな改竄」が施されたプログラムとすり替えられた場合、起動時に図５に示すステップＳ１１〜Ｓ１５の処理が実行され、ユーザには、これまでと同様に、起動時に固有情報や派生情報が提示されることになる。
【０１０８】
本発明は、上述した「非常に巧みな改竄」が施されたプログラムを用いた「すり替え」が行われた場合には、残念ながら、十分な効果を発揮することはできない。このような点において、本発明は、１００％の安全性を提供する技術ではない。しかしながら、そもそもクラッカーの攻撃に対して１００％の安全性を保証できる技術などは存在するものではない。実用上、クラッカーが、上述した「非常に巧みな改竄」が施されたプログラムを作成するには、非常に手間と時間がかかることになる。
【０１０９】
これは、起動処理ルーチン３１０，登録処理ルーチン３３０，提示処理ルーチン３４０の内容を解析するためには、高度なプログラミングの知識と時間を必要とするためである。特に、これらの各ルーチンに対して難読化処理を施しておけば、正規のプログラム本体部１０から各ルーチンを抽出し、その処理内容を解析することは、高度な知識をもったクラッカーでも容易ではない。特に、本発明で提示対象となる固有情報自体は、プログラム本体部１０に組み込まれているわけではなく、ユーザが登録処理において任意に入力できる情報になっている。
【０１１０】
したがって、改竄プログラム５０の起動時に、このユーザが任意に入力した固有情報を提示させる処理を行うためには、格納場所２５０がどの場所に設定されており、固有情報がどのような書式で格納されているのか、といった内容まで十分に解析する必要があり、高度な知識をもったクラッカーにとっても時間のかかる作業になる。このような点を考慮すると、起動処理ルーチン３１０，登録処理ルーチン３３０，提示処理ルーチン３４０までもが組み込まれた改竄プログラム５０を作成することは非常に困難であり、本発明によっても「すり替え」が検知できないような不正行為は、クラッカーにとってかなり敷居の高い仕事といえる。したがって、本発明は、１００％の安全性を提供する技術ではないものの、産業上、十分に利用価値のある技術である。
【０１１１】
＜＜＜  §３．  固有情報のバリエーション  ＞＞＞
§２では、図４のブロック図および図５の流れ図を参照しながら、本発明の基本原理を説明した。ここでは、本発明に用いられる固有情報について、具体例を挙げながら、より詳細な説明を行うことにする。
【０１１２】
固有情報は、アプリケーションプログラムの正当性確認に利用するために予め登録しておくべき情報であり、ユーザが自由意志で決定もしくは選択できる情報であれば、どのような情報であってもかまわない。前述したとおり、登録処理が完了した後は、当該アプリケーションプログラムが起動するたびに、この固有情報が主処理の実行前に提示されることになり、ユーザは、提示された内容を確認することにより、アプリケーションプログラムの正当性を認識することができる。
【０１１３】
最も典型的な固有情報は、文字列である。以下、この文字列を固有情報として利用した実施例を説明する。図６は、図４に示すアプリケーションプログラム３００の登録処理ルーチン３３０によって実行される登録処理における、コンピュータ１００上での画面表示例を示す図である。アプリケーションプログラム３００が初回起動されると、図５の流れ図のステップＳ１１において否定的な判定がなされ、ステップＳ１３における登録処理が実行される。図６は、このステップＳ１３において、コンピュータ１００のディスプレイ上に表示される画面ということになる。
【０１１４】
図６(a) に示す画面は、本発明による登録処理が実行中であることをユーザに知らせるとともに、ユーザに固有情報として文字列を入力させるための画面である。図示のとおり、この画面上には、「このアプリは初めて起動されました。次回以降の起動時に、プログラムの正当性確認に用いるため、下欄に好きな言葉を入力して下さい。」なるメッセージが表示されている。このメッセージは、固有情報の入力を行う際に、当該固有情報がアプリケーションプログラム３００の正当性を確認するための提示処理に利用される情報である旨を示すメッセージ（以下、説明メッセージという）である。
【０１１５】
図示のとおり、この画面の下欄には、文字列入力欄１０１が設けられており、ユーザは、コンピュータ１００の入力機能を利用して、ここに任意の文字列を固有情報Ｐ１として入力する作業を行う。図６(b) は、この文字列入力欄１０１に、「PATENT2013」なる文字列を入力した例が示されている。当該文字列は、ユーザが任意に設定した文字列であり、ユーザ自身しか知り得ない情報ということになる。当然ながら、改竄プログラム５０を作成したクラッカーは知る由もない。
【０１１６】
ユーザが文字列の入力を完了すると、画面は図６(c) のように変わり、登録処理が完了した旨が通知される。図示の例の場合「登録処理が完了しました。次回以降の起動時には毎回下記の言葉が表示されます。（表示されないと、正当性に問題あり）」なるメッセージが表示されており、その下の文字列入力欄１０１に、ユーザが入力した「PATENT2013」なる文字列からなる固有情報Ｐ１が表示されている。このメッセージも、入力した固有情報Ｐ１がアプリケーションプログラム３００の正当性を確認するための提示処理に利用される情報である旨を示す説明メッセージであり、ユーザは、次回以降の起動時に毎回「PATENT2013」なる文字列が表示されないと、正当性に問題が生じていることを認識できる。
【０１１７】
こうして入力された固有情報Ｐ１、すなわち、「PATENT2013」なる文字列は、登録処理ルーチン３３０によって所定の格納場所２５０内に固有情報Ｐ２として格納される。
【０１１８】
このような登録処理が完了した後に、アプリケーションプログラム３００が再度起動されると、図５の流れ図のステップＳ１１において肯定的な判定がなされ、ステップＳ１２における提示処理が実行される。図７は、このステップＳ１１において、コンピュータ１００のディスプレイ上に表示される画面の一例である。当該画面は、アプリケーションプログラム３００が起動中であることをユーザに知らせるとともに、固有情報Ｐ２として登録されている文字列を表示するための画面である。
【０１１９】
図７に示すとおり、この画面上には、「プログラムの正当性チェックのため下記の言葉が正しいことを確認して下さい。」なるメッセージが表示され、更に、文字列表示欄１０２には、提示処理ルーチン３４０によって格納場所２５０から取り出された「PATENT2013」なる文字列（固有情報Ｐ２）が、固有情報Ｐ３として表示されている。ユーザは、この表示を見て、文字列表示欄１０２に表示されている「PATENT2013」なる文字列（固有情報Ｐ３）が、登録処理時に入力した固有情報Ｐ１に合致することを確認することにより、正当性に問題が生じていないことを認識することができる。
【０１２０】
この図７に示す表示内容を確認したユーザが、確認ボタン１０３を押すと、アプリケーションプログラム３００内の主処理ルーチン３２０が実行される。すなわち、図示の確認ボタン１０３を押す操作は、図５の流れ図のステップＳ１４に記載された「所定の操作あり？」の判定対象となる操作に相当し、確認ボタン１０３を押す操作を行うと、ステップＳ１４からステップＳ１６へ進む処理が行われる。なお、図５の流れ図に示す手順を採用した場合は、ステップＳ１５で「所定の提示時間経過した？」との判定も併せて行われるので、図７に示す表示が行われた後、確認ボタン１０３を操作しなくても、所定の提示時間が経過すると、自動的にステップＳ１６へ進む処理が行われ、主処理ルーチン３２０が実行されることになる。
【０１２１】
もちろん、アプリケーションプログラムの起動時に、登録処理時と異なる文字列が表示されたり、図７に示すような確認画面自体が表示されなかったりした場合には、正当性に何らかの問題が生じているものと判断できるので、ユーザは、起動中のアプリケーションプログラムを直ちに終了し、コンピュータ１００から削除するなどの防御措置をとることができる。
【０１２２】
以上、固有情報として文字列を利用する典型例を説明したが、固有情報としては、文字列の他、記号、画像、動画、音声もしくは振動、または、これらの組み合わせを利用することも可能である。たとえば、登録処理時に、文字列の入力を行わせる代わりに、ユーザが撮影した写真や動画情報、あるいはユーザが録音した音声情報を入力させる処理（たとえば、その場で撮影や録音をさせる処理や、既存の画像ファイル、動画ファイル、音声ファイルなどを指定させる処理）を行えば、画像、動画、音声を固有情報として登録することが可能である。この場合、次回起動時には、登録した画像、動画、音声が提示されることになる。
【０１２３】
また、加速度センサなどの振動を検知する装置と、振動アクチュエータなどの振動を発生させる装置（たとえば、携帯電話でのマナーモードにおける着信振動を生じさせる装置など）とを内蔵したコンピュータを利用している場合は、ユーザに本体を揺らす動作を行わせることにより、振動の情報（たとえば、振動方向や振幅を示す情報）を固有情報として登録することも可能である。この場合、次回起動時には、登録した振動を再現することにより、ユーザに対する固有情報の提示が行われる。
【０１２４】
もちろん、文字列と振動との双方を固有情報として登録しておき、次回起動時には、その双方を提示する、というように、いくつかの要素を組み合わせた固有情報を利用することも可能である。
【０１２５】
なお、固有情報は、必ずしもユーザ自身によって生成された情報である必要はなく、登録処理ルーチン３３０が用意したいくつかの情報の中から、ユーザに所望の情報を選択させ、選択された情報を固有情報として登録するような運用も可能である。たとえば、予め１６種類の画像を用意しておき、これらをディスプレイ画面上に表示し、ユーザに好みの１画像を選択させ、選択された画像を固有情報として登録するようにすれば、ユーザ自身に画像を用意させることなしに、画像を固有情報として用いることが可能になる。
【０１２６】
また、提示処理ルーチン３４０によって提示する情報は、必ずしも固有情報Ｐ３である必要はなく、格納場所２５０から取り出した固有情報Ｐ２（すなわち、固有情報Ｐ３）
に基づいて生成した派生情報Ｑ３であってもかまわない。図８および図９は、固有情報の代わりに派生情報を提示する実施例を示す図である。
【０１２７】
図８(a) は、登録処理ルーチン３３０による登録処理時の画面を示すものである。図示のとおり、「このアプリは初めて起動されました。次回以降の起動時に、プログラムの正当性確認に用いるため、右のいずれかの方角を選択して下さい。」なる説明メッセージが表示されており、右下には、８方向の方角のいずれかを選択させるための方角入力欄１０４が表示されている。図示の「Ｎ，Ｓ，Ｅ，Ｗ，ＮＥ，ＳＥ，ＮＷ，ＳＷ」なる記号は、それぞれ「北，南，東，西，北東，南東，北西，南西」（以下、８方位という）を示している。ユーザは、この方角入力欄１０４に表示されている８個の記号のうちのいずれか１つを選択する操作を行うことにより、当該記号で示される８方位の１つを固有情報Ｐ１として入力することができる。
【０１２８】
ここでは、ユーザが「ＮＷ」なる記号をタップ操作で選択したものとしよう。ユーザが選択操作を完了すると、画面は図８(b) のように変わり、登録処理が完了した旨が通知される。図示の例の場合「登録処理が完了しました。次回以降の起動時には毎回下記の方角が表示されます。（表示されないと、正当性に問題あり）」なるメッセージが表示されており、その下の方角登録欄１０５には、ユーザが選択した「ＮＷ」なる記号（北西を示す記号）が固有情報Ｐ１として表示されている。ユーザは、次回以降の起動時に毎回「北西」という方角が表示されないと、正当性に問題が生じていることを示していると認識できる。
【０１２９】
こうして入力された固有情報Ｐ１、すなわち、「ＮＥ」なる記号は、登録処理ルーチン３３０によって所定の格納場所２５０内に固有情報Ｐ２として格納される。
【０１３０】
一方、図９は、上記登録処理が完了した後に、アプリケーションプログラムを起動することにより提示された画面の一例を示す図である。当該画面は、アプリケーションプログラム３００が起動中であることをユーザに知らせるとともに、固有情報Ｐ２として登録されている記号「ＮＷ」に基づいて生成した「コンパス画像」を表示するための画面である。
【０１３１】
図９に示すとおり、この画面上には、「プログラムの正当性チェックのため下の方角が正しいことを確認して下さい。」なるメッセージが表示され、更に、コンパス画像表示欄１０６には、記号「ＮＷ」から派生した「コンパス画像」、すなわち、「針が北西を示しているコンパスの画像」が派生情報Ｑ３として表示されている。ユーザは、この派生情報Ｑ３が、登録処理時に入力した固有情報Ｐ１（記号「ＮＷ」）に合致することを確認することにより、正当性に問題が生じていないことを認識することができる。確認が完了したユーザが、確認ボタン１０７を押すと、アプリケーションプログラム３００内の主処理ルーチン３２０が実行される。
【０１３２】
このように、提示処理では、登録処理で登録した固有情報をそのまま提示する必要はなく、固有情報に含まれている概念をユーザに伝えることができるように、固有情報から派生させた派生情報を提示するようにしてもかまわない。上例の場合、記号「ＮＷ」なる固有情報に含まれている「北西」という概念をユーザに伝えることができるように、「針が北西を示しているコンパスの画像」という派生情報をユーザに提示していることになる。
【０１３３】
もちろん、「ＮＷ」のような８方位のいずれかの方角を示す記号と、コンパスの一部品として利用される針の画像と、を組み合わせた情報を固有情報として登録することも可能である。たとえば、図８(a) に示す方角選択画面において、更に、コンパスの針を何種類かの中から選択させるようにすれば、「選択した方角記号」と「選択した針の画像」との組み合わせが、固有情報として登録されることになるので、この固有情報に基づいて、「選択した針の画像」を用いて「選択した方角記号」が示す方向を指し示す「コンパス画像」を派生情報として生成し、これをコンパス画像表示欄１０６に表示することができる。ユーザは、自分自身が選択した針を用いて自分自身が選択した方角を指し示している「コンパス画像」が正しく表示されることにより、正当性に問題が生じていないことを認識することができる。
【０１３４】
結局、本発明では、登録処理を行う際には、ユーザの指示に基づいて、文字列、記号、画像、動画、音声もしくは振動を含む固有情報を入力し、これを所定の格納場所に格納するようにし、提示処理を行う際には、固有情報もしくは当該固有情報に基づいて生成した派生情報として、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせをユーザに提示するようにすればよい。
【０１３５】
最後に、固有情報のバリエーションとして、もう１つ変わったバリエーションを述べておく。このバリエーションでは、登録処理を行う際に、ユーザの指示に基づいて、提示方法を含む固有情報を入力するようにし、提示処理を行う際に、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを、固有情報として登録した提示方法に基づいてユーザに提示するようにするのである。
【０１３６】
図１０は、このようなバリエーションに基づいて提示処理を行った一例を示す図であり、アプリケーションプログラムの起動時に表示される起動画面を示すものである。図１０(a) ，図１０(b) は、いずれも画面中央部に「アプリ起動中」という起動中表示１０８が表示され、その脇に「パンダの画像」が表示されている起動画面であるが、両者では、「パンダの画像」の表示位置が異なっている。これは、登録処理を行う際に、それぞれ異なる表示位置を固有情報として登録したためである。
【０１３７】
図１０(a) は、登録処理を行う際に、「パンダの画像」という画像情報と、「画面右上に表示する」という提示方法（表示位置）を指定する情報とが、固有情報として登録された場合に、次回起動時の提示処理によって表示される起動画面を示すものであり、画面右上の画像表示欄１０９Ａに「パンダの画像」が表示されている。これに対して、図１０(b) は、登録処理を行う際に、「パンダの画像」という画像情報と、「画面右下に表示する」という提示方法（表示位置）を指定する情報とが、固有情報として登録された場合に、次回起動時の提示処理によって表示される起動画面を示すものであり、画面右下の画像表示欄１０９Ｂに「パンダの画像」が表示されている。いずれも「パンダの画像」が表示される点に変わりはないが、提示方法が「右上位置に表示する」か「右下位置に表示する」かという点で相違する。
【０１３８】
このように、固有情報に「提示方法」という情報を含ませるようにすると、より多彩な提示処理が可能になる。もちろん、「提示方法」を示す情報は、「表示位置」を示す情報に限定されるものではなく、この他にも様々な「提示方法」を指定することが可能である。たとえば、「天地を逆にして表示する」というような「表示向き」を指定する情報を固有情報に含ませておけば、「パンダの画像」が逆向きに表示されることになる。
【０１３９】
あるいは、「画面周囲を時計まわりに回転させて表示する」というような動きのある「提示方法」を指定すれば、図１０(a) に示す画像表示欄１０９Ａが図の下方へ移動して、図１０(b) に示す画像表示欄１０９Ｂの位置まで動き、更に、図の左方へと移動し、... というように、画面周囲を時計まわりに移動する動画を表示させることもできる。
【０１４０】
更に、「提示方法」としては、「提示時間」（たとえば、５秒間表示するとか、右上位置に３秒、右下位置に２秒表示するとか）などを指定することも可能である。また、起動時に毎回異なる提示方法が採られるような指定（たとえば、奇数回目の起動時には右上に表示、偶数回目の起動時には右下に表示というような指定）を行うことも可能であるし、起動時期に応じて異なる提示方法が採られるような指定（たとえば、午前中は右上に表示、午後は右下に表示というような指定や、曜日によって特定の位置に表示するような指定）を行うことも可能である。
【０１４１】
このように、登録処理において、特定の「提示方法」を固有情報として登録する場合は、予め用意されているいくつかの「提示方法」（たとえば、「右上表示」、「右下表示」、「左上表示」、「左下表示」、「時計まわり表示」、「反時計まわり表示」など）をユーザに選択させるようにすればよい。
【０１４２】
もちろん、音声や振動についての提示方法を指定することも可能であり、「徐々に音量を大きくする」、「徐々に音量を小さくする」、「右から左へとステレオ音声のバランスを移動させる」、... 等の様々な提示方法を固有情報として登録することが可能である。あるいは、「パンダの画像、犬の鳴き声の音声、猫の画像という順番に提示する」というような順序に関する提示方法を固有情報として登録してもよい。
【０１４３】
なお、ここでは、「パンダの画像」という画像情報と「画面右上に表示する」というような提示方法との組み合わせを固有情報として登録する例を述べたが、「提示方法」のみからなる単独の固有情報を登録するようにしてもかまわない。この場合、表示対象物は予め定められた「パンダの画像」のみに限定されることになり、ユーザは当該画像を指定する必要はない。ユーザは、「提示方法」のみを固有情報として指定する登録操作を行えばよい。
【０１４４】
＜＜＜  §４．  格納場所に関する変形例  ＞＞＞
図４に示す基本的な実施形態では、固有情報Ｐ２を格納する格納場所２５０として、コンピュータ１００に内蔵されているＳＳＤ（Solid State Drive）などの不揮発性メモリ内に確保された、アプリケーションプログラム３００用の設定データなどを格納するための領域を利用した例を述べたが、固有情報Ｐ２の格納場所は、必ずしもアプリケーションプログラム３００を実行中のコンピュータ１００に内蔵されている記憶装置に設ける必要はない。
【０１４５】
図１１は、固有情報Ｐ２を、コンピュータ１００の外部に接続された外部メモリ２６０に格納した変形例を示すブロック図である。ここで、外部メモリ２６０としては、たとえば、マイクロＳＤやＩＣカードなどの記憶媒体を用いればよい。このように、外部メモリ２６０を固有情報Ｐ２の格納場所として利用するようにすると、コンピュータ１００を機種変更などで交換した場合にも、外部メモリ２６０を新機種に移行する操作を行うことにより、新機種で実行されるアプリケーションプログラムが引き続き固有情報Ｐ２を利用して提示処理を行うことができるようになる。
【０１４６】
図４に示す基本的な実施形態と、図１１に示す変形例との相違は、固有情報Ｐ２の格納場所が、前者ではコンピュータ１００内の格納場所２５０であるのに対して、後者では外部メモリ２６０となっている点だけである。その他の動作原理については、全く変わりはないので、ここでは図１１に示す変形例についての詳細な動作説明は省略する。
【０１４７】
要するに、本発明を実行するにあたって、登録処理では、当該登録処理を実行中の特定のコンピュータ内の記憶装置を格納場所２５０として用いて固有情報を格納する処理を行ってもよいし、当該特定のコンピュータに接続された外部の記憶装置（外部メモリ２６０）を格納場所として固有情報を格納する処理を行ってもよい。提示処理では、これらいずれかの記憶装置に格納されている固有情報が取り出されることになる。
【０１４８】
一方、図１２は、登録処理を行うにあたって、固有情報Ｐ２を、当該登録処理を実行中の特定のコンピュータ１００に対してネットワークＮ（図示の例の場合は、インターネット）を介して接続されたサーバ装置４００に格納するようにした変形例を示すブロック図である。すなわち、図４に示す基本的な実施形態における格納場所２５０が、ネットワークＮを介して接続されたサーバ装置４００に変更されたことになり、提示処理を行う際には、このサーバ装置４００に格納されている固有情報Ｐ２をネットワークＮを介して取り出すことになる。
【０１４９】
このように、固有情報Ｐ２の格納場所として、サーバ装置４００を利用するようにすると、コンピュータ１００を機種変更などで交換した場合、マイクロＳＤやＩＣカードなどの記憶媒体を新機種に移し替えるような作業を行わなくても、新機種で実行されるアプリケーションプログラムが引き続き固有情報Ｐ２を利用して提示処理を行うことができるようになるので、ユーザの便宜は更に向上する。
【０１５０】
ただ、サーバ装置４００は、通常、多数のクライアント装置からのアクセスを受けることを前提として運用される装置であるため、実用上は、図示の特定のコンピュータ１００からの固有情報Ｐ２だけでなく、他のコンピュータからの固有情報も格納する役割を果たす必要がある。
【０１５１】
そこで、図１２に示す実施例の場合、登録処理ルーチン３３０によって実行される登録処理において、当該登録処理を実行中の特定のコンピュータ１００を識別するための識別情報Ｉに対応づけて、登録処理の対象となる固有情報Ｐ２をサーバ装置４００に送信し、固有情報Ｐ２と識別情報Ｉとが対応づけてサーバ装置４００に格納されるような形態を採っている。このような形態を採った場合、提示処理ルーチン３４０は、この識別情報Ｉを利用して、サーバ装置４００に当該識別情報Ｉに対応づけて格納されている固有情報Ｐ２を選択的に取り出すことができる。
【０１５２】
なお、識別情報Ｉとしては、コンピュータ１００を識別することができる情報であれば、どのような情報を利用してもかまわない。具体的には、コンピュータ１００に付与された機体番号、コンピュータ１００がスマートフォン等のように電話機能を有する場合は電話番号、ＳＩＭカード番号などを識別情報Ｉとして利用することができる。
【０１５３】
また、コンピュータ１００の利用者が特定されているケースでは、当該特定のコンピュータ１００を利用している特定のユーザを識別する情報（たとえば、当該ユーザのメールアドレスや、当該利用者が所持している交通カードや社員証などのＩＣカードからなる媒体に記録されている媒体識別コード、その他、特定の個人情報には結びつかないように生成したユニークな番号など）を識別情報Ｉとして用いるようにしてもよい。
【０１５４】
図１２に示す実施例では、コンピュータ１００内の格納場所２７０内に、識別情報Ｉを格納した例が示されている。格納場所２７０としては、たとえば、コンピュータ１００内の不揮発性メモリ内の領域を設定すればよい。登録処理ルーチン３３０がサーバ装置４００に対して固有情報Ｐ２を登録する登録処理を実行する際には、ユーザが入力した固有情報Ｐ１（固有情報Ｐ２と同じ）とともに、格納場所２７０内に格納されている識別情報Ｉを送信し、両者が対応づけて格納されるようにすればよい。また、提示処理ルーチン３４０が、提示処理を行うために、サーバ装置４００から固有情報Ｐ２を取り出す際には、格納場所２７０内に格納されている識別情報Ｉをサーバ装置４００に送信して、当該識別情報Ｉに対応づけて格納されている固有情報Ｐ２を要求する処理を行えばよい。
【０１５５】
もちろん、識別情報Ｉは、必ずしもコンピュータ１００内の格納場所２７０に格納しておく必要はなく、たとえば、非接触式交通カードや非接触式社員証などの媒体に記録されている媒体識別コードを読み出して、これを識別情報Ｉとして利用するようにしてもかまわない。
【０１５６】
この図１２に示す実施例の場合、固有情報Ｐ２がサーバ装置４００に格納される点を考慮して、もうひとつの工夫が施されている。すなわち、この実施例では、コンピュータ１００にインストールされているアプリケーションプログラム３００内の登録処理ルーチン３３０が、当該コンピュータ１００について固有情報Ｐ２を所定の格納場所（この例の場合は、サーバ装置４００）に格納したことを登録履歴として記録する処理を行う機能を有している。図示の例において、格納場所２７０内に描かれている登録履歴Ｈは、このようにして登録処理ルーチン３３０によって記録された履歴情報である。
【０１５７】
図５の流れ図に示すとおり、アプリケーションプログラム３００を起動すると、まず、ステップＳ１１において、過去に登録処理が実行されているか否かの判定が行われる。図４に示す基本的な実施形態の場合、固有情報Ｐ２はコンピュータ１００内部の格納場所２５０に格納されるため、格納場所２５０を参照して固有情報Ｐ２の有無を確認すれば、過去に登録処理が実行されているか否かの判定を容易に行うことができる。すなわち、登録処理によって格納が行われるべき所定の格納場所２５０に、固有情報Ｐ２が格納されているか否かに基づいて、過去に登録処理が実行されたか否かを判定することができる。これに対して、図１２に示す実施例の場合、過去に登録処理が実行されているか否かを確認するためには、ネットワークＮを介したサーバ装置４００に対する照会作業が必要になる。
【０１５８】
登録処理ルーチン３３０による登録処理において、固有情報Ｐ２および識別情報Ｉをサーバ装置４００に格納する処理を行うとともに、コンピュータ１００内部の格納場所２７０に、登録履歴Ｈを記録する処理を併せて行うようにすれば、起動処理ルーチン３１０は、ステップＳ１１の判定を行う際に、サーバ装置４００に対する照会作業を行わずに、内部の格納場所２７０を参照して登録履歴Ｈの有無を確認する作業を行うだけで、当該特定のコンピュータ１００について過去に登録処理が実行されたか否かを判定することができる。すなわち、格納場所２７０内に登録履歴Ｈが存在しなければ、ステップＳ１１で否定的判定を行い、サーバ装置４００に対してステップＳ１３の登録処理のためのアクセスを実行すればよいし、格納場所２７０内に登録履歴Ｈが存在すれば、ステップＳ１１で肯定的判定を行い、サーバ装置４００に対してステップＳ１２の提示処理のためのアクセスを実行すればよい。
【０１５９】
以上、固有情報の格納場所として、図４に示すように、コンピュータ１００内の格納場所２５０を用いる例、図１１に示すように、コンピュータ１００の外部に接続された外部メモリ２６０を用いる例、図１２に示すように、コンピュータ１００に対してネットワークＮを介してアクセス可能なサーバ装置４００を用いる例を説明したが、固有情報を複数の部分情報に分割し、各部分情報をそれぞれ異なる格納場所に格納するようなことも可能である。
【０１６０】
また、固有情報を所定の格納場所に格納したことを登録履歴として記録する処理を行う工夫は、図４に示すように、コンピュータ１００内の格納場所２５０を用いる例や、図１１に示すように、コンピュータ１００の外部に接続された外部メモリ２６０を用いる例についても行うことが可能である。
【０１６１】
＜＜＜  §５．  確認処理を行う変形例  ＞＞＞
ここでは、コンピュータの使用環境に関する情報を固有情報として登録し、提示処理の代わりに、確認処理を行う変形例を述べる。図１３は、この確認処理を行う変形例に係るアプリケーションプログラムおよびその実行手順を示すブロック図である。図示のコンピュータ１００Ａは、図４に示すコンピュータ１００に、更に、方位センサ１５０および加速度センサ１６０を付加した装置である。最近のスマートフォンなどの電子機器の多くには、方位センサ１５０や加速度センサ１６０が標準で装備されるようになってきている。
【０１６２】
一方、このコンピュータ１００Ａにインストールされているアプリケーションプログラム３０５は、基本的には、図４に示すアプリケーションプログラム３００と同じプログラムであるが、提示処理ルーチンの代わりに確認処理ルーチンが組み込まれている。すなわち、アプリケーションプログラム３０５には、起動処理ルーチン３１５、主処理ルーチン３２５、登録処理ルーチン３３５、確認処理ルーチン３４５（いずれもAndroid（登録商標）ＯＳプログラムの下で動作するプログラム）が組み込まれている。
【０１６３】
ここで、起動処理ルーチン３１５が実行する起動処理は、当該コンピュータ１００Ａにおいてアプリケーションプログラム３０５が起動されたときに、まず、当該特定のコンピュータ３０５について過去に登録処理が実行されていたか否かを判定する手順を含む点は、これまで述べてきた起動処理ルーチン３１０と同様である。そして、過去に登録処理が実行されていないと判定された場合には、登録処理ルーチン３３５を実行し、ユーザの指示に基づいて固有情報を入力し、入力した固有情報を所定の格納場所に格納する登録処理が行われるようにする点も、これまで述べてきた例と同様である。図１３では、コンピュータ１００Ａ内の格納場所２５０が例示されているが、もちろん、図１１に示す外部メモリ２６０や図１２に示すサーバ装置４００を格納場所として用いてもよい。
【０１６４】
これまでの実施例と異なるのは、固有情報として、コンピュータの使用環境に関する情報を用いるようにし、過去に登録処理が実行されていると判定された場合には、提示処理ルーチン３４０ではなく、確認処理ルーチン３４５が実行される点である。この確認処理ルーチン３４５による確認処理は、格納場所２５０から固有情報Ｐ２を取り出し、取り出した固有情報Ｐ２と当該コンピュータ１００Ａのその時点における使用環境Ｅとが合致するか否かを確認し、確認結果Ｒをユーザに報知する処理になる。そして、この確認処理で合致が確認された場合にのみ、主処理ルーチン３２５（図４に示す主処理ルーチン３２０と全く同じ内容でよい）が実行されることになる。
【０１６５】
また、確認処理ルーチン３４５による上記確認処理を可能にするため、ここに示す実施例の場合、方位センサ１５０および加速度センサ１６０が利用されている。また、これらセンサの検出値を利用して、登録処理ルーチン３３５における登録処理が行われるような構成を採用している。方位センサ１５０が出力する方角に関する情報や、加速度センサ１６０が出力する角度に関する情報（重力加速度の方向に基づいて認識したコンピュータ１００Ａの姿勢を示す角度の情報）は、コンピュータの使用環境に関する情報の１つとして利用することができる。ここでは、まず、方位センサ１５０が出力する方角に関する情報を固有情報として登録する具体例を説明しよう。
【０１６６】
図１４は、図１３に示すアプリケーションプログラム３０５の実行手順を示す流れ図である。アプリケーションプログラム３０５が起動されると、ステップＳ２０の起動処理が開始され、まず、起動処理ルーチン３１５が、ステップＳ２１において、このコンピュータ１００Ａについて過去に登録処理が実行されているか否かを判定する処理を行う。具体的な判定方法は、これまでの実施例で説明したとおりである。そして、このステップＳ２１において、肯定的な判定がなされた場合にはステップＳ２２へ進み（後述する確認処理が行われる）、否定的な判定がなされた場合にはステップＳ２３へ進むことになる。ここでは、このアプリケーションプログラム３０５が、コンピュータ１００Ａにおいて初めて起動された場合を想定し、ステップＳ２３の登録処理が行われたものとしよう。
【０１６７】
ステップＳ２３の登録処理は、登録処理ルーチン３３５によって行われる。ここで行われる登録処理は、基本的には、これまで述べてきた登録処理と同様に、ユーザに対して、固有情報の入力を促すメッセージを表示し、ユーザの指示に基づいて固有情報Ｐ１を入力し、入力した固有情報Ｐ１を格納場所２５０に固有情報Ｐ２として格納する処理である。但し、ここで述べる実施例の場合、ユーザの指示に基づいて入力される固有情報Ｐ１は、文字列や画像ではなく、特定の方角を示す情報になる。
【０１６８】
図８に示す実施例においても、特定の方角（北西）を固有情報Ｐ１として入力する例を示したが、ここで述べる実施例の場合、ユーザが登録指示を行った瞬間における方位センサ１５０の出力（特定の方角を示す情報）がそのまま固有情報Ｐ１として取り込まれ、格納場所２５０に固有情報Ｐ２として格納される。たとえば、方位センサ１５０が、北を０°、東を９０°、南を１８０°、西を２７０°とした０〜３６０°の方位角を出力するセンサであった場合、特定の方位角φ（０°≦φ＜３６０°）が固有情報として格納されることになる。
【０１６９】
このような登録処理が完了すると、ステップＳ２８へと進み、登録処理ルーチン３３５から主処理ルーチン３２５への移行が行われる。主処理ルーチン３２５によって実行される主処理は、これまでの実施例と同様、当該アプリケーションプログラム３０５の本来の機能を提供するための一連の処理である。この主処理が完了すると、制御はＯＳプログラム２００に移行する。
【０１７０】
こうして、アプリケーションプログラム３０５の初回起動が終了すると、格納場所２５０には固有情報Ｐ２が格納されている状態になるので、アプリケーションプログラム３０５の２回目以降の起動が行われると、今度は、ステップＳ２１において肯定的な判定がなされ、起動処理ルーチン３１５から確認処理ルーチン３４５への移行が行われることにより、ステップＳ２２以降の確認処理が実行される。
【０１７１】
この確認処理は、その時点で方位センサ１５０が検出した方角（すなわち、コンピュータ１００Ａのその時点における地理的な向きとして与えられる使用環境Ｅ）と格納場所２５０から取り出した固有情報Ｐ２とが合致するか否かを確認し、確認結果Ｒをユーザに報知する処理になる。そして、この確認処理で合致が確認された場合にのみ、主処理ルーチン３２５が実行される。
【０１７２】
具体的には、まず、ステップＳ２２において、現在の使用環境を登録されている固有情報と比較する処理が行われる。すなわち、その時点において、方位センサ１５０から与えられるコンピュータ１００Ａの使用環境Ｅ（すなわち、その時点の方位角φ）と、格納場所２５０に格納されている固有情報Ｐ２との比較が行われる。そして、ステップＳ２４において、両者が合致するか否かが判定される。
【０１７３】
なお、実用上、この合致判定は、所定の近似幅をもって行うようにするのが好ましい。すなわち、必ずしも正確に一致しなくても、所定の近似幅の範囲内であれば「合致」との判定が行われるようにする。たとえば、上例のように、方位センサ１５０が０〜３６０°の方位角φを出力するセンサであった場合、固有情報Ｐ２も使用環境Ｅも、０〜３６０°の範囲内の角度φで表されるデータということになるので、たとえば、両者の角度差（０°が３６０°に等しくなる方位角としての角度差）が１０°以内であれば「合致」との判定が行われるようにすればよい。
【０１７４】
こうして得られた判定結果は、ユーザに報知される。すなわち、ステップＳ２４において、両者が合致するとの肯定的な判定結果が得られた場合には、ステップＳ２７へと進み、正常判定の報知がなされた後、ステップＳ２８へ進み、主処理への移行が行われる。すなわち、確認処理ルーチン３４５から主処理ルーチン３２５へと移行し、主処理が実行されることになる。主処理が完了すると、制御はＯＳプログラム２００に移行する。
【０１７５】
一方、ステップＳ２４において、両者が合致しないとの否定的な判定結果が得られた場合には、ステップＳ２５へと進み、異常判定の報知がなされた後、ステップＳ２６へ進み、主処理の実行は中止される。この場合、制御は、確認処理ルーチン３４５からＯＳプログラム２００に移行する。ここでユーザが、アプリケーションプログラム３０５を再度起動する操作を行えば、再びステップＳ２０からの起動処理が繰り返し実行されることになる。
【０１７６】
続いて、図１４の流れ図に示す処理の具体的な手順を、画面表示例を示しながら説明する。図１５は、図１３に示すアプリケーションプログラム３０５の登録処理ルーチン３３５によって実行される登録処理における、コンピュータ１００Ａ上での画面表示例を示す図である。アプリケーションプログラム３０５が初回起動されると、図１４の流れ図のステップＳ２１において否定的な判定がなされ、ステップＳ２３における登録処理が実行される。図１５は、このステップＳ２３において、コンピュータ１００Ａのディスプレイ上に表示される画面ということになる。
【０１７７】
図１５(a) に示す画面は、本発明による登録処理が実行中であることをユーザに知らせるとともに、ユーザに固有情報として、現時点のコンピュータ１００Ａの地理的な向きに基づいて特定の方角を自動的に入力させるための画面である。図示のとおり、この画面上には、「このアプリは初めて起動されました。次回以降の起動時に、プログラムの正当性確認に用いるため、装置を特定の方角に向けた状態で登録ボタンを押してください。」なるメッセージが表示されている。このメッセージは、これまでの実施例と同様に、ここで入力する固有情報が、アプリケーションプログラム３０５の正当性を確認するための確認処理に利用される情報である旨を示す説明メッセージである。
【０１７８】
ユーザは、このような説明メッセージが表示されたら、図１５(b) に示すように、コンピュータ１００Ａの本体の特定部分を特定の方角に向けた状態で、画面上の登録ボタン１１１を押す操作を行えばよい。図は、コンピュータ１００Ａの上部を北西方向に向けた状態にして、登録ボタン１１１を押した状態を示す。登録処理ルーチン３３５は、登録ボタン１１１が押された時点における方位センサ１５０の出力に基づいて、コンピュータ１００Ａが向けられた方角を固有情報Ｐ１として取り込み、これを格納場所２５０に固有情報Ｐ２として格納する処理を行う。
【０１７９】
たとえば、方位センサ１５０の出力が方位角φ＝３１２°を示していた場合、３１２°という方位角自体を固有情報Ｐ１として取り込んでもよいし、予め８方位についての角度範囲を定めておき、φ＝３１２°に対応する「北西」という方角を示す情報（たとえば、「ＮＷ」なる記号）を固有情報Ｐ１として取り込んでもよい。したがって、格納場所２５０には、３１２°という数値を固有情報Ｐ２として格納してもよいし、「ＮＷ」という方角を示す記号を固有情報Ｐ２として格納してもよい。
【０１８０】
ユーザが登録ボタン１１１を押して、方角を示す固有情報の入力を完了すると、画面は図１５(c) のように変わり、登録処理が完了した旨が通知される。図示の例の場合「登録処理が完了しました。次回以降の起動時には毎回装置を登録した方角に向けた場合にのみ正常判定されます。」なるメッセージが表示されている。このメッセージも、入力した固有情報Ｐ１がアプリケーションプログラム３０５の正当性を確認するための確認処理に利用される情報である旨を示す説明メッセージであり、ユーザは、次回以降の起動時には、登録した方角を向けた状態で起動した場合にのみ、正常と判定されることを認識することができる。別言すれば、起動時の方角に関して、そのような正しい判定が行われなかった場合には、正当性に問題が生じていることを認識できる。
【０１８１】
このような登録処理が完了した後に、アプリケーションプログラム３０５が再度起動されると、図１４の流れ図のステップＳ２１において肯定的な判定がなされ、ステップＳ２２以降の確認処理が実行される。すなわち、上述したように、確認処理ルーチン３４５により、方位センサ１５０の現時点の出力に基づく方位（方位角φの値でもよいし、それから導かれる８方位でもよい）と、格納場所２５０に格納されている固有情報Ｐ２（上例の場合、３１２°なる方位角もしくは「ＮＷ」なる記号）との比較が行われ、両者が合致するか否かが判定される。
【０１８２】
この合致判定では、前述したとおり、方位角φの数値同士を比較する場合は、たとえば、両者の差が１０°以内であれば「合致」との判定を行うようにすればよい。また、方位角φの数値と８方位とを比較する場合は、たとえば「北西（ＮＥ）」についての方位角範囲であれば、２９２．５°〜３３７．５°のように設定しておき、方位角φが当該範囲内に入っていれば「合致」との判定を行うようにすればよいし、８方位のいずれかを示す記号同士を比較する場合は、「ＮＥ」＝「ＮＥ」のように両者が一致すれば「合致」との判定を行うようにすればよい。
【０１８３】
ステップＳ２４で肯定的な判定がなされると、ステップＳ２７で正常判定の報知が行われた後にステップＳ２８へ進み、主処理の実行に移行する。一方、ステップＳ２４で否定的な判定がなされると、ステップＳ２５で異常判定の報知が行われた後にステップＳ２６へ進み、主処理の実行は中止される。図１６(a) は、ステップＳ２７における正常判定の報知画面の一例を示し、図１７(b) は、ステップＳ２５における異常判定の報知画面の一例を示す。
【０１８４】
結局、アプリケーションプログラム３０５の初回起動時に、図１５(b) に示すように、コンピュータ１００Ａを北西に向けた状態で固有情報の登録を行った場合、次回も同様に北西を向けた状態で起動すると、図１６(a) に示すように、画面に正常判定結果表示１１２が提示されてから、主処理が実行されることになるが、別な方角を向けて起動した場合は、図１６(b) に示すように、画面に異常判定結果表示１１３が提示されてから、アプリケーションプログラム３０５は強制終了されることになる。
【０１８５】
したがって、アプリケーションプログラム３０５に対する不正なすり替えが行われていない場合は、北西を向けて起動すると、図１６(a) に示す正常判定結果表示１１２の後に正常起動し、北西以外を向けて起動すると、図１６(b) に示す異常判定結果表示１１３の後に強制終了することになる。すなわち、起動時にコンピュータ１００Ａが向いている方角に応じて、図１６(a) もしくは(b) のいずれかの表示がなされることになり、ユーザは、起動時にそのような振る舞いがあれば、アプリケーションプログラム３０５自体は改竄を受けていないと判断することができる。これに対して、登録した方角とは食い違った振る舞いをしたり、起動時に、図１６(a) ，(b) のいずれの表示もなされなかったりした場合は、改竄プログラムにすり替えられている可能性があると判断することができる。
【０１８６】
要するに、上述した実施例の場合、登録処理では、ユーザの指示に基づいて、特定の方角を含む固有情報を入力し、これを所定の格納場所に格納する処理が行われ、確認処理では、上記固有情報に含まれている特定の方角と、コンピュータに備わっている方位センサが検出した当該コンピュータの地理的な向きと、が合致するか否かを確認する処理が行われ、合致が確認された場合にのみ主処理が実行されることになる。
【０１８７】
以上、図１３に示すコンピュータ１００Ａにおける方位センサ１５０の検出値を利用して方角を示す固有情報の登録を行う例を説明したが、続いて、加速度センサ１６０の検出値を利用して姿勢を示す固有情報の登録を行う例を説明する。加速度センサ１６０は、コンピュータ１００Ａの本体に対して作用する加速度を、三次元座標系における個々の座標軸方向成分ごとに検出する機能を有しており、コンピュータ１００Ａがほぼ静止状態に保たれていれば、重力加速度の方向を検知することができる。別言すれば、加速度センサ１６０は、コンピュータ１００Ａの鉛直軸（水平面）に対する姿勢を認識することができる。
【０１８８】
そこで、ここでは、図１７に示すように、コンピュータ１００Ａ（図では、薄い板状をしたスマートフォンの例が示されている）の姿勢として、水平面Ｓｈに対するディスプレイ表示面の傾斜角度θを定義し、これを固有情報として登録することを考えてみる。
【０１８９】
この実施例の場合、まず登録処理で、ユーザに対して、コンピュータ１００Ａ本体を水平面に対して所定角度θだけ傾斜した状態にして（もちろん、θ＝０°として、本体を水平に保持した状態にしてもよい）、登録ボタンを押す操作を行うように促す説明メッセージが提示される。登録処理ルーチン３３５は、ユーザが登録ボタンを押した時点で、加速度センサ１６０の出力に基づいて、その時点のコンピュータ１００Ａ本体の水平面に対する傾斜角度θを固有情報Ｐ１として取り込み、格納場所２５０に固有情報Ｐ２として格納する処理を行う。
【０１９０】
このような登録処理が完了した後に、アプリケーションプログラム３０５が再度起動されると、確認処理ルーチン３４５による確認処理が実行される。すなわち、加速度センサ１６０の現時点の出力に基づいて、コンピュータ１００Ａの現時点の姿勢（使用環境Ｅ）を示す情報として、水平面Ｓｈに対する傾斜角度が認識され、格納場所２５０に格納されている固有情報Ｐ２（登録処理で格納した傾斜角度θ）との比較が行われ、両者が合致するか否かが判定される。
【０１９１】
この合致判定においても、実用上は、比較対象となる両角度の差が、たとえば、１０°以内であれば「合致」との判定を行うようにすればよい。両者が合致すれば、正常判定の報知が行われた後に主処理の実行に移行し、合致しない場合は、異常判定の報知が行われた後に主処理の実行が中止される点は、上述した実施例と同様である。
【０１９２】
結局、アプリケーションプログラム３０５の初回起動時に、図１７に示すように、コンピュータ１００Ａを水平面Ｓｈに対して角度θだけ傾斜させた状態で固有情報の登録を行った場合、次回もほぼ同じ傾斜状態で起動すると正常判定結果が表示されて主処理が実行されることになるが、異なる傾斜状態で起動すると異常判定結果が表示されて、アプリケーションプログラム３０５は強制終了されることになる。
【０１９３】
要するに、上述した実施例の場合、登録処理では、ユーザの指示に基づいて、特定の角度を含む固有情報を入力し、これを所定の格納場所に格納する処理が行われ、確認処理では、上記固有情報に含まれている特定の角度と、コンピュータに備わっている方位センサが検出した当該コンピュータの姿勢を示す角度と、が合致するか否かを確認する処理が行われ、合致が確認された場合にのみ主処理が実行されることになる。
【０１９４】
以上、図１３に示すコンピュータ１００Ａに備わっている方位センサ１５０もしくは加速度センサ１６０を利用して、登録処理時（初回起動時）には、自動的に方角（方位角φ）もしくは姿勢（傾斜角度θ）を、使用環境を示す固有情報として登録し、確認処理時（２回目以降の起動時）には、固有情報として登録されていた方角もしくは姿勢が、起動時の方角もしくは姿勢（使用環境）と合致するか否かの判定を行う例を述べたが、§５で述べる確認処理を行う変形例を実施するにあたり、コンピュータの使用環境は、方角や姿勢に限定されるものではなく、この他にも種々の使用環境を固有情報として登録しておくことが可能である。
【０１９５】
要するに、ここで述べる変形例では、コンピュータの何らかの使用環境を固有情報として登録しておき、その後の起動時におけるコンピュータの使用環境が、予め登録してあった使用環境に合致するか否かの確認処理を行い、確認結果をユーザに報知するとともに、合致が確認された場合にのみ主処理が実行されるような制御を行えばよい。
【０１９６】
また、これまでの説明では、登録処理時に、ユーザが登録操作（登録ボタンの押圧操作）を行った時点で、方位センサ１５０もしくは加速度センサ１６０の出力を利用して、方角もしくは姿勢を示す情報を固有情報Ｐ１として自動的に取得する例を述べたが、登録処理時に、方位センサ１５０もしくは加速度センサ１６０の出力を利用せずに、方角や姿勢を示す情報をユーザに手入力させるようにしてもかまわない。たとえば、図８(a) に示すような入力インターフェイスを用意しておけば、任意の方角をユーザの選択操作によって入力することができるし、角度を数値で入力する入力インターフェイスを用意しておけば、任意の角度をユーザの手入力操作によって入力することができる。
【０１９７】
＜＜＜  §６．  その他の変形例  ＞＞＞
ここでは、更にいくつかの変形例を提示しておく。
【０１９８】
＜６−１．サイズ確認処理を行う変形例＞
図１８は、図４に示す基本的な実施形態に係るアプリケーションプログラム３００に、更に、サイズ確認処理機能を付加した変形例に係るアプリケーションプログラム３０８およびその実行手順を示すブロック図である。図示のアプリケーションプログラム３０８には、図４に示すアプリケーションプログラム３００と同様に、主処理ルーチン３２０、登録処理ルーチン３３０、提示処理ルーチン３４０が備わっており、これらの各ルーチンの機能は、これまで述べたとおりである。このアプリケーションプログラム３０８の特徴は、更に、サイズ確認処理ルーチン３５０が付加されている点と、起動処理ルーチン３１８が、このサイズ確認処理ルーチン３５０を呼び出す機能を有する点である。
【０１９９】
すなわち、起動処理ルーチン３１８は、基本的には、図４に示す起動処理ルーチン３１０と同様に、図５に示すステップＳ１１を実行して、初回起動時には登録処理ルーチン３３０を実行させ、２回目以降の起動時には提示処理ルーチンを実行させる制御を行う機能を有しているが、その前に、サイズ確認処理ルーチン３５０を呼び出して、サイズ確認処理を実行させる制御を行う。
【０２００】
このサイズ確認処理は、アプリケーションプログラム３０８を構成するファイル全体のデータサイズを確認し、確認したデータサイズが予め設定されている設定サイズと一致するか否かを提示する処理である。
【０２０１】
なお、図１８に示すアプリケーションプログラム３０８内には、５つのルーチンのみしか示されていないが、Android（登録商標）用プログラムの場合、この５つのルーチンは、図２に示すアプリＣを構成するＡＰＫパッケージ内のプログラム本体部１０に相当するものであり、いずれもAndroid（登録商標）ＯＳプログラムの下で動作するJava（登録商標）プログラムである。したがって、実際には、図１８に示すアプリケーションプログラム３０８内には、図示されている５つのルーチンの他、リソースデータ２０や補助ファイル３０等が含まれており、アプリケーションプログラム３０８全体のファイルサイズは、これらリソースデータ２０や補助ファイル３０等を含んだＡＰＫパッケージ全体のサイズということになる。
【０２０２】
サイズ確認処理ルーチン３５０には、自分自身を含めたアプリケーションプログラム３０８全体のファイルサイズ（総バイト数）が予め基準値として記録されており（アプリケーションプログラム３０８をユーザに配布する時点から既に記録されている）、サイズ確認処理ルーチン３５０が実行されると、コンピュータ１００にインストールされた状態におけるアプリケーションプログラム３０８のファイルサイズを検出し、これを基準値と比較する処理が行われ、比較結果がユーザに提示される。
【０２０３】
図１８に示すアプリケーションプログラム３０８は、コンピュータ１００内の所定の記憶場所（たとえば、不揮発性メモリ内のアプリケーション格納用領域）にインストールされているので、当該記憶場所への格納情報を参照することにより、アプリケーションプログラム３０８全体のファイルサイズを検出することができる。これを予め記録されている基準値と比較することにより、ファイルサイズに関して問題がないかどうかの確認を行うことができる。なお、Android（登録商標）用プログラムのように、圧縮された状態で配布されるアプリケーションプログラムの場合は、伸張された状態（コンピュータ１００にインストールされた状態）でのファイルサイズを基準値として記録しておくようにする。
【０２０４】
図２に示すアプリＣが、図３に示すアプリＣ''にすり替えられた場合、インジェクションの手法により改竄プログラム５０が埋め込まれることになる。この場合、元のアプリＣに含まれていたプログラム本体部１０、リソースデータ２０、補助ファイル３０、署名情報４０は、そっくりそのまま残っているので（そのため、署名情報による改竄チェックが機能しないことは既に述べたとおりである）、アプリＣ''のファイルサイズはアプリＣのファイルサイズよりも改竄プログラム５０の分だけ必ず増加することになる。したがって、アプリＣ''についてサイズ確認処理を実行すれば、サイズが不一致であることが確認され、当該確認結果がユーザに報知されることになる。
【０２０５】
実用上は、図５の流れ図において、ステップＳ１１の直前にサイズ確認処理を実行するようにし、サイズの一致確認が得られた場合にはステップＳ１１へと進み、一致確認が得られなかった場合には、ユーザに異常を報知するとともに、当該アプリケーションプログラムを強制終了するようにするのが好ましい。
【０２０６】
クラッカーが、正規のアプリケーションプログラムをそっくりコピーした上で、その中の一部を書き換えるという手法で改竄プログラム５０を作成した場合、図４の基本的な実施形態に係るアプリケーションプログラム３００では、起動処理ルーチン３１０，主処理ルーチン３２０，登録処理ルーチン３３０，提示処理ルーチン３４０がそっくりコピーされ、主処理ルーチン３２０の一部だけが書き換えられる可能性がある。この場合、§２で述べた基本的な実施形態に係る手順で当該改竄プログラム５０を実行すると、図５の流れ図の手順が実行されるため、ユーザには改竄プログラム５０が実行されていることが報知されない。
【０２０７】
これに対して、図１８に示すサイズ確認処理を行う変形例を適用した場合、クラッカーが、正規のアプリケーションプログラム３０８をそっくりコピーした上で、その中の一部を書き換えるという手法で改竄プログラム５０を作成すると、起動処理ルーチン３１８，主処理ルーチン３２０，登録処理ルーチン３３０，提示処理ルーチン３４０，サイズ確認処理ルーチン３５０がそっくりコピーされ、主処理ルーチン３２０の一部だけが書き換えられる可能性が高い。この場合、サイズ確認処理ルーチン３５０は、サイズの基準値を含めて元のままであるので、サイズ確認処理を実行すると不一致が生じ、ユーザには改竄プログラム５０が実行されていることが報知されることになる。
【０２０８】
もちろん、クラッカーが改竄プログラム５０を作成する際に、正規のプログラム内のサイズ確認処理ルーチン３５０を詳細に解析し、サイズの基準値までも改竄プログラム５０に合致するような値に書き換えてしまった場合は、サイズ確認処理により改竄プログラム５０の検出を行うことはできない。したがって、ここで述べる変形例も、１００％の安全性を提供することはできないが、少なくとも、前述した基本的な実施形態よりは安全性をより高める効果は期待できる。
【０２０９】
なお、ここでは、§２で述べた基本的な実施形態（図４に示す構成）にサイズ確認処理ルーチン３５０を付加した変形例を述べたが、この変形例は、これまで述べてきたいずれの実施例にも適用可能な技術である。
【０２１０】
＜６−２．監視プログラムを用いる変形例＞
図１９は、図４に基本的な実施形態として示したコンピュータ１００に、アプリケーションプログラム３００とは別個に監視プログラム５００をインストールした変形例を示すブロック図である。図４に示す実施形態との相違は、新たに監視プログラム５００がインストールされている点だけである。なお、ここでも、説明の便宜上、§２で述べた基本的な実施形態に監視プログラム５００を組み込んだ変形例を説明するが、この変形例は、これまで述べてきたいずれの実施例にも適用可能な技術である。
【０２１１】
この監視プログラム５００は、アプリケーションプログラム３００が実行する登録処理および提示処理の処理動作を監視する機能をもったプログラムである。具体的には、この監視機能は、照合準備段階と照合処理段階とによって実現される。
【０２１２】
照合準備段階は、照合処理段階の準備を行うためのプロセスであり、アプリケーションプログラム３００の動作を監視しながら、登録処理ルーチン３３０が実行する登録処理により固有情報Ｐ１が所定の格納場所２５０に固有情報Ｐ２として格納されたときに、当該固有情報Ｐ１を別な格納場所５５０にもコピーして、固有情報Ｐ４として格納するプロセスになる。
【０２１３】
一方、照合処理段階は、提示処理ルーチン３４０が実行する提示処理により固有情報Ｐ３もしくは派生情報Ｑ３がユーザに提示されたときに、この提示された固有情報Ｐ３もしくは派生情報Ｑ３と、別な格納場所５５０に格納されている固有情報Ｐ４もしくはこれに基づいて生成した派生情報Ｑ４とが合致するか否かを照合し、照合結果Ｖをユーザに報知するプロセスになる。
【０２１４】
たとえば、図６に示す例では、登録処理ルーチン３３０の機能により、固有情報Ｐ１として「PATENT2013」なる文字列が入力され、当該文字列が固有情報Ｐ２として格納場所２５０に格納されることになる。このとき、ここで述べる変形例では、監視ブログラム５００の機能により、「PATENT2013」なる文字列は、別な格納場所５５０にも固有情報Ｐ４として格納されることになる。
【０２１５】
そして、当該アプリケーションプログラムが再度起動されると、図７に示す例のように、提示処理ルーチン３４０の機能により、固有情報Ｐ３とし「PATENT2013」なる文字列がユーザに提示されることになる。このとき、ここで述べる変形例では、監視ブログラム５００の機能により、ユーザに提示される「PATENT2013」なる文字列と、別な格納場所５５０に格納されていた「PATENT2013」なる文字列とが合致するか否かの照合が行われ、その結果が、照合結果Ｖとしてユーザに報知される。
【０２１６】
たとえば、図７に示す画面上に、「照合結果：一致」もしくは「照合結果：不一致」といった表示により、照合結果Ｖの報知を行えば、ユーザは、コンピュータ側で行われた自動照合の結果を知ることができる。これと併せて、文字列表示欄１０２に表示された固有情報Ｐ３を自分自身で確認することにより、改竄検知を行う上で、より確実な運用を行うことが可能になる。もちろん、固有情報Ｐ３の代わりに派生情報Ｑ３の提示を行う場合は（たとえば、図８に示す記号「ＮＷ」なる固有情報Ｐ３の代わりに、図９に示す「コンパス画像」を派生情報Ｑ３として提示する場合は）、派生情報Ｑ３についての合致判定を行うようにすればよい。この監視プログラム５００による照合処理の結果、両者が合致しなかった場合には、アプリケーションプログラム３００を強制終了させるような処理も可能である。
【０２１７】
なお、監視プログラム５００を、コンピュータ１００内にインストールして動作させる１つのアプリケーションプログラムとして用意した場合は、当該監視プログラム５００は、いわゆる「常駐アプリ」として動作させ、常に起動させた状態におく必要がある。一般的なコンピュータは、マルチタクス機能を有しており、複数のアプリケーションプログラムを同時に起動した状態にして、並行して同時動作させることが可能である（実際には、ＯＳプログラムの管理機能により、時分割で交替に動作することになるが、ユーザから見れば、複数のプログラムが同時に動作しているように見える）。
【０２１８】
このため、監視プログラム５００を常に起動させた状態におけば、監視プログラム５００によって、アプリケーションプログラム３００の動作状態を監視することができ、必要な時点で、上述した照合準備段階や照合処理段階の処理を適宜実行することができる。
【０２１９】
たとえば、§４で述べた図１２の実施例に示すコンピュータ１００に、監視プログラム５００を組み込んだ変形例の場合、登録処理ルーチン３３０によって、固有情報Ｐ２がネットワークＮを介してサーバ装置４００に格納されることになるが、その際、監視プログラム５００によって通信経路を監視していれば、サーバ装置４００に送信される固有情報Ｐ２を認識することができる（たとえば、特定の送信プロトコルや、固有情報Ｐ２に付される特定の符号などを目印に認識を行えばよい）。そこで、監視プログラム５００は、この送信過程にある固有情報Ｐ２をコピーして、これを別な格納場所５５０へ格納する照合準備段階の処理を行うことができる。
【０２２０】
また、上例の場合、アプリケーションプログラム３００を再度起動すると、提示処理ルーチン３４０によって、ネットワークＮを介してサーバ装置４００から固有情報Ｐ２が取り出され、固有情報Ｐ３もしくは派生情報Ｑ３としてユーザに提示されることになるが、監視プログラム５００によってアプリケーションプログラム３００の動作を監視していれば、提示対象となる固有情報Ｐ３もしくは派生情報Ｑ３を抽出し、別な格納場所５５０に格納されていた固有情報Ｐ４を用いた照合処理が可能になる。
【０２２１】
たとえば、固有情報Ｐ３が画面上に表示される画像であった場合、ＯＳプログラム２００などに用意されている画面キャプチャー機能を利用して、固有情報Ｐ３として提示されるべき画像のデータを取得し、別な格納場所５５０に格納されている固有情報Ｐ４に基づく照合を行えばよい。あるいは、画面表示が、ＯＳプログラム２００に用意されている特定の表示用サブルーチンを呼び出して行われる場合は、当該表示用サブルーチンに受け渡される画像データを取得して照合を行ってもよい。なお、照合結果が不一致であったため、アプリケーションプログラム３００を強制終了させる場合は、監視プログラム５００からＯＳプログラム２００に対して、「アプリケーションプログラム３００を強制終了させる」旨の要求を行い、ＯＳプログラム２００を介して、アプリケーションプログラム３００を強制終了させるようにすればよい。
【０２２２】
以上、監視プログラム５００が、能動的にアプリケーションプログラム３００を監視しながら、必要に応じて、照合準備段階や照合処理段階の手順を実行する例を述べたが、監視プログラム５００の存在を前提としてアプリケーションプログラム３００を作成することができる場合は、アプリケーションプログラム３００側に、監視プログラム５００への報告機能を用意しておくことにより、監視プログラム５００が、受動的にアプリケーションプログラム３００を監視するような形態を採ることも可能である。
【０２２３】
たとえば、アプリケーションプログラム３００内の登録処理ルーチン３３０に、登録処理の実行時に、登録対象となる固有情報Ｐ１を監視プログラム５００にも引き渡す手順を組み込んでおけば、監視プログラム５００は、能動的にアプリケーションプログラム３００の動作を監視していなくても、受動的に引き渡しを待っていれば、照合準備段階を行うことができる。同様に、アプリケーションプログラム３００内の提示処理ルーチン３４０に、提示処理の実行時に、提示対象となる固有情報Ｐ３もしくは派生情報Ｑ３を監視プログラム５００にも引き渡す手順を組み込んでおけば、監視プログラム５００は、能動的にアプリケーションプログラム３００の動作を監視していなくても、受動的に引き渡しを待っていれば、照合処理段階を行うことができる。
【０２２４】
また、監視プログラム５００は、必ずしも１つのアプリケーションプログラムとして用意する必要はなく、ＯＳプログラム２００に組み込まれた形式で用意することも可能である。この場合、照合準備段階や照合処理段階の手順は、ＯＳプログラムの機能として実施されることになるので、より柔軟な処理が可能になる。
【０２２５】
＜６−３．グループ定義を行う変形例＞
これまで、改竄プログラムへのすり替え検知の対象となるアプリケーションプログラムが、コンピュータ内に１組だけインストールされている実施例について本発明を説明してきたが、通常のユーザであれば、同一のコンピュータに複数のアプリケーションプログラムをインストールして利用するのが一般的である。このように、複数のアプリケーションプログラムがインストールされている場合、当然ながら、本発明を適用したアプリケーションプログラムについてのみ、これまで述べてきた登録処理、提示処理もしくは確認処理といった本発明に固有の処理が実行されることになる。
【０２２６】
ここでは、図１(a) に示す例において、３つのアプリＡ，Ｂ，Ｃのすべてが、§２で述べた本発明の基本的な実施形態に係るアプリケーションプログラムであった場合を考えてみる。この場合、基本的には、個々のアプリＡ，Ｂ，Ｃのそれぞれが、図４に示すように、起動処理ルーチン３１０，主処理ルーチン３２０，登録処理ルーチン３３０，提示処理ルーチン３４０を備えたプログラムになるので、それぞれが独立した格納場所２５０にそれぞれの固有情報を格納する処理を行うことになる。
【０２２７】
たとえば、アプリＡの初回起動時には、固有情報ＰａがアプリＡ用の格納場所２５０Ａに格納され、アプリＡの次回以降の起動時には、当該固有情報Ｐａが提示され、アプリＢの初回起動時には、固有情報ＰｂがアプリＢ用の格納場所２５０Ｂに格納され、アプリＢの次回以降の起動時には、当該固有情報Ｐｂが提示される、といった運用が行われることになる。しかしながら、このような運用を行うと、ユーザの立場からは、登録作業が煩雑になり、もし、個々のアプリごとに異なる固有情報を登録してしまった場合は、提示処理時の確認作業に混乱が生じることにもなる。
【０２２８】
そこで、実用上は、個々のアプリケーションプログラムにグループ定義を行い、同一のグループに所属するアプリ間では、いずれか最初に起動されたアプリにおいて共通の登録処理を実行し、共通の固有情報を共通の格納場所に格納するようにし、それ以降に、当該グループに所属するいずれかのアプリが起動された場合には、既に過去に登録処理が実行されているものとして、共通の格納場所に格納されている共通の固有情報もしくはこれに基づいて生成した派生情報をユーザに提示する運用を採るのが好ましい。
【０２２９】
たとえば、図１(a) 示す３つのアプリＡ，Ｂ，Ｃが同一のグループに所属するアプリとして定義されており、これらがコンピュータ１００に対して同時期にインストールされたものとしよう（あるいは、これら３つのアプリＡ，Ｂ，Ｃがプリインストールされたコンピュータ１００をユーザが入手した場合を考えてもよい）。
【０２３０】
ここで、たとえば、ユーザがアプリＣを最初に起動したとすると、アプリＣ内の起動処理ルーチン３１０により、当該コンピュータ１００についての当該アプリＣが所属するグループ内のアプリに関する登録処理は過去に実行されていないとの判断がなされ（すなわち、所定の格納場所２５０には、まだ固有情報が存在しないとの判断がなされ）、登録処理ルーチン３３０による登録処理が実行されることになる。具体的には、当該グループに共通の格納場所２５０に共通の固有情報が登録される。こうして、登録処理が実行された後、アプリＣの主処理ルーチン３２０が実行され、ユーザには、アプリＣの本来の機能が提供される。
【０２３１】
続いて、ユーザがアプリＡを起動したとすると、今度は、アプリＡ内の起動処理ルーチン３１０により、過去に登録処理が実行されているか否かの判断がなされる。この場合、当該アプリＡについての登録処理は実行されていないものの、同一グループに所属するアプリＣに関する登録処理が実行されていることが認識できるので（すなわち、共通の格納場所２５０に共通の固有情報が存在するので）、提示処理ルーチン３４０による提示処理が実行されることになる。要するに、起動されたアプリケーションプログラムと同一のグループに所属する別のプログラムによって固有情報が所定の場所に格納されているか否かに基づいて、過去に登録処理が実行されたか否かを判定する処理が行われることになる。
【０２３２】
結局、同一のグループに所属するアプリＡ，Ｂ，Ｃのいずれか１つに関して登録処理が実行され、共通の固有情報の登録が行われると、その後は、当該グループに所属するいずれのアプリを起動した場合も、既に登録処理が実行されているものと判断され、共通の固有情報を提示する提示処理が行われることになる。このような運用を採れば、ユーザは、個々のアプリごとに登録作業を行う煩雑さから解放され、また、共通の固有情報が利用できるので、提示処理時の確認作業にも混乱が生じることがない。
【０２３３】
もちろん、ここで述べるグループ定義を行う変形例は、§２で述べた基本的な実施形態のみならず、§４以降の実施例についても適用可能である。要するに、ここで述べる変形例を適用する場合、図５のステップＳ１１や図１４のステップＳ２１に示す起動処理の判断を行う際に、同一グループに所属する別なアプリケーションプログラムによって登録処理が行われていた場合にも、肯定的な判断が行われるような運用を採ればよい。
【０２３４】
なお、図１２に示す実施例では、固有情報を所定の格納場所に格納したことを、登録履歴Ｈとして記録しておく例を述べたが、ここで述べるグループ定義を行う変形例においても、このような登録履歴Ｈを記録しておくと、過去に登録処理が実行されているか否かを判定する上で有用である。すなわち、同一のグループに所属するアプリケーションプログラムに関して、最初に登録処理が行われたときに、その事実を登録履歴Ｈとして記録しておくようにすれば、以後、当該グループに所属するいずれかのアプリケーションプログラムが起動されたときの起動処理において、当該起動中のアプリケーションプログラムと同一のグループに所属する別のプログラムによって記録された登録履歴に基づいて、過去に登録処理が実行されたか否かを判定する処理を行うことができるようになる。
【０２３５】
また、これまで述べてきた実施形態では、バージョンの異なる同一のアプリケーションプログラムについては、同一のプログラムとする取扱いを行い、新バージョンのアプリケーションプログラムを起動した際に、旧バージョンのアプリケーションプログラムよって登録処理が実行されていた場合には、「過去に登録処理が実行されている」と判断して、提示処理もしくは確認処理を実行するようにしていた。別言すれば、起動されたアプリケーションプログラムに対して旧バージョンの関係にあるアプリケーションプログラムによって固有情報が所定の場所に格納されているか否かに基づいて、過去に登録処理が実行されたか否かを判定する処理が行われていた。ここで述べるグループ定義の概念を導入すれば、バージョンの異なる個々のアプリケーションプログラムを、同一グループに所属する別なアプリケーションプログラムとして取り扱うような運用も可能である。
【０２３６】
たとえば、上述した登録履歴Ｈを利用する場合、新旧両バージョンのアプリケーションプログラムを、互いに異なるプログラムとして取り扱うようにしても、両者を同一のグループに所属するプログラムとして定義しておけば、起動中の新アプリケーションプログラムに対して旧バージョンの関係にあるアプリケーションプログラムによって記録された登録履歴Ｈに基づいて、過去に登録処理が実行されたか否かを判定する処理を行うことができる。
【０２３７】
複数のアプリケーションプログラムについてのグループ定義方法としては、たとえば、同一のプログラム提供者から提供されたプログラムについては同一のグループとする、というような定義方法が最も実用的である。同一のプログラム提供者から提供されるアプリケーションプログラムであれば、組み込まれる登録処理ルーチン、提示処理ルーチン、確認処理ルーチン等を共通化することが可能なので、固有情報のデータフォーマットや、その格納場所を共通化することができ、同一のグループとして取り扱っても何ら支障は生じない。
【０２３８】
複数のプログラムが同一のグループに所属するか否かは、たとえば、個々のアプリケーションプログラムに付与される何らかのデジタルサインに基づいて決定すればよい。たとえば、上例のように、同一のプログラム提供者から提供されたプログラムについては同一のグループとする、というようなグループ定義を行う場合は、個々のプログラム提供者名を示すデジタルサインがグループ識別子としての機能を果たすことになる。
【０２３９】
もちろん、本発明を実施するにあたり、固有情報の標準フォーマットや共通の格納場所を予め仕様として定めておけば、異なるプログラム提供者から提供されたプログラムを同一のグループに所属させても問題は生じない。したがって、ユーザにグループ定義を任意に行わせることも可能である。たとえば、ユーザが同一のフォルダ内にインストールした複数のアプリケーションプログラムを同一のグループとして取り扱うこともできる。その他、同一のコンピュータにインストールされた全アプリケーションプログラムを、常に同一のグループとして取り扱う、という運用も可能であるし、特定のサブルーチンプログラムが組み込まれているアプリケーションプログラムを同一のグループとして取り扱う、という運用も可能である。
【０２４０】
＜＜＜  §７．  方法発明としての把握  ＞＞＞
最後に、本発明をアプリケーションプログラムの実行方法として把握した場合の説明を行う。
【０２４１】
＜７−１．提示処理を行う実施形態＞
図２０は、§２で述べた基本的な実施形態に対応するアプリケーションプログラムの実行方法の手順を示す流れ図である。図示のとおり、この手順は、登録有無判定段階Ｓ３１，提示処理段階Ｓ３３，登録処理段階Ｓ３４，主処理段階Ｓ３５という４つの段階によって構成される。いずれの段階も、パソコン、スマートフォン、電子タブレット等のコンピュータによって実行される段階である。以下、これらの各段階が、すべて同一のコンピュータによって実行されるケースについて説明する。
【０２４２】
登録有無判定段階Ｓ３１は、コンピュータが、特定のアプリケーションプログラムに対する起動指示を受けたときに、過去に当該特定のアプリケーションプログラムに関する登録処理段階が実行されているか否かを判定する段階である。具体的には、これまでの実施例でも説明したとおり、特定の格納場所に固有情報もしくは登録履歴が格納されているか否かに基づいて判定を行うようにすればよい。
【０２４３】
ステップＳ３２は、この登録有無判定段階Ｓ３１における判定結果に基づく分岐処理である。すなわち、登録有無判定段階Ｓ３１において肯定的判定がなされたときには、ステップＳ３２からステップＳ３３へと進み提示処理段階が実行され、否定的判定がなされたときには、ステップＳ３２からステップＳ３４へと進み登録処理段階が実行される。ここに示す実施形態の場合、このコンピュータにおいて当該特定のアプリケーションプログラムを初めて起動すると、ステップＳ３４の登録処理段階が行われ、当該特定のアプリケーションプログラムを２回目以降に起動すると、ステップＳ３３の提示処理段階が行われる。
【０２４４】
そして、ステップＳ３４の登録処理段階では、ユーザの指示に基づいて固有情報を入力し、当該特定のアプリケーションプログラムに対応づけて、入力した固有情報を所定の格納場所に格納する処理が行われる。一方、ステップＳ３３の提示処理段階では、当該格納場所に当該特定のアプリケーションプログラムに対応づけて格納されている固有情報を取り出し、取り出した固有情報もしくはこれに基づいて生成した派生情報をユーザに提示する処理が行われる。これらの各処理の詳細は、既に述べたとおりである。こうして、ステップＳ３４の登録処理段階もしくはステップＳ３３の提示処理段階が完了した後、ステップＳ３５の主処理段階において、当該特定のアプリケーションプログラム内の所定の主処理が実行される。
【０２４５】
ステップＳ３４の登録処理段階で、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを固有情報として利用することができ、ステップＳ３３の提示処理段階で、文字列、記号、画像、動画、音声もしくは振動またはこれらの組み合わせを固有情報もしくは派生情報として利用することができる点も、既に述べたとおりである。実用上は、前述したとおり、ステップＳ３４の登録処理段階で、ユーザの指示に基づいて固有情報の入力を行う際に、当該固有情報が当該特定のアプリケーションプログラムの正当性を確認するために、次回以降の起動時にステップＳ３３で実行される提示処理段階で利用される情報である旨の説明メッセージを提示するのが好ましい。
【０２４６】
なお、§６−２において述べた監視プログラムを用いる変形例（図１９参照）を実施する場合には、ステップＳ３４における登録処理段階およびステップＳ３３における提示処理段階の処理動作を監視する監視プログラムを用意し、この監視プログラムを実行することにより、登録処理段階で所定の格納場所に格納された固有情報を、別な格納場所にもコピーして格納する照合準備段階と、提示処理段階で提示された固有情報もしくは派生情報と、上記別な格納場所に格納されている固有情報もしくはこれに基づいて生成した派生情報とが合致するか否かを照合し、照合結果をユーザに報知する照合処理段階と、を更に行うようにすればよい。
【０２４７】
また、図２０には、同一のコンピュータによって全段階を実施する手順が示されているが、登録処理段階と提示処理段階とは、異なるコンピュータによって実施してもかまわない。前述したとおり、本発明は、パソコン、スマートフォン、電子タブレットなど、様々な電子機器として普及しているコンピュータを利用して実施することを想定している。そして、最近では、同一のユーザが、複数の電子機器を利用するケースも珍しくなくなってきており、複数の電子機器間で共通して利用可能な同一のアプリケーションプログラムも提供されている（もちろん、アプリケーションとして同一という意味であって、プログラム自体は、個々の電子機器用に開発された個別のプログラムになっている）。
【０２４８】
このような事情を考慮すると、登録処理段階と提示処理段階とは、必ずしも同一のコンピュータ（電子機器）で行う必要はない。たとえば、パソコン、スマートフォン、電子タブレットを所有するユーザが、これら３台のコンピュータに同一のアプリケーションプログラムをそれぞれインストールして利用する形態を考えてみよう。この場合、当該ユーザが、パソコンにインストールされた当該アプリケーションプログラムの初回起動時に登録処理を行い、所定の共通格納場所（たとえば、ネットワークを介して接続される特定のサーバ装置内の格納場所）に固有情報を格納する作業を行っておけば、スマートフォンおよび電子タブレットについては、登録処理を省略することが可能である。
【０２４９】
すなわち、上例の場合、スマートフォンや電子タブレットで当該アプリケーションプログラムが起動されたときには、登録有無判定段階において、既に、当該アプリケーションプログラムに関する登録処理が別のコンピュータ（パソコン）により実行されている、と判断して提示処理段階が行われるようにすればよい。もちろん、この提示処理段階では、パソコンの登録処理で利用された共通格納場所から固有情報を取り出して提示する処理が行われることになる。
【０２５０】
このような実施形態を採れば、複数のコンピュータを所有するユーザは、特定のアプリケーションプログラムに関して、いずれか１つのコンピュータ（以下、登録用コンピュータという）で登録処理を実行しておけば、他のコンピュータ（以下、実行用コンピュータという）での登録処理を省略することができるので、個々のコンピュータについて個別に登録作業を繰り返す煩雑さから解放されることになる。
【０２５１】
結局、上記実施形態を採用する場合は、登録用コンピュータが、ユーザの指示に基づいて固有情報を入力し、特定の実行用コンピュータと特定のアプリケーションプログラムとの組み合わせに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、上記特定の実行用コンピュータが、上記特定のアプリケーションプログラムに対する起動指示を受けたときに、上記格納場所に上記特定の実行用コンピュータと上記特定のアプリケーションプログラムとの組み合わせに対応づけて格納されている固有情報を取り出し、取り出した固有情報もしくはこれに基づいて生成した派生情報をユーザに提示する提示処理段階と、上記特定の実行用コンピュータが、上記提示処理段階を実行した後に、上記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、を行うようにすればよい。
【０２５２】
＜７−２．確認処理を行う実施形態＞
続いて、§５で述べたコンピュータの使用環境についての確認処理を行う実施形態に対応するアプリケーションプログラムの実行方法の手順を、図２１の流れ図を参照しながら説明する。図示のとおり、この手順は、登録有無判定段階Ｓ４１，確認処理段階Ｓ４３，登録処理段階Ｓ４４，主処理段階Ｓ４６という４つの段階によって構成される。いずれの段階も、パソコン、スマートフォン、電子タブレット等のコンピュータによって実行される段階である。以下、これらの各段階が、すべて同一のコンピュータによって実行されるケースについて説明する。
【０２５３】
登録有無判定段階Ｓ４１は、コンピュータが、特定のアプリケーションプログラムに対する起動指示を受けたときに、過去に当該特定のアプリケーションプログラムに関する登録処理段階が実行されているか否かを判定する段階である。具体的には、これまでの実施例でも説明したとおり、特定の格納場所に固有情報もしくは登録履歴が格納されているか否かに基づいて判定を行うようにすればよい。
【０２５４】
ステップＳ４２は、この登録有無判定段階Ｓ４１における判定結果に基づく分岐処理である。すなわち、登録有無判定段階Ｓ４１において肯定的判定がなされたときには、ステップＳ４２からステップＳ４３へと進み確認処理段階が実行され、否定的判定がなされたときには、ステップＳ４２からステップＳ４４へと進み登録処理段階が実行される。ここに示す実施形態の場合、このコンピュータにおいて当該特定のアプリケーションプログラムを初めて起動すると、ステップＳ４４の登録処理段階が行われ、当該特定のアプリケーションプログラムを２回目以降に起動すると、ステップＳ４３の確認処理段階が行われる。
【０２５５】
ステップＳ４４の登録処理段階では、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、当該特定のアプリケーションプログラムに対応づけて、入力した固有情報を所定の格納場所に格納する処理が行われる。一方、ステップＳ４３の確認処理段階では、当該格納場所に当該特定のアプリケーションプログラムに対応づけて格納されている固有情報を取り出し、取り出した固有情報と当該コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する処理が行われる。これらの各処理の詳細は、既に§５で述べたとおりである。
【０２５６】
ここで、ステップＳ４４の登録処理段階が完了した後、もしくは、ステップＳ４３の確認処理段階を実行して、ステップＳ４５において合致が確認された場合には、ステップＳ４６において、当該特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階が実行される。一方、ステップＳ４５において合致が確認されなかった場合には、主処理が実行されることなしに、当該特定のアプリケーションプログラムは終了する。
【０２５７】
ステップＳ４４の登録処理段階で、ユーザの指示に基づいて、特定の方角を含む固有情報を入力し、これを所定の格納場所に格納し、ステップＳ４３の確認処理段階で、当該固有情報に含まれている特定の方角と、コンピュータに備わっている方位センサが検出した当該コンピュータの地理的な向きと、が合致するか否かを確認し、確認結果をユーザに報知する処理を行うことが可能な点は、既に述べたとおりである。
【０２５８】
また、ステップＳ４４の登録処理段階で、ユーザの指示に基づいて、特定の角度を含む固有情報を入力し、これを所定の格納場所に格納し、ステップＳ４３の確認処理段階で、当該固有情報に含まれている特定の角度と、コンピュータに備わっている加速度センサが検出した当該コンピュータの姿勢を示す角度と、が合致するか否かを確認し、確認結果をユーザに報知する処理を行うことが可能な点も、既に述べたとおりである。
【０２５９】
実用上は、前述したとおり、ステップＳ４４の登録処理段階で、ユーザの指示に基づいて固有情報の入力を行う際に、当該固有情報が当該特定のアプリケーションプログラムの正当性を確認するために、次回以降の起動時にステップＳ４３で実行される確認処理段階で利用される情報である旨の説明メッセージを提示するのが好ましい。
【０２６０】
また、図２１には、同一のコンピュータによって全段階を実施する手順が示されているが、§７−１で述べた実施形態と同様に、登録処理段階と確認処理段階とは、異なるコンピュータによって実施してもかまわない。たとえば、上例と同様に、パソコン、スマートフォン、電子タブレットという３台のコンピュータを所有するユーザが、これら３台に同一のアプリケーションプログラムをそれぞれインストールして利用する場合、当該ユーザが、パソコンにインストールされた当該アプリケーションプログラムの初回起動時に登録処理を行い、所定の共通格納場所（たとえば、ネットワークを介して接続される特定のサーバ装置内の格納場所）にコンピュータの使用環境に関する固有情報を格納する作業を行っておけば、スマートフォンおよび電子タブレットについては、登録処理を省略することが可能である。
【０２６１】
このような実施形態を採用する場合は、登録用コンピュータが、ユーザの指示に基づいてコンピュータの使用環境に関する固有情報を入力し、特定の実行用コンピュータと特定のアプリケーションプログラムとの組み合わせに対応づけて、入力した固有情報を所定の格納場所に格納する登録処理段階と、上記特定の実行用コンピュータが、上記特定のアプリケーションプログラムに対する起動指示を受けたときに、上記格納場所に上記特定の実行用コンピュータと上記特定のアプリケーションプログラムとの組み合わせに対応づけて格納されている固有情報を取り出し、取り出した固有情報と上記特定の実行用コンピュータの使用環境とが合致するか否かを確認し、確認結果をユーザに報知する確認処理段階と、上記特定の実行用コンピュータが、上記確認処理段階を実行して合致が確認された場合に、上記特定のアプリケーションプログラム内の所定の主処理を実行する主処理段階と、を行うようにすればよい。
【０２６２】
＜７−３．いくつかの変形例＞
以上、本発明をアプリケーションプログラムの実行方法として把握した場合について、§７−１では、提示処理を行う実施形態を説明し、§７−２では、確認処理を行う実施形態を説明した。ここでは、これらの実施形態に適用可能な変形例を説明する。
【０２６３】
まず、上述したアプリケーションプログラムの実行方法においても、§６−３で述べたグループ定義を行う変形例が適用可能である。すなわち、登録処理段階で、同一のグループに所属する複数のアプリケーションプログラムについては、これら複数のアプリケーションプログラムに共通の固有情報を対応づけて格納する処理を行うようにすれば、ユーザは、個々のアプリケーションプログラムごとに登録作業を行う煩雑さから解放される。
【０２６４】
また、登録処理段階で固有情報を格納する格納場所として、§４で述べたように、ネットワークを介して接続されたサーバ装置を利用することも可能である。すなわち、登録処理段階を実行中のコンピュータに対してネットワークを介して接続されたサーバ装置を格納場所として固有情報を格納した場合、提示処理段階もしくは確認処理段階では、当該サーバ装置に格納されている固有情報をネットワークを介して取り出すようにすればよい。特に、アプリケーションプログラムを実行する実行用コンピュータとは別なコンピュータを登録用コンピュータとして利用して登録処理段階を行う実施形態の場合、サーバ装置内の特定の格納場所を複数のコンピュータについての共通格納場所として利用すると便利である。
【０２６５】
この場合、固有情報は必ずしも単一のサーバ装置に格納する必要はなく、複数のサーバ装置に分散させて格納するようにしてもかまわない。たとえば、登録すべき固有情報を複数ｎ個の部分情報に分割し、これらを複数ｎ箇所のサーバ装置に分散して格納するようにしても、分割方法および分散した格納先を登録履歴として残しておけば、提示処理段階もしくは確認処理段階では、この登録履歴に基づいて、分散格納されていたｎ個の部分情報を取り出して元の固有情報を復元して利用することができる。このように固有情報を分割し、複数のサーバ装置に分散して格納するようにすると、固有情報の秘匿性が向上するメリットが得られる。
【０２６６】
なお、登録処理段階は、必ずしも当該登録処理の対象となるアプリケーションプログラム内の登録処理ルーチンを用いて実行する必要はなく、任意のアプリケーションプログラムを利用して登録処理を実行することが可能である。たとえば、上例のように、ネットワークを介して接続されたサーバ装置を格納場所として利用する場合であれば、登録用コンピュータにインストールされたＷｅｂブラウザプログラムもしくは電子メールプログラムを利用して、登録処理段階を実行することも可能である。
【０２６７】
たとえば、Ｗｅｂブラウザプログラムを利用して登録を行う場合は、所定のＷｅｂページに図６に例示するような登録用画面を表示し、当該Ｗｅｂページ上で、ユーザに任意の固有情報を入力してもらえばよい。一方、電子メールプログラムを利用して登録を行う場合は、ユーザに、予め定められた所定の書式に従って固有情報が記載された電子メールを送信してもらい、当該電子メールを受信したサーバ装置が、当該電子メールから、上記書式に応じて必要な情報を取り出し、これを格納場所に格納する処理を行えばよい。
【０２６８】
もちろん、コンピュータ内のＯＳプログラムに登録処理段階を実行させる機能を持たせておくことも可能である。ＯＳプログラムは、個々のアプリケーションプログラムのインストール処理を管理する機能を有しているので、ＯＳプログラムに登録処理段階を実行させる運用を採る場合は、コンピュータにアプリケーションプログラムがインストールされたときに、当該アプリケーションプログラムに対応づけた固有情報を所定の格納場所に格納する登録処理段階が実行されるようにすることも可能である。
【符号の説明】
【０２６９】
１０：プログラム本体部
２０：リソースデータ
３０：補助ファイル
４０：署名情報
５０：偽のプログラム
１００，１００Ａ：コンピュータ
１０１：文字列入力欄
１０２：文字列表示欄
１０３：確認ボタン
１０４：方角選択欄
１０５：方角登録欄
１０６：コンパス画像表示欄
１０７：確認ボタン
１０８：起動中表示
１０９Ａ，１０９Ｂ：画像表示欄
１１１：登録ボタン
１１２：正常判定結果表示
１１３：異常判定結果表示
１５０：方位センサ
１６０：加速度センサ
２００：ＯＳプログラム
２５０：格納場所
２６０：外部メモリ
３００，３０５，３０８：アプリケーションプログラム
３１０，３１５，３１８：起動処理ルーチン
３２０，３２５：主処理ルーチン
３３０，３３５：登録処理ルーチン
３４０：提示処理ルーチン
３４５：確認処理ルーチン
３５０：サイズ確認ルーチン
４００：サーバ装置
５００：監視プログラム
５５０：別な格納場所
Ａ〜Ｃ，Ｃ′，Ｃ''：アプリケーションプログラム
Ｅ：使用環境
Ｈ：登録履歴
Ｉ：識別情報
Ｎ：インターネット
Ｐ１〜Ｐ４：固有情報
Ｑ３：派生情報
Ｒ：確認結果
Ｓ１１〜Ｓ４６：流れ図の各ステップ
Ｓｈ：水平面
Ｖ：照合結果
θ：水平面に対する傾斜角度
【図１】
2015090640.tif 000003
【図２】
2015090640.tif 000004
【図３】
2015090640.tif 000005
【図４】
2015090640.tif 000006
【図５】
2015090640.tif 000007
【図６】
2015090640.tif 000008
【図７】
2015090640.tif 000009
【図８】
2015090640.tif 000010
【図９】
2015090640.tif 000011
【図１０】
2015090640.tif 000012
【図１１】
2015090640.tif 000013
【図１２】
2015090640.tif 000014
【図１３】
2015090640.tif 000015
【図１４】
2015090640.tif 000016
【図１５】
2015090640.tif 000017
【図１６】
2015090640.tif 000018
【図１７】
2015090640.tif 000019
【図１８】
2015090640.tif 000020
【図１９】
2015090640.tif 000021
【図２０】
2015090640.tif 000022
【図２１】
2015090640.tif 000023