説明

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

【課題】SSL/TLS暗号通信では、秘密鍵による公開鍵暗号(復号)処理は非常に重く、この処理に要するCPU等サーバ費用は非常に高い。特に、多数のクライアントと接続するようなインターネット上の公開サーバにおいて、この傾向は顕著である。
【解決手段】サーバのCPU使用率(負荷)が高くなってきたら、クライアントを「SSL/TLS暗号通信のサーバ」に、サーバを「SSL/TLS暗号通信のクライント」とした、リバースのSSL/TLSネゴシエーションを行う。また、サーバは、そのリバースのSSL/TLSネゴシエーションの前に行う通常のSSL/TLSネゴシエーションにおいて、リバースのSSL/TLSネゴシエーションを実行するか否かを、クライントに指示する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、SSL(Secure Socket Layer)/TLS(Transport Layer Security)暗号通信に関するもので、特にSSL/TLS通信のハンドシェイクに関する。
【背景技術】
【0002】
近年、通信を安全に行う方法として、SSL/TLS暗号通信が普及している(非特許文献1、2、3参照)。
【0003】
しかし「暗号の2010年問題」で指摘されているように、現在の暗号解読能力向上は著しく、現行の暗号鍵(復号鍵を含む)の鍵長では安全と言えなくなってきている。そこで、これに対応するため、近年、鍵長を更に大きくする対策がとられている。これらの対応により、当面の危険性は、大幅に緩和されると期待できる。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】T.Dierks、C.Allen、”The TLS Protocol Version 1.0”、RFC 2246、[online]、1999年1月、[平成23年3月29日検索] 、インターネット<http://www.ietf.org/rfc/rfc2246.txt>
【非特許文献2】T.Dierks、E.Rescorla、”The Transport Layer Security (TLS) Protocol Version 1.1”、RFC 4346、[online]、2006年4月、[平成23年3月29日検索]、インターネット<http://www.ietf.org/rfc/rfc4346.txt>
【非特許文献3】T.Dierks、E.Rescorla、”The Transport Layer Security (TLS) Protocol Version 1.2”、RFC 5246、[online]、2008年8月、[平成23年3月29日検索]、インターネット<http://www.ietf.org/rfc/rfc5246.txt>
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、暗号鍵(復号鍵を含む)の鍵長を大きくすると、計算処理回数が大幅に増加し、処理時間も大幅に伸びる。特に、秘密鍵による公開鍵暗号を行っているサーバの負荷は無視できないほどに大きなものになる。事実、「暗号の2010年問題」対応のため、現在主流の公開鍵暗号である1024ビットRSA暗号は、2048ビットRSA(Rivest Shamir Adleman)暗号に移行するが、サーバの負荷は6〜8倍に増加する。
【0006】
そのため、多数のクライントを相手にするサーバでは、CPUの能力向上対応等で、大幅なコストアップとなる。しかも公開サーバの場合には、秘密鍵による公開鍵暗号(復号)処理を強要するDOS(Denial of Service)攻撃が想定されるため、この影響は甚大である。
【0007】
なお、1つのクライアントしか相手にしないサーバであっても問題となるケースは少なくない。相手が1つのクライアントだったとしても、多くのSSL/TLS暗号通信が利用されれば同じ課題に直面する。
【0008】
実際、単純なWebアクセスであっても問題になることがある。Webアクセス等ではGETの度にSSL/TLS暗号通信の開始・切断が行われることが多く、1ページの中にGETされる多くの部品が存在するWebページでは、非常に多くのSSL/TLS暗号通信が実行される。仮に、このサーバのCPU能力を向上させなければ、頻繁に通信タイムアウトが発生する恐れがある。
【0009】
本発明は、このような従来技術の問題点を解消するべく案出されたものであり、その主な目的は、SSL/TLS暗号通信を実行するクライアントとサーバで、暗号(復号)処理の負荷分散を図ことにある。これにより、システム全体での処理速度を向上させ、かつSSL/TLS暗号通信の搭載(実現)費用をより安価なものにする。
【課題を解決するための手段】
【0010】
上述の課題を解決するために、本発明の通信装置は、他の通信装置と第1の鍵を用いて通信を行う通信装置であって、前記他の通信装置との間でハンドシェイク処理を行う認証処理部を備え、前記認証処理部は、前記第1の鍵を前記他の通信装置との間で交換するための第2の鍵の復号処理を行う鍵復号化部と、前記第2の鍵を用いて暗号処理を行う鍵暗号化部と、を有し、前記鍵復号化部による前記復号処理を除く第1のハンドシェイク処理を行い、前記第1のハンドシェイク処理が終了した場合、前記鍵復号化部による前記復号処理を除く第2のハンドシェイク処理を行い、前記第2のハンドシェイク処理において、前記鍵暗号化部に前記第2の鍵を用いて前記第1の鍵の情報を暗号化させ、前記第2の鍵で暗号化された前記第1の鍵の情報を前記他の通信装置に送信するように構成した。
【0011】
この通信装置によれば、ファイヤーウォールのチェックにかからずに、鍵復号化部が行う第2の鍵の復号処理を他の通信装置に行わせることができる。すなわち、通信装置の負荷を他の通信装置に分散させることができる。
【0012】
また、本発明の通信装置は、前記認証処理部は、ダミーデータを用いて前記他の通信装置と第1のハンドシェイク処理を行うように構成した。
【0013】
この通信装置によれば、通信装置と他の通信装置は第1のハンドシェイク処理では第2の鍵による復号を行わないので、ダミーデータを用いることで不要な処理を省略することができる。
【0014】
また、本発明の通信装置は、演算処理を行う演算部と、前記演算部の使用状況を検知し、前記使用状況の情報を前記認証処理部に通知する使用状況検知部と、をさらに有し、前記認証処理部は、前記使用状況に基づいて前記第1のハンドシェイク処理で前記鍵復号化部による前記復号処理を除くかどうかを決定するように構成した。
【0015】
この通信装置によれば、演算部の使用状況に基づいて第2の鍵の復号処理を省略するかどうか判断することができる。すなわち、状況に応じて第2ハンドシェイク処理の必要性を判断することができる。
【0016】
また、本発明の通信装置は、前記他の通信装置が前記第2のハンドシェイク処理を実行可能なことを通知する第1の情報を前記他の通信装置から受信する場合、前記第1の認証処理部は、前記第1の情報と前記使用状況とに基づいて前記第2のハンドシェイク処理を行うかどうかを決定するように構成した。
【0017】
この通信装置によれば、状況に応じて第2のハンドシェイク処理の必要性を判断することができる。
【0018】
また、本発明の通信装置は、前記他の通信装置の処理能力を通知する第2の情報を前記他の通信装置から受信する場合、前記第1の認証処理部は、前記第1の情報と前記第2の情報と前記使用状況とに基づいて前記第2のハンドシェイク処理を行うかどうかを決定するように構成した。
【0019】
この通信装置によれば、他の通信装置の処理能力に応じて第2のハンドシェイクの必要性を判断することができる。
【0020】
また、本発明の通信システムは、第1の通信装置と第2の通信装置との間で第1の鍵を用いて通信を行う通信システムであって、前記第1の通信装置は、前記第2の鍵を用いて暗号処理を行う第1の鍵暗号化部と、前記第1の鍵を前記第2の通信装置との間で交換するための第2の鍵の復号処理を行う第1の鍵復号化部と、を有し、前記第2の通信装置は、前記第2の鍵を用いて暗号処理を行う第2の鍵暗号化部と、前記第1の鍵を前記第1の通信装置との間で交換するための第2の鍵の復号処理を行う第2の鍵復号化部と、を有し、前記第1の鍵復号部による前記第2の鍵の復号処理を除く第1のハンドシェイク処理が前記第1の通信装置と前記第2の通信装置との間で行われた場合、前記第1の通信装置と前記第2の通信装置とは第2のハンドシェイク処理を行い、前記第2のハンドシェイク処理において、前記第1の通信装置は、前記第1の鍵暗号化部に前記第2の鍵を用いて前記第1の鍵の情報を暗号化させ、前記第2の鍵で暗号化された前記第1の鍵の情報を前記第2の通信装置に送信し、前記第2の通信装置の前記第2の鍵復号化部は前記第2の鍵で暗号化された前記第1の鍵の情報の復号処理を行うように構成した。
【0021】
この通信システムによれば、ファイヤーウォールのチェックにかからずに、通常第1の鍵復号化部が行う第2の鍵の復号処理を第2の通信装置に行わせることができる。すなわち、第1の通信装置の負荷を第2の通信装置に分散させることができる。
【0022】
また、本発明の通信システムは、前記第1の通信装置と前記第2の通信装置とはダミーデータを用いて前記第1のハンドシェイク処理を行うように構成した。
【0023】
この通信システムによれば、第1の通信装置と第2の通信装置とは第1のハンドシェイク処理では第2の鍵による復号を行わないので、ダミーデータを用いることで不要な処理を省略することができる。
【0024】
また、本発明の通信システムは、前記第1のハンドシェイクが終了した場合、前記第2の通信装置は、前記第1の通信装置に第2のハンドシェイクを要求する信号を送信するように構成した。
【0025】
これ通信システムによれば、第1の通信装置は、第2の通信装置からの信号をきっかけに第2のハンドシェイクを行うことができる。
【0026】
また、本発明の通信システムは、前記第1のハンドシェイク処理において、第2の通信装置は、前記第2のハンドシェイク処理を実行可能なことを通知する第1の情報を前記第1の通信装置に送信し、前記第1の情報を受信した前記第1の通信装置は、前記第2のハンドシェイク処理を行うことを前記第2の通信装置に通知するように構成した。
【0027】
この通信システムによれば、第1のハンドシェイク処理を行う段階で、第1の通信装置と第2の通信装置とは、第2のハンドシェイク処理を行うことをお互いに認識することができる。これにより、第1の通信装置と第2の通信装置とは第1のハンドシェイク処理において不要な処理を省略することができる。
【0028】
また、本発明の通信システムは、前記第2の通信装置は、前記第1の情報と共に、使用可能な暗号方式を前記第1の通信装置に送信し、前記第1の通信装置が前記第2のハンドシェイク処理を行わないと決定した場合、前記第1の通信装置は、前記使用可能な暗号方式の中から前記第1のハンドシェイク処理で使用する暗号方式を選択して前記第2の通信装置に通知する、ように構成した。
【0029】
この通信システムによれば、第1の通信装置は第2の通信装置に第1のハンドシェイク処理で使用する暗号方式を通知することで、第2のハンドシェイクを行わないことを通知することができる。
【0030】
また、本発明の通信システムは、前記第1の通信装置は、演算処理を行う演算部と、前記演算部の使用状況を検知する使用状況検知部と、をさらに有し、前記使用状況の情報と前記第1の情報とに基づいて、前記第2のハンドシェイク処理を行うかどうかを決定するように構成した。
【0031】
この通信システムによれば、演算部の使用状況に応じて第2のハンドシェイク処理の必要性を判断することができる。
【0032】
また、本発明の通信システムは、前記第2の通信装置は、演算処理を行う演算部をさらに有し、前記演算部の処理能力を通知する第2の情報を前記第1の通信装置に送信し、前記第1の通信装置は、前記第1の情報と前記第2の情報と前記使用状況とに基づいて前記第2のハンドシェイク処理を行うかどうかを決定するように構成した。
【0033】
この通信システムによれば、第1の通信装置は第2の通信装置の処理能力に応じて第2のハンドシェイク処理の必要性を判断することができる。
【0034】
本発明の暗号通信方法は、クライアントを「SSL/TLS暗号通信におけるクライント」、サーバを「SSL/TLS暗号通信におけるサーバ」として、SSL/TLSネゴシエーション(SSL/TLSハンドシェイク)を実行した後に、その通信を切断せずに、クライアントを「SSL/TLS暗号通信におけるサーバ」、サーバを「SSL/TLS暗号通信におけるクライント」としてSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)を行う暗号通信方法であって、クライアントを「SSL/TLS暗号通信におけるクライント」、サーバを「SSL/TLS暗号通信におけるサーバ」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)においては、公開鍵暗号における秘密鍵による復号を実行せず、クライアントを「SSL/TLS暗号通信におけるサーバ」、サーバを「SSL/TLS暗号通信におけるクライント」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)においては、公開鍵暗号における秘密鍵による復号を実行し、クライアント・サーバ間で、第3者には秘密裏に共通鍵暗号における共通鍵を生成するものとした。
【0035】
これによると、サーバは、処理負荷の高い、公開鍵暗号における秘密鍵による復号処理をクライントに実施させることが可能となり、システム全体の処理速度を向上させ、かつサーバ費用を低減できるようになる。
【0036】
なお最近は、SSL/TLS暗号通信のサーバ機能、及び、クライント機能の両方を搭載しているクライント装置が多いため、多くのシステムで本発明を活用することができる。
【0037】
また、クライアントをSSL/TLS暗号通信におけるクライント、サーバをSSL/TLS暗号通信におけるサーバとして、SSL/TLSネゴシエーション(SSL/TLSハンドシェイク)を先に実行するので、NATやファイヤーウォールに通信を妨害されることもない。
【0038】
また、本発明の暗号通信方法は、クライアントを「SSL/TLS暗号通信におけるクライント」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)において、クライアントが「SSL/TLS暗号通信におけるサーバ」として動作可能であることを、クライントがサーバに対して通知する、若しくは、クライアントを「SSL/TLS暗号通信におけるサーバ」として動作させることを、クライントがサーバに対して要求するものとした。
【0039】
これによると、サーバは、動的に、クライアントがSSL/TLS暗号通信におけるサーバ機能を保有するか否かを知ることができる。つまり、サーバが、サーバ機能を保有しないクライントを含む多数のクライアントと通信する場合に、サーバ機能を保有するクライアントを容易に識別できる。
【0040】
また、本発明の暗号通信方法は、暗号スイートの提示で、クライアントが「SSL/TLS暗号通信におけるサーバ」として動作可能なことを、クライントがサーバに対して通知する、若しくは、クライアントが「SSL/TLS暗号通信におけるサーバ」として動作させることを、クライントがサーバに対して要求するものとした。
【0041】
これによると、サーバは、動的に、クライアントがSSL/TLS暗号通信におけるサーバ機能を保有するか否かを確実に知ることができる。
【0042】
なお、Client HelloのRandom bytesやセッションIDに、特別な値を設定し、これをクライントがサーバ機能を保有する合図として利用してもよいが、サーバ機能を保有しないクライアントが偶然、その値を設定した場合に問題になる。
【0043】
また、本発明の暗号通信方法は、クライアントは、クライアントの処理状況を検知するクライアント状況検知手段を有し、このクライアント状況検知手段によって得られた処理状況に応じて、クライアントを「SSL/TLS暗号通信におけるサーバ」とするSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)の実行が動作可能であることを、サーバに対して通知する、若しくは、クライアントを「SSL/TLS暗号通信におけるサーバ」として動作させることを、サーバに対して要求するか否かを判断するものとした。
【0044】
これによると、クライアントに、公開鍵における秘密鍵による復号処理を実行する余裕がある場合のみ、クライアントを「SSL/TLS暗号通信におけるサーバ」とすることができるので、クライアントが復号処理で破綻することを防ぐことができる。
【0045】
また、本発明の暗号通信方法は、サーバを「SSL/TLS暗号通信におけるサーバ」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)において、クライアントが「SSL/TLS暗号通信におけるサーバ」として動作するように、サーバがクライアントに対してリクエスト、若しくは要求するものとした。
【0046】
これによると、サーバは、処理負荷の高い、公開鍵暗号における秘密鍵による復号処理をクライントに動的に実施させることが可能となる。例えば、接続してきたクライアントの処理能力が優れていると判別できる場合には、サーバはクライアントに対して、公開鍵暗号における秘密鍵による復号処理を任せるような運用が可能となる。
【0047】
また、本発明の暗号通信方法は、暗号スイートの提示で、クライアントが「SSL/TLS暗号通信におけるサーバ」として動作するように、サーバがクライアントに対してリクエスト、若しくは要求するものとした。
【0048】
これによると、クライアントは、動的に、クライアントが「SSL/TLS暗号通信におけるサーバ」として動作するようにリクエスト、若しくは要求されたか否かを確実に知ることができる。
【0049】
なお、Server HelloのRandom bytesやセッションIDに、特別な値を設定し、これをクライアントが「SSL/TLS暗号通信におけるサーバ」として動作するリクエスト、若しくは要求として利用してもよいが、クライアントが普通のサーバに接続し、サーバが偶然、その値を設定した場合に問題になる。
【0050】
また、本発明の暗号通信方法は、サーバはサーバの処理状況を検知するサーバ状況検知手段を有し、このサーバ状況検知手段によって得られた処理状況に応じて、サーバを「SSL/TLS暗号通信におけるクライント」とするSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)の実行を、クライアントに対して、リクエスト、若しくは要求するか否かを判断するものとした。
【0051】
これによると、サーバに、公開鍵における秘密鍵による復号処理を実行する余裕がなくなってきた場合のみ、クライアントを「SSL/TLS暗号通信におけるサーバ」とすることができるので、サーバが復号処理で破綻することを防ぐことができると共に、クライアントの負荷を少なくすることができる。
【0052】
また、本発明の暗号通信方法は、サーバはクライントの処理能力を検知する処理能力検知手段を有し、この処理能力検知手段によってクライントの処理能力を把握し、サーバを「SSL/TLS暗号通信におけるクライント」とするSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)の実行を、一定の処理能力を有するクライアントに対して、リクエスト、若しくは要求するか否かを判断するものとした。
【0053】
これによると、通常は処理能力の低いクライアントには負担をかけず、サーバの処理能力が危険なレベルまで低下した場合のみ、緊急的に、処理能力の低いクライアントに復号処理を依頼することができるようになる。
【0054】
また、本発明の暗号通信方法は、クライアントを「SSL/TLS暗号通信におけるサーバ」、サーバを「SSL/TLS暗号通信におけるクライント」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)において、Finishedを除く各handshakeやchange_cipher_specのデータ部に対して、ダミーデータのMACを付与するものとした。
【0055】
これによると、クライアントを「SSL/TLS暗号通信におけるサーバ」、サーバを「SSL/TLS暗号通信におけるクライント」としてSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)を、クライアントを「SSL/TLS暗号通信におけるクライント」、サーバを「SSL/TLS暗号通信におけるサーバ」として行う、SSL/TLS暗号通信における共通鍵暗号に見せかけることが可能となる。こうすれば、ファイヤーウォールに通信を妨害されることが少なくなる。
【0056】
また、本発明の暗号通信方法は、固定値、若しくは事前に決められた方法、若しくは、クライアントを「SSL/TLS暗号通信におけるクライント」、サーバを「SSL/TLS暗号通信におけるサーバ」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)において交換したデータや、それを元にして作成したデータによって、クライアントとサーバで共通鍵を作成し、この共通鍵を用いて、Finishedを除く各handshakeやchange_cipher_specのデータ部を暗号化するものとした。
【0057】
これによると、ファイヤーウォールに通信を妨害されることが更に少なくなる。
【0058】
また、本発明の暗号通信方法は、クライアントを「SSL/TLS暗号通信におけるサーバ」、サーバを「SSL/TLS暗号通信におけるクライント」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)において、各handshakeやchange_cipher_specのデータ部に対して、ダミーデータのMACと、application_dataヘッダを付与するものとした。
【0059】
これによると、クライアントを「SSL/TLS暗号通信におけるサーバ」、サーバを「SSL/TLS暗号通信におけるクライント」としてSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)を、クライアントを「SSL/TLS暗号通信におけるクライント」、サーバを「SSL/TLS暗号通信におけるサーバ」として行う、SSL/TLS暗号通信におけるデータ通信に見せかけることが可能となる。こうすれば、ファイヤーウォールに通信を妨害されることが少なくなる。
【0060】
また、本発明の暗号通信方法は、固定値、若しくは事前に決められて方法、若しくは、クライアントを「SSL/TLS暗号通信におけるクライント」、サーバを「SSL/TLS暗号通信におけるサーバ」として行うSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)において交換したデータや、それを元にして作成したデータによって、クライアントとサーバで共通鍵を作成し、この共通鍵を用いて、各handshakeやchange_cipher_specのデータ部を暗号化するものとした。
【0061】
これによると、ファイヤーウォールに通信を妨害されることが更に少なくなる。
【発明の効果】
【0062】
本発明によれば、第2の鍵の復号処理を分散することができる。
【図面の簡単な説明】
【0063】
【図1】本発明の実施の形態におけるSSL/TLS暗号通信の第1例を示すシーケンス図
【図2】本発明の実施の形態における機能ブロックの一例を示す図
【図3】本発明の実施の形態におけるクライアント側のフローチャートの一例を示す図
【図4】本発明の実施の形態におけるサーバ側のフローチャートの一例を示す図
【図5】本発明の実施の形態におけるハードウェア構成の一例を示す図
【図6】本発明の実施の形態におけるSSL/TLS暗号通信の第2例を示すシーケンス図
【発明を実施するための形態】
【0064】
まず、本発明の実施の形態の概要について説明する。
【0065】
本実施の形態では、通信装置(または他の通信装置)であるサーバと他の通信装置(または通信装置)であるクライアントとの間における鍵交換を行うハンドシェイクについて説明する。ハンドシェイク終了後にサーバとクライアントとで暗号通信をするための共通鍵を交換するために、サーバとクライアントとはハンドシェイクの際に共通鍵を共有する。本実施の形態では、具体例として、SSL/TLSネゴシエーション(SSLハンドシェイク)を用いる。
【0066】
SSL/TLSネゴシエーションでは、共通鍵を共有するために公開鍵暗号を利用する。具体的には、クライアントは、共通鍵(第1の鍵)を生成し、サーバがクライアントに送付した公開鍵(第2の鍵)を用いて共通鍵を暗号化し、この暗号化された共通鍵をサーバに送付する。そして、サーバは秘密鍵を用いて公開鍵で暗号化された共通鍵の復号処理を行う。
【0067】
しかしながら、上述した秘密鍵による復号処理は負荷の重い処理であり、サーバには負担がかかる。例えば、複数のクライアントが同時にSSL/TLSネゴシエーションを要求する場合等のサーバの負担は大きい。また、サーバよりもクライアントの方が処理能力が高い場合等は、クライアントで秘密鍵による復号処理を行うことが好ましい。しかし、SSL/TLSネゴシエーションのプロトコルにおいて、サーバが秘密鍵による復号処理を行うこととなっているため、このプロトコルに反してクライアントが秘密鍵による復号処理を行ってしまうと、ファーヤーウォールのチェックにかかり、ハンドシェイクが行うことができない。
【0068】
そこで、本実施の形態では、まずサーバが「SSL/TLSネゴシエーションのサーバ」として形式的な第1のハンドシェイクを行い(すなわち、サーバは秘密鍵による復号処理を行わず、第1のハンドシェイクでは共通鍵の交換は行われない)、次にサーバが「SSL/TLSネゴシエーションのクライアント」として実質的な第2のハンドシェイクを行う(すなわち、第2のハンドシェイクで共通鍵の交換は行われる)。換言すると、第1のハンドシェイクにおいて、クライアントは「SSL/TLSネゴシエーションのクライアント」として動作するが、第1のハンドシェイクにおいて、クライアントは「SSL/TLSネゴシエーションのサーバ」として動作し、秘密鍵による復号処理を行う。
【0069】
以上のようにSSL/TLSネゴシエーションを行うことで、サーバの負荷を分散することができる。
【0070】
以下、本発明の実施の形態を、図面を参照しながら説明する。
【0071】
図1は、本発明によるSSL/TLS暗号通信の一例を示すシーケンス図である。なお説明を簡単にするために、ここで用いる公開鍵暗号はRSA暗号として説明を行う。
【0072】
図1において、第1のハンドシェイク処理は(S1)〜(S8)に相当し、第2のハンドシェイク処理は(S9)〜(S18)に相当する。第1のハンドシェイク処理では公開鍵で暗号された信号を秘密鍵による復号処理は行われず、前述の復号処理は第2のハンドシェイクで行われる。
【0073】
(図1−(S1))クライアントがClient Helloを生成し、サーバに対して、このClient Helloを送信する。クライアントは、このClient Helloで、クライアントがリバースのSSL/TLSネゴシエーションが可能であることをサーバに知らせる。ここでリバースSSLとは、通常のSSL/TLSネゴシエーションのプロトコルと反対の手順(反対の立場)で行うことを意味する。また、上述した第2のハンドシェイクを行うことも意味すると共に、サーバ2が秘密鍵による復号処理を第1のハンドシェイクで行わないことも意味する。すなわち、サーバは通常のSSL/TLSネゴシエーションの「クライアント」として動作し、クライアントは通常のSSL/TLSネゴシエーションの「サーバ」として動作する。
【0074】
なおクライアントが、リバースのSSL/TLSネゴシエーション利用が可能であることを、サーバに対して知らせる方法は様々であり、1つの方法に限定されるものではない。
【0075】
例えば、Client Helloの拡張データ(extra data)に特殊なコマンドを設定することで、それを知らせることもできれば、Client HelloのRandom Bytesに特殊な値を設定することで、リバースのSSL/TLSネゴシエーションが可能であることを知らせることもできる。
【0076】
同様に、サーバがクライアントに対して行う、リバースのSSL/TLSネゴシエーションの利用要求方法も様々であり、1つの方法に限定されるものではない。
【0077】
例えば、Server Helloの拡張データ(extra data)に特殊なコマンドを設定することで、それを要求することもできれば、Server HelloのRandom Bytesに特殊な値を設定することで、それを要求することもできる。
【0078】
なお、クライアントがリバースのSSL/TLSネゴシエーションが可能であることを知らせなくても、サーバはクライアントに対して、リバースのSSL/TLSネゴシエーションの利用を強制的に要求してもよい。
【0079】
なお、常にリバースのSSL/TLSネゴシエーションを行うのであれば、クライアントが、リバースのSSL/TLSネゴシエーション利用が可能であることを知らせることも、サーバが、リバースのSSL/TLSネゴシエーションの利用を要求することも不要である。
【0080】
しかし上述ように、クライアントが、リバースのSSL/TLSネゴシエーション利用が可能であることを知らせ、サーバが、リバースのSSL/TLSネゴシエーションの利用を要求するようにすれば、サーバは、通常のSSL/TLSネゴシエーション、及び、リバースのSSL/TLSネゴシエーションの両方を利用できる上、容易に切り替えられるため好ましい。
【0081】
本実施の形態では、最初のバイトが0xFFである、つまりプライベートな暗号スイートをClient Helloに設定することで、クライアントがサーバに対して、リバースのSSL/TLSネゴシエーションが可能であることを知らせるものとする。このように、暗号スイートの提示で、リバースのSSL/TLSネゴシエーションが可能であることを知らせる方法は、上述の方法に比べ、確実に伝達されるのでよい。
【0082】
なお、このプライベートな暗号スイートは、どのように設定してもよい。本実施の形態では以下の暗号スイートによって、クライアントがリバースのSSL/TLSネゴシエーションが可能であることを知らせるものとする。
TLS_NULL_WITH_NULL_NULL ={ 0xFF,0x00 }
なおこれは、{ 0x00,0x00 }とは異なる暗号スイートである。プライベートな暗号スイートの代りに、{ 0x00,0x00 }の暗号スイートで、クライアントがサーバに対して、リバースのSSL/TLSネゴシエーションが可能であることを知らせることも可能であるが、SSL/TLS暗号通信の仕様から外れるので好ましくない。
【0083】
ここでClient Helloには、このプライベートな暗号スイートのみを設定するとしてもよい。しかし、サーバがリバースのSSL/TLSネゴシエーションを実行できない場合や、サーバがリバースのSSL/TLSネゴシエーションを実行するか否かを動的に判断する場合もある。このため、このClient Helloには、このプライベートな暗号スイートだけでなく、このクライアントで使用可能な他の暗号スイートも合わせて指定するのが好ましい。こうすれば、サーバの判断によって、通常のSSL/TLSネゴシエーションも実行できるようになる。
【0084】
本実施の形態では図1に示すように、複数の暗号スイートを指定したものとし、例えば以下の暗号スイート等である。
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_AES_128_CBC_SHA
・・・
TLS_NULL_WITH_NULL_NULL = [ 0xFF,0x00 ]
(図1−(S2))サーバはこのClient Helloを受信し、処理する。なお、サーバはプライベートな暗号スイートが指定されているのを見て、クライアントがリバースのSSL/TLSネゴシエーションが可能であること知る。
【0085】
(図1−(S3))サーバはServer Hello/Server Certificate/Server Hello Doneを生成し、クライアントに対して、このServer Hello/Server Certificate/Server Hello Doneを送信する。ここでServer Helloの暗号スイートとしては、上述のプライベートな暗号スイートを指定する。これによって、サーバはクライアントに対して、リバースのSSL/TLSネゴシエーションを実行することを要求する。
【0086】
なおサーバは、現在のCPU使用率が大きくなければ、通常のSSL/TLSネゴシエーションを選択し、実行してもよい。この場合、サーバはプライベートな暗号スイート以外の暗号スイートを選択する。CPUは演算処理を行う演算部に相当する。
【0087】
ここではサーバのCPU使用率が大きく、サーバは図1のように、プライベートな暗号スイートを指定したものとする。
【0088】
(図1−(S4))クライアントはこのServer Hello/Server Certificate/Server Hello Doneを受信し、処理する。なお、クライアントはプライベートな暗号スイートが指定されたのを見て、リバースのSSL/TLSネゴシエーションを実行することを理解する。
【0089】
仮にプライベートな暗号スイートが指定されていなければ、この後、クライアントは通常のSSL/TLSネゴシエーションを実行する。
【0090】
(図1−(S5))クライアントはClient Key Exchange/Change Cipher Spec/Finishedを生成する。なお、Client Key ExchangeとFinishedのデータ部(MACを含む)は、サーバ証明書に記述されている公開鍵を用いて、正しく計算し設定しても構わないが、公開鍵暗号の処理を省けばパフォーマンスが向上するので、ダミーデータとするのがよい。このダミーデータは、乱数、決められた固定値のどちらでも構わない。
【0091】
次にクライアントはサーバに対して、このClient Key Exchange/Change Cipher Spec/Finishedを送信する。
【0092】
(図1−(S6))サーバはClient Key Exchange/Change Cipher Spec/Finishedを受信する。なお、サーバはClient Key Exchange/Finishedのデータ部は処理しない。つまり、秘密鍵による公開鍵暗号の処理は行わない。また、Change Cipher Specも処理しなくてよい。
【0093】
(図1−(S7))サーバはChange Cipher Spec/Finishedを生成する。なお、Finishedのデータ部(MACを含む)は、ダミーデータを設定する。このダミーデータは、乱数、決められた固定値のどちらでも構わない。次にサーバは、クライアントに対して、このChange Cipher Spec/Finishedを送信する。
【0094】
(図1−(S8))クライアントはChange Cipher Spec/Finishedを受信する。なお、クライアントはFinishedのデータ部は処理しない。また、Change Cipher Specも処理しなくてよい。
【0095】
この一連のSSL/TLSネゴシエーションでは、サーバは秘密鍵による公開鍵暗号の処理を行わないので、CPU負荷は非常に小さい。しかし、このSSL/TLSネゴシエーションはダミーのSSL/TLSネゴシエーションなので、正しい共通鍵の交換はできない。
【0096】
このダミーのSSL/TLSネゴシエーションを行う最大の目的は、クライアント・サーバ間でリバースのSSL/TLSネゴシエーションを利用するか否かを決定する等、システムの負荷分散を図る決定を行うことにある。
【0097】
また、このダミーのSSL/TLSネゴシエーションには、ファイヤーウォール等の通信制御機器に対し、通常のSSL/TLSネゴシエーションに見せかけ、これ以降の通信を遮断させない目的もある。ネットワーク上で送受信されるデータは、第3者から見れば、SSL/TLS暗号通信の仕様に従っているように見えるため、通信が遮断されることはない。
【0098】
(図1−(S9))クライアントがClient Hello Requestを生成し、サーバに対して、このClient Hello Requestを送信する。この時点から、クライアントは、「SSL/TLSネゴシエーションにおけるサーバ」の役割を果たすようになる。但し、説明を複雑にしないため、これ以降もクライアントはクライアントと呼称する。
【0099】
(図1−(S10))サーバはClient Hello Requestを受信する。この時点からサーバは「SSL/TLSネゴシエーションにおけるクライアント」の役割を果たすようになる。但し、説明を複雑にしないため、これ以降もサーバはサーバと呼称する。
【0100】
(図1−(S11))サーバは、Client Hello Requestを受けて、Client Helloを生成し、クライアントに対して、このClient Helloを送信する。
【0101】
なお、8以降から11のステップでTCPポートのクローズは行わない。つまり、ダミーのSSL/TLSネゴシエーションと同じソケットを引き続き利用する。
【0102】
また、ダミーのSSL/TLSネゴシエーションでは正しくセッションを確立していないので、正しいマスターシークレット(master secret)は生成されない。そのため、ダミーのSSL/TLSネゴシエーションでサーバが指定したセッションIDは有効になっていない。従って、これ以降のSSL/TLSネゴシエーションは、既存セッションの再開のネゴシエーションではなく、新規セッションを確立するネゴシエーションとなる。
【0103】
サーバが、このClient HelloのセッションIDに、ダミーのSSL/TLSネゴシエーションでサーバが指定したセッションIDを設定することは構わないが、クライアントは既存セッションの再開のネゴシエーションにならないようにしなければならない。同じくクライアントが、Server HelloでそのセッションIDを指定した場合に、サーバも同様に、既存セッションの再開のネゴシエーションにならないようにしなければならない。
【0104】
ここでは、SSL/TLS暗号通信の仕様に従って、このClient Helloのsession_id_lengthは0とするのが望ましい。また、このClient Helloの応答であるServer Helloで指定するセッションIDは、ダミーのSSL/TLSネゴシエーションでサーバが指定したセッションIDとは別の値にするのが望ましい。
【0105】
なお、Client Hello Requestの送受信は割愛して、ダミーのSSL/TLSネゴシエーション後、直ちにサーバがClient Helloを生成し、クライアントに対して、このClient Helloを送信するとしてもよい。
【0106】
なお、ダミーのSSL/TLSネゴシエーションからステップ18が終了するまでに、クライアント、若しくはサーバがデータ送信をした場合には、受信側は、このデータを破棄し、通信を遮断するのが、中間者攻撃を防御する上で望ましい。
【0107】
(図1−(S12))クライアントはこのClient Helloを受信し、処理する。
【0108】
(図1−(S13))クライアントはServer Hello/Server Certificate/Server Hello Doneを生成し、サーバに対して、このServer Hello/Server Certificate/Server Hello Doneを送信する。
【0109】
(図1−(S14))サーバはこのServer Hello/Server Certificate/Server Hello Doneを受信し、処理する。
【0110】
(図1−(S15))サーバはClient Key Exchange/Change Cipher Spec/Finishedを生成し、クライアントに対して、このClient Key Exchange/Change Cipher Spec/Finishedを送信する。
【0111】
なおサーバは、SSL/TLS暗号通信の仕様の通り、この時点で正しい共通鍵(MAC鍵を含む)を生成できる。従って、Finishedのデータ部(MACを含む)は共通鍵で正しく暗号化される。
【0112】
なおここで、サーバは、Client Key Exchangeを生成するに当たって、公開鍵による公開鍵暗号の処理を行うが、秘密鍵による公開鍵暗号の処理に比べれば、一桁以上、演算処理が少なく、CPUにかかる負荷はとても小さい。
【0113】
(図1−(S16))クライアントはClient Key Exchange/Change Cipher Spec/Finishedを受信する。ここでクライアントは、Client Key Exchangeを処理するために、秘密鍵による公開鍵暗号の復号処理を行う。
【0114】
その処理の結果、SSL/TLS暗号通信の仕様の通り、クライアントはこの時点で正しい共通鍵(MAC鍵を含む)を生成できる。従って、Finishedのデータ部(MACを含む)は共通鍵で正しく復号化される。
【0115】
(図1−(S17))クライアントはChange Cipher Spec/Finishedを生成し、サーバに対して、このChange Cipher Spec/Finishedを送信する。なお、Finishedのデータ部(MACを含む)は共通鍵で正しく暗号化される。
【0116】
(図1−(S18))サーバはChange Cipher Spec/Finishedを受信し、処理する。なお、Finishedのデータ部(MACを含む)は共通鍵で正しく復号化され、処理される。
【0117】
これ以降、クライアント・サーバ間では正しくSSL/TLS暗号通信の共通鍵暗号が行われる。
【0118】
なお、SSL/TLS暗号通信の仕様に従えば、(S9)から(S18)のステップでやりとりされる各メッセージのデータ部はすべて暗号化しなければならないが、(S9)から(S18)のステップでやりとりされる各メッセージのデータ部はFinishedを除けば、実際は暗号化しなくてもよい。
【0119】
次に図6を用いて、図1とは異なる例について説明する。図6は、本発明の実施の形態におけるSSL/TLS暗号通信の第2例を示すシーケンス図である。なお、図6において、第1のハンドシェイク処理は(S1)〜(S8)に相当し、第2のハンドシェイク処理は(S9)〜(S18)に相当する。
【0120】
図6に示したように、難読化を目的に、Finishedを除く各メッセージのデータ部にダミーのMACを付与し、共通鍵暗号による暗号化された再接続ネゴシエーションが行われているように見せかけてもよい。更にSSL/TLSネゴシエーションで送受信した乱数や固定値を共通鍵として、データ部(ダミーのMACを含む)を暗号化(スクランブル化)しても構わない。
【0121】
このような難読化は、ファイヤーウォールが厳密に各メッセージのデータ部をチェックしている場合に有効な手法となる。
【0122】
なおあえて共通鍵を生成するなら、クライアントが、pre_master_secretを乱数で生成し、このpre_master_secretを非暗号のままEncryptedPreMasterSecretとして扱い、サーバもEncryptedPreMasterSecretをそのままpre_master_secretとして扱い、クライアントとサーバで共通鍵を生成するとするのが好ましい。
【0123】
ここではプライベートな暗号スイートを
TLS_NULL_WITH_NULL_NULL ={ 0xFF,0x00 }
としたが、これを例えば図6のように、
TLS_NULL_WITH_AES_128_CBC_NULL
={ 0xFF,0x00 }
に変え、暗号・復号化を行うとすれば、SSL/TLS暗号通信の仕様に最も良く合い、SSL/TLS暗号通信を実現するSSL/TLS暗号モジュールの改変が少なくて済む。
【0124】
なお、ファイヤーウォールが厳密にSSL/TLSの再ネゴシエーションで送受信されるhandshakeのパケット数をカウントしている場合には、ダミーのhandshakeのパケットを送受信し、何度かSSL/TLSネゴシエーションが実行されているように見せかけてもよい。
【0125】
また、(S9)から(S18)のステップで送受信されるすべてのメッセージ(Change Cipher Specを含む)を、図6のように、暗号化されたデータ通信であるように見せかけるのもよい方法である。つまり、(S9)から(S18)のステップでやりとりされる各メッセージを、データ通信、つまりapplication_dataのデータ部として送受信する。このようにすれば、ファイヤーウォールが厳密にSSL/TLSの再ネゴシエーションで送受信されるhandshakeのパケット数をカウントしていたとしても、チェックにかからなくなる。
【0126】
しかし、通常、SSL/TLS暗号通信は、アプリケーションプログラムとは分離された、SSL/TLS暗号通信モジュールによって実現されるので、アプリケーションプログラムが利用するデータ通信を使って、SSL/TLS暗号通信モジュールがSSL/TLSネゴシエーションを行うのは良くない。このようなつくりにすると、SSL/TLS暗号通信モジュールは、アプリケーションプログラムが利用するデータ通信の中身を常にチェックしなければならず、パフォーマンスを落としてしまう。
【0127】
但しこのケースでは、ダミーのSSL/TLSネゴシエーション後、直ちに、9から18のSSL/TLSネゴシエーションが行われるので、データ通信を使ってSSL/TLSネゴシエーションを行ったとしても、パフォーマンスを落とすことはない。SSL/TLS暗号通信モジュールがデータ通信の中身をチェックするのは、ダミーのSSL/TLSネゴシエーション開始後から、9から18のSSL/TLSネゴシエーション終了後までで、このSSL/TLSネゴシエーション終了後は、データ通信の中身をチェックすることはない。
【0128】
なお、データ通信でSSL/TLSネゴシエーションを行うのであれば、独自の方法で共通鍵交換を行ってもよいように思われるが、これは危険である。ダミーのSSL/TLSネゴシエーションでは共通鍵の交換は行っていないので、データ通信であっても、9から18のSSL/TLSネゴシエーションは基本的には非暗号(スクランブル化していたとしても第3者には中身を解析される)である。従って、ここで行う共通鍵の交換には、各種攻撃に耐性や知見のある暗号通信仕様に従うのがよい。クライアントとサーバがSSL暗号通信に対応していることを考慮すれば、ここで行う共通鍵の交換には、図1のように、SSL/TLSネゴシエーションを利用することが望ましい。
【0129】
なお、このリバースのSSL/TLSネゴシエーション終了後、再接続する場合には、クライアントは「SSL/TLSネゴシエーションにおけるクライアント」の役割に、サーバは「SSL/TLSネゴシエーションにおけるサーバ」の役割に戻し、通常のSSL/TLS暗号通信の仕様に従うのが、複雑にならずによい。
【0130】
もし新規IDで接続し、かつクライアントで秘密鍵による公開鍵暗号を行いたいときは、ステップ(S1)に戻ればよい。
【0131】
このように、図1のようにダミーのSSL/TLSネゴシエーションを行えば、ファイヤーウォール等の通信を制御する機器がクライアント・サーバ間に介在していたとしても、通信が遮断されることはない。
【0132】
また、図1のようにリバースのSSL/TLSネゴシエーションを行えば、サーバは秘密鍵による公開鍵暗号処理を行わなくても済むので、CPU負荷を小さくできる。従って、サーバ費用を低減できる効果がある。サーバが相手にするクライアント台数が増せば増すほど、この効果は大きくなる。このように本発明は、NATトラバーサル技術とは異なるものである。
【0133】
しかもサーバは、通常のSSL/TLSネゴシエーションを行うか、リバースのSSL/TLSネゴシエーションを行うかを判断し実行できるので、サーバは的確な負荷分散(ロードバランス)を行うことが可能である。サーバの負荷が低い時は、通常のSSL/TLSネゴシエーションを行い(この場合、ダミーのSSL/TLSネゴシエーションが本当のSSL/TLSネゴシエーションとなる)、サーバの負荷が高い時は、リバースのSSL/TLSネゴシエーションを行うことで、システム全体の負荷を最適化することが可能である。つまり、システムの費用対効果を最大化できる。
【0134】
従って、ダミーのSSL/TLSネゴシエーションは、NATトラバーサルだけでなく、システムの負荷分散(ロードバランス)を行う上でもとても重要である。
【0135】
特にインターネット上に公開されるサーバを運用する際にこの効果は非常に高い。一般的に公開サーバに対しては、頻繁なDOS攻撃がかけられる。SSL/TLS暗号通信をサポートする公開サーバの場合、無駄な秘密鍵による公開暗号処理を頻繁に実行されると、それに支払うコストは莫大なものになる。
【0136】
しかしリバースのSSL/TLSネゴシエーションをサポートするクライアントのみを公開サーバへの接続対象とするような工夫を行えば、コストをかけずにCPU使用率を一定に保て、サービスに支障をきたさなくなる。
【0137】
その上、この一連のSSL/TLSネゴシエーションは、SSL/TLS暗号通信の仕様から外れる部分が少なく、SSL/TLS暗号通信に対する各種攻撃に対する知見を利用でき安全である。
【0138】
また、SSL/TLS暗号通信の仕様から外れる部分が少ないので、SSL/TLS暗号通信を実現するSSL/TLS暗号モジュールのつくりを単純化でき、開発費を削減できる。
【0139】
図2は、図1の機能ブロック図の一例である。また図3は、図2のクライアント1のフローチャートを、図4は図2のサーバ2のフローチャートを示す。次にこの図2、図3、図4を用いて説明を行う。
【0140】
なお、図3において、第1のハンドシェイク処理は(S1)〜(S10)に相当し、第2のハンドシェイク処理は(S11)〜(S26)に相当する。図4において、第1のハンドシェイク処理は(S1)〜(S11)に相当し、第2のハンドシェイク処理は(S13)〜(S26)に相当する。
【0141】
クライアント1は、ネットワークを介してサーバ2とSSL/TLS暗号通信を行う。
【0142】
(図3−(S1))はじめに、SSLネゴシエーション(クライアント)部400がClient Helloメッセージを生成し、これをデータ送信部200に送る。
【0143】
なお、このClient Helloメッセージで指定した暗号スイートは、以下のようなものだったとして説明を行う。
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_AES_128_CBC_SHA
・・・
TLS_NULL_WITH_NULL_NULL = [ 0xFF,0x00 ]
ここで、TLS_NULL_WITH_NULL_NULLは、プライベートな暗号スイートであり、[ 0x00,0x00 ]とは異なる暗号スイートである。このプライベートな暗号スイートは、クライアントがサーバに対して、クライアントがリバースのSSL/TLSネゴシエーションを実行可能なことを知らせるものである。
【0144】
なお、クライアント1の処理能力検知(クライアント)部(図示せず)が検知した自らのCPUの処理能力情報(CPUの最大処理能力情報)をSSLネゴシエーション(クライアント)部400に通知し、SSLネゴシエーション(クライアント)部400はこの処理能力情報をClient Helloメッセージに含ませて、サーバに対して知らせるものとする。そのような方法は様々であるが、例えば、Random bytesやセッションIDの一部に、その処理能力のレベル値を設定するとしてもよい。ここでは、Random bytesの一部に、処理能力情報(処理能力のレベル値)を設定したものとする。なお、最大処理能力の情報は予めフラグ(メモリ)等に格納されておいてもよい。
【0145】
なお、クライアント1は処理(使用)状況検知(クライアント)部(図示せず)をさらに有し、処理(使用)状況検知(クライアント)部はCPU使用率情報を検知し、この情報をSSLネゴシエーション(クライアント)部400に通知する。SSLネゴシエーション(クライアント)部400はCPU使用率情報に基づいて、公開鍵暗号における秘密鍵による復号処理を行うことが可能かどうかをサーバ2に通知する。例えば、CPU使用率が所定値以上である場合、SSLネゴシエーション(クライアント)部400はプライベートな暗号スイートを含む暗号スイートリストをサーバ2に通知し、CPU使用率が所定値以下である場合、SSLネゴシエーション(クライアント)部400はプライベートな暗号スイートを含まずに暗号スイートリストをサーバ2に通知する。これにより、公開鍵暗号における秘密鍵による復号処理によってクライアント1の他の処理が破綻することを抑制することができる。
【0146】
以上より(図3−(S1))では、SSLネゴシエーション(クライアント)部400は、プライベートな暗号スイートを含む暗号スイートリストの情報とCPUの処理能力情報の情報とを含むCliant Helloを作成する。なお、Cliant HelloにクライアントのCPU使用率の情報を含ませてもよい。
【0147】
(図3−(S2))データ送信部200は、ネットワーク制御装置100を介して、サーバ2に対して、このClient Helloメッセージを送信する。
【0148】
(図3−(S3))この後、クライアント1はサーバ2からのメッセージ受信待ち状態になる。
【0149】
(図4−(S1))サーバ2は、クライアント1からのメッセージ受信待ち状態で始まる。データ受信部310は、クライアント1が送信したClient Helloメッセージを、ネットワーク制御装置110を介して受信する。データ受信部310は、このClient Helloメッセージを、Client Helloメッセージを解釈するSSLネゴシエーション(サーバ)部510に送る。
【0150】
(図4−(S2))SSLネゴシエーション(サーバ)部510は、Client Helloメッセージを処理する。
【0151】
(図4−(S3))この際SSLネゴシエーション(サーバ)部510は、Client Helloメッセージに、リバースのSSL/TLSネゴシエーションの合図であるTLS_NULL_WITH_NULL_NULLの暗号スイートが指定されているかをチェックする。
【0152】
TLS_NULL_WITH_NULL_NULLが指定されていなければ、リバースのSSL/TLSネゴシエーションは実行できないので、通常のSSL/TLSネゴシエーションを行う。すなわち、プライベートな暗号スイート以外の暗号スイートを選択する。
【0153】
なおサーバが、リバースのSSL/TLSネゴシエーション可能なクライントしか相手にしない場合には、リバースのSSL/TLSネゴシエーションができないアクセスはDOS攻撃なので、ここで処理を中断するのが望ましい。これにより、安全性を高めることができる。
【0154】
ここでは、図3−(S1)で説明したように、TLS_NULL_WITH_NULL_NULLの暗号スイートが指定されているので、SSLネゴシエーション(サーバ)部510は、クライアントがリバースのSSL/TLSネゴシエーションが可能であると判断する。
【0155】
(図4−(S4))サーバ2は処理(使用)状況検知(サーバ)部(図示せず)をさらに有し、処置(使用)状況検知(サーバ)部はCPU使用率情報を検知し、この情報をSSLネゴシエーション(サーバ)部510に通知し、SSLネゴシエーション(サーバ)部510はサーバ2のCPU使用率情報をチェックする。サーバ2のCPU使用率が小さければ(例えば、所定値(閾値)よりも低ければ)、サーバ2で秘密鍵による公開鍵暗号処理を実行しても、サーバ2に支障が出ないので、通常のSSL/TLSネゴシエーションを行う。なおこの判断はせずに、常にリバースのSSL/TLSネゴシエーションを行うとすることも可能である。
【0156】
なお(図4−(S4))で、SSLネゴシエーション(サーバ)部510は、受信したCliant Helloに含まれるクライアント1のSSLネゴシエーション(サーバ)部510は、Client HelloメッセージのRandom bytesの一部に示されているクライアント1の処理能力情報(処理能力のレベル値)をチェックし、一定のレベル値(図2の処理能力の閾値)以上である場合のみ、リバースのSSL/TLSネゴシエーションを行うとすれば、システム全体のパフォーマンスを最適にできる。なお、どのレベルでリバースのSSL/TLSネゴシエーションを実行するかはサーバの処理能力に依存する。
【0157】
本実施の形態ではサーバのCPU使用率、及び、クライアントの処理能力が高く、SSLネゴシエーション(サーバ)部510がリバースのSSL/TLSネゴシエーションを実行すると判断したとして、以下、説明を行う。
【0158】
(図4−(S5))SSLネゴシエーション(サーバ)部510は、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークを付ける。
【0159】
(図4−(S6))SSLネゴシエーション(サーバ)部510は、Server Hello/Server Certificate/Server Hello Doneメッセージを生成し、これをデータ送信部210に送る。この際、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークが付いているので、暗号スイートしては、リバースのSSL/TLSネゴシエーションの合図であるTLS_NULL_WITH_NULL_NULLを指定する。
【0160】
なお暗号スイート以外は、Server Hello、及び、Server Certificateメッセージのデータ部には、正しい値を設定しなくてもよい。乱数や固定値等ダミーデータでも構わない。これにより、サーバ2は不必要な処理を省略できる。
【0161】
なお、SSLネゴシエーション(サーバ)部510は、これまでのステップに関係なく、リバースのSSL/TLSネゴシエーションを実行するために、無条件に、TLS_NULL_WITH_NULL_NULLを指定することも可能である。
【0162】
(図4−(S7))データ送信部210は、ネットワーク制御装置110を介して、クライアント1に対して、Server Hello/Server Certificate/Server Hello Doneメッセージを送信する。なお、サーバ2の処理を簡略化するために、ここで公開鍵をクライアント1に送らなくてもよい。
【0163】
(図4−(S8))その後、サーバ2はクライアント1からのメッセージ受信待ち状態になる。
【0164】
(図3−(S3))クライアント1のデータ受信部300は、サーバ2が送信したServer Hello/Server Certificate/Server Hello Doneメッセージを、ネットワーク制御装置100を介して受信する。データ受信部300は、Server Hello/Server Certificate/Server Hello Doneメッセージを、Server Hello/Server Certificate/Server Hello Doneメッセージを処理するSSLネゴシエーション(クライアント)部400に送る。
【0165】
(図3−(S4))SSLネゴシエーション(クライアント)部400は、Server Helloで、リバースのSSL/TLSネゴシエーションの合図であるTLS_NULL_WITH_NULL_NULLが指定されているかをチェックする。TLS_NULL_WITH_NULL_NULLが指定されていなければ、通常のSSL/TLSネゴシエーションを実行する。
【0166】
(図3−(S5))TLS_NULL_WITH_NULL_NULLが指定されている場合、SSLネゴシエーション(クライアント)部400は、リバースのSSL/TLSネゴシエーションを実行するものと判断し、SSLネゴシエーション(クライアント)部400が、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークを付ける。
【0167】
(図3−(S6))SSLネゴシエーション(クライアント)部400は、Server Hello/Server Certificate/Server Hello Doneメッセージを処理する。
【0168】
なお、SSLネゴシエーション(クライアント)部400は、フラグ(メモリ)を見て、リバースのSSL/TLSネゴシエーションを実行するマークがあれば、実際は、このメッセージは、何も処理せずに廃棄しても構わない。これにより、クライアント1は不必要な処理を省略できる。
【0169】
(図3−(S7))SSLネゴシエーション(クライアント)部400は、Client Key Exchange/Change Cipher Spec/Finishedメッセージを生成し、これをデータ送信部200に送る。
【0170】
なお、SSLネゴシエーション(クライアント)部400は、フラグ(メモリ)を見て、リバースのSSL/TLSネゴシエーションを実行するマークがあれば、このClient Key Exchangeメッセージ、及び、Finishedメッセージのデータ部(MACを含む)には、正しい値を設定しなくてもよい。乱数や固定値等ダミーデータでも構わない。
【0171】
(図3−(S8))データ送信部200は、ネットワーク制御装置100を介して、サーバ2に対して、このClient Key Exchange/Change Cipher Spec/Finishedメッセージを送信する。
【0172】
(図3−(S9))この後、クライアント1はサーバ2からのメッセージ受信待ち状態になる。
【0173】
(図4−(S8))データ受信部310は、クライアント1が送信したClient Key Exchange/Change Cipher Spec/Finishedメッセージを、ネットワーク制御装置110を介して受信する。データ受信部310は、このClient Key Exchange/Change Cipher Spec/Finishedメッセージを、Client Key Exchange/Change Cipher Spec/Finishedメッセージを処理するSSLネゴシエーション(サーバ)部510に送る。
【0174】
(図4−(S9))SSLネゴシエーション(サーバ)部510は、Client Key Exchange/Change Cipher Spec/Finishedメッセージを処理する。但し、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークが付いているので、Client Key ExchangeのEncryptedPreMasterSecretは少なくとも処理しない。つまり秘密鍵による公開鍵暗号処理は実施しない。また、Finishedメッセージのデータチェックも行わない。その他のデータも処理せずに、廃棄してよい。これにより、クライアント1は不必要な処理を省略できる。
【0175】
(図4−(S10))SSLネゴシエーション(サーバ)部510は、Change Cipher Spec/Finishedメッセージを生成し、これをデータ送信部210に送る。但し、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークが付いているので、Finishedメッセージのデータ部(MACを含む)には、乱数や固定値等ダミーデータを設定する。
【0176】
なお、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークが付いているので、SSLネゴシエーション(サーバ)部510は、公開鍵暗号における秘密鍵による復号処理を行う共通鍵暗号・復号部710ではなく、SSLネゴシエーション(クライアント)部410を呼び出す。そしてSSLネゴシエーション(サーバ)部510は、これ以降のメッセージの送受信をSSLネゴシエーション(クライアント)部410に任せる。
【0177】
(図4−(S11))データ送信部210は、ネットワーク制御装置110を介して、クライアント1に対して、Change Cipher Spec/Finishedメッセージを送信する。
【0178】
(図4−(S12))その後、サーバ2はクライアント1からのメッセージ受信待ち状態になる。なおここでメッセージ受信待ちになるのは、SSLネゴシエーション(クライアント)部410である。
【0179】
(図3−(S9))クライアント1のデータ受信部300は、サーバ2が送信したChange Cipher Spec/Finishedメッセージを、ネットワーク制御装置100を介して受信する。データ受信部300は、Change Cipher Spec/Finishedメッセージを、Change Cipher Spec/Finishedメッセージを処理するSSLネゴシエーション(クライアント)部400に送る。
【0180】
(図3−(S10))SSLネゴシエーション(クライアント)部400は、Change Cipher Spec/Finishedメッセージを処理する。
【0181】
但し、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークが付いているので、少なくともFinishedメッセージのデータチェックは行わない。その他のデータも処理せずに、廃棄してよい。これにより、クライアント1は不必要な処理を省略できる。
【0182】
以上のように、ここまでのSSL/TLSネゴシエーションは、ダミーのSSL/TLSネゴシエーションとなる。すなわち、ファイヤーウォールに引っかからないために形式的にSSLネゴシエーションの手順(プロトコル)通りに処理が行われたが、鍵交換等の通常のSSLネゴシエーションで行われる処理は行われていない。
【0183】
なお、ダミーのSSL/TLSネゴシエーション終了後は、次のSSL/TLSネゴシエーションが終了するまでは、サーバ2は、中間者攻撃を防御するためデータ受信をしない。サーバ2はデータ受信した場合には、このデータを破棄し、通信を遮断する。これにより、安全性を高めることができる。
【0184】
次に、SSLネゴシエーション(クライアント)部400は、フラグ(メモリ)に、リバースのSSL/TLSネゴシエーションを実行するマークが付けられているので、共通鍵暗号・復号部700、若しくは通信データ生成部800ではなく、SSLネゴシエーション(サーバ)部500を呼び出す。そして、SSLネゴシエーション(クライアント)部400はこれ以降のメッセージの送受信をSSLネゴシエーション(サーバ)部500に任せる。
【0185】
なお、図2では、フラグ(メモリ)を利用して、リバースのSSL/TLSネゴシエーションを実行するか否かを示すようにしているが、この実現方法はこれに限られるものではなく、様々な方法が可能である。
【0186】
(図3−(S11))SSLネゴシエーション(サーバ)部500は、Client Hello requestメッセージを生成し、これをデータ送信部200に送る。
【0187】
(図3−(S12))データ送信部200は、ネットワーク制御装置100を介して、サーバ2に対して、このClient Hello requestメッセージを送信する。
【0188】
(図3−(S13))この後、クライアント1はサーバ2からのメッセージ受信待ち状態になる。なおここでメッセージ受信待ちになるのは、SSLネゴシエーション(サーバ)部500である。
【0189】
(図4−(S12))データ受信部310は、クライアント1が送信したClient Hello requestメッセージを、ネットワーク制御装置110を介して受信する。データ受信部310は、このClient Hello requestメッセージを、Client Hello requestメッセージを処理するSSLネゴシエーション(クライアント)部410に送る。
【0190】
(図4−(S13))SSLネゴシエーション(クライアント)部410は、Client Hello requestメッセージを処理する。具体的には、Client Helloメッセージの生成を開始する。
【0191】
(図4−(S14))SSLネゴシエーション(クライアント)部410がClient Helloメッセージを生成し、これをデータ送信部210に送る。
【0192】
なお、このClient Helloメッセージでは、TLS_NULL_WITH_NULL_NULLの暗号スイートは指定しないものとする。
【0193】
(図4−(S15))データ送信部210は、ネットワーク制御装置110を介して、クライアント1に対して、このClient Helloメッセージを送信する。
【0194】
(図4−(S16))この後、サーバ2はクライアント1からのメッセージ受信待ち状態になる。
【0195】
(図3−(S13))データ受信部300は、サーバ2が送信したClient Helloメッセージを、ネットワーク制御装置100を介して受信する。データ受信部300は、このClient Helloメッセージを、Client Helloメッセージを処理するSSLネゴシエーション(サーバ)部500に送る。
【0196】
(図3−(S14))SSLネゴシエーション(サーバ)部500は、Client Helloメッセージを処理する。
【0197】
(図3−(S15))SSLネゴシエーション(サーバ)部500は、Server Hello/Server Certificate/Server Hello Doneメッセージを生成し、これをデータ送信部200に送る。なお、暗号スイートしては、リバースのSSL/TLSネゴシエーションの合図であるTLS_NULL_WITH_NULL_NULLを指定しないものとする。
【0198】
なお、Server Certificateは、クライアント1が保持する公開鍵Nと公開鍵Eの情報を含む。
【0199】
(図3−(S16))データ送信部200は、ネットワーク制御装置100を介して、サーバ2に対して、Server Hello/Server Certificate/Server Hello Doneメッセージを送信する。
【0200】
(図3−(S17))その後、クライアント1はサーバ2からのメッセージ受信待ち状態になる。
【0201】
(図4−(S16))サーバ2のデータ受信部310は、クライアント1が送信したServer Hello/Server Certificate/Server Hello Doneメッセージを、ネットワーク制御装置110を介して受信する。データ受信部310は、Server Hello/Server Certificate/Server Hello Doneメッセージを、Server Hello/Server Certificate/Server Hello Doneメッセージを処理するSSLネゴシエーション(クライアント)部410に送る。
【0202】
(図4−(S17))SSLネゴシエーション(クライアント)部410は、Server Hello/Server Certificate/Server Hello Doneメッセージを処理する。
【0203】
なお、SSLネゴシエーション(クライアント)部410はServer Certificateから、クライアント1が保持する公開鍵Nと公開鍵Eの情報を読み出す。
【0204】
(図4−(S18))SSLネゴシエーション(クライアント)部410は、乱数生成部810にプリマスターシークレット(premaster secret)となる乱数を生成させる。
【0205】
(図4−(S19))共通鍵生成部760は、乱数から共通鍵暗号方式で用いる共通鍵(MAC鍵を含む)を生成する。
【0206】
(図4−(S20))公開鍵暗号部610は、公開鍵Nと公開鍵Eを用いて乱数を暗号化し、EncryptedPreMasterSecretを生成する。
【0207】
(図4−(S21))SSLネゴシエーション(クライアント)部410は、Client Key Exchange/Change Cipher Spec/Finishedメッセージを生成し、これをデータ送信部210に送る。なおこのFinishedメッセージのデータ部(MACを含む)は共通鍵で暗号化される。
【0208】
(図4−(S22))データ送信部210は、ネットワーク制御装置110を介して、クライアント1に対して、このClient Key Exchange/Change Cipher Spec/Finishedメッセージを送信する。
【0209】
(図4−(S23))この後、サーバ2はクライアント1からのメッセージ受信待ち状態になる。
【0210】
(図3−(S17))データ受信部300は、サーバ2が送信したClient Key Exchange/Change Cipher Spec/Finishedメッセージを、ネットワーク制御装置100を介して受信する。データ受信部300は、このClient Key Exchange/Change Cipher Spec/Finishedメッセージを、Client Key Exchange/Change Cipher Spec/Finishedメッセージを処理するSSLネゴシエーション(サーバ)部500に送る。
【0211】
(図3−(S18))SSLネゴシエーション(サーバ)部500は、Client Key Exchangeを処理する。なお、EncryptedPreMasterSecretは公開鍵復号部600に送る。
【0212】
(図3−(S19))公開鍵復号部600は、クライアント1が保持する公開鍵Nと秘密鍵Dを用いて、EncryptedPreMasterSecretを復号化し、乱数を取得する。
【0213】
(図3−(S20))共通鍵生成部750は、乱数から共通鍵暗号方式で用いる共通鍵(MAC鍵を含む)を生成する。
【0214】
(図3−(S21))SSLネゴシエーション(サーバ)部500は、Change Cipher Spec/Finishedメッセージを処理する。なおこのFinishedメッセージのデータ部(MACを含む)は共通鍵で復号化され処理される。
【0215】
(図3−(S22))SSLネゴシエーション(サーバ)部500は、Change Cipher Spec/Finishedメッセージを生成し、これをデータ送信部200に送る。なおこのFinishedメッセージのデータ部(MACを含む)は共通鍵で暗号化される。
【0216】
(図3−(S23))データ送信部200は、ネットワーク制御装置100を介して、サーバ2に対して、このChange Cipher Spec/Finishedメッセージを送信する。
【0217】
(図3−(S24))SSLネゴシエーション(サーバ)部500は、通信データ生成部800を呼び出す。通信データ生成部800は通信データを生成する。
【0218】
(図3−(S25))共通鍵暗号・復号部700は、共通鍵を用いて、通信データを暗号化し、暗号データ(MACを含む)を生成する。そして、共通鍵暗号・復号部700はこの暗号データ(MACを含む)をデータ送信部200に送る。
【0219】
(図3−(S26))データ送信部200は、ネットワーク制御装置100を介して、サーバ2に対して、この暗号データ(MACを含む)を送信する。
【0220】
(図4−(S23))データ受信部310は、クライアント1が送信したChange Cipher Spec/Finishedメッセージを、ネットワーク制御装置110を介して受信する。データ受信部310は、このChange Cipher Spec/Finishedメッセージを、Change Cipher Spec/Finishedメッセージを解釈するSSLネゴシエーション(クライアント)部410に送る。
【0221】
(図4−(S24))SSLネゴシエーション(クライアント)部410は、Change Cipher Spec/Finishedメッセージを処理する。なおこのFinishedメッセージのデータ部(MACを含む)は共通鍵で復号化され処理される。
【0222】
(図4−(S25))この後、サーバ2はクライアント1からのデータ受信待ち状態になる。なおここでデータ受信待ちになるのは、共通鍵暗号・復号部710である。
【0223】
(図4−(S25))データ受信部310は、クライアント1が送信した暗号データ(MACを含む)を、ネットワーク制御装置110を介して受信する。データ受信部310は、この暗号データ(MACを含む)を、暗号データ(MACを含む)を処理する共通鍵暗号・復号部710に送る。
【0224】
(図4−(S26))共通鍵暗号・復号部710は、共通鍵を用いて、暗号データ(MACを含む)を復号化し、通信データを取得する。
【0225】
これ以降、クライアント・サーバ間では正しくSSL/TLS暗号通信の共通鍵暗号が行われる。
【0226】
なお、SSL/TLS暗号通信の仕様に従えば、ダミーのSSL/TLSネゴシエーション中のFinishedメッセージ処理から、各メッセージのデータ部はすべて暗号化しなければならないが、実際は暗号化しなくても問題ない。しかし、難読化を目的に、各メッセージのデータ部を、SSL/TLSネゴシエーションで送受信した乱数や固定値を共通鍵として、暗号化(スクランブル化)しても構わない。
【0227】
このような難読化は、ファイヤーウォールが厳密に各メッセージのデータ部をチェックしている場合に有効な手法となる。
【0228】
なお、ファイヤーウォールが厳密にSSL/TLSの再ネゴシエーションで送受信されるhandshakeのパケット数をカウントしている場合には、ダミーのhandshakeのパケットを送受信し、何度かSSL/TLSネゴシエーションが実行されているように見せかけてもよい。
【0229】
また、ダミーのSSL/TLSネゴシエーション以降の各メッセージ(Change Cipher Specを含む)を、暗号化されたデータ通信であるように見せかけてもよい。つまり、各メッセージを、データ通信、即ちapplication_dataのデータ部として送受信する。つまり、各メッセージ(Change Cipher Specを含む)に、application_dataヘッダとダミーのMACを付与する。
【0230】
また、ここで上述した図1〜4、6について補足の説明を行う。
【0231】
図示していないが、クライアント1が有する公開鍵復号部600をサーバ2も同様に有する。これにより、サーバ2も公開鍵暗号された信号を復号することができる。
【0232】
また、本実施の形態において、SSLネゴシエーション(サーバ)部500とSSLネゴシエーション(クライアント)部400とは他の通信装置(クライアント1)とハンドシェイクを行うサーバ2側の認証処理部に相当し、さらにこのサーバ2側の認証処理部は鍵復号化部である公開鍵復号部と鍵暗号化部である公開鍵暗号部610を含んでもよい。同様に、SSLネゴシエーション(サーバ)部510とSSLネゴシエーション(クライアント)部410とはクライアント1側の認証処理部に相当する。
【0233】
なお、第1の鍵とは、サーバ2(またはクライアント1)で生成される共通鍵のことであり、この共通鍵を生成するための乱数等も含む。第2の鍵とは、第1の鍵の暗号化する公開鍵である。
【0234】
なお、サーバ部2に処理能力検知(サーバ)部を設けてもよい。これにより、サーバ2はサーバ2の処理能力とクライアント1の処理能力とに基づいて(例えば、それぞれの処理能力を比較して)、リバースSSLを行うかどうかを決定することができる。
【0235】
なお、リバースSSLを行うかどうかの判断は、クライアント1が行っても、サーバが行ってもよい。クライアント1またはサーバ2は、サーバ2のCPU使用率、クライアント1のCPU使用率、サーバ2の最大処理能力、クライアント1の最大処理能力、等に基づいてリバースSSLを行うかどうかを決定すればよい。
【0236】
図5は、図2のハードウェア構成図の一例である。クライアント1は、プログラム処理を実行するCPU10、一時的な記憶メモリであるRAM20、書き換え不可の不揮発性メモリであるROM30とネットワークのデータ送受信を実行するMAC(Media Access Control)/PHY40で構成されている。一方、サーバ2は、プログラム処理を実行するCPU11、一時的な記憶メモリであるRAM21、書き換え不可の不揮発性メモリであるROM31とネットワークのデータ送受信を実行するMAC/PHY41で構成されている。また、クライアント1とサーバ2はMAC/PHY40とMAC/PHY41を介してネットワークで接続されている。
【0237】
はじめにクライアント1のハード構成に関して説明を行う。図3に示したクライアント1の各処理部は、CPU10、及びRAM20で実行される。
【0238】
共通鍵生成部750が生成した共通鍵、クライアントのCPUの使用率状況を示すCPU使用率情報、及び、リバースのSSL/TLSネゴシエーションを実行するか否かを示すフラグ(メモリ)は、RAM20に保存される。
【0239】
処理能力情報、公開鍵N、公開鍵E、秘密鍵Dは、ROM30に保存する。この内、処理能力情報、公開鍵N、及び、公開鍵EはRAM20に移動させて利用してもよいが、秘密鍵Dは耐タンパ装置の不揮発性メモリで利用するのが望ましい。
【0240】
MAC/PHY40は、ネットワーク通信を制御するハードウェアであり、ネットワーク制御装置100を実現するものである。
【0241】
次にサーバ2のハード構成に関して説明を行う。図3に示したサーバ2の各処理部は、CPU11、及びRAM21で実行される。
【0242】
共通鍵生成部760が生成した共通鍵、クライアント1から取得した公開鍵Nと公開鍵E、サーバのCPUの使用率状況を示すCPU使用率情報、及び、リバースのSSL/TLSネゴシエーションを実行するか否かを示すフラグ(メモリ)は、RAM21に保存される。
【0243】
処理能力の閾値の情報は、通常固定値なのでROM30に保存する。しかしサーバの負荷に応じて動的に閾値を変更させる等、RAM20に移動させて利用してもよい。
【0244】
MAC/PHY41は、ネットワーク通信を制御するハードウェアであり、ネットワーク制御装置110を実現するものである。
【産業上の利用可能性】
【0245】
本発明にかかるSSL/TLS暗号通信は、ファイヤーウォール等の通信機器との親和性が良く、しかもサーバがCPU使用率(負荷)に応じて、クライアントが、秘密鍵による公開鍵暗号(復号)処理を代行できるので、サーバ費用の低減を図れる等有用である。
【符号の説明】
【0246】
1 クライアント
2 サーバ
10 CPU(クライアント側)
11 CPU(サーバ側)
20 RAM(クライアント側)
21 RAM(サーバ側)
30 ROM(クライアント側)
31 ROM(サーバ側)
40 MAC/PHY(クライアント側)
41 MAC/PHY(サーバ側)
100 ネットワーク制御装置(クライアント側)
110 ネットワーク制御装置(サーバ側)
200 データ送信部(クライアント側)
210 データ送信部(サーバ側)
300 データ受信部(クライアント側)
310 データ受信部(サーバ側)
400 SSLネゴシエーション(クライアント)部(クライアント側)
410 SSLネゴシエーション(クライアント)部(サーバ側)
500 SSLネゴシエーション(サーバ)部(クライアント側)
510 SSLネゴシエーション(サーバ)部(サーバ側)
600 公開鍵復号部(クライアント側)
610 公開鍵暗号部(サーバ側)
700 共通鍵暗号・復号部(クライアント側)
710 共通鍵暗号・復号部(サーバ側)
750 共通鍵生成部(クライアント側)
760 共通鍵生成部(サーバ側)
800 通信データ生成部
810 乱数生成部

【特許請求の範囲】
【請求項1】
他の通信装置と第1の鍵を用いて通信を行う通信装置であって、
前記他の通信装置との間でハンドシェイク処理を行う認証処理部を備え、
前記認証処理部は、
前記第1の鍵を前記他の通信装置との間で交換するための第2の鍵の復号処理を行う鍵復号化部と、を有し、
前記第2の鍵を用いて暗号処理を行う鍵暗号化部と、
前記鍵復号化部による前記復号処理を除く第1のハンドシェイク処理を行い、
前記第1のハンドシェイク処理が終了した場合、
前記鍵復号化部による前記復号処理を除く第2のハンドシェイク処理を行い、
前記第2のハンドシェイク処理において、前記鍵暗号化部に前記第2の鍵を用いて前記第1の鍵の情報を暗号化させ、前記第2の鍵で暗号化された前記第1の鍵の情報を前記他の通信装置に送信する、通信装置。
【請求項2】
請求項1記載の通信装置であって、
前記認証処理部は、ダミーデータを用いて前記他の通信装置と第1のハンドシェイク処理を行う、通信装置。
【請求項3】
請求項1記載の通信装置であって、
演算処理を行う演算部と、
前記演算部の使用状況を検知し、前記使用状況の情報を前記認証処理部に通知する使用状況検知部と、をさらに有し、
前記認証処理部は、前記使用状況に基づいて前記第1のハンドシェイク処理で前記鍵復号化部による前記復号処理を除くかどうかを決定する、通信装置。
【請求項4】
請求項3記載の通信装置であって、
前記他の通信装置が前記第2のハンドシェイク処理を実行可能なことを通知する第1の情報を前記他の通信装置から受信する場合、
前記第1の認証処理部は、前記第1の情報と前記使用状況とに基づいて前記第2のハンドシェイク処理を行うかどうかを決定する、通信装置。
【請求項5】
請求項4記載の通信装置であって、
前記他の通信装置の処理能力を通知する第2の情報を前記他の通信装置から受信する場合、
前記第1の認証処理部は、前記第1の情報と前記第2の情報と前記使用状況とに基づいて前記第2のハンドシェイク処理を行うかどうかを決定する、通信装置。
【請求項6】
第1の通信装置と第2の通信装置との間で第1の鍵を用いて通信を行う通信システムであって、
前記第1の通信装置は、
前記第2の鍵を用いて暗号処理を行う第1の鍵暗号化部と、
前記第1の鍵を前記第2の通信装置との間で交換するための第2の鍵の復号処理を行う第1の鍵復号化部と、を有し、
前記第2の通信装置は、
前記第2の鍵を用いて暗号処理を行う第2の鍵暗号化部と、
前記第1の鍵を前記第1の通信装置との間で交換するための第2の鍵の復号処理を行う第2の鍵復号化部と、を有し、
前記第1の鍵復号部による前記第2の鍵の復号処理を除く第1のハンドシェイク処理が前記第1の通信装置と前記第2の通信装置との間で行われた場合、
前記第1の通信装置と前記第2の通信装置とは第2のハンドシェイク処理を行い、
前記第2のハンドシェイク処理において、
前記第1の通信装置は、前記第1の鍵暗号化部に前記第2の鍵を用いて前記第1の鍵の情報を暗号化させ、前記第2の鍵で暗号化された前記第1の鍵の情報を前記第2の通信装置に送信し、
前記第2の通信装置の前記第2の鍵復号化部は前記第2の鍵で暗号化された前記第1の鍵の情報の復号処理を行う、通信システム。
【請求項7】
請求項6記載の通信システムであって、
前記第1の通信装置と前記第2の通信装置とはダミーデータを用いて前記第1のハンドシェイク処理を行う、通信システム。
【請求項8】
請求項6記載の通信システムであって、
前記第1のハンドシェイクが終了した場合、
前記第2の通信装置は、前記第1の通信装置に第2のハンドシェイクを要求する信号を送信する、通信システム。
【請求項9】
請求項6記載の通信システムであって、
前記第1のハンドシェイク処理において、
第2の通信装置は、前記第2のハンドシェイク処理を実行可能なことを通知する第1の情報を前記第1の通信装置に送信し、
前記第1の情報を受信した前記第1の通信装置は、前記第2のハンドシェイク処理を行うことを前記第2の通信装置に通知する、通信システム。
【請求項10】
請求項9記載の通信システムであって、
前記第2の通信装置は、前記第1の情報と共に、使用可能な暗号方式を前記第1の通信装置に送信し、
前記第1の通信装置が前記第2のハンドシェイク処理を行わないと決定した場合、
前記第1の通信装置は、前記使用可能な暗号方式の中から前記第1のハンドシェイク処理で使用する暗号方式を選択して前記第2の通信装置に通知する、通信システム。
【請求項11】
請求項9記載の通信システムであって、
前記第1の通信装置は、
演算処理を行う演算部と、
前記演算部の使用状況を検知する使用状況検知部と、をさらに有し、
前記使用状況の情報と前記第1の情報とに基づいて、前記第2のハンドシェイク処理を行うかどうかを決定する、通信システム。
【請求項12】
請求項11記載の通信システムであって、
前記第2の通信装置は、
演算処理を行う演算部をさらに有し、
前記演算部の処理能力を通知する第2の情報を前記第1の通信装置に送信し、
前記第1の通信装置は、
前記第1の情報と前記第2の情報と前記使用状況とに基づいて前記第2のハンドシェイク処理を行うかどうかを決定する、通信システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate