3 認証技術の標準化動向
3.1. ネットワーク認証プロトコル及び API 標準
3.1.5 公開鍵による認証
3.1.5.1 TLS(RFC2246)
セッションの終了を行うための GSS-API 呼出し gss_delete_context( )お よび確認の呼出しgss_process_context( )のためのトークン仕様も定める。
Kerberos v5 GSS-APIはKerberosの巧妙で複雑な認証やデータ秘匿のメカ ニズムを汎用的なAPIで抽象化し、クライアント/サーバーでのアプリケーシ ョン間で、セッションの認証やメッセージの秘匿の標準的な手段を与える。
3.1.5 公開鍵による認証
クライアント サーバ (1) Client Hello
(13) Finished
(12) Change Cipher Spec (11) Finished
(10) Change Cipher Spec (9) Certificate Verify (8) Client Key Exchange (7) Certificate
(6) Server Hello Done (5) Certificate Request (4) Server Key Exchange (2) Server Hello
(3) Certificate
アプリケーションデータ
図 3‑ 5 ハンドシェイクプロトコルの流れ
(1) Client Hello
通信の開始をサーバーに通知する。クライアントが利用可能な暗号と圧縮の アルゴリズムの一覧を送信する。
(2) Server Hello
クライアントから受け取った暗号と圧縮のアルゴリズム一覧から使用するア ルゴリズムを決定し、クライアントに通知する。
(3) Certificate
サーバー証明書からルートCAまでの証明書チェーンを送信する。
(4) Server Key Exchange (省略可)
サーバーが証明書を持たない、若しくはサーバー証明書に鍵交換可能な公開 鍵が含まれない場合に使用する。
(5) Certificate Request (省略可)
サーバーが信頼するルートCA の一覧を付与し、証明書の提示を要求する。
これを行うことによって、双方向認証となる。
(6) Server Hello Done
クライアントに対して、Server Hello から始まる一連のメッセージが完了し
たことを通知する。
ここまでで、サーバーとクライアントは、プロトコルのバージョン、セッシ ョンの識別子、暗号と圧縮のアルゴリズムとパラメーターを合意する。またこ のセッションで利用するランダム値を交換する。
(7) Certificate (省略可)
クライアント証明書をサーバーに送付する。(3) と同様に証明書チェーンも 送信する。
(8) Client Key Exchange
暗号化に使用するセッション鍵を生成するための情報(プリマスタシークレ ット)を生成し、暗号化してサーバーに送信する。プリマスタシークレットの 暗号化には、サーバーの証明書に含まれる公開鍵を使用する。
(9) Certificate Verify (省略可)
クライアントは、今までに受信したHelloメッセージをクライアントの私有 鍵を使用して署名し、CertificateVerifyメッセージを生成する。そしてサーバ ーに送信する。
CertificateVerifyメッセージを受け取ったサーバーは、クライアントから受 け取った証明書 (Certificate)の公開鍵 を使い、CertificateVerifyメッセージの 署名の検証を行うことによりクライアントの認証を行う。
(10) [Change Cipher Spec]
クライアントは、プリマスタシークレットからマスタシークレットを生成し、
さらにマスタシークレットからセッション鍵を生成する。
次に、使用する暗号アルゴリズムの準備が整ったことをサーバーに通知する。
Change Cipher Spec は、ハンドシェイクプロトコルの一部ではなく、独立し たプロトコル(Change Cipher Spec Protocol)となっている。
(11) Finished
鍵交換と認証処理が成功したことをサーバーに通知する。交換したセッショ ン鍵を使い、メッセージを暗号化して送信する。
(12) [Change Cipher Spec]
サーバーは、クライアントから受信した暗号化されたプリマスタシークレッ トを、自身の対称鍵を使い復号する。次に復号したプリマスタシークレットか らマスタシークレットを生成し、さらにマスタシークレットからセッション鍵
(共通鍵)を生成する。このセッション鍵は、クライアントが生成したセッシ ョン鍵と同じ鍵になる。
次に、使用する暗号アルゴリズムの準備が整ったことをクライアントに通知 する。
(13) Finished
鍵交換と認証処理が成功したことをサーバーに通知する。交換したセッショ
ン鍵を使い、メッセージを暗号化して送信する。
以降は、アプリケーションのデータを、暗号化された状態で送受信すること ができる。
(10) (12) におけるマスタシークレットからの鍵生成は、レコードプロトコル
において行われる。
TLSのクライアント認証は、上記にようにX.509証明書を使用したものであ るが、スタンフォード大学で研究開発されたSRP (Secure Remote Password) を 使 用 し た も の が Draft と し て 提 出 さ れ て い る(Using SRP for TLS Authentication draft-ietf-tls-srp-04)。