Alert Source Discuss
🚧 Stagnant Standards Track: ERC

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 表示 ji 的子级

目的

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 的实现必须尽一切努力为给定的用例使用适当的密钥,并且在合理可行的范围内。(例如,在托管质押的情况下,进行存款的用户将遵循此标准来获取其提款密钥,这与服务提供商如何派生相应的签名密钥无关。)

理由

根据 BIP43BIP44purposecoin_typeaccount 是被广泛采用的术语,因此重用这些术语及其相关含义是有意义的。

目的需要与这些标准区分开,因为 KDF 和路径不兼容,并且 12381 是一个明显的选择。

account 将用户活动分成不同的类别,从而允许用户根据自己的意愿分离他们的关注点。

use 通常将在应用级别确定,从而为非交叉用例提供不同的密钥。

Eth2 特定参数

为 Eth2 密钥选择了一种新的币种类型,以帮助确保 Eth2 和 Eth1 密钥之间的清晰分离。尽管 Eth1 ETH 和 Eth2 ETH 之间的区别很微妙,但它们是不同的实体,并且有些服务仅通过其币种名称来区分币种(例如,ENS 的多链地址解析)。选择 3600 特别是因为它是 Eth1 的 coin_type 的平方 (3600==60^2),从而表明它是 Ether 货币的第二次实例化。

验证者拥有单独的签名密钥和提款密钥的主要原因是允许考虑 Eth2 中不同操作的安全问题。签名密钥被赋予验证人客户端,在其中按照作为验证者的要求签署消息,因此它是一个“热密钥”。如果此密钥受到威胁,最坏的情况(在本地)是签署了一条可削减的消息,导致验证者被削减并强制退出。只有当验证者希望执行与验证无关的操作时才需要提款密钥,并且可以访问该验证者的所有资金。因此,提款密钥具有更高的安全问题,应作为“冷密钥”处理。通过使签名密钥成为提款密钥的子密钥,安全存储提款密钥足以在需要时恢复签名密钥。

向后兼容性

BIP43BIP44 是以太坊 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.