Skip to main content
即刻安装 Cobo WaaS Skill,在 Claude Code、Cursor 等 AI 开发环境中使用自然语言集成 WaaS API,显著提升开发效率 🚀
服务端签名人有两种风控机制:嵌入式风控和 TSS Node 回调。本指南介绍了实施这两种机制的安全最佳实践。
  • 嵌入式风控提供基础的、预定义的规则,这些规则不能自定义。您可以在 configs/cobo-tss-node-config.yaml 文件中配置风控规则。
  • 对于 TSS Node 回调,您需要在回调服务器中实现自定义的风控逻辑,根据您的特定规则检查回调请求。回调请求中需要检查的关键字段:
    • request_detail:包含私钥生成、私钥 Resharing 和交易签名的关键信息。
    • extra_info:提供额外的上下文信息;应与 request_detail 交叉验证。

私钥生成

我们建议对私钥生成请求使用嵌入式风控。通常不需要为此操作使用回调服务器逻辑。 按如下方式配置私钥生成的嵌入式风控:
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 的嵌入式风控:
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 请求。
  • 拒绝所有其他请求

交易签名

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

嵌入式风控

配置交易签名的嵌入式风控规则:
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 回调服务器模板提供了此白名单逻辑的示例实现:
  1. callback-server-config.yaml 中配置目标地址的白名单。
  2. 参考 sign.go 了解以下示例:
    • 解析交易内容
    • 验证哈希与已签名消息是否匹配
    • 基于白名单批准交易
未来我们将扩展示例项目以支持更多区块链网络。您也可以使用代码库中的 token_adapter 模块来扩展对更多代币的支持。