Skip to content

Commit

Permalink
2025.02.14
Browse files Browse the repository at this point in the history
  • Loading branch information
henrycyberbio committed Feb 14, 2025
1 parent 474ba7c commit 48e925f
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions henryleo.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,26 +215,27 @@ BitTorrent 旨在解决依赖中心化服务器下载大文件导致的网络堵


### 2025.02.14
#### 防止Replay 重放攻击
以太坊网络和比特币网络防止重放攻击的方式不同。比特币网络通过交易标头的时间戳而以太坊依靠Nonce
#### Replay 重放攻击和Double-spending 双花攻击
重放攻击是跨链或者跨时间复制一笔交易,而双花攻击是一笔交易同一时间广播多次

对于比特币网络,因为任何一个矿工都可以从前一个区块读取某一笔交易的信息,假设没有时间戳,
对于比特币网络,任何一个矿工都可以从一个区块读取某一笔交易的信息,假设没有时间戳,
一笔交易虽然被签名了,恶意的矿工虽然没有私钥,但它只需要将这个签名后的信息广播到新的区块就可以反复执行该笔交易,
因为签名是真的,验证函数会回传True。
因为签名是真的,验证函数会回传True。假设A想要攻击B,就会反复广播B的交易,这是双花攻击。

但有了时间戳,假设A想要攻击B,最快只能在区块确认他收款之后进行,也就是他获得B的签名之后。这时A广播他获得的签名会发生什么?
答案是会被区块拒绝,**因为时间戳显示它来自上一个区块**~10min/block)。
有了时间戳,这时A广播他获得的签名会发生什么?答案是会被矿工拒绝,**因为时间戳显示该区块已经被打包了**,不过这需要一些时间。因此最好的方案是等待交易确认多次后信任。

对于重放攻击,UTXO这种类似于纸币的性质天然就可以抵抗重放。

而以太坊通过Nonce防止重放攻击。以太坊中Nonce是一个账户的交易计数,
**执行层会优先执行同一个账户Nonce较小的交易(TX2会在TX1被接受或取消之后才会进行处理),
且同一Nonce的交易只会执行一次(优先费高的)**

先让我们忽略Gas fee的问题,假设发送者想做坏事,他有一个ETH,先发送一个ETH(`TX1`),
后又发送一个ETH(`TX2`),`TX2`会被拒绝,因为他账户不足
后又发送一个ETH(`TX2`),`TX2`会被拒绝,因为他账户余额不足
他不服气,复制了一份`TX1`再广播一次(记为`TX1'`,假设此时TX1还没被接受),
`TX1``TX1'`会直接被拒绝,因为只会接受一次Nonce等于1的交易。

这下他十分生气,决定做接收者并且再做坏事,当他母亲给他打生活费时,他复制了这笔交易企图获得更多,
但也被拒绝了,因为交易中包含了**区块编号**,改变好已经被打包过了!
这下他十分生气,决定做接收者并且再做坏事,当他母亲给他打生活费时,他复制了这笔交易企图获得更多,
但也被拒绝了,因为Nonce被使用过了,防御重放成功。

<!-- Content_END -->

0 comments on commit 48e925f

Please sign in to comment.