fhEVM 密钥管理服务(KMS)深度解析:MPC 密钥生成、门限解密与密钥生命周期管理

发布时间:2026/9/12 1:38:59
fhEVM 密钥管理服务(KMS)深度解析:MPC 密钥生成、门限解密与密钥生命周期管理 fhEVM 密钥管理服务KMS深度解析MPC 密钥生成、门限解密与密钥生命周期管理【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm导读KMSKey Management Service是 Zama fhEVM 协议中负责 FHE全同态加密密钥全生命周期管理的核心组件它以去中心化 MPC多方计算网络的形式为所有 host chain 提供全局 FHE 密钥生成、门限解密和零知识证明基础设施支持。本文以 docs/protocol/architecture/kms.md 为骨架结合 host-contracts 与 gateway-contracts 中的合约源码、kms-connector 实现以及协议配置完整讲解 KMS 的职责、安全架构、密钥生命周期与可审计的解密工作流帮助你理解密钥不落地、解密需共识、过程可验证的 FHE 区块链集成方案。KMS 是什么KMS 是一个由多个节点也称为 party组成的去中心化网络这些节点共同运行 MPC 协议承担以下职责安全地生成全局 FHE 密钥为公开解密和面向用户的目标解密安全地解密密文支撑零知识证明基础设施以符合 NIST 规范的方式管理密钥生命周期。KMS 完全在链下off-chain工作但其所有密钥相关操作都由Gateway发起并跟踪。这种链下计算、链上编排的职责分离保证了系统具有强去中心化与可审计性——正如 docs/protocol/architecture/gateway.md 所述Gateway 本身不存储任何敏感数据或解密密钥只负责编排与验证。KMS 的核心职责FHE 门限密钥生成Threshold Key GenerationKMS 安全地生成一套跨所有 host chain 使用的全局公钥/私钥对该密钥使密文具有可组合性composability——加密数据可以在不同合约与不同链之间共享FHE 私钥从不被任何单一 party 完整掌握而是通过门限秘密共享threshold secret sharing拆分到各 MPC 节点手中。从链上实现看这一过程由 host-contracts/contracts/KMSGeneration.sol 编排整个密钥生成被拆成prepKeygen预处理与keygen两阶段请求并额外支持crsgenCRS 生成。三类请求通过 host-contracts/contracts/shared/Constants.sol 中定义的请求类型标签在 ID 高位进行区分请求类型RequestType 枚举ID 格式高 8 位计数器基数常量PrepKeygenPrepKeygen(3)0x03PREP_KEYGEN_COUNTER_BASEKeygenKeygen(4)0x04KEY_COUNTER_BASECrsgenCrsgen(5)0x05CRS_COUNTER_BASEKmsContextKmsContext(7)0x07KMS_CONTEXT_COUNTER_BASEEpochEpoch(8)0x08EPOCH_COUNTER_BASEID 由高 8 位类型标签 31 位计数器组成REQUEST_TYPE_SHIFT 248保证所有请求 ID 全局唯一且不同类型不会重叠。keygen请求必须等待前一个 keygen 达成共识后才能发起见 KMSGeneration.sol 中KeygenOngoing回退逻辑从而保证密钥流的有序推进。基于 MPC 的门限解密Threshold DecryptionKMS 使用门限解密协议执行解密至少需要达到最小数量的 MPC party 参与例如 13 个节点中的 9 个才能稳健地解密一个值。这一设计带来两点保证抗合谋没有任何单一 party 拥有完整密钥攻击者必须控制超过门限数量的 KMS 节点才能影响系统双模式支持公开解密public decryption例如为智能合约解密用户解密user decryption结果私密返回仅以只面向该用户重新加密re-encryption的形式交付。所有解密操作的输出都由每个节点签名输出可以在链上验证实现全流程可审计。链上实现中门限以KMS 上下文context为粒度存储于 host-contracts/contracts/ProtocolConfig.sol该合约管理每上下文对应的publicDecryptionThreshold、userDecryptionThreshold、kmsGenThreshold、mpcThreshold等多类门限并限制门限不能超过该上下文 KMS 节点总数_checkThreshold。而 host-contracts/contracts/KMSVerifier.sol 中的_verifySignaturesDigestForContext则实际执行签名计数校验签名数量少于门限时直接回退KMSSignatureThresholdNotReached使用 transient storagetstore/tload对已恢复的签名者去重确保同一个 KMS 节点的重复提交不会被重复计数收集到足够不同的有效签名即返回true并在返回前清理 transient storage保证账户抽象场景下的可组合性。ZK 证明支持ZKPoKKMS 生成验证零知识知识证明ZKPoK所需的公共参考串CRS。当用户提交加密值时该 CRS 用于验证加密输入是合法且结构良好的用户确实知道所提交输入密文中包含的明文。在链上CRS 的生成同样走共识流程crsgenRequest指定maxBitLength与paramsType发起请求KMSGeneration.sol 的crsgenRequest各 KMS 节点签名响应后crsgenResponse收集签名一旦达到kmsGenThreshold即记录 CRS 摘要crsDigest并将activeCrsId更新为新生成的 CRS随后通过ActivateCrs事件发布共识存储 URL 列表。安全架构基于 MPC 的密钥共享KMS 当前由 13 个 MPC 节点组成由不同的可信组织运营私钥通过门限秘密共享拆分节点间通信使用mTLS gRPC加密保护。从部署侧看13 节点、门限、签名者地址等信息都以KmsNode包含txSenderAddress、signerAddress、storageUrl的形式登记在 ProtocolConfig.sol 的 KMS 上下文中。KMSGeneration 合约在验证响应时要求签名者地址与交易发送者地址必须匹配且同属请求时固定的上下文_checkKmsContextSignerMatchesTxSender防止跨上下文混签。诚实多数假设Honest Majority协议在至多 1/3 节点作恶时依然稳健即 13 节点中可容忍至多 4 个恶意节点即使部分节点离线或行为不当也支持保证输出交付guaranteed output delivery。这与 ProtocolConfig.sol 中mpcThreshold与各门限的设计相互印证门限的设置必须大于节点总数的 1/3确保诚实多数始终可以达成共识。安全执行环境Secure Execution Environments每个 MPC 节点默认运行在AWS Nitro Enclave这一安全执行环境中连节点运营者都无法访问自己的密钥分片。该设计显著缓解了内部人风险insider risk例如未经授权的密钥重建或分片出售。通过 Gateway 实现可审计性所有操作都通过 Gateway 广播并记录为区块链事件KMS 响应带有签名智能合约和用户都可以通过密码学方式验证结果。这构成了链下 MPC 计算 链上签名共识的闭环KMS 节点各自签名链上合约KMSGeneration.sol 与 gateway-contracts/contracts/Decryption.sol负责收集签名并判断是否达到门限任何一方都无法单独伪造或篡改结果。密钥生命周期管理Key Lifecycle ManagementKMS 遵循 NIST SP 800-57 的正式密钥生命周期模型状态描述Pre-activation密钥已创建但尚未投入使用。Active密钥用于加密和解密。Suspended轮换期间被临时替换仍可用于解密。Deactivated归档仅用于解密。Compromised被标记为误用只允许解密。Destroyed密钥材料被永久删除。为保障轮换期间的互操作性KMS 支持使用 FHE 进行密钥切换key switching使密文可以在轮换过程中安全地在不同密钥之间迁移。链上对应实现是keygen的**迁移migration**模式keygen(ParamsType paramsType, uint256 existingKeyId)传入existingKeyId时会校验旧密钥必须是当前激活密钥、参数类型必须一致并通过ActivateKey事件将新生成的压缩密钥集CompressedKeySet绑定到既有密钥上见 KMSGeneration.sol 的_checkMigrationRequest与_checkCompressedKeySetDigest。备份与恢复Backup Recovery在 MPC 稳健性之外KMS 还提供托管式备份系统每个 MPC 节点将自己的密钥分片拆分成加密片段分发给独立托管方custodian若某个分片丢失达到法定人数quorum的托管方可协作恢复该分片即使多个 MPC 节点离线也能完成恢复该方法保障业务连续性与面对宕机的韧性所有恢复操作都需要运营者达到法定人数并且在链上完全可审计。工作流示例公开解密Public Decryption原文档给出了公开解密的完整链路结合合约源码可以进一步还原每个步骤的链上行为智能合约通过预言机请求解密预言机调用 Gateway 链上的 Decryption.sol 的publicDecryptionRequest(ctHandles, extraData)合约从CiphertextCommits获取 SNS 密文材料、校验同一批次 handle 属于同一keyId并生成全局唯一的publicDecryptionId同时**将请求时的 KMS 上下文固定pin**到该请求上。Gateway 校验权限并发出事件Decryption.sol校验 ACL 权限该合约持有 ACL 的同步副本并向 KMS 节点广播PublicDecryptionRequest事件事件中包含ctHandles与extraData。KMS 节点取回密文、验证并运行 MPC 解密协议各 KMS 节点共同计算明文并对PublicDecryptVerification(ctHandles, decryptedResult, extraData)结构体做 EIP-712 签名。达成法定人数后发布签名结果KMS 节点经由 KMS Connector调用publicDecryptionResponse提交各自签名。合约按签名摘要digest分组存储签名verifiedPublicDecryptSignatures[decryptionId][digest]只在多个节点提交相同解密结果时才可能达到门限——这天然过滤了恶意节点的错误结果见 Decryption.sol 的publicDecryptionResponse。达到门限后触发PublicDecryptionResponse事件。预言机将明文回传上链合约验证 KMS 签名host chain 上的 KMSVerifier.sol 提供verifyDecryptionEIP712KMSSignatures解析decryptionProof格式为1 65*numSigners字节的签名区 extraData用 EIP-712 摘要恢复签名者并对照上下文内的签名者集合与门限进行验证。合约如FHEVMExecutor据此确认明文真实可信。用户解密user decryption走类似流程区别在于响应中交付的是用用户公钥重新加密后的部分解密分片userDecryptedShare且用户解密响应的签名列表按请求 ID 聚合digest 使用零值以便跨节点收集不同分片后再由用户本地重组。落地实现KMS Connector 如何连接链上与链下KMS 节点KMS Core与 Gateway 之间由 kms-connector 连接它是一个由三个 Rust 微服务组成的组件详见 kms-connector/docs/architecture.mdGatewayListener监听 Gateway 事件并写入 Postgres 数据库。可部署多个实例各自连接不同 RPC 节点含备用 RPC写入时使用ON CONFLICT DO NOTHING保证只有一条生效从而绝不丢失 Gateway 事件KmsWorker一个或多个工作进程收到数据库通知后取出请求、通过 gRPC 转发给 KMS Core并把响应写回数据库。处理中的请求标记under_process TRUE加锁失败则复位解锁TransactionSender唯一的交易发送者把数据库中的 KMS 响应以交易形式提交回 Gateway成功后删除记录。该架构通过数据库持久化 通知 轮询兜底见decryption_from_block_number、kms_operation_from_block_number等恢复选项保证即使宕机也能追平遗漏的事件与响应为海量解密吞吐架构文档中提到的目标是每秒数千次解密提供可靠性保障。三个服务的配置文件kms-connector/config/gw-listener.toml、kms-connector/config/kms-worker.toml、kms-connector/config/tx-sender.toml支持 TOML 文件与环境变量两种配置方式且环境变量优先级最高签名钱包既支持十六进制私钥仅限开发也支持 AWS KMS 钱包生产推荐。相关资源协议架构总览docs/protocol/architecture/overview.mdGateway 编排机制docs/protocol/architecture/gateway.md密钥生成与共识合约host-contracts/contracts/KMSGeneration.sol解密签名验证合约host-contracts/contracts/KMSVerifier.sol门限与上下文配置host-contracts/contracts/ProtocolConfig.solGateway 侧解密编排gateway-contracts/contracts/Decryption.sol链下连接组件kms-connector/README.md 与 kms-connector/docs/architecture.md【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考