MVP

The first working version of ZK-eSIM demonstrates a fully functional zero-knowledge-based eSIM authentication and activation flow

Core Components

1) ZK Circuit for Validating IMSI

  • Uses Noir to create a zero-knowledge circuit

  • Ensures the eSIM is a valid subscriber without exposing IMSI or other personal information

Example (Noir Circuit Pseudo-Code):

fn main(imsi: Field, secret_key: Field) -> Field {
    let hash = hash(imsi, secret_key);
    assert(hash == public_commitment);
    return 1;
}

2) Client-Side Prover

  • Generates ZK proofs locally

  • Sends proof to the server for validation

  • Maintains user privacy — no sensitive data leaves the client

Example (TypeScript / Client):

import { generateProof } from "./zk-prover";

const proof = await generateProof(pseudonymId, planId);
const response = await fetch('/auth/proof', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ proof })
});
const result = await response.json();
console.log(result.status); // "verified" or "failed"

3) Server-Side Verifier

  • Receives ZK proof from client

  • Verifies it using the Noir verifier

  • Returns success/failure for authentication or activation

Example (Node.js / Server):

import { verifyProof } from "./zk-verifier";

app.post("/auth/proof", async (req, res) => {
  const { proof } = req.body;
  const isValid = await verifyProof(proof);
  res.json({ status: isValid ? "verified" : "failed" });
});

API Endpoints

1) /auth/proof – Verify Identity Proof

  • POST request

  • Body: { proof: "<zk-proof>" }

  • Returns: { status: "verified" | "failed" }

2) /buy-esim – Issue Tariff Proof

  • POST request

  • Body: { proof: "<payment-proof>", planId: "basic-plan" }

  • Returns: { status: "ok", message: "eSIM plan purchased" }

3) /activate – Activate eSIM

  • POST request

  • Body: { proof: "<activation-proof>" }

  • Returns: { status: "ok", message: "eSIM activated" }

Example Request (JSON):

{
  "proof": "<zk-proof>",
  "planId": "data-plan-1"
}

Web Simulator Client

  • A frontend UI for testing all flows

  • Generates pseudonymous eSIM identities

  • Sends ZK proofs to server

  • Simulates activation and plan verification

Example (UI Actions):

  • Click “Generate eSIM Identity” → new pseudonym + keys

  • Click “Create Proof” → generates ZK proof

  • Click “Verify / Activate” → server verifies proof

  • Optional: Web3 integration for on-chain proof


Next Steps for MVP

Once the MVP is running:

  1. Explore ZK circuits and adjust proofs

  2. Test proof verification edge cases

  3. Extend client simulator with marketplace and Web3 integration

  4. Document flows in GitBook for developers

Last updated