ERC-2334: BLS12-381 确定性账户层级结构
Authors | Carl Beekhuizen (@CarlBeek) <carl@ethereum.org> |
---|---|
Created | 2019-09-30 |
Discussion Link | https://github.com/ethereum/EIPs/issues/2338 |
Requires | EIP-2333 |
简述
本 EIP 定义了一个密钥树中给定密钥或密钥族的目的。当与 EIP-2333 结合使用时,种子和对密钥预期用途的了解足以确定密钥对。
摘要
一个将由 EIP-2333 生成的密钥分配给特定用途的标准。它定义了一个 path
(路径),它是一个字符串,解析成在遍历 EIP-2333 生成的密钥树时要使用的索引。
关于目的的说明
本规范不仅旨在成为一个 Ethereum 2.0 标准,而且旨在被更广泛的社区所采用,这些社区已经采用了 基于 BLS12-381 的 BLS 签名 。因此,同样重要的是要考虑到更广泛的行业的需求以及以太坊的特定需求。作为这些考虑的一部分,作者的意图是该标准最终会迁移到一个更中立的存储库中。
动机
Ethereum 2.0 以及许多其他项目将使用基于 BLS12-381 的 BLS 签名,这是一个 IETF 提出的标准。这种新方案需要一个新的密钥派生机制,该机制在 EIP-2333 中建立。这种新方案与此规范的当前形式 (BIP44) 不兼容,因为:完全使用硬化密钥,每层密钥数量增加,不使用 BIP32 进行密钥派生。因此,有必要为遍历 EIP-2333 密钥树建立一个新的路径。
本 EIP 中指定的路径结构旨在比 BIP44 更通用,因为它没有以 UTXO 为中心的功能 这导致以太坊 1.0 中使用了 4 种不同类型的钱包路径 并导致(草案)EIP-600 & EIP-601
规范
路径
通过密钥树遍历的路径由整数(表示同级索引)分隔,并以 /
分隔,表示祖先关系。路径中有 4 个级别(加上主节点),并且必须使用至少 4 个(包括主节点则为 5 个)。
m / purpose / coin_type / account / use
符号
路径中使用的符号在 EIP-2333 中指定,但为了方便起见,下面再次进行了总结。
m
表示树的主节点(或根节点)/
将树分隔成深度,因此i / j
表示j
是i
的子级
目的
purpose
设置为 12381
,这是新曲线(BLS12-381)的名称。为了符合此标准,EIP-2333 必须作为 KDF 实现,因此,除非是这种情况,否则不得使用目的 12381
。
币种类型
此处的 coin_type
反映了单个币种的币种编号,从而充当了分离用于不同链的密钥的手段。
账户
account
是一个字段,它使用户能够为不同的目的拥有不同的密钥集(如果他们愿意)。这是应该实现单个用户的不同账户的级别。
用途
此级别旨在提供一组相关的密钥,这些密钥可用于任何目的。其思想是,单个账户有许多用途,这些用途是相关的,但出于安全原因应保持分离。需要在树中支持此级别,尽管对于许多目的而言,它将保持为 0
。
Eth2 特定参数
币种类型
以太坊 2 中用于 BLS12-381 密钥的币种类型为 3600
。
验证者密钥
每个 Eth2 验证者都有两个密钥,一个用于提款和转账(称为提款密钥),另一个用于履行他们作为验证者的职责(以下称为签名密钥)。
提款密钥的路径是 m/12381/3600/i/0
,其中 i
表示第 i
组验证者密钥。
签名密钥的路径是 m/12381/3600/i/0/0
,同样,i
表示第 i
组验证者密钥。另一种表达方式是,签名密钥是该验证者的相关提款密钥的第 0
个子密钥。
注意: 如果上述密钥路径的描述在特定用例中不可行(例如,对于秘密共享或托管验证者),则可以省略受影响的密钥,并通过其他方式派生它们。本 EIP 的实现必须尽一切努力为给定的用例使用适当的密钥,并且在合理可行的范围内。(例如,在托管质押的情况下,进行存款的用户将遵循此标准来获取其提款密钥,这与服务提供商如何派生相应的签名密钥无关。)
理由
根据 BIP43 和 BIP44,purpose
、coin_type
和 account
是被广泛采用的术语,因此重用这些术语及其相关含义是有意义的。
目的需要与这些标准区分开,因为 KDF 和路径不兼容,并且 12381
是一个明显的选择。
account
将用户活动分成不同的类别,从而允许用户根据自己的意愿分离他们的关注点。
use
通常将在应用级别确定,从而为非交叉用例提供不同的密钥。
Eth2 特定参数
为 Eth2 密钥选择了一种新的币种类型,以帮助确保 Eth2 和 Eth1 密钥之间的清晰分离。尽管 Eth1 ETH 和 Eth2 ETH 之间的区别很微妙,但它们是不同的实体,并且有些服务仅通过其币种名称来区分币种(例如,ENS 的多链地址解析)。选择 3600
特别是因为它是 Eth1 的 coin_type
的平方 (3600==60^2
),从而表明它是 Ether 货币的第二次实例化。
验证者拥有单独的签名密钥和提款密钥的主要原因是允许考虑 Eth2 中不同操作的安全问题。签名密钥被赋予验证人客户端,在其中按照作为验证者的要求签署消息,因此它是一个“热密钥”。如果此密钥受到威胁,最坏的情况(在本地)是签署了一条可削减的消息,导致验证者被削减并强制退出。只有当验证者希望执行与验证无关的操作时才需要提款密钥,并且可以访问该验证者的所有资金。因此,提款密钥具有更高的安全问题,应作为“冷密钥”处理。通过使签名密钥成为提款密钥的子密钥,安全存储提款密钥足以在需要时恢复签名密钥。
向后兼容性
BIP43 和 BIP44 是以太坊 1.0 中用于此目的的常用标准,但是它们尚未被接受
为标准。由于在 EIP-2333 中使用了新的 KDF,因此需要一个新的路径标准。此 EIP 通过细微的更改实现了这一点。
purpose
12381
路径不支持硬化密钥,因此 '
字符无效。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Carl Beekhuizen (@CarlBeek) <carl@ethereum.org>, "ERC-2334: BLS12-381 确定性账户层级结构 [DRAFT]," Ethereum Improvement Proposals, no. 2334, September 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2334.