(57)【要約】      （修正有）【課題】ダウンロードなどしたデータの不正な利用を防止する。【解決手段】クライアント識別情報を格納するために確保されたクライアント識別情報格納領域を備えたデータを受信などして取得してから蓄積に至るまでの受信蓄積工程において、受信蓄積工程において実行される生成モジュールが、そのクライアントのクライアント識別情報を取得するサブモジュールと、取得したクライアント識別情報を受信などされたデータの備えるクライアント識別情報格納領域に書込むサブモジュールとを有し、全体または一部が、クライアント識別情報格納領域にクライアント識別情報が格納された後に、格納されたクライアント識別情報と、実行処理を行うクライアントのクライアント識別情報とを比較して実行を許可するか否かを判断する。【選択図】図１
2008003928.tif 000002
【特許請求の範囲】
【請求項１】
サーバとクライアントとからなるダウンロードシステムであって、
前記サーバは、
クライアント識別情報を格納するために確保されたクライアント識別情報格納領域を備えたデータを蓄積する送信データ蓄積部と、
蓄積されたデータを送信する送信部と、
を有し、
前記クライアントは、
前記サーバから前記データを受信する受信部と、
受信したデータに基づいて生成される蓄積用データを蓄積する蓄積部と、
前記受信から前記蓄積に至る受信蓄積工程において前記蓄積用データの生成のために実行されるモジュールであって、前記クライアントの有するクライアント識別情報を取得するクライアント識別情報取得サブモジュールと、取得したクライアント識別情報を前記受信したデータのクライアント識別情報格納領域に書込むクライアント識別情報書込サブモジュールと、を有する生成モジュールを保持する生成モジュール保持部と、
を有するダウンロードシステム。
【請求項２】
前記サーバの送信データ蓄積部は、
全体または一部が、前記クライアント識別情報格納領域にクライアント識別情報が格納された後に、格納されたクライアント識別情報と、実行処理を行なうクライアントのクライアント識別情報と、を比較して実行処理を許可するか判断をするための判断モジュールを備えたプログラムとなっているデータを蓄積する送信プログラム蓄積手段を有し、
前記クライアントは、
前記判断モジュールにより利用可能にクライアント識別情報を生成するクライアント識別情報生成部
を有する請求項１に記載のダウンロードシステム。
【請求項３】
前記サーバの送信データ蓄積部に蓄積されたデータのクライアント識別情報格納領域には、前記データのクライアント識別情報格納領域以外の部分を参照して算出された値である格納領域初期値が格納されており、
前記クライアントの生成モジュール保持部が保持する生成モジュールは、
前記受信蓄積工程においてクライアント識別情報格納領域以外のデータの部分を参照して格納領域初期値を算出する格納領域初期値算出サブモジュールと、
受信されたデータ中のクライアント識別情報格納領域の有無を検出する格納領域検出サブモジュールと、
を更に有する請求項１または２に記載のダウンロードシステム。
【請求項４】
前記クライアントの生成モジュール保持部が保持する生成モジュールは、
受信したデータにクライアント識別情報格納領域が有ることが検出された場合に、検出されたクライアント識別情報格納領域に格納領域初期値以外の値が格納されているかどうかを検出する不正検出サブモジュールを有する請求項３に記載のダウンロードシステム。
【請求項５】
前記サーバは、
任意のデータを入力するデータ入力部と、
入力されたデータにクライアント識別情報を格納するクライアント識別情報格納領域を確保する格納領域確保部と、
を有する請求項１または２に記載のダウンロードシステム。
【請求項６】
前記サーバは、
データ入力部に、プログラムを全体または一部とするデータが入力された場合に、クライアント識別情報格納領域に、そのプログラムが実行処理されるクライアントのクライアント識別情報が格納された後に、格納されたクライアント識別情報と、そのプログラムの実行処理を行なうクライアントのクライアント識別情報とを比較して実行処理を許可するか判断するための判断モジュールを追加する判断モジュール追加部を有する請求項５に記載のダウンロードシステム。
【請求項７】
前記サーバは、確保されたクライアント識別情報格納領域以外のデータの部分を暗号化する暗号化部を有する請求項５または６に記載のダウンロードシステム。
【請求項８】
前記暗号化部は、
データ入力部に、プログラムを全体または一部とするデータが入力された場合に、暗号化された部分を復号化して実行する復号化モジュールを追加する復号化モジュール追加手段を有する請求項７に記載のダウンロードシステム。
【請求項９】
サーバとクライアントとからなるダウンロードシステムの動作方法であって、
前記サーバにおいて、
クライアント識別情報を格納するために確保されたクライアント識別情報格納領域を備えたデータを蓄積する送信データ蓄積ステップと、
蓄積されたデータを送信する送信ステップと、
が実行され、
前記クライアントにおいて、
前記サーバから前記データを受信する受信ステップと、
受信したデータに基づいて生成される蓄積用データを蓄積する蓄積ステップと、
前記受信から前記蓄積に至る受信蓄積工程において前記蓄積用データの生成のために実行されるモジュールであって、前記クライアントの有するクライアント識別情報を取得するサブモジュールと、取得したクライアント識別情報を前記受信したデータのクライアント識別情報格納領域に書込む書込サブモジュールと、を有する生成モジュールを保持する生成モジュール保持ステップと、
が実行されるダウンロードシステムの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダウンロードシステムに関し、特に、プログラムなどのデータをダウンロードなどしてクライアントに導入した場合に、そのデータを専らそのクライアントだけで利用可能とするダウンロードシステムに関する。
【背景技術】
【０００２】
プログラムなどのデジタルデータの不正コピーが問題となっている。「データの不正コピー」とは、本来そのデータを利用する権利を有する者が、権利を有しない者にそのプログラムを複製して譲渡、引渡などをし、権利を有しない者がそのデータを自分の有するクライアントなどに導入して利用することなどをいう。
【０００３】
このような不正コピーを防止するために、例えばプログラムを配信する者は、プログラムと、そのプログラムを実行するためのシリアルキーなどと、を異なる経路で送信して配信したり、プログラムをダウンロードなどして導入するクライアントの固有情報をプログラムの配信サーバに送信させ、配信サーバが受け取った固有情報をプログラムに埋め込み、そのクライアントでしか実行できないプログラムを配信したりしている。しかし、プログラムとそのシリアルキーなどとの両方を譲渡などすれば、権利を有しない者のクライアントでもプログラムの実行が可能となり問題の解決にならず、また、配信サーバにクライアントの固有情報を送信するのは、個人情報やプライバシの保護の観点から問題がある。
【０００４】
一方、プログラムのダウンロードの完了を検出し、ダウンロードされたプログラムのインストール時にクライアントの固有情報が含まれているかどうかを判断し、（１）固有情報が含まれていないと判断されたときには、固有情報が含まれているかどうか判断したタスク等とダウンロードの完了を検出したタスク等とが同一かどうかを判定し、同一であると判定されれば、ダウンロードされたプログラムにクライアントの固有情報を追加記録し、（２）固有情報が含まれていると判断されたときには、含まれている固有情報がクライアントの固有情報と適合するかどうかを判断することにより、不正なプログラムの実行を防止するプログラムなどが知られている（例えば、特許文献１参照。）。
【特許文献１】特開２００５−１４１４５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示されている技術では、ダウンロードの検出を行なったタスク等と、ダウンロードされたプログラムに固有情報が含まれているかどうかを判断したタスク等と、が同一となる必要があるためには、プログラムのダウンロードを行なった直後に、プログラムの実行を行なう必要がある。
【０００６】
一方、配信されるプログラムが複雑化、高度化しており、プログラムのサイズが増大する傾向にある。近年、光ファイバが用いるなどされて通信速度の上限が増大しているが、利用者の増大などによる通信の混雑により、実質的な通信速度の増大はプログラムのサイズの増大に追いついていない。このため、プログラムのダウンロードにより多くの時間が必要となってきている。したがって、特許文献１に開示されている技術では、クライアントの利用者は、プログラムのダウンロードの完了まで待ち、直ちにプログラムを実行必要があり、利用者は不便を強いられる。例えば、複数のプログラムをまとめてダウンロードしておき、後日、時間ができたときに、それらの複数のプログラムを実行することができず、煩に堪えない。
【０００７】
また、特許文献１には、ダウンロードしたプログラムに追加記録された固有情報を、ダウンロードしたプログラムが参照するとは開示されていない。このため、ダウンロードしたプログラム（例えば、特許文献１の図３（ｂ）、（ｃ）に示されているＳｅｔｕｐ．ｅｘｅ）を、特許文献１の請求項１などに記載されている不正インストール防止プログラムを介して実行して初めて、不正インストールが防止される効果が発揮されるのであり、ダウンロードしたプログラムが、不正インストール防止プログラムを介さずに直接実行されてしまえば、不正インストールは防止できない。
【０００８】
そこで、本発明では、不正インストール防止プログラムなどを介さずに、ダウンロードしたプログラムなどのデータが直接実行などの利用がされても、不正な実行などの利用がされないクライアント、システムなどを提供することを目的とする。
【課題を解決するための手段】
【０００９】
かかる目的を解決するために、本発明では、クライアント識別情報を格納するために確保されたクライアント識別情報格納領域を備えたデータを受信などして取得してから蓄積に至るまでの受信蓄積工程において、受信蓄積工程において実行される生成モジュールが、そのクライアントのクライアント識別情報を取得するサブモジュールと、取得したクライアント識別情報を受信などされたデータの備えるクライアント識別情報格納領域に書込むサブモジュールと、を有するように構成されたクライアント、また、そのようなクライアントから構成されるダウンロードシステムを提供する。
【００１０】
このような構成により、データのダウンロードなどによる取得から蓄積までの工程で、そのデータが備えるクライアント識別情報格納領域にクライアント識別情報が、クライアントの利用者から透過的に書込まれ（すなわち、利用者はクライアント識別情報を書込む処理を別途行なう必要がない）、そのクライアントのみで利用可能とすることができるので、課題が解決される。
【００１１】
また、ダウンロードなどにより取得されるデータは、クライアント識別情報格納領域にクライアント識別情報が格納された後に、格納されたクライアント識別情報と、実行処理を行なうクライアントのクライアント識別情報と、を比較して実行処理を許可するかを判断するための判断モジュールを備えたプログラムとして構成されていてもよい。
【００１２】
このような構成により、プログラムのダウンロードなどによる取得から蓄積までの工程で、そのプログラムが有するクライアント識別情報格納領域にクライアント識別情報が、端末の利用者から透過的に書込まれ、蓄積されたプログラムはそのクライアントでしか実行できなくなるので、課題が解決される。
【００１３】
また、ダウンロードなどにより取得されるデータが備えるクライアント識別情報格納領域には、そのデータのクライアント識別情報格納領域以外の部分を参照して算出された値である格納領域初期値が格納されており、前記生成モジュールは、受信蓄積工程において、受信したデータのクライアント識別情報格納領域以外の部分を参照して格納領域初期値を算出するサブモジュールと、その算出された格納領域初期値を用いて、ダウンロードなどにより取得されるデータの格納領域の有無を検出するサブモジュールから構成されていてもよい。
【００１４】
このような構成により、格納領域を持たない一般のデータをダウンロードなどして取得されてもデータが改変されることなくダウンロードなどが可能であり、また、クライアント識別情報格納領域を持つデータについては、そのクライアント識別情報格納領域の位置を可変にできるという効果が得られる。
【００１５】
また、生成モジュールは、取得されたデータにクライアント識別情報格納領域が有ることを検出した場合に、検出されたクライアント識別情報格納領域に格納領域初期値以外の値が格納されているかどうかを検出するサブモジュールから構成されていてよい。
【００１６】
このような構成により、あるクライアントに取得されてクライアント識別情報格納領域にそのクライアントのクライアント識別情報が書込まれたデータが、別のクライアントにダウンロードなどされたことを検出することができ、不正行為などが行なわれたことを検出することが可能となる。
【００１７】
また、上記のように構成されたクライアントと、サーバと、から構成されるダウンロードシステムにおいて、サーバに任意のデータを入力可能とし、入力されたプログラムにクライアント識別情報格納領域を確保する機能を備えさせた構成をとってもよい。
【００１８】
これにより、配信先のクライアントでのみ利用可能なデータの配信を容易に行なうことができる。
【００１９】
また、サーバに配信などのために蓄積されるデータやサーバにより配信されるデータが暗号化されるようになっていてもよい。
【００２０】
これにより、特にデータがプログラムである場合に、クライアント識別情報の取得、比較のアルゴリズムが難読化されることにより、クラッキングされることを防止することができる。
【発明の効果】
【００２１】
本発明により、データのダウンロードなどによる取得から蓄積までの工程で、そのデータが備えるクライアント識別情報格納領域にクライアント識別情報が、クライアントの利用者から透過的に書込まれるので、蓄積されたデータはそのクライアントでしか実行できなくなる、などの効果が得られ、データの不正コピーなどを防止することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明を実施するための最良の形態について、実施形態として図を用いて説明を行なう。なお、本発明はこれら実施形態に何ら限定されることなく、その要旨を逸脱しない範囲において種々なる態様で実施し得る。
【００２３】
（実施形態１）
実施形態１として、クライアント識別情報を格納するために確保されたクライアント識別情報格納領域を備えたデータを受信などして取得してから蓄積に至るまでの受信蓄積工程において、受信蓄積工程において実行される生成モジュールが、そのクライアントのクライアント識別情報を取得するサブモジュールと、取得したクライアント識別情報を受信などされたデータの備えるクライアント識別情報格納領域に書込むサブモジュールと、を有するように構成されたクライアントから構成されるダウンロードシステムについて説明を行なう。
【００２４】
図１は、実施形態に１に係るダウンロードシステムの機能ブロック図を例示する。ダウンロードシステム１００は、サーバ１０１とクライアント１０２とからなる。サーバ１０１とクライアント１０２とは、インターネットなどに代表される通信網１０３によって通信を行なうのが可能である。なお、サーバ１０１とクライアント１０２とは、通信を行なうことは必須ではなく、例えば、サーバ１０１でデータを媒体に書込み、その媒体がクライアント１０２で読み取り可能になっていてもよい。サーバ１０１とクライアント１０２の実装の方法の一つとしては、電子計算機を用い、以下に説明する部、手段を実現するためのプログラムを動作させるものがある。
【００２５】
サーバ１０１は、送信データ蓄積部１０４と、送信部１０５とを有する。
【００２６】
「送信データ蓄積部」１０４は、クライアント識別情報格納領域を備えたデータを蓄積する。ここに「データ」とは、デジタルデータを主に意味する。デジタルデータの例としては、音楽を再生するためのデータ、映像や静止画像を再生するためのデータ、プログラムなどがある。また、プログラムという場合、それ自体で実行可能なデータもあれば、他のモジュールと組み合わせて実行可能となる形式のデータもある。例えば、「ｏ」、「ｏｂｊ」などの拡張子を持つオブジェクトや、「ａ」、「ｌｉｂ」、「ｌｏ」、「ｄｌｌ」などの拡張子を持つライブラリなどがある。本実施形態では、このようなデータは、クライアント識別情報格納領域を備えるものとする。「クライアント識別情報格納領域」とは、クライアント識別情報を格納するために確保された領域である。例えば、送信データ蓄積部１０４にデータが蓄積されるときに、そのデータにクライアント識別情報格納領域を付加する。例えば、データの開始部分、データの途中部分、データの終わり部分に付加する。また、クライアント識別情報格納領域は、複数の部分に分散されるようになっていてもよい。また、新たに領域を付加することなく、例えば、画像データに電子透かしなどのデータを付加する部分をクライアント識別情報格納領域と呼んでもよい。また、ｈｅａｄｅｒ領域などの空き領域をクライアント識別情報格納領域として用いてもよい。
【００２７】
ここに、「クライアント識別情報」とは、クライアントを識別するために用いることができる情報を言い、クライアントが異なるとクライアント識別情報も異なる蓋然性が高い情報である。クライアント識別情報の例としては、クライアントの製造番号や、クライアントが備える通信インターフェースのＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスや、クライアントがＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備える場合には、ＣＰＵの名称、コードネーム、ＣＰＵの個数、ＣＰＵが動作するクロック数、オーバークロックの有無、ＣＰＵに固有の製造番号や、マザーボードの名称、クライアントがハードディスクドライブを備える場合には、ハードディスクのフォーマット時のシリアル番号や、クライアントで動作するオペレーティングシステムのバージョン番号やそのオペレーティングシステムを動作させる場合のシリアルキーや、インストールされているソフトウェアの種類、利用するユーザ名、ユーザの生体認証情報、を含んで生成される情報や、また、これらの組み合わせを含んで生成される情報がある。なお、クライアント識別情報は、以上の例示に限定されるものではない。
【００２８】
サーバ１０１を電子計算機を用いて実装する場合には、送信データ蓄積部１０４は、電子計算機の主メモリやディスク装置により実現される。
【００２９】
「送信部」１０５は、蓄積されたデータを送信する。「蓄積されたデータ」には、送信データ蓄積部１０４に蓄積されたデータが含まれる。送信は、通信網１０３を介してクライアント１０２などに向けて行なわれることが想定される。それ以外には、脱着可能な媒体にデータを書込むことも挙げられる。
【００３０】
サーバ１０１を電子計算機を用いて実装する場合には、送信部１０５は、電子計算機の通信インターフェースや、その通信インターフェースを動作させるためのデバイスドライバや、通信のためのプログラムモジュールなどを用いて実現される。また、媒体に書込むためのデバイスドライバなどで実現されてもよい。
【００３１】
クライアント１０２は、受信部１０６と、蓄積部１０７と、生成モジュール保持部１０８とを有する。
【００３２】
「受信部」１０６は、サーバ１０１からデータを受信する。すなわち、サーバ１０１の送信部１０５から通信網１０３を介して送信されるデータを受信する。したがって、ここで受信されるデータには、クライアント識別情報格納領域を備えたデータが含まれる。また、サーバ１０１によりデータが書込まれた媒体をクライアント１０２に装着し、その媒体を読み取ることで、データをクライアント１０２に導入するようになっていてもよい。通信網１０３は、このように媒体を経由してデータが導入されることも含んで表現しているものとする（他の機能ブロック図においても同様である）。
【００３３】
クライアント１０２を電子計算機を用いて実装する場合には、受信部１０６は通信インターフェースや、その通信インターフェースを動作させるためのデバイスドライバや、通信のためのプログラムモジュールなどを用いて実現される。また、媒体を読み取るデバイスドライバを用いて実現されていてもよい。
【００３４】
「蓄積部」１０７は、蓄積用データを蓄積する。「蓄積用データ」とは、受信したデータに基づいて生成されるデータである。「基づいて」とは、受信したデータを用いて蓄積用データが生成されることを意味しており、後に説明するように、受信したデータにクライアント識別情報格納領域が備えられていれば、そのクライアント識別情報格納領域にクライアント識別情報を格納して得られるデータが蓄積用データとなる。また、受信したデータにクライアント識別情報格納領域がなければ、受信したデータがそのまま蓄積用データとなる。
【００３５】
クライアント１０２を電子計算機を用いて実装する場合には、蓄積部１０７は、ハードディスクや主メモリなどを用いて実現される。特に、クライアントの各部を実現するプログラムのうち、ユーザモードで動作するプログラムが参照可能な主メモリの一部やハードディスクの一部であることが主に想定される。
【００３６】
「生成モジュール保持部」１０８は、生成モジュールを保持する。「生成モジュール」とは、受信部１０６による受信から蓄積部１０７による蓄積に至る受信蓄積工程において、蓄積用データのために実行されるモジュールである。すなわち、受信部１０６が通信網１０３を介してデータを受信し、その受信されたデータから蓄積部１０７に蓄積するためのデータである蓄積用データを生成する間に実行されるモジュールである。
【００３７】
生成モジュールは、プログラムのモジュールとして提供されることが主に想定される。したがって、生成モジュール保持部１０８は、電子計算機の主メモリにより実現され得る。
【００３８】
生成モジュールは、クライアント識別情報取得サブモジュールと、クライアント識別情報書込サブモジュールとを有する。
【００３９】
「クライアント識別情報取得サブモジュール」は、クライアント１０２の有するクライアント識別情報を取得する。例えば、クライアント１０２のＭＡＣアドレスなどを取得する。クライアントが電子計算機を用いて実現される場合には、取得されたクライアント識別情報は、メモリやレジスタに保持される。
【００４０】
「クライアント識別情報書込サブモジュール」は、クライアント識別情報取得サブモジュールにより取得されたクライアント識別情報を、受信部１０６により受信したデータの備えるクライアント識別情報格納領域に書込む。例えば、データの開始部分にクライアント識別情報格納領域が備えられているのであれば、そこに、メモリやレジスタに保持されているクライアント識別情報を書込む。また、クライアント識別情報格納領域に格納されるクライアント識別情報が、画像データの電子透かしなどのデータとして格納されるのであれば、そのような電子透かしなどとして、クライアント識別情報を格納する。クライアント識別情報格納領域がデータのどの位置に存在するかは、例えば、前もって、サーバ１０１との通信プロトコルなどにより規定する。また、データの種類に応じて、その位置が異なるようになっていてもよい。また、データ中の位置を決めておくのではなく、データ中に特定のビットパターンなどの特定の値（例えば、通常のデータに現れる頻度が低いと考えられるＡＦＡＦＡＦＡＦという１６進数）の存在する場所が、クライアント識別情報が書込まれる場所であると定めておいてもよい。
【００４１】
生成モジュールは、クライアント１０２が電子計算機を用いて実装される場合においては、通信インターフェースのデバイスドライバや通信のためのプログラムモジュールの一部として実現することができる。
【００４２】
図２は、生成モジュールをデバイスドライバなどとして実現する場合での生成モジュールの処理の流れを説明するフローチャートである。この場合、生成モジュールは、サーバ１０１によりデータが送信されるためのバケットなどが受信あるいは取得される都度、呼び出されるようになっていてもよい。もしそのようになっているのであれば、サーバ１０１からパケットなどが受信されたり、媒体を読み取るためのブロックデータが得られたりした都度、ステップＳ２０１へ処理が移行され、サーバ１０１からパケットやブロックデータを受け取る。次に、ステップＳ２０２へ処理が移行され、受け取ったパケットやブロックデータの表わす部分データの位置がクライアント識別情報格納領域を含むかどうかを判断する。もし、クライアント識別情報格納領域を含めば、ステップＳ２０３へ処理が移行され、そうでなければ、ステップＳ２０５へジャンプする。ステップＳ２０３では、クライアント識別情報の取得がされる。この処理は、クライアント識別情報取得サブモジュールで行なわれる。次のステップＳ２０４では、クライアント識別情報格納領域へのクライアント識別情報の書込みが行なわれる。この処理は、クライアント識別情報書込サブモジュールで行なわれる。次のステップでは、読み出しバッファにパケットの表わす部分データを読み出しバッファに追記する。読み出しバッファというのは、通信などのためのプログラムモジュールは上下に階層化されているので、生成モジュールの上位階層のモジュールが入力するデータを一時的に蓄えるバッファである。
【００４３】
図３は、クライアントが電子計算機を用いて実装される場合のデバイスドライバの位置を示す一例図である。ハードウェア３０１が最下位の層にあり、その上の階層として、ハードウェア３０１を抽象化するためのオペレーティングシステム３０２が動作する。このオペレーティングシステム３０２と、その上で実行される実行プログラム３０３とにより、クライアントを実現するためのプログラムが構成される。デバイスドライバ３０４は、オペレーティングシステムの内部で動作し、ハードウェアを抽象化し、ハードウェア３０１の機能を実行プログラム３０３からシステムコールＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｉｎｔｅｒｆａｃｅ）を通じて操作可能にする。なお、実行プログラム３０３の例としては、データをダウンロードするためのｆｔｐクライアントや、ブラウザなどが挙げられる。なお、実行プログラム３０３は、これらに限定されるものではない。
【００４４】
図４は、ハードウェア３０１の構成の一例図である。ハードウェア４００は、ＣＰＵ４０１、ＲＡＭ４０２、ハードディスクなどの外部記憶媒体４０３、ＲＯＭ４０４、入出力インターフェース４０５、通信インターフェース４０６からなり、これらがバスにより相互に結合された形態となっている。電源が投入されると、ＲＯＭ４０４に格納された初期起動プログラム（例えば、ＢＩＯＳ）の所定アドレスからの処理がＣＰＵ４０１により開始される。その初期起動プログラムは、例えば、ハードディスクの最初のセクタに格納されているブートプログラムをＲＡＭ４０２に読込み、ブートプログラムへ制御を移す。ブートプログラムは、例えば、ハードディスクの所定位置に記録されているオペレーティングシステムをＲＡＭに展開し、オペレーティングシステムに制御を移す。オペレーティングシステムは、実行プログラム３０３をハードディスクから読み取り実行を行なう。実行プログラム３０３は、例えば、マウスやキーボード、ディスプレイが接続された入出力インターフェース４０５からのクライアント１０２の利用者からの指示を読み取り、通信インターフェース４０６などを用いてサーバとの通信を行ない、データの受信を行なう。このとき、デバイスドライバなどして実現される生成モジュールが動作して、蓄積用データが生成されて、ＲＡＭ４０２や外部記憶媒体４０３に格納される。
【００４５】
なお、近年開発されているオペレーティングシステムでは、デバイスドライバは、動的ライブラリとして提供が可能であり、生成モジュールも、そのような動的ライブラリとして提供が可能である。また、生成モジュールはオペレーティングシステムのカーネル内で動作するように実現されるものではなく、例えば、システムコールＡＰＩの中に組み込まれたり、システムコールＡＰＩを用いたライブラリに組み込まれるようになっていてもよい。また、実行プログラム３０３の中に組み込まれるなどしてもよい。例えば、実行プログラム３０３がブラウザであれば、実行モジュールは、そのブラウザに対するプラグインとして提供されてもよい。
【００４６】
（実施形態１：別の構成）
図５は、実施形態１の別の構成における機能ブロック図を例示する。ダウンロードシステム５００は、サーバ５０１と、クライアント５０２とからなる。サーバ５０１と、クライアント５０２とは、インターネットなどに代表される通信網５０３により通信が可能である。
【００４７】
サーバ５０１は、送信データ蓄積部５０４と、送信部５０５とを有する。上述のサーバ１０１との違いは、送信データ蓄積部５０４が、送信プログラム蓄積手段５０９を有している点である。
【００４８】
「送信プログラム蓄積手段」５０９は、判断モジュールを備えたプログラムを全体または一部とするデータを蓄積する。「判断モジュール」とは、クライアントの生成モジュールによりクライアント識別情報格納領域にそのクライアントのクライアント識別情報が格納された後に、プログラムの実行処理がされる際に、その格納されたクライアント識別情報と、実行処理を行なうクライアントのクライアント識別情報と、を比較して実行処理を許可するか判断をするためのモジュールである。すなわち、この構成では、プログラムとしてのデータをサーバからダウンロードなどして導入したクライアント以外のクライアントへ、データをコピーしても、そのデータであるプログラムは実行されなくなる。なぜならば、ダウンロードしたクライアントのクライアント識別情報と、コピーを行ないプログラムを実行しようとするクライアントのクライアント識別情報と、が異なる蓋然性が高いからである。
【００４９】
なお、判断モジュールの無いプログラムに、後から判断モジュールを追加することも可能である。この追加のために用いられるプログラムを変換プログラムと呼ぶと、変換プログラムは、サーバ５０１で動作し、変換プログラムの結果として得られたプログラムを送信プログラム蓄積手段５０９に蓄積するようになっていてもよい。また、変換プログラムは、サーバ５０１以外のサーバである変換サーバで動作して、いわゆるアプリケーションサービスプロバイダ的に構成されていてもよい。すなわち、一旦、サーバ５０１は、判断モジュールのないプログラムを変換サーバに送信し、変換サーバでは、変換プログラムを動作させて、判断モジュールの追加されたプログラムを返信する。サーバ５０１は、返信されたプログラムを送信プログラム蓄積手段５０９に蓄積する。
【００５０】
図６は、クライアント識別情報格納領域を備えないプログラムの構造と、そのような構造のプログラムがクライアント識別情報格納領域を備えた構造と、の一例を示す。図６（Ａ）は、クライアント識別情報格納領域を備えないプログラムの構造の一例を示し、プログラムは、ｈｅａｄｅｒ領域６０１と、．ｔｅｘｔ領域６０２と、．ｄａｔａ領域６０３とからなる。ｈｅａｄｅｒ領域６０１は、実行形式であることを示すマジックナンバ、．ｔｅｘｔ領域６０２などの領域のサイズ、エントリポイントのアドレスなどを保持する。．ｔｅｘｔ領域６０２は、インストラクションが格納された領域である。．ｄａｔａ領域６０３は、初期化されたデータを含む領域である。なお、プログラムの構造は、オペレーティングシステムごとに異なり、本明細書の例に限定されるものではない。例えば、．ｄａｔａ領域が先にあり、次に．ｔｅｘｔ領域があり、．ｒｓｒｃ領域などがその後に続いてもよい。
【００５１】
図６（Ｂ）は、図６（Ａ）に例示された構造のプログラムに、クライアント識別情報格納領域６０４が備えられた構造の一例を示す。ここでは、クライアント識別情報格納領域６０４は、．ｔｅｘｔ領域６０２に続けて配置され、．ｔｅｘｔ領域６０２の一部として備えられている。もちろん、クライアント識別情報格納領域６０４の配置は、図６（Ｂ）に例示されるものに限定されない。例えば、ｈｅａｄｅｒ領域６０１の空き領域に確保されたり、ｈｅａｄｅｒ領域６０１と．ｔｅｘｔ領域と、の間に配置されてもよい。また、．ｄａｔａ領域６０３に続けて配置されるようになっていてもよい。
【００５２】
クライアント５０２は、受信部５０６と、蓄積部５０７と、受信モジュール保持部５０８と、クライアント識別情報生成部５１０と、を有する。上述のクライアント１０２との違いは、クライアント識別情報生成部５１０をさらに有する点である。
【００５３】
「クライアント識別情報生成部」５１０は、判断モジュールにより利用可能にクライアント識別情報を生成する部である。例えば、クライアント識別情報がＭＡＣアドレスであれば、そのＭＡＣアドレスを読み出すハードウェアやソフトウェアのモジュールにより構成されている。また、クライアント識別情報が、ＭＡＣアドレスとＣＰＵの名称などとの組み合わせなどの、複数の情報の組み合わせとして算出されるのであれば、それぞれの情報を読み出して、組み合わせを算出するモジュールにより構成される。読み出されたクライアント識別情報や、算出されたクライアント識別情報は、判断モジュールにより利用可能となるように、レジスタやメモリの領域などに格納される。
【００５４】
図７は、送信プログラム蓄積手段５０９に蓄積されたプログラムがクライアントにダウンロードなどされ導入された後に実行される場合の判断モジュールの処理の流れを説明するフローチャートを例示する。まず、ステップＳ７０１として、プログラムに備えられたクライアント識別情報格納領域に格納されたクライアント識別情報の読み出しを行なう。例えば、．ｔｅｘｔ領域６０２に続けてクライアント識別情報格納領域が備えられている場合には、．ｔｅｘｔ領域の終わりから所定の大きさの領域に格納されたクライアント識別情報を読み出す。次にステップＳ７０２として、プログラムの実行処理を行なうクライアントのクライアント識別情報を、クライアント識別情報生成部５１０で生成して取得する。次に、ステップＳ７０４において、ステップＳ７０１で読み出されたクライアント識別情報と、ステップＳ７０２で取得されたクライアント識別情報と、の比較を行なう。ステップＳ７０５において、比較の結果を判断する。もし、比較の結果が等しい、あるいは、二つのクライアント識別情報が所定の条件で適合するものである場合には、ステップＳ７０６へ処理を移行して、プログラムの実行処理を許可する。例えば、判断モジュールの実行の次に実行されるべきプログラムの部分の処理を継続する。もし、比較の結果が異なり、二つのクライアント識別情報が所定の条件で適合しないものである場合には、ステップＳ７０７へ処理を移行して、プログラムの実行処理を許可しない。例えば、プログラムの実行を強制的に終了させる。
【００５５】
図８は、サーバとクライアントにおける処理の流れをクライアント側から説明するフローチャートを例示する。ステップＳ８０１において、サーバとの通信セッションなどの確立を行なう。サーバ側では、例えば、ｌｉｓｔｅｎシステムコールなどを実行して、通信セッションの確立を待ち、クライアントでは、ｃｏｎｎｅｃｔシステムコールなどを実行して通信セッションを確立させる。ステップＳ８０２においては、生成モジュールを介して所定量の情報の読み出しを行なう。所定量というのは、例えばｒｅａｄシステムコールにより読み出しを行なうためのバッファのサイズである。クライアントでのｒｅａｄシステムコールは、サーバの送信データ蓄積部に蓄積されたデータのｗｒｉｔｅに対応して処理がされる。すなわち、ハードウェア３０１の通信インターフェース４０６から実行プログラム３０３へデータが渡される際に、生成モジュールが動作して、クライアント識別情報格納領域にクライアント識別情報が書込まれるなどして、読み出しバッファに書込まれたデータがｒｅａｄシステムコールにより読み出される。読み出しが終了すると、ステップＳ８０３で、ＥＯＦ（Ｅｎｄ  ｏｆ  Ｆｉｌｅ）かどうかを判断し、もしそうならば、処理を終了し、ＥＯＦでなければ読み出したデータをハードディスク等へ追記してステップＳ８０２へ戻る。
【００５６】
多くのオペレーティングシステムでは、上述したように、サーバとの通信によるデータの読み出しは、ファイルの読み出しとほぼ同じように行なわれる。したがって、本実施形態では、データはサーバから送信されるとして説明したが、サーバによりプログラムが記録されたＣＤ−ＲＯＭなどの媒体に記録されたデータをクライアントが読み取る際に、生成モジュールが実行されるようになっていてもよい。すなわち、媒体には、クライアント識別情報格納領域を備えたデータが記録されており、そのように記録されたデータを読み取り、蓄積に至る工程において、生成モジュールが実行されて、データに備えられたクライアント識別情報格納領域に、クライアントのクライアント識別情報が書込まれるようになっていてもよい。
【００５７】
本実施形態によれば、データのダウンロードなどによる取得から蓄積までの工程で、そのデータが備えるクライアント識別情報格納領域にクライアント識別情報が、クライアントの利用者から透過的に書込まれ、そのクライアントのみで利用可能とすることができるので、不正コピーによるデータの不正利用を防止することができる。
【００５８】
（実施形態２）
実施形態２として、ダウンロードなどにより取得されるデータが備えるクライアント識別情報格納領域には、そのデータのクライアント識別情報格納領域以外の部分を参照して算出された値である格納領域初期値が格納されており、前記生成モジュールは、受信蓄積工程において、受信したデータのクライアント識別情報格納領域以外の部分を参照して格納領域初期値を算出するサブモジュールと、その算出された格納領域初期値を用いて、ダウンロードなどにより取得されるデータの格納領域の有無を検出するサブモジュールを用いて構成される実施形態を説明する。
【００５９】
本実施形態では、サーバの送信データ蓄積部に蓄積されたデータのクライアント識別情報格納領域は、格納領域初期値を格納する。ここに、「格納領域初期値」とは、そのデータのクライアント識別情報格納領域以外の部分を参照して算出された値である。
【００６０】
図９は、格納領域初期値の算出の一例を示す。図９の左のようにｈｅａｄｅｒ領域、．ｔｅｘｔ領域、．ｄａｔａ領域からなるプログラムがデータであり、．ｔｅｘｔ領域に続けてクライアント識別情報格納領域（図９では、「格納領域」と略してある）が備えられる場合には、格納領域に格納される値である格納領域初期値は、格納領域以外の領域であるｈｅａｄｅｒ領域、．ｔｅｘｔ領域、．ｄａｔａ領域を参照して算出される。なお、格納領域初期値は、ｈｅａｄｅｒ領域、．ｔｅｘｔ領域、．ｄａｔａ領域の全ての部分を参照して算出される必要はなく、その一部を参照して算出されるものであってもよい。
【００６１】
図１０は、ｈｅａｄｅｒ領域、．ｔｅｘｔ領域、．ｄａｔａ領域の一部であるｈｅａｄｅｒ領域、．ｔｅｘｔ領域を参照して格納領域初期値が算出され、格納領域に格納される様子を例示している。このように、格納領域より前の部分を参照して格納領域初期値を算出すると、格納領域の有無の検出が、データの全てを読込まずに行なうことができるという利点がある。また、格納領域より後ろの部分であっても、データの送信、受信などの入出力の単位である同じバッファサイズで示される大きさ程度以内の距離に離れている部分（例えば、ある読込みにより、格納領域と同じバッファに読込まれる部分（具体的な数字を用いて例を挙げると、次のようになる。すなわち、バッファサイズが１０２４バイトであり、格納領域がデータの１０３０バイトから５０バイトまでの部分である場合には、１０８０バイトから２０４８バイトまでの部分を参照して格納領域初期値を算出してもよい））を算出しても同じような利点を得ることができる。
【００６２】
本実施形態では、図１１に例示されるように、クライアントの生成モジュール保持部が保持する生成モジュール１１０１は、クライアント識別情報取得サブモジュール１１０２と、クライアント識別情報書込サブモジュール１１０３に加えて、格納領域初期値算出サブモジュール１１０４と、格納領域検出サブモジュール１１０５と、を有する。
【００６３】
「格納領域初期値算出サブモジュール」１１０４は、受信蓄積工程において、クライアント識別情報格納領域以外のデータ部分を参照して格納領域初期値を算出する。格納領域初期値算出サブモジュールが格納領域初期値を算出するアルゴリズムは、サーバの送信データ蓄積部に格納されたデータのクライアント識別情報格納領域に格納されている格納領域初期値を算出するアルゴリズムと実質的に同等になっている。「実質的に同等」とは、アルゴリズムを具現化するプログラムの表現が同じか、異なっていたとしても、同じ入力（ここでは、クライアント識別情報格納領域以外のデータ部分）に対して同じ出力（ここでは、格納領域初期値）を与えることをいう。
【００６４】
ここで、格納領域初期値を算出するアルゴリズムとしては、例えば、可変長の情報を一定のサイズの情報に変換するハッシュ値算出アルゴリズムを用いることができる。より具体的は、ＳＨＡやＭＤ５を用いることができる。また、このようなアルゴリズムで算出された値を更にサーバの秘密鍵などを用いて暗号化してもよい。これにより、格納領域初期値と同じ値がクライアント識別情報格納領域以外に現れて、誤った書込みがされるのを防止することが可能となる。
【００６５】
「格納領域検出モジュール」１１０５は、受信されたデータの中のクライアント識別情報格納領域の有無を検出する。例えば、格納領域初期値算出サブモジュールにより算出された格納領域初期値と同じ値が、クライアント識別情報格納領域に格納されているかどうかを判断して、もし、格納されていれば、クライアント識別情報格納領域が有ると判断し、そうでなければ無いと判断する。クライアント識別情報格納領域が有ると判断されれば、クライアント識別情報書込モジュールにより、有ると判断されたクライアント識別情報格納領域にクライアント識別情報を書込む。
【００６６】
また、図１０のようにクライアント識別情報格納領域より前、あるいは、後ろの部分があってもクライアント識別情報格納領域と同じバッファに読込まれる部分などから、格納領域初期値が算出される場合には、生成モジュールは、データの受信を行ないつつ、格納領域初期値の算出を行ない、それまでに算出された格納領域初期値が、新たに受信を行なった部分に現れるかどうかを判断して、クライアント識別情報格納領域の有無を検出してもよい。
【００６７】
本実施形態では、格納領域を持たない一般のデータであってもダウンロードなどして取得されてもデータが改変されることなくダウンロードなどが可能であり、また、クライアント識別情報格納領域を持つデータであっても、そのクライアント識別情報格納領域の位置を可変にできるという効果が得られる。例えば、ダウンロードの都度、あるいは、送信データ蓄積部にデータが蓄積される都度、クライアント識別情報格納領域の位置が変わるようにでき、データの不正コピーを困難にできる。
【００６８】
（実施形態３）
実施形態３として、生成モジュールは、取得されたデータにクライアント識別情報格納領域が有ることを検出した場合に、検出されたクライアント識別情報格納領域に格納領域初期値以外の値が格納されているかどうかを検出するサブモジュールから構成されている場合について説明する。
【００６９】
図１２は、本実施形態での生成モジュールの構成の一例図である。本実施形態では、生成モジュール１２０１は、クライアント識別情報取得サブモジュール１２０２と、クライアント識別情報書込サブモジュール１２０３に加えて、格納領域初期値算出サブモジュール１２０４と、格納領域検出サブモジュール１２０５と、更に、不正検出サブモジュール１２０６と、を有する。
【００７０】
「不正検出サブモジュール」１２０６は、受信したデータにクライアント識別情報格納領域が有ることが検出された場合、検出されたクライアント識別情報格納領域に格納領域初期値以外の値が格納されているかどうかを検出する。データの構造や、クライアント識別情報格納領域のデータ中での位置が予め定められていたり、データのｈｅａｄｅｒ領域などに格納されている情報から位置を算出できる場合には、クライアント識別情報格納領域以外の部分を参照して、格納領域初期値を算出することが可能である。そして、算出された格納領域初期値が、クライアント識別情報格納領域に格納されているかどうかを判断することができる。
【００７１】
もし、算出された格納領域初期値が、クライアント識別情報格納領域に格納されていなければ、受信したデータは、サーバから正規に受信されたものではなく、途中で改変がされたり、あるいは、サーバから別のクライアントに受信され、それが受信されたりしたものであることが判明し、何らかの不正が行なわれていることを検出することができる。このように不正が検出された場合には、データの取得を中止したり、データを破壊などするようになっていてもよい。あるいは、クライアントの利用者に不正が介在した旨を入出力インターフェース４０５を介して表示などを行なってもよい。
【００７２】
このように、本実施形態では、あるクライアントに取得されてクライアント識別情報格納領域にそのクライアントのクライアント識別情報が書込まれたデータが、別のクライアントにダウンロードなどされたことを検出することができ、不正行為などが行なわれたことを検出することが可能となる。
【００７３】
（実施形態４）
実施形態４として、サーバに任意のデータを入力可能とし、入力されたプログラムにクライアント識別情報格納領域を確保する機能を備えさせたダウンロードシステムについて説明する。
【００７４】
図１３は、実施形態４に係るダウンロードシステムの機能ブロック図を例示する。ダウンロードシステムは、サーバ１３０１と、クライアント１３０２と、からなる。サーバ１３０１と、クライアント１３０２と、は、通信網１３０３などを介して通信が可能である。
【００７５】
サーバ１３０１は、送信データ蓄積部１３０４と、送信部１３０５と、データ入力部１３０９と、格納領域確保部１３１０と、を有する。なお、送信データ蓄積部１３０４は、送信プログラム蓄積手段を更に有していてもよい。
【００７６】
クライアント１３０２は、受信部１３０６と、蓄積部１３０７と、生成モジュール保持部１３０８と、を有する。なお、クライアント１３０２は、クライアント識別情報生成部を更に有していてもよい。
【００７７】
したがって、本実施形態に係るダウンロードシステムの構成は、実施形態１に係るダウンロードシステムにおいて、サーバが更にデータ入力部１３０９と格納領域確保部１３１０とを有する構成となっている。
【００７８】
「データ入力部」１３０９は、任意のデータを入力する。例えば、データを生成した企業などからデータを所定のプロトコルで受信したり、データを生成した企業などから送付された媒体に記録されたデータを読み取ったりする。
【００７９】
「格納領域確保部」１３１０は、データ入力部１３０９に入力されたデータに、クライアント識別情報格納領域を確保する。例えば、データの開始部分、データの途中部分、データの終わり部分のうち、予め定められた位置にクライアント識別情報格納領域を確保する。また、クライアント識別情報格納領域が、画像データなどの電子透かしなどのデータとして付加される部分であれば、付加される電子透かしなどのデータの初期値を設定するようになっていてもよい。この初期値により、例えば、どのサーバへいつ誰によってデータが入力されたかが示されるようになっていてもよい。
【００８０】
図１４は、実施形態４に係るダウンロードシステムでのサーバの処理の流れを説明するフローチャートである。ステップＳ１４０１において、データ入力部１３０９により、任意のデータを入力する。続くステップＳ１４０２において、入力されたデータに、格納領域確保部１３１０により、クライアント識別情報格納領域を確保する。そして、ステップＳ１４０３において、送信データ蓄積部１３０４により、データを蓄積する。
【００８１】
このようにダウンロードシステムのサーバが構成されることにより、配信先のクライアントでのみ利用可能なデータの配信を容易に行なうことができる。
【００８２】
（実施形態５）
実施形態５として、プログラムを全体または一部とするデータが入力された場合に、そのプログラムに判断モジュールを追加するサーバからなるダウンロードシステムについて説明を行なう。
【００８３】
図１５は、実施形態５に係るダウンロードシステムの機能ブロック図を例示する。ダウンロードシステム１５００は、サーバ１５０１と、クライアント１５０２と、からなる。サーバ１５０１と、クライアント１５０２と、は、通信網１５０３などを介して通信が可能である。
【００８４】
サーバ１５０１は、送信データ蓄積部１５０４と、送信部１５０５と、データ入力部１５０９と、格納領域確保部１５１０と、判断モジュール追加部１５１１と、を有する。なお、送信データ蓄積部１５０４は、送信プログラム蓄積手段を更に有していてもよい。
【００８５】
クライアント１５０２は、受信部１５０６と、蓄積部１５０７と、生成モジュール保持部１５０８と、を有する。なお、クライアント１５０２は、クライアント識別情報生成部を更に有していてもよい。
【００８６】
したがって、本実施形態に係るダウンロードシステムの構成は、実施形態４に係るダウンロードシステムにおいて、サーバが更に判断モジュール追加部１５１１を有する構成となっている。
【００８７】
「判断モジュール追加部」１５１１は、データ入力部１５０９に入力されたデータに判断モジュールを追加する部である。なお、この場合、データ入力部１５０９に入力されたデータは、プログラムであることが好ましい。ただし、プログラムでなくてもよい。例えば、音楽再生用のデータである場合には、その再生プログラムが、データに追加された判断モジュールを読み込み、判断モジュールを実行するようになっていてもよい。
【００８８】
図１６は、判断モジュールを追加の一例を示す。図１６（Ａ）のようにｈｅａｄｅｒ領域と、．ｔｅｘｔ領域と、．ｄａｔａ領域からなるプログラムが入力されたとする。この場合、図１６（Ｂ）に例示されるように、格納領域確保部１５１０により、クライアント識別情報格納領域が確保され、次いで、判断モジュール追加部により判断モジュールがクライアント識別情報格納領域の前に追加される。
【００８９】
なお、クライアント識別情報格納領域が確保され、次いで、判断モジュールが追加されると説明したが、判断モジュールの追加が先に行なわれてもよい。また、図１５では、判断モジュールが追加されてから、送信データ蓄積部１５０４にプログラムが蓄積されるようになっているが、送信データ蓄積部１５０４に蓄積されるプログラムには、判断モジュールは追加されず、送信部１５０５による送信時にプログラムに判断モジュールが追加されるようになっていてもよい。
【００９０】
本実施形態では、判断モジュールがサーバ側において追加されるので、プログラムの制作者などは、判断モジュールの追加を行なってプログラムを製作する必要がない。また、判断モジュールのソースコードや判断モジュールのリンクの際に必要なシンボルテーブル付きのオブジェクトコードがプログラムの制作者などの手に渡って判断モジュールでの処理が解析されて、どのようにクライアント識別情報の比較などが行なわれるかが公知になってしまうことを防止することができる。
【００９１】
（実施形態６）
実施形態６として、サーバに配信などのために蓄積されるデータやサーバにより配信されるデータが暗号化される実施形態について説明する。
【００９２】
図１７は、実施形態６に係るダウンロードシステムの機能ブロック図を例示する。ダウンロードシステム１７００は、サーバ１７０１と、クライアント１７０２と、からなる。サーバ１７０１と、クライアント１７０２と、は通信網１７０３などを介して通信が可能である。
【００９３】
サーバ１７０１は、送信データ蓄積部１７０４と、送信部１７０５と、データ入力部１７０９と、格納領域確保部１７１０と、暗号化部１７１１と、を有する。なお、サーバ１７０１は、判断モジュール追加部を更に有してもよい。また、送信データ蓄積部１７０４は、送信プログラム蓄積手段を更に有していてもよい。
【００９４】
クライアント１７０２は、受信部１７０６と、蓄積部１７０７と、生成モジュール保持部１７０８と、を有する。なお、クライアント１７０２は、クライアント識別情報生成部を更に有していてもよい。
【００９５】
したがって、本実施形態に係るダウンロードシステムの構成は、実施形態５に係るダウンロードしシステムにおいて、サーバが更に暗号化部１７１１を有している構成となっている。
【００９６】
「暗号化部」１７１１は、入力されたデータを暗号化する。この際、好ましくは、データに格納領域確保部１７１０により確保されたクライアント識別情報格納領域以外の部分を暗号化する。なぜならば、クライアントで復号化を行なう際に、クライアント識別情報格納領域に格納された値を復号化することにより、その値が変更されてしまい、実施形態２のように格納領域初期値の存在の有無を検出することが困難か不可能になってしまう可能性があるからである。
【００９７】
暗号化は、例えば、サーバ１７０１の秘密鍵により行なう。また、暗号化は、送信データ蓄積部にデータを蓄積する前に行なうのではなく、送信部１７０５によりデータが送信される直前に行なうようになっていてもよい。これにより、サーバ１７０１とクライアント１７０２との間で決められた共有鍵で暗号化することができ、サーバで必要になるデータの暗号化のコスト、クライアントで必要となる復号化のコストを下げることができる。
【００９８】
サーバ１７０１で暗号化を行なう目的は、クライアントにおける、あるいは、クライアントによるデータの取得経路上におけるデータの難読化であり、例えば、どのようなデータの構造になっており、その構造上でのクライアント識別情報格納領域の位置の解析を困難としたりする。
【００９９】
本実施形態では、データは、汎用データであってもよいが、その全体または一部がプログラムであることとが好ましい。この場合、暗号化されたデータの全体または一部である暗号化されたプログラムは、クライアントで自己復号化されるようになっているのが好ましい。
【０１００】
図１８は、このような場合のダウンロードシステムの機能ブロック図を例示する。ダウンロードシステム１８００は、サーバ１８０１と、クライアント１８０２と、からなる。サーバ１８０１と、クライアント１８０２と、は、通信網１８０３などを介して通信が可能である。
【０１０１】
サーバ１８０１は、送信データ蓄積部１８０４と、送信部１８０５と、データ入力部１８０９と、格納領域確保部１８１０と、判断モジュール追加部１８１１と、暗号化部１８１２と、を有する。暗号化部１８１２は、復号化モジュール追加手段１８１３を有する。なお、データの全体または一部がプログラムであれば、送信データ蓄積部１８０４は、送信プログラム蓄積手段を更に有しているものとする。
【０１０２】
クライアント１８０２の構成は、図１７のクライアント１７０２のそれと同じである。
【０１０３】
「復号化モジュール追加手段」１８１３は、復号化モジュールを追加する。「復号化モジュール」は、暗号化部１８１２により暗号化された部分を復号化して実行するモジュールである。ここでいう「復号化」とは、クライアントでの実行処理に先立って行なわれる復号化の処理を意味する。
【０１０４】
図１９は、サーバ１８０１に入力されたデータの全体または一部がプログラムである場合におけるプログラムの変化の様子の一例を示す。図１９（Ａ）に示すように、ｈｅａｄｅｒ領域と、．ｔｅｘｔ領域と、．ｄａｔａ領域と構成されるプログラムが入力されたとする。この場合、格納領域確保部１８１０と、判断モジュール追加部１８１１と、により、図１９（Ｂ）に示されるように、クライアント識別情報格納領域が確保され、判断モジュールが．ｔｅｘｔ領域に追加される。次いで、図１９（Ｃ）に示されるように、暗号化部１８１２により、．ｔｅｘｔ領域、．ｄａｔａ領域が暗号化され、暗号化．ｔｅｘｔ領域、暗号化．ｄａｔａ領域になる。そして、復号化モジュール追加手段により、図１９（Ｄ）に示されるように復号化モジュールが追加される。ｈｅａｄｅｒから復号化モジュールへ延びる矢印線は、エントリポイントが書き換えられ、まず、復号化モジュールが実行されるようになっていることを示す。これにより、図１９（Ｄ）に示されるプログラムが実行されると、符号化モジュールが最初に実行され、暗号化．ｔｅｘｔ、暗号化．ｄａｔａが復号化され、暗号化される前の．ｄａｔａ領域のデータを用いて暗号化前の．ｔｅｘｔ領域の命令が実行がされる。なお、復号化された．ｄａｔａ領域のデータ、．ｔｅｘｔ領域の命令は、プログラムを実行するプロセスのヒープ領域に配置されるようになっていてもよい。以上の技術については、出願人が既に出願を行なった特願二００四−九七０八七に開示されている。
【０１０５】
本実施形態では、判断モジュールが暗号化されるので、判断モジュールのアルゴリズムの解析が困難となり、クライアント識別情報をどのように取得し、クライアント識別情報の比較などを行なうかを他人が知ることが困難となり、より一層プログラムの不正利用を防止することができる。
【０１０６】
（実施形態７）
実施形態７として、受信蓄積工程によりダウンロードなどされたプログラムが、インストールなどのためのプログラムを展開して起動する例について説明する。
【０１０７】
図２０は、「インストールなどのためのプログラム」と説明したプログラムの構造を例示する。このプログラムを仮に「Ｓｅｔｕｐ．ｅｘｅ」と呼ぶとすると、このプログラムには、「チェックモジュール」が含まれ、このチェックモジュールは、Ｓｅｔｕｐ．ｅｘｅの実行の途中に実行される。
【０１０８】
図２１は、チェックモジュールの処理の流れを説明するフローチャートを例示する。チェックモジュールは、まず、ステップＳ２１０１において、所定の領域に格納されているデータを読み出す。「所定の領域」とは、後述のように、Ｓｅｔｕｐ．ｅｘｅと、受信蓄積工程によりダウンロードなどされたプログラムと、の両方がアクセス可能な予め定められた領域のことである。この領域は、例えば、Ｓｅｔｕｐ．ｅｘｅを実行するプロセスと、受信蓄積工程によりダウンロードなどされたプログラムを実行するプロセスと、により共有される共有メモリに設けられてもよい。あるいは、ハードディスクなどの記憶媒体の所定の位置に設けられてもよい。また、外部に設置されているファイルサーバなどのネットワーク通信などによりアクセスが可能なサーバにその領域が設けられてもよい。なお、「読み出す」には、例えば、所定の領域に格納されているデータを取得して、復号化などの処理を行なうことをも含んでもよい。
【０１０９】
ステップＳ２１０２として、ステップＳ２１０１で読み出されたデータが所定の値に等しいかどうかを判断する。「所定の値」とは、受信蓄積工程によりダウンロードなどされたプログラムを実行するプロセスが設定したと判断できる値であり、例えば、固定値や、そのプロセスが実行されるクライアントなどの識別情報やそれを用いて算出される値などである。
【０１１０】
もし、ステップＳ２１０１で読み出されたデータが所定の値に等しいと判断されれば、ステップＳ２１０３へ処理を移行する。すなわち、チェックモジュールの次に実行されるモジュールなどへ処理を続行する。また、もし、ステップＳ２１０１で読み出されたデータが所定の値に等しいと判断されなければ、ステップＳ２１０４へ処理を移行する。ステップＳ２１０４へ処理が移行されることにより、処理が中断される。すなわち、Ｓｅｔｕｐ．ｅｘｅの実行がステップＳ２１０４にて中断される。
【０１１１】
これにより、Ｓｅｔｕｐ．ｅｘｅが、受信蓄積工程によりダウンロードなどされたプログラムを実行するプロセスにより起動された場合に、限り、Ｓｅｔｕｐ．ｅｘｅの処理が続行されることになる。
【０１１２】
なお、チェックモジュールは、例えば、Ｓｅｔｕｐ．ｅｘｅを製作などする企業などにライブラリとして渡しておいてもよい。あるいは、動的実行ライブラリとして提供され、呼び出し方をその企業などに伝えておき、動的実行ライブラリの本体は、クライアントにインストールしておいてもよい。
【０１１３】
図２２は、受信蓄積工程によりダウンロードなどされたプログラムの構造の一例図を示す。このプログラムを「ＨＴＳｅｔｕｐ．ｅｘｅ」と呼ぶことにすると、ＨＴＳｅｔｕｐ．ｅｘｅは、判断モジュールと、クライアント識別情報格納領域を有し、また、Ｓｅｔｕｐ．ｅｘｅを展開可能な形式で有する。「展開可能な形式」とは、C:\temp などの一時フォルダなどにＳｅｔｕｐ．ｅｘｅを格納するファイルやフォルダを作成できる形態をいう。例えば、ＨＴＳｅｔｕｐ．ｅｘｅのデータ領域に、Ｓｅｔｕｐ．ｅｘｅのプログラムコードがそのまま格納される。あるいは、Ｓｅｔｕｐ．ｅｘｅのプログラムコードが、ＨＴＳｅｔｕｐ．ｅｘｅにより復号化できる形態で、ＨＴＳｅｔｕｐ．ｅｘｅのデータ領域に格納される。
【０１１４】
このような構造により、Ｓｅｔｕｐ．ｅｘｅを製作などする企業などと、ＨＴＳｅｔｕｐ．ｅｘｅなどを製作などする企業と、を異なるようにさせることができる。すなわち、Ｓｅｔｕｐ．ｅｘｅの提供を他の企業などから受け、ＨＴＳｅｔｕｐ．ｅｘｅを製作することに専念する企業などを設立できる。
【０１１５】
図２３は、ＨＴＳｅｔｕｐ．ｅｘｅがクライアントに蓄積された後に、ＨＴＳｅｔｕｐ．ｅｘｅが起動されたことにより行なわれる処理の流れを説明するフローチャートである。
【０１１６】
ステップＳ２３０１において、判断モジュールを実行する。もし、実行のクライアントが、ＨＴＳｅｔｕｐ．ｅｘｅが受信蓄積工程により蓄積されたクライアントであれば、判断モジュールの処理の後には、ステップＳ２３０２へ処理が続行される。しかし、実行のクライアントが、ＨＴＳｅｔｕｐ．ｅｘｅが受信蓄積工程により蓄積されたクライアントと異なれば、ステップＳ２３０１で処理が中断し、ステップＳ２３０２へ処理が続行しなくなる。
【０１１７】
ステップＳ２３０２において、所定の領域に所定のデータを格納する。例えば、あらかじめ決められた固定値のデータや、ＨＴＳｅｔｕｐ．ｅｘｅが起動されたクライアントなどの識別情報やそれを用いて算出される値などを、予め定められた領域に格納する。
【０１１８】
ステップＳ２３０３において、一時フォルダなどに、Ｓｅｔｕｐ．ｅｘｅを展開し、Ｓｅｔｕｐ．ｅｘｅを起動する。これにより、図２１に示された処理がされることになる。
【０１１９】
ステップＳ２３０４において、Ｓｅｔｕｐ．ｅｘｅの終了を待つ。
【０１２０】
ステップＳ２３０５において、所定の領域をクリア、あるいは削除などする。
【０１２１】
以上をまとめると、次のようになる。（１）例えば、Ａ社がインストーラなどのプログラム（例えば、Ｓｅｔｕｐ．ｅｘｅという）を生成する場合に、共有メモリなどの所定の領域に特定の所定のデータ（例えば、特定の文字列）があるかどうかをチェックするライブラリなどのモジュールを埋め込む。（２）例えば、Ｂ社は、クライアント識別情報格納領域を有し、なおかつ、共有メモリなどの所定の領域に所定のデータを書込む機能を持ったプログラム（例えば、ＨＴＳｅｔｕｐ．ｅｘｅという）をバイナリレベルでＳｅｔｕｐ．ｅｘｅと結合する。ここに結合するとは、ＨＴＳｅｔｕｐ．ｅｘｅの実行時にＳｅｔｕｐ．ｅｘｅを生成可能にＨＴＳｅｔｕｐ．ｅｘｅに取り入れることをいう。例えば、ＨＴＳｅｔｕｐ．ｅｘｅのデータ領域に、Ｓｅｔｕｐ．ｅｘｅのファイルの内容を取り入れる。必要に応じて、Ｓｅｔｕｐ．ｅｘｅのファイルの内容を暗号化しておき、ＨＴＳｅｔｕｐ．ｅｘｅの実行時にその暗号化された内容を復号化するようになっていてもよい。（３）ＨＴＳｅｔｕｐ．ｅｘｅをダウンロードなどして、クライアントに導入する際に、クライアント識別情報がＳｅｔｕｐ．ｅｘｅのクライアント識別情報格納領域に書込まれる。（４）ＨＴＳｅｔｕｐ．ｅｘｅを起動すると、ＨＴＳｅｔｕｐ．ｅｘｅの判断モジュールが、クライアント識別情報格納領域に書込まれたクライアント識別情報と、ＨＴＳｅｔｕｐ．ｅｘｅが起動されたクライアントのクライアント識別情報とが比較され、おなじあるいは、適合するものであれば、ＨＴＳｅｔｕｐ．ｅｘｅの他の処理が行なわれる。これにより、共有メモリなどの所定の領域に所定のデータが書込まれる。（５）また、ＨＴＳｅｔｕｐ．ｅｘｅは、Ｓｅｔｕｐ．ｅｘｅを展開して、一時フォルダに格納し、Ｓｅｔｕｐ．ｅｘｅを起動する。（６）Ｓｅｔｕｐ．ｅｘｅは、所定の領域に所定のデータが書込まれていることを確認すると、そのまま処理を続行し、また、所定の領域がアクセス不可能であったり、所定のデータが書込まれていなかったりすれば、処理を中止する。（７）Ｓｅｔｕｐ．ｅｘｅのプロセスが終了するなどして、所定の領域が不要になれば、所定の領域をクリアしたり、破棄したりする。
【０１２２】
以上のような構成により、ＨＴＳｅｔｕｐ．ｅｘｅは、受信蓄積工程が行なわれたクライアントでのみ実行可能となる。また、Ｓｅｔｕｐ．ｅｘｅは、ＨＴＳｅｔｕｐ．ｅｘｅから起動された場合のみ、実行がされる。
【図面の簡単な説明】
【０１２３】
【図１】実施形態に１に係るダウンロードシステムの機能ブロック図
【図２】生成モジュールの処理のフローチャート
【図３】デバイスドライバの位置を示す一例図
【図４】ハードウェアの構成の一例図
【図５】実施形態に１に係るダウンロードシステムの別の構成の機能ブロック図
【図６】プログラムの構造の一例図
【図７】判断モジュールの処理のフローチャート
【図８】ダウンロードシステムの処理をクライアント側から説明するフローチャート
【図９】格納領域初期値の算出の一例図
【図１０】格納領域初期値の算出の一例図
【図１１】実施形態２における生成モジュールの構成の一例図
【図１２】実施形態３における生成モジュールの構成の一例図
【図１３】実施形態４に係るダウンロードシステムの機能ブロック図
【図１４】実施形態４に係るダウンロードシステムの処理のフローチャート
【図１５】実施形態５に係るダウンロードシステムの機能ブロック図
【図１６】判断モジュールを追加の一例図
【図１７】実施形態６に係るダウンロードシステムの機能ブロック図
【図１８】実施形態６に係るダウンロードシステムの別の機能ブロック図
【図１９】入力されたプログラムに対する処理の一例図
【図２０】インストールなどのプログラムの構造の一例図
【図２１】インストールなどのプログラムのチェックモジュールの処理のフローチャート
【図２２】ダウンロードなどされたプログラムの構造の一例図
【図２３】ダウンロードなどされたプログラムの処理のフローチャート
【符号の説明】
【０１２４】
１００    ダウンロードシステム
１０１    サーバ
１０２    クライアント
１０３    通信網
１０４    送信データ蓄積部
１０５    送信部
１０６    受信部
１０７    蓄積部
１０８    生成モジュール保持部
【図１】
2008003928.tif 000003
【図２】
2008003928.tif 000004
【図３】
2008003928.tif 000005
【図４】
2008003928.tif 000006
【図５】
2008003928.tif 000007
【図６】
2008003928.tif 000008
【図７】
2008003928.tif 000009
【図８】
2008003928.tif 000010
【図９】
2008003928.tif 000011
【図１０】
2008003928.tif 000012
【図１１】
2008003928.tif 000013
【図１２】
2008003928.tif 000014
【図１３】
2008003928.tif 000015
【図１４】
2008003928.tif 000016
【図１５】
2008003928.tif 000017
【図１６】
2008003928.tif 000018
【図１７】
2008003928.tif 000019
【図１８】
2008003928.tif 000020
【図１９】
2008003928.tif 000021
【図２０】
2008003928.tif 000022
【図２１】
2008003928.tif 000023
【図２２】
2008003928.tif 000024
【図２３】
2008003928.tif 000025