A simple explanation of how we verify CRM data without exposing it
Our system proves statements about your CRM data without revealing the data itself:
1
Enter your CRM credentials (Salesforce, Autotask, etc.)
2
When you click "Connect", your browser uses a Rust TLS client (compiled to WebAssembly) to establish a secure connection to the CRM API. Your credentials are encrypted inside the browser before being sent.
3
CRM response is decrypted in your browser. The specific value needed for proof (e.g., account creation date) is extracted.
4
Barretenberg prover (compiled to WebAssembly) runs the Noir circuit and generates a cryptographic proof — all in your browser.
5
Only the proof (~2KB) and verification result are sent to the parent app via postMessage.
6
When the iframe closes, all data is destroyed. Credentials, tokens, CRM responses — everything is gone.
Traditional cryptography needs keys to encrypt/decrypt. But ZK proofs are different — they use mathematical constraints, not encryption.
1. Circuit = Rules
We define a "circuit" — a set of mathematical rules. Our circuit says: "Check if value > threshold". This circuit is public — anyone can see it.
2. Proof = Solution
When you generate a proof, you're solving a complex math puzzle that can only be solved if your statement is true. The puzzle is designed so the solution doesn't reveal your input.
3. Verification = Check
Anyone can verify the proof by checking if the solution fits the puzzle. This is fast and doesn't require knowing your private input.
Verifier learns only that your statement is true. They cannot extract the private value, account details, or any other data.
You cannot create a valid proof for a false statement. If account age is 25 days, you cannot prove it's > 30 days.
Proof is tiny (~2KB) regardless of how complex the computation is. Verification is instant.
Your CRM credentials are encrypted in your browser using Rust/WASM. Our server only sees encrypted bytes — never plaintext.
Browser-side TLS using rustls compiled to WebAssembly. Server never sees plaintext.
apps/zk/tls-client/Our Noir circuit supports 5 operators: >, <, ≥, ≤, =. Compiled to ~50KB JSON.
apps/zk/circuit/src/main.nrNo. All CRM connections happen through encrypted tunnel where our server is a blind relay. TLS encryption happens in your browser using Rust/WASM — we never see the plaintext.
No. This is mathematically impossible. The proof only contains enough information to verify the statement is true — not to reconstruct the input.
The proof itself doesn't contain the result — it's just cryptographic data (~2KB). Anyone who receives the proof must run verification to know if it's valid. We send both proof + pre-verified result for convenience (so Platform doesn't re-verify each time), but the proof can always be independently verified.
ZK proofs use public circuits (rules) and mathematical puzzles, not encryption keys. The "setup" needed for UltraHonk was done by Aztec Protocol and is embedded in Barretenberg — you get the security without managing keys.
This is a Proof of Concept demonstrating the technology. The cryptographic primitives (Noir, Barretenberg) are production-grade and used by Aztec Protocol for real financial applications.
Generate a zero-knowledge proof of your CRM data