#1. はじめに
TLS1.3では暗号スイートの表記が大幅に簡素化され、共通鍵暗号のアルゴリズムと鍵導出のためのハッシュアルゴリズムだけを指定するようになりました。指定が簡素化されたのは良いのですが、関連するTLS拡張との関係が少しわかりにくくなっているかもしれません。この記事では、TLS1.2以前と1.3の暗号スイート、それと関連するTLS拡張について再整理してみます。
バージョン | 暗号スイートの構成 |
---|---|
TLS1.2 | 鍵合意+署名+共通鍵+ハッシュ 例:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 |
TLS1.3 | 共通鍵+ハッシュ 例:TLS_AES_128_GCM_SHA256 |
表1 TLSの暗号スイート
#2. TLS1.3の整理項目
まずはTLS1.3で見直されたポイントについて復習です。
1)鍵合意アルゴリズムとしては静的RSAを廃止し、一時鍵ECDH、DHのみとなりました。
2)静的RSAが廃止されたため、証明書はピア認証のみに使用することになりました。これによって、鍵合意と認証は完全に分離、独立した扱いが可能となりました。
3)危殆化した共通鍵暗号アルゴリズムが大幅に整理されました。また、認証付き暗号(AEAD: Authenticated Encryption with Associated Data)アルゴリズムのみに整理されました。これに伴い、MACによる真正性検証もなくなりました。
3. 暗号スイートとTLS拡張の関係
これらの変更、整理の結果、TLS1.2の暗号スイートの4つのフィールドがTLS1.3でどのように整理されたのか、表にまとめてみます。
スイート 項目 |
TLS1.2 | TLS1.3 | 関連するTLS拡張、補足 |
---|---|---|---|
鍵合意 | RSA (EC)DH(E) |
なし | - SupportedGroups拡張 (TLS1.2ではElliptic_curves): ECDHで使用できる楕円曲線一覧 DHの鍵長一覧 - Key_Share拡張: 上位2候補までのDHパラメータ |
署名 | RSA DSA ECDSA |
なし | 署名アルゴリズム拡張: ECDSAの楕円曲線とハッシュ一覧 RSA鍵長、パディング、ハッシュ一覧 DSAの廃止 |
共通鍵 | 多数 | AES-GCM AES-CCM(_8) CHACHA20_POLY1305 |
危殆化アルゴリズムを廃止 AEADのみに |
ハッシュ | 多数 | SHA256, SHA384 | MACの廃止 鍵導出のハッシュのみ指定 |
表2 TLS1.2/1.3の暗号スイートフィールドと対応するTLS拡張
鍵合意の(EC)DH系の情報は、SupportedGroups拡張にECDHに使用できる楕円曲線種別の一覧、DHの場合のサポートする鍵長の一覧を格納します。また、Key_Share拡張にサポートする(EC)DHのうち上位2候補までの楕円曲線種別または鍵長と対応するDHパラメータを格納します。サーバ側でこれにマッチしない場合は1度だけHelloRetryRequestで次の候補を要求することができます。表3にSupportedGroups拡張の例を示します。ECDHの場合は楕円曲線の種類、DHの場合は鍵長がIDによって定義されます。
アルゴリズム | 表記 | ID |
---|---|---|
ECDH | secp224r1 | 0x0015 |
DH | ffdhe2048 | 0x0100 |
表3 SupportedGroups拡張の例
署名アルゴリズムについては、署名アルゴリズム拡張にECDSAの楕円曲線とハッシュの組合わせ一覧、RSAの鍵長、パディング、ハッシュの一覧を格納します。DSAは廃止されました。表4に署名アルゴリズム拡張の例を示します。RSAの場合はパディングスキームとハッシュ、ECDSAの場合は楕円曲線の種類とハッシュがID値によって定義されます。
アルゴリズム | 表記 | ID |
---|---|---|
RSA | rsa_pss_pss_sha256 rsa_pkcs1_sha512 |
0x0809 0x0601 |
ECDSA | ecdsa_secp256r1_sha256 | 0x0403 |
表4 署名アルゴリズム拡張の例
ハッシュアルゴリズムは、TLS1.2では鍵導出におけるハッシュアルゴリズムとMACにおけるハッシュアルゴリズムを兼用して指定していました。TLS1.3でMACが廃止されたのに伴い、暗号スイート上のハッシュ表記はHKDF鍵導出のためのハッシュアルゴリズムのみを指定するものとなりました。
4. まとめ
このようにTLS1.3では不要なものを削除するとともに本来独立、直交する項目については暗号スイートではなくTLS拡張で定義できるようなりました。そのようにすることで、TLS1.2では4項目の組み合わせであるために非常に多種のスイートができてしまったのに対して、TLS1.3では暗号スイートでは2項目の組み合わせを定義するのみとなりスイートの種類を大幅に絞り込むことに成功しています。現在、TLS1.3として定義されているスイートは以下の5種類です。
暗号スイートの表記 | ID |
---|---|
TLS_AES_128_GCM_SHA256 | 0x1301 |
TLS_AES_256_GCM_SHA384 | 0x1302 |
TLS_CHACHA20_POLY1305_SHA256 | 0x1303 |
TLS_AES_128_CCM_SHA256 | 0x1304 |
TLS_AES_128_CCM_8_SHA256 | 0x1305 |
表3 TLS1.3の暗号スイート
この記事の内容を含めてTLプログラミングについて解説をまとめる機会をいただきました。興味のあるかたはご覧ください。徹底解剖 TLS 1.3 (翔泳社から 3/7刊行)。