(57)【特許請求の範囲】
【請求項１】
第１の情報処理装置と第２の情報処理装置との間の相互認証方法であって、
前記第１の情報処理装置により、前記第２の情報処理装置を示す第２の識別情報に応じた第２の公開鍵を用いて、第１の乱数を暗号化することで第１の暗号データを生成し、
前記第１の情報処理装置から前記第２の情報処理装置に、前記第１の情報処理装置を示す第１の識別情報と前記第２の識別情報とを含む第１のメッセージを送信し、前記第１の暗号データを含む第２のメッセージを送信し、
前記第２の情報処理装置により、認証処理に用いる識別情報として、前記第１のメッセージに含まれる前記第２の識別情報を使用することを許可するか拒否するか判定し、
前記第２の識別情報の使用が許可される場合、
前記第２の情報処理装置により、前記第１の識別情報に応じた第１の公開鍵を用いて、第２の乱数を暗号化することで第２の暗号データを生成し、また、前記第２の乱数と前記第１の暗号データと前記第２の公開鍵に対応する第２の秘密鍵とから第２の共有鍵候補を生成し、前記第２の共有鍵候補を用いて第２の検証データを生成し、
前記第２の情報処理装置から前記第１の情報処理装置に、前記第２の暗号データを含む第３のメッセージを送信し、前記第２の検証データを含む第４のメッセージを送信し、
前記第１の情報処理装置により、前記第１の乱数と前記第２の暗号データと前記第１の公開鍵に対応する第１の秘密鍵とから第１の共有鍵候補を生成し、前記第１の共有鍵候補を用いて第１の検証データを生成し、
前記第１の情報処理装置により、前記第２の情報処理装置から受信された前記第２の検証データと前記第１の検証データとが一致するか検証し、
前記第１の情報処理装置から前記第２の情報処理装置に、前記第１の検証データを含む第５のメッセージを送信し、
前記第２の情報処理装置により、前記第１の情報処理装置から受信された前記第１の検証データと前記第２の検証データとが一致するか検証し、
前記第２の識別情報の使用が拒否される場合、
前記第１の情報処理装置により、前記第２の情報処理装置を示す他の第２の識別情報に応じた他の第２の公開鍵を用いて、前記第１の乱数または他の第１の乱数を暗号化することで他の第１の暗号データを生成し、
前記第１の情報処理装置から前記第２の情報処理装置に、前記他の第１の暗号データを含む第６のメッセージを送信し、
前記第２の共有鍵候補は、前記第１の暗号データに代えて前記他の第１の暗号データを用いて生成される、
相互認証方法。
【請求項２】
前記第２の識別情報の使用が拒否される場合、前記第２の情報処理装置は、前記他の第１の暗号データを受信する前に前記第２の暗号データを含む前記第３のメッセージを送信し、前記他の第１の暗号データを受信した後に前記第２の検証データを含む前記第４のメッセージを送信する、
請求項１記載の相互認証方法。
【請求項３】
認証装置であって、
他の認証装置を示す第１の識別情報と前記認証装置を示す第２の識別情報とを含む第１のメッセージを前記他の認証装置から受信し、第１の暗号データを含む第２のメッセージを前記他の認証装置から受信し、前記第１の暗号データを受信した後に、第２の暗号データを含む第３のメッセージを前記他の認証装置に送信し、第２の検証データを含む第４のメッセージを前記他の認証装置に送信し、前記第２の検証データを送信した後に、第１の検証データを含む第５のメッセージを前記他の認証装置から受信する通信部と、
認証処理に用いる識別情報として、前記第１のメッセージに含まれる前記第２の識別情報を使用することを許可するか拒否するか判定し、前記第２の識別情報の使用を許可する場合、前記第１の識別情報に応じた公開鍵を用いて乱数を暗号化することで前記第２の暗号データを生成し、前記乱数と前記第１の暗号データと前記第２の識別情報に応じた秘密鍵とから共有鍵候補を生成し、前記共有鍵候補を用いて前記第２の検証データを生成し、前記他の認証装置から受信された前記第１の検証データと前記第２の検証データとが一致するか検証する制御部と、
を有し、
前記第２の識別情報の使用を拒否する場合、前記通信部が、他の第１の暗号データを含む第６のメッセージを前記他の認証装置から受信し、前記制御部が、前記第１の暗号データに代えて前記他の第１の暗号データを用いて前記共有鍵候補を生成する認証装置。
【請求項４】
認証装置であって、
前記認証装置を示す第１の識別情報と他の認証装置を示す第２の識別情報とを含む第１のメッセージを前記他の認証装置に送信し、第１の暗号データを含む第２のメッセージを前記他の認証装置に送信し、前記第１の暗号データを送信した後に、第２の暗号データを含む第３のメッセージを前記他の認証装置から受信し、第２の検証データを含む第４のメッセージを前記他の認証装置から受信し、前記第２の検証データを受信した後に、第１の検証データを含む第５のメッセージを前記他の認証装置に送信する通信部と、
前記第２の識別情報に応じた公開鍵を用いて乱数を暗号化することで前記第１の暗号データを生成し、前記他の認証装置により、認証処理に用いる識別情報として前記第１のメッセージに含まれる前記第２の識別情報を使用することが許可された場合、前記乱数と前記第２の暗号データと前記第１の識別情報に応じた秘密鍵とから共有鍵候補を生成し、前記共有鍵候補を用いて前記第１の検証データを生成し、前記他の認証装置から受信された前記第２の検証データと前記第１の検証データとが一致するか検証する制御部と、
を有し、
前記他の認証装置により、前記第２の識別情報を使用することが拒否された場合、前記制御部が、前記他の認証装置を示す他の第２の識別情報に応じた他の公開鍵を用いて、前記乱数または他の乱数を暗号化することで他の第１の暗号データを生成し、前記通信部が、前記他の第１の暗号データを含む第６のメッセージを前記他の認証装置に送信する認証装置。
【請求項５】
コンピュータに、
他のコンピュータを示す第１の識別情報と前記コンピュータを示す第２の識別情報とを含む第１のメッセージを前記他のコンピュータから受信し、第１の暗号データを含む第２のメッセージを前記他のコンピュータから受信し、
認証処理に用いる識別情報として、前記第１のメッセージに含まれる前記第２の識別情報を使用することを許可するか拒否するか判定し、
前記第２の識別情報の使用を許可する場合、
前記第１の識別情報に応じた公開鍵を用いて、乱数を暗号化することで第２の暗号データを生成し、
前記乱数と前記第１の暗号データと前記第２の識別情報に応じた秘密鍵とから共有鍵候補を生成し、前記共有鍵候補を用いて第２の検証データを生成し、
前記第２の暗号データを含む第３のメッセージを前記他のコンピュータに送信し、前記第２の検証データを含む第４のメッセージを前記他のコンピュータに送信し、
前記第２の検証データを送信した後に、第１の検証データを含む第５のメッセージを前記他のコンピュータから受信し、
前記他のコンピュータから受信された前記第１の検証データと前記第２の検証データとが一致するか検証し、
前記第２の識別情報の使用を拒否する場合、
他の第１の暗号データを含む第６のメッセージを前記他のコンピュータから受信し、
前記第１の暗号データに代えて前記他の第１の暗号データを用いて前記共有鍵候補を生成する、
処理を実行させる認証プログラム。
【請求項６】
コンピュータに、
他のコンピュータを示す第２の識別情報に応じた公開鍵を用いて、乱数を暗号化することで第１の暗号データを生成し、
前記コンピュータを示す第１の識別情報と前記第２の識別情報とを含む第１のメッセージを前記他のコンピュータに送信し、前記第１の暗号データを含む第２のメッセージを前記他のコンピュータに送信し、
前記他のコンピュータにより、認証処理に用いる識別情報として前記第１のメッセージに含まれる前記第２の識別情報を使用することが許可された場合、
前記第１の暗号データを送信した後に、第２の暗号データを含む第３のメッセージを前記他のコンピュータから受信し、第２の検証データを含む第４のメッセージを前記他のコンピュータから受信し、
前記乱数と前記第２の暗号データと前記第１の識別情報に応じた秘密鍵とから共有鍵候補を生成し、前記共有鍵候補を用いて第１の検証データを生成し、
前記他のコンピュータから受信された前記第２の検証データと前記第１の検証データとが一致するか検証し、
前記第２の検証データを受信した後に、前記第１の検証データを含む第５のメッセージを前記他のコンピュータに送信し、
前記他のコンピュータにより、前記第２の識別情報を使用することが拒否された場合、
前記他のコンピュータを示す他の第２の識別情報に応じた他の公開鍵を用いて、前記乱数または他の乱数を暗号化することで他の第１の暗号データを生成し、
前記他の第１の暗号データを含む第６のメッセージを前記他のコンピュータに送信する、
処理を実行させる認証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は相互認証方法、認証装置および認証プログラムに関する。
【背景技術】
【０００２】
複数の情報処理装置がネットワークを介してデータ通信を行う場合、第三者によりデータが盗聴されるリスク、通信経路上でデータが改竄されるリスク、第三者が正規の情報処理装置になりすましているリスクなど、セキュリティ上のリスクが存在する。そこで、セキュリティを維持するために暗号通信技術が用いられることがある。暗号通信技術の例としては、ＳＳＬ（Secure Sockets Layer）やＴＬＳ（Transport Layer Security）などが挙げられる。ＳＳＬやＴＬＳは、ＷＷＷ（World Wide Web）通信、電子メールの送信、ＶＰＮ（Virtual Private Network）通信などの様々なデータ通信に利用可能である。
【０００３】
暗号通信技術では、公開鍵暗号技術を用いてハンドシェークが行われることがある。例えば、ハンドシェークにおいて、データ通信を行おうとする２つの情報処理装置それぞれが、通信相手の公開鍵を用いて乱数などの鍵材料を暗号化して送信する。公開鍵で暗号化された鍵材料は、その公開鍵に対応する秘密鍵をもつ正規の情報処理装置のみが復号できる。よって、暗号化された鍵材料を通信相手が正しく認識できたことを確認することで、２つの情報処理装置はそれぞれ通信相手を認証することができる。
【０００４】
また、例えば、ハンドシェークにおいて、２つの情報処理装置が独立に、当該２つの情報処理装置の間でやり取りした鍵材料と所定の鍵生成アルゴリズムとに基づいて共有鍵を生成する。２つの情報処理装置が正規の情報処理装置であれば、当該２つの情報処理装置によって生成される共有鍵は同一となる。よって、共有鍵そのものを送信しなくても、２つの情報処理装置が共有鍵を合意することができる。以降は、合意した共有鍵に基づいてデータを暗号化して送信することが可能となる。
【０００５】
なお、公開鍵暗号技術の１つとしてＩＤベース暗号技術（Identity Based Cryptography）が提案されている。ＩＤベース暗号技術では、数学的に生成された数値を公開鍵として用いる代わりに、ネットワークアドレスやホスト名や機器番号などの人が認識する識別子または当該識別子から変換された数値を公開鍵として用いる。ＩＤベース暗号技術では、通信相手の識別子を知れば暗号処理を行うことが可能であり、ある公開鍵が通信相手の公開鍵であることを証明する証明書が不要となることもある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−４２８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
暗号通信技術では、例えば、次のような手順で２つの情報処理装置がハンドシェークを行うことが考えられる。一方の情報処理装置が他方の情報処理装置にアクセスする。後者の情報処理装置は、前者の情報処理装置の公開鍵を用いて暗号化した鍵材料を返信する。前者の情報処理装置は、後者の情報処理装置の公開鍵を用いて暗号化した鍵材料を送信すると共に、鍵材料から共有鍵が正しく生成されたか確認するための検証データを生成して送信する。後者の情報処理装置も、検証データを生成して返信する。２つの情報処理装置がそれぞれ検証データを検証することで、共有鍵を合意したことを確認する。
【０００８】
しかし、上記のハンドシェークの手順によれば、２つの情報処理装置の間で４回の通信が行われる。もし通信回数を減らすことができれば、認証時間を短縮することができ、データ通信を開始するまでのオーバヘッドを減らすことができる。
【０００９】
１つの側面では、本発明は、認証時間が短縮された相互認証方法、認証装置および認証プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、第１の情報処理装置と第２の情報処理装置との間の相互認証方法が提供される。第１の情報処理装置により、第２の情報処理装置に関する第２の識別情報に応じた第２の公開鍵を用いて、第１の乱数を暗号化することで第１の暗号データを生成する。第１の情報処理装置から第２の情報処理装置に、第１の情報処理装置に関する第１の識別情報と第２の識別情報と第１の暗号データとを送信する。第２の情報処理装置により、第１の識別情報に応じた第１の公開鍵を用いて、第２の乱数を暗号化することで第２の暗号データを生成し、また、第２の乱数と第１の暗号データと第２の公開鍵に対応する第２の秘密鍵とから第２の共有鍵候補を生成し、第２の共有鍵候補を用いて第２の検証データを生成する。第２の情報処理装置から第１の情報処理装置に、第２の暗号データと第２の検証データとを送信する。第１の情報処理装置により、第１の乱数と第２の暗号データと第１の公開鍵に対応する第１の秘密鍵とから第１の共有鍵候補を生成し、第１の共有鍵候補を用いて第１の検証データを生成する。第１の情報処理装置により、第１の共有鍵候補を用いて第２の検証データを検証する。第１の情報処理装置から第２の情報処理装置に、第１の検証データを送信する。第２の情報処理装置により、第２の共有鍵候補を用いて第１の検証データを検証する。
【００１１】
また、１つの態様では、通信部と制御部とを有する認証装置が提供される。また、１つの態様では、コンピュータに実行させる認証プログラムが提供される。
【発明の効果】
【００１２】
１つの側面では、認証時間を短縮することができる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の認証システムの例を示す図である。
【図２】第２の実施の形態に係るシステムの一例を示した図である。
【図３】第２の実施の形態に係るクライアント装置の機能を実現可能なハードウェアの一例を示した図である。
【図４】第２の実施の形態に係るクライアント装置が有する機能の一例を示したブロック図である。
【図５】第２の実施の形態に係るサーバ装置が有する機能の一例を示したブロック図である。
【図６】第２の実施の形態に係る認証処理の流れ（エラーなし）を示したシーケンス図である。
【図７】第２の実施の形態に係る認証処理の流れ（エラーあり）を示したシーケンス図である。
【図８】ＴＬＳのハンドシェークに係る認証処理の流れ（比較例：エラーなし）を示したシーケンス図である。
【図９】第２の実施の形態に係るクライアント装置の状態遷移を示した図である。
【図１０】第２の実施の形態に係るサーバ装置の状態遷移を示した図である。
【図１１】第２の実施の形態の一変形例に係る認証処理の流れ（エラーあり）を示したシーケンス図である。
【図１２】第２の実施の形態の一変形例に係るクライアント装置の状態遷移を示した図である。
【図１３】第２の実施の形態の一変形例に係るサーバ装置の状態遷移を示した図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
＜１．第１の実施の形態＞
第１の実施の形態を説明する。
【００１５】
図１は、第１の実施の形態の認証システムの例を示す図である。
第１の実施の形態の認証システムは、認証装置１０，２０を有する。認証装置１０，２０は、相互認証を行うと共にデータ通信に用いる共有鍵を合意する。認証装置１０，２０は、ネットワークを介して通信を行う。第１の実施の形態で説明する各種情報は、例えば、ＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol）などのプロトコル上のメッセージに含めて送信できる。第１の実施の形態で説明する通信手順は、例えば、ＳＳＬ／ＴＬＳなどの暗号通信技術に適用することができる。
【００１６】
認証装置１０，２０は、情報処理装置やコンピュータと呼ばれるものであってもよい。認証装置１０，２０は、携帯電話機やノートＰＣ（Personal Computer）などの移動型装置でもよいし、デスクトップＰＣやサーバコンピュータなどの固定型装置でもよい。第１の実施の形態では、最初に認証装置１０が認証装置２０にアクセスする。このため、認証装置１０をクライアントと言うこともでき、認証装置２０をサーバと言うこともできる。
【００１７】
認証装置１０は、通信部１１および制御部１２を有する。認証装置２０は、通信部２１および制御部２２を有する。通信部１１，２１は、他の装置と通信を行う通信インタフェースである。通信部１１，２１は、ケーブルを介して通信を行う有線インタフェースでもよいし、無線リンクを介して通信を行う無線インタフェースでもよい。
【００１８】
制御部１２，２２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、制御部１２，２２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭ（Random Access Memory）などのメモリに記憶されたプログラムを実行する。プログラムには、以下に説明する処理を記載した認証プログラムが含まれる。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と言うこともある。
【００１９】
認証装置１０には、識別情報１３（第１の識別情報）が関連付けられる。識別情報１３は、認証装置１０または認証装置１０のユーザに関する何らかの情報である。識別情報１３としては、例えば、認証装置１０のＩＰアドレス、ホスト名、機器番号などを用いることができ、認証装置１０のユーザのユーザＩＤ、電話番号などを用いることもできる。同様に、認証装置２０には、識別情報２３（第２の識別情報）が関連付けられる。識別情報２３は、認証装置２０または認証装置２０のユーザに関する何らかの情報である。
【００２０】
認証装置１０に関して、公開鍵暗号技術に用いられる公開鍵１４（第１の公開鍵）と秘密鍵１５（第１の秘密鍵）とが定義される。公開鍵１４は公開されている一方、秘密鍵１５は認証装置１０のみが秘密に保持している。公開鍵１４によって暗号化されたデータは、秘密鍵１５によってのみ復号できる。公開鍵１４および秘密鍵１５は、識別情報１３に対応付けられる。同様に、認証装置２０に関して、公開鍵暗号技術に用いられる公開鍵２４（第２の公開鍵）と秘密鍵２５（第２の秘密鍵）とが定義される。公開鍵２４は公開されている一方、秘密鍵２５は認証装置２０のみが秘密に保持している。公開鍵２４によって暗号化されたデータは、秘密鍵２５によってのみ復号できる。公開鍵２４および秘密鍵２５は、識別情報２３に対応付けられる。
【００２１】
公開鍵暗号技術としてＩＤベース暗号技術を用いた場合、認証装置１０は、識別情報２３から公開鍵２４を生成することが可能である。また、認証装置２０は、識別情報１３から公開鍵１４を生成することが可能である。ただし、第１の実施の形態では、ＩＤベース暗号技術以外の公開鍵暗号技術を用いることも可能である。認証装置１０は、識別情報２３に対応する公開鍵２４を、認証装置１０の内部または外部に存在するデータベースから検索してもよいし、認証装置２０から直接取得してもよい。認証装置２０は、識別情報１３に対応する公開鍵１４を、認証装置２０の内部または外部に存在するデータベースから検索してもよいし、認証装置１０から直接取得してもよい。
【００２２】
ここで、通信部１１は、認証装置２０と次のような通信を行う。通信部１１は、識別情報１３，２３と暗号データ１８（第１の暗号データ）を認証装置２０に送信する。通信部１１は、暗号データ１８を送信した後、暗号データ２８（第２の暗号データ）と検証データ２９（第２の検証データ）を認証装置２０から受信する。通信部１１は、検証データ２９を受信した後、検証データ１９（第１の検証データ）を認証装置２０に送信する。
【００２３】
制御部１２は、乱数１７（第１の乱数）を生成し、識別情報２３に応じた公開鍵２４を用いて乱数１７を暗号化することで暗号データ１８を生成する。制御部１２は、暗号データ２８が受信されると、乱数１７と暗号データ２８と秘密鍵１５とから共有鍵候補１６（第１の共有鍵候補）を生成する。制御部１２は、共有鍵候補１６を用いて検証データ１９を生成する。検証データ１９は、例えば、共有鍵候補１６により暗号化される。また、制御部１２は、検証データ２９が受信されると、共有鍵候補１６を用いて検証データ２９を検証する。例えば、制御部１２は、認証装置２０と同様の方法で検証データ２９に相当する検証データを作成し、検証データ２９と比較する。この場合、両者が一致していれば検証成功であり、一致していなければ検証失敗となる。
【００２４】
通信部２１は、認証装置１０と次のような通信を行う。通信部２１は、識別情報１３，２３と暗号データ１８を認証装置１０から受信する。通信部２１は、暗号データ１８を受信した後に、暗号データ２８と検証データ２９を認証装置１０に送信する。通信部２１は、検証データ２９を送信した後に、検証データ１９を認証装置１０から受信する。
【００２５】
制御部２２は、識別情報１３が受信されると、乱数２７（第２の乱数）を生成し、識別情報１３に応じた公開鍵１４を用いて乱数２７を暗号化することで暗号データ２８を生成する。また、制御部２２は、暗号データ１８が受信されると、乱数２７と暗号データ１８と秘密鍵２５から共有鍵候補２６（第２の共有鍵候補）を生成する。制御部２２は、共有鍵候補２６を用いて検証データ２９を生成する。検証データ２９は、例えば、共有鍵候補２６により暗号化される。制御部２２は、検証データ１９が受信されると、共有鍵候補２６を用いて検証データ１９を検証する。例えば、制御部２２は、認証装置１０と同様の方法で検証データ１９に相当する検証データを作成し、検証データ１９と比較する。この場合、両者が一致していれば検証成功であり、一致していなければ検証失敗となる。
【００２６】
検証データ１９，２９の検証に成功することで、共有鍵候補１６と共有鍵候補２６とが同一であることが確認される。すなわち、認証装置１０と認証装置２０の間で共有鍵が合意される。以降、認証装置１０は共有鍵候補１６を共有鍵として用いて暗号通信を行い、認証装置２０は共有鍵候補２６を共有鍵として用いて暗号通信を行う。
【００２７】
また、乱数１７は認証装置２０の公開鍵２４で暗号化されるため、公開鍵２４に対応する秘密鍵２５を有する認証装置２０のみが乱数１７を認識できる。また、乱数２７は認証装置１０の公開鍵１４で暗号化されるため、公開鍵１４に対応する秘密鍵１５を有する認証装置１０のみが乱数２７を認識できる。よって、同一の共有鍵が生成されたことを確認することで、認証装置１０，２０は互いに通信相手を認証することができる。
【００２８】
なお、制御部２２は、識別情報１３，２３が受信されたとき、識別情報１３，２３を許容するか否か判定してもよい。識別情報１３，２３を許容する場合、制御部２２は上記の処理を続行する。一方、識別情報１３，２３の少なくとも一方を許容しない場合、制御部２２は認証装置１０との通信を終了してもよい。識別情報１３を許容しない場合としては、例えば、識別情報１３が所定のホワイトリストに載っていない場合や所定のブラックリストに載っている場合などが挙げられる。識別情報２３を許容しない場合としては、例えば、識別情報２３が認証装置２０を表していない場合や期限切れである場合などが挙げられる。その場合、制御部２２は、認証装置２０が識別情報２３として別の識別情報を選択し暗号データ１８を再送するための機会を与えてもよい。
【００２９】
ここで、第１の実施の形態の通信手順の効率性について検討する。
認証装置１０，２０の通信手順の他の例として、次のような手順が考えられる。まず、認証装置１０が識別情報１３を認証装置２０に送信する。認証装置２０は、認証装置１０からのアクセスに応答して、識別情報２３と暗号データ２８を認証装置１０に送信する。暗号データ１８をまだ受け取っていないため、この時点では検証データ２９は送信されない。認証装置１０は、暗号データ１８と検証データ１９を認証装置２０に送信する。認証装置２０は、検証データ２９を認証装置１０に送信する。通信手順の他の例によれば、認証装置１０，２０の間で４回の通信が行われることになる。
【００３０】
これに対し、第１の実施の形態の通信手順によれば、識別情報１３と共に暗号データ１８が認証装置１０から認証装置２０に早期に送信される。すなわち、暗号データ２８より前に暗号データ１８が送信される。よって、これに対する応答として、暗号データ２８と共に検証データ２９を認証装置２０から認証装置１０に送信することが可能となる。すなわち、検証データ１９より前に検証データ２９が送信される。その結果、検証データ１９が認証装置１０から認証装置２０に送信された後、検証データ２９を認証装置２０から認証装置１０に送信する通信が不要となり、通信回数を３回に削減することができる。以上から、認証装置１０，２０の間の認証時間を短縮することが可能となる。
【００３１】
＜２．第２の実施の形態＞
次に、第２の実施の形態について説明する。第２の実施の形態は、ＳＳＬやＴＬＳなどの暗号通信技術を用いてハンドシェークを行う際の通信負荷を低減する仕組みを提供する。
【００３２】
ＴＬＳの通信開始時に行われるハンドシェークでは、ClientHello、ServerHello、ServerHelloDone、ChangeCipherSpec、Certificate(S)、ServerKeyExchange、ClientKeyExchange、Finished(C)、Finished(S)などのメッセージが送受信される。相互認証でephemeral Diffie-Hellman（DHE）鍵交換を行う場合、ハンドシェークのイニシエータとして動作するクライアント装置と、レスポンダとして動作するサーバ装置との間では以下のようなメッセージの送受信が行われる。
【００３３】
まず、クライアント装置がClientHelloを送信する。ClientHelloを受信したサーバ装置は、ServerHello、Certificate(S)、ServerKeyExchangeをクライアント装置に送信する。Certificate(S)には証明書が含まれる。ServerKeyExchangeには、クライアント装置が共有鍵を生成する際に用いる鍵材料（サーバ生成鍵材料）が含まれる。なお、サーバ生成鍵材料の生成方法については後述する。
【００３４】
ServerKeyExchangeを受信したクライアント装置は、Certificate(S)に含まれる証明書を検証し、証明書に含まれるサーバ装置の公開鍵を用いて鍵材料（クライアント生成鍵材料）を生成する。また、クライアント装置は、サーバ装置が共有鍵を生成する際に用いる鍵材料（クライアント生成鍵材料）と、サーバ生成鍵材料とを用いてマスター秘密情報を生成し、マスター秘密情報を用いて検証子（クライアント生成検証子）を生成する。なお、クライアント生成鍵材料およびマスター秘密情報の生成方法については後述する。
【００３５】
クライアント装置は、ClientKeyExchangeにクライアント生成鍵材料を含め、クライアント生成検証子をFinished(C)に含め、ClientKeyExchangeおよびFinished(C)をサーバ装置に送信する。ClientKeyExchangeおよびFinished(C)を受信したサーバ装置は、サーバ生成鍵材料とクライアント生成鍵材料とを用いて、クライアント装置が生成するマスター秘密情報と同じマスター秘密情報を生成する。サーバ装置は、クライアント生成検証子を検証し、マスター秘密情報を用いて検証子（サーバ生成検証子）を生成する。
【００３６】
サーバ装置は、Finished(S)にサーバ生成検証子を含め、Finished(S)をクライアント装置に送信する。Finished(S)を受信したクライアント装置は、Finished(S)に含まれるサーバ生成検証子を検証する。クライアント生成検証子およびサーバ生成検証子の検証が成功すれば、処理途中で鍵材料が改ざんされていないと言え、鍵交換／鍵合意が正しく行われたことが確認できる。以降、クライアント装置およびサーバ装置は、マスター秘密情報を用いることで安全なデータ通信を行うことができる。
【００３７】
なお、上記のシーケンスは一例であり、例えば、Certificate(S)などの処理および証明書の検証処理を省略する変形が可能である。また、ServerKeyExchange、ClientKeyExchangeに含まれる鍵材料の生成、およびマスター秘密情報の生成にＩＤベース暗号技術を用いる変形も可能である。ClientHelloやServerHelloに識別子を含めて送信する変形や、ClientHelloにＩＤベース暗号技術用の公開パラメータを含める変形も可能である。
【００３８】
第２の実施の形態に係る技術は、上記のようなハンドシェークを行う際に、相手の応答を待たずに続けて送信できるメッセージ群の送受信回数を低減する仕組みを提供する。
ここで、鍵および鍵材料の生成方法を含む鍵交換の仕組みについて説明する。
【００３９】
以下、標数をpとして、素体Fpで定義される楕円曲線上の加法巡回群をE(Fp)と表記する。また、E(Fp)の位数＃E(Fp)を割り切る最大素数をrとし、r|pk-1を満たすkを埋め込み次数と呼ぶ。r|pk-1はrがpk-1の約数であることを表す。また、E(Fp)における位数rの部分加法群をE(Fp){r}とする。
【００４０】
ここで、下記の式（１）により双線形写像eを定義する。双線形写像eは、巡回群G1の元および巡回群G2の元を入力として拡大体G3上の元を出力する関数（ペアリング関数）で表現される。なお、G／HはGのHに対する商群又は剰余群である。また、Fpk*／（Fpk*）rは、r乗すると１になるFpk*の元からなる巡回群である。
【００４１】
e：G2×G1→G3  （又は、e：G1×G2→G3），
但し、
G1：E(Fp){r}，
G2：E(Fpk){r}，
G3：Fpk*／(Fpk*)r
…（１）
また、０から（r-1）までの整数でなる群をZrと表記する。Zrの元α（α∈Zr）、巡回群G1又はG2の元P（P∈G1又はG2）について、スカラー倍算αPは、Pをα個加算する演算と定義される。さらに、拡大体G3の元x（x∈G3）について、べき乗算xαは、xをα個乗算する演算計算と定義される。このとき、双線形性とは、下記の式（２）を満たす性質をいう。
【００４２】
e(xP，Q) = e(P，xQ) = e(P，Q)x
…（２）
マスター秘密鍵s（s∈Zr）を決定して秘密に保持するPKG（Private Key Generator）は、公開パラメータとしてP（P∈G1）、Q（Q∈G2）、e、H(ハッシュ関数）、P0（P0=sP∈G1）を決定し、（P，Q，e，H，P0）を公開する。なお、マスター秘密鍵sは上述したマスター秘密情報とは異なる。
【００４３】
例えば、サーバ装置が識別子IDAに対応し、クライアント装置が識別子IDBに対応し、サーバ装置およびクライアント装置はそれぞれ識別子IDA、IDBを知っているとする。識別子IDAに対応する公開鍵PAは、下記の式（３）で定義され、公開パラメータを用いて誰でも算出できる。同様に、識別子IDBに対応する公開鍵PBは、下記の式（４）で定義され、公開パラメータを用いて誰でも算出できる。
【００４４】
識別子IDAに対応するプライベート鍵SAは、下記の式（５）で定義され、マスター秘密鍵sを保持しているPKGだけが算出できる。同様に、識別子IDBに対応するプライベート鍵SBは、下記の式（６）で定義され、マスター秘密鍵sを保持しているPKGだけが算出できる。PKGは、識別子IDAで認証を受ける権利のある正しい主体（サーバ装置）にプライベート鍵SAを通知する。また、PKGは、識別子IDBで認証を受ける権利のある正しい主体（クライアント装置）にプライベート鍵SBを通知する。
【００４５】
PA = aP + P0= (a+s)P，
但し、a = H(IDA)
…（３）
PB = bP + P0 = (b+s)P，
但し、b = H(IDB)
…（４）
SA = (a+s)-1Q
…（５）
SB = (b+s)-1Q
…（６）
クライアント装置とサーバ装置との間で鍵交換を行う場合、サーバ装置は、乱数rAを生成し、公開鍵PBを用いてサーバ生成鍵材料RA（RA=rAPB）を生成する。そして、サーバ装置は、サーバ生成鍵材料RAをクライアント装置に送信する。クライアント装置は、乱数rBを生成し、公開鍵PAを用いてクライアント生成鍵材料RB（RB=rBPA）を生成する。そして、クライアント装置は、クライアント生成鍵材料RBをサーバ装置に送信する。
【００４６】
サーバ生成鍵材料RAを受信したクライアント装置は、プライベート鍵SB、サーバ生成鍵材料RA、乱数rB、および公開パラメータを用いて共有鍵ZB（ZB=e(RA,rBSB)）を計算する。一方、クライアント生成鍵材料RBを受信したサーバ装置は、プライベート鍵SA、クライアント生成鍵材料RB、乱数rA、および公開パラメータを用いて共有鍵ZA（ZA=e(RB,rASA)）を計算する。なお、上記の共有鍵は、セッション鍵と呼ばれることもあるが、本稿では共有鍵と呼ぶことにする。
【００４７】
上記の共有鍵ZA、ZBは、サーバ生成鍵材料RAおよびクライアント生成鍵材料RBが途中で改ざんされていなければ、下記の式（７）および式（８）より一致する。つまり、サーバ装置およびクライアント装置は共有鍵を得ることができ、鍵交換が成立する。なお、上述したＴＬＳの通信開始時に行われるハンドシェークでは、クライアント生成検証子およびサーバ生成検証子を用いて改ざんの有無が検証されている。
【００４８】
ZB=e(RA,rBSB)=e(rAPB,rBSB)
=e(PB,SB)rArB
=e((b+s)P,(b+s)-1Q)rArB
=e(P，Q)rArB
…（７）
ZA=e(RB,rASA)=e(rBPA,rASA)
=e(PA,SA)rArB
=e((a+s)P,(a+s)-1Q)rArB
=e(P，Q)rArB
…（８）
なお、ＩＤベース暗号技術を利用して鍵交換を行う方式には、上記の他にも、乱数を相手の公開鍵で暗号化したものを鍵材料として利用する方法などがある。この場合、鍵材料を受け取った相手が秘密鍵で鍵材料から乱数を復号できるため、復号された乱数を共有鍵として利用することができる。
【００４９】
ＴＬＳでは、上記の共有鍵ZA、ZBがプリマスター秘密情報として利用され、プリマスター秘密情報に基づいてマスター秘密情報が生成される。そして、マスター秘密情報を用いて通信データを暗号化することで、クライアント装置とサーバ装置との間で暗号通信が実現される。プリマスター秘密情報からマスター秘密情報を生成する仕組みは、ＴＬＳ仕様の中で以下のように決められている。
【００５０】
プリマスター秘密情報（pre_master_secret）からマスター秘密情報（master_secret）を生成する処理は、ＴＬＳの仕様（例えば、「T.Dierks and C.Allen. The TLS Protocol Version 1.0, IETF Request for Comments (RFC) 2246, January 1999」を参照）で下記の式（９）のように定義されている。
【００５１】
master_secret = PRF(pre_master_secret,"master secret",
ClientHello.random + ServerHello.random) {0..47}
…（９）
上記の式（９）の中で"master secret"は、「master secret」という固定文字列（ラベル）のバイト列を表す。また、ClientHello.random、ServerHello.randomは、それぞれClientHello、ServerHelloで送られる乱数である。{0..47}は、任意長のバイト列を出力できるPRFが出力する出力値の先頭４８バイトを意味する。PRFは、下記の式（１０）のように定義されている。
【００５２】
PRF(secret,label,seed) = P_MD5(S01,label+seed) XOR P_SHA-1(S02,label+seed)
…（１０）
上記の式（１０）の中でsecretは秘密鍵である。S01は、secretをバイト単位で前後２分割したとき前半部のバイト列である。一方、S02は、secretをバイト単位で前後２分割したとき後半部のバイト列である。但し、secretが奇数バイトの場合は、secretの中央の１バイトがS01の最後のバイトとS02の最初のバイトとに重複して使われる。「+」はバイト列の連結を意味する。
【００５３】
P_hash(secret,seed)は、秘密値secretおよび付加情報seedからハッシュ関数hashによって任意の長さのバイト列を生成する関数である。P_hash(secret,seed)は、下記の式（１１）のように定義される。HMAC_hash(secret,value)はvalueに対するHMAC（Hash-based Message Authentication Code）である。また、関数Aは、i=1,2,3,...について、下記の式（１２）のように定義される。
【００５４】
P_hash(secret,seed) = HMAC_hash(secret,A(1)+seed) +
HMAC_hash(secret,A(2)+seed) +
HMAC_hash(secret,A(3)+seed) + ...
…（１１）
A(0) = seed,
A(i) = HMAC_hash(secret,A(i-1))
…（１２）
マスター秘密情報は、プリマスター秘密情報を秘密鍵とし、ClientHelloとServerHelloに含まれる乱数の連結を付加情報（シード）として、HMAC-MD1で４８バイトに引き伸ばした値とHMAC-SHA-1で４８バイトに引き伸ばした値をXORしたものとして与えられる。
【００５５】
［２−１．システム］
次に、図２を参照しながら、第２の実施の形態に係るシステムについて説明する。図２は、第２の実施の形態に係るシステムの一例を示した図である。
【００５６】
図２に示すように、第２の実施の形態に係るシステムは、ネットワーク７４を介して接続されたクライアント装置１００とサーバ装置２００とを有する。
クライアント装置１００およびサーバ装置２００はコンピュータである。例えば、クライアント装置１００は、携帯電話機、スマートフォン、タブレット端末、ＰＣなどのコンピュータである。サーバ装置２００は、例えば、ＰＣや汎用計算機などのコンピュータである。
【００５７】
なお、クライアント装置１００は、ハンドシェークの際にイニシエータ（Initiator）として動作するコンピュータである。サーバ装置２００は、ハンドシェークの際にレスポンダ（Responder）として動作するコンピュータである。
【００５８】
ネットワーク７４は、有線又は無線のネットワークである。クライアント装置１００は、例えば、ＴＣＰ／ＩＰなどのプロトコル上のメッセージに含めて情報をサーバ装置２００に送信できる。サーバ装置２００は、例えば、ＴＣＰ／ＩＰなどのプロトコル上のメッセージに含めて情報をクライアント装置１００に送信できる。
【００５９】
以下、図２のシステムを例に説明を進める。
［２−２．ハードウェア］
まず、図３を参照しながら、クライアント装置１００のハードウェアについて説明する。図３は、第２の実施の形態に係るクライアント装置の機能を実現可能なハードウェアの一例を示した図である。
【００６０】
クライアント装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１は、第１の実施の形態の制御部１２の一例である。
【００６１】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。
【００６２】
なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、クライアント装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００６３】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性メモリである。なお、クライアント装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００６４】
ＨＤＤ１０３は、ＯＳ（Operating System）やアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、クライアント装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００６５】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、クライアント装置１００に接続されたディスプレイ７１に画像を出力する。ディスプレイ７１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（LCD：Liquid Crystal Display）、プラズマディスプレイ（PDP：Plasma Display Panel）、有機ＥＬ（OEL：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００６６】
入力信号処理部１０５は、クライアント装置１００に接続された入力デバイス７２から入力信号を取得し、ＣＰＵ１０１に出力する。
入力デバイス７２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、クライアント装置１００に、複数の種類の入力デバイスが接続されていてもよい。なお、ディスプレイ７１および入力デバイス７２の少なくとも一方が、クライアント装置１００の筐体と一体に形成されていてもよい。
【００６７】
媒体リーダ１０６は、記録媒体７３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体７３として、例えば、フレキシブルディスク（FD：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（MO：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体７３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００６８】
通信インタフェース１０７は、ネットワーク７４に接続され、ネットワーク７４を介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００６９】
以上、クライアント装置１００のハードウェアについて説明した。なお、サーバ装置２００の機能も図３に例示したクライアント装置１００のハードウェアと同様のハードウェアを用いて実現可能である。そのため、サーバ装置２００が有する機能を実現可能なハードウェアの詳細な説明は省略する。
【００７０】
［２−３．機能］
次に、クライアント装置１００およびサーバ装置２００が有する機能について説明する。
【００７１】
（クライアント装置１００）
まず、図４を参照しながら、クライアント装置１００の機能について説明する。図４は、第２の実施の形態に係るクライアント装置が有する機能の一例を示したブロック図である。
【００７２】
図４に示すように、クライアント装置１００は、記憶部１１１、鍵材料生成部１１２、通信部１１３、共有鍵生成部１１４、および検証処理部１１５を有する。
なお、記憶部１１１の機能は、上述したＲＡＭ１０２やＨＤＤ１０３などを用いて実現できる。鍵材料生成部１１２、共有鍵生成部１１４、および検証処理部１１５の機能は、上述したＣＰＵ１０１などを用いて実現できる。通信部１１３の機能は、上述したＣＰＵ１０１や通信インタフェース１０７などを用いて実現できる。
【００７３】
記憶部１１１には、クライアント識別情報１１１ａおよびサーバ識別情報１１１ｂが格納されている。クライアント識別情報１１１ａは、クライアント装置１００を識別するための識別情報である。サーバ識別情報１１１ｂは、サーバ装置２００を識別するための識別情報である。なお、記憶部１１１には、PKGにより公開されている公開パラメータおよびPKGから通知されたプライベート鍵が格納されているものとする。
【００７４】
鍵材料生成部１１２は、乱数を生成し、生成した乱数およびサーバ装置２００の公開鍵を用いてクライアント生成鍵材料を生成する。通信部１１３は、ClientHello、ClientKeyExchange、Finished(C)などのメッセージをサーバ装置２００に送信する。また、通信部１１３は、サーバ装置２００からServerHello、ServerKeyExchange、Finished(S)などのメッセージを受信する。
【００７５】
共有鍵生成部１１４は、サーバ装置２００から受信したメッセージに含まれるサーバ生成鍵材料、鍵材料生成部１１２が生成した乱数、公開パラメータ、およびPKGから通知されているプライベート鍵を用いてマスター秘密情報を生成する。検証処理部１１５は、共有鍵生成部１１４が生成したマスター秘密情報を用いてクライアント生成検証子を生成する。また、検証処理部１１５は、サーバ装置２００から受信したメッセージに含まれるサーバ生成検証子を検証する。
【００７６】
（サーバ装置２００）
次に、図５を参照しながら、サーバ装置２００の機能について説明する。図５は、第２の実施の形態に係るサーバ装置が有する機能の一例を示したブロック図である。
【００７７】
図５に示すように、サーバ装置２００は、記憶部２１１、通信部２１２、鍵材料生成部２１３、共有鍵生成部２１４、および検証処理部２１５を有する。
なお、記憶部２１１の機能は、上述したＲＡＭ１０２やＨＤＤ１０３などに相当するハードウェア資源を用いて実現できる。鍵材料生成部２１３、共有鍵生成部２１４、および検証処理部２１５の機能は、上述したＣＰＵ１０１などに相当するハードウェア資源を用いて実現できる。通信部２１２の機能は、上述したＣＰＵ１０１や通信インタフェース１０７などに相当するハードウェア資源を用いて実現できる。
【００７８】
記憶部２１１には、サーバ識別情報２１１ａが格納されている。サーバ識別情報２１１ａは、サーバ装置２００を識別するための識別情報である。なお、記憶部２１１には、PKGにより公開されている公開パラメータおよびPKGから通知されたプライベート鍵が格納されているものとする。また、記憶部２１１には、許容するクライアント装置を特定するためのクライアント識別情報のリストが格納されていてもよい。
【００７９】
通信部２１２は、ClientHello、ClientKeyExchange、Finished(C)などのメッセージをクライアント装置１００から受信する。また、通信部２１２は、ServerHello、ServerKeyExchange、Finished(S)などのメッセージをクライアント装置１００に送信する。鍵材料生成部２１３は、乱数を生成し、生成した乱数およびクライアント装置１００の公開鍵を用いてサーバ生成鍵材料を生成する。
【００８０】
共有鍵生成部２１４は、クライアント装置１００から受信したメッセージに含まれるクライアント生成鍵材料、鍵材料生成部２１３が生成した乱数、公開パラメータ、およびPKGから通知されているプライベート鍵を用いてマスター秘密情報を生成する。検証処理部２１５は、共有鍵生成部２１４が生成したマスター秘密情報を用いてサーバ生成検証子を生成する。また、検証処理部２１５は、クライアント装置１００から受信したメッセージに含まれるクライアント生成検証子を検証する。
【００８１】
以上、クライアント装置１００およびサーバ装置２００が有する機能について説明した。
［２−４．処理の流れ］
次に、クライアント装置１００およびサーバ装置２００がハンドシェーク時に実行する認証処理の流れについて説明する。
【００８２】
（シーケンス：サーバ識別情報のエラーなし）
まず、図６を参照しながら、認証処理に用いるサーバ識別情報としてクライアント装置１００がサーバ装置２００に送信した識別子をサーバ装置２００が許容する場合（エラーなしの場合）について認証処理の流れを説明する。図６は、第２の実施の形態に係る認証処理の流れ（エラーなし）を示したシーケンス図である。
【００８３】
なお、クライアント装置１００およびサーバ装置２００は、PKGが公開している公開パラメータ（P，Q，e，H，P0）を保持しているものとする。但し、Pは巡回群G1の生成元、Qは巡回群G2の生成元、eは上記の式（１）で与えられる双線形写像、Hはハッシュ関数、P0はPKGが秘密に保持するマスター秘密鍵sとPから生成される巡回群G1の生成元（P0=sP∈G1）である。
【００８４】
また、クライアント装置１００は、PKGから通知されるプライベート鍵SC（SC=(H(IDC)+s)-1Q）を保持しているものとする。一方、サーバ装置２００は、PKGから通知されるプライベート鍵SS0（SS0=(H(IDS0)+s)-1Q）およびSS1（SS1=(H(IDS1)+s)-1Q）の少なくとも１つを保持しているものとする。また、サーバ装置２００を識別するための識別子として、識別子IDS0、IDS1の少なくとも１つが利用できるものとする。
【００８５】
（Ｓ１０１）通信部１１３は、認証処理に用いるクライアント識別情報１１１ａ（識別子IDC）およびサーバ識別情報１１１ｂ（識別子IDS0）をClientHelloに含める。なお、識別子IDCおよびIDS0を含むClientHelloをClientHello{IDC,IDS0}と表記する場合がある。通信部１１３は、ClientHello{IDC,IDS0}をサーバ装置２００に送信する。
【００８６】
（Ｓ１０２）鍵材料生成部１１２は、乱数rCを生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS0とを用いてサーバ装置２００の公開鍵PS0（PS0=H(IDS0)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rCおよびサーバ装置２００の公開鍵PS0を用いてクライアント生成鍵材料RC0（RC0=rCPS0）を生成する。
【００８７】
通信部１１３は、クライアント生成鍵材料RC0をClientKeyExchangeに含める。なお、クライアント生成鍵材料RC0を含むClientKeyExchangeをClientKeyExchange{RC0}と表記する場合がある。通信部１１３は、ClientKeyExchange{RC0}をサーバ装置２００に送信する。
【００８８】
ところで、ClientHelloおよびClientKeyExchangeは、それぞれサーバ装置２００の応答を待たずに送信することができる。そのため、図６の例では、ClientHello{IDC,IDS0}およびClientKeyExchange{RC0}の送信は、サーバ装置２００の応答を待たずに送信可能なメッセージ群（Ｃｏｍ＃１）の送信となる。このようなメッセージ群の送信をフライトと呼ぶ場合がある。例えば、Ｃｏｍ＃１は１回のフライトとなる。
【００８９】
（Ｓ１０３）通信部２１２は、ClientHello{IDC,IDS0}およびClientKeyExchange{RC0}を受信する。
鍵材料生成部２１３は、乱数rS0を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS0および公開鍵PCを用いてサーバ生成鍵材料RS0（RS0=rS0PC）を生成する。
【００９０】
共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC0と、乱数rS0と、識別子IDS0に対応するプライベート鍵SS0と、公開パラメータeとを用いて共有鍵ZSを生成する。この場合、共有鍵ZSは下記の式（１３）で与えられる。そして、共有鍵生成部２１４は、ＴＬＳ仕様（上記の式（９）から式（１２）を参照）に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【００９１】
ZS=e(RC0,rS0SS0)
…（１３）
（Ｓ１０４）通信部２１２は、Ｓ１０３で共有鍵ZSの生成に用いられた識別子IDS0をServerHelloに含める。なお、識別子IDS0を含むServerHelloをServerHello{IDS0}と表記する場合がある。通信部２１２は、ServerHello{IDS0}をクライアント装置１００に送信する。
【００９２】
（Ｓ１０５）通信部２１２は、Ｓ１０３で生成されたサーバ生成鍵材料RS0をServerKeyExchangeに含める。なお、サーバ生成鍵材料RS0を含むServerKeyExchangeをServerKeyExchange{RS0}と表記する場合がある。通信部２１２は、ServerKeyExchange{RS0}をクライアント装置１００に送信する。
【００９３】
（Ｓ１０６）検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。検証子verify_dataは１２バイトのバイト列である。ＴＬＳ仕様で検証子verify_dataは下記の式（１４）のように定義されている。
【００９４】
verify_data = PRF(master_secret,finished_label,
MD5(handshake_messages)+SHA-1(handshake_messages)){0..11}
…（１４）
上記の式（１４）の中でmaster_secretはマスター秘密情報MS、finished_labelは固定文字列（ラベル）のバイト列である。なお、サーバ生成検証子の場合、finished_labelは"server finished"のバイト列に設定される。後述するクライアント生成検証子の場合、finished_labelは"client finished"のバイト列に設定される。handshake_messagesは、ハンドシェーク内で、verify_dataを含めるFinishedより前に送受信された全てのメッセージを連結したバイト列である。
【００９５】
検証子verify_dataは、マスター秘密情報を秘密鍵とし、このverify_dataを含めるFinishedより前の全てのメッセージを連結したバイト列のMD5ハッシュ値とSHA-1ハッシュ値とを連結したバイト列を付加情報（シード）として、HMAC-MD1で１２バイトに引き伸ばした値とHMAC-SHA-1で１２バイトに引き伸ばした値とをXORしたものである。{0..11}は、任意長のバイト列を出力できるPRFが出力する出力値の先頭１１バイトを意味する。
【００９６】
検証処理部２１５は、上記の式（１４）に従い、マスター秘密情報MSを用いて検証子verify_dataを生成し、生成した検証子verify_dataをサーバ生成検証子とする。通信部２１２は、サーバ生成検証子をFinished(S)に含める。そして、通信部２１２は、Finished(S)をクライアント装置１００に送信する。
【００９７】
ところで、ServerHello、ServerKeyExchange、Finished(S)は、それぞれクライアント装置１００の応答を待たずに送信することができる。そのため、図６の例では、ServerHello{IDS0}、ServerKeyExchange{RS0}、およびFinished(S)の送信は、クライアント装置１００の応答を待たずに送信可能なメッセージ群（Ｃｏｍ＃２）の送信となる。つまり、Ｃｏｍ＃２は１回のフライトとなる。
【００９８】
（Ｓ１０７）通信部１１３は、ServerHello{IDS0}、ServerKeyExchange{RS0}、およびFinished(S)を受信する。
共有鍵生成部１１４は、ServerKeyExchangeから取り出したサーバ生成鍵材料RS0と、乱数rCと、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。この場合、共有鍵ZCは下記の式（１５）で与えられる。そして、共有鍵生成部１１４は、ＴＬＳ仕様（上記の式（９）から式（１２）を参照）に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【００９９】
ZC = e(RS0,rCSC)
…（１５）
（Ｓ１０８）検証処理部１１５は、マスター秘密情報MCを用いてクライアント生成検証子（検証子verify_data）を生成する。このとき、検証処理部１１５は、上述したマスター秘密情報MSと同様の方法で検証子verify_dataを生成する。但し、master_secretにマスター秘密情報MCを利用する点、finished_labelに"client finished"のバイト列を利用する点などが異なる。
【０１００】
検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致した場合には認証成功となる。一方、サーバ生成検証子とクライアント生成検証子とが一致しなかった場合には認証失敗となる。
【０１０１】
（Ｓ１０９）通信部１１３は、クライアント生成検証子をFinished(C)に含める。そして、通信部１１３は、Finished(C)をサーバ装置２００に送信する。なお、Finished(C)の送信（Ｃｏｍ＃３）も他のメッセージに対するサーバ装置２００の応答を待たずに行えるため、１回のフライトとなる。
【０１０２】
（Ｓ１１０）検証処理部２１５は、Finished(C)から取り出したクライアント生成検証子と、Ｓ１０６で生成したサーバ生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致した場合には認証成功となる。一方、サーバ生成検証子とクライアント生成検証子とが一致しなかった場合には認証失敗となる。
【０１０３】
Ｓ１１０の処理が完了すると、図６に示した一連の処理は終了する。上記のように、図６のシーケンスでは、ハンドシェークの際に生じるフライトの回数は３回（Ｃｏｍ＃１、＃２、＃３）となる。
【０１０４】
（シーケンス：サーバ識別情報のエラーあり）
次に、図７を参照しながら、認証処理に用いるサーバ識別情報としてクライアント装置１００がサーバ装置２００に送信した識別子をサーバ装置２００が許容しない場合（エラーありの場合）について認証処理の流れを説明する。図７は、第２の実施の形態に係る認証処理の流れ（エラーあり）を示したシーケンス図である。
【０１０５】
（Ｓ１２１）通信部１１３は、認証処理に用いるクライアント識別情報１１１ａ（識別子IDC）およびサーバ識別情報１１１ｂ（識別子IDS0）をClientHelloに含める。通信部１１３は、ClientHello{IDC,IDS0}をサーバ装置２００に送信する。
【０１０６】
（Ｓ１２２）鍵材料生成部１１２は、乱数rC0を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS0とを用いてサーバ装置２００の公開鍵PS0（PS0=H(IDS0)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC0およびサーバ装置２００の公開鍵PS0を用いてクライアント生成鍵材料RC0（RC0=rC0PS0）を生成する。
【０１０７】
通信部１１３は、クライアント生成鍵材料RC0をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC0}をサーバ装置２００に送信する。
（Ｓ１２３）通信部２１２は、ClientHelloから識別子IDS0を取り出し、認証に用いる識別子としてIDS0を許容するかを判定する。図７の例では、識別子IDS0は許容されない。例えば、識別子IDS0の有効期限が切れている場合などに識別子IDS0が許容されない。
【０１０８】
（Ｓ１２４）通信部２１２は、エラーの発生を示す情報errorと、認証に用いる識別子として許容可能な識別子IDS1とをServerHelloに含める。なお、error、IDS1を含むServerHelloをServerHello{error,IDS1}と表記する場合がある。通信部２１２は、ServerHello{error,IDS1}をクライアント装置１００に送信する。
【０１０９】
（Ｓ１２５）ServerHello{error,IDS1}を受信した通信部１１３は、識別子IDS1を許容して、識別子IDS1を用いた認証処理を進めるかを判断する。図７の例では識別子IDS1が許容される。
【０１１０】
鍵材料生成部１１２は、乱数rC1を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS1とを用いてサーバ装置２００の公開鍵PS1（PS1=H(IDS1)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC1およびサーバ装置２００の公開鍵PS1を用いてクライアント生成鍵材料RC1（RC1=rC1PS1）を生成する。
【０１１１】
通信部１１３は、クライアント生成鍵材料RC1をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC1}をサーバ装置２００に送信する。
（Ｓ１２６）通信部２１２は、ClientKeyExchange{RC1}を受信する。鍵材料生成部２１３は、乱数rS1を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS1および公開鍵PCを用いてサーバ生成鍵材料RS1（RS1=rS1PC）を生成する。
【０１１２】
共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC1と、乱数rS1と、識別子IDS1に対応するプライベート鍵SS1と、公開パラメータeとを用いて共有鍵ZSを生成する。この場合、共有鍵ZSは下記の式（１６）で与えられる。そして、共有鍵生成部２１４は、ＴＬＳ仕様（上記の式（９）から式（１２）を参照）に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【０１１３】
ZS=e(RC1,rS1SS1)
…（１６）
（Ｓ１２７）通信部２１２は、Ｓ１２６で生成されたサーバ生成鍵材料RS1をServerKeyExchangeに含める。通信部２１２は、ServerKeyExchange{RS1}をクライアント装置１００に送信する。
【０１１４】
（Ｓ１２８）検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。通信部２１２は、サーバ生成検証子をFinished(S)に含める。そして、通信部２１２は、Finished(S)をクライアント装置１００に送信する。
【０１１５】
（Ｓ１２９）通信部１１３は、ServerKeyExchange{RS1}、およびFinished(S)を受信する。
共有鍵生成部１１４は、ServerKeyExchangeから取り出したサーバ生成鍵材料RS1と、乱数rC1と、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。この場合、共有鍵ZCは下記の式（１７）で与えられる。そして、共有鍵生成部１１４は、ＴＬＳ仕様（上記の式（９）から式（１２）を参照）に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【０１１６】
ZC=e(RS1,rC1SC)
…（１７）
（Ｓ１３０）検証処理部１１５は、マスター秘密情報MCを用いてクライアント生成検証子（検証子verify_data）を生成する。また、検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致した場合には認証成功となる。一方、サーバ生成検証子とクライアント生成検証子とが一致しなかった場合には認証失敗となる。
【０１１７】
（Ｓ１３１）通信部１１３は、クライアント生成検証子をFinished(C)に含める。そして、通信部１１３は、Finished(C)をサーバ装置２００に送信する。
（Ｓ１３２）検証処理部２１５は、Finished(C)から取り出したクライアント生成検証子と、Ｓ１２８で生成したサーバ生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致した場合には認証成功となる。一方、サーバ生成検証子とクライアント生成検証子とが一致しなかった場合には認証失敗となる。
【０１１８】
Ｓ１３２の処理が完了すると、図７に示した一連の処理は終了する。図７のシーケンスでは、ハンドシェークの際に生じるフライトの回数は５回（Ｃｏｍ＃１、＃２、…、＃５）となる。
【０１１９】
（シーケンス：比較例）
ここで、比較例として、図８を参照しながら、ＴＬＳのハンドシェークに係る認証処理の流れ（比較例：エラーなし）について述べる。図８は、ＴＬＳのハンドシェークに係る認証処理の流れ（比較例：エラーなし）を示したシーケンス図である。
【０１２０】
（Ｓ９０１）クライアント装置は、クライアント識別情報として識別子IDCを選択し、識別子IDCをClientHelloに含めてサーバ装置に送信する。ClientHello{IDC}の送信（Ｃｏｍ＃１）は１回のフライトとなる。
【０１２１】
（Ｓ９０２）ClientHello{IDC}を受信したサーバ装置は、認証に利用するサーバ識別情報として識別子IDSを選択し、識別子IDSをServerHelloに含めてクライアント装置に送信する。
【０１２２】
（Ｓ９０３）サーバ装置は、サーバ生成鍵材料RSを生成し、サーバ生成鍵材料RSをServerKeyExchangeに含めてクライアント装置に送信する。
ServerHello{IDS}およびServerKeyExchange{RS}の送信（Ｃｏｍ＃２）は１回のフライトとなる。
【０１２３】
（Ｓ９０４）ServerHello{IDS}およびServerKeyExchange{RS}を受信したクライアント装置は、マスター秘密情報MCを生成する。
（Ｓ９０５）クライアント装置は、クライアント生成鍵材料RCを生成し、クライアント生成鍵材料RCをClientKeyExchangeに含めてサーバ装置に送信する。
【０１２４】
（Ｓ９０６）クライアント装置は、マスター秘密情報MCを用いてクライアント生成検証子を生成し、クライアント生成検証子をFinished(C)に含めてサーバ装置に送信する。
ClientKeyExchange{RC}およびFinished(C)の送信（Ｃｏｍ＃３）は１回のフライトとなる。
【０１２５】
（Ｓ９０７）ClientKeyExchange{RC}およびFinished(C)を受信したサーバ装置は、マスター秘密情報MSを生成する。
（Ｓ９０８）サーバ装置は、マスター秘密情報MSを用いてサーバ生成検証子を生成し、サーバ生成検証子を用いて、Finished(C)に含まれるクライアント生成検証子を検証する。
【０１２６】
（Ｓ９０９）サーバ装置は、サーバ生成検証子をFinished(S)に含めてクライアント装置に送信する。Finished(S)の送信（Ｃｏｍ＃４）は１回のフライトとなる。
（Ｓ９１０）Finished(S)を受信したクライアント装置は、クライアント生成検証子を用いて、Finished(S)に含まれるサーバ生成検証子を検証する。
【０１２７】
上記のように、比較例のようなＴＬＳのハンドシェークに係る認証処理（エラーなし）の場合、フライトの回数は４回となる。一方、図６に示した認証処理の場合、フライトの回数は３回となる。つまり、図６の方法を用いれば、フライトの回数を削減することができ、ハンドシェークの際に通信負荷を低減することが可能になる。
【０１２８】
（状態遷移：クライアント装置１００）
ここで、図９を参照しながら、クライアント装置１００の状態遷移について説明する。図９は、第２の実施の形態に係るクライアント装置の状態遷移を示した図である。
【０１２９】
（状態Ｃ０、Ｃ１、Ｃ２、Ｃ３について）
図６および図７に示したように、クライアント装置１００は相手から送信される特定のメッセージを待ち受け、そのメッセージを受けて処理を実行する。クライアント装置１００は、図９に示すように、ハンドシェークを実行する前の初期状態（状態Ｃ０）、サーバ装置２００から送信されるメッセージを待ち受ける待ち受け状態（状態Ｃ１、Ｃ３）、およびハンドシェークの処理を完了した完了状態（状態Ｃ２）をとる。
【０１３０】
クライアント装置１００は、特定の条件を満たした場合に状態を遷移させる。図９の例では、状態Ｃ０から状態Ｃ１への遷移を遷移Ｃ０１、状態Ｃ０から状態Ｃ３への遷移を遷移Ｃ０３、状態Ｃ１から状態Ｃ２への遷移を遷移Ｃ１２、および状態Ｃ３から状態Ｃ２への遷移を遷移Ｃ３２と表現している。遷移Ｃ０１、Ｃ０３、Ｃ１２、Ｃ３２の条件、およびその条件を満たした場合に実行される処理の内容は以下のように設定されている。
【０１３１】
（遷移Ｃ０１について）
遷移Ｃ０１の条件は、状態Ｃ０にあるクライアント装置１００が「ＴＬＳ通信を始めるとき」である。
【０１３２】
遷移Ｃ０１の中で、通信部１１３は、認証処理に用いるクライアント識別情報１１１ａ（識別子IDC）およびサーバ識別情報１１１ｂ（識別子IDS0）を決定する。
鍵材料生成部１１２は、乱数rC0を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS0とを用いてサーバ装置２００の公開鍵PS0（PS0=H(IDS0)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC0およびサーバ装置２００の公開鍵PS0を用いてクライアント生成鍵材料RC0（RC0=rC0PS0）を生成する。
【０１３３】
通信部１１３は、識別子IDC、IDS0をClientHelloに含める。そして、通信部１１３は、ClientHello{IDC,IDS0}をサーバ装置２００に送信する。また、通信部１１３は、クライアント生成鍵材料RC0をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC0}をサーバ装置２００に送信する。
【０１３４】
（遷移Ｃ０３について）
遷移Ｃ０３の条件は、状態Ｃ０にあるクライアント装置１００が「ServerHello（エラーあり）を受信したとき」である。
【０１３５】
通信部１１３が送信したClientHello{IDC,IDS0}に対し、サーバ装置２００が識別子IDS0を許容しない場合（図７参照）、例えば、サーバ装置２００からServerHello{error,IDS1}が送信される。このように、errorを含むServerHelloをクライアント装置１００が受信したとき、遷移Ｃ０３が生じる。
【０１３６】
遷移Ｃ０３の中で、通信部１１３は、ServerHelloから識別子IDS1を取り出し、識別子IDS1を許容して、識別子IDS1を用いた認証処理を進めるかを判断する。通信部１１３が識別子IDS1を許容しない場合、ハンドシェークは失敗となる。
【０１３７】
通信部１１３が識別子IDS1を許容する場合、鍵材料生成部１１２は、乱数rC1を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS1とを用いてサーバ装置２００の公開鍵PS1（PS1=H(IDS1)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC1およびサーバ装置２００の公開鍵PS1を用いてクライアント生成鍵材料RC1（RC1=rC1PS1）を生成する。
【０１３８】
通信部１１３は、クライアント生成鍵材料RC1をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC1}をサーバ装置２００に送信する。
（遷移Ｃ１２について）
遷移Ｃ１２の条件は、状態Ｃ１にあるクライアント装置１００が「ServerHello、ServerKeyExchange、Finished(S)を受信したとき」である。
【０１３９】
遷移Ｃ１２の中で、共有鍵生成部１１４は、ServerKeyExchangeからサーバ生成鍵材料RS0を取り出し、サーバ生成鍵材料RS0と、乱数rC0と、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。そして、共有鍵生成部１１４は、ＴＬＳ仕様に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【０１４０】
検証処理部１１５は、マスター秘密情報MCを用いてクライアント生成検証子（検証子verify_data）を生成する。また、検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。
【０１４１】
サーバ生成検証子とクライアント生成検証子とが一致した場合、通信部１１３は、クライアント生成検証子をFinished(C)に含め、Finished(C)をサーバ装置２００に送信する。
（遷移Ｃ３２について）
遷移Ｃ３２の条件は、状態Ｃ３にあるクライアント装置１００が「ServerKeyExchange、Finished(S)を受信したとき」である。
【０１４２】
遷移Ｃ３２の中で、共有鍵生成部１１４は、ServerKeyExchangeからサーバ生成鍵材料RS1を取り出す。また、共有鍵生成部１１４は、サーバ生成鍵材料RS1と、乱数rC1と、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。そして、共有鍵生成部１１４は、ＴＬＳ仕様に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【０１４３】
検証処理部１１５は、マスター秘密情報MCを用いてクライアント生成検証子（検証子verify_data）を生成する。また、検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。
【０１４４】
サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。サーバ生成検証子とクライアント生成検証子とが一致した場合、通信部１１３は、クライアント生成検証子をFinished(C)に含め、Finished(C)をサーバ装置２００に送信する。
【０１４５】
（状態遷移：サーバ装置２００）
次に、図１０を参照しながら、サーバ装置２００の状態遷移について説明する。図１０は、第２の実施の形態に係るサーバ装置の状態遷移を示した図である。
【０１４６】
（状態Ｓ０、Ｓ１、Ｓ２、Ｓ３について）
図６および図７に示したように、サーバ装置２００はクライアント装置１００から送信される特定のメッセージを待ち受け、そのメッセージを受けて処理を実行する。サーバ装置２００は、図１０に示すように、クライアント装置１００から送信されるメッセージを待ち受ける待ち受け状態（状態Ｓ０、Ｓ１、Ｓ３）、およびハンドシェークの処理を完了した完了状態（状態Ｓ２）をとる。
【０１４７】
サーバ装置２００は、特定の条件を満たした場合に状態を遷移させる。図１０の例では、状態Ｓ０から状態Ｓ１への遷移を遷移Ｓ０１、状態Ｓ０から状態Ｓ３への遷移を遷移Ｓ０３、状態Ｓ１から状態Ｓ２への遷移を遷移Ｓ１２、および状態Ｓ３から状態Ｓ１への遷移を遷移Ｓ３１と表現している。遷移Ｓ０１、Ｓ０３、Ｓ１２、Ｓ３１の条件、およびその条件を満たした場合に実行される処理の内容は以下のように設定されている。
【０１４８】
（遷移Ｓ０１について）
遷移Ｓ０１の条件は、状態Ｓ０にあるサーバ装置２００が「ClientHello、ClientKeyExchangeを受信し、ClientHelloのIDS0を許容するとき」である。
【０１４９】
遷移Ｓ０１の中で、通信部２１２は、ClientHelloから識別子IDCを取り出し、認証処理の相手となるクライアント装置１００の識別子として識別子IDCを許容するかを判断する。
【０１５０】
例えば、識別子IDCに有効期限が設定されている場合、通信部２１２は、識別子IDCが有効期限内であれば許容する。また、ハンドシェークの相手として許容可能なクライアント装置１００の識別子を列挙したリストをサーバ装置２００が保持している場合、通信部２１２は、識別子IDCがリストにある場合に識別子IDCを許容する。通信部２１２が識別子IDCを許容しない場合、ハンドシェークは失敗となる。
【０１５１】
識別子IDCが許容された場合、鍵材料生成部２１３は、ClientKeyExchangeからクライアント生成鍵材料RC0を取り出し、乱数rS0を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS0および公開鍵PCを用いてサーバ生成鍵材料RS0（RS0=rS0PC）を生成する。
【０１５２】
共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC0と、乱数rS0と、識別子IDS0に対応するプライベート鍵SS0と、公開パラメータeとを用いて共有鍵ZSを生成する。そして、共有鍵生成部２１４は、ＴＬＳ仕様に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【０１５３】
通信部２１２は、識別子IDS0をServerHelloに含める。また、通信部２１２は、サーバ生成鍵材料RS0をServerKeyExchangeに含める。そして、通信部２１２は、ServerHello{IDS0}、ServerKeyExchange{RS0}をクライアント装置１００に送信する。検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。通信部２１２は、サーバ生成検証子をFinished(S)に含め、Finished(S)をクライアント装置１００に送信する。
【０１５４】
（遷移Ｓ０３について）
遷移Ｓ０３の条件は、状態Ｓ０にあるサーバ装置２００が「ClientHello、ClientKeyExchangeを受信し、ClientHelloのIDS0を許容しないとき」である。例えば、識別子IDS0の有効期限が切れている場合などに識別子IDS0が許容されない。
【０１５５】
遷移Ｓ０３の中で、通信部２１２は、ClientHelloから識別子IDCを取り出し、認証処理の相手となるクライアント装置１００の識別子として識別子IDCを許容するかを判断する。
【０１５６】
例えば、識別子IDCに有効期限が設定されている場合、通信部２１２は、識別子IDCが有効期限内であれば許容する。また、ハンドシェークの相手として許容可能なクライアント装置１００の識別子を列挙したリストをサーバ装置２００が保持している場合、通信部２１２は、識別子IDCがリストにある場合に識別子IDCを許容する。通信部２１２が識別子IDCを許容しない場合、ハンドシェークは失敗となる。
【０１５７】
識別子IDCを許容しない場合、通信部２１２は、認証に用いる識別子として許容可能な代替の識別子IDS1を決定する。そして、通信部２１２は、エラーの発生を示す情報errorと、識別子IDS1とをServerHelloに含め、ServerHello{error,IDS1}をクライアント装置１００に送信する。
【０１５８】
（遷移Ｓ３１について）
遷移Ｓ３１の条件は、状態Ｓ３にあるサーバ装置２００が「ClientKeyExchangeを受信したとき」である。
【０１５９】
遷移Ｓ３１の中で、鍵材料生成部２１３は、ClientKeyExchangeからクライアント生成鍵材料RC1を取り出し、乱数rS1を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS1および公開鍵PCを用いてサーバ生成鍵材料RS1（RS1=rS1PC）を生成する。
【０１６０】
共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC1と、乱数rS1と、識別子IDS1に対応するプライベート鍵SS1と、公開パラメータeとを用いて共有鍵ZSを生成する。そして、共有鍵生成部２１４は、ＴＬＳ仕様に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【０１６１】
通信部２１２は、サーバ生成鍵材料RS1をServerKeyExchangeに含め、ServerKeyExchange{RS1}をクライアント装置１００に送信する。検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。通信部２１２は、サーバ生成検証子をFinished(S)に含め、Finished(S)をクライアント装置１００に送信する。
【０１６２】
（遷移Ｓ１２について）
遷移Ｓ１２の条件は、状態Ｓ１にあるサーバ装置２００が「Finished(C)を受信したとき」である。
【０１６３】
検証処理部２１５は、Finished(C)から取り出したクライアント生成検証子と、サーバ生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。
【０１６４】
以上、クライアント装置１００およびサーバ装置２００がハンドシェーク時に実行する認証処理の流れについて説明した。
［２−５．変形例］
ここで、第２の実施の形態の一変形例について説明する。
【０１６５】
（シーケンス：サーバ識別子のエラーあり）
図１１を参照しながら、認証処理に用いるサーバ識別情報としてクライアント装置１００がサーバ装置２００に送信した識別子をサーバ装置２００が許容しない場合（エラーありの場合）について本変形例に係る認証処理の流れを説明する。図１１は、第２の実施の形態の一変形例に係る認証処理の流れ（エラーあり）を示したシーケンス図である。
【０１６６】
（Ｓ２０１）通信部１１３は、認証処理に用いるクライアント識別情報１１１ａ（識別子IDC）およびサーバ識別情報１１１ｂ（識別子IDS0）をClientHelloに含める。通信部１１３は、ClientHello{IDC,IDS0}をサーバ装置２００に送信する。
【０１６７】
（Ｓ２０２）鍵材料生成部１１２は、乱数rC0を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS0とを用いてサーバ装置２００の公開鍵PS0（PS0=H(IDS0)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC0およびサーバ装置２００の公開鍵PS0を用いてクライアント生成鍵材料RC0（RC0=rC0PS0）を生成する。
【０１６８】
通信部１１３は、クライアント生成鍵材料RC0をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC0}をサーバ装置２００に送信する。
（Ｓ２０３）通信部２１２は、ClientHelloから識別子IDS0を取り出し、認証に用いる識別子としてIDS0を許容するかを判定する。図１１の例では、識別子IDS0は許容されない。例えば、識別子IDS0の有効期限が切れている場合などに識別子IDS0が許容されない。
【０１６９】
（Ｓ２０４）通信部２１２は、エラーの発生を示す情報errorと、認証に用いる識別子として許容可能な識別子IDS1とをServerHelloに含める。そして、通信部２１２は、ServerHello{error,IDS1}をクライアント装置１００に送信する。
【０１７０】
（Ｓ２０５）鍵材料生成部２１３は、乱数rS1を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS1および公開鍵PCを用いてサーバ生成鍵材料RS1（RS1=rS1PC）を生成する。
【０１７１】
通信部２１２は、サーバ生成鍵材料RS1をServerKeyExchangeに含める。通信部２１２は、ServerKeyExchange{RS1}をクライアント装置１００に送信する。
（Ｓ２０６）ServerHello{error,IDS1}、ServerKeyExchange{RS1}を受信した通信部１１３は、識別子IDS1を許容して、識別子IDS1を用いた認証処理を進めるかを判断する。図１１の例では識別子IDS1が許容される。
【０１７２】
鍵材料生成部１１２は、乱数rC1を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS1とを用いてサーバ装置２００の公開鍵PS1（PS1=H(IDS1)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC1およびサーバ装置２００の公開鍵PS1を用いてクライアント生成鍵材料RC1（RC1=rC1PS1）を生成する。
【０１７３】
共有鍵生成部１１４は、ServerKeyExchangeから取り出したサーバ生成鍵材料RS1と、乱数rC1と、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。そして、共有鍵生成部１１４は、ＴＬＳ仕様に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【０１７４】
（Ｓ２０７）通信部１１３は、クライアント生成鍵材料RC1をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC1}をサーバ装置２００に送信する。
（Ｓ２０８）検証処理部１１５は、マスター秘密情報MCを用いてクライアント生成検証子（検証子verify_data）を生成する。通信部１１３は、クライアント生成検証子をFinished(C)に含める。そして、通信部１１３は、Finished(C)をサーバ装置２００に送信する。
【０１７５】
（Ｓ２０９）通信部２１２は、ClientKeyExchange{RC1}、Finished(C)を受信する。共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC1と、乱数rS1と、識別子IDS1に対応するプライベート鍵SS1と、公開パラメータeとを用いて共有鍵ZSを生成する。そして、共有鍵生成部２１４は、ＴＬＳ仕様に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【０１７６】
（Ｓ２１０）検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。検証処理部２１５は、Finished(C)から取り出したクライアント生成検証子と、サーバ生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致した場合には認証成功となる。一方、サーバ生成検証子とクライアント生成検証子とが一致しなかった場合には認証失敗となる。
【０１７７】
（Ｓ２１１）通信部２１２は、サーバ生成検証子をFinished(S)に含める。そして、通信部２１２は、Finished(S)をクライアント装置１００に送信する。
（Ｓ２１２）通信部１１３は、Finished(S)を受信する。検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致した場合には認証成功となる。一方、サーバ生成検証子とクライアント生成検証子とが一致しなかった場合には認証失敗となる。
【０１７８】
Ｓ２１２の処理が完了すると、図１１に示した一連の処理は終了する。図１１のシーケンスでは、ハンドシェークの際に生じるフライトの回数は４回（Ｃｏｍ＃１、＃２、…、＃４）となる。つまり、本変形例によれば、図７のシーケンスに比べてフライトの回数を低減することができる。
【０１７９】
（状態遷移：クライアント装置１００）
ここで、図１２を参照しながら、本変形例に係るクライアント装置１００の状態遷移について説明する。図１２は、第２の実施の形態の一変形例に係るクライアント装置の状態遷移を示した図である。
【０１８０】
（遷移Ｃ０１について）
遷移Ｃ０１の条件は、状態Ｃ０にあるクライアント装置１００が「ＴＬＳ通信を始めるとき」である。
【０１８１】
遷移Ｃ０１の中で、通信部１１３は、認証処理に用いるクライアント識別情報１１１ａ（識別子IDC）およびサーバ識別情報１１１ｂ（識別子IDS0）を決定する。
鍵材料生成部１１２は、乱数rC0を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS0とを用いてサーバ装置２００の公開鍵PS0（PS0=H(IDS0)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC0およびサーバ装置２００の公開鍵PS0を用いてクライアント生成鍵材料RC0（RC0=rC0PS0）を生成する。
【０１８２】
通信部１１３は、識別子IDC、IDS0をClientHelloに含める。そして、通信部１１３は、ClientHello{IDC,IDS0}をサーバ装置２００に送信する。また、通信部１１３は、クライアント生成鍵材料RC0をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC0}をサーバ装置２００に送信する。
【０１８３】
（遷移Ｃ０３について）
遷移Ｃ０３の条件は、状態Ｃ０にあるクライアント装置１００が「ServerHello（エラーあり）、ServerKeyExchangeを受信したとき」である。
【０１８４】
遷移Ｃ０３の中で、通信部１１３は、ServerHelloから識別子IDS1を取り出し、識別子IDS1を許容して、識別子IDS1を用いた認証処理を進めるかを判断する。通信部１１３が識別子IDS1を許容しない場合、ハンドシェークは失敗となる。
【０１８５】
通信部１１３が識別子IDS1を許容する場合、鍵材料生成部１１２は、乱数rC1を生成する。また、鍵材料生成部１１２は、公開パラメータH、P、P0と、識別子IDS1とを用いてサーバ装置２００の公開鍵PS1（PS1=H(IDS1)P+P0）を生成する。そして、鍵材料生成部１１２は、乱数rC1およびサーバ装置２００の公開鍵PS1を用いてクライアント生成鍵材料RC1（RC1=rC1PS1）を生成する。
【０１８６】
共有鍵生成部１１４は、ServerKeyExchangeからサーバ生成鍵材料RS1を取り出す。また、共有鍵生成部１１４は、サーバ生成鍵材料RS1と、乱数rC1と、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。そして、共有鍵生成部１１４は、ＴＬＳ仕様に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【０１８７】
通信部１１３は、クライアント生成鍵材料RC1をClientKeyExchangeに含める。そして、通信部１１３は、ClientKeyExchange{RC1}をサーバ装置２００に送信する。また、通信部１１３は、クライアント生成検証子をFinished(C)に含め、Finished(C)をサーバ装置２００に送信する。
【０１８８】
（遷移Ｃ１２について）
遷移Ｃ１２の条件は、状態Ｃ１にあるクライアント装置１００が「ServerHello、ServerKeyExchange、Finished(S)を受信したとき」である。
【０１８９】
遷移Ｃ１２の中で、共有鍵生成部１１４は、ServerKeyExchangeからサーバ生成鍵材料RS0を取り出し、サーバ生成鍵材料RS0と、乱数rC0と、識別子IDCに対応するプライベート鍵SCと、公開パラメータeとを用いて共有鍵ZCを生成する。そして、共有鍵生成部１１４は、ＴＬＳ仕様に従い、共有鍵ZCをプリマスター秘密情報としてマスター秘密情報MCを生成する。
【０１９０】
検証処理部１１５は、マスター秘密情報MCを用いてクライアント生成検証子（検証子verify_data）を生成する。また、検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。
【０１９１】
サーバ生成検証子とクライアント生成検証子とが一致した場合、通信部１１３は、クライアント生成検証子をFinished(C)に含め、Finished(C)をサーバ装置２００に送信する。
（遷移Ｃ３２について）
遷移Ｃ３２の条件は、状態Ｃ３にあるクライアント装置１００が「Finished(S)を受信したとき」である。
【０１９２】
検証処理部１１５は、Finished(S)から取り出したサーバ生成検証子とクライアント生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。
【０１９３】
（状態遷移：サーバ装置２００）
次に、図１３を参照しながら、本変形例に係るサーバ装置２００の状態遷移について説明する。図１３は、第２の実施の形態の一変形例に係るサーバ装置の状態遷移を示した図である。
【０１９４】
（遷移Ｓ０１について）
遷移Ｓ０１の条件は、状態Ｓ０にあるサーバ装置２００が「ClientHello、ClientKeyExchangeを受信し、ClientHelloのIDS0を許容するとき」である。
【０１９５】
遷移Ｓ０１の中で、通信部２１２は、ClientHelloから識別子IDCを取り出し、認証処理の相手となるクライアント装置１００の識別子として識別子IDCを許容するかを判断する。
【０１９６】
例えば、識別子IDCに有効期限が設定されている場合、通信部２１２は、識別子IDCが有効期限内であれば許容する。また、ハンドシェークの相手として許容可能なクライアント装置１００の識別子を列挙したリストをサーバ装置２００が保持している場合、通信部２１２は、識別子IDCがリストにある場合に識別子IDCを許容する。通信部２１２が識別子IDCを許容しない場合、ハンドシェークは失敗となる。
【０１９７】
識別子IDCが許容された場合、鍵材料生成部２１３は、ClientKeyExchangeからクライアント生成鍵材料RC0を取り出し、乱数rS0を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS0および公開鍵PCを用いてサーバ生成鍵材料RS0（RS0=rS0PC）を生成する。
【０１９８】
共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC0と、乱数rS0と、識別子IDS0に対応するプライベート鍵SS0と、公開パラメータeとを用いて共有鍵ZSを生成する。そして、共有鍵生成部２１４は、ＴＬＳ仕様に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【０１９９】
通信部２１２は、識別子IDS0をServerHelloに含める。また、通信部２１２は、サーバ生成鍵材料RS0をServerKeyExchangeに含める。そして、通信部２１２は、ServerHello{IDS0}、ServerKeyExchange{RS0}をクライアント装置１００に送信する。検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。通信部２１２は、サーバ生成検証子をFinished(S)に含め、Finished(S)をクライアント装置１００に送信する。
【０２００】
（遷移Ｓ０３について）
遷移Ｓ０３の条件は、状態Ｓ０にあるサーバ装置２００が「ClientHello、ClientKeyExchangeを受信し、ClientHelloのIDS0を許容しないとき」である。例えば、識別子IDS0の有効期限が切れている場合などに識別子IDS0が許容されない。
【０２０１】
遷移Ｓ０３の中で、通信部２１２は、ClientHelloから識別子IDCを取り出し、認証処理の相手となるクライアント装置１００の識別子として識別子IDCを許容するかを判断する。
【０２０２】
例えば、識別子IDCに有効期限が設定されている場合、通信部２１２は、識別子IDCが有効期限内であれば許容する。また、ハンドシェークの相手として許容可能なクライアント装置１００の識別子を列挙したリストをサーバ装置２００が保持している場合、通信部２１２は、識別子IDCがリストにある場合に識別子IDCを許容する。通信部２１２が識別子IDCを許容しない場合、ハンドシェークは失敗となる。
【０２０３】
識別子IDCを許容しない場合、通信部２１２は、認証に用いる識別子として許容可能な代替の識別子IDS1を決定する。鍵材料生成部２１３は、ClientKeyExchangeからクライアント生成鍵材料RC1を取り出し、乱数rS1を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS1および公開鍵PCを用いてサーバ生成鍵材料RS1（RS1=rS1PC）を生成する。
【０２０４】
通信部２１２は、エラーの発生を示す情報errorと、識別子IDS1とをServerHelloに含め、ServerHello{error,IDS1}をクライアント装置１００に送信する。また、通信部２１２は、サーバ生成鍵材料RS1をServerKeyExchangeに含め、ServerKeyExchange{RS1}をクライアント装置１００に送信する。
【０２０５】
（遷移Ｓ３２について）
遷移Ｓ３２の条件は、状態Ｓ３にあるサーバ装置２００が「ClientKeyExchangeを受信したとき」である。
【０２０６】
遷移Ｓ３２の中で、鍵材料生成部２１３は、ClientKeyExchangeからクライアント生成鍵材料RC1を取り出し、乱数rS1を生成する。また、鍵材料生成部２１３は、公開パラメータH、P、P0と、ClientHelloから取り出した識別子IDCとを用いてクライアント装置１００の公開鍵PC（PC=H(IDC)P+P0）を生成する。そして、鍵材料生成部２１３は、乱数rS1および公開鍵PCを用いてサーバ生成鍵材料RS1（RS1=rS1PC）を生成する。
【０２０７】
共有鍵生成部２１４は、ClientKeyExchangeから取り出したクライアント生成鍵材料RC1と、乱数rS1と、識別子IDS1に対応するプライベート鍵SS1と、公開パラメータeとを用いて共有鍵ZSを生成する。そして、共有鍵生成部２１４は、ＴＬＳ仕様に従い、共有鍵ZSをプリマスター秘密情報としてマスター秘密情報MSを生成する。
【０２０８】
検証処理部２１５は、マスター秘密情報MSを用いてサーバ生成検証子（検証子verify_data）を生成する。また、検証処理部２１５は、Finished(C)から取り出したクライアント生成検証子と、サーバ生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。サーバ生成検証子とクライアント生成検証子とが一致した場合、通信部２１２は、サーバ生成検証子をFinished(S)に含め、Finished(S)をクライアント装置１００に送信する。
【０２０９】
（遷移Ｓ１２について）
遷移Ｓ１２の条件は、状態Ｓ１にあるサーバ装置２００が「Finished(C)を受信したとき」である。
【０２１０】
検証処理部２１５は、Finished(C)から取り出したクライアント生成検証子と、サーバ生成検証子とが一致するかを検証する。サーバ生成検証子とクライアント生成検証子とが一致しなかった場合、ハンドシェークは失敗となる。
【０２１１】
以上、第２の実施の形態について説明した。
【符号の説明】
【０２１２】
１０，２０  認証装置
１１，２１  通信部
１２，２２  制御部
１３，２３  識別情報
１４，２４  公開鍵
１５，２５  秘密鍵
１６，２６  共有鍵候補
１７，２７  乱数
１８，２８  暗号データ
１９，２９  検証データ
【図１】
0006613909.tif 000002
【図２】
0006613909.tif 000003
【図３】
0006613909.tif 000004
【図４】
0006613909.tif 000005
【図５】
0006613909.tif 000006
【図６】
0006613909.tif 000007
【図７】
0006613909.tif 000008
【図８】
0006613909.tif 000009
【図９】
0006613909.tif 000010
【図１０】
0006613909.tif 000011
【図１１】
0006613909.tif 000012
【図１２】
0006613909.tif 000013
【図１３】
0006613909.tif 000014