説明

サービス妨害攻撃に耐性を持つSSL/TLS準拠システム、方法、サーバ、プログラムおよび記録媒体

【課題】SSL/TLSプロトコルに準拠して相互認証を行う場合に、クライアント側に何らの変更を齎すことなく、SSL/TLSプロトコルのサービス妨害攻撃への耐性を向上させる。
【解決手段】SSL/TLSプロトコルに準拠して相互認証を行う場合に、サーバにおいて、鍵取得処理(ClientKeyExchange受信後のRSA復号化、DH離散対数演算など)を署名検証処理(CertificateVerify)が成功した後に行う。また、サーバにおいて、署名検証に成功するセッションが現われるまでの間、サーバセッション初期化処理で得られたデータを再利用してもよい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、SSL/TLSプロトコルのサービス妨害攻撃への耐性を向上させる技術に関する。
【背景技術】
【0002】
SSL(Secure Sockets Layer)あるいはTLS(Transport Layer Security)は、通信内容を暗号化して通信を行うための通信手順(プロトコル)である。SSL Ver3.0の技術仕様は、非特許文献1に公開されている。また、TLS Ver1.1の技術仕様は、IETF(Internet Engineering Task Force)によってRequest for Comments(RFC)4346(非特許文献2)に公開されている。
【0003】
図1に、TLS Ver1.1が規定するハンドシェイクプロトコル(Handshake Protocol)のメッセージフロー(Message flow)のモデルを示す。SSL Version 3.0でも同様のメッセージフローであるが、ここではTLS Ver1.1を例にしてその概要を説明する。詳しくは非特許文献2を参照されたい。
【0004】
クライアントは、乱数生成などのセッション初期化処理(クライアントセッション初期化処理)を行い、サーバへClientHelloを送信する。ClientHelloには、クライアント乱数、セッションID、クライアントが使える暗号アルゴリズムの種類のリスト(CipherSuite)、圧縮方式の種類のリスト(CompressionMethod)などが含まれる。
【0005】
サーバは、ClientHelloを受信すると、乱数生成などのセッション初期化処理(サーバセッション初期化処理)を行い、クライアントへServerHelloを送信する。ServerHelloには、サーバ乱数、セッションID、クライアントから送られたCipherSuiteの中からサーバが一つ選択した暗号アルゴリズム、クライアントから送られたCompressionMethodの中からサーバが一つ選択した圧縮方式などが含まれる。
【0006】
サーバは、ServerHelloの送信に続いて、オプションとして、ServerCertificate、ServerKeyExchange、CertificateRequestをクライアントに送信することができる。ServerCertificateは、ITU(International Telecommunication Union)が勧告したX.509v3の仕様に準拠したサーバの電子証明書である。ServerKeyExchangeは、クライアントがサーバとプリマスタシークレット(a premaster secret ; PMS)の交換を行うために十分な情報がServerCertificateに含まれていない場合に送られる情報であって、例えばRSA暗号アルゴリズムの場合にはサーバのRSA臨時鍵などが含まれる。CertificateRequestは、サーバからクライアントの証明書の提供を要求する情報であり、サーバが信頼する認証局のリストなどが含まれる。
【0007】
サーバは、ServerHelloとオプションとして送信された一連のメッセージ(ServerCertificate、ServerKeyExchange、CertificateRequest)の終了をクライアントに知らせる情報(ServerHelloDone)をクライアントに送信する。
【0008】
クライアントは、サーバからServerHelloDoneを受信すると、サーバからCertificateRequestを受信していた場合にのみ、ClientCertificateをサーバに送信する。ClientCertificateは、ServerCertificateと同じ仕様に準拠した電子証明書である。
【0009】
クライアントは、サーバからServerHelloDoneを受信した直後、あるいは、ClientCertificateをサーバへ送信した直後、クライアントとサーバとの間のHelloメッセージの遣り取りで決められた暗号アルゴリズムに則り、ClientKeyExchangeをサーバに送信する。例えば鍵交換に使用する暗号アルゴリズムがRSAの場合、プリマスタシークレット(PMS)として生成した乱数がサーバの公開鍵でRSA暗号化されたプリマスタシークレットがClientKeyExchangeに含まれる。また、鍵交換に使用する暗号アルゴリズムがDH(Diffie-Hellman)の場合、クライアントが生成した秘密情報(乱数)をサーバの公開情報を用いて暗号化して得られた暗号化情報がClientKeyExchangeに含まれる。
【0010】
サーバは、クライアントからClientKeyExchangeを受信すると、クライアントとサーバとの間のHelloメッセージの遣り取りで決められた暗号アルゴリズムに則り、マスタシークレット(a master secret)を生成する。例えばRSAの場合、暗号化されたプリマスタシークレットに対してRSA復号化を行ってプリマスタシークレットを復号し、このプリマスタシークレットを入力の一つとするハッシュ関数PRF(システム共通の関数)の値を求めることでマスタシークレットを生成する。また、DHの場合、サーバの秘密情報を用いて暗号化情報からプリマスタシークレットを生成し、このプリマスタシークレットを入力の一つとするハッシュ関数PRFの値を求めることでマスタシークレットを生成する。
【0011】
一方、クライアントも、プリマスタシークレットからマスタシークレットを生成する。例えばRSAの場合、クライアントが生成したプリマスタシークレットを入力の一つとするハッシュ関数PRFの値を求めることでマスタシークレットを生成する。また、DHの場合、クライアントの秘密情報を用いてサーバの公開情報からプリマスタシークレットを生成し、このプリマスタシークレットを入力の一つとするハッシュ関数PRFの値を求めることでマスタシークレットを生成する。クライアントとサーバで生成されたマスタシークレットは共通の値である。
【0012】
クライアントは、ClientKeyExchangeの送信に続いて、オプションとして、CertificateVerifyをサーバに送信する。これは、クライアントがClientCertificateをサーバへ送信した場合に行われる。CertificateVerifyには、これまでのハンドシェイクメッセージ(handshake messages)のハッシュ値をクライアントの秘密鍵で暗号化して得られた署名が含まれる。
【0013】
サーバは、クライアントからCertificateVerifyを受信すると、ClientCertificateから取り出したクライアントの公開鍵を使ってCertificateVerifyに含まれる署名を復号することでハッシュ値を得て、このハッシュ値と、これまでのハンドシェイクメッセージ(handshake messages)のハッシュ値とを比較して、クライアントの署名を検証する(クライアント認証)。
【0014】
クライアントは、CertificateVerifyの送信に続いて、ChangeCipherSpecをサーバに送信する。ChangeCipherSpecは、クライアントとサーバの双方で決定した暗号アルゴリズムで通信を行うことの宣言である。さらに、クライアントは、ChangeCipherSpecの送信に続いて、Finishedをサーバに送信する。Finishedは、サーバとの一連の遣り取りによって暗号通信が可能な状態になったことを知らせる情報である。一方、サーバも、ChangeCipherSpecとFinishedをクライアントに送信する。
【0015】
これら一連の処理が済むと、クライアントとサーバとの間で暗号化されたデータ(Application Data)を相互に通信できる(暗号通信処理)。
【0016】
図1に示したメッセージフローモデルにおいて、暗号アルゴリズムをRSAとした場合、DHとした場合、DHE(Diffie-Hellman Ephemeral)とした場合のそれぞれの具体的なメッセージフローをそれぞれ図2、図3、図4に示す。これらの詳細は非特許文献2に公開されているから詳細な説明を省略する。
【0017】
上述の各手順の先後は非特許文献2に規定されている。例えば、CertificateVerifyについては、"When this message will be sent: This message is used to provide explicit verification of a client certificate. This message is only sent following a client certificate that has signing capability (i.e., all certificates except those containing fixed Diffie-Hellman parameters). When sent, it MUST immediately follow the client key exchange message."と規定されている。
【0018】
このような規定に呼応して、サーバでは、クライアントからClientKeyExchangeを受信すると、少なくとも、プリマスタシークレットのRSA復号化(暗号アルゴリズムがRSAの場合)や離散対数演算による暗号化情報からのプリマスタシークレット生成(暗号アルゴリズムがDHの場合)などの鍵取得処理を行ってから、クライアント認証(署名検証)を行っている。
【非特許文献1】The SSL Protocol Version 3.0、[平成20年2月21日検索]、インターネット〈http://wp.netscape.com/eng/ssl3/〉
【非特許文献2】The Transport Layer Security (TLS) Protocol Version 1.1、[平成20年2月21日検索]、インターネット〈http://tools.ietf.org/html/rfc4346〉
【発明の開示】
【発明が解決しようとする課題】
【0019】
このようなSSL/TLSプロトコルは、サービス妨害(DoS:Denial of Services)攻撃に対する耐性が低いという問題がある。
【0020】
サービス妨害攻撃の一手法として、攻撃者が大量のリクエストをサーバに送信することによってサービス提供を妨害する攻撃手法がある。
【0021】
ここでサービス妨害攻撃に対する耐性(以下、サービス妨害攻撃耐性とも云う。)は、サーバ側の処理負荷とクライアント側の処理負荷の比、つまり(サーバ側の処理負荷)/(クライアント側の処理負荷)で定義される。この値が大きいほど耐性が低いことになる。
【0022】
従来、SSL/TLS相互認証時では、クライアント側の処理負荷は大きく分けて、クライアントセッション初期化処理(ClientHelloでのクライアント乱数生成など)、鍵交換処理(ClientKeyExchangeでの乱数生成、RSA暗号化、DH離散対数演算など)、署名生成処理(CertificateVerify)であり、サーバ側の処理負荷は大きく分けて、サーバセッション初期化処理(ServerHelloでのサーバ乱数生成、DHE一時鍵生成など)、鍵取得処理(ClientKeyExchange受信後のRSA復号化、DH離散対数演算など)、署名検証処理(CertificateVerify)である。
【0023】
このとき、攻撃者クライアントが正規のクライアント証明書を有していないにも関わらず乱数生成に換えて固定値を用いるとすると、攻撃者クライアント側の処理負荷は正規の処理負荷よりも低減するが(理由:乱数生成処理を省略できる。)、サーバ側の処理負荷は正規の処理負荷と変わらないため(理由:クライアント認証(署名検証)に失敗するにも係らず、RSA復号化やクライアント認証(署名検証)を実行する。)、サーバ側の処理負荷が攻撃者クライアント側の処理負荷よりも相対的に大きくなり、サービス妨害攻撃耐性は低くなる。
【0024】
また、攻撃者クライアントが上記固定値を使い回して同一サーバへリクエストを繰り返し送信すると、サーバの処理負荷は、攻撃者クライアントの処理負荷に比して累積的に増大し、結果、サービス妨害攻撃耐性は著しく低くなる。
【0025】
このような問題を解決するために、SSL/TLSプロトコルの仕様を変更したプロトコルが提案されている。
Kemal BICAKCI, Bruno Crispo and Andrew S. Tanenbaum, "Reverse SSL: Improved Server Performance and DoS Resistance for SSL Handshakes", [平成20年2月21日検索], インターネット〈http://eprint.iacr.org/2006/212.pdf〉
【0026】
しかし、このようなプロトコルを実装する場合には、現行のクライアント側のプログラムを変更する必要があるため、システム変更のコストが高いという問題がある(現在普及しているクライアント数はサーバ数よりも圧倒的に多いため、クライアント側のプログラム変更のコストは多大である。)。
【0027】
そこで本発明の目的は、SSL/TLSプロトコルに準拠して相互認証を行う場合に、クライアント側に何らの変更を齎すことなく、SSL/TLSプロトコルのサービス妨害攻撃への耐性を向上させることである。
【課題を解決するための手段】
【0028】
本発明では、SSL/TLSプロトコルに準拠して相互認証を行う場合に、サーバにおいて、鍵取得処理(ClientKeyExchange受信後のRSA復号化、DH離散対数演算など)を署名検証処理(CertificateVerify)が成功した後に行う。現行のSSL/TLSプロトコルでは、クライアント側でClientKeyExchangeがCertificateVerifyに先行することが規定されているが、サーバ側でClientKeyExchangeを受信した後のRSA復号化、DH離散対数演算などを署名検証処理に先行させることは規定されていない。
【0029】
また、サーバにおいて、署名検証に成功するセッションが現われるまでの間、サーバセッション初期化処理で得られたデータを再利用してもよい。つまり、クライアントからの最初のリクエストに対してサーバセッション初期化処理を行うが、その後にクライアントからリクエストを繰り返し受信しても、署名検証に成功するセッションが現われない限り、サーバセッション初期化処理を行わず、前記サーバセッション初期化処理で得られたデータを再利用してもよい。
【0030】
また、本発明のサーバとしてコンピュータを機能させるプログラムによって、コンピュータをサーバとして作動処理させることができる。そして、このようなプログラムを記録した、コンピュータによって読み取り可能なプログラム記録媒体によって、他のコンピュータをサーバとして機能させることや、プログラムを流通させることなどが可能になる。
【発明の効果】
【0031】
本発明によれば、SSL/TLSプロトコルに準拠して相互認証を行う場合に、サーバにおいて署名検証(クライアント認証)に成功した後に鍵取得処理を行うため、攻撃者クライアントから大量のリクエストを受けてもリクエスト毎に鍵取得処理を行うことがない。よって、この処理負荷の低減を受けて従来よりも(サーバ側の処理負荷)/(クライアント側の処理負荷)が小さくなる。即ち、SSL/TLS相互認証時にこのプロトコルのサービス妨害攻撃耐性が向上する。また、サーバにおいて、署名検証に成功するセッションが現われるまでの間、サーバセッション初期化処理で得られたデータを再利用することで、リクエスト毎に行っていたサーバセッション初期化処理の負荷も低減できるから、一層、サービス妨害攻撃耐性が向上する。そして、本発明ではクライアント側には何らプロトコルの変更を齎さないから、現行のSSL/TLSプロトコルを採用して普及している現在の通信システムにおいてサーバのプログラム変更だけで本発明を実装できるという利点がある。
【発明を実施するための最良の形態】
【0032】
《第1実施形態》
図面を参照して、本発明の第1実施形態を説明する。
第1実施形態でサーバ100は、後述する構成を除き、従来的な相互認証SSL/TLSプロトコルを処理するために必要な機能構成を備えている。つまり、後述する構成を除き、サーバ100は、サーバセッション初期化処理、ServerHello、ServerCertificate、ServerKeyExchange、CertificateRequest、ServerHelloDone、ChangeCipherSpec、Finishedの送信処理およびClientHello、ClientCertificate、ClinetKeyExchange、CertificateVerify、ChangeCipherSpec、Finishedの受信処理、鍵取得処理、署名検証処理、暗号通信処理を実行するために必要な機能(サーバセッション初期化処理部、メッセージ送受信処理部、鍵取得処理部、署名検証処理部、暗号通信処理部)を有する(図5参照)。サーバ100は中央処理装置、記憶装置、送受信装置などのハードウェアを備えたコンピュータで実現され、サーバ100が発揮する機能構成部は所望の機能を発現するように記述されたプログラムを中央処理装置が解釈・実行することで実現される。
【0033】
クライアント900は、中央処理装置、記憶装置、送受信装置などのハードウェアを備えたコンピュータで実現され、クライアント900が発揮する機能構成部は所望の機能を発現するように記述されたプログラムを中央処理装置が解釈・実行することで実現される。ただし、本発明の特徴の一つは、現行のSSL/TLSプロトコルを前提としてクライアントに何らの影響を与えないことであるから、クライアント900は従前のとおりのハードウェア構成/ソフトウェア構成でよく、本明細書ではクライアント900の詳細に立ち入らない。
【0034】
また、第1実施形態において、サーバ100とクライアント900は相互通信可能に構成されており、この構成の詳細は、現行のSSL/TLSプロトコルを実施するシステム構成と同じである。
【0035】
サーバ100は、これが第1制御部101を備える構成である点で、従来構成のサーバと異なる(図5参照)。従来構成のサーバの制御部は、クライアント900からClientKeyExchangeを受信した後、少なくとも、プリマスタシークレットのRSA復号化(暗号アルゴリズムがRSAの場合)や離散対数演算による暗号化情報からのプリマスタシークレット生成(暗号アルゴリズムがDHの場合)などの鍵取得処理を実行するように鍵取得処理部を制御し、続いて、署名検証処理(クライアント認証)を実行するように署名検証処理部を制御していた。
【0036】
このような従来構成に比して、サーバ100の第1制御部101は、クライアント900からClientKeyExchangeを受信した後、ClientKeyExchangeを記憶装置に記憶する制御を行い、次に、クライアント900からClientVerifyの受信を待って署名検証処理(クライアント認証)を実行するように署名検証処理部を制御し、次いで、署名検証(クライアント認証)に成功した場合に、記憶装置に記憶されたClientKeyExchangeを用いて上記鍵取得処理を実行するように鍵取得処理部を制御する。署名検証に失敗した場合は、SSL/TLSの仕様に準拠してAlert等がクライアントに通知される。
【0037】
つまり、従来のプロトコルは、サーバがClientKeyExchangeを受信した後、
ステップ1:少なくとも、プリマスタシークレットのRSA復号化(暗号アルゴリズムがRSAの場合)や離散対数演算による暗号化情報からのプリマスタシークレット生成(暗号アルゴリズムがDHの場合)などの鍵取得処理を実行する、
ステップ2:クライアント900からClientVerifyを受信する、
ステップ3:署名検証(クライアント認証)を行う、
という手順で処理を行っていた。
これに対して第1実施形態では、サーバがClientKeyExchangeを受信した後、
ステップS1:クライアント900から受信したClientKeyExchangeを記憶装置に記憶する、
ステップS2:クライアント900からClientVerifyの受信を待って署名検証(クライアント認証)を実行する、
ステップS3:署名検証(クライアント認証)に成功した場合に、記憶装置に記憶されたClientKeyExchangeを用いて、少なくとも、プリマスタシークレットのRSA復号化(暗号アルゴリズムがRSAの場合)や離散対数演算による暗号化情報からのプリマスタシークレット生成(暗号アルゴリズムがDHの場合)などの鍵取得処理を実行する、
という手順で処理を行う(図6参照)。サーバ100での鍵取得処理は、サーバからChangeCipherSpecまたはFinishedがクライアント900へ送信されるまでの間に行われればよい。この主旨で、図6では鍵取得処理をChangeCipherSpecの送信前に行っている場合を例示している。なお、上記ステップS1の処理よりも前の処理手順は現行SSL/TLSプロトコルに準拠し、ステップS3の処理よりも後の処理手順も現行SSL/TLSプロトコルに準拠する。
【0038】
このように、署名検証(クライアント認証)に成功するまで鍵取得処理を行わないから、従来のサーバの処理負荷に比して第1実施形態のサーバ100の処理負荷は低減しており、この効果は、正規のクライアント証明書を持たない攻撃者クライアントが大量のリクエストをサーバ100に送信してきた場合に顕著である。つまり、サーバ100のサービス妨害攻撃耐性は従来のサーバのそれに比べて向上している。
【0039】
なお、本発明ではクライアント−サーバ間の相互認証を前提にしており、現行SSL/TLSプロトコルではオプションとされるCertificateRequest、ClientCertificate、CertificateVerifyのクライアント−サーバ間送受信が必須であることに注意しなければならない。
【0040】
図7に、署名生成および署名検証の各処理の負荷を示す。暗号アルゴリズムがDSAの場合は両処理に大きな差異がないが、RSAの場合は両処理に顕著な差異が認められ、署名検証の方が署名生成よりも鍵長にもよるが10倍程度高速である(図7点線枠囲み部参照)。よって、相互認証の場合には、署名検証を行うサーバ100よりも署名生成を行うクライアント900の方が大きな処理負荷を負担するから、(サーバ側の処理負荷)/(クライアント側の処理負荷)が小さくなり、サービス妨害攻撃耐性が向上する。
【0041】
なお、サーバ100の処理が複数のクライアントに対して並列処理を行う場合、並列処理を行うスレッド(thread)ごとに上記手順の処理を行う。
【0042】
《第2実施形態》
第2実施形態は、第1実施形態を基礎として、署名検証に成功するセッションが現われるまでの間、サーバセッション初期化処理で得られたデータを再利用する実施形態である(図8参照)。
【0043】
サーバ100は、サーバ100の記憶装置にサーバセッション初期化処理で得られたデータを記憶する領域(以下、記憶領域という。)を確保している。また、サーバ100は第2制御部102を有している。サーバ100の第2制御部102は、クライアント900からClientHelloを受信すると、記憶領域にサーバセッション初期化処理で得られたデータが記憶されているか否かを確認する。記憶領域にサーバセッション初期化処理で得られたデータが記憶されていない場合には、第2制御部102は、サーバセッション初期化処理を行うようにサーバセッション初期化処理部を制御し、記憶領域にサーバセッション初期化処理で得られたデータが記憶されている場合には、第2制御部102は、サーバセッション初期化処理を行わないようにサーバセッション初期化処理部を制御する(図8の符号S4参照)。
【0044】
そして、現行SSL/TLSプロトコルに準拠した手順が実行されてサーバがClientKeyExchangeを受信すると第1実施形態で説明した手順が実行される。このとき、署名検証処理にて署名検証に成功すると、第1制御部101は記憶領域からサーバセッション初期化処理で得られたデータを消去する(図8の符号S2a参照)。署名検証に失敗した場合は、第1制御部101は記憶領域からサーバセッション初期化処理で得られたデータを消去せず、記憶領域に記憶されたデータは維持される。
【0045】
このため、署名検証に成功するセッションが現われるまでの間、ひとたび記憶領域に記憶されたサーバセッション初期化処理で得られたデータが再利用されることになる。
【0046】
《第3実施形態》
第3実施形態は、第1実施形態を前提として、例えば中継装置(以下、プロキシサーバという。)を介してSSL−VPN(Secure Socket Layer Virtual Private Naetwork)に拡張対応する実施形態である(図9参照)。
【0047】
第1実施形態のサーバ100は、第3実施形態ではプロキシサーバ200に対応している。但し、サーバセッション初期化処理をプロキシサーバ200で行うのではなく、外部サーバ300に委託して行っている。つまり、プロキシサーバ200は、クライアント900からClientHelloを受信すると、サーバセッション初期化処理を要求する情報(以下、初期化処理要求情報という。)を外部サーバ300に送信し(図9の符号S5参照)、外部サーバ300のセッション初期化処理部はサーバセッション初期化処理を行い、この処理で得られたデータをプロキシサーバ200に送信する(図9の符号S6参照)。プロキシサーバ200は、外部サーバ300で生成されたデータを受信すると現行のSSL/TLSプロトコルに準拠して、このデータを含むServerHelloをクライアント900に送信する。
【0048】
第3実施形態においても、第1実施形態ないし第2実施形態のとおり、署名検証処理で署名検証に成功した後に鍵取得処理を行う。
【0049】
署名検証に成功するセッションが現われるまでの間、ひとたび記憶領域に記憶されたサーバセッション初期化処理で得られたデータを再利用することは、プロキシサーバ200に替えて外部サーバ300によって行われる。
具体的には、プロキシサーバ200は第3制御部103を有しており、第3制御部103は、クライアント900からClientHelloを受信すると、プロキシサーバ200の記憶領域に外部サーバ300でのサーバセッション初期化処理で得られたデータが記憶されているか否かを確認する。プロキシサーバ200の記憶領域に前記データが記憶されていない場合には、第3制御部103は、外部サーバ300に対してサーバセッション初期化処理を要求する初期化処理要求情報(この情報には例えばClientHelloを含めることができる。)を送信するように制御を行い、プロキシサーバ200の記憶領域に前記データが記憶されている場合には、第3制御部103は、外部サーバ300に対して初期化処理要求情報を送信しないように制御を行う。この結果、第2実施形態と同様の処理がプロキシサーバ200で実現する。
【0050】
この第3実施形態は、出願済み未公開の特願2007−89906に開示された共通鍵設定システムおけるプロトコルとしても好適である。
【0051】
以上の実施形態の他、本発明は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【0052】
また、上記サーバ100またはプロキシサーバ200における処理機能をコンピュータによって実現する場合、サーバ100またはプロキシサーバ200が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記サーバ100またはプロキシサーバ200における処理機能がコンピュータ上で実現される。
【0053】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)等を、光磁気記録媒体として、MO(Magneto-Optical disc)等を、半導体メモリとしてEEP−ROM(Electronically Erasable and Programmable-Read Only Memory)等を用いることができる。
【0054】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0055】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0056】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、サーバ100またはプロキシサーバ200を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図面の簡単な説明】
【0057】
【図1】従来のSSL/TLSハンドシェイクプロトコルのメッセージフローモデル。
【図2】図1に示すメッセージフローモデルにおいて暗号アルゴリズムがRSAの場合のメッセージフロー。
【図3】図1に示すメッセージフローモデルにおいて暗号アルゴリズムがDHの場合のメッセージフロー。
【図4】図1に示すメッセージフローモデルにおいて暗号アルゴリズムがDHEの場合のメッセージフロー。
【図5】本発明のSSL/TLS準拠システム。
【図6】第1実施形態のSSL/TLS準拠方法のメッセージフロー(プロトコル)。
【図7】RSA、DSAの各場合において署名生成および署名検証の各処理の負荷を示す図。
【図8】第2実施形態のSSL/TLS準拠方法のメッセージフロー(プロトコル)。
【図9】第3実施形態のSSL/TLS準拠方法のメッセージフロー(プロトコル)。

【特許請求の範囲】
【請求項1】
SSL/TLSプロトコルに準拠して、サーバで少なくとも鍵取得処理、署名検証処理が行われ、サーバとクライアントの間で相互認証して暗号通信を行うSSL/TLS準拠システムにおいて、
上記サーバが、
上記クライアントからClientKeyExchangeを受信した後、ClientKeyExchangeを上記サーバの記憶装置に記憶する制御を行い、上記クライアントからClientVerifyの受信を待って署名検証処理を実行するように制御し、次いで、署名検証に成功した場合に、上記記憶装置に記憶されたClientKeyExchangeを用いて鍵取得処理を実行するように制御する第1制御部を備えている
ことを特徴とするSSL/TLS準拠システム。
【請求項2】
上記クライアントからClientHelloを受信すると、上記記憶装置に上記サーバのセッション初期化処理で得られたデータが記憶されているか否かを確認し、上記記憶装置に前記データが記憶されていない場合には、上記サーバのセッション初期化処理を行うように制御し、上記記憶装置に前記データが記憶されている場合には、上記サーバのセッション初期化処理を行わないように制御する第2制御部を上記サーバはさらに備え、
上記第1制御部は、署名検証に成功すると、上記記憶装置に記憶されている前記データを消去する処理を行う
ことを特徴とする請求項1に記載のSSL/TLS準拠システム。
【請求項3】
セッション初期化処理を行う外部サーバをさらに備え、
上記クライアントからClientHelloを受信すると、上記記憶装置に上記外部サーバのセッション初期化処理で得られたデータが記憶されているか否かを確認し、前記データが記憶されていない場合には、上記外部サーバに対してセッション初期化処理を要求する情報(以下、初期化処理要求情報という。)を送信するように制御を行い、上記記憶装置に前記データが記憶されている場合には、上記外部サーバに対して初期化処理要求情報を送信しないように制御を行う第3制御部を上記サーバはさらに備えている
ことを特徴とする請求項1に記載のSSL/TLS準拠システム。
【請求項4】
SSL/TLSプロトコルに準拠して、サーバで少なくとも鍵取得処理、署名検証処理が行われ、サーバとクライアントの間で相互認証して暗号通信を行うSSL/TLS準拠方法において、
上記サーバの第1制御部が、上記クライアントからClientKeyExchangeを受信した後、ClientKeyExchangeを上記サーバの記憶装置に記憶する制御を行う第1ステップと、
上記サーバの第1制御部が、上記クライアントからClientVerifyの受信を待って署名検証処理を実行するように制御する第2ステップと、
上記サーバの第1制御部が、署名検証に成功した場合に、上記記憶装置に記憶されたClientKeyExchangeを用いて鍵取得処理を実行するように制御する第3ステップを有する
ことを特徴とするSSL/TLS準拠方法。
【請求項5】
上記サーバの第2制御部が、上記クライアントからClientHelloを受信すると、上記記憶装置に上記サーバのセッション初期化処理で得られたデータが記憶されているか否かを確認し、上記記憶装置に前記データが記憶されていない場合には、上記サーバのセッション初期化処理を行うように制御し、上記記憶装置に前記データが記憶されている場合には、上記サーバのセッション初期化処理を行わないように制御するセッション初期化制御ステップと、
上記サーバの第1制御部が、署名検証に成功すると、上記記憶装置に記憶されている前記データを消去する処理を行う第4ステップと
を有する
ことを特徴とする請求項4に記載のSSL/TLS準拠方法。
【請求項6】
上記サーバの第3制御部が、上記クライアントからClientHelloを受信すると、上記記憶装置にセッション初期化処理を行う外部サーバのセッション初期化処理で得られたデータが記憶されているか否かを確認し、前記データが記憶されていない場合には、上記外部サーバに対してセッション初期化処理を要求する情報(以下、初期化処理要求情報という。)を送信するように制御を行い、上記記憶装置に前記データが記憶されている場合には、上記外部サーバに対して初期化処理要求情報を送信しないように制御を行うセッション初期化委託ステップと、
上記サーバの第1制御部が、署名検証に成功すると、上記記憶装置に記憶されている前記データを消去する処理を行う第4ステップと
を有する
ことを特徴とする請求項4に記載のSSL/TLS準拠方法。
【請求項7】
SSL/TLSプロトコルに準拠して、少なくとも鍵取得処理、署名検証処理が行われ、クライアントとの間で相互認証して暗号通信を行うSSL/TLS準拠サーバにおいて、
上記サーバが、
上記クライアントからClientKeyExchangeを受信した後、ClientKeyExchangeを上記サーバの記憶装置に記憶する制御を行い、上記クライアントからClientVerifyの受信を待って署名検証処理を実行するように制御し、次いで、署名検証に成功した場合に、上記記憶装置に記憶されたClientKeyExchangeを用いて鍵取得処理を実行するように制御する第1制御部を備えている
ことを特徴とするSSL/TLS準拠サーバ。
【請求項8】
上記クライアントからClientHelloを受信すると、上記記憶装置に上記セッション初期化処理で得られたデータが記憶されているか否かを確認し、上記記憶装置に上記セッション初期化処理で得られたデータが記憶されていない場合には、セッション初期化処理を行うように制御し、上記記憶装置に上記セッション初期化処理で得られたデータが記憶されている場合には、セッション初期化処理を行わないように制御する第2制御部をさらに備えている
ことを特徴とする請求項7に記載のSSL/TLS準拠サーバ。
【請求項9】
上記クライアントからClientHelloを受信すると、上記記憶装置にセッション初期化処理を行う外部サーバのセッション初期化処理で得られたデータが記憶されているか否かを確認し、前記データが記憶されていない場合には、上記外部サーバに対してセッション初期化処理を要求する情報(以下、初期化処理要求情報という。)を送信するように制御を行い、上記記憶装置に前記データが記憶されている場合には、上記外部サーバに対して初期化処理要求情報を送信しないように制御を行う第3制御部をさらに備えている
ことを特徴とする請求項7に記載のSSL/TLS準拠サーバ。
【請求項10】
請求項7から請求項9のいずれかに記載されたSSL/TLS準拠サーバとしてコンピュータを機能させるためのプログラム。
【請求項11】
請求項10に記載のプログラムを記録したコンピュータに読み取り可能な記録媒体。

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


【公開番号】特開2009−206568(P2009−206568A)
【公開日】平成21年9月10日(2009.9.10)
【国際特許分類】
【出願番号】特願2008−44120(P2008−44120)
【出願日】平成20年2月26日(2008.2.26)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】