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

# 重建根扩展私钥

> 掌握如何恢复根扩展私钥，确保资产的安全访问。

**注意**：如果 Cobo Portal 在极端情况下停止服务，您可以利用活跃的恢复私钥重建与 Vault 相对应的根扩展私钥。与该 Vault 内钱包地址相关联的所有私钥都可以从这些根扩展私钥中获取。重建根扩展私钥需要依赖另一个私钥（一组私钥分片）的支持。

## 步骤 1：导出私钥分片

#### 针对移动端签名人

1. 访问 [iCloud.com](https://www.icloud.com/) 并使用 Apple ID 和密码登录。
2. 打开 iCloud Drive。
3. 找到并选择要导出的备份数据文件。
4. 单击页面顶部的**下载**图标或双击备份的数据文件。
5. 文件将下载到您的默认下载位置。

#### 针对服务端签名人

1. 完成必要的前期准备工作。

* 确保可以访问 secrets.db 数据库文件以及与所选恢复私钥相关联的两个私钥分片的相应密码。
* 共同生成每组私钥分片后，记录下根扩展公钥。根扩展公钥一旦生成，将保持不变。

2. 准备恢复环境。

托管 TSS Node 的服务器必须处于离线状态或安全环境中。请确保您的 TSS Node 包和数据库文件随时可用。TSS Node 包的目录结构如下。

```
cobo-tss-node-generic
├── configs
│   └── cobo-tss-node-config.yaml.template
├── db
│   └── secrets.db
├── recovery  （导出私钥分片所在的文件夹，无需手动新建）
└── tss-node.sh
```

3. 验证私钥分片信息。

进入 `cobo-tss-node-generic` 目录，获取组信息。

```
sudo ./tss-node.sh info group
```

确保输出中的根扩展公钥与前期准备时保存的公钥一致。如果 TSS Node 管理多个私钥分片，请找到具有正确根扩展公钥的私钥（分片组），并记下组 ID。

4. （仅限第三方恢复）与受托第三方分享与您打算导出的私钥分片相关联的根扩展公钥。受托第三方将利用此信息验证其私钥分片信息。

5. 在离线或安全的网络环境中，在 TSS Node 的根目录下运行以下命令，导出私钥分片。

```
./tss-node.sh export-share --group-ids <groupID1>,<groupID2>
```

6. 输入在初始化 TSS Node 时设置的密码。

7. 输入新密码，对每个导出文件中的私钥分片进行加密。注意，密码设置后将无法修改。如果密码丢失，将无法访问导出的私钥分片文件，且必须重新导出。建议使用密码管理程序（如 1Password）设置 16-32 个字符的复杂密码，并将密码存储在安全设备上。

8. 私钥分片将自动导出为 JSON 文件。

9. 请验证导出文件中根扩展公钥和组 ID 是否准确无误。

## 步骤 2：重新构建所有私钥分片并派生所有钱包地址的私钥

请按照以下说明重新构建所有私钥分片，并派生出与 Vault 相关联的所有钱包地址的私钥。本说明适用于移动端签名人和服务端签名人。

1. 完成必要的前期准备工作。

* 从 [open-source repository](https://github.com/CoboGlobal/cobo-mpc-recovery-kits) 获取恢复工具包。编译 cobo-mpc-recovery-tool 之前，请先阅读 `README.md` 文件中提供的说明。或者，您也可以[点击此处](https://github.com/CoboGlobal/cobo-mpc-recovery-kits/releases)下载最新版本的 cobo-mpc-recovery-tool。
* 使用以下任一方法保存与每个 Vault 相关联的钱包地址：
  * 在私钥生成过程中，通过 generate\_addresses 操作检索 `AddressDetail`。返回的结果中会包含每个地址对应的 HD 路径。
  * 定期通过 list\_addresses 操作检索 `AddressDetail`。返回的结果中会包含每个地址对应的 HD 路径。
  * 点击 Cobo Portal 上的导出图标，手动导出与 Vault 相关的所有地址信息。

2. （仅限第三方恢复）获取受托第三方导出的私钥分片。受托第三方导出的私钥分片文件也是 JSON 格式。请验证您和受托第三方导出的文件中的根扩展公钥是否相同。

3. 在与 `cobo-mpc-recovery-tool` 相同的目录级别创建一个新的恢复文件夹。将导出的两个私钥分片文件粘贴到恢复文件夹中。

```
├── cobo-mpc-recovery-tool
└── recovery
    ├── recovery-secrets-<nodeID1>-<time1>
    └── recovery-secrets-<nodeID2>-<time2>
```

4. 使用实际的组 ID 和私钥分片文件执行以下命令。

```
./cobo-mpc-recovery-tool verify \
    --recovery-group-files recovery/recovery-secrets-<nodeID1>-<time1>,recovery/recovery-secrets-<nodeID2>-<time2> \
    --group-id <groupID>
```

5. 等待 MPC 恢复工具自动完成验证过程。

* cobo-mpc-recovery-tool 将验证与第一个私钥分片文件相关联的私钥/值。
* cobo-mpc-recovery-tool 将使用第一个私钥分片文件中的“participants”信息派生并验证根扩展公钥。
* 需要手动输入与第一个私钥分片文件相关的密码解密。然后，cobo-mpc-recovery-tool 会派生并验证相应的公钥。
* cobo-mpc-recovery-tool 将验证与第二个私钥分片文件相关联的私钥/值。
* cobo-mpc-recovery-tool 将验证第一个私钥分片文件中的私钥/值与第二个私钥分片文件中的私钥/值是否一致。
* cobo-mpc-recovery-tool 将使用第二个私钥分片文件中的“participants”信息派生并验证根扩展公钥。
* 需要手动输入与第二个私钥分片文件相关的密码进行解密。然后，cobo-mpc-recovery-tool 会派生并验证相应的公钥。

6. 将进行前期准备工作时导出的 `address.csv` 文件移动到恢复文件夹下。

```
├── cobo-mpc-recovery-tool
└── recovery
    ├── address.csv
    ├── recovery-secrets-<nodeID1>-<time1>
    └── recovery-secrets-<nodeID2>-<time2>
```

7. 使用实际的组 ID 和私钥分片文件执行以下命令。

* 输入密码解密出两个私钥分片文件。
* 将重新构建根扩展私钥和根扩展公钥。
* 确保输出中的根扩展公钥与您在前期准备工作中保存的根扩展公钥相同。
* 将自动导入 address.csv 文件，系统将根据 address.csv 文件中的 HD 路径生成 `recovery/address-recovery.csv` 文件。
* 执行完成后，与该 Vault 中钱包地址相关的所有私钥将以纯文本形式存储在 `recovery/address-recovery.csv` 文件中。请确保安全存储所有数据。

```
./cobo-mpc-recovery-tool \
    --recovery-group-files recovery/recovery-secrets-<nodeID1>-<time1>,recovery/recovery-secrets-<nodeID2>-<time2> \
    --group-id <groupID> \
    --csv-file recovery/address.csv \
    --show-root-private-key
```
