TLS 1.3 が動いた日

最近 Erlang/OTP で QUIC を実装しています。QUIC を実装するには TLS 1.3 の実装が必要になります。

残念ながらまだ Erlang/OTP には TLS 1.3 は実装されていないのでフルスクラッチで実装することにしました。

ということで本日 ClientHello から ServerHello そして Finished までが無事動きました。Certificate と CertificateVerify もちゃんと対応しています。

Image for post
Image for post
0x0304 がポイント

0-RTT はまだ実装できておらず、1-RTT です。証明書は RSA で rsaEncryption で、 RSASSA-PSS RSAE で署名をしています。ECDSA や ed25519 や ed448 は未実装です。今後実装していきます。

暗号は AES-GCM と CHACHA20-POLY1305 のみ実装しました。AES-CCM は見て見ぬふりすることにしました。

基本的に WebRTC で利用することもあり、証明書自体は自己署名を利用する前提なので ed25519 と ed448 あたりを採用することになりそうです。

一番しんどかったのは RSASSA-PSS RSAE / RSASSA-PSS PSS です。正直まったく知らない仕組みでした。TLS/DTLS 1.2 では実装した記憶がないので、TLS 1.3 で導入されたという認識です。

大津さんに相談したら PKCSv1.5 で十分って証明がという話をされたり。

まぁ、まじめにやっておくかということで、実装しておきました。

最低限の実装ですが動く実装が手に入りました。動作確認は OpenSSL 1.1.1 系列で s_client で -tls1_3 で確認してました。少しオプションをいじったりしていましたが、ほぼデフォルトです。

さて、QUIC が動いた日を Medium に書くのを目指してコツコツやっていきます

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store