(57)【要約】    【課題】      販売者が利用者を特定する情報をプログラムに挿入できるようにすると共に、販売者によるプログラムの不正流出や、改竄を防止する仕組みを提供すること。    【解決手段】  本発明は、製作者から販売者に対して、プログラムの特徴的な箇所である指紋情報および特徴的な箇所を示す情報を記憶した販売者用プログラムを販売者に配布し、販売者が特徴的な部分以外の部分に利用者を特定する透かしを挿入し、利用者に送信するようにした。これにより、販売者が指紋情報を変化させないように利用者を特定する透かしをプログラムに挿入できるようにすると共に、販売者がプログラムの改竄を行った場合には指紋情報の変化により不正を発見できる。  【選択図】      図１
2005165742.tif 000002
【特許請求の範囲】
【請求項１】
販売者を介して利用者に製作したプログラムを配布するプログラム製作装置であって、
前記プログラムの特徴的な箇所である指紋情報を記憶する指紋情報記憶手段と、前記特徴的な箇所を示す情報を記憶する特徴箇所記憶手段と、前記指紋情報および前記特徴的な箇所を示す情報を記憶した販売者用プログラムを前記販売者に配布する配布手段と、を具備したことを特徴とするプログラム製作装置。
【請求項２】
前記プログラムに前記販売者を特定できる販売者用透かしを挿入する透かし挿入手段を具備したことを特徴とする請求項１記載のプログラム製作装置。
【請求項３】
前記販売者が挿入した前記利用者用透かしを検査するための透かし検査プログラムを、前記プログラムに付加して送信することを特徴とする請求項１または請求項２に記載のプログラム製作装置。
【請求項４】
前記販売者用プログラムを複数に分割し、複数の前記販売者を介して前記利用者に配布することを特徴とする請求項１から請求項３のいずれかに記載のプログラム製作装置。
【請求項５】
請求項１記載のプログラム製作装置から配布されてきた前記販売者用プログラムを利用者に配布するプログラム配信装置であって、
前記プログラム製作装置から配布されてきた前記販売者用プログラムの前記特徴的な箇所を示す情報を用いて前記特徴的な箇所以外に前記利用者を特定する利用者用透かしを挿入する透かし挿入手段と、前記販売者プログラムに前記利用者透かしを挿入した利用者用プログラムを前記利用者に配布する配布手段と、を具備したことを特徴とするプログラム配信装置。
【請求項６】
前記販売者用プログラムには前記販売者を特定できる販売者用透かしが挿入されていることを特徴とする請求項５記載のプログラム配信装置。
【請求項７】
請求項５記載のプログラム配信装置から配布されてきた利用者用プログラムを受信する受信手段と、前記指紋情報を検査する指紋情報検査手段と、前記利用者用プログラムから前記販売者用透かしを検査する透かし検査手段と、を具備したことを特徴とするプログラム利用装置。
【請求項８】
複数に分割された前記利用者用プログラムを結合する結合手段と、結合した前記利用者用プログラムを実行する実行手段と、を具備したことを特徴とする請求項７記載のプログラム利用装置。
【請求項９】
前記透かし検査手段は、前記利用者用透かしを検査する透かし検査プログラムを伝送路上の端末より取得することを特徴とする請求項７または請求項８記載のプログラム利用装置。
【請求項１０】
前記指紋情報検査手段は、前記指紋情報を検査する指紋情報検査プログラムを伝送路上の端末より取得することを特徴とする請求項７から請求項９のいずれかに記載のプログラム利用装置。
【請求項１１】
前記透かし検査プログラムは、前記利用者用プログラムに実装されていることを特徴とする請求項９記載のプログラム利用装置。
【請求項１２】
請求項１記載のプログラム製作装置と、請求項５記載のプログラム配信装置と、請求項７記載のプログラム利用装置と、を具備したことを特徴とするプログラム流通システム。
【請求項１３】
販売者を介して利用者に製作したプログラムを配信するプログラム配信方法であって、
前記プログラムの特徴的な箇所である指紋情報を記憶するステップと、前記指紋情報および前記特徴的な箇所を示す情報を記憶した販売者用プログラムを前記販売者に配布するステップと、を具備したことを特徴とするプログラム配信方法。
【請求項１４】
請求項１３記載のプログラム配信方法により送られてきた前記販売者用プログラムを利用者に配信するプログラム配信方法であって、
送られてきた前記販売者用プログラムの前記特徴的な箇所を示す情報を用いて前記特徴的箇所以外に前記利用者を特定する利用者用透かしを挿入するステップと、前記販売者プログラムに前記利用者透かしを挿入した利用者用プログラムを前記利用者に送信するステップと、を具備したことを特徴とするプログラム配信方法。
【請求項１５】
請求項１４記載のプログラム配信方法により送られてきた利用者プログラムを受信するステップと、前記利用者用プログラムから前記指紋情報を検査するステップと、前記利用者用プログラムから前記販売者用透かしを検査するステップと、を具備したことを特徴とするプログラム利用方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム電子透かしを応用した安全なプログラム流通を可能にするプログラム製作装置に関するものである。
【背景技術】
【０００２】
コンピュータ技術の進展に伴い、ネットワークを介したプログラムコード（以下プログラム）の流通が一般的になっている。それに伴い、ダウンロードしたプログラムが解析されプログラム内で使用されている方式やアイデアが漏洩する、プログラム自体が改竄されそのプログラムを利用して不正行為が行われる、といったことが問題となっている。
【０００３】
また、他人の開発したプログラムの全体もしくは一部を無断で使用する、プログラムの開発者に許可なく再配布する、などのプログラムの盗用も大きな問題となってきている。
【０００４】
今後、ネットワークを介したプログラムの流通が拡大していくことを考えると、これらの不正利用からプログラムを保護する仕組みが必要である。
【０００５】
例えば、利用者が端末を操作して、販売者からプログラムをダウンロードする場合を考える。この場合、まず、製作者がプログラムを作成する。次に、販売者の端末がこのプログラムを登録する。そして、利用者の端末が、販売者の端末にプログラム配信の要求をすると、販売者の端末が利用者の端末に対しプログラムを送信し、利用者の端末が配信されてきたプログラムをダウンロードし、格納する。
【０００６】
このような状況では、次のような脅威が想定される。
１．利用者がプログラムの流出や改竄を行う。
２．販売者がプログラムの流出や改竄を行う。
３．他製作者がプログラムの盗用を行う。
【０００７】
これらの脅威に対抗する流通システムとしては、暗号化やハードウェア耐タンパ、電子透かしを用いたシステムがある。
【０００８】
ここで、ハードウェア耐タンパとは、不正な内部解析を防止する機構を備えたハードウェアのことで、ＬＳＩ内部のプログラムを解析しようとするとＬＳＩがこれを自動検知しプログラムを消去するといったものを指す。
【０００９】
また、暗号化を用いたシステムでは、例えば特許文献１に開示されたものがある。
【００１０】
この方法では、まず利用者の端末で、端末に固有のＩＤ（端末ＩＤ）を用いて公開鍵暗号方式の秘密鍵を生成する。次に、利用者の端末は、コンテンツをダウンロードする際に、端末ＩＤを販売者に送信し、販売者がこのＩＤを用いて公開鍵を作成し、コンテンツを暗号化する。そして、販売者が暗号化したコンテンツを利用者に送信し、利用者側で予め作成しておいた秘密鍵により復号化してコンテンツを利用する。
【００１１】
また、暗号化したコンテンツの復号化やコンテンツの利用は利用者の端末内のハードウェア耐タンパ領域で行われる。
【００１２】
このようにすることで、ダウンロードしたコンテンツの不正流出や改竄を防止している。
【００１３】
また、上述した脅威に対抗する別のシステムとして、特許文献２に開示されたものがある。
【００１４】
この方法では、製作者が、作成したコンテンツに、コンテンツの利用者を特定するユニークなＩＤを電子透かしとして挿入する。さらに、製作者は、コンテンツを利用者に配布する際に、暗号化を行う。
【００１５】
そして、コンテンツが不正に利用された場合には、コンテンツの利用を監視する不正利用監視センタが、ネットワークを探索し、不正に利用されたコンテンツから抽出したＩＤとセンタで保存している利用条件（ＩＤ）を照合することにより、コンテンツを不正利用した利用者を特定する。
【００１６】
このように、コンテンツの不正流出と改竄を防止している。
【特許文献１】特開２０００−３２４０９６号公報
【特許文献２】特開２０００−３３０８７３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかし、従来のコンテンツ流通システムでプログラムを流通させた場合、販売者によるプログラムの不正流出や改竄を防止できないという問題がある。
【００１８】
製作者が作成したプログラムを販売者の端末に登録し、利用者が端末を操作して販売者の端末に登録されたプログラムをダウンロードする場合、利用者での不正流出を防ぐために、利用者を特定するためのユニークなＩＤを電子透かしとしてプログラムに挿入することは非常に有用である。また、利用者での改竄を防止するためにハードウェア耐タンパを用いることも有用である。
【００１９】
しかしながら、従来の方法では、プログラムには販売者を特定する情報が含まれていない。このため、仮に販売者での不正流出が行われた場合に、流出元となった販売者を特定することができない。よって、販売者に対して不正流出を抑止する効果がない。
【００２０】
さらに、利用者を特定するためのＩＤをプログラムに挿入する際には、販売者がプログラムに利用者のＩＤを挿入することになる。この場合、販売者はプログラムを平文として扱いう必要がある。
【００２１】
このため、販売者は、利用者のＩＤを挿入する操作だけでなく、異なる動作をするようにプログラムを改竄することができる。つまり、販売者においてプログラムを改竄されてしまうという危険性がある。
【００２２】
そこで、販売者を利用することなく、製作者でプログラムに利用者のＩＤを挿入することも考えられるが、製作者が販売者を兼ねることができないケースも多い。
【００２３】
本発明は、かかる点に鑑みてなされたものであり、販売者が利用者を特定する情報をプログラムに挿入できるようにすると共に、販売者によるプログラムの不正流出や、改竄を防止する仕組みを提供することを目的とする。
【課題を解決するための手段】
【００２４】
本発明は、製作者から販売者に対して、プログラムの特徴的な箇所である指紋情報および特徴的な箇所を示す情報を記憶した販売者用プログラムを販売者に配布し、販売者が特徴的な部分以外の部分に利用者を特定する透かしを挿入し、利用者に配布するようにした。
【発明の効果】
【００２５】
本発明により、販売者が指紋情報を変化させないように利用者を特定する透かしをプログラムに挿入できるので、利用者がプログラムを不正に使用することを防止できる。また、販売者がプログラムの改竄を行った場合には指紋情報の変化により不正を発見できるので、販売者によるプログラムの不正流出や改竄を防止できる。
【発明を実施するための最良の形態】
【００２６】
本発明の第１の態様にかかるプログラム製作装置は、販売者を介して利用者に製作したプログラムを配布するプログラム製作装置であって、前記プログラムの特徴的な箇所である指紋情報を記憶する指紋情報記憶手段と、前記特徴的な箇所を示す情報を記憶する特徴箇所記憶手段と、前記指紋情報および前記特徴的な箇所を示す情報を記憶した販売者用プログラムを前記販売者に配布する配布手段とを具備した構成を採る。
【００２７】
これにより、販売者が指紋情報を変化させないように利用者を特定する透かしをプログラムに挿入できるので、利用者がプログラムを不正に使用することを防止できる。また、販売者がプログラムの改竄を行った場合には指紋情報の変化により不正を発見できるので、販売者によるプログラムの不正流出や改竄を防止できる。
【００２８】
本発明の第２の態様は、第１の態様にかかるプログラム製作装置において、前記プログラムに前記販売者を特定できる販売者用透かしを挿入する透かし挿入手段を具備した。
【００２９】
これにより、仮にプログラムの不正流出があった場合でも、プログラムに販売者を特定する販売者用透かしが挿入されているため、流出元となった販売者を特定することができる。これにより、販売者によるプログラムの改竄を防止できる。
【００３０】
本発明の第３の態様は、第１の態様または第２の態様にかかるプログラム製作装置において、前記販売者が挿入した前記利用者用透かしを検査するための透かし検査プログラムを、前記プログラムに付加して送信する。
【００３１】
これにより、プログラム製作装置が付与した透かしを他の端末において検査できる。
【００３２】
本発明の第４の態様は、第１の態様から第３の態様のいずれかにかかるプログラム製作装置において、前記販売者用プログラムを複数に分割し、複数の前記販売者を介して前記利用者に配布する。
【００３３】
これにより、販売者が完全なプログラムを持つことができなくなり、販売者が利用者を偽ったプログラムの不正流出を防止することができる。
【００３４】
本発明の第５の態様は、第１の態様のプログラム製作装置から配布されてきた前記販売者用プログラムを利用者に配布するプログラム配信装置であって、前記プログラム製作装置から配布されてきた前記販売者用プログラムの前記特徴的な箇所を示す情報を用いて前記特徴的な箇所以外に前記利用者を特定する利用者用透かしを挿入する透かし挿入手段と、前記販売者プログラムに前記利用者透かしを挿入した利用者用プログラムを前記利用者に配布する配布手段と、を具備した構成を採る。
【００３５】
これにより、特徴的な箇所以外に前記利用者を特定する利用者用透かしを挿入できる。この結果、利用者が、プログラムを不正に利用することを防止できる。
【００３６】
本発明の第６の態様は、第５の態様にかかるプログラム配信装置において、前記販売者用プログラムには前記販売者を特定できる販売者用透かしが挿入されている。
【００３７】
これにより、仮にプログラムの不正流出があった場合でも、プログラムに販売者を特定する販売者用透かしが挿入されているため、流出元となった販売者を特定することができる。これにより、販売者によるプログラムの改竄を防止できる。
【００３８】
本発明の第７の態様にかかるプログラム利用装置は、第５の態様のプログラム配信装置から配布されてきた利用者用プログラムを受信する受信手段と、前記指紋情報を検査する指紋情報検査手段と、前記利用者用プログラムから前記販売者用透かしを検査する透かし検査手段と、を具備した構成を採る。
【００３９】
これにより、送られてきた指紋情報と検査した指紋情報とを比較することにより、受信したプログラムの正当性を判断できる。また、利用者用透かしと自身のＩＤ情報を比較することにより、受信したプログラムの正当性を判断できる。
【００４０】
本発明の第８の態様は、第７の態様にかかるプログラム利用装置において、複数に分割された前記利用者用プログラムを結合する結合手段と、結合した前記利用者用プログラムを実行する実行手段と、を具備した構成を採る。
【００４１】
これにより、複数に分割されているプログラムを実行できる。
【００４２】
本発明の第９の態様は、第７の態様または第８の態様にかかるプログラム利用装置において、前記透かし検査手段は、前記利用者用透かしを検査する透かし検査プログラムを伝送路上の端末より取得する。
【００４３】
このようにして、検査プログラムを取得することができる。
【００４４】
本発明の第１０の態様は、第７の態様から第９の態様のいずれかにかかるプログラム利用装置において、前記指紋情報検査手段は、前記指紋情報を検査する指紋情報検査プログラムを伝送路上の端末より取得する。
【００４５】
これにより、製作者端末で抽出された指紋情報を検査して、プログラムの正当性を証明することが可能となる。
【００４６】
本発明の第１１の態様は、第９の態様にかかるプログラム利用装置において、前記透かし検査プログラムは、前記利用者用プログラムに実装されている。
【００４７】
これにより、透かし検査プログラムを利用者用プログラムと同時に取得できる。
【００４８】
本発明の第１２の態様は、第１の態様のプログラム製作装置と、第５の態様のプログラム配信装置と、第７の態様のプログラム利用装置と、を具備したことを特徴とするプログラム流通システムである。
【００４９】
本発明の第１３の態様は、販売者を介して利用者に製作したプログラムを配信するプログラム配信方法であって、前記プログラムの特徴的な箇所である指紋情報を記憶するステップと、前記指紋情報および前記特徴的な箇所を示す情報を記憶した販売者用プログラムを前記販売者に配布するステップと、を具備したことを特徴とするプログラム配信方法である。
【００５０】
本発明の第１４の態様は、第１３の態様のプログラム配信方法により送られてきた前記販売者用プログラムを利用者に配信するプログラム配信方法であって、送られてきた前記販売者用プログラムの前記特徴的な箇所を示す情報を用いて前記特徴的箇所以外に前記利用者を特定する利用者用透かしを挿入するステップと、前記販売者プログラムに前記利用者透かしを挿入した利用者用プログラムを前記利用者に送信するステップと、を具備したことを特徴とするプログラム配信方法である。
【００５１】
本発明の第１５の態様は、第１４の態様のプログラム配信方法により送られてきた利用者プログラムを受信するステップと、前記利用者用プログラムから前記指紋情報を検査するステップと、前記利用者用プログラムから前記販売者用透かしを検査するステップと、を具備したことを特徴とするプログラム利用方法である。
【００５２】
以下、本発明について詳細に説明する。
【００５３】
本発明は、プログラムの特徴的な箇所であるプログラム指紋（指紋情報）が、プログラム全体を用いるものでなく、特定の箇所のみを用いればよいということに着目したものである。そして、製作者がプログラムの指紋情報を記憶し、販売者がプログラムの指紋情報に使用する以外の部分にプログラムの利用者を特定する透かしを挿入するようにした。
【００５４】
これにより、販売者が指紋情報を変化させないように利用者を特定する透かしをプログラムに挿入できるので、販売者がプログラムを不正に改竄したと誤って検出されることなく、かつ利用者がプログラムを不正に使用することを防止できる。また、販売者がプログラムの改竄を行った場合には指紋情報の変化により不正を発見できるので、販売者によるプログラムの不正流出や改竄を防止できる。
【００５５】
以下、本実施の形態にかかるプログラム流通システムについて添付図面を用いて説明する。図１は、本実施の形態にかかるプログラム流通システムの構成図である。
【００５６】
本実施の形態にかかるプログラム流通システムには、プログラム製作装置１０が設けられている。
【００５７】
プログラム製作装置１０は、プログラムを製作するメーカや個人等の製作者の端末を表す。
【００５８】
プログラム製作装置１０には、蓄積部２０が設けられている。蓄積部２０は、製作者が製作したプログラムを保存するための手段で、ＦＤやＨＤ、内部メモリなどの物理デバイスを示している。
【００５９】
また、プログラム製作装置１０には、プログラム構造変換部３０が設けられている。プログラム構造変換部３０は、蓄積部２０に蓄積されているプログラムを複数のモジュールに分割する。そして、プログラム構造変換部３０は、上述したように変換したプログラムを透かし挿入部４０に出力する。なお、プログラム構造変換部３０の詳細は後で詳述する。
【００６０】
透かし挿入部４０は、プログラム構造変換部３０が変換したプログラムのモジュールに電子透かしを挿入する。具体的には、透かし挿入部４０は、販売者を特定するＩＤ情報から生成される電子透かしをプログラムに挿入する。そして、透かし挿入部４０は、電子透かしを挿入したプログラムを指紋情報記憶部５０に出力する。なお、透かし挿入部４０については、後で詳述する。
【００６１】
指紋情報記憶部５０は、透かし挿入部４０が出力したプログラムの透かしが挿入されたモジュールのプログラム指紋を記憶する。指紋情報記憶部５０が用いるプログラム指紋とは、プログラムに含まれるそのプログラムに固有の特徴を指し、例えば、初期値代入部分や、クラスの継承関係などである。以下では、これらの固有情報を指紋情報と呼ぶこととする。なお、プログラム指紋の詳細については、Ｊａｖａ（Ｒ）クラスファイルからプログラム指紋を抽出する方法の提案（玉田ら、電子情報通信学会技術研究報告  ＩＳＥＣ  ２００３−２９，ｐｐ．１２７−１３３，Ｊｕｌ，２００３．）に記載されている。
【００６２】
送信部６０は、指紋情報記憶部５０から送られてきたプログラムのモジュールのパッケージ化とパッケージの送信、プログラムの利用者の端末であるプログラム利用装置１５０ａ、１５０ｂが透かし挿入部４０の挿入した電子透かしを検査する際に使用する検査プログラムと、プログラムの指紋情報を検査する指紋情報検査プログラムをプログラムの販売者の端末であるプログラム配信装置７０に送信する。なお、送信部６０については、後で詳述する。
【００６３】
なお、本実施の形態では、送信部６０が、パッケージ、検査プログラム、指紋情報検査プログラムを、販売者に送信する形態で説明するが、これらのデータを記憶媒体に記憶し販売者に配布する形態であっても良い。つまり、販売者が製作者からパッケージ、検査プログラム、指紋情報検査プログラムの配布を受けられる形態であれば良い。
【００６４】
なお、本実施の形態では、検査プログラムをプログラムの販売者の端末であるプログラム配信装置７０に送信しているが、必ずしもプログラム配信装置７０に送信する必要はなく、独立した検査プログラム配布者に送信してもよい。
【００６５】
プログラム配信装置７０は、通信キャリアやプログラム配信のポータルサイトなどであるプログラムの販売者の端末を表す。
【００６６】
プログラム配信装置７０は、受信したプログラムにプログラムの利用者ＩＤを挿入し、利用者にプログラムを配布する役割を持っている。
【００６７】
プログラム配信装置７０には、受信部９０が設けられている。受信部９０は、プログラム製作装置１０の送信部６０から送られてきたパッケージを復号しプログラムにする。また、受信部９０は、送信部６０から送られてきた検査プログラムおよび指紋情報検査プログラムを受信する。
【００６８】
また、プログラム配信装置７０には、要求受信部１００が設けられている。要求受信部１００は、利用者からのダウンロードの要求メッセージを受けるための手段である。
【００６９】
また、プログラム配信装置７０には、蓄積部１１０が設けられている。蓄積部１１０は、受信部９０から送られてきたプログラムと検査プログラムと指紋情報検査プログラム、および要求受信部１１０から送られてきた要求メッセージを蓄積する。
【００７０】
また、プログラム配信装置７０には、透かし挿入部１２０が設けられている。透かし挿入部１２０は、蓄積部１１０に蓄積されたプログラムからモジュールを抽出し、抽出したモジュールに電子透かしを挿入する。また、透かし挿入部１２０は、挿入する電子透かしを、利用者を特定するＩＤから生成する。そして、透かし挿入部１２０は、利用者を特定する電子透かしを挿入したプログラムを送信部１４０に送る。
【００７１】
送信部１４０は、透かし挿入部１２０から送られてきたプログラムのモジュールのパッケージ化とこのパッケージの送信、および検査プログラムと指紋情報検査プログラムをプログラムの利用者の端末であるプログラム利用装置１５０ａ、１５０ｂに送信する。
【００７２】
なお、本実施の形態では、送信部１４０が、パッケージ、検査プログラム、指紋情報検査プログラムを、利用者に送信する形態で説明するが、これらのデータを記憶媒体に記憶し利用者に配布する形態であっても良い。つまり、利用者が販売者からパッケージ、検査プログラム、指紋情報検査プログラムの配布を受けられる形態であれば良い。
【００７３】
プログラム利用装置１５０ａ、１５０ｂは、プログラムを利用する側のユーザの端末を表す。以下では、プログラム利用装置１５０ａを用いて説明を行い、プログラム利用装置１５０ａ、１５０ｂを単にプログラム利用装置１５０と表記する。
【００７４】
プログラム利用装置１５０には、要求送信部１６０が設けられている。要求送信部１６０は、販売者の端末であるプログラム配信装置７０にプログラムの配信を要求するメッセージを送信するための手段を表す。
【００７５】
また、プログラム利用装置１５０には、受信部１７０が設けられている。受信部１７０は、プログラム配信装置７０の送信部１４０から送られてきたパッケージを受信し、復号してプログラムにする手段である。また、受信部１７０は、送信部１４０から送られてきた検査プログラムおよび指紋情報検査プログラムも受信する。そして、受信部１７０は、復号化したプログラム、検査プログラム、および指紋情報検査プログラムを蓄積部１８０に送る。
【００７６】
蓄積部１８０は、受信部１７０から送られてきたプログラムを蓄積する。
【００７７】
また、プログラム利用装置１５０には、受信モジュール検査部１９０が設けられている。受信モジュール検査部１９０は、受信部１７０がダウンロード（受信した）したプログラムの電子透かしや指紋情報を検査するための手段を表す。そして、受信モジュール検査部１９０は、検査したプログラムを蓄積部２００に送る。なお、受信モジュール検査部１９０については、後で詳述する。
【００７８】
蓄積部２００は、受信モジュール検査部１９０から送られてきた検査後のプログラムを蓄積する。
【００７９】
また、プログラム利用装置１５０には、実行部２１０が設けられている。実行部２１０は、ダウンロードしたプログラムを実行するための手段を表す。
【００８０】
以上のように、プログラム流通システムは構成されている。
【００８１】
次に、プログラム制作装置１０、プログラム配信装置７０及びプログラム利用装置１５０の主要部について詳細に説明する。
【００８２】
まず、本実施の形態におけるプログラム製作装置１０のプログラム構造変換部３０について、図２を用いて説明する。図２は、本実施の形態にかかるプログラム構造変換部３０の構成図である。
【００８３】
プログラム構造変換部３０には、プログラム入力部３０１が設けられている。プログラム入力部３０１は、複数のモジュールに分割するプログラムを入力する手段である。プログラム入力部３０１は、入力したプログラムをプログラム分割部３０２に出力する。
【００８４】
プログラム分割部３０２は、プログラムを複数のモジュールに分割する手段である。例えば、プログラム分割部３０２は、プログラムがＪａｖａ（Ｒ）言語で書かれていた場合には、コンパイルした後のｃｌａｓｓファイルをモジュールとし、またプログラムがＣ言語の場合には、コンパイル後のオブジェクトファイルをモジュールとすることが考えられる。また、プログラム分割部３０２は、モジュールの分割数を分割情報記憶部３０６に出力する。
【００８５】
プログラム出力部３０７は、プログラム分割部３０２により複数のモジュールに分割されたプログラムを出力する手段である。
【００８６】
この構成により、プログラム構造変換部３０は、プログラムを複数のモジュールに分割する。
【００８７】
次に、本実施の形態におけるプログラム製作装置１０の透かし挿入部４０について図３を用いて説明する。図３は、本実施の形態の透かし挿入部４０の構成図である。
【００８８】
透かし挿入部４０には、プログラム入力部４０１が設けられている。プログラム入力部４０１は、透かしを入力するプログラム、つまりプログラム構造変換部３０において変換されたプログラムを入力する手段である。プログラム入力部４０１は、入力したプログラムを挿入部４０２に出力する。
【００８９】
透かし用データ入力部４０３は、透かしとして挿入するデータ（透かし用データ）を入力する手段である。入力する透かし用データは、プログラム配信装置７０、つまり販売者を特定するための情報であり、販売者の住所、電話番号、会社名、氏名、電子メールアドレスなどである。また、透かし用データにプログラムの製作者（プログラム製作装置１０）の情報を入力してもよい。
【００９０】
ＩＤ情報生成部４０４は、透かし用データ入力部４０３により入力された透かし用データから販売者（プログラム配信装置７０）を一意に特定できるＩＤ情報を生成する手段である。ＩＤ情報は、入力したデータそのものであってもよいし、それを暗号化したデータであってもよい。また、ＩＤ情報は、透かし用データを保存するデータベースにおいて透かし用データを一意に特定するためのＩＤであってもよい。
【００９１】
なお、本実施の形態においては、ＩＤ情報に基づいて透かし情報を生成する形態となっているが、必ずしもＩＤ情報に基づいて透かし情報を生成する必要はなく、透かし情報から一意に配布先を特定可能となっていれば良い。例えば、送信するモジュールに１〜Ｎシーケンス番号を透かし情報として挿入し、販売者（プログラム配信装置７０）にシーケンス番号ｉのモジュールを配布といったように透かし情報と配布先を一意に特定可能としてもよい。
【００９２】
挿入部４０２は、ＩＤ情報生成部４０４により生成されるＩＤ情報からプログラムに実際に挿入する透かしを生成し、モジュールに透かしを挿入する手段である。また、挿入部４０２は、透かしを挿入したモジュール名を透かし情報記憶部４０５に出力する。
【００９３】
なお、挿入部４０２が挿入する透かし情報は、販売者ＩＤだけでなく、プログラムの権利情報や利用者端末のアクセスコントロール情報、セキュリティポリシーなどを挿入してもよい。
【００９４】
例えば、プログラムの権利情報は、プログラムの実行期限や実行回数、プログラムの他の端末への転送の可否などの情報であり、アクセスコントロール情報やセキュリティポリシー情報は、メモリやＨＤを読み書き可能、ソケットを利用可能、など端末リソースへのアクセス権に関する情報である。
【００９５】
透かし情報記憶部４０５は、透かしを挿入したモジュール名を記憶しておく手段である。
【００９６】
プログラム出力部４０６は、挿入部４０２が透かしを挿入したプログラムを出力する手段である。
【００９７】
この構成により、透かし挿入部４０は、モジュールに販売者を特定する透かしを挿入する。
【００９８】
次に、プログラム製作装置１０の指紋情報記憶部５０について図４を用いて説明する。図４は、本実施の形態にかかる指紋情報記憶部５０の構成図である。
【００９９】
指紋情報記憶部５０には、プログラム入力部５０１が設けられている。プログラム入力部５０１は、指紋情報を記憶するプログラムを入力する手段である。プログラム入力部５０１は、プログラムを記憶部５０２に出力する。
【０１００】
記憶部５０２は、特徴箇所入力部５０３で指定されたモジュール中の特徴部分を、モジュールの指紋情報として記憶する。次に、記憶部５０２は、鍵入力部５０６より入力される秘密鍵（製作者秘密鍵）を用いて、記憶した指紋情報を暗号化する。
【０１０１】
また、記憶部５０２は、署名フォーマットを用いて、モジュールと暗号化された指紋情報、指紋情報検証用の公開鍵（製作者公開鍵）を含む証明書を一つのファイルにまとめる。
【０１０２】
さらに、記憶部５０２は、プログラムの指紋情報として記憶したプログラムの特徴箇所の名称を特徴箇所記憶部５０７に出力する。
【０１０３】
特徴箇所入力部５０３は、指紋情報として記憶するプログラム中の特徴箇所を指定する手段である。
【０１０４】
例えば、プログラム中の特徴箇所は、プログラム中の初期値代入部分やクラスの継承構造、メソッドの呼び出し順序などである。
【０１０５】
また、プログラム中の特徴箇所は複数指定してもよい。
【０１０６】
特徴箇所記憶部５０７は、記憶部５０２より出力された特徴箇所の名称を記憶する手段である。
【０１０７】
プログラム出力部５０４は、記憶部５０２によりプログラムの指紋情報と対応付けられたプログラムを出力する手段である。
【０１０８】
この構成により、指紋情報記憶部５０は、プログラムに固有の情報である指紋情報を記憶し、さらにプログラムの指紋情報を秘密鍵で暗号化する。
【０１０９】
次に、本実施の形態にかかるプログラム製作装置１０の送信部６０について図５を用いて説明する。図５は、本実施の形態における送信部６０の構成図である。
【０１１０】
送信部６０には、指紋情報記憶部５０から出力されたプログラムを入力するプログラム入力部６０１が設けられている。プログラム入力部６０１は、販売者つまりプログラム配信装置７０に送信するプログラムを入力する手段である。プログラム入力部６０１は、入力したプログラムを送信データパッケージ化部６０２に出力する。
【０１１１】
送信データパッケージ化部６０２は、プログラムを含む種々のデータをまとめて、販売者、つまりプログラム配信装置７０に送信する販売者向けパッケージを作成する手段である。また、送信データパッケージ化部６０２は、販売者向けパッケージ化されたプログラムのデータサイズもしくはＣＲＣサイズをパッケージ情報記憶部６１０に渡す。なお、販売者向けパッケージについては、後で詳述する。
【０１１２】
暗号鍵生成部６０５は、通信用の暗号鍵を生成する手段である。暗号鍵生成部６０５は、製作者と販売者で、つまりプログラム製作装置１０とプログラム配信装置７０との間でパッケージをやりとりするために使用される暗号鍵を生成する。
【０１１３】
検査プログラム入力部６０９は、挿入部４０２により挿入された電子透かしを検査するための透かし検査プログラムと、記憶部５０２により記憶された指紋情報を検査するための指紋情報検査プログラムを入力する手段である。
【０１１４】
インストールプログラム入力部６１１は、利用者、つまりプログラム利用装置１５０が、販売者、つまりプログラム配信装置７０から送られてきたプログラムをインストールするためのソフトを入力する手段である。
【０１１５】
暗号化部６０７は、暗号鍵生成部６０５により生成された通信用の暗号鍵を用いて、パッケージ化されたプログラムおよび、検査プログラム入力部６０９により入力された透かしの検査プログラムを暗号化し、プログラム送信部６０６に出力する手段である。
【０１１６】
プログラム送信部６０６は、送信データパッケージ化部６０２によりパッケージ化され、暗号化部６０７により暗号化されたプログラムをプログラム配信装置７０に対して送信する手段である。
【０１１７】
本実施の形態における送信データパッケージ化部６０２が作成する販売者向けパッケージについて図６を用いて説明する。図６は、本実施の形態にかかる販売者向けパッケージの構成図である。
【０１１８】
販売者向けパッケージ７００は、透かし挿入部４０において販売者を特定するための透かしが挿入された販売者の透かし入りモジュール７０１と、指紋情報記憶部５０の記憶部５０２が記憶したモジュール７０１の指紋情報７０２と、秘密鍵で暗号化された指紋情報７０２を復号化するための指紋情報公開鍵７０３と、インストールプログラム７０４と、販売者がモジュール７０１の指紋情報７０２を特定するためのプログラム特徴箇所名７０５と、から構成されている。
【０１１９】
ここで、指紋情報公開鍵７０３は、証明書発行機関により証明書が発行されているものとし、以下では公開鍵を含んだ証明書を、公開鍵と記述する。
【０１２０】
また、パッケージ化の例としては、ｊａｒファイルやｔａｒファイルなどが考えられ、パッケージ化したファイルは圧縮してもよい。
【０１２１】
次に、本実施の形態におけるプログラム製作装置１０のプログラム送信部６０６は、販売者向けパッケージ７００と共に透かし検査プログラム７０６および指紋情報検査プログラム７０７をプログラム配信装置７０に送信する。これにより、プログラム製作装置１０が挿入した透かしと、記憶した指紋情報を他の端末で検査できる。
【０１２２】
次に、本実施の形態における透かし挿入部１２０について図７を用いて説明する。図７は、本実施の形態の透かし挿入部１２０の構成図である。
【０１２３】
プログラム入力部１２０１は、蓄積部１１０から抽出した透かしを入力するプログラムを入力する手段である。プログラム入力部１２０１は、入力したプログラムを挿入部１２０２に出力する。
【０１２４】
透かし用データ入力部１２０３は、透かしとして挿入するデータ（透かし用データ）を入力する手段である。入力する透かし用データは、プログラム利用装置１５０、つまり利用者を特定するための情報であり、利用者の住所、電話番号、会社名、氏名、電子メールアドレスなどである。また、透かし用データにプログラムの販売者（プログラム配信装置７０）の情報を入力してもよい。
【０１２５】
ＩＤ情報生成部１２０４は、透かし用データ入力部１２０３により入力された透かし用データから利用者を一意に特定できるＩＤ情報を生成する手段である。ＩＤ情報は、入力したデータそのものであってもよいし、それを暗号化したデータであってもよい。また、ＩＤ情報は、透かし用データを保存するデータベースにおいて透かし用データを一意に特定するためのＩＤであってもよい。
【０１２６】
挿入部１２０２は、ＩＤ情報生成部１２０４により生成されるＩＤ情報からプログラムに実際に挿入する透かしを生成し、モジュールに透かしである利用者ＩＤを挿入する手段である。そして、挿入部１２０２は、透かしを挿入したモジュール名を透かし情報記憶部１２０５に出力する。
【０１２７】
また、挿入部１２０２は、モジュールに透かしを挿入する際に、パッケージデータ入力部１２０７から入力した販売者向けパッケージ７００のプログラムの特徴箇所名７０５を参照し、指紋情報に使用している箇所を認識する。そして、挿入部１２０２は、プログラムの特徴箇所名７０５以外の場所に、透かしを挿入する。
【０１２８】
これにより、製作者が記録したプログラムの指紋情報を変化させることなく、利用者を特定する透かしを挿入できる。
【０１２９】
パッケージデータ入力部１２０７は、製作者、つまりプログラム製作装置１０から送られてきた販売者向けパッケージ７００を入力する。
【０１３０】
透かし情報記憶部１２０５は、透かしを挿入したモジュール名を記憶しておく手段である。
【０１３１】
プログラム出力部１２０６は、挿入部１２０２が透かしを挿入したプログラムを出力する手段である。
【０１３２】
この構成により、透かし挿入部１２０はモジュールに利用者を特定する透かしを挿入する。
【０１３３】
なお、本実施の形態においては、ＩＤ情報に基づいて透かし情報を生成する形態となっているが、必ずしもＩＤ情報に基づいて透かし情報を生成する必要はなく、透かし情報から一意に利用者を特定可能となっていれば良い。例えば、送信するモジュールに１〜Ｎシーケンス番号を透かし情報として挿入し、利用者（プログラム利用装置１５０）にシーケンス番号ｉのモジュールを配布といったように透かし情報と利用者を一意に特定可能としてもよい。
【０１３４】
また、透かし情報は利用者ＩＤだけでなく、プログラムの権利情報や販売者のＩＤ情報などを挿入してもよい。
【０１３５】
例えば、プログラムの権利情報は、プログラムの使用料や販売手数料などの情報であり、販売者のＩＤ情報は、販売者の住所、電話番号、会社名、氏名、電子メールアドレスなどの情報である。
【０１３６】
次に、本実施の形態にかかるプログラム配信装置７０の送信部１４０について図８を用いて説明する。図８は、本実施の形態における送信部１４０の構成図である。
【０１３７】
送信部１４０には、プログラム入力部１４０１が設けられている。プログラム入力部１４０１は、透かし挿入部１２０から送られてきたプログラムを入力する手段である。プログラム入力部１４０１は、入力したプログラムを送信データパッケージ化部１４０２に出力する。
【０１３８】
送信データパッケージ化部１４０２は、プログラムを含む種々のデータをまとめて、利用者（プログラム利用装置１５０）に送信する利用者向けパッケージを作成する手段である。また、送信データパッケージ化部１４０２は、利用者向けパッケージ化されたプログラムのデータサイズもしくはＣＲＣサイズをパッケージ情報記憶部１４１０に渡す。
【０１３９】
なお、利用者向けパッケージについては、後で詳述する。
【０１４０】
パッケージデータ入力部１４０８は、製作者、つまりプログラム製作装置１０から送られてきた販売者向けパッケージ７００を入力する。
【０１４１】
暗号鍵生成部１４０５は、通信用の暗号鍵を生成する手段である。暗号鍵生成部１４０５は、販売者と利用者で、つまりプログラム配信装置７０とプログラム利用装置１５０の間でパッケージをやりとりするために使用される暗号鍵を生成する。
【０１４２】
検査プログラム入力部１４０９は、透かし挿入部４０で挿入された透かしを検査するための透かし検査プログラム７０６と指紋情報検査プログラム７０７を入力する手段である。
【０１４３】
暗号化部１４０７は、暗号鍵生成部１４０５により生成された通信用の暗号鍵を用いて、パッケージ化されたプログラムと、検査プログラム入力部１４０９により入力された透かし検査プログラム７０６と、指紋情報検査プログラム７０７を暗号化する手段である。
【０１４４】
プログラム送信部１４０６は、送信データパッケージ化部１４０２によりパッケージ化され、暗号化部１４０７により暗号化されたプログラムを、プログラム利用装置１５０に送信する手段である。
【０１４５】
次に、送信データパッケージ化部１４０２が作成する利用者向けパッケージについて図９を用いて説明する。図９は、本実施の形態にかかる利用者向けパッケージの構成図である。
【０１４６】
利用者向けパッケージ１０００には、透かし挿入部４０で販売者を特定するための透かし、透かし挿入部１２０で利用者を特定するための透かしが挿入された販売者および利用者の透かし入りモジュール１００１と、プログラムの指紋情報７０２と、指紋情報公開鍵７０３と、インストールプログラム７０４と、から構成されている。
【０１４７】
また、パッケージ化の例としては、ｊａｒファイルやｔａｒファイルなどが考えられ、パッケージ化したファイルは圧縮してもよい。
【０１４８】
また、プログラム送信部１４０６は、利用者向けパッケージ１０００と共に透かし検査プログラム７０６と指紋情報検査プログラム７０７とをプログラム利用装置１５０に送信する。
【０１４９】
次に、本実施の形態にかかるプログラム利用装置１５０の受信モジュール検査部１９０について図１０を用いて説明する。図１０は、本実施の形態における受信モジュール検査部１９０の構成図である。
【０１５０】
受信モジュール検査部１９０には、プログラム入力部１９０１が設けられている。プログラム入力部１９０１は、受信部１７０から送られてきた、各モジュールの検査と結合を行うプログラムを入力する手段である。プログラム入力部１９０１は、プログラムを受信パッケージ検査部１９０２に出力する。
【０１５１】
パッケージ情報記憶部１９０３は、販売者（プログラム配信装置７０）より受信した利用者向けパッケージ１０００のサイズもしくはＣＲＣサイズを記憶する手段である。パッケージ情報記憶部１９０３は、利用者向けパッケージ１０００のサイズを予めプログラム配信装置７０から取得しておく。
【０１５２】
受信パッケージ検査部１９０２は、販売者（プログラム配信装置７０）より受信した利用者向けパッケージ１０００が完全なものか判断する手段である。具体的には、受信パッケージ検査部１９０２は、パッケージ情報記憶部１９０３より得られたパッケージのサイズもしくはＣＲＣサイズと、受信した利用者向けパッケージ１０００のサイズが一致しているか検査する。そして、受信パッケージ検査部１９０２は、パッケージ情報記憶部１９０３より得られたパッケージのサイズもしくはＣＲＣサイズと、受信した利用者向けパッケージ１０００のサイズが一致する場合には、プログラムを指紋情報検査部１９０４に出力し、一致しなかった場合には、受信した利用者向けパッケージ１０００を破棄する。
【０１５３】
指紋情報検査部１９０４は、受信したすべてのモジュールの指紋情報が正しいか検査するための手段で、検査プログラム入力部１９０６より得られた指紋情報検査プログラム７０７を用いて、受信したモジュール毎の指紋情報を抽出する。次に、指紋情報検査部１９０４は、利用者向けパッケージ１０００に記述された対応するモジュール製作者の指紋情報７０２を、利用者向けパッケージ１０００に付与された製作者の指紋情報の公開鍵７０３を用いて復号化する。そして、指紋情報検査部１９０４は、受信したプログラムから抽出した指紋情報と、モジュールに付与された指紋情報と比較し、一致する場合にはプログラムをモジュール結合部１９０５に出力し、一致しない場合には販売者から受信したモジュールをすべて破棄する。
【０１５４】
モジュール結合部１９０５は、販売者より受信したすべてのモジュールを一つに結合し、元のプログラムを生成する手段である。
【０１５５】
検査プログラム入力部１９０６は、販売者、つまりプログラム配信装置７０より獲得した透かし検査プログラム７０６と指紋情報検査プログラム７０７を入力する手段である。
【０１５６】
端末情報入力部１９０８は、プログラム利用装置１５０の端末ＩＤ（利用者ＩＤ）を入力する手段である。
【０１５７】
透かし検査部１９０７は、結合されたプログラムの透かしを抽出し、端末ＩＤと一致しているかを判定するための手段である。
【０１５８】
具体的には、透かし検査部１９０７は、検査プログラム入力部１９０６により入力された透かし検査プログラムを用いて、モジュール結合部１９０５で生成されたプログラムの透かしを抽出し、端末情報入力部１９０８により入力された端末ＩＤと比較する。そして、透かし検査部１９０７は、モジュール結合部１９０５で生成されたプログラムの透かしと端末情報入力部１９０８により入力された端末ＩＤとが一致する場合には、プログラムをプログラム出力部１９０９に出力し、一致しない場合には生成したプログラムを破棄する。
【０１５９】
プログラム出力部１９０９は、すべての検査を通過したプログラムを出力する手段である。
【０１６０】
この構成により、受信モジュール検査部１９０は、モジュールの指紋情報を用いてプログラムが正式か否かを判断する。また、受信モジュール検査部１９０は、透かしを用いてもプログラムが正式か否かを判断する。
【０１６１】
なお、プログラム配信装置７０からプログラム利用装置１５０に、透かし検査プログラム７０６および指紋情報検査プログラム７０７がプログラムに一体となって付加された状態で送られてくる形態であっても良い。
【０１６２】
この場合の受信モジュール検査部を図１１に示す。この場合の受信モジュール検査部１２００には、透かし検査部１９０７と端末情報入力部１９０８が無い構成になっている。
【０１６３】
そして、実行部２１０でプログラムが実行されると、透かし検査プログラム７０６が最初に実行され、プログラムに挿入された透かしの抽出と端末ＩＤの比較が行われ、透かしと端末ＩＤが一致した場合に、プログラムの実行が開始される。
【０１６４】
このようにして、透かし検査プログラムが付加されているプログラムを動作させることができる。
【０１６５】
次に、製作者のプログラム製作装置１０で作成されたプログラムが販売者のプログラム配信装置７０に送信されて、さらに利用者のプログラム利用装置１５０にダウンロードされるときの動作について図１２〜図１６を用いて説明する。
【０１６６】
図１２は、本実施の形態におけるプログラム製作装置１０の動作を示すフローチャートである。
【０１６７】
まず、プログラム製作装置１０は、プログラムを入力し、蓄積部２０に保存する。次に、プログラム製作装置１０は、プログラム構造変換部３０において、プログラム入力部３０１が、蓄積部２０に保存しておいたプログラムを入力する。次に、プログラム構造変換部３０のプログラム分割部３０２は、入力したプログラムをＮ個のモジュールに分割する（ステップ１２０１）。また、プログラム分割部３０２は、モジュールの分割数を分割情報記憶部３０６に出力する。
【０１６８】
そして、プログラム出力部３０７が、ステップ１２０１において、分割したモジュールを透かし挿入部４０に出力する。
【０１６９】
次に、透かし挿入部４０は、プログラム入力部４０１において、プログラム構造変換部３０から出力されたモジュールを入力する。
【０１７０】
次に、透かし挿入部４０は、挿入部４０２において、モジュールの番号ｉが１のモジュールから（ステップ１２０２）、Ｎのモジュールまで（ステップ１２０３）、つまりすべてのモジュールに対して、ＩＤ情報生成部４０４が生成した販売者ＩＤから透かしを生成し、モジュールに挿入する（ステップ１２０４）。また、挿入部４０２は、透かしを挿入したモジュール名を透かし情報記憶部４０５に出力する。
【０１７１】
次に、挿入部４０２は、透かしを挿入したモジュールをプログラム出力部４０６に出力し、プログラム出力部４０６が指紋情報記憶部５０に送る。
【０１７２】
そして、指紋情報記憶部５０は、プログラム入力部５０１より透かしを挿入したモジュールを入力し、記憶部５０２に送る。
【０１７３】
記憶部５０２は、特徴箇所入力部５０３より入力されたプログラムの特徴箇所名を用いて、透かしを挿入したモジュールの指紋情報を抽出し、これをモジュールの指紋情報として特徴箇所記憶部５０７に記憶する（ステップ１２０５）。
【０１７４】
次に、記憶部５０２は、鍵入力部５０６より秘密鍵を入力し、記憶した指紋情報を暗号化する。
【０１７５】
次に、記憶部５０２は、指紋情報が記憶され透かしが付与されたモジュールを、プログラム出力部５０４を介して、送信部６０に送る。
【０１７６】
そして、プログラム製作装置１０は、ｉをインクリメントして（ステップ１２０６）、ステップ１２０３に戻る。
【０１７７】
そして、すべてのモジュールに上記の処理を行ったら（ステップ１２０３）、最後に送信部６０がプログラム入力部６０１からモジュールを入力し、送信データパッケージ化部６０２が、販売者向けパッケージ７００の作成を行い、暗号化部６０７に送る。
【０１７８】
次に、暗号化部６０７が、プログラム製作装置１０とプログラム配信装置７０との間でパッケージをやりとりするために使用される暗号鍵を用いてパッケージの暗号化と（ステップ１２０７）、検査プログラム入力部６０９から入力された透かし検査プログラム７０６および指紋情報検査プログラム７０７の暗号化を行う（ステップ１２０８）。
【０１７９】
そして、プログラム送信部６０６は、販売者に販売者向けパッケージ７００および透かし検査プログラム７０６および指紋情報検査プログラム７０７を送信する（ステップ１２０９）。
【０１８０】
また、販売者向けパッケージ７００には、Ｎ個の、販売者の透かし入りモジュール７０１と、モジュール７０１に対応する指紋情報７０２、暗号化した指紋情報を復号化するための指紋情報公開鍵７０３、インストールプログラム７０４、プログラムの特徴箇所名７０５を入れる。
【０１８１】
なお、公開鍵を伝送路から別途入手できる場合には、公開鍵は必ずしも送らなくてもよい。
【０１８２】
また、指紋情報と各モジュールは、ＸＭＬ署名などのフォーマット（署名フォーマット）などを用いて対応付けを行う。ＸＭＬ署名とは、署名対象、署名アルゴリズムや署名値および証明書などをＸＭＬの文法で統一して表現できるもので、この署名値の代わりに指紋情報を記述することで、指紋情報と各モジュールを対応付けることができる。
【０１８３】
このように、プログラム製作装置１０が、モジュールに販売者を特定する透かしを挿入し販売者に送信することにより、販売者が不正にプログラムを二次配布した場合には、この透かしを用いて販売者を特定できる。この結果、販売者によるプログラムの二次配布を防止できる。
【０１８４】
また、プログラム製作装置１０が、販売者が製作者の特定した指紋情報を特定できるプログラムの特徴箇所名７０５を販売者に送信することにより、販売者は、製作者が特定した指紋情報を認識できる。この結果、販売者は、製作者の特定した指紋情報を変化させることなく、指紋情報以外の部分にデータ量の少ない利用者を特定するＩＤなどを挿入できる。つまり、プログラムに、販売者が利用者を特定するためのＩＤを挿入する部分を新たに設けなくても、指紋情報も変化させないで、プログラムに利用者を特定するＩＤを挿入できる。これにより、販売者によるプログラムの改竄を防止することができ、また、販売者が利用者を特定するＩＤを挿入することができるので、利用者によるプログラムの二次配布を抑止できる。
【０１８５】
また、モジュールに指紋情報が記憶されているので、ＩＤなどの少量のデータを挿入することは可能であるが、販売者は指紋情報を変更せずに、モジュールを改竄するなどの大幅な変更をすることは困難となる。この結果、販売者によるプログラムの改竄を防止できる。
【０１８６】
また、販売者向けパッケージ７００を、プログラム製作装置１０とプログラム配信装置７０との間で決めた暗号鍵により暗号化するので、正規の販売者以外が販売者パッケージ７００を改竄することも防げる。
【０１８７】
次に、販売者側のプログラム配信装置７０で行われる動作について図１３を用いて説明する。図１３は、販売者側のプログラム配信装置７０の動作に関するフローチャートである。
【０１８８】
プログラム配信装置７０は、受信部９０において、製作者のプログラム製作装置１０から送られた販売者向けパッケージ７００を受けとり、復号化して蓄積部１１０に保存する（ステップ１３０１）。
【０１８９】
次に、プログラム配信装置７０は、要求受信部１００により、利用者からダウンロードの要求を受け付け、受け付けた要求がパッケージに対するダウンロード要求かを判断する（ステップ１３０２）。
【０１９０】
要求がパッケージに対するダウンロード要求でなければ、検査プログラム７０６、７０７に対する要求であるので、送信部１４０は、暗号化部１４０７において、暗号鍵生成部１４０５で生成された、プログラム配信装置７０とプログラム利用装置１５０の間でパッケージをやりとりするために使用される暗号鍵を用いて、検査プログラム７０６、７０７を暗号化して、プログラム送信部１４０６から利用者のプログラム利用装置１５０に送信する（ステップ１３１０）。
【０１９１】
一方、ステップ１３０２において、要求がパッケージに対する要求であれば、まず、挿入部１２０のプログラム入力部１２０１が蓄積部１１０から販売者パッケージ７００を入力する。次に、透かし挿入部１２０の挿入部１２０２が、入力した販売者パッケージ７００のパッケージ化を解きＮ個のモジュール７０１を取り出す（ステップ１３０３）。
【０１９２】
次に、挿入部１２０２は、取り出したＮ個のモジュール７０１について、モジュール番号ｉが１から（ステップ１３０４）、Ｎまで変化させ（ステップ１３０５）、各モジュールに利用者ＩＤを用いた透かしを挿入する（ステップ１３０６、１３０７）。
【０１９３】
また、挿入部１２０２は、ステップ１３０６において、パッケージデータ入力部１２０７から入力した販売者向けパッケージ７００のプログラムの特徴箇所名７０５を参照し、指紋情報に使用している箇所を認識する。そして、挿入部１２０２は、プログラムの特徴箇所名７０５以外の場所に、透かしを挿入する。
【０１９４】
このように、製作者が記録した指紋情報を変化させることなく、利用者を特定する透かしを挿入する。
【０１９５】
そして、挿入部１２０２は、透かしを挿入したモジュールをプログラム出力部１２０６に送り、プログラム出力部１２０６が送信部１４０に送る。
【０１９６】
また、挿入部１２０２は、透かしを挿入したモジュール名を透かし情報記憶部１２０５に出力する。
【０１９７】
次に、送信部１４０は、プログラム入力部１４０１において、プログラム出力部１２０６より送られたモジュールを入力し、送信データパッケージ化部１４０２に送る。
【０１９８】
送信データパッケージ化部１４０２は、利用者向けパッケージ１０００を作成し、暗号化部１４０７に送る。
【０１９９】
暗号化部１４０７は、暗号鍵生成部１４０５により生成された通信用の暗号鍵を用いて、パッケージ化された利用者向けパッケージ１０００を暗号化して（ステップ１３０８）、プログラム送信部１４０６に送る。そして、プログラム送信部１４０６は、暗号化したパッケージ１０００をプログラム利用装置１５０に送信する（ステップ１３０９）。
【０２００】
また、暗号化部１４０７は、利用者向けパッケージ１０００に、Ｎ個の、販売者および利用者の透かし入りモジュール１００１と、指紋情報７０２と、指紋情報７０２の公開鍵７０３と、インストールプログラム７０４を入れる。
【０２０１】
なお、公開鍵が伝送路から別途入手できる場合には、公開鍵は必ずしも送らなくてもよい。
【０２０２】
このように、プログラム配信装置７０は、販売者向けパッケージ７００のプログラム特徴箇所名７０５から指紋情報に影響を与えない部分を特定し、この部分に利用者を特定するＩＤ（透かし）などを挿入することができる。これにより、利用者が、プログラムの不正な二次配布を防止できる。また、指紋情報が変わらないので、利用者がプログラムの正当性を検証することができ、販売者によるプログラムの改竄を防止できる。
【０２０３】
プログラムの指紋情報は、製作者の秘密鍵を用いて暗号化されていて、かつ販売者はこの秘密鍵を持っていないので、販売者が指紋情報を改竄したとしても、製作者の秘密鍵を用いて再度暗号化できない。また、利用者は製作者の公開鍵しか持っていないので、販売者が指紋情報を改竄した後、任意の秘密鍵を用いて暗号化した場合、利用者はこの指紋情報を復号化できない。これにより、利用者は、販売者の不正を認識できるので、販売者が指紋情報を改竄することを確実に防止できる。
【０２０４】
また、利用者向けパッケージ１０００を、プログラム配信装置７０とプログラム利用装置１５０との間で決めた暗号鍵により暗号化するので、正規の利用者以外が利用者パッケージ１０００を使用することも防げる。
【０２０５】
次に、プログラム利用装置１５０で行われる動作について、図１４を用いて説明する。図１４は、プログラム利用装置１５０の動作に関するフローチャートである。
【０２０６】
まず、プログラム利用装置１５０は、要求送信部１６０により、プログラムの送信要求と自分の端末ＩＤを販売者に送信する（ステップ１４０１）。
【０２０７】
そして、プログラム利用装置１５０は、受信部１７０により、プログラム配信装置７０から送られた利用者向けパッケージ１０００を受信し、復号化して蓄積部１８０に保存する（ステップ１４０２）。
【０２０８】
次に、受信モジュール検査部１９０が、プログラム入力部１９０１において、蓄積部１８０に蓄積されたパッケージを入力する。
【０２０９】
次に、受信モジュール検査部１９０は、受信パッケージ検査部１９０２において、パッケージ情報記憶部１９０３より利用者向けパッケージ１０００のサイズもしくはＣＲＣサイズを取得する。そして、受信パッケージ検査部１９０２は、パッケージ情報記憶部１９０３から取得した利用者向けパッケージ１０００のサイズもしくはＣＲＣサイズと、受信した利用者向けパッケージ１０００のサイズが一致しているか検査することにより、入力した利用者向けパッケージ１０００がパケットロスなどにより不完全なデータとなっていないかを検査する（ステップ１４０３）。
【０２１０】
そして、ステップ１４０３において受信したパッケージが不完全なデータであった場合には、受信パッケージ検査部１９０２は、利用者に対してエラー表示を行い（ステップ１４１６）、受信したパッケージを破棄する（ステップ１４１７）。
【０２１１】
一方、ステップ１４０３において完全なデータが受信されていれば、受信パッケージ検査部１９０２は、受信した利用者向けパッケージ１０００のパッケージ化を解きＮ個のモジュールを取り出す（ステップ１４０４）。そして、受信パッケージ検査部１９０２は、Ｎ個のモジュールを指紋情報検査部１９０４に送る。
【０２１２】
次に、指紋情報検査部１９０４は、Ｎ個のモジュールを取り出し、指紋情報検査プログラム７０７をプログラム配信装置７０に要求し、検査プログラム入力部１９０６において受信する（ステップ１４０５）。そして、指紋情報検査部１９０４は、各モジュールについて番号ｉが１から（ステップ１４０６）、Ｎまで（ステップ１４０７）、検査プログラム入力部１９０６より入力された指紋情報検査プログラム７０７を用いて、モジュールの指紋情報を抽出する（ステップ１４０８）。
【０２１３】
次に、指紋情報検査部１９０４は、各モジュールに対応付けられている指紋情報７０２を、利用者向けパッケージ１０００に付与されている指紋情報公開鍵７０３を用いて復号化する。そして、指紋情報検査部１９０４は、各モジュールに対応付けられている指紋情報７０２と抽出した指紋情報を比較することで、各モジュールが正規のものか検査する（ステップ１４０９）。
【０２１４】
指紋情報が正しい場合には、指紋情報検査部１９０４は、モジュールをモジュール結合部１９０５に送る。そして、指紋情報検査部１９０４は、ｉをインクリメントして（ステップ１４１０）、ステップ１４０６に戻る。
【０２１５】
また、指紋情報が正しくなかった場合には、指紋情報検査部１９０４は、エラーの表示を行い（ステップ１４１６）、受信したパッケージを破棄する（ステップ１４１７）。
【０２１６】
次に、モジュール結合部１９０５は、指紋情報の検査をすべてのモジュールが通過したら、モジュールを結合してプログラムを生成する（ステップ１４１１）。モジュール結合部１９０５は、プログラムを生成したら、プログラムを透かし検査部１９０７に送る。
【０２１７】
透かし検査部１９０７は、透かしの検査プログラム７０６をプログラム配信装置７０に要求し、検査プログラム入力部１９０６において受信する（ステップ１４１２）。
【０２１８】
透かし検査部１９０７は、受信した検査プログラム７０６を用いて生成したプログラムの透かしを抽出し（ステップ１４１３）、端末情報入力部１９０８から入力した端末ＩＤと一致するかを検査する（ステップ１４１４）。
【０２１９】
そして、透かしと端末ＩＤが一致したら、透かし検査部１９０７は、プログラムを、プログラム出力部１９０９を介して、一度蓄積部２００に保存する。
【０２２０】
そして、実行部２１０は、蓄積部２００に蓄積したプログラムに対して、インストールプログラム７０４を用いることで、プログラムをインストールし、実行する（ステップ１４１５）。
【０２２１】
一方、ＩＤが一致しなかった場合には、プログラムを保存せずに、エラー表示を行い（ステップ１４１６）、受信したパッケージを破棄する（ステップ１４１７）。
【０２２２】
このように、プログラム利用装置１５０は、モジュールに付与された指紋情報と抽出した指紋情報とを比較することにより、受信したプログラムの正当性を判断できる。
【０２２３】
また、プログラム利用装置１５０は、モジュールに挿入された透かしと、自身のＩＤ情報を比較することにより、受信したプログラムの正当性を判断できる。
【０２２４】
また、プログラム利用装置１５０は、利用者向けパッケージ１０００からモジュール１００１の指紋情報７０２の公開鍵７０３を取得し、これらを用いて指紋情報を復号できる。また、正規の製作者の秘密鍵を用いず暗号化された指紋情報は復号化できないので、これにより、違法なプログラムを認識することもできる。
【０２２５】
次に、プログラムが不正流出した場合に、流出元を特定する構造について、図１５を用いて説明する。
【０２２６】
図１５に示すように、プログラムが不正流出した際には、製作者は透かし取り出し装置２２０を用いて、流出先１７０に流出したプログラムから透かしを抽出し、流出元の販売者のプログラム配信装置７０を特定することが可能となる。
【０２２７】
次に、本実施の形態にかかる透かし取り出し装置２２０について図１６を用いて説明する。図１６は、本実施の形態における透かし取り出し装置２２０の構成図である。
【０２２８】
プログラム入力部２２０１は、透かしが挿入されたプログラムを入力する手段である。プログラム入力部２２０１は、プログラムを透かし検出部２２０２に出力する。
【０２２９】
ＩＤ情報記憶部２２０４は、透かし検出部２２０２より得られるＩＤ情報から、配布先の情報を生成する手段である。
【０２３０】
ＩＤ情報記憶部２２０４は、ＩＤ情報がデータベースのデータのＩＤである場合には、ＩＤからデータを取り出すことで、配布先の情報を取得する。また、ＩＤ情報記憶部２２０４は、ＩＤ情報が配布先の情報の暗号化データである場合には、復号して配布先の情報を取得する。
【０２３１】
透かし情報記憶部２２０５は、透かしが挿入されているモジュール名を記憶している手段である。これらの情報は、透かし挿入部４０の透かし情報記憶部４０５より得る。
【０２３２】
透かし検出部２２０２は、透かし情報記憶部２２０５より得られるモジュール名からそのモジュールに挿入された透かしを抽出する。そして、透かし検出部２２０２は、取り出した透かしからＩＤ情報を生成し、出力部２２０３に渡す。
【０２３３】
出力部２２０３は、ＩＤ情報記憶部２２０４を参照し、透かし検出部２２０２が生成した、ＩＤ情報から配布先の情報を抽出し、出力する手段である。
【０２３４】
このようにして、透かし取り出し装置２２０は、不正にプログラムを配布した配布元の情報を出力する。
【０２３５】
なお、本発明は、プログラム利用装置１５０が受信するプログラムに透かしの検査プログラムが付加されている場合も動作可能である。
【０２３６】
その場合、異なるのは送信部６０および受信モジュール検査部１９０の動作である。
【０２３７】
送信部６０では、検査プログラム入力部６０８による透かしの検査プログラムの入力は行われない。また、受信モジュール検査部１９０では、検査プログラム入力部１９０１、端末情報入力部１９０８および透かし検査部１９０７の動作は行われない。
【０２３８】
以上説明したように、本実施の形態によれば、販売者が、モジュールの製作者により記憶された指紋情報以外の部分に利用者ＩＤを挿入することができる。これにより、利用者が不正にプログラムを二次配布することを防止できる。
【０２３９】
また、本実施の形態によれば、モジュールにプログラムの指紋情報を付与することで、販売者にプログラムの根幹にかかわる重要な部分を操作させることを防止できる。これにより、販売者によるプログラムの改竄を防止することができる。
【０２４０】
さらに、本実施の形態によれば、モジュールに付与された指紋情報は、製作者の秘密鍵を用いて暗号化されていて、かつ販売者は製作者の秘密鍵を持っていない。これにより、仮に販売者が指紋情報を指紋情報公開鍵７０３で復号し改竄したとしても、製作者の秘密鍵で再度暗号化できない。よって、利用者が、モジュールの指紋情報を復号化できない。この結果、販売者が、不正に指紋情報を改竄したことがわかるので、販売者が指紋情報を改竄することを確実に防止できる。
【０２４１】
また、本実施の形態によれば、仮に販売者によりプログラムの不正流出があった場合でも、モジュールに販売者ＩＤが挿入されているため、流出元となった販売者を特定することができる。これにより、販売者によるプログラムの不正流出を防止できる。
【０２４２】
なお、プログラム製作装置１０、プログラム配信装置７０、およびプログラム利用装置１５０の動作をプログラムにし、記憶媒体に格納し、汎用のコンピュータが記憶媒体からプログラムをダウンロードして実行させる形態であっても良い。
【０２４３】
また、製作者が複数の販売者にプログラムを分割して送り、複数の販売者を経由してきた分割されたプログラムを利用者が受信するようにしても良い。
【０２４４】
これにより、各販売者にプログラムの一部を送信することになり、各販売者が完全なプログラムを持つことができなくなる。これにより、各販売者が利用者を偽った不正流出を防止することができる。
【産業上の利用可能性】
【０２４５】
以上説明したように、本発明によれば、販売者にプログラムのモジュールを操作させることなく、利用者ＩＤを挿入することができ、販売者によるプログラムの改竄を防止することができる。また、透かし情報として販売者のＩＤを挿入することで、不正流出を抑止することが可能となる。本発明は、プログラムだけでなく動画や音声などのコンテンツの流通等にも適用でき、その利用範囲は広い。
【図面の簡単な説明】
【０２４６】
【図１】本発明の一実施の形態にかかるプログラム流通システムの構成図
【図２】上記実施の形態にかかるプログラム構造変換部の構成図
【図３】上記実施の形態の透かし挿入部の構成図
【図４】上記実施の形態における指紋情報記憶部の構成図
【図５】上記実施の形態における送信部の構成図
【図６】上記実施の形態にかかる販売者向けパッケージの構成図
【図７】上記実施の形態の透かし挿入部の構成図
【図８】上記実施の形態における送信部の構成図
【図９】上記実施の形態にかかる利用者向けパッケージの構成図
【図１０】上記実施の形態における受信モジュール検査部の構成図
【図１１】上記実施の形態における透かしの検査プログラムが一体となって付加されているときの受信モジュール検査部の構成図
【図１２】上記実施の形態におけるプログラム製作装置の動作を示すフローチャート
【図１３】上記実施の形態におけるプログラム配信装置の動作に関するフローチャート
【図１４】上記実施の形態におけるプログラム利用装置の動作に関するフローチャート
【図１５】上記実施の形態におけるプログラムが不正流出した場合に、流出元を特定する構造を説明するための図
【図１６】上記実施の形態における透かし取り出し装置の構成図
【符号の説明】
【０２４７】
１０  プログラム製作装置
２０、１１０、１８０、２００、  蓄積部
３０  プログラム構造変換部
４０、１２０  透かし挿入部
５０  指紋情報記憶部
６０、１４０  送信部
７０  プログラム配信装置
９０、１７０  受信部
１００  要求受信部
１５０ａ、１５０ｂ  プログラム利用装置
１６０  要求送信部
１９０  受信モジュール検査部
２１０  実行部
【図１】
2005165742.tif 000003
【図２】
2005165742.tif 000004
【図３】
2005165742.tif 000005
【図４】
2005165742.tif 000006
【図５】
2005165742.tif 000007
【図６】
2005165742.tif 000008
【図７】
2005165742.tif 000009
【図８】
2005165742.tif 000010
【図９】
2005165742.tif 000011
【図１０】
2005165742.tif 000012
【図１１】
2005165742.tif 000013
【図１２】
2005165742.tif 000014
【図１３】
2005165742.tif 000015
【図１４】
2005165742.tif 000016
【図１５】
2005165742.tif 000017
【図１６】
2005165742.tif 000018