跳到主要内容

安全模型

加密原语

原语算法用途
签名Ed25519(ed25519-dalek)交易签名、区块签名
区块哈希SHA-512带域标签 "BLK" 的区块哈希
交易哈希SHA-256签名消息哈希
状态哈希BLAKE3状态根计算
存储哈希Keccak256合约存储槽派生
压缩snap、lz4P2P 消息压缩

传输安全

P2P 层

  • 加密:libp2p Noise 协议(认证加密)
  • 多路复用:Yamux
  • 身份:Ed25519 对等密钥
  • 最大传输大小:每条消息 256KB

RPC 层

  • TLS:不由 RPC 服务器终止。生产部署必须使用 TLS 终止反向代理。
  • CORS:限制为 localhost 来源。生产环境需配置允许的来源。
  • 请求体限制:最大请求体 1MB。

速率限制

层级限制窗口
全局 RPC200 请求/秒1 秒滑动窗口
每 IP RPC50 请求/秒1 秒滑动窗口
批量大小100 个请求每个 HTTP 请求
区块哈希扫描1000 个区块每次 chain_getBlockByHash 调用

输入验证

RPC

  • JSON-RPC 版本必须严格为 "2.0"
  • 错误消息在返回给客户端前经过清洗
  • 内部错误返回通用消息(无堆栈跟踪或内部格式)
  • 内存池拒绝详情从错误响应中删除

内存池

  • Nonce 验证:需要顺序 nonce(允许最多 5000 的间隔容差用于突发恢复)
  • 余额检查:发送方必须有足够的余额支付金额 + 费用
  • 签名验证:Ed25519 签名在接纳前验证
  • 配额系统:每类限制(金融:50K、IoT:100K、全局:100K)
  • 每发送者上限:每个发送者最多 512 个待处理交易

交易管道

无状态守卫(优先运行):

  1. 签名格式验证
  2. Ed25519 签名验证
  3. 公钥 → 地址派生检查

有状态守卫(无状态通过后运行):

  1. Nonce >= 账户 nonce
  2. 余额 >= 金额 + 费用
  3. 账户未被列入黑名单

原子提交:余额扣除和 nonce 递增原子性地发生。

共识安全

BFT 法定人数

  • 法定人数:必须有 2f+1(67%)的验证者签署区块接受证书
  • 拜占庭容错:最多可容忍 f = (n-1)/3 个拜占庭节点
  • 证书验证:主节点验证所有证明签名

PoU 防博弈

  • 分数平滑:指数移动平均防止通过瞬态行为操控分数
  • 提案者轮换:50 个区块后提案者必须退出(防止垄断)
  • 最低分数阈值:分数低于 300 将取消奖励资格

选举安全

  • 确定性组 ID:基于轮次而非时钟时间(防止主节点分歧)
  • 选举去重:每轮只提交第一个结果
  • 软拒绝未知组:主节点对未知组 ID 发出警告但继续处理

密钥管理

SDK 钱包

  • 零化:私钥在 Drop 时通过 zeroize 库清零
  • 不持久化:SDK 钱包不将密钥保存到磁盘
  • HTTPS 强制:远程 RPC 端点默认需要 HTTPS

水龙头

  • 轮询密钥:轮换 10 个密钥对以防止 nonce 竞争
  • 序列化认领faucet_lock 互斥锁防止 TOCTOU 竞态条件
  • 认领限制:每次认领 5 SAVT,每个地址 24 小时冷却

节点安全

对等节点活性

  • Gossipsub 保活:PoU 分数共享通过 gossipsub 发布以刷新 last_seen
  • 不活跃超时:600 秒(可配置)后移除对等节点
  • SlowPeer 断开:若 gossipsub 发送队列饱和则断开节点

资源限制

  • 连接处理器队列:50,000 条消息(LN + MN)
  • Gossipsub 网格:mesh_n=8、mesh_n_high=12、mesh_n_low=4
  • 栈大小:8MB 防止栈溢出
  • 内存:带背压的有界内存池

负责任披露

请通过项目的负责任披露流程报告安全漏洞。请勿就安全漏洞提交公开问题。