説明

通信装置及び通信システム

【課題】 従来、送受信するパケット量を増加させても、必要なメモリ容量が増加させず低コストとし、メモリ帯域の消費量が増加しないで、オフローダの性能を向上させること。
【解決手段】 端末801が前記パケット処理装置800に向けてパケットAの後にパケットBを送信し、パケットAの蓄積をせず、パケットBの到着順がパケットAよりも先になった場合のみ、パケットBを蓄積する受信バッファ809を備え、パケットAの処理終了時に、パケットBが受信バッファ809に蓄積されている場合に、パケットBを読み出すことで、受信バッファ809に読み書きするパケットを到着順に誤りのあるパケットに限定し、受信バッファへのパケットデータの読み書き回数を削減しつつ、端末が送信した順番にパケットの到着順を揃える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信装置及び通信システムに係り、特に、メッセージ処理を高速化する通信装置及び通信システムに関する。
本発明は、例えば、サーバとクライアントの間に設置され、サーバから受信した平文データを暗号化してクライアントに送信し、クライアントから受信した暗号データを復号化してサーバに送信する通信装置を用いて、サーバの暗号化通信のための演算処理を肩代わりすると共に、サーバとクライアントとの間の暗号化通信を高速化するための技術に関する。
【背景技術】
【0002】
インターネットを通じた商取引拡大を背景に,TLS(Transport Layer Security)/SSL(Secure Socket Layer)を利用した暗号化通信のニーズが高まっている。
暗号化通信は,サーバと多数のクライアントの間で実施される。サーバに接続するクライアントの数が多くなり,送受信するデータ量が増加すると,サーバへの演算負荷が高まり,処理速度が低下するという課題があった。
そこで、サーバに代わって暗号化通信を終端し,高速にデータを暗号・復号化する機能から成るTLS/SSLオフローダ機能を,サーバ前段に配置する通信装置に追加して,サーバの処理速度を向上させる必要がでてきた。
TLSオフローダ機能付き通信装置として、例えば、特許文献1のようなプロトコル処理装置が用いられる。
本プロトコル処理装置では、全パケットが受信バッファに蓄積される。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2007−215013号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
図1に、TLS/SSLオフローダ機能付き通信装置の概要を示す。
TLS/SSLオフローダ機能付き通信装置(以下、オフローダ)100は、サーバ101とクライアント102の間に配置される。
サーバ101とオフローダ100の間には、通常のTCPコネクションが作成される。クライアント102とオフローダ100の間には、SSLセッション104が作成され、その中に複数のTCPコネクションおよびTLS/SSLコネクションが作成される。
オフローダ100は、クライアント102とサーバ101との間で、TCPのハンドシェーク処理を仲介する。クライアントからのSYNパケット(接続要求パケット)をサーバ101に送信してから、サーバからのSYN−ACKパケット(接続要求受取り確認応答パケット)をクライアント102に送信し、更に、クライアントからのACKパケットをサーバ101に送信する。
TCPコネクション確立のシーケンスが完了すると、クライアントとの間でTLS/SSLコネクション確立のシーケンス処理を、オフローダ100がサーバに代わって実行する。
TLS/SSLコネクション確立のシーケンス処理では、まず初めに、クライアント102からClient Helloメッセージ(利用可能な暗号方式の候補を複数指定)を含むパケットが、サーバに向けて送信される。
オフローダは、Client Helloパケットを受け取ると、Server Helloメッセージ(利用する暗号方式を1つ指定)と、公開鍵を含むCertificateメッセージと、Server Hello Doneメッセージを含むパケットをクライアント102に送信する。
【0005】
クライアントは、上記パケットを受信すると、秘密鍵となるプリマスターシークレットを生成し、公開鍵を用いて暗号化する。更に、暗号化したマスターシークレットを含むKeyExchangeメッセージと、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケットをサーバ101に向けて送信する。なお、KeyExchangeメッセージと、ChangeCipherSpecメッセージと、Finishedメッセージは、同一のパケットに含まれる場合と、別々のパケットに含まれる場合がある。
オフローダ100は、上記パケットを受け取ると、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケットをクライアント102に向けて送信する。
以上記載したTLS/SSLコネクション確立のシーケンスが完了すると、TLS/SSLによる暗号化通信が開始される。
なお、クライアントが、もう一つ別のTLS/SSLコネクションを作成する際には、TCPのハンドシェークを行った上で、すでに合意した暗号方式と、すでにやり取りしたマスターシークレットを再利用する旨(以降、セッションの再利用と呼ぶ)を指定したClient Helloメッセージを、サーバ101に向けて送信する。
オフローダ100は、セッションの再利用を指定するClient Helloメッセージ付パケットを受信すると、Server Helloメッセージ(利用する暗号方式を1つ指定)と、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケットをクライアントに向けて送信する。公開鍵を含むCertificateメッセージは送信されない。
上記パケットを受け取ったクライアントは、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケットをサーバ101に向けて送信する。なお、ChangeCipherSpecメッセージと、Finishedメッセージは、同一のパケットに含まれる場合と、別々のパケットに含まれる場合がある。
【0006】
オフローダ100が上記Finishedメッセージを含むパケットを受け取ると、TLS/SSLコネクションが確立し、暗号化通信が開始される。
TLS/SSLによる暗号化通信では、クライアントからの暗号化パケットが、オフローダ100によって復号化され、平文パケットがサーバ101に向けて送信される。また、サーバからの平文パケットが、オフローダによって復号化され、暗号化パケットがクライアント102に向けて送信される。
暗号化通信が完了すると、オフローダ100は、TCPコネクションのクローズシーケンスを仲介する。クライアント102からのFIN−ACKパケット(接続切断要求)をサーバ101に送信してから、サーバ101からのFIN−ACKパケット(接続切断要求への応答)をクライアント102に送信し、更に、クライアント102からのACKパケットをサーバ101に送信する。
【0007】
以下に、上記TLS/SSLのシーケンスを、従来型の汎用CPUを用いた装置において処理する場合の課題について述べる。
上記装置では、汎用CPU上で、TCP/IPレイヤの処理を行うTCP/IPレイヤ処理プロセスと、TLS/SSLレイヤの処理を行うTLS/SSLメッセージ処理プロセスが実行されている。
TCP/IPレイヤ処理プロセスは、TCP/IPコネクションが生成される毎に、対となるTLS/SSLメッセージ処理プロセスと送信バッファと受信バッファを生成し、受信パケットが含むメッセージをすべて、TLS/SSLメッセージ処理プロセス毎に用意された受信バッファに蓄積する。
TLS/SSLメッセージ処理プロセスは、受信バッファのメッセージを1つずつ読みだして、シーケンシャルに処理を行う。
また、TLS/SSLメッセージ処理プロセスが生成した返信メッセージは全て、プロセス毎に確保された送信バッファに蓄積される。TCP/IPレイヤ処理プロセスは、送信バッファのメッセージをTCP/IPヘッダでカプセル化して、パケットを送信する。
なお、汎用CPU上のTLS/SSLメッセージ処理プロセスが行う処理の一部を、外部に接続した暗号アクセラレータが肩代わりするケースもある。この場合は、TLS/SSLメッセージ中の一部の暗号化された鍵データや、暗号化データや、平文データや、改竄チェック用のMAC値が、暗号アクセラレータとの間でやりとりされる。
【0008】
なお、改竄チェック用のMAC(Message Authentification Code:メッセージ認証コード)値とは、例えば、暗号化前のメッセージによるハッシュ値を使って計算する値であり、メッセージを受け取った端末が、通信経路上でメッセージが改竄されていないかを判定するために用いられる。
以上述べてきた従来型の汎用CPUを用いた装置では、全てのメッセージデータが、受信バッファと送信バッファを必ず往復する。オフローダ100の性能を向上させるために、送受信するパケット量を増加させると、必要なメモリ容量が増加し高コストとなるだけでなく、メモリ帯域の消費量が増加し、性能が劣化するという課題があった。
【0009】
本発明は、以上の点に鑑み、到着順に誤りのある一部のパケットのみを受信バッファに読み書きすることで、端末が送信した順番にパケットのメッセージ処理を行うことを実現することを目的とする。
また、本発明は、メッセージ単位ではなくパケット単位での処理を実現することを他の目的とする。
また、本発明は、クライアント送信バッファ及び/又はサーバ送信バッファからのパケット読出し回数の抑制を実現することを他の目的とする。
【課題を解決するための手段】
【0010】
本発明は、これらの課題を解決するため、例えば、
TCPコネクション毎に、どこまで受信したかを記録しておくTCP/IPコネクションテーブルと、
TCP/IPコネクションテーブルから、受信パケットに対応するTCP状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定するTCP状態遷移判定部と、を備える通信装置において、
端末が、パケットAの後にパケットBを送信し、
パケットAの蓄積はせず、パケットBの到着順がパケットAよりも先になった場合のみ、パケットBを蓄積する受信バッファと、
前記TCP状態遷移判定部が、パケットBがパケットAよりも先に到着したことを検出した場合のみ、パケットBを受信バッファに蓄積するACK不一致パケット処理部と、
メッセージ処理するメッセージ処理部と、
前記メッセージ処理部におけるパケットAの処理終了時に、パケットBが受信バッファに蓄積されている場合に、パケットBを読み出してメッセージ処理部に出力する後続パケット再入力部と、を備え、
到着順に誤りのある一部のパケットのみを受信バッファに読み書きすることで、端末が送信した順番にパケットがメッセージ処理部に到着することを実現する通信装置が提供される。
【0011】
また、前記通信装置において、
メッセージ処理部がTLS/SSLメッセージを処理する場合に、
メッセージ処理部に、1つまたは複数または分割されたTLS/SSLメッセージを含むパケットが入力され、どのようなメッセージが含まれるかを判定するための、パケットタイプ判定部を備え、
パケットタイプ判定部の判定結果に基づいて、
入力パケットが、クライアントが送信するハンドシェークメッセージを1つまたは複数含む場合は、受信した1つまたは複数のハンドシェークメッセージに対応するハンドシェークメッセージを含むパケットを作成し、
入力パケットが、サーバが送信する平文データを含むパケットだった場合は、平文データを暗号化したクライアント宛パケットを作成し、
入力パケットが、クライアントが送信する暗号データを含み改竄チェック用のMAC値を含まないパケットだった場合は、暗号データを複号化したサーバ宛パケットと改竄チェック用のMAC値の途中結果を作成し、
入力パケットが、クライアントが送信する暗号データを含み改竄チェック用のMAC値を含むパケットだった場合は、暗号データを複号化したサーバ宛パケットと改竄チェック用のMAC値を作成し、改竄チェック用のMAC値の整合性をチェックすることで、
メッセージ単位ではなくパケット単位での処理を実現する。
【0012】
更に、前記通信装置において、
メッセージ処理部が作成したクライアント宛パケットをACK未受信の情報と共に蓄積するクライアント向け送信バッファと、
クライアントから応答ACKを受信したときに、前記クライアント向け送信バッファの対応するパケットのACK未受信の情報をACK応答済みの情報に変更し、
重複ACKを受信したときに、前記クライアント向け送信バッファの対応するパケットを読み出して再送するクライアント送信ACK処理部を備えることで、
クライアント送信バッファからのパケット読出し回数の抑制を実現する。
【0013】
更に、前記通信装置において、
サーバ宛パケットをACK未受信およびベリファイ未完了の情報と共に蓄積するサーバ向け送信バッファと、
TLS/SSLメッセージ処理部から、改竄チェック用のMAC値を含まない復号化済みパケットを受け取ったときに、ACK未受信およびベリファイ未完了の情報と共に前記送信バッファに蓄積し、
TLS/SSLメッセージ処理部から、正しい改竄チェック用のMAC値を含む復号化済みパケットを受け取ったときに、前記送信バッファに蓄積したベリファイ未完了のパケットをベリファイ完了とした上で読み出して送信してから、正しい改竄チェック用のMAC値を含む復号化済みパケットを送信し、
TLS/SSLメッセージ処理部から、誤った改竄チェック用のMAC値を含む復号化済みパケットを受け取ったときに、前記送信バッファに蓄積したベリファイ未完了のパケットを消去するサーバ向け平文パケット作成部と、
サーバから、応答ACKを受信したときに、前記サーバ向け送信バッファの対応するパケットのACK未受信の情報をACK受信済みに変更し、
サーバから、重複ACKを受信したときに、前記サーバ向け送信バッファの対応するパケットを読み出して再送するサーバACK処理部と、を備えることで、
サーバ送信バッファからのパケット読出し回数の抑制を実現する。
【0014】
本発明の第1の解決手段によると、
クライアント端末とサーバ端末との間に設置され、前記サーバ端末から受信した平文データを暗号化して前記クライアント端末に送信し、前記クライアント端末から受信した暗号データを復号化して前記サーバ端末に送信するために、暗号化通信のコネクション確立シーケンスを前記サーバ端末に代わって実行するための通信装置において、
端末識別情報に対応して、端末が通信装置に送信してきたデータ量を表すための値である第1端末シーケンス情報と、端末が送信してきたデータのうち、実際に通信装置が受信して確認応答を端末に返信したデータ量を表す第1確認シーケンス情報と、通信装置が端末に送信したデータ量を表すための値である第2端末シーケンス情報と、通信装置が実際に端末からのACKを受信済みのデータ量である第2確認シーケンス情報と、を含むコネクション状態データを記憶し、コネクション毎にどこまで受信したかを記録するためのコネクション状態テーブルと、
パケットの到着順が逆転した場合に、後に到着すべきパケットを蓄積するための受信バッファと、
前記コネクション状態テーブルから、受信パケットに対応するコネクション状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定し、パケットの到着順が逆転した場合に、後に到着すべきパケットを前記受信バッファに蓄積するためのパケット処理部と
を備え、

前記パケット処理部は、
端末から、送信元識別情報、送信シーケンス情報、宛先シーケンス情報、ペイロード長を含む、暗号化通信のコネクション確立のための第1の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第1の受信パケットの送信元識別情報が一致するコネクション状態データを求め、
該コネクション状態データについて、前記端末からの前記第1の受信パケットの送信シーケンス情報Aと、第1確認シーケンス情報Aが一致する場合、第1端末シーケンス情報Aにペイロード長Lを加算して A+L に更新し、第1確認シーケンス情報Aにペイロード長Lを加算して A+L に更新し、シーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第1の送信パケットを、前記端末に向けて送信し、
一方、前記端末から、送信シーケンス情報 A+L 及びペイロード長Lの第2の受信パケットが送られたが、該第2の受信パケットを受信する前に、続けて前記端末から送信された、送信シーケンス情報 A+2L 及びペイロード長Lの第3の受信パケットを受信したとき、
前記コネクション状態テーブルを参照し、前記第3の受信パケットに含まれる送信シーケンス情報 A+2L と、第1確認シーケンス情報のシーケンス情報 A+L が異なる場合、該第3のパケットのペイロード長が0より大きければ該第3の受信パケットを前記受信バッファに蓄積し、該第3の受信パケットに含まれる送信シーケンス情報 A+2L を、第1端末シーケンス情報として前記コネクション状態テーブルを更新し、第1確認シーケンス情報のシーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第2の送信パケットを作成し、該第2の送信パケットを前記端末に向けて送信し、
前記端末は、前記第2の送信パケットを受け取ると、宛先シーケンス情報 A+L により、前記第2の受信パケットが前記通信装置で受信されていないことを判定することにより、前記端末から、送信シーケンス情報を A+L 及びペイロード長Lの前記第2の受信パケット又は前記第2の受信パケットと同じ内容の第4の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第2又は第4の受信パケットの送信シーケンス情報 A+L と、第1確認シーケンス情報のシーケンス情報 A+L が一致することを確認すると、第1確認シーケンス情報 A+L に、前記第4の受信パケットのペイロード長Lを加算して A+2L に更新し、シーケンス情報 A+2L を宛先シーケンス情報としたペイロード長0の第3の送信パケットを作成し、該第3の送信パケットを前記端末に向けて送信する
前記通信装置が提供される。
【0015】
本発明の第2の解決手段によると、
クライアント端末とサーバ端末との間に設置され、前記サーバ端末から受信した平文データを暗号化して前記クライアント端末に送信し、前記クライアント端末から受信した暗号データを復号化して前記サーバ端末に送信するために、暗号化通信のコネクション確立シーケンスを前記サーバ端末に代わって実行するための通信装置において、
端末識別情報に対応して、端末が通信装置に送信してきたデータ量を表すための値である第1端末シーケンス情報と、端末が送信してきたデータのうち、実際に通信装置が受信して確認応答を端末に返信したデータ量を表す第1確認シーケンス情報と、通信装置が端末に送信したデータ量を表すための値である第2端末シーケンス情報と、通信装置が実際に端末からのACKを受信済みのデータ量である第2確認シーケンス情報と、を含むコネクション状態データを記憶し、コネクション毎にどこまで受信したかを記録するためのコネクション状態テーブルと、
パケットの到着順が逆転した場合に、後に到着すべきパケットを蓄積するための受信バッファと、
前記コネクション状態テーブルから、受信パケットに対応するコネクション状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定し、パケットの到着順が逆転した場合に、後に到着すべきパケットを前記受信バッファに蓄積するためのパケット処理部と
を備え、

前記パケット処理部は、
端末へ、送信元識別情報、送信シーケンス情報、宛先シーケンス情報、ペイロード長を含む、暗号化通信のコネクション確立のための第1の送信パケットを送信し、
前記コネクション状態テーブルを参照し、前記第1のパケットの送信元識別情報が一致するコネクション状態データを求め、
該コネクション状態データについて、ペイロード長Lの前記第1の送信パケットの送信シーケンス情報Bと、第2端末シーケンス情報Bが一致する場合、第2端末シーケンス情報Bにペイロード長Lを加算して B+L に更新し、
前記第1の送信パケットに応答して、前記端末から、宛先シーケンス情報を B+L としたペイロード長0の第1の受信パケットを受け取ると、前記コネクション状態テーブルの第2確認シーケンス情報に、前記第1の受信パケットに含まれる宛先シーケンス情報 B+L を記憶し、

一方、前記端末に向けて、前記コネクション状態テーブルを参照し、第2端末シーケンス情報と同じ送信シーケンス情報 B+L 及びペイロード長Lの第2の送信パケットを送り、第2端末シーケンス情報 B+L に、第2の送信パケットのペイロード長Lを加算して、B+2L に更新し、
続けて、第2端末シーケンス情報と同じ送信シーケンス情報 B+2L を持つペイロード長Lの第3の送信パケットを送り、第2端末シーケンス情報 B+2L に、該第3の送信パケットのペイロード長Lを加算し、B+3L に更新し、
前記端末は、前記第2の送信パケットを受け取る前に前記第3の送信パケットを受け取った場合、送信シーケンス情報 B+2L より、その前の前記第2の送信パケットが受信できなかったことを判定することにより、前記端末から送信された、前記第2の送信パケットの再送を促すため、宛先シーケンス情報を B+L としたペイロード長0の第2の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第2の受信パケット又は該第2の受信パケットと同じ内容のパケットを、所定回数連続して受信した場合、前記第2の送信パケットが途中で廃棄されてしまったことを判定し、送信シーケンス情報 B+L 及びペイロード長Lの前記第2の送信パケットを再送又は前記第2の送信パケットと同じ内容の第4の送信パケットを送信し、
前記第2又は第4の送信パケットに応答して、前記端末から、宛先シーケンス情報を B+3L としたペイロード長0の第3の受信パケットを受信する
前記通信装置が提供される。
【0016】
本発明の第3の解決手段によると、
クライアント端末とサーバ端末との間に設置され、前記サーバ端末から受信した平文データを暗号化して前記クライアント端末に送信し、前記クライアント端末から受信した暗号データを復号化して前記サーバ端末に送信するために、暗号化通信のコネクション確立シーケンスを前記サーバ端末に代わって実行するための通信装置を備えた通信システムにおいて、
前記通信装置は、
端末識別情報に対応して、端末が通信装置に送信してきたデータ量を表すための値である第1端末シーケンス情報と、端末が送信してきたデータのうち、実際に通信装置が受信して確認応答を端末に返信したデータ量を表す第1確認シーケンス情報と、通信装置が端末に送信したデータ量を表すための値である第2端末シーケンス情報と、通信装置が実際に端末からのACKを受信済みのデータ量である第2確認シーケンス情報と、を含むコネクション状態データを記憶し、コネクション毎にどこまで受信したかを記録するためのコネクション状態テーブルと、
パケットの到着順が逆転した場合に、後に到着すべきパケットを蓄積するための受信バッファと、
前記コネクション状態テーブルから、受信パケットに対応するコネクション状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定し、パケットの到着順が逆転した場合に、後に到着すべきパケットを前記受信バッファに蓄積するためのパケット処理部と
を備え、

前記パケット処理部は、
端末から、送信元識別情報、送信シーケンス情報、宛先シーケンス情報、ペイロード長を含む、暗号化通信のコネクション確立のための第1の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第1の受信パケットの送信元識別情報が一致するコネクション状態データを求め、
該コネクション状態データについて、前記端末からの前記第1の受信パケットの送信シーケンス情報Aと、第1確認シーケンス情報Aが一致する場合、第1端末シーケンス情報Aにペイロード長Lを加算して A+L に更新し、第1確認シーケンス情報Aにペイロード長Lを加算して A+L に更新し、シーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第1の送信パケットを、前記端末に向けて送信し、
一方、前記端末から、送信シーケンス情報 A+L 及びペイロード長Lの第2の受信パケットが送られたが、該第2の受信パケットを受信する前に、続けて前記端末から送信された、送信シーケンス情報 A+2L 及びペイロード長Lの第3の受信パケットを受信したとき、
前記コネクション状態テーブルを参照し、前記第3の受信パケットに含まれる送信シーケンス情報 A+2L と、第1確認シーケンス情報のシーケンス情報 A+L が異なる場合、該第3のパケットのペイロード長が0より大きければ該第3の受信パケットを前記受信バッファに蓄積し、該第3の受信パケットに含まれる送信シーケンス情報 A+2L を、第1端末シーケンス情報として前記コネクション状態テーブルを更新し、第1確認シーケンス情報のシーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第2の送信パケットを作成し、該第2の送信パケットを前記端末に向けて送信し、
前記端末は、前記第2の送信パケットを受け取ると、宛先シーケンス情報 A+L により、前記第2の受信パケットが前記通信装置で受信されていないことを判定することにより、前記端末から、送信シーケンス情報を A+L 及びペイロード長Lの前記第2の受信パケット又は前記第2の受信パケットと同じ内容の第4の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第2又は第4の受信パケットの送信シーケンス情報 A+L と、第1確認シーケンス情報のシーケンス情報 A+L が一致することを確認すると、第1確認シーケンス情報 A+L に、前記第4の受信パケットのペイロード長Lを加算して A+2L に更新し、シーケンス情報 A+2L を宛先シーケンス情報としたペイロード長0の第3の送信パケットを作成し、該第3の送信パケットを前記端末に向けて送信する
前記通信システムが提供される。

【図面の簡単な説明】
【0017】
【図1】TLS/SSLオフローダの説明図。
【図2】本実施の形態の通信装置が、サーバおよびクライアントとやりとりするパケットのシーケンス図(SSLの基本シーケンス)(1)。
【図3】本実施の形態の通信装置が、サーバおよびクライアントとやりとりするパケットのシーケンス図(SSLの基本シーケンス)(2)。
【図4】本実施の形態の通信装置が、サーバおよびクライアントとやりとりするパケットのシーケンス図(SSLコネクション確立の変則シーケンス)(1)。
【図5】本実施の形態の通信装置が、サーバおよびクライアントとやりとりするパケットのシーケンス図(SSLコネクション確立の変則シーケンス)(2)。
【図6】本実施の形態の通信装置が、サーバおよびクライアントとやりとりするパケットのシーケンス図。
【図7】本実施の形態の通信装置が、サーバおよびクライアントとやりとりするパケットのシーケンス図。
【図8】本実施の形態の通信装置のアーキテクチャの一例のブロック図。
【図9】本実施の形態の通信装置の一部のブロック図。
【図10】本実施の形態の通信装置の一部のブロック図。
【図11】本実施の形態における通信装置とクライアントとサーバの間でやりとりされるパケットフォーマットの説明図。
【図12】本実施の形態におけるTCPコネクションの状態を格納するテーブルのフォーマットの一例の説明図。
【図13】本実施の形態の通信装置の一部のブロックにおいて行われる処理のフローチャート図。
【図14】本実施の形態の通信装置の一部のブロックにおいて行われる処理のフローチャート図。
【図15】本実施の形態の通信装置の一部のブロックにおいて行われる処理のフローチャート図。
【図16】本実施の形態の通信装置の一部のブロックにおいて行われる処理のフローチャート図。
【図17】本実施の形態における通信装置とクライアントとサーバの間でやりとりされるパケットが含むペイロードフォーマットの説明図。
【図18】本実施の形態の通信装置の一部のブロックにおいて行われる処理のフローチャート図。
【図19】本実施の形態におけるTLS/SSLコネクションの状態を格納するテーブルのフォーマットの一例の説明図。
【図20】クライアントがペイロード長Lのパケットを送信するときの説明図。
【図21】オフローダがクライアントに向けてペイロード長Lのパケットを送信するときの説明図。
【図22】サーバがペイロード長Lのパケットを送信するときの説明図。
【図23】オフローダがサーバに向けてペイロード長Lのパケットを送信するときの説明図。
【図24】Client Seqと、Acked Client Seqの関係を表す説明図。
【図25】Seq for Clientと、Acked Seq for Clientの関係を表す説明図。
【図26】Server Seqと、Acked Server Seqの関係を表す説明図。
【図27】Seq for Serverと、Acked Seq for Serverの関係を表す説明図。
【図28】メッセージ処理部のブロック図。
【発明を実施するための形態】
【0018】
以下、本発明の実施の形態を、図面を用いて説明する。
1.TLS/SSLコネクション確立シーケンス

まず初めに、図2及び図3に、TLS/SSLコネクション確立までのシーケンス処理(SSLの基本シーケンス)を示す。また、図4及び図5に、TLS/SSLコネクション確立の変則シーケンスを示す。
オフローダ100は、クライアント102とサーバ101との間で、TCPのハンドシェーク処理を仲介する。クライアントからのSYNパケット200をサーバ101に送信してから(201)、サーバからのSYN−ACKパケット202をクライアント102に送信し(203)、更に、クライアントからのACK204パケットをサーバ101に送信(205)する。
TCPコネクション確立のシーケンスが完了すると、クライアントとの間でTLS/SSLコネクション確立のシーケンス処理を、サーバに代わって実行する。
TLS/SSLコネクション確立のシーケンス処理では、まず初めに、クライアント102からClient Helloメッセージ206(利用可能な暗号方式の候補を複数指定)を含むパケットが、サーバに向けて送信される。
オフローダは、Client Helloパケット206を受け取ると、Server Helloメッセージ(利用する暗号方式を1つ指定)と、公開鍵を含むCertificateメッセージと、Server Hello Doneメッセージを含むパケット207をクライアント102に送信する。
クライアントは、上記パケットを受信すると、秘密鍵となるマスターシークレットを生成し、公開鍵を用いて暗号化する。更に、暗号化したマスターシークレットを含むKeyExchangeメッセージと、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケット208をサーバ101に向けて送信する。なお、図4及び図5の303〜305、309、310、314、315に示すように、KeyExchangeメッセージと、ChangeCipherSpecメッセージと、Finishedメッセージは、同一のパケットに含まれる場合と、別々のパケットに含まれる場合がある。
オフローダ100は、上記パケット208を受け取ると、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケット209をクライアント102に向けて送信する。
以上記載したTLS/SSLコネクション確立のシーケンスが完了すると、TLS/SSLによる暗号化通信が開始される。
【0019】
TLS/SSLによる暗号化通信では、クライアントからの暗号化パケット213が、オフローダ100によって復号化され、平文パケット214がサーバ101に向けて送信される。また、サーバからの平文パケット216が、オフローダによって復号化され、暗号化パケット215がクライアント102に向けて送信される。
暗号化通信が完了すると、オフローダ100は、TCPコネクションのクローズシーケンスを仲介する。クライアント102からのFIN−ACKパケット217をサーバ101に送信してから(218)、サーバ101からのFIN−ACKパケット220をクライアント102に送信し(219)、更に、クライアント102からのACKパケット221をサーバ101に送信(222)する。
【0020】
なお、図3に示されるように、クライアントが、もう一つ別のTLS/SSLコネクションを作成する際には、TCPのハンドシェークを行った上で、すでに合意した暗号方式と、すでにやり取りしたマスターシークレットを再利用する旨(以降、セッションの再利用と呼ぶ)を指定したClient Helloメッセージ210を、サーバ101に向けて送信する。
オフローダ100は、セッションの再利用を指定するClient Helloメッセージ付パケット210を受信すると、Server Helloメッセージ(利用する暗号方式を1つ指定)と、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケット211をクライアントに向けて送信する。公開鍵を含むCertificateメッセージは送信されない。
上記パケットを受け取ったクライアントは、暗号化通信の開始を通知するChangeCipherSpecメッセージと、これまでのメッセージをベリファイするためのFinishedメッセージを含むパケット212をサーバ101に向けて送信する。なお、図5の319、320等に示すように、ChangeCipherSpecメッセージと、Finishedメッセージは、同一のパケットに含まれる場合と、別々のパケットに含まれる場合がある。
オフローダ100が上記パケット212を受け取ると、TLS/SSLコネクションが確立し、暗号化通信が開始される。
【0021】
2.オフローダの概要

図8には、本実施の形態のオフローダ800のアーキテクチャを示す。
オフローダ800は、クライアントやサーバ等の装置外部とパケットをやり取りするネットワークインターフェース802と、パケット処理部803と、メモリ805と、を備える。
パケット処理部803は、TCP/IPレイヤ処理部807と、TLS/SSLメッセージ処理部812と、テーブルサイズ/アドレス範囲指定レジスタ806と、暗号アクセラレータ814とを備える。
メモリ805は、TCPの状態を管理するTCPコネクションテーブル808と、ACK不一致の受信パケットのみを蓄積する受信バッファ809と、ACK未受信のクライアント宛パケットを蓄積するクライアント宛送信バッファ810と、MACベリファイが未済みでACK未受信のサーバ向けパケットを蓄積するサーバ宛送信バッファ811と、TLS/SSLの状態を管理するTLS/SSL状態テーブル813を、内部に備える。
TCP/IPレイヤ処理部807と、TLS/SSLメッセージ処理部812は、テーブルサイズ/アドレス範囲指定レジスタ806記載の値に従って、メモリ805のアドレス空間に、TCPコネクションテーブル808と、受信バッファ809と、クライアント宛送信バッファ810と、サーバ宛送信バッファ811と、TLS/SSL状態テーブル813と、の領域を確保する。
図11には、ネットワークインターフェース802が送受信するパケットデータのフォーマットの一例を示す。
パケットデータは、Len1100と、Proto1101と、SIP1102と、DIP1103と、Sport1104と、Dport1105と、SSeq1106と、DSeq1107と、Flag1108と、Others1109と、Payload1110と、DMAC1111と、SMAC1112と、Type1113とを含む。
Len1100は、IP層のパケット長を格納する。Proto1101は、トランスポート層のプロトコルを識別するための識別番号を格納する。SIP1102は、送信元アドレス、すなわち、送信側の端末のアドレスである送信元IPアドレスを格納する。DIP1103は、宛先アドレス、すなわち、受信側の端末のアドレスである宛先IPアドレスを格納する。Sport1104は、TCPの送信元ポートを格納する。Dport1105は、TCPの宛先ポートを格納する。SSeq1106は、送信元シーケンス番号を格納する。DSeq1107は、宛先シーケンス番号を格納する。Flag1108はTCPフラグ番号を格納する。Others1109は、その他のIP/TCPヘッダデータを格納する。Payload1110は、パケットヘッダ以外のデータを格納する。DMAC1111は、物理層の宛先MACアドレスを格納する。SMAC1112は、物理層の送信元MACアドレスを格納する。Type1113は、パケットデータのタイプを表す。なお、MACとは、Media Access Control Frameのことをあらわし、物理層を流れるパケットのことをMACフレームと呼ぶ。SSLのMAC(Message Authentification Code:メッセージ認証コード)とは異なるものである。
【0022】
また、Payload1110が、最大で3つのTLS/SSLのメッセージを含むことがある。メッセージ長を格納するSSL Len1114/1118/1122と、メッセージタイプを格納するMsg Type1115/1119/1123と、その他のSSLヘッダデータを格納するSSL Others1116/1120/1124と、TLS/SSLメッセージ本体を格納するSSL Message1117/1121/1125とを含む。これらをすべて含む場合もあれば、部分的に含む場合もある。
図12には、オフローダ100がクライアント102およびサーバ101との間で作成するTCPコネクションの状態(以下、TCP状態と呼ぶ)を記録するTCPコネクション状態格納テーブル808の1エントリに記載されるTCP状態のフォーマットの一例を示す。
TCP状態は、クライアントのIPアドレスを格納するClient IP1201と、オフローダがクライアント側に対して公開しているIPアドレスを格納するOffloader IP for Client1202と、クライアント102のTCPのポート番号を格納するClient Port1203と、オフローダ100のクライアント側のTCPのポート番号を格納するPort for Client1204と、クライアントが送信してきたデータのシーケンス番号を格納するClient Seq1205(第1端末シーケンス情報)と、オフローダ100がクライアント側に向けて送信済みのデータのシーケンス番号を格納するSeq for Client1206(第2端末シーケンス情報)と、クライアントの送信済みデータに対してオフローダ100がACKを返信済みのシーケンス番号を格納するAcked Client Seq1207(第1確認シーケンス情報)と、オフローダ100がクライアント側に向けて送信済みのデータに対してクライアントがACKを返信済みのシーケンス番号を格納するAcked Seq for Client1208(第2確認シーケンス情報)と、クライアント102とのTCPコネクションの状態を格納するClient State1209と、サーバのIPアドレスを格納するSerer IP1211と、オフローダがサーバ側に対して公開しているIPアドレスを格納するOffloader IP for Serer1212と、サーバ101のTCPのポート番号を格納するSerer Port1213と、オフローダ100のサーバ側のTCPポート番号を格納するPort for Server1214と、サーバの送信済みデータのシーケンス番号を格納するServer Seq1215(第1端末シーケンス情報)と、オフローダ100がサーバ側に向けて送信済みのデータのシーケンス番号を格納するSeq for Server1216(第2端末シーケンス情報)と、サーバの送信済みデータに対してオフローダ100がACKを返信済みのシーケンス番号を格納するAcked Server Seq1217(第1確認シーケンス情報)と、オフローダ100がサーバ側に向けて送信済みのデータに対してサーバがACKを返信済みのシーケンス番号を格納するAcked Seq for Server1218(第2確認シーケンス情報)と、サーバ101とのTCPコネクションの状態を格納するServer State1219と、を含む。
【0023】
図24には、Client Seq1205と、Acked Client Seq1207の関係を表す説明図を示す。
Client Seq1205は、クライアントがオフローダに送るべきデータ量のうち、クライアントがオフローダに送信してきたデータ量を表すための値である。一方、Acked Client Seq1207は、クライアントが送信してきたデータのうち、実際にオフローダが受信してACKをクライアントに返信したデータ量を表す。Acked Client Seq1207と、Client Seq1205の差は、クライアントが送信したが、オフローダがまだ受信していないデータ量を表す。
図25には、Seq for Client1206と、Acked Seq for Client1208の関係を表す説明図を示す。
Seq for Client1206は、オフローダがクライアントに送るべきデータ量のうち、オフローダが送信したデータ量を表すための値である。一方、Acked Seq for Client1208は、オフローダが実際にクライアントからのACKを受信済みのデータ量である。Seq for Client1206と、Acked Seq for Client1208の差は、オフローダが送信したが、クライアントの受信が確認されていないデータ量を表す。
図26には、Server Seq1215と、Acked Server Seq1217の関係を表す説明図を示す。
Server Seq1215は、サーバがオフローダに送るべきデータ量のうち、サーバがオフローダに送信してきたデータ量を表すための値である。一方、Acked Server Seq1217は、サーバが送信してきたデータのうち、実際にオフローダが受信してACKをサーバに返信したデータ量を表す。Acked Server Seq1217と、Server Seq1215の差は、サーバが送信したが、オフローダがまだ受信していないデータ量を表す。
【0024】
図27には、Seq for Server1216と、Acked Seq for Server1218の関係を表す説明図を示す。
Seq for Server1216は、オフローダがサーバに送るべきデータ量のうち、オフローダが送信したデータ量を表すための値である。一方、Acked Seq for Server1218は、オフローダが実際にサーバからのACKを受信済みのデータ量である。Seq for Server1216と、Acked Seq for Serer1218の差は、オフローダが送信したが、サーバの受信が確認されていないデータ量を表す。
図20〜23には、TCP状態に記載されるシーケンス番号(Client Seq1205、Seq for Client1206、Acked Client Seq1207、Acked Seq for Client1208、Server Seq1215、Seq for Server1216、Acked Server Seq1217、Acked Seq for Server1218)と、パケットに記載されるシーケンス番号との関係を表す説明図を示す。
【0025】
図20には、クライアントがペイロード長Lのパケットを送信するときの説明図を示す。
オフローダは、クライアントからのパケット2001の送信シーケンス番号(A)と、Acked Client Seq1207(A)が一致する場合、Client Seq1205(A)に、ペイロード長Lを加算する(2008)。更に、Acked Client Seq1207(A)に、ペイロード長Lを加算して(2009)、シーケンス番号(A+L)を宛先シーケンス番号としたペイロード長0のパケット2002を、クライアントに向けて送信する。
次に、クライアントからオフローダに、送信シーケンス番号をA+Lとしたペイロード長Lのパケット2003が送られ、途中で廃棄されてしまったとする。
クライアントは、パケット2003が廃棄されたことが分からないため、続けて、送信シーケンス番号をA+2Lとしたペイロード長Lのパケット2004を、オフローダに向けて送信する。
オフローダは、パケット2004記載の送信シーケンス番号(A+2L)と、Acked Client Seq1207記載のシーケンス番号(A+L)が異なる場合、オフローダは、ペイロード長が‘0’より大きければ、パケットを受信バッファ809に蓄積する。そしてオフローダは、パケット2004記載の送信シーケンス番号(A+2L)を、Client Seq1205に記載し(2010)、Acked Client Seq1207記載のシーケンス番号(A+L)を宛先シーケンス番号としたペイロード長0のパケット2005を、クライアントに向けて送信する。
クライアントは、パケット2005を受け取ると、宛先シーケンス番号の値(A+L)により、パケット2003が廃棄されてしまったことを知り、送信シーケンス番号をA+Lとしたペイロード長Lのパケット2006(パケット2003と同じパケット)を、オフローダに向けて再度送信する。
オフローダは、パケット2006の送信シーケンス番号(A+L)と、Acked Client Seq1207記載のシーケンス番号(A+L)が一致することを確認すると、Acked Client Seq1207記載のシーケンス番号(A+L)に、パケット2006のペイロード長Lを加算して(2011)、シーケンス番号(A+2L)を宛先シーケンス番号としたペイロード長0のパケット2007を、クライアントに向けて送信する。
【0026】
図21には、オフローダがクライアントに向けてペイロード長Lのパケットを送信するときの説明図を示す。
オフローダがクライアントに送るペイロード長Lのパケット2101の送信シーケンス番号(B)と、Seq for Client1206(B)が一致する場合、Seq for Client1206(B)に、ペイロード長Lを加算する(2108)。
その後、オフローダが、クライアントから、宛先シーケンス番号をB+Lとしたペイロード長0のパケット2102を受け取ると、Acked Seq for Client1208に、パケット記載の宛先シーケンス番号(B+L)を記載する(2109)。
次に、オフローダからクライアントに向けて、Seq for Client1206と同じ送信シーケンス番号(B+L)で送ったペイロード長Lのパケット2103が、途中で廃棄されてしまったとする。Seq for Client1206(B+L)には、パケット2103のペイロード長Lが加算される(2110)。
オフローダは、パケット2103が途中で廃棄されたことを知らないため、続けて、Seq for Client1206と同じ送信シーケンス番号(B+2L)を持つペイロード長Lのパケット2104を送る。Seq for Client1206(B+2L)には、パケット2104のペイロード長Lが加算される(2111)。
クライアントは、パケット2104を受け取ると、送信シーケンス番号の値(B+2L)より、その前のパケット2103が途中で廃棄されてしまったことを知る。パケット2103の再送をオフローダに促すため、宛先シーケンス番号をB+Lとしたペイロード長0のパケット2105とパケット2106を、オフローダに向けて送信する。
オフローダは、パケット2105記載の宛先シーケンス番号が、Acked Seq for Client1208の値と同じパケット2105とパケット2106を、連続して受け取った場合、パケット2103が途中で廃棄されてしまったことを知り、送信シーケンス番号(B+L)でペイロード長Lのパケット2107(パケット2103と同じパケット)を再度送信する。
クライアントは、パケット2107を受け取ると、宛先シーケンス番号をB+3Lとしたペイロード長0のパケット2108を、オフローダに向けて送信する。
【0027】
図22には、サーバがペイロード長Lのパケットを送信するときの説明図を示す。
オフローダは、サーバからのパケット2201の送信シーケンス番号(A)と、Acked Server Seq1217(A)が一致する場合、Server Seq1215(A)に、ペイロード長Lを加算する(2208)。更に、Acked Server Seq1217(A)に、ペイロード長Lを加算して(2209)、シーケンス番号(A+L)を宛先シーケンス番号としたペイロード長0のパケット2202を、サーバに向けて送信する。
次に、サーバからオフローダに、送信シーケンス番号をA+Lとしたペイロード長Lのパケット2203が送られ、途中で廃棄されてしまったとする。
サーバは、パケット2203が廃棄されたことが分からないため、続けて、送信シーケンス番号をA+2Lとしたペイロード長Lのパケット2204を、オフローダに向けて送信する。
オフローダは、パケット2204記載の送信シーケンス番号(A+2L)と、Acked Server Seq1217記載のシーケンス番号(A+L)が異なる場合、パケット2204記載の送信シーケンス番号(A+2L)を、Server Seq1215に記載し(2210)、Acked Server Seq1217記載のシーケンス番号(A+L)を宛先シーケンス番号としたペイロード長0のパケット2205を、サーバに向けて送信する。
サーバは、パケット2205を受け取ると、宛先番号の値(A+L)により、パケット2203が廃棄されてしまったことを知り、送信シーケンス番号をA+Lとしたペイロード長Lのパケット2206(パケット2203と同じパケット)を、オフローダに向けて再度送信する。
オフローダは、パケット2206の送信シーケンス番号(A+L)と、Acked Server Seq1217記載のシーケンス番号(A+L)が一致することを確認すると、Acked Server Seq1217記載のシーケンス番号(A+L)に、パケット2206のペイロード長Lを加算して(2211)、シーケンス番号(A+2L)を宛先シーケンス番号としたペイロード長0のパケット2207を、サーバに向けて送信する。
【0028】
図23には、オフローダがサーバに向けてペイロード長Lのパケットを送信するときの説明図を示す。
オフローダがサーバに送るペイロード長Lのパケット2301の送信シーケンス番号(B)と、Seq for Server1216(B)が一致する場合、Seq for Server1216(B)に、ペイロード長Lを加算する(2308)。
その後、オフローダが、サーバから、宛先シーケンス番号をB+Lとしたペイロード長0のパケット2302を受け取ると、Acked Seq for Server1218に、パケット記載の宛先シーケンス番号(B+L)を記載する(2309)。
次に、オフローダからサーバに向けて、Seq for Server1216と同じ送信シーケンス番号(B+L)で送ったペイロード長Lのパケット2303が、途中で廃棄されてしまったとする。Seq for Server1216(B+L)には、パケット2303のペイロード長Lが加算される(2310)。
オフローダは、パケット2303が途中で廃棄されたことを知らないため、続けて、Seq for Server1216と同じ送信シーケンス番号(B+2L)を持つペイロード長Lのパケット2304を送る。Seq for Server1216(B+2L)には、パケット2304のペイロード長Lが加算される(2311)。
サーバは、パケット2304を受け取ると、送信シーケンス番号の値(B+2L)より、その前のパケット2303が途中で廃棄されてしまったことを知る。パケット2303の再送をオフローダに促すため、宛先シーケンス番号をB+Lとしたペイロード長0のパケット2305とパケット2306を、オフローダに向けて送信する。
オフローダは、パケット2305記載の宛先シーケンス番号が、Acked Seq for Server1218の値と同じパケット2305とパケット2306を、連続して受け取った場合、パケット2303が途中で廃棄されてしまったことを知り、送信シーケンス番号(B+L)でペイロード長Lのパケット2307(パケット2303と同じパケット)を再度送信する。
サーバは、パケット2307を受け取ると、宛先シーケンス番号をB+3Lとしたペイロード長0のパケット2308を、オフローダに向けて送信する。
【0029】
3.TCP/IPレイヤ処理部(1/2)

図9には、TCP/IPレイヤ処理部807の内部のブロック図を示す。
TCP/IPレイヤ処理部807は、TCPの状態遷移判定部905と、ACK不一致パケット処理部911と、後続パケット再入力部921と、クライアント送信ACK処理部922と、サーバ送信ACK処理部924と、サーバ宛平文パケット処理部926と、クライアント宛暗号パケット処理部927と、を備える。
図13には、TCPの状態遷移判定部905の実施するフローチャートを示す。
TCPの状態遷移判定部905は、パケット901を受信すると、パケット記載のProto1101にTCPを表す値が格納されているか否かを確認する(ステップ1301)。TCPを表す値でない場合は廃棄する(ステップ1302)。次に、パケット記載の1102〜1105(送信元アドレス、宛先アドレス、送信元ポート、宛先ポート)と、1201〜1204または1211〜1214が一致するエントリが、TCPコネクション状態格納テーブル808に存在するか否かを判定する(ステップ1303)。存在しない場合は、受信パケットのFlag1108がSYNか否かを判定する(ステップ1313)。SYNでない場合は、廃棄する(ステップ1304)。SYNの場合は、新たなエントリ(1201〜1205にパケットの1102〜1106を記載した上で、Client Seq1205に‘1’を加算したエントリ)を作成して、TCPコネクション状態格納テーブル808へ書込み(948)、DIP1103とDport1105に、サーバのIPアドレスとポート番号を記載したサーバ宛SYNパケット(949)を作成する(ステップ1314)。ステップ1303にて、一致するエントリが存在する場合は、一致するエントリを読み出す(907)(ステップ1305)。更に、受信パケット記載の1102〜1105が、読み出したTCP状態記載の1201〜1204に一致する場合は、受信パケット記載の送信シーケンス番号1106がTCP状態記載のAcked Client Seq1207よりも大きいか否かを判定し、一方、受信パケット記載の11022〜1105がTCP状態記載の1211〜1214に一致する場合は、受信パケット記載の送信シーケンス番号1106がTCP状態記載のAcked Server Seq1217よりも大きいか否かを判定する(ステップ1306)。大きい場合は、ACK不一致パケット処理部911へとパケットおよび読み出したTCP状態を送信する(ステップ1309)。大きくない場合は、一致するか否かを判定する(ステップ1307)。一致しない場合は、廃棄する(ステップ1308)。一致する場合は、受信パケットにペイロードデータが存在するか否かを判定する(ステップ1310)。存在する場合は、TLS/SSLメッセージ処理部812へと、パケットおよび読み出したTCP状態を送信する(ステップ1312)。存在しない場合は、クライアント/サーバ送信ACK処理部922/924へと、パケットおよび読み出したTCP状態を送信する(ステップ1311)。
【0030】
図14には、ACK不一致パケット処理部911の実施するフローチャートを示す。
ACK不一致パケット処理部911は、TCPの状態遷移判定部905からパケットおよびTCP状態を受け取ると、パケットのTCPペイロード長が‘0’よりも大きいか否かを判定する(ステップ1401)。大きい場合は、パケットを受信バッファ809に蓄積する(ステップ1402)。更に、パケットの送信シーケンス番号が、TCP状態記載のClient/Server Seq1205/1215よりも大きいか否かを判定する(ステップ1403)。大きい場合は、TCP状態記載のClient/Server Seq1205/1215を、パケットの送信シーケンス番号SSeq1106へと更新する(ステップ1404)。更に、TCP状態記載のAcked Client/Server Seq1207/1217を宛先シーケンス番号とし、Seq for Client/Server1206/1216を送信元シーケンス番号としたACKパケットを作成する(ステップ1405)。新たに作成したTCP状態は、TCPコネクション状態格納テーブル808へと書き込む(910)。新たに作成したパケットは、集約部904へと出力する(912)。
以上、ACK不一致パケット処理部911が、図14のフローチャートに従って処理することで、到着順が逆転した一部のパケットのみを受信バッファ809に書き込むことが可能となる。
また、図13のステップ1312において、パケットとTCP状態がTLS/SSLメッセージ処理部812へ転送され、TLS/SSLメッセージ処理部812での処理が終了すると、Acked Client/Server Seq1207/1217に、TCPペイロード長を加算して、新たなTCP状態831が作成される。
【0031】
図15には、後続パケット再入力部921の実施するフローチャートを示す。
後続パケット再入力部921は、TCP状態831を受け取ると、TCP状態記載のAcked Client/Server Seq1207/1217と一致する送信シーケンス番号を持つパケットが、受信バッファ809に蓄積されているか否かを判定する(ステップ1501)。蓄積されていない場合は終了する(ステップ1502)。蓄積されている場合は、受信バッファから前記パケットを読出し(917)、受信バッファ809から消去する(918)。更に、TCP状態と読み出したパケットをTLS/SSLメッセージ処理部812へと出力する(ステップ1503)。
図7には、クライアント102が送信する暗号化パケットが、オフローダ100によって復号化され、サーバ101に送られるシーケンス図を示す。
クライアント102が送信する暗号化パケット701は、オフローダのTLS/SSLメッセージ処理部812において復号化される。復号化された平文パケットは、改竄チェック用のMAC値を持たない場合、サーバ宛平文パケット処理部926において、サーバ宛送信バッファ811に蓄積される。更に、ACKパケット702をクライアント102に向けて送信する。
クライアント102が送信する暗号化パケット703が廃棄され、次に送信した暗号化パケット704がオフローダ100に到着した場合、オフローダ100は、パケット703が途中で廃棄されたものとみなし、重複ACK705、717を連続してクライアント102へ送信する。クライアントは、重複ACK705、717を2回受け取ると、パケット703が途中で廃棄されたことを知り、パケット703と同じパケット706を再送する。オフローダ100は、再送パケット706を受け取ると、通常のACKパケット707をクライアント102へ返信する。
オフローダ100が、改竄チェック用のMAC値を持つ暗号化パケット708を受け取った場合は、TLS/SSLメッセージ処理部812において復号化し、サーバ宛平文パケット処理部926において、これまでに蓄積したサーバ宛平文パケットを読み出して送信した(712〜714)後で、復号化したパケットを送信する(715)。
以上、後続パケット再入力部921が、図15のフローチャートに従って処理することで、受信バッファを経由するパケットを、到着順に誤りのある一部のパケットのみに限定しつつ、端末が送信した順番にパケットをTLS/SSLメッセージ処理部812に到着させることが可能となる。
【0032】
クライアント宛パケット処理部927は、TLS/SSLメッセージ処理部812が出力するクライアント宛パケットでTCPペイロード長が0より大きいパケットを、クライアント宛送信バッファ810に蓄積した上で、クライアント宛パケットを集約部904に出力する(941)。更に、TCP状態に記載の、オフローダ100がサーバ側に向けて送信済みのパケットのシーケンス番号を格納するSeq for Server1216を送信シーケンス番号に、サーバの送信済みパケットに対してオフローダ100がACKを返信済みのシーケンス番号を格納するAcked Server Seq1217を宛先シーケンス番号に用いて、サーバ向けのACKパケットを作成し、集約部904に出力する(941)。
【0033】
図16には、クライアント送信ACK処理部922の実施するフローチャートを示す。
クライアント送信ACK処理部922は、クライアントからのACKパケットを受信すると、受信パケットの宛先シーケンス番号DSeq1107が、TCP状態記載のAcked Seq for Client1208よりも小さいか否かを判定する(ステップ1601)。小さい場合は、処理を終了して、パケットを廃棄する(ステップ1602)。大きい場合は、受信パケットの宛先シーケンス番号DSeq1107が、TCP状態記載のAcked Seq for Client1208よりも大きいか否かを判定する(ステップ1603)。大きい場合は、受信パケットの宛先シーケンス番号DSeq1107よりも、送信元シーケンス番号が小さなパケットをクライアント宛送信バッファ810から削除し、TCP状態記載のAcked Seq for Client1208に、受信パケット記載の宛先シーケンス番号DSeq1107を記入して、TCPコネクション状態格納テーブル808へ書き込む(946)(ステップ1604)。一致する場合は、TCP状態記載のClient State1209をみて、2回目に一致する重複ACKの場合か否かを判定する(ステップ1605)。2回目に一致する重複ACKでない場合は、TCP状態記載のClient State1209に、1回目に一致する重複ACKであることを記入する(ステップ1606)。2回目に一致する重複ACKである場合は、受信パケットの宛先シーケンス番号Dseq1107と同一の送信元シーケンス番号を持つパケットをクライアント宛送信バッファ810から読み出す(ステップ1607)。読み出したパケットは、集約部904へと出力される(945)。なお、ここでは一例として2回としたが、適宜の回数に設定することができる。
【0034】
図6には、サーバ101が送信する平文パケットが、オフローダ100によって暗号化され、クライアント102に送られるシーケンス図を示す。
サーバが送信する平文パケット601/604は、オフローダのTLS/SSLメッセージ処理部812において暗号化される。暗号化されたパケットは、クライアント宛パケット処理部927において、クライアント宛送信バッファ810に蓄積されると同時に、クライアント102に向けて送信される(602/605)。更に、ACKパケット603/606をサーバに向けて送信する。
クライアントは、クライアントに向けて送信された暗号化パケット602を受け取ると、ACKパケット607をオフローダに向けて送信する。
クライアントに向けて送信された暗号化パケット605が廃棄されると、図20で説明したように、宛先シーケンス番号がACKパケット607と同じACKパケット(重複ACKと呼ぶ)608、609が送られる。
オフローダは、重複ACKを2回受け取ったことを判定すると、暗号化パケット605が途中で廃棄されたことを知る。クライアント送信ACK処理部922が、クライアント宛送信バッファ810から暗号化パケット605を読み出し、暗号化パケット605と同じ暗号化パケット610を再送する。クライアント送信ACK処理部922は、1回目の重複ACK608を受信したとき何も再送せず、2回目の重複ACK609を受信したときに、クライアント102へ暗号化パケット610を再送する。クライアント102は、暗号化パケット610が再送されると、ACKパケット611を返信する。
なお、オフローダ100は、再送された暗号化パケット610に対するACKパケット611を受け取る前・後にかかわらず、サーバ101から平文パケット604の次の平文パケット613を受け取ると、TLS/SSLメッセージ処理部812において暗号化したパケット613を、クライアント宛パケット処理部927において、クライアント宛送信バッファ810に蓄積すると同時に、クライアント102に向けて送信する。更に、ACKパケット614をサーバに向けて送信する。
以上のように、クライアント送信ACK処理部922が図16に示すフローチャートに従って処理することで、クライアント宛送信バッファからのパケット読出しを2回目の重複ACKを受信したときに限定し、読出し回数を抑制することが可能となる。
【0035】
4.TLS/SSLメッセージ処理部

図17には、受信パケットのペイロード1110が、複数のTLS/SSLメッセージを含むケース(1701)、1つのTLS/SSLメッセージを含むケース(1702)、一部のTLS/SSLメッセージを含むケース(1703〜1705)を示す。
一部のTLS/SSLメッセージを含むケース(1703〜1705)では、TLS/SSLヘッダを除く部分が暗号化されている場合がある。更に、後尾部分を含むケース(1705)では、最後尾に改竄チェック用のMAC値(メッセージが改竄されているか否かを判定するための値)が付加されている。改竄チェック用のMAC値を計算するためには、先頭部分から後尾部分までのメッセージ全体のハッシュ値が必要であるため、正しいメッセージを受け取ったかどうかを判定するためには、メッセージ最後尾のパケットの到着を待つ必要がある。
図10には、TLS/SSLメッセージ処理部812のブロック図を示す。
TLS/SSLメッセージ処理部812は、TLS/SSL状態格納テーブルから対応するTLS/SSL状態の読出しを行う状態読出し部1002と、パケットタイプ判定部1003と、パケットタイプの判定結果に基づいてメッセージの処理を行い返信パケットの作成と新たなTLS/SSL状態の作成を行いTLS/SSL状態格納テーブルへの書込みを行うメッセージ処理部1009とを備える。
状態読出し部1002は、TCP状態に対応したTLS/SSL状態を、TLS/SSL状態格納テーブル813から読み出す。
図19には、TLS/SSL状態格納テーブル813の1エントリに記載されるTLS/SSL状態のフォーマットの一例を示す。
TLS/SSL状態格納テーブル813は、TLS/SSLコネクション状態を格納する領域813−1と、TLS/SSLセッション状態を格納する領域813−2に分割される。
TLS/SSLコネクション状態を格納する領域813−1の1エントリは、サーバ側の鍵状態を格納するServer Key1901と、クライアント側の鍵状態を格納するClient Key1902と、サーバ側のMAC書込みシークレットを格納するServer MAC Key1903と、クライアント側のMAC書込みシークレットを格納するClient MAC Key1904と、サーバ側のシーケンス番号を格納するServer Seq1905と、クライアント側のシーケンス番号を格納するClient Seq1906と、サーバランダムを格納するServer Random1907と、クライアントランダムを格納するClient Random1908と、VerifyやMACなどの途中結果を格納するInterim Hash1909と、セッション状態を格納するエントリへのポインタを格納するSession Pointer1910を含む。
TLS/SSLセッション状態を格納する領域813−2の1エントリは、マスターシークレットを格納するMaster Secret1911と、セッションIDを格納するSession ID1912と、暗号方式を格納するCipher Suite1913とを含む。
【0036】
パケットタイプ判定部1003は、TLS/SSL第1〜3ヘッダタイプ特定部1004〜1006とタイプ判定部1008と、パケットが2つ以上のTLS/SSLメッセージをから構成される場合に、2番目のメッセージの位置を判定する第2メッセージ位置判定部1010と、パケットが3つ以上のTLS/SSLメッセージをから構成される場合に、3番目のメッセージの位置を判定する第3メッセージ位置判定部1011とを備える。
第2メッセージ位置判定部1010は、TCP/IPヘッダ内のLen1100の値が、一番目のTLS/SSLヘッダ内のSSL Len1114の値とSSLヘッダ長とTCP/IPヘッダ長の和と一致しない場合に、2番目のTLS/SSLメッセージの位置を判定して、TLS/SSL第2ヘッダタイプ特定部1005に通知する。さらに、TCP/IPヘッダ内のLen1100の値と、一番目のTLS/SSLヘッダ内のSSL Len1114の値とSSLヘッダ長とTCP/IPヘッダ長の和との差を、第3メッセージ位置判定部1011へ通知する。
第3メッセージ位置判定部1011は、第2メッセージ位置判定部1010から通知された差が、2番目のTLS/SSLヘッダ内のSSL Len1118の値とSSLヘッダ長の和と一致しない場合に、3番目のTLS/SSLメッセージの位置を判定して、TLS/SSL第3ヘッダタイプ特定部1004に通知する。
【0037】
TLS/SSL第1〜3ヘッダタイプ特定部1004〜1006は、図17に示すように、ペイロードが最大3つのTLS/SSLメッセージを含む場合に、各メッセージのタイプの種類を判定する。TLS/SSL第1ヘッダタイプ特定部1006の判定するメッセージタイプは、クライアントが送信するハンドシェークメッセージ(Client Hello,KeyExchange,ChangeCipherSpec,Finished),サーバが送信する平文データ,クライアントからの暗号データ(先頭部分,中盤,最後尾)(図17の1703〜1705のケース)、のいずれかとなる。TLS/SSL第2ヘッダタイプ特定部1005の判定するメッセージタイプは、クライアントが送信するハンドシェークメッセージ(ChangeCipherSpec,Finished)のいずれかとなる。TLS/SSL第3ヘッダタイプ特定部1004の判定するメッセージタイプは、Finishedのみとなる。
タイプ判定部1008は、TLS/SSL第2ヘッダタイプ特定部1005と、TLS/SSL第3ヘッダタイプ特定部1004の判定結果を、TLS/SSL第1ヘッダタイプ特定部1006の判定結果に統合して、判定結果を出力する。たとえば、TLS/SSL第1ヘッダタイプ特定部1006の判定結果がKeyExchangeで、TLS/SSL第2ヘッダタイプ特定部1005の判定結果が無しの場合、パケットタイプ=KeyExchangeの判定結果を出力する。TLS/SSL第1ヘッダタイプ特定部1006の判定結果がKeyExchangeで、TLS/SSL第2ヘッダタイプ特定部1005の判定結果がChangeCipherSpecで、TLS/SSL第3ヘッダタイプ特定部1005の判定結果が無しの場合、パケットタイプ=KeyExchange+ChangeCipherSpecの判定結果を出力する。TLS/SSL第1ヘッダタイプ特定部1006の判定結果がKeyExchangeで、TLS/SSL第2ヘッダタイプ特定部1005の判定結果がChangeCipherSpecで、TLS/SSL第3ヘッダタイプ特定部1005の判定結果がFinishedの場合、パケットタイプ=KeyExchange+ChangeCipherSpec+Finishedの判定結果を出力する。
メッセージ処理部1009は、パケットタイプ判定部1003の判定結果に基づいて、TLS/SSLメッセージの処理を行い、クライアントの送信パケットに含まれるハンドシェークメッセージに応じて、新たなTLS/SSL状態およびハンドシェークメッセージを含むパケットを作成する。
【0038】
図28には、メッセージ処理部1009のブロック図を示す。メッセージ処理部1009は、メッセージの判定結果に応じてパケットと状態情報を振り分ける振り分け部2801と、Client Helloメッセージを含むパケットと状態情報を用いてメッセージの処理を行うClient Hello処理部2803と、KeyExchangeメッセージを含むパケットと状態情報を用いてメッセージの処理を行うKeyExchange処理部2804と、ChangeCipherSpecメッセージのみを含むパケットと状態情報を用いてメッセージの処理を行うChangeCipherSpec処理部2805と、Finishedメッセージを含むパケットと状態情報を用いてメッセージの処理を行うFinished処理部2806と、Alertメッセージを含むパケットと状態情報を用いてメッセージの処理を行うAlert処理部2807と、暗号メッセージを含むパケットと状態情報を用いてメッセージの処理を行う暗号処理部2808と、平文メッセージを含むパケットと状態情報を用いてメッセージの処理を行う平文処理部2809と、各処理部から新たに出力されたパケットと状態情報を集約する集約部2802と、を備える。
Client Hello処理部2803は、入力パケットがClient Helloメッセージを含む場合、クライアントランダムと暗号スイートを抽出して、作成したサーバランダムと、使用する暗号スイートを指定するServer Helloメッセージと、公開鍵を含むServer Certificateメッセージと、Server Hello Doneメッセージを含むパケットを作成する。クライアントランダムとサーバランダムは、TLS/SSL状態のClient Random1908とServer Random1907に書き込まれる。更に、Client HelloメッセージとServer Helloメッセージと、Server Certificateメッセージと、Server Hello Doneメッセージを用いて、ハッシュ値を途中まで計算し、途中結果と端数メッセージをInterim Hash1909に記入する。さらに、状態情報のClient State1209に、Client Helloメッセージまでを受信したことを表す状態値を格納し、作成済みパケットと、更新した状態情報を集約部2802へと出力する。
【0039】
KeyExchange処理部2804は、入力パケットがKeyExchangeメッセージを含む場合、KeyExchangeメッセージ内の暗号化プリマスターシークレットを復号化し、マスターシークレットと、サーバ側の鍵状態と、クライアント側の鍵状態と、サーバ側のMAC書込みシークレットと、クライアント側のMAC書込みシークレットと、を作成する。それぞれ、TLS/SSL状態のMaster Secret1911と、Server Key1901と、Client Key1902と、Server MAC Key1903と、Client MAC Key1904へと書き込まれる。更に、KeyExchangeメッセージと、Interim Hash1909に記入された途中結果と端数メッセージを用いて、ハッシュ値を途中まで計算し、途中結果と端数メッセージをInterim Hash1909に記入する。また、状態情報のClient State1209に、KeyExchangeメッセージまでを受信したことを表す状態値を格納する。入力パケットが、KeyExchangeメッセージと、ChangeCipherSpecメッセージを含む場合は、状態情報のClient State1209に、ChangeCipherSpecメッセージまでを受信したことを表す状態値を格納する。更に、入力パケットがKeyExchangeメッセージとFinishedメッセージの両方を含む場合に、Finishedメッセージだけを抽出したパケットと、更新済みの状態情報を、Finished処理部2806へと送る。Finishedメッセージを含まない場合は、更新済みの状態情報を集約部2802へと出力する。
ChangeCipherSpec処理部2805は、入力パケットがChangeCipherSpecメッセージを含む場合、状態情報のClient State1209に、ChangeCipherSpecメッセージまでを受信したことを表す状態値を格納し、状態情報を集約部2802へと出力する。
Finished処理部2806は、入力パケットがFinishedメッセージを含む場合、TLS/SSL状態のServer Key1901を用いて復号化し、ベリファイ値と改竄チェック用のMAC値を抽出する。更に、Interim Hash1909に記入された途中結果と端数メッセージを用いて、ベリファイ値を計算し、Finished記載のベリファイ値と一致するか否かを判定する。一致しない場合は、Alertメッセージを含むパケットを作成する。一致する場合はFinishedメッセージと、Interim Hash1909に記入された途中結果と端数メッセージを用いて、ベリファイ値を計算し、ChangeCipherSpecメッセージとFinishedメッセージを含むパケットを作成する。Finishedメッセージは、改竄チェック用のMAC値を計算した上で、暗号化を行う。さらに、状態情報のClient State1209に、Finishedメッセージまでを受信したことを表す状態値を格納し、作成済みパケットと、更新した状態情報を集約部2802へと出力する。
【0040】
Alert処理部2807は、入力パケットがAlertメッセージを含む場合、警告メッセージの内容に応じて、TCPコネクションを終了するためのFINパケットを作成し、状態情報のClient State1209に、Alertメッセージを受信したことを表す状態値を格納し、作成したパケットと、更新した状態情報を集約部2802へと出力する。
暗号処理部2808は、入力パケットが暗号化データを含むサーバ宛パケットだった場合は、TLS/SSL状態のServer Key1901を用いて復号化し、復号化済みの平文を用いて改竄チェック用のMAC値を計算する。復号化したパケットにMAC値が含まれる場合は、計算したMAC値と、パケットに含まれるMAC値が一致するか否かを判定し、判定結果を表す状態値を、状態情報のClient State1209に格納する。さらに、復号化したパケットと、更新した状態情報を、集約部2802へと出力する。
平文処理部2809は、入力パケットが平文データを含むクライアント宛パケットだった場合は、平文を用いて改竄チェック用のMAC値を計算し、平文データに改竄チェック用のMAC値を追加した上で暗号化したクライアント宛パケットを、新たに作成する。また、入力パケットが改竄チェック用のMAC値を含まない平文データを暗号化したサーバ宛パケットだった場合は、暗号データを復号化したサーバ宛パケットと改竄チェック用のMAC値の途中結果を作成する。改竄チェック用のMAC値の途中結果は、TLS/SSL状態格納テーブル813に蓄積される。さらに、入力パケットが改竄チェック用のMAC値を含む平文データを暗号化したサーバ宛パケットだった場合は、TLS/SSL状態格納テーブル813に蓄積された改竄チェック用のMAC値の途中結果を読み出して、暗号データを復号化したサーバ宛パケットと改竄チェック用のMAC値を作成し、改竄チェック用のMAC値の整合性をチェックする。
以上のパケットタイプ判定部1003とメッセージ処理部1009とを備えることで、TLS/SSLメッセージ処理部812は、メッセージ単位ではなくパケット単位で処理することが可能となる。
【0041】
5.TCP/IPレイヤ処理部(2/2)

サーバ宛平文パケット処理部926は、TLS/SSLメッセージ処理部812が出力するサーバ宛パケットの処理を行う。以下、図9等を参照して説明する。
サーバ宛平文パケット処理部926は、TCPペイロード長が0より大きく、改竄チェック用のMAC値を含まない復号化済みサーバ宛平文パケットを受け取ったときは、MAC未ベリファイの情報と共に、サーバ宛送信バッファ811に蓄積する(934)。更に、TCP状態に記載の、オフローダ100がクライアント側に向けて送信済みのパケットのシーケンス番号を格納するSeq for Client1206を送信シーケンス番号に、クライアントの送信済みパケットに対してオフローダ100がACKを返信済みのシーケンス番号を格納するAcked Client Seq1207を宛先シーケンス番号に用いて、クライアント向けのACKパケットを作成する。図7に示すように、クライアントからの暗号パケットEncrypted Data701,704,706に対して、ACKパケット702、705、707が返信される。
TCPペイロード長が0より大きく、正しい改竄チェック用のMAC値を含む復号化済みサーバ宛平文パケットを受け取ったときは、これまで蓄積したMAC未ベリファイの復号化済みサーバ宛平文パケットを読み出して(933)、先に集約部904に出力してから、改竄チェック用のMAC値を含む復号化済みサーバ宛平文パケットを出力する(943)。蓄積してあったMAC未ベリファイ済みの復号化済みサーバ宛平文パケットは、MACベリファイ済みに書き換える(935)。更に、TCP状態に記載の、Seq for Client1206を送信シーケンス番号に、Acked Client Seq1207を宛先シーケンス番号に用いて、クライアント向けのACKパケットを作成する。図7に示すように、平文パケット712〜715が連続してサーバ101に向けて送信され、ACKパケット711がクライアントに返信される。
TCPペイロード長が0より大きく、誤った改竄チェック用のMAC値を含む復号化済みサーバ宛平文パケットを受け取ったときは、これまで蓄積したMAC未ベリファイの復号化済みサーバ宛平文パケットを削除して(935)、Alertメッセージを含むクライアント宛パケットと、TCPコネクションの終了を開始するサーバ宛FINパケットを作成し、集約部904へと出力する。図7に示すように、Alertパケット709がクライアント102に送信され、FINパケット710がサーバ101へと送信される。
【0042】
図18には、サーバ送信ACK処理部924の実施するフローチャートを示す。
サーバ送信ACK処理部924は、サーバからのACKパケットを受信すると、受信パケットの宛先シーケンス番号DSeq1107が、TCP状態記載のAcked Seq for Server1218よりも小さいか否かを判定する(ステップ1801)。小さい場合は、処理を終了して、パケットを廃棄する(ステップ1802)。大きい場合は、受信パケットの宛先シーケンス番号DSeq1107が、TCP状態記載のAcked Seq for Server1218よりも大きいか否かを判定する(ステップ1803)。大きい場合は、受信パケットの宛先シーケンス番号DSeq1107よりも、送信元シーケンス番号が小さなパケットをサーバ宛送信バッファ811から削除し、TCP状態記載のAcked Seq for Server1218に、受信パケット記載の宛先シーケンス番号DSeq1107を記入して、TCPコネクション状態格納テーブル808へ書き込む(947)(ステップ1804)。一致する場合は、TCP状態記載のServer State1219をみて、2回目に一致する重複ACKの場合か否かを判定する(ステップ1805)。2回目に一致する重複ACKではない場合は、TCP状態記載のServer State1219に、1回目に一致する重複ACKであることを記入する(ステップ1806)。2回目に一致する重複ACKである場合は、受信パケットの宛先シーケンス番号Dseq1107と同一の送信元シーケンス番号を持つパケットをサーバ宛送信バッファ811から読み出す(ステップ1807)。読み出したパケットは、集約部904へと出力される(950)。なお、ここでは一例として2回としたが、適宜の回数に設定することができる。
以上のように、サーバ送信ACK処理部924が図18に示すフローチャートに従って処理することで、サーバ宛送信バッファからのパケット読出しを2回目の重複ACKを受信したときに限定し、読出し回数を抑制することが可能となる。
【0043】
6.追記
本発明では、受信バッファ809の、サイズまたはメモリに占めるアドレス範囲を指定するレジスタを備え、外部の端末から、レジスタ値を変更するようにしてもよい。
また、本発明では、クライアント宛送信バッファ810の、サイズまたはメモリに占めるアドレス範囲を指定するレジスタを備え、外部の端末から、レジスタ値を変更するようにしてもよい。
また、本発明では、サーバ宛送信バッファ811の、サイズまたはメモリに占めるアドレス範囲を指定するレジスタを備え、外部の端末から、レジスタ値を変更するようにしてもよい。

【産業上の利用可能性】
【0044】
本発明は、TLS/SSLコネクション確立以外にも、各種の暗号化通信のためのコネクション確立に適用することができる。

【符号の説明】
【0045】
800…パケット処理装置、807…TCP/IPレイヤ処理部、905…TCPの状態遷移判定部、911…ACK不一致パケット処理部、921…後続パケット再入力部、922…クライアント送信ACK処理部、924…サーバ送信ACK処理部、926…サーバ宛平文パケット処理部、927…クライアント宛パケット処理部。

【特許請求の範囲】
【請求項1】
クライアント端末とサーバ端末との間に設置され、前記サーバ端末から受信した平文データを暗号化して前記クライアント端末に送信し、前記クライアント端末から受信した暗号データを復号化して前記サーバ端末に送信するために、暗号化通信のコネクション確立シーケンスを前記サーバ端末に代わって実行するための通信装置において、
端末識別情報に対応して、端末が通信装置に送信してきたデータ量を表すための値である第1端末シーケンス情報と、端末が送信してきたデータのうち、実際に通信装置が受信して確認応答を端末に返信したデータ量を表す第1確認シーケンス情報と、通信装置が端末に送信したデータ量を表すための値である第2端末シーケンス情報と、通信装置が実際に端末からのACKを受信済みのデータ量である第2確認シーケンス情報と、を含むコネクション状態データを記憶し、コネクション毎にどこまで受信したかを記録するためのコネクション状態テーブルと、
パケットの到着順が逆転した場合に、後に到着すべきパケットを蓄積するための受信バッファと、
前記コネクション状態テーブルから、受信パケットに対応するコネクション状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定し、パケットの到着順が逆転した場合に、後に到着すべきパケットを前記受信バッファに蓄積するためのパケット処理部と
を備え、

前記パケット処理部は、
端末から、送信元識別情報、送信シーケンス情報、宛先シーケンス情報、ペイロード長を含む、暗号化通信のコネクション確立のための第1の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第1の受信パケットの送信元識別情報が一致するコネクション状態データを求め、
該コネクション状態データについて、前記端末からの前記第1の受信パケットの送信シーケンス情報Aと、第1確認シーケンス情報Aが一致する場合、第1端末シーケンス情報Aにペイロード長Lを加算して A+L に更新し、第1確認シーケンス情報Aにペイロード長Lを加算して A+L に更新し、シーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第1の送信パケットを、前記端末に向けて送信し、
一方、前記端末から、送信シーケンス情報 A+L 及びペイロード長Lの第2の受信パケットが送られたが、該第2の受信パケットを受信する前に、続けて前記端末から送信された、送信シーケンス情報 A+2L 及びペイロード長Lの第3の受信パケットを受信したとき、
前記コネクション状態テーブルを参照し、前記第3の受信パケットに含まれる送信シーケンス情報 A+2L と、第1確認シーケンス情報のシーケンス情報 A+L が異なる場合、該第3のパケットのペイロード長が0より大きければ該第3の受信パケットを前記受信バッファに蓄積し、該第3の受信パケットに含まれる送信シーケンス情報 A+2L を、第1端末シーケンス情報として前記コネクション状態テーブルを更新し、第1確認シーケンス情報のシーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第2の送信パケットを作成し、該第2の送信パケットを前記端末に向けて送信し、
前記端末は、前記第2の送信パケットを受け取ると、宛先シーケンス情報 A+L により、前記第2の受信パケットが前記通信装置で受信されていないことを判定することにより、前記端末から、送信シーケンス情報を A+L 及びペイロード長Lの前記第2の受信パケット又は前記第2の受信パケットと同じ内容の第4の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第2又は第4の受信パケットの送信シーケンス情報 A+L と、第1確認シーケンス情報のシーケンス情報 A+L が一致することを確認すると、第1確認シーケンス情報 A+L に、前記第4の受信パケットのペイロード長Lを加算して A+2L に更新し、シーケンス情報 A+2L を宛先シーケンス情報としたペイロード長0の第3の送信パケットを作成し、該第3の送信パケットを前記端末に向けて送信する
前記通信装置。
【請求項2】
請求項1に記載の通信装置において、
前記パケット処理部は、
パケットに含まれるメッセージを処理する暗号化通信メッセージ処理部と、
前記暗号化通信メッセージ処理部における送信シーケンス情報 A+L の前記第2又は第4の受信パケットの処理終了時に、送信シーケンス情報 A+2L の前記第3の受信パケットが受信バッファに蓄積されている場合に、該送信シーケンス情報 A+2L の前記第3の受信パケットを読み出して前記暗号化通信メッセージ処理部に出力する後続パケット再入力部と、
を備え、到着順に誤りのある一部のパケットのみが前記受信バッファを経由することで、端末が送信した順番にパケットが前記暗号化通信メッセージ処理部に到着することを特徴とする通信装置。
【請求項3】
請求項2に記載の通信装置において、
前記暗号化通信メッセージ処理部が作成したクライアント宛パケットを蓄積するクライアント宛送信バッファをさらに備え、
前記パケット処理部は、
前記暗号化通信メッセージ処理部が作成したクライアント宛パケットを前記クライアント宛送信バッファに蓄積するクライアント宛パケット処理部と、
クライアント端末から受信したことを通知する確認応答パケットを受信したときに、前記クライアント宛て送信バッファの対応するパケットを消去し、再送を要求する確認応答パケットを予め定められた回数以上受信したときに、前記クライアント宛て送信バッファの対応するパケットを読み出して再送するクライアント送信ACK処理部と
を備えることで、前記クライアント宛送信バッファからのパケット読出し回数を抑制することを特徴とする通信装置。
【請求項4】
請求項2に記載の通信装置において、
前記暗号化通信メッセージ処理部は、
1つまたは複数または分割された暗号化通信のためのメッセージを含むパケットを入力し、入力された該メッセージに、どのようなメッセージタイプで暗号化通信のコネクション確立のためのメッセージが含まれるかを判定するための、パケットタイプ判定部を備え、
前記暗号化通信メッセージ処理部は、
暗号化通信のためのメッセージを処理する場合に、前記パケットタイプ判定部の判定結果に基づいて、
入力パケットが、サーバ端末が送信する平文データを含むパケットだった場合は、平文データを暗号化したクライアント宛パケットを作成し、
入力パケットが、クライアント端末が送信するハンドシェークメッセージを1つまたは複数含む場合は、受信した1つまたは複数のハンドシェークメッセージに対応するハンドシェークメッセージを含むパケットを作成し、
入力パケットが、クライアント端末が送信する暗号データを含み改竄チェック用のMAC値を含まないパケットだった場合は、暗号データを複号化したサーバ宛パケットとMAC値の途中結果を作成し、
入力パケットが、クライアント端末が送信する暗号データを含み改竄チェック用のMAC値を含むパケットだった場合は、暗号データを複号化したサーバ宛パケットと改竄チェック用のMAC値を作成し、改竄チェック用のMAC値の整合性をチェックすることで、
メッセージ単位ではなくパケット単位で処理することを特徴とする通信装置。
【請求項5】
請求項4に記載の通信装置において、
サーバ宛パケットをMACベリファイの情報と共に蓄積するサーバ宛送信バッファをさらに備え、
前記パケット処理部は、
前記暗号化通信メッセージ処理部から、改竄チェック用のMAC値を含まない復号化済みパケットを受信したときに、MAC未ベリファイの情報と共に前記送信バッファに蓄積し、及び、前記暗号化通信メッセージ処理部から、正しい改竄チェック用のMAC値を含む復号化済みパケットを受け取ったときに、前記送信バッファに蓄積したMAC未ベリファイのパケットをMACベリファイ済とした上で読み出して送信してから、正しい改竄チェック用のMAC値を含む復号化済みパケットを送信し、及び、前記暗号化通信メッセージ処理部から、誤った改竄チェック用のMAC値を含む復号化済みパケットを受け取ったときに、前記送信バッファに蓄積したMAC未ベリファイのパケットを消去するサーバ宛平文パケット処理部と、
サーバ端末から、受信したことを通知する確認応答を受信したときに、前記サーバ宛送信バッファの対応するパケットを消去し、サーバ端末から、予め定められた回数以上再送を要求する確認応答を受信したときに、前記サーバ宛送信バッファの対応するパケットを読み出して再送するサーバ送信ACK処理部と、
を備えることで、
前記サーバ宛送信バッファからのパケット読出し回数の抑制することを特徴とする通信装置。
【請求項6】
請求項1に記載の通信装置であって、
前記受信バッファの、サイズまたはメモリに占めるアドレス範囲を指定するレジスタを備え、
前記通信装置の外部の端末から、前記レジスタ値を変更することを特徴とする通信装置。
【請求項7】
請求項3に記載の通信装置であって、
前記クライアント宛送信バッファの、サイズまたはメモリに占めるアドレス範囲を指定するレジスタを備え、
前記通信装置の外部の端末から、前記レジスタ値を変更することを特徴とする通信装置。
【請求項8】
請求項5に記載の通信装置であって、
前記サーバ宛送信バッファの、サイズまたはメモリに占めるアドレス範囲を指定するレジスタを備え、
前記通信装置の外部の端末から、前記レジスタ値を変更することを特徴とする通信装置。
【請求項9】
請求項1に記載の通信装置において、
1つまたは複数または分割された暗号化通信のためのメッセージを含むパケットを入力し、入力された該メッセージに、どのようなメッセージタイプで暗号化通信のコネクション確立のためのメッセージが含まれるかを判定し、パケットに含まれるメッセージを処理するための暗号化通信メッセージ処理部をさらに備え、
クライアント端末からは、暗号化したマスターシークレットを含む第1コネクション確立メッセージと、暗号化通信の開始を通知する第2コネクション確立メッセージと、メッセージをベリファイするための第3コネクション確立メッセージを含む暗号化通信のコネクション確立のためのパケットを受信する際、
第1から第3のコネクション確立メッセージを別々の3つのパケットで到着するタイプ、第1コネクション確立メッセージと第2コネクション確立メッセージ・プラス・第3コネクション確立メッセージの2つのパケットで到着するタイプ、第1コネクション確立メッセージ・プラス・第2コネクション確立メッセージと第3コネクション確立メッセージの2つのパケットで到着するタイプ、第2コネクション確立メッセージと第3コネクション確立メッセージの2つのパケットで到着するタイプ、
のいずれかのタイプで受信し、
前記暗号化通信メッセージ処理部は、前記いずれかのタイプを判定することにより、メッセージをメッセージ単位ではなくパケット単位で処理することを特徴とする通信装置。
【請求項10】
請求項1に記載の通信装置において、
受信したパケットが接続要求パケットであるとき、新たなエントリを前記コネクション状態テーブルに作成することを特徴とする通信装置。
【請求項11】
請求項1に記載の通信装置において、
前記端末は、クライアント端末又はサーバ端末であることを特徴とする通信装置。
【請求項12】
クライアント端末とサーバ端末との間に設置され、前記サーバ端末から受信した平文データを暗号化して前記クライアント端末に送信し、前記クライアント端末から受信した暗号データを復号化して前記サーバ端末に送信するために、暗号化通信のコネクション確立シーケンスを前記サーバ端末に代わって実行するための通信装置において、
端末識別情報に対応して、端末が通信装置に送信してきたデータ量を表すための値である第1端末シーケンス情報と、端末が送信してきたデータのうち、実際に通信装置が受信して確認応答を端末に返信したデータ量を表す第1確認シーケンス情報と、通信装置が端末に送信したデータ量を表すための値である第2端末シーケンス情報と、通信装置が実際に端末からのACKを受信済みのデータ量である第2確認シーケンス情報と、を含むコネクション状態データを記憶し、コネクション毎にどこまで受信したかを記録するためのコネクション状態テーブルと、
パケットの到着順が逆転した場合に、後に到着すべきパケットを蓄積するための受信バッファと、
前記コネクション状態テーブルから、受信パケットに対応するコネクション状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定し、パケットの到着順が逆転した場合に、後に到着すべきパケットを前記受信バッファに蓄積するためのパケット処理部と
を備え、

前記パケット処理部は、
端末へ、送信元識別情報、送信シーケンス情報、宛先シーケンス情報、ペイロード長を含む、暗号化通信のコネクション確立のための第1の送信パケットを送信し、
前記コネクション状態テーブルを参照し、前記第1のパケットの送信元識別情報が一致するコネクション状態データを求め、
該コネクション状態データについて、ペイロード長Lの前記第1の送信パケットの送信シーケンス情報Bと、第2端末シーケンス情報Bが一致する場合、第2端末シーケンス情報Bにペイロード長Lを加算して B+L に更新し、
前記第1の送信パケットに応答して、前記端末から、宛先シーケンス情報を B+L としたペイロード長0の第1の受信パケットを受け取ると、前記コネクション状態テーブルの第2確認シーケンス情報に、前記第1の受信パケットに含まれる宛先シーケンス情報 B+L を記憶し、

一方、前記端末に向けて、前記コネクション状態テーブルを参照し、第2端末シーケンス情報と同じ送信シーケンス情報 B+L 及びペイロード長Lの第2の送信パケットを送り、第2端末シーケンス情報 B+L に、第2の送信パケットのペイロード長Lを加算して、B+2L に更新し、
続けて、第2端末シーケンス情報と同じ送信シーケンス情報 B+2L を持つペイロード長Lの第3の送信パケットを送り、第2端末シーケンス情報 B+2L に、該第3の送信パケットのペイロード長Lを加算し、B+3L に更新し、
前記端末は、前記第2の送信パケットを受け取る前に前記第3の送信パケットを受け取った場合、送信シーケンス情報 B+2L より、その前の前記第2の送信パケットが受信できなかったことを判定することにより、前記端末から送信された、前記第2の送信パケットの再送を促すため、宛先シーケンス情報を B+L としたペイロード長0の第2の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第2の受信パケット又は該第2の受信パケットと同じ内容のパケットを、所定回数連続して受信した場合、前記第2の送信パケットが途中で廃棄されてしまったことを判定し、送信シーケンス情報 B+L 及びペイロード長Lの前記第2の送信パケットを再送又は前記第2の送信パケットと同じ内容の第4の送信パケットを送信し、
前記第2又は第4の送信パケットに応答して、前記端末から、宛先シーケンス情報を B+3L としたペイロード長0の第3の受信パケットを受信する
前記通信装置。
【請求項13】
請求項12に記載の通信装置において、
1つまたは複数または分割された暗号化通信のためのメッセージを含むパケットを入力し、入力された該メッセージに、どのようなメッセージタイプで暗号化通信のコネクション確立のためのメッセージが含まれるかを判定し、パケットに含まれるメッセージを処理するための暗号化通信メッセージ処理部をさらに備え、
クライアント端末からは、暗号化したマスターシークレットを含む第1コネクション確立メッセージと、暗号化通信の開始を通知する第2コネクション確立メッセージと、メッセージをベリファイするための第3コネクション確立メッセージを含む暗号化通信のコネクション確立のためのパケットを受信する際、
第1から第3のコネクション確立メッセージを別々の3つのパケットで到着するタイプ、第1コネクション確立メッセージと第2コネクション確立メッセージ・プラス・第3コネクション確立メッセージの2つのパケットで到着するタイプ、第1コネクション確立メッセージ・プラス・第2コネクション確立メッセージと第3コネクション確立メッセージの2つのパケットで到着するタイプ、第2コネクション確立メッセージと第3コネクション確立メッセージの2つのパケットで到着するタイプ、
のいずれかのタイプで受信し、
前記暗号化通信メッセージ処理部は、前記いずれかのタイプを判定することにより、メッセージをメッセージ単位ではなくパケット単位で処理することを特徴とする通信装置。

【請求項14】
クライアント端末とサーバ端末との間に設置され、前記サーバ端末から受信した平文データを暗号化して前記クライアント端末に送信し、前記クライアント端末から受信した暗号データを復号化して前記サーバ端末に送信するために、暗号化通信のコネクション確立シーケンスを前記サーバ端末に代わって実行するための通信装置を備えた通信システムにおいて、
前記通信装置は、
端末識別情報に対応して、端末が通信装置に送信してきたデータ量を表すための値である第1端末シーケンス情報と、端末が送信してきたデータのうち、実際に通信装置が受信して確認応答を端末に返信したデータ量を表す第1確認シーケンス情報と、通信装置が端末に送信したデータ量を表すための値である第2端末シーケンス情報と、通信装置が実際に端末からのACKを受信済みのデータ量である第2確認シーケンス情報と、を含むコネクション状態データを記憶し、コネクション毎にどこまで受信したかを記録するためのコネクション状態テーブルと、
パケットの到着順が逆転した場合に、後に到着すべきパケットを蓄積するための受信バッファと、
前記コネクション状態テーブルから、受信パケットに対応するコネクション状態を読出し、受信パケットが、受信済みデータの最後尾直後から後続しているか否かを判定し、パケットの到着順が逆転した場合に、後に到着すべきパケットを前記受信バッファに蓄積するためのパケット処理部と
を備え、

前記パケット処理部は、
端末から、送信元識別情報、送信シーケンス情報、宛先シーケンス情報、ペイロード長を含む、暗号化通信のコネクション確立のための第1の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第1の受信パケットの送信元識別情報が一致するコネクション状態データを求め、
該コネクション状態データについて、前記端末からの前記第1の受信パケットの送信シーケンス情報Aと、第1確認シーケンス情報Aが一致する場合、第1端末シーケンス情報Aにペイロード長Lを加算して A+L に更新し、第1確認シーケンス情報Aにペイロード長Lを加算して A+L に更新し、シーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第1の送信パケットを、前記端末に向けて送信し、
一方、前記端末から、送信シーケンス情報 A+L 及びペイロード長Lの第2の受信パケットが送られたが、該第2の受信パケットを受信する前に、続けて前記端末から送信された、送信シーケンス情報 A+2L 及びペイロード長Lの第3の受信パケットを受信したとき、
前記コネクション状態テーブルを参照し、前記第3の受信パケットに含まれる送信シーケンス情報 A+2L と、第1確認シーケンス情報のシーケンス情報 A+L が異なる場合、該第3のパケットのペイロード長が0より大きければ該第3の受信パケットを前記受信バッファに蓄積し、該第3の受信パケットに含まれる送信シーケンス情報 A+2L を、第1端末シーケンス情報として前記コネクション状態テーブルを更新し、第1確認シーケンス情報のシーケンス情報 A+L を宛先シーケンス情報としたペイロード長0の第2の送信パケットを作成し、該第2の送信パケットを前記端末に向けて送信し、
前記端末は、前記第2の送信パケットを受け取ると、宛先シーケンス情報 A+L により、前記第2の受信パケットが前記通信装置で受信されていないことを判定することにより、前記端末から、送信シーケンス情報を A+L 及びペイロード長Lの前記第2の受信パケット又は前記第2の受信パケットと同じ内容の第4の受信パケットを受信し、
前記コネクション状態テーブルを参照し、前記第2又は第4の受信パケットの送信シーケンス情報 A+L と、第1確認シーケンス情報のシーケンス情報 A+L が一致することを確認すると、第1確認シーケンス情報 A+L に、前記第4の受信パケットのペイロード長Lを加算して A+2L に更新し、シーケンス情報 A+2L を宛先シーケンス情報としたペイロード長0の第3の送信パケットを作成し、該第3の送信パケットを前記端末に向けて送信する
前記通信システム。
【請求項15】
請求項14に記載の通信システムにおいて、
前記通信装置は、
1つまたは複数または分割された暗号化通信のためのメッセージを含むパケットを入力し、入力された該メッセージに、どのようなメッセージタイプで暗号化通信のコネクション確立のためのメッセージが含まれるかを判定し、パケットに含まれるメッセージを処理するための暗号化通信メッセージ処理部をさらに備え、
クライアント端末からは、暗号化したマスターシークレットを含む第1コネクション確立メッセージと、暗号化通信の開始を通知する第2コネクション確立メッセージと、メッセージをベリファイするための第3コネクション確立メッセージを含む暗号化通信のコネクション確立のためのパケットを受信する際、
第1から第3のコネクション確立メッセージを別々の3つのパケットで到着するタイプ、第1コネクション確立メッセージと第2コネクション確立メッセージ・プラス・第3コネクション確立メッセージの2つのパケットで到着するタイプ、第1コネクション確立メッセージ・プラス・第2コネクション確立メッセージと第3コネクション確立メッセージの2つのパケットで到着するタイプ、第2コネクション確立メッセージと第3コネクション確立メッセージの2つのパケットで到着するタイプ、
のいずれかのタイプで受信し、
前記暗号化通信メッセージ処理部は、前記いずれかのタイプを判定することにより、メッセージをメッセージ単位ではなくパケット単位で処理することを特徴とする通信システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate


【公開番号】特開2011−41008(P2011−41008A)
【公開日】平成23年2月24日(2011.2.24)
【国際特許分類】
【出願番号】特願2009−186710(P2009−186710)
【出願日】平成21年8月11日(2009.8.11)
【出願人】(000005120)日立電線株式会社 (3,358)
【Fターム(参考)】