マイニングプールの収益配分と攻撃手法
- 2. 2©Gunosy Inc.
自己紹介
DeNA
– ハッカドール立ち上げ
Gunosy
– 新規事業開発室マネージャー
業務
– 新規事業の少人数立ち上げ
– ニュースパス
– バザリー
– ブロックチェーン領域の研究開発
担当
– サーバーサイド, インフラ
DBスキーマにうるさい
– 時々iOS, 時々PO
榎本 悠介 @mosa_siru (ボンバーマンの人)
- 11. 11©Gunosy Inc.
収益配分の仕組み
例:誰かが合計10を出すまでサイコロを10個振るとする
– その各自の試行回数のカウントを、自己申告ではなく
「合計20以下を出した回数」で評価する
share = 「より緩和された問題の解答」
– (ブロックのdifficultyより)緩和されたdifficultyを満たす
nonceを見つけるたびに、プール側に提出する
1ブロックにつき大量に提出されることになる
– 自己申告ではなく、計算量の証拠となる
各マイナーの計算能力(share数)に応じて配分する。
プールの合計share数と、自分のshare数の比率に応じて配分。
この配分方式にいくつか種類がある。
- 13. 13©Gunosy Inc.
攻撃手法: Pool Hopping
ラウンド後半は、たくさんshareがみつか
っているため、1shareあたりの報酬額が
さがる。
逆にいうと、ラウンドの最初は期待値が
高い。
– 最初だけ参加し、他のプールに移る(
Propsで経過時間が短いプールや、他
の収益配分方法をとるプール等)
– 運良く早くラウンドが終われば、大量
の収入となる
ラウンドの最初だけ採掘して、他のプールに移ることで収益性を高める
profitablility
profitablility
Pool A
Pool B
profitablility
Pool C
- 14. 14©Gunosy Inc.
Pool Hopping の収益性
[2] Raulo: Optimal pool abuse strategy (Feb. 2011)
http://bitcoin.atspace.com/poolcheating.pdf
– 最適な戦略として、43.5%のdiffiicultyが計算された後にプール
マイニングを停止し、他のプールかソロマイニングに移ること
で、収益を28%あげられることが示されている
ラウンドの最初だけ採掘して、他のプールに移ることで収益性を高める
- 15. 15©Gunosy Inc.
Score
各shareにscoreをつけ、合計scoreに応じて配分する
– score = exp(t / C) (t: ラウンド経過時間、 C: 定数)
Hopping耐性はあがっているが、完璧ではない [1]
– ラウンド初期の収益性は(軽減されているものの)高い
– share数ではなく経過時間によるため、プールハッシュレートの
増減によってはHopping対象
– Cは定数なため、difficultyの増減によってはHopping対象
採用プール:slushpool (提案元)
Pool Hopping対策。ラウンド後半のshareを重視する。
- 16. 16©Gunosy Inc.
PPLNS (Pay Per Last N Share)
ラウンド間隔、ブロック間隔は一切問わない。N shareにおいて何
share獲得したかに応じて配分する。
収益を得るためには常にマイニングしないといけない。シンプルな
がらもHopping耐性を持つ。
– なお、difficultyの変化に対して厳密なHopping耐性を得るには
やや複雑な変形が必要(unit-PPLNS等) [1]
ある程度大きなプールに参加しないと、収益が安定しない。
採用プール: 多数
マイニング成功時に、最後のN shareにおける比率に応じて報酬が分配される
手数料も安く、現在主流な手法。
- 17. 17©Gunosy Inc.
PPS (Pay Per Share)
報酬は、 share * (share_dif / dif) * reward で計算される期待値
– マイナーにとっては、収益が安定するため嬉しい。
完璧なHopping耐性
プール管理者にとっては、マイニング失敗が続くと支出が増え続け
るリスクがある
– 手数料が高めになる傾向がある
– 大型プールしか取れない手法で、破産確率に対する必要保有量
が導出されている[1]
採用プール: Antpool, f2Pool
プールでのマイニング成功に関係なく、share獲得のたびに報酬付与。
手数料は高いが、収益が安定する。
- 21. 21©Gunosy Inc.
Lie in wait attack
待ち伏せ攻撃。複数のマイニングプールを利用して、収益性を高める手法
1. 複数個のマイニングプールに対し、それぞれ
均等にマイニングしておく
2. どこかのプールで完全なブロックが見つかっ
た際に、ブロックの送信を保留する
3. そのプールに対し全力でshareを見つけにい
き、ある程度経った後にブロックを送信する
そのプールでの採掘が成功する確率は高いの
で、収益性が高まる
– 他の人がマイニング成功して無駄になる
可能性は勿論ある
高いハッシュパワーがないと現実的ではない
Pool B
Pool A
Pool C
Pool B
Pool A
Pool C
Block for B
1.
2.
「ブロックの送信を保留する」が、多くの攻撃の鍵となる。
- 22. 22©Gunosy Inc.
Block withholding attack
Sabotage attackと普通のマイニングを組み合わせると、収益性が上がる[5]
ハッシュパワーの半分を、各プールに均等に
割り振ってSabotage attackする。
– つまり、ブロックは送信せず破棄
残り半分を、独自のプールで普通にマイニン
グする
他プールの収益性は悪くなっているので、相
対的に収益性が上がる。
高いハッシュパワーがないと現実的ではない
が、攻撃に気づかれにくく防ぎにくいのがポ
イント。
さらに強力な Fork After Withholding
(FAW) Attacks が提案されている[6]
Pool B
Pool A
Pool C
Pool
1.
基本的にどの攻撃も、高いハッシュパワーが必要
block
share
share
block
- 24. 24©Gunosy Inc.
51%攻撃
詳細 効果
The Mining
Cartel Attack
他のプールが採掘したブロック
を無視する
特定のアドレスへの送金を無視
するなども可能
送金処理の支配
他プールの報酬がゼロに
二重支払いが可能
ただし、大型マイナーは大型ホルダーでもあるので基本的に割に合わない
プールがハッシュレートの51%を持つことで、やりたい放題できる。
通貨の信頼性を地に落とすことも可能。
- 25. 25©Gunosy Inc.
Selfish Mining
最悪でも33%、うまくいけば制約なく収益性を高められる手法。
– 収益性の高いプールにマイナーは移動するので、自然と51%に
達する。
Lie in wait attack同様、あえてブロックを公開しない手法を用いる
– 他のプールに無駄なブロックを掘らせ、収益性を下げる。
“Block discarding attack” の一種と分類される。
実際には51%も必要とせず、最悪でも33%あれば良いとする攻撃手法 [4]
他のプールの収益性を悪化させ、相対的に有利になる。
- 26. 26©Gunosy Inc.
Selfish Mining の仕組み(1)
プールがブロックAを採掘できたとする。すぐにはブロックを公開しない。
1. ブロックBの採掘にも成功したら、さらに採
掘を続ける
a. 他の(正直な)プールがブロックA’を公開した
ら、A, Bを公開
– 他プールの計算量が無駄になる!
b. ブロックCの採掘にも成功したら、さらに秘
密に採掘を続ける
– 他マイナーとのブロック長の差が1にな
ったら、aを行う
– 自分のハッシュレートは支配的でない
前提なので、基本はレアケース
1-a.
Block A Block B
Block A’
Block A Block B
Block A’
公開!
成功
Block A Block B
1
.
秘密に採掘
Block A Block B
1-b.
Block C
- 27. 27©Gunosy Inc.
Selfish Mining の仕組み(2)
プールがブロックAを採掘できたとする。すぐにはブロックを公開しない。
2. ブロックBの採掘にも失敗し、先に他マイナ
ーがA’の採掘に成功した場合
– すぐにAを公開して対決する!
– 自分は当然Aを伸ばすが、その他のマイ
ナーはA, A’どちらを伸ばすかはわからな
い。
– 確率γで、Aを伸ばしてくれると仮定
a. 自分がBを採掘できた場合、公開してA,Bが
利確
b. 他マイナーがBを採掘してくれた場合、Aが
利確
c. 他マイナーがB’を採掘した場合、利益なし。
– Aの報酬が無駄になってしまう
2.
Block A
Block A’
やばい、公開!
Block A Block B
Block A’
公開!
2-a
2-b
確率γで
賛同
Block A
Block A’
2-c
Block B’
- 28. 28©Gunosy Inc.
Selfish Mining の収益性
収益性は、以下のステートマシン[4]から導ける
[4I ttay Eyal, Emin G¨un Sirer: Majority is not Enough: Bitcoin Mining is Vulnerable (Nov 2013) https://arxiv.org/pdf/1311.0243.pdf
結果、収益性が高まるために必要なα(ハッシュレートのシェア)がγで表される[4]
各ステートは、チェーン長の差を表す
α:selfish minerの採掘確率
γ: selfish minerのつくったブロックを
他のマイナーが選ぶ確率
γ
必要な
ハッシュレート
1.0 0%
0.5 25%
0.0 33%
最悪でも33%以上のシェアで攻撃可能
- 29. 29©Gunosy Inc.
Selfish Mining + Sybil attack
Sybil attackと組み合わせることでγを高める
計算能力のないフルノードを立てまくる攻撃
自分の採掘したブロックのみ伝播させるよう
にすることで、正直なマイナーのブロックが
伝播しにくくなる (γが高まる)
マイナーが「同じ長さの場合は先に来たブロ
ックを優先する」のを辞め、ランダムに選ぶ
ことで攻撃を防ぐことが提案されている [2]
γ=1/2 に固定 (閾値は25%となる)
または、分岐に対し懲罰的に報酬を下げるこ
とで、閾値は50%に近づく [3]
node
node
node
node
Block A’
Block A
Block A
- 30. 30©Gunosy Inc.
Selfish Mining への批判
本当に収益性が高くなるならば、他の大型プールもその手法を使うため、簡単に
51%に達するかはわからない
マイナーのコードの多くは公開されておらず、最初にきたブロックから伸ばす根
拠がない。提案された対策はすでに実施されている可能性
マイニングプールの場合、各参加マイナーにその事実がばれてしまう
小さなプールの収益性が少し高かろうが、そこに多くのマイナーは移動しない。
また、収益には大きな分散があるため、小さな参加者にとって収益性の改善を知
ることは難しい。
poolの参加者が、Block Withholding Attackをする可能性
無駄に生成されたブロック数は、現時点では0.01%しかなく、いままで行われて
いない
– もしこの攻撃により、無駄なブロック生成が増えた場合、一般のマイナー達
はロビー活動等によりプロトコル変更を強いるだろう
Nicolas T. Courtois: On Subversive Miner Strategies and Block Withholding Attack in
Bitcoin Digital Currency (Dec. 2014)https://arxiv.org/pdf/1402.1718.pdf [5]
実践されたことはなく、机上の空論であるという主張
- 31. 31©Gunosy Inc.
Difficulty Raising Attack
以下の特性を利用した攻撃
– 最長チェーンがdifficultyの合計値で決まる
– BTCのdiffiuculty調整は、時間によらず2014ブロックごと
– timestampをある程度偽装できる
秘密裏に、2014ブロックをtimestamp 1秒刻みにして採掘しておく
– 見かけ上、一瞬で採掘できたことになる。
– その後、非常に高くなったdifficultyのもとで次のブロック採掘
に成功すれば、正直なチェーンを置き換えられる
無限の時間があれば、任意のハッシュパワーで可能
難易度調整を利用した攻撃 [3]。同様に、51%なくても攻撃できるというもの。
- 33. 33©Gunosy Inc.
まとめ
単純な収益性の改善だけでも、各種の攻撃が提案/検証されている
– まだまだ様々な攻撃があります。
– 収益性以外なら、当然DoSなど沢山の攻撃がある
かなりのハッシュパワーを必要とする理論的な話も多く、実際に使
われるかは別の話かもしれない
ブロックチェーン技術にかぎらず、マイニング系の理論だけでも相
当奥が深い!
– これらの研究が2011年とかから普通に行われているという驚き
– 日本語文献マジで無いぞという悲しみ(;_;)
マイニングの収益性を高める理論的な話について解説しました。
理論的なところの深掘りは面白いので、ぜひ皆さんも調べてみては!
- 35. 35©Gunosy Inc.
参考文献(1)
1. Meni Rosenfeld: Analysis of Bitcoin Pooled Mining Reward
Systems (Dec. 2011) https://arxiv.org/pdf/1112.4980.pdf
– 各収益配分システムについて詳細に紹介・解説している
– また、Pool hopping, Sabotage, Lie in waitの攻撃手法も紹介
し、その対策のためのプロトコル変更を提案している。
2. Raulo: Optimal pool abuse strategy (Feb. 2011)
http://bitcoin.atspace.com/poolcheating.pdf
– Pool Hopping Attackの収益性を理論的に示す
3. Lear Bahack: Theoretical Bitcoin Attacks with less than Half of
the Computational Power (draft)
https://arxiv.org/pdf/1312.7013.pdf (Dec. 2013)
– Difficulty Raising Attackの紹介
– Block Discarding Attackの提案
- 36. 36©Gunosy Inc.
参考文献(2)
4. Ittay Eyal and Emin G¨un Sirer: Majority is not Enough:
Bitcoin Mining is Vulnerable
https://arxiv.org/pdf/1311.0243.pdf (Nov. 2013)
– Selfish miningの詳細な解説と、その収益性について。
5. Nicolas T. Courtois, Lear Bahack: On Subversive Miner
Strategies and Block Withholding Attack in Bitcoin Digital
Currency https://arxiv.org/pdf/1402.1718.pdf (Dec. 2014)
– 各攻撃について丁寧に解説した後に、Block Withholding
Attackについて紹介。
6. Yujin Kwon, Dohyun Kim, Yunmok Son, Eugene Vasserman,
Yongdae Kim: Be Selfish and Avoid Dilemmas:Fork After
Withholding (FAW) Attacks on Bitcoin
https://arxiv.org/pdf/1708.09790.pdf (Aug 2017)
– Fork Afer Withholding (FAW) Attacks について