(57)【要約】    【課題】        透かし情報を挿入する際の処理負荷を軽減することにより、処理能力の低い機器での透かし情報挿入処理を可能にすること。    【解決手段】    本発明は、処理能力の高い機器（機器Ａとする）でプログラムを解析し透かし挿入箇所の検出を行い、処理能力の低い機器（機器Ｂとする）が透かし挿入箇所を即座に特定できるようにプログラムを変換し、透かし挿入箇所を示す情報（透かし挿入箇所情報）を記憶し、その後、機器Ｂにおいて機器Ａにより記憶された透かし挿入箇所情報を用いて機器Ａにより変換されたプログラムに透かしを挿入するようにした。  【選択図】        図１
2006079433.tif 000002
【特許請求の範囲】
【請求項１】
プログラムに透かし情報を挿入するためのコードを追加する透かし挿入箇所追加手段と、前記プログラムを前記透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するプログラム分割手段と、前記透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報を記憶する記憶手段と、を具備したことを特徴とするプログラム解析装置。
【請求項２】
前記透かし情報を挿入するコードを含むブロックは、前記プログラムの一部を必ず含むことを特徴とする請求項１記載のプログラム解析装置。
【請求項３】
前記透かし情報を挿入するためのコードを複数追加することを特徴とする請求項１記載のプログラム解析装置。
【請求項４】
前記透かし情報を挿入するためのコードを含むブロックを複数生成することを特徴とする請求項３記載のプログラム解析装置。
【請求項５】
前記透かし情報を挿入するためのコードは、前記プログラムが特定の入力値であったときに実行されることを特徴とする請求項１から請求項４のいずれかに記載のプログラム解析装置。
【請求項６】
前記記憶手段は、前記透かし情報を挿入するためのコードを含むブロックと含まないブロックの結合順序を示す結合順序情報を記憶することを特徴とする請求項１から請求項５のいずれかに記載のプログラム解析装置。
【請求項７】
前記識別情報は、前記透かし情報を挿入するためのコードを含むブロックの中のどこに透かし情報を挿入するかを示す情報を含むことを特徴とする請求項１から請求項６のいずれかに記載のプログラム解析装置。
【請求項８】
請求項１から請求項７のいずれかに記載のプログラム解析装置により分割された前記プログラムを入力するプログラム入力手段と、前記識別情報を用いて前記透かし情報を挿入するコードを含むブロックを特定し、特定した前記ブロックに前記透かし情報を挿入する透かし挿入手段と、前記分割されたプログラムを結合して再構成するプログラム結合手段と、結合した前記プログラムを実行するプログラム実行手段と、を具備したことを特徴とするプログラム利用装置。
【請求項９】
前記透かし情報をプログラム解析装置より取得することを特徴とする請求項８記載のプログラム利用装置。
【請求項１０】
前記識別情報で特定した前記透かし情報を挿入するコードを含むブロックが複数ある場合に、特定した複数の前記ブロックにそれぞれ異なる前記透かし情報を挿入することを特徴とする請求項８記載のプログラム利用装置。
【請求項１１】
プログラムに透かし情報を挿入するためのコードを追加するステップと、前記プログラムを前記透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するステップと、前記透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報を記憶するステップと、を具備したことを特徴とするプログラム解析方法。
【請求項１２】
請求項１１に記載のプログラム解析方法によりに分割された前記プログラムを入力するステップと、前記識別情報を用いて前記透かし情報を挿入するコードを含むブロックを特定するステップと、特定した前記ブロックに前記透かし情報を挿入するステップと、前記分割されたプログラムを結合して再構成するステップと、結合した前記プログラムを実行するステップと、を具備したことを特徴とするプログラム利用方法。
【請求項１３】
コンピュータに、プログラムに透かし情報を挿入するためのコードを追加するステップと、前記プログラムを前記透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するステップと、前記透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報を記憶するステップと、を行わせることを特徴とするプログラム解析プログラム。
【請求項１４】
請求項１から請求項７のいずれかに記載のプログラム解析装置と、請求項８から請求項１０のいずれかに記載のプログラム利用装置と、を具備したことを特徴とする透かし挿入処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、透かし情報を挿入することによりプログラムの不正利用を防止するためのプログラム解析装置およびプログラム利用装置に関する。
【背景技術】
【０００２】
コンピュータネットワークの進展に伴い、ネットワークを介したコンピュータプログラムの流通が一般的になっている。コンピュータプログラムは、容易に複製を作成できるため、プログラムの複製が不正に２次配布されたり、プログラム中のアルゴリズムを盗用、改ざんされたりする可能性がある。したがって、このような不正利用からプログラムを保護する必要がある。
【０００３】
従来のプログラム保護技術の一つとして、プログラムへ電子透かしを挿入する方法が挙げられる。この方法では、プログラムの仕様に影響を与えることのないように、プログラムの著作権情報や配布先ごとに異なる配布先情報を透かしとして挿入し配布する。そして、不正利用が発生した場合に、不正利用者のプログラムから透かし情報を取り出し、透かし情報を解析する。これにより、プログラムの盗用の証明や流出元を容易に検出することが可能となる。
【０００４】
具体的な透かしの挿入方法としては、例えば、特許文献１に開示されたものがある。
【０００５】
この方法は、まず、透かしを挿入するプログラムを解析し、実行順序に依存関係のないコードを検出する。次に、検出部分にプログラムの仕様に影響しないダミー変数の演算を挿入する。そして、ダミー変数の演算を含む検出部分の実行順序をランダムに入れ替える。
【０００６】
このような処理を行うことにより、その実行順序を透かし情報としてプログラムの著作権情報や配布先ごとに異なる配布先情報を表す仕組みを実現している。
【特許文献１】特開２０００−７６０６４号公報（第３−４頁、第２図、第７図）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来のプログラムへの透かし挿入方式は、透かし情報の挿入処理にかかる負荷が大きく、処理能力の低い機器で透かし挿入処理を行うと多大な負荷がかかるという問題がある。
【０００８】
従来の方式を用いて透かし情報を挿入する場合、プログラムに透かし情報を挿入する箇所（透かし挿入箇所）を検出するためにプログラム全体の解析が必要となるため、処理能力の低い機器では透かし挿入処理にかかる負荷が大きくなる。
【０００９】
本発明は、かかる点に鑑みてなされたものであり、透かし情報を挿入する際の処理負荷を軽減することにより、処理能力の低い機器での透かし情報挿入処理を可能にすることを目的とする。
【課題を解決するための手段】
【００１０】
従来の課題を解決するために、本発明は、処理能力の高い機器（機器Ａとする）でプログラム全体を解析し透かし挿入箇所の検出を行い、処理能力の低い機器（機器Ｂとする）が透かし挿入箇所を即座に特定できるようにプログラムを変換し、透かし挿入箇所を示す情報（透かし挿入箇所情報）を記憶し、その後、機器Ｂにおいて機器Ａにより記憶された透かし挿入箇所情報を用いて機器Ａにより変換されたプログラムに透かしを挿入するようにした。
【発明の効果】
【００１１】
これにより、透かし挿入箇所を検出する処理が機器Ａで行われることになり、機器Ｂにおいて透かし挿入処理にかかる負荷が軽減される。
【発明を実施するための最良の形態】
【００１２】
本発明の第１の態様にかかるプログラム解析装置は、プログラムに透かし情報を挿入するためのコードを追加する透かし挿入箇所追加手段と、前記プログラムを前記透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するプログラム分割手段と、前記透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報を記憶する記憶手段と、を具備した構成を採る。
【００１３】
これにより、プログラムコード全体を解析し、透かし挿入箇所を追加する処理と透かし挿入処理を分割できるので、プログラム挿入処理における透かし挿入処理を軽減できる。また、プログラム挿入装置において識別情報を用いて透かしを挿入するブロックを容易に特定できる。さらに、プログラム挿入装置において、ブロックごとに付与された識別情報を用いて透かし挿入個所を特定できるので、例えば、プログラムの行数で透かし挿入箇所を特定する場合に比べ、飛躍的に透かしの処理負荷を軽減できる。
【００１４】
本発明の第２の態様は、第１の態様にかかるプログラム解析装置において、前記透かし情報を挿入するコードを含むブロックは、前記プログラムの一部を必ず含む。
【００１５】
透かし情報を挿入するコードはプログラムの実行結果に影響を与えないので、透かし情報を挿入するコードだけでブロックを形成するとブロックごと取り除かれる可能性があるが、このように、透かし情報を挿入するコードを含むブロックにプログラムの一部を含むようにすることにより、このブロックを取り除くとプログラムの動作に支障をきたすようになる。この結果、透かし情報を挿入するコードを含むブロックごと取り除かれることを防止できる。
【００１６】
本発明の第３の態様は、第１の態様にかかるプログラム解析装置において、前記透かし情報を挿入するためのコードを複数追加する。
【００１７】
これにより、透かし情報挿入箇所を完全に特定することが困難になり、セキュリティが向上する。
【００１８】
本発明の第４の態様は、第３の態様にかかるプログラム解析装置において、前記透かし情報を挿入するためのコードを含むブロックを複数生成する。
【００１９】
これにより、透かし情報挿入箇所を完全に特定することが困難になり、セキュリティが向上する。
【００２０】
本発明の第５の態様は、第１の態様から第４の態様のいずれかにかかるプログラム解析装置において、前記透かし情報を挿入するためのコードは、前記プログラムが特定の入力値であったときに実行される。
【００２１】
これにより、前記透かし情報を挿入するためのコードは、通常は動作せず、透かしを取り出そうと特定の値を入力した際にのみ動作し、透かしを取り出すことができる。
【００２２】
本発明の第６の態様は、第１の態様から第５の態様のいずれかにかかるプログラム解析装置において、前記記憶手段は、前記透かし情報を挿入するためのコードを含むブロックと含まないブロックの結合順序を示す結合順序情報を記憶する。
【００２３】
これにより、結合順序情報を用いてブロックを適切に結合することができる。
【００２４】
本発明の第７の態様は、第１の態様から第６の態様のいずれかにかかるプログラム解析装置において、前記識別情報は、前記透かし情報を挿入するためのコードを含むブロックの中のどこに透かし情報を挿入するかを示す情報を含む。
【００２５】
これにより、正確に透かし挿入場所を特定できる。
【００２６】
本発明の第８の態様にかかるプログラム利用装置は、第１の態様から第７の態様のいずれかに記載のプログラム解析装置により分割された前記プログラムを入力するプログラム入力手段と、前記識別情報を用いて前記透かし情報を挿入するコードを含むブロックを特定し、特定した前記ブロックに前記透かし情報を挿入する透かし挿入手段と、前記分割されたプログラムを結合して再構成するプログラム結合手段と、結合した前記プログラムを実行するプログラム実行手段と、を具備した構成を採る。
【００２７】
これにより、プログラム解析装置が記憶した透かし挿入場所に関する情報を用いて、透かしを挿入するブロックおよび箇所を特定し、プログラムコードの適切な箇所に透かし情報を挿入する。
【００２８】
本発明の第９の態様は、第８の態様にかかるプログラム利用装置において、前記透かし情報をプログラム解析装置より取得する。
【００２９】
これにより、プログラム利用装置において透かし情報を生成する処理が不要となるため、プログラム利用装置での処理負荷をさらに軽減することが出来る。
【００３０】
本発明の第１０の態様は、第８の態様にかかるプログラム利用装置において、前記識別情報で特定した前記透かし情報を挿入するコードを含むブロックが複数ある場合に、特定した複数の前記ブロックにそれぞれ異なる前記透かし情報を挿入する。
【００３１】
これにより、プログラムに挿入可能な情報量を増やすことができ、プログラムの権利情報だけでなく、実行回数や実行権限といったプログラムの利用条件などが挿入できる。
【００３２】
本発明の第１１の態様は、プログラムに透かし情報を挿入するためのコードを追加するステップと、前記プログラムを前記透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するステップと、前記透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報を記憶するステップと、を具備したことを特徴とするプログラム解析方法である。
【００３３】
本発明の第１２の態様は、第１１の態様にかかるプログラム解析方法によりに分割された前記プログラムを入力するステップと、前記識別情報を用いて前記透かし情報を挿入するコードを含むブロックを特定するステップと、特定した前記ブロックに前記透かし情報を挿入するステップと、前記分割されたプログラムを結合して再構成するステップと、結合した前記プログラムを実行するステップと、を具備したことを特徴とするプログラム利用方法である。
【００３４】
本発明の第１３の態様は、コンピュータに、プログラムに透かし情報を挿入するためのコードを追加するステップと、前記プログラムを前記透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するステップと、前記透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報を記憶するステップと、を行わせることを特徴とするプログラム解析プログラムである。
【００３５】
本発明の第１４の態様は、第１の態様から第７の態様のいずれかに記載のプログラム解析装置と、第８の態様から第１０の態様のいずれかに記載のプログラム利用装置と、を具備したことを特徴とする透かし挿入処理システムである。
【００３６】
本発明の一実施の形態にかかる透かし挿入システムについて、図１を用いて詳細に説明する。図１は、本実施の形態にかかる透かし挿入システムの構成図である。
【００３７】
本実施の形態にかかる透かし挿入処理システム１００は、配信サーバ１０１と、プログラム解析装置１０２と、複数のプログラム利用装置１０３ａ〜１０３ｎ（以下、単にプログラム利用装置１０３とする）と、を持つ構成を採る。
【００３８】
配信サーバ１０１は、プログラムを製作する製作者のサーバであり、プログラムを配信する。また、プログラム解析装置１０２は、ホームサーバなどの処理能力の高い装置であり、配信サーバ１０１とプログラム利用装置１０３との間の各種情報の中継を行う。また、プログラム利用装置１０３は、ＰＤＡや携帯電話などの個人の端末であり、比較的処理の遅い装置を想定している。
【００３９】
次に、透かし挿入処理システム１００の動作の概要について説明する。
【００４０】
まず、プログラム利用装置１０３が、プログラム解析装置１０２を介して、配信サーバ１０１にプログラムの配信要求をする（ＳＴ１０１、ＳＴ１０２）。これに対して、配信サーバ１０１は、プログラム本体と（ＳＴ１０３）共に、プログラム解析プログラムをプログラム解析装置１０２に送る（ＳＴ１０４）。
【００４１】
プログラム解析プログラムは、プログラム本体を解析し透かし情報を挿入するためのコードを追加し、さらにプログラムを透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割するプログラムである。
【００４２】
また、配信サーバ１０１は、プログラム解析装置１０２に透かし挿入プログラムを送る（ＳＴ１０５）。
【００４３】
透かし挿入プログラムは、プログラム利用装置１０３が、透かし情報を挿入するためのコードに透かしを挿入するためのプログラムである。
【００４４】
次に、プログラム解析装置１０２は、プログラム解析プログラムを用いて、プログラム全体を解析し、透かし情報を挿入するためのコードを追加し、さらにプログラムを透かし情報を挿入するためのコードを含むブロックと含まないブロックに分割する。そして、プログラム解析装置１０２は、分割したブロックとプログラム利用装置１０３に送る。また、プログラム解析装置１０２は、透かし情報を挿入するコードを含むブロックを一意に特定可能な識別情報もプログラム利用装置１０３に送る（ＳＴ１０６）。
【００４５】
さらに、プログラム解析装置１０２は、透かし挿入プログラムもプログラム利用装置１０３に送る（ＳＴ１０７）。
【００４６】
これに対して、プログラム利用装置１０３は、ブロックに分割されたプログラムを受信し、識別情報で特定されるブロックに透かし情報を挿入する。次に、プログラム利用装置１０３は、分割されたプログラムを結合してプログラムを再構成し、結合したプログラムを実行する。
【００４７】
以上のように、処理能力の高いプログラム解析装置１０２で透かし挿入箇所の特定を行うことにより、処理能力の低いプログラム利用装置１０３におけるプログラム挿入処理の負荷を軽減できる。
【００４８】
また、プログラム解析装置１０２が、プログラムを複数のブロックに分割し、分割したプログラムと共に透かし挿入箇所を即座に特定できるような識別情報をプログラム利用装置１０３に送ることにより、プログラム利用装置１０３において識別情報を用いて透かしを挿入するブロックを容易に特定できる。これにより、プログラム利用装置１０３の処理負荷をさらに軽減できる。
【００４９】
次に、本実施の形態にかかるプログラム解析装置１０２について図２を用いて説明する。図２は、本実施の形態のプログラム解析装置１０２の構成図である。
【００５０】
プログラム解析装置１０２には、プログラム入力部２０１が設けられている。プログラム入力部２０１は、配信サーバ１０１から送られてきた、透かし挿入箇所を追加し、複数のブロックに分割するプログラムコードを入力する手段である。また、プログラム入力部２０１は、配信サーバ１０１から送られてきたプログラム解析プログラムと透かし挿入プログラムを入力する。そして、プログラム入力部２０１は、プログラムコード、プログラム解析プログラムを解析部２０２に出力する。また、プログラム入力部２０１は、透かし挿入プログラムをプログラム出力部２０４に出力する。
【００５１】
解析部２０２は、挿入箇所追加部２０５と、プログラム分割部２０６とから構成されている。挿入箇所追加部２０５は、プログラム入力部２０１から出力されたプログラム解析プログラムを用いて、プログラム入力部２０１から出力されたプログラムコードに対し、透かし挿入箇所を追加する。
【００５２】
また、プログラム分割部２０６は、プログラム解析プログラムを用いて、透かし挿入箇所を含むブロックと含まないブロックに分割し、プログラム出力部２０４に出力する手段である。また、プログラム分割部２０６は、分割されたブロックにブロックを一意に特定するための識別情報を付与するとともに、解析情報記憶部２０３に渡す。また、プログラム分割部２０６は、透かし挿入箇所を含むブロックを特定するための透かし挿入箇所識別情報を解析情報記憶部２０３に渡す。また、プログラム分割部２０６は、分割したブロックを結合し元のプログラムコードに戻すための結合順序情報を解析情報記憶部２０３に渡す。
【００５３】
プログラム出力部２０４は、解析部２０２が透かし挿入箇所を追加し、透かし挿入箇所を含む部分と含まない部分に分割したプログラムコードをプログラム利用装置１０３に出力する手段である。また、プログラム出力部２０４は、解析情報記憶部２０３が記憶している情報をプログラム利用装置１０３に出力する。
【００５４】
解析情報記憶部２０３は、解析部２０２が分割したブロックを一意に特定するための識別情報と、透かし挿入箇所識別情報と、分割したブロックを結合し元のプログラムコードに再構成する際に利用する結合順序情報を記憶する手段である。具体的には、識別情報はブロックのファイル名とし、結合順序情報は分割したブロックのシーケンス番号を記憶する。またこの識別情報は、暗号化しておいてもよい。さらに、結合順序情報は、識別情報に含めてもよい。
【００５５】
次に、本実施の形態にかかるプログラム利用装置１０３について図３を用いて説明する。図３は、本実施の形態のプログラム利用装置１０３の構成図である。
【００５６】
プログラム利用装置１０３には、プログラム入力部３０１が設けられている。プログラム入力部３０１は、プログラム解析装置１０２から送られてくる、透かし情報を挿入し実行するプログラムコード、透かし挿入プログラムを入力する手段である。プログラム入力部３０１は、プログラムコードおよび透かし挿入プログラムを透かし挿入部３０２に出力する。
【００５７】
透かし挿入部３０２は、透かし挿入プログラムを用いて、透かし情報生成部３０３により生成された透かし情報を、プログラム入力部３０１により出力されたプログラムコードに対して、解析情報入力部３０６により入力された透かし挿入箇所識別情報で示された部分に挿入する手段である。
【００５８】
透かし用データ入力部３０５は、透かし用データを入力する手段である。入力する透かし用データは、プログラムの配布先を一意に特定する情報であり、例えば、配布先の住所、氏名、電話番号、会社名、電子メールアドレス、プログラムを実行する端末に固有な製造番号などである。また、透かし用データに配布元の情報、プログラムの実行期限や実行回数などのプログラム利用条件を挿入してもよい。なお、これらの透かし用データはプログラム解析装置１０２から取得してもよい。
【００５９】
透かし情報生成部３０３は、透かし用データ入力部３０５により入力された透かし用データから、プログラムコードに実際に挿入する透かし情報を生成する手段である。透かし情報は、入力したデータそのものであってもよいし、それを暗号化したデータであってもよい。また、透かし情報は、透かし用データを保存するデータベース上で透かし用データを一意に特定するためのＩＤであってもよい。
【００６０】
なお、本実施の形態では、透かし用データから透かし情報を生成する形態となっているが、必ずしも透かし用データに基づいて透かし情報を生成する必要はなく、透かし情報から配布先が一意に特定できるようになっていればよい。例えば、プログラムに１〜Ｎシーケンス番号を透かし情報として挿入し、配布先Ｄ１にシーケンス番号ｉのプログラムを配布、配布先Ｄ２にシーケンス番号ｊのプログラムを配布といったように透かし情報と配布先を一意に特定可能としてもよい。
【００６１】
プログラム結合部３０７は、ブロックに分割され、かつ透かし挿入部３０２により一部のブロックに透かしの挿入されたプログラムコードを、解析情報入力部３０６により入力された結合順序情報を基に結合し元のプログラムコードを再構成する手段である。
【００６２】
解析情報入力部３０６は、プログラム解析装置１０２により分割されたブロックを一意に特定するための識別情報、透かし挿入箇所識別情報、およびプログラムを結合するための情報である結合順序情報を入力する手段である。
【００６３】
プログラム実行部３０４は、プログラム結合部３０７により再構成されたプログラムコードを実行する手段である。なおプログラムコードがソースコードの場合には、プログラムコードをコンパイルした後に実行する。
【００６４】
次に、本実施の形態にかかる解析部２０２のプログラム解析動作について図４を用いて説明する。図４は、本実施の形態にかかる解析部２０２の動作を表すフローチャートである。
【００６５】
まず、解析部２０２は、挿入箇所追加部２０５において、解析対象のプログラムコードに変数を追加する。プログラムコードがＣ言語で記述されている場合には、挿入箇所追加部２０５は、グローバル変数を追加し、Ｊａｖａ（登録商標）言語で記述されている場合には、クラス変数を追加する（ステップ４０１）。
【００６６】
次に、挿入箇所追加部２０５は、プログラムコードに透かし挿入箇所として、ステップ４０１で追加した変数を用いて演算を行う部分コードを追加する（ステップ４０２）。ここで、部分コードを追加したプログラムコードをコンパイルしてもよい。
【００６７】
その後、プログラム分割部２０６は、ステップ４０２で部分コードが追加されたプログラムコードを、部分コードを含むブロックと部分コードを含まないブロックに分割し（ステップ４０３）、分割したブロックそれぞれに識別情報を付与する（ステップ４０４）。
【００６８】
さらに、プログラム分割部２０６は、ブロックの識別情報と、部分コードを含むブロック、つまり透かしを挿入するフロックを特定する透かし挿入箇所識別情報、および、ブロックを結合し元のプログラムコードに再構成するための結合順序情報とを解析情報記憶部２０３に渡し、解析情報記憶部２０３がこれらの情報を記憶する（ステップ４０５）。
【００６９】
次に、解析部２０２のプログラム解析動作の具体例について、図５を用いて説明する。
【００７０】
６００ａで示すプログラムは、プログラム入力部２０１が入力した基本となるプログラムである。６００ｂで示すプログラムは、６００ａに対してグローバル変数６０１と透かし挿入箇所である部分コード６０２を追加したプログラムである。また、６００ｃで示すプログラムは、６００ｂに対して、部分コードを含むブロック６０５と部分コードを含まないブロック６０３に分割したプログラムである。６００ｄは、透かし挿入情報と結合順序情報を記憶したファイルである。
【００７１】
まず、挿入箇所追加部２０５は、ステップ４０１において、プログラム６００ａにグローバル変数ＶおよびＩｎを追加し０で初期化する（６０１で示す部分）。
【００７２】
次に、挿入箇所追加部２０５は、ステップ４０２において、プログラム６００ａに透かし挿入箇所である部分コードを追加する。ここで部分コードは、プログラムを実行するときの入力値を表すグローバル変数Ｉｎが定数Ｉと等しい場合に実行される条件分岐で、条件が真のときに実行されるコードはステップ４０１で追加されたグローバル変数Ｖへの代入文を含む（６０２で示す部分）。
【００７３】
これにより、部分コードは、通常は動作せず、透かしを取り出そうと特定の値を入力した際にのみ動作し、透かしを取り出すことができる。
【００７４】
そして、プログラム分割部２０６は、ステップ４０３において、プログラム６００ｂをステップ４０２において追加した部分コードを含むブロックと部分コードを含まないブロックとに分割し（６０５および６０３で示す部分）、ステップ４０４においてそれぞれのブロックに対して識別情報を付与する。ここでは、部分コードを含むブロックをＰ２、部分コードを含まないブロックをＰ１とする（６０４および６０６で示す部分）。
【００７５】
最後に、プログラム分割部２０６は、ステップ４０５において、ステップ４０４において付与された識別情報、部分コードを含むブロックを特定する透かし挿入箇所識別情報、および結合順序情報を解析情報記憶部２０３へ送り、解析情報記憶部２０３が記憶する（６００ｄで示す部分）。
【００７６】
このうち、図中６０７で示される部分が透かし挿入箇所識別情報を表し、図中６０８で示される部分がブロックの結合順序情報を表す。具体的には、透かし挿入箇所識別情報６０７は、ブロックＰ２の２行目〜３行目が透かし挿入場所であることを示している。これにより、正確に透かし挿入場所を特定できる。
【００７７】
また、結合順序情報６０８は、ブロックＰ１、ブロックＰ２の順で結合することを示している。
【００７８】
また、透かし情報を挿入するブロックＰ２について着目すべき点に、透かし情報を挿入するための部分コード以外にオリジナルのプログラム（ｒｅｔｕｒｎ  ａ；）が含まれていることである。透かし情報を挿入するコードはプログラムの実行に関係ないので、透かし情報を挿入するコードだけでブロックを形成するとプログラム利用装置１０３において、このブロックごと取り除かれる可能性がある。しかし、このように、透かし情報を挿入するコードを含むブロックにプログラムの一部を含むようにすることにより、このブロックを取り除くとプログラムの動作に支障をきたすようになる。この結果、透かし情報を挿入するコードを含むブロックごと取り除かれることを防止できる。
【００７９】
なお、図５では、Ｃ言語で記述されたソースコードを用いて説明しているが、Ｊａｖａ（登録商標）言語で記述されたソースコードの場合でも、グローバル変数ではなくクラス変数を追加することを除き、同じように処理することができる。
【００８０】
また、本実施の形態では、２つの変数を追加しているが、３つ以上の変数を追加してもよい。さらに、透かし挿入箇所である部分コードを複数追加してもよい。これにより、透かし情報挿入箇所を完全に特定することが困難になり、セキュリティが向上する。
【００８１】
また、図５では、部分コードを含むブロックと部分コードを含まないブロックをそれぞれ１ブロックとしているが、部分コードを含むブロックおよび部分コードを含まないブロックはそれぞれ複数のブロックとしてもよい。そのとき、部分コードを含むブロックは、必ず元のプログラムコードの一部を含むものとする。これにより、透かし情報挿入箇所を完全に特定することが困難になり、セキュリティが向上する。
【００８２】
このようにして、解析部２０２は、プログラムコードに透かし挿入箇所である部分コードを追加し、部分コードを含むブロックと含まないブロックに分割して、分割したそれぞれのブロックの識別情報と、透かし挿入箇所識別情報と、結合順序情報とを記憶する。
【００８３】
これにより、プログラムコードを解析し、透かし挿入箇所を追加する処理を解析部２０２において行うことができ、プログラム利用装置１０３における透かし挿入処理を軽減できる。
【００８４】
また、プログラム利用装置１０３において識別情報および透かし挿入箇所識別情報を用いて透かしを挿入するブロックを容易に特定できる。
【００８５】
さらに、プログラム利用装置１０３において、ブロックごとに付与された識別情報と透かし挿入箇所識別情報とを用いて透かし挿入箇所を特定できるので、例えば、プログラム
全体に対して、行数により透かし挿入箇所を特定する場合に比べ、飛躍的に透かしの処理負荷を軽減できる。これは、プログラム全体に対して行数で透かし挿入箇所を特定する場合には、プログラム利用装置１０３は、プログラム全体で、透かし挿入箇所の行を先頭からカウントして特定する必要があり、行数の多いプログラムを処理する場合には、大きな負担になるからである。
【００８６】
また、ブロックの結合順序情報を記憶することにより、プログラム利用装置１０３において、結合順序情報を用いてブロックを適切に結合することができる。
【００８７】
次に、本実施の形態にかかる透かし挿入部３０２の動作について、図６を用いて説明する。図６は、本実施の形態にかかる透かし挿入部３０２の動作を表すフローチャートである。
【００８８】
まず、透かし挿入部３０２は、透かし挿入箇所を含むブロックを特定するための透かし挿入箇所識別情報を解析情報入力部３０６から取得する（ステップ６０１）。解析情報入力部３０６は、透かし挿入箇所識別情報をプログラム解析装置１０２から取得する。これにより、プログラム利用装置において透かし情報を生成する処理が不要となるため、プログラム利用装置での処理負荷をさらに軽減することが出来る。
【００８９】
次に、透かし挿入部３０２は、透かし用データ入力部３０５により入力され、透かし情報生成部３０３により生成された透かし情報Ｗを、生成関数Ｆ１（Ｗ）を用いて実際に挿入する部分透かし情報Ｗ１およびＷ２を生成する（ステップ６０２）。
【００９０】
ただし、生成関数Ｆ１はＷ１およびＷ２よりＷを一意に生成するＦ１の逆関数、つまりＷ＝Ｆ-1（Ｗ１，Ｗ２）を持つことを条件とする。
【００９１】
次に、透かし挿入部３０２は、解析情報入力部３０６により入力された透かし挿入箇所識別情報を用いて透かし挿入箇所を含むブロックを特定し、ステップ６０２により生成されたＷ１およびＷ２で変数を上書きすることで透かしを挿入する（ステップ６０３）。
【００９２】
なお、透かし情報を挿入するブロックが複数ある場合は、透かし挿入部３０２は、それぞれのブロック毎に異なる透かし情報を挿入するようにする。これにより、プログラムに挿入可能な情報量を増やすことができ、プログラムの権利情報だけでなく、実行回数や実行権限といったプログラムの利用条件などが挿入できる。
【００９３】
次に、本実施の形態における透かし挿入部３０２の透かし挿入動作の具体例について、図５〜図７を用いて詳細に説明する。
【００９４】
７００ａで示すプログラムは、プログラム解析装置１０２で生成された部分コードを含むブロック６０５に透かし情報を挿入したプログラムである。
【００９５】
まず、透かし挿入部３０２は、ステップ６０１において、透かし挿入箇所識別情報および結合順序情報を記憶したファイル６００ｄより、透かし挿入箇所識別情報６０７を取得する。
【００９６】
次に、透かし挿入部３０２は、ステップ６０２において、透かし情報Ｗ（１０１１）より部分透かし情報Ｗ１（１０）およびＷ２（１１）を生成する。さらに、ステップ６０３において、部分コードを含むブロック６０５中の透かし挿入箇所識別情報６０７で表される箇所に、Ｗ１およびＷ２でＶの値を上書きする（７０１および７０２で示す部分）。
【００９７】
このようにして、透かし挿入部３０２は、解析部２０２が記憶した透かし挿入箇所識別情報を用いて、透かしを挿入するブロックおよび箇所を特定し、プログラムコードの適切な箇所に透かし情報を挿入する。
【００９８】
また、透かし挿入部３０２は、ブロックごとに付与された識別情報と透かし挿入箇所識別情報を用いて透かし挿入個所を特定できるので、例えば、プログラムの行数で透かし挿入箇所を特定する場合のように、プログラムを先頭から解析する必要がないので、飛躍的に透かしの処理負荷を軽減できる。
【００９９】
次に、本実施の形態にかかるプログラム結合部３０７およびプログラム実行部３０４の動作について図８を用いて説明する。図８は、本実施の形態にかかるプログラム結合部３０７およびプログラム実行部３０４の動作を表すフローチャートである。
【０１００】
まず、プログラム結合部３０７は、解析情報入力部３０６により入力される、プログラム解析装置１０２により分割され、透かし挿入部３０２により透かし情報の挿入されたブロックの結合順序情報を取得する（ステップ８０１）。
【０１０１】
次に、プログラム結合部３０７は、ステップ８０１で取得した結合順序情報を用いて、大きい番号で示されるブロックを小さい番号で示されるブロックの直後に結合し、元のプログラムコードを再構成する（ステップ８０２）。
【０１０２】
そして、プログラム実行部３０４は、ステップ８０２で結合されたプログラムを実行する（ステップ８０３）。このとき、プログラムがソースコードの場合には、プログラムをコンパイルしてから実行する。
【０１０３】
次に、本実施の形態にかかるプログラム結合部３０７の動作の具体例について、図５、図７〜図９を用いて説明する。
【０１０４】
８００ａで示されるプログラムは、プログラム結合部３０７により結合されたプログラムコードである。
【０１０５】
まず、プログラム結合部３０７は、ステップ８０１において、透かし挿入情報および結合順序情報を記憶したファイル６００ｄより結合順序情報を取得する（６０８で示される部分）。
【０１０６】
さらに、プログラム結合部３０７は、ステップ８０２において、結合順序情報に従って、ブロック６０３および７００ａを一つのファイルに結合し、透かし情報の挿入されたプログラムコードを生成する（８００ａで示される部分）。
【０１０７】
このようにして、プログラム結合部２０７は、結合順序情報に基づいて、分割されたブロックを結合して元のプログラムコードを再構成し、プログラム実行部３０４は、プログラムを実行する。これにより、プログラム解析装置１０２が、プログラム利用装置１０３に対して、プログラムを分割して送ることが可能となり、プログラム解析装置１０２が、プログラム利用装置１０３に対して、透かし挿入箇所をブロックの識別番号で通知することも可能となる。
【０１０８】
以上説明したように、本実施の形態によれば、プログラムコードを解析し、透かし挿入箇所を追加する処理と透かし挿入処理を分割することができる。これにより、透かし挿入処理を処理能力の低い機器で行う場合に処理にかかる負荷を軽減することが可能となる。
【０１０９】
また、本実施の形態によれば、プログラムコードを透かし挿入箇所を含むブロックと含まないブロックに分割し、それぞれを一意に特定するための識別情報を付与することができる。これにより、透かし挿入処理を行う際に、挿入箇所を再検索する必要がないため、挿入箇所を即座に特定することが可能となる。
【０１１０】
なお、プログラム解析装置１０２およびプログラム利用装置１０３の動作をプログラムにし、汎用のコンピュータに実行させる形態であってもよい。
【産業上の利用可能性】
【０１１１】
以上説明したように、本発明によれば、透かしの挿入処理を分担できるので、処理能力の低い機器での透かしの挿入処理における負荷を軽減することができる。
【図面の簡単な説明】
【０１１２】
【図１】本発明の一実施の形態における透かし挿入システムの構成図
【図２】本実施の形態におけるプログラム解析装置の構成図
【図３】本実施の形態におけるプログラム利用装置の構成図
【図４】本実施の形態における解析部の動作を表すフローチャート
【図５】本発明の実施の形態における解析部が生成したプログラムを示す図
【図６】本実施の形態における透かし挿入部の動作を表すフローチャート
【図７】本施の形態における透かし挿入部が生成したプログラムを示す図
【図８】本実施の形態における結合部の動作を表すフローチャート
【図９】本実施の形態における結合部が生成したプログラムを示す図
【符号の説明】
【０１１３】
１００  透かし挿入処理システム
１０１  配信サーバ
１０２  プログラム解析装置
１０３ａ、１０３ｎ  プログラム利用装置
２０１、３０１  プログラム入力部
２０２  解析部
２０３  解析情報記憶部
２０４  プログラム出力部
２０５  挿入箇所追加部
２０６  プログラム分割部
３０２  透かし挿入部
３０３  透かし情報生成部
３０４  プログラム実行部
３０５  透かし用データ入力部
３０６  解析情報入力部
３０７  プログラム結合部
【図１】
2006079433.tif 000003
【図２】
2006079433.tif 000004
【図３】
2006079433.tif 000005
【図４】
2006079433.tif 000006
【図５】
2006079433.tif 000007
【図６】
2006079433.tif 000008
【図７】
2006079433.tif 000009
【図８】
2006079433.tif 000010
【図９】
2006079433.tif 000011