Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TLS Encrypted Client Hello (ECH) conformance te...

TLS Encrypted Client Hello (ECH) conformance test with Ruby

Gotanda.rb#61 の発表資料です。
https://gotanda-rb.connpass.com/event/341855/

Avatar for thekuwayama

thekuwayama

January 28, 2025
Tweet

More Decks by thekuwayama

Other Decks in Programming

Transcript

  1. ECH の概要 - Encrypted Client Hello - TLS 拡張の新しい提案仕様 -

    https://datatracker.ietf.org/doc/draft-ietf-tls-esni/ - 2025/01 現在、IETF の TLS WG にて議論中
  2. ECH の概要 - TLS ハンドシェイクメッセージ Client Hello は平文 - Client

    Hello には平文の SNI 拡張が含まれる - Server Name Indication - 第三者は SNI を観測することでクライアントがアクセスしようとしている Web サイトなどを特定でき る - プライバシー
  3. ECH の概要 - TLS ハンドシェイクメッセージ Client Hello は平文 - Client

    Hello には平文の SNI 拡張が含まれる - Server Name Indication - 第三者は SNI を観測することでクライアントがアクセスしようとしている Web サイトなどを特定でき る - プライバシー - Client Hello を暗号化して ECH 拡張に詰める
  4. ECH の概要 ClientHello { SNI: “cloudflare-ech.com” ECH: “...” } 通信相手は

    cloudflare-ech.com のように見える パディングなどした後、暗号化した ClientHello など - ECH 拡張を含む Client Hello の概略
  5. ECH の概要 - Client Hello を暗号化して ECH 拡張に詰める - 暗号化には

    HPKE を用いる - https://datatracker.ietf.org/doc/rfc9180/ - 公開鍵などを含む ECHConfig は HTTPS RR で配ることが検討されている - https://datatracker.ietf.org/doc/rfc9460/ - https://datatracker.ietf.org/doc/draft-ietf-tls-svcb-ech/
  6. ECH の概要 - TLS ライブラリにおける実装状況 - https://github.com/tlswg/draft-ietf-tls-esni/wiki/Implementations - openssl/openssl -

    https://github.com/openssl/openssl/tree/feature/ech - rustls - https://github.com/rustls/rustls/pull/2104 - golang/go - https://github.com/golang/go/tree/go1.24rc2
  7. echspec とは - https://github.com/thekuwayama/echspec - A conformance testing tool for

    ECH implementation. - Ruby で実装した - ECH を有効化した TLS のクライアントとして動作 - サーバとハンドシェイクを試みる - ハンドシェイクの過程でサーバが ECH の仕様に沿った実装になっているかチェック
  8. The client-facing server computes ClientHelloInner by reversing this process. First

    it parses EncodedClientHelloInner, interpreting all bytes after client_hello as padding. If any padding byte is non-zero, the server MUST abort the connection with an "illegal_parameter" alert. https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-22#section-5.1-9 echspec とは
  9. echspec とは - 例えば、クライアントから送信されるメッセージの 0 パディング部分が 0 以外でパ ディングされていた場合、サーバは illegal_parameter

    アラートを返してハンドシェ イクを中止する (MUST) - echspec ではテストケース - EncodedClientHelloInner を 0 以外でパディングして送信 - illegal_parameter アラート返送されることをチェック
  10. echspec の構成 - echspec - https://github.com/thekuwayama/echspec - ech_config - https://github.com/thekuwayama/ech_config

    - tttls1.3 - https://github.com/thekuwayama/tttls1.3 - hpke-rb - https://github.com/sylph01/hpke-rb - openssl - https://github.com/ruby/openssl
  11. echspec tttls1.3 hpke-rb ruby/openssl openssl/openssl echspec の構成 TLS1.3 ECH HPKE

    RSA, AEAD, X.509, Hash, etc conformance testing tool ech_config
  12. echspec でやったこと - 動的な解析 - 書き換える ⇄ 試す - ハンドシェイクメッセージログの出力

    - 暗号化された ClientHello (ClientHelloInner) - client,server_handshake_traffic_secret で暗号化されたハンドシェイクメッセージ - ハンドシェイクの過程を読める - 目的をもって TLS ECH 実装のソースコードを読める
  13. まとめ - Ruby で ECH の仕様準拠テストツールを実装した - 楽しい!! 👍👍 -

    今後 - テストケースを増やしていきたい - 他の ECH 実装についても仕様準拠テストしていきたい