TLS1.3の仕様を書いたEric Rescorla氏らより「Compact TLS 1.3」という提案仕様が提案されており、すでにWG Draftとなっています。
このCompact TLS (cTLS)は、よりコンパクトなTLSを定義しデータの通信量を削減しています(リソースなどが制限されたデバイスでも利用できるようにというモチベーションもあります)。TLS1.3自体とisomorphic(同型)でありやり取りされるメッセージの意味自体は同じですがメッセージのフォーマットは異なっており、cTLSとTLS1.3自体と相互通信はできません。
しかし、cTLS, TLS1.3両方に対応することはできるので、将来的にそういうサーバが出てくれば問題なく通信できるようになりそうです。
アプローチ
主なアプローチは
- TLS1.3の冗長なフィールド、廃止されたフィールドを取り除きます (TLS1.2との互換性の都合形だけ入ってたフィールドなど)
- 可変長整数を使い、整数値のフィールドを削減します
- 不要な値の省略
- デフォルト値を定義可能にするテンプレート (profile)
結果として、下記の通りデータ転送量を削減できます。

いくつか説明していきます
冗長, 不要なフィールドの廃止
TLS1.2との互換性のために確保されてた領域をクリーンアップしています
Record Layer
struct {
ContentType type;
opaque fragment[TLSPlaintext.length];
} TLSPlaintext;ClientHello
struct {
Random random;
CipherSuite cipher_suites<1..V>;
Extension extensions<1..V>;
} ClientHello;ServerHello
struct {
Random random;
CipherSuite cipher_suite;
Extension extensions<1..V>;
} ServerHello;
テンプレート(Profile)
ProfileはJSON形式で記述され、暗号関連のパラメータ・TLS拡張・証明書などが事前定義されており。ハンドシェイク時はこれらの値を使う場合は省略されます。また、randomの長さなども短く設定することもできます。
このProfileはクライアントとサーバで事前に共有されている必要があります。(標準Profileを定義するかや、ハンドシェイク中に使用しているProfileを相手に通知する方法などは現在議論中です。)
Profile例
{
"version": 772,
"cipherSuite": "TLS_AES_128_CCM_8_SHA256",
"dhGroup": "X25519",
"signatureAlgorithm": "ECDSA_P256_SHA256",
"randomSize": 8,
"finishedSize": 8,
"clientHelloExtensions": {
"server_name": "000e00000b6578616d706c652e636f6d",
},
"certificateRequestExtensions": {
"signature_algorithms": "00020403"
},
"knownCertificates": {
"61": "3082...",
"62": "3082..."
}
}