説明

暗号化通信制御装置

【課題】サーバから受信したパケットを暗号化通信制御装置が暗号化する際に、パケットを溜め込まずに暗号に関する処理を行う。
【解決手段】サーバ(5)からのアプリケーション層のデータに対して改竄の有無を調べるためのデータを付加した暗号化を行い、その暗号化されたデータをトランスポート層であるトランスミッション・コントロール・プロトコルのパケットで相手先に送信する暗号化送信手段(3)を備え、暗号化送信手段(3)は、サーバ(5)と相手先との間のコネクション確立時にサーバ(5)と相手先との間で転送されるデータのサイズをサーバ(5)からのパケットをブロック暗号化して相手先にひとつのパケットで送信できるサイズに設定し、その後、サーバ(5)から転送されてくるパケット毎にそれぞれブロック暗号化を行い、そのブロック暗号化されたデータをひとつのパケットで相手先に送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、Webサーバへのセキュリティを確保したアクセス方法として用いられているセキュリティプロトコルであるSSL(セキュア・ソケット・レイヤ)の処理に関する。
【背景技術】
【0002】
SSLでは、アプリケーション層のデータを暗号化し、それをトランスポート層であるTCP(トランスミッション・コントロール・プロトコル)のパケットに分割して転送する。受信側では、複数のTCPパケットから暗号化データを組み立て、復号化し、MAC(メッセージ認証コード)を計算して改竄されていないことを確認する。
【0003】
SSLあるいは暗号化通信技術としては、以下の文献があるが、これらは本願発明にとって一般的な背景技術である。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2002−077150号公報
【特許文献2】特開2003−022321号公報
【特許文献3】特開2003−092604号公報
【特許文献4】特開2003−504714号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来のSSLでは、暗号化データがTCPに分割されて転送されるため、受信側では、分割された全てのパケットを受信してからでないと、SSLの処理ができない。このため、遅延が発生してしまう。特にWebサイトのようにアクセスが集中するサーバでは、組み立てに伴う遅延やバッファメモリの消費によってパフォーマンスが低下してしまう。また、中継点でSSLを処理する場合には、その処理の後に再び分割して転送する必要がある。
【0006】
本発明は、このような課題を解決し、遅延を低減できる暗号化通信制御装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明は、サーバからのアプリケーション層のデータに対して改竄の有無を調べるためのデータを付加したブロック暗号化を行い、そのブロック暗号化されたデータをトランスポート層であるトランスミッション・コントロール・プロトコルのパケットで相手先に送信する暗号化送信手段を備えた暗号化通信制御装置において、暗号化送信手段は、サーバと相手先との間のコネクション確立時にサーバと相手先との間で転送されるデータのサイズをサーバからのパケットをブロック暗号化して相手先にひとつのパケットで送信できるサイズに設定し、その後、サーバから転送されてくるパケット毎にそれぞれブロック暗号化を行い、そのブロック暗号化されたデータをひとつのパケットで相手先に送信することを特徴とする。
【発明の効果】
【0008】
本発明によると、サーバから受信したパケットを暗号化通信制御装置が暗号化する際に、パケットを溜め込まずに暗号に関する処理を行うことができ、組み立てに伴う遅延やバッファメモリの消費によるパフォーマンスの低下を低減できる効果がある。
【図面の簡単な説明】
【0009】
【図1】本発明の実施の形態を示すブロック構成図である。
【図2】この実施の形態で用いられる暗号化および復号化を説明する図である。
【図3】SSLフォーマットを示す図である。
【図4】従来の組み立て、復号化およびハッシュ計算の処理手順を説明する図である。
【図5】暗号化されたデータを溜め込むことなく復号化する処理手順を説明する図である。
【図6】送信時のTCPフォーマットを説明する図である。
【図7】復号回路の詳細を示すブロック構成図である。
【図8】暗号回路の詳細を示すブロック構成図である。
【図9】SSL受信バッファの処理のフローチャートである。
【図10】復号化スケジューラの処理のフローチャートである。
【図11】平文メモリの処理のフローチャートである。
【図12】ハッシュスケジューラの処理のフローチャートである。
【図13】コネクション確立のシーケンスを示す図である。
【図14】平文受信バッファの処理のフローチャートである。
【図15】暗号化/ハッシュスケジューラの処理のフローチャートである。
【発明を実施するための形態】
【0010】
図1は本発明の実施の形態を示すブロック構成図である。本発明は、図1に示すような、インターネット4からサーバ5に向かうSSLトラフィックを復号化し、サーバ5からインターネット4へ出て行くトラフィックを暗号化するSSL通信装置1で実施される。このSSL通信装置1は、インターネット4からサーバ5への受信プロセスを担当する復号回路2と、サーバ5からインターネット4への送信プロセスを担当する暗号回路3とからなる。本発明は、特に、サーバからインターネット4へのトラフィックの暗号化に関するものである。
【0011】
図2はこの実施の形態で用いられる暗号化および復号化を説明する図である。SSL通信装置1とインターネット4との間の通信はSSLで行なわれ、暗号ブロックと呼ばれるまとまりごとに暗号化を行なうブロック暗号が用いられる。このとき、前のブロックの暗号結果を用いて、次のブロックの暗号化を行なう。復号化の時には、送信した順にパケットを受け取れば、順次復号することができる。
【0012】
図3はSSLフォーマットを示す。SSLブロックは、SSLヘッダ、ペイロード、MAC(メッセージ認証コード)、パディングおよびパディング長により構成される。データ部分(ペイロード)は最大18KBまで許容されており、このデータ全体にわたってハッシュ値を計算して、SSL内のMACと比較することで改竄の有無を調べる。このSSLのデータ長に比べてTCPパケットのデータ長は短いので、ひとつのSSLデータが複数のパケットに分割されて転送されることになる。このため、受信側ではそれらのすべてのパケットを受信しないと、そのデータの信頼性を確認できないことになる。
【0013】
図4は従来の組み立て、復号化およびハッシュ計算の処理手順を説明する図であり、図5は暗号化されたデータを溜め込むことなく復号化する処理手順を説明する図である。SSLはTCPに分割されて転送されるため、受信側ではそれを組み立ててから処理する必要があった。すなわち、まず、TCPにセグメント分けされた暗号文を組み立て、復号化し、ハッシュ計算を行なって改竄がないかどうかを確認していた。これに対して本実施の形態では、暗号アルゴリズムは受信次第復号化が可能であることに着眼し、パケットの組み立てを行いながら、復号化およびハッシュ計算のうち可能な処理を先行して実施する。これにより、遅延が低減される。
【0014】
図6は本実施の形態における送信時のTCPフォーマットを説明する図である。自分が受信側であるときには、送り手のデータ長が制御できないことから、上述した処理により高速化を図る。一方、送信時には、データ長の制御が可能である。そこで、アプリケーション層のデータを暗号化してからTCPで送るのではなく、データを分割してからSSLで暗号化し、IPヘッダおよびTCPヘッダを付加してひとつのTCPパケットにする。これにより受信側では、パケット毎の復号および検証が可能となる。
【0015】
図7は復号回路2の詳細を示すブロック構成図である。この復号回路2は、識別部201、SSL受信バッファ202、復号化スケジューラ203、復号化処理部204、平文メモリ205、ハッシュスケジューラ206、ハッシュ計算処理部207、ハッシュメモリ208、平文送信処理部209およびセッションテーブル210を備える。
【0016】
識別部201は受信したトラフィックがどこからきたものであるかを判別する。この識別されたトラフィックをフローと呼ぶ。識別部201で認識するフロー毎にバッファが割り当てられている。識別されたトラフィックはSSL受信バッファ202に入り、フローごとに割り当てられた処理性能で処理が行われるように復号化スケジューラ203でスケジュールされ、復号化処理部204で復号化処理される。ここまではパケットが到着しだい実行されるが、回線状態が悪くパケット順序が入れ替わってしまった場合は、次に来るべきパケットが来るまで復号化は実行されない。復号化処理部204による復号化処理を終えたデータは平文メモリ205に格納される。ハッシュアルゴリズムで決められた長さが復号化されると、平文メモリ205からその長さのデータがハッシュスケジューラ206によってスケジューリングされ、ハッシュ計算処理部207によりハッシュ処理される。ハッシュ計算の結果は、次のハッシュ処理のときに使うためにハッシュメモリ208に保存される。すべての処理が終わったときにハッシュメモリ208に残っている値がハッシュの計算結果である。SSLブロック(図3参照)がすべて復号化され、ハッシュ計算とMAC値が一致すれば改竄されていないことになり、平文送信処理部209によりサーバ5への送信処理が行われる。この際、SSLのために付加されたMACやパディングは取り除かれる。
【0017】
セッションテーブル210は、SSLの通信で使われるセッション/コネクションの情報を保持し、計算の際に各部に情報を渡す。この情報に変更があるとセッションテーブル210に反映される。
【0018】
図8は暗号回路3の詳細を示すブロック構成図である。この暗号回路3は、識別部301、平文受信バッファ302、暗号化/ハッシュスケジューラ303、ハッシュ計算処理部304、暗号化処理部305、ハッシュメモリ306、暗号文メモリ307、暗号文送信処理部308およびセッションテーブル309を備える。
【0019】
識別部301はサーバからのフローを判定する。識別されたフローは平文受信バッファ302に格納される。本実施例において暗号化側は単一パケットでMACの付加および暗号化が完結するように調整を行うため、復号回路2とは違って各フローにバイト単位でのスケジューリングは行わず、暗号化可能なパケットが入力されると、そのパケットの暗号化を最後まで行う。もし、パケットの順序が入れ替わった場合は正しいパケットが来るまで待つことになる。正しいパケットが来た段階で暗号化を行う。フロー毎に1パケットずつ暗号化が順に行われる。暗号化/ハッシュスケジューラ303は、平文の最後の部分にMACを付加する必要があるので、その手前まではハッシュ計算処理部304によるハッシュ計算と暗号化処理部305による暗号化と同時に進め、最後の部分で待ち合わせをするように調節し、暗号化を完了させる。ハッシュ計算処理部304およびハッシュメモリ306の処理はハッシュ計算処理部207およびハッシュメモリ208の処理と同等である。暗号化処理部305は、暗号化/ハッシュスケジューラ303に調節されながら暗号処理を行い、完了すると暗号文送信処理部308にデータを渡し、インターネット4へ転送される。
【0020】
セッションテーブル309は、SSLの通信で使われるセッション/コネクションの情報を保持し、計算の際に各部に情報を渡す。この情報に変更があるとセッションテーブル309に反映される。
【0021】
図7に示した復号回路2の動作についてさらに詳しく説明する。
【0022】
図9はSSL受信バッファ202の処理のフローチャートを示し、図10は復号化スケジューラ203の処理のフローチャートを示す。これらの処理は復号化処理部204の処理に連動する。
【0023】
SSL受信バッファ202では、TCPで運ばれてきた図3に示したようなSSLブロックを格納する。このとき、SSLヘッダから読み取れられSSLブロックの長さをSSL_Length、先頭から入れ替わることなく連続受信できているバイト数をDc、復号化スケジューラ203にすでに要求を完了している復号バイト数をDp、暗号アルゴリズムによって決まる復号化の単位となるバイト数をDdecとする。
【0024】
SSL受信バッファ202は、受信開始後、SSL暗号データをネットワークより受信し(ステップA1)、それがSSLブロックの先頭であれば(ステップA2)そのブロック用の領域を確保し、SSL_Length、Dc、Dp、Ddecの初期値を設定する(ステップA3)。連続受信できているバイト数から既に処理要求を完了しているバイト数を差し引いた値が処理単位のバイト数よりも大きければ(ステップA4)、復号化スケジューラ203に復号化処理要求を行う(ステップA5)。パケットの入れ替えなどで間があいた後でその間のデータを受信すると、連続受信バイト数が急に増えるため処理単位の数倍が一度に復号処理要求される。SSLブロックがちょうど処理単位の整数倍とは限らないため、最後の領域は連続受信バイト数がSSLブロック長と一致したところで(ステップA6)復号処理要求を行う(ステップA7)。以降、この処理を繰り返す。
【0025】
フローには番号を付けて区別する。これをフロー識別子Flow_Noとする。復号化スケジューラ203が復号処理要求を受けているバイト数をQ(Flow_No)、フローに割り当てられている一回あたりの復号化バイト数をUnit(Flow_No)、今回復号化するバイト数をDec_size、SSL通信装置1がサポートしている最大フロー数をFlow_maxとする。
【0026】
図10に示すように、復号化スケジューラ203が処理要求の受付を開始すると、まずFlow_Noの1から(ステップB1)Flow_maxまでを順に調べていく。復号要求があれば(ステップB2)、処理すべきバイト数を決定し(ステップB3)、SSL暗号文のうちこのバイト数分を復号する(ステップB4)。SSLブロック全体を復号化し終えたら(ステップB5)該当SSLブロックのバッファを開放する(ステップB6)。復号処理を終えるか、または処理要求が無かった場合は次のフローについて処理要求が無いか調べる(ステップB7)。これを全てのフローについて行い、以降、繰り返す。
【0027】
復号化処理部204は、復号化スケジューラ203のトリガを受けて動作し、復号した平文を平文メモリ205に送る。
【0028】
図11は平文メモリ205の処理のフローチャートを示し、図12はハッシュスケジューラ206の処理のフローチャートを示す。これの処理は、ハッシュ計算処理部207、ハッシュメモリ208の処理に連動する。
【0029】
平文メモリ205は、復号化処理部204で復号された平文を格納する。平文ブロックの長さをPlain_Length、復号化処理部204から受信済みのバイト数をD_plain、ハッシュスケジューラ206にすでに要求を完了しているバイト数をD_hash、ハッシュアルゴリズムによって決定されるハッシュ計算処理の単位となるバイト数をDcalとする。
【0030】
平文メモリ205では、平文を復号化処理部204より受信すると(ステップC1)、それがその平文ブロックで先頭であるときは(ステップC2)、Plain_Length、D_plain、D_hash、Dcalの初期値を設定する(ステップC3)。
現在の仕様ではSSLに圧縮アルゴリズムが規定されていないため、Plain_Length=SSL_Lengthとなる。ハッシュを計算するバイト数が蓄積していれば(ステップC4)、ハッシュスケジューラ206に計算処理要求を出す(ステップC5)。平文ブロックの最後は、必ずしも計算単位となるバイト数になるとは限らないため、ブロック長分受信したところで(ステップC6)処理要求を出す(ステップC7)。平文はMAC検査後にサーバと送達確認を行うため、この段階ではバッファを開放しない。以降、受信、ハッシュ処理要求を繰り返す。
【0031】
ハッシュスケジューラ206は、復号化スケジューラ203と同様の動きをする。スケジューリングの受付を開始すると、各フローのハッシュ処理要求を順に確認する(ステップD1)。ハッシュ計算処理要求バイト数をQh(Flow_No)とし、フローに割り当てられた一回当たりのハッシュ計算バイト数を Unith(Flow_No)、今回ハッシュ計算を行うバイト数をCal_sizeとする。ハッシュ計算要求があるかを調べ(ステップD2)、ある場合は処理バイト数を決定する(ステップD3)。フローに該当する情報をセッションテーブル210やハッシュメモリ208から得て、Cal_sizeの平文でハッシュを計算するようにハッシュ計算処理部207を制御し(ステップD4)、ハッシュメモリ208に記録する。ハッシュの計算が終了しているかを調べ(ステップD5)、終了していればMACとの比較を行い、改竄の有無について検証を行うよう制御する(ステップD6)。これが終了したら次のフローについて調べ、全てのフローを見終わると、再び1番目のフローから調べていく。
【0032】
ハッシュ計算処理部207はハッシュメモリ208に計算結果を書き込み、これが次のハッシュ計算の際の入力となる。最後にハッシュメモリ208内に残るのがハッシュ計算の結果となる。改竄されていないことが確認されたら、平文送信処理部209が平文をサーバ5に向かって転送する。
【0033】
次に、図8に示した暗号回路3の動作について詳しく説明する。
【0034】
暗号回路3ではサーバ5からインターネット4向けの通信を暗号化するが、暗号化した後も、図3に示したようなSSLブロックが図6に示したようにIP(インターネット・プロトコル)ヘッダおよびTCPヘッダを付加した上で1パケットに収まるように、あらかじめ調節を行う。暗号化する際に付加されるのはSSLヘッダとパディングであるので、サーバ5が送り出すパケットをあらかじめこの長さだけ短くしておけばよい。このためには、TCPコネクション確立の過程で図13に示すシーケンスを用いる。
【0035】
図13はインターネット4を経由してサーバ5へアクセスしてくるユーザとのコネクション確立のシーケンスを示す。ユーザからTCPのSYNパケットが送られてくると、SSL通信装置1は、ユーザとサーバ5との間にTCPコネクションを確立するために、次のように動作する。まず、ユーザとサーバそれぞれに対し、IPヘッダのDF(フラグメント禁止)ビットを立てて送信し、パスMTU(最大転送ユニット)を求める。SSL通信装置1はユーザ側とサーバ5側でSSLで暗号化してもパスMTUを越えないように、TCPのハンドシェークでMSS(最大セグメントサイズ)を適切な値に設定する。この値を通知しながらTCPコネクションの確立を行う。
【0036】
図14は平文受信バッファ302の処理のフローチャートを示す。サーバ5から平文の受信を開始すると、該当フローのバッファに格納する(ステップE1)。次に暗号化するべきパケットを受信できていれば(ステップE2)、ハッシュ計算と暗号化処理を暗号化/ハッシュスケジューラ303に要求する(ステップE4)。パケット順序が正しくなければ、バッファに入れて次のパケットを待つ(ステップE3)。暗号化/ハッシュスケジューラ303には、バッファの開始位置と、データサイズ、フロー番号などを伝える。そして、次のパケットを待つ。
【0037】
図15は暗号化/ハッシュスケジューラ303の処理のフローチャートを示す。暗号化/ハッシュスケジューラ303はデータサイズからMAC無しで可能な暗号化範囲を求め、ハッシュ計算とMAC付加前の暗号化を並列に実行するように制御する(ステップF1)。双方の終了を受けて、ハッシュ値をMACとして平文の残りに付加し、残りの暗号化を行うよう制御する(ステップF2)。そして、次の要求が無いかを調べる。暗号化/ハッシュスケジューラ303は受け取ったパケットについては一度に処理を済ませてしまう。復号化時のようにあるバイト分処理したところで処理を中断するということは無い。また、フローを順に調べることもない。来た順番に処理することで高速化を図る。TCPのフロー制御で送信データ量を制御する。これらはパケット単位で処理を完結できることから可能になっている。
【0038】
ハッシュ計算においてはハッシュメモリ306に、暗号化においては暗号文メモリ307にデータが格納される。暗号化が終了すると、暗号文メモリ307から該当パケットがインターネット4に転送される。
【0039】
以上説明した実施の形態では、復号回路2は、改竄を調べるためにMACの検証が終わるまでは受信パケットを平文メモリ205に保持し、検証が終わるのを待たないといけない。この点について、少し工夫を加えることで、さらに高速に動作できる可能性がある。
【0040】
すなわち、ハッシュ計算の終了した平文について、平文メモリ205でのバッファをせずにすぐにサーバ5に送信する。ハッシュの計算は順次実施することが可能なため、先に来たものから順に転送することができる。この方法だと、平文ブロックをバッファリングしないため、パケット毎に処理したときと同じくらい高速化できる。この際、最後のパケットのハッシュ検証中に改竄が発見された場合、平文送信処理部209はこのパケットを廃棄し、サーバ5への再送も行わずにタイムアウトを待つ。タイムアウトは比較的長い時間を要するが、あまり改竄の頻度が高くない状況においては有用である。ただし、最後のパケットを廃棄しても、先に届いてしまったパケットについては順次読み込んでしまうようなサーバ実装の場合は問題になる可能性もあり、機種依存性が存在する。
【0041】
平文ブロックのバッファリングを行なわないことで、改竄の発生しないほとんどの場合には従来よりも大幅に高スループット、低遅延が得られ、改竄の発生したときのみタイムアウト待ちに伴う性能低下が起こる。図7に示した構成では、改竄のあったパケットがサーバ5に届くことは無く、セキュリティ強度は高いといえる。それに対し、平文ブロックのバッファリングを行なわない場合には、改竄のあったパケットが一部サーバ5に届いてしまうためやや危険があるが、高速な通信が可能となる。
【0042】
本実施の形態によれば、受信復号化時に、SSLブロックを構成する全てのパケットの到着を待たずに処理を開始できる。これにより、プロセッサなどの非稼動時間を減らし、その性能を充分に活用できる。また、パケット順序の入れ替わりなどで復号処理が出来なかったフローの分の空いている処理リソースを別のフローが利用することができるため、処理部の動作率は向上し、性能を無駄なく使うことが出来る。
【0043】
また、暗号化送信時には、ユーザからサーバまで一貫してパスMTUを越えず、SSL化しても1パケットに収まるパケットのやり取りが可能となる。パスMTUを越えないパケットを扱うことで、SSL化に伴うフラグメントを防止し、それにともなう性能低下が他の性能まで犠牲にすることを防ぐことができる。これにより、暗号化処理部の性能を生かすことが可能になる。
【0044】
また、単一パケットで暗号化/復号化を完結すると、組み立てや分解の処理負荷や遅延が生じない。HTTP(ハイパー・テキスト・トランスファー・プロトコル)をSSLに渡して暗号化し、それをTCPが分割すると、復号化の段階で組み立て処理が必要となるが、HTTPをあらかじめ分割した上でSSL化し、TCPで転送すると、組み立て無しにSSL復号化ができ、HTTPでデータの終了位置を検出する、あるいはTCPコネクションの切断でデータの終了とみなすことで、もとのデータが得られる。
【0045】
さらに、SSL通信装置がHTTPを分割したTCPパケットをサーバから受け、HTTPの組み立てを行わずに送信データとみなしてSSL処理を行う場合には、あらかじめセグメントサイズを最適にしてサーバから受けるため、SSL通信装置で分割するよりもデータの収容効率が良いという利点もある。
【0046】
さらに本実施の形態では、暗号処理部の動作率の向上を図るとともに、双方向に遅延と処理負荷の低減を図っており、バッファに必要なメモリ量を削減することができる。これにより、余裕の出たメモリでより多くのセッション情報を保持することも可能となる。
【符号の説明】
【0047】
1 SSL通信装置
2 復号回路
3 暗号回路
4 インターネット
5 サーバ
201、301 識別部
202 SSL受信バッファ
203 復号化スケジューラ
204 復号化処理部
205 平文メモリ
206 ハッシュスケジューラ
207、304 ハッシュ計算処理部
208、306 ハッシュメモリ
209 平文送信処理部
210、309 セッションテーブル
302 平文受信バッファ
303 暗号化/ハッシュスケジューラ
305 暗号化処理部
307 暗号文メモリ
308 暗号文送信処理部

【特許請求の範囲】
【請求項1】
サーバからのアプリケーション層のデータに対して改竄の有無を調べるためのデータを付加したブロック暗号化を行い、そのブロック暗号化されたデータをトランスポート層であるトランスミッション・コントロール・プロトコルのパケットで相手先に送信する暗号化送信手段を備えた暗号化通信制御装置において、
前記暗号化送信手段は、前記サーバと前記相手先との間のコネクション確立時に前記サーバと前記相手先との間で転送されるデータのサイズを前記サーバからのパケットをブロック暗号化して前記相手先にひとつのパケットで送信できるサイズに設定し、その後、前記サーバから転送されてくるパケット毎にそれぞれブロック暗号化を行い、そのブロック暗号化されたデータをひとつのパケットで前記相手先に送信する
ことを特徴とする暗号化通信制御装置。

【図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


【公開番号】特開2009−182991(P2009−182991A)
【公開日】平成21年8月13日(2009.8.13)
【国際特許分類】
【出願番号】特願2009−119658(P2009−119658)
【出願日】平成21年5月18日(2009.5.18)
【分割の表示】特願2003−160862(P2003−160862)の分割
【原出願日】平成15年6月5日(2003.6.5)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】