Private Client Authentication for Institutional EOAs
Authenticate client externally-owned accounts in a way that satisfies regulatory KYC/AML requirements while preserving on-chain privacy. The institution maintains a Merkle tree of approved client EOAs; clients prove inclusion with a zero-knowledge proof plus a nullifier. Observers see neither the client's identity nor links between the client's other EOAs.
Authenticate client externally-owned accounts in a way that satisfies regulatory KYC/AML requirements while preserving on-chain privacy. The institution maintains a Merkle tree of approved client EOAs; clients prove inclusion with a zero-knowledge proof plus a nullifier. Observers see neither the client's identity nor links between the client's other EOAs.
- Off-chain KYC process operated by the institution or a regulated distributor, producing a per-client approval record.
- Merkle tree of approved EOAs maintained off-chain and committed on-chain as a root.
- On-chain root registry contract that holds the current and recent roots for proof verification.
- Membership circuit that proves Merkle inclusion, binds a nullifier to the leaf, and proves control of the private key for the EOA.
- Nullifier set stored on-chain or in the verifier contract to prevent proof replay.
- Client wallet with zero-knowledge prover integration for generating membership proofs.
- Audit interface so regulators can verify tree updates and proof validity without learning which leaf belongs to whom.
Guarantees:
- Hides client identity, KYC record, and linkage across the client's other EOAs.
- Proves Merkle membership in the approved set, control of the corresponding private key, and non-replay via the nullifier.
- Scoped disclosure to regulators: the registry operator can selectively reveal the mapping between leaves and client identities under a legal process.
Threat model:
- Soundness of the zero-knowledge proof system and the Merkle hash function.
- Honest tree construction by the institution. A dishonest issuer can insert unapproved leaves, inflating the anonymity set with accounts that did not go through KYC.
- Non-censoring root publication path. If the institution freezes root updates, newly-approved clients cannot authenticate.
- Out of scope: network-layer metadata (IP, timing), on-chain behavioural fingerprints after authentication, and deanonymisation via transaction graph analysis.
- Proof generation adds latency (seconds on commodity hardware, longer in browser WASM). Wallets need a prover integration.
- Tree updates must be frequent enough for newly-approved clients to transact. Batch cadence is a governance parameter.
- Current Semaphore-style membership circuits do not natively support proving that several EOAs derive from the same seed. Multi-address support requires an extended circuit or a separate attestation layer.
- Revocation requires a root update and careful handling of in-flight proofs against the previous root.
A custodian runs a KYC registry and inserts approved client EOAs into a Merkle tree. A client generates a membership proof showing inclusion in the current root, bound to a fresh nullifier. The custodian's contract validates the proof before processing a tokenised-security transfer. External observers see the transaction and a nullifier but cannot link the EOA to a specific client or discover the client's other addresses. The regulator can later audit the registry root, the nullifier set, and sampled inclusion proofs.