ERC-1581: 从 BIP-32 树派生的密钥的非钱包用途
用于 BIP32 树的推导路径结构,用于生成不用于持有加密资产的密钥对。
Authors | Michele Balistreri (@bitgamma) |
---|---|
Created | 2018-11-13 |
Discussion Link | https://ethereum-magicians.org/t/non-wallet-usage-of-keys-derived-from-bip-32-trees/1817 |
摘要
BIP32 定义了一种生成密钥的层次树的方法,这些密钥可以从一个通用的主密钥中派生出来。BIP32 和 BIP44 定义了这些密钥作为钱包的用法。在本 EIP 中,我们描述了这些密钥在区块链范围之外的用法,定义了一个用于密钥用法的逻辑树,它可以与现有的 BIP44 兼容钱包共存(因此共享相同的主密钥)。
动机
与区块链交互的应用程序通常使用额外的非区块链技术来执行其设计任务。对于隐私和安全敏感的机制,需要密钥集。重用用于钱包的密钥可能被证明是不安全的,而保持完全独立的密钥会使完整凭证集的备份和迁移更加复杂。定义一个与 BIP44 兼容钱包分离的派生分支,可以将独立密钥的安全性与拥有需要备份或迁移的单个信息的便利性结合起来。
规范
路径级别
我们在 BIP32 路径中定义以下级别:
m / purpose' / coin_type' / subpurpose' / key_type' / key_index
路径中的单引号表示使用了 BIP32 硬化推导。
此结构遵循 BIP43 的建议及其 非比特币使用的修正案。每个级别都有特殊的含义,将在下面的章节中描述。
Purpose/Coin Type/Subpurpose
这部分是常量,设置为 m / 43' / 60' / 1581'
,表示 BIP 43 -> Ethereum -> 此 EIP。
此前缀下的所有子树都在本 EIP 的范围内。
密钥类型
描述密钥的用途。密钥类型应该是通用的。“即时消息”就是一个很好的例子,而“Whisper”则不是。原因是您希望能够在不同的服务中使用相同的身份。密钥类型定义在:TBD
在此级别使用硬化推导。
密钥索引
密钥索引是一个可变长度的字段,用于标识特定密钥。在最简单的情况下,它是一个从 0 到 2^31-1 的数字。如果需要更大的标识符(例如表示哈希或 GUID),则该值必须 跨越几个 BIP32 嵌套级别进行拆分,最高有效位优先,左对齐,如果需要,用 0 填充。除了最后一个级别之外的所有级别都必须使用硬化密钥推导。最后一个级别必须使用公共推导。这意味着每个级别都可以携带 31 位的标识符来表示。
举个例子,假设我们有一个密钥类型为 4’ 的密钥,并且 key_index 代表一个 62 位的 ID,表示为十六进制 0x2BCDEFFEDCBAABCD,那么完整的密钥路径将是 m / 43' / 60' / 1581' / 4' / 1469833213' / 1555737549
。 如果您使用的是随机标识符,那么生成一个传统的 GUID 可能会很方便,例如 128 位,只需将每个 32 位字中的最高有效位的值固定为 1,除了最后一个字固定为 0 即可。
理由
上面提出的结构遵循 BIP43 的通用结构,并且与广泛采用的 BIP44 规范类似。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Michele Balistreri (@bitgamma), "ERC-1581: 从 BIP-32 树派生的密钥的非钱包用途 [DRAFT]," Ethereum Improvement Proposals, no. 1581, November 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1581.