Vitalik 于 Ethereum Research 论坛上发文讨论「以太坊该如何在量子电脑攻击下利用硬分叉保护用户资产」,主张将利用硬分叉回滚交易并马上升级签名机制,将可以有效保护用户资产。
如果明天就发生量子攻击?
V 神表示自己假设明天量子电脑被恶意攻击者掌控,并能够使用它窃取用户的资金。
防止这种情况的发生是抗量子密码学的目标,一旦帐户抽象技术到位,任何用户都可以按照自己的计划转而使用抗量子签名方案。但如果没有那么多时间怎么办?
Vitalik 认为以太坊已经做好了准备,可以制作一个非常简单的恢复分叉与钱包升级来应对量子攻击这种情况。
虽然区块链将不得不硬分叉将交易回溯,用户将不得不下载新的钱包软体以提升签名强度,但很少有用户会因此损失资金。
区块链与量子电脑的对决前线:争夺私钥
量子运算攻破哪个环节
以太坊地址定义为:
keccak (priv_to_pub(k)) 取最后的20个字节
其中 k 是私钥,priv_to_pub 是用于将私钥转换为公钥的椭圆曲线乘法,keccak 是哈希函数。以太坊地址生成的流程是:
- 借由随机源产生私钥。
- 借由椭圆曲线与私钥生成公钥。
- 借由 Keccak-256 哈希函数生成地址。
使用量子电脑,椭圆曲线乘法将变得可逆 (因为它是离散对数问题),但 hash 函数仍然是安全的。
代表若只有地址公开,很难推回公钥与私钥;但若是公钥公开,那在量子运算底下取得私钥将会非常容易。
如果用户尚未使用其帐户进行任何交易,则只有地址是公开可见的,这些用户的钱包就算有量子运算也是安全的。
但是如果用户曾进行任何一笔交易,那么该交易的签名就会泄露公钥,这在后量子世界中将会泄露私钥,因此大多数用户都容易受到攻击。
若发生量子攻击如何应对
V 神表示大多数使用者的私钥本身就是一堆杂凑计算的结果。许多金钥是使用 BIP-32 产生,它透过从主种子短语开始的一系列哈希值来产生每个地址。许多非 BIP-32 金钥产生方法的工作原理也类似:例如如果用户有脑钱包,它通常是应用于某些密码的一系列杂凑值 (或中等难度的 KDF)。
这代表 EIP 的自然结构可以透过硬分叉链来从量子紧急情况中复原,应分叉流程如下:
- 恢复第一个明显发生大规模盗窃的区块之后的所有区块
- 传统基于 EOA 的交易被停用
- 新增了新的交易类型以允许来自智能合约钱包的交易 (例如RIP-7560 的一部分内容),
- 如果第三步仍技术不可用:可以新增 EVM 新的交易类型或操作码,借此提供 STARK 证明以引入私有原像 (private preimage)、来自核准的杂凑函数 ID 以及公开位址,STARK 接受该帐户的新验证码的杂凑值作为公开输入。如果证明通过,用户的帐户代码将切换为新的验证代码,能够将其用作智能合约钱包。
出于燃料费效率的考量 (毕竟 STARK 证明容量很大),可以让 STARK 成为批量证明,一次证明上述类型的 N 个 STARK (必须是STARK-of-STARK,而不是直接证明多个声明,因为每个用户的资讯都需要对聚合器保密)。
原则上,实施此类硬分叉的基础设施可以在明天马上开始建构,从而使以太坊生态系统做好充分准备,以防量子紧急情况确实发生。