Skip to content

Post-Quantum Cryptography (PQC) TLS readiness: network health, operator, and relay visibility #199

Description

@cursor

Context

Alexander Færøy (ahf) posted a call to action on tor-relays asking operators to upgrade their systems to support post-quantum cryptography in Tor's TLS layer:

Mailing list thread: https://lists.torproject.org/mailman3/hyperkitty/list/tor-relays@lists.torproject.org/thread/MYP2MQDFTJUODF7SJNLJRWLXJK3KTUEU/

Background

  • OpenSSL 3.5.0 (released 2025) enabled ML-KEM-768 hybrid key exchange support
  • Tor ≥0.4.8.17 supports the x25519/ML-KEM-768 hybrid TLS handshake
  • Tor Browser has supported PQC TLS since version 13.5.22 (September 2025)
  • As of February 2026, only ~32% of relays (2,969 / 9,185) support X25519MLKEM768
  • 5 of the Directory Authorities support it
  • Scan results published at https://ahf.me/tor-tls-pqc/2026-02-26/ via the Margot scanner tool

This is a critical network-wide upgrade. Allium can help by surfacing PQC readiness data to make it easy for operators to see where they stand and what needs attention.


Proposed Changes

1. Network Health Dashboard — new PQC Readiness card

Add a card to network-health.html (alongside the existing Version Compliance card) showing network-wide PQC adoption:

  • Primary metric: % of relays supporting X25519MLKEM768
  • Relay count: PQC-ready vs not ready (with/without Guard, Exit, Authority breakdown)
  • Bandwidth-weighted PQC coverage (what fraction of network capacity is PQC-ready)
  • Directory Authority PQC support count (e.g., "5/9 DAs support PQC")
  • Trend context if historical scan data is available
  • Link to the upstream scan results and mailing list thread for operator guidance

2. Relay Operator (Contact) Pages — PQC summary bullet

On each operator/contact page, add a PQC readiness summary:

  • X of Y relays PQC-ready (count and percentage for this operator)
  • Bandwidth-weighted PQC coverage for this operator's relays
  • Which relays are missing PQC support (linking to their relay pages)
  • Suggested action if any relays are not PQC-ready (upgrade OpenSSL to ≥3.5.0 or LibreSSL equivalent)

This gives operators a single place to see their fleet's PQC status.

3. Relay Detail Pages — PQC status indicator

On each individual relay page (likely in the Software and Version section, #software):

  • PQC TLS status: Supported / Not Supported / Unknown (unreachable during scan)
  • Negotiated key exchange group (e.g., X25519MLKEM768, X25519, secp256r1)
  • Negotiated cipher suite (e.g., TLS13_AES_256_GCM_SHA384)
  • Scan date (when this relay was last checked)
  • If not supported: actionable guidance — "Upgrade to OpenSSL ≥3.5.0 or compatible LibreSSL"

Data Source

The PQC scan data comes from the Margot scanner tool maintained by the Tor Network Health Team:

  • Published at https://ahf.me/tor-tls-pqc/<date>/
  • Contains per-relay results keyed by fingerprint: cipher suite, key exchange group, reachability
  • Scans run semi-regularly; missing entries indicate unreachable relays (not necessarily lack of support)
  • This is not currently in the Onionoo API — would need to be fetched as a separate data source

Data integration considerations

  • Add a new API worker (similar to the existing uptime/bandwidth/exit-dns workers) to fetch and parse PQC scan results
  • Cache/store results alongside relay data, keyed by fingerprint
  • Handle missing relays gracefully (unreachable ≠ unsupported)
  • Consider what format the Margot data is published in (HTML table? JSON? CSV?) and parse accordingly
  • If the data format or URL structure changes, the integration should be easy to update
  • Fall back gracefully if the PQC data source is unavailable

Open Questions

  • Is the Margot scan data available in a machine-readable format (JSON/CSV), or only as an HTML table?
  • How frequently are scans published? Can we rely on a stable URL pattern?
  • Should we request that this data be added to the Onionoo API for easier integration?
  • What is the best heuristic to infer PQC support from Tor version alone (≥0.4.8.17 + OpenSSL ≥3.5.0) as a fallback when scan data is unavailable?

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions