JP5845393B2 - 暗号通信装置および暗号通信システム - Google Patents

暗号通信装置および暗号通信システム Download PDF

Info

Publication number
JP5845393B2
JP5845393B2 JP2011101076A JP2011101076A JP5845393B2 JP 5845393 B2 JP5845393 B2 JP 5845393B2 JP 2011101076 A JP2011101076 A JP 2011101076A JP 2011101076 A JP2011101076 A JP 2011101076A JP 5845393 B2 JP5845393 B2 JP 5845393B2
Authority
JP
Japan
Prior art keywords
random number
encryption
unit
client
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011101076A
Other languages
English (en)
Other versions
JP2012235214A (ja
Inventor
正克 松尾
正克 松尾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Intellectual Property Management Co Ltd
Original Assignee
Panasonic Intellectual Property Management Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Intellectual Property Management Co Ltd filed Critical Panasonic Intellectual Property Management Co Ltd
Priority to JP2011101076A priority Critical patent/JP5845393B2/ja
Priority to US13/455,992 priority patent/US8577039B2/en
Publication of JP2012235214A publication Critical patent/JP2012235214A/ja
Application granted granted Critical
Publication of JP5845393B2 publication Critical patent/JP5845393B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0838Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these
    • H04L9/0841Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these involving Diffie-Hellman or related key agreement protocols
    • H04L9/0844Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these involving Diffie-Hellman or related key agreement protocols with user authentication or key authentication, e.g. ElGamal, MTI, MQV-Menezes-Qu-Vanstone protocol or Diffie-Hellman protocols using implicitly-certified keys

Description

本発明は、鍵交換処理と共に認証処理を行う暗号通信装置および暗号通信システムであって、特に、SSL(Secure Socket Layer)暗号通信と共にパスワード相互認証プロトコル(Password Authenticated Key Exchange、以下PAKE認証と称する)を行う暗号通信装置および暗号通信システムに関する。
近年、通信を安全に行う方法として、SSL/TLS暗号通信が普及している。SSL/TLS暗号通信は、非常に簡単に利用できる上、暗号通信で最も危険な中間者攻撃に対しても防御方法があり、安全性も非常に高い。
しかし中間者攻撃への対処には、サーバ証明書やクライアント証明書の利用したPKI(Public Key Infrastructure)の仕組みが必要であり、普通のパスワード認証に比べ、運用が煩雑な上、運用費も嵩む。
この欠点を補う手段として最近、PAKE認証の研究が進んでいる。PAKE認証は従来のパスワード認証とは異なり、公開鍵暗号方式とパスワード認証を融合させた新たな認証方式である。PAKE認証を利用すれば、高価で煩雑なPKIではなく、安価で簡単なパスワードを利用して、中間者攻撃を抑制できる。
しかしながら、PAKE認証だけで、暗号通信と認証を同時に実現するのは理論的に可能であっても、実際の運用はかなり難しい。このため、ファイヤーウォール等様々な通信機器やブラウザ等ツールが、SSL/TLS暗号通信に対応し、広く普及しているSSL/TLS暗号通信の仕組みをそのまま利用してPAKE認証を行う技術が提案されている。クライアントとサーバとでSSL/TLSネゴシエーション(SSL/TLSハンドシェイク)を行った後に、PAKE認証を行うことで中間者攻撃の被害を抑制することができる(特許文献1参照)。
特開2009−296190号公報
しかしながら、SSL/TLS暗号通信にそのままPAKE認証を利用すると、共通鍵を交換にコンピュータにとって負荷の大きい公開鍵暗号を少なくとも2回以上利用する必要があった。即ち、SSL/TLSのハンドシェイク処理において公開鍵暗号を行い、更にこのハンドシェイク処理後にPAKE認証を行うためにもう1度公開鍵暗号を行っていた。
また、特にサーバ側は公開鍵暗号における秘密鍵を利用した復号を行うため、CPUに非常に重い負荷が生じた。一般的にサーバは複数のクライアントを相手にするので、常時、多量の公開鍵暗号を実行しなければならない。そのため、多くのSSL/TLSサーバは、高価なCPUやSSL/TLSアクセラレータボードを搭載している。このように公開鍵暗号を実行するのに要する費用は非常に大きく、コンピュータ購入費の半分以上のコストに相当するという見解もある。従って、公開鍵暗号の回数が倍以上になる影響は深刻であった。
また、SSL/TLS暗号通信は、各種攻撃に対する防御ノウハウが蓄積されていて信頼性が高いのに対し、PAKE認証による暗号通信は、攻撃に対する知見が少なく、信頼性に欠ける。
本発明は、このような従来技術の問題点を解消するべく案出されたものであり、その主な目的は、普及しているSSL/TLS暗号通信で、PAKE認証を用いて中間者攻撃を安価でかつ簡単に抑制しつつも、CPUの負荷を低減することである。
上述の課題を解決するために、本発明の暗号通信装置は、パスワードを共有する他の暗号通信装置と鍵交換処理を行う暗号通信装置であって、第1の乱数および第2の乱数を生成する乱数生成部と、前記他の暗号通信装置の公開鍵を用いて前記第1の乱数に基づく情報を暗号化する第1の暗号化部と、前記第1の暗号化部によって暗号化された前記第1の乱数に基づく情報を、前記パスワードを用いて暗号化する第2の暗号化部と、前記第2の乱数に基づく情報を前記第1の乱数を用いて暗号化する第3の暗号化部と、前記第2の暗号化部によって暗号化された前記第1の乱数に基づく情報を含む第1の信号、および前記第3の暗号化部によって暗号化された前記第2の乱数に基づく情報を含む第2の信号を前記他の暗号通信装置に送信する送信部と、を備える。
本発明の暗号通信装置によれば、鍵交換処理中にパスワードを用いて他の暗号通信装置の認証を行うことができる。このように鍵交換処理中にパスワード認証を組み合わせて行うため、鍵交換処理とパスワード認証処理とで重複する公開鍵暗号の秘密鍵による復号の処理による装置の負荷を低減することができる。
また、本発明の暗号通信装置は、前記送信部は、前記第1の信号と前記第2の信号とを連続的に前記他の暗号通信装置に送信するように構成される。
本発明の暗号通信装置のこの構成によれば、第2の乱数を用いて他の暗号通信装置の認証を行うことができる。
本発明の暗号通信装置のこの構成によれば、既知のデータを第2の乱数で暗号化しているため、他の暗号通信装置からの計算結果を待たずして、第1の乱数を送信する第1の信号と、認証を行うための第2の信号を同時に送ることができる。即ち、他の暗号通信装置とのパスワード認証を短縮して行うことができる。
また、本発明の暗号通信装置は、前記第3の暗号化部は、前記他の暗号通信装置にとって既知のデータを前記第1の乱数および前記第2の乱数を用いて暗号化するように構成される。
本発明の暗号通信装置のこの構成によれば、他の暗号通信装置が既知データおよび第1の乱数から第2の乱数を算出した場合、他の暗号通信装置の認証を行うことができる。
また、本発明の暗号通信装置は、前記他の暗号通信装置からの信号を受信する受信部を更に有し、前記受信部が、前記他の暗号通信装置から前記パスワードを有することを証明する信号を受信する場合、前記送信部は前記第2の乱数を前記他の暗号通信装置に送信するように構成される。
本発明の暗号通信装置のこの構成によれば、第2の乱数を保持していることを他の暗号通信装置に通知できるため、他の暗号通信装置に自装置のパスワード認証をさせることができる。
また、本発明の暗号通信装置は、前記既知のデータは、前記他の暗号通信装置との鍵交換処理における通信履歴であるように構成される。
本発明の暗号通信装置のこの構成によれば、他の暗号通信装置は自装置との通信履歴から自らこの通信履歴を算出することができる。このため、他の暗号通信装置は、例えば、悪意の第3者によって暗号方式の付け替えが行われたかどうかを確認できる。
また、本発明の暗号通信装置は、前記送信部は、SSLハンドシェイクに基づいて前記第1の信号を鍵交換信号として送信すると共に、SSLハンドシェイクに基づいて前記第2の信号を前記第2の乱数の検証信号として送信するように構成される。
本発明の暗号通信装置のこの構成によれば、SSLハンドシェイクのプロトコルを通過させるファイヤーウォールのチェックにかからずに第1の信号および第2の信号を他の暗号通信装置に送信することができる。即ち、SSLハンドシェイクに基づいて他の暗号通信装置のパスワード認証を安価に行うことができる。
また、本発明の暗号通信システムは、パスワードを共有する第1の暗号通信装置と第2の暗号通信装置との間で、鍵交換処理を行う暗号通信システムであって、前記第1の暗号通信装置は、第1の乱数および第2の乱数を生成する乱数生成部と、前記第2の暗号通信装置の公開鍵を用いて前記第1の乱数を暗号化する第1の暗号化部と、前記第1の暗号化部によって暗号化された前記第1の乱数を前記パスワードを用いて暗号化する第2の暗号化部と、前記第2の乱数に基づく情報を前記第1の乱数を用いて暗号化する第3の暗号化部と、前記第2の暗号化部によって暗号化された前記第1の乱数を含む第1の信号、および前記第3の暗号化部によって暗号化された前記第2の乱数に基づく情報を含む第2の信号を前記第2の暗号通信装置に送信する送信部と、を有し、前記第2の暗号通信装置は、前記第1の信号および前記第2の信号を受信する受信部と、前記公開鍵の対となる秘密鍵および前記パスワードを用いて前記第2の暗号化部によって暗号化された前記第1の乱数を復号化し、前記第1の乱数を取得する復号化部と、前記復号化部が取得した前記第1の乱数を用いて、前記第3の暗号化部によって暗号化された前記第2の乱数に基づく情報から前記第2の乱数を算出する認証データ取得部と、を有する。
本発明の暗号通信システムによれば、鍵交換処理中にパスワードを用いて他の暗号通信装置の認証を行うことができる。このように鍵交換処理中にパスワード認証を組み合わせて行うため、鍵交換処理とパスワード認証処理とで重複する公開鍵暗号の秘密鍵による復号の処理による装置の負荷を低減することができる。
また、本発明の暗号通信システムは、クライアントがサーバに対して、公開鍵とパスワードで暗号化した乱数Aを送信する、クライアント・サーバ(秘密鍵を保持する側をサーバと呼ぶ)間のPAKE認証であって、クライアントは乱数生成手段、および共通鍵暗号化手段を有し、クライアントは乱数生成手段を用いて乱数Bを生成し、この乱数B(乱数Bから生成されるデータを含む)を共通鍵として、乱数A(乱数Aから生成されるデータを含む)を、前記共通鍵暗号化手段を用いて暗号化し、サーバがパスワードを保持することを確認する前に、この乱数Bによって暗号化された乱数Aをサーバに対して渡すものとし、クライアントは、サーバがパスワードを保持することを確認できたら、乱数B(乱数Bから生成されるデータを含む)をサーバに対して提示し、クライアントが乱数A、即ちパスワードを理解していることをサーバに対して伝達する、つまりクライアント認証を行うものとした。
これによると、任意の値である乱数Bを用いて、クライアント認証を行うことが可能となる。なおこの乱数Bは、ワンタイムパスワードとして利用可能である。
またこのような提示方法は、SSL/TLSネゴシエーションと親和性がよい。SSL/TLSネゴシエーションでは、クライアントは、公開鍵暗号で暗号したデータ(Client Key Exchange)と共に、その検証データ(Finished)も同時に送る。その時点ではクライアントは、まだサーバの検証データ(Finished)を入手していない。そのため、SSL/TLSネゴシエーションと同時にPAKE認証を行うと、オフライン攻撃が成立してしまう。
しかし本発明の暗号通信システムによれば、クライアントが送信する検証データ(Finished)は乱数Bで暗号化されているので、その危険性は少ない。従ってSSL/TLSネゴシエーションの中でパスワード認証(例えば、PAKE認証)を実施できるようになる。
これにより、1回の公開鍵暗号でSSL/TLSネゴシエーションとPAKE認証を行えるようになるので、サーバのCPUの負荷を小さくでき、サーバ費用を大幅に削減できる。
なお、このようにSSL/TLSネゴシエーションでPAKE認証を行えば、ファイヤーウォール等の通信機器によって通信を遮断される危険性も減少する。
このような課題を解決するために、本発明の暗号通信システムでは、SSL/TLSネゴシエーション(SSL/TLSハンドシェイク)の中で、クライアントがサーバに対して乱数Bを提示するものとした。
これによると、SSL/TLS暗号通信処理を、アプリケーションプログラムではなく、OpenSSLのようなSSL/TLS暗号通信モジュールが行っている場合に、アプリケーションプログラムのつくりをより簡略にすることができる。アプリケーションプログラムが一端SSL/TLS暗号通信モジュールにパスワードを渡せば、後はSSL/TLS暗号通信モジュールがすべての処理を行える。
また、本発明の暗号通信システムは、SSL/TLSの再接続を行うネゴシエーションの中で、クライアントがサーバに対して乱数Bを提示するものとした。
これによると、1回の公開鍵暗号でSSL/TLSネゴシエーションとPAKE認証を行えるようになるので、サーバのCPUの負荷を小さくでき、サーバ費用を大幅に削減できる。
また、本発明の暗号通信システムは、サーバは、クライアントから渡された前記共通鍵暗号化手段で暗号化された乱数A(乱数Aから生成されるデータを含む)と、乱数A(乱数Aから生成されるデータを含む)から、乱数B(乱数Bから生成されるデータを含む)を割り出すものとし、この割り出した乱数B(乱数Bから生成されるデータを含む)とクライアントから渡された乱数B(乱数Bから生成されるデータを含む)とを照合することで、クライアント認証を行うものとした。
これによると、サーバは認証データである乱数Bだけを記憶しておけばよいので、サーバ側のSSL/TLS暗号通信モジュールのつくりを簡単にできる。
また、本発明の暗号通信システムは、前記共通鍵暗号化手段がXOR処理であるものとした。
これによると、サーバ側のSSL/TLS暗号通信モジュールが、非常に簡単、かつ迅速に乱数Bの割り出しを行えるようになる。
また、本発明の暗号通信システムは、クライアントがサーバに乱数Bを提示するのに、この乱数B(乱数Bから生成されるデータを含む)を共通鍵として、サーバが保持、若しくは生成できる情報を、前記共通鍵暗号化手段を用いて暗号化し、サーバに渡すものとし、サーバもクライアントと等価な共通鍵暗号化手段を有し、サーバはこの乱数B(乱数Bから生成されるデータを含む)を共通鍵として、サーバが保持、若しくは生成できる情報を、前記共通鍵暗号化手段を用いて暗号化し、この自ら暗号化した情報と、クライアントが暗号化した情報とを比較することで、クライアントが乱数Bを理解していることを確認するものとした。
これによると、クライアントがサーバに既知の情報を、改ざんを受けずに知らせることが可能となる。以下の実施の形態で詳細に説明を行うが、PAKE認証では、オフライン攻撃のため、公開鍵で暗号化する乱数には、第3者に分かるような既知の情報は埋め込めこめない。しかし、SSL/TLSネゴシエーションでは、バージョンロールバック攻撃(Version rollback attacks)を抑制するために、公開鍵で暗号化する乱数には、バージョン情報等の既知の情報を埋め込まなくてはならない。
そこで、本発明の暗号通信システムのように、バージョン情報等の既知の情報は、乱数Bで暗号化して伝達するものとすれば、公開鍵で暗号化する乱数には既知の情報を埋め込む必要がなくなるので、PAKE認証とSSL/TLSネゴシエーションを両立させることが可能となる。乱数Bの値を知らない悪意の第3者は、乱数Bで暗号化した偽バージョン情報を作成できないので、悪意の第3者は、クライアント・サーバに知られることなく、バージョン情報を偽バージョン情報に改ざんする、つまりバージョンロールバック攻撃(Version rollback attacks)を行うことは不可能である。
また、本発明の暗号通信システムは、クライアントがサーバに乱数Bを提示するのに、この乱数B(乱数Bから生成されるデータを含む)を共通鍵として、サーバが保持、若しくは生成できる情報を、前記共通鍵暗号化手段を用いて暗号化し、サーバに渡すものとし、サーバもクライアントと等価な共通鍵暗号化手段を有し、サーバはこの乱数B(乱数Bから生成されるデータを含む)を共通鍵として、暗号化されたサーバが保持、若しくは生成できる情報を、前記共通鍵暗号化手段を用いて復号化し、この自ら保持、若しくは生成できる情報と、復号化した情報とを比較することで、クライアントが乱数Bを理解していることを確認するものとした。
これによると、クライアントがサーバに特定情報を、改ざんを受けずに知らせることが可能となる。以下の実施の形態で詳細に説明を行うが、PAKE認証では、オフライン攻撃のため、公開鍵で暗号化する乱数には、第3者に分かるような既知の情報は埋め込めこめない。しかし、SSL/TLSネゴシエーションでは、バージョンロールバック攻撃(Version rollback attacks)を防ぐために、公開鍵で暗号化する乱数には、バージョン情報等の既知の情報を埋め込まなくてはならない。
そこで、本発明のように、バージョン情報等の既知の情報は、乱数Bで暗号化して伝達するものとすれば、公開鍵で暗号化する乱数には既知の情報を埋め込む必要がなくなるので、PAKE認証とSSL/TLSネゴシエーションを両立させることが可能となる。乱数Bの値を知らない悪意の第3者は、乱数Bで暗号化した偽バージョン情報を作成できないので、悪意の第3者は、クライアント・サーバに知られることなく、バージョン情報を偽バージョン情報に改ざんする、つまりバージョンロールバック攻撃(Version rollback attacks)を行うことは不可能である。
鍵交換処理中にパスワード認証を組み合わせて行うため、鍵交換処理とパスワード認証処理とで重複する公開鍵暗号の秘密鍵による復号の処理による負荷を低減することができる。
本発明の実施の形態1におけるPAKE認証を示すシーケンス図 本発明の実施の形態1におけるクライアントおよびサーバの機能ブロックの第1例を示す図 本発明の実施の形態1におけるクライアント側のフローチャートの一例を示す図 本発明の実施の形態1におけるサーバ側のフローチャートの一例を示す図 本発明の実施の形態1におけるクライアントおよびサーバのハードウェア構成の一例を示す図 本発明の実施の形態2におけるPAKE認証を示すシーケンス図 本発明の実施の形態1におけるクライアントおよびサーバの機能ブロックの第2例を示す図
(実施の形態1)
以下、本発明の実施の形態1を、図面を参照しながら説明する。
図1は、本発明の実施の形態1におけるPAKE認証を示すシーケンス図である。ここでは、クライアント1とサーバ2とは、SSL/TLSネゴシエーション(SSL/TLSハンドシェイク、SSLネゴシエーション、SSLハンドシェイクとも称する)中に、PAKE認証も行う。なお説明を簡単にするために、ここで用いる公開鍵暗号はRSA(Rivest Shamir Adleman)暗号として説明を行う。また、クライアント1とサーバ2の構成については、図2、図5等を用いて詳細に説明する。なお、クライアント1およびサーバ2は暗号通信装置の一例である。
クライアント1がサーバ2に対してClient Helloを生成し、送信する(ステップS1)。サーバ2はこのClient Helloを受信し、処理する(ステップS2)。そして、サーバ2はクライアント1に対してServer Hello、Server Certificate(公開鍵の情報を含む)、Server Hello Doneを生成し、送信する(ステップS3)。クライアント1はこれらを受信し、処理する。なお、クライアント1は、Server Certificateから公開鍵を取得する(ステップS4)。
クライアント1はClient Key Exchangeを生成するため、乱数A(第1の乱数)を生成する。なお、乱数Aのデータ長は、RSA暗号におけるモジュラス(modulus)のデータ長に等しい(ステップS5)。
クライアント1は、乱数Aから共通鍵を生成する。詳細に説明すると、クライアント1は乱数Aの内、最後の48バイトをプリマスターシークレット(premaster secret)として扱う。なお、乱数Aの内、どの部分をプリマスターシークレットとして扱うかは、本質的な問題ではなく、他の部分をプリマスターシークレットとしてもよい。ここでは、SSL/TLS暗号通信の仕様に合わせるために、最後の48バイトをプリマスターシークレットとする。
次に、プリマスターシークレットからマスターシークレット(master secret)を生成して、そしてマスターシークレットから共通鍵暗号方式で用いる共通鍵を生成する(ステップS6)。なおここで共通鍵とは、例えば、以下の鍵の総称であり、以下の同様である。
client_write_MAC_secret
server_write_MAC_secret
client_write_key
server_write_key
client_write_IV(ブロック暗号利用時のみ必要)
server_write_IV(ブロック暗号利用時のみ必要)
次に、乱数Aをサーバ2から伝送された公開鍵で暗号化する(ステップS7)。なお、本実施の形態では乱数Aを公開鍵で暗号するが、乱数Aそのものではなく、サーバ2が乱数Aを算出できる情報であればよい。
なおこの暗号化の手順は、通常のSSL/TLS暗号通信の仕様とは異なるので、以下、差異を説明する。
バージョン3.0以降のSSL/TLS暗号通信では、プリマスターシークレットは以下のように、2バイトのバージョン情報と46バイトの乱数Dで構成されている。
struct {
ProtocolVersion client_version;
← バージョン情報( 2バイト)
opaque random[46]; ← 乱数D (46バイト)
} PreMasterSecret; ← プリマスターシークレット
従って、乱数Aから生成されたプリマスターシークレットには、バージョン情報が設定されていない。ここはSSL/TLS暗号通信の仕様とは異なる。
次に、SSL/TLS暗号通信では、このプリマスターシークレットは、以下のように、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)で整形される。
00 || 02 || パディング文字列(00を含まない乱数E) || 00 || PreMasterSecret
ここで、|| の記号は単なるデータの連結を意味する。
なおこの全データ長は、RSA暗号におけるモジュラス(modulus)のデータ長に等しいので、乱数Eのデータ長は以下のようになる。
乱数Eのデータ長 = モジュラス(modulus)のデータ長 − 3 − 48
SSL/TLS暗号通信では、この暗号ブロックフォーマット化されたプリマスターシークレットは公開鍵で暗号化される。
一方、乱数Aはモジュラス(modulus)のデータ長と等しく、乱数Aの構造は以下の通りである。
乱数A = (乱数C || PreMasterSecret)
なお乱数Cのデータ長は、モジュラス(modulus)のデータ長より、PreMasterSecretのデータ長、つまり48バイト分少ない。
このように、「00 || 02 || パディング文字列(00を含まない乱数E) || 00」の部分を「乱数C」に置き換えているところも、SSL/TLS暗号通信の仕様とは異なる。
つまり、乱数Aには、SSL/TLS暗号通信の仕様で定義されているプリマスターシークレットにおけるバージョン情報の設定、および、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)によるデータ整形がなされていない。
なお、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)で整形しない。
しかしこのようにすると、悪意の第3者がクライアントになりすまし、0とか1のような特殊なEncryptedPreMasterSecretをサーバ2に渡し、サーバ2が返すFinishedを見て、パスワードを類推するかもしれない。これを避けるには、サーバ2は、0とか1のような単純なEncryptedPreMasterSecretをエラーとして処理するか、若しくはパスワードの暗号方法を工夫すればよい。つまり、EncryptedPreMasterSecretが0や1であっても、パスワードで復号した場合に複雑な値が出現するようなものであれば問題ない。
また、乱数Aに、プリマスターシークレットにおけるバージョン情報の設定、および、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)によるデータ整形を行わない理由は、オフライン攻撃を抑制するためである。
悪意の第3者が正規サーバになりすます(即ち、悪意の第3者がサーバ2として動作する)場合、悪意の第3者は、自らが保持する秘密鍵と対となる公開鍵をクライアントに渡せる。従って、悪意の第3者は公開鍵暗号における復号化が可能である。
一方パスワードの方も、オフラインであれば、パスワードは一般的に記憶できる程度の長さにするため、暗号鍵に比べビット長が短く、悪意の第3者にとっては、パスワードが取りうるすべての組合せを総当りで調べるのは難しくない。
悪意の第3者は正規サーバになりすまし、クライアント1から2重暗号された乱数Aを取得する。そして、仮パスワードを設定し、2重暗号された乱数Aをこの仮パスワードと自らが保持する秘密鍵で復号化する。乱数Aにバージョン情報やフォーマットがあれば、これが出現するか否かで、想定したパスワードが正しいかを判定できる。
悪意の第3者は、オフラインで仮パスワードを次々に設定すれば、いずれかの時点で、乱数Aにバージョン情報やフォーマットが出現するパスワードを探し当てることが可能である(オフライン攻撃)。
以上説明したように、このオフライン攻撃を避けるため、乱数Aにはバージョン情報設定やフォーマット化を行わない。
次に、公開鍵で暗号化された乱数Aを、更にパスワードで暗号化し、2重暗号化された乱数Aを求める(ステップS8)。この手続きは、SSL/TLS暗号通信にはなく、PAKE認証のための処理である。
そして、この2重暗号された乱数Aを、EncryptedPreMasterSecretとして、Client Key Exchangeを生成する。ここで、Client Key Exchangeは第1の信号の一例であり、サーバ2に乱数Aを送信するための鍵交換信号でもある。
Change Cipher Specを生成し(ステップS9)、Finishedの平分のデータ部を生成する(ステップS10)。ここで、Finishedは、第2の信号の一例であり、検証データを送信するための検証信号でもある。
クライアント1は乱数B(第2の乱数)を生成し、少なくともFinishedのデータ部で、共通鍵で暗号化する部分(MACを含む)を、乱数Bで暗号化する。乱数Bによる暗号化はここではXOR処理とする(ステップS11)。この乱数Bによる暗号化処理手続きも、SSL/TLS暗号通信の仕様とは異なる。
ここで、Finishedのデータ部を乱数Bで暗号化するのは、これも上述したオフライン攻撃を抑制するためである。仮に乱数Bで暗号化されていないFinishedをクライアント1がサーバ2に送信すると、悪意の第3者が正規サーバになりすました場合に、オフライン攻撃が成立する可能性がある。
悪意の第3者は、オフラインで仮パスワードを次々に設定し、Finishedを自ら計算すれば、クライアント1から受信したFinishedと比較することで、いずれかの時点で、正しいパスワードを探し当てることが可能である。
乱数Bで暗号化したデータ部を、更に共通鍵で暗号化し、データ部を2重暗号化する(ステップS12)。ここでは、ファイヤーウォールのチェックにひっかからないためにSSL/TLS暗号通信の仕様に従う。即ち、この共通鍵による暗号はなくてもよいが、クライアント1はSSL/TLS暗号通信の仕様に基づいて共通鍵による暗号を行う。
クライアント1はサーバ2に対して、Client Key Exchange、Change Cipher Spec、Finishedを送信する(ステップS13)。
サーバ2はクライアント1から、Client Key Exchange、Change Cipher Spec、Finishedを受信する(ステップS14)。
サーバ2は、Client Key ExchangeのEncryptedPreMasterSecretにセットされた2重暗号化された乱数Aをパスワードで復号化し、公開鍵で暗号化された乱数Aを求める(ステップS15)。この手続きは、SSL/TLS暗号通信にはなく、PAKE認証のための処理である。
サーバ2は、公開鍵で暗号化された乱数Aを秘密鍵で復号化する(ステップS16)。
サーバ2は、乱数Aの内、最後の48バイトをプリマスターシークレットとして扱う。なお、乱数Aの内、どの部分をプリマスターシークレットとして扱うかは、本質的な問題ではなく、他の部分をプリマスターシークレットとしてもよい。ここでは、SSL/TLS暗号通信の仕様に合わせるために、最後の48バイトをプリマスターシークレットとする。
次に、プリマスターシークレットからマスターシークレット(master secret)を生成して、そしてマスターシークレットから共通鍵暗号方式で用いる共通鍵を生成する。
なお上述したように、乱数Aは、プリマスターシークレットにおけるバージョン情報の設定、および、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)によるデータ整形が行われていないので、サーバ2はこのチェックを行わない。ここもSSL/TLS暗号通信の仕様とは異なる。
サーバ2は、Change Cipher Specを処理し(ステップS18)、2重暗号化されたFinishedのデータ部を共通鍵で復号化する(ステップS19)。
そしてサーバ2は、クライアント1が生成したFinishedのデータ部を、独自に計算する。
サーバ2は、乱数Bで暗号化されたFinishedのデータ部と、自ら計算して求めたFinishedのデータ部を比較して、乱数Bを求める。これもSSL/TLS暗号通信の仕様とは異なる(ステップS21)。
なお、クライアント1がサーバ2に対して乱数Bを提示できれば、クライアント1がサーバに提示したFinishedが正しいと証明できるので、この乱数Bは、クライアントが正規クライアントか否かを確かめる、つまりクライアント認証のための認証データとして扱える。
サーバ2は、Change Cipher Spec、Finishedを生成し、クライアント1に対してこれを送信する。なお、このFinishedの生成は、SSL/TLS暗号通信の仕様に従う(ステップS22)。
クライアント1はサーバ2から、Change Cipher Spec、Finishedを受信し、これを処理する。そして、Finishedを処理することで、クライアント1はサーバ2を認証できたことになる(ステップS23)。ここで、SSLハンドシェイクは確立されたことになる。つまり、これ以降でのクライアント1とサーバ2との間の通信では共通鍵暗号が使用される。
クライアント1は、乱数Bを共通鍵で暗号化し(ステップS24)、サーバ2に対して、暗号化された乱数Bを送信する(ステップS25)。ここの暗号化は、SSL/TLS暗号通信の仕様に従うので、MACの生成、および暗号化を行う。
なお、乱数Bは平分で送信しても危険でなく、暗号化の必要はないが、SSL/TLS暗号通信の仕様に合わせるものとする。
サーバ2はクライアント1から、暗号化された乱数Bを受信し(ステップS26)、暗号化された乱数Bを、共通鍵で復号化する(ステップS27)。なおここの復号化は、SSL/TLS暗号通信の仕様に従うので、MACのチェックも行う。
サーバ2は、自ら算出した乱数Bと、復号した乱数Bとを比較(照合)し、クライアント1がパスワードを知っている正規クライアントか否かを判断する。
なお、乱数Bによる暗号がXOR処理でない場合は、サーバ2は、ステップS19で復号化したデータとステップS20で生成したデータとを保存しておき、この乱数Bを取得した時点で、ステップS20で生成したデータに対して乱数Bで暗号化を行い、そして、この乱数Bで暗号したデータとステップS19で復号化したデータとを比較すればよい。
なお、Finishedのデータ部に対する暗号化の順番は、ここでは乱数Bを先に、共通鍵を後として説明したが、逆に行うことも可能である。但し、処理が少し面倒になるので、好ましくない。また、先に説明したように、Finishedのデータ部を2重暗号化せずに、乱数Bのみで暗号するものとしてもよい。
なお、乱数Bはそのものでも、データ整形されたものであってもよい。乱数Aは、プリマスターシークレットにおけるバージョン情報の設定、および、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)によるデータ整形が行われていないため、サーバ2はプリマスターシークレットを求めた際に、受信したデータに欠損があるかや、バージョンロールバック攻撃(Version rollback attacks)を受けているかを知ることができない。
そこでバージョン情報や暗号ブロックフォーマットデータを、乱数Bを共通鍵として、適当な共通鍵暗号化方式を用いて暗号化し、これを新たな認証データとするとよい。この部分の具体的な手続について図7を用いて後述する。
以上説明したように本実施の形態では、SSL/TLS暗号通信の仕様を一部改変するだけで、PAKE認証を行うことができる。
また、本実施の形態においてもネットワーク上で送受信されるデータフォーマットは、第3者から見ればSSL/TLS暗号通信の仕様に従っているので(図1のEncryptedPreMasterSecret、図1のクライアント1が送信するFinishedはSSL/TLS暗号通信に従っていないが、暗号化データのため、第3者には、SSL/TLS暗号通信に従っているか否かは判断できない)、図1は、第3者から見れば、通常のSSL/TLSネゴシエーションに見える。
従って、SSL/TLS暗号通信に対応したファイヤーウォールであれば、通信が遮断されることなく、PAKE認証を行うことが可能である。
しかも、SSL/TLS暗号通信でPAKE認証を行いながらも、公開鍵暗号の実施回数は1回のみなので、装置にかかる負荷は小さい。
なお図1では、SSL/TLSネゴシエーション後、直ちにクライアント認証を行っているが、これはいつ行っても構わない。クライアント認証が必要になった時点で、サーバが合図をし、それを受けてクライアント認証を行うものとしてもよい。
従って、乱数Bをワンタイムパスワードとして利用することも可能である。逆に言えば、図1のSSL/TLSネゴシエーションを、ワンタイムパスワード生成手段として扱うことも可能である。
なお、このSSL/TLSネゴシエーションをワンタイムパスワード生成手段としてのみ扱い、暗号通信を行わない場合は、プリマスターキーやマスターキーを乱数Bの代りにワンタイムパスワードとして扱うことも可能であるが、SSL/TLSネゴシエーション中のメッセージ改ざんをチェックできないので好ましくない。
また、上述したFinishedのデータ部とは、通常のSSLハンドシェイクの処理と同様に、クライアント1とサーバ2との間でのSSLハンドシェイクでのこれまでのやり取りのデータ(以下、SSLハンドシェイクデータと称する)に関する情報である。即ち、Finishedのデータ部が生成されるステップS10より前のSSLハンドシェイクデータとは、Client Hello、Server Hello、Server Certificate、Server Hello Doneであるので、これらの信号に基づいてクライアント1はFinishedのデータ部を生成する。
一方、サーバ2にとっても、Client Hello、Server Hello、Server Certificate、Server Hello Doneはすでにクライアント1との間で通信した情報であるため、クライアント1から生成されるFinishedのデータ部を自ら算出することができる。即ち、Finishedのデータ部とは、サーバ2にとっても既知のデータである。これにより、既知のデータであるFinishedのデータ部を用いて乱数Bを算出することができる。
そして、Finished(第2の信号)は一般的なSSLハンドシェイクでは検証信号として使用される。つまり、サーバ2は共通鍵を用いて復号したFinishedのデータ部と、自ら生成したデータ部とを照合することで、正しくSSLハンドシェイク行えたかどうかを検証できる。例えば、SSLハンドシェイクの途中で悪意の第3者によってSSL暗号通信で行う暗号方式を勝手に変更されていた場合、Finishedを受信することで気づくことができる。
また、ステップS7において、乱数Aを公開鍵で暗号化したが、乱数Aに基づく情報であればよい。即ち、乱数Aから生成される共通鍵を算出できる情報であればよく、特に限定するものではない。
また、ステップS11においては、乱数Bに基づく情報を共通鍵で暗号化すればよい。乱数Bに基づく情報とは、乱数Bそのものでもよく、ハッシュ化した乱数Bでもよく、本実施の形態のように乱数Bによって暗号化されたデータ部でもよい。
また、ステップS22において、サーバ2がFinishedを生成し、クライアント1にこれを送信するということは、乱数Bを算出できたことを意味する。即ち、ステップ23において、クライアント1はFinishedを受信することにより、サーバ2がパスワードを有する正規のサーバであることを認証することができる。なお、サーバ2がパスワードを有することを証明する方法としてはこの限りではなく、クライアント1が乱数Bを算出できる情報をサーバ2がクライアント1に送信してもよい。以上より、クライアント1は乱数Bに基づいてサーバ2を認証できる。
また、本実施の形態では、鍵交換信号であるClient Key Exchangeと乱数Bおよび検証データを送る信号であるFinishedとはSSLの仕様に従って連続的に送信する。すなわち、クライアント1はClient Key ExchangeとFinishedとの間にサーバ2からの信号を受信しない。つまり、Client Key Exchangeを送信後、サーバ2からの返答を待たずして、検証データであるFinishedを送信している。このため、クライアント1はサーバ2とのパスワード認証を短縮して行うことができる。なお、Client Key ExchangeとFinishedとを同時に、あるいは1つの信号として送信してもよい。
図2は、本発明の実施の形態1におけるクライアントおよびサーバの機能ブロックの第1例を示す図である。また図3は、本発明の実施の形態1におけるクライアント側のフローチャートの一例を示す図、図4は、本発明の実施の形態1におけるサーバ側のフローチャートの一例を示す図である。次に、この図2、図3、図4を用いて説明を行う。また、以下の説明において図1を用いて説明したステップS1〜S28に対応させている。
クライアント1は、ネットワークを介してサーバ2とSSL/TLS暗号通信、および、PAKE認証を行う。
(図3−(1))はじめに、SSLネゴシエーション部400がClient Helloメッセージを生成し、これをデータ送信部300に送る(ステップS1)。
(図3−(2))データ送信部300は、ネットワーク制御装置100を介して、サーバ2に対して、このClient Helloメッセージを送信する(ステップS1)。
(図3−(3))この後、クライアント1はサーバ2からのメッセージ受信待ち状態になる。
(図4−(1))サーバ2は、クライアント1からのメッセージ受信待ち状態で始まる。データ受信部210は、クライアント1が送信したClient Helloメッセージを、ネットワーク制御装置110を介して受信する。データ受信部210は、このClient Helloメッセージを、Client Helloメッセージを解釈(処理)するSSLネゴシエーション部410に送る。
(図4−(2))SSLネゴシエーション部410は、Client Helloメッセージを処理する(ステップS2)。
(図4−(3))SSLネゴシエーション部410は、Server Hello、Server Certificate(公開鍵の情報を含む)、Server Hello Doneを生成し、これをデータ送信部310に送る(ステップS3)。
(図4−(4))データ送信部310は、ネットワーク制御装置110を介して、クライアント1に対して、Server Hello/Server Certificate/Server Hello Doneメッセージを送信する(ステップS3)。
(図4−(5))その後、サーバ2は再びクライアント1からのメッセージ受信待ち状態になる。
(図3−(3))クライアント1のデータ受信部200は、サーバ2が送信したServer Hello、Server Certificate、Server Hello Doneメッセージを、ネットワーク制御装置100を介して受信する。データ受信部200は、Server Hello、Server Certificate、Server Hello Doneメッセージを、Server Hello、Server Certificate、Server Hello Doneメッセージを解釈(処理)するSSLネゴシエーション部400に送る。
(図3−(4))SSLネゴシエーション部400は、Server Hello、Server Certificate、Server Hello Doneメッセージを処理し、公開鍵Eと公開鍵N(モジュラス)を取得する(ステップS4)。なお、サーバ証明書のチェックは行っても行わなくてもどちらでも構わない。
(図3−(5))SSLネゴシエーション部400は乱数生成部500に指示して、乱数Aを生成させる(ステップS5)。なお、乱数Aのデータ長は、公開鍵N(モジュラス)のデータ長に等しい。
(図3−(6))共通鍵生成部800は、乱数Aの内、最後の48バイトをプリマスターシークレットとして扱い、プリマスターシークレットからマスターシークレット(master secret)を生成する。そしてマスターシークレットから共通鍵暗号方式で用いる共通鍵を生成する。そして共通鍵生成部800は、この共通鍵を、暗号・復号化、およびMAC処理を行う共通鍵暗号・復号部850に渡す(ステップS6)。
(図3−(7))公開鍵暗号部600は、乱数Aを公開鍵Eと公開鍵Nで暗号化する(ステップS7)。
(図3−(8))パスワード暗号部700は、公開鍵で暗号化された乱数Aを、パスワードで暗号化し、2重暗号された乱数Aを求める(ステップS8)。この手続きは、SSL/TLS暗号通信にはなく、PAKE認証のための処理である。
なおフローチャートには示していないが、このパスワードはユーザが、パスワードを入力する入力部750を介して、クライアント1に記憶させたパスワードとすることもできる。なおこの場合、パスワードを入力するタイミングは、事前、若しくはパスワードが必要になった時点とする。
(図3−(9))SSLネゴシエーション部400は、2重暗号された乱数AをEncryptedPreMasterSecretとして、Client Key Exchangeを生成する。
(図3−(10))続いてSSLネゴシエーション部400は、Change Cipher Specを生成する(ステップS9)。
(図3−(11))続いてSSLネゴシエーション部400は、Finishedメッセージのデータ部(MACを含まない)を生成する(ステップS10)。
(図3−(12))SSLネゴシエーション部400は乱数生成部500(乱数生成手段)に指示して、乱数Bを生成させる。乱数Bは、共通鍵暗号・復号部850(共通鍵暗号化手段)に渡される(ステップS11)。
(図3−(13))共通鍵暗号・復号部850(共通鍵暗号化手段)は、SSLネゴシエーション部400から渡されたFinishedメッセージのデータ部のMACを求め、Finishedメッセージのデータ部(MACを含む)と乱数BとのXOR処理を行い、Finishedメッセージのデータ部(MACを含む)を暗号化する(ステップS11)。また、共通鍵暗号・復号部850は、この暗号化されたFinishedメッセージのデータ部(MACを含む)を、共通鍵で暗号化し、2重暗号されたFinishedメッセージのデータ部(MACを含む)を求める(ステップS12)。
(図3−(14))SSLネゴシエーション部400は、2重暗号されたFinishedメッセージのデータ部(MACを含む)からFinishedメッセージを生成する。そして、SSLネゴシエーション部400は生成したClient Key Exchange、Change Cipher Spec、Finishedメッセージをデータ送信部300に送る。
(図3−(15))データ送信部300は、ネットワーク制御装置100を介して、サーバ2に対して、このClient Key Exchange、Change Cipher Spec、Finishedメッセージを送信する(ステップS13)。
(図3−(16))この後、クライアント1はサーバ2からのメッセージ受信待ち状態になる。
(図4−(5))データ受信部210は、クライアント1が送信したClient Key Exchange、Change Cipher Spec、Finishedメッセージを、ネットワーク制御装置110を介して受信する(ステップS14)。データ受信部210は、このClient Key Exchange、Change Cipher Spec、Finishedメッセージを、Client Key Exchange、Change Cipher Spec、Finishedメッセージを解釈するSSLネゴシエーション部410に送る。
(図4−(6))SSLネゴシエーション部410は、Client Key ExchangeメッセージからEncryptedPreMasterSecret、つまり2重暗号された乱数Aを読み出す。
(図4−(7))パスワード復号部710は、2重暗号された乱数Aをパスワードで復号化することによって、公開鍵Eと公開鍵Nで暗号化された乱数Aを求める(ステップS15)。
(図4−(8))公開鍵復号部610は、公開鍵Eと公開鍵Nで暗号化された乱数Aを、公開鍵Eと対となる秘密鍵Dと公開鍵Nで復号化し、乱数Aを求める(ステップS16)。
(図4−(9))共通鍵生成部810は、乱数Aの内、最後の48バイトをプリマスターシークレットとして扱い、プリマスターシークレットからマスターシークレットを生成して、そしてマスターシークレットから共通鍵暗号方式で用いる共通鍵を生成する。そして共通鍵生成部810は、この共通鍵を、暗号・復号化、およびMAC処理を行う共通鍵暗号・復号部860に渡す(ステップS17)。
なお先に説明したように、乱数Aは、プリマスターシークレットにおけるバージョン情報の設定、および、「PKCS #1 version 1.5」の暗号ブロックフォーマット(Encryption−block formatting)によるデータ整形が行われていないので、SSLネゴシエーション部410はこのチェックは行わない。ここはSSL/TLS暗号通信の仕様とは異なる。
(図4−(10))SSLネゴシエーション部410は、Change Cipher Specメッセージを処理する(ステップS18)。
(図4−(11))SSLネゴシエーション部410は、Finishedメッセージから2重暗号されたデータ部(MACを含む)を読み出す。そしてこの2重暗号されたデータ部(MACを含む)を共通鍵暗号・復号部860に渡す。
(図4−(12))共通鍵暗号・復号部860は、2重暗号されたデータ部(MACを含む)を共通鍵で復号化し、乱数Bで暗号化されたデータ部(MACを含む)を求める(ステップS19)。
(図4−(13))SSLネゴシエーション部410は、クライアントが生成すべきFinishedのデータ部(MACを含まない)を、自ら計算する(ステップS20)。また図示していないが、SSLネゴシエーション部410は、このFinishedのデータ部(MACを含まない)を共通鍵暗号・復号部860に渡し、Finishedのデータ部(MACを含まない)のMACを計算し、Finishedのデータ部(MACを含む)を取得するものとする。
(図4−(14))認証データ取得部910は、乱数Bで暗号化(XOR処理)されたFinishedのデータ部と、SSLネゴシエーション部410が計算して求めたFinishedのデータ部とのXOR処理を行い、乱数Bを求める(ステップS21)。
(図4−(15))SSLネゴシエーション部410は、Change Cipher Spec、Finishedメッセージを生成し、これをデータ送信部310に送る(ステップS22)。
(図4−(16))データ送信部310は、ネットワーク制御装置110を介して、クライアント1に対して、Change Cipher Spec、Finishedメッセージを送信する(ステップS22)。
(図4−(17))その後、サーバ2は再びクライアント1からのメッセージ受信待ち状態になる。
(図3−(16))クライアント1のデータ受信部200は、サーバ2が送信したChange Cipher Spec、Finishedメッセージを、ネットワーク制御装置100を介して受信する。データ受信部200は、Change Cipher Spec、Finishedメッセージを、Change Cipher Spec、Finishedメッセージを解釈するSSLネゴシエーション部400に送る(ステップS23)。
(図3−(17))SSLネゴシエーション部400は、Change Cipher Specメッセージを処理する。
(図3−(18))SSLネゴシエーション部400は、Finishedメッセージを処理する。なお、このFinishedメッセージを処理することで、クライアント1はサーバ2を認証できたことになる(ステップS23)。
(図3−(19))共通鍵暗号・復号部850は、乱数Bを共通鍵で暗号化し、これをデータ送信部300に送る(ステップS24)。
(図3−(20))データ送信部300は、ネットワーク制御装置100を介して、サーバ2に対して、この共通鍵で暗号化された乱数Bを送信する(ステップS25)。なおここの暗号化は、SSL/TLS暗号通信の仕様に従うので、MACの生成、および暗号化も行う。なお、乱数Bは平分で送信しても危険でなく、暗号化の必要はないが、SSL/TLS暗号通信の仕様に合わせるものとする。
(図4−(17))データ受信部210は、クライアント1が送信した共通鍵で暗号化された乱数Bを、ネットワーク制御装置110を介して受信する。データ受信部210は、この共通鍵で暗号化された乱数Bを、共通鍵暗号・復号部860に送る(ステップS26)。
(図4−(18))共通鍵暗号・復号部860は、暗号化された乱数Bを共通鍵で復号化し、乱数Bを求める(ステップS27)。
(図4−(19))認証部920は、自ら計算し求めた乱数Bと、復号した乱数Bとを比較(照合)し、クライアントがパスワードを知っている正規クライアントか否かを判断する(ステップS28)。
次に、図7を用いてクライアント1およびサーバ2の構成の他の例について説明する。図7は、発明の実施の形態1におけるクライアントおよびサーバの機能ブロックの第2例を示す図である。
ここでは乱数Bを共通鍵としてバージョン情報を暗号化し、これを乱数Bの代わりの認証データとしている。
クライアント1は、共通鍵で暗号した乱数Bの代りに、共通鍵暗号・復号部850(共通鍵暗号化手段)で、乱数Bを共通鍵として暗号化したバージョン情報をサーバ2に渡している。
サーバ2は、乱数Bで暗号化されたバージョン情報を、共通鍵暗号・復号部860(共通鍵暗号化手段)で計算して求めた乱数Bを共通鍵として復号し、この求めたバージョン情報とあるべきバージョン情報とを、認証部920で照合している。なおこの共通鍵暗号はXOR処理等のような単純な暗号化ではなく、第3者が逆算できないような複雑な共通鍵暗号とした方が好ましい。なお、図2および図7において、説明をわかりやすくするために、暗号および(または)復号を行う機能ブロックを複数に分けて説明したが、勿論、1つの機能ブロックが複数の暗号処理および(または)復号処理を行ってもよい。
次に、図5を用いてクライアント1およびサーバ2のハードウェアの構成について説明する。図5は、本発明の実施の形態1におけるクライアントおよびサーバのハードウェア構成の一例を示す図である。
クライアント1は、プログラム処理を実行するCPU10、一時的な記憶メモリであるRAM20、キーボード等の入力装置50とネットワークのデータ送受信を実行するMAC(Media Access Control)/PHY40を備える。
一方、サーバ2は、プログラム処理を実行するCPU11、一時的な記憶メモリであるRAM21、書き換え不可の不揮発性メモリであるROM31、ネットワークのデータ送受信を実行するMAC/PHY41を備える。
また、クライアント1とサーバ2はMAC/PHY40とMAC/PHY41を介してネットワークで接続されている。
はじめにクライアント1のハードウェア構成に関して説明を行う。図3に示したクライアント1の各処理部は、CPU10、およびRAM20で実行される。但し、入力部750は、入力装置50を外部インターフェースとして動作させ、ユーザが入力したパスワードを取得する。
乱数生成部500(乱数生成手段)が生成した乱数Aと乱数B、および、共通鍵生成部800が生成した共通鍵は、RAM20に保存される。なお、安全上、不必要になった時点で直ちに消去するのが好ましい。
また、サーバ2からSSLネゴシエーション部400が取得した公開鍵Eと公開鍵NもRAM20に保存されるが、公開鍵は新たな公開鍵を取得した際に上書きするものとすればよく、不必要になった時点で直ちに消去する必要はない。
MAC/PHY40は、ネットワーク通信を制御するハードウェアであり、ネットワーク制御装置100を実現するものである。
次に、サーバ2のハードウェア構成に関して説明を行う。図3に示したサーバ2の各処理部は、CPU11、およびRAM21で実行される。
クライアント1から取得した乱数Aと乱数B、および、共通鍵生成部810が生成した共通鍵は、RAM21に保存される。なお、安全上、不必要になった時点で直ちに消去するのが好ましい。
次に、秘密鍵Dと公開鍵N、および、パスワードはROM31に保存されるが、利用時にRAM21に移動されてもよい。なお安全上は、秘密鍵Dは耐タンパ装置等、セキュリティの高いメモリに保存するのが好ましい。
MAC/PHY41は、ネットワーク通信を制御するハードウェアであり、ネットワーク制御装置110を実現するものである。
(実施の形態2)
以下、図6を用いて実施の形態2について説明する。図6は、本発明の実施の形態2におけるPAKE認証を示すシーケンス図である。具体的には、ステップS25以降の処理が異なる。実施の形態1では、クライアントはサーバに対して、乱数Bをデータとして提示しているが、本実施の形態では、クライアント1はサーバ2に対して、SSL/TLSネゴシエーションの中で乱数Bを提示している。以下、本実施の形態では、ステップS25以降の処理をステップS30〜S36として説明する。
クライアント1がサーバ2に対して、SSLの再接続を行う。具体的には、クライアント1はSession IDに、ステップS4で受信したServer Helloで指定されたSession IDを設定し、かつ、Random Bytesに乱数Bを設定したClient Helloを生成し、これをサーバ2に送信する(ステップ30)。なお、SSL/TLSの再接続なので、共通鍵生成には、すでに生成したマスターシークレットが利用される。
また、SSLの再接続を行う前に、一端TCPポートをクローズしない場合は、これ以降のSSL/TLSネゴシエーションでは、メッセージのデータ部は共通鍵で暗号化されるが、説明を簡単にするため、ここではメッセージのデータ部は非暗号であるものとして説明を行う。
なおここでは、乱数BをRandom Bytesに設定したが、乱数Bの設定箇所はこれに限られるものではなく、例えば、Client Helloの拡張データ(extra data)等、SSL/TLSネゴシエーションで利用する各メッセージの他の部分に挿入してもよい。
サーバ2はクライアント1から送信されたClient Helloを受信し、処理する(ステップS31)。
サーバ2は自らが計算して保持する乱数Bと、Client Helloから取得した乱数Bとを比較(照合)する。ここで一致すれば、クライアント1はパスワードを知る正しいクライアントであると判断できる。これにより、クライアント認証が実施される(ステップS32)。
そして、サーバ2はクライアント1に対してServer Hello、Change Cipher Spec、Finishedを生成し、送信する(ステップS33)。
クライアント1はこれらを受信し、処理する(ステップS34)。そして、クライアント1はサーバ2に対してChange Cipher Spec、Finishedを生成し、送信する(ステップS35)。サーバ2はこれらを受信し、処理する(ステップS36)。
なお本実施の形態では、SSL/TLSネゴシエーション後、直ちにSSL/TLSの再接続、即ちクライアント認証を行っているが、これはいつ行っても構わない。クライアント認証が必要になった時点で、サーバ2がHello Reauest等で合図をし、それを受けてクライアント認証を行うものとしてもよい。
なおこの図6に示す一連のSSL/TLSネゴシエーションは乱数Bの設定、および、クライアント認証を除けば、すべてSSL/TLS暗号通信の仕様に従っている。
本実施の形態においてもネットワーク上で送受信されるデータフォーマットは、第3者から見ればSSL/TLS暗号通信の仕様に従っているので(図6のEncryptedPreMasterSecret、クライアント1が送信するFinishedはSSL/TLS暗号通信に従っていないが、暗号化データのため、第3者には、SSL/TLS暗号通信に従っているか否かは判断できない)、本実施の形態も同様に、第3者から見れば、通常のSSL/TLSネゴシエーションに見える。
従って、SSL/TLS暗号通信に対応したファイヤーウォールであれば、通信が遮断されることなく、PAKE認証を行うことが可能である。
しかも、SSL/TLS暗号通信でPAKE認証を行いながらも、公開鍵暗号の実施回数は1回のみなので、装置にかかる負荷は小さい。
本実施の形態は実施の形態1と比較して、更に利点がある。
通常、SSL/TLS暗号通信を行うアプリケーションプログラムは、SSL/TLS暗号通信機能を、アプリケーションプログラムとは別のOpenSSLのようなSSL/TLS暗号通信モジュールを利用することで実現している。
本実施の形態では、乱数B、つまり認証データの提示を、すべてSSL/TLSネゴシエーションの中で行っている。従って、アプリケーションプログラムがSSL/TLS暗号通信モジュールに対して一度パスワードを与えれば、後はSSL/TLS暗号通信モジュールがすべて実行できる。そのため、アプリケーションプログラムのつくりが複雑にならない。
なお本実施の形態では、SSL/TLSの再接続で乱数Bを提示したが、もう一度、通常のSSL/TLSネゴシエーションをやり直し、その中で乱数Bを提示してもよい。但し、この方法の場合、公開鍵暗号は2度実行しなければならず、装置にかかる負荷が大きくなる。また、通常のSSL/TLSネゴシエーションをやり直す場合は、乱数Bの代りに、前回のSSL/TLSネゴシエーションで生成したプリマスターシークレットやマスターシークレットを提示することも可能である。但し、前回のSSL/TLSネゴシエーション中のメッセージ改ざんをチェックできないので好ましくない。
なおここでは、SSL/TLSの再接続を行っているが、SSL/TLSの再接続の負荷は公開鍵暗号に比べれば非常に小さいので、パフォーマンス的には問題にならない。
本発明にかかるPAKE認証は、SSL/TLSネゴシエーション中に実施できるので、ファイヤーウォール等の通信機器との親和性がよく、しかも公開鍵暗号の回数を1回に制限できるため、サーバ費用の低減を図れる等有用である。
1 クライアント
2 サーバ
10 CPU(クライアント側)
11 CPU(サーバ側)
20 RAM(クライアント側)
21 RAM(サーバ側)
31 ROM(サーバ側)
40 MAC/PHY(クライアント側)
41 MAC/PHY(サーバ側)
50 入力装置
100 ネットワーク制御装置(クライアント側)
110 ネットワーク制御装置(サーバ側)
200 データ受信部(クライアント側)
210 データ受信部(サーバ側)
300 データ送信部(クライアント側)
310 データ送信部(サーバ側)
400 SSLネゴシエーション部(クライアント側)
410 SSLネゴシエーション部(サーバ側)
500 乱数生成部
600 公開鍵暗号部(クライアント側)
610 公開鍵復号部(サーバ側)
700 パスワード暗号部(クライアント側)
710 パスワード復号部(サーバ側)
750 入力部
800 共通鍵生成部(クライアント側)
810 共通鍵生成部(サーバ側)
850 共通鍵暗号・復号部(クライアント側)
860 共通鍵暗号・復号部(サーバ側)
910 認証データ取得部
920 認証部

Claims (6)

  1. パスワードを共有する他の暗号通信装置と鍵交換処理を行う暗号通信装置であって、
    第1の乱数および第2の乱数を生成する乱数生成部と、
    前記他の暗号通信装置の公開鍵を用いて前記第1の乱数に基づく情報を暗号化する第1の暗号化部と、
    前記第1の暗号化部によって暗号化された前記第1の乱数に基づく情報を、前記パスワードを用いて暗号化する第2の暗号化部と、
    前記第2の乱数に基づく情報を前記第1の乱数を用いて暗号化する第3の暗号化部と、
    前記第2の暗号化部によって暗号化された前記第1の乱数に基づく情報を含む第1の信号、および前記第3の暗号化部によって暗号化された前記第2の乱数に基づく情報を含む第2の信号を前記他の暗号通信装置に送信する送信部と、を備え、
    前記送信部は、SSLハンドシェイクに基づいて前記第1の信号を鍵交換信号として送信すると共に、SSLハンドシェイクに基づいて前記第2の信号を検証信号として送信する、暗号通信装置。
  2. 請求項1記載の暗号通信装置であって、
    前記送信部は、前記第1の信号と前記第2の信号とを連続的に前記他の暗号通信装置に送信する、暗号通信装置。
  3. 請求項1または2記載の暗号通信装置であって、
    前記第3の暗号化部は、前記他の暗号通信装置にとって既知のデータを前記第1の乱数および前記第2の乱数を用いて暗号化する、暗号通信装置。
  4. 請求項2記載の暗号通信装置であって、
    前記他の暗号通信装置からの信号を受信する受信部を更に有し、
    前記受信部が、前記他の暗号通信装置から前記パスワードを有することを証明する信号を受信する場合、
    前記送信部は前記第2の乱数を前記他の暗号通信装置に送信する、暗号通信装置。
  5. 請求項3記載の暗号通信装置であって、
    前記既知のデータは、前記他の暗号通信装置との鍵交換処理における通信履歴である、暗号通信装置。
  6. パスワードを共有する第1の暗号通信装置と第2の暗号通信装置との間で、鍵交換処理を行う暗号通信システムであって、
    前記第1の暗号通信装置は、
    第1の乱数および第2の乱数を生成する乱数生成部と、
    前記第2の暗号通信装置の公開鍵を用いて前記第1の乱数を暗号化する第1の暗号化部と、
    前記第1の暗号化部によって暗号化された前記第1の乱数を前記パスワードを用いて暗号化する第2の暗号化部と、
    前記第2の乱数に基づく情報を前記第1の乱数を用いて暗号化する第3の暗号化部と、
    前記第2の暗号化部によって暗号化された前記第1の乱数を含む第1の信号、および前記第3の暗号化部によって暗号化された前記第2の乱数に基づく情報を含む第2の信号を前記第2の暗号通信装置に送信する送信部と、を有し、
    前記第2の暗号通信装置は、
    前記第1の信号および前記第2の信号を受信する受信部と、前記公開鍵の対となる秘密鍵および前記パスワードを用いて前記第2の暗号化部によって暗号化された前記第1の乱数を復号化し、前記第1の乱数を取得する復号化部と、
    前記復号化部が取得した前記第1の乱数を用いて、前記第3の暗号化部によって暗号化された前記第2の乱数に基づく情報から前記第2の乱数を算出する認証データ取得部と、
    を有し、
    前記送信部は、SSLハンドシェイクに基づいて前記第1の信号を鍵交換信号として送信すると共に、SSLハンドシェイクに基づいて前記第2の信号を検証信号として送信する、暗号通信システム。
JP2011101076A 2011-04-28 2011-04-28 暗号通信装置および暗号通信システム Active JP5845393B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011101076A JP5845393B2 (ja) 2011-04-28 2011-04-28 暗号通信装置および暗号通信システム
US13/455,992 US8577039B2 (en) 2011-04-28 2012-04-25 Cryptographic communication apparatus and cryptographic communication system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011101076A JP5845393B2 (ja) 2011-04-28 2011-04-28 暗号通信装置および暗号通信システム

Publications (2)

Publication Number Publication Date
JP2012235214A JP2012235214A (ja) 2012-11-29
JP5845393B2 true JP5845393B2 (ja) 2016-01-20

Family

ID=47067898

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011101076A Active JP5845393B2 (ja) 2011-04-28 2011-04-28 暗号通信装置および暗号通信システム

Country Status (2)

Country Link
US (1) US8577039B2 (ja)
JP (1) JP5845393B2 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5981761B2 (ja) * 2012-05-01 2016-08-31 キヤノン株式会社 通信装置、制御方法、プログラム
US9449167B2 (en) * 2012-09-12 2016-09-20 Infosys Limited Method and system for securely accessing different services based on single sign on
US8713311B1 (en) * 2012-11-07 2014-04-29 Google Inc. Encryption using alternate authentication key
KR101508859B1 (ko) * 2013-12-30 2015-04-07 삼성에스디에스 주식회사 클라이언트와 서버 간 보안 세션을 수립하기 위한 방법 및 장치
JP6226197B2 (ja) * 2014-05-23 2017-11-08 パナソニックIpマネジメント株式会社 証明書発行システム、クライアント端末、サーバ装置、証明書取得方法、及び証明書発行方法
EP2955871B1 (en) * 2014-06-12 2017-01-11 Nagravision S.A. Cryptographic method for securely exchanging messages and device and system for implementing this method
CN105635039B (zh) * 2014-10-27 2019-01-04 阿里巴巴集团控股有限公司 一种网络安全通信方法及通信装置
CN105491076B (zh) * 2016-01-28 2019-06-07 西安电子科技大学 一种面向空天信息网的异构网络端到端认证密钥交换方法
WO2019212579A1 (en) 2018-04-30 2019-11-07 Google Llc Managing enclave creation through a uniform enclave interface
WO2019212581A1 (en) 2018-04-30 2019-11-07 Google Llc Secure collaboration between processors and processing accelerators in enclaves
US11509643B2 (en) * 2018-04-30 2022-11-22 Google Llc Enclave interactions
CN110708282B (zh) * 2019-08-21 2023-06-02 苏州科技大学 一种针对双随机偏振编码加密系统的加密密钥获取方法
CN111131455B (zh) * 2019-12-24 2021-06-04 深信服科技股份有限公司 数据代理方法、装置、设备及存储介质
CN111263328B (zh) * 2020-01-17 2023-05-02 南京英锐创电子科技有限公司 车辆信息获取方法和车载设备
JP7400744B2 (ja) * 2021-01-14 2023-12-19 トヨタ自動車株式会社 車両制御システム
CN113326530B (zh) * 2021-06-29 2024-02-02 北京计算机技术及应用研究所 一种适用于通信双方秘钥共享的秘钥协商方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4029396B2 (ja) * 2003-02-25 2008-01-09 日本電信電話株式会社 通信制御システムと通信制御方法およびプログラム
JP2009296190A (ja) 2008-06-04 2009-12-17 Panasonic Corp 秘匿通信方法

Also Published As

Publication number Publication date
JP2012235214A (ja) 2012-11-29
US20120275601A1 (en) 2012-11-01
US8577039B2 (en) 2013-11-05

Similar Documents

Publication Publication Date Title
JP5845393B2 (ja) 暗号通信装置および暗号通信システム
US8130961B2 (en) Method and system for client-server mutual authentication using event-based OTP
WO2020087805A1 (zh) 基于双密值和混沌加密的可信测控网络认证方法
CN109728909B (zh) 基于USBKey的身份认证方法和系统
US11533297B2 (en) Secure communication channel with token renewal mechanism
US8670563B2 (en) System and method for designing secure client-server communication protocols based on certificateless public key infrastructure
US8291231B2 (en) Common key setting method, relay apparatus, and program
JP2018522500A (ja) 量子鍵配布プロセスのための認証方法、デバイス及びシステム
CN103763356A (zh) 一种安全套接层连接的建立方法、装置及系统
US20050076216A1 (en) Method for securing a communication
CN110020524B (zh) 一种基于智能卡的双向认证方法
KR20170076742A (ko) 보안 접속 및 관련 서비스를 위한 효율적인 개시
JP2009503934A (ja) 展性攻撃に対して改良された安全性を有する技術(これに限定されない)を含む非ワンタイムパッド暗号で暗号化した署名鍵を用いた、暗号認証、及び/又は共有暗号鍵の設定
US20110179478A1 (en) Method for secure transmission of sensitive data utilizing network communications and for one time passcode and multi-factor authentication
CN108599926B (zh) 一种基于对称密钥池的HTTP-Digest改进型AKA身份认证系统和方法
US11399019B2 (en) Failure recovery mechanism to re-establish secured communications
KR20170035665A (ko) 키 교환 장치 및 방법
CN110635901B (zh) 用于物联网设备的本地蓝牙动态认证方法和系统
CN104901935A (zh) 一种基于cpk的双向认证及数据交互安全保护方法
CN112713995A (zh) 一种用于物联网终端的动态通信密钥分发方法及装置
JP2016522637A (ja) 共有秘密を含意するセキュア化されたデータチャネル認証
CN108551391B (zh) 一种基于USB-key的认证方法
US20240113885A1 (en) Hub-based token generation and endpoint selection for secure channel establishment
CN112787990B (zh) 一种电力终端可信接入认证方法和系统
EP3185504A1 (en) Security management system for securing a communication between a remote server and an electronic device

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140409

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20140513

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20141007

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141125

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150123

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150602

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150615

R151 Written notification of patent or utility model registration

Ref document number: 5845393

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151