2023年2月13日~2023年2月19日に読んだ中で気になったニュースとメモ書き(TLSらじお第93回の前半用原稿)です。
[TurboTLS]
こちらのツイートから。
TurboTLS: TLS connection establishment with 1 less round trip https://t.co/mfCWhqtDIt
— Frank ⚡ (@jedisct1) 2023年2月15日
リンク先はこちらの論文。
通常TLS1.3ではTCPハンドシェイク、TLSハンドシェイクが完了してHTTPなどのアプリケーションデータを送信できる。TurboTLSでは、画像のようにTCPハンドシェイクと並行してUDPでTurboTLSのハンドシェイクを実行することで2回目のラウンドトリップでアプリケーションデータを送信できるようにするらしい。
TurboTLSに対応しているかどうかはDNSのHTTPS RRのフラグに持たせるとのこと。なるほど。
(上記論文より)
論文中では、TLS1.2 False StartやTLS1.3+TCP Fast Openとの比較をしつつ、MinimaLTというプロトコルとも比較を行なっていた。2013年ごろに提案されたUDP上で動く暗号化プロトコルらしい。
こんなツイートも。
TurboTLS: TLS connection establishment with 1 less
— ゆき (@flano_yuki) 2023年2月17日
round triphttps://t.co/zs7jEFnM8P (pdf)
TCPハンドシェイクをしながら、UDPでTLSハンドシェイク始めちゃうヤツ。"TLS Jump Start"と同じアイデアかな。
Jump Startについてはゆきさんがまとめてくれている。TLS1.3が出る前の2015年のドラフトなので、TLS1.2とUDPを組み合わせている。このページを見る限り結局ドラフトのままで、RFCにはなってなさそう。
TurboTLSの論文中でJump Startに触れられていないのが気になる...。
知らない間に色んなプロトコルや仕様が提案されているんだな...。
参考。
[kTLS + Nginx]
こちらのツイートから。
Kernel TLSとSSL_sendfile()によるNGINXのパフォーマンス向上 - NGINX https://t.co/mlfGu3JPx6 kTLS の知識がないのでみてる
— V (@voluntas) 2023年2月15日
リンク先はこちら。
(自分の知ってるところだと)JavaとかGoではアプリケーションがTLSの処理を担当している。で、それだと遅いのでカーネルにTLSの処理をさせようぜ、というのがkTLS。Erlangでは最近サポートされたらしい。
"Support for Kernel TLS (kTLS), has been added to the
— V (@voluntas) 2023年2月15日
SSL application, for TLS distribution (-proto_dist
inet_tls), the SSL option {ktls, true}." ついに Kernel TLS が来た!
Nginxでは通常、静的ファイル配信時にカーネルを通してファイルを読みこみ、ユーザー空間のNginxで暗号化、カーネルに戻してネットワークにデータを渡す。kTLSを利用すると、カーネルとユーザー空間の間でのデータコピーがなくなるので高速化できる。OSにもよるが、8-29%改善されたとのこと。
こちらのHackerNewsのスレッドによると、CPUの節約にもなるらしい。なるほど。
"kTLS (so you can keep using sendfile with tls, saves ~60% CPU over reading data into userspace and encrypting there)" https://t.co/kZqJ2rEgkA "kTLS (sendfile を tls で使い続けることができます。データをユーザースペースに読み込んでそこで暗号化するよりも ~60% CPU を節約できます)"
— V (@voluntas) 2023年2月18日
他にもkTLS関連の発表資料がちらほら。どれもNetflixの人による発表のよう。そりゃ秒間100GBとか400GBとかデータ転送してたら効率化しないとやってられませんわな...。
"Kernel TLS and hardware TLS offload in FreeBSD 13" https://t.co/VsRVeWtYAz PDF めっけ。 https://t.co/MSCy2Jb5y0
— V (@voluntas) 2023年2月18日
先週のニュースではkernel通してたら遅いやんけ、ということでkernelを通さず直接ネットワークスタックを操作するDPDKによる高速化手法に触れた。同じ静的ファイル配信をやるとしたらどっちがいいんだろうか...。
[その他のニュース]
▼NIST PKITSについて
こちらのツイートから。
ちょっと記事書きました。何回かに分けてぼちぼち書こうと思ってます。(今のところは、、、)
— kjur (@kjur) 2023年2月13日
Zenn: 連載NIST PKITS証明書パス検証テストスイート(1)OpenSSLでとりま動かすhttps://t.co/uLMqAjdzzl
リンク先はこちら。
超複雑なcertification path validationの実装を確認するためにNISTが公開しているテストケースがあって、これのPerl実装がOpenSSLのソースコードにこっそり含まれているらしい。知らんかった...。
昔kjurさんが書いたJUnitでのテストも紹介されていた。
Indirect CRLって何だろうと思ったら、CRLの発行者が発行していない証明書に関するCRLってことらしい。そういうのもあるのか...証明書検証は難しいな。
▼TLSとメモリ帯域
こちらのツイートから。
現代の最適化されたコンテンツサーバのボトルネックってメインメモリ帯域で、TLS暗号化する前提で言うと、送信バッファはack返ってくるまで消せなくて、それはL3よりでかいから、Intel DDIOあっても通信量にたいしメモリ帯域幅2x必要で。 https://t.co/3QkaBsGjp3
— Kazuho Oku (@kazuho) 2023年2月13日
一部NICのTLSオフロードはこれをすごい苦労して1xにしてる(TLSレコード境界とパケット境界のズレを吸収とか)けど、QUICになるとDDIOとの組み合わせで自然と1xになる
— Kazuho Oku (@kazuho) 2023年2月13日
ネットワークカード周りとか大変そうだな...と思った(小並感
TLSとパケットのずれってどうやって吸収するんだろう?
▼Java 19とJava 20
こちらのツイートから。
Cryptography, PKI, TLS, jarsigner, keytool…
— Ana Maria Mihalceanu 🇳🇱🇷🇴 (@ammbra1508) 2023年2月14日
What are some valuable enhancements of the Java Security APIs and tools in #JDK19 and #JDK20?
A thread. 🧵
(If you prefer video, check the latest Inside Java Newscast: https://t.co/xifaTmqUlH)
スレッドにて各種変更点がピックアップされている。KeyPairGeneratorでRSAの鍵長がデフォルト3072ビットになったり、SHA-3のパフォーマンスが改善したり、RC4がレガシーアルゴリズムになったり。
TLSハンドシェイク自体のパフォーマンス改善も入っている模様。
To speed up and reduce the amount of memory used during a #TLS handshake, #JDK19 introduced several TLS performance improvements:
— Ana Maria Mihalceanu 🇳🇱🇷🇴 (@ammbra1508) 2023年2月14日
* cache certificates decoded from TLS session tickets,
* avoid evaluating `SSLAlgorithmConstraints` twice
* cache the results of constraint checks.
これらが入るLTSバージョンはJava 21(2023年9月リリース予定)なので、自分が使うのはだいぶ先になりそう...。
▼MS WinGetのSSL証明書期限切れ
こちらのツイートから。
MSのWinGetが接続するCDNの証明書が期限切れで現在、WinGetが利用不可能になっている。
— 高梨陣平 (@jingbay) 2023年2月12日
エラーで落ちたのは嬉しいけれども、エラーメッセージがUnknownなのはダメっぽい。後、MSが証明書更新忘れするのはこれが何度目だっけとくらい多いような (^^; https://t.co/ZzUVM43RDV
リンク先はこちら。
https://cdn.winget.microsoft.comの証明書が2023/2/12で切れて問題を起こしてるとのこと。2023/02/18に確認したところ、新しい証明書がデプロイされていたが、有効期間が2022/11/14から2023/11/9というものだった。なぜもっと早くデプロイできなかったのか...。
天下のMS様でもSSL証明書の運用ミスるんだから仮に将来うちがミスっても仕方ないよね(違
▼TrustCorとmacOS Ventura
こちらのツイートから。
macOS Ventura 13.2.1にアップデートしたけどTrustCor消してなさそう。
— matsuu (@matsuu) 2023年2月18日
TrustCorについてはこちら。
MS、Chrome、Firefoxは対応したのにmacOSはいつになるんだろう...。
[まとめ]
TurboTLSはどうなるのかしら...Jump Startとかそもそもどうなったんだろう?どっかでこっそり実用化されたりするのかな...。