eBPF-CipherTrace is an eBPF-based cryptographic observability agent. It intercepts cryptographic handshakes at the uprobe level (OpenSSL, Go, Java) to generate a high-fidelity Cryptographic Bill of Materials (CBOM).
For a detailed deep dive, read the blog post: eBPF CipherTrace: Cryptographic Visibility for the Quantum Era
cmd/agent/: Main agent entry point.bpf/: eBPF C source code.pkg/ebpf/: BPF loader and management.pkg/uprobes/: Logic for attaching uprobes to cryptographic libraries.pkg/cbom/: CBOM data models and generation.pkg/metadata/: Metadata enrichment (Kubernetes/Docker context).
- Linux Kernel 5.4+ (with BTF support)
- Go 1.22+
- Clang/LLVM (for BPF compilation)
- libbpf headers
-
Generate BPF artifacts (Requires
bpf2go):# This is a placeholder command # go generate ./...
-
Build Agent:
go build -o ebpf-ciphertrace ./cmd/agent
sudo ./ebpf-ciphertraceYou can test the tracing against different clients included in this repository.
This client uses the Go standard library (not OpenSSL) and prioritizes Kyber (Quantum-Safe) key exchange.
cd go-crypto-tls-client
go run main.goThis client uses the JVM's SSL stack.
cd java-https-client
javac HttpsPing.java
java HttpsPingcurl https://google.comThe agent successfully traces the TLS Handshake and identifies the negotiated Cipher Suite. It also uses heuristics to detect Post-Quantum (PQC) Key Exchanges based on the handshake size.
This is a boilerplate implementation. The BPF C code is a skeleton, and the Go loader requires generated artifacts from bpf2go.

