Mpcium 核心安全原则

Mpcium 实现了门限签名方案,并采用业界标准的安全实践来保护密码学操作:

  1. 分布式信任:任何单一实体都不持有完整的私钥
  2. 门限密码学:签名操作需要 t+1 个节点参与
  3. 端到端校验:所有通信都会被签名和校验
  4. 纵深防御:多层加密与校验

身份与认证

节点身份管理

  • Ed25519 密钥对:每个节点都拥有唯一的 Ed25519 密钥对作为身份
  • 身份生成:使用 generate-identity 命令安全地创建身份:
    go run cmd/mpcium-cli/main.go generate-identity --node=node0 --peers=peers.json --encrypt
    
  • 元数据跟踪:每个身份都包含创建信息、机器详情和时间戳
  • 身份校验:所有操作都需要身份的密码学证明

消息认证

Mpcium 网络中的每条消息都要经过严格校验:

// Messages are signed before transmission
signature, err := s.identityStore.SignMessage(&tssMsg)
if err != nil {
    s.ErrCh <- fmt.Errorf("failed to sign message: %w", err)
    return
}
tssMsg.Signature = signature

// Messages are verified upon receipt
if !s.verifyMessageSignature(message) {
    return fmt.Errorf("invalid message signature")
}
  • 确定性签名:消息在签名前会被规范化,以确保一致性
  • Party ID 校验:TSS 协议确保所有参与节点都拥有有效身份
  • 签名校验:所有入站消息在处理前都要经过签名校验

加密技术

私钥加密

私钥通过多种机制进行保护:

  1. Age 加密:

    • 基于 X25519 的先进文件加密工具
    • 基于口令的加密使用 Scrypt 密钥派生
    • 认证加密,确保防篡改
    # Decrypt private key for use
    age --decrypt -o event_initiator.key event_initiator.key.age
    
  2. 密码要求:

    • 以高熵方式生成:
      < /dev/urandom tr -dc 'A-Za-z0-9!@#$^&\*()-\_=+[]{}|;:,.<>?/~' | head -c 16; echo
      
    • 系统通过不会在屏幕上回显的安全输入方式提示用户输入密码

本地存储加密

所有节点本地的敏感数据都会被加密:

// BadgerDB with mandatory encryption
	badgerKv, err := kvstore.NewBadgerKVStore(
		dbPath,
		[]byte(viper.GetString("badger_password")),
	)
  • 缺少密钥即报错:如果未提供加密密钥,系统将拒绝启动
  • 加密索引:数据和元数据都会被加密
  • ZSTD 压缩:为提高效率,数据在加密前会先被压缩

网络安全

TLS 实现

所有生产环境通信都使用 TLS:

nats:
  url: tls://127.0.0.1:4222 # Required TLS for production
  username: ""
  password: ""

consul:
  address: https://consul.example.com # Required HTTPS for production
  • 证书校验:Consul 和 NATS 连接会校验服务器证书
  • 双向 TLS:客户端和服务器相互认证
  • 强加密套件:仅使用现代、安全的加密套件

安全消息架构

NATS 消息基础设施提供:

  • 主题隔离:每个会话使用唯一的主题
  • 直接消息:点对点安全通信
  • JetStream 持久化:关键消息以加密方式持久化
  • 队列管理:带认证的分布式队列处理

门限签名协议安全

多方计算

门限签名实现包括:

  • 密钥重新分享:支持在保持公钥不变的情况下轮换密钥
  • 灵活的门限:可根据安全需求配置门限
  • 协议校验:消息中包含轮次和协议校验信息

会话安全

每个签名或密钥生成会话都实现了:

  • 会话隔离:唯一标识符可防止跨会话干扰
  • 超时处理:未在规定时间内完成的会话将过期
  • 错误传播:安全的错误处理,防止信息泄露
  • 轮次校验:协议的每一轮都会校验预期输入

运维安全

节点分布

  • 将节点部署在不同的:
    • 云服务商
    • 地理区域
    • 网络分段
    • 管理域

密钥管理

  • 分离密钥材料:将加密后的密钥与密码分开存储
  • 硬件安全:生产部署可考虑集成 HSM
  • 密钥轮换:建立定期的密钥轮换流程
  • 备份安全:为所有密钥材料维护安全的加密备份

网络加固

  • 防火墙规则:仅允许必要端口的通信
  • IP 白名单:仅允许来自已知 IP 地址的连接
  • DDoS 防护:为面向公网的组件实施 DDoS 缓解措施
  • 网络监控:监控异常流量模式

持续安全

  • 依赖扫描:定期扫描并更新依赖项
  • 渗透测试:定期开展安全评估
  • 审计日志:为所有操作维护完整的审计日志
  • 事件响应:制定并演练安全事件响应流程