(57)【要約】【課題】プログラムの実行順序を検証できる実行順序検証システム、実行順序検証方法、および実行順序検証プログラムを提供すること。【解決手段】実行順序検証システム１は、端末１０および耐タンパ装置２０を備える。端末１０は、プログラムの制御構造を平滑化する平滑化処理部１１と、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置２０に送信する制御変数値要求部１２と、制御変数値要求信号に応じて耐タンパ装置２０から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する実行処理部１３と、を備える。耐タンパ装置２０は、制御変数値要求信号に応じて、制御変数値を端末１０に送信する制御変数値送信部２１と、制御変数値要求信号に基づいて、端末１０におけるプログラムの実行順序を検証する実行順序検証部２２と、を備える。【選択図】図１
2010066883.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行する端末と、前記端末と通信可能に接続された耐タンパ装置と、を備える実行順序検証システムであって、
前記端末は、
前記プログラムの制御構造を平滑化する平滑化処理手段と、
前記プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する制御変数値要求手段と、
前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する実行処理手段と、
を備え、
前記耐タンパ装置は、
前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する制御変数値送信手段と、
前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する実行順序検証手段と、
を備えることを特徴とする実行順序検証システム。
【請求項２】
前記平滑化処理手段は、
前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出すブロック切り出し手段と、
前記制御変数を設定する制御変数設定手段と、
前記ブロックのそれぞれに、前記制御変数値を割当てる制御変数値割当て手段と、
前記ブロックを並列に並べるブロック並列化処理手段と、
前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する要求処理付加手段と、
を備え、
前記制御変数値要求手段は、前記要求処理付加手段により付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする請求項１に記載の実行順序検証システム。
【請求項３】
前記端末は、
前記耐タンパ装置に送信する情報を暗号化する端末用暗号化手段と、
前記耐タンパ装置から受信した暗号化された情報を復号化する端末用復号化手段と、
をさらに備え、
前記耐タンパ装置は、
前記端末に送信する情報を暗号化する耐タンパ装置用暗号化手段と、
前記端末から受信した暗号化された情報を復号化する耐タンパ装置用復号化手段と、
をさらに備えることを特徴とする請求項１又は２に記載の実行順序検証システム。
【請求項４】
端末によるプログラムの実行順序を耐タンパ装置により検証する実行順序検証方法であって、
前記端末により、前記プログラムの制御構造を平滑化する第１のステップと、
前記端末により、前記プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第２のステップと、
前記端末により、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第３のステップと、
前記耐タンパ装置により、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第４のステップと、
前記耐タンパ装置により、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第５のステップと、
を備えることを特徴とする実行順序検証方法。
【請求項５】
前記第１のステップでは、
前記端末により、前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第６のステップと、
前記端末により、前記制御変数を設定する第７のステップと、
前記端末により、前記ブロックのそれぞれに、前記制御変数値を割当てる第８のステップと、
前記端末により、前記ブロックを並列に並べる第９のステップと、
前記端末により、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第１０のステップと、
を行い、
前記第５のステップでは、前記第１０のステップにより付加された処理が実行されると、前記端末により、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする請求項４に記載の実行順序検証方法。
【請求項６】
前記端末により、前記耐タンパ装置に送信する情報を暗号化する第１１のステップと、
前記端末により、前記耐タンパ装置から受信した暗号化された情報を復号化する第１２のステップと、
前記耐タンパ装置により、前記端末に送信する情報を暗号化する第１３のステップと、
前記耐タンパ装置により、前記端末から受信した暗号化された情報を復号化する第１４のステップと、さらに備えることを特徴とする請求項４又は５に記載の実行順序検証方法。
【請求項７】
端末によるプログラムの実行順序を耐タンパ装置により検証する実行順序検証方法を、前記端末および前記耐タンパ装置に実行させるための実行順序検証プログラムであって、
前記プログラムの制御構造を平滑化する第１のステップと、
前記プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第２のステップと、
前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第３のステップと、
を前記端末に実行させ、
前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第４のステップと、
前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第５のステップと、
を前記耐タンパ装置に実行させるための実行順序検証プログラム。
【請求項８】
前記第１のステップでは、
前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第６のステップと、
前記制御変数を設定する第７のステップと、
前記ブロックのそれぞれに、前記制御変数値を割当てる第８のステップと、
前記ブロックを並列に並べる第９のステップと、
前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第１０のステップと、
を前記端末に実行させ、
前記第５のステップでは、前記第１０のステップにより付加された処理の実行に基づいて、実行された処理に応じた制御変数値要求信号の前記耐タンパ装置への送信を前記端末に実行させるための請求項８に記載の実行順序検証プログラム。
【請求項９】
前記耐タンパ装置に送信する情報を暗号化する第１１のステップと、
前記耐タンパ装置から受信した暗号化された情報を復号化する第１２のステップと、
を前記端末に実行させ、
前記端末に送信する情報を暗号化する第１３のステップと、
前記端末から受信した暗号化された情報を復号化する第１４のステップと、
を前記耐タンパ装置に実行させるための請求項７又は８に記載の実行順序検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行順序を検証できる実行順序検証システム、実行順序検証方法、および実行順序検証プログラムに関する。
【背景技術】
【０００２】
一般に、プログラムには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方で、プログラムを解析するための技術（ＲＥ：Ｒｅｖｅｒｓｅ  Ｅｎｇｉｎｅｅｒｉｎｇ）も数多く開発されているのが現状である。このため、これらの技術によりプログラムが解析されると、不正者に秘密情報が入手されるという脅威が考えられる。
【０００３】
こうした脅威に対し、プログラムの仕様を保ったまま、プログラムの解析を困難にする難読化という技術がある。このプログラムの難読化方法として、プログラムのソースコードをブロック単位に切り出して、符号化された制御変数に代入されている制御変数値に基づいて各ブロックを実行することが提案されている（例えば、特許文献１参照）。このプログラムの難読化方法では、具体的には、各ブロックに、制御変数がとるべき値である制御変数値を割当て、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値を制御変数に代入する処理を付加する。これによれば、各ブロックは、制御変数に代入されている値に応じた順序で実行され、この制御変数は符号化されるため、プログラムの難読化を実現できる。
【特許文献１】特開２００８−７７４００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところが、プログラムの静的解析により、プログラムの各ブロックの実行順序を解析できてしまうおそれがあった。ここで、例えば、プログラムの正規ユーザであるか否かをチェックするブロックをライセンスチェックブロックと呼ぶものとする。このとき、ライセンスチェックブロックを備えるプログラムにおいて、各ブロックの実行順序を解析できてしまうと、正規の順序ではライセンスチェックブロックが実行されるタイミングであるにもかかわらず、このライセンスチェックブロックの実行を飛ばして、他のブロックを実行させることができてしまう。これでは、ライセンスチェックブロックが実行されていない状態で、他のブロックを実行できてしまうので、正規ユーザではないにもかかわらず、このプログラムを利用できてしまうことになる。
【０００５】
このため、プログラムが正規の順序で実行されているか否かを判別するために、プログラムの実行順序を検証できることが求められていた。
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、プログラムの実行順序を検証できる検証システム、検証方法、および検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の事項を提案している。
【０００８】
（１）本発明は、プログラムを実行する端末（例えば、図１の端末１０に相当）と、前記端末と通信可能に接続された耐タンパ装置（例えば、図１の耐タンパ装置２０に相当）と、を備える実行順序検証システム（例えば、図１の実行順序検証システム１に相当）であって、前記端末は、前記プログラムの制御構造を平滑化する平滑化処理手段（例えば、図１の平滑化処理部１１に相当）と、前記プログラムの実行順序を制御するための制御変数（例えば、図５の「ｉｎｔ  Ｃ」、図１０の「＿ａＺＧｇＸｒｕｄＺｎ」に相当）がとるべき制御変数値（例えば、図５の「５」、「９」、「４」、図１０の「−９４００７７０７４」、「９５８８２０９４０」、「８５９４６５３３２」、「−５１１９８２８５８」、「−２４８９１３３２６」に相当）の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する制御変数値要求手段（例えば、図１の制御変数値要求部１２に相当）と、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する実行処理手段（例えば、図１の実行処理部１３に相当）と、を備え、前記耐タンパ装置は、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する制御変数値送信手段（例えば、図１の制御変数値送信部２１に相当）と、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する実行順序検証手段（例えば、図１の実行順序検証部２２に相当）と、を備えることを特徴とする実行順序検証システムを提案している。
【０００９】
この発明によれば、端末は、平滑化処理手段により、プログラムの制御構造を平滑化し、制御変数値要求手段により、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置に送信する。そして、実行処理手段により、制御変数値要求信号に応じて耐タンパ装置から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する。一方、耐タンパ装置は、制御変数値送信手段により、制御変数値要求信号に応じて、制御変数値を端末に送信する。以上によれば、これら端末および耐タンパ装置を備える実行順序検証システムでは、制御構造を平滑化したプログラムを端末で実行するために、制御変数値の送信を耐タンパ装置に要求する。すなわち、端末で実行されるプログラムの処理の一部が、安全性の確保された耐タンパ装置に格納されるため、このプログラムの難読化を実現できる。
【００１０】
また、この発明によれば、耐タンパ装置は、実行順序検証手段により、制御変数値要求信号に基づいて、端末におけるプログラムの実行順序を検証する。このため、この耐タンパ装置を備える実行順序検証システムでは、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
【００１１】
（２）本発明は、（１）の実行順序検証システムについて、前記平滑化処理手段は、前記プログラムのソースコードに含まれる連続した命令をブロック単位（例えば、図３のブロックＢ１〜Ｂ３、図９のＢＬ１〜ＢＬ５に相当）に切り出すブロック切り出し手段（例えば、図１のブロック切り出し部１１１に相当）と、前記制御変数を設定する制御変数設定手段（例えば、図１の制御変数設定部１１２に相当）と、前記ブロックのそれぞれに、前記制御変数値を割当てる制御変数値割当て手段（例えば、図１の制御変数値割当て部１１３に相当）と、前記ブロックを並列に並べるブロック並列化処理手段（例えば、図１のブロック並列化処理部１１４に相当）と、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理（例えば、図７の関数呼び出し「Ｆｕｎｃ１（）」、「Ｆｕｎｃ２（）」、図１１の関数呼び出し「ＧｅｔＦｕｎｃＶａｌｕｅ１（）」、「ＧｅｔＦｕｎｃＶａｌｕｅ２（）」、「ＧｅｔＦｕｎｃＶａｌｕｅ３（）」に相当）を付加する要求処理付加手段（例えば、図１の要求処理付加部１１５に相当）と、を備え、前記制御変数値要求手段は、前記要求処理付加手段により付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする実行順序検証システムを提案している。
【００１２】
この発明によれば、端末は、ブロック切り出し手段により、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出し、制御変数設定手段により、制御変数を設定する。そして、制御変数値割当て手段により、各ブロックに制御変数値を割当て、ブロック並列化処理手段により、各ブロックを並列に並べる。そして、要求処理付加手段により、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置に要求する処理を付加する。さらに、制御変数値要求手段により、要求処理付加手段により付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を耐タンパ装置に送信する。
【００１３】
このため、端末は、１つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置に送信する。したがって、耐タンパ装置は、各制御変数値要求信号が端末から送信される順序を検証することで、端末で実行されているプログラムの各ブロックの実行順序を検証できる。
【００１４】
（３）本発明は、（１）又は（２）の実行順序検証システムについて、前記端末は、前記耐タンパ装置に送信する情報を暗号化する端末用暗号化手段（例えば、図１の暗号化・復号化処理部１４に相当）と、前記耐タンパ装置から受信した暗号化された情報を復号化する端末用復号化手段（例えば、図１の暗号化・復号化処理部１４に相当）と、をさらに備え、前記耐タンパ装置は、前記端末に送信する情報を暗号化する耐タンパ装置用暗号化手段（例えば、図１の暗号化・復号化処理部２３に相当）と、前記端末から受信した暗号化された情報を復号化する耐タンパ装置用復号化手段（例えば、図１の暗号化・復号化処理部２３に相当）と、をさらに備えることを特徴とする実行順序検証システムを提案している。
【００１５】
この発明によれば、端末は、端末用暗号化手段により、耐タンパ装置に送信する情報を暗号化し、端末用復号化手段により、耐タンパ装置から受信した暗号化された情報を復号化する。また、耐タンパ装置は、耐タンパ装置用暗号化手段により、端末に送信する情報を暗号化し、耐タンパ装置用復号化手段により、端末から受信した暗号化された情報を復号化する。このため、端末と耐タンパ装置との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末と耐タンパ装置との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。
【００１６】
（４）本発明は、端末（例えば、図１の端末１０に相当）によるプログラムの実行順序を耐タンパ装置（例えば、図１の耐タンパ装置２０に相当）により検証する実行順序検証方法であって、前記端末により、前記プログラムの制御構造を平滑化する第１のステップ（例えば、図２のステップＳ１〜Ｓ５に相当）と、前記端末により、前記プログラムの実行順序を制御するための制御変数（例えば、図５の「ｉｎｔ  Ｃ」、図１０の「＿ａＺＧｇＸｒｕｄＺｎ」に相当）がとるべき制御変数値（例えば、図５の「５」、「９」、「４」、図１０の「−９４００７７０７４」、「９５８８２０９４０」、「８５９４６５３３２」、「−５１１９８２８５８」、「−２４８９１３３２６」に相当）の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第２のステップと、前記端末により、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第３のステップと、前記耐タンパ装置により、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第４のステップと、前記耐タンパ装置により、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第５のステップと、を備えることを特徴とする実行順序検証方法を提案している。
【００１７】
この発明によれば、端末では、プログラムの制御構造を平滑化し、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置に送信する。そして、制御変数値要求信号に応じて耐タンパ装置から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する。一方、耐タンパ装置では、制御変数値要求信号に応じて、制御変数値を端末に送信する。以上によれば、耐タンパ装置から送信される制御変数値に基づいて、制御構造を平滑化したプログラムを端末で実行して、このプログラムの難読化を実現できる。
【００１８】
また、この発明によれば、耐タンパ装置では、制御変数値要求信号に基づいて、端末におけるプログラムの実行順序を検証する。このため、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
【００１９】
（５）本発明は、（４）の実行順序検証方法について、前記第１のステップでは、前記端末により、前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第６のステップ（例えば、図２のステップＳ１に相当）と、前記端末により、前記制御変数を設定する第７のステップ（例えば、図２のステップＳ２に相当）と、前記端末により、前記ブロックのそれぞれに、前記制御変数値を割当てる第８のステップ（例えば、図２のステップＳ３に相当）と、前記端末により、前記ブロックを並列に並べる第９のステップ（例えば、図２のステップＳ４に相当）と、前記端末により、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第１０のステップ（例えば、図２のステップＳ５に相当）と、を行い、前記第５のステップでは、前記第１０のステップにより付加された処理が実行されると、前記端末により、実行された処理に応じた制御変数値要求信号を前記耐タンパ装置に送信することを特徴とする実行順序検証方法を提案している。
【００２０】
この発明によれば、端末では、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出し、制御変数を設定する。そして、各ブロックに制御変数値を割当て、各ブロックを並列に並べる。そして、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置に要求する処理を付加する。さらに、ブロックの最後に付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を耐タンパ装置に送信する。
【００２１】
このため、端末は、１つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置に送信する。したがって、耐タンパ装置は、各制御変数値要求信号が端末から送信される順序を検証することで、端末で実行されているプログラムの各ブロックの実行順序を検証できる。
【００２２】
（６）本発明は、（４）又は（５）の実行順序検証方法について、前記端末により、前記耐タンパ装置に送信する情報を暗号化する第１１のステップと、前記端末により、前記耐タンパ装置から受信した暗号化された情報を復号化する第１２のステップと、前記耐タンパ装置により、前記端末に送信する情報を暗号化する第１３のステップと、前記耐タンパ装置により、前記端末から受信した暗号化された情報を復号化する第１４のステップと、さらに備えることを特徴とする実行順序検証方法を提案している。
【００２３】
この発明によれば、端末では、耐タンパ装置に送信する情報を暗号化し、耐タンパ装置から受信した暗号化された情報を復号化する。また、耐タンパ装置では、端末に送信する情報を暗号化し、端末から受信した暗号化された情報を復号化する。このため、端末と耐タンパ装置との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末と耐タンパ装置との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。
【００２４】
（７）本発明は、端末（例えば、図１の端末１０に相当）によるプログラムの実行順序を耐タンパ装置（例えば、図１の耐タンパ装置２０に相当）により検証する実行順序検証方法を、前記端末および前記耐タンパ装置に実行させるための実行順序検証プログラムであって、前記プログラムの制御構造を平滑化する第１のステップ（例えば、図２のステップＳ１〜Ｓ５に相当）と、前記プログラムの実行順序を制御するための制御変数（例えば、図５の「ｉｎｔ  Ｃ」、図１０の「＿ａＺＧｇＸｒｕｄＺｎ」に相当）がとるべき制御変数値（例えば、図５の「５」、「９」、「４」、図１０の「−９４００７７０７４」、「９５８８２０９４０」、「８５９４６５３３２」、「−５１１９８２８５８」、「−２４８９１３３２６」に相当）の送信を要求する制御変数値要求信号を、前記耐タンパ装置に送信する第２のステップと、前記制御変数値要求信号に応じて前記耐タンパ装置から送信された制御変数値を前記制御変数に代入し、前記制御変数に代入されている値に基づいて、前記プログラムを実行する第３のステップと、を前記端末に実行させ、前記制御変数値要求信号に応じて、前記制御変数値を前記端末に送信する第４のステップと、前記制御変数値要求信号に基づいて、前記端末における前記プログラムの実行順序を検証する第５のステップと、を前記耐タンパ装置に実行させるための実行順序検証プログラムを提案している。
【００２５】
この発明によれば、実行順序検証プログラムを端末に実行させることで、プログラムの制御構造を平滑化し、プログラムの実行順序を制御するための制御変数がとるべき制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置に送信する。そして、制御変数値要求信号に応じて耐タンパ装置から送信された制御変数値を制御変数に代入し、制御変数に代入されている値に基づいて、プログラムを実行する。また、実行順序検証プログラムを耐タンパ装置に実行させることで、制御変数値要求信号に応じて、制御変数値を端末に送信する。以上によれば、耐タンパ装置から送信される制御変数値に基づいて、制御構造を平滑化したプログラムを端末で実行して、このプログラムの難読化を実現できる。
【００２６】
また、この発明によれば、実行順序検証プログラムを耐タンパ装置に実行させることで、制御変数値要求信号に基づいて、端末におけるプログラムの実行順序を検証する。このため、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
【００２７】
（８）本発明は、（７）の実行順序検証プログラムについて、前記第１のステップでは、前記プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す第６のステップ（例えば、図２のステップＳ１に相当）と、前記制御変数を設定する第７のステップ（例えば、図２のステップＳ２に相当）と、前記ブロックのそれぞれに、前記制御変数値を割当てる第８のステップ（例えば、図２のステップＳ３に相当）と、前記ブロックを並列に並べる第９のステップ（例えば、図２のステップＳ４に相当）と、前記ブロックのそれぞれの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を前記耐タンパ装置に要求する処理を付加する第１０のステップ（例えば、図２のステップＳ５に相当）と、を前記端末に実行させ、前記第５のステップでは、前記第１０のステップにより付加された処理の実行に基づいて、実行された処理に応じた制御変数値要求信号の前記耐タンパ装置への送信を前記端末に実行させるための実行順序検証プログラムを提案している。
【００２８】
この発明によれば、実行順序プログラムを端末に実行させることで、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出し、制御変数を設定する。そして、各ブロックに制御変数値を割当て、各ブロックを並列に並べる。そして、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置に要求する処理を付加する。さらに、ブロックの最後に付加された処理が実行されると、実行された処理に応じた制御変数値要求信号を耐タンパ装置に送信する。
【００２９】
このため、端末は、１つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置に送信する。したがって、耐タンパ装置は、各制御変数値要求信号が端末から送信される順序を検証することで、端末で実行されているプログラムの各ブロックの実行順序を検証できる。
【００３０】
（９）本発明は、（７）又は（８）の実行順序検証プログラムについて、前記耐タンパ装置に送信する情報を暗号化する第１１のステップと、前記耐タンパ装置から受信した暗号化された情報を復号化する第１２のステップと、を前記端末に実行させ、前記端末に送信する情報を暗号化する第１３のステップと、前記端末から受信した暗号化された情報を復号化する第１４のステップと、を前記耐タンパ装置に実行させるための実行順序検証プログラムを提案している。
【００３１】
この発明によれば、実行順序検証プログラムを端末に実行させることで、耐タンパ装置に送信する情報を暗号化し、耐タンパ装置から受信した暗号化された情報を復号化する。また、実行順序検証プログラムを耐タンパ装置に実行させることで、端末に送信する情報を暗号化し、端末から受信した暗号化された情報を復号化する。このため、端末と耐タンパ装置との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末と耐タンパ装置との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。
【発明の効果】
【００３２】
この発明によれば、耐タンパ装置から送信される制御変数値に基づいて、制御構造を平滑化したプログラムを端末で実行して、このプログラムの難読化を実現できる。また、端末から送信される制御変数値要求信号に基づいて、端末で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置により的確に検証できる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３４】
＜実行順序検証システムの構成＞
本実施形態に係る実行順序検証システム１は、図１に示すように、プログラムを実行する端末１０と、端末１０と通信可能に接続された耐タンパ装置２０と、を備える。
【００３５】
＜端末の構成＞
端末１０は、平滑化処理部１１、制御変数値要求部１２、実行処理部１３、および暗号化・復号化処理部１４を備える。平滑化処理部１１は、プログラムの制御構造を平滑化するために設けられ、ブロック切り出し部１１１、制御変数設定部１１２、制御変数値割当て部１１３、ブロック並列化処理部１１４、および要求処理付加部１１５を備える。
【００３６】
ブロック切り出し部１１１は、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す。制御変数設定部１１２は、各ブロックの実行順序を制御するための制御変数を設定する。制御変数値割当て部１１３は、各ブロックに、制御変数がとるべき制御変数値を割当てる。割当てられた各ブロックに対応する制御変数値は、後述の耐タンパ装置２０の制御変数値送信部２１に格納される。ブロック並列化処理部１１４は、各ブロックを並列に並べる。要求処理付加部１１５は、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置２０に要求する関数の関数呼び出しを付加する。
【００３７】
制御変数値要求部１２は、要求処理付加部１１５により付加された関数呼び出しが実行されると、実行された関数呼び出しに応じた制御変数値の送信を要求する制御変数値要求信号を、耐タンパ装置２０に送信する。実行処理部１３は、耐タンパ装置２０から送信された制御変数値に応じたブロックを実行する。暗号化・復号化処理部１４は、制御変数値要求部１２により送信される制御変数値要求信号を暗号化するとともに、耐タンパ装置２０から送信される暗号化された制御変数値を復号化する。
【００３８】
＜耐タンパ装置の構成＞
耐タンパ装置２０は、制御変数値送信部２１、実行順序検証部２２、および暗号化・復号化処理部２３を備える。制御変数値送信部２１には、上述の要求処理付加部１１５により付加された関数呼び出しに応じた関数と、上述の制御変数値割当て部１１３により各ブロックに割当てられた制御変数値と、が格納される。この制御変数値送信部２１は、端末１０から送信された制御変数値要求信号が送信されると、送信された制御変数値要求信号に応じた関数を実行して、送信された制御変数値要求信号に応じた制御変数値を端末１０に送信する。
【００３９】
実行順序検証部２２は、端末１０から送信された制御変数値要求信号に基づいて、端末１０における各ブロックの実行順序を検証する。暗号化・復号化処理部２３は、制御変数値送信部２１により送信される制御変数値を暗号化するとともに、耐タンパ装置２０から送信される暗号化された制御変数値要求信号を復号化する。
【００４０】
＜端末におけるプログラムの平滑化処理＞
図２から図７を用いて、端末１０におけるプログラムの平滑化処理について説明する。
【００４１】
まず、ブロック切り出し部１１１により、プログラムのソースコードに含まれる連続した命令をブロック単位に切り出す（ステップＳ１）。図３では、プログラムのソースコードに含まれる連続した命令が、３つのブロックＢ１、Ｂ２、Ｂ３に切り出されている。
【００４２】
次に、制御変数設定部１１２により、各ブロックの実行順序を制御するための制御変数を設定する（ステップＳ２）。図４では、図３に示したプログラムに対して、制御変数「ｉｎｔ  Ｃ」が設定されている。
【００４３】
次に、制御変数値割当て部１１３により、各ブロックに、制御変数がとるべき制御変数値を割当てる（ステップＳ３）。図５では、図３に示したブロックＢ１〜Ｂ３のそれぞれに対して、「５」、「９」、「４」が制御変数値として割当てられている。
【００４４】
次に、ブロック並列化処理部１１４により、ｓｗｉｔｃｈ文またはｉｆ文を用いて、各ブロックを並列に並べる（ステップＳ４）。図６では、図３に示したブロックＢ１〜Ｂ３のそれぞれが並列に並べられている。
【００４５】
次に、要求処理付加部１１５により、各ブロックの最後に、次に実行すべきブロックに割当てられた制御変数値の送信を耐タンパ装置２０に要求する関数の関数呼び出しを付加する（ステップＳ５）。図７では、図３に示したブロックＢ１の最後には、次に実行すべきブロックＢ２に割当てられた制御変数値「９」の送信を耐タンパ装置２０に要求する関数の関数呼び出し「Ｆｕｎｃ１（）」が付加されている。また、ブロックＢ２の最後には、次に実行すべきブロックＢ３に割当てられた制御変数値「４」の送信を耐タンパ装置２０に要求する関数の関数呼び出し「Ｆｕｎｃ２（）」が付加されている。
【００４６】
＜端末におけるプログラムの平滑化処理例＞
図８から図１１を用いて、端末１０におけるプログラムの平滑化処理例について説明する。
【００４７】
図８は、プログラムのソースコードを示す。図９は、図８に示したプログラムに対して、上述のステップＳ１の処理を行った様子を示す。この図９では、５つのブロックＢＬ１、ＢＬ２、ＢＬ３、ＢＬ４、ＢＬ５が切り出されている。なお、図８に示したプログラムからブロックＢＬ１〜ＢＬ５を切り出した残りの部分を、便宜上、図８に示すようにブロックＩｎｉｔＢＬと呼ぶこととすると、このプログラムの各ブロックの正規の実行順序は、ブロックＩｎｉｔＢＬ、ブロックＢＬ１、ブロックＢＬ２、ブロックＢＬ３、ブロックＢＬ４、ブロックＢＬ５の順序となる。
【００４８】
図１０は、図８に示したプログラムに対して、上述のステップＳ２〜４の処理を行った様子を示す。具体的には、上述のステップＳ２の処理により、制御変数として「＿ａＺＧｇＸｒｕｄＺｎ」を設定している。また、上述のステップＳ３の処理により、制御変数値として、ブロックＢＬ１に「−９４００７７０７４」を、ブロックＢＬ２に「９５８８２０９４０」を、ブロックＢＬ３に「８５９４６５３３２」を、ブロックＢＬ４に「−５１１９８２８５８」を、ブロックＢＬ５に「−２４８９１３３２６」を、割当てている。これら割当てられた制御変数値は、耐タンパ装置２０の制御変数値送信部２１に格納される。また、上述のステップＳ４の処理により、ｉｆ文を用いて、ブロックＢＬ１〜ＢＬ５のそれぞれを並列に並べている。
【００４９】
図１１は、図１０に示したプログラムに対して、上述のステップＳ５の処理を行った様子を示す。具体的には、ブロックＢＬ１の最後には、図１０に示した「＿ａＺＧｇＸｒｕｄＺｎ＝９５８８２０９４０」に代えて、「＿ａＺＧｇＸｒｕｄＺｎ＝ＧｅｔＦｕｎｃＶａｌｕｅ２（）」が付加されている。ここで、「ＧｅｔＦｕｎｃＶａｌｕｅ２（）」は、ブロックＢＬ１の次に実行すべきブロックＢＬ２に割当てられた制御変数値「９５８８２０９４０」の送信を、耐タンパ装置２０に要求する関数の関数呼び出しである。
【００５０】
また、ブロックＢＬ２の最後には、図１０に示した「＿ａＺＧｇＸｒｕｄＺｎ＝８５９４６５３３２」に代えて、「＿ａＺＧｇＸｒｕｄＺｎ＝ＧｅｔＦｕｎｃＶａｌｕｅ３（）」が付加されている。ここで、「ＧｅｔＦｕｎｃＶａｌｕｅ３（）」は、ブロックＢＬ２の次に実行すべきブロックＢＬ３に割当てられた制御変数値「８５９４６５３３２」の送信を、耐タンパ装置２０に要求する関数の関数呼び出しである。
【００５１】
また、ブロックＢＬ３の最後には、図１０に示した「＿ａＺＧｇＸｒｕｄＺｎ＝−５１１９８２８５８」に代えて、「＿ａＺＧｇＸｒｕｄＺｎ＝ＧｅｔＦｕｎｃＶａｌｕｅ１（）」が付加されている。ここで、「ＧｅｔＦｕｎｃＶａｌｕｅ１（）」は、ブロックＢＬ３の次に実行すべきブロックＢＬ４に割当てられた制御変数値「−５１１９８２８５８」の送信を、耐タンパ装置２０に要求する関数の関数呼び出しである。
【００５２】
＜端末におけるプログラムの実行処理＞
端末１０は、上述のプログラムの平滑化処理を完了した後に、平滑化処理が完了したプログラムの実行処理を行う。具体的には、実行処理部１３により、上述の平滑化処理が完了したプログラムを実行し、上述の関数呼び出し「ＧｅｔＦｕｎｃＶａｌｕｅ１（）」、「ＧｅｔＦｕｎｃＶａｌｕｅ２（）」、「ＧｅｔＦｕｎｃＶａｌｕｅ３（）」のいずれかが実行されると、制御変数値要求部１２により、実行された関数呼び出しの種類に応じた制御変数値要求信号を耐タンパ装置２０に送信する。そして、耐タンパ装置２０から制御変数値が送信されると、実行処理部１３により、送信された制御変数値に応じたブロックを実行する。
【００５３】
なお、制御変数値要求信号は、暗号化・復号化処理部１４により暗号化された後、制御変数値要求部１２により耐タンパ装置２０に送信される。また、耐タンパ装置２０から送信される制御変数値は、耐タンパ装置２０の暗号化・復号化処理部２３により暗号化されており、暗号化・復号化処理部１４により復号化される。
【００５４】
＜耐タンパ装置における制御変数値送信処理＞
耐タンパ装置２０は、端末１０から制御変数値要求信号を送信されると、制御変数値送信部２１により、送信された制御変数値要求信号に応じた関数、すなわち実行処理部１３により実行された関数呼び出しに応じた関数を実行する。そして、関数を実行したことにより得られた制御変数値、すなわち実行処理部１３により実行された関数呼び出しに応じた制御変数値を、端末１０に送信する。
【００５５】
例えば、図１１に示したプログラムにおいて、関数呼び出し「ＧｅｔＦｕｎｃＶａｌｕｅ１（）」が端末１０で実行されると、制御変数値送信部２１により、制御変数値「−５１１９８２８５８」を端末１０に送信する。
【００５６】
＜耐タンパ装置における実行順序検証処理＞
耐タンパ装置２０は、端末１０から制御変数値要求信号が送信されると、実行順序検証部２２により、端末１０における各ブロックの実行順序を検証する。具体的には、端末１０から送信される制御変数値要求信号は、上述のように関数呼び出しの種類に応じて異なるため、呼び出される関数は、端末１０から送信される制御変数値要求信号の種類に応じて異なる。このため、呼び出された関数の順序を実行順序検証部２２により検証する。
【００５７】
例えば、図１１に示したプログラムが端末１０において実行される場合には、最初に呼び出された関数は、関数呼び出し「ＧｅｔＦｕｎｃＶａｌｕｅ２（）」に応じたものであるか否かを、実行順序検証部２２により検証する。検証の結果、関数呼び出し「ＧｅｔＦｕｎｃＶａｌｕｅ２（）」に応じたものであると判別された場合には、制御変数値送信部２１により、制御変数値「９５８８２０９４０」を端末１０に送信する。一方、検証の結果、関数呼び出し「ＧｅｔＦｕｎｃＶａｌｕｅ２（）」に応じたものではないと判別された場合には、制御変数値送信部２１による端末１０への制御変数値の送信を中断する。
【００５８】
以上のように、実行順序検証部２２による検証により、プログラムの各ブロックが正規の順序で実行されているか否かを検証する。そして、検証の結果、プログラムの各ブロックが正規の順序で実行されていると判別された場合にのみ、端末１０に制御変数値を送信して、端末１０におけるプログラムの実行を許可することができる。
【００５９】
なお、端末１０から送信される制御変数値要求信号は、端末１０の暗号化・復号化処理部１４により暗号化されており、暗号化・復号化処理部２３により復号化される。また、制御変数値は、暗号化・復号化処理部２３により暗号化された後、制御変数値送信部２１により端末１０に送信される。
【００６０】
以上によれば、上述の端末１０および耐タンパ装置２０を備える実行順序検証システム１では、これら端末および耐タンパ装置を備える実行順序検証システムでは、制御構造を平滑化したプログラムを端末１０で実行するために、制御変数値の送信を耐タンパ装置２０に要求する。すなわち、端末１０で実行されるプログラムの処理の一部が、安全性の確保された耐タンパ装置２０に格納されるため、このプログラムの難読化を実現できる。
【００６１】
また、上述の耐タンパ装置２０を備える実行順序検証システム１では、端末１０から送信される制御変数値要求信号に基づいて、端末１０で実行されているプログラムの実行順序を、安全性の確保された耐タンパ装置２０により的確に検証できる。具体的には、端末１０は、１つのブロックの実行を行うと、次に実行すべきブロックに割当てられた制御変数値に応じた制御変数値要求信号を耐タンパ装置２０に送信する。上述のように、耐タンパ装置２０において呼び出される関数は、送信される制御変数値要求信号の種類に応じて異なるため、耐タンパ装置２０は、呼び出された関数の順序を検証することで、端末１０で実行されているプログラムの各ブロックの実行順序を検証できる。
【００６２】
また、上述の端末１０および耐タンパ装置２０を備える実行順序検証システム１では、端末１０と耐タンパ装置２０との間の通信は、暗号化される。したがって、制御変数値要求信号や制御変数値といった端末１０と耐タンパ装置２０との間で通信される内容について、盗聴されるのを防止して、プログラムの実行順序が解析されるのを防止できる。なお、端末１０および耐タンパ装置２０において、暗号化および復号化をセッション鍵を用いて行うこととし、このセッション鍵を通信を実行するたびに変更してもよい。これによれば、端末１０と耐タンパ装置２０との間で通信される内容について、盗聴されるのをより確実に防止して、プログラムの実行順序が解析されるのをより確実に防止できる。
【００６３】
また、上述の耐タンパ装置２０を備える実行順序検証システム１では、実行順序検証部２２による検証により、プログラムの各ブロックが正規の順序で実行されているか否かを検証する。そして、検証の結果、プログラムの各ブロックが正規の順序で実行されていると判別された場合にのみ、端末１０に制御変数値を送信して、端末１０におけるプログラムの実行を許可することができる。このため、上述のライセンスチェックブロックを備えるプログラムにおいて、ライセンスチェックの実行が飛ばされてしまうのを防止して、プログラムの正規ユーザであるか否かのチェックを確実に実行できる。
【００６４】
なお、本発明の端末１０および耐タンパ装置２０のそれぞれの処理をコンピュータ読み取り可能な記録媒体に記憶し、これら記録媒体に記録されたプログラムを端末１０および耐タンパ装置２０（いずれもコンピュータシステム）に読み込ませ、実行することによって、本発明を実現できる。
【００６５】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上述のプログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６６】
また、上述のプログラムは、上述の機能の一部を実現するためのものであってもよい。さらに、上述の機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００６７】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【００６８】
【図１】本発明の実施形態に係る実行順序検証システムの構成図である。
【図２】本発明の実施形態に係る端末におけるプログラムの平滑処理のフローチャートである。
【図３】本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。
【図４】本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。
【図５】本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。
【図６】本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。
【図７】本発明の実施形態に係る端末におけるプログラムの平滑処理を説明するための図である。
【図８】本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。
【図９】本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。
【図１０】本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。
【図１１】本発明の実施形態に係る端末におけるプログラムの平滑処理例を説明するための図である。
【符号の説明】
【００６９】
１・・・実行順序検証システム
１０・・・端末
１１・・・平滑化処理部
１２・・・制御変数値要求部
１３・・・実行処理部
２０・・・耐タンパ装置
２１・・・制御変数値送信部
２２・・・実行順序検証部
【図１】
2010066883.tif 000003
【図２】
2010066883.tif 000004
【図３】
2010066883.tif 000005
【図４】
2010066883.tif 000006
【図５】
2010066883.tif 000007
【図６】
2010066883.tif 000008
【図７】
2010066883.tif 000009
【図８】
2010066883.tif 000010
【図９】
2010066883.tif 000011
【図１０】
2010066883.tif 000012
【図１１】
2010066883.tif 000013