> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Self-custody

> Users control their Rhinestone accounts, and Rhinestone can't move their funds.

A Rhinestone account is a smart contract wallet controlled by the user's [passkey](/home/concepts/passkeys). The passkey is created on the user's device, and its private key never leaves their authenticator. Rhinestone only sees the public key and signed approvals, so it can't sign for the user or move their funds.

## The custody tests

Four tests separate a self-custodial wallet from a custodial service.

| Test                                                         | Rhinestone                                                                                                                                                           |
| ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Reconstruction**: can the provider obtain the user's key?  | No. The passkey's private key is generated by the user's authenticator and stays there. Rhinestone receives the public key and signed approvals, never key material. |
| **Seizure**: can the provider move the user's funds?         | No. The account only accepts transactions approved by the user's passkey, and recovery is trustless, so Rhinestone can't add a key of its own.                       |
| **Censorship**: can the provider block the user?             | No. Funds stay at the user's own smart account address, not in an omnibus wallet, and the account enforces its own configuration onchain.                            |
| **Independence**: can the user recover without the provider? | Yes. Recovery is trustless and doesn't depend on Rhinestone.                                                                                                         |

## If Rhinestone is unavailable

Once deployed, the account is an onchain contract that keeps enforcing its configuration whatever happens to Rhinestone. Passkey signatures are verified onchain rather than by our API, and passkeys sync through the user's platform or password manager. An outage doesn't move funds or change who controls the account.

## Regulation

Under MiCA, custody means safekeeping crypto-assets or the means of access to them, such as private keys. Rhinestone holds neither.

In the US, SEC and FinCEN guidance distinguishes hosted wallets from unhosted wallets, where the user controls the keys and transacts independently. Passkey-controlled smart accounts align with the unhosted model.

<Warning>
  This isn't legal advice. Whether your product counts as non-custodial also
  depends on how you operate it, your product terms, and your jurisdiction, so
  review it with your own counsel.
</Warning>

## Compared with other architectures

|                              | Seed phrases | Browser extensions | Custodial | MPC     | Server-side TEE | Rhinestone passkeys      |
| ---------------------------- | ------------ | ------------------ | --------- | ------- | --------------- | ------------------------ |
| Key held by the user         | Yes          | Yes                | No        | No      | No              | Yes                      |
| Hardware-protected           | No           | No                 | No        | Depends | Depends         | Depends on authenticator |
| Provider cannot sign alone   | Yes          | Yes                | No        | No      | No              | Yes                      |
| Provider cannot seize assets | Yes          | Yes                | No        | No      | No              | Yes                      |
| Recoverable                  | No           | No                 | Yes       | Yes     | Yes             | Yes                      |

Whether a passkey is device-bound or synced, and whether secure hardware backs it, depends on the user's authenticator and platform. See [Passkeys](/home/concepts/passkeys).
