# Cloaked Markdown version of https://ethbeat.org/privacy/projects/cloaked ## Summary - Metrics: Not tracked. Data tracking is not available for this project. - Tracked on: Ethereum - Runs on: Arbitrum One, Base Chain, OP Mainnet, Robinhood Chain - Attributes: Stealth addresses, Any amount - Reference app: Cloaked web app (closed source, most private of 3 checked) ### Risks - Privacy: Recipient privacy. Public observer: Recipient private (sentiment: good); Chain analyst: Recipient private (sentiment: good); Network observer: Recipient at risk (sentiment: warning); Privileged insider: Recipient exposed (sentiment: bad); Future adversary: Recipient private (sentiment: good). - Trusted setup: No setup (sentiment: neutral). No setup: This project does not have a ZK system and thus no setup-related trust assumptions. - Exit window: Infinite (sentiment: good). Balances sit in addresses the user's keys control, and the open recovery tool exports their keys from the wallet and PIN or from the backup file saved at setup. Cloaked can spend them only with the user's key material. This protocol fails the walkaway test: users cannot fully use it if every centralized participant disappears. New payment-address generation, ENS resolution, address indexing, transaction construction, and relaying depend on the hosted Cloaked service. - Reproducibility: Partially reproducible (sentiment: warning). The web app and the browser extension are closed source. The open stealth library and recovery tool derive keys and recover funds without Cloaked. The API, ENS gateway, indexer and relay are closed. ### About A stealth-address wallet that receives every payment on a fresh address, with passkey login and an Incognito balance in Privacy Pools. ### Links - Website: https://app.clkd.xyz - Docs: https://clkd.xyz/docs, https://clkd.xyz/docs/ens-names, https://clkd.xyz/openapi.json - Repository: https://github.com/cloakedxyz/clkd-stealth, https://github.com/cloakedxyz/clkd-recovery, https://github.com/cloakedxyz/account, https://github.com/cloakedxyz/clkd-privacy-pools - Social: https://x.com/staycloakedxyz - Contracts explorer (Disco): https://disco.l2beat.com/ui/p/cloaked ## Protocol description Cloaked is a wallet that gives the user a fresh receiving address for every payment and shows them all as one account. Payers use the user's name, like ltwobeat.clkd.eth, and each lookup returns a new address. Outsiders see separate payments, while Cloaked sees all of them. The user trusts Cloaked, which holds a key that sees all their addresses, runs the closed-source app and submits every send. The user's funds sit in addresses that only they control, and an open recovery tool exports their keys without Cloaked. ### Keys The app creates the user's keys in their browser, from a passkey, a wallet signature and a four-digit PIN, or an email login through Web3Auth. The passkey must support the PRF extension, as Apple Passwords, Google Password Manager, 1Password and security keys with hmac-secret do. Cloaked gets a viewing key that shows all the user's addresses, while only the user can spend. ### Flow 1. **Request an address.** The app, the API or a lookup of your name asks Cloaked for a new address. For name lookups, Cloaked's server signs the answer, so a payer has to trust that the address is yours. 2. **Receive.** Each address is a plain account that only your spending key can control. 3. **Send.** Cloaked picks addresses with enough balance and prepares the transaction, your app signs it, and Cloaked submits it. Change goes to a fresh address in the same transaction, and a send that uses several addresses shows onchain that they belong together. ### App The app reads balances through Cloaked's servers, and a linked ENS name through Alchemy under Cloaked's key. Reown, WalletConnect's maker, gets the IP and Cloaked's project id whenever a sign-in or approval opens. The payment page a shared link opens loads its font from Google, which learns the payee's Cloaked name and the payer's IP. The email login runs on Web3Auth's page, which loads hCaptcha, Google Analytics and Segment. The open [recovery tool](https://github.com/cloakedxyz/clkd-recovery) recreates the user's address keys offline. ### Incognito The Incognito balance moves funds through [Privacy Pools](https://ethbeat.org/privacy/projects/privacy-pools). Cloaked submits both the deposit and the withdrawal, so it knows which belong together, and it keeps that record. ### Compliance Cloaked uses the user's IP address for sanctions and geographic checks and can refuse quotes or relays, for example for tokenized stocks. ### Fees Gas for each send comes out of the sent token, so no native balance is needed. Incognito withdrawals pay Cloaked's relay 0.1% for USDC, per its relayer API. ## Privacy **What the protocol promises:** Hides which account a receiving address belongs to. The payer knows the address it was given; sender, asset, amount and where the funds go next are public. **Apps** - **[Cloaked web app](https://app.clkd.xyz)** (Reference): The ratings assume this app, since 2026-09-16 · Closed source, build dpl_Eh8jMZFr7gBpkKE4NDJzg1EyCzo5, checked 2026-10-30 - **Cloaked browser extension** (Leaks more): Tells Cloaked's server each website that asks to connect, with the address it gets, and the server lists each address's websites after its first transaction. Fix: Keep the list of connected websites on the device and leave the website out of API calls. · [Source (checked 2026-10-27)](https://clkd.xyz/docs/api-reference) - **Cloaked agent skill** (Leaks more): Feeds every API response to the agent's AI provider, which sees each fresh address and transaction under the user's provider account. Fix: Fetch addresses and history in a local tool and pass the model only what the user asks for. · [Source](https://github.com/cloakedxyz/clkd-agent-skill/blob/6dbdff0fae94852011d5b45ada912d0dafcb2be7/references/receive.md#L5-L23) [How we pick the reference](https://ethbeat.org/publications/privacy-methodology#reference-app) Ethereum is public by default. Each protocol is rated on its main privacy promise, like hiding who paid, who received, how much, or which deposit became which withdrawal. Against each adversary, the colour says whether it holds for a careful user with the app's own settings: green yes, yellow only with significant extra work, red no. Fields marked at risk stay private only under the condition in their note. ### Public observer Recipient private (sentiment: good) **Who:** Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links. Examples: A curious counterparty, an employer, a journalist. Each payment reaches a fresh address, and nothing onchain names the account behind it. A send draws from several addresses in one transaction unless the user picks one with Advanced Control. Its change goes to a fresh address in the same transaction, which links the two. **Advice:** Generate a fresh address for each receive, spend one address at a time with Advanced Control, and send to destinations with no public link to the user. **Sources** - [Address derivation from server-held ephemeral material](https://github.com/cloakedxyz/clkd-stealth/blob/9eb359efdd4ea31f5504bf81e57dcfe6f966dc14/src/shared/genStealthAddress.ts#L17-L58) - [Input selection, Advanced Control and change](https://clkd.xyz/docs/how-it-works#sending-funds) - [A multi-address send links those addresses](https://clkd.xyz/docs/how-it-works#what-is-visible-onchain) ### Chain analyst Recipient private (sentiment: good) **Who:** Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters. Examples: Chain analytics firms, ZachXBT, data brokers. Cloaked's relayers and fee Safe mark every spend as a Cloaked user's, so an address hides among all stealth addresses Cloaked has ever spent from. Timing, distinctive amounts, recurring counterparties and change outputs cluster recipients further. Incognito withdrawals from Privacy Pools carry the same relayer and fee marks. **Advice:** Space out related payments, avoid distinctive amounts and follow the user's own change outputs to see what a counterparty can trace. **Sources** - [Documented links and change handling](https://clkd.xyz/docs/how-it-works#what-is-visible-onchain) - [Deterministic ephemeral keys stay offchain](https://github.com/cloakedxyz/clkd-stealth/blob/9eb359efdd4ea31f5504bf81e57dcfe6f966dc14/src/shared/deriveDeterministicEphemeralKey.ts#L35-L68) - [Fee Safe payers: 2,631 stealth addresses since launch, 966 in the 90 days to 2026-10-29](https://etherscan.io/address/0x145444c66A32A0464059D400Dc488CCf4704f9B5#internaltx) - [Relay fee receiver for Privacy Pools withdrawals](https://api.clkd.xyz/relayer/details?chainId=1&assetAddress=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48) ### Network observer Recipient at risk (sentiment: warning) **Who:** Sits between the user and the services and sees traffic only: ISPs, VPNs, Tor exits, public RPCs and relayers. Ties requests to a user by content, session or timing: what they name, a shared IP or login, and when they arrive. Services the operator runs count as the insider. Examples: Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend. Cloaked's servers read and spend each account's addresses through RPC providers such as Alchemy, which can group them by account. A linked ENS name, which the app reads through Alchemy, can tie such a group to the user. A payer who looks up the user's name gives their RPC the name and the new address. An email login hands the email to Web3Auth, whose key then derives the user's secrets. **Advice:** Share a payment link or a fresh address instead of the name. Log in with a passkey rather than email, and leave your own ENS name unlinked. **Sources** - [Privacy policy: RPC providers such as Alchemy receive personal data](https://clkd.xyz/docs/privacy) - [Name lookups return the signed answer through the payer's RPC](https://ethbeat.org/privacy/projects/cloaked#OffchainResolver) ### Privileged insider Recipient exposed (sentiment: bad) **Who:** Holds an operator role, custodies funds, receives keys or plaintext by design, or delivers the app: upgrade admin, custodian, view key holder, enclave operator, association set provider, hosted prover, registry, frontend host. Examples: A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator, a custodial bridge. Cloaked holds the viewing key, so it can regenerate every address and tie its activity to the user's account. It also serves the closed-source app that handles the user's keys. Its relay submits both sides of every Incognito round trip through Privacy Pools and keeps the association. **Sources** - [Viewing key and public spending key shared with the server](https://github.com/cloakedxyz/clkd-stealth/blob/9eb359efdd4ea31f5504bf81e57dcfe6f966dc14/src/client/deriveServerBoundKeys.ts#L16-L53) - [Privacy policy: retained pool associations and account data](https://clkd.xyz/docs/privacy) ### Future adversary Recipient private (sentiment: good) **Who:** Harvest now, decrypt later. Holds every byte ever published and runs the known quantum attacks: elliptic curves, pairings and RSA fall. Hashes, symmetric ciphers and post-quantum schemes stand until an attack on them is known. Examples: An intelligence agency archiving chain data today, then anyone once a break is public. No announcement is published, so address derivations cannot be replayed from the chain alone. Accounts created from a wallet signature reduce to that wallet's key plus a four-digit PIN. Passkey secrets do not follow from breaking the passkey. **Advice:** Create the user's account with a passkey, not from a wallet signature. Keep the backup file from setup, since the passkey works only on Cloaked's domain. **Sources** - [Stealth signing keys mix the spending key with a hashed secret](https://github.com/cloakedxyz/clkd-stealth/blob/9eb359efdd4ea31f5504bf81e57dcfe6f966dc14/src/client/genStealthPrivateKey.ts#L17-L34) - [Four-digit PIN and wallet address determine the signed message](https://github.com/cloakedxyz/clkd-stealth/blob/9eb359efdd4ea31f5504bf81e57dcfe6f966dc14/src/client/genCloakedMessage.ts#L15-L48) - [Independent secrets, including two WebAuthn PRF outputs](https://github.com/cloakedxyz/clkd-stealth/blob/9eb359efdd4ea31f5504bf81e57dcfe6f966dc14/src/client/genKeys.ts#L7-L67) - [Operator data and retention](https://clkd.xyz/docs/privacy) ## Risk summary ### Funds can be stolen if 1. the closed-source app is malicious or compromised and exfiltrates spending keys. 2. Cloaked's ENS signer or the owner of clkd.eth points a Cloaked name to an attacker's payment address. 3. the email inbox or Web3Auth is compromised, which restores an email user's spending key. ### Funds can be lost if 1. a user loses the passkey and encrypted backup, or the wallet and PIN, needed to re-derive the spending key. 2. the service and the app derive different address data and a payment reaches an address whose key the user cannot recreate. ### Privacy can be lost if 1. Cloaked, or anyone who obtains its records now or later, uses the viewing keys to link every account's addresses (see privileged insider). 2. Cloaked's relayers and fee Safe mark every spend as a Cloaked user's (see chain analyst). 3. Cloaked changes its closed-source app to send account data to third parties (see privileged insider). 4. Cloaked's RPC providers, such as Alchemy, group each account's addresses from its servers' requests (see network observer). 5. a payer looks up the user's name through a public RPC, which then sees the name and the new address (see network observer). 6. a user relies on the Incognito balance, whose relay keeps the link between deposit and withdrawal (see privileged insider). ## Upgrades & Governance Cloaked changes its hosted app, API, ENS gateway, indexer and relay at will, without notice onchain. The OffchainResolver is immutable. Its owner can replace the gateway URLs and the accepted signer instantly, and the signer can authenticate any answer, including a payment address. Owner and signer are the same EOA. The clkd.eth name belongs to [one of Cloaked's relayer EOAs](https://etherscan.io/address/0x6c5816aFbE2C0cda91742651e3Bb63f80D25A59c), which can point every Cloaked name to another resolver instantly. Both affect new lookups only, since existing addresses stay under their owners' keys. ## Updates Each date links the update on the HTML page, which also shows its contract diffs. ### [2026-08-21 11:41 UTC](https://ethbeat.org/privacy/projects/cloaked?update=e8d7eb25) (1 change) Initial discovery of Cloaked's ENS CCIP-Read OffchainResolver and the EOA that controls its gateway and signer. ## Permissions Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/cloaked ### Ethereum #### Actors ##### Cloaked Resolver Owner Addresses: [0xDFc622F06EfDD0E830d82f30679A3C9302BC7940](https://etherscan.io/address/0xDFc622F06EfDD0E830d82f30679A3C9302BC7940) - Can interact with OffchainResolver - change the accepted signer and gateway URLs immediately, or transfer resolver ownership - sign arbitrary offchain ENS answers, including payment addresses accepted by the resolver ## Smart contracts ![A diagram of the smart contract architecture](https://ethbeat.org/static/images/architecture/cloaked.a10b0974.png) Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/cloaked ### Ethereum #### OffchainResolver Addresses: [0x77fEF66b77d6a44AeCcCCf911f9864c7b7ca392C](https://etherscan.io/address/0x77fEF66b77d6a44AeCcCCf911f9864c7b7ca392C#code) Immutable ENS CCIP-Read resolver used by Cloaked. Every query redirects to a configurable API gateway and accepts the returned ENS record if it is unexpired and signed by the configurable signer. It does not verify that a returned payment address was derived for the named recipient. - Roles: - **owner**: Cloaked Resolver Owner - **signer**: Cloaked Resolver Owner