『プロフェッショナルSSL/TLS』読書会@kdnaktさんが主催してくだっている、社内の読書会/勉強会。この記事は、その読書会での内容を簡単に箇条書きにした自分用のメモです。@kdnaktさんが書かれている同読書会のスクラップ記事のほうが詳しくかつ分かりやすいので、そちらも読むことをお薦めします。全てを1つの記事にすると長くなりすぎるので、章ごとに分けます。プロトコルTLSは上位層のプロトコルがなんであるかを問わず、接続志向(データを確実に相手に送信できる。UDPは接続志向ではない)のネットワーク通信を安全に行うための暗号化プロトコル。Recordプロトコル:TLSの実質的な本体。コネクション上でやり取りされる低レベルのメッセージ転送をすべて担う。TLSレコード=ヘッダ+メッセージデータヘッダ:コンテントタイプ+バージョン+レコード長メッセージの転送:別のレイヤから渡される、書式が決まっていないデータのバッファを転送する。レコードは最長2^{14}=16,384バイト。これより長いメッセージは分割される。ハンドシェイク)は暗号化されない。暗号スイートによっては暗号化は利用せず、完全性の検証のみを行うものもある。TLSの圧縮機能は現在は利用されていない。HTTP等ですでに圧縮されていることが多く、また2012年のCRIME攻撃で大打撃を受けたため。Recordプロトコルが担うのはデータ転送と暗号化処理。他の機能はすべてサブプロトコルで行う。サブプロトコルは追加が容易であり、そのためTLSは拡張が可能。サブプロトコルはネゴシエーションされたパラメータを使って自動的に保護される。TLSメインには4つのサブプロトコルが規定されている。HandshakeChangeCipherSpecApplicationDataAlertHandshakeプロトコル:データ送信に先立って接続を確立するために、TLS接続で使うパラメータのネゴシエーションと認証を行う。通常6~10メッセージが必要。このプロトコルのメッセージ先頭には1バイトの種類+3バイトのメッセージを示すヘッダがつく。提示して認証を行うセッション保護のためのマスターシークレットを共有するメッセージ群が書き換えられていないことを検証する。28バイトのランダム値+4バイトのクライアント時刻ランダム値が容易に推定される致命的な脆弱性が1994年にNetScapeで発見されたため、貧弱な乱数生成に対する防御として現在時刻を付加するようになった。実際の時刻を挿入するのはブラウザのフィンガープリントになりうるので、ブラウザによっては時刻を少し変化させたり、完全にランダムにしたりする。このランダム値は下記の役割を果たす。最初は新規セッションであることを示すために空。以降の接続では再開したいセッションID。このIDはランダムな32バイトで、それ自体に特に意味はない。クライアントが対応可能な暗号スイートが列挙される。クライアントが対応している圧縮方法を列挙する。付加的なデータを運ぶ拡張ServerHelloサーバが決定したパラメータを送り返す。構造はClientHelloと同じ。CertificateサーバからクライアントへとX.509証明書チェーンを運ぶ。サーバ証明書が先頭にきて、あとは中間証明書が続く。最後にルート証明書が来るが、ルート証明書は省略可。ServerKeyExchange鍵交換に必要な付加的データを運ぶ。暗号スイートによっては省略される。ServerHelloDoneサーバが「こっちが送りたいハンドシェイクは全部送ったよ」という合図。以降、サーバはクライアントからのメッセージを待機する。ClientKeyExchange鍵交換に必要なデータをクライアントから運ぶためのメッセージ。ChangeCipherSpecサーバとクライアントの両方が送りうる。中身は1が1バイトだけ。下記を伝える接続のためのパラメータ組み立てに充分な情報を手に入れた暗号鍵を生成したこれから暗号処理に移行するハンドシェイクメッセージではないため、完全性保証の対象外となっている。このことが原因で2014年にOpenSSLが攻撃を受けやすい状態になっていた。事前に送ったクライアント証明書に含まれる公開鍵に対応する秘密鍵を持っていることをクライアントが証明するセッションリザンプションフルハンドシェイクはメッセージの往復が多く、計算コストも高い。セッションが確立されていたら、省略版のハンドシェイクで済ませる。IDを含めたServerHello、新しい暗号鍵、その暗号鍵で暗号化されたFinishedを送る。クライアントはセッションが再開されたことを確認したら、暗号化されたFinishedを送る。laborare.バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。