Machine View

Exporting Wallet Keys

Source: https://conto.finance/docs/guides/exporting-wallet-keys

# Exporting Wallet Keys

> Export an organization-controlled wallet key without giving Conto either private key or plaintext

- Human URL: https://conto.finance/docs/guides/exporting-wallet-keys
- Raw Markdown: https://conto.finance/docs/guides/exporting-wallet-keys.md
- Terminal view: https://conto.finance/ai/docs/guides/exporting-wallet-keys

Documentation group: Guides

# Exporting Wallet Keys

Organization owners can export the private key for an `ORGANIZATION_CONTROLLED` managed wallet.
The export is owner-authorized and end-to-end encrypted: Conto relays the signed request and returns
HPKE ciphertext, but never receives the customer owner private key, the HPKE recipient private key,
or the plaintext wallet key.

This flow is not available for `CONTO_MANAGED` wallets. The control model is fixed when a wallet is
created.

## Before You Start

You need two customer-controlled P-256 keys with different purposes:

1. The **owner authorization key** registered in **Settings → Wallet Control**. Keep its private
   half in your KMS or offline signing environment.
2. A new **HPKE recipient key** for this export. Keep its private half outside Conto; Conto receives
   only its base64 SPKI public key.

  Anyone with the decrypted wallet key can sign outside Conto and bypass Conto policies. Treat the
  export as a high-risk governance action and secure the resulting key accordingly.

## Export From The Dashboard

1. Sign in as the organization **Owner**.
2. Open **Wallets**, open the organization-controlled wallet menu, and select **Export encrypted
   key**.
3. Paste the HPKE recipient public key and choose **Prepare owner authorization**.
4. Copy and base64-decode the authorization payload. Sign the decoded bytes outside Conto with the
   registered owner authorization private key using ECDSA P-256 with SHA-256 and DER encoding.
5. Paste the base64 DER signature and download the encrypted export before the displayed expiry.
6. Decrypt `ciphertext` using `encapsulatedKey`, the HPKE recipient private key, and this suite:
   `DHKEM(P-256, HKDF-SHA256) / HKDF-SHA256 / ChaCha20-Poly1305`.

For a base64 PKCS8 owner authorization private key, this Node.js snippet produces the signature the
dialog expects:

```ts

const payload = Buffer.from(process.env.CONTO_AUTHORIZATION_PAYLOAD!, 'base64');
const ownerKey = createPrivateKey({
  key: Buffer.from(process.env.CONTO_OWNER_PRIVATE_KEY!, 'base64'),
  format: 'der',
  type: 'pkcs8',
});

const signature = sign('sha256', payload, ownerKey).toString('base64');
console.log(signature);
```

The downloaded JSON is deliberately encrypted and is never persisted by Conto. A successful export
marks the wallet's key-access status as exported and writes an audit event, without storing the
ciphertext or plaintext. Conto records an export intent before contacting the provider. If the
provider response or the final audit write is ambiguous, `keyAccess` becomes
`EXPORT_RECONCILIATION_REQUIRED`; another export is blocked until Conto reconciles the provider's
durable export timestamp.

## Operational Boundaries

- The owner authorization payload is bound to the provider wallet, recipient public key, request
  body, Conto app ID, and a ten-minute expiry.
- Only an authenticated organization Owner can prepare or submit an export.
- Conto's additional-signer key cannot authorize export or administer the customer owner quorum.
- Conto can continue signing through its normal policy and approval path after export, but the
  exported key also permits signing outside Conto.

See [Custody Modes](https://conto.finance/guides/custody-modes) for the broader control and enforcement comparison.