(57)【要約】【課題】ソフトウェアを格納する端末と耐タンパ装置とを連携させることにより、端末上のソフトウェアを安全に実行できる。【解決手段】端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。【選択図】図４
2011150560.tif 000002
【特許請求の範囲】
【請求項１】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、
前記端末が、
前記ソフトウェア上の符号化されたデータのみを処理する処理手段と、
該処理結果を前記耐タンパ装置に送信する処理結果送信手段と、
を備え、
前記耐タンパ装置が、
前記受信した処理結果を検証する検証手段と、
該処理結果が正当であるときに、復号処理を行う復号処理手段と、
該復号処理を行った結果を前記端末に送信する復号処理結果送信手段と、
を備え、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力することを特徴とするソフトウェア保護システム。
【請求項２】
前記耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証することを特徴とする請求項１に記載のソフトウェア保護システム。
【請求項３】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、
前記端末が、
前記ソフトウェアを変換する変換手段と、
該変換したソフトウェアを送信する変換ソフトウェア送信手段と、
を備え、
前記耐タンパ装置が、
受信したソフトウェアからすべての符号化変数を取得する取得手段と、
該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する検証手段と、
正当である場合に、変数の値を復号する復号手段と、
該復号した値を前記端末内のソフトウェアに返送する返送手段と、
を備えたことを特徴とするソフトウェア保護システム。
【請求項４】
前記変換手段が、
符号化の対象となる変数を選択する選択手段と、
該選択した符号化変数からｍ個の符号化変数を決定する符号化変数決定手段と、
符号化ルールおよび復号化ルールを決定するルール決定手段と、
ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、
変換したソフトウェアを正しく実行できるように修正する修正手段と、
を備えたことを特徴とする請求項３に記載のソフトウェア保護システム。
【請求項５】
前記置き換え手段が、
代入が行われている対象変数を置換する第１の置換手段と、
参照が行われている対象変数を置換する第２の置換手段と、
を備えたことを特徴とする請求項４に記載のソフトウェア保護システム。
【請求項６】
前記修正手段が、
符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、
前記第１の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、
実行結果を出力する命令の直前に、前記耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する命令追加手段と、
を備えたことを特徴とする請求項４に記載のソフトウェア保護システム。
【請求項７】
前記耐タンパ装置がＣＰＵであることを特徴とする請求項１から請求項６に記載のソフトウェア保護システム。
【請求項８】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、
前記端末が、前記ソフトウェア上の符号化されたデータのみを処理する第１のステップと、
前記端末が、該処理結果を前記耐タンパ装置に送信する第２のステップと、
前記耐タンパ装置が、前記受信した処理結果を検証する第３のステップと、
前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第４のステップと、
前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第５のステップと、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第６のステップと、
を備えたことを特徴とするソフトウェア保護方法。
【請求項９】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、
前記端末が、前記ソフトウェアを変換する第１のステップと、
前記端末が、該変換したソフトウェアを送信する第２のステップと、
前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第３のステップと、
前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第４のステップと、
前記耐タンパ装置が、正当である場合に、変数の値を復号する第５のステップと、
前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第６のステップと、
を備えたことを特徴とするソフトウェア保護方法。
【請求項１０】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、
前記端末が、前記プログラム上の符号化されたデータのみを処理する第１のステップと、
前記端末が、該処理結果を前記耐タンパ装置に送信する第２のステップと、
前記耐タンパ装置が、前記受信した処理結果を検証する第３のステップと、
前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第４のステップと、
前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第５のステップと、
前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第５のステップと、
をコンピュータに実行させるためのプログラム。
【請求項１１】
端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、
前記端末が、前記ソフトウェアを変換する第１のステップと、
前記端末が、該変換したソフトウェアを送信する第２のステップと、
前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第３のステップと、
前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第４のステップと、
前記耐タンパ装置が、正当である場合に、変数の値を復号する第５のステップと、
前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第６のステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを格納する端末と耐タンパ装置とを連携させて、端末に格納されたソフトウェアを保護するソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラムに関する。
【背景技術】
【０００２】
ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術（ＲＥ：Ｒｅｖｅｒｓｅ Ｅｎｇｉｎｅｅｒｉｎｇ）が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【０００３】
この一例として、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法であって、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択し、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する。そして、生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の整数に符号化する。これにより、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を行う技術が開示されている（例えば、特許文献１参照。）。
【０００４】
また、外部の耐タンパ装置により、実行順序を制御してプログラムの難読化を行うことも考えられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−０７９３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、前者の方法では、端末上のソフトウェア単体を変換する方法であるため、実行に必要なデータがすべてソフトウェア自身に含まれ、不正コピーの防止には、有効ではないという問題がある。一方で、後者の方法では、ソフトウェア単体では、動作しないため、不正コピーの防止には適用できるが、耐タンパ装置が保持する処理の実行順序は、固定データであるため、ソフトウェアの任意の箇所に特定の文字列を出力する命令を追加し実行することにより、処理順序が攻撃者に露呈する可能性がある。
【０００７】
そこで、本発明は、上述の課題に鑑みてなされたものであり、ソフトウェアを格納する端末と耐タンパ装置とを連携させることにより、端末上のソフトウェアを安全に実行できるソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記の課題を解決するために以下の事項を提案している。
【０００９】
（１）本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、前記端末が、前記ソフトウェア上の符号化されたデータのみを処理する処理手段と、該処理結果を前記耐タンパ装置に送信する処理結果送信手段と、を備え、前記耐タンパ装置が、前記受信した処理結果を検証する検証手段と、該処理結果が正当であるときに、復号処理を行う復号処理手段と、該復号処理を行った結果を前記端末に送信する復号処理結果送信手段と、を備え、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力することを特徴とするソフトウェア保護システムを提案している。
【００１０】
この発明によれば、端末の処理手段は、ソフトウェア上の符号化されたデータのみを処理する。端末の処理結果送信手段は、その処理結果を耐タンパ装置に送信する。耐タンパ装置の検証手段は、受信した処理結果を検証する。耐タンパ装置の復号処理手段は、その処理結果が正当であるときに、復号処理を行う。耐タンパ装置の復号処理結果送信手段は、その復号処理を行った結果を端末に送信する。そして、端末内のソフトウェアは、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【００１１】
（２）本発明は、（１）のソフトウェア保護システムについて、前記耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証することを特徴とするソフトウェア保護システムを提案している。
【００１２】
この発明によれば、耐タンパ装置の検証手段が、符号化されたデータを格納するための変数が所定の関係式を満たすか否かを検証する。一般に、耐タンパ装置は、入力が正当なものであるか否かを検証する必要があるが、端末上のソフトウェアに存在するすべてのデータを解析可能と仮定すると、ソフトウェアと耐タンパ装置との間で、認証鍵を安全に共有することは不可能であるが、本発明によれば、耐タンパ装置に入力されるデータの正当性を正確に検証することができる。
【００１３】
（３）本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムであって、前記端末が、前記ソフトウェアを変換する変換手段と、該変換したソフトウェアを送信する変換ソフトウェア送信手段と、を備え、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する取得手段と、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する検証手段と、正当である場合に、変数の値を復号する復号手段と、該復号した値を前記端末内のソフトウェアに返送する返送手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【００１４】
この発明によれば、端末の変換手段は、ソフトウェアを変換する。端末の変換ソフトウェア送信手段は、変換したソフトウェアを送信する。耐タンパ装置の取得手段は、受信したソフトウェアからすべての符号化変数を取得する。耐タンパ装置の検証手段は、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する。耐タンパ装置の復号手段は、正当である場合に、変数の値を復号する。耐タンパ装置の返送手段は、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【００１５】
（４）本発明は、（３）のソフトウェア保護システムについて、前記変換手段が、符号化の対象となる変数を選択する選択手段と、該選択した符号化変数からｍ個の符号化変数を決定する符号化変数決定手段と、符号化ルールおよび復号化ルールを決定するルール決定手段と、ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、変換したソフトウェアを正しく実行できるように修正する修正手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【００１６】
この発明によれば、選択手段は、符号化の対象となる変数を選択し、符号化変数決定手段は、選択した符号化変数からｍ個の符号化変数を決定する。そして、ルール決定手段が、符号化ルールおよび復号化ルールを決定し、置き換え手段が、ソフトウェア内の符号化変数を他の符号化変数に置き換え、修正手段が変換したソフトウェアを正しく実行できるように修正する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【００１７】
（５）本発明は、（４）のソフトウェア保護システムについて、前記置き換え手段が、代入が行われている対象変数を置換する第１の置換手段と、参照が行われている対象変数を置換する第２の置換手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【００１８】
この発明によれば、第１の置換手段は、代入が行われている対象変数を置換し、第２の置換手段は、参照が行われている対象変数を置換する。これにより、効果的に難読化を実行することができる。
【００１９】
（６）本発明は、（４）のソフトウェア保護システムについて、前記修正手段が、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、前記第１の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、実行結果を出力する命令の直前に、前記耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する命令追加手段と、を備えたことを特徴とするソフトウェア保護システムを提案している。
【００２０】
この発明によれば、追加手段は、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加し、変換手段は、第１の置換手段で置換した代入命令を実行できる命令列に変換する。そして、命令追加手段は、実行結果を出力する命令の直前に、耐タンパ装置に符号化変数の値を送付し、復号した変数の値を取得する命令を追加する。したがって、この処理により、難読化を図りつつ、実行可能なソフトウェアとすることができる。
【００２１】
（７）本発明は、（１）から（６）のソフトウェア保護システムについて、前記耐タンパ装置がＣＰＵであることを特徴とするソフトウェア保護システムを提案している。
【００２２】
この発明によれば、耐タンパ装置がＣＰＵである。したがって、最も簡便な装置として、ＣＰＵを耐タンパ装置として用いることができる。
【００２３】
（８）本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、前記端末が、前記プログラム上の符号化されたデータのみを処理する第１のステップと、前記端末が、該処理結果を前記耐タンパ装置に送信する第２のステップと、前記耐タンパ装置が、前記受信した処理結果を検証する第３のステップと、前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第４のステップと、前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第５のステップと、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第５のステップと、を備えたことを特徴とするソフトウェア保護方法を提案している。
【００２４】
この発明によれば、端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を前記端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【００２５】
（９）本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法であって、前記端末が、前記ソフトウェアを変換する第１のステップと、前記端末が、該変換したソフトウェアを送信する第２のステップと、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第３のステップと、前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第４のステップと、前記耐タンパ装置が、正当である場合に、変数の値を復号する第５のステップと、前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第６のステップと、を備えたことを特徴とするソフトウェア保護方法を提案している。
【００２６】
この発明によれば、端末が、ソフトウェアを変換し、端末が、変換したソフトウェアを送信する。耐タンパ装置は、受信したソフトウェアからすべての符号化変数を取得し、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証し、正当である場合に、変数の値を復号する。そして、耐タンパ装置が、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【００２７】
（１０）本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、前記端末が、前記プログラム上の符号化されたデータのみを処理する第１のステップと、前記端末が、該処理結果を前記耐タンパ装置に送信する第２のステップと、前記耐タンパ装置が、前記受信した処理結果を検証する第３のステップと、前記耐タンパ装置が、該処理結果が正当であるときに、復号処理を行う第４のステップと、前記耐タンパ装置が、該復号処理を行った結果を前記端末に送信する第５のステップと、前記端末内のソフトウェアが、前記耐タンパ装置から受信した値を結果として出力する第５のステップと、をコンピュータに実行させるためのプログラムを提案している。
【００２８】
この発明によれば、端末が、プログラム上の符号化されたデータのみを処理し、端末が、処理結果を耐タンパ装置に送信する。耐タンパ装置は、受信した処理結果を検証し、耐タンパ装置が、処理結果が正当であるときに、復号処理を行い、耐タンパ装置が、復号処理を行った結果を前記端末に送信する。そして、端末内のソフトウェアが、耐タンパ装置から受信した値を結果として出力する。したがって、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【００２９】
（１１）本発明は、端末と耐タンパ装置とからなり、端末上で動作し、演算結果を数値で返すソフトウェアを保護するためのソフトウェア保護システムにおけるソフトウェア保護方法をコンピュータに実行させるためのプログラムであって、前記端末が、前記ソフトウェアを変換する第１のステップと、前記端末が、該変換したソフトウェアを送信する第２のステップと、前記耐タンパ装置が、受信したソフトウェアからすべての符号化変数を取得する第３のステップと、前記耐タンパ装置が、該取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する第４のステップと、前記耐タンパ装置が、正当である場合に、変数の値を復号する第５のステップと、前記耐タンパ装置が、該復号した値を前記端末内のソフトウェアに返送する第６のステップと、をコンピュータに実行させるためのプログラムを提案している。
【００３０】
この発明によれば、端末が、ソフトウェアを変換し、端末が、変換したソフトウェアを送信する。耐タンパ装置は、受信したソフトウェアからすべての符号化変数を取得し、取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証し、正当である場合に、変数の値を復号する。そして、耐タンパ装置が、復号した値を端末内のソフトウェアに返送する。したがって、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【発明の効果】
【００３１】
本発明によれば、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上するという効果がある。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【図面の簡単な説明】
【００３２】
【図１】本発明のソフトウェア保護システムの構成を示す図である。
【図２】第１の実施形態に係る端末の構成を示す図である。
【図３】第１の実施形態に係る耐タンパ装置の構成を示す図である。
【図４】第１の実施形態に係るソフトウェア保護システムの処理フローである。
【図５】第２の実施形態に係る端末の構成を示す図である。
【図６】第２の実施形態に係る耐タンパ装置の構成を示す図である。
【図７】第２の実施形態に係る変換部の詳細な構成を示す図である。
【図８】第２の実施形態に係る置き換え部の詳細な構成を示す図である。
【図９】第２の実施形態に係る修正部の詳細な構成を示す図である。
【図１０】第２の実施形態に係るソフトウェア保護システムの処理フローである。
【図１１】実施例に係る元のソフトウェアのソースコードを例示した図である。
【図１２】実施例に係る変換されたソフトウェアのソースコードを例示した図である。
【図１３】実施例に係る耐タンパ装置の処理内容を例示した図である。
【発明を実施するための形態】
【００３３】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３４】
＜ソフトウェア保護システムの構成＞
図１に示すように、本発明のソフトウェア保護システムは、端末１００と、端末上で動作するソフトウェア１０１と、耐タンパ装置２００とから構成されている。このシステムにおいては、端末１００と耐タンパ装置２００とが連携して、ソフトウェアを保護する。なお、耐タンパ装置２００としては、例えば、ＣＰＵ等を用いてもよい。
【００３５】
＜第１の実施形態＞
図１から図４を用いて、本発明の第１の実施形態について、説明する。
【００３６】
＜端末の構成＞
本実施形態に係る端末１００は、図２に示すように、処理部１０２と、処理結果送信部１０３と、受信部１０４と、出力部１０５とから構成されている。
【００３７】
処理部１０２は、ソフトウェア上の符号化されたデータのみを処理する。処理結果送信部１０３は、処理結果を耐タンパ装置２００に送信する。受信部１０４は、耐タンパ装置２００から復号処理結果を受信する。出力部１０５は、受信した値を結果として出力する。
【００３８】
＜耐タンパ装置の構成＞
本実施形態に係る耐タンパ装置２００は、図３に示すように、受信部２０１と、検証部２０２と、復号処理部２０３と、結果送信部２０４とから構成されている。
【００３９】
受信部２０１は、端末１００での処理結果を受信する。検証部２０２は、受信した処理結果を検証する。復号処理部２０３は、処理結果が正当であるときに、復号処理を行う。結果送信部２０４は、復号処理を行った結果を端末１００に送信する。
【００４０】
＜ソフトウェア保護システムの処理＞
図４を用いて、本実施形態に係るソフトウェア保護システムの処理について説明する。
【００４１】
端末１００が、ソフトウェア上の符号化されたデータのみを処理し（ステップＳ１０１）、その処理結果を耐タンパ装置２００に送信する（ステップＳ１０２）。
【００４２】
耐タンパ装置２００は、受信した処理結果を検証し（ステップＳ１０３）、その処理結果が正当であるときに、復号処理を行う（ステップＳ１０４）。また、復号処理を行った結果を端末１００に送信する（ステップＳ１０５）。一方、端末１００内のソフトウェア１０１が、耐タンパ装置２００から受信した値を結果として出力する（ステップＳ１０６）。
【００４３】
したがって、本実施形態によれば、端末上のソフトウェアは、符号化されたデータのみを処理するため、安全性が向上する。また、ソフトウェアと耐タンパ装置間でやりとりされるデータは、入力に依存して異なるため、ソフトウェアを動作させて通信内容を盗聴する攻撃に対しても耐性を持つ。さらに、ソフトウェア単体では動作しないため、ソフトウェアの不正コピーの防止に関しても有効である。
【００４４】
＜第２の実施形態＞
図５から図９を用いて、本発明の第２の実施形態について説明する。
【００４５】
＜端末の構成＞
本実施形態に係る端末１００は、図５に示すように、変換部３０１と、送信部３０２とから構成されている。
【００４６】
変換部３０１は、ソフトウェア１０１を変換する。送信部３０２は、変換したソフトウェアを送信する。なお、変換部３０１の処理の詳細については、後述する。
【００４７】
＜耐タンパ装置の構成＞
本実施形態に係る耐タンパ装置２００は、図６に示すように、取得部４０１と、検証部４０２と、復号部４０３と、返送部４０４とから構成されている。
【００４８】
取得部４０１は、受信したソフトウェアからすべての符号化変数を取得する。検証部４０２は、その取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する。
【００４９】
復号部４０３は、検証結果が正当である場合に、変数の値を復号する。返送部４０４は、その復号した値を端末１００内のソフトウェア１０１に返送する。
【００５０】
＜変換部の内部構成＞
図７に示すように、変換部３０１は、さらに、選択部３１０と、符号化変数決定部３２０と、ルール決定部３３０と、置き換え部３４０と、修正部３５０とから構成されている。
【００５１】
なお、以下では、対象ソフトウェアには、Ｎ個の変数、ｘ１、ｘ２、・・・、ｘｎが含まれているものとし、変数ｘ１に格納される値が実行結果として出力されているものと仮定して、一般性を失わないものとする。また、実行結果を格納する変数が複数存在する場合も、１つの変数に実行結果を格納するソフトウェアが複数存在するものとみなすことで、個々のソフトウェアについて同様に扱うことができる。さらに、以下では、符号化の対象は、すべて３２ビットの変数であるとする。
【００５２】
選択部３１０は、符号化の対象とするｎ個の変数ｘ１、ｘ２、・・・、ｘｎを選択する。ここで、実行結果が格納される変数ｘ１は、符号化対象として選択する必要がある。また、個数ｎは、任意であり、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。但し、以下の変数は、符号化対象から除外するものとする。１）利用者の入力が直接書き込まれる変数。２）アドレス演算子により当該変数のアドレスが取得されている変数。
【００５３】
符号化変数決定部３２０は、ｍ個の符号化変数ｙ１、ｙ２、・・・、ｙｍを決定する。ここで、個数ｍは、符号化対象変数の個数ｎよりも大きく設定する。なお、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。
【００５４】
ルール決定部３３０は、ｍ行ｎ列のプール行列Ａとｍ次元の整数型ベクトルｂを任意に決定する。但し、行列Ａは、ランクがｎとなるように選択する。行列Ａと整数型ベクトルｂとにより、以下の関係式数１を構成する。
【００５５】
【数１】
2011150560.tif 000003
【００５６】
上式の各行を符号化ルールとすると、数２のようになる。
【００５７】
【数２】
2011150560.tif 000004
【００５８】
次に、符号化ルールを未知変数ｘ１、ｘ２、・・・、ｘｎに対する連立方程式とみなし、解くことにより、数３を得る。
【００５９】
【数３】
2011150560.tif 000005
【００６０】
この各式を復号ルールとする。なお、上記の連立方程式を解く過程では、ｎ個の符号化ルールが使われる。使われなかった符号化ルールに含まれる変数ｘ１、ｘ２、・・・、ｘｎを復号ルールを用いて符号化変数に置き換えることで、ｍ−ｎ個の非自明な関係式が得られる。ここで、符号化変数ｙ１、ｙ２、・・・、ｙｍは、常にこれらの関係式をみたす。
【００６１】
置き換え部３４０は、プログラム内の符号化対象変数ｘ１、ｘ２、・・・、ｘｎを、符号化変数ｙ１、ｙ２、・・・、ｙｍで置き換える、まず、代入が行われている変数を符号化変数に置き換え、次に、参照が行われている変数を符号化変数に置き換える、ただし、変数ｘ１に格納された実行結果を出力する命令は、ここでの置き換えの対象外とする。
【００６２】
具体的には、図８に示す第１の置換部３４１が代入命令ｘｉ←ｆを以下、数４に示す命令に置き換える。
【００６３】
【数４】
2011150560.tif 000006
【００６４】
これにより、右辺の関数ｅ１、ｅ２、・・・、ｅｍにおいては、代入が行われる対象変数ｘｉが、式ｆに置換されている。
【００６５】
また、図８に示す第２の置換部３４２は、上記の処理で得られた命令列において、参照されている対象変数ｘ１、ｘ２、・・・、ｘｎを、それぞれ、復号ルールｄ１、ｄ２、・・・、ｄｎで置き換え、式を整理する。
【００６６】
修正部３５０は、変換したソフトウェアを正しく実行できるようにするため、修正する。具体的には、図９に示す追加部３５１が符号化変数ｙ１、ｙ２、・・・、ｙｍおよびこれらの変数の値を退避するための一時変数ｔ１、ｔ２、・・・、ｔｍの定義を追加する。
【００６７】
また、図９に示す変換部３５２は、第１の置換部３４１で変換した命令を逐次実行できる命令列に変換する。つまり、数５に示す命令列を数６に示す命令列に変更する。このように、更新前の符号化変数の値を一時変数に退避しておくことで、更新後の符号化変数の値を順次計算できる。ここで、関数ｅ１´、ｅ２´、・・・、ｅｍ´は、それぞれ、関数ｅ１、ｅ２、・・・、ｅｍにおいて、符号化変数ｙ１、ｙ２、・・・、ｙｍを一時変数ｔ１、ｔ２、・・・、ｔｍで置き換えたものである。
【００６８】
【数５】
2011150560.tif 000007
【００６９】
【数６】
2011150560.tif 000008
【００７０】
さらに、図９に示す命令追加部３５３は、実行結果を出力する命令の直前に、耐タンパ装置に符号化変数ｙ１、ｙ２、・・・、ｙｍの値を送付し、復号した変数ｘ１の値を取得する命令を追加する。
【００７１】
＜ソフトウェア保護システムの処理＞
図１０を用いて、本実施形態に係るソフトウェア保護システムの処理について説明する。
【００７２】
端末１００が、ソフトウェア１０１を変換し（ステップＳ２０１）、その変換したソフトウェアを送信する（ステップＳ２０２）。
【００７３】
耐タンパ装置２００は、受信したソフトウェアからすべての符号化変数を取得し（ステップＳ２０３）、その取得したすべての符号化変数が非自明な関係式を満たすか否かにより、その正当性を検証する（ステップＳ２０４）。そして、正当である場合に、変数の値を復号し（ステップＳ２０５）、該復号した値を端末１００内のソフトウェア１０１に返送する（ステップＳ２０６）。
【００７４】
したがって、本実施形態によれば、ソフトウェアを変換することによって、ソフトウェアを格納する端末と耐タンパ装置とを連携させ、端末上のソフトウェアを安全に実行できる。
【００７５】
＜実施例＞
実施例として、フィボナッチ数列の第ｎ項を求めるプログラムを対象として、ソースコードの変換例を示す。ここで、図１１は、変換前のソースコードであり、変換後のソース
コードを図１２に、耐タンパ装置における処理内容(C言語による擬似コード)を図１３に示す。
【００７６】
ここで、変数の符号化に用いたルールは、数７に示すとおりであり、符号化変数は、数８に示す関係式を満たす。ここで、耐タンパ装置は、ソフトウェアから受け取った符号化変数の値がこの関係式を満たすことを確認し、満たしている場合にのみ正当な復号処理を行う。
【００７７】
【数７】
2011150560.tif 000009
【００７８】
【数８】
2011150560.tif 000010
【００７９】
なお、ソフトウェア保護システムの処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを端末および耐タンパ装置に読み込ませ、実行することによって本発明のソフトウェア保護システムを実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００８０】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００８１】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００８２】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００８３】
１００；端末
１０１；ソフトウェア
１０２；処理部
１０３；処理結果送信部
１０４；受信部
１０５；出力部
２００；耐タンパ装置
２０１；受信部
２０２；検証部
２０３；復号処理部
２０４；結果送信部
３０１；変換部
３０２；送信部
３１０；選択部
３２０；符号化変数決定部
３３０；ルール決定部
３４０；置き換え部
３４１；第１の置換部
３４２；第２の置換部
３５０；修正部
３５１；追加部
３５２；変換部
３５３；命令追加部
４０１；取得部
４０２；検証部
４０３；復号部
４０４；返送部
【図１】
2011150560.tif 000011
【図２】
2011150560.tif 000012
【図３】
2011150560.tif 000013
【図４】
2011150560.tif 000014
【図５】
2011150560.tif 000015
【図６】
2011150560.tif 000016
【図７】
2011150560.tif 000017
【図８】
2011150560.tif 000018
【図９】
2011150560.tif 000019
【図１０】
2011150560.tif 000020
【図１１】
2011150560.tif 000021
【図１２】
2011150560.tif 000022
【図１３】
2011150560.tif 000023