JP6779702B2 - プログラムを保護する方法 - Google Patents

プログラムを保護する方法 Download PDF

Info

Publication number
JP6779702B2
JP6779702B2 JP2016156188A JP2016156188A JP6779702B2 JP 6779702 B2 JP6779702 B2 JP 6779702B2 JP 2016156188 A JP2016156188 A JP 2016156188A JP 2016156188 A JP2016156188 A JP 2016156188A JP 6779702 B2 JP6779702 B2 JP 6779702B2
Authority
JP
Japan
Prior art keywords
obfuscation
private key
function
update
application program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016156188A
Other languages
English (en)
Other versions
JP2018026651A (ja
Inventor
渡辺 大
大 渡辺
高橋 健太
健太 高橋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2016156188A priority Critical patent/JP6779702B2/ja
Publication of JP2018026651A publication Critical patent/JP2018026651A/ja
Application granted granted Critical
Publication of JP6779702B2 publication Critical patent/JP6779702B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Description

本発明は、プログラムを難読化して不正な解析を防止するための技術に関する。
モバイル端末の普及とWebサービスの高度化に伴い、サービスの種類も多様化している。特に近年では、モバイル決済のように、従来ATMや窓口、専用端末を経由していた支払や送金に関するサービスをモバイル端末上で実行するサービスが流行の兆しを見せている。
このようなサービスを利用する際には、ユーザは、専用のアプリケーションプログラム(アプリと呼ぶ)を端末にインストールし、そのアプリを介してサービスを利用するのが一般的である。また、サービスの利用に際してユーザ認証(もしくは端末認証)を行う必要があるが、このとき、ユーザ(もしくは端末)のみが持つ秘密情報が使用される。
このような処理は、SIMチップ上の領域内で行われることが望ましい。しかし、上述のように、ほとんどのケースにおいて、メモリ上で動作するアプリが秘密情報を取り扱う。これは、サービス用アプリをインストールするためには、SIMチップの記憶容量や処理能力が不足していることが理由である。
一方で、モバイル端末のセキュリティの観点では、端末の10%程度がマルウェアに感染しているという現実があり、金融サービスに特化したマルウェアの存在も確認されている。したがって、アプリは、ユーザ認証や通信路保護で必要となる秘密情報(秘密鍵や生体情報)を保護することが重要である。
上述のような課題に対する対策として、秘密情報をそのまま保持せず、読み取りを困難にする難読化技術が知られている。そこで、アプリと鍵のセットを難読化することで、秘密情報の漏えいリスクを軽減することができる。難読化については、既に多くの方式が検討されている。例えば非特許文献1は、プログラムを暗号化して解析を困難にする方法を開示している。
Christian Collberg and Jasvir Nagra,Surreptitious software,Addison-Wesley, 359ページ, 2010.
例えば、アプリがサービス利用のための暗号機能を内蔵しているとする。端末にダウンロードされるアプリは同一であるため、デフォルトで設定されている秘密鍵は異なる端末でも同一である。すなわち、攻撃者は、一つの端末の解析結果を別の端末に適用でき、サービスに対する攻撃が容易である。
また、サービス利用のための秘密鍵は定期的に更新する必要がある。難読化されたアプリが、暗号化されたアプリ及び暗号化されたアプリを復号するモジュールを含む場合、秘密鍵更新の前後の難読化されたアプリの差分を取ると、差分が無い部分が現れる。これは、上記復号するモジュールを含む。すなわち、アプリが使用する鍵の更新により、暗号化されたアプリを復号する復号モジュールを特定することが可能であり、攻撃が容易である。
本発明の代表的な一例は、更新可能な第1パラメータを含む第1プログラムを保護する方法であって、プロセッサが、符号化プログラムに従って、前記第1プログラム及び前記第1パラメータを更新する第1更新プログラムを、第2パラメータを用いて符号化し、前記プロセッサが、復号プログラムに従って、符号化された前記第1プログラム及び符号化された前記第1更新プログラムを、前記第2パラメータを用いて復号し、前記プロセッサが、第2更新プログラムに従って、前記復号プログラムを更新する。
本発明の一態様によれば、プログラムのセキュリティを向上できる。
実施例1におけるシステム構成を表す図である。 実施例1における鍵初期化及び更新プロトコルを表すシーケンス図である。 実施例1における機器構成を表す図である。 実施例1におけるアプリのダウンロードから端末への格納までの処理を表すフローチャートである。 実施例1において、アプリを難読化する技術の概要を説明する図である。 実施例1において、難読化された暗号通信機能を含むアプリの機能構成図である。 実施例1において、難読化された暗号通信機能を含むアプリの機能構成図の別例である。 図7の機能構成の場合に、難読化されたアプリの暗号通信・認証機能に用いる秘密鍵の更新を行うプロセスを説明するフローチャートである。 実施例2におけるシステム構成を表す図である。 実施例2における鍵初期化及び更新プロトコルを表すシーケンス図である。
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。以下において、ダウンロードしたアプリケーションプログラム(アプリとも呼ぶ)を難読化してマルウェア等による不正解析を防止するための技術が開示される。
図1は本実施例のシステム構成を示す。本システムは、ユーザ101が持つユーザ端末102、アプリの配信を行うアプリ配信サーバ103、アプリを介してユーザにサービスを提供するサービスプロバイダ104を含む。ここでは、サービスプロバイダ104は、1又は複数のサーバを示す。サービスプロバイダ104は、サービスの利用に必要となるアプリの配信をアプリ配信サーバ103に委託する。
ユーザは、サービスプロバイダ104が提供するサービスを利用する際に、所有するユーザ端末102からアプリ配信サーバ103にアクセスし、アプリをダウンロードする。その後、インストールしたアプリを介して、サービスを利用する。
通常、アプリ配信サーバ103からのアプリのダウンロードは、通信途上での改ざん等を防止するため、暗号通信を利用する。この通信は一時的なものであり、アプリ配信サーバ103は、端末102の認証を行わないことが多い。
一方、サービスプロバイダ104は、サービスの提供時に、ユーザ端末102の所有者が正当なサービス利用者であることを確認する。ユーザ端末102は、何らかの秘密情報を所持していることを証明し、正当なサービス利用者であることをサービスプロバイダ104に示す。
ユーザ端末102は、正規のユーザ端末であることをサービスプロバイダ104に証明するための、パスワード、秘密鍵、もしくは一時的に取り込まれたユーザ生体情報などの秘密情報105を格納している。ユーザ端末102は、秘密情報105を保護するための難読化に用いられる難読化用パラメータ106も保持する。難読化は、難読化用パラメータ106を使用してアプリを符号化し、解析を困難にする。難読化及び難読化用パラメータ106の詳細は後述する。
図2は、本実施例の鍵初期化及び鍵更新のプロトコルを示すシーケンス図である。以下、図2を参照してプロトコルを説明する。サービスプロバイダ104は、アプリに対して固定のパラメータを用いて難読化処理を施し、アプリと難読化機能とを組み合わせる(201)。
後述するように、難読化されたアプリは、難読化のために符号化されたアプリと、難読化(アプリの符号化/復号)ためのプログラム(の少なくとも一部)を含んで構成される。なお、以下の記載において、特に言及のない場合、「機能」はプログラム(プログラムモジュール)示す。難読化は、アプリを保護するために符号化する。また、以下に説明する例において、難読化用パラメータは、難読化用秘密鍵とする。難読化は、鍵を使用する暗号化と異なる符号化を使用することができる。
次に、サービスプロバイダ104は、アプリ配信サーバ103に対してアプリ登録要求を送信し、難読化したアプリを、アプリ配信サーバ103に登録する(202)。なお、サービスプロバイダ104は、アプリを、難読化することなく、アプリ配信サーバ103に登録してもよい。
次に、以下のように、難読化されたアプリが、アプリ配信サーバ103からユーザ端末102にダウンロードされる。まず、ユーザ端末102はアプリ配信サーバ103に対してアプリダウンロード要求を送信する(203)。さらに、アプリ配信サーバ103は、アプリダウンロード要求を受信すると、ユーザ端末102に、登録されている難読化されたアプリを送信する(204)。
次に、ユーザ端末102は、ダウンロードされたアプリのためのパラメータを初期化する。特に、ユーザ端末102は、端末固有情報、システムログ、通信ログなどの初期化用パラメータを入力として難読化用秘密鍵106を生成し、難読化処理を施す(205)。
本例において、難読化用秘密鍵106は、アプリを暗号化/復号するための鍵である。ユーザ端末102は、ダウンロードされたアプリを上記固定のパラメータを使用して復号し、さらに、生成した難読化用秘密鍵106を使用してアプリを暗号化する。ユーザ端末102は、暗号化されたアプリと難読化機能とを含む、難読化されたアプリのイメージデータを生成し、記憶装置に格納する。固定のパラメータは、例えば、ユーザ端末102に予め設定されている、又は、アプリ配信サーバ103から送信される。
次に、以下のように、ユーザ登録が実行される。まず、ユーザ101は、アプリをインストールしたユーザ端末102を介して、サービスプロバイダ104にユーザ登録を行う(206)。ユーザ端末102とサービスプロバイダ104とは、通信路を保護するための鍵を共有する(207)。さらに、ユーザ端末102は、共有した鍵データ及び/又は他のデータを用いて、難読化用秘密鍵106を更新する(208)。
ユーザ登録の後、ユーザ101は、ユーザ端末102を介してサービスプロバイダ104と暗号通信を行い、サービスを利用する(209)。
以下のようにサービス利用のための鍵及び難読化のための鍵が更新される。まず、ユーザ端末102は、サービスプロバイダ104と通信を行い、通信路保護(サービス利用)のための秘密鍵を更新する(210)。さらに、ユーザ端末102は、更新した鍵データ及び/又は他のデータを用いて、難読化用秘密鍵106を更新する(211)。
ユーザ端末102は、更新した難読化用秘密鍵106を使用して、アプリに対して難読化処理を実行する。具体的には、ユーザ端末102は、更新した難読化用秘密鍵106を使用してアプリを暗号化し、暗号化されたアプリと難読化機能とを組み合わせて、難読化されたアプリのイメージデータを生成し、記憶装置に格納する。イメージデータは、実行プログラム又はファイルである。
図3は、本実施例に係るシステムのハードウェア構成を表す図である。アプリ配信サーバ103とユーザ端末102は、ネットワーク321を介して通信を行う。アプリ配信サーバ103及びユーザ端末102は、それぞれ、典型的な計算機構成を有することができる。サービスプロバイダ104のサーバも同様に、典型的な計算機構成を有することができる。
アプリ配信サーバ103は、通信装置301、プロセッサであるCPU302、メモリ303、及び記憶装置304を含む。記憶装置304は、難読化されたアプリ305を格納している。アプリは、端末102で実行可能なプログラムである。メモリ303は、CPU302により実行されるプログラム及びプログラムに使用されるデータを格納する。CPU302は、プログラムに従って動作することで、所定の手段として機能する。
ユーザ端末102は、通信装置311、プロセッサであるCPU312、メモリ313、記憶装置314を含む。メモリ313は、CPU312により実行されるプログラム及びプログラムに使用されるデータを格納する。CPU312は、プログラムに従って動作することで、所定の機能(プログラムではない)を実現する。
記憶装置314は、難読化されたアプリである、端末固有のアプリイメージ315を格納している。ユーザ端末102は、アプリ配信サーバ103からダウンロードしたアプリに難読化処理を実行し、難読化されたアプリ315を、記憶装置314に格納する。難読化処理は、初期化用パラメータ316を使用して、難読化用秘密鍵106を生成する。初期化用パラメータ316は、上述のように、例えば、端末固有情報、及び/又はシステムログ、通信ログである。
図4は、ユーザ端末102へアプリのダウンロード及び格納の処理を表すフローチャートである。まず、ユーザ端末102とアプリ配信サーバ103とは、暗号通信を確立する(401)。通信方式としては、例えばTLSなどを用いればよい。次に、ユーザ端末102は、アプリ配信サーバ103にアプリダウンロード要求を送信する(402)。
アプリ配信サーバ103は、ユーザ端末102のアプリダウンロード要求に対して、対象の難読化されたアプリ305を端末102に送信する(403)。
ユーザ端末102は、MACアドレスやCPU番号、OSのバージョン情報などのユーザ端末102の固有の値や、現在の時刻情報、システムログなどを初期化用パラメータ316として、端末固有のアプリイメージ315を作成し(404)、作成されたアプリイメージ315を、記憶装置314に格納する(405)。
具体的には、ユーザ端末102は、初期化用パラメータ316を使用して、難読化用パラメータ106を生成する。ユーザ端末102は、難読化されたアプリ305における暗号化されたアプリを復号化し、さらに、難読化用パラメータ106によりアプリを暗号化する。ユーザ端末102は、暗号化されたアプリと難読化のための機能とを含むアプリイメージ315を生成する。
例えば、難読化されたアプリ305が、図6が示す例のように、難読化のための暗号化機能、復号機能及び鍵更新機能を含む場合、ユーザ端末102のインストーラは、初期化用パラメータ316を鍵更新機能に渡し、当該鍵更新機能が新たな難読化用パラメータ106を生成する。難読化されたアプリ305の復号機能及び暗号化機能が、それぞれ、アプリの復号及び暗号化を行う。
いずれかの機能が難読化されたアプリ305に含まれていない場合、インストーラがその代わりに処理を実行する。難読化されたアプリ305に含まれる難読化機能の構成に関わらず、インストーラがアプリイメージ315の生成のための全ての処理を実行してもよい。
なお、ユーザ端末102は、初期化用パラメータ316をSHA−256などのハッシュ関数に入力し、その出力を乱数生成器のシードとして用い、得られた乱数を用いてdllのメモリ配置のランダム化を実行してもよい。ユーザ端末102は、得られた乱数を秘密鍵として、アプリを暗号化してもよい。結果として得られたアプリイメージ315の実体は、端末ごとに異なるため、マルウェアによる攻撃感染リスクを軽減することができる。
また、ユーザ端末102は、初期化用パラメータとして、暗号通信における秘密鍵から導出される値を使用してもよい。例えば、DH(Diffie−Hellman)鍵共有を使用している場合、DH exponentは端末のみが知っている秘密情報であるため、通信相手のサーバも初期化されたアプリを推定することはできない。
図5は、難読化のためのパッキング技術(アプリを暗号化することで、解析を困難にする技術)の概要を説明する図である。暗号化装置501は、アプリ505を暗号化する。暗号化装置501は、暗号化に用いられる難読化用秘密鍵(難読化用パラメータ)106を、図3を参照して説明したように、端末固有の値や、システム情報から生成してもよい。暗号通信を用いてアプリ505をダウンロードする場合には、暗号化装置501は、暗号通信のために用いる秘密情報から生成してもよい。
例えば、暗号通信のための鍵共有でDiffie−Hellman鍵交換方式が使用されている場合に、ユーザ端末102が生成したDH exponentを難読化用秘密鍵106の生成に用いれば、暗号通信の相手も難読化用秘密鍵106の値を知ることが困難である。
端末固有のアプリイメージ315は、ブートローダ511、難読化用秘密鍵106を埋め込まれた復号機能512、そして難読化用秘密鍵106で暗号化されたアプリ513を含んで構成される。暗号化されたアプリ513は、パッキングされたデータである。復号機能512はプログラムモジュールである。
端末固有のアプリイメージ315が実行されると、まずブートローダ511が実行され、ブートローダ511は復号機能512を実行する。復号機能512は、暗号化されたアプリ513を復号し、ユーザ端末102のメモリ313上に展開する。復号が完了すると、復号機能512は復号されたアプリ505に処理を渡す。
図6は、パッキング技術を使用して難読化されたアプリの機能構成図である。アプリ505は、サービスを利用するためのサービス利用機能602に加えて、ユーザ端末102やユーザの認証を行うための暗号通信・認証機能603、鍵更新機能604、そして暗号通信や認証に用いる秘密鍵105を含む。
難読化されたアプリ315は、この他に、ブートローダ511、復号機能512、暗号化機能614、難読化用秘密鍵更新機能615、及びユーザ端末102の通信機能を介してデータを受け取る入力インタフェース(IF)616を含む。
難読化用秘密鍵更新機能615は、入力IF616を介して受信した暗号通信・認証機能603の秘密鍵更新用鍵データ621や端末のシステム情報、時刻情報622を外部入力として用いて、難読化用秘密鍵を更新する。難読化されたアプリ611が、その内部に通信ログを保持し、難読化用秘密鍵更新機能615は、その通信ログを鍵更新に用いてもよい。
図6においては、サービス利用機能602、暗号通信・認証機能603、鍵更新機能604、及び秘密鍵105がパッキングの対象であり、難読化用秘密鍵更新機能615はパッキング処理の対象外である。しかし、難読化用秘密鍵更新機能615はパッキング処理の対象であってもよい。鍵更新機能604が、難読化用秘密鍵更新機能615に代わって処理を実行してもよい。同様に、(難読化用秘密鍵106を含む)暗号化機能614も、パッキング処理の対象に含めてもよい。
図7は、鍵更新において外部から入力されたデータの正当性をチェックする機能を含むソフトウェア構成図である。難読化されたアプリ315は、図6に示す機能に加えて、入力データ認証機能701と出力IF702とを含む。入力データ認証機能701により、セキュリティを向上できる。入力データ認証機能701の動作の詳細は、図8を参照して説明する。
図8は、サービス利用のための鍵の更新のプロセスを説明するフローチャートである。具体的には、図8は、図7に示す構成において、難読化されたアプリ513の暗号通信・認証機能603に用いる秘密鍵105の更新を行うプロセスを説明するフローチャートである。
ユーザ端末102は、ネットワーク321から、暗号通信・認証機能603の秘密鍵更新用データ621を受信する(801)。秘密鍵更新用データ621は、時間経過において変化する。入力データ認証機能701は、受信した秘密鍵更新用データ621が、サービスプロバイダ104が生成した値であることを検証する(802)。検証の結果、受信したデータが不正であると判定した場合(802:不正)、入力データ認証機能701は、サービスプロバイダ104に対して認証失敗を通知し(803)、処理を終了する。
ステップ802において、受信データの正当性を確認するための一つの方法において、データの送信者(例えばサービスプロバイダ104)は、ユーザ端末102との間で共有した秘密鍵を用い、当該受信データのメッセージ認証子を送信データに付与する。また、電子署名を使用する方法のように、他の正当性確認方法を用いてもよい。正当性確認に用いる秘密鍵や公開鍵などの情報は、サービスプロバイダ104とユーザ端末102の間の通信路保護に用いる値を流用してもよい。
入力データ認証機能701が受信したデータが正当であると判定した場合(802:正当)、鍵更新機能604は、受信した秘密鍵更新用鍵データ621を使って新しい秘密鍵105を生成し、古い秘密鍵105と置き換える(804)。
難読化用秘密鍵更新機能615は、受信した秘密鍵更新用鍵データ621又はステップ804で生成された新しい秘密鍵105と、古い難読化用秘密鍵106とから、新しい難読化用秘密鍵を生成する(805)。
難読化用秘密鍵更新機能615は、ステップ805で生成した新しい難読化用秘密鍵106を用いて、暗号化機能614と復号機能512とを、更新する(806)。具体的には、難読化用秘密鍵更新機能615は、暗号化機能614及び復号機能512に含まれる難読化用秘密鍵106を更新する。
ステップ806で更新された暗号化機能614は、鍵更新機能615、秘密鍵105、サービス利用機能602、暗号通信・認証機能603を新しい難読化用秘密鍵106で暗号化し、記憶装置(314)に格納する(807)。
例えば、暗号化機能614は、メモリ313上の暗号化されていないアプリから、新しい秘密鍵106で暗号化されたアプリを生成し、イメージ315内の古い暗号化されアプリ513を置き換える。または、秘密鍵106の更新の前に、復号機能512はイメージ315内の古い暗号化されアプリ513を復号する。暗号化機能614は、復号されたアプリから、新しい秘密鍵106で暗号化されたアプリを生成し、イメージ315内の古い暗号化されアプリ513を置き換える。
難読化用秘密鍵更新機能615は、サービスプロバイダ104に対して、鍵更新成功を通知する(808)。
このように、難読化対象のプログラム(上記例において秘密鍵105)が更新されるときに、難読化用パラメータ(上記例において難読化用秘密鍵106)を更新することで、難読化対象のプログラムと難読化の復号機能との境界を読み取りにくくすることができる。
上述のように、ユーザ端末102は、外部からの入力情報とサービス利用のための秘密鍵105の更新命令とを受け取ると、アプリが保持する秘密鍵105を更新する。ユーザ端末102は、さらに、受信した入力情報を用いて、アプリを暗号化/復号するための難読化用秘密鍵106も更新する。
これにより、サービス利用のための鍵105の更新時に、難読化のための復号機能(モジュール)512を含む難読化されたアプリ315全体が更新され、モジュール差分を見ても難読化のための復号機能512が特定できず、攻撃がより困難になる。
難読化用秘密鍵106の更新は、サービス利用のための鍵105の更新と同期していなくてもよい、つまり、サービス利用のための鍵105の更新時に、常に難読化用秘密鍵106を更新しなくてもよい。難読化用秘密鍵106の更新は、サービス利用のための鍵105の更新におけるデータ(例えば鍵105又は暗号通信・認証機能の更新用鍵データ
621)と異なるデータを使用してもよい。鍵105の更新のデータを使用することで、高いセキュリティにおいて効率的に難読化のための復号機能512を更新できる。
また、ユーザ端末102は、端末固有情報をエントロピソースにして、アプリ用秘密情報(例えば、公開鍵ペアや乱数生成器のシード)の初期化と、難読化用秘密鍵の初期化を行う。端末固有情報をエントロピソースとした初期化により、端末ごとにユニークなモジュールのインスタンスが得られる。
図8のフローチャートにおいて、秘密鍵更新用データ621はネットワークを介して受信したデータのみで構成されている。これと異なり、難読化用秘密鍵の更新は、時間経過におい変化する、時刻情報やシステムログなどの情報622を用いてもよい。このような情報622を用いることで、難読化されたアプリは、backward securityを実現することができる。マルウェアが難読化されたアプリに関する情報を外部の攻撃者に送信したとしても、攻撃者による解析結果により、難読化されたアプリが将来的に解析されるリスクを軽減できる。
図8のフローチャートにおいて、秘密鍵更新用データ621、例えば認証用の秘密鍵は、サービスプロバイダ104が生成し、端末に送信する。鍵更新の方法は、これに限るものではない。例えば、ユーザ端末102は、新しい秘密鍵と公開鍵のペアを生成して、新しい公開鍵をサービスプロバイダ104に登録してもよい。ユーザ端末102を起点として、鍵更新が実行されてもよい。
上記システム構成において、サービスプロバイダ104がユーザ認証に関わる一切の処理を担当している。しかし、公開鍵証明書を発行する認証局が、公開鍵の更新処理を行い、さらに、難読化されたアプリ315を更新してもよい。
サービス利用時のセッション鍵は使い捨てであってもよい。この場合、セッション鍵は難読化対象外であってもよい。また、セッション鍵の確立時に、難読化されたアプリが更新されてもよい。
暗号通信を一時中断し、アプリを終了する場合に、セッション鍵が維持される場合がある。例えば、TLS(Transport Layer Security)は、セッションをまたいで鍵を持ち続けるセッションリサンプションという仕組みを有する。
このような場合には、アプリの終了又は中断時に、保存する情報が更新されている場合には、ユーザ端末102は、難読化されたアプリを更新してもよい。暗号化機能614、難読化用秘密鍵更新機能615、入力データ認証機能701も、暗号化の対象としてもよい。
上記例は、鍵を更新することで復号機能と暗号化機能を更新する。これにより、効率的に高いセキュリティで復号機能と暗号化機能を更新できる。これと異なる方法、例えば、コードレイアウトを変更することにより、復号機能と暗号化機能を更新してもよい。
図9は実施例2に係るシステムの構成を表す図である。本構成は、シングルサインオンのサービスを想定する。シングルサインオンのシステムは、複数のサービスを提供しており、図1のシステムを構成するユーザ101、ユーザ端末102、アプリ配信サーバ103、サービスプロバイダ901、902の他に、認証サーバ903が含まれる。認証サーバ903は、複数のサービスプロバイダ901、902に代わって、ユーザ認証を実行する。
図10は、本発明の実施例2における鍵初期化及び更新プロトコルを表すシーケンス図である。以下、図10を参照して、プロトコルを説明する。サービスプロバイダ(901(902))は、アプリに対して固定のパラメータを用いて難読化処理を施し、アプリと難読化機能とを組み合わせる(1001)。
次に、サービスプロバイダ(901(902))は、アプリ配信サーバ103に対してアプリ登録要求を送信し、難読化したアプリを、アプリ配信サーバ103に登録する(1002)。なお、サービスプロバイダ(901(902))は、アプリを、難読化することなく、アプリ配信サーバ103に登録してもよい。
次に、以下のように、難読化されたアプリが、アプリ配信サーバ103からユーザ端末102にダウンロードされる。まず、ユーザ端末102はアプリ配信サーバ103に対してアプリダウンロード要求を送信する(1003)。さらに、アプリ配信サーバ103は、アプリダウンロード要求を受信すると、ユーザ端末102に、登録されている難読化されたアプリを送信する(1004)。
次に、ユーザ端末102は、ダウンロードされたアプリのためのパラメータを初期化する。特に、ユーザ端末102は、端末固有情報、システムログ、通信ログなどの初期化用パラメータを入力として難読化用秘密鍵106を生成し、難読化処理を施す(1005)。
次に、ユーザ101は、アプリをインストールしたユーザ端末102を介して、認証サーバ903にユーザ登録を行い、認証用の鍵を登録する(1006)。次に、ユーザ端末102は、認証用の鍵及び/又は他のデータを用いて、難読化用秘密鍵106を更新する(1007)。
次に、以下のように、サービスプロバイダに対するユーザ登録が実行される。まず、ユーザ101は、ユーザ端末102を介して認証サーバ903に接続し、ユーザ認証を行う(1008)。認証サーバ903は、ユーザ端末102に対してチケットを発行する(1009)。ユーザ端末102は、ステップ1009で取得したチケットを使ってサービスプロバイダ901(902)にアクセスし、ユーザ登録を行う(1010)。
次に、以下のように、ユーザ101はサービスを利用する。まず、ユーザ101は、ユーザ端末102を介して認証サーバ903に接続し、ユーザ認証を行う。認証サーバ903は、ユーザ端末102に対してチケットを発行する(1011)。ユーザ端末102は、ステップ1012で取得したチケットを使ってサービスプロバイダ901(902)にアクセスし、サービスを利用する(1012)。
以下のようにサービス利用のための鍵及び難読化のための鍵が更新される。まず、ユーザ端末102は、認証サーバ903と通信を行い、通信路保護(サービス利用)のための秘密鍵を更新する(1013)。さらに、ユーザ端末102は、更新した鍵データ及び/又は他のデータを用いて、難読化用秘密鍵106を更新する(1014)。
なお、鍵更新は所定の期間ごとに行えばよく、鍵更新までの期間中に複数回サービス利用のステップが実行されてもよい。図9、図10は、認証サーバ903が発行するチケットを利用するエージェント方式を示す。本実施例の概念は、これ以外の、任意のシングルサインオンの実現方式に適用できる。
例えば、認証サーバ903がユーザ101を代行してサービスプロバイダ901(902)との間の認証応答を行うリバースプロキシ方式においても、(1)認証サーバ903によるユーザ101の認証、(2)ユーザ端末102とサービスプロバイダ901(902)との鍵確立という基本的な流れは変わらない。したがって、図10のシーケンスに基づき、難読化されたアプリの更新を行うことができる。
また、図10のシーケンスでは、ユーザ端末102とサービスプロバイダ901(902)とのセッション確立と、難読化用パラメータの更新とは、異なる時に実行される。しかし、ユーザ端末102とサービスプロバイダ901(902)の暗号通信用の鍵確立時に、確立したセッション鍵やシェアードシークレットを利用して、難読化用パラメータを更新してもよい。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
101 ユーザ、102 ユーザ端末、103 アプリ配信サーバ、104 サービスプロバイダ、105 秘密鍵、106 難読化用秘密鍵、301 通信装置、303 メモリ、304 記憶装置、305 難読化されたアプリ、311 通信装置、313 メモリ、314 記憶装置、315 アプリイメージ、316 初期化用パラメータ、321 ネットワーク、501 暗号化装置、505 アプリ、511 ブートローダ、512 復号機能、513 暗号化されたアプリ、602 サービス利用機能、603 暗号通信・認証機能、604 鍵更新機能、614 暗号化機能、615 難読化用秘密鍵更新機能、616 入力IF、621 秘密鍵更新用データ、622 時刻情報、701 入力データ認証機能、702 出力IF、901、902 サービスプロバイダ、903 認証サーバ

Claims (6)

  1. アプリケーションプログラムを保護する方法であって、
    暗号化された前記アプリケーションプログラム、暗号化機能、復号機能、及び難読化用秘密鍵更新機能は、難読化されたアプリケーションプログラムに含まれ、
    前記アプリケーションプログラムは、秘密情報及び前記秘密情報を更新する更新機能を含み、
    前記暗号化機能及び前記復号機能はそれぞれ難読化用秘密鍵を含み、
    前記方法は、
    プロセッサが、前記復号機能に従って、暗号化された前記アプリケーションプログラムを、前記難読化用秘密鍵を用いて復号し、
    前記プロセッサが、前記更新機能に従って、前記秘密情報を更新し、
    前記プロセッサが、前記難読化用秘密鍵更新機能に従って、前記秘密情報の更新に同期して前記難読化用秘密鍵を更新し、
    前記プロセッサが、前記暗号化機能に従って、復号された前記アプリケーションプログラムを、更新された前記難読化用秘密鍵を用いて暗号化する、方法。
  2. 請求項1に記載の方法であって、
    前記プロセッサが、前記秘密情報と更新用データとに基づき、前記秘密情報を更新し、
    前記プロセッサが、前記秘密情報の更新におけるデータと前記難読化用秘密鍵とに基づき、前記難読化用秘密鍵を更新する、方法。
  3. 請求項2に記載の方法であって、
    前記プロセッサが、前記更新用データを、ネットワークを介して受信し、
    前記プロセッサが、前記更新用データの正当性を、前記更新用データと共に受信した認証用データを使用してチェックし、
    前記更新用データが正当である場合に、前記プロセッサが、前記秘密情報及び前記難読化用秘密鍵を更新する、方法。
  4. 請求項1又は2に記載の方法であって、
    前記プロセッサは端末に含まれ、
    前記方法は、
    前記プロセッサが、前記端末にネットワークを介して接続されたサーバから、初期値の前記難読化用秘密鍵によって暗号化された前記アプリケーションプログラムをダウンロードし、
    前記プロセッサが、ダウンロードされた前記アプリケーションプログラムを前記初期値によって復号し、
    前記プロセッサが、前記初期値から前記端末内の情報から生成した値に、前記難読化用秘密鍵を更新し、
    前記プロセッサが、更新された前記難読化用秘密鍵によって前記アプリケーションプログラムを暗号化して、前記端末の記憶装置に格納する、方法。
  5. 難読化されたアプリケーションプログラムであって、
    暗号化された前記アプリケーションプログラム、暗号化機能、復号機能、及び難読化用秘密鍵更新機能を含み
    前記アプリケーションプログラムは、秘密情報及び前記秘密情報を更新する更新機能を含み、
    前記暗号化機能及び前記復号機能はそれぞれ難読化用秘密鍵を含み、
    前記難読化されたアプリケーションプログラムは、計算機に、
    前記復号機能に従って、暗号化された前記アプリケーションプログラムを、前記難読化用秘密鍵を用いて復号し、
    前記更新機能に従って、前記秘密情報を更新し、
    前記難読化用秘密鍵更新機能に従って、前記秘密情報の更新に同期して前記難読化用秘密鍵を更新し、
    前記暗号化機能に従って、復号された前記アプリケーションプログラムを、更新された前記難読化用秘密鍵を用いて暗号化する、ことを実行させる難読化されたアプリケーションプログラム。
  6. アプリケーションプログラムを保護する装置であって、
    プロセッサと、
    記憶装置と、を含み、
    前記記憶装置は、難読化されたアプリケーションプログラムを格納し、
    前記難読化されたアプリケーションプログラムは、暗号化された前記アプリケーションプログラム、暗号化機能、復号機能、及び難読化用秘密鍵更新機能を含み、
    前記アプリケーションプログラムは、秘密情報及び前記秘密情報を更新する更新機能を含み、
    前記暗号化機能及び前記復号機能はそれぞれ難読化用秘密鍵を含み、
    前記プロセッサは、
    前記復号機能に従って、暗号化された前記アプリケーションプログラムを、前記難読化用秘密鍵を用いて復号し、
    前記更新機能に従って、前記秘密情報を更新し、
    前記難読化用秘密鍵更新機能に従って、前記秘密情報の更新に同期して前記難読化用秘密鍵を更新し、
    前記暗号化機能に従って、復号された前記アプリケーションプログラムを、更新された前記難読化用秘密鍵を用いて暗号化する、装置。
JP2016156188A 2016-08-09 2016-08-09 プログラムを保護する方法 Active JP6779702B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016156188A JP6779702B2 (ja) 2016-08-09 2016-08-09 プログラムを保護する方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016156188A JP6779702B2 (ja) 2016-08-09 2016-08-09 プログラムを保護する方法

Publications (2)

Publication Number Publication Date
JP2018026651A JP2018026651A (ja) 2018-02-15
JP6779702B2 true JP6779702B2 (ja) 2020-11-04

Family

ID=61194315

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016156188A Active JP6779702B2 (ja) 2016-08-09 2016-08-09 プログラムを保護する方法

Country Status (1)

Country Link
JP (1) JP6779702B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6804074B1 (ja) * 2020-04-27 2020-12-23 Arithmer株式会社 処理装置、学習装置、処理プログラム、及び学習プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4874007B2 (ja) * 2006-06-14 2012-02-08 大日本印刷株式会社 認証システム、サーバコンピュータ、プログラム、及び、記録媒体
US8464347B2 (en) * 2008-03-28 2013-06-11 Panasonic Corporation Software updating apparatus, software updating system, alteration verification method and alteration verification program

Also Published As

Publication number Publication date
JP2018026651A (ja) 2018-02-15

Similar Documents

Publication Publication Date Title
EP3387813B1 (en) Mobile device having trusted execution environment
JP5690412B2 (ja) ハードウェアデバイスの鍵プロビジョン方法および装置
JP5564453B2 (ja) 情報処理システム、及び情報処理方法
US8683214B2 (en) Method and device that verifies application program modules
US11853438B2 (en) Providing cryptographically secure post-secrets-provisioning services
EP2728908B1 (en) Telecommunications chip card
KR20140126787A (ko) PUF 기반 하드웨어 OTP 제공 장치 및 이를 이용한 2-Factor 인증 방법
CN111971929B (zh) 安全分布式密钥管理系统
CN111401901B (zh) 生物支付设备的认证方法、装置、计算机设备和存储介质
CN111614467B (zh) 系统后门防御方法、装置、计算机设备和存储介质
EP3292654B1 (en) A security approach for storing credentials for offline use and copy-protected vault content in devices
JP6796861B2 (ja) アプリケーションソフトウェアの提供及び認証方法並びにそのためのシステム
KR20070059891A (ko) 어플리케이션 인증 보안 시스템 및 그 인증 보안 방법
US20200160333A1 (en) System and method for the protection of consumer financial data utilizing dynamic content shredding
JP6779702B2 (ja) プログラムを保護する方法
KR101711024B1 (ko) 부정조작방지 장치 접근 방법 및 그 방법을 채용한 단말 장치
CN110740036A (zh) 基于云计算的防攻击数据保密方法
KR101973578B1 (ko) 어플리케이션의 무결성 검증 방법 및 장치
KR101947408B1 (ko) PUF 기반 하드웨어 OTP 제공 장치 및 이를 이용한 2-Factor 인증 방법
CN107862209B (zh) 一种文件加解密方法、移动终端和具有存储功能的装置
CN106789074B (zh) 一种Java卡的应用身份验证方法及验证系统
KR20190046724A (ko) 어플리케이션의 무결성 검증 방법 및 장치
KR20190002388A (ko) PUF 기반 하드웨어 OTP 제공 장치 및 이를 이용한 2-Factor 인증 방법
JP6674368B2 (ja) プログラムイメージを保護する方法
CN115765981A (zh) 一种可信网络通信方法、装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181001

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190729

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190903

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200310

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200423

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200929

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201014

R150 Certificate of patent or registration of utility model

Ref document number: 6779702

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150