Key Recovery

Fystack Recovery rebuilds a wallet's private keys offline from a threshold of key shares. Use it to leave Fystack, migrate a wallet, or regain funds if Fystack is unavailable.

Overview

The Fystack share is exported from the dashboard as an RSA-sealed .enc bundle, the cosigner share is exported as a passphrase-sealed .mshare, and Fystack Recovery on an air-gapped machine unlocks, combines and verifies them into ECDSA and EdDSA keys
Click to open the full-size diagram

Each signer exports its own share, encrypted:

  • Fystack share: exported from the dashboard as an .enc RSA bundle, sealed to an RSA public key you provide.
  • Cosigner share: exported with cosigner-cli export as an .mshare file, sealed with a six-word passphrase.

Fystack Recovery unlocks each file, combines the shares and checks the result against the wallet's public keys. One share alone cannot rebuild a key.

Recovery sequence: generate an RSA key pair, export the Fystack share from the dashboard, export the cosigner share, then add, unlock, combine and verify the shares in Fystack Recovery
Click to open the full-size diagram

Before you start

Download the latest Fystack Recovery release while you are still online, then move it to the offline machine. It is open source, so you can review and build it yourself.

Step 1: Generate an RSA key pair

The Fystack share is sealed to your RSA public key. Generate the key pair on the offline machine and keep the private key there.

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out recovery.key
openssl rsa -in recovery.key -pubout -out recovery.pub

Only recovery.pub leaves the offline machine.

Step 2: Export the Fystack share

Open the wallet in the dashboard and go to the Signers tab. The Fystack signer has an Export Share button.

Wallet Signers tab showing the Fystack internal signer with an Export Share button and a server cosigner
Signers tab of a 2 of 2 wallet
  1. Click Export Share.
  2. Paste the contents of recovery.pub into Recipient RSA public key (PEM).
  3. Type the wallet name to confirm and tick the acknowledgement.
  4. Click Export Share to download the .enc bundle.
Export Key Share dialog with the recipient RSA public key, wallet name confirmation and acknowledgement checkbox
The share is encrypted end-to-end to your RSA public key

Only the holder of the matching RSA private key can decrypt the bundle.

Step 3: Export the cosigner share

On the cosigner host, stop the cosigner and run export. It writes one .mshare per wallet and prints a recovery passphrase once. See Operations for details.

cosigner-cli stop
cosigner-cli export --out-dir /secure/recovery
cosigner-cli start
cosigner-cli export output listing the written .mshare files and the one-time recovery passphrase
Example output of cosigner-cli export

Each file is named <wallet-id>-<cosigner>-<date>.mshare. Copy the file for the wallet you are recovering to the offline machine.

Step 4: Add and unlock shares

Open Fystack Recovery on the offline machine and click Add share file.

Fystack Recovery step 1, Add and unlock shares, with no shares added yet
Add every share you have

Recovery supports both formats:

  • RSA bundle (.enc): unlocked with the RSA private key from Step 1.
  • Passphrase (.mshare): unlocked with the six-word passphrase from Step 3.

Add every share you have. There is no threshold to enter: the counters show how many ECDSA and EdDSA shares are unlocked out of the wallet's participants.

Recovery with the RSA bundle unlocked and the passphrase share waiting for its passphrase, 1 of 2 participants unlocked
The RSA bundle is unlocked, the .mshare is waiting for its passphrase

Enter the passphrase and click Unlock. When every share shows Unlocked, click Continue.

Recovery with both shares unlocked, 2 of 2 participants for ECDSA and EdDSA
Both shares unlocked

For HD wallets, also add the child wallet list exported with the master share under Child wallets to recover every child wallet.

Step 5: Recover

Review the wallet ID and the share counts, then click Recover keys.

Recover step showing the wallet ID and 2 ECDSA and 2 EdDSA shares ready to combine
Review before reconstructing

Step 6: Use the recovered keys

Recovery combines the shares, then checks each key against the wallet's public key and test-signs with it. Both checks must pass.

Recovered keys page showing the ECDSA key verified and test-signed with its Ethereum address, private key and public key, followed by the EdDSA key
Verified ECDSA and EdDSA keys

For each curve the result shows:

  • ECDSA: the Ethereum / EVM address, the private key (hex) and the compressed public key.
  • EdDSA: the Solana address, the private key and the public key.

The private key stays hidden until you click Reveal. Use Copy or Export... to move it into the destination wallet, then click Start over to clear it from memory.

Security checklist

  • Run Recovery on an air-gapped machine. Stay offline and never screenshot recovered keys.
  • Keep the RSA private key and the cosigner passphrase apart from the share files.
  • Move funds to a new wallet once recovered. The old wallet no longer has threshold protection.
  • Delete share files, the RSA private key and any exported keys when you are done.