(57)【要約】  クライアントアプリケーションＡ１からサーバアプリケーションＢ１に送信されるデータで、ＰＣ１の中間ドライバＡ１１内のフレーム解析手段において暗号化が必要と判断されたデータは、ＴＣＰＡ１４とＴＣＰ  Ａ２との間のＴＣＰセッション１と、ＴＣＰ  Ａ１７とＴＣＰ  Ｂ３との間のＴＣＰセッション２と、の合計２つのＴＣＰセッションで中継転送する。このように、TCPセッションを中継することにより、中間ドライバＡ１１内のSSL A16と、サーバ２内のSSL B2と、のＴＣＰ／ＩＰプロトコル階層を一致させることができ、これにより、両者の間でSSLセッションの開始に必要な証明書情報や暗号化アルゴリズムなどを自動的に交換できる。この結果、サーバの設定を変更したり、ソフトウェアをインストールしたりすることなく、ＰＣから送出される機密データを暗号化することができる【特許請求の範囲】
【請求項１】
送信側と受信側とで構成される通信システムであって、
送信側からのセッション確立要求に応答して前記送信側と第1のセッションを確立する第1のセッション確立手段と、
暗号化された送信データを送受信するために前記受信側と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化手段と
を有することを特徴とする通信システム。
【請求項２】
前記第１のセッション確立手段又は前記第２のセッション確立手段は、トランスポート層とセッションを確立する手段であることを特徴とする請求項１に記載の通信システム。
【請求項３】
送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする請求項１に記載の通信システム。
【請求項４】
前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段であることを特徴とする請求項３に記載の通信システム。
【請求項５】
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記受信側のトランスポート層とセッションを確立するよう命令する手段であることを特徴とする請求項１に記載の通信システム。
【請求項６】
中継装置を介して送信側と受信側との間で前記送信データが送受信される場合、
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記中継装置のトランスポート層と第２のセッションを確立するよう命令する手段であることを特徴とする請求項１に記載の通信システム。
【請求項７】
前記第１のセッション確立手段、前記第２のセッション確立手段、前記暗号化手段、及び前記判別手段は、ネットワーク層とデータリンク層との間に構成されていることを特徴とする請求項１に記載の通信システム。
【請求項８】
前記第２のセッション確立手段及び前記暗号化手段は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍが有することを特徴とする請求項１に記載の通信システム。
【請求項９】
前記Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍは、前記第１のセッション確立手段を更に有することを特徴とする請求項８に記載の通信システム。
【請求項１０】
通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする請求項１に記載の通信システム。
【請求項１１】
前記制御手段が通信テストを行うタイミングは、
前記送信側が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項１０に記載の通信システム。
【請求項１２】
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項１０に記載の通信システム。
【請求項１３】
前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする請求項１に記載の通信システム。
【請求項１４】
前記復号化手段は、前記第２のセッション確立手段が確立した第２のセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする請求項１３に記載の通信システム。
【請求項１５】
前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段であることを特徴とする請求項１３に記載の通信システム。
【請求項１６】
中継装置を介して送信側と受信側とで通信する通信システムであって、
前記送信側と前記受信側とで通信するためのセッションを確立する通信確立手段と、
前記送信側と前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立手段と、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化手段と
を有することを特徴とする通信システム。
【請求項１７】
送信側と受信側とで構成される通信システムであって、
送信側からのセッション確立要求に応答して前期送信側と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを前記受信側と送受信するための第２のセッションを確立する第２のセッション確立手段と
を有することを特徴とする通信システム。
【請求項１８】
通信装置であって、
セッション確立要求に応答する応答して第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化手段と
を有することを特徴とする通信装置。
【請求項１９】
前記第１のセッション確立手段又は前記第２のセッション確立手段は、トランスポート層とセッションを確立する手段であることを特徴とする請求項１８に記載の通信装置。
【請求項２０】
送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする請求項１８に記載の通信装置。
【請求項２１】
前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段であることを特徴とする請求項２０に記載の通信装置。
【請求項２２】
前記第１のセッション確立手段は、自装置のトランスポート層からのセッション確立要求に応答して第１のセッションを確立し、前記第２のセッション確立手段に送信先のトランスポート層と第２のセッションを確立するよう命令する手段であることを特徴とする請求項１８に記載の通信装置。
【請求項２３】
中継装置を介して前記送信データが送信される場合、
前記第１のセッション確立手段は、自装置のトランスポート層からのセッション確立要求に応答して第１のセッションを確立し、前記第２のセッション確立手段に前記中継装置のトランスポート層と第２のセッションを確立するよう命令する手段であることを特徴とする請求項１８に記載の通信装置。
【請求項２４】
前記第１のセッション確立手段、前記第２のセッション確立手段、前記暗号化手段、及び前記判別手段は、ネットワーク層とデータリンク層との間に構成されていることを特徴とする請求項１８に記載の通信装置。
【請求項２５】
前記第２のセッション確立手段及び前記暗号化手段は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍが有することを特徴とする請求項１８に記載の通信装置。
【請求項２６】
前記Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍは、前記第１のセッション確立手段を更に有することを特徴とする請求項２５に記載の通信装置。
【請求項２７】
通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする請求項１８に記載の通信装置。
【請求項２８】
前記制御手段が通信テストを行うタイミングは、
前記自装置が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項２７に記載の通信装置。
【請求項２９】
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項２７に記載の通信装置。
【請求項３０】
前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする請求項１８に記載の通信装置。
【請求項３１】
前記復号化手段は、前記第２のセッション確立手段が確立した第２のセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする請求項３０に記載の通信装置。
【請求項３２】
前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段であることを特徴とする請求項３１に記載の通信装置。
【請求項３３】
中継装置を介して通信する通信装置であって、
送信先と通信するためのセッションを確立する通信確立手段と、
前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立手段と、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化手段と
を有することを特徴とする通信装置。
【請求項３４】
通信装置であって、
セッション確立要求に応答する応答して第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために送信先と第２のセッションを確立する第２のセッション確立手段と、
を有することを特徴とする通信装置。
【請求項３５】
通信方法であって、
送信元からのセッション確立要求に応答して第１のセッションを確立する第１のセッション確立ステップと、
暗号化された送信データを送信するための第２のセッションを確立する第２のセッション確立ステップと、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化ステップと
を有することを特徴とする通信方法。
【請求項３６】
前記第１のセッション確立ステップ又は前記第２のセッション確立ステップは、トランスポート層とセッションを確立することを特徴とする請求項３５に記載の通信方法。
【請求項３７】
前記暗号化ステップは、送信データを判別し、判別の結果、暗号化されていない送信データを暗号化するステップであることを特徴とする請求項３５に記載の通信方法。
【請求項３８】
前記暗号化ステップは、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別することを特徴とする請求項３７に記載の通信方法。
【請求項３９】
前記第１のセッション確立ステップは、前記送信元のトランスポート層からのセッション確立要求に対して応答して第１のセッションを確立し、前記第２のセッション確立ステップが送信先のトランスポート層と第２のセッションを確立するように命令するステップであることを特徴とする請求項３５に記載の通信方法。
【請求項４０】
中継装置を介して前記送信データが送信される場合、
前記第１のセッション確立ステップは、送信元のトランスポート層からのセッション確立要求に対して応答して第１のセッションを確立し、前記第２のセッション確立ステップが前記中継装置のトランスポート層と第２のセッションを確立するように命令するステップであることを特徴とする請求項３５に記載の通信方法。
【請求項４１】
通信テストを行い、通信テスト結果に応じて、前記送信データを暗号化するか否かを決定する制御ステップを有することを特徴とする請求項３５に記載の通信方法。
【請求項４２】
前記通信テストを行うタイミングは、
前記送信元の装置が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項４１に記載の通信方法。
【請求項４３】
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信元に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項４１に記載の通信方法。
【請求項４４】
受信データを前記情報に基づいて復号する復号ステップを有することを特徴とする請求項３５に記載の通信方法。
【請求項４５】
前記復号化ステップは、前記第２のセッション確立ステップで確立された第２のセッションを経由して送られたと判別された受信データを復号するステップであることを特徴とする請求項４４に記載の通信システム。
【請求項４６】
前記復号化ステップは、受信データのヘッダを参照することにより判別することを特徴とする請求項４５に記載の通信システム。
【請求項４７】
中継装置を介して通信する通信方法であって、
送信元と送信先とで通信するためのセッションを確立する通信確立ステップと、
前記送信元と前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立ステップと、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化ステップと
を有することを特徴とする通信方法。
【請求項４８】
通信方法であって、
送信元からのセッション確立要求に応答して前記送信元と第１のセッションを確立する第１のセッション確立ステップと、
暗号化された送信データを送受信するための第２のセッションを確立する第２のセッション確立ステップと
を有することを特徴とする通信方法。
【請求項４９】
情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信側からのセッション確立要求に応答して前記送信側と第1のセッションを確立する第1のセッション確立手段と、
暗号化された送信データを送受信するために前記受信側と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化手段と
して機能させることを特徴とするプログラム。
【請求項５０】
前記第１のセッション確立手段又は前記第２のセッション確立手段は、トランスポート層とセッションを確立する手段として機能させることを特徴とする請求項４９に記載のプログラム。
【請求項５１】
送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする請求項４９に記載のプログラム。
【請求項５２】
前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段として機能させることを特徴とする請求項５１に記載のプログラム。
【請求項５３】
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記受信側のトランスポート層とセッションを確立するよう命令する手段として機能させることを特徴とする請求項４９に記載のプログラム。
【請求項５４】
中継装置を介して送信側と受信側との間で前記送信データが送受信される場合、
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記中継装置のトランスポート層と第２のセッションを確立するよう命令する手段として機能させることを特徴とする請求項４９に記載のプログラム。
【請求項５５】
通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする請求項４９に記載のプログラム。
【請求項５６】
前記制御手段が通信テストを行うタイミングは、
前記送信側が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項５５に記載のプログラム。
【請求項５７】
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項５５に記載のプログラム。
【請求項５８】
前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする請求項４９に記載のプログラム。
【請求項５９】
前記復号化手段は、前記第２のセッション確立手段が確立したセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする請求項５８に記載のプログラム。
【請求項６０】
前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段として機能させることを特徴とする請求項５９に記載のプログラム。
【請求項６１】
中継装置を介して通信する情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信元と送信先とで通信するためのセッションを確立する通信確立手段と、
前記送信元と前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立手段と、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化手段と
して機能させることを特徴とするプログラム。
【請求項６２】
情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信側からのセッション確立要求に応答して前期送信側と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを前記受信側と送受信するための第２のセッションを確立する第２のセッション確立手段と
して機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信技術に関し、特に、情報処理端末から送出されるデータを暗号化して送信するための暗号化通信技術に関する。
【背景技術】
【０００２】
今日、インターネットやＬＡＮ（Local Area Network）等のネットワークを介して送受信されるデータが、第３者に不正に傍受される等の盗聴により、機密情報が漏洩するという事件が頻発しており、社会問題となっている。【０００３】
このようなデータの盗聴を防ぐのに効果的な手法として、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）から送出されるデータを「暗号化」することが挙げられる。暗号化することによりデータの機密性を維持することができる。【０００４】
データの機密性を保持するには、ＰＣから送出される全ての機密データを暗号化する必要がある。ただし、従来、ＰＣから送出されるデータを暗号化するには、送信データを暗号化するようユーザが暗号化ソフトウェアに指示する必要があった。【０００５】
例えば、電子メールを暗号化して送信する場合、ＳＭＴＰ  ｏｖｅｒ  ＳＳＬというプロトコルを用いて暗号化することが一般的であるが、ユーザは明示的にこのプロトコルを使用して電子メールを暗号化するようソフトウェアに指示する必要がある。多くのメールソフトウェアでは、手動でその設定を変更する必要があるため、ユーザに手間がかかるとともに、設定ミスによって、電子メールが未暗号化のまま送出されてしまうという危険性が伴う。【０００６】
これらの問題に対する解決策のヒントが、特許文献１に記載されている。この特許文献１に記載の方法は、ＰＣから未暗号化のパケットが送出されるのを防ぐために、暗号化アプリケーションと暗号化ドライバ、そして暗号化ＬＳＩとを備えている。図４７には、その構成を示している。【０００７】
暗号化アプリケーションは、ソフトウェアであり、暗号化アルゴリズムをパスワードで管理している。【０００８】
暗号化ドライバは、ＴＣＰ/ＩＰプロトコルの下位層であるデータリンク層に組み込まれたソフトウェアである。暗号化ドライバは、暗号化アプリケーションからパスワードを受け取り、そのパスワードを参照した上で、暗号化ＬＳＩに暗号化アルゴリズムを指示する。【０００９】
暗号化ＬＳＩは、ＴＣＰ/ＩＰプロトコルの最下位層である物理層に組み込まれ、ハードウェアである。暗号化ＬＳＩは、暗号化ドライバから指示された暗号化アルゴリズムを参照することにより、必要に応じてデータの暗号化を行う。これにより、ＰＣから送出されるデータを暗号化することができ、未暗号化のデータがネットワークに送出される危険性を排除することが可能である。【００１０】
この特許文献１の詳細内容を、図５２を参照しながら、ＰＣ１とサーバ２との間で暗号化データをやりとりする場合を例にして説明する。【００１１】
まず、初期設定として、ＰＣ１とサーバ２との両者に暗号化ドライバをインストールするとともに、ＰＣとサーバとの両者に暗号化ＬＳＩを備えるネットワークインターフェースカード（ＮＩＣ：Network Interface Card）を取り付ける。また、暗号化に使用する暗号化アルゴリズムおよびパスワードをＰＣ１とサーバ２との暗号化ドライバに設定しておく。これらの初期設定完了後、暗号化データをやりとりすることができる。【００１２】
暗号化処理を具体的に説明するために、ＰＣ１からサーバ２に向けてデータが送信された場合を説明する。【００１３】
ＰＣ１側のメールやＷｅｂなどのアプリケーションがデータ通信を開始する場合、アプリケーションは、まず、データ送信を開始する旨を示すデータ通信開始要求を暗号化アプリケーションに伝えるとともに、送信したい平文データをＴＣＰ、ＩＰルーティング、ＩＰスタック、ドライバを経由してＮＩＣに渡す。暗号化アプリケーションは、アプリケーションからデータ通信開始要求を受け取ると、暗号化ドライバに通信開始を知らせるとともに、ユーザが設定したパスワードを暗号化ドライバに提供する。暗号化ドライバは、暗号化ＬＳＩに対して、暗号化アプリケーションから受け取ったパスワードに対応するアルゴリズムを用いて平文データに暗号化をかけることを指示する。暗号化ＬＳＩは、暗号化ドライバから受け取ったアルゴリズムをもとに、ＮＩＣ中の送信準備状態にある平文データを暗号化する。ＮＩＣは、暗号化ＬＳＩによって暗号化されたデータをネットワークに送出する。一方、サーバのＮＩＣがこの暗号化データを受信すると、まず、ドライバにデータの着信を通知する。ドライバは、ＮＩＣから着信通知を受け取ると、今度は暗号化ドライバと暗号化アプリケーションに着信通知を行う。暗号化ドライバは、ドライバから着信通知を受け取ると、暗号化アプリケーションに登録パスワードを確認するとともに、登録パスワードにあった復号アルゴリズムで、受信データを復号化するよう暗号化ＬＳＩに指示する。暗号化ＬＳＩは、暗号化ドライバから指示のあった復号アルゴリズムを用いて、ＮＩＣ中の受信準備状態にある暗号化データを復号する。ＮＩＣは、暗号化ＬＳＩにて復号された平文データを、ドライバ、ＩＰスタック、ＩＰルーティング、ＴＣＰを経由してアプリケーションに渡す。これら一連の処理を行うことにより、ＰＣとサーバとの間で送受信される機密情報を暗号化することができ、第３者に漏洩するのを確実に防ぐことができる。
【特許文献１】特開平１０−１９０７０４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
上記従来技術の第１の問題点は、ＰＣ１とサーバ２との間で送受信されるデータを、従来技術を用いて暗号化するには、ＰＣ１とサーバ２との両者に暗号化アプリケーション、暗号化ドライバ、暗号化ＬＳＩを各々インストールするとともに、暗号化に使用する暗号化アルゴリズムやパスワード鍵をＰＣ１とサーバ２との暗号化アプリケーションにあらかじめ設定しておく必要があるため、インストール及び設定の手間がかかってしまうことである。【００１５】
上記従来技術の第２の問題点は、ＰＣ１とサーバ２との間で送受信されるデータを、従来技術を用いて暗号化するには、ＮＩＣに暗号化ＬＳＩのような暗号化機能を組み込む必要があるため、ハードウェア開発者とソフトウェア開発者とにかかる負担が大きく、開発に手間がかかってしまうことである。【００１６】
上記従来技術の第３の問題点は、本発明の第１の発明により上記第１の問題点が解決された場合、サーバに特殊な暗号化装置をインストールすることなく、ＰＣ１とサーバ２との間で暗号化通信できるようになるが、この際、サーバ２側のアプリケーションが暗号化に対応している必要があるため、使用するアプリケーションによっては暗号化できない可能性があり、暗号化の設定に手間がかかってしまうことである。【００１７】
上記従来技術の第４の問題点は、ＰＣの場所の移動などに応じて、暗号化機能の起動や停止に関する設定変更を行うには、ＧＵＩ（Graphical User Interface）を使用してユーザが手動で変更する必要がある。そのため、設定ミスによる情報漏洩の危険が伴うとともに、設定に手間がかかってしまうことである。【００１８】
上記従来技術の第５の問題点は、情報漏洩を起こしかねないＰＣがネットワークに複数台存在する場合、従来技術を用いて暗号化するには、すべてのＰＣに暗号化アプリケーション、暗号化ドライバ、暗号化ＬＳＩをインストールしておく必要があるため、インストールおよび設定に手間がかかってしまうことである。【００１９】
本発明が解決しようとする課題は、上記問題点を鑑みてなされたものであって、ＰＣとサーバとの間で送受信される全てのデータを、手間をかけずに確実に暗号化できる暗号化システムを提供することにある。【００２０】
更に、ハードウェア開発者とソフトウェア開発者とにかかる負担を減らすことにある。
【課題を解決するための手段】
【００２１】
上記課題を解決するための第１の発明は、
送信側と受信側とで構成される通信システムであって、
送信側からのセッション確立要求に応答して前記送信側と第1のセッションを確立する第1のセッション確立手段と、
暗号化された送信データを送受信するために前記受信側と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化手段と
を有することを特徴とする。【００２２】
上記課題を解決するための第２の発明は、上記第１の発明において、
前記第１のセッション確立手段又は前記第２のセッション確立手段は、トランスポート層とセッションを確立する手段であることを特徴とする。【００２３】
上記課題を解決するための第３の発明は、上記第１又は第２の発明において、
送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする。【００２４】
上記課題を解決するための第４の発明は、上記第３の発明において、
前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段であることを特徴とする。【００２５】
上記課題を解決するための第５の発明は、上記第１から第４のいずれかの発明において、
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記受信側のトランスポート層とセッションを確立するよう命令する手段であることを特徴とする。【００２６】
上記課題を解決するための第６の発明は、上記第１から第４のいずれかの発明において、
中継装置を介して送信側と受信側との間で前記送信データが送受信される場合、
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記中継装置のトランスポート層と第２のセッションを確立するよう命令する手段であることを特徴とする。【００２７】
上記課題を解決するための第７の発明は、上記第１から第６のいずれかの発明において、
前記第１のセッション確立手段、前記第２のセッション確立手段、前記暗号化手段、及び前記判別手段は、ネットワーク層とデータリンク層との間に構成されていることを特徴とする。【００２８】
上記課題を解決するための第８の発明は、上記第１から第６のいずれかの発明において、
前記第２のセッション確立手段及び前記暗号化手段は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）が有することを特徴とする。【００２９】
上記課題を解決するための第９の発明は、上記第８の発明において、
前記Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）は、前記第１のセッション確立手段を更に有することを特徴とする。【００３０】
上記課題を解決するための第１０の発明は、上記第１から第９のいずれかの発明において、
通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする。【００３１】
上記課題を解決するための第１１の発明は、上記第１０の発明において、
前記制御手段が通信テストを行うタイミングは、
前記送信側が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００３２】
上記課題を解決するための第１２の発明は、上記第１０又は第１１の発明において、
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００３３】
上記課題を解決するための第１３の発明は、上記第１から第１２のいずれかの発明において、
前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする。【００３４】
上記課題を解決するための第１４の発明は、上記第１３の発明において、
前記復号化手段は、前記第２のセッション確立手段が確立した第２のセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする。【００３５】
上記課題を解決するための第１５の発明は、上記第１３の発明において、
前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段であることを特徴とする。【００３６】
上記課題を解決するための第１６の発明は、
中継装置を介して送信側と受信側とで通信する通信システムであって、
前記送信側と前記受信側とで通信するためのセッションを確立する通信確立手段と、
前記送信側と前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立手段と、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化手段と
を有することを特徴とする。【００３７】
上記課題を解決するための第１７の発明は、
送信側と受信側とで構成される通信システムであって、
送信側からのセッション確立要求に応答して前期送信側と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを前記受信側と送受信するための第２のセッションを確立する第２のセッション確立手段と
を有することを特徴とする。【００３８】
上記課題を解決するための第１８の発明は、
通信装置であって、
セッション確立要求に応答する応答して第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化手段と
を有することを特徴とする。【００３９】
上記課題を解決するための第１９の発明は、上記第１８の発明において、
前記第１のセッション確立手段又は前記第２のセッション確立手段は、トランスポート層とセッションを確立する手段であることを特徴とする。【００４０】
上記課題を解決するための第２０の発明は、上記第１８又は第１０の発明において、
送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする。【００４１】
上記課題を解決するための第２１の発明は、上記第２０の発明において、
前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段であることを特徴とする。【００４２】
上記課題を解決するための第２２の発明は、上記第１８から第２１のいずれかの発明において、
前記第１のセッション確立手段は、自装置のトランスポート層からのセッション確立要求に応答して第１のセッションを確立し、前記第２のセッション確立手段に送信先のトランスポート層と第２のセッションを確立するよう命令する手段であることを特徴とする。【００４３】
上記課題を解決するための第２３の発明は、上記第１８から第２１のいずれかの発明において、
中継装置を介して前記送信データが送信される場合、
前記第１のセッション確立手段は、自装置のトランスポート層からのセッション確立要求に応答して第１のセッションを確立し、前記第２のセッション確立手段に前記中継装置のトランスポート層と第２のセッションを確立するよう命令する手段であることを特徴とする。【００４４】
上記課題を解決するための第２４の発明は、上記第１８から第２３のいずれかの発明において、
前記第１のセッション確立手段、前記第２のセッション確立手段、前記暗号化手段、及び前記判別手段は、ネットワーク層とデータリンク層との間に構成されていることを特徴とする。【００４５】
上記課題を解決するための第２５の発明は、上記第１８から第２４のいずれかの発明において、
前記第２のセッション確立手段及び前記暗号化手段は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）が有することを特徴とする。【００４６】
上記課題を解決するための第２６の発明は、上記第２５の発明において、
前記Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）は、前記第１のセッション確立手段を更に有することを特徴とする。【００４７】
上記課題を解決するための第２７の発明は、上記第１８から第２６のいずれかの発明において、
通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする。【００４８】
上記課題を解決するための第２８の発明は、上記第２７のいずれかの発明において、
前記制御手段が通信テストを行うタイミングは、
前記自装置が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００４９】
上記課題を解決するための第２９の発明は、上記第２７又は第２８の発明にいて、
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００５０】
上記課題を解決するための第３０の発明は、上記第１８から第２９のいずれかの発明において、
前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする。【００５１】
上記課題を解決するための第３１の発明は、上記第３０の発明において、
前記復号化手段は、前記第２のセッション確立手段が確立した第２のセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする。【００５２】
上記課題を解決するための第３２の発明は、上記第３１の発明において、
前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段であることを特徴とする。【００５３】
上記課題を解決するための第３３の発明は、
中継装置を介して通信する通信装置であって、
送信先と通信するためのセッションを確立する通信確立手段と、
前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立手段と、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化手段と
を有することを特徴とする。【００５４】
上記課題を解決するための第３４の発明は、
通信装置であって、
セッション確立要求に応答する応答して第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために送信先と第２のセッションを確立する第２のセッション確立手段と、
を有することを特徴とする。【００５５】
上記課題を解決するための第３５の発明は、
通信方法であって、
送信元からのセッション確立要求に応答して第１のセッションを確立する第１のセッション確立ステップと、
暗号化された送信データを送信するための第２のセッションを確立する第２のセッション確立ステップと、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化ステップと
を有することを特徴とする。【００５６】
上記課題を解決するための第３６の発明は、上記第３５の発明において、
前記第１のセッション確立ステップ又は前記第２のセッション確立ステップは、トランスポート層とセッションを確立することを特徴とする。【００５７】
上記課題を解決するための第３７の発明は、上記第３５又は第３６の発明において、
前記暗号化ステップは、送信データを判別し、判別の結果、暗号化されていない送信データを暗号化するステップであることを特徴とする【００５８】
上記課題を解決するための第３８の発明は、上記第３７の発明において、
前記暗号化ステップは、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別することを特徴とする。【００５９】
上記課題を解決するための第３９の発明は、上記第３５から第３８のいずれかの発明において、
前記第１のセッション確立ステップは、前記送信元のトランスポート層からのセッション確立要求に対して応答して第１のセッションを確立し、前記第２のセッション確立ステップが送信先のトランスポート層と第２のセッションを確立するように命令するステップであることを特徴とする。【００６０】
上記課題を解決するための第４０の発明は、上記第３５から第３８のいずれかの発明において、
中継装置を介して前記送信データが送信される場合、
前記第１のセッション確立ステップは、送信元のトランスポート層からのセッション確立要求に対して応答して第１のセッションを確立し、前記第２のセッション確立ステップが前記中継装置のトランスポート層と第２のセッションを確立するように命令するステップであることを特徴とする。【００６１】
上記課題を解決するための第４１の発明は、上記第３５から第４０のいずれかの発明において、
通信テストを行い、通信テスト結果に応じて、前記送信データを暗号化するか否かを決定する制御ステップを有することを特徴とする。【００６２】
上記課題を解決するための第４２の発明は、上記第４１の発明において、
前記通信テストを行うタイミングは、
前記送信元の装置が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００６３】
上記課題を解決するための第４３の発明は、上記第４１又は第４２の発明において、
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信元に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００６４】
上記課題を解決するための第４４の発明は、上記第３５から第４３のいずれかの発明において、
受信データを前記情報に基づいて復号する復号ステップを有することを特徴とする。【００６５】
上記課題を解決するための第４５の発明は、上記第４４の発明において、
前記復号化ステップは、前記第２のセッション確立ステップで確立された第２のセッションを経由して送られたと判別された受信データを復号するステップであることを特徴とする。【００６６】
上記課題を解決するための第４６の発明は、上記第４５の発明において、
前記復号化ステップは、受信データのヘッダを参照することにより判別することを特徴とする。【００６７】
上記課題を解決するための第４７の発明は、
中継装置を介して通信する通信方法であって、
送信元と送信先とで通信するためのセッションを確立する通信確立ステップと、
前記送信元と前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立ステップと、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化ステップと
を有することを特徴とする。【００６８】
上記課題を解決するための第４８の発明は、
通信方法であって、
送信元からのセッション確立要求に応答して前記送信元と第１のセッションを確立する第１のセッション確立ステップと、
暗号化された送信データを送受信するための第２のセッションを確立する第２のセッション確立ステップと
を有することを特徴とする。【００６９】
上記課題を解決するための第４９の発明は、
情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信側からのセッション確立要求に応答して前記送信側と第1のセッションを確立する第1のセッション確立手段と、
暗号化された送信データを送受信するために前記受信側と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化手段と
して機能させることを特徴とする。【００７０】
上記課題を解決するための第５０の発明は、上記第４９の発明において、
前記第１のセッション確立手段又は前記第２のセッション確立手段は、トランスポート層とセッションを確立する手段として機能させることを特徴とする。【００７１】
上記課題を解決するための第５１の発明は、上記第４９又は第５０の発明において、
送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする。【００７２】
上記課題を解決するための第５２の発明は、上記第５１の発明において、
前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段として機能させることを特徴とする。【００７３】
上記課題を解決するための第５３の発明は、上記第４９から第５２のいずれかの発明において、
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記受信側のトランスポート層とセッションを確立するよう命令する手段として機能させることを特徴とする。【００７４】
上記課題を解決するための第５４の発明は、上記第４９から第５２のいずれかの発明において、
中継装置を介して送信側と受信側との間で前記送信データが送受信される場合、
前記第１のセッション確立手段は、前記送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立し、前記第２のセッション確立手段に前記中継装置のトランスポート層と第２のセッションを確立するよう命令する手段として機能させることを特徴とする。【００７５】
上記課題を解決するための第５５の発明は、上記第４９から第５４のいずれかの発明において、
通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする。【００７６】
上記課題を解決するための第５６の発明は、上記第５５の発明において、
前記制御手段が通信テストを行うタイミングは、
前記送信側が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００７７】
上記課題を解決するための第５７の発明は、上記第５５又は第５６の発明において、
前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする。【００７８】
上記課題を解決するための第５８の発明は、上記第４９から第５７のいずれかの発明において、
前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする。【００７９】
上記課題を解決するための第５９の発明は、上記第５８の発明において、
前記復号化手段は、前記第２のセッション確立手段が確立したセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする。【００８０】
上記課題を解決するための第６０の発明は、上記第５９の発明において、
前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段として機能させることを特徴とする。【００８１】
上記課題を解決するための第６１の発明は、
中継装置を介して通信する情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信元と送信先とで通信するためのセッションを確立する通信確立手段と、
前記送信元と前記中継装置との間で暗号化された送信データを送受信するための暗号化セッションを確立するセッション確立手段と、
前記暗号化セッションを通じて、暗号化に必要な情報を交換し、この情報に基づいて送信データを暗号化する暗号化手段と
して機能させることを特徴とする。【００８２】
上記課題を解決するための第６２の発明は、
情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信側からのセッション確立要求に応答して前期送信側と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを前記受信側と送受信するための第２のセッションを確立する第２のセッション確立手段と
して機能させることを特徴とする。
【発明の効果】
【００８３】
上述した本発明の第1の効果は、ＴＣＰ中継手段を利用することにより、ＰＣ側の中間ドライバとサーバ側のSSLとの間で、証明書情報や暗号鍵を交換できるので、ＰＣ側の中間ドライバに暗号鍵を設定する手間を省けるとともに、サーバに中間ドライバをインストールする手間も省けることにある。また、データが第３者に盗聴されて機密情報が漏洩するという危険性も排除できる。【００８４】
第２の効果は、ループバック接続を利用することにより、中間ドライバの内部に組み込まれていた暗号化手段を、ＯＳ中の既存モジュールで代替できるので、ソフトウェア開発者が暗号化および復号化手段を開発する手間を省けることにある。【００８５】
第３の効果は、ＴＣＰトンネリング手段を利用することにより、サーバのアプリケーションがＳＳＬに対応していない場合でも、ＰＣは送出するデータを暗号化できるため、ＳＳＬに対応したアプリケーションをサーバにインストールする手間を省けることにある。【００８６】
第４の効果は、暗号化設定手段を利用することにより、ネットワーク環境に応じて、中間ドライバの暗号化設定を自動的に切り替えることができるため、ユーザが暗号化設定を手動で変更する手間を省けることにある。また、ユーザの設定ミスにより、未暗号化パケットが送出されて情報漏洩が発生するという危険性も排除できる。【００８７】
第５の効果は、ゲートウェイに中間ドライバの各機能を組み込むことにより、機密情報の漏洩を起こしうるＰＣがネットワークに複数台存在する場合でも、全てのＰＣからのフレームの暗号化をゲートウェイで一括実行することができるので、各ＰＣに中間ドライバをインストールする手間を省けることにある。【００８８】
本発明の第１の暗号化システムは、ＰＣとサーバとを有す。そして図４２に示すように、送信装置側であるＰＣが、上位レイヤから受け取ったフレームに暗号化または復号化を施す必要があるかどうかを識別するフレーム解析手段と、フレームにヘッダを挿入または挿抜するヘッダ変換手段と、ＰＣとサーバとの間のＴＣＰ中継処理を行うＴＣＰ中継手段と、フレームに暗号化および復号化を施す暗号化手段と、を有する中間ドライバを搭載していることを特徴とする暗号化システムである。ここで、中間ドライバとは、ＴＣＰ／ＩＰの階層モデルで言うところのネットワーク層とデータリンク層との間に挿入されるモジュールである。【００８９】
そして、図４３に示すように、フレーム解析手段が上位レイヤよりフレームを受け取ると（ステップＳ４３１）、そのフレームが暗号化されているか否かを判別する（ステップＳ４３２）。暗号化されていないフレームはヘッダ変換手段でヘッダが挿入され（ステップＳ４３２）、暗号化される（ステップＳ４３４）。暗号化されたフレームを送信する（ステップＳ４３５）。【００９０】
このような構成を採用し、ＰＣの中間ドライバにおいて、ＴＣＰ中継処理を行うことにより、ＰＣ側の中間ドライバの暗号化手段のＴＣＰ／ＩＰ階層と、サーバ側のＳＳＬのＴＣＰ／ＩＰ階層とを整合させることができる。これにより、ＰＣ側の中間ドライバの暗号化手段とサーバ側のＳＳＬとの間でＳＳＬプロトコルによる通信が可能となり、暗号化セッションの開始に必要な証明書情報や暗号鍵の交換できる。このため、サーバ側のＳＳＬモジュールに証明書や暗号鍵を設定しておけば、ＰＣ側の中間ドライバの暗号化手段には、証明書や暗号鍵を設定しておかなくても、ＰＣはサーバ側から証明書や暗号鍵をダウンロードすることができ、暗号化通信を簡単に開始できる。以上のことから、本構成を用いることにより、サーバ側に特殊なモジュールをインストールする手間を省くとともに、ＰＣに暗号鍵や証明書パスワードを設定するといった手間を省けているので、本発明の第1の目的を達成することができる。【００９１】
また、本発明の第２の暗号化システムは、図４４に示すように、第1の暗号化システムの構成に加え、ＰＣが、ソフトウェアの仮想ＮＩＣを介して中間ドライバとＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）との間を中継接続するループバック手段と、第1の暗号化システムの暗号化手段をＯＳの既存モジュールで代替した暗号化手段と、を有することを特徴とする暗号化システムである。【００９２】
このような構成を採用し、ＰＣの中間ドライバにおいて、暗号化が必要と判断されたフレームを、ループバック手段を用いて中間ドライバからＯＳにループバックすることにより、フレームの暗号化をＯＳ中のＳＳＬモジュールで行うことができる。ＳＳＬは、現在市販されているコンピュータのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に標準搭載されていることがほとんどであり、ソフトウェア開発者が新たに開発する必要はない。この結果、中間ドライバに暗号化手段を実装する必要がなくなるので、本発明の第2の目的を達成することができる。【００９３】
また、本発明の第３の暗号化システムは、第1の暗号化システムの構成に加え、ゲートウェイを有する。そして、ＰＣとゲートウェイが、両者の間に図４５に示すような暗号化ＴＣＰトンネルを確立するＴＣＰトンネリング手段を搭載していることを特徴とする暗号化システムである。【００９４】
このような構成を採用し、ＰＣの中間ドライバにおいて、暗号化が必要と判断されたフレームを暗号化した後、ＴＣＰトンネリング手段を用いてＰＣからゲートウェイに転送し、ゲートウェイにおいて、このフレームを復号化してからサーバに再転送してやることにより、サーバ側のアプリケーションソフトがＳＳＬに対応していない場合でも、ＰＣは送出するデータを暗号化することができる。このため、アプリケーションに依存することなく、ＰＣとサーバの間で暗号化通信を行えるため、本発明の第３の目的を達成することができる。【００９５】
また、本発明の第４の暗号化システムは、第1の暗号化システムの構成に加え、管理サーバを有する。そして、ＰＣが、管理サーバとの通信テスト結果に応じて、中間ドライバの暗号化機能の設定を自動的に切り替える、図４６に示すような暗号化設定手段を有することを特徴とする暗号化システムである。【００９６】
このような構成を採用し、ＰＣの中間ドライバの暗号化機能の設定を、自動的に変更することにより、本発明の第４の目的を達成することができる。【００９７】
また、本発明の第５の暗号化システムは、第1の暗号化システムの構成に加え、ゲートウェイを有し、第１の暗号化システムにおいてＰＣに組み込まれていた中間ドライバの機能を、ゲートウェイに組み込んでいることを特徴とする暗号化システムである。【００９８】
このような構成を採用し、ゲートウェイにおいて、暗号化が必要と判断されたフレームを、ゲートウェイの中間ドライバで暗号化してから送出することにより、ＰＣに中間ドライバをインストールする必要がなくなるので、本発明の第５の目的を達成することができる。
【図面の簡単な説明】
【００９９】
【図１】本発明の第１の実施の形態のネットワーク構成を示す図である。
【図２】本発明の第１の実施の形態のＰＣのハードウェア構成を示す図である。
【図３】本発明の第１の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図４】本発明の第１の実施の形態の各プロトコル間で受け渡されるデータフォーマットを示す図である。
【図５】本発明の第１の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図６】本発明の第１の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図７】本発明の第１の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図８】本発明の第１の実施の形態のヘッダ変換部の動作フローチャートを示す図である。
【図９】本発明の第１の実施の形態のヘッダ変換部との動作フローチャートを示す図である。
【図１０】本発明の第１の実施の形態のフレーム解析部とヘッダ変換部が保持しているテーブルを示す図である。
【図１１】本発明の第１の実施の形態の各プロトコル間で受け渡されるデータフォーマットを詳細に示す図である。
【図１２】本発明の第２の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図１３】本発明の第２の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図１４】本発明の第２の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図１５】本発明の第３の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図１６】本発明の第４の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図１７】本発明の第４の実施の形態のヘッダ変換部の動作フローチャートを示す図である。
【図１８】本発明の第４の実施の形態の各プロトコル間で受け渡されるデータフォーマットを示す図である。
【図１９】本発明の第５の実施の形態のネットワーク構成を示す図である。
【図２０】本発明の第５の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示している図である。
【図２１】本発明の第５の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図２２】本発明の第５の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図２３】本発明の第５の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図２４】本発明の第５の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図２５】本発明の第５の実施の形態のヘッダ変換部の動作フローチャートを示す図である。
【図２６】本発明の第５の実施の形態のヘッダ変換部の動作フローチャートを示す図である。
【図２７】本発明の第５の実施の形態の各プロトコル間で受け渡されるデータフォーマットを示す図である。
【図２８】本発明の第６の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図２９】本発明の第６の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図３０】本発明の第７の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図３１】本発明の第８の実施の形態のネットワーク構成を示す図である。
【図３２】本発明の第８の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図３３】本発明の第６の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図３４】本発明の第６の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図３５】本発明の第９の実施の形態のネットワーク構成を示す図である。
【図３６】本発明の第９の実施の形態に搭載されるソフトウェア等とプロトコル上の通信処理を示す図である。
【図３７】本発明の第９の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図３８】本発明の第９の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図３９】本発明の第９の実施の形態のフレーム解析部の動作フローチャートを示す図である。
【図４０】本発明の第９の実施の形態を拡張し、複数のＰＣとサーバを含む場合のネットワーク構成を示す図である。
【図４１】本発明の第９の実施の形態を拡張し、中間ドライバの開発負荷を削減した場合のソフトウェアとプロトコル上の通信処理を示す図である。
【図４２】本発明の第１の暗号化システムの特徴を示す図である。
【図４３】本発明の第１の暗号化システムにおける動作の概略を示す図である。
【図４４】本発明の第２の暗号化システムの特徴を示す図である。
【図４５】本発明の第３の暗号化システムの特徴を示す図である。
【図４６】本発明の第４の暗号化システムの特徴を示す図である。
【図４７】従来技術を示す図である。
【発明を実施するための最良の形態】
【０１００】
次に、本発明の上述の優位点と特徴を得ることができる形態を説明するために、以下に簡潔に述べた本発明のより特定の記載を、添付された図面に示される具体的実施の形態を参照して行うものとする。これらの図面は、本発明の典型的な実施形態のみを示しており、その範囲を限定するものとは考えるべきでないことを理解すれば、本発明は、以下に添付する図面を用いて、さらに明確および詳細に記載され説明されるであろう。
[第１の実施の形態]
[構成の説明]
本発明の第１の発明を実施するための第１の実施の形態について、図面を参照して詳細に説明する。図１は、第１の実施の形態のネットワーク構成を示す図であり、PC１と、サーバ２と、ハブ３とを備えた構成である。【０１０１】
ＰＣ１は、ハブ３と接続され、ハブ３からフレームを受け取るとともに、受け取ったフレームに対して所望の処理を行う。また、ＰＣ１は、ＰＣ１の内部処理により生成されたフレームをハブ３に送信する。【０１０２】
サーバ２は、ハブ３と接続され、ハブ３からフレームを受け取るとともに、受け取ったフレームに対して所望の処理を行う。また、サーバ２は、サーバ２の内部処理により生成されたフレームをハブ３に送信する。【０１０３】
ハブ３は、ＰＣ１とサーバ２とに接続されている。ハブ３は、ＰＣ１からフレームを受け取ると、受け取ったフレームを解析し、その解析結果に基づいて適切なポートにフレームを転送する。また、ハブ３は、サーバ２からフレームを受け取ると、受け取ったフレームを解析し、その解析結果に基づいて適切なポートにフレームを転送する。【０１０４】
図２は、第１の実施の形態におけるＰＣ１のハードウェア構成を詳細に示したブロック図である。ＰＣ１は、ＣＰＵ１００と、ＮＩＣ１０１と、メモリ１０２と、ＨＤＤ１０３と、キーボード１０４と、マウス１０５と、モニタ１０６により構成される。【０１０５】
ＣＰＵ１００は、中央演算装置と呼ばれ、ＨＤＤ１０３に記録されているソフトウェア（プログラム）を読み込み、メモリ１０２を用いてプログラムに記載された処理を実行するハードウェアである。この処理に際しては、キーボード１０４や、マウス１０５から、ユーザによる命令を受けるほか、結果をモニタ１０６に出力することも可能である。また、この処理に際して、ＮＩＣ１０１からデータを受信し、もしくはＮＩＣ１０１に対してデータを出力することもある。【０１０６】
ＮＩＣ１０１は、ネットワークインターフェースカード（Network Interface Card）と呼ばれ、イーサネット等のネットワーク用ケーブルを接続するために、コンピュータに挿入するハードウェアである。ケーブルから受け取ったデータを適した電気信号に変換してＣＰＵ１００に送るとともに、逆にＣＰＵ１００から受け取ったデータを適した電気信号に変換してケーブルに送信する。【０１０７】
メモリ１０２は、ＣＰＵ１００がソフトウェアを処理実行する際に利用される記憶装置であり、ＣＰＵ１００から書き込み命令と共に送られたデータを指定されたアドレスに保存し、またＣＰＵ１００からの読み出し命令を受けると、指定されたアドレスからデータを読み出してＣＰＵに送付する。【０１０８】
ＨＤＤ１０３は、ハードディスクドライブと呼ばれ、ソフトウェア（プログラム）を記憶するための記憶装置である。ＣＰＵ１００から書き込み命令と共に送られたデータを指定されたアドレスに保存し、またＣＰＵ１００からの読み出し命令を受けると、指定されたアドレスからデータを読み出してＣＰＵに送付する。【０１０９】
キーボード１０４は、ユーザからのキー押下による命令を、電気信号に変換し、ＣＰＵ１００に伝達する入力装置である。【０１１０】
マウス１０５は、ユーザからのマウス１０５の移動による命令を、電気信号に変換し、ＣＰＵ１００に伝達する入力装置である。【０１１１】
モニタ１０６は、ＣＰＵ１００からの描画命令を受け、ブラウン管や液晶画面などに表示する出力装置である。【０１１２】
図３は、本実施の形態の各装置に搭載されるＣＰＵおよびＮＩＣの通信処理を示す図である。本実施の形態のＰＣ１、サーバ２及びハブ３は、それぞれのＣＰＵ内に、所定のＯＳ（オペレーティングシステム）と、各種機能を実現するソフトウェアとを有するとともに、ハードウェアのＮＩＣを有する。【０１１３】
ＣＰＵ内では、実際には図３に示したソフトウェア以外にも多くのソフトウェアが動作しているが、図３においては本発明に無関係なソフトウェアは省略している。【０１１４】
次に、ＰＣ１の各構成要素の機能を詳細に説明する。まず、ＰＣ１のＣＰＵ内で動作するソフトウェアのうち、ＯＳに含まれない上位層に位置するソフトウェアについて述べる。ＰＣ１は、これに該当するソフトウェアとして、クライアントアプリケーションＡ１を備えている。クライアントアプリケーションＡ１は、サーバ２のサーバアプリケーションＢ１と通信するアプリケーションである。クライアントアプリケーションＡ１は、所定の処理によって生成されたデータをＴＣＰ  Ａ２に転送する機能を有する。また、クライアントアプリケーションＡ１は、ＴＣＰ  Ａ２からデータを受け取ると、受け取ったデータに対して、所定の処理を行う機能を有する。図４aは、クライアントアプリケーションＡ１がＴＣＰ  Ａ２と受け渡すデータフォーマットを示している。クライアントアプリケーションＡ１には、主なものとして、ＷＥＢブラウザソフト、電子メールクライアントソフト、ＴＥＬＮＥＴクライアントソフト、ＦＴＰクライアントソフト、会計クライアントソフト、ファイル共有クライアントソフト、データベースクライアントソフト等、各種のアプリケーションが適用可能である。【０１１５】
次に、ＰＣ１のＯＳに含まれるソフトウェアの機能を説明する。ＯＳに含まれるソフトウェアとして、ＰＣ１は、ＴＣＰ  Ａ２、ＩＰルーティングＡ３、ＩＰスタックＡ４を備えている。【０１１６】
ＴＣＰＡ２は、以下の（１）〜（４）の処理によりデータを一定形式のフォーマットに整えてパケット化し、又はパケットからデータを復元する機能を有する。【０１１７】
（１）ＴＣＰ  Ａ２は、クライアントアプリケーションＡ１からデータを受け取り、パケットの欠落や順序逆転を検知するためのＴＣＰヘッダおよび宛先ＩＰアドレスをデータに付加して、ＩＰルーティングＡ３に送る。ここで大きなデータの場合は分割（フラグメントとも言う）処理を行う。
（２）ＴＣＰ  Ａ２は、ＩＰルーティングＡ３からパケットを受け取り、ＴＣＰヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからヘッダをはずし、クライアントアプリケーションＡ１に送る。この際、パケットが届いたことを知らせるACKパケットをパケットの送信元に返信する。  
（３）上記（２）において、もしパケットの欠落が発生している場合は、ＴＣＰ  Ａ２は、再送要求パケットをパケットの送信元に送信する。また、順序逆転やフラグメントが発生している場合には、後から届くパケットを待って、データを復元する。  
（４）ＴＣＰ  Ａ２は、ＡＣＫパケットを受け取ると、（１）におけるパケットの送信速度を調整する。【０１１８】
ＩＰルーティングＡ３は、ＴＣＰ  Ａ２からからパケットを受け取り、宛先ＩＰアドレスを参照して、受け取ったパケットをＩＰスタックＡ４に転送する機能を有する。また、ＩＰルーティングＡ３は、ＩＰスタックＡ４からパケットを受け取り、宛先ポート番号を参照して、受け取ったパケットをＴＣＰ  Ａ２に転送する機能を有する。【０１１９】
ＩＰスタックＡ４A4は、IPルーティングA3からパケットを受け取り、ＩＰヘッダとＭＡＣヘッダとを受け取ったパケットに付加してフレームを生成し、中間ドライバＡ１１にこのフレームを転送する機能を有する。図４bは、ＩＰスタックＡ４が中間ドライバＡ１１に受け渡すデータフォーマットを示している。また、ＩＰスタックＡ４は、中間ドライバＡ１１からフレームを受け取り、この受け取ったフレームからＭＡＣヘッダを削除してから、ＩＰルーティングＡ３に転送する機能を有する。さらに、ＩＰスタックＡ４は、アドレス解決プロトコルを利用してパケットの宛先ＭＡＣアドレスを調査する機能等も有する。【０１２０】
次に、ＰＣ１のＯＳに含まれない下位層に位置するソフトウェアについて述べる。ＰＣ１は、これに該当するソフトウェアとして、中間ドライバＡ１１、およびドライバＡ５を備えている。【０１２１】
中間ドライバＡ１１は、ＴＣＰ／ＩＰの階層モデルで言うところのネットワーク層とデータリンク層との間に挿入されるモジュールである。そして、中間ドライバＡ１１は、ＩＰスタックＡ４、およびドライバＡ５と接続されており、以下に挙げる機能を有する。【０１２２】
中間ドライバＡ１１は、ＩＰスタックＡ４から到着するフレームのヘッダを参照して、フレームに暗号化を施す必要があるか判別する。判別の結果、受け取ったフレームの暗号化が必要であれば、中間ドライバＡ１１はＴＣＰ  Ａ２とのＴＣＰセッションを一度終端させた後、データに暗号化を施す。ここで、暗号化に使用する暗号鍵は、ＳＳＬ  Ｂ２との間で交換された暗号鍵を用いる。そして、ＴＣＰ  Ｂ３とのＴＣＰセッションに対応したヘッダを暗号化データに付加した後、暗号化データをドライバＡ５に転送する機能を有する。一方、受け取ったフレームの暗号化が不要であれば、中間ドライバＡ１１は、受け取ったフレームをドライバＡ５に転送する機能を有する。ここで、暗号化が不要なフレームとしては、上位のＴＣＰ／ＩＰ階層で既に暗号化されているフレームや、ＤＨＣＰパケット、およびＡＲＰパケット等が挙げられる。【０１２３】
また、中間ドライバＡ１１は、ドライバＡ５から到着するフレームのヘッダを参照して、フレームを復号化する必要があるか判別する。判別の結果、受け取ったフレームの復号化が必要であれば、中間ドライバＡ１１は、ＴＣＰ  Ｂ３とのTCPセッションを一度終端させた後、データを復号化する。ここで、復号化に使用する復号鍵は、ＳＳＬ  Ｂ２との間で交換された復号鍵を用いる。そして、ＴＣＰ  Ａ２とのＴＣＰセッションに対応したヘッダを復号化データに付加した後、復号化データをＩＰスタックＡ４に転送する機能を有する。一方、受け取ったフレームの復号化が不要であれば、中間ドライバＡ１１は、受け取ったフレームをＩＰスタックＡ４に転送する機能を有する。ここで、復号化が不要なフレームとしては、中間ドライバＡ１１よりも上位のＴＣＰ／ＩＰ階層で復号化すべきフレームや、ＤＨＣＰパケット、およびＡＲＰパケット等が挙げられる。【０１２４】
中間ドライバＡ１１は上記の機能を実行するために、図３に示すように、複数の機能ブロックから構成されている。中間ドライバＡ１１の構成要素としては、受け取ったフレームの暗号化および復号化が必要であるかどうかを識別するフレーム解析部Ａ１２、フレームにヘッダを挿入および挿抜するヘッダ変換部Ａ１３、ＴＣＰ  Ａ２2又はＴＣＰ  Ｂ３とのＴＣＰセッションを終端するためのＴＣＰ  Ａ１４およびＴＣＰ  Ａ１７、受け取ったデータの暗号化および復号化を行うＳＳＬ  Ａ１６、ＴＣＰの中継処理を行うアプリケーションＡ１５が挙げられる。各構成要素の機能を、以下において詳細に説明する。【０１２５】
ただし、以下に述べる各構成要素の機能およびコンフィグレーションは、単なる例である。特に、フレーム解析部Ａ１２、およびヘッダ変換部Ａ１３については、その機能およびコンフィグレーションを多種多様な方法で実現できることは、本技術分野の当業者にとって明らかである。【０１２６】
また、以下に述べるフレーム解析部Ａ１２は、受け取ったフレームの暗号化および復号化が必要かどうか判別する機能を有する構成を用いて説明するが、これに限るものではない。例えば、この機能に加えて、フレームを廃棄するかどうか識別する機能を有する構成であっても良い。この廃棄機能により、ＰＣ１のＣＰＵ資源が不要なパケットの処理によって浪費されるのを防ぐとともに、ＰＣ１が外部ネットワークから不正アタックを受けるのを防ぐことができる。【０１２７】
まず、フレーム解析部Ａ１２の機能を説明する。フレーム解析部Ａ１２は、ＩＰスタックＡ４、ヘッダ変換部Ａ１３、およびドライバＡ５と接続されている。図５、図６、図７は、フレーム解析部Ａ１２の機能を詳細に説明するためのフローチャートである。【０１２８】
図５は、ＩＰスタックＡ４からフレームが到着した場合のフレーム解析部Ａ１２の処理を示している。フレーム解析部Ａ１２は、まず、到着したフレームのヘッダを取得した後（ステップＳ２）、そのヘッダを参照して、フレームを暗号化する必要があるかどうか判別する（ステップＳ３）。ここで参照するヘッダとしては、ＭＡＣヘッダ、ＩＰヘッダ、ＴＣＰヘッダなどが挙げられる。このステップＳ３において、暗号化する必要ありと判断されるフレームは、到着時に暗号化されていないフレームである。逆に、このステップＳ３において、暗号化する必要なしと判断されるフレームは、到着時に暗号化されていないフレームである。ただし、ＤＨＣＰフレームやＤＮＳフレームなど、本来暗号化されることがないフレームに関しては、たとえ暗号化されていなくても、このステップＳ３において、暗号化する必要なしと判断するものとする。【０１２９】
上記のように、受け取ったフレームが上位のＴＣＰ／ＩＰ階層で暗号化されているかどうか、および受け取ったフレームがＤＨＣＰフレームやＤＮＳフレームであるかどうかは、例えば、そのフレームのＴＣＰヘッダを参照することにより識別可能である。具体的には、暗号化されたフレームの宛先ポート番号には、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）アクセスで４４３番、メール送信で４６５番、メール受信で９９５番という番号が用いられることとなる。一方、未暗号化のフレームの宛先ポート番号には、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）アクセスで８０番、メール送信で２５番、メール受信で１１０番という番号が用いられる。また、ＤＨＣＰフレームの宛先ポート番号には６８番、ＤＮＳフレームの宛先ポート番号には５３番という番号が用いられる。【０１３０】
このように、フレームのヘッダから、そのフレームを暗号化する必要があるかどうかを判別することが可能である。このような処理を実行させるには、フレーム解析部Ａ１２に、暗号化フレームと未暗号化フレームとのポート番号情報が記載された一覧表を持たせれば良い。【０１３１】
上記の方法を用いて、図５のステップＳ３において、フレームを暗号化する必要があるかどうか判別し、もしフレームの暗号化が不要であれば、フレームのヘッダをテーブルＴ１に保存した後（ステップＳ４）、フレームをドライバＡ５に転送する（ステップＳ５）。また、フレームの暗号化が必要であれば、フレームをヘッダ変換部Ａ１３に転送する（ステップＳ６）。図１０（ａ）は、テーブルT1の格納情報を示している。テーブルＴ１には、図１０（ａ）に示されるように、ＴＣＰポート番号、ＩＰアドレス、およびＭＡＣアドレスが登録される。【０１３２】
一方、図６は、ドライバＡ５からフレームが到着した場合のフレーム解析部Ａ１２の処理を示している。フレーム解析部Ａ１２は、まず、到着したフレームのヘッダを取得した後（ステップＳ１２）、そのヘッダを参照して、フレームを復号化する必要があるかどうか判断する（ステップＳ１３）。ここで参照するヘッダとしては、ＭＡＣヘッダ、ＩＰヘッダ、ＴＣＰヘッダなどが挙げられる。【０１３３】
このステップＳ１３において、復号化する必要ありと判別されるフレームは、暗号化されているフレームである。逆に、このステップＳ１３において、復号化する必要なしと判別されるフレームは、暗号化されていないフレームである。【０１３４】
上記のように、受け取ったフレームが暗号化されているかどうかは、例えば、そのフレームのＴＣＰヘッダを参照することにより判別可能である。【０１３５】
具体的には、暗号化されたフレームの送信元ポート番号には、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）アクセスで４４３番、メール送信で４６５番、メール受信で９９５番という番号が用いられるとなる。一方、未暗号化のフレームの送信元ポート番号には、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）アクセスで８０番、メール送信で２５番、メール受信で１１０番という番号が用いられる。【０１３６】
このように、フレームのヘッダから、そのフレームを復号化する必要があるかどうかを判別することが可能である。このような処理を実行させるには、フレーム解析部Ａ１２に、暗号化フレームと未暗号化フレーとムのポート番号情報が記載された一覧表を持たせれば良い。【０１３７】
また、上記の処理に加えて、テーブルＴ１を参照し、取得したフレームヘッダがテーブルＴ１に登録されているかどうかもチェックする。ここで、フレームヘッダが、テーブルＴ１に登録されているかチェックする際に、両者の送信元アドレスと宛先アドレスとの関係が逆さまになっていることに注意する。【０１３８】
判別の結果、フレームの復号化が不要、または取得したヘッダがテーブルＴ１に登録されているのであれば、フレームをＩＰスタックＡ４に転送する（ステップＳ１４）。また、フレームの復号化が必要、かつ取得したヘッダがテーブルＴ１に登録されていないのであれば、フレームをヘッダ変換部Ａ１３に転送する（ステップＳ１５）。【０１３９】
ここで、テーブルＴ１の登録情報をチェックする理由について説明する。これは、受け取ったフレームの復号化を、中間ドライバＡ１１で実行するのか、それとも中間ドライバＡ１１より上位のＴＣＰ／ＩＰ階層で実行するのかを判断するためである。このテーブルＴ１を参照する必要性を詳細に説明するために、ＰＣ１が複数のＳＳＬモジュールを持っている場合を想定する。例えば、ＰＣ１が、中間ドライバＡ１１中のＳＳＬ  Ａ１６だけでなく、中間ドライバＡ１１より上位のＴＣＰ／ＩＰ階層に別のＳＳＬモジュールを持っている場合、あるＴＣＰセッションのパケットは中間ドライバＡ１１のＳＳＬ  Ａ１６で暗号化および復号化され、また別のＴＣＰセッションのパケットは中間ドライバＡ１１より上位のＴＣＰ／ＩＰ階層のＳＳＬモジュールで暗号化および復号化される。このような場合において、受け取ったパケットをどちらのＳＳＬモジュールで復号化すべきなのかを判断するのに使用されるのが、テーブルＴ１である。テーブルＴ１には、図５のステップＳ４において、中間ドライバより上位のＴＣＰ／ＩＰ階層で暗号化されたパケットのヘッダが登録されているので、テーブルＴ１に登録されているヘッダを参照することにより、到着したパケットを中間ドライバのＳＳＬ  Ａ１６で復号化すべきかどうかを判断することができる。【０１４０】
一方、図７は、ヘッダ変換部Ａ１３からフレームが到着した場合のフレーム解析部Ａ１２の動作フローチャートを示している。まず、到着したフレームのヘッダを取得した後（ステップＳ２２）、そのヘッダを参照して、フレームの宛先端末を判断する（ステップＳ２３）。ここで参照するヘッダとして、ＭＡＣヘッダ、ＩＰヘッダなどが挙げられる。例えば、ＭＡＣヘッダ、またはＩＰヘッダの宛先アドレスを参照することにより、宛先端末を識別可能である。【０１４１】
調査の結果、フレームの宛先がＰＣ１であれば、フレームをＩＰスタックＡ４に転送する（ステップＳ２４）。また、フレームの宛先がＰＣ１以外であれば、フレームをドライバA5に転送する（ステップＳ２５）。【０１４２】
次にヘッダ変換部Ａ１３の機能を説明する。ヘッダ変換部Ａ１３は、フレーム解析部Ａ１２、ＴＣＰ  Ａ１４、およびＴＣＰ  Ａ１７と接続されている。図８、図９はヘッダ変換部A12の処理を詳細に説明するためのフローチャートである。【０１４３】
図８は、フレーム解析部A12からフレームが到着した場合のヘッダ変換部A13の処理を示している。ヘッダ変換部A13は、まず、到着したフレームのヘッダを取得した後（ステップS31）、取得したヘッダがテーブルT2に登録されているかチェックする（ステップS32）。もし、取得したヘッダがテーブルT2に保存されていないなら、ヘッダをテーブルT2に登録する（ステップS35）。また、取得したヘッダがテーブルT2に保存されているなら、フレームからIPヘッダとMACヘッダを削除した後（ステップS33）、フレームの宛先ポート番号を参照して、ＴＣＰ  Ａ１４、もしくはＴＣＰ  Ａ１７にフレームを転送する。図１０（ｂ）は、テーブルT2の格納情報を示している。テーブルT2には、図１０（ｂ）に示されるように、TCP毎にIPアドレスやMACアドレスなどのヘッダが登録されている。テーブルT2に上述のステップS35でヘッダを登録する際の処理例について説明する。例えば、受け取ったパケットの宛先TCPがＴＣＰ  Ａ１４である場合には、図１０（ｂ）において、宛先TCPがＴＣＰ  Ａ１４となっている欄にそのパケットのIPアドレスとMACアドレスを登録する。【０１４４】
一方、図９は、ＴＣＰ  Ａ１４、またはＴＣＰ  Ａ１７からフレームが到着した場合のヘッダ変換部A13の処理を示している。ヘッダ変換部A13は、まず、到着したフレームのヘッダを取得する（ステップS41）。ここで、取得するヘッダとしては、宛先IPアドレス、TCPヘッダなどが挙げられる。このヘッダをキーに用いて、テーブルT2から、到着したフレームに対応するMACヘッダとIPヘッダを取得する（ステップS42）。このように取得したMACヘッダとIPヘッダを入力フレームに挿入した後（ステップS43）、フレームをフレーム解析部A12に送信する（ステップS44）。テーブルT2から上述のステップS42でヘッダを取得する際の処理例について説明する。例えば、受け取ったパケットの送信元TCPがTCP A14である場合、図１０bのテーブルT2において、送信元TCPがTCP A14となっている欄のIPアドレスとMACアドレスを読み出し、受け取ったパケットに挿入する。【０１４５】
次に、ＴＣＰ Ａ１４およびＴＣＰ  Ａ１７の機能を説明する。ＴＣＰ  Ａ１４およびＴＣＰ  Ａ１７は、以下の（１）〜（４）の処理によりデータを一定形式のフォーマットに整えてパケット化し、又はパケットからデータを復元する機能を有する。
（１）ＴＣＰ  Ａ１４およびＴＣＰ  Ａ１７は、ＳＳＬ  Ａ１６もしくは、中継アプリケーションA15からデータを受け取り、パケットの欠落や順序逆転を検知するためのＴＣＰヘッダおよび宛先IPアドレスをデータに付加して、ヘッダ変換部A13に送る。ここで大きなデータの場合は分割（フラグメントとも言う）処理を行う。
（２）ＴＣＰ  Ａ１４およびＴＣＰ  Ａ１７は、ヘッダ変換部A13からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからヘッダをはずし、中継アプリケーションA15に送る。この際、パケットが届いたことを知らせるACKパケットをパケットの送信元に返信する。
（３）上記（２）において、もしパケットの欠落が発生している場合は、ＴＣＰ  Ａ１４およびＴＣＰ  Ａ１７は、再送要求パケットをパケットの送信元に送信する。また、順序逆転やフラグメントが発生している場合には、後から届くパケットを待って、データを復元する。  
（４）ＴＣＰ  Ａ１４およびＴＣＰ  Ａ１７はACKパケットを受け取ると、（１）におけるパケットの送信速度を調整する。【０１４６】
次に、ＳＳＬ  Ａ１６の機能を説明する。ＳＳＬ  Ａ１６は、中継アプリケーションA15から受け取ったデータを、暗号化してから、ＴＣＰ  Ａ１７に転送する機能を有する。また、ＳＳＬ  Ａ１６は、ＴＣＰ  Ａ１７から受け取ったデータを、復号化してから、中継アプリケーションA15に転送する機能を有する。さらに、ＳＳＬ  Ａ１６は、ＳＳＬプロトコルに従い、暗号化に用いる証明書や秘密鍵・公開鍵の情報をＳＳＬ  Ｂ２と交換する機能を有する。SSLを使用するかどうかは、中継アプリケーションA15からの設定により決定され、SSLを使用しない場合は、中継アプリケーションA15から受け取ったデータは暗号化せずにＴＣＰ  Ａ１７に転送され、またＴＣＰ  Ａ１７から受け取ったデータは復号化せずに中継アプリケーションA15に転送される。【０１４７】
次に中継アプリケーションＡ１５の機能を説明する。中継アプリケーションＡ１５は、ＴＣＰ  Ａ１４から到着するデータを、ＴＣＰ  Ａ１６とＴＣＰ  Ｂ３との間のTCPセッション による通信に乗せるために、ＳＳＬ  Ａ１６に転送する機能を有する。図４aには、中継アプリケーションＡ１５がＳＳＬ  Ａ１６と受け渡すデータの形式を示している。また、中継アプリケーションA15は、ＳＳＬ  Ａ１６から到着するデータを、ＴＣＰ  Ａ２とＴＣＰ  Ａ１４との間のTCPセッションによる通信に乗せるために、ＴＣＰ  Ａ１４に転送する機能を有する。【０１４８】
以上の説明により、中間ドライバＡ１１に含まれている各機能ブロックの説明を終了する。【０１４９】
続いて、ドライバＡ５の機能を説明する。ドライバA5は、ＮＩＣ  Ａ６とOSの仲介をするソフトウェアであり、ＮＩＣ  Ａ６からフレームを受け取りOSに送る機能を有し、さらに、OSからフレームを受け取りＮＩＣ  Ａ６に送る機能を有する。【０１５０】
次に、PC１のハードウェアの機能を説明する。ハードウェアとして、PC１はＮＩＣ  Ａ６を備える。ＮＩＣ  Ａ６は、ネットワークインターフェースカード（Network Interface Card）と呼ばれ、イーサネット等のネットワーク用ケーブルを接続するために、コンピュータに挿入するハードウェアである。ケーブルから受け取ったデータを適した電気信号に変換してドライバに送り、また、ドライバから受け取ったデータを適した電気信号に変換してケーブルに送信する機能を有する。【０１５１】
次に、サーバ２の各構成要素の機能を説明する。まず、サーバ２のＣＰＵ内で動作するソフトウェアのうち、ＯＳに含まれない上位層に位置するソフトウェアについて述べる。サーバ２は、これに該当するソフトウェアとして、サーバアプリケーションＢ１を備えている。サーバアプリケーションB1は、クライアントアプリケーションA1と通信を行うアプリケーションである。サーバアプリケーションB1は、所定の処理によって生成されたデータをＴＣＰ  Ｂ２に転送する機能を有する。また、サーバアプリケーションB1は、ＴＣＰ  Ｂ２からデータを受け取ると、受け取ったデータに対して、所定の処理を実行する機能を有する。図４aには、サーバアプリケーションB1がＴＣＰ  Ｂ２と受け渡すデータの形式を示している。サーバアプリケーションB1は、クライアントアプリケーションA1に対応し、WEBサーバソフト、電子メールサーバソフト、TELNETサーバソフト、FTPサーバソフト、会計サーバソフト、ファイル共有サーバソフト、データベースサーバソフト等、各種のアプリケーションが適用可能である。【０１５２】
次に、サーバ２のOSに含まれるソフトウェアの機能を説明する。OSに含まれるソフトウェアとして、サーバ２は、ＳＳＬ  Ｂ２、ＴＣＰ  Ｂ３、ＴＣＰ  Ｂ６、IPルーティングB4、およびIPスタックB5を備えている。これらのモジュールのうち、IPスタックB5以外のソフトウェアの機能は、PC１のソフトウェアと全く同じであるため、説明を省略する。【０１５３】
ＩＰスタックB5は、IPルーティングB4からパケットを受け取り、IPヘッダとMACヘッダをパケットに付加してから、ドライバB7にパケットを転送する機能を有する。図４bは、IPスタックB5がドライバB7と受け渡すデータの形式を示している。また、ＩＰスタックB5は、ドライバB7からパケットを受け取り、MACヘッダをパケットから削除してから、IPルーティングB4にパケットを転送する機能を有する。また、ＩＰスタックB5は、アドレス解決プロトコルを利用してパケットの宛先MACアドレスを調査する機能等も有する。【０１５４】
次に、サーバ２のOSに含まれない下位層に位置するソフトウェアの機能を説明する。サーバ２は、これに該当するソフトウェアとして、ドライバＢ７を備えているが、ドライバB7の機能は、PC１のドライバA5と全く同じであるため、説明を省略する。【０１５５】
次に、サーバ２のハードウェアの機能を説明する。ハードウェアとして、サーバ２はＮＩＣ  Ｂ８を備えているが、ＮＩＣ  Ｂ８の機能は、PC１のＮＩＣ  Ａ６と全く同じであるため、説明を省略する。【０１５６】
次に、ハブ３の各構成要素の機能を説明する。まず、ハブ３のOSに含まれるソフトウェアの機能を説明する。OSに含まれるソフトウェアとして、ハブ３は、ブリッジC1を備えている。ブリッジC1は、ドライバC2から、もしくはドライバC4からフレームを受け取り、宛先MACアドレスを参照して、フレームをドライバC2に、もしくはドライバC4に転送する機能を有する。さらに、フレーム受信時に、送信元MACアドレスを参照し、MACアドレスの学習を行い、どのMACアドレスをもつ端末が、どのNICに接続されているのかを記録する機能を有する。【０１５７】
次に、ハブ３のOSに含まれない下位層のソフトウェアの機能を説明する。これに該当するソフトウェアとして、ハブ３はドライバC2とドライバC4を備えているが、ドライバC2とドライバC4の機能は、PC１のドライバA5と全く同じであるため、説明を省略する。【０１５８】
次に、ハブ３のハードウェアの機能を説明する。ハードウェアとして、ハブ３はＮＩＣ  Ｃ３とＮＩＣ  Ｃ５を備えているが、ＮＩＣ  Ｃ３とＮＩＣ  Ｃ５の機能は、PC１のＮＩＣ  Ａ６と全く同じであるため、説明を省略する。【０１５９】
[動作の説明]
図１１は、図３の各ソフトウェア間で受け渡されるフレームの形式を示している。図３及び図１１を参照して、本実施の形態の動作を以下説明する。【０１６０】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。【０１６１】
PC１のクライアントアプリケーションA1が、サーバ２のサーバアプリケーションB1にデータを送信する場合、クライアントアプリケーションA１はまず、接続P1を通じてＴＣＰ  Ａ２にデータを渡す。図１１aは、ＴＣＰ  Ａ２に渡されるデータ形式を示している。ここで、クライアントアプリケーションA1は、SSLを用いないアプリケーションであり、そのデータには暗号化を施されていないものとする。【０１６２】
ＴＣＰ  Ａ２は、接続P1を通じてクライアントアプリケーションA1からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、サーバ２のＴＣＰ  Ｂ６のポート番号t2を用い、送信元TCPポート番号には、ＴＣＰ  Ａ２のポート番号t1を用いる。また宛先IPアドレスには、サーバ２のIPアドレスi2が設定される。ＴＣＰ  Ａ２は、TCPヘッダと宛先IPアドレスとを付加した後、接続P2を通じてIPルーティングA3にパケットを渡す。【０１６３】
IPルーティングA3は、接続P2を通じてTCP A2からパケットを受け取ると、宛先IPアドレスを参照して、接続P3を通じてIPスタックA4にパケットを送信する。【０１６４】
IPスタックA4は、接続P3を通じてIPルーティングA3からパケットを受け取ると、パケットにIPヘッダ及びMACヘッダを付加する。IPヘッダの宛先IPアドレスには、サーバ２のIPアドレスi2を用い、送信元IPアドレスには、PC1のIPアドレスi1を用いる。また、MACヘッダの宛先MACアドレスには、サーバ２のMACアドレスm2を用い、送信元MACアドレスには、PC１のMACアドレスm1を用いる。IPスタックA4は、パケットにこのようなIPヘッダ、MACヘッダを挿入してフレームを生成後、接続P4を通じてフレーム解析部A12にフレームを渡す。図１１bは、フレーム解析部A12に渡されるデータ形式を示している。【０１６５】
フレーム解析部A12は、図５に示されるように、接続P4を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A12は、このヘッダから、受け取ったデータが暗号化されているか識別する。【０１６６】
例えば、フレームの宛先ＴＣＰポート番号ｔ２から、フレームが暗号化されているかどうかをチェックできる。フレーム解析部Ａ１２では、暗号化フレームと未暗号化フレームとのポート番号情報が記載された一覧表を参照することにより、ポート番号ｔ２が未暗号化フレームの宛先ＴＣＰポート番号であることが分かる。【０１６７】
このような処理を行った後、フレーム解析部A12は、接続P4で渡されたフレームは暗号化されていないと判断し、図５に従い、接続P５を通じてヘッダ変換部A13にこのフレームを渡す。【０１６８】
ヘッダ変換部A13は、図８に示されるように、接続P５を通じてフレーム解析部A12からフレームを受け取ると、宛先TCPに応じて、受け取ったフレームのMACヘッダ、IPヘッダをテーブルT2に登録する。図１０ｂには、テーブルT2の例を示している。ＴＣＰ  Ａ１４のポート番号は、ＴＣＰ  Ｂ６のポート番号ｔ２と一致させているので、接続P5で受け取ったパケットの宛先TCPは、ＴＣＰ  Ａ１４であると判断され、そのMACアドレスとIPアドレスとが図１０ｂのテーブルT2の上段に登録される。受け取ったフレームのヘッダをテーブルT2に登録後、ヘッダ変換部A13は、フレームからMACヘッダとIPヘッダとを外してパケットにした後、宛先ポート番号を参照してＴＣＰ  Ａ１４にパケットを渡す。図１１cは、ＴＣＰ  Ａ１４に渡されるデータ形式を示している。【０１６９】
ＴＣＰ  Ａ１４は、接続P６を通じてヘッダ変換部A14からパケットを受け取ると、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからヘッダをはずし、接続P7を通じて中継アプリケーションA15にパケットを渡す。この際、パケットが届いたことを知らせるACKパケットをＴＣＰ  Ａ２に返信することにより、ＴＣＰ  Ａ２からのTCPセッションを終端している。ＴＣＰ  Ａ１４のポート番号は、ＴＣＰ  Ｂ６のポート番号t2と一致させているので、ＴＣＰ  Ａ２から見ると、あたかもＴＣＰ  Ａ２とＴＣＰ  Ｂ６との間でTCPセッションが確立されているかのように見えるが、実際のTCPセッションはＴＣＰ  Ａ２とＴＣＰ  Ａ１４との間で確立される。図３には、このＴＣＰセッションが破線で示されている（ＴＣＰセッション１）。【０１７０】
上記のＴＣＰ  Ａ１４の動作説明では、既にＴＣＰ  Ａ２とＴＣＰ  Ａ１４との間にＴＣＰセッション１が確立されていることを前提として説明をしている。ここで、少々話が脱線するが、ＴＣＰ  Ａ２とＴＣＰ  Ａ１４の間にＴＣＰセッション１が確立されるまでの動作について簡単に説明する。【０１７１】
ＴＣＰ  Ａ２は、接続Ｐ１を通じてクライアントアプリケーションＡ１からデータを受け取ると、そのデータの送信に先立ち、サーバ２のＴＣＰ  Ｂ６とＴＣＰセッションを確立するためにＴＣＰセッション確立要求フレームを送信するが、ＴＣＰ  Ａ１４では、このＴＣＰセッション確立要求フレームを横取りできるように、例えば、すべてのフレームがＴＣＰ  Ａ１４に吸い込まれるよう全ポート番号で待ち受けておく。ただし、中間ドライバＡ１１の他のＴＣＰモジュールが占有しているポート番号については、ポート番号の競合問題を発生させないために、待ち受けポート番号に含めない。【０１７２】
このような処理を行うことにより、ＴＣＰ  Ａ１４は、ヘッダ変換部Ａ１３を介して、ＴＣＰセッション確立要求フレームを受け取ることができる。ＴＣＰ  Ａ１４は、このＴＣＰセッション確立要求フレームを受け取ると、そのフレームヘッダに記載されている宛先ポート番号ｔ２をＴＣＰ  Ａ１４の待ち受けポート番号として占有し、他のポート番号については開放する。この後、ＴＣＰ  Ａ１４は、ＴＣＰセッションの確立に必要な３Ｗａｙ  Ｈａｎｄｓｈａｋｅ処理をＴＣＰ  Ａ２と行い、ＴＣＰセッション１を確立する。以上のような処理を行うことにより、ＴＣＰ  Ａ２とＴＣＰ  Ａ１４との間にＴＣＰセッション１を確立できることが明らかとなった。【０１７３】
以上、少々話が脱線したが、話を元に戻し、各モジュールの動作の説明を続ける。【０１７４】
中継アプリケーションA7は、接続P7を通じてＴＣＰ  Ａ１４からパケットを受け取ると、パケットを暗号化して盗聴防止を図るために、接続P８を通じてＳＳＬ  Ａ１６にそのまま渡す。【０１７５】
ＳＳＬ  Ａ１６は、接続P8を通じて中継アプリケーションA15からパケットを受け取ると、あらかじめサーバ２のＳＳＬ  Ｂ２との間で取り決められた暗号化方式を使用して、パケットを暗号化する。暗号化完了後、ＳＳＬ  Ａ１６は、接続P9を通じてＴＣＰ  Ａ１７に暗号化されたデータを渡す。図１１dには、ＴＣＰ  Ａ１７に渡されるデータ形式を示している。【０１７６】
ＴＣＰ  Ａ１７は、接続P9を通じてＳＳＬ  Ａ１６から暗号化データを受け取ると、このデータにTCPヘッダと宛先IPアドレスとを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、サーバ２のＴＣＰ  Ｂ３のポート番号t4を用い、送信元TCPポート番号には、ＴＣＰ  Ａ１７のポート番号t3を用いる。ここで、ＴＣＰ  Ｂ３のポート番号t4は、暗号化データを送信する際に明示的に使用されるポート番号である。例えば、暗号化メールを送信する場合には、ＳＭＴＰ  ｏｖｅｒ  ＳＳＬというプロトコルが使用され、その宛先TCPポート番号として465番が用いられる。また、宛先IPアドレスには、サーバ2のIPアドレスi2が設定される。ＴＣＰ  Ａ１７は、TCPヘッダと宛先IPアドレスを付加した後、接続P10を通じてヘッダ変換部A13にパケットを渡す。ＴＣＰ  Ａ１７は、これらの処理によってＴＣＰ  Ｂ３とTCPセッションを確立し、ＴＣＰ  Ｂ３との安定したデータ転送を実現している。図３には、このＴＣＰセッションが点線で示されている（ＴＣＰセッション２）。【０１７７】
上記のＴＣＰ  Ａ１７の動作説明では、既にＴＣＰ  Ａ１７とＴＣＰ  Ｂ３との間にＴＣＰセッション２が確立されていることを前提として、説明をしている。ここで、再び話が脱線するが、ＴＣＰ  Ａ１７とＴＣＰ  Ｂ３の間にＴＣＰセッション２が確立されるまでの動作について、簡単に説明する。【０１７８】
先ほど、ＴＣＰ  Ａ１４がＴＣＰ  Ａ２とＴＣＰセッション１を確立するまでの動作について述べたが、ＴＣＰ  Ａ１４は、ＴＣＰ  Ａ２とＴＣＰセッション１を確立した後、中継アプリケーションＡ１５にサーバ２と暗号化ＴＣＰセッション２を確立するよう命令を送る。この際、ＴＣＰ  Ａ１４は、サーバ２のＩＰアドレスi2とＴＣＰ  Ｂ６のポート番号ｔ２との情報も中継アプリケーションＡ１５に渡す。【０１７９】
中継アプリケーションＡ１５は、ＴＣＰ  Ａ１４から命令を受け取ると、ＴＣＰ  Ａ１４から渡される未暗号用ポート番号ｔ２から暗号化用ポート番号を導出する。この暗号化用ポート番号の導出処理は、アプリケーション毎にその暗号化ポート番号と未暗号化ポート番号とが記載された一覧表を参照することにより、実行可能である。【０１８０】
具体的には、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）の暗号化／未暗号化ポ―ト番号は４４３番／８０番であり、メール送信の暗号化／未暗号化ポート番号は４６５番／２５番であり、メール受信の暗号化／未暗号化ポート番号は９９５番／１１０番などという番号が記載された一覧表を参照する。【０１８１】
中継アプリケーションＡ１５は、上記処理により、未暗号化ポート番号ｔ２に対応する暗号化ポート番号ｔ４を導出した後、サーバ２のＩＰアドレスi2と暗号化ポート番号ｔ４との情報を、ＳＳＬ  Ａ１６を介して、ＴＣＰ  Ａ１７に渡す。【０１８２】
ＴＣＰ  Ａ１７は、ＳＳＬ  Ａ１６を介して、中継アプリケーションＡ１５からＩＰアドレスi2と暗号化ポート番号ｔ４とを受け取ると、サーバ２のＴＣＰ  Ｂ３に対して、暗号用のＴＣＰセッション確立要求フレームを送信する。【０１８３】
もし、サーバ２にＳＳＬに対応したサーバアプリケーションＢ１がインストールされているのであれば、ＴＣＰ  Ｂ３はサーバ２に搭載されているので、ＴＣＰ  Ｂ３とＴＣＰ  Ａ１７との間で、３  Ｗａｙ  Ｈａｎｄｓｈａｋｅ処理を実行することができ、ＴＣＰセッション２を確立することができる。このＴＣＰセッション２が確立された後、ＳＳＬ  Ａ１６とＳＳＬ  Ｂ２との間で、ＴＣＰセッション２を利用して、暗号化セッションの開始に必要な証明書情報や暗号鍵が交換される。以上のような処理を行うことにより、ＴＣＰ  Ａ１７とＴＣＰ  Ｂ３との間にＴＣＰセッション１を確立できることが明らかとなった。即ち、ＴＣＰ  Ａ１７は、TCP  B3のトランスポート層とセッションが確立されたこととなる。【０１８４】
一方、もし、サーバ２にＳＳＬに対応したサーバアプリケーションＢ１がインストールされていなければ、ＴＣＰ  Ｂ３はサーバ２に搭載されておらず、ＴＣＰ  Ａ１７はＴＣＰ  Ｂ３と、３Ｗａｙ  Ｈａｎｄｓｈａｋｅ処理を実行できないので、ＴＣＰセッション２を確立することはできない。このような場合の対処方法として、例えば、以下の２つの対処方法が考えられる。
（１）このようなアプリケーションデータは、ＰＣ１とサーバ２との間で暗号化して送受信することが不可能であり、盗聴される危険性があるため、中間ドライバＡ１１で廃棄してしまう
（２）データが盗聴される危険性があるが、ＳＳＬ  Ａ１６の暗号化機能を使用することなく、データを暗号化せずにサーバ２のＴＣＰ  Ｂ６に送信してしまう。この場合、ＴＣＰ  Ｂ６から送信されたフレームがＴＣＰ  Ａ１７に転送されるように、フレーム解析部Ａ１２の設定を変更するとともに、ＴＣＰ  Ａ１７とＴＣＰ Ｂ６との間でＴＣＰセッション３を確立する必要がある。【０１８５】
上記２つの方法のうち、どちらを採用するかは、セキュリティの運用ポリシー次第である。【０１８６】
以上、サーバ２にＳＳＬに対応したサーバアプリケーションＢ１がインストールされていない場合の動作について説明したが、以下では、これらの動作について特に触れず、あくまでサーバ２にＳＳＬに対応したサーバアプリケーションＢ１がインストールされているものとする。【０１８７】
以上、少々話が脱線したが、話を元に戻し、各モジュールの動作の説明を続ける。【０１８８】
以上の説明から、クライアントアプリケーションA1とサーバアプリケーションB1との間のデータ転送は、ＴＣＰ  Ａ２とＴＣＰ  Ａ１４との間のTCPセッション１と、ＴＣＰ  Ａ１７とＴＣＰ  Ｂ３との間のTCPセッション２との合計２つのTCPセッションによって中継されていることが分かる。このように、中間ドライバA11でTCPセッションを中継することにより、PC１側のＳＳＬ  Ａ１６と、サーバ２側のＳＳＬ  Ｂ２のTCP/IPプロトコル階層を一致させることができる。これにより、PC１側のＳＳＬ  Ａ１６とサーバ側のＳＳＬ  Ｂ２との間で、SSLプロトコルによる通信が可能となり、SSLセッションの開始に必要な証明書情報や暗号化アルゴリズムなどを交換できる。【０１８９】
ヘッダ変換部A13は、図９に示されるように、接続P10を通じてＴＣＰ  Ａ１７からパケットを受け取ると、テーブルT2を参照して、受け取ったパケットに対応するMACヘッダとIPヘッダとを付加する。具体的には、送信元TCPに応じて、受け取ったパケットに対応するMACヘッダ、IPヘッダを付加する。例えば、接続P10で受け取ったパケットの送信元TCPは、ＴＣＰ  Ａ１７であるので、そのMACアドレスとIPアドレスとは、図１０ｂのテーブルT2の上段に登録されている。ヘッダ変換部A13は、パケットにIPヘッダ、MACヘッダを挿入してフレームを生成後、接続P11を通じてフレーム解析部A12にフレームを渡す。図1１eは、フレーム解析部A12に渡されるデータ形式を示している。【０１９０】
フレーム解析部A12は、図７に示されるように、接続P11を通じてヘッダ変換部A13からフレームを受け取ると、そのヘッダを参照する。ここで参照するヘッダとしては、MACヘッダ、IPヘッダなどが挙げられる。フレーム解析部A12は、このヘッダから、フレームの宛先がどの端末であるかを識別する。識別方法の例としては、ヘッダの宛先IPアドレスから、宛先を識別することが考えられる。接続P11で渡されたフレームの宛先IPは、サーバ２のIPアドレスi2となっているので、図７のステップS24に従い、フレーム解析部A12は接続P12を通じてドライバA5にフレームを渡す。【０１９１】
ドライバA5は、接続P12を通じてフレーム解析部A12からフレームを受け取ると、接続P13を通じてＮＩＣ  Ａ６にパケットを渡す。【０１９２】
ＮＩＣ  Ａ６は、接続P13を通じてドライバA5からフレームを受け取ると、接続P14を通じてＮＩＣ  Ｃ３にフレームを渡す。【０１９３】
ＮＩＣ  Ｃ３は、接続P14を通じてＮＩＣ  Ａ６からフレームを受け取ると、接続P15を通じてドライバC2にフレームを渡す。【０１９４】
ドライバは、接続P15を通じてＮＩＣ  Ｃ３からフレームを受け取ると、接続P16を通じてブリッジC1にフレームを渡す。【０１９５】
ブリッジC1は、接続P16を通じてドライバC2からフレームを受け取ると、受け取ったフレームの宛先MACアドレスを参照する。宛先MACアドレスを持つ端末がＮＩＣ  Ｃ５に接続されていることを認識すると、接続P17を通じてドライバC4にフレームを渡す。【０１９６】
ドライバC4は、接続P17を通じてブリッジC1からフレームを受け取ると、接続P18を通じてＮＩＣ  Ｃ５にフレームを渡す。【０１９７】
ＮＩＣ  Ｃ５は、接続P18を通じてドライバC4からフレームを受け取ると、接続P19を通じてＮＩＣ  Ｂ８にフレームを渡す。【０１９８】
ＮＩＣ  Ｂ８は、接続P19を通じてNIC C5からフレームを受け取ると、接続P20を通じてドライバB7にフレームを渡す。【０１９９】
ドライバB7は、接続P20を通じてNIC B8からフレームを受け取ると、接続P21を通じてIPスタックB5にフレームを渡す。【０２００】
IPスタックB5は、接続P21を通じてドライバB7からフレームを受け取ると、フレームからMACヘッダ、IPヘッダを外してパケットを生成後、接続P22を通じてIPルーティングB4にパケットを渡す。【０２０１】
IPルーティングB4は、接続P22を通じてIPスタックB5からパケットを受け取ると、パケットのTCPヘッダを参照する。宛先TCPポート番号から、パケットの宛先がＴＣＰ  Ｂ３であることを認識すると、接続P23を通じてＴＣＰ  Ｂ３に受け取ったパケットを渡す。【０２０２】
ＴＣＰ  Ｂ３は、接続P23を通じてIPルーティングB4からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P24を通じてＳＳＬ  Ｂ２に渡す。この際、パケットが届いたことを知らせるACKパケットをＴＣＰ  Ａ１７に返信する。【０２０３】
ＳＳＬ  Ｂ２は、接続P24を通じてTCP B3からデータを受け取ると、ＰＣ１のＳＳＬ  Ａ１６との間で取り決められた復号化方式を使用して、データを復号化する。ＳＳＬ  Ｂ２は、接続P25を通じてサーバアプリケーションB1に復号化されたデータを渡す。【０２０４】
以上のようにして、クライアントアプリケーションA1から送信されたデータは、暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０２０５】
次に、上記の処理完了後、今度は、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作を説明する。【０２０６】
サーバ２のサーバアプリケーションB1が、PC1のクライアントアプリケーションA1にデータを送信する場合、サーバアプリケーションB１はまず、接続P27を通じてＳＳＬ  Ｂ２にデータを渡す。図１１fは、ＳＳＬ  Ｂ２に渡されるデータ形式を示している。【０２０７】
ＳＳＬ  Ｂ２は、接続P27を通じてサーバアプリケーションB1からデータを受け取ると、データを暗号化した後、接続P28を通じてTCP B3にデータを渡す。図１１gは、ＴＣＰ  Ｂ３に渡されるデータ形式を示している。【０２０８】
ＴＣＰ  Ｂ３は、接続P28を通じてＳＳＬ  Ｂ２からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、PC１のTCP  A17のポート番号t3を用い、送信元TCPポート番号には、ＴＣＰ  Ｂ３のポート番号t4を用いる。また、宛先IPアドレスには、PC１のIPアドレスi1が設定される。ＴＣＰ  Ｂ３は、TCPヘッダを付加した後、接続P29を通じてIPルーティングB4にパケットを渡す。【０２０９】
IPルーティングB4は、接続P29を通じてＴＣＰ  Ｂ３からパケットを受け取ると、宛先IPアドレスを参照して、接続P30を通じてIPスタックB5にパケットを送信する。【０２１０】
IPスタックB5は、接続P30を通じてIPルーティングB4からパケットを受け取ると、パケットにIPヘッダ、MACヘッダを付加してフレームを生成する。IPヘッダの宛先IPアドレスには、PC1のIPアドレスi1を用い、送信元IPアドレスには、サーバ２のIPアドレスi2を用いる。また、MACヘッダの宛先MACアドレスには、PC1のMACアドレスm1を用い、送信元MACアドレスには、サーバ２のMACアドレスm2を用いる。IPスタックB5は、パケットにこのようなIPヘッダ、MACヘッダを挿入してフレームを生成後、接続P31を通じてドライバB7にフレームを渡す。図１１hは、ドライバB7に渡されるデータ形式を示している。【０２１１】
ドライバB7は、接続P31を通じてIPスタックB5からフレームを受け取ると、接続P32を通じてＮＩＣ  Ｂ８にフレームを渡す。【０２１２】
ＮＩＣ  Ｂ８は、接続P32を通じてドライバB7からフレームを受け取ると、接続P33を通じてＮＩＣ  Ｃ５にフレームを渡す。【０２１３】
ＮＩＣ  Ｃ５は、接続P33を通じてＮＩＣ  Ｂ８からフレームを受け取ると、接続P34を通じてドライバC4にフレームを渡す。【０２１４】
ドライバC4は、接続P34を通じてＮＩＣ  Ｃ５からフレームを受け取ると、接続P35を通じてブリッジC1にフレームを渡す。【０２１５】
ブリッジC1は、接続P35を通じてドライバC4からフレームを受け取ると、受け取ったパケットの宛先MACアドレスを参照する。宛先MACアドレスを持つ端末がＮＩＣ  Ｃ３に接続されていることを認識すると、接続P36を通じてドライバC2にフレームを渡す。【０２１６】
ドライバC2は、接続P36を通じてブリッジC2からフレームを受け取ると、接続P37を通じてＮＩＣ  Ｃ３にフレームを渡す。【０２１７】
ＮＩＣ  Ｃ３は、接続P37を通じてドライバC2からフレームを受け取ると、接続P38を通じてＮＩＣ  Ａ６にフレームを渡す。【０２１８】
ＮＩＣ  Ａ６は、接続P38を通じてＮＩＣ  Ｃ３からパケットを受け取ると、接続P39を通じてドライバA5にパケットを渡す。【０２１９】
ドライバA5は、接続P39を通じてＮＩＣ  Ａ６からフレームを受け取ると、接続P40を通じてフレーム解析部A12にフレームを渡す。【０２２０】
フレーム解析部A12は、図６に示されるように、接続P40を通じてドライバA5からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A12は、このヘッダから、受け取ったフレームが暗号化されているか識別する。識別方法の例としては、例えば、構成の説明で述べたように、ヘッダのTCPポート番号から、フレームが暗号化されているかどうか識別する方法が考えられる。例えば、暗号化メールの場合には、ＳＭＴＰ  ｏｖｅｒ  ＳＳＬというプロトコルが使用され、その送信元TCPポート番号として465番が用いられる。このように、送信元TCPポート番号からデータが暗号化されているかどうか識別可能である。また、フレーム解析部A12は、フレームを中間ドライバで復号化するのか、または中間ドライバより上位のTCP/IPプロトコル階層で復号化するのかを識別するために、テーブルT1も同時に参照する。このような一連の処理を経て、フレーム解析部A12は、接続P40で渡されたパケットは中間ドライバで復号化する必要があると判断し、接続P41を通じてヘッダ変換部A13にフレームを渡す。【０２２１】
ヘッダ変換部A13は、図８に示されるように、接続P41を通じてフレーム解析部A12からフレームを受け取ると、宛先TCPに応じて、受け取ったフレームのMACヘッダ、IPヘッダをテーブルT2に登録する。接続P41で受け取ったフレームの宛先TCPは、TCP A17となっているので、そのMACアドレスとIPアドレスは、図１０ｂのテーブルT2の下段に登録される。テーブルT2に登録後、ヘッダ変換部A13は、フレームからMACヘッダとIPヘッダを外してパケット化した後、宛先ポート番号を参照してＴＣＰ  Ａ１７にパケットを渡す。【０２２２】
ＴＣＰ  Ａ１７は、接続P42を通じてヘッダ変換部A13からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P43を通じてＳＳＬ  Ａ１６に渡す。この際、パケットが届いたことを知らせるACKパケットをＴＣＰ  Ｂ３に返信する。【０２２３】
ＳＳＬ  Ａ１６は、接続P43を通じてＴＣＰ  Ａ１７からデータを受け取ると、ＳＳＬ  Ｂ２との間で取り決められた復号化方式を使用して、データを復号化する。ＳＳＬ  Ａ１６は、接続P44を通じて中継アプリケーションA15に復号化されたデータを渡す。【０２２４】
中継アプリケーションA15は、接続P44を通じてＳＳＬ  Ａ１６からデータを受け取ると、クライアントアプリケーションA1にデータを送るために、接続A45を通じてＴＣＰ  Ａ１４にデータを渡す。【０２２５】
ＴＣＰ  Ａ１４は、接続P45を通じて中継アプリケーションA15からデータを受け取ると、デ−タにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、ＴＣＰ  Ａ２のポート番号t1を用い、送信元TCPポート番号には、ＴＣＰ  Ｂ６のポート番号t2を用いる。また、宛先IPアドレスには、PC１のIPアドレスi1が設定される。ＴＣＰ  Ａ１４は、TCPヘッダを付加した後、接続P46を通じてヘッダ変換部A13にパケットを渡す。【０２２６】
ヘッダ変換部A13は、図９に示されるように、接続P46を通じてＴＣＰ  Ａ１４からパケットを受け取ると、テーブルT2を参照して、受け取ったパケットにMACヘッダとIPヘッダを付加してフレームにする。具体的には、送信元TCPに応じて、受け取ったパケットに対応するMACヘッダ、IPヘッダを付加する。例えば、接続P46で受け取ったパケットの送信元TCPは、ＴＣＰ  Ａ１４であるので、そのMACアドレスとIPアドレスは、図１０ｂのテーブルT2の下段に登録されている。ヘッダ変換部A13は、パケットにIPヘッダ、MACヘッダを挿入してフレーム化した後、接続P47を通じてフレーム解析部A12にフレームを渡す。図１１jは、フレーム解析部A12に渡されるデータ形式を示している。【０２２７】
フレーム解析部A12は、図７に示されるように、接続P47を通じてヘッダ変換部A13からフレームを受け取ると、そのヘッダを参照する。ここで参照するヘッダとしては、MACヘッダ、IPヘッダなどが挙げられる。フレーム解析部A12は、このヘッダから、フレームの宛先がどの端末であるかを識別する。識別方法の例としては、ヘッダの宛先IPアドレスから、宛先を識別することが考えられる。接続P47で渡されたフレームの宛先IPは、PC1のIPアドレスi1となっているので、図７のステップS25に従い、フレーム解析部A12は接続P48を通じてIPスタックA4にフレームを渡す。【０２２８】
IPスタックA4は、接続P48を通じてフレーム解析部A12からフレームを受け取ると、フレームからMACヘッダ、IPヘッダを外してパケット化した後、接続P49を通じてIPルーティングA3にパケットを渡す。【０２２９】
IPルーティングA3は、接続P49を通じてIPスタックA4からパケットを受け取ると、パケットのTCPヘッダを参照する。宛先TCPポート番号から、パケットの宛先がＴＣＰ  Ａ２であることを認識すると、接続P50を通じてＴＣＰ  Ａ２に受け取ったパケットを渡す。【０２３０】
ＴＣＰ  Ａ２は、接続P50を通じてIPルーティングA3からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P51を通じてクライアントアプリケーションA1にデータを渡す。この際、パケットが届いたことを知らせるACKパケットをＴＣＰ  Ａ１４に返信する。  
以上のようにして、サーバアプリケーションB1から送信されたデータは、暗号化されるとともに、クライアントアプリケーションA1に確実に届けられることが確かめられた。【０２３１】
以上の説明から、クライアントアプリケーションＡ１とサーバアプリケーションＢ１との間の双方向通信は、必ず暗号化されることが確かめられた。【０２３２】
また、以上の説明では、ＰＣ１とサーバ２との間で暗号化データが交換される構成について説明してきたが、サーバ２に加えて、ＰＣ１が複数のサーバと暗号化データを交換する場合には、ＰＣ１の中間ドライバＡ１１の構成は以下のような構成となる。【０２３３】
中間ドライバＡ１１は、通信相手となるサーバごとに、ヘッダ変換部Ａ１３、ＴＣＰ  Ａ１４、中継アプリケーションＡ１５、ＳＳＬ  Ａ１６、ＴＣＰ  Ａ１７、およびヘッダ変換部Ａ１３を備え、通信相手となるサーバごとに異なるＴＣＰセッション２を確立する。ＰＣ１と各サーバとの間で送受信されるデータは、暗号化されるとともに、ＴＣＰセッション２を介して交換される。これにより、ＰＣ１は、複数のサーバと暗号化データを交換することが可能である。【０２３４】
（効果）
次に、本実施の形態の効果について説明する。【０２３５】
本実施の形態では、中間ドライバA11にTCP中継機能を組み込むことにより、PC１側のSSL A16とサーバ2側のＳＳＬ  Ｂ２とのTCP/IPプロトコル階層を一致させることができるため、PC１側のＳＳＬ  Ａ１６とサーバ２側のＳＳＬ  Ｂ２との間でSSLプロトコルによる通信が可能となった。これにより、サーバ２とPC１との間で、SSLセッションの開始に必要な証明書情報や暗号化アルゴリズムが自動的に交換されるので、PC１側の中間ドライバに暗号鍵を手動設定する手間を省くことができる。【０２３６】
また、サーバ２に関しては、従来と異なり、そのソフトウェアの構成を変更する必要がないので、サーバ２に中間ドライバをインストールするといった手間を省くことができる。【０２３７】
更に、フレーム解析部Ａ１２で、送信データが暗号化されているか否かを判別し、暗号化されていない場合は暗号化するような構成にしているので、送信データは確実に暗号化された状態で送信することができる。【０２３８】
[第２の実施の形態]
[構成の説明]
次に、本発明の第２の発明を実施するための第２の実施の形態について、図面を参照して詳細に説明する。第2の実施の形態のネットワーク構成は、図１の第１の形態のネットワーク構成と同じであり、説明を省略する。【０２３９】
図１２は、本実施の形態の各装置に搭載されるＣＰＵおよびＮＩＣの通信処理を示す図である。図１２を参照すると、第２の実施の形態は、図３に示された第１の実施の形態におけるPC１の構成に加え、ドライバA19と仮想ＮＩＣ  Ａ２０を有する点で、第1の実施の形態と異なる。【０２４０】
ドライバA19の機能は、図３に示されるドライバA5の機能と同じであるため、説明を省略する。【０２４１】
仮想NIC A20は、ドライバA19と中継アプリケーションA15を仲介するソフトウェアである。仮想ＮＩＣ  Ａ２０は、ドライバA19からフレームを受け取り、中継アプリケーションA15に渡す機能を有する。さらに、中継アプリケーションA15からフレームを受け取り、ドライバA19に送る機能を有する。本来、NICはハードウェアで構成されるが、仮想NICはソフトウェアで構成される。仮想NICは、OSからは、あたかもハードウェアであるかのように認識される。【０２４２】
また、図１２を参照すると、第2の実施の形態は、第1の実施の形態において、中間ドライバA11の内部に実装されていたモジュールのうち、OSの機能で代替できるモジュールについては、中間ドライバA11から切り離されている点で、第1の実施の形態と異なる。具体的には、第2の実施の形態は、第1の実施の形態の中間ドライバA11に組み込まれていたＳＳＬ  Ａ１６及びＴＣＰ  Ａ１７を、中間ドライバA11から切り離すとともに、これらのモジュールを通常の端末にOSとして組み込まれている機能で代替している。また、第２の実施の形態は、中継アプリケーションも中間ドライバから切り離すとともに、中間ドライバと中継アプリケーションを仮想NIC経由でループバック接続している。これに伴い、中間ドライバA11の各モジュールの機能は以下のように変化する。【０２４３】
ＴＣＰ  Ａ２１の機能の概要は、図３に示される第１の実施の形態のＴＣＰ  Ａ１４とほぼ同様であるが、そのデータを受け渡す先のモジュールが中継アプリケーションA15ではなく、ドライバA19となっている点で第１の実施の形態のＴＣＰ  Ａ１７と異なる。【０２４４】
中継アプリケーションA22の機能の概要は、図３に示される第１の実施の形態の中継アプリケーションA15とほぼ同様であるが、そのデータを受け渡す先のモジュールがTCP A14ではなく、仮想NIC A20となっている点で第１の実施の形態の中継アプリケーションA15と異なる。【０２４５】
TCP A24の機能の概要は、図３に示される第１の実施の形態のTCP A17とほぼ同様であるが、そのデータを受け渡す先のモジュールがヘッダ変換部A13ではなく、IPルーティングA3となっている点で第１の実施の形態のTCP A17と異なる。また、TCP A24は、中間ドライバA１１ではなく、OS中に組み込まれている点で第１の実施の形態のTCP A17と異なる。【０２４６】
SSL A23の機能の概要は、図３に示される第１の実施の形態のSSL A16とほぼ同様であるが、中間ドライバA１１ではなく、OS中に組み込まれている点で第１の実施の形態のSSL A16と異なる。【０２４７】
次に、フレーム解析部A18の機能を説明する。図１３と図１４は、フレーム解析部A18の処理を詳細に説明するための動作フローチャートである。図１３は、IPスタックA4からフレームが到着した場合のフレーム解析部A18の動作フローチャートを示している。フレーム解析部A18は、フレームのヘッダをテーブルT1に登録する処理（図５のステップS4）を省いている点で、第1の実施の形態のフレーム解析部A12と異なる。他の処理は、図５と同一であるため、説明を省略する。【０２４８】
一方、図１４は、ドライバA5からフレームが到着した場合のフレーム解析部A18の動作フローチャートを示している。フレーム解析部A18は、到着した全てのフレームをIPスタックA4に転送している点（ステップS14）で、第1の実施の形態のフレーム解析部A12と異なる。【０２４９】
また、ヘッダ変換部A13からフレームが到着した場合のフレーム解析部A18の動作フローチャートは、第1の実施の形態のフレーム解析部A12と全く同じであり、図７を用いて既に説明されているので、説明を省略する。【０２５０】
図１２に示される構成要素のうち、上述の構成要素以外のブロックの機能は、図３に示される第１の実施の形態と全く同じため、説明を省略する。【０２５１】
[動作の説明]
図１２を参照して、本実施の形態の動作を以下説明する。図３に示される第1の実施の形態と異なる点は、PC1の動作だけであるので、PC1の動作に限定して説明する。【０２５２】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P3までの動作は、第1の実施の形態と同じため、動作の説明は接続P4の時点から開始する。【０２５３】
フレーム解析部A18は、図１３に示されるように、接続P4を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A12は、このヘッダから、受け取ったデータが暗号化されているか識別する。フレーム解析部A18は、接続P4で渡されたフレームは暗号化されていないと判断し、接続P5を通じてヘッダ変換部A13にフレームを渡す。【０２５４】
ヘッダ変換部A13は、図８に示されるように、接続P５を通じてフレーム解析部A18からフレームを受け取ると、宛先TCPに応じて、受け取ったフレームのMACヘッダ、IPヘッダをテーブルT2に登録する。図１０ｂには、テーブルT2の例を示している。ＴＣＰ  Ａ２１のポート番号は、ＴＣＰ  Ｂ６のポート番号ｔ２と一致させているので、接続P5で受け取ったフレームの宛先TCPは、TCP A２１であると判断され、そのMACアドレスとIPアドレスが図１０ｂのテーブルT2の上段に登録される。受け取ったフレームのヘッダをテーブルT2に登録後、ヘッダ変換部A13は、フレームからMACヘッダとIPヘッダを外してパケットにした後、宛先ポート番号を参照してTCP A２１にパケットを渡す。図１１cは、TCP A２１に渡されるデータ形式を示している。【０２５５】
TCP A21は、接続P６を通じてヘッダ変換部A13からパケットを受け取ると、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからヘッダをはずし、接続P55を通じてドライバA19にデータを渡す。この際、パケットが届いたことを知らせるACKパケットをTCP A2に返信し、TCP A2からのTCPセッションを終端している。TCP A21のTCPポート番号は、TCP B6のTCPポート番号t2と一致させているので、TCP A2から見ると、あたかもTCP A2とTCP B6の間でTCPセッションが確立されているかのように見えるが、実際のTCPセッションはTCP A2とTCP A21の間で確立される。図１２には、このＴＣＰセッションが破線で示されている。【０２５６】
ドライバA19は、接続P55を通じてTCP A21からパケットを受け取ると、接続P56を通じて仮想NIC A20にパケットを渡す。【０２５７】
仮想NIC A20は、接続P56を通じてドライバA19からパケットを受け取ると、接続P57を通じて中継アプリケーションA22にパケットを渡す。【０２５８】
中継アプリケーションA22は、接続P57を通じて仮想NIC A20からデータを受け取ると、データを暗号化して盗聴防止を図るために、接続P58を通じてSSL A23にデータを渡す。【０２５９】
SSL A23は、接続P58を通じて中継アプリケーションA22からデータを受け取ると、あらかじめサーバ２のSSL B2との間で取り決められた暗号化方式を使用して、データを暗号化する。暗号化完了後、SSL A23は、接続P59を通じてTCP A24に暗号化されたデータを渡す。図１１dには、TCP A24に渡されるデータ形式を示している。【０２６０】
TCP A24は、接続P60を通じてSSL A23からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、サーバ２のTCP B3のポート番号t4を用い、送信元TCPポート番号には、TCP A24のポート番号t3を用いる。ここで、TCP B3のポート番号t4は、暗号化データを送信する際に明示的に使用されるポート番号である。例えば、暗号化メールを送信する場合には、SMTP over SSLというプロトコルが使用され、その宛先TCPポート番号として465番が用いられる。また、宛先IPアドレスには、サーバ2のIPアドレスi2が設定される。TCP A24は、TCPヘッダと宛先IPアドレスを付加した後、接続P60を通じてIPルーティングA3にパケットを渡す。TCP A24は、これらの処理によってTCP B3とTCPセッションを確立し、TCP B3との安定したデータ転送を実現している。図１２には、このＴＣＰセッションが点線で示されている。【０２６１】
以上の説明から、クライアントアプリケーションA1とサーバアプリケーションB1の間のデータ転送は、TCP A2とTCP A21の間のTCPセッション１と、TCP A24とTCP B3の間のTCPセッション２と、の合計２つのTCPセッションによって中継されていることが分かる。このように、中間ドライバA11でTCPセッションを中継してやると、PC１側のSSL A23と、サーバ２側のSSL B2のTCP/IPプロトコル階層を一致させることができる。これにより、PC１側のSSL A23とサーバ側のSSL B2との間で、SSLプロトコルによる通信が可能となり、SSLセッションの開始に必要な証明書情報や暗号化アルゴリズムなどを交換できる。【０２６２】
IPルーティングA3は、接続P60を通じてTCP A24からパケットを受け取ると、宛先IPアドレスを参照して、接続P61を通じてIPスタックA4にパケットを送信する。【０２６３】
IPスタックA4は、接続P61を通じてIPルーティングA3からパケットを受け取ると、パケットにIPヘッダ、MACヘッダを付加してフレームを生成する。IPヘッダの宛先IPアドレスには、サーバ２のIPアドレスi2を用い、送信元IPアドレスには、PC1のIPアドレスi1を用いる。また、MACヘッダの宛先MACアドレスには、サーバ２のMACアドレスm2を用い、送信元MACアドレスには、PC１のMACアドレスm1を用いる。IPスタックA4は、パケットにこのようなIPヘッダ、MACヘッダを挿入してフレームを生成した後、接続P62を通じてフレーム解析部A18にフレームを渡す。図１１eは、フレーム解析部A18に渡されるデータ形式を示している。【０２６４】
フレーム解析部A18は、図１３に示されるように、接続P62を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A18は、このヘッダから、受け取ったデータが暗号化されているか識別する。フレーム解析部A18は、接続P62で渡されたフレームは暗号化されていると判断し、接続P12を通じてドライバA5にフレームを渡す。【０２６５】
以降の動作は、図３の第1の実施例と全く同じため、説明を省略する。以上のようにして、クライアントアプリケーションA1から送信されたデータは、暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０２６６】
次に、上記の処理完了後、今度は、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作を説明する。ただし、図３に示される第1の実施の形態と異なる点は、PC1の動作だけであるので、PC1の動作に限定して説明する。したがって、動作の説明は、サーバ2のサーバアプリケーションB1から送信されたデータが、PC１のNIC A6まで届けられた接続P39の時点から開始する。【０２６７】
ドライバ A5は、接続P39を通じてNIC A6からフレームを受け取ると、接続P40を通じてフレーム解析部A18にフレームを渡す。【０２６８】
フレーム解析部A18は、図１４に示されるように、接続P40を通じてドライバA5からフレームを受け取ると、受け取ったフレームを、そのまま接続P63を通じてIPスタックA4に渡す。【０２６９】
IPスタックA4は、接続P63を通じてフレーム解析部A18からフレームを受け取ると、フレームからMACヘッダ、IPヘッダを外してパケットにした後、接続P64を通じてIPルーティングA3にパケットを渡す。【０２７０】
IPルーティングA3は、接続P64を通じてIPスタックA4からパケットを受け取ると、パケットのTCPヘッダを参照する。宛先TCPポート番号から、パケットの宛先がTCP A24であることを認識すると、接続P65を通じてTCP A24に受け取ったパケットを渡す。【０２７１】
TCP A24は、接続P65を通じてIPルーティングA3からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P66を通じてSSL A23にデータを渡す。この際、パケットが届いたことを知らせるACKパケットをTCP B3に返信する（ＴＣＰセッション２）。【０２７２】
SSL A23は、接続P66を通じてTCP A24からデータを受け取ると、サーバ２のSSL B2との間で取り決められた復号化方式を使用して、データを復号化する。SSL A23は、接続P67を通じて中継アプリケーションA22に復号化されたデータを渡す。【０２７３】
中継アプリケーションA22は、接続P67を通じてSSL A23からデータを受け取ると、クライアントアプリケーションA1にデータを送るために、接続A68を通じて仮想NIC A20にデータを渡す。【０２７４】
仮想NIC A20は、接続P68を通じて中継アプリケーションA22からパケットを受け取ると、接続P69を通じてドライバA19にパケットを渡す。【０２７５】
ドライバA19は、接続P69を通じて仮想NIC A20からパケットを受け取ると、接続P70を通じてTCP A21にパケットを渡す。【０２７６】
TCP A21は、接続P70を通じてドライバA19からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、TCP A2のポート番号t1を用い、送信元TCPポート番号には、TCP B6のポート番号t2を用いる。また、宛先IPアドレスには、PC１のIPアドレスi1が設定される。TCP A21は、TCPヘッダを付加した後、接続P46を通じてヘッダ変換部A13にパケットを渡す（ＴＣＰセッション１）。【０２７７】
ヘッダ変換部A13は、図９に示されるように、接続P46を通じてTCP A21からパケットを受け取ると、テーブルT2を参照して、受け取ったパケットに対応するMACヘッダとIPヘッダとを付加してフレームにする。具体的には、送信元TCPに応じて、受け取ったパケットにMACヘッダ、IPヘッダを付加する。例えば、接続P46で受け取ったパケットの送信元TCPは、TCP A21であるので、そのMACアドレスとIPアドレスは、図１０ｂのテーブルT2の下段に登録されている。ヘッダ変換部A13は、パケットにIPヘッダ、MACヘッダを挿入した後、接続P47を通じてフレーム解析部A18にフレームを渡す。図１１jは、フレーム解析部A18に渡されるデータ形式を示している。【０２７８】
以降の動作は、図３の第1の実施例と全く同じため、説明を省略する。【０２７９】
以上のようにして、サーバアプリケーションB1から送信されたデータは、暗号化されるとともに、クライアントアプリケーションA1に確実に届けられることが確かめられた。【０２８０】
次に、本実施の形態の効果について説明する。【０２８１】
本実施の形態は、第1の実施の形態の効果に加えて、以下のような効果を持つ。【０２８２】
本実施の形態では、第1の実施の形態において、中間ドライバＡ１１の内部に組み込まれていたＳＳＬ  Ａ１６の機能を、OSに既に組み込まれているＳＳＬ  Ａ２３の機能で代替できるように、暗号化が必要なフレームを中間ドライバＡ１１からＯＳにループバックしてやることにより、ソフトウェア開発者が中間ドライバにＳＳＬ  Ａ１６を実装する手間を排除した。これにより、ソフトウェア開発者にかかる負荷を減らし、開発の手間を減らすことが可能となる。【０２８３】
[第３の実施の形態]
[構成の説明]
次に、本発明の第2の発明を実施するための第3の実施の形態について、図面を参照して詳細に説明する。第3の実施の形態のネットワーク構成は、図１の第１の形態のネットワーク構成と同じであり、説明を省略する。【０２８４】
図１５は、本実施の形態の各装置に搭載されるＣＰＵおよびＮＩＣの通信処理を示す図である。図１５を参照すると、第3の実施の形態は、図１２に示された第2の実施の形態におけるPC１の構成のうち、ドライバA19と仮想NIC A20を排除するとともに、TCP A25と中継アプリケーションA26を直接ループバック接続している点で、第2の実施の形態と異なる。これに伴い、各モジュールの機能は以下のように変化する。【０２８５】
TCP A25の機能の概要は、図１２に示される第2の実施の形態のTCP A21とほぼ同様であるが、そのデータを受け渡す先のモジュールがドライバA19ではなく、中継アプリケーションA26となっている点で第2の実施の形態のTCP A21と異なる。【０２８６】
中継アプリケーションA26の機能の概要は、図１２に示される第2の実施の形態の中継アプリケーションA22とほぼ同様であるが、そのデータを受け渡す先のモジュールが仮想NICA20ではなく、TCP A25となっている点で第2の実施の形態の中継アプリケーションA22と異なる。【０２８７】
図１５に示される構成要素のうち、上述の構成要素以外のブロックの機能は、図１２に示される第２の実施の形態と全く同じため、説明を省略する。【０２８８】
[動作の説明]
図１５を参照して、本実施の形態の動作を以下説明する。図１２に示される第2の実施の形態と異なる点は、PC1の動作だけであるので、PC1の動作に限定して説明する。【０２８９】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P5までの動作は、第2の実施の形態と同じため、動作の説明は接続P6の時点から開始する。【０２９０】
TCP A25は、接続P６を通じてヘッダ変換部A13からパケットを受け取ると、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからヘッダをはずし、接続P71を通じて中継アプリケーションA26にデータを渡す。この際、パケットが届いたことを知らせるACKパケットをTCP A2に返信し、TCP A2からのTCPセッションを終端している。TCP A25のTCPポート番号は、TCP B6のTCPポート番号t2と一致させているので、TCP A2から見ると、あたかもTCP A2とTCP B6の間でTCPセッションが確立されているかのように見えるが、実際のTCPセッションはTCP A2とTCP A25の間で確立されている。図１５には、このＴＣＰセッションが破線で示されている（ＴＣＰセッション１）。【０２９１】
中継アプリケーションA26は、接続P71を通じてTCP A25からデータを受け取ると、データを暗号化して盗聴防止を図るために、接続P58を通じてSSL A23にデータを渡す。【０２９２】
以降の動作は、図１２の第2の実施例と全く同じため、説明を省略する。【０２９３】
以上のようにして、クライアントアプリケーションA1から送信されたデータは、暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０２９４】
次に、上記の処理完了後、今度は、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作を説明する。ただし、図１２に示される第2の実施の形態と異なる点は、PC1側の中継アプリケーションA26 とTCP A25の動作だけであるので、そこに限定して説明する。したがって、動作の説明は、サーバ2のサーバアプリケーションB1から送信されたデータが、PC１の中継アプリケーションA26まで届けられた接続P67の時点から開始する。【０２９５】
中継アプリケーションA26は、接続P67を通じてSSL A23からデータを受け取ると、クライアントアプリケーションA1にデータを送るために、接続P72を通じてTCP A25にデータを渡す。【０２９６】
TCP A25は、接続P72を通じて中継アプリケーションA26からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、TCP A2のポート番号t1を用い、送信元TCPポート番号には、TCP B6のポート番号t2を用いる。また、宛先IPアドレスには、PC１のIPアドレスi1が設定される。TCP A25は、TCPヘッダを付加した後、接続P46を通じてヘッダ変換部A13にパケットを渡す（ＴＣＰセッション１）。【０２９７】
以降の動作は、図１２の第2の実施例と全く同じため、説明を省略する。【０２９８】
以上のようにして、サーバアプリケーションB1から送信されたデータは、暗号化されるとともに、クライアントアプリケーションA1に確実に届けられることが確かめられた。【０２９９】
（効果）
次に、本実施の形態の効果について説明する。【０３００】
本実施の形態は、第2の実施の形態の効果に加えて、以下のような効果を持つ。【０３０１】
本実施の形態では、第2の実施の形態において、PC1に組み込まれていたドライバ A19と仮想NIC A20を排除できるように、TCP A25と中継アプリケーションA26の間でループバック処理を行い、ソフトウェア開発者がこれらのモジュールを開発する手間を省いた。これにより、ソフトウェア開発者にかかる負荷を減らし、開発の手間を減らすことが可能となる。【０３０２】
また、第2の実施の形態では、PC1において、仮想NIC A20とNIC A6とがブリッジ接続されると、セキュリティレベルが低下してしまうという危険性があったが、本実施の形態では、仮想NIC A20をそもそも排除しているため、ブリッジ接続が不可能であり、セキュリティ対策を講じる手間を減らすことも可能である。【０３０３】
[第４の実施の形態]
[構成の説明]
次に、本発明の第2の発明を実施するための第４の実施の形態について、図面を参照して詳細に説明する。第4の実施の形態のネットワーク構成は、図１の第１の形態のネットワーク構成と同じであり、説明を省略する。【０３０４】
図１６は、本実施の形態の各装置に搭載されるＣＰＵとＮＩＣの通信処理を示す図である。図１６を参照すると、第4の実施の形態は、図１５に示された第3の実施の形態におけるPC１の構成のうち、中間ドライバA11に組み込まれていたTCP A14を、中間ドライバA11から切り離すとともに、このモジュールをOSの機能で代替している点で異なる。これに伴い、各モジュールの機能は以下のように変化する。【０３０５】
TCP A29の機能の概要は、図１５に示される第3の実施の形態のTCP A25とほぼ同様であるが、そのデータを受け渡す先のモジュールがヘッダ変換部A13ではなく、IPルーティングA3となっている点で第3の実施の形態のTCP A25と異なる。また、TCP A29は、中間ドライバＡ１１ではなく、OS中に組み込まれている点で第3の実施の形態のTCP A25と異なる。【０３０６】
次に、ヘッダ変換部A27の機能を説明する。ヘッダ変換部A27は、フレーム解析部A18と接続されている。図１７は、ヘッダ変換部A27の処理を詳細に説明するためのフローチャートである。ヘッダ変換部A27は、まず、到着したフレームのヘッダを取得した後（ステップS31）、そのヘッダに記載されているMACアドレスおよびIPアドレスの送信元と宛先の関係を逆転させる（ステップS38）。最後に、ヘッダ変換部A27は、各アドレスの関係が入れ替わったフレームを、フレーム解析部A18に送信する（ステップS39）。【０３０７】
図１６に示される構成要素のうち、上述の構成要素以外のブロックの機能は、図１５に示される第３の実施の形態と全く同じため、説明を省略する。【０３０８】
[動作の説明]
図１６を参照して、本実施の形態の動作を以下説明する。図１５に示される第3の実施の形態と異なる点は、PC1側のヘッダ変換部Ａ２７とTCP A14の動作だけであるので、そこに限定して説明する。【０３０９】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P4までの動作は、第3の実施の形態と同じため、動作の説明は接続P5の時点から開始する。【０３１０】
ヘッダ変換部A27は、図１７に示されるように、接続P5を通じてフレーム解析部A18からパケットを受け取ると、受け取ったフレームのヘッダを取得した後、そのMACアドレスとIPアドレスに関して、送信元と宛先の関係を逆転させる。図１８には、その例を示している。例えば、図１８aがヘッダ変換部A27に入力されたフレームであるとすると、ヘッダ変換部A27から出力されるフレームは、図１８bのように、その送信元アドレスと宛先アドレスの関係が入れ替えられたものとなる。ヘッダ変換部A27は、フレームのヘッダにこのような変換を施した後、接続P73を通じてフレーム解析部A18にフレームを送信する。【０３１１】
フレーム解析部A18は、図７に示されるように、接続P73を通じてヘッダ変換部A27からフレームを受け取ると、そのヘッダを参照する。ここで参照するヘッダとしては、MACヘッダ、IPヘッダなどが挙げられる。フレーム解析部A18は、このヘッダから、フレームの宛先がどの端末であるかを識別する。接続P73で渡されたフレームの宛先IPは、PC1のIPアドレスi1となっているので、図７のステップS25に従い、フレーム解析部A18は接続P74を通じてIPスタックA4にフレームを渡す。【０３１２】
IPスタックA4は、接続P74を通じてフレーム解析部A18からパケットを受け取ると、パケットからMACヘッダ、IPヘッダを外してパケットにした後、接続P75を通じてIPルーティングA3にパケットを渡す。【０３１３】
IPルーティングA3は、接続P75を通じてIPスタックA4からパケットを受け取ると、パケットのTCPヘッダを参照する。宛先TCPポート番号から、パケットの宛先がTCP A29であることを認識すると、接続P76を通じてTCP A29に受け取ったパケットを渡す。【０３１４】
TCP A29は、接続P76を通じてIPルーティングA3からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P71を通じて中継アプリケーションA26にデータを渡す。この際、パケットが届いたことを知らせるACKパケットをTCP A2に返信し、TCP A2からのTCPセッションを終端している。TCP A29のTCPポート番号は、TCP B6のTCPポート番号t2と一致させているので、TCP A2から見ると、あたかもTCP A2とTCP B6の間でTCPセッションが確立されているかのように見えるが、実際のTCPセッションはTCP A2とTCP A29の間で確立される。図１６には、このＴＣＰセッションが破線でしめされている（ＴＣＰセッション１）。【０３１５】
以降の動作は、図１５の第3の実施例と全く同じため、説明を省略する。【０３１６】
以上のようにして、クライアントアプリケーションＡ1から送信されたデータは、暗号化されるとともに、サーバアプリケーションＢ1に確実に届けられることが確かめられた。【０３１７】
次に、上記の処理完了後、今度は、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作を説明する。ただし、図１５に示される第3の実施の形態と異なる点は、PC1側のTCP A29 とヘッダ変換部A27との動作だけであるので、そこに限定して説明する。したがって、動作の説明は、サーバ2のサーバアプリケーションB1から送信されたデータが、PC１の中継アプリケーションA26まで届けられた接続P67の時点から開始する。【０３１８】
中継アプリケーションA26は、接続P67を通じてSSL A23からデータを受け取ると、クライアントアプリケーションA1にデータを送るために、接続P72を通じてTCP A29にデータを渡す。【０３１９】
TCP A29は、接続P72を通じて中継アプリケーションA26からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、TCP A2のポート番号t1を用い、送信元TCPポート番号には、TCP B6のポート番号t2を用いる。また、宛先IPアドレスには、サーバ2のIPアドレスi2が設定される。TCP A29は、TCPヘッダを付加した後、接続P79を通じてIPルーティングA3にパケットを渡す（ＴＣＰセッション１）。【０３２０】
IPルーティングA3は、接続P79を通じてTCP A29からパケットを受け取ると、宛先IPアドレスを参照して、接続P80を通じてIPスタックA4にパケットを送信する。【０３２１】
IPスタックA4は、接続P80を通じてIPルーティングA3からパケットを受け取ると、パケットにIPヘッダ、MACヘッダを付加してフレームを生成する。IPヘッダの宛先IPアドレスには、サーバ２のIPアドレスi2を用い、送信元IPアドレスには、PC1のIPアドレスi1を用いる。また、MACヘッダの宛先MACアドレスには、サーバ２のMACアドレスm2を用い、送信元MACアドレスには、PC１のMACアドレスm1を用いる。IPスタックA4は、パケットにこのようなIPヘッダ、MACヘッダを挿入した後、接続P81を通じてフレーム解析部A18にフレームを渡す。図１８cは、フレーム解析部A18に渡されるデータ形式を示している。【０３２２】
フレーム解析部A18は、図１３に示されるように、接続P81を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A18は、このヘッダから、受け取ったデータが暗号化されているか識別する。フレーム解析部A18は、接続P81で渡されたフレームは暗号化されていると判断し、接続P82を通じてヘッダ変換部A27にフレームを渡す。【０３２３】
ヘッダ変換部A27は、図１７に示されるように、接続P82を通じてフレーム解析部A18からフレームを受け取ると、受け取ったフレームのヘッダを取得し、そこに記載されているMACアドレスおよびIPアドレスの送信元と宛先の関係を逆転させる。例えば、図１８cを入力フレームとすると、ヘッダ変換部A27から出力されるフレームは、図１８dのように、そのMACアドレスとIPアドレスが送信元アドレスと宛先アドレスの関係が逆転したものとなる。ヘッダ変換部A27は、フレームのヘッダにこのような変換を施した後、接続P47を通じてフレーム解析部A18にフレームを送信する。【０３２４】
以降の動作は、図１５の第3の実施例と全く同じため、説明を省略する。【０３２５】
以上のようにして、サーバアプリケーションB1から送信されたデータは、暗号化されるとともに、クライアントアプリケーションA1に確実に届けられることが確かめられた。【０３２６】
（効果）
次に、本実施の形態の効果について説明する。【０３２７】
本実施の形態は、第3の実施の形態の効果に加えて、以下のような効果を持つ。【０３２８】
本実施の形態では、第3の実施の形態において、中間ドライバA11の内部に組み込まれていたTCP A14の機能を、OSに既に組み込まれているＴＣＰ  Ａ２９の機能で代替できるように、中間ドライバで暗号化が必要なフレームの送信元アドレスと宛先アドレスを入れ替えてやることにより、ソフトウェア開発者が中間ドライバにTCP A14を実装する手間を排除した。これにより、ソフトウェア開発者にかかる負荷を減らし、開発の手間を減らすことが可能となる。【０３２９】
[第５の実施の形態]
[構成の説明]
次に、本発明の第３の発明を実施するための第5の実施の形態について、図面を参照して詳細に説明する。図１９は、第5の実施の形態のネットワーク構成を示す図であり、PC1と、サーバ２と、ハブ３と、ゲートウェイ４とを備えた構成である。【０３３０】
PC1は、ハブ３とネットワーク５を介して接続されている。ここで、ネットワーク5とは、LAN（Local Area Network）、WAN（Wide Area Network）、およびインターネット等、本技術分野の当業者がネットワークと聞いて想像しうるものとする。PC１は、ネットワーク5からフレームを受け取るとともに、受け取ったフレームに対して所望の処理を行う。また、PC１は、PC１の内部処理により生成されたフレームをネットワーク5に送信する。【０３３１】
サーバ２およびゲートウェイ４は、ハブ３と接続され、ハブ３からフレームを受け取るとともに、受け取ったフレームに対して所望の処理を行う。また、サーバ２およびゲートウェイ４は、サーバ２の内部処理により生成されたフレームをハブ３に送信する。【０３３２】
ハブ３は、ネットワーク5とゲートウェイ４とサーバ２に接続されている。ハブ３は、ネットワーク５、ゲートウェイ４、およびサーバ２からフレームを受け取ると、受け取ったフレームを解析し、その解析結果に基づいて適切なポートにフレームに転送する。【０３３３】
図２０は、本実施の形態の各装置に搭載されるＣＰＵおよびＮＩＣの通信処理を示す図である。図２０を参照すると、第5の実施の形態のＰＣ１の構成は、図３に示された第1の実施の形態におけるPC１の構成と比較して、中間ドライバA11のブロック構成が異なっており、図３の中間ドライバA11から、ヘッダ変換部A13およびTCP A17が取り除かれている。これに伴い、各モジュールの機能は以下のように変化する。【０３３４】
中継アプリケーションA31の機能の概要は、図３に示される第1の実施の形態の中継アプリケーションA15とほぼ同様であるが、そのデータを受け渡す先のモジュールがTCP A17ではなく、フレーム解析部A30となっている点で第1の実施の形態の中継アプリケーションA15と異なる。【０３３５】
次に、フレーム解析部A30の機能を説明する。フレーム解析部A30は、IPスタックA4、ヘッダ変換部 A33、および中継アプリケーションA31と接続されている。図２１、図２２、図２３、および図２４は、フレーム解析部A30 の処理を詳細に説明するための動作フローチャートである。【０３３６】
図２１は、IPスタックA4からフレームが到着した場合のフレーム解析部A30の動作フローチャートを示している。図２１は、図５のステップS6を、ステップS8で置き換えている点で図５と異なる。他の処理は、図５と同一であるため、説明を省略する。【０３３７】
一方、図２２は、ドライバA5からフレームが到着した場合のフレーム解析部A30の動作フローチャートを示している。図２２は、図６のステップS15を、ステップS17で置き換えている点で図６と異なる。他の処理は図６と同一であるため、説明を省略する。【０３３８】
一方、図２３は、ヘッダ変換部 A33からフレームが到着した場合のフレーム解析部A30の動作フローチャートを示している。図２３に示されるように、フレーム解析部A30は、ヘッダ変換部Ａ３３から受け取ったフレームをドライバA5に送信する（ステップS42）。【０３３９】
一方、図２４は、中継アプリケーションA31からフレームが到着した場合のフレーム解析部A30の動作を示している。フレーム解析部A30は、中継アプリケーションＡ３１から受け取ったフレームをIPスタックA4に送信する（ステップS52）。【０３４０】
次に、ヘッダ変換部A33の機能を説明する。ヘッダ変換部A33は、フレーム解析部A30とTCP A14と接続されている。図２５と図２６は、ヘッダ変換部A33 の処理を詳細に説明するための動作フローチャートである。図２５は、フレーム解析部A30からフレームが到着した場合のヘッダ変換部A33の動作フローチャートを示している。ヘッダ変換部A33は、まず、フレーム解析部Ａ３０から受け取ったフレームのMACヘッダとIPヘッダを削除した後（ステップS33）、フレームをTCP A14に送信する（ステップS34）。【０３４１】
一方、図２６は、TCP A14からフレームが到着した場合のヘッダ変換部A33の動作フローチャートを示している。図２６は、図９のステップS42を、ステップS46で置き換えている点で図９と異なる。ステップS46では、ＴＣＰ  Ａ１４から受け取ったフレームに対応するMACヘッダとIPヘッダを取得する処理を行う。図２６の他の処理は、図９と同一であるため、説明を省略する。【０３４２】
次に、図２０に示されるゲートウェイ４の各構成要素の機能を説明する。まず、ゲートウェイ４のＣＰＵ内で動作するソフトウェアのうち、ＯＳに含まれない上位層に位置するソフトウェアについて述べる。ゲートウェイ４は、これに該当するソフトウェアとして、中継サーバアプリケーションD1を備えている。【０３４３】
中継サーバアプリケーション D1は、SSL D2から到着するデータを、フレームとして仮想NIC D10に転送する機能を有する。また、中継サーバアプリケーション D1は、仮想NIC D10から到着するデータを、TCP A14とTCP D3との間のTCPセッションによる通信に乗せるために、SSL D2に転送する機能を有する。【０３４４】
次に、ゲートウェイ４のOSに含まれるソフトウェアの機能を説明する。OSに含まれるソフトウェアとして、ゲートウェイ４は、SSL D2、TCP D3、IPルーティングD4、IPスタックD5、およびブリッジD6を備えている。これらのソフトウェアの機能は、図３のサーバ2のモジュールと全く同じであるため、説明を省略する。【０３４５】
次に、ゲートウェイ４のOSに含まれない下位層に位置するソフトウェアの機能を説明する。ゲートウェイ４は、これに該当するソフトウェアとして、ドライバ D7とドライバD9を備えているが、これらのソフトウェアの機能は、図３のサーバ2のドライバB7と全く同じため、説明を省略する。【０３４６】
次に、ゲートウェイ４のハードウェアの機能を説明する。ハードウェアとして、ゲートウェイ４はNIC D8と仮想NIC D10を備えているが、これらのモジュールの機能は、図１２のPC１のモジュールと全く同じであるため、説明を省略する。【０３４７】
[動作の説明]
図２７は、図２０の各モジュール間で受け渡されるフレームの形式を示している。図２７及び図２０を参照して、本実施の形態の動作を以下説明する。【０３４８】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P3までの動作は第１の実施の形態と同じであるため、動作の説明は、接続P4の時点から開始する。【０３４９】
フレーム解析部A30は、図２１に示されるように、接続P4を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A30は、このヘッダから、受け取ったデータが暗号化されているか識別する。フレーム解析部A30は、接続P4で渡されたフレームは暗号化されていないと判断し、接続P83を通じて中継アプリケーションA31にフレームを渡す。図２７bには、中継アプリケーションA31に渡されるデータ形式を示している。【０３５０】
中継アプリケーションA31は、接続P83を通じてフレーム解析部A30からデータを受け取ると、データを暗号化して盗聴防止を図るために、接続P84を通じてSSL A16にデータを渡す。【０３５１】
SSL A16は、接続P84を通じて中継アプリケーションA31からデータを受け取ると、あらかじめゲートウェイ４のSSL D2との間で取り決められた暗号化方式を使用して、データを暗号化する。暗号化完了後、SSL A16は、接続P85を通じてTCP A14に暗号化されたデータを渡す。図２７cには、TCP A14に渡されるデータ形式を示している。【０３５２】
TCP A14は、接続P85を通じてSSL A16からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、ゲートウェイ４のTCP D3のポート番号t6を用い、送信元TCPポート番号には、TCP A14のポート番号t5を用いる。また、宛先IPアドレスには、ゲートウェイ４のIPアドレスi3が設定される。TCP A14は、TCPヘッダと宛先IPアドレスを付加した後、接続P86を通じてヘッダ変換部A33にパケットを渡す。TCP A14は、これらの処理によってTCP D3とTCPセッションを確立し、TCP D3との安定したデータ転送を実現している。図２０には、このＴＣＰセッションが破線で示されている（ＴＣＰセッション２）
ヘッダ変換部A33は、図２６に示されるように、接続P86を通じてTCP A14からパケットを受け取ると、受け取ったパケットにMACヘッダとIPヘッダを付加してフレームを生成する。ヘッダ変換部A13は、パケットにIPヘッダ、MACヘッダを挿入した後、接続P87を通じてフレーム解析部A30にフレームを渡す。図２７cは、フレーム解析部A30に渡されるデータ形式を示している。【０３５３】
ここで、図２７cのデータ形式を、図１１cのデータ形式と比較すると分かるように、本実施の形態の中間ドライバでは、ＴＣＰの中継処理ではなく、ＴＣＰのトンネリング処理を行っていることが分かる。つまり、TCP A2とTCP B3の間のTCPセッション１をオーバーラップする形で、TCP A14とTCP D3の間のセキュアなTCPセッション２を確立している。ここで、「セキュア」という表現を用いている理由は、TCP A14とTCP D3の間のＴＣＰセッション２はＳＳＬで暗号化されており、第３者に盗聴される危険性がないからである。このように、ＴＣＰのトンネリング処理とＳＳＬの暗号化処理を組み合わせることにより、クライアントアプリケーションＡ１から送信されたデータを暗号化することができる。【０３５４】
フレーム解析部A30は、図２３に示されるように、接続P87を通じてヘッダ変換部A33からフレームを受け取ると、接続P88を通じてドライバA5にフレームを渡す。【０３５５】
ドライバA5は、接続P12を通じてフレーム解析部A12からフレームを受け取ると、接続P89を通じてNIC A6にフレームを渡す。【０３５６】
NIC A6は、接続P89を通じてドライバA5からフレームを受け取ると、ネットワーク５を介しながら、接続P90を通じてNIC C3にフレームを渡す。【０３５７】
NIC C3は、ネットワーク５を介しながら、接続P90を通じてNIC A6からフレームを受け取ると、接続P91を通じてドライバC2にフレームを渡す。【０３５８】
ドライバ C2は、接続P91を通じてNIC C3からフレームを受け取ると、接続P92を通じてブリッジC1にフレームを渡す。【０３５９】
ブリッジC1は、接続P92を通じてドライバC2からフレームを受け取ると、受け取ったフレームの宛先MACアドレスを参照する。宛先MACアドレスを持つ端末がNIC C5に接続されていることを認識すると、接続P93を通じてドライバC4にフレームを渡す。【０３６０】
ドライバ C4は、接続P93を通じてブリッジC1からフレームを受け取ると、接続P94を通じてNIC C5にフレームを渡す。【０３６１】
NIC C5は、接続P94を通じてドライバC4からフレームを受け取ると、接続P95を通じてNIC D8にフレームを渡す。【０３６２】
NIC D8は、接続P95を通じてNIC C5からフレームを受け取ると、接続P96を通じてドライバD7にフレームを渡す。【０３６３】
ドライバ D7は、接続P96を通じてNIC D8からフレームを受け取ると、接続P97を通じてブリッジD6にフレームを渡す。【０３６４】
ブリッジD6は、接続P97を通じてドライバD7からフレームを受け取ると、受け取ったフレームの宛先MACアドレスを参照する。宛先MACアドレスを持つ端末がゲートウェイ4であることを認識すると、接続P98を通じてIPスタックD5にフレームを渡す。【０３６５】
IPスタックD5は、接続P98を通じてブリッジD6からフレームを受け取ると、フレームからMACヘッダ、IPヘッダを外してパケットにした後、接続P99を通じてIPルーティングD4にパケットを渡す。【０３６６】
IPルーティングD4は、接続P99を通じてIPスタックD5からパケットを受け取ると、パケットのTCPヘッダを参照する。宛先TCPポート番号から、パケットの宛先がTCP D3であることを認識すると、接続P100を通じてTCP D3に受け取ったパケットを渡す。【０３６７】
TCP D3は、接続P100を通じてIPルーティングD4からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P101を通じてSSL D2に渡す。この際、パケットが届いたことを知らせるACKパケットをTCP A14に返信する（ＴＣＰセッション２）。【０３６８】
SSL D2は、接続P101を通じてTCP D3からデータを受け取ると、ＰＣ１のSSL A16との間で取り決められた復号化方式を使用して、データを復号化する。SSL D2は、接続P102を通じて中継サーバアプリケーションD1に復号化されたデータを渡す。図２７eは、中継サーバアプリケーションD1に渡すデータを示しており、ここでようやく暗号化およびカプセル化が外されて、元のフレームが取り出されることが分かる。【０３６９】
中継サーバアプリケーションD1は、接続P102を通じてSSL D2からフレームを受け取ると、接続P103を通じて仮想NIC D10にフレームを渡す。【０３７０】
仮想NIC D10は、接続P103を通じて中継サーバアプリケーションD1からフレームを受け取ると、接続P104を通じてドライバD9にフレームを渡す。【０３７１】
ドライバD9は、接続P104を通じて仮想NIC D10からフレームを受け取ると、接続P105を通じてブリッジD6にフレームを渡す。【０３７２】
ブリッジD6は、接続P105を通じてドライバD9からフレームを受け取ると、受け取ったフレームの宛先MACアドレスを参照する。宛先MACアドレスを持つ端末がNIC D8の先につながれていることを認識すると、接続P106を通じてドライバD7にフレームを渡す。  
ドライバD7は、接続P106を通じてブリッジ D6からフレームを受け取ると、接続P107を通じてNIC D8にフレームを渡す。【０３７３】
NIC D8は、接続P107を通じてドライバD7からフレームを受け取ると、接続P108を通じてNIC C5にフレームを渡す。【０３７４】
NIC C5は、接続P108を通じてNIC D8からフレームを受け取ると、接続P109を通じてドライバ C4にフレームを渡す。【０３７５】
ドライバC4は、接続P109を通じてNIC C5からフレームを受け取ると、接続P110を通じてブリッジC1にフレームを渡す。【０３７６】
ブリッジC1は、接続P110を通じてドライバC4からフレームを受け取ると、受け取ったフレームの宛先MACアドレスを参照する。宛先MACアドレスを持つ端末がNIC C7の先につながれていることを認識すると、接続P111を通じてドライバC6にフレームを渡す。【０３７７】
ドライバC6は、接続P111を通じてブリッジC1からフレームを受け取ると、接続P112を通じてNIC C7にフレームを渡す。【０３７８】
NIC C7は、接続P112を通じてドライバ D6からフレームを受け取ると、接続P113を通じてNIC B8にフレームを渡す。【０３７９】
NIC B8は、接続P113を通じてNIC C7からフレームを受け取ると、接続P114を通じてドライバ B7にフレームを渡す。【０３８０】
ドライバB7は、接続P114を通じてNIC B8からフレームを受け取ると、接続P115を通じてIPスタックB5にフレームを渡す。【０３８１】
IPスタックB5は、接続P115を通じてドライバB7からフレームを受け取ると、フレームからMACヘッダ、IPヘッダを外した後、接続P116を通じてIPルーティングB4にパケットを渡す。【０３８２】
IPルーティングB4は、接続P116を通じてIPスタックB5からパケットを受け取ると、パケットのTCPヘッダを参照する。宛先TCPポート番号から、パケットの宛先がTCP B3であることを認識すると、接続P117を通じてTCP B3に受け取ったパケットを渡す。【０３８３】
TCP B3は、接続P116を通じてIPルーティングB4からパケットを受け取り、TCPヘッダを参照して順序逆転やパケットの欠落を調査する。順序逆転も欠落も発生していない場合は、パケットからTCPヘッダをはずし、接続P118を通じてサーバアプリケーションB1に渡す。この際、パケットが届いたことを知らせるACKパケットをTCP A2に返信する（ＴＣＰセッション１）。【０３８４】
以上のようにして、クライアントアプリケーションA1から送信されたデータは、暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０３８５】
ここで、クライアントアプリケーションA1から送信されたデータが暗号化されるのは、ＰＣ１からゲートウェイ４までの区間のみであるが、データが盗聴される危険性が歩く区間がこの区間のみである場合には、本方式はセキュリティを十分メリットがある。公開ネットワークが、この区間を橋渡ししているネットワーク５のみが、インターネットのように盗聴の危険性があるネットワークの場合には、本方式は非常に野酔うな盗聴の危険性があるネットワークを経由するときには、暗号化
また、上記の処理完了後、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作については、上述の経路を逆向きにデータが辿るだけであるので、説明を省略する。【０３８６】
以上の説明では、ＰＣ１のＴＣＰ Ａ２とサーバ２のＴＣＰ Ｂ３の間のＴＣＰセッション１を、ＰＣ１とゲートウェイ４の間のセキュアなＴＣＰセッション２でトンネリングする場合の動作を説明した。このため、データフォーマットは、ＴＣＰｏｖｅｒ ＴＣＰの形となる。【０３８７】
これに対して、ＰＣ１とサーバ２の間でやり取りされるＵＤＰフレームを、ＰＣ１とゲートウェイ４の間のセキュアなＴＣＰセッション２でトンネリングすることも可能である。この場合のシステム構成は、図２８に示されるＰＣ１側のＴＣＰ  Ａ２とサーバ２側のＴＣＰ  Ｂ３を、ＵＤＰモジュールで置き換えるだけであるので、詳細な説明は省略する。また、データフォーマットは、ＵＤＰ  ｏｖｅｒ  ＴＣＰの形となる。このようなシステム構成を採用することにより、ＵＤＰを使用する音声データ通信なども中間ドライバで安全に暗号化することが可能となる。【０３８８】
（効果）
次に、本実施の形態の効果について説明する。【０３８９】
本実施の形態は、第1の実施の形態の効果に加えて、以下のような効果を持つ。【０３９０】
本実施の形態では、PC 1とゲートウェイ４の間で確立されたセキュアなＴＣＰセッション２に、ＰＣ１とサーバ２のＴＣＰセッション１をトンネリングさせることにより、サーバ2のサーバアプリケーションＢ１がSSLに対応していない場合でも、PC1から送出されるデータを必ず暗号化してから送信することが可能となった。このため、ユーザがSSLに対応したサーバアプリケーションＢ１を探したりする手間や、そのサーバアプリケーションＢ１をサーバ2にインストールするといった手間を省くことができる。【０３９１】
[第６の実施の形態]
[構成の説明]
次に、本発明の第３の発明を実施するための第6の実施の形態について、図面を参照して詳細に説明する。第6の実施の形態のネットワーク構成は、図１９の第5の形態のネットワーク構成と同じであり、説明を省略する。【０３９２】
図２８は、本実施の形態の各装置に搭載されるＣＰＵおよびＮＩＣの通信処理を示す図である。図２８を参照すると、第6の実施の形態は、図２０に示された第5の実施の形態におけるPC１の構成に加え、ドライバA34と仮想NIC A20を有する点で、第5の実施の形態と異なる。【０３９３】
ドライバA34の機能は、図１２に示されるドライバA19の機能と同じであるため、説明を省略する。【０３９４】
仮想NIC A20の機能は、図１２に示される仮想NIC A20の機能と同じであるため、説明を省略する。【０３９５】
また、図２８を参照すると、第6の実施の形態は、第5の実施の形態において、中間ドライバA11の内部に実装されていたモジュールのうち、OSの機能で代替できるモジュールについては、中間ドライバA11から切り離されている点で、第5の実施の形態と異なる。具体的には、第6の実施の形態は、第5の実施の形態の中間ドライバA11に組み込まれていたSSL A16及びTCP A14を、中間ドライバA11から切り離すとともに、これらのモジュールをOSの機能で代替している。また、第6の実施の形態は、中継アプリケーションも中間ドライバから切り離すとともに、中間ドライバと中継アプリケーションを仮想NIC経由でループバック接続している。これに伴い、各モジュールの機能は以下のように変化する。【０３９６】
フレーム解析部A36は、IPスタックA4、ドライバA5、およびドライバA34と接続されている。図２９は、フレーム解析部A18の処理を詳細に説明するための動作フローチャートであり、IPスタックA4からフレームが到着した場合の処理を示している。フレーム解析部A36は、図６のステップS15を、ステップS9で置き換えている点で、第5の実施の形態のフレーム解析部A30と異なる。【０３９７】
一方、ドライバA5からフレームが到着した場合のフレーム解析部A36の動作フローチャートは、図１４とまったく同じであるため、説明を省略する。【０３９８】
また、ドライバA34からフレームが到着した場合のフレーム解析部A36の動作フローチャートは、図７とまったく同じであるため、説明を省略する。【０３９９】
図２８に示される中継アプリケーションA22、TCP A24、SSL A23の機能は、図１２に示される中継アプリケーションA22、TCP A24、SSL A23の機能と同じであるため、説明を省略する。【０４００】
図２８に示される構成要素のうち、上述の構成要素以外のブロックの機能は、図２０に示される第５の実施の形態と全く同じため、説明を省略する。【０４０１】
[動作の説明]
図２８を参照して、本実施の形態の動作を以下説明する。図２０に示される第5の実施の形態と異なる点は、PC1の動作だけであるので、PC1の動作に限定して説明する。【０４０２】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P3までの動作は、第5の実施の形態と同じため、動作の説明は接続P4の時点から開始する。【０４０３】
フレーム解析部A36は、図２９に示されるように、接続P4を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照し、受け取ったデータが暗号化されているか識別する。フレーム解析部A18は、接続P4で渡されたフレームは暗号化されていないと判断し、接続P120を通じてドライバA34にフレームを渡す。【０４０４】
ドライバA34は、接続P120を通じてフレーム解析部A36からフレームを受け取ると、接続P121を通じて仮想NIC A20にフレームを送信する。【０４０５】
仮想NIC A20は、接続P121を通じてドライバA34からフレームを受け取ると、接続P123を通じてフレームを中継アプリケーションA22に送信する。【０４０６】
中継アプリケーションA22は、接続P123を通じて仮想NIC A20からデータを受け取ると、データを暗号化して盗聴防止を図るために、接続P124を通じてSSL A23にデータを渡す。【０４０７】
SSL A23は、接続P124を通じて中継アプリケーションA22からデータを受け取ると、あらかじめSSL D2との間で取り決められた暗号化方式を使用して、データを暗号化する。暗号化完了後、SSL A23は、接続P125を通じてTCP A24に暗号化されたデータを渡す。【０４０８】
TCP A24は、接続P125を通じてSSL A23からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、ゲートウェイ４のTCP D3のポート番号t6を用い、送信元TCPポート番号には、TCP A24のポート番号t5を用いる。また、宛先IPアドレスには、ゲートウェイ４のIPアドレスi3が設定される。TCP A24は、TCPヘッダと宛先IPアドレスを付加した後、接続P126を通じてIPルーティングA3にパケットを渡す。TCP A24は、これらの処理によってTCP Ｄ3とTCPセッションを確立し、TCP Ｄ3との安定したデータ転送を実現している。図２７には、このＴＣＰセッションを点線で示している（ＴＣＰセッション２）。【０４０９】
IPルーティングA3は、接続P126を通じてTCP A24からパケットを受け取ると、宛先IPアドレスを参照して、接続P127を通じてIPスタックA4にパケットを送信する。【０４１０】
IPスタックA4は、接続P127を通じてIPルーティングA3からパケットを受け取ると、パケットにIPヘッダ、MACヘッダを付加してフレームを生成する。IPヘッダの宛先IPアドレスには、ゲートウェイ４のIPアドレスi3を用い、送信元IPアドレスには、PC1のIPアドレスi1を用いる。また、MACヘッダの宛先MACアドレスには、ゲートウェイ４のMACアドレスm3を用い、送信元MACアドレスには、PC１のMACアドレスm1を用いる。IPスタックA4は、パケットにこのようなIPヘッダ、MACヘッダを挿入した後、接続P128を通じてフレーム解析部A36にフレームを渡す。【０４１１】
フレーム解析部A36は、図２９に示されるように、接続P128を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照し、受け取ったデータが暗号化されているか識別する。フレーム解析部A36は、接続P128で渡されたフレームは暗号化されていると判断し、接続P88を通じてドライバA5にフレームを渡す。【０４１２】
以降の動作は、図２０の第5の実施例と全く同じため、説明を省略する。【０４１３】
以上のようにして、クライアントアプリケーションA1から送信されたデータは、暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０４１４】
また、上記の処理完了後、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作については、上述した経路を逆向きにデータが辿るだけであるので、説明を省略する。【０４１５】
（効果）
次に、本実施の形態の効果について説明する。
本実施の形態は、第5の実施の形態の効果に加えて、以下のような効果を持つ。【０４１６】
本実施の形態では、第5の実施の形態において、中間ドライバA11の内部に組み込まれていたＳＳＬ  Ａ１６の機能を、OSに既に組み込まれているＳＳＬ  Ａ２３の機能で代替できるように、暗号化が必要なフレームを中間ドライバＡ１１からＯＳにループバックしてやることにより、ソフトウェア開発者が中間ドライバにＳＳＬ  Ａ１６を実装する手間を排除した。これにより、ソフトウェア開発者にかかる負荷を減らし、開発の手間を減らすことが可能となる。【０４１７】
[第7の実施の形態]
[構成の説明]
次に、本発明の第３の発明を実施するための第7の実施の形態について、図面を参照して詳細に説明する。第7の実施の形態のネットワーク構成は、図１９の第5の形態のネットワーク構成と同じであり、説明を省略する。【０４１８】
図３０は、本実施の形態の各装置に搭載されるＣＰＵとＮＩＣの通信処理を示す図である。図３０を参照すると、第7の実施の形態は、図２８に示された第5の実施の形態におけるPC１の構成のうち、ドライバA34と仮想NIC A20を排除するとともに、フレーム解析部A37と中継アプリケーションA38を直接ループバック接続している点で、第6の実施の形態と異なる。これに伴い、各モジュールの機能は以下のように変化する。【０４１９】
フレーム解析部A37の機能の概要は、図２８に示される第6の実施の形態のフレーム解析部A36とほぼ同様であるが、そのデータを受け渡す先のモジュールがドライバA34ではなく、中継アプリケーションA26となっている点で第6の実施の形態のフレーム解析部A36と異なる。【０４２０】
中継アプリケーションA26の機能の概要は、図２８に示される第6の実施の形態の中継アプリケーションA22とほぼ同様であるが、そのデータを受け渡す先のモジュールが仮想NICA20ではなく、フレーム解析部A37となっている点で第6の実施の形態の中継アプリケーションA22と異なる。【０４２１】
図３０に示される構成要素のうち、上述の構成要素以外のブロックの機能は、図２８に示される第６の実施の形態と全く同じため、説明を省略する。【０４２２】
[動作の説明]
図３０を参照して、本実施の形態の動作を以下説明する。図２８に示される第6の実施の形態と異なる点は、PC1の動作だけであるので、PC1の動作に限定して説明する。【０４２３】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P3までの動作は、第6の実施の形態と同じため、動作の説明は接続P4の時点から開始する。【０４２４】
フレーム解析部A37は、図２９に示されるように、接続P4を通じてIPスタックA4からフレームを受け取ると、そのヘッダを参照し、受け取ったデータが暗号化されているか識別する。フレーム解析部A37は、接続P4で渡されたフレームは暗号化されていないと判断し、接続P129を通じて中継アプリケーションA38にフレームを渡す。【０４２５】
中継アプリケーションA38は、接続P129を通じてフレーム解析部A37からデータを受け取ると、データを暗号化して盗聴防止を図るために、接続P124を通じてSSL A23にデータを渡す。【０４２６】
以降の動作は、図２８の第6の実施例と全く同じため、説明を省略する。以上のようにして、クライアントアプリケーションA1から送信されたデータは、暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０４２７】
また、上記の処理完了後、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作については、上述した経路を逆向きにデータが辿るだけであるので、説明を省略する。【０４２８】
（効果）
次に、本実施の形態の効果について説明する。
本実施の形態は、第6の実施の形態の効果に加えて、以下のような効果を持つ。【０４２９】
本実施の形態では、第6の実施の形態において、PC1に組み込まれていたドライバ A34と仮想NIC A20を排除できるように、フレーム解析部A37と中継アプリケーションA38の間でループバック処理を行い、ソフトウェア開発者がこれらのモジュールを開発する手間を省いた。これにより、ソフトウェア開発者にかかる負荷を減らし、開発の手間を減らすことが可能となる。【０４３０】
また、第6の実施の形態では、PC1において、仮想NIC A20とNIC A6とがブリッジ接続されると、セキュリティレベルが低下してしまうという危険性があったが、本実施の形態では、仮想NIC A20をそもそも排除しているため、ブリッジ接続が不可能であり、セキュリティ対策を講じる手間を減らすことも可能である。【０４３１】
[第8の実施の形態]
[構成の説明]
次に、本発明の第４の発明を実施するための第8の実施の形態について、図面を参照して詳細に説明する。図３１は、第8の実施の形態のネットワーク構成を示す図であり、図１９に示されたネットワーク構成に加え、管理サーバ６を有する点で異なる。ここで、図３１にゲートウェイ５を記載していないが、図１９と同様にハブ３にゲートウェイ５が接続されていても良い。管理サーバ６は、PC１からフレームを受け取るとともに、受け取ったフレームに対して所望の処理を行った後、PC１に何らかの応答を返信する機能を有する。【０４３２】
図３２は、本実施の形態の各装置に搭載されるＣＰＵとＮＩＣの通信処理を示す図である。図３２を参照すると、第8の実施の形態は、図３に示された第1の実施の形態におけるPC１の構成に加えて、暗号化設定アプリケーションA40を有している点で異なる。【０４３３】
暗号化設定アプリケーションA40は、ＯＳに含まれない上位層に位置するソフトウェアである。暗号化設定アプリケーションA40は、ネットワーク環境に応じて、中間ドライバA11でフレームを暗号化するかどうかを判別し、その判断結果に基づき、フレーム解析部A41の設定を変更するといった機能を有する。暗号化設定アプリケーションA40は、フレームを暗号化するかどうかを判別する際に、種々な処理を行い、その解析結果をもとに、暗号化するかどうかを判断することができる。この処理には、以下のような処理が含まれる。
管理サーバ６にICMPエコー要求を送り、その応答が返ってくるかどうか。
管理サーバ６に特殊なフレームを送信し、その応答が返ってくるかどうか。
PC１に現在設定されているIPアドレスを調査し、IPアドレスが所定の値となっているかどうか。【０４３４】
暗号化設定アプリケーションA40は、上記の処理のいずれか、または組み合わせ結果に応じて、フレームを暗号化するかどうかを判断する。【０４３５】
また、暗号化設定アプリケーションA40で上記の処理を行うタイミングについては、種々のものが考えられるが、例えばパケットの送受信時に毎回行うことや、ある時間間隔で定期的に行うことや、PCの起動時に行うことや、ユーザが指定した時に行うことや、または上記いずれかの組み合わせが考えられる。【０４３６】
このように、PC1に暗号化設定アプリケーションA40が追加されることに伴い、フレーム解析部は以下のように変更される。フレーム解析部A41は、IPスタックA4、ドライバA5、およびヘッダ変換部A13と接続されている。図３３、図３４は、フレーム解析部A41の処理を詳細に説明するための動作フローチャートである。図３３は、IPスタックA4からフレームが到着した場合のフレーム解析部A41の動作フローチャートを示している。図３３は、図５のフローチャートに加え、ステップS8を含んでいる点で、第1の実施の形態のフレーム解析部A12と異なる。ステップS8は、上記の暗号化設定アプリケーションA40の判断結果にもとづき、中間ドライバでパケットを暗号化するかどうかの分岐処理を行うステップである。もし、暗号化設定アプリケーションA40が、中間ドライバでパケットを暗号化すると判断した場合には、暗号化設定は有効となる。一方、暗号化設定アプリケーションA40が、中間ドライバでフレームを暗号化しない判断した場合には、暗号化設定は無効となる。【０４３７】
一方、図３４は、ドライバA5からフレームが到着した場合のフレーム解析部A41の動作フローチャートを示している。図３４は、図６のフローチャートに加え、ステップS18を含んでいる点で、第1の実施の形態のフレーム解析部A12と異なる。ステップS18は、上記の暗号化設定アプリケーションA40の判断結果にもとづき、フレームを中間ドライバで復号化するかどうかの分岐処理を行うステップである。【０４３８】
また、ヘッダ変換部A13からフレームが到着した場合のフレーム解析部A41の動作フローチャートは、図７とまったく同じであるため、説明を省略する。【０４３９】
[動作の説明]
図３２を参照して、本実施の形態の動作を以下説明する。通常のフレームの送受信処理については、第1の実施の形態と同じであるため、動作の説明は、暗号化設定モジュールA40の動作に限って説明する。【０４４０】
暗号化設定モジュールA40は、あらかじめ設定されたタイミングで、中間ドライバＡ１１で暗号化するかどうかの判別処理を実行する。【０４４１】
ここで行われる判別処理としては、
管理サーバ６にICMPエコー要求を送り、その応答が返ってくるかどうか
管理サーバ６に特殊なフレームを送信し、その応答が返ってくるかどうか
PC１に設定されているIPアドレスを調査し、IPアドレスが所定の値となっているかどうか
のいずれか、または上記を組み合わせた処理が行われる。【０４４２】
以上の処理を行った結果、例えば、
管理サーバ６からICMPエコー応答が返ってきた
管理サーバ６から特殊フレームの応答が返ってきた
PC１に現在設定されているIPアドレスが所定の値となっている
の条件のうち、いずれか、またはこれらの組み合わせが成立した場合、暗号化設定モジュールA40は、フレーム解析部A41の設定を変更し、ステップS8およびステップS18の暗号化設定を有効とする。また、上記の条件が成立しない場合、暗号化設定モジュールA40は、フレーム解析部A41の設定を変更し、ステップS8およびステップS18の暗号化設定を無効とする。【０４４３】
以上の動作を行うことにより、ＰＣのネットワーク環境に応じて、中間ドライバの暗号化機能を自動設定することが可能であることが確かめられた。【０４４４】
（効果）
次に、本実施の形態の効果について説明する。【０４４５】
本実施の形態では、以上のように、PC1に暗号化設定モジュールA40を組み込むことにより、ネットワーク環境に応じて、中間ドライバの暗号化機能の設定を自動変更できるため、ＰＣ１の場所の移動に応じて、ユーザが手動で暗号化機能を変更する手間を省くことができる。【０４４６】
たとえば、ＰＣを社内ＬＡＮで使用する際には、盗聴の危険性はないので暗号化設定をＯＦＦにしたり、逆に、ＰＣをネットカフェで使用する際には、盗聴の危険性があるので暗号化設定をＯＮにしたりすることが、この暗号化設定モジュールＡ４０を用いることにより、自動的に実行される。これらの設定変更をユーザが手動で行う必要は一切ない。【０４４７】
また、暗号化の設定をユーザが手動変更することがないので、設定ミスが発生する危険性がなく、設定ミスによって情報漏洩が起こる危険性も排除できる。【０４４８】
[第９の実施の形態]
[構成の説明]
次に、本発明の第５の発明を実施するための第９の実施の形態について、図面を参照して詳細に説明する。図３５は、第９の実施の形態のネットワーク構成を示す図であり、図３に示された第１の実施の形態の構成に加えて、ネットワーク５とゲートウェイ７を有する。【０４４９】
ここで、ネットワーク５は、図１９に示された第５の実施の形態の構成で、既に説明済みであるので、説明を省略する。【０４５０】
ゲートウェイ７は、ハブ３とネットワーク５に接続されている。ゲートウェイ７は、ハブ３とネットワーク５からフレームを受け取ると、受け取ったフレームを解析し、フレームに所望の処理を施した後、適切なポートにフレームを転送する。【０４５１】
図３６は、本実施の形態の各装置に搭載されるＣＰＵとＮＩＣの通信処理を示す図である。図３６を参照すると、第９の実施の形態のＰＣ１の構成は、図３に示された第1の実施の形態におけるPC１の構成と比較して、中間ドライバＡ１１が取り除かれていることが分かる。【０４５２】
これに伴い、図１のＰＣ１に搭載されていた中間ドライバＡ１１の機能は、ゲートウェイ７に移されている。【０４５３】
ゲートウェイ７の各構成要素の機能を説明する。ゲートウェイ７は、ＯＳに含まれない下位層に位置するソフトウェアとして、中間ドライバＥ１と、ドライバＥ７と、ドライバＥ９を備えている。【０４５４】
中間ドライバＥ１は、ドライバＥ７、およびドライバＥ９と接続されており、以下にあげる機能を有する。中間ドライバＥ１は、ドライバＥ７から到着するフレームのヘッダを参照して、フレームに暗号化を施す必要があるか調査する。もし、受け取ったフレームの暗号化が必要であれば、中間ドライバＥ１は、そのフレームの送信元であるＰＣ１のTCP A2とTCPセッションを一度終端した後、データに暗号化を施す。ここで、暗号化に使用する暗号鍵は、フレームの宛先であるサーバ２のSSL B2との間で交換された暗号鍵を用いる。フレームを暗号化した後、フレームの宛先であるサーバ２のTCP B3とのTCPセッションに対応したヘッダを暗号化データに付加した後、暗号化データをドライバＥ９に転送する機能を有する。一方、ドライバＥ７から受け取ったフレームの暗号化が不要であれば、中間ドライバＥ１は、フレームをそのままドライバＥ９に転送する機能を有する。ここで、暗号化が不要なフレームとしては、ＰＣ１で既に暗号化されているフレームや、DHCPパケット、およびARPパケット等が挙げられる。【０４５５】
また、中間ドライバＥ１は、ドライバＥ９から到着するフレームのヘッダを参照して、フレームを復号化する必要があるか調査する。もし、受け取ったフレームの復号化が必要であれば、中間ドライバＥ１は、そのフレームの送信元であるサーバ２のＴＣＰ Ｂ３とTCPセッションを一度終端した後、データを復号化する。ここで、復号化に使用する復号鍵は、送信元であるサーバ２のSSL B2との間で交換された復号鍵を用いる。フレームを復号化した後、フレームの宛先であるＰＣ１のTCP A2とのTCPセッションに対応したヘッダを復号化データに付加した後、復号化データをドライバＥ７に転送する機能を有する。一方、受け取ったフレームの復号化が不要であれば、中間ドライバＥ１は、フレームをそのままドライバＥ７に転送する機能を有する。ここで、復号化が不要なフレームとしては、ＰＣ１で復号化すべきフレームや、DHCPパケット、およびARPパケット等が挙げられる。【０４５６】
中間ドライバＥ１は上記の機能を実行するために、図３６に示すように、複数の機能ブロックから構成されている。これらの機能ブロックのうち、図３に示される第１の実施の形態の中間ドライバＡ１１と異なるブロックは、フレーム解析部Ｅ１１だけである。【０４５７】
次に、フレーム解析部Ｅ１１の機能について説明する。ただし、以下に述べるフレーム解析部の機能およびコンフィグレーションは、単なる例であることが理解されるべきである。【０４５８】
また、以下に述べるように、フレーム解析部Ｅ１１は、受け取ったフレームの暗号化および復号化が必要かどうか識別する機能を有するが、この機能に加えて、フレームを廃棄するかどうか識別する機能も加えることもできる。この廃棄機能により、ＰＣ１から未暗号化のフレームが流出してしまうのを防ぐとともに、ＰＣ１が外部ネットワークから不正アタックを受けるのを防ぐことができる。【０４５９】
フレーム解析部Ｅ１１は、ドライバＥ７、ドライバＥ９、およびヘッダ変換部Ｅ１２と接続されている。図３７、図３８、図３９は、フレーム解析部Ｅ１１の機能を詳細に説明するためのフローチャートである。図３７は、ドライバＥ７からフレームが到着した場合のフレーム解析部Ｅ１１の処理を示している。図３７と図５を比較すると、フレーム解析部Ｅ１１は、ステップＳ７３で暗号化の必要なしと判断されたフレームを、ドライバＥ９に転送している点（ステップＳ７５）で、第１の実施の形態のフレーム解析部Ａ１２と異なる。また、フレーム解析部Ｅ１１は、ステップＳ７３で暗号化の必要ありと判断されたフレームを、ヘッダ変換部Ｅ１２に転送している点（ステップＳ７６）で、第１の実施の形態のフレーム解析部Ａ１２と異なる。他の処理は、図５と同一であるため、説明を省略する。【０４６０】
一方、図３８は、ドライバＥ９からフレームが到着した場合のフレーム解析部Ｅ１１の処理を示している。図３８と図６を比較すると、フレーム解析部Ｅ１１は、ステップＳ８３で復号化の必要なしと判断されたフレームを、ドライバＥ７に転送している点（ステップＳ８４）で、第１の実施の形態のフレーム解析部Ａ１２と異なる。また、フレーム解析部Ｅ１１は、ステップＳ８３で復号化の必要ありと判断されたフレームを、ヘッダ変換部Ｅ１２に転送している点（ステップＳ８５）で、第１の実施の形態のフレーム解析部Ａ１２と異なる。他の処理は、図６と同一であるため、説明を省略する。【０４６１】
また、図３９は、ヘッダ変換部Ａ１３からフレームが到着した場合のフレーム解析部Ｅ１１の処理を示している。フレーム解析部Ｅ１１は、ステップＳ９３において、フレームヘッダの宛先ＭＡＣアドレスを、自らのＭＡＣアドレスとして持つ端末が、ドライバＥ７とドライバＥ９のどちらに接続されているか識別している。このステップＳ９３における識別処理を実行するために、フレーム解析部Ｅ１１は、図３のブリッジＣ１と同じように、ＭＡＣアドレスの学習機能も有している。フレーム解析部Ｅ１１は、このステップＳ９３における識別結果に応じて、入力フレームをドライバＥ７に転送したり（ステップＳ９４）、ドライバＥ９に転送したりする（ステップＳ９５）。これらの点において、図３９のフレーム解析部Ｅ１１は、第１の実施の形態のフレーム解析部Ａ１２と異なる。他の処理は、図７と同一であるため、説明を省略する。【０４６２】
ステップＳ９５の処理のように、フレーム解析部Ｅ１１にブリッジ機能を搭載している理由は、ドライバＥ７およびドライバＥ９の先に複数の端末が繋がれた場合でも、フレームの転送に問題が起こらないようにするためである。【０４６３】
上記のゲートウェイ７の説明では、フレームヘッダの宛先ＭＡＣアドレスを参照することにより、宛先端末がドライバＥ７、またはドライバＥ９のどちらに接続されているかどうか識別していたが、宛先ＭＡＣアドレスではなく、宛先ＩＰアドレスを参照しても良い。【０４６４】
図３６に示される構成要素のうち、上述の構成要素以外のブロックの機能は、図３に示される第１の実施の形態と全く同じため、説明を省略する。【０４６５】
[動作の説明]
図３６を参照して、本実施の形態の動作を以下説明する。図３に示される第1の実施の形態と異なる点は、PC1とゲートウェイ７の動作だけであるので、PC1とゲートウェイ７の動作に限定して説明する。【０４６６】
まず、PC１のクライアントアプリケーションA1から、サーバ２のサーバアプリケーションB1にデータが送信される場合の動作を説明する。ただし、接続P3までの動作は、第1の実施の形態と同じため、動作の説明は接続P150の時点から開始する。【０４６７】
ドライバＡ５は、接続Ｐ１５０を通じてIPスタックA4からフレームを受け取ると、接続Ｐ１５１を通じて、受け取ったフレームをＮＩＣ  Ａ６に渡す。【０４６８】
ＮＩＣ  Ａ６は、接続Ｐ１５１を通じてドライバＡ５からフレームを受け取ると、ハブ３を介して、受け取ったフレームをゲートウェイ７のＮＩＣ  Ｅ８に転送する。【０４６９】
ＮＩＣ  Ｅ８は、接続Ｐ１５６を通じてハブ３からフレームを受け取ると、接続Ｐ１５７を通じてドライバＥ７に受け取ったフレームを渡す。【０４７０】
ドライバＥ７は、接続Ｐ１５７を通じてＮＩＣ  Ｅ８からフレームを受け取ると、接続Ｐ１５８を通じて受け取ったフレームをフレーム解析部Ｅ１１に渡す。【０４７１】
フレーム解析部Ｅ１１は、図３７に示されるように、接続Ｐ１５８を通じてドライバＥ７からフレームを受け取ると、そのヘッダを参照する。フレーム解析部A12は、このヘッダから、受け取ったデータが暗号化されているか識別する。フレーム解析部Ｅ１１は、接続Ｐ１５８で渡されたフレームは暗号化されていないと判断し、図３７に従い、接続Ｐ１５９を通じてヘッダ変換部Ｅ１２にフレームを渡す。【０４７２】
ヘッダ変換部Ｅ１２は、図８に示されるように、接続P１５９を通じてフレーム解析部Ｅ１１からフレームを受け取ると、宛先TCPに応じて、受け取ったフレームのMACヘッダ、IPヘッダを図１０ｂのテーブルT2に登録する。ＴＣＰ  Ｅ１３のポート番号は、ＴＣＰ  Ｂ６のポート番号ｔ２と一致させているので、接続P１５９で受け取ったフレームの宛先TCPは、TCP Ｅ１３であると判断され、そのMACアドレスとIPアドレスが図１０ｂのテーブルT2の上段に登録される。受け取ったフレームのヘッダをテーブルT2に登録後、ヘッダ変換部Ｅ１２は、フレームからMACヘッダとIPヘッダを外してパケットにした後、宛先ポート番号を参照してTCP Ｅ１３にパケットを渡す。図１１cは、TCP A14に渡されるデータ形式を示している。【０４７３】
TCP Ｅ１３は、接続P１６０を通じてヘッダ変換部Ｅ１２からパケットを受け取ると、TCPヘッダを参照して順序逆転やパケットの欠落を検知し、順序逆転も欠落も発生していない場合は、パケットからヘッダをはずし、接続Ｐ１６１を通じて中継アプリケーションＥ１４にデータを渡す。この際、パケットが届いたことを知らせるACKパケットをＰＣ１のTCP A2に返信し、TCP A2からのTCPセッションを終端している。ＴＣＰ  Ｅ１３のポート番号は、TCP Ｂ６のポート番号t2と一致させているので、TCP A2から見ると、あたかもTCP A2とTCP B6の間でTCPセッションが確立されているかのように見えるが、実際のTCPセッションはTCP A2とTCP Ｅ１３の間で確立される。図３には、このＴＣＰセッションが破線で示されている（ＴＣＰセッション１）。【０４７４】
中継アプリケーションＥ１４は、接続Ｐ１６１を通じてＴＣＰ Ｅ１３からデータを受け取ると、データを暗号化して盗聴防止を図るために、接続Ｐ１６２−１を通じてＳＳＬ  Ｅ１６にデータを渡す。【０４７５】
ＳＳＬ  Ｅ１６は、接続Ｐ１６２−１を通じて中継アプリケーションＥ１４からデータを受け取ると、あらかじめサーバ２のSSL B2との間で取り決められた暗号化方式を使用して、データを暗号化する。暗号化完了後、ＳＳＬ  Ｅ１６は、接続Ｐ１６２−２を通じてＴＣＰ  Ｅ１５に暗号化されたデータを渡す。図１１dには、TCP Ｅ１５に渡されるデータ形式を示している。【０４７６】
ＴＣＰ  Ｅ１５は、接続Ｐ１６２−２を通じてSSL A16からデータを受け取ると、データにTCPヘッダと宛先IPアドレスを付加してパケット化する。TCPヘッダの宛先TCPポート番号には、サーバ２のTCP B3のポート番号t4を用い、送信元TCPポート番号には、ＴＣＰ  Ｅ１５のポート番号t3を用いる。ここで、TCP B3のポート番号t4は、暗号化データを送信する際に明示的に使用されるポート番号である。また、宛先IPアドレスには、サーバ2のIPアドレスi2が設定される。ＴＣＰ Ｅ１５は、このようなTCPヘッダと宛先IPアドレスを付加した後、接続Ｐ１６３を通じてヘッダ変換部Ｅ１２にパケットを渡す。TCP Ｅ１５は、これらの処理によってサーバ２のTCP B3とTCPセッションを確立し、TCP B3との安定したデータ転送を実現している。図３には、このＴＣＰセッションが点線で示されている（ＴＣＰセッション２）。【０４７７】
ヘッダ変換部Ｅ１２は、図９に示されるように、接続Ｐ１６３を通じてＴＣＰ  Ｅ１５からパケットを受け取ると、テーブルT2を参照して、受け取ったパケットに対応するMACヘッダとIPヘッダを付加してフレームを生成する。具体的には、送信元TCPに応じて、受け取ったパケットに対応するMACヘッダ、IPヘッダを付加する。例えば、接続Ｐ１６３で受け取ったパケットの送信元TCPは、TCP Ｅ１５であるので、そのMACアドレスとIPアドレスは、図１０ｂのテーブルT2の上段に登録されている。ヘッダ変換部Ｅ１２は、パケットにIPヘッダ、MACヘッダを挿入した後、接続Ｐ１６４を通じてフレーム解析部Ｅ１１にフレームを渡す。図１１eは、フレーム解析部Ｅ１１に渡されるデータ形式を示している。フレーム解析部Ｅ１１は、図３９に示されるように、接続Ｐ１６４を通じてヘッダ変換部Ｅ１２からフレームを受け取ると、そのヘッダを参照する。ここで参照するヘッダとしては、MACヘッダ、IPヘッダなどが挙げられる。フレーム解析部Ｅ１１は、このヘッダから、フレームの宛先端末がドライバＥ７とドライバＥ９のどちらにつながれているか識別する。識別方法の例としては、宛先ＭＡＣアドレス、または宛先IPアドレスを参照することが考えられ、接続Ｐ１６４で渡されたフレームの宛先ＭＡＣアドレスをもつ端末は、ドライバＥ９の先につながれていることがＭＡＣアドレス学習から分かるので、図３９のステップＳ９３に従い、フレーム解析部Ｅ１１は接続Ｐ１６５を通じてドライバＥ９にフレームを渡す。【０４７８】
ドライバＥ９は、接続Ｐ１６５を通じてフレーム解析部Ｅ１１からフレームを受け取ると、接続Ｐ１６６を通じてNIC Ｅ１０にフレームを渡す。【０４７９】
NIC Ｅ１０は、接続Ｐ１６６を通じてドライバＥ９からフレームを受け取ると、ネットワーク５を介して、NIC Ｂ８にフレームを渡す。【０４８０】
NIC B8は、ネットワーク５を介して、NIC Ｅ１０からフレームを受け取ると、接続Ｐ１６８を通じてドライバB7にフレームを渡す。【０４８１】
以降の動作は、第１の実施の形態と同じであるため、説明を省略する。【０４８２】
以上のようにして、クライアントアプリケーションA1から送信されたデータは、ゲートウェイ７で暗号化されるとともに、サーバアプリケーションB1に確実に届けられることが確かめられた。【０４８３】
また、上記の処理完了後、サーバアプリケーションB1から、クライアントアプリケーションA1にデータが送信される場合の動作については、上述の経路を逆向きにデータが辿るだけであるので、説明を省略する。【０４８４】
以上の説明から、クライアントアプリケーションＡ１とサーバアプリケーションＢ１との間の双方向通信は、ゲートウェイ７を介することにより、必ず暗号化されることが確かめられた。【０４８５】
また、以上の説明では、ＰＣ１とサーバ２の間の通信を、ゲートウェイ７で暗号化する場合の動作について説明してきたが、図４０のように、ゲートウェイ７がＰＣ１やサーバ２に加えて、複数のＰＣとサーバの間の通信を仲介する場合、ゲートウェイ７の構成は以下のような構成となる。【０４８６】
ゲートウェイ７の中間ドライバＥ１は、ＰＣとサーバの間の通信セッションごとに、ＴＣＰ Ｅ１３、中継アプリケーションＥ１４、ＳＳＬ  Ｅ１６、およびＴＣＰ Ｅ１５を備え、ＰＣとサーバの間のＴＣＰセッションの中継処理を行う。これにより、各ＰＣと各サーバの間で送受信されるデータを、暗号化することが可能である。【０４８７】
また、上記の構成に加え、既に第２の実施の形態、および第３の実施の形態で述べたように、中間ドライバとＯＳをループバック接続することにより、ソフトウェア開発者にかかる手間を減らすことも可能である。上記のようなループバック処理を本実施の形態の中間ドライバに組み込んだ場合、図４１に示されるようなシステム構成となるが、その構成および動作については、第２の実施の形態、および第３の実施の形態の説明から明らかであるので、説明は省略する。【０４８８】
（効果）
次に、本実施の形態の効果について説明する。
本実施の形態では、第１の実施の形態においてＰＣに組み込まれていた中間ドライバの機能を、ゲートウェイ装置に搭載することにより、情報漏洩の危険性があるＰＣが複数台ある場合でも、各々のＰＣに中間ドライバをインストールすることなく、複数のＰＣとサーバ間の通信データをゲートウェイ装置で一括して暗号化することができる。このため、情報漏洩の危険性のある全てのＰＣに中間ドライバをインストールするといった手間を省くことができる。【０４８９】
以上好ましい実施の形態をあげて本発明を説明したが、本発明は必ずしも上記実施の形態に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。例えば電子メールのようにＰＣ１からサーバを経由してＰＣ２に送信する場合、送信データが暗号化されているかを判断するフレーム解析部と、このフレーム解析部で送信データが暗号化されていないと判断された場合、送信データを暗号化するＳＳＬとをサーバに設けても良い。
【図１】
2006093079.tif 000002
【図２】
2006093079.tif 000003
【図３】
2006093079.tif 000004
【図４】
2006093079.tif 000005
【図５】
2006093079.tif 000006
【図６】
2006093079.tif 000007
【図７】
2006093079.tif 000008
【図８】
2006093079.tif 000009
【図９】
2006093079.tif 000010
【図１０】
2006093079.tif 000011
【図１１】
2006093079.tif 000012
【図１２】
2006093079.tif 000013
【図１３】
2006093079.tif 000014
【図１４】
2006093079.tif 000015
【図１５】
2006093079.tif 000016
【図１６】
2006093079.tif 000017
【図１７】
2006093079.tif 000018
【図１８】
2006093079.tif 000019
【図１９】
2006093079.tif 000020
【図２０】
2006093079.tif 000021
【図２１】
2006093079.tif 000022
【図２２】
2006093079.tif 000023
【図２３】
2006093079.tif 000024
【図２４】
2006093079.tif 000025
【図２５】
2006093079.tif 000026
【図２６】
2006093079.tif 000027
【図２７】
2006093079.tif 000028
【図２８】
2006093079.tif 000029
【図２９】
2006093079.tif 000030
【図３０】
2006093079.tif 000031
【図３１】
2006093079.tif 000032
【図３２】
2006093079.tif 000033
【図３３】
2006093079.tif 000034
【図３４】
2006093079.tif 000035
【図３５】
2006093079.tif 000036
【図３６】
2006093079.tif 000037
【図３７】
2006093079.tif 000038
【図３８】
2006093079.tif 000039
【図３９】
2006093079.tif 000040
【図４０】
2006093079.tif 000041
【図４１】
2006093079.tif 000042
【図４２】
2006093079.tif 000043
【図４３】
2006093079.tif 000044
【図４４】
2006093079.tif 000045
【図４５】
2006093079.tif 000046
【図４６】
2006093079.tif 000047
【図４７】
2006093079.tif 000048
【手続補正書】
【提出日】平成18年7月13日(2006.7.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求の範囲
【補正方法】変更
【補正の内容】
【書類名】請求の範囲
【請求項１】（補正後）送信機と受信機とで構成される通信システムであって、
前記送信機のトランスポート層からのセッション確立要求に応答して前記送信機と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために前記受信機のトランスポート層と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化し、前記第２のセッションを通じて前記受信機に送信する暗号化手段と
を有することを特徴とする通信システム。
【請求項２】（補正後）前記第１のセッション確立手段は、複数のポートで前記送信機のトランスポート層からのセッション確立要求を待ちうけていることを特徴とする請求項１に記載の通信システム。
【請求項３】  送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする請求項１に記載の通信システム。
【請求項４】  前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段であることを特徴とする請求項３に記載の通信システム。
【請求項５】（補正後）前記第２のセッション確立手段は、前記第１のセッションで用いられているポートとは異なるポートを用いて前記第２のセッションを確立することを特徴とする請求項１に記載の通信システム。
【請求項６】（削除）
【請求項７】（補正後）前記第１のセッション確立手段、前記第２のセッション確立手段、及び前記暗号化手段は、ネットワーク層とデータリンク層との間に中間ドライバとして構成されていることを特徴とする請求項１に記載の通信システム。
【請求項８】（補正後）前記中間ドライバとその上位にあるアプリケーション層とを仮想ネットワークインターフェース経由で接続することにより、前記第２のセッション確立手段及び前記暗号化手段をＯｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍに実装させることを特徴とする請求項７に記載の通信システム。
【請求項９】  前記Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍは、前記第１のセッション確立手段を更に有することを特徴とする請求項８に記載の通信システム。
【請求項１０】  通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする請求項１に記載の通信システム。
【請求項１１】（補正後）前記制御手段が通信テストを行うタイミングは、
前記送信機が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項１０に記載の通信システム。
【請求項１２】（補正後）前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信機に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項１０に記載の通信システム。
【請求項１３】  前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする請求項１に記載の通信システム。
【請求項１４】  前記復号化手段は、前記第２のセッション確立手段が確立した第２のセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする請求項１３に記載の通信システム。
【請求項１５】  前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段であることを特徴とする請求項１３に記載の通信システム。
【請求項１６】（削除）
【請求項１７】（補正後）送信機と受信機とで構成される通信システムであって、
送信機のトランスポート層からのセッション確立要求に応答して前記送信機と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを前記受信機と送受信するための第２のセッションを、
前記受信機のトランスポート層と確立する第２のセッション確立手段と
を有することを特徴とする通信システム。
【請求項１８】（補正後）通信装置であって、
トランスポート層からのセッション確立要求に応答して第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために、送信先のトランスポート層と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化し、前記第２のセッションを通じて送信する暗号化手段と
を有することを特徴とする通信装置。
【請求項１９】（補正後）前記第１のセッション確立手段は、複数のポートで前記トランスポート層からのセッション確立要求を待ち受けていることを特徴とする請求項１８に記載の通信装置。
【請求項２０】  送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする請求項１８に記載の通信装置。
【請求項２１】  前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段であることを特徴とする請求項２０に記載の通信装置。
【請求項２２】（補正後）前記第２のセッション確立手段は、前記第１のセッションで用いられているポートとは異なるポートを用いて前記第２のセッションを確立することを特徴とする請求項１８に記載の通信装置。
【請求項２３】（削除）
【請求項２４】（補正後）前記第１のセッション確立手段、前記第２のセッション確立手段、及び前記暗号化手段は、ネットワーク層とデータリンク層との間に中間ドライバとして構成されていることを特徴とする請求項１８に記載の通信装置。
【請求項２５】（補正後）前記中間ドライバとその上位にあるアプリケーション層とを仮想ネットワークインターフェース経由で接続することにより、前記第２のセッション確立手段及び前記暗号化手段をＯｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍに実装させることを特徴とする請求項１８に記載の通信装置。
【請求項２６】  前記Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍは、前記第１のセッション確立手段を更に有することを特徴とする請求項２５に記載の通信装置。
【請求項２７】  通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする請求項１８に記載の通信装置。
【請求項２８】（補正後）前記制御手段が通信テストを行うタイミングは、
自身が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項２７に記載の通信装置。
【請求項２９】（補正後）前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または自身に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項２７に記載の通信装置。
【請求項３０】  前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする請求項１８に記載の通信装置。
【請求項３１】  前記復号化手段は、前記第２のセッション確立手段が確立した第２のセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする請求項３０に記載の通信装置。
【請求項３２】  前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段であることを特徴とする請求項３１に記載の通信装置。
【請求項３３】（削除）
【請求項３４】（補正後）通信装置であって、
トランスポート層からのセッション確立要求に応答して第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために送信先のトランスポート層と第２のセッションを確立する第２のセッション確立手段と、
を有することを特徴とする通信装置。
【請求項３５】（補正後）通信方法であって、
送信元のトランスポート層からのセッション確立要求に応答して第１のセッションを確立する第１のセッション確立ステップと、
送信先のトランスポート層と第２のセッションを確立する第２のセッション確立ステップと、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化する暗号化ステップと、
前記暗号化された送信データを前記第２のセッションを通じて前記送信先に送信する送信ステップと
を有することを特徴とする通信方法。
【請求項３６】（補正後）前記第１のセッション確立ステップは、前記送信元のトランスポート層からのセッション確立要求を複数のポートで待ち受け、いずれかのポートが受信した確立要求に応答してセッションを確立することを特徴とする請求項３５に記載の通信方法。
【請求項３７】  前記暗号化ステップは、送信データを判別し、判別の結果、暗号化されていない送信データを暗号化するステップであることを特徴とする請求項３５に記載の通信方法。
【請求項３８】  前記暗号化ステップは、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別することを特徴とする請求項３７に記載の通信方法。
【請求項３９】（補正後）前記第２のセッション確立ステップは、前記第１のセッションで用いられているポートとは異なるポートを用いて前記第２のセッションを確立することを特徴とする請求項３５に記載の通信方法。
【請求項４０】（削除）
【請求項４１】  通信テストを行い、通信テスト結果に応じて、前記送信データを暗号化するか否かを決定する制御ステップを有することを特徴とする請求項３５に記載の通信方法。
【請求項４２】  前記通信テストを行うタイミングは、
前記送信元の装置が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項４１に記載の通信方法。
【請求項４３】  前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信元に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項４１に記載の通信方法。
【請求項４４】  受信データを前記情報に基づいて復号する復号ステップを有することを特徴とする請求項３５に記載の通信方法。
【請求項４５】  前記復号化ステップは、前記第２のセッション確立ステップで確立された第２のセッションを経由して送られたと判別された受信データを復号するステップであることを特徴とする請求項４４に記載の通信システム。
【請求項４６】  前記復号化ステップは、受信データのヘッダを参照することにより判別することを特徴とする請求項４５に記載の通信システム。
【請求項４７】（削除）
【請求項４８】（補正後）通信方法であって、
送信元のトランスポート層からのセッション確立要求に応答して前記送信元と第１のセッションを確立する第１のセッション確立ステップと、
暗号化された送信データを送受信するための第２のセッションを送信先のトランスポート層と確立する第２のセッション確立ステップと
を有することを特徴とする通信方法。
【請求項４９】（補正後）情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを送受信するために前記受信側のトランスポート層と第２のセッションを確立する第２のセッション確立手段と、
前記第２のセッションを通じて、暗号化に必要な情報を交換し、この情報を元に前記第１のセッションを通じて受け取った送信データを暗号化し、前記第２のセッションを通じて前記受信機に送信する暗号化手段と
して機能させることを特徴とするプログラム。
【請求項５０】（補正後）前記第１のセッション確立手段は、複数のポートで前記送信側のトランスポート層からのセッション確立要求を待ち受ける手段として機能させることを特徴とする請求項４９に記載のプログラム。
【請求項５１】  送信データを判別し、判別の結果、暗号化されていない送信データを前記第１のセッション確立手段に送る判別手段を有することを特徴とする請求項４９に記載のプログラム。
【請求項５２】  前記判別手段は、送信データのヘッダを参照することにより、送信データが暗号化されているか否かを判別する手段として機能させることを特徴とする請求項５１に記載のプログラム。
【請求項５３】（補正後）前記第２のセッション確立手段は、前記第１のセッションで用いられているポートとは異なるポートを用いて前記第２のセッションを確立する手段として機能させることを特徴とする請求項４９に記載のプログラム。
【請求項５４】（削除）
【請求項５５】  通信テストを行い、この通信テスト結果に応じて、送信データを暗号化するか否かを決定する制御手段を有することを特徴とする請求項４９に記載のプログラム。
【請求項５６】  前記制御手段が通信テストを行うタイミングは、
前記送信側が起動する時、データの送受信時、一定時間間隔毎、及び指定時刻時のいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項５５に記載のプログラム。
【請求項５７】  前記通信テストは、
ＩＣＭＰエコー要求の応答が返ってくるかどうか、特殊フレームを用いたエコー要求の応答が返ってくるかどうか、または前記送信側に割り当てられているＩＰアドレスの値が規定値となっているかどうかのいずれか、若しくはいずれかの組み合わせであることを特徴とする請求項５５に記載のプログラム。
【請求項５８】  前記暗号化手段は、受信データを前記情報に基づいて復号する復号手段を有することを特徴とする請求項４９に記載のプログラム。
【請求項５９】  前記復号化手段は、前記第２のセッション確立手段が確立したセッションを経由して送られたと前記判別手段によって判別された受信データを復号する手段であることを特徴とする請求項５８に記載のプログラム。
【請求項６０】  前記判別手段は、受信データのヘッダを参照することにより、受信データが前記第２のセッション確立手段によって確立された第２のセッションを経由して送られたと判別する手段として機能させることを特徴とする請求項５９に記載のプログラム。
【請求項６１】（削除）
【請求項６２】（補正後）情報処理装置のプログラムであって、前記プログラムは前記情報処理装置を、
送信側のトランスポート層からのセッション確立要求に応答して前記送信側と第１のセッションを確立する第１のセッション確立手段と、
暗号化された送信データを前記受信機と送受信するための第２のセッションを、
前記受信機のトランスポート層と確立する第２のセッション確立手段と
して機能させることを特徴とするプログラム。
１００
【国際調査報告】
2006093079.tif 000049
2006093079.tif 000050
2006093079.tif 000051
2006093079.tif 000052