(57)【要約】【課題】難読化の技術を利用してソフトウェアの解析や改竄を防止するとともに、利用者ごとにことなるソフトウェアを配布することにより、再配布を行った利用者を特定する。【解決手段】ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化し、個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する。そして、ユーザに関する情報とパラメータとを対応づけて記憶し、不正に流通したソフトウェアからパラメータを抽出して、抽出したパラメータと前記記憶されているパラメータとを照合してユーザを特定する。【選択図】図３
2012032900.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する難読化処理手段と、
該個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する配布手段と、
該ユーザに関する情報と前記パラメータとを対応づけて記憶する記憶手段と、
不正に流通したソフトウェアから前記パラメータを抽出する抽出手段と、
該抽出したパラメータと前記記憶手段に記憶されているパラメータとを照合してユーザを特定するユーザ特定手段と、
を備えたことを特徴とするソフトウェアの不正配布検出装置。
【請求項２】
前記難読化処理手段が、
前記符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択手段と、
ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成手段と、
前記生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化手段と、
を備えることを特徴とする請求項１の記載のソフトウェアの不正配布検出装置。
【請求項３】
前記パラメータが、変数を符号化するのに用いる前記行列および前記ベクトルであることを特徴とする請求項２の記載のソフトウェアの不正配布検出装置。
【請求項４】
ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する難読化処理ステップと、
該個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する配布ステップと、
該ユーザに関する情報と前記パラメータとを対応づけて記憶する記憶ステップと、
不正に流通したソフトウェアから前記パラメータを抽出する抽出ステップと、
該抽出したパラメータと前記記憶されているパラメータとを照合してユーザを特定するユーザ特定ステップと、
を備えたことを特徴とするソフトウェアの不正配布検出方法。
【請求項５】
前記難読化処理ステップが、
前記符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択ステップと、
ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成ステップと、
前記生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化ステップと、
を備えることを特徴とする請求項４の記載のソフトウェアの不正配布検出方法。
【請求項６】
前記パラメータが、変数を符号化するのに用いる前記行列および前記ベクトルであることを特徴とする請求項５の記載のソフトウェアの不正配布検出方法。
【請求項７】
ソフトウェアの不正配布検出方法をコンピュータに実行させるためのプログラムであって、
ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する難読化処理ステップと、
該個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する配布ステップと、
該ユーザに関する情報と前記パラメータとを対応づけて記憶する記憶ステップと、
不正に流通したソフトウェアから前記パラメータを抽出する抽出ステップと、
該抽出したパラメータと前記記憶されているパラメータとを照合してユーザを特定するユーザ特定ステップと、
をコンピュータに実行させるためのプログラム。
【請求項８】
前記難読化処理ステップが、
前記符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択ステップと、
ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成ステップと、
前記生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化ステップと、
をコンピュータに実行させるための請求項７に記載のプログラム。
【請求項９】
前記パラメータが、変数を符号化するのに用いる前記行列および前記ベクトルであることを特徴とする請求項８の記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正な利用者によるソフトウェアの再配布を防止するソフトウェアの不正配布検出装置、ソフトウェアの不正配布検出方法およびプログラムに関する。
【背景技術】
【０００２】
ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術（ＲＥ：Ｒｅｖｅｒｓｅ  Ｅｎｇｉｎｅｅｒｉｎｇ）が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【０００３】
一方、近年、ソフトウェアの不正利用が社会的な問題となっており、不正な利用者によるソフトウェアの再配布を防止する技術の必要性が日に日に高まってきている。ここで、ソフトウェアの再配布を行った利用者を追跡する技術としては、利用者ごとに異なるソフトウェアを配布するソフトウェア透かしという技術が知られている（例えば、特許文献１および非特許文献１参照。）。この技術では、ソフトウェアに冗長なデータを挿入することによって、異なるソフトウェアを生成している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２３７６８７号公報
【非特許文献】
【０００５】
【非特許文献１】門田ら、“ｊａｖａクラスファイルに対する電子透かし法、”情処論、ｖｏｌ．４１、Ｎｏ．１１、ｐｐ３００１−３００９、２０００．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の従来の技術では、ソフトウェアの解析や改竄を防止できないという問題があった。また、ソフトウェアが改竄されることによって、透かしも改竄されるという問題もあった。
【０００７】
そこで、本発明は、上述の課題に鑑みてなされたものであって、難読化の技術を利用してソフトウェアの解析や改竄を防止するとともに、利用者ごとにことなるソフトウェアを配布することにより、再配布を行った利用者を特定するソフトウェアの不正配布検出装置、ソフトウェアの不正配布検出方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００９】
（１）本発明は、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する難読化処理手段（例えば、図１の難読化処理部１０１に相当）と、該個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する配布手段（例えば、図１の配布部１０２に相当）と、該ユーザに関する情報と前記パラメータとを対応づけて記憶する記憶手段（例えば、図１の記憶部１０３に相当）と、不正に流通したソフトウェアから前記パラメータを抽出する抽出手段（例えば、図１の抽出部１０４に相当）と、該抽出したパラメータと前記記憶手段に記憶されているパラメータとを照合してユーザを特定するユーザ特定手段（例えば、図１のユーザ特定部１０５に相当）と、を備えたことを特徴とするソフトウェアの不正配布検出装置を提案している。
【００１０】
この発明によれば、難読化処理手段は、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する。配布手段は、個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する。記憶手段は、ユーザに関する情報とパラメータとを対応づけて記憶する。抽出手段は、不正に流通したソフトウェアからパラメータを抽出する。ユーザ特定手段は、抽出したパラメータと記憶手段に記憶されているパラメータとを照合してユーザを特定する。つまり、難読化処理手段は、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化するため、ソフトウェアの解析や改竄を防止することができる。また、ユーザ特定手段は、不正に流通したソフトウェアから抽出したパラメータと記憶手段に記憶されているパラメータとを照合してユーザを特定する。すなわち、利用者ごとに異なるソフトウェアを配布するため、不正に再配布した利用者を的確に把握することができる。
【００１１】
（２）本発明は、（１）のソフトウェアの不正配布検出装置について、前記難読化処理手段が、前記符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択手段（例えば、図２の選択部１１１に相当）と、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成手段（例えば、図２の生成部１１２に相当）と、前記生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化手段（例えば、図２の符号化部１１３に相当）と、を備えることを特徴とするソフトウェアの不正配布検出装置を提案している。
【００１２】
この発明によれば、難読化処理手段の選択手段は、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する。生成手段は、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する。符号化手段は、生成した行列およびベクトルを変換鍵としてｎ個の変数を線形変換して同時にｍ個の変数を符号化する。したがって、ソフトウェア中のｎ個の変数を線形変換により同時にｍ個の整数に符号化するため、ソフトウェア中で用いられている変数の個数を秘匿すると同時に、変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。
【００１３】
（３）本発明は、（２）のソフトウェアの不正配布検出装置について、前記パラメータが、変数を符号化するのに用いる前記行列および前記ベクトルであることを特徴とするソフトウェアの不正配布検出装置を提案している。
【００１４】
この発明によれば、パラメータが、変数を符号化するのに用いる行列およびベクトルである。すなわち、変数の符号化ルールに相当する行列およびベクトルを変更することによって、異なるソフトウェアを生成することができる。
【００１５】
（４）本発明は、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する難読化処理ステップ（例えば、図３のステップＳ１００に相当）と、該個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する配布ステップ（例えば、図３のステップＳ２００に相当）と、該ユーザに関する情報と前記パラメータとを対応づけて記憶する記憶ステップ（例えば、図３のステップＳ３００に相当）と、不正に流通したソフトウェアから前記パラメータを抽出する抽出ステップ（例えば、図３のステップＳ４００に相当）と、該抽出したパラメータと前記記憶手段に記憶されているパラメータとを照合してユーザを特定するユーザ特定ステップ（例えば、図３のステップＳ５００に相当）と、を備えたことを特徴とするソフトウェアの不正配布検出方法を提案している。
【００１６】
この発明によれば、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化し、個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する。そして、ユーザに関する情報とパラメータとを対応づけて記憶し、不正に流通したソフトウェアからパラメータを抽出して、抽出したパラメータと前記記憶されているパラメータとを照合してユーザを特定する。つまり、難読化処理ステップは、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化するため、ソフトウェアの解析や改竄を防止することができる。また、ユーザ特定ステップは、不正に流通したソフトウェアから抽出したパラメータと記憶されているパラメータとを照合してユーザを特定する。すなわち、利用者ごとに異なるソフトウェアを配布するため、不正に再配布した利用者を的確に把握することができる。
【００１７】
（５）本発明は、（４）のソフトウェアの不正配布検出方法について、前記難読化処理ステップ（例えば、図３のステップＳ１００に相当）が、前記符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択ステップ（例えば、図４のステップＳ１０１に相当）と、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成ステップ（例えば、図４のステップＳ１０２に相当）と、前記生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化ステップ（例えば、図４のステップＳ１０３からステップＳ１０５に相当）と、を備えることを特徴とする請求項４の記載のソフトウェアの不正配布検出方法を提案している。
【００１８】
この発明によれば、難読化処理ステップが、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択ステップと、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成ステップと、生成した行列およびベクトルを変換鍵としてｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化ステップと、を備える。したがって、ソフトウェア中のｎ個の変数を線形変換により同時にｍ個の整数に符号化するため、ソフトウェア中で用いられている変数の個数を秘匿すると同時に、変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。
【００１９】
（６）本発明は、（５）のソフトウェアの不正配布検出方法について、前記パラメータが、変数を符号化するのに用いる前記行列および前記ベクトルであることを特徴とするソフトウェアの不正配布検出方法を提案している。
【００２０】
この発明によれば、パラメータが、変数を符号化するのに用いる行列およびベクトルである。すなわち、変数の符号化ルールに相当する行列およびベクトルを変更することによって、異なるソフトウェアを生成することができる。
【００２１】
（７）本発明は、ソフトウェアの不正配布検出方法をコンピュータに実行させるためのプログラムであって、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する難読化処理ステップ（例えば、図３のステップＳ１００に相当）と、該個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する配布ステップ（例えば、図３のステップＳ２００に相当）と、該ユーザに関する情報と前記パラメータとを対応づけて記憶する記憶ステップ（例えば、図３のステップＳ３００に相当）と、不正に流通したソフトウェアから前記パラメータを抽出する抽出ステップ（例えば、図３のステップＳ４００に相当）と、該抽出したパラメータと前記記憶手段に記憶されているパラメータとを照合してユーザを特定するユーザ特定ステップ（例えば、図３のステップＳ５００に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２２】
この発明によれば、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化し、個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する。そして、ユーザに関する情報とパラメータとを対応づけて記憶し、不正に流通したソフトウェアからパラメータを抽出して、抽出したパラメータと前記記憶されているパラメータとを照合してユーザを特定する。つまり、難読化処理ステップは、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化するため、ソフトウェアの解析や改竄を防止することができる。また、ユーザ特定ステップは、不正に流通したソフトウェアから抽出したパラメータと記憶されているパラメータとを照合してユーザを特定する。すなわち、利用者ごとに異なるソフトウェアを配布するため、不正に再配布した利用者を的確に把握することができる。
【００２３】
（８）本発明は、（７）のプログラムについて、前記難読化処理ステップ（例えば、図３のステップＳ１００に相当）が、前記符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択ステップ（例えば、図４のステップＳ１０１に相当）と、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成ステップ（例えば、図４のステップＳ１０２に相当）と、前記生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化ステップ（例えば、図４のステップＳ１０３からステップＳ１０５に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２４】
この発明によれば、難読化処理ステップが、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する選択ステップと、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する生成ステップと、生成した行列およびベクトルを変換鍵としてｎ個の変数を線形変換して同時にｍ個の変数を符号化する符号化ステップと、を備える。したがって、ソフトウェア中のｎ個の変数を線形変換により同時にｍ個の整数に符号化するため、ソフトウェア中で用いられている変数の個数を秘匿すると同時に、変数間の参照および代入関係も秘匿することができる。また、変換鍵として行列およびベクトルを用いるため鍵の候補数を多くすることができる。このことにより、耐性の高いソフトウェアの難読化を実現することができる。
【００２５】
（９）本発明は、（８）のプログラムについて、前記パラメータが、変数を符号化するのに用いる前記行列および前記ベクトルであることを特徴とするプログラムを提案している。
【００２６】
この発明によれば、パラメータが、変数を符号化するのに用いる行列およびベクトルである。すなわち、変数の符号化ルールに相当する行列およびベクトルを変更することによって、異なるソフトウェアを生成することができる。
【発明の効果】
【００２７】
本発明によれば、２ｎ２＋４２ｎ通りの異なるソフトウェアを生成できる。また、パラメータは、ソフトウェアに含まれる変数の依存関係に基づいているため、コンパイルやその他の変換により除去・改ざんを行うことは困難である。さらに、利用者ごとに異なるソフトウェアを付与した場合、不正者は結託攻撃により、追跡を逃れようとすることが考えられる。例えば、複数のソフトウェアの各部を切り出し合成することにより、提供者のリストのいずれにも合致しないソフトウェアを作成することが考えられる。ところが、ソフトウェアの変数は異なる符号化ルールにより符号化されており、各部を切り貼りしても正しく動作しない。
【図面の簡単な説明】
【００２８】
【図１】本発明の実施形態に係るソフトウェアの不正配布検出装置の構成を示す図である。
【図２】本発明の実施形態に係るソフトウェアの不正配布検出装置の難読化処理部の構成を示す図である。
【図３】本発明の実施形態に係るソフトウェアの不正配布検出装置の処理フローを示す図である。
【図４】本発明の実施形態に係るソフトウェアの不正配布検出装置の難読化処理の処理フローを示す図である。
【図５】本発明の実施形態に係るソフトウェアの不正配布検出装置の処理の概念図である。
【発明を実施するための形態】
【００２９】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３０】
＜ソフトウェアの不正配布検出装置の構成＞
図１および図２を用いて、本実施形態に係るソフトウェアの不正配布検出装置の構成について説明する。
【００３１】
本実施形態に係るソフトウェアの不正配布検出装置は、図１に示すように、難読化処理部１０１と、配布部１０２と、記憶部１０３と、抽出部１０４と、ユーザ特定部１０５とから構成されている。
【００３２】
難読化処理部１０１は、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する。配布部１０２は、個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布する。
【００３３】
記憶部１０３は、ユーザに関する情報とパラメータとを対応づけて記憶する。抽出部１０４は、不正に流通したソフトウェアからパラメータを抽出する。ユーザ特定部１０５は、抽出したパラメータと記憶部１０３に記憶されているパラメータとを照合してユーザを特定する。
【００３４】
一方、難読化処理部１０１は、図２に示すように、選択部１１１と、生成部１１２と、符号化部１１３とから構成されている。
【００３５】
選択部１１１は、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択する。生成部１１２は、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する。符号化部１１３は、生成した行列およびベクトルを変換鍵としてｎ個の変数を線形変換して同時にｍ個の変数を符号化する。なお、パラメータとは、生成部１１２が生成する行列やベクトルを指し、このパラメータを変化させることにより異なる難読化されたソフトウェアを生成することができる。
【００３６】
＜ソフトウェアの不正配布検出装置の処理＞
図３から図５を用いて、本実施形態に係るソフトウェアの不正配布検出装置の処理について説明する。
【００３７】
まず、図３に示すように、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化する（ステップＳ１００）。次に、個別のパラメータに応じて難読化されたソフトウェアを各ユーザに配布し（ステップＳ２００）、ユーザに関する情報と前記パラメータとを対応づけて記憶する（ステップＳ３００）。
【００３８】
そして、不正に流通したソフトウェアから前記パラメータを抽出し（ステップＳ４００）、抽出したパラメータと記憶されているパラメータとを照合してユーザを特定する（ステップＳ５００）。
【００３９】
＜難読化処理部の動作＞
図４に示すように、難読化処理部は、符号化を施すｎ個（但し、ｎは正の整数）の変数を任意に選択し、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成して変換鍵とし、ｎ個の変数を線形変換して同時にｍ個の整数に符号化することを特徴とするものであり、これを実現するために、図４に示されるように、符号化を施すｎ個の変数を選択する難読化対象選択処理（Ｓ１０１）からはじまり、秘密鍵の生成（Ｓ１０２）、変化式の定義（Ｓ１０３）、復号式の導出（Ｓ１０４）、変数の置換（Ｓ１０５）、後処理（Ｓ１０６）、判定（Ｓ１０７）の各ステップを順次実行する。以下にステップ毎の詳細手順の説明を行う。
【００４０】
（Ｓ１０１：難読化対象の選択処理）
まず、ソフトウェアの中から、難読化の対象として符号化を施すｎ個（ｎは整数数）の変数を任意に選択する。この操作で選ばれたｎ個の変数ｘ１，ｘ２…，ｘｎ，とする。
（Ｓ１０２：秘密鍵の生成処理）
ここでは、ｍ×ｎ型行列Ａ、ｍ次元ベクトルｃを任意に生成し、これらを秘密鍵とする。但し、ｍは、ｍ≧ｎなる正整数である。
【００４１】
（Ｓ１０３：変換式の定義処理）
次に、生成した行列Ａおよびベクトルｃを用いて以下の変換式数１を定義する。
【００４２】
【数１】
2012032900.tif 000003
【００４３】
ここで、Ｘ１，Ｘ２，…，Ｘｍは、難読化後のソフトウェアで用いられる符号化されたｍ個の変数である。
【００４４】
（Ｓ１０４：復号式の導出処理）
上記した変換式をｎ個の変数ｘ１，ｘ２，…，ｘｎに関するｍ本の連立方程式と見なし、それぞれの変数について解く。その結果、それぞれの変数ｘ１，ｘ２，…，ｘｎに関して以下の数２で示す復号式が成立する。
【００４５】
【数２】
2012032900.tif 000004
【００４６】
この復号式により、元のソフトウェア中のそれぞれの変数ｘ１，ｘ２，…，ｘｎの値が、復号化された変数Ｘ１，Ｘ２，…Ｘｍを用いて表すことが可能になる。この手順では、ｍ本の連立方程式から、ｎ個の変数ｘ１，ｘ２…ｘｎの値を求める。このため、符号化された変数Ｘ１，Ｘ２，…Ｘｍの間には、ｍ‐ｎ個の自明でない以下の関係式数３が成り立つことになる。
【００４７】
【数３】
2012032900.tif 000005
【００４８】
この自明でない関係式を用いることにより、上記の復号式における各変数Ｘ１，Ｘ２，…，Ｘｍの係数を可変とすることができる。
【００４９】
（Ｓ１０５：変数の置き換え処理）
ソフトウェア中で用いられている変数ｘ１，ｘ２，…，ｘｎを以下の規則に従い、符号化された変数Ｘ１，Ｘ２，…Ｘｍで置き換える。
（ａ）変数ｘｉへの代入命令への置き換え
アルゴリズム中の変数ｘｉに対する代入命令ｘｉ←ｕを、以下の演算式数４で示されるように、変数Ｘ１，Ｘ２，…ＸＭに対する代入命令に置き換える。
【００５０】
【数４】
2012032900.tif 000006
【００５１】
この代入命令が実行されると、符号化されたｍ個全ての変換Ｘ１，Ｘ２，…Ｘｍが、同時に変更される。
（ｂ）参照されている変数ｘｊの置き換え
ソフトウェア中で参照されている変数ｘｊを、Ｓ１４の処理で求めた復号式ｘｊ（Ｘ１，Ｘ２，…Ｘｍ）を用いて、変数Ｘ１，Ｘ２，…Ｘｍの式に置き換える。
【００５２】
（Ｓ１０６：後処理）
後処理として、符号化された変数Ｘ１，Ｘ２，…，Ｘｍへの初期値を与える。また、連続する変数Ｘ１，Ｘ２，…Ｘｍへの代入命令のマージを行う。
（ａ）符号化された変数への初期値代入
上記したＳ１５（ａ）、（ｂ）の処理により、ソフトウェア中の変数ｘ１，ｘ２，…，ｘｎは全てＸ１，Ｘ２，…，Ｘｍで置き換えられる。これらの変数の初期値は、自明でない関係式ｆ１，ｆ２，…ｆｍ‐ｎを満たす任意の整数とする。
（ｂ）連続する代入命令のマージ
Ｓ１５（ｂ）の処理により生成された、符号化された変数Ｘ１，Ｘ２，…Ｘｍへの代入命令の中で、連続するものをマージする。
【００５３】
（Ｓ１０７：判定処理）
ソフトウェアの解析が十分に困難であると判定されれば、難読化処理を終了する。さらなる難読化が必要であると判定されれば、Ｓ１０１からＳ１０６までの処理を繰り返す。
【００５４】
図５を用いて、上記の処理について、具体例によって、その内容を説明する。
いま、提供者があるソフトウェアを保持しており、これを利用者Ａ、利用者Ｂ、利用者Ｃに配布しようとしている。
【００５５】
ここで、提供者は、利用者Ａには、「パラメータ１」で、利用者Ｂには、「パラメータ２」で、利用者Ｃには、「パラメータ３」によって、元のソフトウェアを難読化する処理を行う。また、このとき、利用者とパラメータとの関係を関連づけてデータベース化しておく。
【００５６】
提供者は、難読化したソフトウェア、つまり、利用者Ａには、「ソフトウェア１」を、利用者Ｂには、「ソフトウェア２」を、利用者Ｃには、「ソフトウェア３」を配布する。
【００５７】
しかしながら、後に、「ソフトウェア２」が不正に流通していることがわかった場合、この「ソフトウェア２」からパラメータを抽出し、データベースの登録情報と照合して不正配布者を特定する。本例の場合、「ソフトウェア２」から抽出するパラメータは、「パラメータ２」であるから、この情報をキーにデータベースを検索すれば、不正配布者が、「利用者Ｂ」であることを立証することができる。
【００５８】
以上、説明したように、本実施形態によれば、ソフトウェア内の変数を個別のパラメータに応じて線形変換して符号化することにより難読化するため、ソフトウェアの解析や改竄を防止することができる。また、利用者ごとに異なるパラメータで難読化された異なるソフトウェアを配布するため、不正に流通したソフトウェアから抽出したパラメータと記憶されているパラメータとを照合することによって、不正に再配布した利用者を的確に把握することができる。
【００５９】
なお、ソフトウェアの不正配布検出装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをソフトウェアの不正配布検出装置に読み込ませ、実行することによって本発明のソフトウェアの不正配布検出装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００６０】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６１】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００６２】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００６３】
１０１；難読化処理部
１０２；配布部
１０３；記憶部
１０４；抽出部
１０５；ユーザ特定部
１１１；選択部
１１２；生成部
１１３；符号化部
【図１】
2012032900.tif 000007
【図２】
2012032900.tif 000008
【図３】
2012032900.tif 000009
【図４】
2012032900.tif 000010
【図５】
2012032900.tif 000011