ソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラム
【課題】ソフトウェアを格納する端末と耐タンパ装置とを連携させることにより、端末上のソフトウェアを安全に実行できる。
【解決手段】端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。
【解決手段】端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアを格納する端末と耐タンパ装置とを連携させて、端末に格納されたソフトウェアを保護するソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラムに関する。
【背景技術】
【0002】
ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術(RE:Reverse Engineering)が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【0003】
この一例として、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法であって、符号化を施すn個(但し、nは正整数)の変数を任意に選択し、m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成する。そして、生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数に符号化する。これにより、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を行う技術が開示されている(例えば、特許文献1参照。)。
【0004】
また、外部の耐タンパ装置により、実行順序を制御してプログラムの難読化を行うことも考えられる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006−079347号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、前者の方法では、端末上のソフトウェア単体を変換する方法であるため、実行に必要なデータがすべてソフトウェア自身に含まれ、不正コピーの防止には、有効ではないという問題がある。一方で、後者の方法では、ソフトウェア単体では、動作しないため、不正コピーの防止には適用できるが、耐タンパ装置が保持する処理の実行順序は、固定データであるため、ソフトウェアの任意の箇所に特定の文字列を出力する命令を追加し実行することにより、処理順序が攻撃者に露呈する可能性がある。
【0007】
そこで、本発明は、上述の課題に鑑みてなされたものであり、ソフトウェアを格納する端末と耐タンパ装置とを連携させることにより、端末上のソフトウェアを安全に実行できるソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、上記の課題を解決するために以下の事項を提案している。
【0009】
(1)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、前記端末が、前記ソフトウェア上の符号化されたデータのみを処理する処理手段と、該処理結果を前記耐タンパ装置に送信する処理結果送信手段と、を備え、前記耐タンパ装置が、前記受信した処理結果を検証する検証手段と、該処理結果が正当であるときに、復号処理を行う復号処理手段と、該復号処理を行った結果を前記端末に送信する復号処理結果送信手段と、を備え、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力することを特徴とするソフトウェア保護システムを提案している。
【0010】
この発明によれば、端末の処理手段は、ソフトウェア上の符号化されたデータのみを処理する。端末の処理結果送信手段は、その処理結果を耐タンパ装置に送信する。耐タンパ装置の検証手段は、受信した処理結果を検証する。耐タンパ装置の復号処理手段は、その処理結果が正当であるときに、復号処理を行う。耐タンパ装置の復号処理結果送信手段は、その復号処理を行った結果を端末に送信する。そして、端末内のソフトウェアは、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0011】
(2)本発明は、(1)のソフトウェア保護システムについて、前記耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証することを特徴とするソフトウェア保護システムを提案している。
【0012】
この発明によれば、耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証する。一般に、耐タンパ装置は、入力が正当なものであるか否かを検証する必要があるが、端末上のソフトウェアに存在するすべてのデータを解析可能と仮定すると、ソフトウェアと耐タンパ装置との間で、認証鍵を安全に共有することは不可能であるが、本発明によれば、耐タンパ装置に入力されるデータの正当性を正確に検証することができる。
【0013】
(3)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、前記端末が、前記ソフトウェアを変換する変換手段と、該変換したソフトウェアを送信する変換ソフトウェア送信手段と、を備え、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する取得手段と、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する検証手段と、正当である場合に、変数の値を復号する復号手段と、該復号した値を前記端末内のソフトウェアに返送する返送手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0014】
この発明によれば、端末の変換手段は、ソフトウェアを変換する。端末の変換ソフトウェア送信手段は、変換したソフトウェアを送信する。耐タンパ装置の取得手段は、受信したソフトウェアからすべての符号化変数を取得する。耐タンパ装置の検証手段は、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する。耐タンパ装置の復号手段は、正当である場合に、変数の値を復号する。耐タンパ装置の返送手段は、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0015】
(4)本発明は、(3)のソフトウェア保護システムについて、前記変換手段が、符号化の対象となる変数を選択する選択手段と、該選択した符号化変数からm個の符号化変数を決定する符号化変数決定手段と、符号化ルールおよび復号化ルールを決定するルール決定手段と、ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、変換したソフトウェアを正しく実行できるように修正する修正手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0016】
この発明によれば、選択手段は、符号化の対象となる変数を選択し、符号化変数決定手段は、選択した符号化変数からm個の符号化変数を決定する。そして、ルール決定手段が、符号化ルールおよび復号化ルールを決定し、置き換え手段が、ソフトウェア内の符号化変数を他の符号化変数に置き換え、修正手段が変換したソフトウェアを正しく実行できるように修正する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0017】
(5)本発明は、(4)のソフトウェア保護システムについて、前記置き換え手段が、代入が行われている対象変数を置換する第1の置換手段と、参照が行われている対象変数を置換する第2の置換手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0018】
この発明によれば、第1の置換手段は、代入が行われている対象変数を置換し、第2の置換手段は、参照が行われている対象変数を置換する。これにより、効果的に難読化を実行することができる。
【0019】
(6)本発明は、(4)のソフトウェア保護システムについて、前記修正手段が、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、前記第1の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、実行結果を出力する命令の直前に、前記耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する命令追加手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0020】
この発明によれば、追加手段は、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加し、変換手段は、第1の置換手段で置換した代入命令を実行できる命令列に変換する。そして、命令追加手段は、実行結果を出力する命令の直前に、耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する。したがって、この処理により、難読化を図りつつ、実行可能なソフトウェアとすることができる。
【0021】
(7)本発明は、(1)から(6)のソフトウェア保護システムについて、前記耐タンパ装置がCPUであることを特徴とするソフトウェア保護システムを提案している。
【0022】
この発明によれば、耐タンパ装置がCPUである。したがって、最も簡便な装置として、CPUを耐タンパ装置として用いることができる。
【0023】
(8)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、前記端末が、前記プログラム上の符号化されたデータのみを処理する第1のステップと、前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第5のステップと、を備えたことを特徴とするソフトウェア保護方法を提案している。
【0024】
この発明によれば、端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を前記端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0025】
(9)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、前記端末が、前記ソフトウェアを変換する第1のステップと、前記端末が、該変換したソフトウェアを送信する第2のステップと、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、を備えたことを特徴とするソフトウェア保護方法を提案している。
【0026】
この発明によれば、端末が、ソフトウェアを変換し、端末が、変換したソフトウェアを送信する。耐タンパ装置は、受信したソフトウェアからすべての符号化変数を取得し、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証し、正当である場合に、変数の値を復号する。そして、耐タンパ装置が、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0027】
(10)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、前記端末が、前記プログラム上の符号化されたデータのみを処理する第1のステップと、前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第5のステップと、をコンピュータに実行させるためのプログラムを提案している。
【0028】
この発明によれば、端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を前記端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0029】
(11)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、前記端末が、前記ソフトウェアを変換する第1のステップと、前記端末が、該変換したソフトウェアを送信する第2のステップと、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、をコンピュータに実行させるためのプログラムを提案している。
【0030】
この発明によれば、端末が、ソフトウェアを変換し、端末が、変換したソフトウェアを送信する。耐タンパ装置は、受信したソフトウェアからすべての符号化変数を取得し、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証し、正当である場合に、変数の値を復号する。そして、耐タンパ装置が、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【発明の効果】
【0031】
本発明によれば、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上するという効果がある。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【図面の簡単な説明】
【0032】
【図1】本発明のソフトウェア保護システムの構成を示す図である。
【図2】第1の実施形態に係る端末の構成を示す図である。
【図3】第1の実施形態に係る耐タンパ装置の構成を示す図である。
【図4】第1の実施形態に係るソフトウェア保護システムの処理フローである。
【図5】第2の実施形態に係る端末の構成を示す図である。
【図6】第2の実施形態に係る耐タンパ装置の構成を示す図である。
【図7】第2の実施形態に係る変換部の詳細な構成を示す図である。
【図8】第2の実施形態に係る置き換え部の詳細な構成を示す図である。
【図9】第2の実施形態に係る修正部の詳細な構成を示す図である。
【図10】第2の実施形態に係るソフトウェア保護システムの処理フローである。
【図11】実施例に係る元のソフトウェアのソースコードを例示した図である。
【図12】実施例に係る変換されたソフトウェアのソースコードを例示した図である。
【図13】実施例に係る耐タンパ装置の処理内容を例示した図である。
【発明を実施するための形態】
【0033】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0034】
<ソフトウェア保護システムの構成>
図1に示すように、本発明のソフトウェア保護システムは、端末100と、端末上で動作するソフトウェア101と、耐タンパ装置200とから構成されている。このシステムにおいては、端末100と耐タンパ装置200とが連携して、ソフトウェアを保護する。なお、耐タンパ装置200としては、例えば、CPU等を用いてもよい。
【0035】
<第1の実施形態>
図1から図4を用いて、本発明の第1の実施形態について、説明する。
【0036】
<端末の構成>
本実施形態に係る端末100は、図2に示すように、処理部102と、処理結果送信部103と、受信部104と、出力部105とから構成されている。
【0037】
処理部102は、ソフトウェア上の符号化されたデータのみを処理する。処理結果送信部103は、処理結果を耐タンパ装置200に送信する。受信部104は、耐タンパ装置200から復号処理結果を受信する。出力部105は、受信した値を結果として出力する。
【0038】
<耐タンパ装置の構成>
本実施形態に係る耐タンパ装置200は、図3に示すように、受信部201と、検証部202と、復号処理部203と、結果送信部204とから構成されている。
【0039】
受信部201は、端末100での処理結果を受信する。検証部202は、受信した処理結果を検証する。復号処理部203は、処理結果が正当であるときに、復号処理を行う。結果送信部204は、復号処理を行った結果を端末100に送信する。
【0040】
<ソフトウェア保護システムの処理>
図4を用いて、本実施形態に係るソフトウェア保護システムの処理について説明する。
【0041】
端末100が、ソフトウェア上の符号化されたデータのみを処理し(ステップS101)、その処理結果を耐タンパ装置200に送信する(ステップS102)。
【0042】
耐タンパ装置200は、受信した処理結果を検証し(ステップS103)、その処理結果が正当であるときに、復号処理を行う(ステップS104)。また、復号処理を行った結果を端末100に送信する(ステップS105)。一方、端末100内のソフトウェア101が、耐タンパ装置200から受信した値を結果として出力する(ステップS106)。
【0043】
したがって、本実施形態によれば、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0044】
<第2の実施形態>
図5から図9を用いて、本発明の第2の実施形態について説明する。
【0045】
<端末の構成>
本実施形態に係る端末100は、図5に示すように、変換部301と、送信部302とから構成されている。
【0046】
変換部301は、ソフトウェア101を変換する。送信部302は、変換したソフトウェアを送信する。なお、変換部301の処理の詳細については、後述する。
【0047】
<耐タンパ装置の構成>
本実施形態に係る耐タンパ装置200は、図6に示すように、取得部401と、検証部402と、復号部403と、返送部404とから構成されている。
【0048】
取得部401は、受信したソフトウェアからすべての符号化変数を取得する。検証部402は、その取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する。
【0049】
復号部403は、検証結果が正当である場合に、変数の値を復号する。返送部404は、その復号した値を端末100内のソフトウェア101に返送する。
【0050】
<変換部の内部構成>
図7に示すように、変換部301は、さらに、選択部310と、符号化変数決定部320と、ルール決定部330と、置き換え部340と、修正部350とから構成されている。
【0051】
なお、以下では、対象ソフトウェアには、N個の変数、x1、x2、・・・、xnが含まれているものとし、変数x1に格納される値が実行結果として出力されているものと仮定して、一般性を失わないものとする。また、実行結果を格納する変数が複数存在する場合も、1つの変数に実行結果を格納するソフトウェアが複数存在するものとみなすことで、個々のソフトウェアについて同様に扱うことができる。さらに、以下では、符号化の対象は、すべて32ビットの変数であるとする。
【0052】
選択部310は、符号化の対象とするn個の変数x1、x2、・・・、xnを選択する。ここで、実行結果が格納される変数x1は、符号化対象として選択する必要がある。また、個数nは、任意であり、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。但し、以下の変数は、符号化対象から除外するものとする。1)利用者の入力が直接書き込まれる変数。2)アドレス演算子により当該変数のアドレスが取得されている変数。
【0053】
符号化変数決定部320は、m個の符号化変数y1、y2、・・・、ymを決定する。ここで、個数mは、符号化対象変数の個数nよりも大きく設定する。なお、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。
【0054】
ルール決定部330は、m行n列のプール行列Aとm次元の整数型ベクトルbを任意に決定する。但し、行列Aは、ランクがnとなるように選択する。行列Aと整数型ベクトルbとにより、以下の関係式数1を構成する。
【0055】
【数1】
【0056】
上式の各行を符号化ルールとすると、数2のようになる。
【0057】
【数2】
【0058】
次に、符号化ルールを未知変数x1、x2、・・・、xnに対する連立方程式とみなし、解くことにより、数3を得る。
【0059】
【数3】
【0060】
この各式を復号ルールとする。なお、上記の連立方程式を解く過程では、n個の符号化ルールが使われる。使われなかった符号化ルールに含まれる変数x1、x2、・・・、xnを復号ルールを用いて符号化変数に置き換えることで、m−n個の非自明な関係式が得られる。ここで、符号化変数y1、y2、・・・、ymは、常にこれらの関係式をみたす。
【0061】
置き換え部340は、プログラム内の符号化対象変数x1、x2、・・・、xnを、符号化変数y1、y2、・・・、ymで置き換える、まず、代入が行われている変数を符号化変数に置き換え、次に、参照が行われている変数を符号化変数に置き換える、ただし、変数x1に格納された実行結果を出力する命令は、ここでの置き換えの対象外とする。
【0062】
具体的には、図8に示す第1の置換部341が代入命令xi←fを以下、数4に示す命令に置き換える。
【0063】
【数4】
【0064】
これにより、右辺の関数e1、e2、・・・、emにおいては、代入が行われる対象変数xiが、式fに置換されている。
【0065】
また、図8に示す第2の置換部342は、上記の処理で得られた命令列において、参照されている対象変数x1、x2、・・・、xnを、それぞれ、復号ルールd1、d2、・・・、dnで置き換え、式を整理する。
【0066】
修正部350は、変換したソフトウェアを正しく実行できるようにするため、修正する。具体的には、図9に示す追加部351が符号化変数y1、y2、・・・、ymおよびこれらの変数の値を退避するための一時変数t1、t2、・・・、tmの定義を追加する。
【0067】
また、図9に示す変換部352は、第1の置換部341で変換した命令を逐次実行できる命令列に変換する。つまり、数5に示す命令列を数6に示す命令列に変更する。このように、更新前の符号化変数の値を一時変数に退避しておくことで、更新後の符号化変数の値を順次計算できる。ここで、関数e1´、e2´、・・・、em´は、それぞれ、関数e1、e2、・・・、emにおいて、符号化変数y1、y2、・・・、ymを一時変数t1、t2、・・・、tmで置き換えたものである。
【0068】
【数5】
【0069】
【数6】
【0070】
さらに、図9に示す命令追加部353は、実行結果を出力する命令の直前に、耐タンパ装置に符号化変数y1、y2、・・・、ymの値を送付し、復号した変数x1の値を取得する命令を追加する。
【0071】
<ソフトウェア保護システムの処理>
図10を用いて、本実施形態に係るソフトウェア保護システムの処理について説明する。
【0072】
端末100が、ソフトウェア101を変換し(ステップS201)、その変換したソフトウェアを送信する(ステップS202)。
【0073】
耐タンパ装置200は、受信したソフトウェアからすべての符号化変数を取得し(ステップS203)、その取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する(ステップS204)。そして、正当である場合に、変数の値を復号し(ステップS205)、該復号した値を端末100内のソフトウェア101に返送する(ステップS206)。
【0074】
したがって、本実施形態によれば、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0075】
<実施例>
実施例として、フィボナッチ数列の第n項を求めるプログラムを対象として、ソースコードの変換例を示す。ここで、図11は、変換前のソースコードであり、変換後のソース
コードを図12に、耐タンパ装置における処理内容(C言語による擬似コード)を図13に示す。
【0076】
ここで、変数の符号化に用いたルールは、数7に示すとおりであり、符号化変数は、数8に示す関係式を満たす。ここで、耐タンパ装置は、ソフトウェアから受け取った符号化変数の値がこの関係式を満たすことを確認し、満たしている場合にのみ正当な復号処理を行う。
【0077】
【数7】
【0078】
【数8】
【0079】
なお、ソフトウェア保護システムの処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを端末および耐タンパ装置に読み込ませ、実行することによって本発明のソフトウェア保護システムを実現することができる。ここでいうコンピュータシステムとは、OSや周辺装置等のハードウェアを含む。
【0080】
また、「コンピュータシステム」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
【0081】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【0082】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【0083】
100;端末
101;ソフトウェア
102;処理部
103;処理結果送信部
104;受信部
105;出力部
200;耐タンパ装置
201;受信部
202;検証部
203;復号処理部
204;結果送信部
301;変換部
302;送信部
310;選択部
320;符号化変数決定部
330;ルール決定部
340;置き換え部
341;第1の置換部
342;第2の置換部
350;修正部
351;追加部
352;変換部
353;命令追加部
401;取得部
402;検証部
403;復号部
404;返送部
【技術分野】
【0001】
本発明は、ソフトウェアを格納する端末と耐タンパ装置とを連携させて、端末に格納されたソフトウェアを保護するソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラムに関する。
【背景技術】
【0002】
ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術(RE:Reverse Engineering)が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【0003】
この一例として、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法であって、符号化を施すn個(但し、nは正整数)の変数を任意に選択し、m×nの行列(但し、mは、m≧nの正整数)およびm次元の任意のベクトルを生成する。そして、生成した行列およびベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数に符号化する。これにより、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を行う技術が開示されている(例えば、特許文献1参照。)。
【0004】
また、外部の耐タンパ装置により、実行順序を制御してプログラムの難読化を行うことも考えられる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006−079347号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、前者の方法では、端末上のソフトウェア単体を変換する方法であるため、実行に必要なデータがすべてソフトウェア自身に含まれ、不正コピーの防止には、有効ではないという問題がある。一方で、後者の方法では、ソフトウェア単体では、動作しないため、不正コピーの防止には適用できるが、耐タンパ装置が保持する処理の実行順序は、固定データであるため、ソフトウェアの任意の箇所に特定の文字列を出力する命令を追加し実行することにより、処理順序が攻撃者に露呈する可能性がある。
【0007】
そこで、本発明は、上述の課題に鑑みてなされたものであり、ソフトウェアを格納する端末と耐タンパ装置とを連携させることにより、端末上のソフトウェアを安全に実行できるソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、上記の課題を解決するために以下の事項を提案している。
【0009】
(1)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、前記端末が、前記ソフトウェア上の符号化されたデータのみを処理する処理手段と、該処理結果を前記耐タンパ装置に送信する処理結果送信手段と、を備え、前記耐タンパ装置が、前記受信した処理結果を検証する検証手段と、該処理結果が正当であるときに、復号処理を行う復号処理手段と、該復号処理を行った結果を前記端末に送信する復号処理結果送信手段と、を備え、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力することを特徴とするソフトウェア保護システムを提案している。
【0010】
この発明によれば、端末の処理手段は、ソフトウェア上の符号化されたデータのみを処理する。端末の処理結果送信手段は、その処理結果を耐タンパ装置に送信する。耐タンパ装置の検証手段は、受信した処理結果を検証する。耐タンパ装置の復号処理手段は、その処理結果が正当であるときに、復号処理を行う。耐タンパ装置の復号処理結果送信手段は、その復号処理を行った結果を端末に送信する。そして、端末内のソフトウェアは、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0011】
(2)本発明は、(1)のソフトウェア保護システムについて、前記耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証することを特徴とするソフトウェア保護システムを提案している。
【0012】
この発明によれば、耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証する。一般に、耐タンパ装置は、入力が正当なものであるか否かを検証する必要があるが、端末上のソフトウェアに存在するすべてのデータを解析可能と仮定すると、ソフトウェアと耐タンパ装置との間で、認証鍵を安全に共有することは不可能であるが、本発明によれば、耐タンパ装置に入力されるデータの正当性を正確に検証することができる。
【0013】
(3)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、前記端末が、前記ソフトウェアを変換する変換手段と、該変換したソフトウェアを送信する変換ソフトウェア送信手段と、を備え、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する取得手段と、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する検証手段と、正当である場合に、変数の値を復号する復号手段と、該復号した値を前記端末内のソフトウェアに返送する返送手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0014】
この発明によれば、端末の変換手段は、ソフトウェアを変換する。端末の変換ソフトウェア送信手段は、変換したソフトウェアを送信する。耐タンパ装置の取得手段は、受信したソフトウェアからすべての符号化変数を取得する。耐タンパ装置の検証手段は、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する。耐タンパ装置の復号手段は、正当である場合に、変数の値を復号する。耐タンパ装置の返送手段は、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0015】
(4)本発明は、(3)のソフトウェア保護システムについて、前記変換手段が、符号化の対象となる変数を選択する選択手段と、該選択した符号化変数からm個の符号化変数を決定する符号化変数決定手段と、符号化ルールおよび復号化ルールを決定するルール決定手段と、ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、変換したソフトウェアを正しく実行できるように修正する修正手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0016】
この発明によれば、選択手段は、符号化の対象となる変数を選択し、符号化変数決定手段は、選択した符号化変数からm個の符号化変数を決定する。そして、ルール決定手段が、符号化ルールおよび復号化ルールを決定し、置き換え手段が、ソフトウェア内の符号化変数を他の符号化変数に置き換え、修正手段が変換したソフトウェアを正しく実行できるように修正する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0017】
(5)本発明は、(4)のソフトウェア保護システムについて、前記置き換え手段が、代入が行われている対象変数を置換する第1の置換手段と、参照が行われている対象変数を置換する第2の置換手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0018】
この発明によれば、第1の置換手段は、代入が行われている対象変数を置換し、第2の置換手段は、参照が行われている対象変数を置換する。これにより、効果的に難読化を実行することができる。
【0019】
(6)本発明は、(4)のソフトウェア保護システムについて、前記修正手段が、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、前記第1の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、実行結果を出力する命令の直前に、前記耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する命令追加手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【0020】
この発明によれば、追加手段は、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加し、変換手段は、第1の置換手段で置換した代入命令を実行できる命令列に変換する。そして、命令追加手段は、実行結果を出力する命令の直前に、耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する。したがって、この処理により、難読化を図りつつ、実行可能なソフトウェアとすることができる。
【0021】
(7)本発明は、(1)から(6)のソフトウェア保護システムについて、前記耐タンパ装置がCPUであることを特徴とするソフトウェア保護システムを提案している。
【0022】
この発明によれば、耐タンパ装置がCPUである。したがって、最も簡便な装置として、CPUを耐タンパ装置として用いることができる。
【0023】
(8)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、前記端末が、前記プログラム上の符号化されたデータのみを処理する第1のステップと、前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第5のステップと、を備えたことを特徴とするソフトウェア保護方法を提案している。
【0024】
この発明によれば、端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を前記端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0025】
(9)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、前記端末が、前記ソフトウェアを変換する第1のステップと、前記端末が、該変換したソフトウェアを送信する第2のステップと、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、を備えたことを特徴とするソフトウェア保護方法を提案している。
【0026】
この発明によれば、端末が、ソフトウェアを変換し、端末が、変換したソフトウェアを送信する。耐タンパ装置は、受信したソフトウェアからすべての符号化変数を取得し、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証し、正当である場合に、変数の値を復号する。そして、耐タンパ装置が、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0027】
(10)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、前記端末が、前記プログラム上の符号化されたデータのみを処理する第1のステップと、前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第5のステップと、をコンピュータに実行させるためのプログラムを提案している。
【0028】
この発明によれば、端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を前記端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0029】
(11)本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、前記端末が、前記ソフトウェアを変換する第1のステップと、前記端末が、該変換したソフトウェアを送信する第2のステップと、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、をコンピュータに実行させるためのプログラムを提案している。
【0030】
この発明によれば、端末が、ソフトウェアを変換し、端末が、変換したソフトウェアを送信する。耐タンパ装置は、受信したソフトウェアからすべての符号化変数を取得し、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証し、正当である場合に、変数の値を復号する。そして、耐タンパ装置が、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【発明の効果】
【0031】
本発明によれば、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上するという効果がある。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【図面の簡単な説明】
【0032】
【図1】本発明のソフトウェア保護システムの構成を示す図である。
【図2】第1の実施形態に係る端末の構成を示す図である。
【図3】第1の実施形態に係る耐タンパ装置の構成を示す図である。
【図4】第1の実施形態に係るソフトウェア保護システムの処理フローである。
【図5】第2の実施形態に係る端末の構成を示す図である。
【図6】第2の実施形態に係る耐タンパ装置の構成を示す図である。
【図7】第2の実施形態に係る変換部の詳細な構成を示す図である。
【図8】第2の実施形態に係る置き換え部の詳細な構成を示す図である。
【図9】第2の実施形態に係る修正部の詳細な構成を示す図である。
【図10】第2の実施形態に係るソフトウェア保護システムの処理フローである。
【図11】実施例に係る元のソフトウェアのソースコードを例示した図である。
【図12】実施例に係る変換されたソフトウェアのソースコードを例示した図である。
【図13】実施例に係る耐タンパ装置の処理内容を例示した図である。
【発明を実施するための形態】
【0033】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0034】
<ソフトウェア保護システムの構成>
図1に示すように、本発明のソフトウェア保護システムは、端末100と、端末上で動作するソフトウェア101と、耐タンパ装置200とから構成されている。このシステムにおいては、端末100と耐タンパ装置200とが連携して、ソフトウェアを保護する。なお、耐タンパ装置200としては、例えば、CPU等を用いてもよい。
【0035】
<第1の実施形態>
図1から図4を用いて、本発明の第1の実施形態について、説明する。
【0036】
<端末の構成>
本実施形態に係る端末100は、図2に示すように、処理部102と、処理結果送信部103と、受信部104と、出力部105とから構成されている。
【0037】
処理部102は、ソフトウェア上の符号化されたデータのみを処理する。処理結果送信部103は、処理結果を耐タンパ装置200に送信する。受信部104は、耐タンパ装置200から復号処理結果を受信する。出力部105は、受信した値を結果として出力する。
【0038】
<耐タンパ装置の構成>
本実施形態に係る耐タンパ装置200は、図3に示すように、受信部201と、検証部202と、復号処理部203と、結果送信部204とから構成されている。
【0039】
受信部201は、端末100での処理結果を受信する。検証部202は、受信した処理結果を検証する。復号処理部203は、処理結果が正当であるときに、復号処理を行う。結果送信部204は、復号処理を行った結果を端末100に送信する。
【0040】
<ソフトウェア保護システムの処理>
図4を用いて、本実施形態に係るソフトウェア保護システムの処理について説明する。
【0041】
端末100が、ソフトウェア上の符号化されたデータのみを処理し(ステップS101)、その処理結果を耐タンパ装置200に送信する(ステップS102)。
【0042】
耐タンパ装置200は、受信した処理結果を検証し(ステップS103)、その処理結果が正当であるときに、復号処理を行う(ステップS104)。また、復号処理を行った結果を端末100に送信する(ステップS105)。一方、端末100内のソフトウェア101が、耐タンパ装置200から受信した値を結果として出力する(ステップS106)。
【0043】
したがって、本実施形態によれば、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【0044】
<第2の実施形態>
図5から図9を用いて、本発明の第2の実施形態について説明する。
【0045】
<端末の構成>
本実施形態に係る端末100は、図5に示すように、変換部301と、送信部302とから構成されている。
【0046】
変換部301は、ソフトウェア101を変換する。送信部302は、変換したソフトウェアを送信する。なお、変換部301の処理の詳細については、後述する。
【0047】
<耐タンパ装置の構成>
本実施形態に係る耐タンパ装置200は、図6に示すように、取得部401と、検証部402と、復号部403と、返送部404とから構成されている。
【0048】
取得部401は、受信したソフトウェアからすべての符号化変数を取得する。検証部402は、その取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する。
【0049】
復号部403は、検証結果が正当である場合に、変数の値を復号する。返送部404は、その復号した値を端末100内のソフトウェア101に返送する。
【0050】
<変換部の内部構成>
図7に示すように、変換部301は、さらに、選択部310と、符号化変数決定部320と、ルール決定部330と、置き換え部340と、修正部350とから構成されている。
【0051】
なお、以下では、対象ソフトウェアには、N個の変数、x1、x2、・・・、xnが含まれているものとし、変数x1に格納される値が実行結果として出力されているものと仮定して、一般性を失わないものとする。また、実行結果を格納する変数が複数存在する場合も、1つの変数に実行結果を格納するソフトウェアが複数存在するものとみなすことで、個々のソフトウェアについて同様に扱うことができる。さらに、以下では、符号化の対象は、すべて32ビットの変数であるとする。
【0052】
選択部310は、符号化の対象とするn個の変数x1、x2、・・・、xnを選択する。ここで、実行結果が格納される変数x1は、符号化対象として選択する必要がある。また、個数nは、任意であり、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。但し、以下の変数は、符号化対象から除外するものとする。1)利用者の入力が直接書き込まれる変数。2)アドレス演算子により当該変数のアドレスが取得されている変数。
【0053】
符号化変数決定部320は、m個の符号化変数y1、y2、・・・、ymを決定する。ここで、個数mは、符号化対象変数の個数nよりも大きく設定する。なお、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。
【0054】
ルール決定部330は、m行n列のプール行列Aとm次元の整数型ベクトルbを任意に決定する。但し、行列Aは、ランクがnとなるように選択する。行列Aと整数型ベクトルbとにより、以下の関係式数1を構成する。
【0055】
【数1】
【0056】
上式の各行を符号化ルールとすると、数2のようになる。
【0057】
【数2】
【0058】
次に、符号化ルールを未知変数x1、x2、・・・、xnに対する連立方程式とみなし、解くことにより、数3を得る。
【0059】
【数3】
【0060】
この各式を復号ルールとする。なお、上記の連立方程式を解く過程では、n個の符号化ルールが使われる。使われなかった符号化ルールに含まれる変数x1、x2、・・・、xnを復号ルールを用いて符号化変数に置き換えることで、m−n個の非自明な関係式が得られる。ここで、符号化変数y1、y2、・・・、ymは、常にこれらの関係式をみたす。
【0061】
置き換え部340は、プログラム内の符号化対象変数x1、x2、・・・、xnを、符号化変数y1、y2、・・・、ymで置き換える、まず、代入が行われている変数を符号化変数に置き換え、次に、参照が行われている変数を符号化変数に置き換える、ただし、変数x1に格納された実行結果を出力する命令は、ここでの置き換えの対象外とする。
【0062】
具体的には、図8に示す第1の置換部341が代入命令xi←fを以下、数4に示す命令に置き換える。
【0063】
【数4】
【0064】
これにより、右辺の関数e1、e2、・・・、emにおいては、代入が行われる対象変数xiが、式fに置換されている。
【0065】
また、図8に示す第2の置換部342は、上記の処理で得られた命令列において、参照されている対象変数x1、x2、・・・、xnを、それぞれ、復号ルールd1、d2、・・・、dnで置き換え、式を整理する。
【0066】
修正部350は、変換したソフトウェアを正しく実行できるようにするため、修正する。具体的には、図9に示す追加部351が符号化変数y1、y2、・・・、ymおよびこれらの変数の値を退避するための一時変数t1、t2、・・・、tmの定義を追加する。
【0067】
また、図9に示す変換部352は、第1の置換部341で変換した命令を逐次実行できる命令列に変換する。つまり、数5に示す命令列を数6に示す命令列に変更する。このように、更新前の符号化変数の値を一時変数に退避しておくことで、更新後の符号化変数の値を順次計算できる。ここで、関数e1´、e2´、・・・、em´は、それぞれ、関数e1、e2、・・・、emにおいて、符号化変数y1、y2、・・・、ymを一時変数t1、t2、・・・、tmで置き換えたものである。
【0068】
【数5】
【0069】
【数6】
【0070】
さらに、図9に示す命令追加部353は、実行結果を出力する命令の直前に、耐タンパ装置に符号化変数y1、y2、・・・、ymの値を送付し、復号した変数x1の値を取得する命令を追加する。
【0071】
<ソフトウェア保護システムの処理>
図10を用いて、本実施形態に係るソフトウェア保護システムの処理について説明する。
【0072】
端末100が、ソフトウェア101を変換し(ステップS201)、その変換したソフトウェアを送信する(ステップS202)。
【0073】
耐タンパ装置200は、受信したソフトウェアからすべての符号化変数を取得し(ステップS203)、その取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する(ステップS204)。そして、正当である場合に、変数の値を復号し(ステップS205)、該復号した値を端末100内のソフトウェア101に返送する(ステップS206)。
【0074】
したがって、本実施形態によれば、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【0075】
<実施例>
実施例として、フィボナッチ数列の第n項を求めるプログラムを対象として、ソースコードの変換例を示す。ここで、図11は、変換前のソースコードであり、変換後のソース
コードを図12に、耐タンパ装置における処理内容(C言語による擬似コード)を図13に示す。
【0076】
ここで、変数の符号化に用いたルールは、数7に示すとおりであり、符号化変数は、数8に示す関係式を満たす。ここで、耐タンパ装置は、ソフトウェアから受け取った符号化変数の値がこの関係式を満たすことを確認し、満たしている場合にのみ正当な復号処理を行う。
【0077】
【数7】
【0078】
【数8】
【0079】
なお、ソフトウェア保護システムの処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを端末および耐タンパ装置に読み込ませ、実行することによって本発明のソフトウェア保護システムを実現することができる。ここでいうコンピュータシステムとは、OSや周辺装置等のハードウェアを含む。
【0080】
また、「コンピュータシステム」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
【0081】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【0082】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【0083】
100;端末
101;ソフトウェア
102;処理部
103;処理結果送信部
104;受信部
105;出力部
200;耐タンパ装置
201;受信部
202;検証部
203;復号処理部
204;結果送信部
301;変換部
302;送信部
310;選択部
320;符号化変数決定部
330;ルール決定部
340;置き換え部
341;第1の置換部
342;第2の置換部
350;修正部
351;追加部
352;変換部
353;命令追加部
401;取得部
402;検証部
403;復号部
404;返送部
【特許請求の範囲】
【請求項1】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、
前記端末が、
前記ソフトウェア上の符号化されたデータのみを処理する処理手段と、
該処理結果を前記耐タンパ装置に送信する処理結果送信手段と、
を備え、
前記耐タンパ装置が、
前記受信した処理結果を検証する検証手段と、
該処理結果が正当であるときに、復号処理を行う復号処理手段と、
該復号処理を行った結果を前記端末に送信する復号処理結果送信手段と、
を備え、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力することを特徴とするソフトウェア保護システム。
【請求項2】
前記耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証することを特徴とする請求項1に記載のソフトウェア保護システム。
【請求項3】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、
前記端末が、
前記ソフトウェアを変換する変換手段と、
該変換したソフトウェアを送信する変換ソフトウェア送信手段と、
を備え、
前記耐タンパ装置が、
受信したソフトウェアからすべての符号化変数を取得する取得手段と、
該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する検証手段と、
正当である場合に、変数の値を復号する復号手段と、
該復号した値を前記端末内のソフトウェアに返送する返送手段と、
を備えたことを特徴とするソフトウェア保護システム。
【請求項4】
前記変換手段が、
符号化の対象となる変数を選択する選択手段と、
該選択した符号化変数からm個の符号化変数を決定する符号化変数決定手段と、
符号化ルールおよび復号化ルールを決定するルール決定手段と、
ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、
変換したソフトウェアを正しく実行できるように修正する修正手段と、
を備えたことを特徴とする請求項3に記載のソフトウェア保護システム。
【請求項5】
前記置き換え手段が、
代入が行われている対象変数を置換する第1の置換手段と、
参照が行われている対象変数を置換する第2の置換手段と、
を備えたことを特徴とする請求項4に記載のソフトウェア保護システム。
【請求項6】
前記修正手段が、
符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、
前記第1の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、
実行結果を出力する命令の直前に、前記耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する命令追加手段と、
を備えたことを特徴とする請求項4に記載のソフトウェア保護システム。
【請求項7】
前記耐タンパ装置がCPUであることを特徴とする請求項1から請求項6に記載のソフトウェア保護システム。
【請求項8】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、
前記端末が、前記ソフトウェア上の符号化されたデータのみを処理する第1のステップと、
前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、
前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、
前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、
前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第6のステップと、
を備えたことを特徴とするソフトウェア保護方法。
【請求項9】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、
前記端末が、前記ソフトウェアを変換する第1のステップと、
前記端末が、該変換したソフトウェアを送信する第2のステップと、
前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、
前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、
前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、
前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、
を備えたことを特徴とするソフトウェア保護方法。
【請求項10】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、
前記端末が、前記プログラム上の符号化されたデータのみを処理する第1のステップと、
前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、
前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、
前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、
前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第5のステップと、
をコンピュータに実行させるためのプログラム。
【請求項11】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、
前記端末が、前記ソフトウェアを変換する第1のステップと、
前記端末が、該変換したソフトウェアを送信する第2のステップと、
前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、
前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、
前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、
前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、
をコンピュータに実行させるためのプログラム。
【請求項1】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、
前記端末が、
前記ソフトウェア上の符号化されたデータのみを処理する処理手段と、
該処理結果を前記耐タンパ装置に送信する処理結果送信手段と、
を備え、
前記耐タンパ装置が、
前記受信した処理結果を検証する検証手段と、
該処理結果が正当であるときに、復号処理を行う復号処理手段と、
該復号処理を行った結果を前記端末に送信する復号処理結果送信手段と、
を備え、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力することを特徴とするソフトウェア保護システム。
【請求項2】
前記耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証することを特徴とする請求項1に記載のソフトウェア保護システム。
【請求項3】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、
前記端末が、
前記ソフトウェアを変換する変換手段と、
該変換したソフトウェアを送信する変換ソフトウェア送信手段と、
を備え、
前記耐タンパ装置が、
受信したソフトウェアからすべての符号化変数を取得する取得手段と、
該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する検証手段と、
正当である場合に、変数の値を復号する復号手段と、
該復号した値を前記端末内のソフトウェアに返送する返送手段と、
を備えたことを特徴とするソフトウェア保護システム。
【請求項4】
前記変換手段が、
符号化の対象となる変数を選択する選択手段と、
該選択した符号化変数からm個の符号化変数を決定する符号化変数決定手段と、
符号化ルールおよび復号化ルールを決定するルール決定手段と、
ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、
変換したソフトウェアを正しく実行できるように修正する修正手段と、
を備えたことを特徴とする請求項3に記載のソフトウェア保護システム。
【請求項5】
前記置き換え手段が、
代入が行われている対象変数を置換する第1の置換手段と、
参照が行われている対象変数を置換する第2の置換手段と、
を備えたことを特徴とする請求項4に記載のソフトウェア保護システム。
【請求項6】
前記修正手段が、
符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、
前記第1の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、
実行結果を出力する命令の直前に、前記耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する命令追加手段と、
を備えたことを特徴とする請求項4に記載のソフトウェア保護システム。
【請求項7】
前記耐タンパ装置がCPUであることを特徴とする請求項1から請求項6に記載のソフトウェア保護システム。
【請求項8】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、
前記端末が、前記ソフトウェア上の符号化されたデータのみを処理する第1のステップと、
前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、
前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、
前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、
前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第6のステップと、
を備えたことを特徴とするソフトウェア保護方法。
【請求項9】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、
前記端末が、前記ソフトウェアを変換する第1のステップと、
前記端末が、該変換したソフトウェアを送信する第2のステップと、
前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、
前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、
前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、
前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、
を備えたことを特徴とするソフトウェア保護方法。
【請求項10】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、
前記端末が、前記プログラム上の符号化されたデータのみを処理する第1のステップと、
前記端末が、該処理結果を前記耐タンパ装置に送信する第2のステップと、
前記耐タンパ装置が、前記受信した処理結果を検証する第3のステップと、
前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第4のステップと、
前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第5のステップと、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第5のステップと、
をコンピュータに実行させるためのプログラム。
【請求項11】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、
前記端末が、前記ソフトウェアを変換する第1のステップと、
前記端末が、該変換したソフトウェアを送信する第2のステップと、
前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第3のステップと、
前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第4のステップと、
前記耐タンパ装置が、正当である場合に、変数の値を復号する第5のステップと、
前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第6のステップと、
をコンピュータに実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2011−150560(P2011−150560A)
【公開日】平成23年8月4日(2011.8.4)
【国際特許分類】
【出願番号】特願2010−11660(P2010−11660)
【出願日】平成22年1月22日(2010.1.22)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】
【公開日】平成23年8月4日(2011.8.4)
【国際特許分類】
【出願日】平成22年1月22日(2010.1.22)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】
[ Back to top ]