密钥恢复

Fystack Recovery 可在离线环境中,基于达到阈值数量的密钥分片重建钱包私钥。你可以用它来迁出 Fystack、迁移钱包,或在 Fystack 不可用时找回资金。

概述

Fystack 分片从控制台导出为 RSA 加密的 .enc 包,Cosigner 分片导出为口令加密的 .mshare,Fystack Recovery 在物理隔离的机器上解锁、合并并校验它们,得到 ECDSA 和 EdDSA 密钥
Click to open the full-size diagram

每个签名方都会导出各自加密后的分片:

  • Fystack 分片:从控制台导出为 .enc RSA 包,使用你提供的 RSA 公钥加密。
  • Cosigner 分片:使用 cosigner-cli export 导出为 .mshare 文件,使用六个单词组成的口令加密。

Fystack Recovery 会解锁每个文件,合并分片,并将结果与钱包公钥进行比对。单个分片无法重建密钥。

恢复流程:生成 RSA 密钥对,从控制台导出 Fystack 分片,导出 Cosigner 分片,然后在 Fystack Recovery 中添加、解锁、合并并校验分片
Click to open the full-size diagram

开始之前

请在联网时下载最新的 Fystack Recovery 版本,然后将其转移到离线机器上。它是开源的,你可以自行审查和构建。

第 1 步:生成 RSA 密钥对

Fystack 分片会使用你的 RSA 公钥加密。请在离线机器上生成密钥对,并将私钥保留在该机器上。

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

只有 recovery.pub 可以离开这台离线机器。

第 2 步:导出 Fystack 分片

在控制台中打开钱包,进入 Signers 标签页。Fystack 签名方旁有一个 Export Share 按钮。

钱包 Signers 标签页,显示带有 Export Share 按钮的 Fystack 内部签名方和一个服务器 Cosigner
2-of-2 钱包的 Signers 标签页
  1. 点击 Export Share。
  2. 将 recovery.pub 的内容粘贴到 Recipient RSA public key (PEM) 中。
  3. 输入钱包名称进行确认,并勾选确认声明。
  4. 点击 Export Share 下载 .enc 包。
导出密钥分片对话框,包含接收方 RSA 公钥、钱包名称确认和确认复选框
分片会使用你的 RSA 公钥进行端到端加密

只有持有对应 RSA 私钥的人才能解密该包。

第 3 步:导出 Cosigner 分片

在 Cosigner 主机上停止 Cosigner 并运行 export。它会为每个钱包写出一个 .mshare 文件,并仅显示一次恢复口令。详情请参阅运维操作。

cosigner-cli stop
cosigner-cli export --out-dir /secure/recovery
cosigner-cli start
cosigner-cli export 的输出,列出已写出的 .mshare 文件和一次性恢复口令
cosigner-cli export 的输出示例

每个文件的命名格式为 <wallet-id>-<cosigner>-<date>.mshare。将要恢复的钱包对应的文件复制到离线机器上。

第 4 步:添加并解锁分片

在离线机器上打开 Fystack Recovery,点击 Add share file。

Fystack Recovery 第 1 步,添加并解锁分片,尚未添加任何分片
添加你拥有的所有分片

Recovery 支持两种格式:

  • RSA 包(.enc):使用第 1 步中的 RSA 私钥解锁。
  • 口令(.mshare):使用第 3 步中的六词口令解锁。

添加你拥有的所有分片。无需输入阈值:计数器会显示钱包参与方中已解锁的 ECDSA 和 EdDSA 分片数量。

Recovery 中 RSA 包已解锁,口令分片正在等待输入口令,2 个参与方中已解锁 1 个
RSA 包已解锁,.mshare 正在等待输入口令

输入口令并点击 Unlock。当所有分片都显示 Unlocked 后,点击 Continue。

Recovery 中两个分片均已解锁,ECDSA 和 EdDSA 均为 2 个参与方中解锁 2 个
两个分片均已解锁

对于 HD 钱包,还需在 Child wallets 下添加与主分片一起导出的子钱包列表,以恢复所有子钱包。

第 5 步:恢复

核对钱包 ID 和分片数量,然后点击 Recover keys。

恢复步骤,显示钱包 ID 以及准备合并的 2 个 ECDSA 和 2 个 EdDSA 分片
重建前进行核对

第 6 步:使用恢复的密钥

Recovery 会合并分片,然后将每个密钥与钱包公钥比对,并使用该密钥进行测试签名。两项检查都必须通过。

已恢复密钥页面,显示已校验并完成测试签名的 ECDSA 密钥及其以太坊地址、私钥和公钥,下方是 EdDSA 密钥
已校验的 ECDSA 和 EdDSA 密钥

每条曲线的结果会显示:

  • ECDSA:Ethereum / EVM 地址、私钥(十六进制)和压缩公钥。
  • EdDSA:Solana 地址、私钥和公钥。

私钥在你点击 Reveal 之前保持隐藏。使用 Copy 或 Export... 将其转移到目标钱包,然后点击 Start over 将其从内存中清除。

安全检查清单

  • 在物理隔离的机器上运行 Recovery。保持离线,切勿对恢复出的密钥截图。
  • 将 RSA 私钥和 Cosigner 口令与分片文件分开保管。
  • 恢复后将资金转移到新钱包。旧钱包已不再具备阈值保护。
  • 完成后删除分片文件、RSA 私钥以及所有导出的密钥。