(57)【要約】  アプリケーションソフトウェアの保護方法は、ネットワークを介してサーバから送付される第１のプログラム（Ｘ）をクライアント（Ｂ）上で起動することで実行されるアプリケーションソフトウェアの保護方法であって、クライアント上で実行されたアプリケーションソフトウェアの実行結果（Ｓ）を、サーバから通知される分散配置情報（Ｃ）に従って複数の中間データ（ｓ１、…ｓｎ）に分割し、該複数の中間データをサーバとクライアントとに分散配置し、分散配置された複数の中間データの夫々のデータ長及び配置位置情報を含む通知情報（Ｖ）をサーバへ送信し、サーバにおいて、通知情報に基づき、分散配置された複数の中間データをアプリケーションソフトウェアの実行結果の元の順番に並べ替え、実行結果を生成する第２のプログラムを生成し、クライアントに送信する。
2010067846.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介してサーバから送付される第１のプログラムをクライアント上で起動することで実行されるアプリケーションソフトウェアの保護方法であって、
前記クライアント上で実行された前記アプリケーションソフトウェアの実行結果を、前記サーバから通知される分散配置情報に従って複数の中間データに分割し、該複数の中間データを前記サーバと前記クライアントとに分散配置する分散配置工程と、
分散配置された前記複数の中間データの夫々のデータ長及び配置位置情報を含む通知情報を前記サーバへ送信する第１送信工程と、
前記通知情報に基づき、分散配置された前記複数の中間データを前記アプリケーションソフトウェアの実行結果の元の順番に並べ替え、実行結果を生成する第２のプログラムを前記サーバで生成するプログラム生成工程と、
前記第２のプログラムを前記クライアントに送信する第２送信工程と
を備えることを特徴とするアプリケーションソフトウェアの保護方法。
【請求項２】
前記分散配置情報を、前記クライアントの信頼度情報、及び前記クライアントから通知される希望秘匿度の情報に基づいて前記サーバで生成し、該生成した分散配置情報を前記クライアントに送付する分散配置情報通知工程を含むことを特徴とする請求項１に記載のアプリケーションソフトウェアの保護方法。
【請求項３】
前記プログラム生成工程は、前記通知情報が前記クライアントから送信された時刻が、前記クライアントを認証した時刻から一定時間内であるとき、前記第２のプログラムを生成することを特徴とする請求項１に記載のアプリケーションソフトウェアの保護方法。
【請求項４】
前記第２のプログラムは、前記クライアントで起動された前記第１のプログラムの終了を確認した後、分散配置された前記複数の中間データを前記アプリケーションソフトウェアの実行結果の元の順番に並べ替え、実行結果を生成することを特徴とする請求項１に記載のアプリケーションソフトウェアの保護方法。
【請求項５】
前記第１送信工程は、前記通知情報と共に、前記アプリケーションソフトウェアの実行結果の特性を示す特性情報を前記サーバへ送信し、
前記特性情報に基づいて決定される更新時刻に基づいて、前記第１のプログラム及び前記第２のプログラムを更新する第１更新工程を更に備えることを特徴とする請求項１に記載のアプリケーションソフトウェアの保護方法。
【請求項６】
前記アプリケーションソフトウェアの実行結果は、時系列のデータを有し、
前記分散配置工程は、前記複数の中間データの夫々に、前記アプリケーションソフトウェアの実行結果内での時系列に基づく時刻情報を埋め込み、
前記第１送信工程は、前記時刻情報を更に含む前記通知情報と、前記時刻情報を更に含む前記特性情報とを前記サーバへ送信し、
前記第１更新工程は、前記特性情報に含まれる前記時刻情報に基づいて前記更新時刻を決定することを特徴とする請求項５に記載のアプリケーションソフトウェアの保護方法。
【請求項７】
前記サーバは、前記特性情報に基づいて決定される更新時刻を示す情報が埋め込まれて生成される前記第１のプログラムを前記クライアントに送信し、
前記第１更新工程は、前記複数の中間データの夫々に埋め込まれた前記時刻情報と、前記第１のプログラムに埋め込まれている前記更新時刻を示す情報とを比較することで、前記第１のプログラムを更新する第２更新工程を含むことを特徴とする請求項６に記載のアプリケーションソフトウェアの保護方法。
【請求項８】
前記第１更新工程は、前記複数の中間データの夫々に埋め込まれた前記時刻情報と前記特性情報に基づいて決定される前記更新時刻とを比較することで、前記第２のプログラムを更新する第３更新工程を含むことを特徴とする請求項６に記載のアプリケーションソフトウェアの保護方法。
【請求項９】
前記サーバは、前記更新時刻に先立って、更新予定の前記第１のプログラム及び前記第２のプログラムを送信することを特徴とする請求項５に記載のアプリケーションソフトウェアの保護方法。
【請求項１０】
前記第１送信工程は、前記特性情報として、前記アプリケーションソフトウェアの実行結果における単位時間あたりの情報量を示す情報を含む特性情報を生成し、
前記第１更新工程は、前記特性情報に含まれる前記時刻情報及び前記情報量を示す情報に基づいて前記更新時刻を決定することを特徴とする請求項６に記載のアプリケーションソフトウェアの保護方法。
【請求項１１】
前記第１送信工程は、前記特性情報として、前記アプリケーションソフトウェアの実行結果における単位時間あたりの動作量を示す情報を含む特性情報をサーバへ送信し、
前記第１更新工程は、前記特性情報に含まれる前記時刻情報及び前記動作量を示す情報に基づいて前記更新時刻を決定することを特徴とする請求項６に記載のアプリケーションソフトウェアの保護方法。
【請求項１２】
前記クライアントは、前記第１のプログラムが実行される第１のクライアントと、前記第２のプログラムが実行される第２のクライアントを含み、
前記分散配置工程は、前記複数の中間データを前記サーバと前記第２のクライアントとに分散配置し、
前記第２送信工程は、前記第２のプログラムを前記第２のクライアントへ送信することを特徴とする請求項１から１１のいずれか一項に記載のアプリケーションソフトウェアの保護方法。
【請求項１３】
クライアントと、前記クライアント上で実行されるアプリケーションソフトウェアを含む第１のプログラムを、ネットワークを介して前記クライアントへ送信可能なサーバとを備え、
前記クライアントは、前記アプリケーションソフトウェアの実行結果を、前記サーバから通知される分散配置情報に従って複数の中間データに分割し、該複数の中間データを前記サーバと前記クライアントとに分散配置する分散配置手段と、
分散配置された前記複数の中間データの夫々のデータ長及び配置位置情報を含む通知情報を前記サーバへ送信する第１送信手段とを備え、
前記サーバは、前記通知情報に基づき、分散配置された前記複数の中間データを前記アプリケーションソフトウェアの実行結果の元の順番に並べ替え、実行結果を生成する第２のプログラムを生成するプログラム生成手段と、
前記第２のプログラムを前記クライアントに送信する第２送信手段とを備えることを特徴とするストリーム送受信システム。
【請求項１４】
前記クライアントは、前記第１のプログラム及び前記第２のプログラムを更新する更新手段を更に備え、
前記第１送信手段は、前記通知情報と共に、前記アプリケーションソフトウェアの実行結果の特性を示す特性情報を前記サーバへ送信し、
前記更新手段は、前記特性情報に基づいて決定される更新時刻に基づいて、前記第１のプログラム及び前記第２のプログラムを更新することを特徴とする請求項１３に記載のストリーム送受信システム。
【請求項１５】
前記クライアントは、前記第１のプログラムを実行する第１のクライアントと、前記第２のプログラムを実行する第２のクライアントとを備え、
前記第１のクライアントは、前記分散配置手段と前記第１送信手段と前記更新手段とを備え、
前記第２のクライアントは、前記更新手段を備え、
前記第２送信手段は、前記第２のプログラムを前記第２のクライアントに送信することを特徴とする請求項１４に記載のストリーム送受信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションソフトウェアの保護方法及びサーバに関し、例えば、映像ストリームを作成するエンコード・アプリケーション等を含むプログラムをネットワーク経由でサーバからクライアントに送付し、クライアント側で実行されるアプリケーションソフトウェアの保護方法及びこのような保護方法を備えるストリーム送受信システムの技術分野に関する。
【背景技術】
【０００２】
ネットワークを介して送付されるアプリケーションソフトウェアを用いて、データの送受信などを行う送受信システムにおいては、クライアント側にアプリケーションソフトウェアが配置されるため、疑似サーバを設けるなどの手法により、アプリケーションソフトウェアがクライアント側で不正に実行される可能性が考えられる。【０００３】
このようなアプリケーションソフトウェアを不正な実行から保護する代表的な手法として、従来、サーバとクライアントとをネットワーク通信によりハンドシェイクさせ、クライアント側での当該プログラムの実行状況を逐一サーバで認識し得るようにし、クライアントがサーバから該アプリケーションソフトウェアの使用許可信号を受信してから所定期間のみ、当該アプリケーションソフトウェアを使用可能とする手法などが知られている。また、送受信されるデータを分割することで難読化させ、アプリケーションソフトウェアを不正な使用から保護する方法も知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−３４５６６２号公報
【特許文献２】特開２００２−５５７２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したように、クライアント側での操作内容がサーバ側に把握される構成では、クライアントとサーバとの間で詳細なデータの送受信が行われる。このような詳細なデータの送受信の中では、ユーザが所有するデータや詳細な操作内容などの情報が外部のサーバに公開されることがあり、例えば所有するデータの公開を避けたいとのユーザの要望には対応し切れないという問題がある。また、データを分割して送受信する方法では、データの分割及び結合のために処理内容が複雑となり、データの送受信におけるパフォーマンスが低下するという更なる技術的な問題に繋がる虞があった。一方で、単にデータを分割するのみでは比較的容易に元のデータの複合が可能であるため、得られる保護効果は十分とは言い切れない。【０００６】
また、特に送受信するデータとして映像データなどのストリームを扱う場合、比較的長い期間クライアント間の接続を維持する必要が生じることから、不正なアクセスなどの攻撃を受ける危険性が上昇する可能性もある。【０００７】
本発明は、アプリケーションソフトウェアを不正使用から保護する機能を有していないクライアントで実行されるアプリケーションソフトウェアに対して、擬似サーバを設置することによる成りすましなどによるアプリケーションソフトウェアの不正使用に対して、堅固な保護を可能にするアプリケーションソフトウェアの保護方法を提供することを課題とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、開示のアプリケーションソフトウェアの保護方法は、ネットワークを介してサーバから送付される第１のプログラムをクライアント上で起動することで実行されるアプリケーションソフトウェアの保護方法であって、前記クライアント上で実行された前記アプリケーションソフトウェアの実行結果を、前記サーバから通知される分散配置情報に従って複数の中間データに分割し、該複数の中間データを前記サーバと前記クライアントとに分散配置する分散配置工程と、分散配置された前記複数の中間データの夫々のデータ長及び配置位置情報を含む通知情報を前記サーバへ送信する第１送信工程と、前記通知情報に基づき、分散配置された前記複数の中間データを前記アプリケーションソフトウェアの実行結果の元の順番に並べ替え、実行結果を生成する第２のプログラムを前記サーバで生成するプログラム生成工程と、前記第２のプログラムを前記クライアントに送信する第２送信工程とを備える。【０００９】
上記課題を解決するために、開示のストリームの送受信システムは、クライアントと、前記クライアント上で実行されるアプリケーションソフトウェアを含む第１のプログラムを、ネットワークを介して前記クライアントへ送信可能なサーバとを備え、前記クライアントは、前記アプリケーションソフトウェアの実行結果を、前記サーバから通知される分散配置情報に従って複数の中間データに分割し、該複数の中間データを前記サーバと前記クライアントとに分散配置する分散配置手段と、分散配置された前記複数の中間データの夫々のデータ長及び配置位置情報を含む通知情報を前記サーバへ送信する第１送信手段とを備え、前記サーバは、前記通知情報に基づき、分散配置された前記複数の中間データを前記アプリケーションソフトウェアの実行結果の元の順番に並べ替え、実行結果を生成する第２のプログラムを生成するプログラム生成手段と、前記第２のプログラムを前記クライアントに送信する第２送信手段とを備える。
【発明の効果】
【００１０】
中間データの長さは、アプリケーションソフトウェアが適用される入力データに固有の情報であり、該入力データが同一でない限り、同一とはならない。従って、第２のプログラムは、特定の入力データに対してアプリケーションソフトウェアが実行された実行結果に対してのみ有効であり、該実行結果が分割され、分散配置された中間データを元の順番に並べ替え、元の実行結果を復元する。そのため、仮にユーザが疑似サーバを設置して、前回取得したアプリケーションソフトウェアを繰り返し使用しようとしても、入力データが前回と異なると、成りすましによる第２のプログラムでは、分散配置された中間データを元の順序に復元することが出来ない。【００１１】
即ち、入力データを複数の中間データに分割して分散配置する際に、入力データ毎に異なる分散配置を行い、入力データ毎に異なる第２のプログラムで元の順序に復元するため、１つの入力データに対してしかアプリケーションソフトウェアを有効に使用することが出来ず、該アプリケーションソフトウェアを不正使用から好適に保護することが出来る。
【図面の簡単な説明】
【００１２】
【図１】アプリケーションソフトウェアの保護の第１の動作例の処理フローを示す図である。
【図２】クライアント信頼度及び希望秘匿度に基づく処理の態様を示す表である。
【図３】分散配置情報のテーブルの例を示す表である。
【図４】中間データを並べ替えて分散配置する実施例を示す図である。
【図５】通知情報Ｖに含まれるヘッダ及びマクロブロック毎のデータ長及び配置位置情報の例を示す表である。
【図６】アプリケーションソフトウェアの保護の第２の動作例の処理フローを示す図である。
【図７】アプリケーションソフトウェアの保護の第２の動作例が実行されるデータ送受信システムの構成及び送受信データを概略的に示すブロック図である。
【図８】第２の動作例に係る第１のクライアントにおける各部の構成及び動作の例を示す概略図である。
【図９】第２の動作例に係るサーバにおける各部の構成及び動作の例を示す概略図である。
【図１０】第２の動作例に係る第２のクライアントにおける各部の構成及び動作の例を示す概略図である。
【図１１】第２の動作例に係るプログラムの更新の態様の例を示すタイミングチャートである。
【図１２】第２の動作例に係る中間データのサイズに基づく時刻情報の決定の態様の例を示す模式図である。
【図１３】第２の動作例に係る中間データの動き量に基づく時刻情報の決定の態様の例を示す模式図である。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【００１４】
（１）アプリケーションソフトウェアの保護の第１動作例
図１から図５を参照して、本実施形態に係るアプリケーションソフトウェアの保護の第１動作例の処理の流れについて説明する。
【００１５】
（１−１）処理フロー例
先ず、図１を参照して、実施形態に係るアプリケーションソフトウェアの保護動作の第１動作例について説明する。図１は、開示のアプリケーションソフトウェアの保護動作の実施形態における第１動作例の処理フローを示す図である。図１に示すように、該アプリケーションソフトウェアの保護動作の実施形態の第１動作例は、互いにネットワークで接続されるサーバＡとクライアントＢとを含むデータ送受信システムにおいて適用される。
【００１６】
入力データが入力されるクライアントＢは、使用を希望するエンコーダ等のアプリケーションソフトウェアを含むプログラムＸの送付を、サーバＡに要求する（ステップＳ１０１）。サーバＡは要求されたプログラムＸをクライアントＢに送付する（ステップＳ１０２）。クライアントＢは送付されたプログラムＸを起動する（ステップＳ１０３）。
【００１７】
プログラムＸが起動されると、プログラムＸによりクライアントＢとサーバＡとの間で認証処理を行い（ステップＳ１０４及びＳ１０５）、また、サーバＡはクライアントＢの認証を行った時刻をメモリに保存する。
【００１８】
クライアントＢは、プログラムＸにより希望秘匿度ｂをサーバＡに送信する（ステップＳ１０６）。サーバＡは、クライアントＢの信頼度ａと、クライアントＢから希望秘匿度ｂとから、分散配置情報Ｃを生成し、該分散配置情報ＣをクライアントＢに送信する（ステップＳ１０７）。クライアントＢではプログラムＸにより、分散配置情報Ｃを受信（ステップＳ１０８）した後、エンコーダ等のアプリケーションソフトウェアを入力データに対して実行する（ステップＳ１０９）。
【００１９】
クライアントＢは、プログラムＸにより、アプリケーションソフトウェア実行後の実行結果Ｓを、分散配置情報Ｃに従い、複数の中間データｓ１、…ｓｎに分割し（ステップＳ１１０）、クライアントＢ内及びサーバＡ内の記憶部に分散させて配置する（ステップＳ１１１）。また、クライアントＢは、プログラムＸの実行完了の通知と共に、各中間データｓ１、…ｓｎのデータ長Ｌ及び配置位置情報を含む通知情報ＶをサーバＡに送信する（ステップＳ１１２）。
【００２０】
サーバＡは、通知情報ＶがクライアントＢから送信された時刻が、クライアントＢを認証した時刻から一定時間内であるとき、各中間データｓ１、…ｓｎのデータ長Ｌと配置位置情報とが含まれる通知情報Ｖから、実行結果の復元用のプログラムＹを生成し、該復元用のプログラムＹをクライアントＢに送付する（ステップＳ１１３）。
【００２１】
この間に、クライアントＢでは、プログラムＸのプロセス実行を終了し（ステップＳ１１４）、プログラムＸを削除し（ステップＳ１１５）、復元用のプログラムＹを起動する（ステップＳ１１６）。復元用のプログラムＹは、プログラムＸのプロセス終了を確認した後（ステップＳ１１７）、ランダムに分散配置された中間データｓ１、…ｓｎを元の順序に並べ替えて、実行結果Ｓを出力し（ステップＳ１１８）、実行を完了する（ステップＳ１１９）。
【００２２】
（１−２）分散配置情報Ｃの生成の実施例
図１に示す処理フローにおいて説明した、サーバＡ側で保有するクライアントＢの信頼度（クライアント信頼度ａ）と、クライアントＢから通知される、中間データに対する希望の秘匿度（希望秘匿度）ｂとから、中間データｓ１、…ｓｎをどのように分散配置するかを決定する分散配置情報Ｃを生成する実施例について、図２を参照して説明する。
【００２３】
先ず、処理に先立って、サーバＡは、クライアントＢのクライアント信頼度ａを決定する。サーバＡは、クライアントＢに対し、クライアントＢが所属する組織（Ｕ）、同種のプログラムの使用頻度（Ｖ）及び不正使用の有無（Ｗ）等の使用の履歴に基づき、クライアント信頼度ａを決定する。ここに、図２（ａ）は、クライアント信頼度ａを算出するための諸条件を示すクライアント信頼度算出表の一例である。
【００２４】
サーバＡは、図２（ａ）のクライアント信頼度算出表を参照し、クライアントＢが所属する組織（Ｕ）、同種のプログラムの使用頻度（Ｖ）及び以前の不正使用経験の有無（Ｗ）の夫々に設定される値に基づき、例えば平均することでクライアント信頼度ａを算出し、決定する。尚、このときサーバＡは、処理対象となるデータやクライアントに応じて、各変数に適宜重み付けを行った上でクライアント信頼度ａの算出を行っても良い。
【００２５】
図２（ａ）の表に示される例では、クライアント信頼度ａは、信頼度が低いほど小さい値となり、信頼度が高いほど大きい値となる。より具体的には、図２（ａ）に示される例では、クライアントＢが所属する組織（Ｕ）に設定される値としては、競合する組織の場合には「０」を設定し、無関係の組織・無所属の場合には「２０」を設定し、顧客の場合には「４０」を設定し、関係会社の場合には「６０」を設定し、社内の場合には「１００」を設定している。また、図２（ａ）に示される例では、同種のプログラムの使用頻度（Ｖ）に設定される値としては、下限を０に設定し且つ上限を１００に設定すると共に、使用頻度が多いほど大きい値を設定している。また、図２（ａ）に示される例では、以前の不正使用経験の有無（Ｗ）に設定される値としては、不正使用があった場合に「０」を設定し、不正使用がない場合に「１００」を設定している。
【００２６】
ところで、プログラムＸが実行結果Ｓを中間データｓ１、…ｓｎに分割するためには、先ず、実行結果Ｓの分割単位が決定されている必要がある。本動作例においては、クライアントＢのクライアント信頼度ａに基づき、実行結果Ｓの分割単位が決定される。ここで、分散配置情報Ｃに含まれる、中間データｓ１、…ｓｎの分割単位の決定の態様について、図２（ｂ）を参照して説明する。ここに、図２（ｂ）は、クライアント信頼度ａに基づいて実行結果Ｓの分割単位を決定する際の基準を示す表である。
【００２７】
図２（ｂ）に示すように、プログラムＸは、クライアント信頼度ａに応じて、クライアント信頼度ａが低いほど実行結果Ｓをより細かい単位で分割し、クライアント信頼度ａが高いほど実行結果Ｓをより大きい単位で分割する。映像データをより細かい単位で分割することで復元がより困難となり、より大きい単位で分割すると復元がより容易となるため、信頼度の低いクライアントに対しては、より高い保護効果が期待出来る。
【００２８】
例えば、図２（ｂ）に示すように、クライアント信頼度ａが１０未満である場合、分割入替部１１０は、実行結果Ｓを最小処理単位（例えば、マクロブロック単位）で分割する。クライアント信頼度ａが１０以上３０未満である場合、分割入替部１１０は、実行結果Ｓを２番目に小さい単位（例えば、マクロブロックライン、スライス単位）で分割する。クライアント信頼度ａが３０以上５０未満である場合、分割入替部１１０は、実行結果Ｓを３番目に小さい単位（例えば、ピクチャ単位）で分割する。クライアント信頼度ａが５０以上７０未満である場合、分割入替部１１０は、実行結果Ｓを４番目に小さい単位（例えば、グループオブピクチャ（ＧＯＰ：ｇｒｏｕｐ  ｏｆ  ｐｉｃｔｕｒｅ）単位）で分割する。クライアント信頼度ａが７０以上９０未満である場合、分割入替部１１０は、実行結果Ｓを５番目に小さい単位（例えば、複数のグループオブピクチャ（ＧＯＰ）単位）で分割する。クライアント信頼度ａが９０以上である場合、分割入替部１１０は、実行結果Ｓを数秒のデータ単位（言い換えれば、数秒の再生期間を有するデータ単位）で分割する。
【００２９】
また、プログラムＸは、上述したように決定される分割単位で分割される複数の中間データｓ１、…ｓｎの夫々をサーバＡとクライアントＢとに分散配置する為の態様を決定する。特に、本動作例においては、プログラムＸは、クライアントＢから通知される実行結果Ｓに対する希望秘匿度ｂに基づき、中間データの分散配置の態様を決定する。ここに、希望秘匿度ｂとは、中間データの送受信におけるデータ保護の度合いを決定する値であり、例えば図２（ｃ）に示されるように、ユーザの希望する分散配置の方法に応じて決定される。
【００３０】
上述のように決定されたクライアント信頼度ａ及び希望秘匿度ｂに基づいて、サーバＡは、分散配置情報Ｃを生成する。ここに、図３は、生成される分散配置情報Ｃを決定するためのテーブルの一例である。図３に示される分散配置情報Ｃによれば、クライアント信頼度ａ及び希望秘匿度ｂの値に基づいて、以下に示すように中間データの分割及びサーバへの送信の態様が決定される。
【００３１】
［希望秘匿度ｂの値が０の場合］
クライアント信頼度ａの値が０〜２０のとき、ブロック単位で分割してから全てサーバＡに送信する。クライアント信頼度ａの値が２１〜４０のとき、ヘッダ単位で分割してから全てサーバＡに送信する。クライアント信頼度ａの値が４１〜６０のとき、フレーム単位で分割してから全てサーバＡに送信する。クライアント信頼度ａの値が６１〜８０のとき、キーフレーム単位で分割してから全てサーバＡに送信する。クライアント信頼度ａの値が８１〜１００のとき、数秒単位で分割してから全てサーバＡに送信する。
【００３２】
［希望秘匿度ｂの値が２０の場合］
クライアント信頼度ａの値が０〜２０のとき、ブロック単位で分割し、半数のブロックをサーバＡに送信する。クライアント信頼度ａの値が２１〜４０のとき、ヘッダ単位で分割し、半数のヘッダと半数のフレームをサーバＡに送信する。クライアント信頼度ａの値が４１〜６０のとき、フレーム単位で分割し、半数のフレームを、フレーム単位でサーバＡに送信する。クライアント信頼度ａの値が６１〜８０のとき、半数のフレームをキーフレーム単位でサーバＡに送信する。クライアント信頼度ａの値が８１〜１００のとき、フレーム単位でランダムに分割し、半数のフレームをサーバＡに送信する。
【００３３】
［希望秘匿度ｂの値が４０の場合］
クライアント信頼度ａの値が０〜２０のとき、ブロック単位で分割し、キーフレームのブロックと幾つかのフレームのブロックをサーバＡに送信する。クライアント信頼度ａの値が２１〜４０のとき、フレーム単位で分割し、半数のヘッダと半数のフレームをサーバＡに送信する。クライアント信頼度ａの値が４１〜６０のとき、フレーム単位で分割し、
キーフレームと幾つかのフレームをサーバＡに送信する。クライアント信頼度ａの値が６１〜８０のとき、フレーム単位で分割し、キーフレームと幾つかのフレームをサーバＡに送信する。クライアント信頼度ａの値が８１〜１００のとき、フレーム単位で分割し、キーフレームと幾つかのフレームをサーバＡに送信する。
【００３４】
［希望秘匿度ｂの値が６０の場合］
クライアント信頼度ａの値が０〜２０のとき、ブロック単位で分割し、キーフレームのブロックをサーバＡに送信する。クライアント信頼度ａの値が２１〜４０のとき、フレーム単位で分割し、キーフレームの半数のヘッダをサーバＡに送信する。クライアント信頼度ａの値が４１〜６０のとき、フレーム単位で分割し、キーフレームをサーバＡに送信する。クライアント信頼度ａの値が６１〜８０のとき、フレーム単位で分割し、キーフレームをサーバＡに送信する。クライアント信頼度ａの値が８１〜１００のとき、フレーム単位で分割し、キーフレームをサーバＡに送信する。
【００３５】
［希望秘匿度ｂの値が８０の場合］
クライアント信頼度ａの値が０〜２０のとき、ヘッダとヘッダ以外を単位として分割し、フレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が２１〜４０のとき、ヘッダとヘッダ以外を単位として分割し、フレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が４１〜６０のとき、ヘッダとヘッダ以外とを単位として分割し、フレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が６１〜８０のとき、ヘッダとヘッダ以外とを単位として分割し、フレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が８１〜１００のとき、ヘッダとヘッダ以外とを単位として分割し、フレームヘッダをサーバＡに送信する。
【００３６】
［希望秘匿度ｂの値が１００の場合］
クライアント信頼度ａの値が０〜２０のとき、ヘッダとヘッダ以外を単位で分割し、キーフレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が２１〜４０のとき、ヘッダとヘッダ以外を単位で分割し、キーフレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が４１〜６０のとき、ヘッダとヘッダ以外を単位で分割し、キーフレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が６１〜８０のとき、ヘッダとヘッダ以外を単位で分割し、キーフレームヘッダをサーバＡに送信する。クライアント信頼度ａの値が８１〜１００のとき、ヘッダとヘッダ以外を単位で分割し、キーフレームヘッダをサーバＡに送信する。
【００３７】
（１−３）分散配置動作の実施例
続いて、図４及び図５を参照して、上述のように決定された分散配置情報Ｃに従い、プログラムＸが生成される中間データをサーバＡとクライアントＢとに分散配置する分散配置動作（図１のステップＳ１１１）の実施例について説明する。
【００３８】
図４は、分散配置動作において、特に、クライアント信頼度ａの値が０乃至２０であり、希望秘匿度ｂの値が８０である場合の分散配置の態様について示している。また、図４に示す実施例は、プログラムＸにおけるエンコード用のアプリケーションソフトウェアにより生成された映像ストリームを入力データとしている。このような映像ストリームは、キーフレームとフレームとから構成され、各フレームは、ヘッダと例えばマクロブロック（ＭＢ：Ｍａｃｒｏ  Ｂｌｏｃｋ）などのヘッダ以外のデータとから構成される。
【００３９】
一般的に、各フレームのデータ長は異なるため、フレーム毎のヘッダ及びＭＢのデータ長も異なる。図４に示す例は、希望秘匿度ｂの値が８０でクライアント信頼度ａの値が０〜２０の場合を示し、分散配置情報Ｃに従って、ヘッダとヘッダ以外を単位として分割し、ヘッダをサーバＡに配置する例を示している。
【００４０】
図４に示すように、プログラムＸは、中間データのキーフレームＦ１１のヘッダ１１とフレームＦ１２のヘッダ１２とフレームＦ１３のヘッダ１３とを、ランダムに順序を入れ替えて例えばヘッダ１１、ヘッダ１３、ヘッダ１２の順序でサーバＡに配置する。また、キーフレームＦ１１のマクロブロックＭＢ１１１、ＭＢ１１２…、フレームＦ１２のマクロブロックＭＢ１２１、ＭＢ１２２…を、ランダムに順序を入れ替えて、例えばＭＢ１２１、ＭＢ１１２、ＭＢ１２２、ＭＢ１１１の順序でクライアントＢに配置する。
【００４１】
プログラムＸは、更に、中間データを分散配置する際に、各中間データのデータ長Ｌと配置位置とを対応付けた情報を含む通知情報Ｖを生成する。図５は、このように生成される通知情報Ｖの一例を示すテーブルである。プログラムＸは、中間データの分散配置を行う際に、図５に示されるような、データ長と配置位置との対応関係を示す情報を含む通知情報Ｖとして、フレーム種別、データ長及び配置位置の情報を生成し、テーブルに格納する。尚、プログラムＸは、図５に示されるように、各中間データの時刻情報（例えば、タイムスタンプまたはフレーム順序を示す情報）を含んで通知情報Ｖを生成しても良い。
【００４２】
以上のように、本動作例のプログラムＸは、決定された分割入れ替え単位及び配置位置に基づき、実行結果Ｓをヘッダ及びＭＢ毎に分割し、夫々ランダムに順番を入れ替えた上でサーバＡとクライアントＢとに分散して配置する。
【００４３】
プログラムＹは、上述の通知情報Ｖにおけるデータ長と配置位置との対応関係を示すテーブルを参照し、各中間データのデータ長Ｌと配置位置の情報を基に、中間データを元の映像ストリームの順序にクライアントＢ内に配列し、完全な映像ストリームとして出力する。
【００４４】
以上、説明したアプリケーションソフトウェアの保護の第１動作例では、サーバＡがプログラムＸを生成し、クライアントＢに送付するとともに、分散配置情報Ｃを生成し、クライアントＢに送付する。クライアントＢではアプリケーションソフトウェアの実行結果Ｓを、分散配置情報Ｃに従って複数の中間データｓ１、ｓ２、…に分割し、ランダムの順番でサーバＡ及びクライアントＢに分散配置する。
【００４５】
各中間データｓ１、ｓ２、…のデータ長Ｌ１、Ｌ２、…は、プログラムＸのアプリケーションソフトウェアで処理する入力データに依存して固有のデータ長となり、該中間データｓ１、ｓ２、…のデータ長Ｌ１、Ｌ２、…をサーバＡに送信し、サーバＡは、
該中間データｓ１、ｓ２、…のデータ長Ｌ１、Ｌ２、…と配置位置情報とから、中間データｓ１、ｓ２、…を実行結果Ｓに変換する復元用のプログラムＹを生成し、該復元用のプログラムＹをクライアントＢに送付する。
【００４６】
ここで入力データは映像データ、プログラムＸのアプリケーションソフトウェアはエンコーダ、実行結果Ｓはビットストリームなどであり、異なる入力データからは同一の中間データ長Ｌ１、中間データ長Ｌ２、…が得られないデータである。
【００４７】
以上説明した構成によれば、サーバＡとクライアントＢとの間で行われるネットワーク経由の送受信内容を不正に取得したユーザが、サーバＡに成りすました擬似サーバを設置することでプログラムＸの不正使用を試みたとしても、同一の入力データに対してプログラムＸを使用しない限り、有効な実行結果Ｓを得ることは出来ない。また、同一の入力データによる実行結果Ｓは、クライアントＢが既にプログラムＸを実行して取得済みの結果であり、何度も同一の実行結果Ｓを取得することは、ユーザにとって何のメリットもない。従って、アプリケーションソフトウェアを不正使用から保護することが出来る。
【００４８】
なお、分散配置情報Ｃを、クライアントＢの信頼度情報ａ、及びクライアントＢから通知される希望秘匿度ｂの情報に基づいて生成することにより、サーバ側及びクライアント側の要望に応じた分散配置が可能となる。
【００４９】
また、クライアントＢから各中間データのデータ長及び配置位置情報が通知される時刻が、クライアントＢの認証時刻から一定時間内であるとき、復元用のプログラムＹを生成することにより、プログラムＸの不正使用に対する保護をより強固なものとすることが出来る。
【００５０】
また、復元用のプログラムＹは、クライアントＢで起動されたプログラムＸが削除され終了したことを確認した後、復元処理を行う構成とすることにより、プログラムＸがクライアントＢに何時までも保有されたままの状態となることを防ぎ、プログラムＸの不正使用に対する保護をより強固なものとすることが出来る。
【００５１】
（２）アプリケーションソフトウェアの保護の第２動作例
図６から図１３を参照して、本実施形態に係るアプリケーションソフトウェアの保護の第２動作例の処理の流れについて説明する。
【００５２】
（２−１）処理フロー例
先ず、図６に示される処理フローを参照して、実施形態に係るアプリケーションソフトウェアの保護動作の第２動作例の処理の流れについて説明する。尚、図６の処理フローにおいて、図１に示す第１実施例に係る処理フローと同様の動作については、同じ番号を付して説明を省略している。また、特に説明しない点については、第１動作例と同様の構成であって良い。
【００５３】
図６に示すように、該アプリケーションソフトウェアの保護動作の実施形態の第２動作例は、好適には、互いにネットワークで接続されるサーバＡと、プログラムＸが実行される第１のクライアントＢと、プログラムＹが実行される第２のクライアントＣとを含むデータ送受信システムにおいて適用される。また、第２動作例においては、入力データは映像ストリームであり、アプリケーションソフトウェアはエンコーダであり、実行結果Ｓはビットストリームなどである。
【００５４】
第２動作例において、サーバＡは、第１のクライアントＢから送信されるリクエストに応じて、エンコード用のアプリケーションソフトウェアを含むプログラムＸを第１のクライアントＢに送信すると共に、復元用のプログラムＹを第２のクライアントＣに送信する（ステップＳ１２０）。
【００５５】
第１のクライアントＢは、プログラムＸの起動、サーバ認証、希望秘匿度ｂの送信及びアプリケーションの実行（ステップＳ１０３からステップＳ１０９）の後に、プログラムＸにより、アプリケーションソフトウェア実行後の実行結果Ｓを、分散配置情報Ｃに従い複数の中間データｓ１、…ｓｎに分割する（ステップＳ１１０）。続いて、プログラムＸは、分割された複数の中間データｓ１、…ｓｎの夫々のパケットヘッダに、第１のクライアントＢの内部時計を基準とする、各中間データの再生時刻に応じた時刻情報を埋め込む（ステップＳ１２１）。そして、プログラムＸは更に、入力データ及び実行結果Ｓの少なくとも一方の特性を示す特性情報と上述の時刻情報とを含む特性情報Ｖ’を生成する（ステップＳ１２２）。
【００５６】
次に、第１のクライアントＢは、生成された複数の中間データｓ１、…ｓｎを、元の実行結果Ｓにおける時系列的な順序を入れ替えて再配置することで分割入替データＵ’を生成する。また、生成された分割入替データU’を第２のクライアントＣに送信する（ステップＳ１２３）。
【００５７】
そして、第１のクライアントＢは、プログラムＸの実行完了の通知と共に、各中間データｓ１、…ｓｎのデータ長Ｌ、配置位置情報及び時刻情報を含む通知情報Ｖと、生成される特性情報Ｖ’をサーバＡに送信する（ステップＳ１２４）。
【００５８】
サーバＡは、送信された通知情報Ｖ及び特性情報Ｖ’を第２のクライアントＣに送信する（ステップＳ１２５）。このとき、例えば、通知情報Ｖ及び特性情報Ｖ’が第１のクライアントＢから通知された時刻が、クライアントＢを認証した時刻から一定時間内であるか否か、または、通知情報Ｖに含まれる時刻情報が後述するプログラムＸの更新時刻Ｔから一定時間内であるか否かなどの判定を行い、該判定結果に基づいて通知情報Ｖ及び特性情報Ｖ’の送信の実施の有無を決定しても良い。かかる判定については後に詳述する。
【００５９】
また、サーバＡは、第１のクライアントＢから送信される特性情報Ｖ’に基づき、更新時刻Ｔを生成する（ステップＳ１２６）。各中間データｓ１、…ｓｎのデータ長Ｌと配置位置情報とが含まれる通知情報Ｖから、エンコード用のプログラムＸ及び実行結果の復元用のプログラムＹの更新版を生成する（ステップＳ１２７）。このとき、サーバＡは、プログラムＸに対し、生成される更新時刻Ｔを埋め込んで生成する。そして、サーバＡは、プログラムＸの更新版を第１のクライアントＢに送信すると共に、プログラムＹの更新版を第２のクライアントＣに送信する（ステップＳ１２８）。
【００６０】
この時、第１のクライアントＢは、プログラムＸのプロセス実行を終了するとともに、プログラムＸの更新版の実行を行い（ステップＳ１２９）、動作を終了したプログラムＸを削除する（ステップＳ１３０）。プログラムＸの更新動作については、後に詳述する。
【００６１】
一方、第２のクライアントＣは、サーバＡより送信される（ステップＳ１２０参照）復元用のプログラムＹを起動する（ステップＳ１１６）。復元用のプログラムＹは、サーバＡから送信される通知情報Ｖ及び特性情報Ｖ’に基づいて、典型的にはランダムに時系列的な順序を入れ替えられた中間データｓ１、…ｓｎである分割入替データU’を元の順序に並べ替えることで、実行結果Ｓを出力する（ステップＳ１３１）。
【００６２】
更に、第２のクライアントＣは、プログラムＹにより、サーバＡから送信される特性情報Ｖ’に基づき、更新時刻Ｔを生成する（ステップＳ１３２）。この更新時刻Ｔは、便宜上異なる記載をしているものの、好適には、サーバＡによりステップＳ１２６において生成されるものと同様の時刻を示す時刻情報である。そして、第２のクライアントＣは、プログラムＹのプロセス実行を終了するとともに、プログラムＹの更新版の実行を行う（ステップＳ１３３）。
【００６３】
（２−２）第２動作例に係るデータ送受信システムの構成例
続いて、図７から図１０を参照して、第２動作例に係るアプリケーションソフトウェアの保護方法が適用されるデータ送受信システムの基本的な構成を説明しながら、第２動作例における各処理の流れについてより詳細に説明する。
【００６４】
先ず、図７は、第２動作例に係るアプリケーションソフトウェアの保護方法が適用されるデータ送受信システム１の全体的な構成の一例を示す模式図である。図７に示されるように、データ送受信システム１は、夫々ネットワークを介して接続される、サーバＡ、プログラムＸが実行される第１のクライアントＢ、プログラムＹが実行される第２のクライアントＣを含んで構成される。
【００６５】
第１のクライアントＢは、データの処理及び送信を行うための端末であり、例えば、テレビ会議システムに用いられるストリームを送信するためのパーソナルコンピュータなどであって、サーバＡから送信されるプログラムＸを実行する。図７に示されるようにプログラムＸは、当該プログラムＸが不図示のＣＰＵ上で実行されることで実現される論理的な処理ブロックとして、分散配置部１１０とプログラム更新部１２０とを備える。
【００６６】
第２のクライアントＣは、データの処理及び受信を行うための端末であり、例えば、第１のクライアントＢから送信されるテレビ会議システムに用いられるストリーム等を受信するためのパーソナルコンピュータなどであって、サーバＡから送信されるプログラムＹを実行する。図７に示されるようにプログラムＹは、当該プログラムＹが不図示のＣＰＵ上で実行されることで実現される論理的な処理ブロックとして、分割入替復元部３１０と、更新時刻生成部３２０と、プログラム更新部３３０とを備える。
【００６７】
サーバＡは、第１のクライアントＢ及び第２のクライアントＣに対し、ネットワークを介して接続される管理用のサーバである。サーバＡは、第１のクライアントＢから送信される中間データ、通知情報Ｖ及び特性情報Ｖ’などを受信し、認証を行う認証部２１０と、プログラムＸ及びプログラムＹを生成して、第１のクライアントＢ及び第２のクライアントＣの夫々に送信するプログラム生成部２２０を備える。
【００６８】
続いて、各部のより詳細な構成と動作について、図８から図１０を参照して説明する。
【００６９】
（２−２−１）第１のクライアントＢの構成及び動作例
先ず、第１のクライアントＢにおいて実行されるプログラムＸの具体的な構成及び動作の例について、図８を参照して説明する。
【００７０】
分散配置部１１０は、入力データに対してアプリケーションソフトウェアによるエンコードなどの処理が実行された実行結果Ｓを、サーバＡにおいて生成される分散配置情報Ｃに基づき複数の中間データｓ１、…ｓｎに分割すると共に、該複数の中間データｓ１、…ｓｎの元の実行結果Ｓにおける時系列的な順序を入れ替えた分割入替データＵ’を生成する。そして、生成された分割入替データU’を第２のクライアントＣへと送信する。
【００７１】
また、分散配置部１１０は、上述した中間データｓ１、…ｓｎの夫々のデータ長及び入れ替え後の（つまり、分割入替データＵ’における）配置位置情報を含む通知情報Ｖを生成する。
【００７２】
また、分散配置部１１０は、生成される中間データｓ１、…ｓｎの夫々のパケットヘッダや、通知情報Ｖのパケットヘッダなどに、実行結果Ｓへの処理が実施される時刻を基準とする各中間データｓ１、…ｓｎの再生時刻に応じた時刻情報を埋め込む。尚、該時刻情報は、実行結果Ｓへの処理が実施される際の第１のクライアントＢの内部時刻を基準とし、該時刻に各中間データｓ１、…ｓｎの再生時刻を加算した時刻を示すものなどである。このとき、中間データｓ１、…ｓｎの夫々のパケットヘッダに時刻情報が埋め込まれることから、該中間データｓ１、…ｓｎの順序を入れ替えて再配置した分割入替データＵ’は、複数の時刻情報を有する。以降、分割入替データＵ’に埋め込まれる複数の時刻情報を総じて時刻情報Ｔｕ’と、通知情報に埋め込まれる時刻情報を時刻情報Ｔｖと記載する。
【００７３】
続いて、分散配置部１１０は、実行結果Ｓ及び分割入替データＵ’の少なくとも一方の特性を示す特性情報を含む特性情報Ｖ’を生成する。ここに、特性情報とは、例えば、上述した中間データｓ１、…ｓｎの夫々のサイズ情報、動き量情報及び各パケットヘッダに埋め込まれる時刻情報である。
【００７４】
尚、特性情報Ｖ’は、実行結果Ｓまたは分割入替データＵ’における中間データｓ１、…ｓｎの順序に基づくデータ構成となっている。典型的には特性情報Ｖ’は、分割ストリーム毎の特性情報（つまり、サイズ情報や動き量情報や各パケットヘッダに埋め込まれる時刻情報）が実行結果Ｓまたは分割入れ替え実行結果Ｓにおける中間データｓ１、…ｓｎの順序で配置されて成る。
【００７５】
そして、プログラムＸは、分割入替データＵ’を第２のクライアントＣに対して、通知情報Ｖ及び特性情報Ｖ’をサーバＡに対して夫々ネットワークを介して送信する。
【００７６】
本実施形態におけるプログラムＸは、サーバＡより送信された後、所定のタイミングにおいて動作を開始し、第２のクライアントＣ及びサーバＡとの通信を実施する。その後、プログラムＸは、所定のタイミングにおいて通信を終了し、その後削除される（言い換えれば、自身を削除する）構成となっている。一方で、第１のクライアントＢにおいては、後述するようにサーバＡから所定のタイミングで送信されるプログラムＸの更新版が動作を開始し、第２のクライアントＣ及びサーバＡとの通信を実施する。
【００７７】
上述したように適宜更新されるプログラムＸのうち、第ｎ版のプログラムＸを便宜上プログラムＸｎと記載し、以降、単にプログラムＸと記載する場合は、更新されるプログラムＸの各版を総じて示すものとする。同様に、プログラムＹのうち、第ｎ版のプログラムＹを便宜上プログラムＹｎと記載し、以降、単にプログラムＹと記載する場合は、更新されるプログラムＹの各版を総じて示すものとする。
【００７８】
プログラム更新部１２０は、プログラムＸの更新動作を実施するために、所定のタイミングにおいてプログラムＸの各版の起動、通信の開始及び終了、並びに削除の各動作を制御する。例えば、プログラム更新部１２０は、プログラムＸの次の版（例えば、プログラムＸｎ＋１）を受信し、該プログラムＸｎ＋１の起動を行うと共に、現在動作しているプログラムＸ（例えば、プログラムＸｎ）の終了を行う。ここに、所定のタイミングとは、分割入替データＵ’に含まれる各中間データｓ１、…ｓｎ毎に埋め込まれる時刻情報と、後述されるサーバＡにより生成されるとともにプログラムＸに埋め込まれる更新時刻Ｔとに基づき決定されるタイミングを示す。
【００７９】
更新時刻Ｔは、複数通り（例えば、更新時刻Ｔ１、Ｔ２、…、Ｔｎなど）生成され、夫々対応するプログラムＸに埋め込まれるとともに、プログラムＸの各版の動作を制御する際のタイミングを指定する。以降、プログラムＸの第ｎ版であるプログラムＸｎに埋め込まれる時刻情報Ｔを時刻情報Ｔｎと記載し、単に時刻情報Ｔと記載する場合は、複数通り生成される時刻情報Ｔの夫々を総じて示すものとする。
【００８０】
具体的には、プログラム更新部１２０は、分散配置部１１０において生成された特性情報Ｖ’から、各中間データｓ１、…ｓｎのパケットヘッダに埋め込まれる時刻情報Ｔｕ’を順次取り出す。そして、取り出された時刻情報Ｔｕ’と、プログラムＸｎに埋め込まれる更新時刻Ｔｎとの比較を行う。プログラムＸｎは、時刻情報Ｔｕ’が更新時刻Ｔｎから所定の時刻Ｒｃ１だけ遡った時間（つまり、（Ｔｎ）−Ｒｃ１）と一致するタイミングにおいて、前版のプログラムＸｎ−１を削除し、次版のプログラムＸｎ＋１を起動させる。また、プログラムＸｎは、時刻情報Ｔｕ’が更新時刻Ｔｎと一致するタイミングにおいて、次版のプログラムＸｎ＋１のサーバＡ及び第２のクライアントＣとの通信を開始し、プログラムＸｎ自身の通信を終了する。
【００８１】
以上、説明したプログラムの更新動作及び該プログラムの更新タイミングの決定動作については、後に詳述する。
【００８２】
（２−２−２）サーバＡの構成及び動作例
続いて、サーバＡの各部の具体的な構成及び動作の例について図９を参照して説明する。
【００８３】
第１のクライアントＢから送信された通知情報Ｖ及び特性情報Ｖ’は、先ず認証部２１０において、各データがプログラムＸによって正当に生成されたものであるか否かが判定される。例えば、認証部２１０は、通知情報Ｖから取り出される時刻情報Ｔｖと該通知情報Ｖを生成したプログラムＸｎの更新時間Ｔｎとを比較する。そして、認証部２１０は、時刻情報Ｔｖが更新時刻Ｔｎから所定の期間Ｍ内であるか否かに基づいて、各データがプログラムＸによって正当に生成されたものであるか否かを判定する。
【００８４】
判定の結果、通知情報Ｖ及び特性情報Ｖ’がプログラムＸによって正当に生成されたものであると判定される場合、サーバＡは、第２のクライアントＣに対して通知情報Ｖ及び特性情報Ｖ’を送信する。また、このとき認証部２１０は、プログラム生成部２２０に対して、通知情報Ｖ及び特性情報Ｖ’を入力する。
【００８５】
プログラム生成部２２０は、プログラムＸ及びプログラムＹを生成し、プログラムＸを第１のクライアントＢへと、プログラムＹを第２のクライアントＣへと夫々送信する。また、プログラム生成部２２０は、適宜プログラムＸ及びプログラムＹの更新版を生成し、所定の更新時刻Ｔにおいて更新版のプログラムＸ及びプログラムＹを送信する。
【００８６】
具体的には、プログラム生成部２２０は、特性情報Ｖ’に基づき、順次更新時刻Ｔを生成し、更新スケジュールとして蓄積する。尚、具体的な更新時刻Ｔの生成動作については、後述する。
【００８７】
更に、プログラム生成部２２０は、プログラムＸ及びプログラムＹの各版を順次生成し、好適には生成された複数のプログラムを蓄積する。特にプログラム生成部２２０は、プログラムＸの各版を生成する際に、上述のように生成された更新時刻Ｔを埋め込む。例えば、プログラムＸの第ｎ版であるプログラムＸｎには、ｎ番目に生成される更新時刻である更新時刻Ｔｎが埋め込まれる。
【００８８】
また、プログラム生成部２２０は、通知情報Ｖから時刻情報Ｔｖを適宜取り出す。そして、取り出された時刻情報Ｔｖと、更新スケジュールとして蓄積される更新時刻Ｔｎとの比較を行う。プログラム生成部２２０は、時刻情報Ｔｖが更新時刻Ｔｎから所定の時刻Ｒｃ２だけ遡った時間（つまり、（Ｔｎ）−Ｒｃ２）と一致するタイミングにおいて、予め生成され、蓄積される次々版のプログラムＸｎ＋２及びプログラムＹｎ＋２の送信を行う。
【００８９】
次々版のプログラムＸｎ＋２及びプログラムＹｎ＋２の送信を終えた後、プログラム生成部２２０は、更新時刻Ｔｎを更新スケジュールに蓄積される次の更新時刻Ｔｎ＋１に更新する。そして、新たに設定された更新時刻から所定の時刻Ｒｃ２だけ遡った時間（つまり、（Ｔｎ＋１）−Ｒｓ２）と、順次取り出される時刻情報Ｔｖとの比較を行う。
【００９０】
（２−２−３）第２のクライアントＣの構成及び動作例
次に、第２のクライアントＣにおいて実行されるプログラムＹの各部の具体的な構成及び動作の例について図１０を参照して説明する。
【００９１】
分割入替復元部３１０は、サーバＡから送信される通知情報Ｖ及び特性情報Ｖ’に基づき、第１のクライアントＢから送信される分割入替データＵ’を並べ替えて再配置することで元の実行結果Ｓを復元する。
【００９２】
更新時刻生成部３２０は、特性情報Ｖ’の入力を受け、後述するプログラム更新部３３０において用いられる更新時刻Ｔを生成する。典型的には、更新時刻生成部３２０は、サーバＡにおけるプログラム生成部２２０における更新時刻Ｔの生成動作と同様に、特性情報Ｖ’に基づき、順次更新時刻Ｔを生成し、更新スケジュールとして蓄積する。
【００９３】
プログラム更新部３３０は、プログラムＸにおけるプログラム更新部１２０と同様に、プログラムＹの更新動作を実施するために、所定のタイミングにおいてプログラムＹの各版の起動、通信の開始及び終了並びに削除の各動作を制御する。
【００９４】
具体的には、プログラム更新部３３０は、分割入替復元部３１０から送信される特性情報Ｖ’から、各中間データｓ１、…ｓｎのパケットヘッダに埋め込まれる時刻情報Ｔｕ’を順次取り出して行く。そして、取り出された時刻情報Ｔｕ’と、更新時刻生成部３２０により生成される更新時刻Ｔｎとの比較を行う。プログラムＹｎは、時刻情報Ｔｕ’が更新時刻Ｔｎから所定の時刻Ｒｃ２だけ遡った時間（つまり、Ｔｎ−Ｒｃ２）と一致するタイミングにおいて、前版のプログラムＹｎ−１を削除し、次版のプログラムＹｎ＋１を起動させる。また、プログラムＹは、時刻情報Ｔｕ’が更新時刻Ｔｎと一致するタイミングにおいて、次版のプログラムＹｎ＋１のサーバＡ及び第１のクライアントＢとの通信を開始し、プログラムＹｎ自身の通信を終了する。
【００９５】
尚、以上説明した各部の構成及び動作の例においては、実行結果Ｓより生成される分割入替データＵ’の全てを第１のクライアントＢから第２のクライアントＣへと送信する構成となっている。しかしながら、該分割入替データＵ’の一部または全部を抜き出して（つまり、中間データｓ１、…ｓｎの一部）、例えば通知情報Ｖに含めることで、サーバＡに送信する構成としても良い。
【００９６】
（２−３）プログラムの更新動作例
アプリケーションソフトウェアの保護の第２動作例においては、上述したように、サーバＡのプログラム生成部２２０またはプログラムＹの更新時刻生成部３２０において、特性情報Ｖ’に基づいて生成される更新時刻Ｔに基づき、プログラムＸ及びプログラムＹの更新のための時刻の判定が実施される。
【００９７】
第１のクライアントＢにおいては、サーバＡにより生成され且つ送信されるプログラムＸの各版に複数の更新時刻Ｔの夫々が埋め込まれており、該更新時刻Ｔを参照して時刻の判定が行われる。具体的には、プログラムＸのプログラム更新部１２０は、分割入替部１１０において生成される分割入替データＵ’から時刻情報Ｔｕ’を取り出す。そして、プログラムＸは、時刻情報Ｔｕ’が更新時刻Ｔと一致しているか否かの判定を行い、両者が一致する場合に、プログラムＸの更新動作を行う。
【００９８】
また、第２のクライアントＣにおいては、サーバＡから送信されるプログラムＹに更新時刻Ｔが埋め込まれていないため、更新時刻生成部３２０の動作により、特性情報Ｖ’より更新時刻Ｔが生成される。また、プログラムＹのプログラム更新部３３０は、第１のクライアントＢから送信される分割入替データＵ’から時刻情報Ｔｕ’を取り出す。そして、プログラムＹは、時刻情報Ｔｕ’が更新時刻Ｔと一致しているか否かの判定を行い、両者が一致する場合に、プログラムＹの更新動作を行う。
【００９９】
サーバＡのプログラム生成部２２０は、通知情報Ｖから取り出される時刻情報Ｔｖと、特性情報Ｖ’から生成される更新時刻Ｔｎとの比較結果に応じて、更新されるプログラムＸ及びプログラムＹを送信する。
【０１００】
尚、サーバＡ、第１のクライアントＢ及び第２のクライアントＣの夫々において取り出される時刻情報は便宜上異なる記載をしているが、同一の実行結果Ｓまたは分割入替データＵ’に基づいて生成される時刻情報であるため、夫々同様の時刻を示すものである。つまり、時刻情報Ｔｕ’と時刻情報Ｔｖとは同一の値を取る時刻情報であり、特にリアルタイムで通信を行う場合には、同一のタイミングで同一の時刻を示し得る。
【０１０１】
図１１は、アプリケーションソフトウェアの保護の第２動作例における、プログラムＸの更新に係る時系列的な処理を示すタイミングチャートである。ここに、図１１を参照して、プログラムＸｎの動作中にプログラムＸｎ＋1へと更新する際の更新動作について説明する。
【０１０２】
図１１に示されるように、プログラムＸは、サーバＡにより生成及び送信され、第１のクライアントＢにおいて存在する期間（図中白部）、実行され動作している期間（図中斜線部）及びサーバＡとの通信を行っている期間（図中点部）の３つの期間を有する。尚、図示していないプログラムＹについても同様である。
【０１０３】
第１のクライアントＢにより実行されるプログラムＸｎは、分割入替データＵ’より取り出した時刻情報Ｔｕ’が、前版のプログラムＸｎ−１に埋め込まれている更新時刻Ｔｎ−１の時点から所定の準備時間Ｒｃ１だけ遡った時間（つまり、（Ｔｎ−１）−Ｒｃ１）と一致するタイミングで起動される。ここに、準備時間Ｒｃ１とは、第１のクライアントＢにおけるプログラムＸの起動から通信の開始までの内部処理などに要する準備時間である。その後、プログラムＸｎは、時刻情報Ｔｕ’が更新時刻Ｔｎ−１と一致するタイミングでサーバＡとの通信を開始し、実行結果Ｓの分割及び入れ替え並びに生成されるデータの送信を行う。
【０１０４】
同様に、第２のクライアントＣにより実行されるプログラムＹｎも同様に通信を開始し、分割入替データＵ’、通知情報Ｖ及び特性情報Ｖ’の受信を受け、実行結果Ｓの復元処理を行う。具体的に、第２のクライアントＣにより実行されるプログラムＹｎは、分割入替データＵ’より取り出した時刻情報Ｔｕ’が、更新時刻生成部３２０において生成された更新時刻Ｔｎ−１の時点から所定の準備時間Ｒｃ２だけ遡った時間（つまり、（Ｔｎ−１）−Ｒｃ２）と一致するタイミングで起動される。ここに、準備時間Ｒｃ２とは、第２のクライアントＣにおけるプログラムＹの起動から通信の開始までの内部処理などに要する準備時間である。その後、プログラムＹｎは、時刻情報Ｔｕ’が更新時刻Ｔｎ−１と一致するタイミングでサーバＡとの通信を開始する。その結果、プログラムＹｎは、分割入替データＵ’、通知情報Ｖ及び特性情報Ｖ’の受信を受け、実行結果Ｓの復元処理を行う
続いて、サーバＡのプログラム生成部２２０は、通知情報Ｖから取り出した時刻情報Ｔｖが、プログラム生成部２２０内部で生成された更新時刻Ｔｎから所定の準備時間Ｒｓだけ遡った時間（つまり、（Ｔｎ）−Ｒｓ）と一致するタイミングで、プログラムＸｎ＋２及びＹｎ＋２（つまり、次々版プログラム）を第１のクライアントＢ及び第２のクライアントＣに送信する。ここに、準備期間Ｒｓとは、サーバＡにおけるプログラムＸの生成から第１のクライアントＢにおける通信開始までの通信及びプログラムＹの生成から第２のクライアントＣにおける通信開始までの通信並びに内部処理などに要する準備時間である。
【０１０５】
次に、第１のクライアントＢは、時刻情報Ｔｕ’が、実行中のプログラムＸｎに埋め込まれている更新時刻Ｔｎの時点から所定の準備時間Ｒｃ１だけ遡った時間（つまり、Ｔｎ−Ｒｃ１）と一致するタイミングで、次版のプログラムＸｎ＋１の起動を開始する。起動されたプログラムＸｎ＋１は、通信を開始するための内部処理を開始する。そして、時刻情報Ｔｕ’が更新時刻Ｔｎと一致するタイミングで、プログラムＸｎは通信を終了し、動作を終了する。同時に、準備動作を終了したプログラムＸｎ＋１が通信を開始し、実行結果Ｓの分割及び入れ替え並びに生成されるデータの送信を行う。
【０１０６】
同様に、第２のクライアントＣは、時刻情報Ｔｕ’が、更新時刻生成部３２０において生成された更新時刻Ｔｎと一致するタイミングで、次版のプログラムＹｎ＋１の起動を開始する。起動されたプログラムＹｎ＋１は、通信を開始するための内部処理を開始する。そして、時刻情報Ｔｕ’が更新時刻Ｔｎと一致するタイミングで、プログラムＹｎは通信を終了し、動作を終了する。同時に、準備動作を終了したプログラムＹｎ＋１が通信を開始し、実行結果Ｓの復元処理を行う。
【０１０７】
（２−４）更新時刻の生成動作例
サーバＡのプログラム生成部２２０、または第２のクライアントＣにより実行されるプログラムＹの更新時刻生成部３２０における更新時刻Ｔの生成動作について図１２及び図１３を参照して説明する。以下では、特性情報Ｖ’に含まれる複数の時刻情報Ｔｖの中から、分割入替データＵ’の特性に基づいて更新時刻Ｔを生成する方法について説明する。尚、以下の説明では、分割入替データＵ’の特性の一例として、分割入替データＵ’の分割入れ替え単位毎の（言い換えれば、中間データｓ１、…ｓｎの夫々の）サイズ情報、または動き量を用いて説明進める。
【０１０８】
先ず、図１２を参照して、分割入れ替え単位毎のサイズ情報を用いて更新時刻Ｔを生成する動作について説明する。図１２は、更新時刻Ｔの生成動作におけるデータの処理工程を概念的に示す図である。
【０１０９】
図１２上部に示されるように、分割入替データＵ’は、所定のサイズを有する中間データｓ１、…ｓｎが夫々順序を入れ替えられて配置される構成となっている。図１２では、実行結果Ｓにおいて、ｓ１、ｓ２、ｓ３、ｓ４、ｓ５、ｓ６の順序で配置されていた中間データを、ｓ４、ｓ３、ｓ６、ｓ２、ｓ１、ｓ５のように順序を入れ替えて配置した分割入替データＵ’について例示している。
【０１１０】
また、図１２の例では、プログラムＸの分割入替部１１０は、生成された分割入替データＵ’の夫々の中間データｓ１、…ｓｎサイズ情報と、夫々のパケットヘッダに埋め込まれる時刻情報ｔを取り出して、特性情報Ｖ’を生成する。
【０１１１】
サーバＡのプログラム生成部２２０、または第２のクライアントＣにより実行されるプログラムＹの更新時刻生成部３２０は、先ず、特性情報Ｖ’の先頭の分割入れ替え単位の先頭パケットに埋め込まれる時刻情報ｔを更新時刻Ｔ１として生成する。次に、プログラム生成部２２０又は更新時刻生成部３２０は、特性情報Ｖ’の先頭からサイズ情報を順番に取り出すと共に、取り出したサイズ情報を順次加算する。その後、プログラム生成部２２０又は更新時刻生成部３２０は、サイズ情報の和が所定の閾値を越える場合（例えば、１００）、次の分割入れ替え単位の先頭パケットに埋め込まれる時刻情報ｔを次の更新時刻Ｔ２として生成する。
【０１１２】
このようにサイズ情報の和に基づく更新時刻Ｔの生成を繰り返すことで、リアルタイムな処理が必要な分割入替データＵ’（或いは、元の実行結果Ｓ）に対して、更新時刻Ｔを次々生成することが出来る。
【０１１３】
続いて、図１３を参照して、分割入れ替え単位毎の動き量を用いて更新時刻Ｔを生成する動作について説明する。図１３は、図１２と同様に更新時刻Ｔの生成動作におけるデータの処理工程を概念的に示す図である。尚、図１３に示される例では、分割入替データＵ’の分割入れ替え単位として、実行結果Ｓを構成するフレームを採用している。
【０１１４】
図１３上部に示されるように、分割入替データＵ’は、実行結果Ｓがフレーム毎に分割され、夫々順序を入れ替えられて配置される構成となっている。プログラムＸの分割入替部１１０は、生成された分割入替データＵ’の夫々のフレーム毎の各マクロブロックの動きベクトルの大きさを加算した和及び時刻情報ｔを取り出し、特性情報Ｖ’を生成する。
【０１１５】
サーバＡのプログラム生成部２２０、または第２のクライアントＣにより実行されるプログラムＹの更新時刻生成部３２０は、先ず、特性情報Ｖ’の先頭のフレームの先頭パケットに埋め込まれる時刻情報ｔを更新時刻Ｔ１として生成する。次に、プログラム生成部２２０又は更新時刻生成部３２０は、特性情報Ｖ’の先頭からフレーム毎の動きべクトルの和を順番に取り出して加算する。その後、プログラム生成部２２０又は更新時刻生成部３２０は、動きベクトルの和が所定の閾値を越える場合（例えば、１０００）、次のフレームの先頭パケットに埋め込まれる時刻情報ｔを次の更新時刻Ｔ２として生成する。
【０１１６】
このように動きベクトルの和に基づく更新時刻Ｔの生成を繰り返すことで、リアルタイムな処理が必要な分割入替データＵ’（或いは、元の実行結果Ｓ）に対して、更新時刻Ｔを次々生成することが出来る。
【０１１７】
以上、説明したアプリケーションソフトウェアの保護の第２動作例によれば、エンコード用のアプリケーションを含むプログラムＸと、復元用のプログラムＹとが同時に各クライアントに送付される。このとき、実行結果Ｓから分割された複数の中間データｓ１、…ｓｎの夫々のヘッダには、時刻情報が埋め込まれているため、例えば、サーバＡ、第１のクライアントＢ及び第２のクライアントＣの夫々において同期を取りながらリアルタイムでの実行結果Ｓの送受信も可能となる。例えば、実行結果Ｓとして映像ストリームを用いたリアルタイム配信などにも好適に対応出来、上述した第１動作例と同様の保護効果を得ることが可能となる。
【０１１８】
また、本動作例のプログラムＸとプログラムＹとは、リアルタイムな通信を維持しつつ、更新されていく構成となっている。このため、ユーザが不正にアプリケーションソフトウェアを入手したとしても、所定の更新時刻Ｔ毎にプログラムＸ及びプログラムＹは無効となる。このため、中間データｓ１、…ｓｎから実行結果Ｓを復元することが出来ず、アプリケーションソフトウェアの実行結果Ｓを不正な実行から保護することが可能となる。
【０１１９】
更に、本動作例においては、プログラムＸ及びプログラムＹの更新時刻Ｔは、実行結果Ｓ内のデータに依存して決定される。具体的には、更新時刻Ｔは、分割入替データＵ’に固有のサイズ情報や動きベクトル量などの特性情報Ｖ’に応じて生成されるものであり、つまり元の実行結果Ｓに固有のものとなる。従って、プログラムＸ及びプログラムＹの夫々の更新時刻Ｔは、夫々のプログラムが同一の入力データに対して処理を実施している場合にのみ整合する。このため、仮にユーザが疑似サーバを設置して、前回取得したアプリケーションソフトウェアを繰り返し使用しようとしても、入力データが前回と異なると、成りすましによるプログラムＹの更新時刻Ｔと、プログラムＸの更新時刻Ｔとは異なり、分散配置された中間データを元の順序に復元することが出来ない。
【０１２０】
特に、本動作例においては、プログラムＸの更新時刻Ｔは、サーバＡによって決定され、プログラムＸの生成時にプログラム内部に埋め込まれ、他方で、プログラムＹの更新時刻Ｔは、第２のクライアントＣによって決定される。このとき、いずれの決定動作も実行結果Ｓまたは分割入替データＵ’に基づいて決定されるため、プログラムＸとプログラムＹとが同一のデータを扱っている場合以外では適切な更新が行われないことが保証される。
【０１２１】
以上、説明した構成によれば、実行結果Ｓの送受信を行うクライアント間の接続が比較的長時間の維持される必要があるテレビ会議などのデータ送受信システムにおいても、実行結果Ｓの送受信中にプログラムＸ及びプログラムＹが更新され続ける必要があるため、好適な保護を実現することが出来る。
【０１２２】
加えて、サーバＡにおいては、更新時刻Ｔｎに先立って、更新用のプログラムＸｎ＋２（或いは、プログラムＹｎ＋２）が送信される。従って、リアルタイム処理が必要な実行結果Ｓの分割入れ替え及び復元を、遅延なく好適に行うことが出来るとの利点もある。
【０１２３】
上述した例では、プログラムＸは、実行結果Ｓより分割された中間データｓ１、…ｓｎを再配置することで分割入替データＵ’を生成し、第２のクライアントＣへと送信しているが、プログラムＸは、該分割入替データＵ’’の一部（つまり、複数の中間データｓ１、…ｓｎの一部）をサーバＡに配置する構成としても良い。このとき、プログラムＸの分散配置部１１０は、上述した第１動作例における中間データｓ１、…ｓｎの分散配置の態様と同様に、中間データｓ１、…ｓｎの一部をサーバＡに配置すると共に、他の一部を再配置することで分割入替データＵ’を生成しても良い。また、その他何らかの方法により中間データｓ１、…ｓｎの分散配置を実現しても良い。このように構成した場合であっても、上述した第２動作例と同様の効果を得ることが可能となる。
【０１２４】
上述した例では、プログラムＸが実行されるクライアントＢと、プログラムＹが実行されるクライアントＣとを含むデータの送受信システムにおける動作例について説明しているが、同一のクライアント（例えば、クライアントＢ）においてプログラムＸ及びプログラムＹが実行される構成であっても良い。この場合、サーバＡはプログラムＸ及びプログラムＹの両方をクライアントＢに送信し、クライアントＢにおいて各プログラムを実行すれば、上述した第２動作例と同様の効果を得ることが可能となる。
【０１２５】
本発明は、上述した実施例に限られるものではなく、請求の範囲及び明細書全体から読み取れる発明の要旨或いは思想に反しない範囲で適宜変更可能であり、そのような変更を伴なうアプリケーションソフトウェアの保護方法及びストリーム送受信システムなどもまた本発明の技術的範囲に含まれるものである。
【符号の説明】
【０１２６】
Ａ  サーバ、
Ｂ  第１のクライアント、
Ｃ  第２のクライアント、
Ｓ  アプリケーションソフトウェアの実行結果、
Ｕ’  分割入替データ、
Ｘ  第１のプログラム、
Ｙ  第２のプログラム、
１１０  分割入替部、
１２０、３３０  プログラム更新部、
２１０  認証部、
２２０  プログラム生成部、
３１０  分割入替復元部、
３２０  更新時刻生成部。
【図１】
2010067846.tif 000003
【図２】
2010067846.tif 000004
【図３】
2010067846.tif 000005
【図４】
2010067846.tif 000006
【図５】
2010067846.tif 000007
【図６】
2010067846.tif 000008
【図７】
2010067846.tif 000009
【図８】
2010067846.tif 000010
【図９】
2010067846.tif 000011
【図１０】
2010067846.tif 000012
【図１１】
2010067846.tif 000013
【図１２】
2010067846.tif 000014
【図１３】
2010067846.tif 000015
【国際調査報告】
2010067846.tif 000016
2010067846.tif 000017
2010067846.tif 000018
2010067846.tif 000019