隔离见证是如何彻底解决交易延展性攻击的
交易延展性攻击(Transaction Malleability Attack)是指在交易未确认前,攻击者可以修改交易的某些字段,使其交易哈希(txid)发生变化,但不会影响交易的有效性。这种攻击会影响基于UTXO交易模型的公链,尤其是比特币(BTC),给交易确认、双花攻击、交易跟踪等带来挑战。
交易延展性攻击的核心在于:
● 比特币早期(隔离见证前),交易哈希(txid)是通过交易的全部数据,包括签名字段计算的。
● 某些字段,如S值(用于签名的 r,s 对中的 s 值),可以通过合法的数学运算进行修改,而不会影响签名的有效性。
● 交易哈希改变后,原本依赖此txid的交易(如子交易)可能变得无效,或者攻击者可以创建一个新的txid版本,使原始交易被废弃。
比特币的交易使用ECDSA(椭圆曲线数字签名算法)进行签名,并采用 r,s 形式的签名数据。这里s值有较宽的取值范围,使得可以通过s和n-s进行等效变换,而不会影响签名的验证结果。
在隔离见证(SegWit)之前,比特币的应对方式主要依赖:
● 交易所和钱包进行风控 在 UTXO 管理上避免依赖未确认的交易 txid 交易所一般要求多个确认才会认为交易最终确定
● 使用 nLockTime 机制 设定交易的解锁时间,确保一定区块高度后交易才有效
● 钱包端处理 监测交易是否有可能被篡改 允许用户重发交易
但这些方式并不能根本解决问题
比特币在 2017 年 SegWit(BIP141)升级 后,从根本上解决了交易延展性攻击:
● 交易数据和签名数据被分离 ● txid 计算时不包含签名数据 ● 签名被放入 witness 结构中 ● 这样,哪怕修改 s 值,txid 也不会变化
📌 关键变化 ● 过去 txid 计算方式:txid = Hash(交易数据 + 签名) ● 隔离见证后的 txid 计算方式:txid = Hash(交易数据)(不包含签名数据)
📌 V 值 ● 比特币使用 DER 编码方式存储 V 值,保证签名唯一性。
📌 影响 ● 使得比特币闪电网络(Lightning Network)等二层协议可以安全地使用UTXO交易结构 ● 解决了交易依赖性问题,简化了交易管理
以太坊使用ECDSA进行交易签名,并且在EIP-2提案(2016 年)中引入了Low-S强制标准,防止S值修改:S值必须小于 n/2, 这样,签名 r,s 只有一个有效值,不能被修改,杜绝了S 变更导致的txid变化,这使得以太坊从一开始就不受交易延展性攻击的影响。
EIP-155解决方案 ● V = 27 + ChainId * 2 ● 这意味着相同的私钥在不同的链(如 ETH 和 BSC)上生成的交易,V 值不同 ● 这样,即便交易数据相同,也不能直接复制到另一条链上执行
📌 示例 假设以太坊主网(ChainId=1)和 BSC(ChainId=56) ● ETH 交易 V = 27 + 1 2 = 29 ● BSC 交易 V = 27 + 56 2 = 139
即使交易内容相同,V 值不同,因此无法直接重放到另一条链。
四.总结 ● 比特币在隔离见证(SegWit)之前,交易哈希(txid)包含签名数据,导致 S 值修改会影响 txid。 ● SegWit 之后,txid 只依赖交易数据,不包含签名,彻底解决交易延展性。 ● 以太坊在EIP-2 约束S值,并使用EIP-155让V绑定 ChainId,从一开始就不存在交易延展性攻击。 ● 比特币交易延展性修复后,提升了Layer2扩展方案(如闪电网络)的安全性。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!