EIP-7591: BLS 签名交易
引入一种使用 BLS 签名的新交易类型
Authors | Marius van der Wijden (@MariusVanDerWijden) |
---|---|
Created | 2024-01-10 |
Discussion Link | https://ethereum-magicians.org/t/eip-7591-bls-signed-transactions/19911 |
摘要
本 EIP 引入了一种新的 EIP-2718 交易类型,该类型使用 BLS 签名进行签名。
动机
BLS 签名方案允许轻松聚合和验证聚合签名。 如果主网上大量的交易是 BLS 签名交易,我们可以聚合区块中的签名并对其进行批量验证。 这将减少链历史的增长。
规范
BLS_TX_TYPE = Bytes1(0x04)
交易类型
交易类型将具有以下格式:
[chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, sender, signature]
其中 sender
是账户的 BLS 公钥,地址为 address = [0:20](keccak256(sender))
。
签名值 signature
通过构造以下摘要的 BLS 签名来计算:
tx_hash = keccak256(BLS_TX_TYPE || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, sender]))
。
头部更改
区块头将被修改为包含 aggregated_sig
字段,其中包含区块中所有 BLS 交易的聚合签名。
因此,生成的头部 RLP 编码为:
rlp([
parent_hash,
0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347, # ommers 哈希
coinbase,
state_root,
txs_root,
receipts_root,
logs_bloom,
0, # 难度
number,
gas_limit,
gas_used,
timestamp,
extradata,
prev_randao,
0x0000000000000000, # nonce
base_fee_per_gas,
withdrawals_root,
blob_gas_used,
excess_blob_gas,
aggregated_sig,
])
区块更改
需要更改区块构建算法,以便构建区块中所有 BLS 签名交易的聚合签名。 区块中的所有交易都将被添加,而无需设置签名字段。
包含 signature
字段的交易的区块必须被拒绝。
在区块验证时,verifyAggregate
算法的使用方式如下:
valid = verifyAggregate(sender_1, ... sender_n, tx_hash_1, ... tx_hash_n, aggregated_sig)
理由
从交易中删除 ECDSA 签名可以节省 65 个字节. BLS 公钥为 48 个字节,聚合签名 为 96 个字节。
因此,我们每个区块可以节省 -96 + (65-48)* #transactions
字节。 假设每天大约有 7000 个区块,每天有 1,000,000 个交易,则平均每个区块包含大约 150 个交易。
因此,我们每个区块可以节省 2454 字节或 2.4KB。 假设平均区块大小为 160KB,这相当于节省约 1.5%。
除了为完整节点节省(诚然很少的)大小之外,添加一种新的交易类型来利用不同的签名方案,这本身也具有一定的价值。 本提案表明,有可能向以太坊添加例如量子安全签名方案。
向后兼容性
此 EIP 向执行层的区块验证规则集引入了向后不兼容的更改,并引入了一种新的交易类型和一个新的头部字段。 因此,需要进行硬分叉。
安全考虑
通过 BLS 签名的消息是不同的(txhash 上没有哈希冲突),因此即使没有所有权证明,聚合也是安全的。 公钥不相同,这在 BLS 中不是问题。
我们假设 keccak256 和 ECDSA 以及 BLS 按预期工作。
假设我们有两个地址 address_1 = keccak256(pk_ecdsa)
和 address_2 = keccak(pk_bls)
,其中 address_1 == address_2
。
我们知道 pk_ecdsa
必须等于 pk_bls
(从 keccak 得出)。
这意味着我们要么能够找到 x
,对于给定的 y
,使得 g_bls^x = y
(违反了 BLS 的安全性)
要么找到 z
,使得 d_ecdsa^z = y
(违反了 ECDSA 的安全性)。
因此,找到两个私钥(一个在 ECDSA 中,一个在 BLS 中)来控制同一个帐户是不可能的(概率大于可忽略不计)。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Marius van der Wijden (@MariusVanDerWijden), "EIP-7591: BLS 签名交易 [DRAFT]," Ethereum Improvement Proposals, no. 7591, January 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7591.