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

# 风控最佳实践

> 了解在服务端签名人中配置风控机制的基本安全实践和实施指南。

<Tip>
  即刻安装 [Cobo WaaS Skill](/developers/v2_cn/guides/overview/cobo-waas-skill)，在 Claude Code、Cursor 等 AI 开发环境中使用自然语言集成 WaaS API，显著提升开发效率 🚀
</Tip>

服务端签名人有两种风控机制：嵌入式风控和 TSS Node 回调。本指南介绍了实施这两种机制的安全最佳实践。

* 嵌入式风控提供基础的、预定义的规则，这些规则不能自定义。您可以在 `configs/cobo-tss-node-config.yaml` 文件中配置风控规则。

* 对于 TSS Node 回调，您需要在回调服务器中实现自定义的风控逻辑，根据您的特定规则检查回调请求。回调请求中需要检查的关键字段：
  * `request_detail`：包含私钥生成、私钥 Resharing 和交易签名的关键信息。
  * `extra_info`：提供额外的上下文信息；应与 `request_detail` 交叉验证。

## 私钥生成

我们建议对私钥生成请求使用嵌入式风控。通常不需要为此操作使用回调服务器逻辑。

按如下方式配置私钥生成的嵌入式风控：

```yaml theme={null}
embedded_risk_control_rules:
  enable: true
  key_gen:
    reject_all: false
    allow_list:
      - threshold: 2
        node_ids:
          - <Cobo TSS Node ID>
          - <ThirdParty TSS Node ID>
          - <Customer TSS Node ID>
  key_sign:
    reject_all: true
  key_reshare:
    reject_all: true
  key_share_sign:
    reject_all: true
```

此配置：

* 允许使用指定阈值和 TSS Node ID 的私钥生成
* 拒绝所有其他请求

## 私钥 Resharing

我们建议对私钥 Resharing 请求使用嵌入式风控。通常不需要为此操作使用回调服务器逻辑。

按如下方式配置私钥 Resharing 的嵌入式风控：

```yaml theme={null}
embedded_risk_control_rules:
  enable: true
  key_gen:
    reject_all: true
  key_sign:
    reject_all: true
  key_reshare:
    reject_all: false
    allow_list:
      - xpubkey: <EXTENDED_ROOT_PUBKEY>
        new_threshold: 2
        new_node_ids:
          - <Cobo TSS Node ID>
          - <ThirdParty TSS Node ID>
          - <Customer TSS Node ID>
  key_share_sign:
    reject_all: true
```

此配置：

* 允许来自指定私钥分片持有者组、阈值和 TSS Node ID 的私钥 Resharing 请求。
* 拒绝所有其他请求

## 交易签名

我们建议对交易签名请求同时使用嵌入式风控和回调服务器逻辑。

### 嵌入式风控

配置交易签名的嵌入式风控规则：

```yaml theme={null}
embedded_risk_control_rules:
  enable: true
  key_gen:
    reject_all: true
  key_sign:
    reject_all: false
  key_reshare:
    reject_all: true
  key_share_sign:
    reject_all: true
```

此配置仅允许签名请求，同时拒绝所有其他请求。

### 回调风控

在您的 TSS Node 回调服务器中实现以下安全检查：

1. 验证交易哈希以防止交易被篡改：
   1. 从 `extra_info.Transaction.RawTxInfo.UnsignedRawTx` 提取原始交易数据
   2. 根据特定链的规则计算此原始交易数据的哈希值
   3. 将计算出的哈希值与 `request_detail.msg_hash_list` 中提供的哈希值进行比较
   4. 如果哈希值不匹配，则拒绝交易

2. 验证关键的交易参数以防止未经授权或恶意的交易：
   1. 根据特定链的格式解析 `extra_info.Transaction.RawTxInfo.UnsignedRawTx`，提取以下关键参数：
      * Gas 费用：确保在可接受的范围内
      * 目标地址：验证是否在允许的地址列表中
      * 交易金额：检查是否符合配置的限制
      * 链 ID：确认是否匹配您预期的网络
      * Call data
      * 根据需要验证其他特定参数
   2. 将解析出的参数与 `extra_info.Transaction` 中的值进行比对
   3. 将解析出的参数或 `extra_info.Transaction` 与通过 WaaS 2.0 API 构建的原始交易进行比对

需要验证的其他信息（非关键安全问题）：

* 验证签名私钥分片：

  * `tweak_list`：签名中使用的 tweak 列表
  * `bip32_path_list`：BIP32 派生路径。
  * `root_pub_key`：私钥分片持有者组的根扩展公钥。

  使用这些信息派生签名私钥的地址或公钥，确保其正确性。不正确的私钥可能导致从非预期地址提币。

* 检查 `signature_type` 是否与目标区块链兼容，因为不同链的签名类型各不相同。

## 自动归集实现

对于启用了自动归集的 MPC 钱包，实现基于白名单的审批系统，该系统应：

1. 验证交易哈希以确保交易完整性。
2. 检查目标地址是否在预先批准的白名单中。
3. 自动批准满足这两个条件的交易。

[TSS Node 回调服务器模板](https://github.com/CoboGlobal/cobo-mpc-callback-server-v2-template)提供了此白名单逻辑的示例实现：

1. 在 [callback-server-config.yaml](https://github.com/CoboGlobal/cobo-mpc-callback-server-v2-template/blob/master/cobo-mpc-callback-server-v2-golang/configs/callback-server-config.yaml) 中配置目标地址的白名单。

2. 参考 [sign.go](https://github.com/CoboGlobal/cobo-mpc-callback-server-v2-template/blob/master/cobo-mpc-callback-server-v2-golang/internal/verifier/sign.go) 了解以下示例：
   * 解析交易内容
   * 验证哈希与已签名消息是否匹配
   * 基于白名单批准交易

<Note>
  未来我们将扩展示例项目以支持更多区块链网络。您也可以使用代码库中的 [token\_adapter](https://github.com/CoboGlobal/cobo-mpc-callback-server-v2-template/tree/master/cobo-mpc-callback-server-v2-golang/pkg/token_adapter) 模块来扩展对更多代币的支持。
</Note>
