Cosigner 安全模型
任何单一方都无法独自转移资金:Fystack 不行,你的宿主机不行,中间的任何环节也不行。
谁控制什么
| 你 | Fystack |
|---|---|
| Cosigner 宿主机、存储、网络 | Apex:配对、身份、吊销 |
| 存储密钥:密码或 KMS 策略 | Orchestrator:会话 |
| 回调服务器、策略和密钥 | Gateway:数据流认证和中继 |
| 备份、导出、升级 | MPCium 节点和工作区策略 |
签名控制
每个签名都必须通过以下所有检查:
- Apex 中的 工作区策略 和审批组。
- 发起方签名:Orchestrator 只接受由 Apex 签名的请求。
- 委员会锁定:参与方和门限必须与密钥生成时一致。
- Orchestrator 签名:Cosigner 使用配对时锁定的密钥对其进行验证。
- 审批者签名:设有审批者的钱包必须提供。
- 你的回调:必须返回已签名的
approve。 - 门限:必须有你的 Cosigner 的分片参与。
即使 Fystack 被完全攻破,第 1 到 5 项可能失效,但第 6 项依然有效:它运行在你的基础设施上,使用 Fystack 从未见过的密钥,并针对待签名的原始字节进行检查。
身份认证
Cosigner 身份:Ed25519 密钥。存储在 state/cosigner.key(0600)。通过配对令牌向 Apex 注册一次。它用于签署 Gateway JWT、每个会话事件和对等消息,以及审计条目。
Cosigner → Fystack:每个数据流使用一个 EdDSA JWT。
Gateway JWT claims
{
"iss": "<cosigner_id>",
"sub": "<cosigner_id>",
"aud": "cosigner-gateway",
"ctx": "cosigner-gateway-auth-v1",
"jti": "<random>",
"iat": 1791794400,
"exp": 1791794460
}
Gateway 只接受 EdDSA,会检查 audience 和过期时间(允许 30 秒偏差),并在 2 分钟内拒绝重复使用的 jti。吊销会立即断开正在运行的数据流。
Fystack → Cosigner:Orchestrator 密钥及其指纹在配对时锁定。每条控制消息都必须由该密钥签名,并带有递增的序列号。结果签名使用单独的前缀,因此无法被当作控制消息重放。
参与方 ↔ 参与方:对等方密钥通过已签名的 session_start 传递。使用已签名的 X25519 交换、按方向区分的 HKDF 密钥以及 ChaCha20-Poly1305。Gateway 和 Orchestrator 只能看到密文。
静态数据加密

- 存储密钥:32 字节,启动时通过密码(Argon2id
t=3,64 MiB)或 AWS KMS 解封。仅保存在内存中,使用后清零。 - 作用域密钥:HKDF-SHA256 为
shares、preparams、checkpoints、metadata分别派生独立的密钥。 - 数据行:AES-256-GCM,随机 12 字节 nonce,与作用域和行键绑定。被移动的行将无法解密。
- 明文分片不会外泄:会从事件中剥离。导出内容使用 RSA-OAEP + AES-GCM 或口令进行封装。
密码解锁:cosigner-cli 绝不会将密码放入环境变量或命令参数中。它会打开一个一次性的本地 socket;容器通过 HMAC 证明一个 32 字节令牌,然后接收经 AES-GCM 加密的密码。
运行时加固
- 基于 distroless、非 root 运行的镜像,并按摘要锁定。
- 只读根文件系统;
/tmp和/run/cosigner使用tmpfs。 - 移除所有 capability,启用
no-new-privileges。 - 配置和密钥以只读方式挂载。
- 限制:控制消息 128 KiB,每分钟 20 次启动和 10 次中止,5 个并发会话。
审计日志
仅追加的 JSONL。每个条目都经过签名并包含前一条目的哈希,因此任何修改和删除都可被检测到。请将其传输到宿主机之外保存。
供应链验证
二进制文件、安装程序和镜像均由 GitHub Actions 发布工作流构建,并使用 Sigstore 签名。证书中注明了确切的工作流和标签。运行时流水线还会执行 go mod verify、竞态测试、可复现性检查、govulncheck 和 gosec,并附带 SBOM 和来源证明。
cosigner-cli 会在每次执行 up、update 和 doctor 时进行验证。如需手动检查:
验证发布产物
cosign verify ghcr.io/fystack/cosigner@sha256:<digest> \
--certificate-identity https://github.com/fystack/cosigner/.github/workflows/release.yml@refs/tags/<version> \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
摘要和校验和:cosigner.fystack.io。如发现不匹配,请报告至 security@fystack.io。
剩余风险
- 常规模式即宿主机托管。 拥有宿主机 root 或 Docker 权限的人可以读取内存。Nitro Enclave 支持(即将推出)将消除这一风险。
- 回调质量。 不解码交易就批准的回调毫无意义。请默认拒绝。
- 可用性。 恶意宿主机可以阻断流量,或删除、回滚数据行。加密能检测修改,但无法检测删除。请保留备份。
- 重复运行。 切勿在两台宿主机上运行同一个 Cosigner。
- 恢复材料。 备份密码和导出口令可以解锁你的分片。请将它们分开存放。
在投入真实资金之前:测试恢复、重启、故障和 IAM 吊销,并进行独立审查。