JP2010066883A - 実行順序検証システム、実行順序検証方法、および実行順序検証プログラム - Google Patents

実行順序検証システム、実行順序検証方法、および実行順序検証プログラム Download PDF

Info

Publication number
JP2010066883A
JP2010066883A JP2008230921A JP2008230921A JP2010066883A JP 2010066883 A JP2010066883 A JP 2010066883A JP 2008230921 A JP2008230921 A JP 2008230921A JP 2008230921 A JP2008230921 A JP 2008230921A JP 2010066883 A JP2010066883 A JP 2010066883A
Authority
JP
Japan
Prior art keywords
control variable
terminal
variable value
tamper resistant
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.)
Pending
Application number
JP2008230921A
Other languages
English (en)
Inventor
Kazuhide Fukushima
和英 福島
Shinsaku Kiyomoto
晋作 清本
Toshiaki Tanaka
俊昭 田中
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.)
KDDI Corp
Original Assignee
KDDI Corp
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 KDDI Corp filed Critical KDDI Corp
Priority to JP2008230921A priority Critical patent/JP2010066883A/ja
Publication of JP2010066883A publication Critical patent/JP2010066883A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】プログラムの実行順序を検証できる実行順序検証システム、実行順序検証方法、および実行順序検証プログラムを提供すること。
【解決手段】実行順序検証システム1は、端末10および耐タンパ装置20を備える。端末10は、プログラムの制御構造を平滑化する平滑化処理部11と、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置20に送信する制御変数値要求部12と、制御変数値要求信号に応じて耐タンパ装置20から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する実行処理部13と、を備える。耐タンパ装置20は、制御変数値要求信号に応じて、制御変数値を端末10に送信する制御変数値送信部21と、制御変数値要求信号に基づいて、端末10におけるプログラムの実行順序を検証する実行順序検証部22と、を備える。
【選択図】図1

Description

本発明は、プログラムの実行順序を検証できる実行順序検証システム、実行順序検証方法、および実行順序検証プログラムに関する。
一般に、プログラムには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方で、プログラムを解析するための技術(RE:Reverse Engineering)も数多く開発されているのが現状である。このため、これらの技術によりプログラムが解析されると、不正者に秘密情報が入手されるという脅威が考えられる。
こうした脅威に対し、プログラムの仕様を保ったまま、プログラムの解析を困難にする難読化という技術がある。このプログラムの難読化方法として、プログラムのソースコードをブロック単位に切り出して、符号化された制御変数に代入されている制御変数値に基づいて各ブロックを実行することが提案されている(例えば、特許文献1参照)。このプログラムの難読化方法では、具体的には、各ブロックに、制御変数がとるべき値である制御変数値を割当て、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値を制御変数に代入する処理を付加する。これによれば、各ブロックは、制御変数に代入されている値に応じた順序で実行され、この制御変数は符号化されるため、プログラムの難読化を実現できる。
特開2008−77400号公報
ところが、プログラムの静的解析により、プログラムの各ブロックの実行順序を解析できてしまうおそれがあった。ここで、例えば、プログラムの正規ユーザであるか否かをチェックするブロックをライセンスチェックブロックと呼ぶものとする。このとき、ライセンスチェックブロックを備えるプログラムにおいて、各ブロックの実行順序を解析できてしまうと、正規の順序ではライセンスチェックブロックが実行されるタイミングであるにもかかわらず、このライセンスチェックブロックの実行を飛ばして、他のブロックを実行させることができてしまう。これでは、ライセンスチェックブロックが実行されていない状態で、他のブロックを実行できてしまうので、正規ユーザではないにもかかわらず、このプログラムを利用できてしまうことになる。
このため、プログラムが正規の順序で実行されているか否かを判別するために、プログラムの実行順序を検証できることが求められていた。
そこで、本発明は、上述の課題に鑑みてなされたものであり、プログラムの実行順序を検証できる検証システム、検証方法、および検証プログラムを提供することを目的とする。
本発明は、上記の課題を解決するために、以下の事項を提案している。
(1)本発明は、プログラムを実行する端末(例えば、図1の端末10に相当)と、前記端末と通信可能に接続された耐タンパ装置(例えば、図1の耐タンパ装置20に相当)と、を備える実行順序検証システム(例えば、図1の実行順序検証システム1に相当)であって、前記端末は、前記プログラムの制御構造を平滑化する平滑化処理手段(例えば、図1の平滑化処理部11に相当)と、前記プログラムの実行順序を制御するための制御変数(例えば、図5の「int C」、図10の「_aZGgXrudZn」に相当)がとるべき制御変数値(例えば、図5の「5」、「9」、「4」、図10の「−940077074」、「958820940」、「859465332」、「−511982858」、「−248913326」に相当)の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する制御変数値要求手段(例えば、図1の制御変数値要求部12に相当)と、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する実行処理手段(例えば、図1の実行処理部13に相当)と、を備え、前記耐タンパ装置は、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する制御変数値送信手段(例えば、図1の制御変数値送信部21に相当)と、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する実行順序検証手段(例えば、図1の実行順序検証部22に相当)と、を備えることを特徴とする実行順序検証システムを提案している。
この発明によれば、端末は、平滑化処理手段により、プログラムの制御構造を平滑化し、制御変数値要求手段により、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置に送信する。そして、実行処理手段により、制御変数値要求信号に応じて耐タンパ装置から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する。一方、耐タンパ装置は、制御変数値送信手段により、制御変数値要求信号に応じて、制御変数値を端末に送信する。以上によれば、これら端末および耐タンパ装置を備える実行順序検証システムでは、制御構造を平滑化したプログラムを端末で実行するために、制御変数値の送信を耐タンパ装置に要求する。すなわち、端末で実行されるプログラムの処理の一部が、安全性の確保された耐タンパ装置に格納されるため、このプログラムの難読化を実現できる。
また、この発明によれば、耐タンパ装置は、実行順序検証手段により、制御変数値要求信号に基づいて、端末におけるプログラムの実行順序を検証する。このため、この耐タンパ装置を備える実行順序検証システムでは、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
(2)本発明は、(1)の実行順序検証システムについて、前記平滑化処理手段は、前記プログラムのソースコードに含まれる連続した命令をブロック単位(例えば、図3のブロックB1〜B3、図9のBL1〜BL5に相当)に切り出すブロック切り出し手段(例えば、図1のブロック切り出し部111に相当)と、前記制御変数を設定する制御変数設定手段(例えば、図1の制御変数設定部112に相当)と、前記ブロックのそれぞれに、前記制御変数値を割当てる制御変数値割当て手段(例えば、図1の制御変数値割当て部113に相当)と、前記ブロックを並列に並べるブロック並列化処理手段(例えば、図1のブロック並列化処理部114に相当)と、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理(例えば、図7の関数呼び出し「Func1()」、「Func2()」、図11の関数呼び出し「GetFuncValue1()」、「GetFuncValue2()」、「GetFuncValue3()」に相当)を付加する要求処理付加手段(例えば、図1の要求処理付加部115に相当)と、を備え、前記制御変数値要求手段は、前記要求処理付加手段により付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする実行順序検証システムを提案している。
この発明によれば、端末は、ブロック切り出し手段により、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出し、制御変数設定手段により、制御変数を設定する。そして、制御変数値割当て手段により、各ブロックに制御変数値を割当て、ブロック並列化処理手段により、各ブロックを並列に並べる。そして、要求処理付加手段により、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置に要求する処理を付加する。さらに、制御変数値要求手段により、要求処理付加手段により付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を耐タンパ装置に送信する。
このため、端末は、1つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置に送信する。したがって、耐タンパ装置は、各制御変数値要求信号が端末から送信される順序を検証することで、端末で実行されているプログラムの各ブロックの実行順序を検証できる。
(3)本発明は、(1)又は(2)の実行順序検証システムについて、前記端末は、前記耐タンパ装置に送信する情報を暗号化する端末用暗号化手段(例えば、図1の暗号化・復号化処理部14に相当)と、前記耐タンパ装置から受信した暗号化された情報を復号化する端末用復号化手段(例えば、図1の暗号化・復号化処理部14に相当)と、をさらに備え、前記耐タンパ装置は、前記端末に送信する情報を暗号化する耐タンパ装置用暗号化手段(例えば、図1の暗号化・復号化処理部23に相当)と、前記端末から受信した暗号化された情報を復号化する耐タンパ装置用復号化手段(例えば、図1の暗号化・復号化処理部23に相当)と、をさらに備えることを特徴とする実行順序検証システムを提案している。
この発明によれば、端末は、端末用暗号化手段により、耐タンパ装置に送信する情報を暗号化し、端末用復号化手段により、耐タンパ装置から受信した暗号化された情報を復号化する。また、耐タンパ装置は、耐タンパ装置用暗号化手段により、端末に送信する情報を暗号化し、耐タンパ装置用復号化手段により、端末から受信した暗号化された情報を復号化する。このため、端末と耐タンパ装置との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末と耐タンパ装置との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。
(4)本発明は、端末(例えば、図1の端末10に相当)によるプログラムの実行順序を耐タンパ装置(例えば、図1の耐タンパ装置20に相当)により検証する実行順序検証方法であって、前記端末により、前記プログラムの制御構造を平滑化する第1のステップ(例えば、図2のステップS1〜S5に相当)と、前記端末により、前記プログラムの実行順序を制御するための制御変数(例えば、図5の「int C」、図10の「_aZGgXrudZn」に相当)がとるべき制御変数値(例えば、図5の「5」、「9」、「4」、図10の「−940077074」、「958820940」、「859465332」、「−511982858」、「−248913326」に相当)の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第2のステップと、前記端末により、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第3のステップと、前記耐タンパ装置により、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第4のステップと、前記耐タンパ装置により、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第5のステップと、を備えることを特徴とする実行順序検証方法を提案している。
この発明によれば、端末では、プログラムの制御構造を平滑化し、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置に送信する。そして、制御変数値要求信号に応じて耐タンパ装置から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する。一方、耐タンパ装置では、制御変数値要求信号に応じて、制御変数値を端末に送信する。以上によれば、耐タンパ装置から送信される制御変数値に基づいて、制御構造を平滑化したプログラムを端末で実行して、このプログラムの難読化を実現できる。
また、この発明によれば、耐タンパ装置では、制御変数値要求信号に基づいて、端末におけるプログラムの実行順序を検証する。このため、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
(5)本発明は、(4)の実行順序検証方法について、前記第1のステップでは、前記端末により、前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第6のステップ(例えば、図2のステップS1に相当)と、前記端末により、前記制御変数を設定する第7のステップ(例えば、図2のステップS2に相当)と、前記端末により、前記ブロックのそれぞれに、前記制御変数値を割当てる第8のステップ(例えば、図2のステップS3に相当)と、前記端末により、前記ブロックを並列に並べる第9のステップ(例えば、図2のステップS4に相当)と、前記端末により、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第10のステップ(例えば、図2のステップS5に相当)と、を行い、前記第5のステップでは、前記第10のステップにより付加された処理が実行されると、前記端末により、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする実行順序検証方法を提案している。
この発明によれば、端末では、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出し、制御変数を設定する。そして、各ブロックに制御変数値を割当て、各ブロックを並列に並べる。そして、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置に要求する処理を付加する。さらに、ブロックの最後に付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を耐タンパ装置に送信する。
このため、端末は、1つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置に送信する。したがって、耐タンパ装置は、各制御変数値要求信号が端末から送信される順序を検証することで、端末で実行されているプログラムの各ブロックの実行順序を検証できる。
(6)本発明は、(4)又は(5)の実行順序検証方法について、前記端末により、前記耐タンパ装置に送信する情報を暗号化する第11のステップと、前記端末により、前記耐タンパ装置から受信した暗号化された情報を復号化する第12のステップと、前記耐タンパ装置により、前記端末に送信する情報を暗号化する第13のステップと、前記耐タンパ装置により、前記端末から受信した暗号化された情報を復号化する第14のステップと、さらに備えることを特徴とする実行順序検証方法を提案している。
この発明によれば、端末では、耐タンパ装置に送信する情報を暗号化し、耐タンパ装置から受信した暗号化された情報を復号化する。また、耐タンパ装置では、端末に送信する情報を暗号化し、端末から受信した暗号化された情報を復号化する。このため、端末と耐タンパ装置との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末と耐タンパ装置との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。
(7)本発明は、端末(例えば、図1の端末10に相当)によるプログラムの実行順序を耐タンパ装置(例えば、図1の耐タンパ装置20に相当)により検証する実行順序検証方法を、前記端末および前記耐タンパ装置に実行させるための実行順序検証プログラムであって、前記プログラムの制御構造を平滑化する第1のステップ(例えば、図2のステップS1〜S5に相当)と、前記プログラムの実行順序を制御するための制御変数(例えば、図5の「int C」、図10の「_aZGgXrudZn」に相当)がとるべき制御変数値(例えば、図5の「5」、「9」、「4」、図10の「−940077074」、「958820940」、「859465332」、「−511982858」、「−248913326」に相当)の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第2のステップと、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第3のステップと、を前記端末に実行させ、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第4のステップと、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第5のステップと、を前記耐タンパ装置に実行させるための実行順序検証プログラムを提案している。
この発明によれば、実行順序検証プログラムを端末に実行させることで、プログラムの制御構造を平滑化し、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置に送信する。そして、制御変数値要求信号に応じて耐タンパ装置から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する。また、実行順序検証プログラムを耐タンパ装置に実行させることで、制御変数値要求信号に応じて、制御変数値を端末に送信する。以上によれば、耐タンパ装置から送信される制御変数値に基づいて、制御構造を平滑化したプログラムを端末で実行して、このプログラムの難読化を実現できる。
また、この発明によれば、実行順序検証プログラムを耐タンパ装置に実行させることで、制御変数値要求信号に基づいて、端末におけるプログラムの実行順序を検証する。このため、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
(8)本発明は、(7)の実行順序検証プログラムについて、前記第1のステップでは、前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第6のステップ(例えば、図2のステップS1に相当)と、前記制御変数を設定する第7のステップ(例えば、図2のステップS2に相当)と、前記ブロックのそれぞれに、前記制御変数値を割当てる第8のステップ(例えば、図2のステップS3に相当)と、前記ブロックを並列に並べる第9のステップ(例えば、図2のステップS4に相当)と、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第10のステップ(例えば、図2のステップS5に相当)と、を前記端末に実行させ、前記第5のステップでは、前記第10のステップにより付加された処理の実行に基づいて、実行された処理に応じた制御変数値要求信号の前記耐タンパ装置への送信を前記端末に実行させるための実行順序検証プログラムを提案している。
この発明によれば、実行順序プログラムを端末に実行させることで、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出し、制御変数を設定する。そして、各ブロックに制御変数値を割当て、各ブロックを並列に並べる。そして、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置に要求する処理を付加する。さらに、ブロックの最後に付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を耐タンパ装置に送信する。
このため、端末は、1つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置に送信する。したがって、耐タンパ装置は、各制御変数値要求信号が端末から送信される順序を検証することで、端末で実行されているプログラムの各ブロックの実行順序を検証できる。
(9)本発明は、(7)又は(8)の実行順序検証プログラムについて、前記耐タンパ装置に送信する情報を暗号化する第11のステップと、前記耐タンパ装置から受信した暗号化された情報を復号化する第12のステップと、を前記端末に実行させ、前記端末に送信する情報を暗号化する第13のステップと、前記端末から受信した暗号化された情報を復号化する第14のステップと、を前記耐タンパ装置に実行させるための実行順序検証プログラムを提案している。
この発明によれば、実行順序検証プログラムを端末に実行させることで、耐タンパ装置に送信する情報を暗号化し、耐タンパ装置から受信した暗号化された情報を復号化する。また、実行順序検証プログラムを耐タンパ装置に実行させることで、端末に送信する情報を暗号化し、端末から受信した暗号化された情報を復号化する。このため、端末と耐タンパ装置との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末と耐タンパ装置との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。
この発明によれば、耐タンパ装置から送信される制御変数値に基づいて、制御構造を平滑化したプログラムを端末で実行して、このプログラムの難読化を実現できる。また、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
<実行順序検証システムの構成>
本実施形態に係る実行順序検証システム1は、図1に示すように、プログラムを実行する端末10と、端末10と通信可能に接続された耐タンパ装置20と、を備える。
<端末の構成>
端末10は、平滑化処理部11、制御変数値要求部12、実行処理部13、および暗号化・復号化処理部14を備える。平滑化処理部11は、プログラムの制御構造を平滑化するために設けられ、ブロック切り出し部111、制御変数設定部112、制御変数値割当て部113、ブロック並列化処理部114、および要求処理付加部115を備える。
ブロック切り出し部111は、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す。制御変数設定部112は、各ブロックの実行順序を制御するための制御変数を設定する。制御変数値割当て部113は、各ブロックに、制御変数がとるべき制御変数値を割当てる。割当てられた各ブロックに対応する制御変数値は、後述の耐タンパ装置20の制御変数値送信部21に格納される。ブロック並列化処理部114は、各ブロックを並列に並べる。要求処理付加部115は、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置20に要求する関数の関数呼び出しを付加する。
制御変数値要求部12は、要求処理付加部115により付加された関数呼び出しが実行されると、実行された関数呼び出しに応じた制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置20に送信する。実行処理部13は、耐タンパ装置20から送信された制御変数値に応じたブロックを実行する。暗号化・復号化処理部14は、制御変数値要求部12により送信される制御変数値要求信号を暗号化するとともに、耐タンパ装置20から送信される暗号化された制御変数値を復号化する。
<耐タンパ装置の構成>
耐タンパ装置20は、制御変数値送信部21、実行順序検証部22、および暗号化・復号化処理部23を備える。制御変数値送信部21には、上述の要求処理付加部115により付加された関数呼び出しに応じた関数と、上述の制御変数値割当て部113により各ブロックに割当てられた制御変数値と、が格納される。この制御変数値送信部21は、端末10から送信された制御変数値要求信号が送信されると、送信された制御変数値要求信号に応じた関数を実行して、送信された制御変数値要求信号に応じた制御変数値を端末10に送信する。
実行順序検証部22は、端末10から送信された制御変数値要求信号に基づいて、端末10における各ブロックの実行順序を検証する。暗号化・復号化処理部23は、制御変数値送信部21により送信される制御変数値を暗号化するとともに、耐タンパ装置20から送信される暗号化された制御変数値要求信号を復号化する。
<端末におけるプログラムの平滑化処理>
図2から図7を用いて、端末10におけるプログラムの平滑化処理について説明する。
まず、ブロック切り出し部111により、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す(ステップS1)。図3では、プログラムのソースコードに含まれる連続した命令が、3つのブロックB1、B2、B3に切り出されている。
次に、制御変数設定部112により、各ブロックの実行順序を制御するための制御変数を設定する(ステップS2)。図4では、図3に示したプログラムに対して、制御変数「int C」が設定されている。
次に、制御変数値割当て部113により、各ブロックに、制御変数がとるべき制御変数値を割当てる(ステップS3)。図5では、図3に示したブロックB1〜B3のそれぞれに対して、「5」、「9」、「4」が制御変数値として割当てられている。
次に、ブロック並列化処理部114により、switch文またはif文を用いて、各ブロックを並列に並べる(ステップS4)。図6では、図3に示したブロックB1〜B3のそれぞれが並列に並べられている。
次に、要求処理付加部115により、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置20に要求する関数の関数呼び出しを付加する(ステップS5)。図7では、図3に示したブロックB1の最後には、次に実行すべきブロックB2に割当てられた制御変数値「9」の送信を耐タンパ装置20に要求する関数の関数呼び出し「Func1()」が付加されている。また、ブロックB2の最後には、次に実行すべきブロックB3に割当てられた制御変数値「4」の送信を耐タンパ装置20に要求する関数の関数呼び出し「Func2()」が付加されている。
<端末におけるプログラムの平滑化処理例>
図8から図11を用いて、端末10におけるプログラムの平滑化処理例について説明する。
図8は、プログラムのソースコードを示す。図9は、図8に示したプログラムに対して、上述のステップS1の処理を行った様子を示す。この図9では、5つのブロックBL1、BL2、BL3、BL4、BL5が切り出されている。なお、図8に示したプログラムからブロックBL1〜BL5を切り出した残りの部分を、便宜上、図8に示すようにブロックInitBLと呼ぶこととすると、このプログラムの各ブロックの正規の実行順序は、ブロックInitBL、ブロックBL1、ブロックBL2、ブロックBL3、ブロックBL4、ブロックBL5の順序となる。
図10は、図8に示したプログラムに対して、上述のステップS2〜4の処理を行った様子を示す。具体的には、上述のステップS2の処理により、制御変数として「_aZGgXrudZn」を設定している。また、上述のステップS3の処理により、制御変数値として、ブロックBL1に「−940077074」を、ブロックBL2に「958820940」を、ブロックBL3に「859465332」を、ブロックBL4に「−511982858」を、ブロックBL5に「−248913326」を、割当てている。これら割当てられた制御変数値は、耐タンパ装置20の制御変数値送信部21に格納される。また、上述のステップS4の処理により、if文を用いて、ブロックBL1〜BL5のそれぞれを並列に並べている。
図11は、図10に示したプログラムに対して、上述のステップS5の処理を行った様子を示す。具体的には、ブロックBL1の最後には、図10に示した「_aZGgXrudZn=958820940」に代えて、「_aZGgXrudZn=GetFuncValue2()」が付加されている。ここで、「GetFuncValue2()」は、ブロックBL1の次に実行すべきブロックBL2に割当てられた制御変数値「958820940」の送信を、耐タンパ装置20に要求する関数の関数呼び出しである。
また、ブロックBL2の最後には、図10に示した「_aZGgXrudZn=859465332」に代えて、「_aZGgXrudZn=GetFuncValue3()」が付加されている。ここで、「GetFuncValue3()」は、ブロックBL2の次に実行すべきブロックBL3に割当てられた制御変数値「859465332」の送信を、耐タンパ装置20に要求する関数の関数呼び出しである。
また、ブロックBL3の最後には、図10に示した「_aZGgXrudZn=−511982858」に代えて、「_aZGgXrudZn=GetFuncValue1()」が付加されている。ここで、「GetFuncValue1()」は、ブロックBL3の次に実行すべきブロックBL4に割当てられた制御変数値「−511982858」の送信を、耐タンパ装置20に要求する関数の関数呼び出しである。
<端末におけるプログラムの実行処理>
端末10は、上述のプログラムの平滑化処理を完了した後に、平滑化処理が完了したプログラムの実行処理を行う。具体的には、実行処理部13により、上述の平滑化処理が完了したプログラムを実行し、上述の関数呼び出し「GetFuncValue1()」、「GetFuncValue2()」、「GetFuncValue3()」のいずれかが実行されると、制御変数値要求部12により、実行された関数呼び出しの種類に応じた制御変数値要求信号を耐タンパ装置20に送信する。そして、耐タンパ装置20から制御変数値が送信されると、実行処理部13により、送信された制御変数値に応じたブロックを実行する。
なお、制御変数値要求信号は、暗号化・復号化処理部14により暗号化された後、制御変数値要求部12により耐タンパ装置20に送信される。また、耐タンパ装置20から送信される制御変数値は、耐タンパ装置20の暗号化・復号化処理部23により暗号化されており、暗号化・復号化処理部14により復号化される。
<耐タンパ装置における制御変数値送信処理>
耐タンパ装置20は、端末10から制御変数値要求信号を送信されると、制御変数値送信部21により、送信された制御変数値要求信号に応じた関数、すなわち実行処理部13により実行された関数呼び出しに応じた関数を実行する。そして、関数を実行したことにより得られた制御変数値、すなわち実行処理部13により実行された関数呼び出しに応じた制御変数値を、端末10に送信する。
例えば、図11に示したプログラムにおいて、関数呼び出し「GetFuncValue1()」が端末10で実行されると、制御変数値送信部21により、制御変数値「−511982858」を端末10に送信する。
<耐タンパ装置における実行順序検証処理>
耐タンパ装置20は、端末10から制御変数値要求信号が送信されると、実行順序検証部22により、端末10における各ブロックの実行順序を検証する。具体的には、端末10から送信される制御変数値要求信号は、上述のように関数呼び出しの種類に応じて異なるため、呼び出される関数は、端末10から送信される制御変数値要求信号の種類に応じて異なる。このため、呼び出された関数の順序を実行順序検証部22により検証する。
例えば、図11に示したプログラムが端末10において実行される場合には、最初に呼び出された関数は、関数呼び出し「GetFuncValue2()」に応じたものであるか否かを、実行順序検証部22により検証する。検証の結果、関数呼び出し「GetFuncValue2()」に応じたものであると判別された場合には、制御変数値送信部21により、制御変数値「958820940」を端末10に送信する。一方、検証の結果、関数呼び出し「GetFuncValue2()」に応じたものではないと判別された場合には、制御変数値送信部21による端末10への制御変数値の送信を中断する。
以上のように、実行順序検証部22による検証により、プログラムの各ブロックが正規の順序で実行されているか否かを検証する。そして、検証の結果、プログラムの各ブロックが正規の順序で実行されていると判別された場合にのみ、端末10に制御変数値を送信して、端末10におけるプログラムの実行を許可することができる。
なお、端末10から送信される制御変数値要求信号は、端末10の暗号化・復号化処理部14により暗号化されており、暗号化・復号化処理部23により復号化される。また、制御変数値は、暗号化・復号化処理部23により暗号化された後、制御変数値送信部21により端末10に送信される。
以上によれば、上述の端末10および耐タンパ装置20を備える実行順序検証システム1では、これら端末および耐タンパ装置を備える実行順序検証システムでは、制御構造を平滑化したプログラムを端末10で実行するために、制御変数値の送信を耐タンパ装置20に要求する。すなわち、端末10で実行されるプログラムの処理の一部が、安全性の確保された耐タンパ装置20に格納されるため、このプログラムの難読化を実現できる。
また、上述の耐タンパ装置20を備える実行順序検証システム1では、端末10から送信される制御変数値要求信号に基づいて、端末10で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置20により的確に検証できる。具体的には、端末10は、1つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置20に送信する。上述のように、耐タンパ装置20において呼び出される関数は、送信される制御変数値要求信号の種類に応じて異なるため、耐タンパ装置20は、呼び出された関数の順序を検証することで、端末10で実行されているプログラムの各ブロックの実行順序を検証できる。
また、上述の端末10および耐タンパ装置20を備える実行順序検証システム1では、端末10と耐タンパ装置20との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末10と耐タンパ装置20との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。なお、端末10および耐タンパ装置20において、暗号化および復号化をセッション鍵を用いて行うこととし、このセッション鍵を通信を実行するたびに変更してもよい。これによれば、端末10と耐タンパ装置20との間で通信される内容について、盗聴されるのをより確実に防止して、プログラムの実行順序が解析されるのをより確実に防止できる。
また、上述の耐タンパ装置20を備える実行順序検証システム1では、実行順序検証部22による検証により、プログラムの各ブロックが正規の順序で実行されているか否かを検証する。そして、検証の結果、プログラムの各ブロックが正規の順序で実行されていると判別された場合にのみ、端末10に制御変数値を送信して、端末10におけるプログラムの実行を許可することができる。このため、上述のライセンスチェックブロックを備えるプログラムにおいて、ライセンスチェックの実行が飛ばされてしまうのを防止して、プログラムの正規ユーザであるか否かのチェックを確実に実行できる。
なお、本発明の端末10および耐タンパ装置20のそれぞれの処理をコンピュータ読み取り可能な記録媒体に記憶し、これら記録媒体に記録されたプログラムを端末10および耐タンパ装置20(いずれもコンピュータシステム)に読み込ませ、実行することによって、本発明を実現できる。
また、「コンピュータシステム」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、上述のプログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上述のプログラムは、上述の機能の一部を実現するためのものであってもよい。さらに、上述の機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
本発明の実施形態に係る実行順序検証システムの構成図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理のフローチャートである。 本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。 本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。
符号の説明
1・・・実行順序検証システム
10・・・端末
11・・・平滑化処理部
12・・・制御変数値要求部
13・・・実行処理部
20・・・耐タンパ装置
21・・・制御変数値送信部
22・・・実行順序検証部

Claims (9)

  1. プログラムを実行する端末と、前記端末と通信可能に接続された耐タンパ装置と、を備える実行順序検証システムであって、
    前記端末は、
    前記プログラムの制御構造を平滑化する平滑化処理手段と、
    前記プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する制御変数値要求手段と、
    前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する実行処理手段と、
    を備え、
    前記耐タンパ装置は、
    前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する制御変数値送信手段と、
    前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する実行順序検証手段と、
    を備えることを特徴とする実行順序検証システム。
  2. 前記平滑化処理手段は、
    前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出すブロック切り出し手段と、
    前記制御変数を設定する制御変数設定手段と、
    前記ブロックのそれぞれに、前記制御変数値を割当てる制御変数値割当て手段と、
    前記ブロックを並列に並べるブロック並列化処理手段と、
    前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する要求処理付加手段と、
    を備え、
    前記制御変数値要求手段は、前記要求処理付加手段により付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする請求項1に記載の実行順序検証システム。
  3. 前記端末は、
    前記耐タンパ装置に送信する情報を暗号化する端末用暗号化手段と、
    前記耐タンパ装置から受信した暗号化された情報を復号化する端末用復号化手段と、
    をさらに備え、
    前記耐タンパ装置は、
    前記端末に送信する情報を暗号化する耐タンパ装置用暗号化手段と、
    前記端末から受信した暗号化された情報を復号化する耐タンパ装置用復号化手段と、
    をさらに備えることを特徴とする請求項1又は2に記載の実行順序検証システム。
  4. 端末によるプログラムの実行順序を耐タンパ装置により検証する実行順序検証方法であって、
    前記端末により、前記プログラムの制御構造を平滑化する第1のステップと、
    前記端末により、前記プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第2のステップと、
    前記端末により、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第3のステップと、
    前記耐タンパ装置により、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第4のステップと、
    前記耐タンパ装置により、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第5のステップと、
    を備えることを特徴とする実行順序検証方法。
  5. 前記第1のステップでは、
    前記端末により、前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第6のステップと、
    前記端末により、前記制御変数を設定する第7のステップと、
    前記端末により、前記ブロックのそれぞれに、前記制御変数値を割当てる第8のステップと、
    前記端末により、前記ブロックを並列に並べる第9のステップと、
    前記端末により、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第10のステップと、
    を行い、
    前記第5のステップでは、前記第10のステップにより付加された処理が実行されると、前記端末により、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする請求項4に記載の実行順序検証方法。
  6. 前記端末により、前記耐タンパ装置に送信する情報を暗号化する第11のステップと、
    前記端末により、前記耐タンパ装置から受信した暗号化された情報を復号化する第12のステップと、
    前記耐タンパ装置により、前記端末に送信する情報を暗号化する第13のステップと、
    前記耐タンパ装置により、前記端末から受信した暗号化された情報を復号化する第14のステップと、さらに備えることを特徴とする請求項4又は5に記載の実行順序検証方法。
  7. 端末によるプログラムの実行順序を耐タンパ装置により検証する実行順序検証方法を、前記端末および前記耐タンパ装置に実行させるための実行順序検証プログラムであって、
    前記プログラムの制御構造を平滑化する第1のステップと、
    前記プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第2のステップと、
    前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第3のステップと、
    を前記端末に実行させ、
    前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第4のステップと、
    前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第5のステップと、
    を前記耐タンパ装置に実行させるための実行順序検証プログラム。
  8. 前記第1のステップでは、
    前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第6のステップと、
    前記制御変数を設定する第7のステップと、
    前記ブロックのそれぞれに、前記制御変数値を割当てる第8のステップと、
    前記ブロックを並列に並べる第9のステップと、
    前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第10のステップと、
    を前記端末に実行させ、
    前記第5のステップでは、前記第10のステップにより付加された処理の実行に基づいて、実行された処理に応じた制御変数値要求信号の前記耐タンパ装置への送信を前記端末に実行させるための請求項8に記載の実行順序検証プログラム。
  9. 前記耐タンパ装置に送信する情報を暗号化する第11のステップと、
    前記耐タンパ装置から受信した暗号化された情報を復号化する第12のステップと、
    を前記端末に実行させ、
    前記端末に送信する情報を暗号化する第13のステップと、
    前記端末から受信した暗号化された情報を復号化する第14のステップと、
    を前記耐タンパ装置に実行させるための請求項7又は8に記載の実行順序検証プログラム。
JP2008230921A 2008-09-09 2008-09-09 実行順序検証システム、実行順序検証方法、および実行順序検証プログラム Pending JP2010066883A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008230921A JP2010066883A (ja) 2008-09-09 2008-09-09 実行順序検証システム、実行順序検証方法、および実行順序検証プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008230921A JP2010066883A (ja) 2008-09-09 2008-09-09 実行順序検証システム、実行順序検証方法、および実行順序検証プログラム

Publications (1)

Publication Number Publication Date
JP2010066883A true JP2010066883A (ja) 2010-03-25

Family

ID=42192436

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008230921A Pending JP2010066883A (ja) 2008-09-09 2008-09-09 実行順序検証システム、実行順序検証方法、および実行順序検証プログラム

Country Status (1)

Country Link
JP (1) JP2010066883A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013003894A (ja) * 2011-06-17 2013-01-07 Mega Chips Corp メモリシステム、メモリ装置、およびメモリシステムの動作方法
US9007544B2 (en) 2012-12-27 2015-04-14 Panasonic Intellectual Property Management Co., Ltd. Display device

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013003894A (ja) * 2011-06-17 2013-01-07 Mega Chips Corp メモリシステム、メモリ装置、およびメモリシステムの動作方法
US9007544B2 (en) 2012-12-27 2015-04-14 Panasonic Intellectual Property Management Co., Ltd. Display device

Similar Documents

Publication Publication Date Title
US11675880B2 (en) Securing webpages, webapps and applications
CN108322461B (zh) 应用程序自动登录的方法、系统、装置、设备和介质
US9070112B2 (en) Method and system for securing documents on a remote shared storage resource
KR101010040B1 (ko) 파일의 암호화·복호화 방법, 장치, 프로그램 및 이프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
US20080209231A1 (en) Contents Encryption Method, System and Method for Providing Contents Through Network Using the Encryption Method
US20080005033A1 (en) Secure device licensing
US8959659B2 (en) Software authorization system and method
EP3198498B1 (en) A challenge-response method and associated computing device
CN107196907B (zh) 一种安卓so文件的保护方法及装置
CN106372497B (zh) 一种应用编程接口api保护方法和保护装置
CN111538977B (zh) 云api密钥的管理、云平台的访问方法、装置及服务器
US20150358321A1 (en) Storage device, information processing apparatus, and information processing method
US8571210B2 (en) Content protection apparatus and method using binding of additional information to encryption key
CN109284585A (zh) 一种脚本加密方法、脚本解密运行方法和相关装置
EP1785901B1 (en) Secure License Key Method and System
CN101140610A (zh) 使用drm卡的内容解密方法
CN103036852A (zh) 一种实现网络登录的方法以及装置
JP2010066883A (ja) 実行順序検証システム、実行順序検証方法、および実行順序検証プログラム
JP2017183930A (ja) サーバ管理システム、サーバ装置、サーバ管理方法、及びプログラム
US11310218B2 (en) Password streaming
KR102305691B1 (ko) 실시간 주문형 디지털 컨텐츠의 drm 패키징 방법과 이를 실행하기 위한 컴퓨팅 장치
JP5631164B2 (ja) マルチクラスタ分散処理制御システム、代表クライアント端末、マルチクラスタ分散処理制御方法
KR20010095907A (ko) 새로운 보안 기술을 이용한 컨텐츠 제공 시스템 및 그제공 방법
JP6492832B2 (ja) 暗号化装置、暗号化方法、暗号化プログラム、データ構造、及び、暗号化システム
KR101946874B1 (ko) 프로그램 인증 시스템.