本発明の第1の態様にかかるプログラム製作装置は、販売者を介して利用者に製作したプログラムを配信するプログラム製作装置であって、前記プログラムの動作に影響を与えず前記販売者が前記利用者を特定する利用者用透かしを挿入できるダミーモジュールを前記プログラムに追加するダミーモジュール追加手段と、前記プログラムに電子署名を付与する署名手段と、前記ダミーモジュールを追加し前記電子署名を追加した販売者用プログラムを前記販売者に配布する送信手段と、を具備した構成を採る。
この構成により、プログラムとは別にダミーモジュールを追加することにより、販売者がダミーモジュールに利用者IDを挿入することができる。また、プログラムに署名を付与することで、販売者にプログラムを操作させることを防止できる。これにより、販売者によるプログラムの改竄を防止することができる。
本発明の第2の態様は、第1の態様にかかるプログラム製作装置において、前記プログラムに前記販売者を特定できる販売者用透かしを挿入する透かし挿入手段を具備した構成を採る。
これにより、仮にプログラムの不正流出があった場合でも、プログラムに販売者を特定する販売者用透かしが挿入されているため、流出元となった販売者を特定することができる。これにより、販売者によるプログラムの改竄を防止できる。
本発明の第3の態様は、第1の態様または第2の態様にかかるプログラム製作装置において、前記プログラムを複数のモジュールに分割するプログラム分割手段を具備した構成を採る。
これにより、ダミーモジュールを含めた全モジュール数が増加することになり、利用者は自身のIDの挿入されているダミーモジュールを多数のモジュールから特定することになるため非常に困難となる。また、モジュールとダミーモジュールとのサイズの差が小さくなり、利用者はモジュールのサイズに基づいて自身のIDの挿入されているダミーモジュールを特定できなくなる。したがって、利用者によるプログラムの改竄を防止することができる。
本発明の第4の態様は、第1の態様から第3の態様のいずれかにかかるプログラム製作装置において、前記販売者が前記ダミーモジュールに付与する電子署名用の秘密鍵を、前記販売者に送信する。
これにより、販売者がダミーモジュールに、プログラム製作装置の秘密鍵を使用して電子署名を付与することが可能となる。販売者が自分自身の秘密鍵でダミーモジュールに電子署名を付与した場合には、本体モジュール用の秘密鍵の証明書とダミーモジュール用の秘密鍵の証明書との発行先が異なる。このために、利用者にダミーモジュールの部分を容易に特定され、透かし挿入箇所を容易に特定されてしまう。しかし、実施の形態1では、利用者が署名の検査に使う証明書は、すべて製作者に対して発行されたものとなるため、証明書の発行先による透かし挿入箇所の特定が不可能となり、利用者による透かしの削除を防止することができる。
本発明の第5の態様は、第1の態様から第4の態様のいずれかにかかるプログラム製作装置において、前記販売者が挿入した前記利用者用透かしを検査するための検査プログラムを、前記プログラムに付加して送信する。
これにより、プログラム製作装置が付与した透かしを他の端末において検査できる。
本発明の第6の態様は、第1の態様から第5の態様のいずれかにかかるプログラム製作装置において、前記販売者用プログラムを複数に分割し、前記販売者を介して前記利用者に配布する。
これにより、販売者が完全なプログラムを持つことができなくなり、販売者が利用者を偽ったプログラムの不正流出を防止することができる。
本発明の第7の態様にかかるプログラム配信装置は、プログラム本体に、プログラム本体の動作に影響を与えず透かしを挿入できるダミーモジュールと、電子署名と、を付与した販売者用プログラムの前記ダミーモジュールに前記利用者を特定する利用者用透かしを挿入する透かし挿入手段と、前記ダミーモジュールに前記利用者透かしを挿入した利用者用プログラムを前記利用者に送信する送信手段と、を具備した構成を採る。
これにより、ダミーモジュールに利用者を特定するIDを挿入することが可能となり、利用者によるプログラムの不正利用を防止できる。
本発明の第8の態様は、第7の態様にかかるプログラム配信装置において、前記ダミーモジュールに電子署名を付与する署名手段を具備した構成を採る。
このように、ダミーモジュールに、電子署名が付与されているので、ダミーモジュールを改竄することができない。
本発明の第9の態様は、第8の態様にかかるプログラム配信装置において、前記ダミーモジュールの電子署名の付与には前記プログラム製作装置から送信された前記電子署名用の秘密鍵を用いる。
このように、ダミーモジュールに付与された電子署名は、プログラム製作装置の秘密鍵を用いて暗号化されているので、利用者は復号化に使用される公開鍵の違いに基づいて自身のIDの挿入されているダミーモジュールを特定できなくなる。この結果、利用者が、ダミーモジュールを改竄することを確実に防止できる。
本発明の第10の態様にかかるプログラム利用装置は、プログラム本体に、プログラム本体の動作に影響を与えず透かしを挿入できるダミーモジュールと、電子署名と、を付与した販売者用プログラムの前記ダミーモジュールに利用者を特定する利用者用透かしを挿入した利用者用プログラムを受信する受信手段と、前記利用者用プログラムから前記利用者用透かしを検査する透かし検査手段と、を具備した構成を採る。
これにより、ダミーモジュールに付与された利用者用透かしと、自身のID情報を比較することにより、受信したプログラムの正当性を判断できる。
本発明の第11の態様は、第10の態様にかかるプログラム利用装置において、複数に分割された前記利用者用プログラムを結合する結合手段と、結合した前記利用者用プログラムを実行する実行手段と、を具備した構成を採る。
これにより、複数に分割されているプログラムを実行できる。
本発明の第12の態様は、第10の態様または第11の態様にかかるプログラム利用装置において、前記透かし検査手段は、前記利用者用透かしを検査する検査プログラムを伝送路上の端末より取得する。
このようにして、伝送路上の端末から検査プログラムを取得することで、プログラム利用装置で、製作者端末で挿入された透かしを抽出して、プログラムを実行することが可能となる。
本発明の第13の態様は、第12の態様にかかるプログラム利用装置において、前記検査プログラムは、前記利用者用プログラムに実装されている。
これにより、製作者端末で挿入された透かしを抽出して、プログラムを実行することが可能となる。また、これによりプログラムとそれに対応する検査プログラムとの管理が容易となる。
本発明の第14の態様は、第1の態様にかかるプログラム製作装置と、第7の態様にかかるプログラム配信装置と、第10の態様にかかるプログラム利用装置と、を具備したことを特徴とするプログラム流通システムである。
本発明の第15の態様は、販売者を介して利用者に製作したプログラムを配信するプログラム配信方法であって、前記プログラムの動作に影響を与えず前記販売者が前記利用者を特定する利用者用透かしを挿入できるダミーモジュールを前記プログラムに追加するステップと、前記プログラムに電子署名を付与するステップと、前記ダミーモジュールを追加し前記電子署名を追加した販売者用プログラムを前記販売者に配布するステップと、を具備したことを特徴とするプログラム配信方法である。
本発明の第16の態様は、第15の態様にかかるプログラム配信方法により送られてきた前記販売者用プログラムを利用者に配信するプログラム配信方法であって、前記販売者用プログラムの前記ダミーモジュールに前記利用者を特定する利用者用透かしを挿入するステップと、前記ダミーモジュールに前記利用者透かしを挿入した利用者用プログラムを前記利用者に送信するステップと、を具備したことを特徴とするプログラム配信方法である。
本発明の第17の態様は、第16の態様にかかるプログラム配信方法により送られてきた利用者プログラムを受信するステップと、前記利用者用プログラムから前記販売者用透かしを検査するステップと、を具備したことを特徴とするプログラム利用方法である。
本発明の第18の態様は、プログラムの動作に影響を与えず透かしを挿入できるダミーモジュールを前記プログラムに追加するステップと、前記プログラムに電子署名を付与するステップと、を具備したことを特徴とするプログラム製作方法である。
(実施の形態1)
本発明の実施の形態1にかかるプログラム流通システムについて添付図面を用いて説明する。図1は、実施の形態1にかかるプログラム流通システムの構成図である。
実施の形態1にかかるプログラム流通システムには、プログラム製作装置10が設けられている。
プログラム製作装置10は、プログラムを製作するメーカや個人等の製作者の端末を表す。
プログラム製作装置10には、蓄積部20が設けられている。蓄積部20は、製作者が製作したプログラムを保存するための手段で、FDやHD、内部メモリなどの物理デバイスを示している。
また、プログラム製作装置10には、プログラム構造変換部30が設けられている。プログラム構造変換部30は、蓄積部20に蓄積されているプログラムを複数のモジュール(本体モジュール)に分割する。また、プログラム構造変換部30は、分割したプログラムにプログラムの動作に影響を与えないダミーモジュールを追加する。そして、プログラム構造変換部30は、上述したように変換したプログラムを透かし挿入部40に出力する。なお、プログラム構造変換部30の詳細は後で詳述する。
透かし挿入部40は、プログラム構造変換部30が変換したプログラムの本体モジュールに電子透かしを挿入する。具体的には、透かし挿入部40は、販売者を特定するID情報から生成される電子透かしをプログラムに挿入する。そして、透かし挿入部40は、電子透かしを挿入したプログラムを署名部50に出力する。なお、透かし挿入部40については、後で詳述する。
署名部50は、透かし挿入部40が出力したプログラムの透かしが挿入されたモジュールに電子署名を付与する。署名部50が付与する電子署名は、本体モジュールのハッシュ値を用いる。そして、署名部50は、電子署名を付与したプログラムを送信部60に出力する。なお、署名部50については、後で詳述する。
送信部60は、署名部50から送られてきたプログラムのモジュールのパッケージ化とパッケージの送信、およびプログラムの利用者の端末であるプログラム利用装置150a、150bが透かし挿入部40の挿入した電子透かしを検査する際に使用する検査プログラムをプログラムの販売者の端末であるプログラム配信装置70に送信する。なお、送信部60については、後で詳述する。
なお、実施の形態1では、検査プログラムをプログラムの販売者の端末であるプログラム配信装置70に送信しているが、必ずしもプログラム配信装置70に送信する必要はなく、独立した検査プログラム配布者に送信してもよい。
プログラム配信装置70は、通信キャリアやプログラム配信のポータルサイトなどであるプログラムの販売者の端末を表す。プログラム配信装置70は、受信したプログラムにプログラムの利用者IDを挿入し、利用者にプログラムを配布する役割を持っている。
プログラム配信装置70には、受信部90が設けられている。受信部90は、プログラム製作装置10の送信部60から送られてきたパッケージを復号しプログラムにする。また、受信部90は、送信部60から送られてきた検査プログラムを受信する。
また、プログラム配信装置70には、要求受信部100が設けられている。要求受信部100は、利用者からのダウンロードの要求メッセージを受けるための手段である。
また、プログラム配信装置70には、蓄積部110が設けられている。蓄積部110は、受信部90から送られてきたプログラムと検査プログラム、および要求受信部110から送られてきた要求メッセージを蓄積する。
また、プログラム配信装置70には、透かし挿入部120が設けられている。透かし挿入部120は、蓄積部110に蓄積されたプログラムから本体モジュールとダミーモジュールを抽出し、抽出したダミーモジュールに電子透かしを挿入する。また、透かし挿入部120は、挿入する電子透かしを、利用者を特定するIDから生成する。そして、透かし挿入部120は、利用者を特定する電子透かしを挿入したプログラムを署名部130に送る。
署名部130は、透かし挿入部120から送られてきたプログラムのダミーモジュールのハッシュ値を計算し、計算したハッシュ値等からなる電子署名を送られてきたプログラムに付与する。そして、署名部130は、電子署名を付与したプログラムを送信部140に送る。
送信部140は、署名部130から送られてきたプログラムのモジュールのパッケージ化とこのパッケージの送信、および検査プログラムをプログラムの利用者の端末であるプログラム利用装置150a、150bに送信する。
プログラム利用装置150a、150bは、プログラムを利用する側のユーザの端末を表す。以下では、プログラム利用装置150aを用いて説明を行い、プログラム利用装置150a、150bを単にプログラム利用装置150と表記する。
プログラム利用装置150には、要求送信部160が設けられている。要求送信部160は、販売者の端末であるプログラム配信装置70にプログラムの配信を要求するメッセージを送信するための手段を表す。
また、プログラム利用装置150には、受信部170が設けられている。受信部170は、プログラム配信装置70の送信部140から送られてきたパッケージを受信し、復号してプログラムにする手段である。また、受信部170は、送信部140から送られてきた検査プログラムも受信する。そして、受信部170は、復号化したプログラムおよび検査プログラムを蓄積部180に送る。
蓄積部180は、受信部170から送られてきたプログラムを蓄積する。
また、プログラム利用装置150には、受信モジュール検査部190が設けられている。受信モジュール検査部190は、受信部170がダウンロード(受信した)したプログラムの電子透かしや電子署名を検査するための手段を表す。そして、受信モジュール検査部190は、検査したプログラムを蓄積部200に送る。なお、受信モジュール検査部190については、後で詳述する。
蓄積部200は、受信モジュール検査部190から送られてきた検査後のプログラムを蓄積する。
また、プログラム利用装置150には、実行部210が設けられている。実行部210は、ダウンロードしたプログラムを実行するための手段を表す。
以上のように、プログラム流通システムは構成されている。
次に、実施の形態1におけるプログラム構造変換部30について、図2を用いて説明する。図2は、実施の形態1にかかるプログラム構造変換部30の構成図である。
プログラム構造変換部30には、プログラム入力部301が設けられている。プログラム入力部301は、ダミーモジュールを追加し複数のモジュールに分割するプログラムを入力する手段である。プログラム入力部301は、プログラムをダミーモジュール追加部305に出力する。
ダミーモジュール追加部305は、ダミーモジュール入力部303より入力されたダミーモジュールをプログラム入力部301が入力したプログラムに追加し、プログラム分割部302に出力する手段である。また、ダミーモジュール追加部305は、ダミーモジュールを追加する際に、assert法などを用いて、少なくとも一度は本体モジュールでダミーモジュールが呼び出されるようにしておくことが望ましい。
ここでassert法とは、プログラム中のassert文を、必ず偽になるif文に置き換えて、そのif文の中身にダミーモジュールの呼び出し文を追加する方法である。詳細は、一杉裕志「ソフトウェア電子透かしの挿入法、攻撃法、評価法、実装法」、情報処理学会、夏のプログラミングシンポジウム報告集に記されている。
また、ダミーモジュール追加部305は、追加されたダミーモジュール名をダミー情報記憶部304に渡す。
プログラム分割部302は、ダミーモジュール追加部305において、ダミーモジュールの追加されたプログラムを複数のモジュールに分割する手段である。例えば、プログラム分割部302は、プログラムがJava(登録商標)言語で書かれていた場合には、コンパイルしたあとのclassファイルをモジュールとし、またプログラムがC言語の場合には、コンパイル後のオブジェクトファイルをモジュールとすることが考えられる。また、プログラム分割部302は、モジュールの分割数を分割情報記憶部306に出力する。
プログラム出力部307は、ダミーモジュール追加部305によりダミーモジュールが追加され、プログラム分割部302により複数のモジュールに分割されたプログラムを出力する手段である。
この構成により、プログラム構造変換部30は、プログラムにダミーモジュールを追加し、ダミーモジュールを追加したプログラムを複数のモジュールに分割する。
次に、実施の形態1における透かし挿入部40について図3を用いて説明する。図3は、実施の形態1の透かし挿入部40の構成図である。
透かし挿入部40には、プログラム入力部401が設けられている。プログラム入力部401は、透かしを入力するプログラム、つまりプログラム構造変換部30において変換されたプログラムを入力する手段である。プログラム入力部401は、入力したプログラムを挿入部402に出力する。
透かし用データ入力部403は、透かしとして挿入するデータ(透かし用データ)を入力する手段である。入力する透かし用データは、プログラム配信装置70、つまり販売者を特定するための情報であり、販売者の住所、電話番号、会社名、氏名、電子メールアドレスなどである。また、透かし用データにプログラムの製作者(プログラム製作装置10)の情報を入力してもよい。
ID情報生成部404は、透かし用データ入力部403により入力された透かし用データから販売者(プログラム配信装置70)を一意に特定できるID情報を生成する手段である。ID情報は、入力したデータそのものであってもよいし、それを暗号化したデータであってもよい。また、ID情報は、透かし用データを保存するデータベースにおいて透かし用データを一意に特定するためのIDであってもよい。
なお、実施の形態1においては、ID情報に基づいて透かし情報を生成する形態となっているが、必ずしもID情報に基づいて透かし情報を生成する必要はなく、透かし情報から一意に配布先を特定可能となっていれば良い。例えば、送信するモジュールに1〜Nシーケンス番号を透かし情報として挿入し、販売者(プログラム配信装置70)にシーケンス番号iのモジュールを配布といったように透かし情報と配布先を一意に特定可能としてもよい。
モジュール情報記憶部408は、プログラム構造変換部30において、追加されたダミーモジュール名を記憶しておく手段である。モジュール情報記憶部408は、予めプログラム構造変換部30のダミー情報記憶部304からダミーモジュール名を取得し、記憶しておく。
挿入部402は、ID情報生成部404により生成されるID情報からプログラムに実際に挿入する透かしを生成し、モジュール情報記憶部408より得られるダミーモジュール名を用いてダミーモジュールと本体モジュールを区別し、本体モジュールに透かしを挿入する手段である。また、挿入部402は、透かしを挿入した本体モジュール名を透かし情報記憶部405に出力する。
なお、挿入部402が挿入する透かし情報は、販売者IDだけでなく、プログラムの権利情報や利用者端末のアクセスコントロール情報、セキュリティポリシーなどを挿入してもよい。
例えば、プログラムの権利情報は、プログラムの実行期限や実行回数、プログラムの他の端末への転送の可否などの情報であり、アクセスコントロール情報やセキュリティポリシー情報は、メモリやHDを読み書き可能、ソケットを利用可能、など端末リソースへのアクセス権に関する情報である。
透かし情報記憶部405は、透かしを挿入したモジュール名を記憶しておく手段である。
プログラム出力部406は、挿入部402が透かしを挿入したプログラムを出力する手段である。
この構成により、透かし挿入部40は、本体モジュールに販売者を特定する透かしを挿入する。
次に、実施の形態1にかかる署名部50について図4を用いて説明する。図4は、実施の形態1における署名部50の構成図である。
署名部50には、プログラム入力部501が設けられている。プログラム入力部501は、署名を付与するプログラム、つまり透かし挿入部40から送られてきたプログラムを入力する手段である。プログラム入力部501は、入力したプログラムを署名付与部502に出力する。
モジュール情報記憶部508は、プログラム構造変換部30において、追加されたダミーモジュール名を記憶しておく手段である。モジュール情報記憶部508は、予めプログラム構造変換部30のダミー情報記憶部304からダミーモジュール名を取得し、記憶しておく。
署名用鍵入力部503は、署名を暗号化するための秘密鍵を入力する手段である。
署名付与部502は、モジュール情報記憶部508より得られたダミーモジュール名を用いて本体モジュールとダミーモジュールを判断し、本体モジュールのハッシュ値を計算する。次に、署名付与部502は、署名用鍵入力部503より入力される秘密鍵(製作者秘密鍵)を用いて、計算したハッシュ値を暗号化する。
また、署名付与部502は、署名フォーマットを用いて、モジュールと署名であるハッシュ値、署名検証用の公開鍵(製作者公開鍵)を含む証明書を一つのファイルにまとめる。さらに、署名付与部502は、モジュール名とハッシュ値を対応付けて署名データ記憶部505に出力する。
署名データ記憶部505は、署名付与部502が出力したモジュール名とハッシュ値を対応付けて記憶する。
プログラム出力部506は、署名付与部502により署名等がつけられたプログラムを出力する手段である。
この構成により、署名部50は本体モジュールに署名を付与し、さらに署名を秘密鍵で暗号化する。
次に、実施の形態1にかかる送信部60について図5を用いて説明する。図5は、実施の形態1における送信部60の構成図である。
送信部60には、署名部50から出力されたプログラムを入力するプログラム入力部601が設けられている。プログラム入力部601は、販売者つまりプログラム配信装置70に送信するプログラムを入力する手段である。プログラム入力部601は、入力したプログラムを送信データパッケージ化部602に出力する。
送信データパッケージ化部602は、プログラムを含む種々のデータをまとめて、販売者、つまりプログラム配信装置70に送信する販売者向けパッケージを作成する手段である。また、送信データパッケージ化部602は、販売者向けパッケージ化されたプログラムのデータサイズもしくはCRCサイズをパッケージ情報記憶部610に渡す。なお、販売者向けパッケージについては、後で詳述する。
パッケージデータ入力部608は、ダミーモジュール名の記述されたファイルを入力する。
暗号鍵生成部605は、通信用の暗号鍵を生成する手段である。暗号鍵生成部605は、製作者と販売者で、つまりプログラム製作装置10とプログラム配信装置70との間でパッケージをやりとりするために使用される暗号鍵を生成する。
検査プログラム入力部609は、透かし挿入部40で挿入された透かしを検査するための検査プログラムを入力する手段である。
インストールプログラム入力部611は、利用者、つまりプログラム利用装置150が、販売者、つまりプログラム配信装置70から送られてきたプログラムをインストールするためのソフトを入力する手段である。
暗号化部607は、暗号鍵生成部605により生成された通信用の暗号鍵を用いて、パッケージ化されたプログラムおよび、検査プログラム入力部608により入力された透かしの検査プログラムを暗号化し、プログラム送信部606に出力する手段である。
プログラム送信部606は、送信データパッケージ化部602によりパッケージ化され、暗号化部607により暗号化されたプログラムをプログラム配信装置70に対して送信する手段である。
次に、送信データパッケージ化部602が作成する販売者向けパッケージについて図6を用いて説明する。図6は、実施の形態1にかかる販売者向けパッケージの構成図である。
販売者向けパッケージ700は、本体モジュール701と、ダミーモジュール702と、署名部50の署名付与部502が計算した本体モジュールの署名値703と、秘密鍵で暗号化された署名値703を復号化するための公開鍵(製作者公開鍵)704と、ダミーモジュール名の記述されたファイル605と、ダミーモジュールに署名するための秘密鍵(製作者秘密鍵)706とダミーモジュールの署名を復号するための公開鍵(製作者公開鍵)707と、インストールプログラム709と、から構成されている。
ここで、公開鍵704及び706は、証明書発行機関により証明書が発行されているものとし、以下では公開鍵を含んだ証明書を、公開鍵と記述する。
また、パッケージ化の例としては、jarファイルやtarファイルなどが考えられ、パッケージ化したファイルは圧縮してもよい。
また、プログラム送信部606は、販売者向けパッケージ700と共に検査プログラム708をプログラム配信装置70に送信する。これにより、プログラム製作装置10が付与した透かしを他の端末において検査できる。
なお、ここでは、ダミーモジュールに署名するための秘密鍵(製作者秘密鍵)706を配布しているが、かならずしも配布する必要はない。また、このとき、インストールプログラム709及び透かしの検査プログラム708は、難読化などのソフトウェア耐タンパ手法により保護されていることが望ましい。これにより、インストールプログラム709と検査プログラム708の動作が不正に解析されることによる透かしの削除や改変を防止できる。
次に、実施の形態1における透かし挿入部120について図7を用いて説明する。図7は、実施の形態1の透かし挿入部120の構成図である。
プログラム入力部1201は、蓄積部110から抽出した透かしを入力するプログラムを入力する手段である。プログラム入力部1201は、入力したプログラムを挿入部1202に出力する。
透かし用データ入力部1203は、透かしとして挿入するデータ(透かし用データ)を入力する手段である。入力する透かし用データは、プログラム利用装置150、つまり利用者を特定するための情報であり、利用者の住所、電話番号、会社名、氏名、電子メールアドレスなどである。また、透かし用データにプログラムの販売者(プログラム配信装置70)の情報を入力してもよい。
ID情報生成部1204は、透かし用データ入力部1203により入力された透かし用データから利用者を一意に特定できるID情報を生成する手段である。ID情報は、入力したデータそのものであってもよいし、それを暗号化したデータであってもよい。また、ID情報は、透かし用データを保存するデータベースにおいて透かし用データを一意に特定するためのIDであってもよい。
挿入部1202は、ID情報生成部1204により生成されるID情報からプログラムに実際に挿入する透かしを生成し、モジュール情報記憶部1208より得られるダミーモジュール名を用いてダミーモジュールと本体モジュールを区別し、ダミーモジュールに透かしである利用者IDを挿入する手段である。そして、挿入部1202は、透かしを挿入したモジュール名を透かし情報記憶部1205に出力する。
透かし情報記憶部1205は、透かしを挿入したモジュール名を記憶しておく手段である。
プログラム出力部1206は、挿入部1202が透かしを挿入したプログラムを出力する手段である。
この構成により、透かし挿入部120はダミーモジュールに利用者を特定する透かしを挿入する。
なお、実施の形態1においては、ID情報に基づいて透かし情報を生成する形態となっているが、必ずしもID情報に基づいて透かし情報を生成する必要はなく、透かし情報から一意に利用者を特定可能となっていれば良い。例えば、送信するモジュールに1〜Nシーケンス番号を透かし情報として挿入し、利用者(プログラム利用装置150)にシーケンス番号iのモジュールを配布といったように透かし情報と利用者を一意に特定可能としてもよい。
また、透かし情報は利用者IDだけでなく、プログラムの権利情報や利用者端末のアクセスコントロール情報、セキュリティポリシーなどを挿入してもよい。
例えば、プログラムの権利情報は、プログラムの実行期限や実行回数、プログラムの他の端末への転送の可否などの情報であり、アクセスコントロール情報やセキュリティポリシー情報は、メモリやHDを読み書き可能、ソケットを利用可能、など端末リソースへのアクセス権に関する情報である。
次に、実施の形態1にかかる署名部130について図8を用いて説明する。図8は、実施の形態1における署名部130の構成図である。
署名部130には、プログラム入力部1301が設けられている。プログラム入力部1301は、署名を付与するプログラム、つまり透かし挿入部120から送られてきたプログラムを入力する手段である。プログラム入力部1301は、入力したプログラムを署名付与部1302に出力する。
モジュール情報記憶部1308は、プログラム製作装置10から送られてきた販売者向けパッケージ700のダミーモジュール名705を記憶しておく。
署名用鍵入力部1303は、プログラム製作装置10から送られてきた販売者向けパッケージ700のダミーモジュールに署名するための秘密鍵706とダミーモジュールの署名値を復号化するための公開鍵707を記憶しておく。
署名付与部1302は、モジュール情報記憶部1308より得られたダミーモジュール名を用いて本体モジュールとダミーモジュールを判断し、ダミーモジュールのハッシュ値を計算する。次に、署名付与部1302は、署名用鍵入力部1303より入力される秘密鍵(製作者秘密鍵)706を用いてダミーモジュールのハッシュ値を暗号化する。
また、署名付与部1302は、署名フォーマットを用いて、モジュールとハッシュ値、署名検証用の公開鍵書を一つのファイルにまとめる。さらに、署名付与部1302は、モジュール名とハッシュ値を対応付けて署名データ記憶部1305に出力し、ダミーモジュール用の秘密鍵706とダミーモジュール用の公開鍵707を合わせて出力する。
プログラム出力部1306は、署名付与部1302により署名がつけられたプログラムを出力する手段である。
この構成により、署名部130は、ダミーモジュールに署名をし、さらに署名を製作者の秘密鍵で暗号化する。
次に、実施の形態1にかかる送信部140について図9を用いて説明する。図9は、実施の形態1における送信部140の構成図である。
送信部140には、プログラム入力部1401が設けられている。プログラム入力部1401は、署名部130から送られてきたプログラムを入力する手段である。プログラム入力部1401は、入力したプログラムを送信データパッケージ化部1402に出力する。
送信データパッケージ化部1402は、プログラムを含む種々のデータをまとめて、利用者(プログラム利用装置150)に送信する利用者向けパッケージを作成する手段である。また、送信データパッケージ化部1402は、利用者向けパッケージ化されたプログラムのデータサイズもしくはCRCサイズをパッケージ情報記憶部1410に渡す。
なお、利用者向けパッケージについては、後で詳述する。
パッケージデータ入力部1408は、製作者、つまりプログラム製作装置10から送られてきた販売者向けパッケージ700を入力する。
暗号鍵生成部1405は、通信用の暗号鍵を生成する手段である。暗号鍵生成部1405は、販売者と利用者で、つまりプログラム配信装置70とプログラム利用装置150の間でパッケージをやりとりするために使用される暗号鍵を生成する。
検査プログラム入力部1412は、透かし挿入部40で挿入された透かしを検査するための検査プログラムを入力する手段である。
暗号化部1407は、暗号鍵生成部1405により生成された通信用の暗号鍵を用いて、パッケージ化されたプログラムと、検査プログラム入力部1412により入力された透かしの検査プログラムを暗号化する手段である。
プログラム送信部1406は、送信データパッケージ化部1402によりパッケージ化され、暗号化部1407により暗号化されたプログラムを、プログラム利用装置150に送信する手段である。
次に、送信データパッケージ化部1402が作成する利用者向けパッケージについて図10を用いて説明する。図10は、実施の形態1にかかる利用者向けパッケージの構成図である。
利用者向けパッケージ1000には、本体モジュール701と、ダミーモジュール702と、販売者向けパッケージ700に含まれる本体モジュールの署名値703と、署名部130の署名付与部1302が計算したダミーモジュールの署名値1004、販売者向けパッケージ700に含まれる本体モジュールの署名値703の公開鍵(製作者公開鍵)704と、ダミーモジュールの署名値1004の公開鍵(製作者公開鍵)707と、インストールプログラム709と、から構成されている。
また、パッケージ化の例としては、jarファイルやtarファイルなどが考えられ、パッケージ化したファイルは圧縮してもよい。
また、プログラム送信部1406は、利用者向けパッケージ1000と共に検査プログラム708をプログラム利用装置150に送信する。
次に、実施の形態1にかかる受信モジュール検査部190について図11を用いて説明する。図11は、実施の形態1における受信モジュール検査部190の構成図である。
受信モジュール検査部190には、プログラム入力部1901が設けられている。プログラム入力部1901は、受信部170から送られてきた、各モジュールの検査と結合を行うプログラムを入力する手段である。プログラム入力部1901は、プログラムを受信パッケージ検査部1902に出力する。
パッケージ情報記憶部1903は、販売者(プログラム配信装置70)より受信したパッケージのサイズもしくはCRCサイズを記憶する手段である。パッケージ情報記憶部1903は、パッケージのサイズを予めプログラム配信装置70から取得しておく。
受信パッケージ検査部1902は、販売者(プログラム配信装置70)より受信したパッケージが完全なものか判断する手段である。具体的には、受信パッケージ検査部1902は、パッケージ情報記憶部1903より得られたパッケージのサイズもしくはCRCサイズと、受信したパッケージのサイズが一致しているか検査する。そして、受信パッケージ検査部1902は、パッケージ情報記憶部1903より得られたパッケージのサイズもしくはCRCサイズと、受信したパッケージのサイズが一致する場合には、プログラムを署名検査部1904に出力し、一致しなかった場合には、受信したパッケージを破棄する。
署名検査部1904は、受信したすべてのモジュールの署名が正しいか検査するための手段で、受信したモジュール毎のハッシュ値を計算する。次に、署名検査部1904は、利用者向けパッケージ1000に記述された対応するモジュールの署名値(ハッシュ値)703、1004を、利用者向けパッケージ1000に付与された本体モジュールの公開鍵704とダミーモジュールの署名値1004を復号化するための公開鍵707を用いて復号化する。そして、署名検査部1904は、計算した署名値と、モジュールに付与された署名値と比較し、一致する場合にはプログラムをモジュール結合部1905に出力し、一致しない場合には販売者から受信したモジュールをすべて破棄する。
モジュール結合部1905は、販売者より受信したすべてのモジュールを一つに結合し、元のプログラムを生成する手段である。
検査プログラム入力部1906は、販売者、つまりプログラム配信装置70より獲得した透かしの検査プログラムを入力する手段である。
端末情報入力部1908は、プログラム利用装置150の端末ID(利用者ID)を入力する手段である。
透かし検査部1907は、結合されたプログラムの透かしを抽出し、端末IDと一致しているかを判定するための手段である。
具体的には、透かし検査部1907は、検査プログラム入力部1906により入力された検査プログラムを用いて、モジュール結合部1905で生成されたプログラムの透かしを抽出し、端末情報入力部1908により入力された端末IDと比較する。そして、透かし検査部1907は、モジュール結合部1905で生成されたプログラムの透かしと端末情報入力部1908により入力された端末IDとが一致する場合には、プログラムをプログラム出力部1909に出力し、一致しない場合には生成したプログラムを破棄する。
プログラム出力部1909は、すべての検査を通過したプログラムを出力する手段である。
この構成により、受信モジュール検査部190は、本体モジュールの署名値とダミーモジュールの署名値を用いてプログラムが正式か否かを判断する。また、受信モジュール検査部190は、透かしを用いてもプログラムが正式か否かを判断する。
なお、プログラム配信装置70からプログラム利用装置150に、検査プログラムがプログラムに一体となって付加された状態で送れてくる形態であっても良い。
図12に透かしの検査プログラムが一体となって付加されたプログラム例2001を示す。
この場合の受信モジュール検査部を図13に示す。この場合の受信モジュール検査部230には、検査プログラム入力部1906と端末情報入力部1908が無い構成になっている。
実行部210でプログラムが実行されると、検査プログラム2002が最初に実行され、本体プログラム2003に挿入された透かしの抽出と端末IDとの比較が行われ、透かしと端末IDが一致した場合に、本体プログラム2003の実行が開始される。
このようにして、透かしの検査プログラムが付加されているプログラムを動作させることができる。
次に、製作者のプログラム製作装置10で作成されたプログラムが販売者のプログラム配信装置70に送信されて、さらに利用者のプログラム利用装置150にダウンロードされるときの動作を図14〜図16を用いて説明する。
図14は、実施の形態1におけるプログラム製作装置10の動作を示すフローチャートである。
まず、プログラム製作装置10は、作成してあったN−1個のモジュールからなるプログラムを入力し、蓄積部20に保存する(ステップ1401)。
次に、プログラム製作装置10は、プログラム構造変換部30のプログラム入力部301が、蓄積部20に保存しておいたプログラムを入力する。次に、プログラム構造変換部30のダミーモジュール追加部305が、ダミーモジュール入力部303から販売者が利用者IDを挿入するためのダミーモジュールを入力する。そして、ダミーモジュール追加部305が、入力したダミーモジュールを1個、ステップ1401において保存しておいたプログラムに追加する(ステップ1402)。また、ダミーモジュール追加部305は、追加したダミーモジュール名をダミー情報記憶部304に渡す。
その後、プログラム構造変換部30は、プログラム分割部302において、ステップ1402においてダミーモジュールを追加したプログラムを、ダミーモジュールを含むN個のモジュールに分割する(ステップ1403)。また、プログラム分割部302は、モジュールの分割数を分割情報記憶部306に出力する。
そして、プログラム出力部307が、ステップ1403において、分割したモジュールを透かし挿入部40に出力する。
次に、透かし挿入部40は、プログラム入力部401において、プログラム構造変換部30から出力されたモジュールを入力する。
次に、透かし挿入部40は、挿入部402において、モジュール情報記憶部408を参照し、ダミーモジュールに関する情報を取得する。次に、挿入部402は、取得したダミーモジュールに関する情報を用いて、モジュールの番号iが1のモジュールから(ステップ1404)、Nのモジュールまで(ステップ1405)、つまりすべてのモジュールに対して、モジュールがダミーモジュールであるか判定を行う(ステップ1406)。
そして、ステップ1406においてモジュールがダミーモジュールでないと判断すると、挿入部402は、ID情報生成部404が生成した販売者IDから透かしを生成し、モジュールに挿入する(ステップ1407)。また、挿入部402は、透かしを挿入したモジュール名を透かし情報記憶部405に出力する。
そして、プログラム製作装置10は、iをインクリメントして(ステップ1408)、ステップ1405に戻る。
また、ステップ1406においてモジュールがダミーモジュールであると判断した場合は、モジュールに対して透かし挿入部40による透かし挿入は行わずに、プログラム出力部406を介して、署名部50に送る。そして、プログラム製作装置10は、iをインクリメントして(ステップ1408)、ステップ1405に戻る。
そして、すべてのモジュールに上記の処理を行ったら(ステップ1405)、挿入部402は、透かしを挿入したモジュール(本体モジュール)をプログラム出力部406に出力し、プログラム出力部406が署名部50に送る。
そして、署名部50は、プログラム入力部501より透かしを挿入したモジュールを入力し、署名付与部502に送る。
署名付与部502は、透かしを挿入したモジュール(本体モジュール)のハッシュ値を計算し、これを電子署名として付与する(ステップ1409)。
次に、署名付与部502は、署名用鍵入力部503より秘密鍵を入力し、付与したハッシュ値を暗号化する。
次に、署名付与部502は、署名および透かしが付与されたモジュール(本体モジュール)を、プログラム出力部506を介して、送信部60に送る。
最後に送信部60がプログラム入力部601からモジュールを入力し、送信データパッケージ化部602が、販売者向けパッケージの作成を行い、暗号化部607に送る。
次に、暗号化部607が、プログラム製作装置10とプログラム配信装置70との間でパッケージをやりとりするために使用される暗号鍵を用いてパッケージの暗号化と(ステップ1410)、検査プログラム入力部608から入力された検査プログラムの暗号化を行う(ステップ1411)。そして、プログラム送信部606は、販売者に販売者向けパッケージ700および検査プログラム708を送信する(ステップ1412)。
また、販売者向けパッケージ700には、N−1個の本体モジュール701と、1個のダミーモジュール702、N−1個の本体モジュール701に対応する署名値703、暗号化した署名値を復号化するための公開鍵704、ダミーモジュール名705、販売者がダミーモジュールに署名するための秘密鍵706と対応する公開鍵707、インストールプログラム709を入れる。
なお、公開鍵を伝送路から別途入手できる場合には、証明書は必ずしも送らなくてもよい。
また、署名と各モジュールは、XML署名などのフォーマット(署名フォーマット)などを用いて対応付けを行う。XML署名とは、署名対象、署名アルゴリズムや署名値および証明書などをXMLの文法で統一して表現できるものである。
このように、プログラム製作装置10は、販売者が自由に使えるダミーモジュールと、透かしおよび電子署名を挿入した本体モジュールと、をパッケージ化した販売者向けパッケージを販売者に送信する。
これにより、販売者は、ダミーモジュールに利用者を特定するIDなどを挿入することができる。
また、本体モジュールには、電子署名が付与されているので、販売者は本体モジュールを改竄することができない。
また、販売者向けパッケージ700を、プログラム製作装置10とプログラム配布装置70との間で決めた暗号鍵により暗号化するので、正規の販売者以外が販売者パッケージ700を改竄することも防げる。
次に、販売者側のプログラム配信装置70で行われる動作について図15を用いて説明する。図15は、販売者側のプログラム配信装置70の動作に関するフローチャートである。
プログラム配信装置70は、受信部90において、製作者のプログラム製作装置10から送られた販売者向けパッケージを受けとり、復号化して蓄積部110に保存する(ステップ1501)。
次に、プログラム配信装置70は、要求受信部100により、利用者からダウンロードの要求を受け付け、受け付けた要求がパッケージに対するダウンロード要求かを判断する(ステップ1502)。
要求がパッケージに対するダウンロード要求でなければ、検査プログラムに対する要求であるので、送信部140は、暗号化部1407において、暗号鍵生成部1405で生成された、プログラム配信装置70とプログラム利用装置150の間でパッケージをやりとりするために使用される暗号鍵を用いて、検査プログラムを暗号化して、プログラム送信部1406から利用者のプログラム利用装置150に送信する(ステップ1512)。
一方、ステップ1502において、要求がパッケージに対する要求であれば、まず、透かし挿入部120のプログラム入力部1201が蓄積部110から販売者パッケージを入力する。次に、透かし挿入部120の挿入部1202が入力した、販売者パッケージのパッケージ化を解きN個のモジュールを取り出す(ステップ1503)。
次に、挿入部1202は、モジュール情報記憶部1208を参照し、ダミーモジュールに関する情報を取り出す。そして、挿入部1202は、取り出したダミーモジュールに関する情報を用いて、取り出したN個のモジュールについて、モジュール番号iが1から(ステップ1504)、Nまで変化させ(ステップ1505)、各モジュールがダミーモジュールであるか検査を行う(ステップ1506)。
そして、モジュールがダミーモジュールである場合には、挿入部1202は、ID情報生成部1204から利用者IDを取り出し、ダミーモジュールに利用者IDを用いた透かしを挿入する(ステップ1507)。そして、挿入部1202は、透かしを挿入したモジュールをプログラム出力部1206に送り、プログラム出力部1206が署名部130に送る。
また、挿入部1202は、透かしを挿入したモジュール名を透かし情報記憶部1205に出力する。
次に、署名部130は、送られてきたモジュールをプログラム入力部1301において入力する。次に、署名部130は、署名付与部1302において、ダミーモジュールのハッシュ値を計算する。次に、署名付与部1302は、計算したハッシュ値を、署名用鍵入力部1303から入力した、プログラム製作装置10から送られてきた販売者向けパッケージ700のダミーモジュールに署名するための秘密鍵(製作者秘密鍵)706を用いて暗号化する。次に、署名付与部1302は、暗号化した電子署名をダミーモジュールにつけ、プログラム出力部1306に送る(ステップ1508)。そして、プログラム出力部1306は、電子署名をつけたダミーモジュールを送信部140に送る。
最後に、プログラム配信装置70は、iをインクリメントして(ステップ1509)、ステップ1505に戻る。
また、ステップ1506において、モジュールがダミーモジュールでない場合には、プログラム配信装置70は、利用者IDの挿入と署名は行わず、送信部140に送り、iをインクリメントしてステップ1505に戻る。
そして、プログラム配信装置70は、すべてのモジュールについて上記の処理を行う。
次に、送信部140は、プログラム入力部1401において、プログラム出力部1306より送られたモジュールを入力し、送信データパッケージ化部1402に送る。
送信データパッケージ化部1402は、利用者向けパッケージを作成し、暗号化部1407に送る。
暗号化部1407は、暗号鍵生成部1405により生成された通信用の暗号鍵を用いて、パッケージ化された利用者向けパッケージ1000を暗号化して(ステップ1510)、プログラム送信部1406に送る。そして、プログラム送信部1406は、暗号化したパッケージをプログラム利用装置150に送信する(ステップ1511)。
また、暗号化部1407は、利用者向けパッケージ1000に、N−1個の本体モジュール701と、1個のダミーモジュール702と、N−1個の本体モジュールの署名値(ハッシュ値)703と、ダミーモジュールの署名値1004、本体モジュールの署名値703の公開鍵704と、ダミーモジュールの署名値1004に使用する公開鍵707と、インストールプログラム709を入れる。
なお、公開鍵が伝送路から別途入手できる場合には、鍵の証明書は必ずしも送らなくてもよい。
また、ダミーモジュールと署名の対応付けは、販売者向けパッケージと同じように、署名フォーマットを利用して行う。
このように、プログラム配布装置70は、ダミーモジュールに利用者を特定するIDなどを挿入することができる。これにより、利用者が、プログラムの不正利用を防止できる。
また、ダミーモジュールには、電子署名が付与されているので、ダミーモジュールを改竄することができない。さらに、ダミーモジュールに付与された電子署名は、製作者の秘密鍵を用いて暗号化されているので、利用者は復号化に使用される公開鍵の違いに基づいて自身のIDの挿入されているダミーモジュールを特定できなくなる。この結果、利用者が、ダミーモジュールを改竄することを確実に防止できる。
また、利用者向けパッケージ1000を、プログラム配布装置70とプログラム利用装置150との間で決めた暗号鍵により暗号化するので、正規の利用者以外が利用者パッケージ1000を改竄することも防げる。
次に、利用者110で行われる動作について、図16を用いて説明する。図16は、プログラム利用装置150の動作に関するフローチャートである。
まず、プログラム利用装置150は、要求送信部160により、プログラムの送信要求と自分の端末IDを販売者に送信する(ステップ1601)。
そして、プログラム利用装置150は、受信部170により、プログラム配信装置70から送られた利用者向けパッケージを受信し、復号化して蓄積部180に保存する(ステップ1602)。
次に、受信モジュール検査部190が、プログラム入力部1901において、蓄積部180に蓄積されたパッケージを入力する。
次に、受信モジュール検査部190は、受信パッケージ検査部1902において、パッケージ情報記憶部1903よりパッケージのサイズもしくはCRCサイズを取得する。そして、受信パッケージ検査部1902は、パッケージ情報記憶部1903から取得したパッケージのサイズもしくはCRCサイズと、受信したパッケージのサイズが一致しているか検査することにより、入力したパッケージがパケットロスなどにより不完全なデータとなっていないかを検査する(ステップ1603)。
そして、ステップ1603において受信したパッケージが不完全なデータであった場合には、受信パッケージ検査部1902は、利用者に対してエラー表示を行い(ステップ1615)、受信したパッケージを破棄する(ステップ1616)。
一方、そして、ステップ1603において完全なデータが受信されていれば、受信パッケージ検査部1902は、受信したパッケージのパッケージ化を解きN個のモジュールを取り出す(ステップ1604)。そして、受信パッケージ検査部1902は、N個のモジュールを署名検査部1904に送る。
次に、署名検査部1904は、N個のモジュールを取り出し、各モジュールについて番号iが1から(ステップ1605)、Nまで(ステップ1606)、モジュールの電子署名を計算する(ステップ1607)。次に、署名検査部1904は、各モジュールに付与されている電子署名を、利用者パッケージ1000に付与されている公開鍵704、707を用いて復号化する。そして、署名検査部1904は、各モジュールに付与されている電子署名と計算した電子署名を比較することで、各モジュールが正規のものか検査する(ステップ1608)。
署名が正しい場合には、署名検査部1904は、モジュールをモジュール結合部1905に送る。そして、検査部1904は、iをインクリメントして(ステップ1609)、ステップ1606に戻る。
また、署名が正しくなかった場合には、署名検査部1904は、エラーの表示を行い(ステップ1615)、受信したパッケージを破棄する(ステップ1616)。
次に、モジュール結合部1905は、署名の検査をすべてのモジュールが通過したら、モジュールを結合してプログラムを生成する(ステップ1610)。モジュール結合部1905は、プログラムを生成したら、プログラムを透かし検査部1907に送る。
透かし検査部1907は、透かしの検査プログラムをプログラム配信装置70に要求し、検査プログラム入力部1906において受信する(ステップ1611)。
透かし検査部1907は、受信した検査プログラムを用いて生成したプログラムの透かしを抽出し(ステップ1612)、端末情報入力部1908から入力した端末IDと一致するかを検査する(ステップ1613)。
そして、透かしと端末IDが一致したら、透かし検査部1907は、プログラムを、プログラム出力部1909を介して、一度蓄積部200に保存する。
そして、実行部210は、蓄積部200に蓄積したプログラムに対して、インストールプログラム1002を用いることで、プログラムをインストールし、実行する(ステップ1614)。
一方、IDが一致しなかった場合には、プログラムを保存せずに、エラー表示を行い(ステップ1615)、受信したパッケージを破棄する(ステップ1616)。
このように、プログラム利用装置150は、モジュールに付与された電子署名と計算した電子署名とを比較することにより、受信したプログラムの正当性を判断できる。
また、プログラム利用装置150は、ダミーモジュールに挿入された透かしと、自身のID情報を比較することにより、受信したプログラムの正当性を判断できる。
また、プログラム利用装置150は、利用者向けパッケージ1000から本体モジュールの署名値の公開鍵704と、ダミーモジュールの署名値の公開鍵707を取得し、これらを用いて署名値を復号できる。また、正規の製作者の秘密鍵を用いず暗号化された署名値は復号化できないので、これにより、違法なプログラムを認識することもできる。
次に、プログラムが不正流出した場合に、流出先を特定する構造について、図17を用いて説明する。
図17に示すように、プログラムが不正流出した際には、製作者は透かし取り出し装置220を用いて、流出先端末1701に流出したプログラムから透かしを抽出し、流出元の販売者のプログラム配信装置70を特定することが可能となる。
次に、実施の形態1にかかる透かし取り出し装置220について図18を用いて説明する。図18は、実施の形態1における透かし取り出し装置220の構成図である。
プログラム入力部2201は、透かしが挿入されたプログラムを入力する手段である。プログラム入力部2201は、プログラムを透かし検出部2202に出力する。
ID情報記憶部2204は、透かし検出部2202より得られるID情報から、配布先の情報を生成する手段である。
ID情報記憶部2204は、ID情報がデータベースのデータのIDである場合には、IDからデータを取り出すことで、配布先の情報を取得する。また、ID情報記憶部2204は、ID情報が配布先の情報の暗号化データである場合には、復号して配布先の情報を取得する。
透かし情報記憶部2205は、透かしが挿入されているモジュール名を記憶している手段である。これらの情報は、透かし挿入部40の透かし情報記憶部405より得る。
透かし検出部2202は、透かし情報記憶部2205より得られるモジュール名からそのモジュールに挿入された透かしを抽出する。そして、透かし検出部2202は、取り出した透かしからID情報を生成し、出力部2203に渡す。
出力部2203は、ID情報記憶部2204を参照し、透かし検出部2202が生成した、ID情報から配布先の情報を抽出し、出力する手段である。
このようにして、透かし取り出し装置220は、不正にプログラムを配布した配布元の情報を出力する。
なお、本発明は、プログラム利用装置150が受信するプログラムに透かしの検査プログラムが付加されている場合も動作可能である。
その場合、異なるのは送信部60および受信モジュール検査部190の動作である。
送信部60では、検査プログラム入力部609による透かしの検査プログラムの入力は行われない。また、受信モジュール検査部190では、検査プログラム入力部1901、端末情報入力部1908および透かし検査部1907の動作は行われない。
次に、実施の形態1により生成されるプログラムについて図21を用いて説明する。
図21において、プログラム2900aは、蓄積部20に保存されている基本プログラムである。また、プログラム2900bは、基本プログラム2900aに販売者の透かし情報及びダミーメソッドを追加したプログラムである。プログラム2900cは、基本プログラム2900aをコンパイルしたプログラムで、2900dは、2900cに利用者の透かし情報を挿入したプログラムを示している。
まず、プログラム製作装置10において、プログラム構造変換部30のダミーモジュール追加部305が、ステップ1402でダミーメソッドをプログラム2900aに追加する(図中2901に示す部分)。また、このとき、assert法などを用いてダミーメソッドの呼び出し文をプログラム2900aに追加する(図中2902に示す部分)。
次に、透かし挿入部40の挿入部402が、ステップ1406において、それぞれのメソッドがダミーメソッドであるかを判断し、ダミーメソッドでない場合には、販売者のID情報(1122)より生成された透かし情報S1(11)及びS2(22)を挿入する(図中2903に示す部分)。そして、販売者の透かし情報を挿入した後で、ステップ1409において、プログラムをコンパイルし、ダミーメソッド以外の部分を用いて電子署名を付与する。なお、ここでは簡単のために、コンパイルしたあとのプログラムを逆アセンブルしたものを用いて説明する。
次に、プログラム配信装置70において、透かし挿入部120の挿入部1202が、ステップ1506で、それぞれのメソッドがダミーメソッドであるかを判断し、ダミーメソッドの場合には、利用者のID情報((C)11)より生成した透かし情報U1(100111 001101 101000 001011)を挿入し(図中2904に示す部分)、ステップ1508において、ダミーメソッドに対して電子署名を付与する。
次に、プログラム利用装置150において、受信モジュール検査部190の署名検査部1904が、ステップ1607で、プログラム製作装置10より配布されたインストールプログラムを用いて、プログラム2900dに付与された電子署名を検証する。また、受信モジュール検査部190の透かし検査部1907が、ステップ1612で、プログラム製作装置10より配布された検査プログラムを用いてダミーメソッドM2より透かしを抽出し、ステップ1613で端末IDと比較する。ステップ1607とステップ1613の検証に通過した場合に、プログラム利用装置70は、プログラム2900dをインストールして実行する。
なお、この例ではダミーモジュールとしてメソッドを追加した場合について説明したが、クラスを追加した場合にも適用可能である。
以上説明したように、実施の形態1によれば、本体モジュールとは別にダミーモジュールを追加することにより、販売者がダミーモジュールに利用者IDを挿入することができる。また、本体モジュールに署名を付与することで、販売者にプログラムの根幹にかかわる重要な部分である本体モジュールを操作させることを防止できる。これにより、販売者によるプログラムの改竄を防止することができる。
さらに、実施の形態1によれば、本体モジュールに付与された電子署名は、製作者の本体モジュール用の秘密鍵を用いて暗号化されていて、かつ販売者は本体モジュール用の製作者の秘密鍵持っていない。これにより、仮に販売者が電子署名を公開鍵704で復号し改竄したとしても、製作者の秘密鍵で再度暗号化できない。よって、利用者が、本体モジュールの復号化をできない。この結果、販売者が、本体モジュールを改竄することを確実に防止できる。
また、実施の形態1によれば、仮にプログラムの不正流出があった場合でも、本体モジュールに販売者IDが挿入されているため、流出元となった販売者を特定することができる。これにより、販売者によるプログラムの改竄を防止できる。
また、実施の形態1によれば、プログラム部分を複数の本体モジュールに分割するので、ダミーモジュールを含めた全モジュール数が増加することになり、利用者は自身のIDの挿入されているダミーモジュールを多数のモジュールから特定することになるため非常に困難となる。また、モジュールとダミーモジュールとのサイズの差が小さくなり、利用者はモジュールのサイズに基づいて自身のIDの挿入されているダミーモジュールを特定できなくなる。したがって、利用者によるプログラムの改竄を防止することができる。
また、実施の形態1によれば、販売者向けパッケージ700にダミーモジュールの署名用の秘密鍵を送ることにより、販売者がダミーモジュールに、製作者の秘密鍵を使用して電子署名を付与することが可能となる。販売者が自分自身の秘密鍵でダミーモジュールに電子署名を付与した場合には、本体モジュール用の秘密鍵とダミーモジュール用に用いる秘密鍵の証明書の発行先が異なる。このために、利用者にダミーモジュールの部分を容易に特定され、透かし挿入箇所を容易に特定されてしまう。しかし、実施の形態1では、利用者が署名の検査に使う証明書は、すべて製作者に対して発行されたものとなるため、証明書の発行先による透かし挿入箇所の特定が不可能となり、利用者による透かしの削除を防止することができる。
なお、プログラム製作装置10、プログラム配信装置70、およびプログラム利用装置150の動作をプログラムにし、記憶媒体に格納し、汎用のコンピュータが記憶媒体からプログラムをダウンロードして実行させる形態であっても良い。
(実施の形態2)
本発明の実施の形態2にかかるプログラム流通システムについて添付図面を用いて説明する。本発明の実施の形態2は、利用者が複数の販売者よりプログラムの別々のモジュールをダウンロードする場合に対応するものである。図19は、実施の形態2にかかるプログラム流通システムの構成図である。
実施の形態2におけるプログラム流通システムと実施の形態1の違いは、製作者が複数の販売者にプログラムを分割して送り、複数の販売者を経由してきた分割されたプログラムを利用者が受信する点である。
具体的には、製作者側のプログラム製作装置1801は、実施の形態1のプログラム製作装置10と、プログラム構造変換部1802と透かし挿入部1802の動作が違う。また、利用者側のプログラム利用装置1805は、実施の形態1のプログラム利用装置150と、受信モジュール検査部1804の動作が違う。
次に、実施の形態2におけるプログラム構造変換部1802について説明する。実施の形態2におけるプログラム構造変換部1802と、実施の形態1におけるプログラム構造変換部30との違いは、ダミーモジュール追加部305の動作である。
実施の形態2におけるダミーモジュール追加部305は、ダミーモジュール入力部303より入力された2個のダミーモジュールをプログラムに追加する手段である。ダミーモジュール追加部305は、それぞれ異なる本体モジュールに呼び出されるようにassert法を用いてダミーモジュールを追加する。
なお、プログラム構造変換部1802のダミーモジュール追加部305以外の動作は、実施の形態1におけるプログラム構造変換部30と同じであるので、説明は省略する。
次に、実施の形態2にかかる透かし挿入部1803について説明する。実施の形態2における透かし挿入部1803と、実施の形態1における透かし挿入部40との違いは、挿入部402の動作である。
実施の形態2における挿入部402は、ID情報生成部404により生成されるID情報からプログラムに実際に挿入する透かしを生成し、モジュール情報記憶部408より入力されるダミーモジュール名以外のモジュール(本体モジュール)の、一部に販売者Aを特定するための販売者IDを挿入し、別の一部には販売者Bを特定するための販売者IDを挿入する手段である。
なお、実施の形態2における透かし挿入部1803のその他の部分は、実施の形態1における透かし挿入部40と同じであるので説明は省略する。
次に、受信モジュール検査部1804について、説明する。
受信モジュール検査部1804は、販売者Aおよび販売者Bから受信したパッケージを検査し、販売者Aおよび販売者Bのパッケージをそれぞれ解き、合計N個のプログラムを取り出す。
次に、製作者のプログラム製作装置1801で作成されたプログラムが販売者Aのプログラム配信装置70aおよび販売者Bのプログラム配信装置70bに送信されて、さらに利用者のプログラム利用装置150にダウンロードされるときの動作について説明する。
まず、プログラム製作装置1801の処理について図20を用いて説明する。図20は、実施の形態2におけるプログラム製作装置1801で行われる動作を示すフローチャートである。
まず、プログラム製作装置1801は、N−2個のモジュールからなるプログラムを作成し蓄積部20に保存する(ステップ2001)。次に、プログラム構造変換部1802が、利用者IDを挿入するためのダミーモジュールを2個プログラムに追加し(ステップ2002)、その後、プログラムを、ダミーモジュールを含むN個のモジュールに分割する(ステップ2003)。
なお、図19では、販売者が2つの場合を示しているが、3つ以上でもよく、その場合にはその販売者数に対応する数のダミーモジュールを追加する。
次に、透かし挿入部1803が、モジュール番号iを1から(ステップ2004)、jまで変化させ(ステップ2005)、それぞれの番号のモジュールがダミーモジュールかどうか判断する(ステップ2006)。
ダミーモジュールでない場合には、透かし挿入部1803は、販売者Aを特定する販売者IDを挿入する(ステップ2007)。次に、署名部50が、販売者IDを挿入したダミーモジュールに電子署名をつける(ステップ2008)。そして、プログラム製作装置1801は、iをインクリメントして(ステップ2009)、ステップ2005に戻る。
また、ステップ2006で、ダミーモジュールであると判断したときは、プログラム製作装置1801は、透かし挿入と電子署名を行わず、iをインクリメントしてステップ2005に戻る。
次に、透かし挿入部1803が、iをj+1からNまで変化させ(ステップ2010)、それぞれがダミーモジュールかどうかの判断をする(ステップ2011)。
そして、ダミーモジュールでない場合には、透かし挿入部1803が、販売者Bを特定するIDを挿入し(ステップ2012)、署名部50により電子署名をつける(ステップ2013)。そして、プログラム製作装置1801は、iをインクリメントして(ステップ2014)、ステップ2010に戻る。
また、ステップ2011でダミーモジュールであると判断した場合は、プログラム製作装置1801は、透かし挿入と電子署名は行わず、iをインクリメントしてステップ2010に戻る。
最後に、送信部60により、販売者Aと販売者Bに送るモジュールをそれぞれパッケージ化し暗号化して(ステップ2015)、販売者Aのプログラム配信装置70aおよび販売者Bのプログラム配信装置70bに送信する(ステップ2016)。
次に、実施の形態2におけるプログラム配信装置70aおよびプログラム配信装置70bの動作について説明する。実施の形態2におけるプログラム配信装置70aおよびプログラム配信装置70bの動作と、実施の形態1におけるプログラム配信装置70の動作との違いは、ステップ1503とステップ1505の動作である。
実施の形態1におけるステップ1503は、実施の形態2では、取り出すモジュール数が販売者Aのプログラム配信装置70aではj個で、販売者Bのプログラム配信装置70bではN−j個となる。
また、実施の形態1におけるステップ1505は、実施の形態2では、販売者Aのプログラム配信装置70aがiを1からjまで変化させ、販売者Bのプログラム配信装置70bはiをj+1からNまで変化させる。
なお、実施の形態1におけるステップ1503およびステップ1505以外の各ステップは、実施の形態2において同様の動作をするので、説明を省略する。
次に、実施の形態2における利用者のプログラム利用装置1805の動作について説明する。実施の形態2におけるプログラム利用装置1805の動作と、実施の形態1におけるプログラム利用装置150の動作との違いは、実施の形態1におけるステップ1601からステップ1604までの動作である。
実施の形態1におけるステップ1601は、実施の形態2においては、販売者Aのプログラム配信装置70aおよび販売者Bのプログラム配信装置70bに対して端末IDを送信する。
次に、実施の形態1におけるステップ1602は、実施の形態2では、販売者Aのプログラム配信装置70aおよび販売者Bのプログラム配信装置70bからパッケージを受信し、それぞれを復号化して保存する動作となる。
次に、ステップ1603は、実施の形態2では、販売者Aのプログラム配信装置70aおよび販売者Bのプログラム配信装置70bから受信したパッケージを検査する動作となる。
そして、ステップ1604は、販売者Aのプログラム配信装置70aおよび販売者Bのプログラム配信装置70bのパッケージをそれぞれ解き、合計N個のプログラムを取り出す動作となる。
実施の形態1におけるステップ1604以降の各ステップは、実施の形態2で同じ動作をするので説明を省略する。
以上説明したように、実施の形態2によれば、販売者Aおよび販売者Bにはプログラムの一部を送信することになり、販売者Aおよび販売者Bが完全なプログラムを持つことができなくなる。これにより、販売者Aおよび販売者Bが利用者を偽った不正流出を防止することができる。