SSL/TLSについて
SSL/TLSについて、何度学んでも理解できないので自分の頭の中をまとめてみる。
- まずは基本的な事として、セキュリティに対する脅威と暗号技術による防御
- 盗聴
- 機密性が脅かされる。対策として対称暗号、公開鍵暗号
- 盗聴
-
- 改ざん
- 正真性が脅かさる。対策として一向性ハッシュ
- 改ざん
-
- なりすまし
- 認証が脅かされる。対策としてメッセージ認証コード
- なりすまし
-
- 否認
- 否認不可能性が脅かされる。対策としてデジタル署名
- 否認
- デジタル署名
- 証明書とは?フローをみてみる。
- メッセージ受信者をA、送信者をBとする。
- Aが鍵ペアを作成する。
- Aは証明局に自分の公開鍵を登録する。
- 証明局はAの公開鍵に自局のプライベート鍵でデジタル署名をして証明書を作成する。
- Bは証明局のデジタル署名がついたAの公開鍵(証明書)を入手する。
- Bは証明局の公開鍵を使ってデジタル署名を検証し、Aの公開鍵が正しい事を確認する。
- BはAの公開鍵でメッセージを暗号化し、Aへ送信する。
- Aは暗号文を自分のプライベート鍵で複合化してメッセージを読む。
- メッセージ受信者をA、送信者をBとする。
- SSL/TLSを使った通信
- ClientHello(クライアント→サーバー)
- 使用できる暗号の一覧
- ServerHello(サーバー→クライアント)
- 使用する暗号を決める
- Certificate(サーバー→クライアント)
- 証明書を提示
- ServerKeyExchange(サーバー→クライアント)
- 証明書では足りない情報があれば追加の情報を
- ServerHelloDone(サーバー→クライアント)
- ServerHelloから始まるメッセージの一連の終わりを告げる。
- ClientKeyExchange(クライアント→サーバー)
- プレマスターシークレットを送る。
- このプレマスターシークレットを元にサーバー、クライアントは共通のマスターシークレットを作成する。
- ChangeCipherSpec(クライアント→サーバー)
- これを境にしてメッセージを暗号に切り替える。
- Finished(クライアント→サーバー)
- 暗号に切り替えてFinishedメッセージを送る。サーバーで複合化出来るか調べる。
- ChangeCipherSpec(サーバー→クライアント)
- これを境にしてメッセージを暗号に切り替える。
- Finished(サーバー→クライアント)
- 暗号に切り替えてFinishedメッセージを送る。
- ClientHello(クライアント→サーバー)