Zero-knowledge proofs

Zero-knowledge proofs (ZKPs) let a prover convince a verifier that a statement is true without revealing any underlying data. The prover computes a succinct proof that can be checked quickly; the verifier learns only that the claim holds, preserving privacy. PlonK (Permutation-Argument-based Proof of Knowledge) is a universal, up‑datable zk-SNARK scheme. It requires a single trusted-setup that works for any arithmetic circuit, supports key updates without rerunning the whole ceremony, and offers fast on-chain verification thanks to a small number of pairing checks. Together, ZKPs provide privacy guarantees, while PlonK makes those guarantees practical for blockchain applications by delivering short, efficiently verifiable proofs that can be reused across different smart-contract logic.

Smart Wallet uses zkFold's in-house domain specific language for smart contracts Symbolic. To verify a JWT, we need to raise the signature into the power of the public exponent (65537 in our case) modulo public modulus. This is exactly what the Symbolic smart contract does.

PlonK proof verification algorithm expects a setup (a commitment to a computation), input parameters (the output of the computation), and the ZK proof itself.

Setup is unique for each Google public key. It is stored as datum in a Beacon token UTxO in Cardano blockchain. For more details, see Beacon manager.

Input parameters are a list of two field elements, hash of the JWT without the signature and the activation token name (see the section about building transactions).

Proof can be obtained from the Smart wallet prover. It is an open-source REST API server whose API you can explore in the corresponding tab at the top.