ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

EIP-3030 BLS 远程签名者 HTTP API 标准:为以太坊 2.0 验证者客户端构建安全、可扩展的密钥隔离签名服务

EIP-3030 BLS 远程签名者 HTTP API 标准:为以太坊 2.0 验证者客户端构建安全、可扩展的密钥隔离签名服务 EIP-3030 BLS 远程签名者 HTTP API 标准为以太坊 2.0 验证者客户端构建安全、可扩展的密钥隔离签名服务【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPsEIP-3030BLS Remote Signer HTTP API定义了一套面向以太坊 2.0eth2验证者客户端的 HTTP 接口标准让 BLS12-381 私钥可以安全地存放在专用签名节点上验证者客户端只负责发起签名请求、按需获取签名结果。本文基于本仓库中的 EIP-3030 原文 展开完整讲解三个 API 端点的请求/响应契约、curl 实测用例、UNIX 风格设计理念与威胁模型帮助你理解并落地一套密钥与应用分离的验证者签名架构。EIP-3030 是什么验证者客户端与 BLS 远程签名者以太坊 2.0 的共识机制建立在验证者validator的签名行为之上。一个验证者客户端通过使用 BLS 私钥对区块提案block proposal和证明attestation进行签名为 eth2 区块链的共识做出贡献。这就要求 BLS 私钥在客户端运行的任何时刻都可用——因为每个验证者每个 epoch约 6.4 分钟至少要被期望证明一次而签名动作只能发生在该 epoch 内的一个 slot12 秒时间窗口里。EIP-3030 所定义的BLS 远程签名者 API正是为验证者客户端提供按需签名能力的接口标准。它的核心思路是验证者客户端不再直接保管 BLS12-381 私钥而是把签名请求发送给一个运行在专用节点上的远程签名服务由后者返回签名结果。这样验证者客户端就可以运行在更宽松、更易扩展的环境如公有云、容器集群中而私钥始终被隔离在受控的专用节点内。从 EIP 前置元数据 看该 EIP 属于 Standards Track 下的Interface接口类别类别定义见 EIP-1由 Herman Junge 于 2020-09-30 提出当前状态为 Stagnant但它所确立的远程签名接口形态至今仍被多个主流 eth2 客户端与签名工具作为设计蓝本。动机为什么要把私钥从验证者客户端中剥离eth2 使用 BLS12-381 曲线签名而 eth2 规范本身并没有明确规定 BLS 私钥必须/应该存放在哪里把这一实现细节留给了各客户端团队。默认假设是这个密码学秘密与验证者客户端存放在同一台主机上。这个假设在物理安全网络场景下是成立的——只有操作者本人有机会登录托管验证者客户端的主机网络只允许验证者客户端发起出站调用。此时攻击者只有通过物理入侵或远程代码执行RCE漏洞才能任意访问存储或内存中的密钥。然而当操作者需要在安全性约束较弱的云环境中运行验证者节点时情况就变了无论云厂商的安全承诺如何都无法阻止一个恶意的运营方获取节点内运行资产的任意访问权。而当引入容器编排方案如 Kubernetes时密钥在多个节点间的流转无论从运维还是安全角度看都成为沉重的负担。EIP-3030 提出的解决方案是运行一个对私钥拥有独占访问权的专用节点它监听一个简单 API即规范部分定义的三方法按请求返回签名。采用该方案的操作者需要使用具备消费此 API 能力的客户端。规范的聚焦点是按需提供 BLS 签名而认证、密钥管理创建、更新、删除与传输加密等主题则在 Rationale 与 Threat Model 章节中讨论。规范详解三个端点的完整定义EIP-3030 的规范极其克制只包含三个 HTTP 端点一个用于状态检查一个用于列出可用密钥一个用于产生签名。以下逐一定义其请求与响应契约。GET /upcheck健康检查端点用于确认远程签名者服务处于存活状态。成功响应状态码200响应体{status: OK}GET /keys返回签名者当前可用的密钥标识符identifier列表供验证者客户端获知可以请求哪些密钥的签名。成功响应状态码200响应体{keys: [identifier]}POST /sign/:identifier核心签名端点。:identifier是不带0x前缀的公钥十六进制字符串用于指明要对哪把密钥发起签名。请求体JSON包含四个必填字段字段必填说明bls_domain必填BLS 签名域domain。按 eth2 规范中的 domain 类型定义使用小写并省略domain前缀。支持beacon_proposer、beacon_attester和randaodata必填待签名的数据。按 eth2 API 规范中 block、attestation、epoch 等类型定义fork必填一个Fork对象包含 previous 与 current 两个版本genesis_validators_root必填一个Hash256值用于域分离domain separation与链版本标识此外任何其他字段都会被签名者忽略——这一宽松输入约定让客户端可以按需附带额外信息而不破坏接口兼容性。响应分三种情况响应状态码响应体成功200{signature: signature_hex_string}其中 signature 是 BLS 签名字节数组的十六进制字符串编码请求错误400{error: Bad Request Error Message}密钥不存在404{error: Key not found: identifier}值得注意原始规范文本中的fork与genesis_validators_root共同承担了链版本与域分离的职责——在 eth2 中签名的域对象domain由 domain type、fork version 与 genesis validators root 共同推导这保证了同一把密钥在不同分叉/链上的签名互不混淆是防止跨链重放签名的关键设计。设计理念UNIX 哲学的极简 APIEIP-3030 的设计者明确以 UNIX 哲学为指引整个 API 规范只包含三个方法——status、列出可用密钥、产生签名没有认证、密钥管理、传输加密相关的方法。规范对此的解释是这些能力应当由客户端实现者根据自身场景去补充而不是固化在接口标准里。以下小节讨论客户端实现者需要考量的几个方面。附加能力通过代理与插件扩展从 API 管线视角看体系中有两个节点发起请求的验证者客户端1与返回签名的远程签名者2。在这两个节点之间引入中间元素可以构建更复杂的链路——例如部署反向代理服务或为远程签名者实现添加插件。这意味着安全策略如限流、审计、自定义校验可以在不改变接口契约的前提下叠加。认证认证可以通过 HTTP 请求头完成。签发有效令牌token以认证验证者客户端与远程签名者之间通信的方式有很多种但各有潜在缺陷如重放攻击、令牌分发困难等。一般而言任何认证方法都必须与传输加密结合才真正有效。操作者还可以在验证者客户端所在网络与远程签名者网络之间实施网络访问控制列表ACL从而缩小攻击面——迫使潜在攻击者必须位于与验证者客户端相同的网络内。密钥管理与签名接口彻底分离私钥的存储方式多种多样硬件安全模块HSM、密钥管理应用如 Hashicorp Vault、带有严格私有网络 ACL 规则的云存储甚至目录下的裸文件。远程签名者实现通常会将存储介质与 HTTP API 抽象分离。正是基于这一视角任何创建、更新、删除密钥的流程都应该独立于客户端实现——密钥生命周期管理不属于签名接口的职责范围。传输加密与自签名证书如果操作者使用自签名证书部署远程签名者那么消费该远程签名者的客户端增强client enhancement必须支持信任自签名证书这一选项否则 TLS 握手将直接失败。这是实现者在客户端侧最容易忽略、也最影响部署效率的细节。测试用例与 curl 实战验证EIP-3030 提供了一套完整的可复现测试数据与 curl 实测记录可以直接用于验证任意远程签名者实现是否遵循规范。官方测试数据BLS 密钥对公钥0xb7354252aa5bce27ab9537fd0158515935f3c3861419e1b4b6c8219b5dbd15fcf907bddf275442f3e32f904f79807a2a私钥0x68081afeb7ad3e8d469f87010804c3e8d53ef77d393059a55132637206cc59ec签名根signing root0xb6bb8f3765f93f4f1e7c7348479289c9261399a3c6906685e320071a1a13955c期望签名0xb5d0c01cef3b028e2c5f357c2d4b886f8e374d09dd660cd7dd14680d4f956778808b4d3b2ab743e890fc1a77ae62c3c90d613561b23c6adaeb5b0e288832304fddc08c7415080be73e556e8862a1b4d0f6aa8084e34a901544d5bb6aeed3a612以下用例假设远程签名者监听在本机9000端口签名请求体存放在payload.json文件中。GET /upcheck健康检查curl -v localhost:9000/upcheck实测响应摘录关键行 HTTP/1.1 200 OK content-type: application/json content-length: 15 {status:OK}GET /keys密钥列表成功场景curl -v localhost:9000/keys HTTP/1.1 200 OK content-type: application/json content-length: 116 {keys:[b7354252aa5bce27ab9537fd0158515935f3c3861419e1b4b6c8219b5dbd15fcf907bddf275442f3e32f904f79807a2a]}服务器错误场景故障注入将 keys 目录权限改为八进制311即-wx--x--x可进入但不可读再次请求chmod 311 keys-directory curl -v localhost:9000/keys HTTP/1.1 500 Internal Server Error {error:Storage error: PermissionDenied}这说明存储层错误会以500状态码和{error: ...}结构透出便于调用方区分密钥不存在404与后端存储异常500。POST /sign/:identifier签名全路径成功场景使用公钥不带0x作为 identifier 发起签名curl -v -X POST -d payload.json -H Content-Type: application/json \ localhost:9000/sign/b7354252aa5bce27ab9537fd0158515935f3c3861419e1b4b6c8219b5dbd15fcf907bddf275442f3e32f904f79807a2a HTTP/1.1 200 OK content-type: application/json content-length: 210 {signature:0xb5d0c01cef3b028e2c5f357c2d4b886f8e374d09dd660cd7dd14680d4f956778808b4d3b2ab743e890fc1a77ae62c3c90d613561b23c6adaeb5b0e288832304fddc08c7415080be73e556e8862a1b4d0f6aa8084e34a901544d5bb6aeed3a612}返回的签名与测试数据中的期望签名完全一致可以用作实现正确性的基准校验。Bad Request400请求体不是合法 JSON 时返回解析错误curl -v -X POST -d foobar -H Content-Type: application/json \ localhost:9000/sign/b7354252aa5bce27ab9537fd0158515935f3c3861419e1b4b6c8219b5dbd15fcf907bddf275442f3e32f904f79807a2a HTTP/1.1 400 Bad Request {error:Unable to parse body message from JSON: Error(\expected ident\, line: 1, column: 2)}密钥不存在404请求一个全零的 identifiercurl -v -X POST -d payload.json -H Content-Type: application/json \ localhost:9000/sign/000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 HTTP/1.1 404 Not Found {error:Key not found: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}服务器错误500将 keys 目录与密钥文件权限都改为八进制311测试完成后需改回755才能删除它们签名请求返回存储错误chmod 311 keys-directory key-file curl -v -X POST -d payload.json -H Content-Type: application/json \ localhost:9000/sign/b7354252aa5bce27ab9537fd0158515935f3c3861419e1b4b6c8219b5dbd15fcf907bddf275442f3e32f904f79807a2a HTTP/1.1 500 Internal Server Error {error:Storage error: PermissionDenied}四组用例覆盖了200 / 400 / 404 / 500四种状态码的完整语义是验证远程签名者实现是否符合 EIP-3030 的最低测试集。生态实现参考EIP-3030 原文列出了三个公开实现均为实现事实来自规范文档实现语言组织说明BLS Remote SignerRustSigma Prime完整支持本规范提出的接口Web3SignerJavaPegaSys支持本规范但方法路径略有不同/sign→/api/v1/eth2/sign/publicKeys→/api/v1/eth2/publicKeysRemote Signing WalletGolangPrysmatic Labs同时支持 gRPC 与 JSON over HTTP 两种传输方式这一表格同时说明了两点其一远程签名方案在 eth2 生态中已有多语言、多组织的实践其二Web3Signer 的路径差异表明EIP-3030 的端点定义尤其是命名在生态内并非完全统一——互操作时需以目标实现的 API 文档为准。威胁模型与安全缓解规范将安全问题显式化为一张威胁/缓解对照表内容全部来自 EIP-3030 原文并强调这是一份非穷尽清单威胁缓解措施攻击者可以伪装spoof验证者客户端见 Rationale 中 Authentication 一节的讨论攻击者可以向签名者发送精心构造的消息导致 slashing 处罚远程签名者操作者有责任添加校验模块见附加功能实现一节攻击者可以创建、更新或删除私钥密钥不得通过远程签名者的任何接口可写攻击者可以否认repudiate已发送的消息在签名者中实现日志记录并将日志发送到 syslog 服务器以增强攻击者可以通过从存储中取回密钥来泄露私钥内容使用硬件安全模块HSM存储或使用密钥管理应用如 Hashicorp Vault存储攻击者可以窃听私钥的上传过程基于各存储规范使用安全通道上传密钥攻击者可以窃听从远程签名者取回密钥的过程存储与远程签名者节点之间的数据传递始终使用安全通道攻击者可以转储远程签名者的内存以泄露私钥阻止对运行远程签名者节点的物理访问阻止对该节点终端的访问日志发送到 syslog 服务器部署仅通过简单、无参数的 API 触发在内存中实现私钥零化zeroization探索在可信执行环境TEE中编译与运行远程签名者攻击者可以对远程签名者发起 DoS 攻击实现 IP 过滤实现速率限制rate limiting这张表实际上是远程签名者部署的安全检查清单接口层认证、校验模块、只读密钥、存储层HSM/Vault、安全通道、运行层物理隔离、内存零化、TEE与网络层IP 过滤、限流四道防线缺一不可。与仓库中其他相关标准的呼应在本仓库中EIP-3030 并非孤立的接口标准它与多个 EIP 在安全与密码学层面形成互补EIP-2537在 EVM 层引入 BLS12-381 曲线运算预编译G1ADD、G1MSM、G2ADD、G2MSM、PAIRING_CHECK 等七个预编译说明 BLS12-381 是贯穿 eth2 签名体系的基础密码学原语——远程签名者产出的签名正是可供链上或客户端侧用这类原语验证的对象。EIP-3076定义了 Slashing Protection Interchange Format验证者客户端互换格式用于在客户端之间迁移 slashing 保护数据。它解决的是换客户端导致重复签名从而被罚没的问题而 EIP-3030 的威胁模型同样把针对签名者的 slashing 攻击列为头号威胁之一二者的防护目标一致让验证者永不签名冲突消息。EIP-1作为 EIP 流程总纲定义了 Interface 类别的适用范围语言级标准如方法名与接口定义EIP-3030 正是这一类别的典型代表——它不涉及共识层改动而是为客户端生态约定一个可互操作的 HTTP 接口。从源码结构看本仓库的 EIP 目录EIPS/以一 EIP 一文件方式组织eip-3030.md 即为该标准的权威文本根目录的 LICENSE.md 声明了 CC0 公共领域授权意味着该规范文本可以被自由复用与实现。总结EIP-3030 用三个 HTTP 端点、一份测试数据集与一张威胁模型表完整定义了 BLS 远程签名者的接口形态与安全边界。对验证者运营者而言掌握这套标准意味着可以将 BLS 私钥从验证者客户端剥离放入 HSM、Vault 或受 ACL 保护的专用节点从而安全地运行在云环境与 Kubernetes 集群中以GET /upcheck、GET /keys、POST /sign/:identifier三个端点完成状态检查、密钥发现与按需签名并用规范的测试数据公钥、签名根、期望签名校验实现正确性依据威胁模型清单补齐认证、传输加密、日志审计、内存零化与网络限流等缓解措施构建纵深防御。这套密钥与应用分离的架构思想至今仍是 eth2/以太坊 PoS 验证者安全部署的基础范式之一也值得其他需要保管签名密钥的分布式系统借鉴。【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表