权益证明以太坊中的密钥
以太坊使用公私钥密码术来保护用户的资产。
公钥用作以太坊地址的基础——也就是说,它对公众可见并用作唯一标识符。私有(或“秘密”)密钥应该只能由帐户所有者访问。私钥用于“签署”交易和数据,以便密码学可以证明持有者批准了特定私钥的某些操作。
以太坊的密钥是使用椭圆曲线密码术生成的。
然而,当以太坊从工作量证明切换到权益证明时,一种新型的密钥被添加到了以太坊。原始密钥的工作方式仍然与以前完全相同——基于椭圆曲线的密钥保护帐户没有任何变化。
但是,用户需要一种新型密钥来通过质押 ETH 和运行验证器来参与权益证明。
这种需求源于与大量验证器之间传递的许多消息相关的可扩展性挑战,这些验证器需要一种可以轻松聚合的加密方法,以减少网络达成共识所需的通信量。
这种新型密钥使用 Boneh-Lyn-Shacham (BLS) 签名方案。
BLS 支持非常有效的签名聚合,但也允许对聚合的单个验证器密钥进行逆向工程,并且非常适合管理验证器之间的操作。
两种类型的验证器密钥
在切换到股权证明之前,以太坊用户只有一个基于椭圆曲线的私钥来访问他们的资金。
随着权益证明的引入,希望成为单独质押者的用户还需要验证者密钥和提款密钥。
验证者密钥
验证者签名密钥由两个元素组成:
-
验证者私钥
-
验证者公钥
验证者私钥的目的是签署区块提议和证明等链上操作。
因此,这些密钥必须保存在热钱包中。
这种灵活性的优势在于可以非常快速地将验证者签名密钥从一个设备移动到另一个设备,但是,如果它们丢失或被盗,小偷可能会通过以下几种方式进行恶意行为:
通过以下方式获取验证器:
-
作为提议者并为同一个插槽签署两个不同的信标块
-
作为证明者并签署“围绕”另一个人的证明
-
作为证明者并签署具有相同目标的两个不同证明
强制自愿退出,这会阻止验证者进行质押,并将其 ETH 余额的访问权限授予取款密钥所有者
当用户将 ETH 存入质押存款合约时,验证者公钥包含在交易数据中。这被称为存款数据,它允许以太坊识别验证者。
取款键
在即将到来的上海升级中启用此功能后,将需要提款密钥来移动验证者余额。
就像验证人密钥一样,提款密钥也由两部分组成:
-
取款私钥
-
取款公钥
丢失此密钥意味着无法访问验证者余额。
然而,验证者仍然可以签署证明和区块,因为这些操作需要验证者的私钥,但如果提款密钥丢失,则几乎没有激励。
将验证器密钥与以太坊帐户密钥分开,可以让单个用户运行多个验证器。
从种子短语派生密钥
如果每质押 32 个 ETH 都需要一组新的 2 个完全独立的密钥,那么密钥管理将很快变得笨拙,尤其是对于运行多个验证器的用户而言。
相反,多个验证器密钥可以从单个公共秘密派生,并且存储该单个秘密允许访问多个验证器密钥。
助记符和路径是用户在访问钱包时经常遇到的突出特征。助记符是一系列单词,充当私钥的初始种子。
当与其他数据结合时,助记符会生成一个称为“主密钥”的散列。
这可以被认为是一棵树的根。然后可以使用分层路径派生来自该根的分支,以便子节点可以作为其父节点的哈希和它们在树中的索引的组合存在。阅读有关基于助记符的密钥生成的 BIP-32 和 BIP-19 标准。
这些路径的结构如下,接触过硬件钱包的用户会很熟悉:
m/44'/60'/0'/0`
此路径中的斜线分隔私钥的组成部分,如下所示:
master_key / purpose / coin_type / account / change / address_index
这种逻辑使用户能够将尽可能多的验证器附加到单个助记词短语,因为树根可以是通用的,并且可以在分支处发生差异化。
用户可以从助记词中导出任意数量的键。
[m / 0]
/
/
[m] - [m / 1]
\
\
[m / 2]
每个分支由 / 分隔,因此 m/2 表示从主密钥开始并跟随分支 2。
在下面的示意图中,一个助记词用于存储三个提款密钥,每个提款密钥都有两个关联的验证器。
参考资料
https://ethereum.org/zh/developers/docs/consensus-mechanisms/pos/attestations/