あどけない話

インターネットに関する技術的な話など

TLS 1.3 開発日記 その15 RSAPSSとX25519

開発日記 その8に書いた「拡張の再利用」の問題に進展があったので、記録しておく。

これまでの方針

拡張が再利用されていても、TLS 1.2 と TLS 1.3 では異なる拡張として扱う。

生じた問題

SignatureSchemeに対する問題:

  • TLS 1.3 クライアントが SignatureScheme に RSA PSS SHA256 を含める
  • サーバは TLS 1.2 を選んでいるのに RSA PSS SHA256 を選択する
  • TLS 1.3 クライアントの TLS 1.2 用の部分は RSA PSS SHA256 に対応していないのでエラーが発生

OpenSSL サーバがこのような挙動をする。

NamedGroupに対する問題:

  • TLS 1.3 クライアントが NamedGroup に X25519 を含める
  • サーバは TLS 1.2 を選んでいるのに X25519 を選択する
  • TLS 1.3 クライアントの TLS 1.2 用の部分は X25519 に対応していないのでエラーが発生

www.google.com がこのような挙動をする。

対処

SignatureSchemeに関しては、TLS 1.3 のドラフトには以下のように書かれている。

Implementations that advertise support for RSASSA-PSS (which is mandatory in TLS 1.3), MUST be prepared to accept a signature using that scheme even when TLS 1.2 is negotiated. In TLS 1.2, RSASSA-PSS is used with RSA cipher suites.

NamedGroupに関しては、RFC 4492 bis で、X25519 と X448 が追加されている。

つまり、このオプションを独立に扱うのは筋が悪い。TLS 1.3 と TLS 1.2 の両方から、同じ拡張のコードを使うべき。

というわけで、まず Haskell tls ライブラリの master ブランチに、RSA PSS SHA256 たちと X25519 たちをサポートする pull request を出した。
TLS 1.3 ブランチは、マージされた後に rebase する(たぶん大変)。