(57)【要約】【課題】  ＩＰアドレス偽造による不正アクセスにも耐性を備えた認証方法の提供。【解決手段】  サーバ計算機１とクライアント計算機２とは、互いの間で共有されるサーバ計算機１の複数のポート番号を取り決めておく。クライアント計算機２は、サーバ計算機１とコネクションを張る時、取り決められた複数のポート番号のそれぞれを用いて複数の接続要求パケットを送信する。サーバ計算機１は、これら接続要求パケットを受信し、取り決められた複数のポート番号に対して送られているかを確認し、正しいと判断すると、それらの接続要求パケットの一つに対し接続要求確認パケットを生成し、クライアント計算機２へ送る。【選択図】図６
2005122695.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機の認証方法であって、
前記ネットワークから複数の接続要求パケットを受信し、
該受信した前記複数の接続要求パケットに基づき得られる情報で、前記複数の接続要求パケットを送信した送信元を認証し、
該認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成し、
該生成した接続要求確認パケットをネットワークへ送出するようにしたことを特徴とする認証方法。
【請求項２】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機の認証方法であって、
前記クライアント計算機と共有される暗号鍵を予め格納しておき、
前記ネットワークから複数の接続要求パケットを受信し、
該受信した前記複数の接続要求パケットから取得された認証情報を、格納された前記暗号鍵に基づき得られる情報によって、前記複数の接続要求パケットを送信した送信元を認証し、
該認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成し、
該生成した接続要求確認パケットをネットワークへ送出するようにしたことを特徴とする認証方法。
【請求項３】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機の認証方法であって、
複数の接続要求パケットから得られる情報を予め決定し、これをアクセスパターン情報として格納しておき、
前記ネットワークから複数の接続要求パケットを受信し、
該受信した複数の接続要求パケットが、格納された前記アクセスパターン情報を満たすものである場合に、前記受信した複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成し、
該生成した接続要求確認パケットをネットワークへ送出するようにしたことを特徴とする認証方法。
【請求項４】
前記アクセスパターン情報は、前記サーバ計算機へ接続要求パケットを送るためのそれぞれ異なる前記サーバ計算機のポート番号であることを特徴とする請求項３記載の認証方法。
【請求項５】
前記アクセスパターン情報は、更に、複数の接続要求パケットのそれぞれの到達順を含むことを特徴とする請求項４記載の認証方法。
【請求項６】
前記アクセスパターン情報は、更に、前記複数の接続要求パケットのうち最初の接続要求パケットの到達から最後の接続要求パケットの到達までの有効経過時間を含むことを特徴とする請求項４記載の認証方法。
【請求項７】
前記アクセスパターン情報は、更に、前記複数の接続要求パケットのある接続要求パケットから別の接続要求パケットまでの間の有効到達時間を含むことを特徴とする請求項４記載の認証方法。
【請求項８】
前記アクセスパターン情報は、更に、前記複数の接続要求パケットの各接続要求パケット毎に、パケットの種別を示す情報を含むことを特徴とする請求項４記載の認証方法。
【請求項９】
前記接続要求確認パケットは、前記サーバ計算機と前記クライアント計算機との間で予め定められた一の接続要求パケットを示す情報に基づいて、特定される一の接続要求パケットに対して生成されるようにしたことを特徴とする請求項１乃至８の何れかに記載の認証方法。
【請求項１０】
更に、前記接続要求確認パケットを返信する都度、前記アクセスパターン情報を変更するようにしたことを特徴とする請求項３乃至請求項８の何れかに記載の認証方法。
【請求項１１】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するサーバ計算機の認証方法であって、
予め定めた複数のポート番号を第１テーブルに格納しておき、
前記クライアント計算機から送信された接続要求パケットを受信し、
受信した接続要求パケットが、前記第１テーブルに格納される複数のポート番号の何れかへのアクセスである場合に、前記クライアント計算機を識別する識別情報に対応付けて、アクセスのあったポート番号を第２テーブルへ記憶し、
前記第２テーブルを監視し、前記テーブルに記憶される何れかの識別情報に対応付けて記憶される全てのポート番号が、前記定められた複数のポート番号と一致することを検出したとき、その識別情報を示すクライアント計算機からの一の接続要求パケットに対する応答として接続要求確認パケットを生成し、該クライアント計算機へ送信するようにしたことを特徴とする認証方法。
【請求項１２】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、
前記ネットワークから複数の接続要求パケットを受信する受信手段と、
前記受信手段で受信した前記複数の接続要求パケットに基づき得られる情報で、前記複数の接続要求パケットを送信した送信元を認証する認証手段と、
前記認証手段で、正しいと認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成する生成手段と、
前記生成手段で生成された接続要求確認パケットをネットワークへ送出する送出手段とを備えたことを特徴とするサーバ計算機。
【請求項１３】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、
前記クライアント計算機と共有される暗号鍵を予め格納する格納手段と、
前記ネットワークから複数の接続要求パケットを受信する受信手段と、
前記受信手段で受信した前記複数の接続要求パケットから取得された認証情報を、前記格納手段で格納される前記暗号鍵に基づき得られる情報によって、前記複数の接続要求パケットを送信した送信元を認証する認証手段と、
前記認証手段での認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成する生成手段と、
前記生成手段で生成された接続要求確認パケットをネットワークへ送出する送出手段とを備えたことを特徴とするサーバ計算機。
【請求項１４】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、
複数の接続要求パケットから得られる情報を予め決定し、これをアクセスパターン情報として格納する格納手段と、
前記ネットワークから複数の接続要求パケットを受信する受信手段と、
該受信した複数の接続要求パケットが、格納された前記アクセスパターン情報を満たすかを監視する監視手段と、
前記監視手段に監視した結果、アクセスパターン情報を満たすとした時、前記受信した複数の接続要求パケットの何れか１つに対する応答として接続要求確認パケットを生成する生成手段と、
該生成した接続要求確認パケットをネットワークへ送出する送出手段とを備えたことを特徴とするサーバ計算機。
【請求項１５】
前記アクセスパターン情報は、前記サーバ計算機へ接続要求パケットを送るためのそれぞれ異なる前記サーバ計算機のポート番号であることを特徴とする請求項１０記載のサーバ計算機。
【請求項１６】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、
予め定めた複数のポート番号を格納する格納手段と、
前記ネットワークからの接続要求パケットを受信する受信手段と、
前記受信手段で、受信した接続要求パケットが、前記格納手段に格納される複数のポート番号の何れかへのアクセスである場合に、前記接続要求パケットに基づいてクライアント計算機を特定して、この特定されたクライアント計算機を識別する識別情報に対応付けて、アクセスのあったポート番号を記憶する記憶手段と、
前記記憶手段を監視し、前記識別情報毎に対応付けて記憶される全てのポート番号が、前記格納手段のポート番号の全てと一致することを検出する監視手段と、
前記監視手段によって、一致したことを検出すると、その識別情報を示すクライアント計算機からの前記複数の接続要求パケットの一つに対する応答として接続要求確認パケットを生成する生成手段と、
前記生成手段によって生成された、接続要求確認パケットを前記ネットワークへ送出する送出手段とを備えたことを特徴とするサーバ計算機。
【請求項１７】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で通信を開始する、サーバ計算機で実行されるプログラムであって、
前記ネットワークから複数の接続要求パケットを受信させる第１のコードと、
該受信された前記複数の接続要求パケットに基づき得られる情報で、前記複数の接続要求パケットを送信した送信元を認証させる第２のコードと、
該認証の結果、正しいと認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成させる第３のコードと、
該生成された接続要求確認パケットをネットワークへ送出させる第４のコードとを備え、サーバ計算機に実行させるプログラム。
【請求項１８】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で通信を開始する、サーバ計算機で実行されるプログラムであって、
前記クライアント計算機と共有される暗号鍵を予め格納させる第１のコードと、
前記ネットワークから複数の接続要求パケットを受信させる第２のコードと、
該受信された前記複数の接続要求パケットから取得された認証情報を、前記格納された暗号鍵に基づき得られる情報によって、前記複数の接続要求パケットを送信した送信元を認証させる第３のコードと、
該認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成させる第４のコードと、
前記生成手段で生成された接続要求確認パケットをネットワークへ送出させる第５のコードとを備えた、サーバ計算機で実行されるプログラム。
【請求項１９】
ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で通信を開始する、サーバ計算機で実行されるプログラムであって、
予め定められた複数の接続要求パケットから得られる情報を、アクセスパターン情報として格納させる第１のコードと、
前記ネットワークから複数の接続要求パケットを受信させる第２のコードと、
該受信した複数の接続要求パケットが、格納された前記アクセスパターン情報を満たすものである場合に、前記受信した複数の接続要求パケットの何れか１つに対する応答として接続要求確認パケットを生成させる第３のコードと、
該生成した接続要求確認パケットをネットワークへ送出させる第４のコードとを備え、
サーバ計算機に実行させることを特徴とするプログラム。
【請求項２０】
前記アクセスパターン情報は、前記サーバ計算機へ接続要求パケットを送るためのそれぞれ異なる前記サーバ計算機のポート番号であることを特徴とする請求項１３記載のプログラム。
【請求項２１】
ネットワークを介して接続されるサーバ計算機と通信するための接続要求を行うクライアント装置であって、
予め定めた前記サーバ計算機の第１のポート番号を格納する格納手段と、
前記格納手段に記憶される複数のポート番号の中から、未だ利用していないポート番号を順次読み出して、読み出したポート番号を用いて順次接続要求パケットを生成する生成手段と、
前記生成手段にて生成された前記接続要求パケットを順次送信する送信手段と、
前記送信手段によって送信した前記接続要求パケットの何れか一つに対する接続要求確認パケットを受信する受信手段とを備え、
前記受信手段で受信した前記接続要求確認パケットに含まれるサーバ計算機のポート番号で通信を開始するようにしたことを特徴とするクライアント装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク上のクライアント計算機とサーバ計算機との間で通信を行うための認証方法、サーバ計算機、クライアント計算機、および、プログラムに関する。
【背景技術】
【０００２】
近年、インターネット等を利用し、不特定多数あるいは特定多数のクライアント計算機をパケット交換ネットワーク経由でサーバ計算機に接続し、クライアント計算機からの要求に応じてサーバ計算機からデータを供給することを目的とするクライアントサーバシステムが広く使われている。
【０００３】
ここで、パケットとは、ネットワーク上を流れるひとかたまりのデータをいい、大まかに分けると、ヘッダとデータ本体で構成されている。さらに、ヘッダ内には、始点IP(Internet Protocol)アドレス、終点IPアドレス等から構成されている。このようなTCP/IP(Transmission Control Protocol/IP)プロトコルにおける正当なアクセス要求の一例としては、（１）クライアント計算機はサーバ計算機へ接続要求パケット（SYN(SYNchronize)パケット）を送信し、（２）サーバ計算機はクライアント計算機へ接続要求確認パケット(SYN+ACK(ACKnowledgement)パケット)を送信し、（３）クライアント計算機はサーバ計算機へ確認応答パケット（ACK）パケットを送ることによって、論理的な通信路（コネクション）を確立し、そのコネクション確立(Established)状態で上位アプリケーションでのデータの送受信をおこなう。このアクセス要求を、3 way handshake 方式と呼ぶ。
【０００４】
上述したクライアント計算機とサーバ計算機とからなるクライアントサーバシステムにおいて、サーバ計算機がクライアント計算機に対してサービスを提供する際に、サーバ計算機が接続要求元（クライアント計算機の利用者あるいはクライアント計算機自体を指す）の識別を行い、識別した相手の権限に応じてサービスを提供する場合がある。
【０００５】
このような識別作業（認証）と権限の決定および権限に応じたサービスの提供（以後、識別作業・権限の決定・サービスの提供をまとめてアクセス制御と呼ぶ）は、サーバ計算機がクライアント計算機との通信用リソースを割り当てた後で一般的に次のように行われる場合が多い。
【０００６】
（１）クライアント計算機からの接続要求に従いクライアント計算機とサーバ計算機の間にコネクションが確立され、
（２）サーバ計算機のサーバアプリケーションプログラムがクライアント計算機のクライアントアプリケーションプログラムに対してパスワードなどの認証情報（共通鍵暗号や公開鍵暗号を利用した方式、さらには様々な暗号プロトコルを利用したものもある）の送信を促すデータを送信し、
（３）クライアントアプリケーションはそのデータを受信し、次にそのデータに従って認証情報を取得し、サーバ計算機に送信し（ここで認証情報は利用者の入力もしくはアプリケーションによって自動的に取得される）、
（４）サーバアプリケーションプログラムは取得した認証情報の正当性を検証し、正当と判断された接続要求元に対して権限を決定し、その権限に応じたサービスを提供する。
【０００７】
上述したアプリケーションレベルでのアクセス制御方式を用いることで、不特定多数のクライアントから正当な接続要求元を選別し、その権限に見合ったサービスを提供できる。
【０００８】
しかしながら、上述のアクセス制御方式はコネクションの確立を前提とした方式であるため、コネクションの確立自体を制御することは出来ない。そのため、不正なクライアントがコネクションを大量に確立することでサーバ計算機のコネクション処理用リソースを使い切るタイプのDoS攻撃(Denial of Service attack)及びDDoS攻撃(Distributed Denial of Service attack)を防ぐことはできない。ここで、DoS攻撃とは、正当なクライアントが使用するはずのリソースを、不正なクライアントが使い切る、もしくはリソースを使えない状態にすることで、正当な使用者によるリソース使用を妨げるハッキング行為である。そして、DDoS攻撃は複数のクライアント計算機によって行われるDoS攻撃を指す。
【０００９】
また、上述のアクセス制御はアプリケーションでの処理を前提とした方式であるため、攻撃者によるソフトウェア脆弱性に対する攻撃を防ぐことはできない。ソフトウェア脆弱性に対する攻撃とは、アプリケーションソフトウェアに潜在するバグに対する攻撃であり、攻撃者はバグを利用することで、攻撃対象の計算機の認証処理を迂回したり、その計算機での特権を得たりすることが可能となる。例えば、インターネット越しに計算機の安全な遠隔操作を実現するプロトコルであるSSH（Secure Shell）の認証部分にソフトウェア脆弱性が存在した場合、攻撃者は正当な認証情報の代わりに攻撃コードを送信することでその計算機を利用することが可能となる。
【００１０】
このようなアプリケーションでのアクセス制御だけでは必ずしも防ぎきれない問題はTCP/IPのTCP層、IP層でクライアント計算機に対するアクセス制御を行うことで解決することができ、それによりサーバ計算機のセキュリティをより一層向上させることが可能である。このような方式の従来技術として、サーバ計算機に接続を許可／不許可とする始点IPアドレス、終点ポート番号などを記載したリストを保持させ、受信したパケットに対してその情報に基づいた検査を実施することで接続の可否を決定する方法がある。
【００１１】
この始点IPアドレス、終点ポート番号にもとづいたアクセス制御には次のような問題点がある。
【００１２】
（１）IPアドレス偽造に弱い：一般的にIPアドレスの偽造は容易であり、ポート番号は自由に指定可能である。そのため不正なクライアント計算機が始点IPアドレスを偽造したパケットを送信することで容易に迂回されてしまう。
【００１３】
（２）利用者の識別は不可能：始点IPアドレスによりクライアント計算機を識別することは可能であるが、そのクライアント計算機が複数の利用者によって利用されている場合に、それらの利用者の区別を行うことは出来ない。
【００１４】
（３）動的IPアドレスに対応不可能：IPアドレスによるアクセス制御方式では、予めアクセス制御をおこなうクライアント計算機のIPアドレスを登録しておく必要がある。しかし、モバイル環境やDHCP（Dynamic Host Configuration Protocol）環境では、クライアント計算機のIPアドレスは動的に変化するため、このアクセス制御方式は利用できない。
【００１５】
これらIPアドレス、ポート番号を利用したアクセス制御方式の問題点を解決する従来技術として、ポートアクセスを利用した認証方法がある（例えば、特許文献１参照）。
【００１６】
この方法は、（１）クライアント計算機はサーバ計算機の複数の認証用ポートに対してパケットを送信し、（２）サーバ計算機はクライアント計算機が全ての認証用ポート（具体的なポート番号は秘匿されている）にアクセスしたことの確認を行い、（３）全ての認証用ポートにアクセスされたサーバ計算機は、通信用ポート（具体的なポート番号は公開されている）をオープンし、（４）クライアント計算機はサーバ計算機の通信用ポートにアクセスし通信を行う、ようにする。この方法は、クライアント計算機のサーバ計算機に対するアクセスパターンを接続要求元の識別情報として利用したものであるといえる。
【００１７】
この方法によれば、不正なクライアントは複数の認証用ポートを知らないため、サーバ計算機とコネクションの確立ができない。そのため、従来のIP層、TCP層でのアクセス制御と同様にアプリケーションでの認証方法の問題点を解決できる。そして、アクセスパターン（ここでは認証用ポート番号の組）を利用者と対応付けておくことで、同一のクライアント計算機を利用している利用者の識別も可能となる。また、この方法では、同一IPアドレスからの認証用ポートに対するアクセスを考えればよく、あらかじめ許可／不許可のIPアドレスを定めておく必要はない。
【００１８】
このように、この方法を利用することによってアプリケーションのアクセス制御の問題を解決しつつ、「利用者の識別が不可能」、「動的IPアドレスに対応不可能」という２点に関しては従来のＴＣＰ層、ＩＰ層でのアクセス制御の問題点が解決できた。
【特許文献１】特開２００３−９１５０３公報
【発明の開示】
【発明が解決しようとする課題】
【００１９】
ＴＣＰ層でのアクセスパターンを利用した認証方式により、従来のＴＣＰ層、ＩＰ層でのアクセス制御方式における問題の一部は解決できた。しかしながら、この認証方法ではIPアドレスの偽造による攻撃を完全には防ぐことはできない。この方法では、サーバ計算機はクライアント計算機が全ての認証用ポート（ポート番号は非公開）にアクセスしたことを確認後、通信用ポート（ポート番号は公開）をオープンし、そこへ接続してくるクライアント計算機を正当な接続要求元と判断する。しかし、通信用ポートに接続してきたクライアント計算機と認証用ポートをアクセスしたクライアント計算機が、同一の接続要求元であるか否かの判定を行わないため、例えば、正当な接続要求元が認証用ポートにアクセスし通信用ポートがオープンされたタイミングを見計らって、不正クライアントがオープンされた状態の通信用ポートにアクセスするのを防ぐことは出来ない。このように、従来方法ではIPアドレス偽造を用いることで、認証用ポートを知らない不正クライアントでもコネクションを確立することが可能であるといった問題があった。
【００２０】
本発明は、上記問題点に鑑みなされたものであり、ＩＰアドレス偽造による不正アクセスにも耐性を備えた、認証方法、サーバ計算機、クライアント計算機、および、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２１】
本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機の認証方法であって、前記ネットワークから複数の接続要求パケットを受信し、該受信した前記複数の接続要求パケットに基づき得られる情報で、前記複数の接続要求パケットを送信した送信元を認証し、該認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成し、該生成した接続要求確認パケットをネットワークへ送出するようにした。
【００２２】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機の認証方法であって、前記クライアント計算機と共有される暗号鍵を予め格納しておき、前記ネットワークから複数の接続要求パケットを受信し、該受信した前記複数の接続要求パケットから取得された認証情報を、格納された前記暗号鍵に基づき得られる情報によって、前記複数の接続要求パケットを送信した送信元を認証し、該認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成し、該生成した接続要求確認パケットをネットワークへ送出するようにした。
【００２３】
本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機の認証方法であって、複数の接続要求パケットから得られる情報を予め決定し、これをアクセスパターン情報として格納しておき、前記ネットワークから複数の接続要求パケットを受信し、該受信した複数の接続要求パケットが、格納された前記アクセスパターン情報を満たすものである場合に、前記受信した複数の接続要求パケットの何れか１つに対する応答として接続要求確認パケットを生成し、該生成した接続要求確認パケットをネットワークへ送出するようにした。
【００２４】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するサーバ計算機の認証方法であって、予め定めた複数のポート番号を第１テーブルに格納しておき、前記クライアント計算機から送信された接続要求パケットを受信し、受信した接続要求パケットが、前記第１テーブルに格納される複数のポート番号の何れかへのアクセスである場合に、前記クライアント計算機を識別する識別情報に対応付けて、アクセスのあったポート番号を第２テーブルへ記憶し、前記第２テーブルを監視し、前記テーブルに記憶される何れかの識別情報に対応付けて記憶される全てのポート番号が、前記定められた複数のポート番号と一致することを検出したとき、その識別情報を示すクライアント計算機からの一の接続要求パケットに対する応答として接続要求確認パケットを生成し、該クライアント計算機へ送信するようにした。
【００２５】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、前記ネットワークから複数の接続要求パケットを受信する受信手段と、前記受信手段で受信した前記複数の接続要求パケットに基づき得られる情報で、前記複数の接続要求パケットを送信した送信元を認証する認証手段と、前記認証手段で、正しいと認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成する生成手段と、前記生成手段で生成された接続要求確認パケットをネットワークへ送出する送出手段とを備えた。
【００２６】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、前記クライアント計算機と共有される暗号鍵を予め格納する格納手段と、前記ネットワークから複数の接続要求パケットを受信する受信手段と、前記受信手段で受信した前記複数の接続要求パケットから取得された認証情報を、前記格納手段で格納される前記暗号鍵に基づき得られる情報によって、前記複数の接続要求パケットを送信した送信元を認証する認証手段と、前記認証手段での認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成する生成手段と、前記生成手段で生成された接続要求確認パケットをネットワークへ送出する送出手段とを備えた。
【００２７】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、複数の接続要求パケットから得られる情報を予め決定し、これをアクセスパターン情報として格納する格納手段と、前記ネットワークから複数の接続要求パケットを受信する受信手段と、該受信した複数の接続要求パケットが、格納された前記アクセスパターン情報を満たすかを監視する監視手段と、前記監視手段に監視した結果、アクセスパターン情報を満たすとした時、前記受信した複数の接続要求パケットの何れか１つに対する応答として接続要求確認パケットを生成する生成手段と、該生成した接続要求確認パケットをネットワークへ送出する送出手段とを備えた。
【００２８】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で、通信を開始するようにしたサーバ計算機であって、予め定めた複数のポート番号を格納する格納手段と、前記ネットワークからの接続要求パケットを受信する受信手段と、前記受信手段で、受信した接続要求パケットが、前記格納手段に格納される複数のポート番号の何れかへのアクセスである場合に、前記接続要求パケットに基づいてクライアント計算機を特定して、この特定されたクライアント計算機を識別する識別情報に対応付けて、アクセスのあったポート番号を記憶する記憶手段と、前記記憶手段を監視し、前記識別情報毎に対応付けて記憶される全てのポート番号が、前記格納手段のポート番号の全てと一致することを検出する監視手段と、前記監視手段によって、一致したことを検出すると、その識別情報を示すクライアント計算機からの前記複数の接続要求パケットの一つに対する応答として接続要求確認パケットを生成する生成手段と、前記生成手段によって生成された、接続要求確認パケットを前記ネットワークへ送出する送出手段とを備えた。
【００２９】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で通信を開始する、サーバ計算機で実行されるプログラムであって、前記ネットワークから複数の接続要求パケットを受信させる第１のコードと、該受信された前記複数の接続要求パケットに基づき得られる情報で、前記複数の接続要求パケットを送信した送信元を認証させる第２のコードと、該認証の結果、正しいと認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成させる第３のコードと、該生成された接続要求確認パケットをネットワークへ送出させる第４のコードとを備えた。
【００３０】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で通信を開始する、サーバ計算機で実行されるプログラムであって、前記クライアント計算機と共有される暗号鍵を予め格納させる第１のコードと、前記ネットワークから複数の接続要求パケットを受信させる第２のコードと、該受信された前記複数の接続要求パケットから取得された認証情報を、前記格納された暗号鍵に基づき得られる情報によって、前記複数の接続要求パケットを送信した送信元を認証させる第３のコードと、該認証の結果、正しく認証された場合に、前記複数の接続要求パケットの少なくとも何れか１つに対する応答として接続要求確認パケットを生成させる第４のコードと、前記生成手段で生成された接続要求確認パケットをネットワークへ送出させる第５のコードとを備えた。
【００３１】
また、本発明は、ネットワークを介して接続されるクライアント計算機が正当であることを確認した上で通信を開始する、サーバ計算機で実行されるプログラムであって、予め定められた複数の接続要求パケットから得られる情報を、アクセスパターン情報として格納させる第１のコードと、前記ネットワークから複数の接続要求パケットを受信させる第２のコードと、該受信した複数の接続要求パケットが、格納された前記アクセスパターン情報を満たすものである場合に、前記受信した複数の接続要求パケットの何れか１つに対する応答として接続要求確認パケットを生成させる第３のコードと、該生成した接続要求確認パケットをネットワークへ送出させる第４のコードとを備え、サーバ計算機に実行させるようにした。
【００３２】
また、本発明は、ネットワークを介して接続されるサーバ計算機と通信するための接続要求を行うクライアント装置であって、予め定めた前記サーバ計算機の第１のポート番号を格納する格納手段と、前記格納手段に記憶される複数のポート番号の中から、未だ利用していないポート番号を順次読み出して、読み出したポート番号を用いて順次接続要求パケットを生成する生成手段と、前記生成手段にて生成された前記接続要求パケットを順次送信する送信手段と、前記送信手段によって送信した前記接続要求パケットの何れか一つに対する接続要求確認パケットを受信する受信手段とを備え、前記受信手段で受信した前記接続要求確認パケットに含まれるサーバ計算機のポート番号で通信を開始するようにした。
【発明の効果】
【００３３】
本発明によれば、不正なクライアント計算機では、ＩＰアドレスを偽造した不正な接続要求パケットをサーバ計算機へ送信しても、コネクションを確立するための接続要求確認パケットを得ることができないから、ＩＰアドレスの偽造による攻撃に強く、アプリケーションでのアクセス制御、IPアドレスでのアクセス制御の問題が解決できる認証方法が実現でき、それにより当該サーバ計算機のセキュリティをより一層向上させることができる。
【発明を実施するための最良の形態】
【００３４】
以下、本発明の実施の形態につき図面を参照して説明する。
【００３５】
図１は、本実施の形態が適用される通信システムを示すものであり、サーバ計算機１とクライアント計算機２とは、インターネットなどのオープンなネットワークおよびそれに接続された専用線などを含む各種通信ネットワーク３で接続される。
【００３６】
一般に、サーバ計算機１とクライアント計算機２との間の通信は、ＴＣＰ／ＩＰで行われる。ＴＣＰ／ＩＰは、下位層から上位層へ順にネットワークアクセス層、ネットワーク層、トランスポート層、アプリケーション層に分離される。
【００３７】
ネットワークアクセス層は、OSI(Open Systems Interconnection)参照モデルの物理層、データリンク層を合わせたものに相当し、電気信号や光信号によるデータの送受信と、隣接ノードとの間で情報のフローを調整するために必要な制御を可能とする処理層である。
【００３８】
ネットワーク（インターネット）層は、OSI参照モデルのネットワーク層に相当し、ネットワーク間でのデータのルーティングと通信目的の計算機へのデータ配信に責任を負う処理層である。
【００３９】
トランスポート層は、OSI参照モデルのトランスポート層にほぼ相当し、指定されたアプリケーション層ポートへの配信サービスとデータのエラーチェック機能を提供する処理層である。トランスポート層では、ＴＣＰ(Transmission Control Protocol)とＵＤＰ(User Datagram Protocol)の２つのプロトコルが利用可能である。後述するようにＴＣＰではコネクション型環境を提供し、データの到達性を保証する。それに対して、ＵＤＰはコネクションレス型環境を提供し、データの到達性を保証しない。
【００４０】
アプリケーション層は、OSI参照モデルのアプリケーションに相当し、アプリケーションがデータ送受信を行うための通信処理制御や、アプリケーション固有の処理を行う処理層である。
【００４１】
ネットワーク層より上位層での通信は、ＩＰパケットで行われる。図２に一般的なＩＰパケットの構成を示す、ＩＰパケットは、ＩＰヘッダ部とデータ部とから構成される。
【００４２】
ＩＰヘッダ部は、ＩＰのバージョン（IPv4、IPv6等）を示すバージョン、ＩＰヘッダ部のヘッダ長を示すヘッダ長、通信サービスの品質をルータに指示するためのサービスタイプ、IPパケット全体の長さを示すパケット長、フラグメントを復元する際の識別子である識別子、分割処理を制御するためのフラグ、分割された場合の位置を示すためのフラグメントオフセット、通過できるルータの個数を示す生存時間、上位層のプロトコルを示すプロトコル番号（ＩＣＭＰは1、ＴＣＰは6、ＵＤＰは17）、データが破損していないことを保証するためのヘッダチェックサム、送信元のアドレスを示す始点ＩＰアドレス、送信先のアドレスを示す終点ＩＰアドレス、種々のオプション機能に利用するためのオプション、ＩＰヘッダのヘッダ長が３２ビットの整数倍になるよう調整するパディングの各情報からなる。
【００４３】
データ部は、ＴＣＰ、ＵＤＰ、または、ＩＣＭＰのセグメントが含まれる。
【００４４】
図３は、一般的なＴＣＰセグメントの構成を示している。ＴＣＰセグメントは、ＴＣＰヘッダとデータ部分から構成される。ＴＣＰヘッダは、送信元のポート番号を示す始点ポート番号、送信先のポート番号を示す終点ポート番号、送信したデータの位置を示すシーケンス番号、受信したデータの位置を示す確認応答番号、ＴＣＰが運んでいるデータの開始位置を示すデータオフセット、拡張用の予約ビット、ＴＣＰセグメントの処理方法や種別を示すコントロールフラグ、フロー制御に用いられ、受信可能なデータ長を示すウィンドウサイズ、ＴＣＰのヘッダ、データが損傷していないことを保証するためのチェックサム、緊急に処理すべきデータの位置を示す緊急ポインタ、ＴＣＰによる通信性能の向上に用いるオプション、および、パディングの各情報からなる。
【００４５】
図４は、一般的なＵＤＰセグメントの構成を示している。ＵＤＰセグメントは、ＵＤＰヘッダとデータ部分とから構成される。ＵＤＰヘッダは、送信元のポート番号を示す始点ポート番号、送信先のポート番号を示す終点ポート番号、このＵＤＰセグメントの長さを示すパケット長、ＵＤＰのヘッダ、ＩＰアドレス、プロトコル番号が損傷していないことを保証するためのチェックサム、の各情報からなる。
【００４６】
ＴＣＰは、一般的に１）クライアント計算機がサーバ計算機へ接続要求パケット（SYN(SYNchronize)パケット）を送信し、２）サーバ計算機がクライアント計算機へ接続要求確認パケット(SYN+ACK(ACKnowledgement)パケット)を送信し、３）クライアント計算機がサーバ計算機へ確認応答パケット（ACK）パケットを送る、という手順の3 way handshake方式により機器同士で論理的なポート間で通信路（コネクション）を確立し、その上で上位アプリケーションでのデータの送受信を行う。なお、論理的なポートは、６５５３５番まで利用することが許可されている。
【００４７】
これに対して、ＵＤＰ、ＩＣＭＰは、コネクションレスの通信であるため、このようなコネクション確立の処理は行われず、データの送受信が行われる。
【００４８】
（第1の実施の形態）
以下に、第1の実施の形態を詳細に説明する。
【００４９】
図５は、クライアント計算機２のうち、第1の実施の形態に係る部分の機能ブロックを示したものである。
【００５０】
接続要求パケット生成部２１は、サーバ計算機１への接続要求を行う旨の指示を受けた際に、接続要求パケットを生成するものである。接続要求パケット生成部２１は、コネクション確立テーブル１００を参照し、サーバ計算機１との接続の際に使用する複数の認証用ポートの番号を取得し、順次、各認証用ポート番号毎に接続要求パケットを作成する。
【００５１】
コネクション確立テーブル１００には少なくとも認証用のポート番号を記憶しており、その認証用のポート番号は、クライアント計算機２とサーバ計算機１との間で秘密に共有されている。このポート番号の共有は、暗号プロトコルを用いて確保されたセキュアチャネル（このような既存技術としてはSSL(Secure Socket Layer)などがある）を利用してオンラインで行ったり、郵送などのオフラインで行ったりするなどして第三者に秘匿して共有される。なお、接続要求元は複数のサーバに応じて異なる判定基準の情報を保持していてもよい。
【００５２】
送信部２２は、ＩＰパケットをネットワーク３へ送出するものであり、接続要求パケット生成部２１によって順次生成された各接続要求パケットをネットワーク３へ順次送出する。
【００５３】
受信部２３は、ネットワークからＩＰパケットを受信するものである。この受信したＩＰパケットは、接続要求確認パケット判定部２４へ送られ、このＩＰパケットが、送信部２２より送信した各接続要求パケットの何れかに対して応答された接続要求確認パケットであるか否かを判定する。これにより接続要求確認パケットであると判定された場合には、クライアント計算機２はサーバ計算機１とのコネクションを確立するための処理を行なう。
【００５４】
図６は、サーバ計算機１のうち、第1の実施の形態に係る部分の機能ブロックを示したものである。
【００５５】
受信部１１は、ネットワーク３からの自サーバ計算機２宛てのＩＰパケットを受信するものである。判断部１２は、受信部１１で受信したＩＰパケットが接続要求パケットであるとき、少なくとも認証用のポート番号を複数含むアクセスパターン情報を記憶した判定用テーブル１１０を参照し、正当な接続要求元であるか否かを判断する。これら認証用のポート番号は、先に示したように、クライアント計算機２とサーバ１との間で秘密に共有されたものである。判定用テーブル１１０、クライアント計算機２ごとに、認証用ポートの個数や認証用ポートが個別に定められている場合には、クライアント計算機２ごとにそれぞれエントリを持つようにすればよい。
【００５６】
正当な接続要求元であると判断されたとき、受信管理部１３は、受信した接続要求パケットをパケット記憶部１７に一時格納するとともに、コネクション制御テーブル１２０へ接続要求パケットを送信したクライアント計算機２を識別可能な情報（例えば始点ＩＰアドレス）と終点ポート番号、すなわちクライアント計算機２で指定された自サーバ計算機１で使用したポート番号（＝認証用のポート番号）を含む情報を登録する。このとき、既にコネクション制御テーブル１２０にこのクライアント計算機１の識別可能な情報がある場合には、そのエントリに終点ポート番号を追加すればよく、一方、該情報がない場合には、新たなエントリを作成すればよい。
【００５７】
監視部１４は、コネクション制御テーブル１２０に登録される各エントリが、コネクションの確立の条件が満たされることを監視する。コネクションの確立の条件は、ここでは、判定用テーブル１１０に記憶されるクライアント計算機２のアクセスパターン情報をすべて満たすことである。監視部１４は、コネクションの確立の条件が満たされたとき、接続要求確認パケット生成部１５へその旨通知する。
【００５８】
接続要求確認パケット生成部１５は、コネクションの確立の条件が満たされた旨の通知を受けたとき、パケット記憶部１７に記憶される、応答するクライアント計算機２からの複数の接続要求パケットのうち所定の一つのパケットのみを参照し、応答のための接続要求確認パケットを生成する。また、接続要求確認パケット生成部１５は、接続要求確認パケットの生成後、そのクライアント計算機２からの接続要求パケットの全てをパケット記憶部１７から削除する。
【００５９】
送信部１６は、接続要求確認パケット生成部１５で生成された接続要求確認パケットをネットワーク３へ送出する。なお、この送出された接続要求確認パケットは、先に説明したクライアント計算機２の受信部１３で受信される。
【００６０】
ところで、クライアント計算機２とサーバ計算機１との間で共有する複数の認証用のポート番号は、単独、あるいは他の情報と組み合わせた、様々な認証方法を用いることが可能である。
【００６１】
以下で、各認証方法を例示し、その際の、クライアント計算機２とサーバ計算機１との動作について説明する。
【００６２】
（第１の実施の形態の第1実施例）
まず、複数の認証用のポート番号のみを利用して認証する場合について説明する。
【００６３】
図７は、この際の、コネクション確立テーブル１０１、判定用テーブル１１１、コネクション制御テーブル１２１を示したものである。
【００６４】
コネクション確立テーブル１０１は、認証が必要なサーバ計算機１を識別するためのサーバ名と、それら各サーバ計算機１のそれぞれと認証するために必要な複数のポート番号の組とを対応付けて記憶している。なお、上記で説明したように、それぞれの認証用のポート番号は、クライアント計算機２と各サーバ計算機１との間でそれぞれ秘密に共有されたものである。
【００６５】
判定用テーブル１１１は、クライアント計算機２が、このサーバ計算機１へ接続するための認証用として必要な複数のポート番号の組を記憶したものである。それぞれの認証用のポート番号は、クライアント計算機２とサーバ計算機１との間でそれぞれ秘密に共有されたものである。なお、ここでは、全てのクライアント計算機２に対し共通に、認証用のポート番号の組を用いているが、クライアント計算機２ごとにそれぞれ異なるポート番号の組を決めておき、それらを各クライアント計算機２を識別する識別情報と対応づけて格納するようにしても良い。
【００６６】
コネクション制御テーブル１２１は、現在、サーバ計算機１へコネクションを確立するためにアクセス処理を行っている各クライアント計算機２の進捗状況を示すものであり、クライアント計算機２から正当なポート番号でアクセスを受けるごとに、そのクライアント計算機２を識別するための識別情報に対応付けて、受けたアクセスのポート番号を記憶するものである。
【００６７】
図８は、クライアント計算機２の処理手順を示すフローチャートであり、図９はサーバ計算機１の処理手順を示すフローチャートである。まず、クライアント計算機２の処理手順について説明する。
【００６８】
クライアント計算機２は、サーバ計算機１とコネクションを確立しようとする場合、まず、接続要求パケット生成部２１がコネクション確立テーブル１０１を参照して複数の認証用ポートのいずれか一つに接続要求パケットを生成し、送信部２２によって送信する（ステップC101）。
【００６９】
次に、接続要求パケット生成部２１は、再度コネクション確立テーブル１０１を参照して、まだ接続要求パケットを送信していない認証用ポートに対して接続要求パケットを送信する（ステップC102）。そして、接続要求パケット生成部２０１は、コネクション確立テーブル１０１を参照して全ての認証用ポートに接続要求パケットを送信したか否かを確認する（ステップC103）。
【００７０】
まだ、接続要求パケットを送信していない認証用ポートが存在する場合には、まだ接続要求パケットを送信していない認証用ポートに対して接続要求パケットを送信する（ステップC102）。一方、全ての認証用ポートに接続要求パケットを送信したことを確認すると、サーバ計算機１からの接続要求確認パケットを待ち受ける（ステップC104）。
【００７１】
クライアント計算機２は、サーバ計算機１からの応答があったかを判断し（ステップC105）、応答がない場合には認証に失敗したものとして処理を終了する。サーバ計算機１から複数の接続要求パケットのいずれかに対する接続要求確認パケットを受信した場合には、それに対して応答確認パケットを送信する（ステップC106）。これにより、クライアント計算機とサーバ計算機の間にはコネクションが確立される。
【００７２】
次に、サーバ計算機１の処理手順について説明する。
【００７３】
サーバ計算機１は、受信部１１で接続要求パケットを受け付ける（ステップS101）と、判定用テーブル１１１を参照し、接続要求パケットの終点ポート番号が複数の認証用ポート番号のいずれかであるか否かを判定する（ステップS102）。なお、クライアント計算機２ごとに異なる認証用のポート番号の組を用いる場合には、接続要求パケットの例えば始点ＩＰアドレスに基づいてクライアント計算機２を特定して、判定用テーブル１１１のそのクライアント計算機２のエントリを参照し、判定すれば良い。
【００７４】
もし、接続要求パケットの宛先が認証用のポート番号でない場合、接続要求パケットを破棄し、次の接続要求パケットを待ち受ける（ステップS107）。
【００７５】
接続要求パケットの宛先ポートが認証用ポートの一つであると判断された場合、この接続要求パケットをパケット記憶部１７に一時的に記憶し、コネクション制御テーブル１２１を参照し、接続要求元のエントリの有無を調べる（ステップS103）。ここで、本実施形態では、コネクション制御テーブル１２１において接続要求元を識別するための情報をクライアント計算機のIPアドレスとしているが、MACアドレスやその他の識別子であってよい。つまり、この認証処理の間に接続要求元を識別するために利用可能な情報であれば良い。そして、コネクション制御テーブル１２１に、接続要求元がエントリされていない場合は、接続要求元用のエントリを追加する（ステップS104）。
【００７６】
次に、コネクション制御テーブル１２１の、そのクライアント計算機２のエントリに今回接続要求パケットが送信された認証用のポート番号を記憶する（ステップS105）。
【００７７】
監視部１０４は、コネクション制御テーブル１２１と判定用テーブル１１１とを参照し、全ての認証用のポート番号へ、接続要求パケットが送信されたか、否かを確認する（ステップS106）。
【００７８】
まだ、接続要求パケットが送信されていない認証用のポート番号が存在する場合には、さらに接続要求パケットを待ち受ける（ステップS101）。一方、全ての認証用のポート番号に接続要求パケットが送信されたと判断された場合には、応答パケット生成部１５で、クライアント計算機２からの複数の接続要求パケットのいずれか一つに対して接続要求確認パケットを生成し、送信部１０６によって接続要求確認パケットをネットワーク３へ送出する（S108）。
【００７９】
ここで、複数の接続要求パケットの何れに対し、接続要求確認パケットを返信するかについては、次のような方法が考えられる。
【００８０】
１）最後の接続要求パケットに対して返信する。
【００８１】
２）複数の認証用のポート番号を予め定めておき、これに対し返信する
３）接続要求パケットの到着順位を予め定めておき、その到着順位の接続要求パケットに対し返信する。
【００８２】
以上の何れかの方法を予め定めておけば、ステップS103で接続要求パケットをパケット記憶部１１３で全て記憶することとして説明したが、これを、対象となる一つの接続要求パケットだけを記憶するように変更すれば、パケット記憶部１１３を小さくできる。
【００８３】
また、接続要求確認パケットを返信する方法をクライアント計算機２とあらかじめ共有しておくようにすれば、クライアント計算機２は送信したうちの特定の１つの接続要求パケットに対して接続要求確認パケットを待ち受ければよくなる。それによりクライアント計算機２の処理用リソースが減少するという効果が期待できる。
【００８４】
サーバ計算機１の処理手順の説明に戻る。
【００８５】
ステップS108で、接続要求確認パケットを送出した後、パケット記憶部１７、および、コネクション制御テーブル１１２に記憶される、その接続要求元の接続要求パケット、および、エントリを削除する（ステップS109）。
【００８６】
この後、接続要求元からの応答確認パケットを受信しコネクションを確立することによって、クライアント計算機２とサーバ計算機１との各アプリケーション間で、通信を行うことができる。
【００８７】
この実施形態によれば、認証用ポートを知らない不正クライアントが、認証に成功したクライアント計算機のＩＰアドレスを偽造して接続するという攻撃を防ぐことができる。このことにより従来よりも安全性の向上した認証を行うことが可能となる。
【００８８】
なお、本実施形態では、複数の接続要求パケットに含まれる認証用ポートのポート番号を秘密情報として扱ったが、各ポート番号を秘密情報とせず、ポート番号以外のヘッダのフィールドで通常の通信に問題を引き起こさないフィールドのデータを秘密情報として利用する方法も考えられる。例えば、TCPヘッダのシーケンス番号、確認応答番号、予約ビット、ウィンドウサイズなどその他のフィールドの値を秘密情報として利用すれば良い。
【００８９】
（第１の実施の形態の第2実施例）
次に、複数の認証用のポート番号およびそれらのアクセス順を利用して認証する場合について説明する。
【００９０】
図１０は、この際の、コネクション確立テーブル１０２、判定用テーブル１１２、コネクション制御テーブル１２２、および、受信部１１に接続され、新たに追加した順序設定テーブルを１３２示したものである。
【００９１】
コネクション確立テーブル１０２は、認証が必要なサーバ計算機１を識別するためのサーバ名と、それら各サーバ計算機１のそれぞれと認証するために必要な複数のポート番号の組と、これらポート番号へのアクセス順序とを対応付けて記憶している。なお、上記で説明したように、それぞれの認証用のポート番号は、クライアント計算機２と各サーバ計算機１との間でそれぞれ秘密に共有されたものである。
【００９２】
判定用テーブル１１２は、クライアント計算機２が、このサーバ計算機１へ接続するための認証用として必要な複数のポート番号の組と、これらポート番号へのアクセス順序を記憶したものである。それぞれの認証用のポート番号は、クライアント計算機２とサーバ計算機１との間でそれぞれ秘密に共有されたものである。なお、ここでは、全てのクライアント計算機２に対し共通に、認証用のポート番号の組およびアクセス順序を用いているが、クライアント計算機２ごとにそれぞれ異なるポート番号の組を決めておき、それらを各クライアント計算機２を識別する識別情報と対応づけて格納するようにしても良い。
【００９３】
コネクション制御テーブル１２２は、現在、サーバ計算機１へコネクションを確立するためにアクセス処理を行っている各クライアント計算機２の進捗状況を示すものであり、クライアント計算機２から正当なポート番号およびアクセス順序でアクセスを受けるごとに、そのクライアント計算機２を識別するための識別情報に対応付けて、受けたアクセスのポート番号を追記式で記憶するものである。
【００９４】
順序設定テーブル１３２は、各クライアント計算機２からの何回目の接続要求パケットを受信したかを管理するものであり、各クライアント計算機２から1回目の接続要求パケットを受信した時、各クライアント計算機２を識別する識別情報（例えばＩＰアドレス）と受信回数を示す情報“１”とを対応付けて記録し、2回目以降はこの識別番号に対応する受信回数を示す情報を１ずつインクリメントさせて更新される。
【００９５】
図１１は、クライアント計算機２の処理手順を示すフローチャートであり、図１２はサーバ計算機１の処理手順を示すフローチャートである。まず、クライアント計算機２の処理手順について説明する。
【００９６】
クライアント計算機２がサーバ3にコネクションを確立しようとする場合、まずコネクション確立テーブル１０２を参照して（i=）１番目に規定された認証用ポートに接続要求パケットを送信する（ステップC21、C22）。次に、iの値をインクリメントし、再度コネクション確立テーブル１０２を参照して、(i=)2番目に規定された認証用ポートに対して接続要求パケットを送信する（ステップC23、C24）。そして、コネクション確立テーブル１０２を参照してＮ番目までの全ての認証用ポートに接続要求パケットを送信したかどうか確認する（ステップC25）。
【００９７】
まだ、接続要求パケットを送信していない認証用ポートが存在する場合には、iの値をインクリメントして、i番目の認証用ポートに対して接続要求パケットを送信する（ステップC23、C24）。
【００９８】
一方、全ての認証用ポートに規定の順番で接続要求パケットを送信したことを確認すると、サーバ計算機１からの接続要求確認パケットを待ち受ける（ステップC26）。
【００９９】
サーバ計算機１からの応答があったかを判断し（ステップC27）、応答がない場合には認証に失敗したものとして処理を終了する。
【０１００】
一方、サーバ計算機１から複数の接続要求パケットのいずれかに対する接続要求確認パケットを受信した場合には、それに対して応答確認パケットを送信する（ステップC28）。これにより、クライアントとサーバの間にはコネクションが確立される。
【０１０１】
次に、サーバ計算機１の処理手順について説明する。
【０１０２】
受信部１１は、順序設定テーブルに基づいて、クライアント計算機２からの接続要求パケットの順番を示す変数iに1を設定して（ステップS201）、i番目の接続要求パケットを受け付ける（ステップS202）と、判定用テーブル１１２を参照して接続要求パケットの宛先ポートがi番目の認証用ポートであるかどうか判定する（ステップS203）。
【０１０３】
もし、接続要求パケットの宛先がi番目の認証用ポートでない場合、接続要求パケットを破棄し、次の接続要求パケットを待ち受ける（ステップS204）。接続要求パケットの宛先ポートがi番目の認証用ポートであると判断された場合、コネクション制御テーブル１２２を参照し、接続要求元のエントリの有無を調べる（ステップS205）。コネクション制御テーブル１２２に接続要求元のエントリが存在しない場合は、エントリを追加する（ステップS206）。
【０１０４】
次に、接続要求パケットの順番を示す変数iをインクリメントする(ステップS207)。そして、サーバはコネクション制御テーブル１２２と判定用テーブル１１２をあわせて参照し、接続要求パケットが順番どおりに全ての認証用ポートに送信されているか確認する（ステップS208）。送信されていない場合は、クライアント計算機２からのi番目の接続要求パケットを受け付ける（ステップS202）。
【０１０５】
接続要求パケットが順番どおり全ての認証用ポートで受信できた場合には、クライアント計算機からの複数の接続要求パケットのいずれか一つに対して接続要求確認パケットを送信する（ステップS209）。そして、コネクション制御テーブル１２２に存在する接続要求元のエントリを削除する（ステップS210）。
【０１０６】
この後は、接続要求元からの応答確認パケットを受信しコネクションを確立した上でアプリケーション間での通信を行うことができる。
【０１０７】
この例では、不正アクセスを行うためには認証用ポートのポート番号だけではなく、そのアクセス順番も推測する必要があるため、サーバのセキュリティがより一層向上する。
【０１０８】
（第１の実施の形態の第３実施例）
次に、複数の認証用のポート番号およびそれらをアクセスする際の制限時間を規定して認証する場合について説明する。
【０１０９】
図１３は、この際の、コネクション確立テーブル１０３、判定用テーブル１１３、コネクション制御テーブル１２３を示したものである。
【０１１０】
コネクション確立テーブル１０３は、認証が必要なサーバ計算機１を識別するためのサーバ名と、それら各サーバ計算機１のそれぞれと認証するために必要な複数のポート番号の組と、これらポート番号へアクセス可能な期間とを対応付けて記憶している。このアクセス可能期間とは、クライアント計算機２が最初にサーバ計算機へのアクセスを開始してからの期間を示す。なお、上記で説明したように、それぞれの認証用のポート番号は、クライアント計算機２と各サーバ計算機１との間でそれぞれ秘密に共有されたものである。
【０１１１】
判定用テーブル１１３は、クライアント計算機２が、このサーバ計算機１へ接続するための認証用として必要な複数のポート番号の組と、これらポート番号へのアクセス可能な期間を記憶したものである。それぞれの認証用のポート番号は、クライアント計算機２とサーバ計算機１との間でそれぞれ秘密に共有されたものである。なお、ここでは、全てのクライアント計算機２に対し共通に、認証用のポート番号の組およびアクセス期間を用いているが、クライアント計算機２ごとにそれぞれ異なるポート番号の組、および／またはアクセス期間を決めておき、それらを各クライアント計算機２を識別する識別情報と対応づけて格納するようにしても良い。
【０１１２】
コネクション制御テーブル１２２は、現在、サーバ計算機１へコネクションを確立するためにアクセス処理を行っている各クライアント計算機２の進捗状況を示すものであり、クライアント計算機２から正当なポート番号でアクセスを受けるごとに、そのクライアント計算機２を識別するための識別情報に対応付けて、受けたアクセスのポート番号を記憶するものである。
【０１１３】
図１４は、サーバ計算機１の処理手順を示すフローチャートである。なお、クライアント計算機２の処理手順は図７のフローチャートに従う。クライアント計算機２が、サーバ計算機３にコネクションを確立しようとする場合の処理フローは、図７の説明と同様である。ただし、処理効率の向上の為に、制限時間と比較して接続要求パケット送信に時間がかかった場合などはサーバ計算機１からの接続要求パケットの待ち受け作業を行わずに処理を終了するなどといった変形は考えられる。
【０１１４】
サーバ計算機１は、接続要求パケットを受け付ける（ステップS301）と、判定用テーブル１１３を参照して接続要求パケットに含まれる終点ポート番号が、複数の認証用ポートのいずれかであるかどうか判定する（ステップS302）。もし、接続要求パケットの宛先が認証用ポートでない場合、接続要求パケットを破棄し、コネクション制御テーブルにエントリがあればそれを削除し、次の接続要求パケットを待ち受ける（ステップS303）。
【０１１５】
一方、接続要求パケットに含まれる終点ポート番号が認証用ポートの一つであると判断された場合、コネクション制御テーブル１２３を参照し、接続要求元のエントリの有無を調べる（ステップS304）。コネクション制御テーブル１２３に接続要求元がエントリされていない場合は、接続要求元のエントリ（接続要求元の識別子、ここではクライアント計算機２のIPアドレス）を追加する（ステップS305）。
【０１１６】
次に、クライアント計算機２の認証開始からの時間を計るタイマー（図示しない）を起動する（ステップS306）。
【０１１７】
次に、コネクション制御テーブル１２３の接続要求元のエントリに接続要求パケットが送信された認証用ポートを記憶する（ステップS307）。
【０１１８】
サーバ計算機１は、タイマーの時間が認証処理の制限時間をオーバーしていないことをコネクション制御テーブル１２３と判定用テーブル１１３をあわせて参照することで確認する（ステップS308）。オーバーしていた場合には、接続要求パケットを破棄し、コネクション制御テーブル１２３からこのクライアント計算機２のエントリを削除する（ステップS303）。
【０１１９】
一方、制限時間内であることが確認された場合には、コネクション制御テーブル１２３と判定用テーブル１１３とをあわせて参照し、全ての認証用ポートに接続要求パケットが送信されているか確認する（ステップS309）。まだ、接続要求パケットが送信されていない認証用ポートが存在する場合には、さらに接続要求パケットを待ち受ける（ステップS301）。
【０１２０】
一方、接続要求パケットが全ての認証用ポートに送信された場合には、応答パケット生成部１０５は、クライアント計算機２からの複数の接続要求パケットのいずれか一つに対して接続要求確認パケットを送信する（S310）。そして、コネクション制御テーブル１２３に存在する接続要求元のエントリを削除する（ステップS311）。
【０１２１】
この後は、接続要求元からの応答確認パケットを受信し、コネクションを確立した上でアプリケーション間での通信を行うことができる。
【０１２２】
この例では、認証用ポートへの接続要求パケットの送信を時間内に行う必要があるため、不正クライアントが攻撃を仕掛ける機会が減少し、サーバのセキュリティがより一層向上する。また、サーバ計算機がクライアント計算機の情報を保持する時間も制限できるため、サーバ計算機の処理用リソースの無駄も防ぐことが出来る。
【０１２３】
（第１の実施の形態の第４実施例）
次に、複数の認証用のポート番号へ接続要求パケットを送信する時間間隔を予め定めて認証する場合について説明する。
【０１２４】
図１５は、この際の、コネクション確立テーブル１０４、判定用テーブル１１４、コネクション制御テーブル１２４を示したものである。
【０１２５】
コネクション確立テーブル１０４は、認証が必要なサーバ計算機１を識別するためのサーバ名と、それら各サーバ計算機１のそれぞれと認証するために必要な複数のポート番号の組と、これらポート番号への接続要求パケットを送信する時間間隔とを対応付けて記憶している。この接続要求パケットを送信する時間間隔とは、クライアント計算機２がサーバ計算機１への複数の接続要求パケットを送る、各接続要求パケットの送信し時間間隔を示す。なお、上記で説明したように、それぞれの認証用のポート番号、及び／または時間間隔は、クライアント計算機２と各サーバ計算機１との間でそれぞれ秘密に共有されたものである。
【０１２６】
判定用テーブル１１４は、クライアント計算機２が、このサーバ計算機１へ接続するための認証用として必要な複数のポート番号の組と、これらポート番号への接続要求パケットを送信する時間間隔とを対応付けて記憶している。それぞれの認証用のポート番号及び／または時間間隔は、クライアント計算機２とサーバ計算機１との間でそれぞれ秘密に共有されたものである。なお、ここでは、全てのクライアント計算機２に対し共通に、認証用のポート番号の組、及び／または時間間隔を用いているが、クライアント計算機２ごとにそれぞれ異なるポート番号の組、および／または及び／または時間間隔を決めておき、それらを各クライアント計算機２を識別する識別情報と対応づけて格納するようにしても良い。
【０１２７】
コネクション制御テーブル１２４は、現在、サーバ計算機１へコネクションを確立するためにアクセス処理を行っている各クライアント計算機２の進捗状況を示すものであり、クライアント計算機２から正当なポート番号および時間間隔でアクセスを受けるごとに、そのクライアント計算機２を識別するための識別情報に対応付けて、受けたアクセスのポート番号を記憶するものである。
【０１２８】
図１６はサーバ計算機１の処理手順を示すフローチャートである。
【０１２９】
クライアント計算機２がサーバ計算機１にコネクションを確立しようとする場合、クライアント計算機２は、コネクション確立テーブル１０４を参照して複数の認証用ポートに接続要求パケットを送信するが、i番目の接続要求パケットを送信する際には、コネクション確立テーブルに記載されたi-1番目とi番目を送信する際の規定の時間間隔に従う。
【０１３０】
サーバ計算機１は、タイマーを起動し（ステップS401）、クライアント計算機２からのi番目の接続要求パケットを受け付ける（ステップS402）と、タイマーをストップする（ステップS403）。そして判定用テーブル１１４を参照して接続要求パケットの宛先ポートが複数の認証用ポートのいずれかであるかどうか判定する（ステップS404）。もし、接続要求パケットの宛先が認証用ポートでない場合、接続要求パケットを破棄し（ステップS405）、タイマーを起動させ（ステップS401）、次の接続要求パケットを待ち受ける（ステップS402）。
【０１３１】
i番目の接続要求パケットの終点ポート番号が認証用のポート番号であると判断された場合、コネクション制御テーブル１２４を参照し、接続要求元のエントリの有無を調べる（ステップS406）。コネクション制御テーブル１２４に接続要求元のエントリが存在しない場合は、エントリを追加し（ステップS407）、アクセスポートの記憶処理（ステップS409）に移る。
【０１３２】
一方、コネクション制御テーブル１２４に接続要求元のエントリが存在する場合には、判定用テーブル１１４を参照して、タイマーで測定されたi-1番目とi番目の接続要求パケットの到着間隔が予め規定された時間間隔であるか判定し（S408）、規定どおりの場合はアクセスポートの記憶処理（ステップS409）に移る。規定に反する場合は接続要求パケットを破棄し（ステップS405）、タイマーを起動させ（ステップS401）、次の接続要求パケットを待ち受ける（ステップS402）。
【０１３３】
アクセスポートの記憶処理後、全ての認証用ポートに接続要求パケットが送信されているか確認する（ステップS410）。まだ接続要求パケットが送信されていない認証用ポートが存在する場合には、図示しないタイマーを起動させ（ステップS402）、さらに接続要求パケットを待ち受ける（ステップS402）。
【０１３４】
全ての認証用のポート番号に、接続要求パケットが送信されたと判断された場合には、接続要求元からの複数の接続要求パケットのいずれか一つに対して接続要求確認パケットを送信する（S411）。そして、コネクション制御テーブル１２４に存在する接続要求元のエントリを削除する（ステップS412）。
【０１３５】
この後は、クライアント計算機２からの応答確認パケットを受信しコネクションを確立した上でアプリケーション間での通信を行うことができる。
【０１３６】
また、アクセスの時間間隔のみを認証情報とすることも可能である。すなわち、認証にもちいるポートは特に規定されておらず、ポート番号に関わらず（規定の一つの認証用ポートでも良い）規定のアクセス時間間隔で接続要求パケットを送信する方法である。
【０１３７】
本例では、不正アクセスを行うためには認証用ポートのポート番号だけではなく、そのアクセス時間間隔も推測する必要があるため、サーバ計算機１のセキュリティがより一層向上する。
【０１３８】
以上様々な例を詳細に説明してきたが、この他に、例えば、複数の認証用のポート番号と、これら認証用のポート番号に対する接続要求パケットのパケット種別とで認証を行う方法も考えられる。
【０１３９】
この場合、クライアント計算機２からサーバ計算機１の複数の認証用のポート番号へ送信されるパケットとして、通常の接続要求パケットであるＴＣＰの接続要求パケットの他に、ＩＣＭＰパケット、ＵＤＰパケットが利用可能である。そこで本例では、クライアント計算機２とサーバ計算機１との間では、認証用のポート番号だけではなく、それらポート番号へ送信されるパケット種別も予め定めておき、一方、コネクション確立テーブル１０５および判定用テーブル１１５にはポート番号とそのポート番号で受信するパケットの種別（UDP、TCP、ICMP）とを記憶（ただし、ICMPに関してはポート番号が存在しない。そのため、ICMPであるというパケット種別の判定のみを行うか、取り得る値の範囲は狭いがICMPパケットのtypeフィールドの値を代用する）しておく（図１７参照）。そして、サーバ計算機１は、i番目の到着パケットのパケット種別も判定する。これによって認証を行うものである。
【０１４０】
ただし、ＵＤＰやＩＣＭＰはコネクションレス型のパケットを用いるから、認証が成功した際にサーバ計算機１から送出される接続要求確認パケットは、ＴＣＰの接続要求パケット（SYNパケット）に対して送出するＴＣＰのSYN／ACKパケットである。
【０１４１】
また、上記各例で示した認証情報は、接続要求前に既に固定的に定められたものであるが、これらを、例えば、ワンタイムパスワード技術で都度変更させるようにすることも可能である。こうすることにより、認証情報を再利用した不正クライアントのアクセスを防御できるため、サーバのセキュリティがより一層向上する。
【０１４２】
また、サーバ計算機はクライアント計算機から受信した複数の接続要求パケットの一つに対して接続要求確認パケットを送信する構成を説明したが、サーバ計算機は受信した複数の接続要求パケットの複数個に対して接続要求確認パケットを送信する構成も考えられる。
【０１４３】
（第２の実施の形態）
次に、第２の実施の形態について、詳細に説明する。
【０１４４】
第２の実施の形態は、サーバ計算機１とクライアント計算機２との双方で共有した暗号鍵を利用した暗号処理を行うことでコネクションの確立をおこなう形態である。ここでは、暗号鍵として共通鍵を利用し、暗号処理としては共通鍵を利用したハッシュ関数によるメッセージ認証子生成処理を行う。暗号鍵と暗号処理は、他にも、共通鍵を利用した共通鍵暗号、公開鍵を利用した公開鍵暗号などであってもよく、基本的に、通信相手が暗号鍵を利用することでのみ情報から暗号化情報を導くことができ、その暗号鍵を保持していない主体には暗号化情報を生成・検証できないような暗号鍵および暗号処理であればよい。
【０１４５】
また、暗号鍵として共通鍵を暗号処理として共通鍵暗号を利用した場合には、以下の実施の形態におけるメッセージ認証子作成部分で暗号化・復号化の処理を行えばよく、公開鍵暗号を利用した暗号化処理の場合は、クライアント計算機２は自身の秘密鍵を利用して電子署名を生成してメッセージ認証子の代わりとすればよく、サーバ計算機１は接続要求パケットを認証する際にメッセージ認証子の代わりに電子署名をクライアント計算機２の公開鍵を用いて認証するとすればよい。
【０１４６】
図１８は、クライアント計算機２のうち、第２の実施の形態に係る部分の機能ブロックを示したものである。
【０１４７】
接続要求パケット生成部２１０は、サーバ計算機１への接続要求を行う旨の指示を受けた際に、接続要求パケットを生成するものである。接続要求パケット生成部２１０は、コネクション確立テーブル１０００を参照し、サーバ計算機１との接続の際に使用する共通鍵を取得する。ここで、この共通鍵は、クライアント計算機２とサーバ計算機１との間で秘密に共有されている。この共通鍵の共有は、暗号プロトコルを用いて確保されたセキュアチャネル（このような既存技術としてはSSL(Secure Socket Layer)などがある）を利用してオンラインで行ったり、郵送などのオフラインで行ったりするなどして第三者に秘匿して共有される。なお、接続要求元は複数のサーバに応じて異なる共通鍵を保持していてもよい。
【０１４８】
接続要求パケット生成部２１０は、ランダムに発生させたデータrndに対して共通鍵を用いて所定のハッシュ関数によってメッセージ認証子Aを作成し、データrndとメッセージ認証子Aとを認証情報とする。そして、この認証情報を接続要求パケットのシーケンス番号フィールドに格納可能なサイズに調整するために、一つの接続要求パケットで送信できるサイズに分割し(以降、分割された認証情報を分割認証情報と呼ぶ)、更に、分割認証情報を復元するための復元情報を付加する。
【０１４９】
次に、分割認証情報及び復元情報を全て格納できる個数の接続要求パケットを作成し、分割認証情報及び復元情報をシーケンス番号フィールドに格納してサーバ計算機１へ送信する。この例では、分割認証情報及び復元情報をシーケンス番号フィールドに格納したが、シーケンス番号以外のヘッダのフィールドで通常の通信に問題を引き起こさないフィールドにデータを格納しても良い。また、送信される複数の接続要求パケットが同一の認証セッションに属することを識別するために、それらの接続要求パケットの共通な値をもつフィールド値（例えば、始点IPアドレス）を利用したり、接続要求パケットの特定のフィールド値（始点ポート番号、ウィンドウサイズ、など）に共通の値を設定したり、認証情報を格納するフィールドの一部を利用したりする。より大きなサイズの情報を利用することで、認証セッションを識別する際に精度を上げることができる。 
送信部２２０は、ＩＰパケットをネットワーク３へ送出するものであり、接続要求パケット生成部２１０によって生成された各接続要求パケットをネットワーク３へ順次送出する。
【０１５０】
受信部２３０は、ネットワークからＩＰパケットを受信するものである。この受信したＩＰパケットは、接続要求確認パケット判定部２４０へ送られ、このＩＰパケットが、送信部２２０より送信した各接続要求パケットの何れかに対して応答された接続要求確認パケットであるか否かを判定する。これにより接続要求確認パケットであると判定された場合には、クライアント計算機２はサーバ計算機１とのコネクションを確立するための処理を行なう。
【０１５１】
図１９は、サーバ計算機１のうち、本実施の形態に係る部分の機能ブロックを示したものである。
【０１５２】
受信部３１０は、ネットワーク３からの自サーバ計算機２宛てのＩＰパケットを受信するものである。判断部３２０は、受信部３１０で受信したＩＰパケットが接続要求パケットであるかの判断を行い、そうである場合のみパケットを受信管理部３３０へ送る。
【０１５３】
受信管理部３３０は、受信した接続要求パケットをパケット記憶部３７０へ一時的に格納すると共に、次の（１）から（３）の情報をコネクション制御テーブル１２００へ格納する。
【０１５４】
（１）接続要求パケットを送信した接続要求元の認証セッションを識別可能な情報（以下、認証セッション識別情報とよぶ。具体例としては始点ＩＰアドレス、始点ポート番号、ウィンドウサイズ、MACアドレスなどのフィールド値またはそれらの組など。この認証処理の間に接続要求元を識別するために利用可能な情報であれば良い。）
（２）接続要求パケットにそれぞれ格納された分割認証情報及び復元情報
（３）パケット記憶部におけるそれぞれの接続要求パケットの識別情報（以下、パケット識別情報）
コネクション制御テーブル１２００に、このクライアント計算機１からの認証セッション識別情報をもつエントリが既にある場合には、取得した認証情報をそのエントリに追加すればよい。一方、該識別情報がない場合には、新たなエントリを作成すればよい。
【０１５５】
監視部３４０は、コネクション制御テーブル１２００に登録される各エントリ（認証セッション識別情報で区別される）が保持する分割認証情報及び復元情報が、認証情報を復元できる個数に達していないか監視する。復元可能な個数の接続要求パケットに達したものがある場合には、鍵テーブル１３００から共通鍵を取得し、コネクション制御テーブル１２００に記載された情報をもとにして認証処理を行う。具体的には、分割認証情報を復元情報に基づいて認証情報に復元し、クライアント計算機２がランダムに生成し接続要求パケットに格納して送信してきたデータrndと鍵テーブル１３００から取得した共通鍵とからクライアント計算機２と同様な所定のハッシュ関数を用いた方法でメッセージ認証子Ｂを生成し、作成されたメッセージ認証子Bとクライアント計算機２から送信された接続要求パケットに含まれていたメッセージ認証子Ａと等しいかを確認する。
【０１５６】
等しいことが確認された場合、監視部３４０は、接続要求確認パケット生成部３５０へその旨通知する。等しくない場合には、その認証セッションに含まれる接続要求パケットのパケット識別子をコネクション制御テーブル１２００を参照して決定し、それら接続要求パケットの全てをパケット記憶部３７０から削除し、さらに、コネクション制御テーブル１２００の当該エントリも削除する。
【０１５７】
接続要求確認パケット生成部３５０は、メッセージ認証子Aとメッセージ認証子Bとが等しいことが確認された旨を通知された際に、その認証セッションを構成している接続要求パケットから返答を行うパケットを少なくとも一つ以上決定し、コネクション制御テーブル１２００から取得したパケット識別情報をもとにパケット記憶部３７０を参照して、当該接続要求パケットのデータを参照の上で応答のための接続要求確認パケットを生成する。また、接続要求確認パケット生成部３５０は、接続要求確認パケットの生成後、その認証セッションの接続要求パケットの全てをパケット記憶部３７０から削除し、さらに、コネクション制御テーブル１２００の当該エントリも削除する。
【０１５８】
送信部３６０は、接続要求確認パケット生成部３５０で生成された接続要求確認パケットをネットワーク３へ送出する。なお、この送出された接続要求確認パケットは、先に説明したクライアント計算機２の受信部２３０で受信される。
【０１５９】
ところで、第２の実施の形態においても、クライアント計算機２とサーバ計算機１との間でやりとりされる認証情報によっては様々な認証方法を用いることが可能である。
【０１６０】
以下で、２つの認証方法を例示し、その際の、クライアント計算機２とサーバ計算機１との動作について説明する。
【０１６１】
（第２の実施の形態の第１実施例）
図２０は、第２の実施の形態の第１実施例のコネクション確立テーブル１０６０、コネクション制御テーブル１２６０、鍵テーブル１３６０を示したものである。
【０１６２】
コネクション確立テーブル１０６０には、認証が必要なサーバ計算機１を識別するためのサーバ名と、それら各サーバ計算機１のそれぞれのサービスと認証するために予め共有した共通鍵とを対応付けて記憶している。なお、上記で説明したように、それぞれの共通鍵は、クライアント計算機２と各サーバ計算機１との間でそれぞれ秘密に共有されたものである。
【０１６３】
コネクション制御テーブル１２６０には、クライアント計算機２からの接続要求パケットの認証処理に必要な情報が格納されている。認証セッション識別子、パケット識別子、分割認証情報である。本実施例では、認証セッション識別子としてIPアドレスと始点ポート番号を用いており、また、分割認証情報はシーケンス番号フィールドの値である。
【０１６４】
鍵テーブル１３６０には、クライアント計算機２からの接続要求パケットに含まれる認証情報を検証するための共通鍵が記載されている。なお、ここでは全てのクライアントに対して共通の共通鍵を利用するとしているが、接続要求元に応じた共通鍵を利用するとしてもよい。この場合、接続要求元が送信する認証情報の一部として鍵番号も格納しておき、サーバが利用する共通鍵を判断すればよい。
【０１６５】
図２１は、クライアント計算機２の処理手順を示すフローチャートであり、図２２はサーバ計算機１の処理手順を示すフローチャートである。まず、クライアント計算機２の処理手順について説明する。
【０１６６】
クライアント計算機２がサーバ計算機１とコネクションを確立しようとする場合、接続要求パケット生成部２１０は、コネクション確立テーブル１０６０を参照し、サーバ計算機１との接続の際に使用する共通鍵を取得する（ステップC501）。そして、サーバ計算機１宛ての通常のSYNパケットを生成する（ステップC502）。
【０１６７】
次に、接続要求パケット生成部２１０は、生成されたSYNパケットのシーケンス番号フィールドの値SQに対して共通鍵を用いたハッシュ関数を適用してメッセージ認証子Ａを生成する（ステップC503）。なお、サーバ計算機１が接続要求元に応じて共通鍵を使い分けている場合には、利用した共通鍵を識別するための鍵番号をコネクション確立テーブル１０６０に含めておき、この情報も併せてメッセージ認証子Ａを生成すれば、鍵番号の正当性も保証できる。ここで一般に接続要求パケット生成部で生成される接続要求パケットのシーケンス番号の値は乱数であることから、その値を入力としてメッセージ認証子を作成している。
【０１６８】
次に、SQを接続要求パケットのシーケンス番号フィールドに格納する（以後、この接続要求パケットをSYN0とよぶ）。次に、メッセージ認証子Ａを分割する（C504）。この際、分割したメッセージ認証子Ａを復元するための順序情報をつけたものがシーケンス番号フィールドに格納できるような大きさにメッセージ認証子Ａを分割する。そして、分割したメッセージ認証子Ａに順序情報を付加した複数のデータが格納できる個数分のサーバ計算機１をあて先とするSYNパケットを生成し、シーケンス番号フィールドにその情報を格納して、それらの接続要求パケットを全て送信する（ステップC505）。なお、サーバ計算機１が鍵番号により接続要求元を識別している場合には、鍵番号を認証情報の一部として送信してもよい。なお、順序情報は通信路中や送受信キューにおける接続要求パケットの順番の入れ替わりに対処するために必要であり、その決定方法は、認証情報全体の大きさやその中のメッセージ認証子Ａの大きさによって変化する。分割方法・格納方法は、サーバ計算機１とクライアント計算機２との間で予め共有されていて、それによって受信した接続要求パケットのシーケンス番号フィールドに格納された分割認証情報から認証情報を復元できればどのような方法でもよい。
【０１６９】
以上の処理を経て、クライアント計算機２は、サーバ計算機１からの接続要求確認パケットを待ち受ける（ステップC506）。クライアント計算機２は、サーバ計算機１からの応答があったかを判断し（ステップC507）、所定時間応答がない場合には認証に失敗したものとして処理を終了する。クライアント計算機２は、サーバ計算機１から複数の接続要求パケットのいずれかに対する接続要求確認パケットを受信した場合には、それに対して確認応答パケットを送信する（ステップC508）。これにより、クライアント計算機２とサーバ計算機１の間にはコネクションが確立される。
【０１７０】
次に、サーバ計算機１の処理手順について説明する。
【０１７１】
サーバ計算機１は、接続要求パケットを受信する（S501）。この接続要求パケットの受信は、受信部３１０で受信したネットワーク３からの自サーバ計算機２宛てのＩＰパケットを判断部３２０で接続要求パケットであることを確認することによって実現できる。
【０１７２】
サーバ計算機１の受信管理部３３０は、受信した接続要求パケットをパケット記憶部３７０へ一時記憶すると共に、この接続要求パケットの識別情報（パケット識別情報）、接続要求パケットに格納された始点IPアドレスと始点ポート番号の組（認証セッション識別情報）、シーケンス番号フィールド値（分割認証情報）、の３つの情報を取得する(S502)。ここでは、コネクション制御テーブル１２６０において接続要求元を識別するための認証セッション識別情報をクライアント計算機２の始点IPアドレスと始点ポート番号の組としているが、MACアドレスやその他の識別子であってよい。つまり、この認証処理の間に接続要求元を識別するために利用可能な情報であれば良い。
【０１７３】
次に、受信管理部３３０は、取得した認証セッション識別情報をもとにコネクション制御テーブル１２６０を参照し、該認証セッション識別情報をもつエントリの有無を確認する(S503)。すでにエントリがある場合には、パケット識別情報、認証情報をそのエントリ内に追加記録し(S504)、エントリが存在しない場合には、新たなエントリを設け、認証セッション識別情報、パケット識別情報、認証情報をコネクション制御テーブル１２６０に記録する(S505)。
【０１７４】
監視部３４０は、コネクション制御テーブル１２６０を参照し、認証情報の復元に必要な個数の接続要求パケットを受信したか、否かを確認する（S506）。まだ必要な分だけの接続要求パケットを受信できていない場合には、S501へ戻り次の接続要求パケットを待ち受ける。一方、認証情報の復元に必要な個数（＝全て）の接続要求パケットを受信したと判断した場合には、まず、受信した分割認証情報をコネクション制御テーブル１２６０から取得して復元する(S507)。次に、共通鍵を鍵テーブル１３６０から取得する（S508）。ここで、接続要求元に応じて利用される共通鍵が異なるような構成の場合には、再構成した認証情報に含まれる鍵番号を取得して、その鍵番号をもとに鍵テーブルから利用する鍵を取得すればよい。
【０１７５】
次に、サーバ計算機１は、復元した認証情報から、SYN0に含まれるシーケンス番号値SQを取り出し、共通鍵を利用したメッセージ認証子Ｂを生成し、その値と認証情報に含まれるメッセージ認証子Ａとを比較することで認証を行う(S509)。ここで、認証情報として鍵番号も含まれており、接続要求元でのメッセージ認証子作成時に引数となる情報として含まれていた場合には、鍵番号も取得し、メッセージ認証子作成用のハッシュ関数の引数に追加する。認証が失敗した場合、その認証セッションに属する全ての接続要求パケットをパケット記憶部３７０から削除し、また、コネクション制御テーブル１２６０からそのエントリを削除する(S510)。そして、S501へ戻り、次の接続要求パケットを受ける。認証が成功した場合、接続要求確認パケット生成部３５０にその旨を通知する。
【０１７６】
接続要求確認パケット生成部３５０は、認証作業が成功した旨の通知を受けると、その認証セッションを構成している接続要求パケットのうち、返答を行うパケットを少なくとも一つ以上決定する(S511)。
【０１７７】
コネクション制御テーブル１２６０から取得したパケット識別情報をもとにパケット記憶部３７０を参照し、応答のための接続要求確認パケット（応答パケット）を生成する(S512)。その後、接続要求確認パケット生成部３５０は、その認証セッションの接続要求パケットの全てをパケット記憶部３７０から削除し、さらに、その認証セッションのエントリをコネクション制御テーブル１２６０から削除する(S513)。なお、複数の接続要求パケットの何れに対し、接続要求確認パケットを返信するかについては、次のような方法が考えられる。
【０１７８】
１）最後に受信した接続要求パケットに対して返信する。
【０１７９】
２）予め定めた到着番号の接続要求パケットに対し返信する。
【０１８０】
３）認証情報のうち特定の情報を格納している接続要求パケットに対し返信する。
【０１８１】
以上のように何れかの方法を予め定めておけば、返答の必要がない接続要求パケットをパケット記憶部から削除する、または、保持しない、ことでパケット記憶部３７０の容量を小さくできる。また、このようにすることで、クライアント計算機２は、送信したうちの特定の接続要求パケットに対する接続要求確認パケットを待ち受ければよくなる。それによりクライアント計算機２の処理用リソースが減少するという効果が期待できる。
【０１８２】
そして、送信部３６０を利用して接続要求確認パケット生成部３５０で生成された接続要求確認パケットをネットワーク３へ送出する(S514)。なお、この送出された接続要求確認パケットは、先に説明したクライアント計算機２の受信部２３０で受信される。
【０１８３】
この後、サーバ計算機１は、接続要求元からの応答確認パケットを受信し、コネクションを確立することによって、クライアント計算機２とサーバ計算機１との各アプリケーション間で、通信を行うことができる。
【０１８４】
この実施例によれば、共通鍵を知らない不正クライアントが、認証に成功したクライアント計算機のＩＰアドレスを偽造して接続するという攻撃を防ぐことができる。このことにより従来よりも安全性の向上した認証を行うことが可能となる。
【０１８５】
（第２の実施の形態の第２実施例）
接続要求元が送信する認証情報として時刻情報も含めておき、その時刻情報もハッシュ関数の引数としてメッセージ認証子を作成する場合について説明する。
【０１８６】
図２３は、この際のコネクション制御テーブル１２７０、及び、監視部３４０に新たに接続されたリプレイ防止テーブル１４７０を示したものである。
【０１８７】
コネクション制御テーブル１２７０には、コネクション制御テーブル１２６０の内容に加えて、受信管理部３３０に接続され時刻情報を提示する（図示しない）時刻提供部から取得された認証セッション開始時刻が記載されている。
【０１８８】
リプレイ防止テーブル１４７０には、インデックスと接続要求パケットに含まれる時刻情報TCとが対応して記録されている。ここで、サーバ計算機１の処理用リソースを少なくする場合は、時刻情報は適切な精度の情報のみ記録すればよい。なお、ここでインデックスは、メッセージ認証子Ａで参照されるため、最大値はメッセージ認証子Ａを格納するシーケンス番号の最大値である。また、サーバ計算機１が利用するメモリを少なくするためには、ハッシュテーブルの利用といった一般的なメモリ節約方法を利用すればよい。
【０１８９】
本実施例でクライアント計算機２がサーバ計算機１とコネクションを確立しようとする場合、実施例１での接続要求パケット生成処理において次のような処理も行う。この場合、接続要求パケット生成部２１０に新しく接続され時刻情報を提示する（図示しない）時刻提供部から取得した時刻情報TCも認証情報とする。クライアント計算機２は、メッセージ認証子Ａの生成作業において、TCもハッシュ関数への引数に追加するとともに、時刻情報TCも認証情報として送信する。なお、サーバ計算機１の時刻提供部とクライアント計算機の時刻提供部は、あらかじめ定められた許容時間以上のずれが生じないように時刻同期サーバなどの手段をもちいて同期されているとする。
【０１９０】
本実施例では、サーバ計算機１は接続要求パケットの検査処理において実施例１での処理に加えて次のような処理も行う。まず、時刻提供部から取得した現在時刻をコネクション制御テーブル１２７０に記載された認証セッション開始時刻と比較して、それが時刻のずれの許容範囲を超えるものでないことを確認する。そして、リプレイ防止テーブル１４７０をメッセージ認証子Ａの値をキーとして確認し、その時刻情報の値とTCが同一でないことを確認する。この処理によりリプレイでないことが確認され、接続要求パケットに格納された時刻情報TCによりリプレイ防止テーブルの時刻情報の値を上書きする。これらの確認が成功した場合、接続要求確認パケット生成部３５０にその旨を通知する。なお、ここでメッセージ認証子Ａは比較的長い乱数周期をもち、許容時間内において同一値が算出されることはないと仮定している。
【０１９１】
この実施例によれば、クライアント計算機２からサーバ計算機１へ送信された接続要求パケットを盗聴し、その情報を再度送信することによって接続を試みる攻撃を防御することができ安全性がさらに向上する。
【０１９２】
以上、詳細に説明してきた本実施の形態によれば、この実施例によれば、共通鍵を知らない不正クライアントが、認証に成功したクライアント計算機のＩＰアドレスを偽造して接続するという攻撃を防ぐことができる。このことにより従来よりも安全性の向上した認証を行うことが可能となる。
【０１９３】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【図面の簡単な説明】
【０１９４】
【図１】本発明の各実施の形態が適用される通信システムを示す図。
【図２】ＩＰパケットを示す図。
【図３】ＴＣＰセグメントを示す図。
【図４】ＵＤＰセグメントを示す図。
【図５】第１の実施の形態のクライアント計算機２のうち、本実施の形態に係る部分の機能ブロックを示した図。
【図６】第１の実施の形態のサーバ計算機１のうち、本実施の形態に係る部分の機能ブロックを示した図。
【図７】第１の実施の形態の第１実施例のコネクション確立テーブル１０１、判定用テーブル１１１、コネクション制御テーブル１２１を示した図。
【図８】第１の実施の形態の第1実施例のクライアント計算機２の処理手順を示すフローチャート。
【図９】第１の実施の形態の第1実施例のサーバ計算機3の処理手順を示すフローチャート。
【図１０】第１の実施の形態の第２実施例のコネクション確立テーブル１０２、判定用テーブル１１２、コネクション制御テーブル１２２、順序設定テーブル１３２を示した図。
【図１１】第１の実施の形態の第２実施例のクライアント計算機２の処理手順を示すフローチャート。
【図１２】第１の実施の形態の第２実施例のサーバ計算機3の処理手順を示すフローチャート。
【図１３】第１の実施の形態の第３実施例のコネクション確立テーブル１０３、判定用テーブル１１３、コネクション制御テーブル１２３を示した図。
【図１４】第１の実施の形態の第３実施例のサーバ計算機3の処理手順を示すフローチャート。
【図１５】第１の実施の形態の第４実施例のコネクション確立テーブル１０４、判定用テーブル１１４、コネクション制御テーブル１２４を示した図。
【図１６】第１の実施の形態の第４実施例のサーバ計算機１の処理手順を示すフローチャート。
【図１７】第１の実施の形態のその他の１例のコネクション確立テーブル１０５、判定用テーブル１１５、コネクション制御テーブル１２５を示した図。
【図１８】第２の実施の形態のクライアント計算機２のうち、本実施の形態に係る部分の機能ブロックを示した図。
【図１９】第２の実施の形態のサーバ計算機１のうち、本実施の形態に係る部分の機能ブロックを示した図。
【図２０】第２の実施の形態の第１実施例のコネクション確立テーブル１０００、鍵テーブル１３００、コネクション制御テーブル１２００を示した図。
【図２１】第２の実施の形態の第1実施例のクライアント計算機２の処理手順を示すフローチャート。
【図２２】第２の実施の形態の第1実施例のサーバ計算機3の処理手順を示すフローチャート。
【図２３】第２の実施の形態の第２実施例のコネクション確立テーブル１２７０、リプレイ防止テーブル１４７０を示した図。
【符号の説明】
【０１９５】
１…サーバ計算機
２…クライアント計算機
３…ネットワーク
１１、２３、２３０、３１０…受信部
１２、３２０…判断部
１３、３３０…受信管理部
１４、３４０…監視部
１５、３５０…接続要求確認パケット生成部
１６、２２、２２０、３６０…送信部
１７、３７０…パケット記憶部
１００〜１０５、１０００、１０６０…コネクション確立テーブル
１１０〜１１５…判定用テーブル
１２０〜１２５、１２００、１２６０…コネクション制御テーブル
１３２…順序設定テーブル
１３００、１３６０…鍵テーブル
１４７０…リプレイ防止テーブル
【図１】
2005122695.tif 000003
【図２】
2005122695.tif 000004
【図３】
2005122695.tif 000005
【図４】
2005122695.tif 000006
【図５】
2005122695.tif 000007
【図６】
2005122695.tif 000008
【図７】
2005122695.tif 000009
【図８】
2005122695.tif 000010
【図９】
2005122695.tif 000011
【図１０】
2005122695.tif 000012
【図１１】
2005122695.tif 000013
【図１２】
2005122695.tif 000014
【図１３】
2005122695.tif 000015
【図１４】
2005122695.tif 000016
【図１５】
2005122695.tif 000017
【図１６】
2005122695.tif 000018
【図１７】
2005122695.tif 000019
【図１８】
2005122695.tif 000020
【図１９】
2005122695.tif 000021
【図２０】
2005122695.tif 000022
【図２１】
2005122695.tif 000023
【図２２】
2005122695.tif 000024
【図２３】
2005122695.tif 000025