37
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

手数料を使ったReorg攻撃の可能性とその対策案

Last updated at Posted at 2019-05-11

はじめに

Bitcoin等のブロックチェーンにおいて、手数料の過剰支払いによってReorgを起こす手法がある気がしたのでメモしておきます。
既に提案されているかもしれないですし、あまり自信のある内容ではないのでツッコミ歓迎です。
ちなみに先日Binanceで7000BTCが流出した際、一瞬Reorgが話題に上りましたが、この記事の内容で早めに対応すれば一部取り戻せる可能性があったかもしれません(個人的にはやってほしくないです)。
追記:記事を書いた時点ではしっかり調べていませんでしたが、下記tweet等で同じような方法が議論されたうえで、Reorgはしないと判断されていたようです。
https://twitter.com/JeremyRubin/status/1125920452340117506?s=19

手法

ヒントになったのは下記の論文です。
On the Instability of Bitcoin Without the Block Reward
この論文は、将来ブロック報酬が小さくなったときに、手数料を後続マイナーに残すような戦略が発生し、セキュリティが低下する、というような内容です。
この後続マイナーに手数料を残すという発想は、現時点でも攻撃に使えるかもしれないと気が付きました。
以下説明です。

仮定

  • 攻撃者の目的は、HonestチェーンのNブロック前からのReorgであるとします(今回は収益化手段までは踏み込みません)。
  • 攻撃者は、Nブロック前では有効だが現在のブロックでは無効なBTCを持っているとします。
  • マイナーは手数料とマイニング報酬だけを目的とし、そのためにはLongestチェーンを無視する事もあるとします(その行動によりBTCのブランドが毀損することは考慮しないとします)。
  • (コメントを受け追記)攻撃に参加するマイナー間でのトランザクションとブロックの伝搬は、滞りなくできるとします。

手順

攻撃者はNブロック前で有効なBTCを元手に、その後のNブロック以上があふれる程大量のトランザクションを生成してブロードキャストします。このトランザクション群にはマイニング報酬に相当するような高額な手数料を均等に設定しておきます。

マイナーから見てみます。Honestチェーンではこのトランザクションは無効なので、高額な手数料は攻撃者チェーンでしか獲得できません。攻撃者チェーンをマイニングすることは直近Nブロックでの報酬を捨てることになりますが、手数料の期待値がそれを上回るなら、攻撃者チェーンでマイニングをするインセンティブが出てくるはずです。

ブロック容量を溢れるようにしているので、手数料が次のブロックで取り尽くされることがなく、Honestチェーンに追いつくまでインセンティブを維持できます。多数のマイナーが参加してHonestチェーンが伸びる見込みがなくなれば、攻撃成功とみていいでしょう。

この手法の特徴は、マイニング設備を所有していたり、nicehash等でハッシュパワーを借りたり、マイナーに連絡を取ったりせずとも、プロトコル内で攻撃が可能となることです。

なお、積み増しする手数料の金額はマイニング報酬より結構少なくても機能するかもしれません。分析もできそうですが、細かい話になってしまうので今後の課題とします。

対策案

Honestチェーン側でも同レベルの手数料を用意できればいいですが、誰が率先してやるのかという問題は残ります。
あるいは2017年のUASFのように、ユーザーノードで一定以上の手数料を無効とすれば、対策になるかもしれません。

37
24
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?