TLSハンドシェイク
安全なデータのやり取りをする前に、clientとserver間で行うやりとり
公開鍵暗号方式で共通鍵を交換する
SSL/TLS通信の流れの1つ目の手順であることを知っておくと見通しが良い
2つ目の手順(TLSのデータ転送)で、共通鍵暗号方式でやりとりをする
TLSハンドシェイクはそのための準備をしている
#WIP
https://whimsical.com/tls-3JgvXuWM97LLg2kNCyj6Ym
図示しようと思ったがめんどくさくなったmrsekut.icon
手順
1 clientが送信
ClientHello
clientが利用可能な暗号方式を伝える
e.g.
SSL/TLSのversion
圧縮アルゴリズム
TLSの暗号化スイート
server認証アルゴリズム #??
鍵交換アルゴリズム
TLSのデータ転送で使用するデータ保護用の共通鍵暗号方式アルゴリズム
TLSのデータ転送で使用するデータの完全性を確認するためのMACアルゴリズム
client random
2 serverが送信
ServerHello
使用するアルゴリズムを送信
ClientHelloへの応答
ServerCertificate
自身の公開鍵を含むserver証明書を送信
この公開鍵って何に使うの #??
cleintが、「serverが正しいもの」であることを確認するために使う
clientで生成したランダムな文字列を公開鍵で暗号化する
serverはその暗号化された文字列を覆道して、元の文字列を取得する
どうやって?clientは秘密鍵を持ってるの #??
だとしたら、この鍵のペアってどの時点で作ってるの?
TLSハンドシェイクの中のどの部分で検証しているの #??
ServerHelloDone
サーバーからの送信終了を示す
3 clientが送信
ClientKeyExchange
鍵交換メッセージ
ClipherSpec
無暗号通信の終了を示す
これ以降の通信は全て暗号化される
Finished
ハンドウェイクの終了
4 serverが送信
CipherSpec
無暗号通信の終了を示す
これ以降の通信は全て暗号化される
Finished
ハンドウェイクの終了
図示して、順番ごとに説明しつつ
どれとどれが対応している操作7日、を示せばわかりやすい気がする
どのへんが、ハイブリッド暗号方式なのか
単純化
ざっくりどういうフェーズがアアル化
どの順序に対応しているか
『食べる!SSL!』 2.2章
https://qiita.com/jkr_2255/items/62d8d15d206c60f37d30
https://www.infraexpert.com/study/security28.html
https://qiita.com/n-i-e/items/41673fd16d7bd1189a29
https://www.ipa.go.jp/security/rfc/RFC2246-07JA.html
『Webフロントエンドハイパフォーマンスチューニング』 p.26~