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