(57)【要約】【課題】プログラムのセキュリティを向上する。【解決手段】更新可能な第１パラメータを含む第１プログラムを保護する方法であって、プロセッサが、符号化プログラムに従って、前記第１プログラム及び前記第１パラメータを更新する第１更新プログラムを、第２パラメータを用いて符号化し、前記プロセッサが、復号プログラムに従って、符号化された前記第１プログラム及び符号化された前記第１更新プログラムを、前記第２パラメータを用いて復号し、前記プロセッサが、第２更新プログラムに従って、前記復号プログラムを更新する。【選択図】図２
2018026651.tif 000002
【特許請求の範囲】
【請求項１】
更新可能な第１パラメータを含む第１プログラムを保護する方法であって、
プロセッサが、符号化プログラムに従って、前記第１プログラム及び前記第１パラメータを更新する第１更新プログラムを、第２パラメータを用いて符号化し、
前記プロセッサが、復号プログラムに従って、符号化された前記第１プログラム及び符号化された前記第１更新プログラムを、前記第２パラメータを用いて復号し、
前記プロセッサが、第２更新プログラムに従って、前記復号プログラムを更新する、方法。
【請求項２】
請求項１に記載の方法であって、
前記プロセッサが、前記第２更新プログラムに従って、前記符号化プログラムを更新する、方法。
【請求項３】
請求項１に記載の方法であって、
前記プロセッサが、前記第１パラメータの更新に同期して前記復号プログラムを更新する、方法。
【請求項４】
請求項１、２又は３に記載の方法であって、
前記プロセッサが、前記第１パラメータと更新用データとに基づき、前記第１パラメータを更新し、
前記プロセッサが、前記第１パラメータの更新におけるデータと前記復号プログラムとに基づき、前記復号プログラムを更新する、方法。
【請求項５】
請求項４に記載の方法であって、
前記プロセッサが、前記更新用データを、ネットワークを介して受信し、
前記プロセッサが、前記更新用データの正当性を、前記更新用データと共に受信した認証用データを使用してチェックし、
前記更新用データが正当である場合に、
前記プロセッサが、前記第１パラメータ及び前記復号プログラムを更新する、方法。
【請求項６】
請求項１から５のいずれか一項に記載の方法であって、
前記第１パラメータは、前記第１プログラムが暗号通信を行うための鍵であり、
前記復号プログラムは前記第２パラメータを含み、
前記方法は、
前記プロセッサが、前記復号プログラムに含まれる前記第２パラメータを更新することによって、前記復号プログラムを更新する、方法。
【請求項７】
請求項１から６のいずれか一項に記載の方法であって、
前記プロセッサは端末に含まれ、
前記方法は、
前記プロセッサが、前記端末にネットワークを介して接続されたサーバから、初期値の前記第２パラメータによって符号化された前記第１プログラムをダウンロードし、
前記プロセッサが、ダウンロードされた前記第１プログラムを前記初期値によって復号し、
前記プロセッサが、前記初期値から前記端末内の情報から生成した値に、前記第２パラメータを更新し、
前記プロセッサが、更新された前記第２パラメータによって前記第１プログラムを符号化して、前記端末の記憶装置に格納する、方法。
【請求項８】
更新可能な第１パラメータを含む第１プログラムを保護するプログラムであって、
計算機に、
前記第１プログラム及び前記第１パラメータを更新する第１更新プログラムを、第２パラメータを用いて符号化する符号化機能と、
前記符号化機能により符号化された、前記第１プログラム及び前記第１更新プログラムを、前記第２パラメータを用いて復号する復号機能と、
前記復号機能を実現するための復号プログラムを更新する、第２更新機能と、
を実現させるためのプログラム。
【請求項９】
更新可能な第１パラメータを含む第１プログラムを保護する装置であって、
プログラムを格納するメモリと、
前記メモリに格納されたプログラムに従って動作するプロセッサと、を含み、
前記プロセッサは、
符号化プログラムに従って、前記第１プログラム及び前記第１パラメータを更新する第１更新プログラムを、第２パラメータを用いて符号化し、
復号プログラムに従って、符号化された前記第１プログラム及び符号化された前記第１更新プログラムを、前記第２パラメータを用いて復号し、
第２更新プログラムに従って、前記復号プログラムを更新する、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを難読化して不正な解析を防止するための技術に関する。
【背景技術】
【０００２】
モバイル端末の普及とＷｅｂサービスの高度化に伴い、サービスの種類も多様化している。特に近年では、モバイル決済のように、従来ＡＴＭや窓口、専用端末を経由していた支払や送金に関するサービスをモバイル端末上で実行するサービスが流行の兆しを見せている。
【０００３】
このようなサービスを利用する際には、ユーザは、専用のアプリケーションプログラム（アプリと呼ぶ）を端末にインストールし、そのアプリを介してサービスを利用するのが一般的である。また、サービスの利用に際してユーザ認証（もしくは端末認証）を行う必要があるが、このとき、ユーザ（もしくは端末）のみが持つ秘密情報が使用される。
【０００４】
このような処理は、ＳＩＭチップ上の領域内で行われることが望ましい。しかし、上述のように、ほとんどのケースにおいて、メモリ上で動作するアプリが秘密情報を取り扱う。これは、サービス用アプリをインストールするためには、ＳＩＭチップの記憶容量や処理能力が不足していることが理由である。
【０００５】
一方で、モバイル端末のセキュリティの観点では、端末の１０％程度がマルウェアに感染しているという現実があり、金融サービスに特化したマルウェアの存在も確認されている。したがって、アプリは、ユーザ認証や通信路保護で必要となる秘密情報（秘密鍵や生体情報）を保護することが重要である。
【０００６】
上述のような課題に対する対策として、秘密情報をそのまま保持せず、読み取りを困難にする難読化技術が知られている。そこで、アプリと鍵のセットを難読化することで、秘密情報の漏えいリスクを軽減することができる。難読化については、既に多くの方式が検討されている。例えば非特許文献１は、プログラムを暗号化して解析を困難にする方法を開示している。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Christian Collberg and Jasvir Nagra，Surreptitious software，Addison-Wesley, 359ページ, 2010.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
例えば、アプリがサービス利用のための暗号機能を内蔵しているとする。端末にダウンロードされるアプリは同一であるため、デフォルトで設定されている秘密鍵は異なる端末でも同一である。すなわち、攻撃者は、一つの端末の解析結果を別の端末に適用でき、サービスに対する攻撃が容易である。
【０００９】
また、サービス利用のための秘密鍵は定期的に更新する必要がある。難読化されたアプリが、暗号化されたアプリ及び暗号化されたアプリを復号するモジュールを含む場合、秘密鍵更新の前後の難読化されたアプリの差分を取ると、差分が無い部分が現れる。これは、上記復号するモジュールを含む。すなわち、アプリが使用する鍵の更新により、暗号化されたアプリを復号する復号モジュールを特定することが可能であり、攻撃が容易である。
【課題を解決するための手段】
【００１０】
本発明の代表的な一例は、更新可能な第１パラメータを含む第１プログラムを保護する方法であって、プロセッサが、符号化プログラムに従って、前記第１プログラム及び前記第１パラメータを更新する第１更新プログラムを、第２パラメータを用いて符号化し、前記プロセッサが、復号プログラムに従って、符号化された前記第１プログラム及び符号化された前記第１更新プログラムを、前記第２パラメータを用いて復号し、前記プロセッサが、第２更新プログラムに従って、前記復号プログラムを更新する。
【発明の効果】
【００１１】
本発明の一態様によれば、プログラムのセキュリティを向上できる。
【図面の簡単な説明】
【００１２】
【図１】実施例１におけるシステム構成を表す図である。
【図２】実施例１における鍵初期化及び更新プロトコルを表すシーケンス図である。
【図３】実施例１における機器構成を表す図である。
【図４】実施例１におけるアプリのダウンロードから端末への格納までの処理を表すフローチャートである。
【図５】実施例１において、アプリを難読化する技術の概要を説明する図である。
【図６】実施例１において、難読化された暗号通信機能を含むアプリの機能構成図である。
【図７】実施例１において、難読化された暗号通信機能を含むアプリの機能構成図の別例である。
【図８】図７の機能構成の場合に、難読化されたアプリの暗号通信・認証機能に用いる秘密鍵の更新を行うプロセスを説明するフローチャートである。
【図９】実施例２におけるシステム構成を表す図である。
【図１０】実施例２における鍵初期化及び更新プロトコルを表すシーケンス図である。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。以下において、ダウンロードしたアプリケーションプログラム（アプリとも呼ぶ）を難読化してマルウェア等による不正解析を防止するための技術が開示される。
【実施例１】
【００１４】
図１は本実施例のシステム構成を示す。本システムは、ユーザ１０１が持つユーザ端末１０２、アプリの配信を行うアプリ配信サーバ１０３、アプリを介してユーザにサービスを提供するサービスプロバイダ１０４を含む。ここでは、サービスプロバイダ１０４は、１又は複数のサーバを示す。サービスプロバイダ１０４は、サービスの利用に必要となるアプリの配信をアプリ配信サーバ１０３に委託する。
【００１５】
ユーザは、サービスプロバイダ１０４が提供するサービスを利用する際に、所有するユーザ端末１０２からアプリ配信サーバ１０３にアクセスし、アプリをダウンロードする。その後、インストールしたアプリを介して、サービスを利用する。
【００１６】
通常、アプリ配信サーバ１０３からのアプリのダウンロードは、通信途上での改ざん等を防止するため、暗号通信を利用する。この通信は一時的なものであり、アプリ配信サーバ１０３は、端末１０２の認証を行わないことが多い。
【００１７】
一方、サービスプロバイダ１０４は、サービスの提供時に、ユーザ端末１０２の所有者が正当なサービス利用者であることを確認する。ユーザ端末１０２は、何らかの秘密情報を所持していることを証明し、正当なサービス利用者であることをサービスプロバイダ１０４に示す。
【００１８】
ユーザ端末１０２は、正規のユーザ端末であることをサービスプロバイダ１０４に証明するための、パスワード、秘密鍵、もしくは一時的に取り込まれたユーザ生体情報などの秘密情報１０５を格納している。ユーザ端末１０２は、秘密情報１０５を保護するための難読化に用いられる難読化用パラメータ１０６も保持する。難読化は、難読化用パラメータ１０６を使用してアプリを符号化し、解析を困難にする。難読化及び難読化用パラメータ１０６の詳細は後述する。
【００１９】
図２は、本実施例の鍵初期化及び鍵更新のプロトコルを示すシーケンス図である。以下、図２を参照してプロトコルを説明する。サービスプロバイダ１０４は、アプリに対して固定のパラメータを用いて難読化処理を施し、アプリと難読化機能とを組み合わせる（２０１）。
【００２０】
後述するように、難読化されたアプリは、難読化のために符号化されたアプリと、難読化（アプリの符号化／復号）ためのプログラム（の少なくとも一部）を含んで構成される。なお、以下の記載において、特に言及のない場合、「機能」はプログラム（プログラムモジュール）示す。難読化は、アプリを保護するために符号化する。また、以下に説明する例において、難読化用パラメータは、難読化用秘密鍵とする。難読化は、鍵を使用する暗号化と異なる符号化を使用することができる。
【００２１】
次に、サービスプロバイダ１０４は、アプリ配信サーバ１０３に対してアプリ登録要求を送信し、難読化したアプリを、アプリ配信サーバ１０３に登録する（２０２）。なお、サービスプロバイダ１０４は、アプリを、難読化することなく、アプリ配信サーバ１０３に登録してもよい。
【００２２】
次に、以下のように、難読化されたアプリが、アプリ配信サーバ１０３からユーザ端末１０２にダウンロードされる。まず、ユーザ端末１０２はアプリ配信サーバ１０３に対してアプリダウンロード要求を送信する（２０３）。さらに、アプリ配信サーバ１０３は、アプリダウンロード要求を受信すると、ユーザ端末１０２に、登録されている難読化されたアプリを送信する（２０４）。
【００２３】
次に、ユーザ端末１０２は、ダウンロードされたアプリのためのパラメータを初期化する。特に、ユーザ端末１０２は、端末固有情報、システムログ、通信ログなどの初期化用パラメータを入力として難読化用秘密鍵１０６を生成し、難読化処理を施す（２０５）。
【００２４】
本例において、難読化用秘密鍵１０６は、アプリを暗号化／復号するための鍵である。ユーザ端末１０２は、ダウンロードされたアプリを上記固定のパラメータを使用して復号し、さらに、生成した難読化用秘密鍵１０６を使用してアプリを暗号化する。ユーザ端末１０２は、暗号化されたアプリと難読化機能とを含む、難読化されたアプリのイメージデータを生成し、記憶装置に格納する。固定のパラメータは、例えば、ユーザ端末１０２に予め設定されている、又は、アプリ配信サーバ１０３から送信される。
【００２５】
次に、以下のように、ユーザ登録が実行される。まず、ユーザ１０１は、アプリをインストールしたユーザ端末１０２を介して、サービスプロバイダ１０４にユーザ登録を行う（２０６）。ユーザ端末１０２とサービスプロバイダ１０４とは、通信路を保護するための鍵を共有する（２０７）。さらに、ユーザ端末１０２は、共有した鍵データ及び／又は他のデータを用いて、難読化用秘密鍵１０６を更新する（２０８）。
【００２６】
ユーザ登録の後、ユーザ１０１は、ユーザ端末１０２を介してサービスプロバイダ１０４と暗号通信を行い、サービスを利用する（２０９）。
【００２７】
以下のようにサービス利用のための鍵及び難読化のための鍵が更新される。まず、ユーザ端末１０２は、サービスプロバイダ１０４と通信を行い、通信路保護（サービス利用）のための秘密鍵を更新する（２１０）。さらに、ユーザ端末１０２は、更新した鍵データ及び／又は他のデータを用いて、難読化用秘密鍵１０６を更新する（２１１）。
【００２８】
ユーザ端末１０２は、更新した難読化用秘密鍵１０６を使用して、アプリに対して難読化処理を実行する。具体的には、ユーザ端末１０２は、更新した難読化用秘密鍵１０６を使用してアプリを暗号化し、暗号化されたアプリと難読化機能とを組み合わせて、難読化されたアプリのイメージデータを生成し、記憶装置に格納する。イメージデータは、実行プログラム又はファイルである。
【００２９】
図３は、本実施例に係るシステムのハードウェア構成を表す図である。アプリ配信サーバ１０３とユーザ端末１０２は、ネットワーク３２１を介して通信を行う。アプリ配信サーバ１０３及びユーザ端末１０２は、それぞれ、典型的な計算機構成を有することができる。サービスプロバイダ１０４のサーバも同様に、典型的な計算機構成を有することができる。
【００３０】
アプリ配信サーバ１０３は、通信装置３０１、プロセッサであるＣＰＵ３０２、メモリ３０３、及び記憶装置３０４を含む。記憶装置３０４は、難読化されたアプリ３０５を格納している。アプリは、端末１０２で実行可能なプログラムである。メモリ３０３は、ＣＰＵ３０２により実行されるプログラム及びプログラムに使用されるデータを格納する。ＣＰＵ３０２は、プログラムに従って動作することで、所定の手段として機能する。
【００３１】
ユーザ端末１０２は、通信装置３１１、プロセッサであるＣＰＵ３１２、メモリ３１３、記憶装置３１４を含む。メモリ３１３は、ＣＰＵ３１２により実行されるプログラム及びプログラムに使用されるデータを格納する。ＣＰＵ３１２は、プログラムに従って動作することで、所定の機能（プログラムではない）を実現する。
【００３２】
記憶装置３１４は、難読化されたアプリである、端末固有のアプリイメージ３１５を格納している。ユーザ端末１０２は、アプリ配信サーバ１０３からダウンロードしたアプリに難読化処理を実行し、難読化されたアプリ３１５を、記憶装置３１４に格納する。難読化処理は、初期化用パラメータ３１６を使用して、難読化用秘密鍵１０６を生成する。初期化用パラメータ３１６は、上述のように、例えば、端末固有情報、及び／又はシステムログ、通信ログである。
【００３３】
図４は、ユーザ端末１０２へアプリのダウンロード及び格納の処理を表すフローチャートである。まず、ユーザ端末１０２とアプリ配信サーバ１０３とは、暗号通信を確立する（４０１）。通信方式としては、例えばＴＬＳなどを用いればよい。次に、ユーザ端末１０２は、アプリ配信サーバ１０３にアプリダウンロード要求を送信する（４０２）。
【００３４】
アプリ配信サーバ１０３は、ユーザ端末１０２のアプリダウンロード要求に対して、対象の難読化されたアプリ３０５を端末１０２に送信する（４０３）。
【００３５】
ユーザ端末１０２は、ＭＡＣアドレスやＣＰＵ番号、ＯＳのバージョン情報などのユーザ端末１０２の固有の値や、現在の時刻情報、システムログなどを初期化用パラメータ３１６として、端末固有のアプリイメージ３１５を作成し（４０４）、作成されたアプリイメージ３１５を、記憶装置３１４に格納する（４０５）。
【００３６】
具体的には、ユーザ端末１０２は、初期化用パラメータ３１６を使用して、難読化用パラメータ１０６を生成する。ユーザ端末１０２は、難読化されたアプリ３０５における暗号化されたアプリを復号化し、さらに、難読化用パラメータ１０６によりアプリを暗号化する。ユーザ端末１０２は、暗号化されたアプリと難読化のための機能とを含むアプリイメージ３１５を生成する。
【００３７】
例えば、難読化されたアプリ３０５が、図６が示す例のように、難読化のための暗号化機能、復号機能及び鍵更新機能を含む場合、ユーザ端末１０２のインストーラは、初期化用パラメータ３１６を鍵更新機能に渡し、当該鍵更新機能が新たな難読化用パラメータ１０６を生成する。難読化されたアプリ３０５の復号機能及び暗号化機能が、それぞれ、アプリの復号及び暗号化を行う。
【００３８】
いずれかの機能が難読化されたアプリ３０５に含まれていない場合、インストーラがその代わりに処理を実行する。難読化されたアプリ３０５に含まれる難読化機能の構成に関わらず、インストーラがアプリイメージ３１５の生成のための全ての処理を実行してもよい。
【００３９】
なお、ユーザ端末１０２は、初期化用パラメータ３１６をＳＨＡ−２５６などのハッシュ関数に入力し、その出力を乱数生成器のシードとして用い、得られた乱数を用いてｄｌｌのメモリ配置のランダム化を実行してもよい。ユーザ端末１０２は、得られた乱数を秘密鍵として、アプリを暗号化してもよい。結果として得られたアプリイメージ３１５の実体は、端末ごとに異なるため、マルウェアによる攻撃感染リスクを軽減することができる。
【００４０】
また、ユーザ端末１０２は、初期化用パラメータとして、暗号通信における秘密鍵から導出される値を使用してもよい。例えば、ＤＨ（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）鍵共有を使用している場合、ＤＨ  ｅｘｐｏｎｅｎｔは端末のみが知っている秘密情報であるため、通信相手のサーバも初期化されたアプリを推定することはできない。
【００４１】
図５は、難読化のためのパッキング技術（アプリを暗号化することで、解析を困難にする技術）の概要を説明する図である。暗号化装置５０１は、アプリ５０５を暗号化する。暗号化装置５０１は、暗号化に用いられる難読化用秘密鍵（難読化用パラメータ）１０６を、図３を参照して説明したように、端末固有の値や、システム情報から生成してもよい。暗号通信を用いてアプリ５０５をダウンロードする場合には、暗号化装置５０１は、暗号通信のために用いる秘密情報から生成してもよい。
【００４２】
例えば、暗号通信のための鍵共有でＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵交換方式が使用されている場合に、ユーザ端末１０２が生成したＤＨ  ｅｘｐｏｎｅｎｔを難読化用秘密鍵１０６の生成に用いれば、暗号通信の相手も難読化用秘密鍵１０６の値を知ることが困難である。
【００４３】
端末固有のアプリイメージ３１５は、ブートローダ５１１、難読化用秘密鍵１０６を埋め込まれた復号機能５１２、そして難読化用秘密鍵１０６で暗号化されたアプリ５１３を含んで構成される。暗号化されたアプリ５１３は、パッキングされたデータである。復号機能５１２はプログラムモジュールである。
【００４４】
端末固有のアプリイメージ３１５が実行されると、まずブートローダ５１１が実行され、ブートローダ５１１は復号機能５１２を実行する。復号機能５１２は、暗号化されたアプリ５１３を復号し、ユーザ端末１０２のメモリ３１３上に展開する。復号が完了すると、復号機能５１２は復号されたアプリ５０５に処理を渡す。
【００４５】
図６は、パッキング技術を使用して難読化されたアプリの機能構成図である。アプリ５０５は、サービスを利用するためのサービス利用機能６０２に加えて、ユーザ端末１０２やユーザの認証を行うための暗号通信・認証機能６０３、鍵更新機能６０４、そして暗号通信や認証に用いる秘密鍵１０５を含む。
【００４６】
難読化されたアプリ３１５は、この他に、ブートローダ５１１、復号機能５１２、暗号化機能６１４、難読化用秘密鍵更新機能６１５、及びユーザ端末１０２の通信機能を介してデータを受け取る入力インタフェース（ＩＦ）６１６を含む。
【００４７】
難読化用秘密鍵更新機能６１５は、入力ＩＦ６１６を介して受信した暗号通信・認証機能６０３の秘密鍵更新用鍵データ６２１や端末のシステム情報、時刻情報６２２を外部入力として用いて、難読化用秘密鍵を更新する。難読化されたアプリ６１１が、その内部に通信ログを保持し、難読化用秘密鍵更新機能６１５は、その通信ログを鍵更新に用いてもよい。
【００４８】
図６においては、サービス利用機能６０２、暗号通信・認証機能６０３、鍵更新機能６０４、及び秘密鍵１０５がパッキングの対象であり、難読化用秘密鍵更新機能６１５はパッキング処理の対象外である。しかし、難読化用秘密鍵更新機能６１５はパッキング処理の対象であってもよい。鍵更新機能６０４が、難読化用秘密鍵更新機能６１５に代わって処理を実行してもよい。同様に、（難読化用秘密鍵１０６を含む）暗号化機能６１４も、パッキング処理の対象に含めてもよい。
【００４９】
図７は、鍵更新において外部から入力されたデータの正当性をチェックする機能を含むソフトウェア構成図である。難読化されたアプリ３１５は、図６に示す機能に加えて、入力データ認証機能７０１と出力ＩＦ７０２とを含む。入力データ認証機能７０１により、セキュリティを向上できる。入力データ認証機能７０１の動作の詳細は、図８を参照して説明する。
【００５０】
図８は、サービス利用のための鍵の更新のプロセスを説明するフローチャートである。具体的には、図８は、図７に示す構成において、難読化されたアプリ５１３の暗号通信・認証機能６０３に用いる秘密鍵１０５の更新を行うプロセスを説明するフローチャートである。
【００５１】
ユーザ端末１０２は、ネットワーク３２１から、暗号通信・認証機能６０３の秘密鍵更新用データ６２１を受信する（８０１）。秘密鍵更新用データ６２１は、時間経過において変化する。入力データ認証機能７０１は、受信した秘密鍵更新用データ６２１が、サービスプロバイダ１０４が生成した値であることを検証する（８０２）。検証の結果、受信したデータが不正であると判定した場合（８０２：不正）、入力データ認証機能７０１は、サービスプロバイダ１０４に対して認証失敗を通知し（８０３）、処理を終了する。
【００５２】
ステップ８０２において、受信データの正当性を確認するための一つの方法において、データの送信者（例えばサービスプロバイダ１０４）は、ユーザ端末１０２との間で共有した秘密鍵を用い、当該受信データのメッセージ認証子を送信データに付与する。また、電子署名を使用する方法のように、他の正当性確認方法を用いてもよい。正当性確認に用いる秘密鍵や公開鍵などの情報は、サービスプロバイダ１０４とユーザ端末１０２の間の通信路保護に用いる値を流用してもよい。
【００５３】
入力データ認証機能７０１が受信したデータが正当であると判定した場合（８０２：正当）、鍵更新機能６０４は、受信した秘密鍵更新用鍵データ６２１を使って新しい秘密鍵１０５を生成し、古い秘密鍵１０５と置き換える（８０４）。
【００５４】
難読化用秘密鍵更新機能６１５は、受信した秘密鍵更新用鍵データ６２１又はステップ８０４で生成された新しい秘密鍵１０５と、古い難読化用秘密鍵１０６とから、新しい難読化用秘密鍵を生成する（８０５）。
【００５５】
難読化用秘密鍵更新機能６１５は、ステップ８０５で生成した新しい難読化用秘密鍵１０６を用いて、暗号化機能６１４と復号機能５１２とを、更新する（８０６）。具体的には、難読化用秘密鍵更新機能６１５は、暗号化機能６１４及び復号機能５１２に含まれる難読化用秘密鍵１０６を更新する。
【００５６】
ステップ８０６で更新された暗号化機能６１４は、鍵更新機能６１５、秘密鍵１０５、サービス利用機能６０２、暗号通信・認証機能６０３を新しい難読化用秘密鍵１０６で暗号化し、記憶装置（３１４）に格納する（８０７）。
【００５７】
例えば、暗号化機能６１４は、メモリ３１３上の暗号化されていないアプリから、新しい秘密鍵１０６で暗号化されたアプリを生成し、イメージ３１５内の古い暗号化されアプリ５１３を置き換える。または、秘密鍵１０６の更新の前に、復号機能５１２はイメージ３１５内の古い暗号化されアプリ５１３を復号する。暗号化機能６１４は、復号されたアプリから、新しい秘密鍵１０６で暗号化されたアプリを生成し、イメージ３１５内の古い暗号化されアプリ５１３を置き換える。
【００５８】
難読化用秘密鍵更新機能６１５は、サービスプロバイダ１０４に対して、鍵更新成功を通知する（８０８）。
【００５９】
このように、難読化対象のプログラム（上記例において秘密鍵１０５）が更新されるときに、難読化用パラメータ（上記例において難読化用秘密鍵１０６）を更新することで、難読化対象のプログラムと難読化の復号機能との境界を読み取りにくくすることができる。
【００６０】
上述のように、ユーザ端末１０２は、外部からの入力情報とサービス利用のための秘密鍵１０５の更新命令とを受け取ると、アプリが保持する秘密鍵１０５を更新する。ユーザ端末１０２は、さらに、受信した入力情報を用いて、アプリを暗号化／復号するための難読化用秘密鍵１０６も更新する。
【００６１】
これにより、サービス利用のための鍵１０５の更新時に、難読化のための復号機能（モジュール）５１２を含む難読化されたアプリ３１５全体が更新され、モジュール差分を見ても難読化のための復号機能５１２が特定できず、攻撃がより困難になる。
【００６２】
難読化用秘密鍵１０６の更新は、サービス利用のための鍵１０５の更新と同期していなくてもよい、つまり、サービス利用のための鍵１０５の更新時に、常に難読化用秘密鍵１０６を更新しなくてもよい。難読化用秘密鍵１０６の更新は、サービス利用のための鍵１０５の更新におけるデータ（例えば鍵１０５又は暗号通信・認証機能の更新用鍵データ
６２１）と異なるデータを使用してもよい。鍵１０５の更新のデータを使用することで、高いセキュリティにおいて効率的に難読化のための復号機能５１２を更新できる。
【００６３】
また、ユーザ端末１０２は、端末固有情報をエントロピソースにして、アプリ用秘密情報（例えば、公開鍵ペアや乱数生成器のシード）の初期化と、難読化用秘密鍵の初期化を行う。端末固有情報をエントロピソースとした初期化により、端末ごとにユニークなモジュールのインスタンスが得られる。
【００６４】
図８のフローチャートにおいて、秘密鍵更新用データ６２１はネットワークを介して受信したデータのみで構成されている。これと異なり、難読化用秘密鍵の更新は、時間経過におい変化する、時刻情報やシステムログなどの情報６２２を用いてもよい。このような情報６２２を用いることで、難読化されたアプリは、ｂａｃｋｗａｒｄ  ｓｅｃｕｒｉｔｙを実現することができる。マルウェアが難読化されたアプリに関する情報を外部の攻撃者に送信したとしても、攻撃者による解析結果により、難読化されたアプリが将来的に解析されるリスクを軽減できる。
【００６５】
図８のフローチャートにおいて、秘密鍵更新用データ６２１、例えば認証用の秘密鍵は、サービスプロバイダ１０４が生成し、端末に送信する。鍵更新の方法は、これに限るものではない。例えば、ユーザ端末１０２は、新しい秘密鍵と公開鍵のペアを生成して、新しい公開鍵をサービスプロバイダ１０４に登録してもよい。ユーザ端末１０２を起点として、鍵更新が実行されてもよい。
【００６６】
上記システム構成において、サービスプロバイダ１０４がユーザ認証に関わる一切の処理を担当している。しかし、公開鍵証明書を発行する認証局が、公開鍵の更新処理を行い、さらに、難読化されたアプリ３１５を更新してもよい。
【００６７】
サービス利用時のセッション鍵は使い捨てであってもよい。この場合、セッション鍵は難読化対象外であってもよい。また、セッション鍵の確立時に、難読化されたアプリが更新されてもよい。
【００６８】
暗号通信を一時中断し、アプリを終了する場合に、セッション鍵が維持される場合がある。例えば、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）は、セッションをまたいで鍵を持ち続けるセッションリサンプションという仕組みを有する。
【００６９】
このような場合には、アプリの終了又は中断時に、保存する情報が更新されている場合には、ユーザ端末１０２は、難読化されたアプリを更新してもよい。暗号化機能６１４、難読化用秘密鍵更新機能６１５、入力データ認証機能７０１も、暗号化の対象としてもよい。
【００７０】
上記例は、鍵を更新することで復号機能と暗号化機能を更新する。これにより、効率的に高いセキュリティで復号機能と暗号化機能を更新できる。これと異なる方法、例えば、コードレイアウトを変更することにより、復号機能と暗号化機能を更新してもよい。
【実施例２】
【００７１】
図９は実施例２に係るシステムの構成を表す図である。本構成は、シングルサインオンのサービスを想定する。シングルサインオンのシステムは、複数のサービスを提供しており、図１のシステムを構成するユーザ１０１、ユーザ端末１０２、アプリ配信サーバ１０３、サービスプロバイダ９０１、９０２の他に、認証サーバ９０３が含まれる。認証サーバ９０３は、複数のサービスプロバイダ９０１、９０２に代わって、ユーザ認証を実行する。
【００７２】
図１０は、本発明の実施例２における鍵初期化及び更新プロトコルを表すシーケンス図である。以下、図１０を参照して、プロトコルを説明する。サービスプロバイダ（９０１（９０２））は、アプリに対して固定のパラメータを用いて難読化処理を施し、アプリと難読化機能とを組み合わせる（１００１）。
【００７３】
次に、サービスプロバイダ（９０１（９０２））は、アプリ配信サーバ１０３に対してアプリ登録要求を送信し、難読化したアプリを、アプリ配信サーバ１０３に登録する（１００２）。なお、サービスプロバイダ（９０１（９０２））は、アプリを、難読化することなく、アプリ配信サーバ１０３に登録してもよい。
【００７４】
次に、以下のように、難読化されたアプリが、アプリ配信サーバ１０３からユーザ端末１０２にダウンロードされる。まず、ユーザ端末１０２はアプリ配信サーバ１０３に対してアプリダウンロード要求を送信する（１００３）。さらに、アプリ配信サーバ１０３は、アプリダウンロード要求を受信すると、ユーザ端末１０２に、登録されている難読化されたアプリを送信する（１００４）。
【００７５】
次に、ユーザ端末１０２は、ダウンロードされたアプリのためのパラメータを初期化する。特に、ユーザ端末１０２は、端末固有情報、システムログ、通信ログなどの初期化用パラメータを入力として難読化用秘密鍵１０６を生成し、難読化処理を施す（１００５）。
【００７６】
次に、ユーザ１０１は、アプリをインストールしたユーザ端末１０２を介して、認証サーバ９０３にユーザ登録を行い、認証用の鍵を登録する（１００６）。次に、ユーザ端末１０２は、認証用の鍵及び／又は他のデータを用いて、難読化用秘密鍵１０６を更新する（１００７）。
【００７７】
次に、以下のように、サービスプロバイダに対するユーザ登録が実行される。まず、ユーザ１０１は、ユーザ端末１０２を介して認証サーバ９０３に接続し、ユーザ認証を行う（１００８）。認証サーバ９０３は、ユーザ端末１０２に対してチケットを発行する（１００９）。ユーザ端末１０２は、ステップ１００９で取得したチケットを使ってサービスプロバイダ９０１（９０２）にアクセスし、ユーザ登録を行う（１０１０）。
【００７８】
次に、以下のように、ユーザ１０１はサービスを利用する。まず、ユーザ１０１は、ユーザ端末１０２を介して認証サーバ９０３に接続し、ユーザ認証を行う。認証サーバ９０３は、ユーザ端末１０２に対してチケットを発行する（１０１１）。ユーザ端末１０２は、ステップ１０１２で取得したチケットを使ってサービスプロバイダ９０１（９０２）にアクセスし、サービスを利用する（１０１２）。
【００７９】
以下のようにサービス利用のための鍵及び難読化のための鍵が更新される。まず、ユーザ端末１０２は、認証サーバ９０３と通信を行い、通信路保護（サービス利用）のための秘密鍵を更新する（１０１３）。さらに、ユーザ端末１０２は、更新した鍵データ及び／又は他のデータを用いて、難読化用秘密鍵１０６を更新する（１０１４）。
【００８０】
なお、鍵更新は所定の期間ごとに行えばよく、鍵更新までの期間中に複数回サービス利用のステップが実行されてもよい。図９、図１０は、認証サーバ９０３が発行するチケットを利用するエージェント方式を示す。本実施例の概念は、これ以外の、任意のシングルサインオンの実現方式に適用できる。
【００８１】
例えば、認証サーバ９０３がユーザ１０１を代行してサービスプロバイダ９０１（９０２）との間の認証応答を行うリバースプロキシ方式においても、（１）認証サーバ９０３によるユーザ１０１の認証、（２）ユーザ端末１０２とサービスプロバイダ９０１（９０２）との鍵確立という基本的な流れは変わらない。したがって、図１０のシーケンスに基づき、難読化されたアプリの更新を行うことができる。
【００８２】
また、図１０のシーケンスでは、ユーザ端末１０２とサービスプロバイダ９０１（９０２）とのセッション確立と、難読化用パラメータの更新とは、異なる時に実行される。しかし、ユーザ端末１０２とサービスプロバイダ９０１（９０２）の暗号通信用の鍵確立時に、確立したセッション鍵やシェアードシークレットを利用して、難読化用パラメータを更新してもよい。
【００８３】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００８４】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００８５】
１０１  ユーザ、１０２  ユーザ端末、１０３  アプリ配信サーバ、１０４  サービスプロバイダ、１０５  秘密鍵、１０６  難読化用秘密鍵、３０１  通信装置、３０３  メモリ、３０４  記憶装置、３０５  難読化されたアプリ、３１１  通信装置、３１３  メモリ、３１４  記憶装置、３１５  アプリイメージ、３１６  初期化用パラメータ、３２１  ネットワーク、５０１  暗号化装置、５０５  アプリ、５１１  ブートローダ、５１２  復号機能、５１３  暗号化されたアプリ、６０２  サービス利用機能、６０３  暗号通信・認証機能、６０４  鍵更新機能、６１４  暗号化機能、６１５  難読化用秘密鍵更新機能、６１６  入力ＩＦ、６２１  秘密鍵更新用データ、６２２  時刻情報、７０１  入力データ認証機能、７０２  出力ＩＦ、９０１、９０２  サービスプロバイダ、９０３  認証サーバ
【図１】
2018026651.tif 000003
【図２】
2018026651.tif 000004
【図３】
2018026651.tif 000005
【図４】
2018026651.tif 000006
【図５】
2018026651.tif 000007
【図６】
2018026651.tif 000008
【図７】
2018026651.tif 000009
【図８】
2018026651.tif 000010
【図９】
2018026651.tif 000011
【図１０】
2018026651.tif 000012