

每个远程签名器都持有由验证者私钥生成的密钥了。我们首先要通过加密的方式来保护验证者密钥: -图 5 :加密验证者密钥-我们可以通过多种方式加密验证者密钥。-图 2 :验证者密钥的访问需求-因此。
上一篇文章讨论了如何保护 ETH 2.0 的取款密钥 (withdrawal key) ,并总的介绍了 ETH 2.0 验证者所使用的几个密钥对 。在阅读本文之前,建议先阅读一下这篇文章。同样地,我们预设读者对验证者有最基本的了解,包括但不限于 “验证者是什么”,“他们为什么需要密钥”,以及 “他们通常需要什么操作” 等概念。
在 ETH 2.0 中,验证者密钥被用来确定相关消息是哪位验证者发出的 。验证者要发送这些消息才能获得奖励(并避免遭受惩罚)。
验证者密钥的风险很难衡量:验证者密钥本身无法用来访问资产。因此,即使攻击者获得了你的验证者密钥,也无法直接盗取资产。但是,他们可以通过敲诈勒索 1 等方式间接获利,更有甚者,比起自己获利,他们更想让你蒙受损失 2 。因此,我们通常认为验证者密钥的安全需求很高。



Eth2 中的密钥对都有一把公钥和一把私钥。出于本文的写作目的,全篇所用的 “key(密钥)” 一词指代的都是通常叫做私钥的那把;如果指代的是公钥,会有明确的说明。
(译者注:validator key 和 withdrawel key 都是密钥对,都分公钥和私钥。公钥是用来在 Eth1 链上注册的,可公开;私钥则是验证者自己实际使用的,不可公开,公开则自己的资产和验证者都完全被他人掌控了。)
首先,我们需要定义攻击者和用户的目标。在知道为什么要保护验证者密钥之后,我们就可以思考每个功能可以在多大程度上实现这一目标。首先, 攻击者的目标可以被定义成:
攻击者的目标是,签署某一条消息时能签出与目标验证者公钥相对应的签名(即能伪造验证者对某一条消息的签名)。
当然了,如果这是唯一的目标,那么直接毁掉验证者密钥就能阻止攻击者了。但是,这对用户来说一点帮助也没有。因此,我们需要考虑的第二个目标,也就是用户的目标,可以被定义成:
用户的目标是只签署理想消息,不签署不良消息。
就本文的目标而言,理想消息指的是能够获得奖励的消息,不良消息指的是会触发 罚没事件 3 的消息。
请注意,攻击者要想实现其目标,只需要签署任意一条消息即可,而用户的目标是持续性的。这种不对称性是安全系统的一大特征,即,攻击者只需赢一次就够了,而用户需要每次都赢。
为此,我们需要一个由不同分层或者说独立功能组成的系统,提供增强型安全性或增强型可访问性,而且可以将二者结合起来,共同达到较高水平。一个良好的安全模型需要具备多个分层,每个分层都会(单独或与其它分层结合起来)提供某种保障或其它分层的备份,并且有足够多的分层提供可访问性,从而确保用户的目标可以实现。请注意,本文聚焦于技术保护:其它层面(例如,操作层面和社会层面)上的安全性都不属于本文的讨论范围内, 虽然它们在任何安全模型中都是至关重要的部分,应该采取相应解决方案。
为了探讨验证者密钥的保护方式,我们先来做个简单的演示:


乍看之下,攻击者似乎无法通过任何方式来实现其目标。然而,用户也没有办法实现其目标,因为他们再也无法签署理想消息:无论是对于用户还是攻击者来说,经过加密的密钥都是没用的,因为用户必需先将该密钥解密,然后才能用它来签署消息。这样一来,验证者进程就一定要包含访问解密口令这一步骤。即然验证者进程可以访问解密口令 ,那么攻击者也可以访问该口令 ,尤其是在解密口令被存储在验证者客户端的情况下,因为验证者客户端有可能遭到攻击。
因此,这种改变本身不算上策。不过,如果我们将它与第二层结合起来,就能提供更有力的保护:

虽然攻击难度更大了,但是复杂攻击依然有可能获得验证者密钥。此外,用户依然可能在不经意间签署不良消息。因此,我们可以通过增加一个远程签名器层来为用户提高安全性和可访问性。

如何阻止攻击者将攻击目标从验证者客户端转移到远程签名器呢?首先,签名器可以具备比验证者客户端更高的安全性。验证者客户端需要执行许多任务,包括与 ETH 2.0 网络的其它组成部分(如信标节点)通信。这些通信可以为攻击者提供信息和攻击界面 。由于签名器只与验证者客户端通信,它们的活动集受到很多限制,这就为双方的服务器带来了更高的安全性。
其次,远程签名器为用户带来了其它好处。现在,同一个远程签名器可以与多个验证者客户端通信,使得我们能够创建具备高可用性的验证者客户端基础设施。远程签名器确保验证者客户端不会签署任何不良消息。
然而,事实上,远程签名器存在单点故障问题:如果远程签名器遭到攻击,或出现故障,用户就连理想消息也签名不了 。有没有一种方法可以让远程签名器更能抵抗攻击,同时又不会失去上述任一好处?



引入门限签名之后,即使有一个服务器 8 出故障,用户也能签署理想消息,而且也不会增加用户无意间签署不良消息的概率。鉴于硬件、软件和操作失败的可能性不可消除 ,门限签名确实是一个具有抗逆性的验证基础设施应有的功能。
虽然门限签名机制会带来额外的安全性,但是它有两大缺点。第一,分发密钥并不能预防长期攻击:假设门限值是 2/3 ,如果有一个签名器反水,整个机制就会留下永久的漏洞,只要再有一个签名器反水,攻击者就可以达成目标。第二,攻击者有可能在密钥分发过程开始前抢先获得该密钥,从而导致整个机制丧失意义。分布式密钥生成可以一举解决这两个问题:

在分布式密钥生成开始前,用户先要决定门限值,例如 2/3 。他们可以选择 3 个远程签名器 ,并启动生成过程。这 3 个远程签名器会通过密钥管理器 9 生成自己的密钥,不与用户或其他任何一个签名器共享, 以及一些公共信息。将来自 3 个签名器的公共信息结合起来就能创建出一个合成公钥。



有的,就是 “密钥更新” 。密钥更新就是毁掉现有密钥,由每个签名器重新生成新的密钥。新生成的密钥保留原有密钥的特性,即,任意两个密钥可以结合起来生成一个有效签名。新的密钥与原有密钥不具有相关性,因此无法通过原有密钥计算出新的密钥。


安全性是一个大概念。上文阐述了不同安全层的功能和优点,并没有提出任何完美甚至最佳解决方案。就保护验证者密钥而言,我们还需考虑很多要点,例如:
虽然本文聚焦于如何保护验证者密钥不受攻击,但是实际上大多数验证者密钥丢失事件背后的原因都平平无奇 。最常见的就是存储密钥的硬件丢失。用户需要一个备份策略,而且他们需要知道的是,一旦攻击者获得了被备份的密钥,ta 就能对任意消息签出与验证者公钥相对应的签名 。我们应该采取适当的措施来确保攻击者无法访问已备份的验证者密钥。在理想情况下,这些密钥最好完全脱机存储,而且外人无法接触其存储设备。
本文提供了多种方法来保护验证者密钥,同时确保它们可以用来履行验证职责。
每个用户都应该考虑他们想要提供的安全级别,以及他们应该采取的措施。应当考虑的是,验证者密钥不控制资金,因此窃取验证者密钥的攻击者无法直接获得任何利益 10 。
本文单纯从技术层面上探究了如何保护验证者密钥。我们还应该考虑运营和社会安全需求。若想全面保护验证者密钥,就得考虑到所有这些方面。
或者,你可以使用提供这类功能的质押服务。在综合考虑技术、风险和资金管理的情况下,Attestant 正在构建硬件、软件和操作服务,以提供机构级的质押服务,让你可以随时控制自己的资金。
原文链接: https://www.attestant.io/posts/protecting-validator-keys/ 作者: Jim McDonald 翻译&校对: 闵敏 & 阿剑