(57)【要約】【課題】ソースコード中の命令文を同義の別命令文に置換することで情報を埋め込む方法と比べて埋込に気づかれにくくする。【解決手段】ソースコードのコード例１００Ａの１５〜１９行目の４つの命令文からなる命令セット＃１は、１５，１６行目、及び１８，１９行目のそれぞれの順序を入れ替えるか否かの組み合わせで、命令セットとしての意味を変えずに４通りの情報を表現できる。例えば、図１のコード例Ａ内の命令セット＃１の命令文の並び順で３進数の「０」を、コード例１００Ｂの命令セット＃１の命令文の並び順を３進数の「１」を、コード例１００Ｃの命令セット＃１の命令文の並び順を３進数の「２」を、それぞれ表現できる。本発明に係る装置は、埋め込みたい値に応じて、命令セット中の命令文の配列順序を切り替えることで、その値をソースコードに埋め込む。【選択図】図１
2017016459.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段、
埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段、
解析対象として入力された配布用ソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記配布用ソースコードに埋め込まれた前記値を抽出する抽出手段、
として機能させるためのプログラム。
【請求項２】
前記対応記憶手段は、埋込対象の情報を構成する情報単位毎に、当該情報単位に対応する前記ソースコード中の前記命令セット、及び、当該命令セットの前記複数の命令文が取り得る配列順序と当該配列順序に対応する値との対応関係、を記憶しており、
前記生成手段は、前記埋込対象の情報を前記ソースコードに埋め込むに際し、前記埋込対象の情報を構成する前記情報単位ごとに、当該情報単位の値に対応する配列順序を、当該情報単位に対応する前記命令セットについての前記対応関係から求め、前記ソースコード中の当該命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替え、
前記抽出手段は、前記対応関係記憶手段に記憶された情報に基づき、前記ソースコード中の各命令セットを特定し、特定した命令セットごとに、当該命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対応する値を、前記対応関係記憶手段に記憶された当該命令セットについての前記対応関係から求めることで、前記配布用ソースコードに埋め込まれた前記埋込対象の情報を構成する前記各情報単位の値を抽出する、
ことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記対応記憶手段は、複数のソースコードのそれぞれについて前記対応関係を記憶しており、
前記抽出手段は、解析対象として入力された配布用ソースコードが前記複数のソースコードのうちのいずれに対応するかを特定し、特定したソースコードについての前記対応関係を用いて前記配布用ソースコードに埋め込まれた前記値を抽出する、
ことを特徴とする請求項１又は２に記載のプログラム。
【請求項４】
ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段と、
埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段と、
解析対象として入力された配布用ソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記配布用ソースコードに埋め込まれた前記値を抽出する抽出手段と、
を含む情報処理装置。
【請求項５】
コンピュータを、
ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段、
埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段、
として機能させるためのプログラム。
【請求項６】
ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段と、
埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段と、
を含む情報処理装置。
【請求項７】
コンピュータを、
ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段、
解析対象として入力されたソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記ソースコードに埋め込まれた前記値を抽出する抽出手段、
として機能させるためのプログラム。
【請求項８】
ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段と、
解析対象として入力されたソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記ソースコードに埋め込まれた前記値を抽出する抽出手段、
を含む情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム及び情報処理装置に関する。
【背景技術】
【０００２】
ソフトウエアの共同開発等の何らかの理由でプログラムのソースコードを他者に配布する場合がある。配布したソースコードが第三者に漏洩した場合に漏洩ルートを特定できるようにするために、配布するソースコードに対して配布先を識別できる固有情報を埋め込むことが考えられる。
【０００３】
ソースコードを対象とするものではないが、文書等に固有情報を埋め込んで漏洩元の検知に役立てようとする従来技術として、特許文献１〜３に開示されるものがある。
【０００４】
特許文献１には、例えば文書等に含まれる「ー」（長音記号）を「−」（ハイフン）に置換することや、「口」（漢字）を「ロ」（カタカナ）で置換することにより、見た目にはほとんどわからない固有の情報を埋め込む装置が開示されている。
【０００５】
特許文献２には、文書データ中のいくつかの文書要素を類義語等の類似文書要素に置換することで、文書データ中に固有要素を埋め込む方法が開示されている。
【０００６】
特許文献３には、文書内の文字列を、意味が変わらない別の文字列に置き換えることで、文書内に情報を埋め込む方法が開示されている。
【０００７】
また、特許文献４は、一語句に対してｎ個の同義語を用意し、同義語の置換えによってｌｏｇ2 ｎビットのビット列を表現する方法を開示しており、この方法はプログラムコードにも適用可能であると主張している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−３５２９２８号公報
【特許文献２】特開２０１１−１９２０８９号公報
【特許文献３】特開平１０−０４９５２１号公報
【特許文献４】特開平１０−１２４４９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
文字を類似形状の別の文字に置き換える方法は、文の意味を変えてしまうため、ソースコードに情報を埋め込むのには使えない。
【００１０】
また、プログラムのソースコード中の命令文は、通常、可読性を考慮してできるだけ読みやすい形になるよう記述される。このため、ソースコード中の命令文を同じ意味の別の命令文に置き換えると、回りくどく分かりにくい表現となってしまい、読んだ者に置き換え（情報の埋込）を気づかせてしまう可能性が少なくない。情報の埋込に気づかれると、それに対する対策が採られる可能性もある。
【００１１】
本発明は、ソースコード中の命令文を同じ意味の別の命令文に置き換えることで情報を埋め込む方法と比べて、情報の埋込に気づかれにくくすることを目的とする。
【課題を解決するための手段】
【００１２】
請求項１に係る発明は、コンピュータを、ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段、埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段、解析対象として入力された配布用ソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記配布用ソースコードに埋め込まれた前記値を抽出する抽出手段、として機能させるためのプログラムである。
【００１３】
請求項２に係る発明は、前記対応記憶手段は、埋込対象の情報を構成する情報単位毎に、当該情報単位に対応する前記ソースコード中の前記命令セット、及び、当該命令セットの前記複数の命令文が取り得る配列順序と当該配列順序に対応する値との対応関係、を記憶しており、前記生成手段は、前記埋込対象の情報を前記ソースコードに埋め込むに際し、前記埋込対象の情報を構成する前記情報単位ごとに、当該情報単位の値に対応する配列順序を、当該情報単位に対応する前記命令セットについての前記対応関係から求め、前記ソースコード中の当該命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替え、前記抽出手段は、前記対応関係記憶手段に記憶された情報に基づき、前記ソースコード中の各命令セットを特定し、特定した命令セットごとに、当該命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対応する値を、前記対応関係記憶手段に記憶された当該命令セットについての前記対応関係から求めることで、前記配布用ソースコードに埋め込まれた前記埋込対象の情報を構成する前記各情報単位の値を抽出する、ことを特徴とする請求項１に記載のプログラムである。
【００１４】
請求項３に係る発明は、前記対応記憶手段は、複数のソースコードのそれぞれについて前記対応関係を記憶しており、前記抽出手段は、解析対象として入力された配布用ソースコードが前記複数のソースコードのうちのいずれに対応するかを特定し、特定したソースコードについての前記対応関係を用いて前記配布用ソースコードに埋め込まれた前記値を抽出する、ことを特徴とする請求項１又は２に記載のプログラムである。
【００１５】
請求項４に係る発明は、ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段と、埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段と、解析対象として入力された配布用ソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記配布用ソースコードに埋め込まれた前記値を抽出する抽出手段と、を含む情報処理装置である。
【００１６】
請求項５に係る発明は、コンピュータを、ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段、埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段、として機能させるためのプログラムである。
【００１７】
請求項６に係る発明は、ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段と、埋込対象の値に対応する配列順序を前記対応関係から求め、前記ソースコード中の前記命令セット内の前記複数の命令文の順序を、求めた配列順序になるように入れ替えることで、前記値が埋め込まれた配布用ソースコードを生成する生成手段と、を含む情報処理装置である。
【００１８】
請求項７に係る発明は、コンピュータを、ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段、解析対象として入力されたソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記ソースコードに埋め込まれた前記値を抽出する抽出手段、として機能させるためのプログラムである。
【００１９】
請求項８に係る発明は、ソースコード中の、配列順序を入れ替えても意味が変わらない複数の命令文からなる命令セットに関し、前記命令セットの前記複数の命令文が取り得る配列順序と、当該配列順序に対応する値と、の対応関係を記憶する対応記憶手段と、解析対象として入力されたソースコードから、前記命令セットに含まれる前記複数の命令文の配列順序を判定し、判定した配列順序に対する値を前記対応関係から求めることで、解析対象として入力された前記ソースコードに埋め込まれた前記値を抽出する抽出手段、を含む情報処理装置である。
【発明の効果】
【００２０】
請求項１、４乃至８に係る発明によれば、ソースコード中の命令文を同じ意味の別の命令文に置き換えることで情報を埋め込む方法と比べて、情報の埋込に気づかれにくくすることができる。
【００２１】
請求項２に係る発明によれば、複数の情報単位から構成される情報をソースコードに埋め込むことができる。
【００２２】
請求項３に係る発明によれば、情報が埋め込まれたソースコードが複数存在する場合でも、解析対象の配布用ソースコードに対応する適切な対応関係を用いて、その配布用ソースコードに埋め込まれた値を抽出することができる。
【図面の簡単な説明】
【００２３】
【図１】実施形態におけるソースコードへの情報埋込方法を説明するための図である。
【図２】ソースコードへの情報埋込等において参照される埋込ルールの例を示す図である。
【図３】実施形態のシステムの構成の一例を示す図である。
【図４】配布管理情報ＤＢに記憶されるデータの一例を示す図である。
【図５】情報埋込装置によるソースコードへの情報埋込の手順の一例を示す図である。
【図６】情報抽出装置によるソースコードからの情報抽出の手順の一例を示す図である。
【図７】埋込ルールの作成手順の例を示す図である。
【発明を実施するための形態】
【００２４】
まず図１を参照して、この実施形態における、プログラムのソースコードに情報を埋め込む方法について説明する。
【００２５】
図１のコード例１００Ａは、情報の埋込対象であるソースコードの一部分（１５行目から２３行目の記述）である。また，コード例１００Ｂは、コード例Ａの１５行目と１６行目の命令文の順序を入れ替えたものであり、コード例１００Ｃはコード例Ａの１８行目と１９行目の命令文の順序を入れ替えたものである。
【００２６】
コード例１００Ａのうち１５行目と１６行目の２つの命令文からなる命令セットを考えた場合、それら２つの順序を入れ替えても命令セット全体としての意味は変わらない。すなわち、この命令セットは、同じ意味を維持したままで、１５行目と１６行目の順序を入れ替えるか否かで２通りの値、すなわち２進数の値を表現できる。同様に、１８行目と１９行目の２つの命令文からなる命令セットも、同じ意味を保ちつつ、それら２つの命令文の並び順を入れ替えるか否かで２進数の値を表現できる。したがって、例えば２進数１０桁の情報をソースコードに埋め込みたい場合、ソースコードの中から順序を相互に入れ替えても意味が変わらない２つの命令文の組（命令セット）を１０個見つけ、これら１０個の命令セットの各々の命令文の順序を、埋め込む情報の各桁の値に応じて制御すればよい。
【００２７】
ここで例えば、埋め込みたい情報が３進数である場合、２つの命令文からなる命令セットでは表現できない。これに対し、図１に示すコード例１００Ａの１５〜１９行目の４つの命令文からなる命令セット（図では、識別番号１の命令セットという意味で「命令セット＃１」と表記）は、３進数の値を表現する能力を持つ。すなわち、命令セット＃１は、１５，１６行目の２通りと１８，１９行目の２通りとの組合せで、２×２＝４通りの値（言い換えれば、４進数の値）を表現することができるので、３進数の値を表現可能である。例えば、図１のコード例Ａ内の命令セット＃１の命令文の並び順で３進数の「０」を、コード例１００Ｂの命令セット＃１の命令文の並び順を３進数の「１」を、コード例１００Ｃの命令セット＃１の命令文の並び順を３進数の「２」を、それぞれ表現できる。埋め込みたい情報が例えば３進数１０桁の値である場合、ソースコード中から、同じ意味を維持したまま命令文の順序の入れ替えが３通り以上実現可能な命令セットを１０個見つけ，それら１０個の命令セットに各桁の値を埋め込めばよい。
【００２８】
このように、本実施形態では、ソースコードに情報を埋め込むために、そのソースコード中に含まれる、命令文の配列順序を入れ替えても命令セットとしての意味が変化しない命令セットを用いる。１つの命令セットに埋め込める情報は、その命令セットの意味を変えずにその命令セット内の命令文の配列順序を何通りに入れ替えられるかという「場合の数」に依存する。
【００２９】
この方式での情報埋込を実現するために、埋込ルールを用意する。埋込ルールは、ソースコードに対して上記方式での情報の埋込を行う装置が、その埋込の処理の際に参照する。埋込ルールは、埋め込む情報を構成する各情報単位（上述の例ではＮ進数の各桁の値）の埋込先である個々の命令セットを特定する情報を規定する。例えば、１つの命令セットを特定する情報は、その命令セットに含まれる各命令文の識別情報の組である。命令文の識別情報は、ソースコード中でその命令文を一意に識別する情報である。例えば、ソースコード中でのその命令文の位置（例えばその命令文が位置する行の行番号や、ソースコード中の何番目の命令文であるかを示す通し番号等）を、その命令文の識別情報として用いることができる。また、埋込ルールには、命令セットを構成する命令文の配列順序とその命令セットに埋め込む値との対応関係が規定される。
【００３０】
図２に、埋込ルールの一例を示す。この例の埋込ルールは、命令セットの識別情報である「命令セット番号」に対応付けて、その命令セットに含まれる各命令文の「命令文番号」と「位置」の情報と、それら命令文が取り得る「順序組み合わせ」（配列順序）と順序番号との対応関係の情報と含む。
【００３１】
「命令文番号」は、命令セット内で当該命令文を一意に識別する通し番号であり、「順序組み合わせ」において当該命令文を表すのに用いられる。命令文の「位置」は、ソースコードのファイル名と、そのファイルにおける当該命令文の位置を示す行番号との組で表されている。命令文の「位置」を特定する要素にファイル名を含めているのは、配布されるソースコードが複数のファイルから構成される場合があることを考慮に入れているからである。ソースコードが単一のファイルから構成される場合のみを考慮すれば足りるのであれば、「位置」の情報にファイル名の要素は不要である。なお、命令文の行番号は、情報埋込のための命令文の順序入れ替えが一切なされていない、基準となるソースコードにおける行番号である。
【００３２】
「順序組み合わせ」の欄には、「０」、「１」、「２」の３つの「順序番号」の各々に対応付けて、命令文の順序組み合わせ（配列順序）が記述されている。「順序番号」は、順序組み合わせの一意に指し示す番号であり、当該命令セットに対して埋め込む「値」のことである。順序組み合わせは、命令文番号の並びで表されている。例えば、命令セット番号「１」の命令セットにおける順序番号「０」の順序組み合わせは、命令文番号が１，２，３，４の命令文がこの順に並んだ配列順序を示す。同様に順序番号「１」の順序組み合わせは、命令文番号２の命令文が先頭で、その後に命令文番号１，３，４の命令文がこの順に続き配列順序を示している。なお、図２の例の命令セット番号１の命令セットは、図１に示す命令セット＃１であり、順序番号「０」がコード例１００Ａの配列順序に、順序番号「１」がコード例１００Ｂの配列順序に、順序番号「２」がコード例１００Ｃの配列順序に、それぞれ対応する。
【００３３】
図２の例は、ソースコード「source1.cxx」に埋め込む情報が３進数で表現される場合の例である。命令セット番号「１」の命令セットは４つの命令文の配列順序で３進数の３つの値を表現しているのに対し、命令セット番号「２」の命令セットは３つの命令文の配列順序で３進数の３つの値を表現している。
【００３４】
埋込ルールには、埋め込みたい情報の桁数分の命令セットについての情報を登録する。例えばソースコード「source1.cxx」に埋め込む情報が３進数１０桁の数値である場合、そのソースコードの中から、同じ意味を表す命令文の配列順序が３通り以上存在する命令セットを１０個見つけ、それら１０個の命令セットについて図２に例示した埋込ルールの情報を定めればよい。命令セット番号と、埋め込む情報の桁とは、あらかじめ対応付けられている。例えば、命令セット番号が若い順に、埋め込む情報の上位の桁から対応付ける等である。
【００３５】
例えば、図２の埋込ルールテーブルに従い、基準となるソースコード「source1.cxx」（例えば図１のコード例１００Ａ）に対して３進数２桁の数値「１２」を埋め込む場合、まず命令セット＃１について、１５行目と１６行目の命令文の順序を入れ替えることで、最上位桁の値「１」を表現する。次に、命令セット＃２について、その中の２番目の命令文である３５〜４０行目を１番目（すなわち３３行目〜３８行目）に移動させ、３番目の命令文である４２行目を２番目（すなわち１番目の末尾の３８行目の後、空白行を１つ挟んだ４０行目）に移動させ、１番目の命令文である３３行目を３番目（すなわち２番目の末尾の４０行目に対して空白行を１つ挟んだ４２行目に移動させることで、最上位から２番目の桁の値「２」を表現する。
【００３６】
図２の埋込ルールを用いて情報が埋め込まれたソースコードから、その情報を抽出する際には、再びその埋込ルールを参照すればよい。すなわち、情報を抽出したい解析対象のソースコードに対応する基準のソースコードを特定し、特定したソースコード内の各命令セット内の各命令文を特定し、解析対象のソースコード内の対応する命令セットでのそれら命令文の配列順序を求める。そして、命令セット毎に、解析対象のソースコードにおける当該命令セット内の命令文の配列順序が埋込ルールのどの順序番号に該当するかを求めることで、当該命令セットに埋め込まれた値を特定する。
【００３７】
埋込ルールは、例えば、人間（例えばソースコードの作成者）がソースコードを見ながら作成する。また、ソースコードと作成条件を入力すると埋込ルールを自動生成するツールを用意してもよい。また、人間が埋込ルールを作成するのを支援するツール（例えば情報の埋込先とする命令セット等の候補を求め、ユーザに提示するなどの機能を持つ）を用意してもよい。
【００３８】
以上、本実施形態におけるソースコードへの情報埋込の方法について説明した。次に、図３を参照して、本実施形態のシステム構成の例を説明する。
【００３９】
このシステムは、情報埋込装置１０、埋込ルールＤＢ２０、配布管理情報ＤＢ２５、及び情報抽出装置３０を含んでいる。これら情報埋込装置１０、埋込ルールＤＢ２０、配布管理情報ＤＢ２５、及び情報抽出装置３０は、ローカルエリアネットワークやインターネット等のデータ通信ネットワークを介して相互に通信可能となっている。
【００４０】
このシステムは、ソースコードに対して配布先毎に異なる一意な固有番号を埋め込むと共に、漏洩したソースコードが見つかった場合、そのソースコードから固有番号を抽出することで、どの配布先に配布したソースコードが漏洩したかを特定する。
【００４１】
このシステムのうち情報埋込装置１０は、配布対象のプログラムのソースコードに対して、上述した情報埋込方法に従って、配布先を特定するための一意な識別情報（固有番号）を埋め込む。
【００４２】
埋込ルールＤＢ２０は、ソースコードへの固有番号の埋め込み方を規定する埋込ルールを保持するデータベースである。埋込ルールＤＢ２０が保持する埋込ルールは、図２に例示した形式のものでよい。埋込ルールＤＢ２０には、ソースコード毎に、そのソースコードの識別情報（ソースコードＩＤ）に対応付けて、そのソースコードに適用される埋込ルールが登録されている。
【００４３】
配布管理情報ＤＢ２５は、配布したソースコードについての管理情報を保持するデータベースである。図４に、配布管理情報ＤＢ２５に保持される管理情報の例を示す。この例では、管理情報には、ソースコードのソースコードＩＤに対応付けて、そのソースコードを配布した配布先の識別情報（配布先ＩＤ）と、その配布先に配布したソースコードに埋め込んだ固有番号の値とが含まれる。また、図示は省略したが、配布管理情報ＤＢ２５には、配布したソースコードのオリジナル（固有番号を埋め込んでいないもの）が、ソースコードＩＤに対応付けて保存されている。なお、ソースコードＩＤは、ソースコードのファイルに特定の属性（例えばファイル名）として含めてもよいし、含めなくてもよい。
【００４４】
情報抽出装置３０は、解析対象のソースコードから固有番号の情報を抽出する装置である。解析対象のソースコードは、例えば、いずれかの配布先から漏洩したソースコードである。情報抽出装置３０は、解析対象のソースコードに埋め込まれた固有番号を、埋込ルールＤＢ２０を参照して読み出し、読み出した固有番号に対応する配布先を特定する。
【００４５】
情報埋込装置１０は、埋込対象ソースコード入力部１２、埋込ルール作成部１４、固有番号生成部１６及び埋込処理部１８を有する。
【００４６】
埋込対象ソースコード入力部１２は、固有番号の埋込対象のソースコード、すなわちこれから配布するソースコードの入力を受け付ける。受け付けたソースコードは、埋込ルール作成部１４及び埋込処理部１８により用いられる。
【００４７】
埋込ルール作成部１４は、埋込対象のソースコードに対して適用する埋込ルールを作成するための処理を実行する。埋込ルールの作成をユーザ（人間）が行う場合、埋込ルール作成部１４は、その作成処理を支援する環境を提供する。埋込ルール作成部１４は、埋め込む固有番号のフォーマットの指定をユーザから受け付け、そのフォーマットに応じた命令セット群の指定をユーザから受け付け、それら命令セット群の情報を用いて埋込ルールの作成を支援する。固有番号のフォーマットは、例えばＭ桁のＮ進数といった形で指定される。
【００４８】
例えば、ソースコードを画面表示し、表示したソースコード中で命令セットを構成する命令文の選択をユーザから受け付ける。そして、このようにして構成された命令セットにおいて、命令セットとしての意味を変えずに命令文の配列順序を変更していくつかの配列順序のパターンを作成し、それら配列順序のパターン毎に、順序番号を割り振ることで、図２に例示した形式の埋込ルールを作成する。作成した埋込ルールは、そのソースコードを一意に識別するソースコードＩＤに対応付けて、埋込ルールＤＢ２０に登録される。埋込ルール作成部１４が行う具体的な処理の例については、後で詳しく説明する。
【００４９】
固有番号生成部１６は、ソースコードに埋め込む一意な固有番号を生成する。生成する固有番号は、そのソースコードに対応する埋込ルールの前提として指定された固有番号フォーマットに従ったものである。
【００５０】
埋込処理部１８は、埋込対象のソースコードに対して、固有番号生成部１６が生成した固有番号を、上述した本実施形態の情報埋込方法に従って埋め込む。具体的な埋込処理の例は、後で図５を参照しつつ説明する。埋込処理部１８は、この情報埋込の処理により、配布先に配布する配布用ソースコード５０を生成する。また埋込処理部１８は、その配布先のＩＤと、生成した配布用ソースコード５０に埋め込んだ固有情報とを、そのソースコードのソースコードＩＤに対応付けて、配布管理情報ＤＢ２５に登録する。
【００５１】
情報抽出装置３０は、解析対象ソースコード入力部３２、コードＩＤ判定部３４、抽出処理部３６及び配布先判定部３８を有する。
【００５２】
解析対象ソースコード入力部３２は、解析対象のソースコードの入力を受け付ける。解析対象のソースコードは、配布先から漏洩したソースコードであり、固有情報が埋め込まれている。
【００５３】
コードＩＤ判定部３４は、入力された解析対象のソースコードが、配布管理情報ＤＢ２５に登録されているどのソースコードＩＤに対応するのかを判定する。ソースコードのファイルの特定の属性（例えばファイル名）にソースコードＩＤが記述されている場合には、コードＩＤ判定部３４はその属性を調べることで、そのソースコードのソースコードＩＤを特定する。ただし、漏洩したソースコードでは、ファイル属性に記述されたソースコードＩＤが改ざんされている可能性を考慮した場合、コードＩＤ判定部３４は、ソースコード本体（文字列）に基づき、そのソースコードのソースコードＩＤを判定する機能を有していてもよい。この機能では、配布管理情報ＤＢ２５に保存された各ソースコード（オリジナル）の文字列と解析対象のソースコードとの文字列の比較により、解析対象のソースコードに対応するオリジナルのソースコードを特定する。より具体的には、例えば、配布管理情報ＤＢ２５に保存されたオリジナルのソースコード毎に、固有番号を埋め込んだ各命令セットの位置を、埋込ルールＤＢ２０内の当該ソースコードの埋込ルールから求める。そして、例えば、そのオリジナルのソースコードと解析対象のソースコードとの、特定した命令セット群以外の部分同士で比較し、両者が一致した場合に、解析対象のソースコードがそのオリジナルソースコードに対応すると判定する。特定したオリジナルのソースコードのソースコードＩＤが、解析対象のソースコードのソースコードＩＤである。
【００５４】
抽出処理部３６は、コードＩＤ判定部３４が判定したソースコードＩＤに対応する埋込ルール（図２参照）を埋込ルールＤＢ２０から取得し、その埋込ルールに従って、解析対象のソースコードに埋め込まれた固有番号を抽出する。この抽出処理の詳細な例は、後で図６を参照して説明する。
【００５５】
配布先判定部３８は、抽出処理部３６が抽出した固有番号に対応する配布先ＩＤを配布管理情報ＤＢ２５から検索することで、解析対象のソースコードの配布先を特定する。
【００５６】
次に図５を参照して、埋込処理部１８の詳細な処理手順の例を説明する。
【００５７】
この手順では、埋込処理部１８は、配布管理情報ＤＢ２５に保存されたソースコードのうち今回配布しようとするソースコードの指定をユーザから受け付ける（Ｓ１０）。埋込処理部１８は、指定されたソースコードのＩＤに対応する埋込ルールを埋込ルールＤＢ２０から取得する（Ｓ１０）。また、埋込処理部１８は、例えばあらかじめ登録されている配布先候補のリストの中から、ユーザに今回のソースコードについての１以上の配布先を指定させる（Ｓ１２）。次に、指定された配布先毎にＳ１４〜Ｓ２４の処理を繰り返す。
【００５８】
すなわち、まず、その配布先に配布するソースコードに埋め込む固有番号を固有番号生成部１６に生成させる（Ｓ１４）。次に、その固有番号の最上位桁から順に、未処理（まだ埋込が済んでいない）の桁の値を取り出す（Ｓ１６）。次に、Ｓ１０で取得した埋込ルールを参照して、そのソースコードの中から、その桁に対応する命令セットに属する各命令文を特定する（Ｓ１８）。また、固有番号のその桁の値と同じ順序番号に対応する配列順序（「順序組み合わせ」）をその埋込ルールから取得し（Ｓ２０）、Ｓ１８で特定した各命令文を、その取得した配列順序に従って並べ替える（Ｓ２２）。これにより、その桁の値がソースコードに埋め込まれたことになる。
【００５９】
具体例で説明すると、埋め込む固有番号の最上位桁の値が「１」である場合、まず図２の埋込ルール中のその最上位桁に対応する命令セット＃１の情報から、その命令セット＃１に属する各命令文の位置（図示例では１５，１６，１８，１９行目）を求める（Ｓ１８）。次に、その埋込ルールの命令セット＃１の情報から、埋め込むべき値「１」を順序番号として持つ配列順序（図示例では、先頭から順に２，１，３，４）を取得する（Ｓ２０）。そして、この配列順序に従い、オリジナルのソースコードのうち、その命令セット＃１の１番目と２番目の命令文である１５行目と１６行目の順序を入れ替える（この例では、３番目と４番目は順序変更不要）（Ｓ２２）。
【００６０】
このようにして固有番号の１つの桁の値をソースコードに埋め込むと、その固有番号の最後の桁まで埋込が終了したかを判定し（Ｓ２４）、終了していなければ、Ｓ１６に戻って固有番号の次の桁の埋込処理を実行する。固有番号の最後の桁まで埋込が完了すると、当該配布先へ配布する配布用ソースコード５０が完成する。
【００６１】
次に図６を参照して、情報抽出装置３０の詳細な処理手順の例を説明する。
【００６２】
この手順では、解析対象ソースコード入力部３２が、解析対象のソースコードを取得し（Ｓ３０）、コードＩＤ判定部３４がそのソースコードのソースコードＩＤを前述の方法により判定し、判定されたソースコードＩＤに対応する埋込ルールを埋込ルールＤＢ２０から取得する（Ｓ３２）。また、配布管理情報ＤＢ２５から、そのソースコードＩＤに対応するオリジナルのソースコードも取得する。抽出処理部３６は、コードＩＤ判定部３４が取得した埋込ルールから、まず先頭の命令セットの情報を読み出し、その命令セットに属する各命令文の位置を求めると共に、オリジナルのソースコード中のそれら各位置からそれら各命令文（の文字列）を取得する（Ｓ３４）。次に抽出処理部３６は、解析対象のソースコード中での、その命令セットのそれら命令文の配列順序を求める（Ｓ３６）。このステップでは、解析対象のソースコード中の、その命令セットの各命令文の位置（及びその近傍）から、Ｓ３４で取得した各命令文に一致する文字列の命令文をそれぞれ探し、見つけた各命令文の並び順を求めればよい。次に抽出処理部３６は、Ｓ３６で求めた配列順序が、埋込ルールに示される、その命令セットが取り得る配列順序のうちどの順序番号のものであるかを判定する（Ｓ３８）。そして、Ｓ３８で判定した順序番号を、固有番号中の、１番目の命令セットに対応する桁（例えば最上位桁）の値として記憶する（Ｓ４０）。その後、埋込ルール中の最後の命令セットまで処理が完了したかを確認し（Ｓ４２）、完了していなければＳ３４に戻って次の命令セットの処理を行う。このようにして、埋込ルールの最後の命令セットまでの処理が完了すると、固有番号の全ての桁の値が判明したことになる。配布先判定部３８は、抽出処理部３６が求めた固有番号に対応する配布先ＩＤを配布管理情報ＤＢ２５から求める（Ｓ４４）。これにより、解析対象のソースコードが元々どの配布先に配布したものであったのかが特定される。
【００６３】
次に図７を参照して、埋込ルール作成部１４の処理手順の例を説明する。
【００６４】
埋込ルール作成部１４は、埋込対象ソースコード入力部１２に入力されたソースコードをルールの作成対象として取得する（Ｓ５０）。また、ユーザ（埋込ルールの作成者）から、そのソースコードに埋め込む固有番号のフォーマットの指定を受け付ける（Ｓ５２）。この例では、固有番号はＭ桁のＮ進数（Ｍ，Ｎ共に正の整数）であるとし、Ｓ５２ではユーザはそのＭとＮの具体的な値を指定する。また埋込ルール作成部１４は、埋込ルールＤＢ２０に、これから作成する埋込ルールについてのエントリを作成する（Ｓ５３）。作成したエントリには、そのソースコードのソースコードＩＤと、固有番号のフォーマットの情報（例えばＭ，Ｎの値の組）を登録する。
【００６５】
次に、命令セットの番号を表す変数ｍを１に初期化する（Ｓ５４）。次に埋込処理部１８は、ユーザから、ｍ番目の命令セットの指定を受け付ける（Ｓ５６）。このステップでは、例えば、Ｓ５０で取得されたソースコードを埋込処理部１８が画面に表示し、ユーザがその画面表示されたソースコード上で命令セットを構成する複数の命令文を指定していく。ユーザが指定する命令セットは、「当該命令セットに属する命令文の順序の入れ替えで、オリジナルのソースコードにおける当該命令セットと同じ意味を持つＮ通り以上の異なる配列順序を生成できる」という条件を満たす必要がある。Ｎの値が大きくなると、ユーザがその条件を満たす命令セットを見つけ出すのは難しくなる。そこで、埋込処理部１８がその条件を満たす命令セットの候補をソースコードからいくつか求めてユーザに提示し、ユーザがそれら提示された候補の中から固有番号の埋込先に用いるものをＭ個選択するようにしてもよい。埋込処理部１８は、コンパイラが有するのと同様のソースコード解析機能を用いることにより、上記条件を満たす命令セットを見つけることが可能である。また、埋込処理部１８は、これに伴って、見つけた命令セットが上記条件の下でとり得るＮ個以上の配列順序（図２の「順序組み合わせ」）を生成することができる。
【００６６】
次に埋込処理部１８は、当該命令セットを構成する各命令文のソースコード内での位置（例えば行番号）の情報を、埋込ルールＤＢ２０内にＳ５３で作成したエントリの、ｍ番目の命令セットの情報として登録する（Ｓ５８）。このとき、登録した各命令文（の位置）に対して当該命令セット内での通し番号（「命令文番号」）を割り当てる。
【００６７】
次に埋込処理部１８は、その命令セット内の複数の命令文について、上記条件を満たす配列順序をＮ個生成する。そして、生成したＮ個の配列順序を、埋込ルールＤＢ２０内にＳ５３で作成したエントリのｍ番目の命令セットの定義情報に登録する（Ｓ６０）。なお、埋込ルール作成部１４が見つけた命令セットの候補の中からユーザが使用するものを選択する構成の場合、命令セットの候補を見つけた段階で、その候補について上述の通りＮ個以上の配列順序が求められているので、Ｓ６０ではその中からＮ個を選択して登録すればよい。また埋込処理部１８は、登録したＮ個の配列順序に対して、０〜（Ｎ−１）の互いに重ならない順序番号を割り当てる（Ｓ６２）。
【００６８】
以上により、埋込ルールＤＢ２０内の当該埋込ルールのｍ番目の命令セットについての情報の登録が完了する。この後、埋込処理部１８は、変数ｍが固有番号の桁数Ｍに達したかどうかを判定し（Ｓ６４）。達していなければ、ｍの値を１つ増加させ（Ｓ６６）、Ｓ５６に戻って次の命令セットについての処理を行う。このようにしてＭ個の命令セットについての処理が完了すると、埋込ルールの作成処理が完了する。
【００６９】
図７の手順では、埋込ルールは、完全にユーザが作成するか、埋込処理部１８の支援（例えば命令セットの候補の提示）を利用してユーザが作成するものとして説明した。しかし、その手順の説明から理解できるように、埋込ルールの作成を埋込処理部１８による完全な自動処理によって実現することも可能である。
【００７０】
以上の実施形態で例示したＭ桁Ｎ進数という埋込コードのフォーマットはあくまで一例に過ぎない。もっと複雑なフォーマットを用いることも可能である。命令セット毎に配列順序の数が異なる埋込ルールを用いれば、桁毎に何進数かが異なる固有番号のフォーマットを用いることも可能である。
【００７１】
また、以上の例ではソースコードに埋め込む情報は固有番号であったが、番号に限らず様々な情報を埋込可能であることは理解されよう。より一般的にいえば、本実施形態の手法は、複数の情報単位（例えば個々の桁）を配列してできる情報を埋め込むことが可能である。この場合、埋込ルールには、個々の情報単位毎に、命令セットを構成する命令文の組、及び、その情報単位がとり得る値とそれら命令文の配列順序との対応関係の情報を規定しておけばよい。
【００７２】
図３に示したシステム構成はあくまで一例に過ぎない。この代わりに、例えば図３に示した情報埋込装置１０、埋込ルールＤＢ２０、配布管理情報ＤＢ２５、及び情報抽出装置３０を単一のコンピュータ上に実装することももちろん可能である。また、例えば埋込ルール作成部１４を情報埋込装置１０とは別のコンピュータにインストールする等、図３に示した個々の装置内の要素を複数のコンピュータに分けてインストールしたシステム構成も可能である。
【００７３】
以上に例示した情報埋込装置１０、埋込ルールＤＢ２０、配布管理情報ＤＢ２５、及び情報抽出装置３０は、汎用のコンピュータに当該装置の各機能モジュールの処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、ＣＰＵ等のマイクロプロセッサ、ランダムアクセスメモリ（ＲＡＭ）及びリードオンリメモリ（ＲＯＭ）等のメモリ（一次記憶）、ＨＤＤ（ハードディスクドライブ）を制御するＨＤＤコントローラ、各種Ｉ／Ｏ（入出力）インタフェース、ローカルエリアネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース等が、たとえばバスを介して接続された回路構成を有する。また、そのバスに対し、例えばＩ／Ｏインタフェース経由で、ＣＤやＤＶＤなどの可搬型ディスク記録媒体に対する読み取り及び／又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び／又は書き込みのためのメモリリーダライタ、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがＣＤやＤＶＤ等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがＲＡＭに読み出されＣＰＵ等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。
【符号の説明】
【００７４】
１０  情報埋込装置、１２  埋込対象ソースコード入力部、１４  埋込ルール作成部、１６  固有番号生成部、１８  埋込処理部、３０  情報抽出装置、３２  解析対象ソースコード入力部、３４  コードＩＤ判定部、３６  抽出処理部、３８  配布先判定部、５０  配布用ソースコード。
【図１】
2017016459.tif 000003
【図２】
2017016459.tif 000004
【図３】
2017016459.tif 000005
【図４】
2017016459.tif 000006
【図５】
2017016459.tif 000007
【図６】
2017016459.tif 000008
【図７】
2017016459.tif 000009