原書ちょっとスキップしましてSSL3からTLS 1.3までの発展の歴史(相違点)についてまとめてみます。他に有益、詳細な記事が多数ありますので詳細はそちらを参照いただくとして、まずは個人の学習メモです。
SSL3以降、プロトコルの中核には大きな変更はないものの具体的に見ていくと様々な変化点があるようです。
TLS 1.0ではまちまちだった名前を整理する、という限定的なものでした。TLS 1.1はいくつかのセキュリティ上の問題修正が目的でした。TLS 1.2ではAEDの導入、ハッシュ関数の一層、プロトコルにハードコードされたプリミティブの除去が行われました。
TLS 1.3ではこちらの記事にまとめたようにネットワーク遅延の削減、前方秘匿性獲得、暗号化されないデータの削減、暗号技術の刷新などがあります。
SSL3の特長
SSLは1995年にリリースされました。前バージョンの多くの弱点に対処するために新規に開発されたプロトコルです。基本的な設計は以降のバージョンでも継承されています。
TLS 1.0
1999年にリリース。SSL3からの主な変更点は以下です。
・標準化されたHMAC(Hash-based Message Authentication Code)によってPRF:Pseudo-Random Function(擬似乱数生成関数)が規定された。TLS 1.0のPRFはHMAC-MD5とHMAC-SHA1の排他的論理和として実装されます。
・マスターシークレットが独自構成でなくPRFによって生成されるようになりました。
・verify_data の値が独自の構成ではなくPRFによって生成されるようになりました。
・完全性の検証(MAC:参照)[https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E8%AA%8D%E8%A8%BC%E7%AC%A6%E5%8F%B7]において標準化されたHMACを利用するように変更された。SSL3以前はすでに廃止された古いバージョンのHMACを利用していました。
・パディングのフォーマットが変更されより強固になりました。
※2014に発生したPOODLE攻撃でSSL3のパディングは安全ではなくなりました。
・暗号スイートからFORTEZZAが除外されました。
また、TLS 1.0はUS FIPS:Federal Information Processing standardization の認証を受け、米国政府機関で利用可能になりました。
TLS 1.1
2006年にリリース。TLS 1.0から以下の点が変更されました。
・CBC暗号化利用モードで各TLSレコードに明示的なIVを利用するようになりました。これによってIVの弱点と予期されていた「予測可能なIV」と呼ばれる問題への対応が行われたことになります。
※実際にBEAST攻撃で悪用されました。
・パディング攻撃に対する防御として問題のあるパディングに bad_record_mac アラートを返す実装を追加しました。decripytion_failedアラートは廃止されました。
・TLS拡張としてRFC 3546 を参照しています。
TLS 1.2
2008年にリリース。TLS 1.1から以下の点が変更されています。
・AEADのサポートが追加されました。
・HMAC-SHA256暗号スイートのサポートを追加しました。
・IDEAおよびDES暗号スイートが除外されました。
・TLS拡張が主要プロトコルの仕様に組み込まれました。
・新しい拡張の signature_algorithms を使って受け入れ希望するハッシュと署名のアルゴリズムを通知可能になりました。
・PRFにおいてMD5とSHA1の組合せを利用していた部分がTLS 1.2暗号スイートではSHA256に置換されました。それ以前の暗号スイートでもTLS 1.2でネゴシエーションされた場合はSHA256を使うように変更されました。
・暗号スイートで独自のPRFを指定可能になりました。
・デジタル署名においてMD5とSHA1の組合せを利用していた部分が単一のハッシュ関数に置換されました。利用されるハッシュ関数はSHA256がデフォルト(暗号スイートで指定可能)。署名のハッシュアルゴリズムはTLS 1.2ではハッシュ関数が署名の構造の一部になり実装で最適なアルゴリズムを選択可能となりました。
・Finishedメッセージのverfy_data要素の長さを暗号スイートで明示的に指定可能になりました。
TLS 1.3
ネットワーク遅延の削減
TLS 1.3は2013年から策定が開始され、2018年に最終的なRFCが発行されました。
・ハンドシェイクが再設計されネットワーク遅延が1RTT(1 Round Trip Time:1往復)まで短縮された
・接続の再開ではさらに高速な0-RITが利用できる(ただしセキュリティ弱体化に注意が要)
前方秘匿性
・鍵交換が見直され全ての暗号スイートが前方秘匿性に対応しました。
・RSA鍵交換は使用不可になりました。
・TLS 1.2で強固な前方秘匿性を実現するには慎重なサーバー設定が要求されたがTLS 1.3ではこの要求レベルが下がった
・sesion resumpitonでのDH鍵交換に対応したので通信再開示にも前方秘匿性が確保できる。
・ただし0-RITでは常に前方秘匿性が有効になるとは限らないので要注意
暗号化されずに送信される情報の削減
TLS1.2以前では平文で送信されていた個所の多くが暗号化して保護されるようになりました。
・ハンドシェイクの大部分、クライアント・サーバーの証明書が暗号化されるようになった。
・RecordプトロコルでTLS 1.2以前で平文だった情報は廃止され全てのデータが暗号化できる。
・唯一保護されていないのはサーバーホスト名で、これはSNI Server Name Indication を介して外部から読み取り可能だが、TLS以外の領域で対策が進められている。
暗号技術の刷新
RC4系など古い(安全でない)暗号技術の廃止と暗号学における進展を取り入れています。
・X25519 や ChaCha20のような現代的な暗号技術へ対応した。
・従来の独自機構からAEAD、HKDFのような標準的な技術採用に変更された。
・署名の堅牢化、鍵交換のパラメーターのネゴシエーションの洗練化。