(57)【要約】  【課題】        秘密情報を保護しつつ、透かし挿入処理の負荷を軽減することを可能にしたプログラムの電子透かし挿入方法および装置を提供すること。    【解決手段】  本発明は、プログラムの実行時に電子透かし情報をメモリ上に生成する透かし生成コードのソースコードを生成し、透かし生成コードの一部を外部端末に転送し、外部端末が透かし生成コードの一部をコンパイルさせ、外部端末に転送しなかった透かし生成コードの残りを自身でコンパイルし、外部端末がコンパイルした透かし生成コードの一部と自身でコンパイルした透かし生成コードの残りをプログラムに透かしとして挿入するようにした。  【選択図】      図２
2006024027.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行時に電子透かし情報をメモリ上に生成する透かし生成コードのソースコードを生成するステップと、前記透かし生成コードの一部を外部端末に転送するステップと、前記外部端末が前記透かし生成コードの一部をコンパイルするステップと、前記外部端末からコンパイルした前記透かし生成コードの一部を受信するステップと、前記外部端末に転送しなかった前記透かし生成コードの残りをコンパイルするステップと、前記コンパイルした前記透かし生成コードの一部と前記コンパイルした前記透かし生成コードの残りをプログラムに透かしとして挿入するステップと、を具備したことを特徴とする電子透かし挿入方法。
【請求項２】
前記透かし生成コードのソースコードを生成するステップが、前記透かし情報を分割するステップと、前記分割した透かし情報を個別にメモリ上に生成する透かし関数群を生成するステップと、前記透かし関数群を順番に呼び出す透かし呼出し関数を生成するステップと、からなり、
前記透かし生成コードの一部が、前記透かし関数群もしくは前記透かし呼出し関数のどちらか一方のコードであることを特徴とする請求項１記載の電子透かし挿入方法。
【請求項３】
前記透かし生成コードが、透かし情報を表現するグラフ構造であることを特徴とする請求項１または請求項２記載の電子透かし挿入方法。
【請求項４】
プログラムの実行時に電子透かし情報をメモリ上に生成する透かし生成コードを生成する透かし生成コード生成部と、前記透かし生成コードの一部を外部端末に転送し、前記外部端末がコンパイルした透かし生成コードの一部を受信する透かし生成コード伝送部と、前記コンパイルした前記透かし生成コードの一部と前記コンパイルした前記透かし生成コードの残りをプログラムに透かしとして挿入する透かし挿入部を有することを特徴とする電子透かし挿入装置。
【請求項５】
透かし生成コード生成部が、透かし情報を分割する透かし情報分割部と、前記分割した透かし情報を個別にメモリ上に生成する透かし関数群を生成する透かし関数生成部と、前記透かし関数を順番に呼び出す透かし呼出し関数を生成する透かし呼出し関数生成部からなり、
前記透かし生成コードの一部が、前記透かし関数群もしくは前記透かし呼出し関数のどちらか一方のコードであることを特徴とする請求項４記載の電子透かし挿入装置。
【請求項６】
前記透かし生成コードが、透かし情報を表現するグラフ構造であることを特徴とする請求項４または請求項５記載の電子透かし挿入装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正利用を防止するためのプログラムへの透かし挿入方法および装置に関する。
【背景技術】
【０００２】
コンピュータネットワークの進展に伴い、ネットワークを介したコンピュータプログラムの流通が一般的になっている。コンピュータプログラムは、容易に複製を作成できるため、プログラムの複製が不正に２次配布されたり、プログラム中のアルゴリズムを盗用、改ざんされたりする可能性がある。したがって、このような不正利用からプログラムを保護する必要がある。
【０００３】
従来のプログラム保護技術のひとつとして、プログラムへ電子透かしを挿入する方法が挙げられる。この方法では、プログラムの仕様に影響を与えることのないように、プログラムの著作権情報や配布先ごとに異なる配布先情報を透かしとして挿入し配布する。そして、不正利用が発生した場合に、不正利用者のプログラムから透かし情報を取り出し、透かし情報を解析する。これにより、プログラムの盗用の証明や流出元を容易に検出することが可能となる。
【０００４】
具体的な透かしの挿入方法としては、例えば、特許文献１に開示されたものがある。この方式では、透かしとして挿入する情報（透かし情報）を、リンクリストなどのグラフ構造で表現する。透かし情報を表すグラフが、透かし挿入対象プログラムの実行時に動的にメモリ上に生成されるため、この方式は動的透かし方式と呼ばれる。
【０００５】
特許文献１の動的透かし挿入方法では、まず、透かし情報を表すグラフを生成するプログラムコード（透かし生成コード）を生成し、続いて、透かし挿入対象プログラムに、透かし挿入対象プログラムの実行時にこの透かし生成コードが実行されるように、透かし生成コードを埋め込む。
【０００６】
これにより、プログラムの実行時に、透かし生成コードが実行されて、透かし情報を表すグラフがメモリ上に生成される。特許文献１の透かし取り出し方法は、プログラム実行時に生成されたグラフをメモリ上から読み出し、透かし情報に変換する。
【０００７】
特許文献１に例示されるリンクリストによる動的透かし情報の表現方法について、図８を用いて説明する。図８は、透かし情報として値「１０」を表現するリンクリストを示す図である。
【０００８】
図８において、ノード８０１〜８０４は片方向リンクリストのノードである。各ノード８０１〜８０４は、２つのポインタ８０５、８０６を有している。ポインタ８０６は、次ノードを指し示すポインタであり、通常のリンクリストのリストポインタと同様に、先頭リストから順番にリストをたどるために用いられる。透かし情報ポインタ８０５は、透かしとして埋め込む情報を示すために用いられる。先頭からＮ番目のノードの透かし情報ポインタは、２進数のＮ−１桁目の値を示しているものとする。透かし情報ポインタが自分自身をポイントしている場合には「０」、自分以外をポイントしている場合には「１」を表すものとする。
【０００９】
上記の条件で図８に示すリンクリストを先頭から順番に読み、透かし情報ポインタを値として解釈すると、２＾０×０＋２＾１×１＋２＾２×０＋２＾３×１＝１０を読み取ることができる。
【特許文献１】ＷＯ９９／６４９７３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記特許文献１に示されるプログラムへ動的透かしの挿入処理は、計算コストが高く、処理能力の低い機器で実行すると、透かし挿入処理に時間がかかるという問題がある。
【００１１】
具体的には、特許文献１に示される動的透かし方式では、まず、透かし情報を表すリンクリストを生成するソースコードを生成し、そのソースコードをコンパイルして、透かし挿入対象のプログラムに埋め込む。ソースコードのコンパイルは、高い計算能力を要求される処理であり、計算能力の低い電子透かし挿入装置では処理に時間がかかる。
【００１２】
この課題を解決するための方法として、上記の処理コストの高い処理を、ネットワークなどを介して計算能力の高い外部端末へ送り込んで実行させる方法が考えられる。つまり、電子透かし挿入装置で透かし生成用のソースコードを生成した後に、ソースコードを計算能力の高い外部端末に転送し、転送先の外部端末でコンパイルを行った後、コンパイル結果を転送元の電子透かし挿入装置に送り返し、電子透かし挿入装置が透かし挿入対象プログラムにコンパイルされたコードを埋め込むことで、高速に透かし挿入を行うことができる。
【００１３】
しかしながら、この方法では、プログラムに電子透かしとして挿入する情報（透かし情報）の全てが外部端末に流出するという問題点がある。透かし情報は、電子透かしの削除、改ざんといった電子透かしへの攻撃に利用される可能性があるため、全てを外部端末に流出させるべきではない。また、透かし挿入対象プログラムが利用する秘密情報（暗号鍵、端末ＩＤなど）を透かし情報として挿入する場合にも、外部端末に透かし情報の全てを流出させてはならない。
【００１４】
本発明は、かかる点に鑑みてなされたものであり、秘密情報を保護しつつ、透かし挿入処理の負荷を軽減することを可能にしたプログラムの電子透かし挿入方法および装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明は、プログラムの実行時に電子透かし情報をメモリ上に生成する透かし生成コードのソースコードを生成し、透かし生成コードの一部を外部端末に転送し、外部端末に透かし生成コードの一部をコンパイルさせ、外部端末に転送しなかった透かし生成コードの残りを自身でコンパイルし、外部端末がコンパイルした透かし生成コードの一部と自身でコンパイルした透かし生成コードの残りをプログラムに透かしとして挿入するようにした。
【発明の効果】
【００１６】
本発明によれば、透かし情報の全てを直接外部に流出させずに、かつ、処理負荷の大きい透かし挿入処理のコンパイルの一部を処理能力の高い機器で行うことにより、秘密情報を保護しつつ、高速にプログラムに透かしを挿入することが可能となる。
【発明を実施するための最良の形態】
【００１７】
本発明の第１の態様にかかる電子透かし挿入方法は、プログラムの実行時に電子透かし情報をメモリ上に生成する透かし生成コードのソースコードを生成するステップと、前記透かし生成コードの一部を外部端末に転送するステップと、前記外部端末が前記透かし生成コードの一部をコンパイルするステップと、前記外部端末からコンパイルした前記透かし生成コードの一部を受信するステップと、前記外部端末に転送しなかった前記透かし生成コードの残りをコンパイルするステップと、前記コンパイルした前記透かし生成コードの一部と前記コンパイルした前記透かし生成コードの残りをプログラムに透かしとして挿入するステップと、を具備した構成を採る。
【００１８】
これにより、透かし情報の全てを直接外部に流出させずに、かつ、処理負荷の大きい透かし挿入処理のコンパイルの一部を処理能力の高い機器で行うことにより、秘密情報を保護しつつ、高速にプログラムに透かしを挿入することが可能となる。
【００１９】
本発明の第２の態様は、第１の態様にかかる電子透かし挿入方法において、前記透かし生成コードのソースコードを生成するステップが、前記透かし情報を分割するステップと、前記分割した透かし情報を個別にメモリ上に生成する透かし関数群を生成するステップと、前記透かし関数群を順番に呼び出す透かし呼出し関数を生成するステップと、からなり、前記透かし生成コードの一部が、前記透かし関数群もしくは前記透かし呼出し関数のどちらか一方のコードである。
【００２０】
これにより、透かし情報を分割してその一部を外部に端末に送信することができ、透かし情報を外部に流出することなく、電子透かしを高速に挿入することができる。
【００２１】
本発明の第３の態様は、第１の態様または第２の態様にかかる電子透かし挿入方法において、前記透かし生成コードが、透かし情報を表現するグラフ構造である。
【００２２】
これにより、透かし情報を分割してその一部を外部に端末に送信することができ、透かし情報を外部に流出することなく、電子透かしを高速に挿入することができる。
【００２３】
本発明の第４の態様は、プログラムの実行時に電子透かし情報をメモリ上に生成する透かし生成コードを生成する透かし生成コード生成部と、前記透かし生成コードの一部を外部端末に転送し、前記外部端末がコンパイルした透かし生成コードの一部を受信する透かし生成コード伝送部と、前記コンパイルした前記透かし生成コードの一部と前記コンパイルした前記透かし生成コードの残りをプログラムに透かしとして挿入する透かし挿入部を有することを特徴とする電子透かし挿入装置である。
【００２４】
本発明の第５の態様は、第４の態様にかかる電子透かし挿入装置において、透かし生成コード生成部が、透かし情報を分割する透かし情報分割部と、前記分割した透かし情報を個別にメモリ上に生成する透かし関数群を生成する透かし関数生成部と、前記透かし関数を順番に呼び出す透かし呼出し関数を生成する透かし呼出し関数生成部からなり、前記透かし生成コードの一部が、前記透かし関数群もしくは前記透かし呼出し関数のどちらか一方のコードである。
【００２５】
本発明の第６の態様は、第４の態様または第５の態様にかかる電子透かし挿入装置において、前記透かし生成コードが、透かし情報を表現するグラフ構造である。
【００２６】
本発明は、動的透かし挿入処理において、透かし情報の一部だけでは、透かし情報の全てを把握できないということに着目したものであり、動的透かし挿入処理の一部を他の装置で分散処理することにより、動的透かし挿入処理の負荷軽減を実現するものである。
【００２７】
次に、本発明の一実施の形態にかかる透かし挿入装置を具備したプログラム配信システムについて、図１を用いて説明する。図１は、上記実施の形態にかかるプログラム配信システムの構成図である。
【００２８】
本実施の形態にかかるプログラム配信システム１００は、宅内で利用されるプログラムを２次配布されないように、宅内に透かし挿入装置１０１を配置して、透かし挿入装置１０１が、プログラムの配布先である外部端末１０２、１０３ごとにＩＤを付与するシステムとなっている。
【００２９】
プログラム配信システム１００は、プログラムを配信するプログラム配布サーバ１０４がインターネット１０５とゲートウェイ１０６を介して接続されている。宅内には、透かし挿入装置１０１と他の端末（外部端末）１０２、１０３が接続されている。なお、プログラム配布サーバ１０４が宅内にある場合は、インターネット１０５でなく宅内ネットワークでもよい。
【００３０】
プログラム配布サーバ１０４からプログラムが配信され、宅内の透かし挿入装置１０１にプログラムが一旦蓄積される。宅内の外部端末１０２、１０３でそのプログラムを利用する際に、透かし挿入装置１０１において外部端末１０２、１０３のＩＤを電子透かしとして挿入して配布する。
【００３１】
これにより、プログラムを２次配布すると、配布したプログラムに挿入されたＩＤから外部端末１０２、１０３が特定されるため、プログラムの２次配布を防ぐことが可能となる。
【００３２】
また、透かし挿入装置１０１は、透かしの挿入を高速に行うために、透かし生成コードの一部を外部端末１０２、１０３に転送して、外部端末１０２、１０３にて透かし生成コードの一部のコンパイルを行う。これにより、透かし挿入装置１０１が計算性能の低い端末であっても、高速に電子透かしの挿入を行うことができる。なお、透かし挿入装置１０１の透かし挿入処理の詳細については後述する。
【００３３】
次に、透かし挿入装置１０１の構成について、図２を用いて説明する。図２は、本実施の形態の透かし挿入装置１０１のブロック図である。
【００３４】
透かし挿入装置１０１には、プログラム配布サーバ１０４から配信されてきたプログラムを受信するプログラム受信部２０１が設けられている。プログラム受信部２０１は、受信したプログラムをプログラム蓄積部２０２に送る。
【００３５】
プログラム蓄積部２０２は、プログラムを蓄積する手段である。なお、プログラム蓄積部２０２は、プログラム配布サーバ１０４から配信されてきたプログラム以外も蓄積するようにしても良い。
【００３６】
また、透かし挿入装置１０１には、外部端末１０２から送られてきた、プログラム蓄積部２０２に蓄積されたプログラムの配布要求を受信し、受信した配布要求に基づき、透かし情報取得部２０４とプログラム読み出し部２０５を起動するプログラム配布要求受信部２０３設けられている。外部端末１０２とプログラム配布要求受信部２０３は、ホームネットワークなどの、ネットワークにより接続されている。
【００３７】
透かし情報取得部２０４は、配布するプログラムに対して電子透かしとして入力する情報（透かし情報）を取得し、透かし生成コード生成部２０６に通知する手段である。
【００３８】
透かし情報は、具体的には、プログラムの配布日やプログラム配布先（外部端末１０２）の端末ＩＤ、電子透かし挿入装置１０１自身のＩＤ、プログラムの利用有効期限などである。配布先の端末ＩＤなど、外部端末１０２の情報が必要な場合には、外部端末１０２がプログラム配布要求に外部端末１０２のＩＤを付与して送信し、プログラム配布要求受信部２０３が外部端末１０２の端末ＩＤを透かし情報取得部２０４に渡すものとする。
【００３９】
透かし生成コード生成部２０６は、透かし情報取得部２０４から受け取った透かし情報を表現するグラフ構造を生成するプログラムソースコード（透かし生成コード）を生成する。そして、透かし生成コード生成部２０６は、透かし生成コードの一部を透かし生成コード伝送部２０７に転送する。また、透かし生成コード生成部２０６は、透かし生成コード伝送部２０７に転送しなかった透かし生成コード残りをコンパイルしてバイトコードに変換した後、透かし挿入部２０８に転送する。透かし挿入部２０８の、詳細な動作に関しては、後述する。
【００４０】
透かし生成コード伝送部２０７は、透かし生成コード生成部２０６より受信した透かし生成コードを外部端末１０３へ転送する手段である。これに対し、外部端末１０３は、転送された透かし生成コードをコンパイルし、コンパイル結果を送信する。そして、透かし生成コード伝送部２０７は、外部端末１０３から送信されてきた、コンパイル済みの透かし生成コードを受信する。なお、図２では、透かし生成コードをコンパイルする外部端末１０３と、プログラムの配布要求をする外部端末１０２と別の端末として記載しているが、プログラムの配布要求する外部端末１０２と、透かし生成コードをコンパイルする外部端末１０３は同一の端末であってもよい。
【００４１】
プログラム読み出し部２０５は、プログラム蓄積部２０２に蓄積されたプログラムを読み出して、透かし挿入部２０８に渡す手段である。プログラム蓄積部２０２に複数のプログラムを蓄積している場合には、外部端末１０２は、プログラム配布要求にロードするプログラムの名前を記載してロードするプログラムを指定するものとする。
【００４２】
透かし挿入部２０８は、透かし生成コード伝送部２０７を介して取得した外部端末１０３がコンパイルした一部の透かし生成コードと、透かし生成コード生成部２０６がコンパイルした残りの生成コードとを、プログラムの適切な箇所に挿入し、プログラム送信部２０９に電子透かしの挿入されたプログラムを渡す手段である。
【００４３】
プログラム送信部２０９は、透かし挿入部２０８から渡されたプログラムを外部端末１０２に送信する手段である。
【００４４】
以上のように、透かし挿入装置１０１は構成されている。
【００４５】
次に、透かし生成コード生成部２０６の構成について、図３を用いて説明する。図３は、透かし生成コード生成部２０６の内部構成を示すブロック図である。
【００４６】
透かし生成コード生成部２０６には、透かし情報取得部２０４より透かし情報を取得し、Ｎ進数に変換する透かし情報分割部３０１が設けられている。透かし情報分割部３０１の透かし情報の変換方法は、透かし情報として渡された文字列のアスキーコード（１６進数）をＮ進数に変換するものとする。また、透かし情報分割部３０１は、Ｎ進数に変換された数値を、一定の桁数ごとに分割して部分透かし関数生成部３０２へ通知する手段である。
【００４７】
部分透かし関数生成部３０２は、透かし情報分割部３０１により分割された透かし情報を、プログラム実行時にメモリ上に生成する透かし生成関数を生成する手段である。また、部分透かし関数生成部３０２は、生成された透かし生成関数名を部分透かし呼出し関数生成部３０３へ通知する機能を有する。
【００４８】
また、部分透かし関数生成部３０２は、生成した透かし生成関数を透かし生成コード伝送部２０７に転送する。
【００４９】
部分透かし呼出し関数生成部３０３は、部分透かし関数生成部３０２により生成された透かし生成関数を呼び出して、透かし情報をメモリ上に生成する透かし呼出し関数を生成する。透かし呼出し関数は、部分透かし関数生成部３０２から通知された透かし生成関数を順番に呼出し、１つのリンクリストに接続する関数である。また、部分透かし呼出し関数生成部３０３は、透かし呼出し関数をコンパイルし、コンパイル結果を透かし挿入部２０８に送付する。
【００５０】
以上のように、透かし生成コード生成部２０６は、一部の透かし生成コードである透かし生成関数を透かし生成コード伝送部２０７に送り、透かし生成コード伝送部２０７に送らなかった残りの透かしコードである透かし呼出し関数をコンパイルし、透かし挿入部２０８に送る。このように透かし生成コードの一部のみを外部端末１０３に送ることができるので、秘密情報を守りながら透かし挿入処理を分散処理することが可能になる。
【００５１】
次に、透かし挿入装置１０１の透かし挿入処理について、図４を用いて説明する。図４は、透かし挿入装置１０１の透かし挿入処理のフローチャートである。
【００５２】
まず、プログラム配布要求受信部２０３が、外部端末１０２から送られてきた、プログラム配布要求を受信する（ステップ４０１）。続いて、透かし情報取得部２０４が、透かし情報を取得する（ステップ４０２）。続いて、透かし生成コード生成部２０６が、ステップ４０２において、取得した透かし情報に基づき、透かし生成コードを生成する（ステップ４０３）。
【００５３】
ステップ４０３の透かし生成コードの生成方法については、図５にて具体的に説明する。
【００５４】
続いて、透かし生成コード伝送部２０７が、ステップ４０３において生成された透かし生成コードの一部を外部端末１０３へ転送する（ステップ４０４）。続いて、透かし生成コード生成部２０６が、外部端末１０３に転送しなかった残りの透かし生成コードをコンパイルする（ステップ４０５）。続いて、透かし生成コード伝送部２０７が、外部端末１０３によってコンパイルされた透かし生成コードを受信する（ステップ４０６）。
【００５５】
続いて、プログラム読み出し部２０５が、プログラム蓄積部２０２からプログラムを読み出し（ステップ４０７）、透かし挿入部２０８が、読み出したプログラムがプログラムの実行時にコンパイルした透かし生成コードを呼び出すように透かし生成コードの呼出しコードをプログラムに追加する（ステップ４０８）。
【００５６】
続いて、プログラム送信部２０９が、透かしの挿入されたプログラムを、プログラム配布を要求した外部端末１０２に対して送付し、処理を終了する（ステップ４０９）。
【００５７】
このように、処理負荷の重い透かし生成コードの一部のコンパイルを外部端末１０３に行わせることにより、透かし挿入装置１０１の処理負荷を軽減できる。
【００５８】
次に、透かし生成コード生成部２０６の透かし生成コード生成処理（ステップ４０３）の処理について、図５を用いて説明する。図５は、透かし生成コード生成部２０６の透かし生成コードの生成ステップをより具体的に説明するフローチャートである。図５では、Ｊａｖａ（登録商標）の透かし生成コードを生成する例を示している。
【００５９】
まず、透かし情報分割部３０１が、透かし情報取得部２０４から受信した透かし情報を、Ｎ進数で表す（ステップ５０１）。続いて、透かし情報分割部３０１が、Ｎ進数で表された透かし情報を、一定の桁数ごとにｍ個に分割する（ステップ５０２）。ここで、ステップ５０２において、分割されたそれぞれの値をＩ（ｉ）（０＜＝ｉ＜＝ｍ−１）とする。
【００６０】
続いて、部分透かし関数生成部３０２が、分割した透かし情報を個別にメモリ上に生成する透かし関数群を示すクラスＣ１（ソースコード）を作成する（ステップ５０３）。次に、部分透かし関数生成部３０２は、変数ｉ＝０とし（ステップ５０４）、クラスＣ１に、Ｉ（０）を表現するグラフを作成するメソッドＭ０（）を作成し（ステップ５０５）、追加する（ステップ５０６）。
【００６１】
そして、部分透かし関数生成部３０２は、ｉを１インクリメントし（ステップ５０７）、ｉが透かし情報の分割数であるＭ以上になるまでステップ５０５〜ステップ５０７の処理を繰り返す（ステップ５０８）。
【００６２】
このようにして、部分透かし関数生成部３０２は、分割した透かし情報を個別にメモリ上に生成する透かし関数群を示すクラスＣ１を生成する。
【００６３】
次に、部分透かし呼出し関数生成部３０３が、透かし関数群を順番に呼び出す透かし呼出し生成関数であるクラスＣ２（ソースコード）を作成する（ステップ５０９）。次に、部分透かし呼出し関数生成部３０３は、Ｍ０（）からＭｍ（）を順番に呼び出すメソッドを作成し、クラスＣ２に追加する（ステップ５１０）。続いて、部分透かし呼出し関数生成部３０３は、Ｃ２をコンパイルする（ステップ５１１）。
【００６４】
そして、部分透かし関数生成部３０２は、Ｃ１を透かし生成コード伝送部２０７に転送し、外部端末１０３に送る（ステップ５１２）。
【００６５】
また、部分透かし呼出し関数生成部３０３は、Ｃ２を透かし挿入部２０８に転送し（ステップ５１３）、処理を終了する。
【００６６】
次に、図５で説明した透かし生成コード生成処理の具体例について、図６を用いて説明する。図６は、“ＷＡＴＥＲ  ＭＡＲＫ”７０１という文字列を透かしとして挿入する場合の処理の例を示す図である。
【００６７】
まず、透かし情報分割部３０１が、”ＷＡＴＥＲ  ＭＡＲＫ”７０１という文字列をＮ進数（ここでは２進数）７０２で表現する（ステップ５０１）。次に、透かし情報分割部３０１が、２進数で表現された文字列を３桁ごとに分割して、ｍ個の値７０３〜７０５に分割する（ステップ５０２）。
【００６８】
次に、部分透かし関数生成部３０２が、分割されたそれぞれの値７０３〜７０５を表すグラフ構造７０６〜７０８を作成し、これを生成するコードをクラスＣ１  ７０９に追加する（ステップ５０３〜ステップ５０８）。
【００６９】
図６の例では、図８で説明したルールによりＮ進数をグラフ構造に変換している。
【００７０】
このように、透かし生成コードを、透かし情報を表現するグラフ構造とすることにより、透かし情報を分割してその一部を外部端末１０３に送信することができる。
【００７１】
次に、部分透かし呼出し関数生成部３０３は、クラスＣ２  ７１０に、クラスＣ１  ７０９に生成されたメソッドＭ０，Ｍ１，Ｍ２…を順に呼び出す関数を作成して追加する（ステップ５０９、ステップ５１０）。
【００７２】
以上のように透かし生成コードを構成することで、Ｃ１、Ｃ２を組み合わせて実行すると、透かし情報が生成されるが、Ｃ１、Ｃ２のみでは透かし情報を知ることはできない。したがって、外部端末１０３にＣ１を転送しても、透かし情報自身を知られることはない。
【００７３】
以上説明したように、本実施の形態によれば、クラスＣ１のみを外部端末１０３に転送し、コンパイルさせるので、透かし情報の全てを直接外部に流出させずに、かつ、処理負荷の大きい透かし挿入処理のコンパイルの一部を外部端末１０３で行うことにより、秘密情報を保護しつつ、高速にプログラムに透かしを挿入することが可能となる。例えば、外部端末１０３を処理能力の高い端末にすることにより、処理効率を高めることができる。
【００７４】
なお、本実施の形態では、外部端末１０３にクラスＣ１のコンパイルを行わせる形態で説明したが、外部端末１０３に行わせる処理は、透かし情報の分割後の透かし挿入処理であればいかなる処理でも良い。例えば、外部端末１０３にクラスＣ２のコンパイルを行わせても良いし、プログラム実行時にメモリ上に分割後の透かし情報のひとつを示すグラフを作成する透かし生成関数を生成させる処理を行わせても良い。外部端末１０３に、プログラムの行数が多いなど、負荷の重い処理を分担させることが好ましい。
【００７５】
また、本実施の形態では、ひとつの外部端末１０３にクラスＣ１のコンパイル処理を行わせる形態で説明したが、外部端末１０３の数は多くても良い。外部端末１０３を多くすることにより、ひとつの外部端末１０３に送る透かし情報の量が少なくなり、透かし情報の解析が難しなるので、透かし情報のセキュリティ効率を上げることができる。また、多くの外部端末１０３を用いることにより、外部端末１０３のひとつあたりの処理が軽減され、システム全体としての処理が早くなる。
【００７６】
なお、本実施の形態では、宅内において透かし挿入処理の一部を外部端末に行わせる形態で説明したが、透かし挿入処理の一部を他の装置に分散処理する形態であればいかなる形態であっても良い。
【００７７】
例えば、図７に示すように、ＩＣカード９０２を挿入可能な端末９０１に本発明を適用しても良い。
【００７８】
この例では、ＩＣカード９０２に透かし挿入装置としての機能を持たしている。また、ＩＣカード９０２には、配布用プログラムが蓄積されている。
【００７９】
端末９０１にＩＣカード９０２に蓄積されたプログラムをロードする際に、ＩＣカード９０２がプログラムに端末ＩＤを挿入することで、プログラムの２次配布を抑止することが可能である。
【００８０】
しかし、ＩＣカード９０２は一般に、計算能力が低く、透かしを高速に挿入することができない。そこで、本発明を適用し、透かし生成コードの一部を端末９０１から他の端末に転送して、他端末に透かし生成コードの一部のコンパイルを行わせることにより、高速に電子透かしの挿入を行うことができる。
【産業上の利用可能性】
【００８１】
本発明によれば、透かし情報の全てを直接外部に流出させずに、かつ、処理負荷の大きい透かし挿入処理のコンパイルの一部を外部端末で行うことにより、秘密情報を保護しつつ、高速にプログラムに透かしを挿入することが可能となる。なお、本発明は、配布されたプログラムの不正な２次使用を防止するための透かし挿入装置へ適用可能である。また、ＩＣカードから配布されたプログラムの不正な２次配布を防止する装置に適用可能である。
【図面の簡単な説明】
【００８２】
【図１】本発明の一実施の形態にかかるプログラム配信システムの構成図
【図２】本実施の形態の透かし挿入装置のブロック図
【図３】本実施の形態の透かし生成コード生成部の内部構成を示すブロック図
【図４】本実施の形態の透かし挿入装置の透かし挿入処理のフローチャート
【図５】本実施の形態にかかる透かし生成コード生成部の透かし生成コードの生成ステップをより具体的に説明するフローチャート
【図６】“ＷＡＴＥＲ  ＭＡＲＫ”という文字列を透かしとして挿入する場合の処理の例を示す図
【図７】本発明のその他の実施の形態にかかる端末の構成図
【図８】透かし情報として値「１０」を表現するリンクリストを示す図
【符号の説明】
【００８３】
１００  プログラム配信システム
１０１  透かし挿入装置
１０２、１０３  外部端末
２０３  プログラム配布要求受信部
２０４  透かし情報取得部
２０６  透かし生成コード生成部
２０７  透かし生成コード伝送部
２０８  透かし挿入部
３０１  透かし情報分割部
３０２  部分透かし関数生成部
３０３  部分透かし呼出し関数生成部
９０１  端末
【図１】
2006024027.tif 000003
【図２】
2006024027.tif 000004
【図３】
2006024027.tif 000005
【図４】
2006024027.tif 000006
【図５】
2006024027.tif 000007
【図６】
2006024027.tif 000008
【図７】
2006024027.tif 000009
【図８】
2006024027.tif 000010