(57)【要約】【課題】  クライアント装置にその処理能力に応じた負荷を負担させることを可能にする一方、各クライアント装置から実行を要求された処理を各クライアント装置が負担した負荷に応じた優先順位でサーバ装置に実行させることを可能にし、更に、両装置間の通信トラヒックが増加することを回避する。【解決手段】  演算量の異なる複数の演算の何れかを実行しその演算結果を返信することをサーバ装置２０からクライアント装置３０へ要求させる。クライアント装置３０は、上記複数の演算の各々の演算量に基づいて、実行する演算を特定しその演算を実行する。そして、クライアント装置３０は、所定の処理の実行をサーバ装置２０へ要求する際に、その演算結果をサーバ装置２０へ送信する。サーバ装置２０は、その演算結果が正しい場合に、その演算の演算量に応じた優先順位でその所定の処理を実行する。【選択図】      図３
2006065492.tif 000002
【特許請求の範囲】
【請求項１】
演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを通信相手の各クライアント装置へ送信する送信手段と、
所定の処理の実行を要求するとともに前記複数の演算の何れかの演算結果が書き込まれた第２のメッセージが前記各クライアント装置から送信されてきた場合に、該演算結果が正しい演算結果であるか否かを判定する判定手段と、
前記判定手段により正しい演算結果であると判定された場合に、前記各クライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する処理実行手段と
を有するサーバ装置。
【請求項２】
前記送信手段は、
前記所定の処理の実行を要求する旨のみの第３のメッセージが送信されてきたことを契機として、前記第１のメッセージを該第３のメッセージの送信元であるクライアント装置へ送信する
ことを特徴とする請求項１に記載のサーバ装置。
【請求項３】
前記第１のメッセージには、その送信元とその宛先とが通信を開始するときにだけデータが書き込まれる特定の領域であって、その送信元の通信態様の詳細をその宛先へ通知するための付加データが書き込まれる特定の領域が設けられており、
前記送信手段は、
前記付加データに代えて前記クライアントパズルを前記特定の領域に書き込んで前記第１のメッセージを送信する
ことを特徴とする請求項１に記載のサーバ装置。
【請求項４】
前記送信手段は、ＴＣＰ(Transmission Control Protocol)にしたがって前記第１のメッセージを送信し、
前記特定の領域は、オプション領域である
ことを特徴とする請求項３に記載のサーバ装置。
【請求項５】
通信手段と、
制御手段と、
を備え、
前記制御手段は、
演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを前記通信手段によって通信相手の各クライアント装置へ送信する第１の処理と、
所定の処理の実行を要求するとともに前記複数の演算の何れかの演算結果が書き込まれた第２のメッセージを前記通信手段によって前記各クライアント装置から受信した場合に、該演算結果が正しいか否かを判定する第２の処理と、
前記第２の処理にて正しい演算結果であると判定された場合に、前記各クライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する第３の処理と、を行う
ことを特徴とするサーバ装置。
【請求項６】
演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルが書き込まれた第１のメッセージが通信相手のサーバ装置から送信されてきた場合に、該複数の演算の各々の演算量を該クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択する選択手段と、
前記選択手段によって選択された演算を実行する演算実行手段と、
所定の処理の実行を前記サーバ装置へ要求する場合に、その旨と前記演算実行手段による演算結果とを書き込んだ第２のメッセージを前記サーバ装置へ送信する送信手段と
を有するクライアント装置。
【請求項７】
前記第１のメッセージを受信していない状況下で前記所定の処理の実行を前記サーバ装置へ要求する場合には、前記送信手段は、その旨のみを書き込んだ第３のメッセージを前記サーバ装置へ送信する
ことを特徴とする請求項６に記載のクライアント装置。
【請求項８】
通信手段と、
制御手段と、
を備え、
前記制御手段は、
演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルが書き込まれた第１のメッセージを前記通信手段によって通信相手のサーバ装置から受信した場合に、該複数の演算の各々の演算量を該クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択する第１の処理と、
前記第１の処理にて選択した演算を実行する第２の処理と、
所定の処理の実行を前記サーバ装置へ要求する場合に、その旨と前記第２の処理にて得られた演算結果とを書き込んだ第２のメッセージを前記通信手段によって前記サーバ装置へ送信する第３の処理と、を行う
ことを特徴とするクライアント装置。
【請求項９】
サーバ装置が、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを通信相手の各クライアント装置へ送信する第１のステップと、
前記第１のメッセージを受信したクライアント装置が、前記複数の演算の各々についてその演算量を前記クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択して実行し、その演算結果と所定の処理の実行を要求する旨とを書き込んだ第２のメッセージを前記サーバ装置へ送信する第２のステップと、
前記第２のメッセージを受信したサーバ装置が、該第２のメッセージに書き込まれている演算結果が正しいことを検出する一方、該第２のメッセージの送信元であるクライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する第３のステップと
を有することを特徴とする処理実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアント装置からの要求に応じた処理をサーバ装置に実行させる技術に関する。
【背景技術】
【０００２】
近年、インターネットを介して様々な通信サービスが提供されている。インターネットにおいて利用されている通信プロトコルの一例としては、ＴＣＰ（Transmission Control Protocol）が挙げられる。ＴＣＰは、いわゆるコネクション型の通信プロトコルであり、信頼性の高い通信を実現することが可能である。なお、コネクション型の通信プロトコルとは、データの送受信に先だって、そのデータの送り手側の通信装置（以下、サーバ装置）とその受け手側の通信装置（以下、クライアント装置）との両者に、そのデータの送受信に用いる通信路（以下、コネクション）を示すデータ（以下、コネクション識別子）を交換させ、コネクションの確立を行っておく通信プロトコルである。上記コネクション識別子の一例としては、サーバ装置やクライアント装置に割り当てられている通信アドレスや、各装置がそのデータの送受信に用いる通信ポートを表すデータ（例えば、通信ポート番号）およびシーケンス番号の初期値などが挙げられる。例えば、ＴＣＰにおいては、３ウェイハンドシェークと呼ばれる手順で上記コネクションの確立が行われる。以下では、まず、３ウェイハンドシェークの概要について説明する。
【０００３】
図１０は、ＴＣＰにしたがって通信する機能を有するサーバ装置４０Ａとクライアント装置５０Ａとが実行する３ウェイハンドシェークの概要を表す図である。例えば、サーバ装置４０Ａに記憶されているデータの取得を所望するユーザが、そのサーバ装置４０Ａの通信アドレスやそのデータの取得に用いる通信プロトコルを表すデータ（例えば、ＵＲＬなど）の入力など所定の操作を行うと、クライアント装置５０Ａは、図１０に示すように、ＳＹＮメッセージ１００をサーバ装置４０Ａへ送信する。このＳＹＮメッセージ１００は、サーバ装置４０Ａからクライアント装置５０Ａへデータを送信する際に用いられるコネクション（以下、下りのコネクション）の確立を要求する旨のメッセージであり、このＳＹＮメッセージ１００には、上記下りのコネクションのコネクション識別子が書き込まれている。
【０００４】
一方、サーバ装置４０Ａは、ＳＹＮメッセージ１００を受信すると、そのＳＹＮメッセージ１００の送信元であるクライアント装置５０Ａとの間の通信を継続しコネクションの確立を行うために、コンピュータ資源（以下、「リソース」ともいう）の割り当てを行う。具体的には、サーバ装置４０Ａは、その通信相手（すなわち、クライアント装置５０Ａ）を識別するデータ（例えば、上記コネクション識別子）をＲＡＭ（Random Access Memory）などの記憶部へ書き込み記憶する。次いで、サーバ装置４０Ａは、上記ＳＹＮメッセージ１００を受信したことを表すとともに逆方向のコネクション（以下、上りのコネクション）の確立を要求する旨のＳＹＮ／ＡＣＫメッセージ１１０をクライアント装置５０Ａへ送信する。このＳＹＮ／ＡＣＫメッセージ１１０には、クライアント装置５０Ａから送信されたデータを受信する際に用いるコネクション（すなわち、上記上りのコネクション）のコネクション識別子が書き込まれている。なお、サーバ装置４０Ａは、上記ＳＹＮ／ＡＣＫメッセージ１１０を送信してから所定の時間が経過しても上記ＳＹＮ／ＡＣＫメッセージを受信したことを表すメッセージ（以下、「ＡＣＫ」）が返信されてこない場合には、上記記憶部の格納内容を参照して上記ＳＹＮ／ＡＣＫメッセージ１００を再送信する。
【０００５】
クライアント装置５０Ａは、ＳＹＮ／ＡＣＫメッセージ１１０を受信すると、そのＳＹＮ／ＡＣＫメッセージ１１０に書き込まれているコネクション識別子を読み出しそのコネクション識別子の表すコネクション（すなわち、上記上りのコネクション）を確立する。そして、クライアント装置５０ＡはＳＹＮ／ＡＣＫメッセージ１１０を受信したことを表すＡＣＫ１２０をサーバ装置４０Ａへ送信する。このＡＣＫ１２０にも、上記下りのコネクションのコネクション識別子が書き込まれている。サーバ装置４０Ａは、このＡＣＫ１２０を受信すると、そのＡＣＫ１２０に書き込まれているコネクション識別子の表すコネクション（すなわち、上記下りのコネクション）を確立し、その通信相手を表すデータを上記記憶部から削除する。そして、サーバ装置４０Ａは、データの送信を要求する旨のメッセージ（例えば、ＨＴＴＰのＧＥＴメソッドを含むメッセージ）が上記下りのコネクションを介してクライアント装置５０Ａから送信されてくることを待ち受ける。
【０００６】
ところで、サーバ装置４０Ａの記憶部の記憶容量は有限であるため、その記憶部へ格納することができるコネクション識別子（すなわち、コネクションを確立中の通信相手を表すデータ）の数にも上限がある。つまり、サーバ装置４０Ａは、この上限を超える数のクライアント装置５０Ａとの通信を継続しＡＣＫ１２０が送信されてくることを待ち続けることはできない。このことを悪用してサーバ装置４０Ａを利用不能にし、通信サービスの提供を妨害することが企てられる虞がある。いわゆるＳＹＮＦｌｏｏｄ攻撃である。
【０００７】
より詳細に説明すると、ＳＹＮＦｌｏｏｄ攻撃とは、多量のＳＹＮメッセージ１００をサーバ装置４０Ａへ送信し続け、サーバ装置４０Ａから返信されてくるＳＹＮ／ＡＣＫメッセージ１１０を受信しても、意図的にＡＣＫ１２０を返信しないようにすることである。このようなことが為されると、サーバ装置４０Ａは、その通信相手との間でコネクションの確立が完了していないものとみなして、その通信相手を表すデータを記憶部に保持したまま、ＡＣＫ１２０が返信されてくることを待ち続ける。このため、上記ＳＹＮＦｌｏｏｄ攻撃が為されると、記憶部に格納されている上記データの数が急速に増加し、その上限へ達してしまう。このような状況下では、サーバ装置４０Ａは、他のクライアント装置からのコネクション確立要求を受け付けることができなくなり、それら他のクライアント装置に対して通信サービスを提供することができなくなってしまう。
【０００８】
このようなＳＹＮＦｌｏｏｄ攻撃に対する防御方法の一例としては、非特許文献１に開示されたクライアントパズルプロトコルや、非特許文献２に開示されたクライアントパズルオークションが挙げられる。以下、図面を参照しつつ、これらについて説明する。
【０００９】
図１１は、クライアントパズルプロトコルの概略を説明するための図である。なお、図１１において、サーバ装置４０Ｂとクライアント装置５０Ｂとはともにクライアントパズルプロトコルにしたがってコネクションを確立する通信装置である。サーバ装置４０Ｂが図１０のサーバ装置４０Ａと異なっている点は、以下の２つの点である。第１に、ＳＹＮメッセージ１００を受信しても、その送信元を示すデータを記憶しない点である。そして、第２に、ＳＹＮメッセージ１００を受信した場合に、ＳＹＮ／ＡＣＫメッセージ１１０に代えて、所定の演算の実行およびその演算結果の返信を要求する旨のメッセージ（図１１では、ＲＳＴ／ＡＣＫメッセージ）１０１を送信する点である。このＲＳＴ／ＡＣＫメッセージ１０１には、上記所定の演算を表すデータ（以下、クライアントパズル）が書き込まれている。
【００１０】
一方、クライアント装置５０Ｂは、ＲＳＴ／ＡＣＫメッセージ１０１を受信すると、そのＲＳＴ／ＡＣＫメッセージ１０１に書き込まれているクライアントパズルの表す演算を行い、その演算結果を書き込んだＳＹＮメッセージ１０２をサーバ装置４０Ｂへ送信する。以下では、上記クライアントパズルの表す演算を実行することを「クライアントパズルを解く」といい、その演算結果を「クライアントパズルの解」という。そして、サーバ装置４０Ｂは、ＳＹＮメッセージ１０２を受信すると、そのＳＹＮメッセージ１０２に書き込まれているクライアントパズルの解が正しいか否かを判定し、正しいと判定した場合にのみ、前述した３ウェイハンドシェークと同一の手順でクライアント装置５０Ｂとの間にコネクションを確立する。
【００１１】
このように、サーバ装置４０Ｂは、コネクションの確立を要求してきたクライアント装置５０Ｂに対してクライアントパズルを送信し、そのクライアントパズルの正しい解が送信されてくるまで、コネクションの確立を行わない。このため、多量のＳＹＮメッセージを送信しサーバ装置４０Ｂに対してＳＹＮＦｌｏｏｄ攻撃を行っているクライアント装置は、各ＳＹＮメッセージに対してサーバ装置４０Ｂから返信されてくるクライアントパズルを解かなければ、そのＳＹＮＦｌｏｏｄ攻撃を継続することができなくなる。つまり、サーバ装置４０Ｂに対してＳＹＮＦｌｏｏｄ攻撃を継続するには、多量のクライアントパズルを解かなければならないが、このようなことには多量のリソースが必要になり、結局、ＳＹＮメッセージを送信し続けることが困難になってしまう。このように、クライアントパズルプロトコルによれば、ＳＹＮＦｌｏｏｄ攻撃を効果的に防御することが可能になる。
【００１２】
ところで、上述したクライアントパズルプロトコルにおいては、クライアントパズルの表す演算の演算量（以下、「クライアントパズルの難易度」ともいう）が適切に設定されていることが重要である。その理由は、以下の通りである。上記難易度が低すぎる（すなわち、上記演算量が少なすぎる）と、少ないリソースでクライアントパズルの解を求めることが可能であり、ＳＹＮＦｌｏｏｄ攻撃を抑止することができなくなってしまうからである。逆に、上記難易度が高すぎる（すなわち、上記演算量が多すぎる）と、ＳＹＮＦｌｏｏｄ攻撃を行っていないクライアント装置がサーバ装置とコネクションを確立する場合であっても、１つのクライアントパズルを解くことに要する時間が長くなり、そのサーバ装置によって提供される通信サービスを利用しづらくなってしまうからである。
【００１３】
このように、上記クライアントパズルプロトコルにおいては、クライアントパズルの難易度を適切に設定しておくことが重要であるが、現実の通信システムにおいては困難である。その理由は、現実の通信システムにおいては、パーソナルコンピュータやＰＤＡ（Personal Digital Assistance）など処理能力の異なるクライアント装置が混在して利用されていることが一般的であり、各クライアント装置毎にクライアントパズルの適切な難易度が異なっているからである。上記非特許文献２に開示されたクライアントパズルオークションは、係るクライアントパズルプロトコルの問題点を改善することを目的としている。以下、クライアントパズルオークションについて説明する。
【００１４】
図１２は、クライアントパズルオークションの概要を説明するための図である。図１２のサーバ装置４０Ｃとクライアント装置５０Ｃとは、クライアントパズルオークションによってコネクションの確立を行う通信装置である。図１２のクライアント装置５０Ｃは、クライアントパズルの解を求めＳＹＮメッセージ１０２にその解を書き込んで送信する際に、自装置の処理能力に応じて以下の２種類のデータの何れかを書き込んで送信する。すなわち、クライアント装置５０Ｃは、更に難易度の高いクライアントパズルの送信を要求する旨の第１のデータか、そのようなクライアントパズルの送信を要求しない旨の第２のデータの何れかを書き込んでＳＹＮメッセージ１０２を送信する。
【００１５】
一方、サーバ装置４０Ｃは、クライアント装置５０Ｃから受信したＳＹＮメッセージ１０２に上記第１のデータが書き込まれていた場合には、より難易度の高いクライアントパズルを生成しそのクライアントパズルを書き込んだＲＳＴ／ＡＣＫメッセージ１０１を送信する。逆に、クライアント装置５０Ｃから受信したＳＹＮメッセージ１０２に上記第２のデータが書き込まれていた場合には、サーバ装置４０Ｃは、従来の３ウェイハンドシェークにしたがってコネクションの確立を開始する。
【００１６】
ここで注目すべき点は、図１２のサーバ装置４０Ｃは、複数のクライアント装置からＳＹＮメッセージ１０２を受信した場合に、難易度が高いクライアントパズルの解が書き込まれているＳＹＮメッセージ１０２ほど優先的に処理しコネクションの確立を行う点である。一般に、難易度の高いクライアントパズルを解くには、多量のリソースが必要になり、コネクション確立要求の送信頻度が低下してしまう。つまり、上記の如き優先順位付けを行うことは、高い負荷を負担しコネクション確立要求の送信頻度が低下することを受け入れたことに対する代償である。逆に、クライアント装置５０Ｃの立場から見れば、自装置から送信されたコネクション確立要求を優先的にサーバ装置４０Ｃに処理させるためには、高い負荷が掛かることを受け入れなけれならない。上述したように、高い負荷が掛かることは、ＳＹＮＦｌｏｏｄ攻撃を行う際の大きな障害になるのであるから、このクライアントパズルオークションによってＳＹＮＦｌｏｏｄ攻撃を効果的に防御することが可能になる。加えて、各クライアント装置５０Ｃは、各々の処理能力に見合ったクライアントパズルをサーバ装置４０Ｃから取得し解くことができるため、上述したクライアントパズルプロトコルの問題点も解消される。
【非特許文献１】A.Juels and J.Brainard(RSA Labs),          "A Cryptographic Defense Against Connection Depletion Attacks",          インターネット          ＜http://www.rsasecurity.com/rsalabs/                        staff/bios/ajuels/publications/client-puzzles＞
【非特許文献２】XiaoFeng Wang, Michael K.Reiter,         "Defending Against Denial-of-Service Attack With Puzzle Auctions",          2003 IEEE Symposium on Security and Privacy,2003          インターネット          ＜http://www.cs.cornell.edu/People/                              egs/syslunch-spring04/puzzleauctions.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述の如く、クライアントパズルオークションによれば、クライアント装置にその処理能力に応じた負荷を負担させることが可能になるとともに、各クライアント装置が負担した負荷に応じた優先順位でコネクションの確立が行われるようにすることが可能になる。しかしながら、上述したクライアントパズルオークションでは、従来の３ウェイハンドシェークやクライアントパズルプロトコルに比較して、サーバ装置とクライアント装置との間で送受信されるメッセージの数（以下、通信トラヒック）が増加してしまう（図１０、図１１および図１２参照）。このように、サーバ装置とクライアント装置との間の通信トラヒックが増加してしまうことは、両装置間の通信を仲介する通信網に輻輳が発生する原因となりかねず好ましくない。
【００１８】
本発明は上記課題に鑑みて為されたものであり、クライアント装置とサーバ装置との間の通信トラヒックが増加することを回避しつつ、クライアント装置にその処理能力に応じた負荷を負担させることを可能にするとともに、各クライアント装置から実行を要求された処理を各クライアント装置の負担した負荷に応じた優先順位でサーバ装置に実行させることを可能にする技術を提供することを目的としている。
【課題を解決するための手段】
【００１９】
上記課題を解決するために、本発明は、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを通信相手の各クライアント装置へ送信する送信手段と、所定の処理の実行を要求するとともに前記複数の演算の何れかの演算結果が書き込まれた第２のメッセージが前記各クライアント装置から送信されてきた場合に、該演算結果が正しい演算結果であるか否かを判定する判定手段と、前記判定手段により正しい演算結果であると判定された場合に、前記各クライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する処理実行手段とを有するサーバ装置を提供する。
【００２０】
より好ましい態様の上記サーバ装置にあっては、前記送信手段は、前記所定の処理の実行を要求する旨のみの第３のメッセージが送信されてきたことを契機として、前記第１のメッセージを該第３のメッセージの送信元であるクライアント装置へ送信することを特徴としている。
【００２１】
また、別の好ましい態様の上記サーバ装置にあっては、前記第１のメッセージには、その送信元とその宛先とが通信を開始するときにだけデータが書き込まれる特定の領域であって、その送信元の通信態様の詳細をその宛先へ通知するための付加データが書き込まれる特定の領域が設けられており、前記送信手段は、前記付加データに代えて前記クライアントパズルを前記特定の領域に書き込んで前記第１のメッセージを送信することを特徴としており、更に、好ましい態様の上記サーバ装置にあっては、前記送信手段は、ＴＣＰにしたがって前記第１のメッセージを送信し、前記特定の領域は、オプション領域であることを特徴としている。
【００２２】
また、本発明の別の態様にあっては、コンピュータ装置を、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを通信相手の各クライアント装置へ送信する送信手段と、所定の処理の実行を要求するとともに前記複数の演算の何れかの演算結果が書き込まれた第２のメッセージが前記各クライアント装置から送信されてきた場合に、該演算結果が正しい演算結果であるか否かを判定する判定手段と、前記判定手段により正しい演算結果であると判定された場合に、前記各クライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する処理実行手段として機能させるプログラムと、コンピュータ装置が読取可能な記録媒体であって、当該プログラムが記録された記録媒体とを提供するとしても良い。
【００２３】
また、上記課題を解決するために本発明は、通信手段と、制御手段と、を備え、前記制御手段は、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを前記通信手段によって通信相手の各クライアント装置へ送信する第１の処理と、所定の処理の実行を要求するとともに前記複数の演算の何れかの演算結果が書き込まれた第２のメッセージを前記通信手段によって前記各クライアント装置から受信した場合に、該演算結果が正しいか否かを判定する第２の処理と、前記第２の処理にて正しい演算結果であると判定された場合に、前記各クライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する第３の処理と、を行うことを特徴とするサーバ装置を提供する。
【００２４】
また、本発明の別の態様にあっては、コンピュータ装置に、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを通信相手の各クライアント装置へ送信する第１の処理と、所定の処理の実行を要求するとともに前記複数の演算の何れかの演算結果が書き込まれた第２のメッセージを前記各クライアント装置から受信した場合に、該演算結果が正しいか否かを判定する第２の処理と、前記第２の処理にて正しい演算結果であると判定された場合に、前記各クライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する第３の処理と、を行わせるプログラムと、コンピュータ装置が読取可能な記録媒体であって当該プログラムが記録された記録媒体とを提供するとしても良い。
【００２５】
また、上記課題を解決するために本発明は、演算量の異なる複数の演算の何れかの実行とその演算結果を返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルが書き込まれた第１のメッセージが通信相手のサーバ装置から送信されてきた場合に、該複数の演算の各々の演算量を該クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択する選択手段と、前記選択手段によって選択された演算を実行する演算実行手段と、所定の処理の実行を前記サーバ装置へ要求する場合に、その旨と前記演算実行手段による演算結果とを書き込んだ第２のメッセージを前記サーバ装置へ送信する送信手段とを有するクライアント装置を提供する。
【００２６】
より好ましい態様の上記クライアント装置にあっては、前記第１のメッセージを受信していない状況下で前記所定の処理の実行を前記サーバ装置へ要求する場合には、前記送信手段は、その旨のみを書き込んだ第３のメッセージを前記サーバ装置へ送信することを特徴としている。
【００２７】
また、本発明の別の態様にあっては、コンピュータ装置を、演算量の異なる複数の演算の何れかの実行とその演算結果を返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルが書き込まれた第１のメッセージが通信相手のサーバ装置から送信されてきた場合に、該複数の演算の各々の演算量を該クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択する選択手段と、前記選択手段によって選択された演算を実行する演算実行手段と、所定の処理の実行を前記サーバ装置へ要求する場合に、その旨と前記演算実行手段による演算結果とを書き込んだ第２のメッセージを前記サーバ装置へ送信する送信手段として機能させるプログラムと、コンピュータ装置が読取可能な記録媒体であって当該プログラムが記録された記録媒体とを提供するとしても良い。
【００２８】
また、上記課題を解決するために本発明は、通信手段と、制御手段と、を備え、前記制御手段は、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルが書き込まれた第１のメッセージを前記通信手段によって通信相手のサーバ装置から受信した場合に、該複数の演算の各々の演算量を該クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択する第１の処理と、前記第１の処理にて選択した演算を実行する第２の処理と、所定の処理の実行を前記サーバ装置へ要求する場合に、その旨と前記第２の処理にて得られた演算結果とを書き込んだ第２のメッセージを前記通信手段によって前記サーバ装置へ送信する第３の処理と、を行うことを特徴とするクライアント装置を提供する。
【００２９】
また、本発明の別の態様にあっては、コンピュータ装置に、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルが書き込まれた第１のメッセージを通信相手のサーバ装置から受信した場合に、該複数の演算の各々の演算量を該クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択する第２の処理と、前記第２の処理にて選択した演算を実行する第３の処理と、所定の処理の実行を前記サーバ装置へ要求する場合に、その旨と前記第３の処理にて得られた演算結果とを書き込んだ第２のメッセージを前記サーバ装置へ送信する第４の処理と、を行わせるプログラムと、コンピュータ装置が読取可能な記録媒体であって当該プログラムが記録された記録媒体とを提供するとしても良い。
【００３０】
また、上記課題を解決するために本発明は、サーバ装置が、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージであって、該複数の演算の各々を表すデータであるクライアントパズルを書き込んだ第１のメッセージを通信相手の各クライアント装置へ送信する第１のステップと、前記第１のメッセージを受信したクライアント装置が、前記複数の演算の各々についてその演算量を前記クライアントパズルに基づいて特定し、実行するべき演算をその特定結果に基づいて選択して実行し、その演算結果と所定の処理の実行を要求する旨とを書き込んだ第２のメッセージを前記サーバ装置へ送信する第２のステップと、前記第２のメッセージを受信したサーバ装置が、該第２のメッセージに書き込まれている演算結果が正しいことを検出する一方、該第２のメッセージの送信元であるクライアント装置にて実行された演算の演算量をその演算結果に基づいて特定し、その特定結果に応じた優先順位で前記所定の処理を実行する第３のステップとを有することを特徴とする処理実行方法を提供する。
【００３１】
このようなサーバ装置、クライアント装置および処理実行方法によれば、上記サーバ装置から送信された上記第１のメッセージに書き込まれている複数のクライアントパズルの何れかの表す演算が上記クライアント装置によって実行され、所定の実行を要求する旨の第２のメッセージにその演算結果が書き込まれて送信される。この第２のメッセージを受信したサーバ装置は、その第２のメッセージに正しい演算結果が書き込まれている場合に、その演算結果を得るために上記クライアント装置が実行した演算の演算量を特定し、その特定結果に応じた優先順位で各クライアント装置から実行を要求された処理を実行する。
【発明の効果】
【００３２】
本発明によれば、サーバ装置に対して処理の実行を要求するクライアント装置にその処理能力に応じた負荷を負担させることが可能になるとともに、各クライアント装置が負担した負荷に応じた優先順位でそのクライアント装置から実行を要求された処理をサーバ装置に実行させることが可能になる、といった効果を奏する。
【００３３】
また、本発明によれば、演算量の異なる複数の演算の各々を表すクライアントパズルが１つのメッセージで一括してクライアント装置へ送信されるため、クライアント装置とサーバ装置との間の通信トラヒックが増加することがない、といった効果も奏する。
【発明を実施するための最良の形態】
【００３４】
以下、図面を参照しつつ本発明を実施するための最良の形態について説明する。
（Ａ：構成）
（Ａ−１：通信システムの構成）
図１は、本発明の１実施形態に係るサーバ装置２０とクライアント装置３０を有する通信システムの全体構成の一例を示す図である。図１に示すように、この通信システムは、例えばインターネットなどの通信網１０に接続されているサーバ装置２０とクライアント装置３０とを含んでいる。なお、図１では、１つのクライアント装置と１つのサーバ装置とが通信網１０に接続されている場合について例示されているが、多数のクライアント装置が通信網１０に接続されているとしても良く、多数のサーバ装置が通信網１０に接続されているとしても良い。また、以下では、クライアント装置とサーバ装置とを区別する必要がない場合には、「通信装置」と称する。
【００３５】
図１の通信網１０は、ルータやゲートウェイなどの中継装置を含んでおり、自網に接続されている通信装置から所定の通信プロトコル（本実施形態では、ＴＣＰ）にしたがってメッセージが送信されてきた場合に、そのメッセージを上記中継装置によってその宛先へ適宜ルーティングし送り届けるためのものである。本実施形態では、通信網１０がインターネットである場合について説明するが、ＬＡＮ（Local Area Network）であっても良く、また、移動パケット通信網や無線ＬＡＮのような無線通信網であっても良い。
【００３６】
図１のサーバ装置２０とクライアント装置３０とは、何れもパーソナルコンピュータ（以下、「ＰＣ」）であり、通信網１０を介してＴＣＰにしたがってコネクションを確立しデータを送受信する機能を備えている。具体的には、サーバ装置２０やクライアント装置３０は、図２に示すフォーマットを有するメッセージを生成し、そのヘッダ部の各領域に所定のデータを書き込んで送信し上記コネクションの確立およびそのコネクションを介したデータの送受信を行うものである。
【００３７】
図２は、ＴＣＰにしたがって送信されるメッセージのフォーマットを示す図である。なお、図２においては詳細な図示は省略したが、コントロールフラグ領域は、ＵＲＧ、ＡＣＫ、ＰＳＨ、ＲＳＴ、ＳＹＮおよびＦＩＮの６つのビットフラグを書き込むための領域である。サーバ装置２０やクライアント装置３０は、これら６つのビットフラグに“１”又は“０”を書き込んで送信することによって、上述した、ＳＹＮ、ＳＹＮ／ＡＣＫ、ＡＣＫおよびＲＳＴの各メッセージを送信することができる。例えば、クライアント装置３０からサーバ装置２０へ宛てて送信されるＳＹＮメッセージの各領域には、以下のデータが書き込まれている。
【００３８】
すなわち、図２の送信元ポート番号には、通信の開始を要求したアプリケーション（例えば、ブラウザなど）の通信ポート番号が書き込まれる。図２の送信先ポート番号には、その通信相手のアプリケーション（例えば、ＨＴＴＰＤ）の通信ポート番号が書き込まれる。図２のシーケンス番号には、上記通信を行う際にサーバ装置２０が用いるシーケンス番号の初期値が書き込まれる。そして、コントロールフラグについてはＳＹＮフラグにのみ“１”が書き込まれ、他のフラグには“０”が書き込まれる。なお、図２においては省略したが、サーバ装置２０とクライアント装置３０との間で送受信されるメッセージには、ＴＣＰよりも下層の通信プロトコル（例えば、Internet Protocol：以下、「ＩＰ」）によってそのメッセージの送信元や宛先である通信装置を表すデータ（例えば、各装置に割り当てられているＩＰアドレスなどの通信アドレス）が書き込まれたヘッダが更に付加されて送信される。つまり、クライアント装置３０からサーバ装置２０へ送信されるＳＹＮメッセージには、サーバ装置２０からクライアント装置３０へデータを送信する際に用いられる下りのコネクションのコネクション識別子が書き込まれている。
【００３９】
さて、図１のサーバ装置２０とクライアント装置３０とは、本発明に係る処理実行方法にしたがってコネクションの確立を行うために、前述した３ウェイハンドシェーク（図１０参照）やクライアントパズルプロトコル（図１１）、クライアントパズルオークション（図１２参照）の通信シーケンスとは異なる通信シーケンス（図３参照）でコネクションの確立を行う機能を備えている。以下、サーバ装置２０とクライアント装置３０とについて詳細に説明する。
【００４０】
（Ａ−２：サーバ装置２０の構成）
まず、図４を参照しつつサーバ装置２０の構成を説明する。図４に示されているように、サーバ装置２０は、制御部２００と、通信インターフェイス（以下、「ＩＦ」と表記する）部２１０と、記憶部２２０と、これら各構成要素間のデータ授受を仲介するバス２３０とを有している。
【００４１】
制御部２００は、例えばＣＰＵ（Central Processing Unit）であり、記憶部２２０に格納されているソフトウェアを読み出して実行することにより、サーバ装置２０の各部を制御することができる。通信ＩＦ部２１０は、通信網１０に接続されており、通信網１０を介して送くられてくるメッセージを受信し制御部２００へ引渡すとともに、制御部２００から引渡されたメッセージを通信網１０へ送り出すためのものである。
【００４２】
記憶部２２０は、図４に示されているように、揮発性記憶部２２０ａと不揮発性記憶部２２０ｂとを有している。揮発性記憶部２２０ａは、例えばＲＡＭであり、ソフトウェアにしたがって作動している制御部２００によってワークエリアとして利用される。一方、不揮発性記憶部２２０ｂは、例えば、ハードディスクであり、各種データおよび各種ソフトウェアが格納されている。
【００４３】
不揮発性記憶部２２０ｂに記憶されているデータの一例としては、クライアント装置３０からの要求に応じてそのクライアント装置３０へ送信するデータや、難易度の異なる複数のクライアントパズルの各々を生成する際に用いられる複数のデータ（以下、サーバシークレット）などが挙げられる。なお、本実施形態では、不揮発性記憶部２２０ｂに複数のサーバシークレットが格納されている場合について説明するが、クライアント装置３０からコネクションの確立を要求される度（すなわち、図３のＳＹＮメッセージ１００を受信する度）に、所定の擬似乱数生成アルゴリズム（例えば、Ｍ系列や混合合同法など）にしたがって生成した擬似乱数を上記サーバシークレットとして用いるようにしても勿論良く、また、係る擬似乱数に所定の値を加算してサーバシークレットを生成するとしても良い。
【００４４】
不揮発性記憶部２２０ｂに格納されているソフトウェアの一例としては、オペレーティングシステム（Operating System：以下、「ＯＳ」）を制御部２００に実現させるためのＯＳソフトウェアや、ＯＳの制御下で、図３に示す通信シーケンスでコネクションを確立する処理を制御部２００に実行させるためのサーバソフトウェアが挙げられる。以下、これらソフトウェアを実行することによって制御部２００に付与される機能について説明する。
【００４５】
サーバ装置２０の電源（図示省略）が投入されると、制御部２００は、まず、ＯＳソフトウェアを不揮発性記憶部２２０ｂから読み出し実行する。ＯＳソフトウェアにしたがって作動している制御部２００には、サーバ装置２０の各部を制御する機能や他のソフトウェアを不揮発性記憶部２２０ｂから読み出し実行する機能が付与される。例えば、ＯＳソフトウェアの実行を完了し、ＯＳを実現している状態の制御部２００は、即座に、上記サーバソフトウェアを不揮発性記憶部２２０ｂから読み出し実行する。
【００４６】
そして、上記サーバソフトウェアにしたがって作動している制御部２００には、下りのコネクションの確立を要求する旨のメッセージ（図３：ＳＹＮメッセージ１００）を通信ＩＦ部２１０を介してクライアント装置３０から受信した場合に、図５に示すフローチャートにしたがって、そのクライアント装置３０との間に下りのコネクションを確立するための３つの機能が付与される。
【００４７】
すなわち、上記サーバソフトウェアにしたがって作動している制御部２００に付与される第１の機能は、演算量の異なる複数の演算の何れかを実行しその演算結果を返信することを要求する旨のメッセージを通信ＩＦ部２１０を介してクライアント装置３０へ送信する処理（以下、送信処理）を行う機能が付与される。本実施形態では、上記メッセージとしてＳＹＮメッセージ１０９（図３参照）が用いられている。このＳＹＮメッセージ１０９には、クライアント装置３０との間の上りのコネクションを表すコネクション識別子が書き込まれており、その上りのコネクションの確立をクライアント装置３０へ要求する、といった役割も担っている。
【００４８】
より詳細に説明すると、制御部２００は、上記第１の機能によって、ＳＹＮメッセージ１００に書き込まれていたコネクション識別子と、そのＳＹＮメッセージ１００を受信した時刻（図示せぬ計時部により取得）を表す受信時刻データと、上記複数のサーバシークレットとに基づいて、難易度の異なる複数のクライアントパズルを生成し、それら複数のクライアントパズルの各々をＳＹＮメッセージ１０９の特定の領域（本実施形態では、図２のオプション領域）へ書き込んで送信する。なお、本実施形態では、制御部２００は、ＳＹＮメッセージ１０９を送信するとともに、上記複数のクライアントパズルの解とＳＹＮメッセージ１０９の宛先とを対応付けて揮発性記憶部２２０ａに書き込んでおく。これは、各クライアント装置３０から送信されてくる解が正しいか否かを判定するためである。また、本実施形態では、上記コネクション識別子、上記受信時刻データおよびサーバシークレットに基づいて、クライアントパズルを生成する場合について説明するが、これらのデータのうちの何れかのみを用いて上記クライアントパズルを生成するとしても良く、また、これらのデータに他のデータを加えてクライアントパズルを生成するとしても勿論良い。
【００４９】
ここで、上記複数のクライアントパズルを書き込む特定の領域として、図２のオプション領域を用いる理由は、以下の通りである。非特許文献１や非特許文献２に開示された従来の技術では、図２のシーケンス番号、緊急ポインタおよびウィンドウサイズの各領域にクライアントパズルを書き込むようにしていた。これら３つの領域は、その合計の領域サイズが６４ビット（すなわち、８バイト）しかないため、１つのメッセージに１つのクライアントパズルしか書き込むことができず、図１２に示すように複数回のメッセージの送信が必要になっていた。
【００５０】
これに対して、図２のオプション領域は、本来、ＳＡＣＫオプションやタイムスタンプオプションの利用の可否を通信相手に通知するためにデータ（以下、付加データ）を書き込むための領域であり、最大で４０バイトのデータを格納することができる。このように、本実施形態においては、図２のオプション領域にクライアントパズルを書き込むようにしたため、難易度の異なる複数のクライアントパズルを１つのＳＹＮメッセージ１０９に書き込んで送信すること、すなわち、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを１つのメッセージで要求することが可能になる。
【００５１】
図５に戻って、上記サーバソフトウェアにしたがって作動している制御部２００に付与される第２の機能は、所定の処理の実行を要求する旨のメッセージであって、上記複数のクライアントパズルの何れかの解を表す演算結果データがオプション領域に書き込まれたメッセージを通信ＩＦ部２１０を介してクライアント装置３０から受信した場合に、その演算結果データの表す解が正しいか否かを判定する処理（以下、判定処理）を行う機能である。本実施形態では、上記メッセージとしてＳＹＮ／ＡＣＫメッセージ１１０（図３参照）が用いられている。このＳＹＮ／ＡＣＫメッセージ１１０は、上記ＳＹＮメッセージ１０９をクライアント装置３０が受信したことを表すとともに、上記下りのコネクションを確立する処理を実行することを要求する旨のメッセージである。
【００５２】
そして、上記サーバソフトウェアにしたがって作動している制御部２００に付与される第３の機能は、クライアント装置３０から返信されたクライアントパズルの解が正しい解であると判定した場合に、そのクライアント装置３０にて実行された演算の演算量を上記演算結果データに基づいて特定し、その特定結果に応じた優先順位で上記所定の処理（本実施形態では、下りのコネクションを確立する処理）を実行する機能である。
【００５３】
具体的には、制御部２００は、難易度の高いクライアントパズルを解いた（すなわち、演算量の多い演算を行った）クライアント装置からのコネクション確立要求ほど優先的に処理する。なお、本実施形態では、難易度の高いクライアントパズルを解いたクライアント装置から要求された処理を優先的に実行する場合について説明するが、逆に、難易度の低いクライアントパズルを解いたクライアント装置から要求された処理を優先的に実行するとしても勿論良い。要は、処理の実行を要求してきたクライアント装置にて行われた演算の演算量に応じた優先順位でその処理を実行する態様であれば、何れの態様であっても良い。
【００５４】
以上に説明したように、サーバ装置２０のハードウェア構成は一般的なコンピュータ装置のハードウェア構成と同一である。本実施形態に係るサーバ装置２０においては、不揮発性記憶部２２０ｂに格納されている各種ソフトウェアにしたがって制御部２００を作動させることによって、本発明に係るサーバ装置に特有な３つの機能が実現される。換言すれば、上記サーバソフトウェアは、制御部２００を、上記送信処理を行う送信手段と、上記判定処理を行う判定手段と、クライアント装置から実行を要求された処理をそのクライアント装置が行った演算の演算量に応じた優先順位で実行する処理実行手段として機能させるソフトウェアである。このように、本実施形態では、本発明に係るサーバ装置に特有な機能をソフトウェアモジュールで実現する場合について説明したが、これらソフトウェアモジュールと同一の機能を担っているハードウェアモジュールを用いてサーバ装置２０を構成しても良いことは勿論である。すなわち、上記送信手段、判定手段および処理実行手段の各々をハードウェアモジュールで実現し、これら各手段を図５に示すフローチャートにしたがって作動させるように構成して本発明に係るサーバ装置を実現するとしても勿論良い。
【００５５】
（Ａ−３：クライアント装置３０の構成）
次いで、図６を参照しつつクライアント装置３０の構成を説明する。図６に示されているように、クライアント装置３０のハードウェア構成がサーバ装置２０のハードウェア構成と異なっている点は、制御部２００、通信ＩＦ部２１０、記憶部２２０およびバス２３０に代えて、制御部３００、通信ＩＦ部３１０、記憶部３２０およびバス３３０を設けた点である。なお、記憶部３２０の内部には、揮発性記憶部２２０ａおよび不揮発性記憶部２２０ｂに代えて揮発性記憶部３２０ａおよび不揮発性記憶部３２０ｂが設けられている。つまり、クライアント装置３０も、サーバ装置２０と同様に一般的なコンピュータ装置と同一のハードウェア構成を有している。
【００５６】
さて、不揮発性記憶部３２０ｂには、クライアント装置３０に固有のデータおよびソフトウェアが格納されている。具体的には、不揮発性記憶部３２０ｂには上記複数のサーバシークレットに代えて、このクライアント装置３０の処理能力を表す閾値データが格納されている。詳細については後述するが、この閾値データは、サーバ装置２０から送信された複数のクライアントパズルのうち、その何れを解くかを選択する際に用いられるデータである。また、不揮発性記憶部３２０ｂには、上述したＯＳソフトウェアの他に、本発明に係るクライアント装置に特有な機能を制御部３００に実現させるためのクライアントソフトウェアが上記サーバソフトウェアに代えて格納されている。以下、これらのソフトウェアを実行することによって制御部３００に付与される機能について説明する。
【００５７】
クライアント装置３０の電源（図示省略）が投入されると、制御部３００は、まず、ＯＳソフトウェアを不揮発性記憶部３２０ｂから読み出し実行する。ＯＳソフトウェアにしたがって作動しＯＳを実現している状態の制御部３００には、クライアント装置３０の各部を制御する機能やユーザの指示に応じて他のソフトウェアを不揮発性記憶部３２０ｂから読み出し実行する機能が付与される。例えば、上記クライアントソフトウェアの実行を指示されると、制御部３００は、上記クライアントソフトウェアを不揮発性記憶部３２０ｂから読み出し、これを実行する。そして、ＯＳの制御下で、このクライアントソフトウェアにしたがって作動している制御部３００には、図７に示すフローチャートにしたがってサーバ装置２０とコネクションを確立する機能が付与される。以下、クライアントソフトウェアにしたがって作動している制御部３００に付与される３つの機能について説明する。
【００５８】
上記クライアントソフトウェアにしたがって作動している制御部３００に付与される第１の機能は、演算量の異なる複数の演算の何れかの実行とその演算結果の返信とを要求する旨のメッセージ（本実施形態では、図３のＳＹＮメッセージ１０９）を受信した場合に、それら複数の演算の各々の演算量を特定し、実行するべき演算をその特定結果に応じて選択する処理（以下、選択処理）を行う機能である。具体的には、制御部３００は、サーバ装置２０から送信されたＳＹＮメッセージ１０９を受信した場合に、そのＳＹＮメッセージ１０９に書き込まれている複数のクライアントパズルと上記閾値データとに基づいて、これら複数のクライアントパズルのうちから、解くべきクライアントパズルを１つ選択する。
【００５９】
上記クライアントソフトウェアにしたがって作動している制御部３００に付与される第２の機能は、上記選択処理にて選択した演算を実行する機能である。すなわち、本実施形態では、制御部３００は、上記選択処理にて選択したクライアントパズルを解き、その解を取得する。そして、第３に、所定の処理の実行を要求する旨のメッセージに、上記演算結果（すなわち、上記クライアントパズルの解）を表す演算結果データを書き込んで送信する機能である。本実施形態では、制御部３００は、ＳＹＮメッセージ１０９を受信したことを表すとともに下りのコネクションの確立を要求する旨のＳＹＮ／ＡＣＫメッセージ１１０のオプション領域（図２参照）に上記演算結果データを書き込んで送信する。
【００６０】
以上に説明したように、本実施形態に係るクライアント装置３０においては、不揮発性記憶部３２０ｂに格納されている各種ソフトウェアにしたがって制御部３００を作動させることによって、本発明に係るクライアント装置に特有な３つの機能が実現される。換言すれば、上記クライアントソフトウェアは、制御部３００を、上記選択処理を行う選択手段と、その選択手段により選択された演算を行う演算実行手段と、所定の処理の実行を要求する旨のメッセージにその演算実行手段の演算結果を書き込んで返信する返信手段として機能させるソフトウェアである。このように、本実施形態では、本発明に係るクライアント装置に特有な機能をソフトウェアモジュールで実現する場合について説明したが、これらソフトウェアモジュールと同一の機能を担っているハードウェアモジュールを用いてクライアント装置を構成しても良いことは勿論である。すなわち、上述した選択手段、演算実行手段および返信手段の各々をハードウェアモジュールで実現し、これら各手段を図７に示すフローチャートにしたがって作動させるように構成して本発明に係るクライアント装置を実現するとしても勿論良い。
【００６１】
（Ｂ：動作）
次いで、サーバ装置２０とクライアント装置３０が行う動作のうち、その特徴を顕著に示す動作について図面を参照しつつ説明する。
【００６２】
クライアント装置３０の操作部（図示省略）を介してユーザが所定の操作（サーバ装置２０のＵＲＬの入力など）を行うと、クライアント装置３０の制御部３００は、図３に示すようにＳＹＮメッセージ１００をサーバ装置２０へ送信する。以下、このＳＹＮメッセージ１００を受信した場合に、サーバ装置２０の制御部２００が行う動作について図５を参照しつつ説明する。
【００６３】
制御部２００は、図５に示すように、通信ＩＦ部２１０を介してメッセージを受信（ステップＳＡ１）すると、そのメッセージがＳＹＮメッセージであるか、それとも、ＳＹＮ／ＡＣＫメッセージであるか、をそのメッセージの内容に基づいて判定する（ステップＳＡ２）。より詳細に説明すると、制御部２００は、そのメッセージのコントロールフラグ（図２参照）にてＳＹＮフラグのみに“１”がセットされている場合には、そのメッセージをＳＹＮメッセージである判定し、ＳＹＮフラグの他にＡＣＫフラグにも“１”がセットされている場合には、ＳＹＮ／ＡＣＫメッセージと判定する。そして、制御部２００は、ステップＳＡ２にてＳＹＮメッセージであると判定した場合には、図５のステップＳＡ３およびステップＳＡ４の処理を行い、逆に、ステップＳＡ２にてＳＹＮ／ＡＣＫメッセージであると判定した場合には、図５のステップＳＡ５以降の処理を行う。
【００６４】
本動作例では、クライアント装置３０からＳＹＮメッセージ１００が送信されてくるのであるから、上記ステップＳＡ１で受信したメッセージはＳＹＮメッセージであると上記ステップＳＡ２にて判定され、上記ステップＳＡ３の処理が行われる。このステップＳＡ３においては、制御部２００は、難易度の異なる複数のクライアントパズルを生成する。
【００６５】
図８は、制御部２００が生成するクライアントパズルを説明するための図である。上記ステップＳＡ３において、制御部２００は、まず、ステップＳＡ１にて受信したＳＹＮメッセージ１００に書き込まれているコネクション識別子と、そのＳＹＮメッセージを受信した時刻を表す受信時刻データと、不揮発性記憶部２２０ｂに格納されている複数のサーバシークレットのうちの何れか１つとを所定のハッシュ関数Ｈへ入力し、Ｌビットのハッシュ値Ｘを得る。次いで、制御部２００は、上記ハッシュ値Ｘを再度ハッシュ関数Ｈへ入力し、同じくＬビットのハッシュ値Ｙを得る。なお、本実施形態では、ハッシュ値Ｘとハッシュ値Ｙとが同一のビット長を有している場合について説明するが両者が異なるビット長を有しているとしても勿論良い。
【００６６】
そして、制御部２００は、上記ハッシュ値Ｘの先頭からｋビット（但し、１≦ｋ＜Ｌ）の部分（以下、Ｘ＜１、ｋ＞と表記する）と上記ハッシュ値Ｙとの組を１つのクライアントパズルとして生成する。このクライアントパズルは、上記所定のハッシュ関数（本実施形態では、ハッシュ関数Ｈ）を用いて上記ハッシュ値Ｙを得ることができる入力データであって、その先頭からｋビット目までは上記Ｘ＜１、ｋ＞に一致する入力データを求める演算を表している。詳細については後述するが、上記クライアントパズルは、Ｘ＜１、ｋ＞のビット長が長い（すなわち、ｋがＬに近い）ほどそのクライアントパズルの解（すなわち、Ｘ＜ｋ＋１、Ｌ＞）を算出するための演算量は少なくなる。このため、制御部２００は、上記ｋの値を適宜変えて複数のクライアントパズルを生成することによって、難易度の異なる複数のクライアントパズルを生成することができる。また、上記複数のクライアントパズルの各々を生成する際には、各クライアントパズル毎に異なるサーバシークレットを用いるようにしても勿論良い。
【００６７】
図５に戻って、制御部２００は、クライアント装置３０に対して上りのコネクションの確立を要求する旨のＳＹＮメッセージ１０９を生成し、上記複数のクライアントパズルの解（本実施形態では、Ｘ＜ｋ＋１、Ｌ＞）とＳＹＮメッセージ１０９の宛先とを対応付けて揮発性記憶部２２０ａへ書き込む一方、ＳＹＮメッセージ１０９のオプション領域（図２参照）に上記複数のクライアントパズルを書き込んで送信する（ステップＳＡ４）。その結果、図３に示すように、サーバ装置２０からクライアント装置３０へＳＹＮメッセージ１０９が送信されることになる。以下、このＳＹＮメッセージ１０９を受信した場合に、クライアント装置３０の制御部３００が行う動作について図７を参照しつつ説明する。
【００６８】
制御部３００は、ＳＹＮメッセージ１０９を受信（ステップＳＢ１）すると、そのＳＹＮメッセージ１０９から、上記複数のクライアントパズルを読み出し、各クライアントパズルの表す演算の演算量と不揮発性記憶部３２０ｂに格納されている閾値データとに基づいて、解くべきクライアントパズル（すなわち、実行するべき演算）を選択する（ステップＳＢ２）。本実施形態では、上記複数のクライアントパズルに含まれているＸ＜１、ｋ＞およびＹのうち、Ｘ＜１、ｋ＞のデータ長（すなわち、ｋ）がそのクライアントパズルの難易度を表している。本実施形態では、制御部３００は、上記閾値データの表す値を超えないビット長を有するＸ＜１、ｋ＞のうち、最長のビット長を有するＸ＜１、ｋ＞を含んでいるクライアントパズルを解くべきクライアントパズルとして特定する。
【００６９】
次いで、制御部３００は、ステップＳＢ２にて選択した演算を実行し、その演算結果（すなわち、ステップＳＢ２にて選択したクライアントパズルの解）を取得する（ステップＳＢ３）。具体的には、制御部３００は、以下のようにしてクライアントパズルの解を取得する。まず、制御部３００は、上記ステップＳＢ２にて選択したクライアントパズルに含まれているＸ＜１、ｋ＞に、全てのビットをオフ（すなわち、“０”）にした（Ｌ−ｋ）ビットのビット列Ｗを付加して上記所定のハッシュ関数Ｈへ入力し、その出力ハッシュ値が上記クライアントパズルのＹと一致するか否かを判定する。そして、両者が一致しない場合には、制御部３００は、上記ビット列Ｗの各ビットを１ビットずつオン（すなわち、“１”）にして再度ハッシュ関数Ｈへ入力し、その出力ハッシュ値と上記Ｙとが一致するまでこの処理を繰り返し実行する。そして、制御部３００は、両者が一致した時点のビット列Ｗを上記クライアントパズルの解として取得する。
【００７０】
そして、制御部３００は、ＳＹＮメッセージ１０９を受信したことを表すとともに、上記下りのコネクションの確立を要求する旨のＳＹＮ／ＡＣＫメッセージ１１０を生成し、そのオプション領域に上記演算結果を表す演算結果データ（本実施形態では、上記Ｗ）を書き込んでサーバ装置２０へ送信する（ステップＳＢ４）。その結果、図５に示すように、上記ＳＹＮ／ＡＣＫメッセージ１１０がクライアント装置３０からサーバ装置２０へ送信されることになる。以下、図５に戻って、ＳＹＮ／ＡＣＫメッセージ１１０を受信した場合に、制御部２００が行う動作について説明する。
【００７１】
制御部２００、ＳＹＮ／ＡＣＫメッセージ１１０を通信ＩＦ部２１０を介して受信（ステップＳＡ１）すると、上述したようにステップＳＡ５以降の処理を行う。より詳細に説明すると、制御部２００は、まず、クライアント装置３０から受信したＳＹＮ／ＡＣＫメッセージ１１０のオプション領域に書き込まれている演算結果データの表す演算結果が正しいかい否かを判定する（ステップＳＡ５）。具体的には、制御部２００は、ＳＹＮ／ＡＣＫメッセージ１１０の送信元（すなわち、本実施形態ではＳＹＮメッセージ１０９）の宛先に対応づけて揮発性記憶部２２０ａに格納されているＸ＜ｋ＋１、Ｌ＞の何れかと上記演算結果データＷとが一致するか否かを判定し、一致するＸ＜ｋ＋１、Ｌ＞があった場合に正しい演算結果であると判定する。
【００７２】
そして、制御部２００は、ステップＳＡ５の判定結果が“Ｎｏ”である場合には、クライアント装置３０からの要求を拒絶することを表すメッセージ（例えば、ＲＳＴメッセージ）を送信し（ステップＳＡ８）、本動作を終了する。逆に、ステップＳＡ５の判定結果が“Ｙｅｓ”である場合には、制御部３００は、上記演算結果データに基づいて、クライアント装置３０にて実行された演算の演算量を特定する（ステップＳＡ６）。本実施形態では、制御部２００は、上記演算結果データＷのビット長が長い程、演算量が多いと特定する。
【００７３】
そして、制御部２００は、ステップＳＡ６にて特定した演算量が多い順に、ステップＳＡ１にて受信したＳＹＮ／ＡＣＫメッセージに書き込まれているコネクション識別子に基づいて、上記下りのコネクションを確立する（ステップＳＡ７）。その後、制御部２００は、上記ステップＳＡ７が完了した後に、上記ＳＹＮ／ＡＣＫメッセージを受信し下りのコネクションを確立したことを表すＡＣＫ１２０を送信して本動作を終了する。その結果、図５に示すように、サーバ装置２０からクライアント装置３０へＡＣＫ１２０が送信されることになる。
【００７４】
以降、制御部３００は、ＡＣＫ１２０を受信すると、そのＡＣＫ１２０から上りのコネクションを表すコネクション識別子を読み出し、そのコネクション識別子に基づいて上記上りのコネクションを確立する。これにより、サーバ装置２０とクライアント装置３０との間に下りおよび上りのコネクションが確立されることになる。
【００７５】
以上、本実施形態によれば、クライアント装置３０にて実行された演算の演算量に応じた優先順位でそのクライアント装置との間にコネクションの確立が行われる。このため、以下の効果を奏する。本実施形態に係るサーバ装置２０に対して多量のＳＹＮメッセージを送信しＳＹＮＦｌｏｏｄ攻撃を行うクライアント装置は、送信したＳＹＮメッセージの数分だけクライアントパズルを解かねばならい。このため、上記クライアント装置は、クライアントパズルを解くことに多量のリソースを割り当てねばならず、サーバ装置２０から送信されてくるＳＹＮメッセージ１０９に対するＳＹＮ／ＡＣＫメッセージ１１０を短時間で返信することが困難になる。ＳＹＮ／ＡＣＫメッセージ１１０が送信されてこなければ、サーバ装置２０で下りのコネクションの確立が行われることはないので、上記ＳＹＮＦｌｏｏｄ攻撃を防御することが可能になる。
【００７６】
なお、上記クライアント装置が、実際にはクライアントパズルを解かずに、適当な値をクライアントパズルの解として書き込んだＳＹＮ／ＡＣＫメッセージを送信しても、そのような値がクライアントパズルの解と偶然に一致する確率は極めて低く、下りのコネクションの確立をサーバ装置２０に拒絶されてしまう。また、上記サーバ装置２０から送信された複数のクライアントパズルのうち、常にその難易度が最も低いものを解いてＳＹＮ／ＡＣＫメッセージを送信するようにしても、そのようなコネクション確立要求は常に低い優先順位で処理されるため、その確立が常に行われるとは限らない。このように、本実施形態によれば、ＳＹＮＦｌｏｏｄ攻撃を確実に防御することが可能になるといった効果を奏する。
【００７７】
また、本発明によれば、難易度の異なる複数のクライアントパズルが１つのメッセージで一括してクライアント装置３０へ送信されるため、クライアント装置３０とサーバ装置２０との間の通信トラヒックが増加することを回避することができる、といった効果も奏する。
【００７８】
（Ｃ：変形例）
以上、本発明を実施するための最良の形態について説明した。しかしながら、以下に述べるような変形を加えても良いことは勿論である。
（Ｃ−１：変形例１）
上述した本実施形態では、サーバ装置２０とクライアント装置３０とが、ＴＣＰにしたがって通信するＰＣである場合について説明したが、ＴＣＰにしたがって通信するＰＤＡや携帯電話機であっても良いことは勿論である。要は、ＴＣＰにしたがって通信する機能を有するコンピュータ装置であれば、何れであっても良い。また、上述した実施形態では、サーバ装置２０とクライアント装置３０とがＴＣＰにしたしたがって通信する場合について説明するが、他の通信プロトコルにしたがって通信するとしても良いことは勿論である。
【００７９】
（Ｃ−２：変形例２）
上述した実施形態では、ＳＹＮメッセージ１０９に書き込んだ各クライアントパズルの解をそのＳＹＮメッセージ１０９の宛先に対応付けてサーバ装置２０に記憶させておく場合について説明した。しかしながら、以下に説明するような態様のクライアントパズルを用いる場合には、その解をサーバ装置２０に記憶させておく必要はない。
【００８０】
図９は、本変形例に係るクライアントパズルを説明するための図である。図９に示されているように、このクライアントパズルは、まず、サーバシークレット、受信時刻データおよび送信元アドレス（すなわち、クライアント装置３０のＩＰアドレス）を所定のハッシュ関数Ｈへ入力して得られるハッシュ値Ｎｓと、送信先アドレス（すなわち、サーバ装置２０のＩＰアドレス）や送信元および送信先のポート番号と、シーケンス番号の初期値と、あるパラメータＺとを上記ハッシュ関数Ｈへ入力して、先頭から所定ビット長部分が全て０であるハッシュ値を算出することを表している。この場合、クライアント装置３０へ送信するべきクライアントパズルは、上記ハッシュ値Ｎｓと、上記所定ビット長を表すデータとの組であり、そのクライアントパズルの解は上記パラメータＺである。このぅライアントパズルにおいては、上記所定のビット長がそのクライアントパズルの難易度を表しており、そのビット長が長い程、高い難易度を表している。
【００８１】
図９に示すクライアントパズルを用いる場合には、サーバ装置２０は、上記ハッシュ値Ｎｓと上記所定のビット長を表すデータとをクライアントパズルとしてクライアント装置３０へ送信すれば良く、そのクライアント装置３０から上記クライアントパズルの解Ｚが送信されてきた時点で、図９に示す演算を実行し、その解が正しいか否かを判定すれば良い。したがって、図９に示すクライアントパズルを用いる場合には、サーバ装置２０は、図９に示す演算を予め実行してその解を算出しておく必要はない。要は、各クライアント装置３０へ送信したハッシュ値Ｎｓと上記所定のビット長を表すデータとをそのクライアント装置３０の通信アドレスに対応付けて記憶しておけば、そのクライアント装置３０から返信されてきた解が正しいか否かを判定することができる。このような態様にあっては、ＳＹＮメッセージ１０９を送信することに先立って、クライアントパズルを生成する演算を行う必要がないため、そのＳＹＮメッセージ１０９を速やかにクライアント装置３０へ返信することができるといった効果も奏する。
【００８２】
また、クライアントパズルが表す演算はハッシュ関数を用いた演算に限定されるものではない。例えば、ｎ（ｎ≧３）次方程式や多元１次の連立方程式などの代数方程式の解を求める演算であっても良い。このような場合には、クライアントパズルとして、上記ｎ次方程式や連立方程式を表すデータ（例えば、その代数方程式が３次方程式ａＸ3＋ｂＸ2＋ｃＸ＋ｄ＝０であれば、各係数ａ、ｂ、ｃおよびｄ）を用いれば良い。このような場合には、代数方程式を表す係数の個数がその演算の演算量を表している。
【００８３】
（Ｃ−３：変形例３）
上述した実施形態では、サーバ装置から送信された複数のクライアントパズルのうちの何れか１つをクライアント装置に選択させ解かせる場合について説明したが、２つ以上のクライアントパズルを解かせるようにしても勿論良い。そして、２つ以上のクライアントパズルを解いた場合には、それらの解を全てＳＹＮ／ＡＣＫメッセージ１１０に書き込んで送信するとしても勿論良い。そして、サーバ装置においては、ＳＹＮ／ＡＣＫメッセージ１１０に複数の解が書き込まれていた場合には、そのうちの何れか１つ（例えば、難易度が最も高い或いは低いクライアントパズルの解）に基づいて、クライアント装置が実行した演算の演算量を特定するとしても良く、また、それら複数の解に基づいて、クライアント装置が実行した演算の演算量を特定するとしても勿論良い。例えば、複数の解に基づいて上記演算量を特定する態様の一例としては、各解に対応するクライアントパズルの演算量の加算値に基づいて、クライアント装置が行った演算の演算量を特定する態様が挙げられる。
【００８４】
（Ｃ−４：変形例４）
上述した実施形態では、クライアント装置３０からコネクションの確立を要求された場合に、そのクライアント装置３０が解いたクライアントパズルの難易度に応じた優先順位でそのコネクションを確立する場合について説明した。しかしながら、クライアント装置からの要求に応じてサーバ装置が実行する処理は、コネクション確立処理に限定されるものではなく、所定のアルゴリズムにしたがってデータを生成したり、そのデータを記憶（例えば、データベースなどへの格納）したり、そのデータを所定の宛先へ転送したりする処理であっても良い。また、クライアント装置からの要求に応じて所定のデータをそのクライアント装置へ返信する処理であっても良い。
【００８５】
ところで、上述の如く、所定のアルゴリズムにしたがってデータを生成する処理などを行うサーバ装置に本発明を適用した場合には、あるクライアント装置から実行を要求された処理を行っている途中に、そのクライアント装置より演算量の多い演算を行ったクライアント装置から他の処理の実行を要求される場合が起こり得る。このような場合には、システムコール（例えば、Ｕｎｉｘ（登録商標）におけるｎｉｃｅシステムコール）などによって実行中の処理の優先順位を引き下げ、上記他の処理が優先的に実行されるようにすれば良い。また、上述の如く、コネクションの確立処理以外に本発明を適用する場合には、ＳＹＮメッセージ１０９に代えて、ＲＳＴメッセージなどに複数のクライアントパズルを書き込んで送信するようにすれば良い。このように変形することによって、ＳＹＮＦｌｏｏｄ攻撃に対する防御だけでなく、クライアント装置からの要求に応じて任意の処理を行うサーバ装置に、そのクライアント装置が負担した負荷に応じた優先順位でその処理を実行させることが可能になるといった効果をする。
【００８６】
（Ｃ−５：変形例５）
上述した実施形態では、クライアント装置３０からコネクションの確立を要求する旨のＳＹＮメッセージが送信されてきたことを契機として、難易度の異なる複数のクライアントパズルを一括してそのクライアント装置へ送信する場合について説明した。しかしながら、複数のクライアント装置との間で既にコネクションを確立し、各クライアント装置からの処理要求を待ち受けているサーバ装置に、複数のクライアントパズルを各クライアント装置へ送信させ、そのクライアントパズルの解とともに上記処理要求が送信されてきた場合にのみ、その処理を実行させるようにしても良い。このようにすると、クライアント装置がサーバ装置へ処理要求を行う頻度をそのサーバ装置に制御させることを可能になり、輻輳の発生を事前に回避することが可能になるといった効果を奏する。
【００８７】
これに対して、非特許文献１や非特許文献２に開示された技術では、ＴＣＰヘッダのシーケンス番号や緊急ポインタ、およびウィンドウサイズにクライアントパズルを書き込むようにしていたため、このようなことを実現することはできなかった。その理由は、上記シーケンス番号や緊急ポインタには、サーバ装置とクライアント装置とが確立したコネクションを介してデータの送受信を行う度毎に更新されるデータが書き込まれるため、係る領域をクライアントパズルの書き込みに流用することはできないからである。これに対して、ＴＣＰオプションフィールドは、コネクションの確立を行う際にのみ、前述した付加データが書き込まれるため、コネクションの確立が完了した後には、係る領域をクライアントパズルの書き込みに流用したとしても何ら問題が発生しないからである。
【００８８】
（Ｃ−６：変形例６）
上述した実施形態では、本発明に係るサーバ装置に特有な機能を制御部に実現させるためのソフトウェアを不揮発性記憶部２２０ｂに予め格納させておく場合について説明した。しかしながら、例えば、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）やＤＶＤ（Digital Versatile Disk）などのコンピュータ装置が読み取り可能な記録媒体に、上記ソフトウェアを記録しておき、このような記録媒体を用いて一般的なコンピュータ装置に上記ソフトウェアをインストールするとしても良いことは勿論である。このようにすると、既存の通信システムに含まれているサーバ装置を、本発明に係るサーバ装置として機能させることが可能になるといった効果を奏する。同様に、本発明に係るクライアント装置に特有な機能を制御部に実現させるためのソフトウェアを上述の如き記録媒体に記録しておき、この記録媒体を用いて一般的なコンピュータ装置に上記ソフトウェアをインストールするとしても勿論良い。
【図面の簡単な説明】
【００８９】
【図１】本発明の１実施形態に係るサーバ装置２０およびクライアント装置３０を有する通信システムの一例を示す図である。
【図２】ＴＣＰにしたがって送受信されるメッセージのフォーマットを示す図である。
【図３】同クライアント装置３０とサーバ装置２０とがコネクションを確立する際に行う通信の通信シーケンスの一例を示す図である。
【図４】同サーバ装置２０のハードウェア構成の一例を示す図である。
【図５】同サーバ装置２０の制御部２００がサーバソフトウェアにしたがって行うコネクション確立処理の流れを示すフローチャートである。
【図６】同クライアント装置３０のハードウェア構成の一例を示す図である。
【図７】同クライアント装置３０の制御部３００がクライアントソフトウェアにしたがって行うコネクション確立処理の流れを示すフローチャートである。
【図８】同サーバ装置２０が生成するクライアントパズルを説明するための図である。
【図９】変形例２に係るクライアントパズルを説明するための図である。
【図１０】従来の３ウェイハンドシェークを説明するための図である。
【図１１】非特許文献１に開示されたクライアントパズルプロトコルを説明するための図である。
【図１２】非特許文献２に開示されたクライアントパズルオークションを説明するための図である。
【符号の説明】
【００９０】
１０…通信網、２０、４０Ａ、４０Ｂ、４０Ｃ…サーバ装置、３０、５０Ａ、５０Ｂ、５０Ｃ…クライアント装置、２００、３００…制御部、２１０、３１０…通信ＩＦ部、２２０、３２０…記憶部、２２０ａ、３２０ａ…揮発性記憶部、２２０ｂ、３２０ｂ…不揮発性記憶部、２３０、３３０…バス。
【図１】
2006065492.tif 000003
【図２】
2006065492.tif 000004
【図３】
2006065492.tif 000005
【図４】
2006065492.tif 000006
【図５】
2006065492.tif 000007
【図６】
2006065492.tif 000008
【図７】
2006065492.tif 000009
【図８】
2006065492.tif 000010
【図９】
2006065492.tif 000011
【図１０】
2006065492.tif 000012
【図１１】
2006065492.tif 000013
【図１２】
2006065492.tif 000014