Sign inSign up

quaisecurity/cipherflow

By quaisecurity

•Updated 24 days ago

Post-quantum (PQC) proxy, hybrid ML-KEM key exchange to stop harvest-now-decrypt-later (HNDL).

Image
Networking
Security
Monitoring & observability
1

96

quaisecurity/cipherflow repository overview

⁠QuAi CipherFlow Community Edition

A post-quantum (PQC) proxy that protects existing traffic against harvest-now-decrypt-later (HNDL). CipherFlow carries your TCP and TLS traffic inside a hybrid post-quantum TLS 1.3 tunnel (X25519 + ML-KEM-768, the NIST FIPS 203 algorithm). Your applications are not changed.

Free to use, including in production. ~10 MB image, non-root, no telemetry.

⁠Is your server quantum-safe? Check in one command

docker run --rm quaisecurity/cipherflow probe example.com:443

ACCEPTED ... X25519MLKEM768 (hybrid post-quantum) means the server negotiated hybrid key exchange. REFUSED means it did not, so traffic to it recorded today could be decrypted by a future quantum computer. The probe offers only the hybrid group, so there is no silent fallback. It reports what the server negotiates; it does not validate the certificate.

⁠Make a tool that knows nothing about PQC speak it (2 minutes)

docker run -d --name cipherflow-demo -p 127.0.0.1:8080:8080 \
  -e CIPHERFLOW_MODE=client \
  -e CIPHERFLOW_LISTEN=:8080 \
  -e CIPHERFLOW_TARGET=pq.cloudflareresearch.com:443 \
  quaisecurity/cipherflow

curl -s -H "Host: pq.cloudflareresearch.com" http://127.0.0.1:8080/cdn-cgi/trace | grep kex
docker logs cipherflow-demo | grep '"session"'

Cloudflare's own trace reports kex=X25519MLKEM768 for a plain curl, and CipherFlow's log records the same session with "pq":true. Clean up with docker rm -f cipherflow-demo.

⁠Put it in front of your own service (Linux)

docker run -d --name cipherflow --network host --read-only --cap-drop ALL \
  -e CIPHERFLOW_MODE=server \
  -e CIPHERFLOW_LISTEN=:8443 \
  -e CIPHERFLOW_TARGET=127.0.0.1:8080 \
  quaisecurity/cipherflow

docker run --rm --network host quaisecurity/cipherflow probe 127.0.0.1:8443
docker run --rm --network host quaisecurity/cipherflow probe -kex X25519 127.0.0.1:8443

The first probe is accepted on hybrid; the second, offering only classical X25519, is refused. Current browsers, CDNs and OpenSSL 3.5+ clients connect on hybrid without any changes. With no certificate configured the gateway generates a self-signed one at startup; see the documentation for real certificates, pinning and mutual TLS.

⁠What you get

  • Server mode: terminates hybrid TLS in front of a service.
  • Client mode: wraps outbound traffic from applications that cannot do post-quantum key exchange.
  • Crypto agility: permitted key exchange groups and cipher suites live in a policy file that is validated and applied live, without a restart. An invalid policy is rejected and the previous one stays in force.
  • Audit trail: every session is logged as JSON with its negotiated group, cipher suite and policy version.
  • Operations: health check, status and Prometheus metrics endpoints; read-only filesystem; all capabilities dropped.

⁠What it does not do

  • Authentication uses classical certificates (ECDSA/RSA). The key exchange is what protects against harvest-now-decrypt-later.
  • Not FIPS 140 validated. Cryptography comes from the Go standard library (crypto/tls, crypto/mlkem).
  • TCP only. No UDP or QUIC.
  • Release candidate: latest is currently 1.0.0-rc1, linux/amd64 only. Pin quaisecurity/cipherflow:1.0.0-rc1 for repeatable deployments.

⁠Verified against

Cloudflare (as a client, and with Cloudflare in front of the gateway), OpenSSL 3.5, and Chrome.

⁠Documentation, issues and contact

Built by QuAi Security Labs. https://www.quaisecurity.com⁠

Tag summary

Content type

Image

Digest

sha256:b51ca1cfa…

Size

3 MB

Last updated

24 days ago

docker pull quaisecurity/cipherflow