数据篡改检测

Fystack 通过一个并行的完整性层来加固其业务数据库,该层会对敏感数据行进行加密签名。每条受保护的记录都会生成一个 SHA-256 哈希,并使用存放在专用 SecretStore 中的 Ed25519 密钥对其签名。签名保存在独立的完整性表中,因此即使攻击者篡改了业务数据,篡改行为也能被立即发现。

这一机制有助于防范内部人员在获得数据库访问权限后暗中修改记录,确保任何未经授权的变更都能被立即发现,并且篡改行为可被证明。

攻击者或内部人员对数据库的篡改会被检测到并触发告警
Click to open the full-size diagram
因钱包数据被篡改,提现被阻止

因钱包数据被篡改,提现被阻止

1. 完整性工作流程

完整性层如何工作?

完整性工作流程:提取、哈希、签名、存储
Click to open the full-size diagram
  • 确定性序列化: 受保护的字段在哈希之前会被排序和规范化,保证相同的逻辑数据始终产生相同的字节流。

受保护的内容

  • 钱包元数据: 钱包 ID、所属工作区、所属用户、阈值设置。
  • 钱包公钥: 公钥内容、算法族(ECDSA/EdDSA)、关联的钱包。
  • 钱包设置: 自动审批限额、支出策略、风控措施。
  • 钱包地址: 链上地址、地址类型、网络标准。
  • HD 密钥元数据: 派生索引、加密版本、区块链类型。
  • MPC 钱包配置: 签名阈值(如 2-of-3 等)、MPC 库版本、TSS 协议版本。

签名与校验生命周期

  1. 提取被标记为需要完整性保护的字段。
  2. 进行确定性序列化,确保字段顺序和格式不会发生偏差。
  3. 使用 SHA-256 进行哈希,生成紧凑的指纹。
  4. 使用保存在 SecretStore 或 KMS 中的 Ed25519 私钥对哈希签名。
  5. 将签名、哈希、版本和元数据存入完整性记录表。

校验

  1. 在读取或审计时获取当前的业务记录。
  2. 根据当前字段值重新计算 SHA-256 哈希。
  3. 将重新计算的哈希与已存储的哈希进行比对,任何不一致都会被标记为篡改。
  4. 使用配置(而非数据库)中当前版本的公钥校验 Ed25519 签名。
  5. 若任一步骤失败,则阻止操作、通知安全团队并记录该尝试。

2. 检测与监控

钱包阈值被修改

  • 攻击:DBA 试图将钱包从 2-of-3 修改为 1-of-3。
  • 结果:哈希不一致 → 签名校验失败 → 钱包操作被阻止 → 触发告警。

自动审批限额被调高

  • 攻击:内部人员将自动审批限额从 $1,000 调高到 $1,000,000。
  • 结果:已签名的限额字段发生变化 → 系统拒绝采用被篡改的值并记录事件。

充值地址被替换

  • 攻击:攻击者将充值地址替换为自己的地址。
  • 结果:地址哈希不同 → 签名不匹配 → 付款中止 → 通知安全团队。

威胁防护矩阵

场景

防护

数据库凭证泄露

被篡改的数据行会产生新的哈希,签名校验会立即失败。

使用被修改的数据恢复备份

恢复的记录与已保存的签名不再匹配,从而触发事件响应。

恶意 DBA 修改策略

自动审批和策略字段均已签名,相关操作会被阻止,直至完成安全审查。

被攻破的管理员账户修改钱包配置

校验使用带外管理的公钥,因此无法伪造签名。