マイニングプールの収益配分と攻撃手法
@mosa_siru
2017.02
2©Gunosy Inc.
自己紹介
 DeNA
– ハッカドール立ち上げ
 Gunosy
– 新規事業開発室マネージャー
 業務
– 新規事業の少人数立ち上げ
– ニュースパス
– バザリー
– ブロックチェーン領域の研究開発
 担当
– サーバーサイド, インフラ
 DBスキーマにうるさい
– 時々iOS, 時々PO
榎本 悠介 @mosa_siru (ボンバーマンの人)
3©Gunosy Inc.
アジェンダ
マイニングの収益性を不当に高める攻撃について、
理論的なところを深掘りします!
1. マイニングプールの基礎
2. 収益配分の仕組み
3. プール参加者の攻撃手法
4. プール管理者の攻撃手法
ビットコインのような、PoWを採用した
パブリックブロックチェーンを前提とします
4©Gunosy Inc.
1. マイニングプールの基礎
5©Gunosy Inc.
復習:マイニングって?
ブロックチェーン上で、トランザクションの承認・検証する作業。
 不正がないか皆で検証を行い、その総計算能力でブロックチェーン
全体の改竄耐性を担保する。インセンティブあり。
 ブロックの各種検証の後、ブロックのハッシュ値がある値以下にな
るまで全員でひたすら計算を行う
– ブロックの中身は、トランザクションや任意のnonce値など。
Nonce値をひたすら変えて試す。
– 一番早くnonce値をみつけてブロードキャストした人がマイニ
ング成功、報酬獲得!
– この難しさをdifficultyとよび、ビットコインでは10分に1回成
功するように調整されます
 2018/02/14 マイニング報酬は1ブロック12.9BTC(約1290万)
– 1日22億円がうまれている!
マイナー視点では、計算を大量に行うほどお金がもらえる
6©Gunosy Inc.
ハッシュレートの急増
マイニングの競争が激化しており、ソロマイニングは非現実的
グラフ:https://blockchain.info/ja/charts/hash-rate?timespan=2years
 ビットコインのハッシュレートは25.6EH/s
(2018/02/14)
– ASIC の Antminer S9(13.5TH/s) の
189万台分
– 1日144回しか報酬タイミングがなく、
ソロマイニングは宝くじ以下
 BTC価格の上昇から、次々に大企業が参入。
 ASIC(専用の集積回路)をいかに手に入れるか
– 特定のハッシュ計算に特化したマシン
(Antminer S9等)で、基本入荷待ち
– 通常のPCでは全く太刀打ちできない
ビットコインのネットワーク全体のハッシュ計算能力は急増している
7©Gunosy Inc.
プールマイニング
マイニングプールの参加者で共同でマイニングを行い、収益を分配する。
 プール参加者全員でnonce値の探索を行い、
計算回数に応じて収益を分配
– プール手数料だけ少し期待値はさがるが
、分散を大幅に抑えられる
– 個人でのマイニングも現実的になる
マイニングプール
8©Gunosy Inc.
マイニングプールのシェア
現在、全てのBTCマイニングはプールによるものと考えて良い。
グラフ: https://blockchain.info/ja/pools
9©Gunosy Inc.
詳しくはこちら
仮想通貨マイニングに関するまとめ(拙作)
10©Gunosy Inc.
2. 収益配分の仕組み
11©Gunosy Inc.
収益配分の仕組み
 例:誰かが合計10を出すまでサイコロを10個振るとする
– その各自の試行回数のカウントを、自己申告ではなく
「合計20以下を出した回数」で評価する
 share = 「より緩和された問題の解答」
– (ブロックのdifficultyより)緩和されたdifficultyを満たす
nonceを見つけるたびに、プール側に提出する
 1ブロックにつき大量に提出されることになる
– 自己申告ではなく、計算量の証拠となる
各マイナーの計算能力(share数)に応じて配分する。
プールの合計share数と、自分のshare数の比率に応じて配分。
この配分方式にいくつか種類がある。
12©Gunosy Inc.
Props (Proportional)
 プールでのマイニングに成功するたびに、そのラウンドのshare数に
応じて収益を支払う。
– ラウンド: プールでの採掘成功時と、次の成功時までの期間
 攻撃手法が見つかっており、この対策のために様々な配分システム
が派生している。
最も原始的な方式。
share
自分 その他
13©Gunosy Inc.
攻撃手法: Pool Hopping
 ラウンド後半は、たくさんshareがみつか
っているため、1shareあたりの報酬額が
さがる。
 逆にいうと、ラウンドの最初は期待値が
高い。
– 最初だけ参加し、他のプールに移る(
Propsで経過時間が短いプールや、他
の収益配分方法をとるプール等)
– 運良く早くラウンドが終われば、大量
の収入となる
ラウンドの最初だけ採掘して、他のプールに移ることで収益性を高める
profitablility
profitablility
Pool A
Pool B
profitablility
Pool C
14©Gunosy Inc.
Pool Hopping の収益性
 [2] Raulo: Optimal pool abuse strategy (Feb. 2011)
http://bitcoin.atspace.com/poolcheating.pdf
– 最適な戦略として、43.5%のdiffiicultyが計算された後にプール
マイニングを停止し、他のプールかソロマイニングに移ること
で、収益を28%あげられることが示されている
ラウンドの最初だけ採掘して、他のプールに移ることで収益性を高める
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©Gunosy Inc.
PPLNS (Pay Per Last N Share)
 ラウンド間隔、ブロック間隔は一切問わない。N shareにおいて何
share獲得したかに応じて配分する。
 収益を得るためには常にマイニングしないといけない。シンプルな
がらもHopping耐性を持つ。
– なお、difficultyの変化に対して厳密なHopping耐性を得るには
やや複雑な変形が必要(unit-PPLNS等) [1]
 ある程度大きなプールに参加しないと、収益が安定しない。
 採用プール: 多数
マイニング成功時に、最後のN shareにおける比率に応じて報酬が分配される
手数料も安く、現在主流な手法。
17©Gunosy Inc.
PPS (Pay Per Share)
 報酬は、 share * (share_dif / dif) * reward で計算される期待値
– マイナーにとっては、収益が安定するため嬉しい。
 完璧なHopping耐性
 プール管理者にとっては、マイニング失敗が続くと支出が増え続け
るリスクがある
– 手数料が高めになる傾向がある
– 大型プールしか取れない手法で、破産確率に対する必要保有量
が導出されている[1]
 採用プール: Antpool, f2Pool
プールでのマイニング成功に関係なく、share獲得のたびに報酬付与。
手数料は高いが、収益が安定する。
18©Gunosy Inc.
プールと配分手法の一覧
https://en.bitcoin.it/wiki/Comparison_of_mining_pools
Bitcoin wikiに配分手法、手数料などのまとめあり。ほとんどはPPLNS, PPS。
トランザクション手数料を分配しないプールもある。
19©Gunosy Inc.
3. プール参加者の攻撃手法
あくまで収益性向上のための攻撃に絞ります
20©Gunosy Inc.
Sabotage attack
マイニングプールの収益性を故意に悪化させる攻撃。
 プールにshareは送信し収益を得るが、完全
なブロックを採掘できた場合は送信せずに捨
てる。
– PPS(マイニング成功によらず収益が得
られる)なら攻撃者の収益に影響無し
 2014/06 に、Eligiusプールに対して行われ
、300BTCの損失が出た
 ある程度のプール内シェアがないとできない
Pool
share
block
攻撃者の収益性はあがらないが、嫌がらせが可能。
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©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
23©Gunosy Inc.
4. プール管理者の攻撃手法
24©Gunosy Inc.
51%攻撃
詳細 効果
The Mining
Cartel Attack
 他のプールが採掘したブロック
を無視する
 特定のアドレスへの送金を無視
するなども可能
 送金処理の支配
 他プールの報酬がゼロに
 二重支払いが可能
ただし、大型マイナーは大型ホルダーでもあるので基本的に割に合わない
プールがハッシュレートの51%を持つことで、やりたい放題できる。
通貨の信頼性を地に落とすことも可能。
25©Gunosy Inc.
Selfish Mining
 最悪でも33%、うまくいけば制約なく収益性を高められる手法。
– 収益性の高いプールにマイナーは移動するので、自然と51%に
達する。
 Lie in wait attack同様、あえてブロックを公開しない手法を用いる
– 他のプールに無駄なブロックを掘らせ、収益性を下げる。
 “Block discarding attack” の一種と分類される。
実際には51%も必要とせず、最悪でも33%あれば良いとする攻撃手法 [4]
他のプールの収益性を悪化させ、相対的に有利になる。
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©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©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©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©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©Gunosy Inc.
Difficulty Raising Attack
 以下の特性を利用した攻撃
– 最長チェーンがdifficultyの合計値で決まる
– BTCのdiffiuculty調整は、時間によらず2014ブロックごと
– timestampをある程度偽装できる
 秘密裏に、2014ブロックをtimestamp 1秒刻みにして採掘しておく
– 見かけ上、一瞬で採掘できたことになる。
– その後、非常に高くなったdifficultyのもとで次のブロック採掘
に成功すれば、正直なチェーンを置き換えられる
 無限の時間があれば、任意のハッシュパワーで可能
難易度調整を利用した攻撃 [3]。同様に、51%なくても攻撃できるというもの。
32©Gunosy Inc.
まとめ
33©Gunosy Inc.
まとめ
 単純な収益性の改善だけでも、各種の攻撃が提案/検証されている
– まだまだ様々な攻撃があります。
– 収益性以外なら、当然DoSなど沢山の攻撃がある
 かなりのハッシュパワーを必要とする理論的な話も多く、実際に使
われるかは別の話かもしれない
 ブロックチェーン技術にかぎらず、マイニング系の理論だけでも相
当奥が深い!
– これらの研究が2011年とかから普通に行われているという驚き
– 日本語文献マジで無いぞという悲しみ(;_;)
マイニングの収益性を高める理論的な話について解説しました。
理論的なところの深掘りは面白いので、ぜひ皆さんも調べてみては!
34©Gunosy Inc.
参考文献
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©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 について

マイニングプールの収益配分と攻撃手法

  • 1.
  • 2.
    2©Gunosy Inc. 自己紹介  DeNA –ハッカドール立ち上げ  Gunosy – 新規事業開発室マネージャー  業務 – 新規事業の少人数立ち上げ – ニュースパス – バザリー – ブロックチェーン領域の研究開発  担当 – サーバーサイド, インフラ  DBスキーマにうるさい – 時々iOS, 時々PO 榎本 悠介 @mosa_siru (ボンバーマンの人)
  • 3.
    3©Gunosy Inc. アジェンダ マイニングの収益性を不当に高める攻撃について、 理論的なところを深掘りします! 1. マイニングプールの基礎 2.収益配分の仕組み 3. プール参加者の攻撃手法 4. プール管理者の攻撃手法 ビットコインのような、PoWを採用した パブリックブロックチェーンを前提とします
  • 4.
  • 5.
    5©Gunosy Inc. 復習:マイニングって? ブロックチェーン上で、トランザクションの承認・検証する作業。  不正がないか皆で検証を行い、その総計算能力でブロックチェーン 全体の改竄耐性を担保する。インセンティブあり。 ブロックの各種検証の後、ブロックのハッシュ値がある値以下にな るまで全員でひたすら計算を行う – ブロックの中身は、トランザクションや任意のnonce値など。 Nonce値をひたすら変えて試す。 – 一番早くnonce値をみつけてブロードキャストした人がマイニ ング成功、報酬獲得! – この難しさをdifficultyとよび、ビットコインでは10分に1回成 功するように調整されます  2018/02/14 マイニング報酬は1ブロック12.9BTC(約1290万) – 1日22億円がうまれている! マイナー視点では、計算を大量に行うほどお金がもらえる
  • 6.
    6©Gunosy Inc. ハッシュレートの急増 マイニングの競争が激化しており、ソロマイニングは非現実的 グラフ:https://blockchain.info/ja/charts/hash-rate?timespan=2years  ビットコインのハッシュレートは25.6EH/s (2018/02/14) –ASIC の Antminer S9(13.5TH/s) の 189万台分 – 1日144回しか報酬タイミングがなく、 ソロマイニングは宝くじ以下  BTC価格の上昇から、次々に大企業が参入。  ASIC(専用の集積回路)をいかに手に入れるか – 特定のハッシュ計算に特化したマシン (Antminer S9等)で、基本入荷待ち – 通常のPCでは全く太刀打ちできない ビットコインのネットワーク全体のハッシュ計算能力は急増している
  • 7.
    7©Gunosy Inc. プールマイニング マイニングプールの参加者で共同でマイニングを行い、収益を分配する。  プール参加者全員でnonce値の探索を行い、 計算回数に応じて収益を分配 –プール手数料だけ少し期待値はさがるが 、分散を大幅に抑えられる – 個人でのマイニングも現実的になる マイニングプール
  • 8.
  • 9.
  • 10.
  • 11.
    11©Gunosy Inc. 収益配分の仕組み  例:誰かが合計10を出すまでサイコロを10個振るとする –その各自の試行回数のカウントを、自己申告ではなく 「合計20以下を出した回数」で評価する  share = 「より緩和された問題の解答」 – (ブロックのdifficultyより)緩和されたdifficultyを満たす nonceを見つけるたびに、プール側に提出する  1ブロックにつき大量に提出されることになる – 自己申告ではなく、計算量の証拠となる 各マイナーの計算能力(share数)に応じて配分する。 プールの合計share数と、自分のshare数の比率に応じて配分。 この配分方式にいくつか種類がある。
  • 12.
    12©Gunosy Inc. Props (Proportional) プールでのマイニングに成功するたびに、そのラウンドのshare数に 応じて収益を支払う。 – ラウンド: プールでの採掘成功時と、次の成功時までの期間  攻撃手法が見つかっており、この対策のために様々な配分システム が派生している。 最も原始的な方式。 share 自分 その他
  • 13.
    13©Gunosy Inc. 攻撃手法: PoolHopping  ラウンド後半は、たくさん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 (PayPer Last N Share)  ラウンド間隔、ブロック間隔は一切問わない。N shareにおいて何 share獲得したかに応じて配分する。  収益を得るためには常にマイニングしないといけない。シンプルな がらもHopping耐性を持つ。 – なお、difficultyの変化に対して厳密なHopping耐性を得るには やや複雑な変形が必要(unit-PPLNS等) [1]  ある程度大きなプールに参加しないと、収益が安定しない。  採用プール: 多数 マイニング成功時に、最後のN shareにおける比率に応じて報酬が分配される 手数料も安く、現在主流な手法。
  • 17.
    17©Gunosy Inc. PPS (PayPer Share)  報酬は、 share * (share_dif / dif) * reward で計算される期待値 – マイナーにとっては、収益が安定するため嬉しい。  完璧なHopping耐性  プール管理者にとっては、マイニング失敗が続くと支出が増え続け るリスクがある – 手数料が高めになる傾向がある – 大型プールしか取れない手法で、破産確率に対する必要保有量 が導出されている[1]  採用プール: Antpool, f2Pool プールでのマイニング成功に関係なく、share獲得のたびに報酬付与。 手数料は高いが、収益が安定する。
  • 18.
  • 19.
  • 20.
    20©Gunosy Inc. Sabotage attack マイニングプールの収益性を故意に悪化させる攻撃。 プールにshareは送信し収益を得るが、完全 なブロックを採掘できた場合は送信せずに捨 てる。 – PPS(マイニング成功によらず収益が得 られる)なら攻撃者の収益に影響無し  2014/06 に、Eligiusプールに対して行われ 、300BTCの損失が出た  ある程度のプール内シェアがないとできない Pool share block 攻撃者の収益性はあがらないが、嫌がらせが可能。
  • 21.
    21©Gunosy Inc. Lie inwait 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 withholdingattack Sabotage attackと普通のマイニングを組み合わせると、収益性が上がる[5]  ハッシュパワーの半分を、各プールに均等に 割り振ってSabotage attackする。 – つまり、ブロックは送信せず破棄  残り半分を、独自のプールで普通にマイニン グする  他プールの収益性は悪くなっているので、相 対的に収益性が上がる。  高いハッシュパワーがないと現実的ではない が、攻撃に気づかれにくく防ぎにくいのがポ イント。  さらに強力な Fork After Withholding (FAW) Attacks が提案されている[6] Pool B Pool A Pool C Pool 1. 基本的にどの攻撃も、高いハッシュパワーが必要 block share share block
  • 23.
  • 24.
    24©Gunosy Inc. 51%攻撃 詳細 効果 TheMining 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 RaisingAttack  以下の特性を利用した攻撃 – 最長チェーンがdifficultyの合計値で決まる – BTCのdiffiuculty調整は、時間によらず2014ブロックごと – timestampをある程度偽装できる  秘密裏に、2014ブロックをtimestamp 1秒刻みにして採掘しておく – 見かけ上、一瞬で採掘できたことになる。 – その後、非常に高くなったdifficultyのもとで次のブロック採掘 に成功すれば、正直なチェーンを置き換えられる  無限の時間があれば、任意のハッシュパワーで可能 難易度調整を利用した攻撃 [3]。同様に、51%なくても攻撃できるというもの。
  • 32.
  • 33.
    33©Gunosy Inc. まとめ  単純な収益性の改善だけでも、各種の攻撃が提案/検証されている –まだまだ様々な攻撃があります。 – 収益性以外なら、当然DoSなど沢山の攻撃がある  かなりのハッシュパワーを必要とする理論的な話も多く、実際に使 われるかは別の話かもしれない  ブロックチェーン技術にかぎらず、マイニング系の理論だけでも相 当奥が深い! – これらの研究が2011年とかから普通に行われているという驚き – 日本語文献マジで無いぞという悲しみ(;_;) マイニングの収益性を高める理論的な話について解説しました。 理論的なところの深掘りは面白いので、ぜひ皆さんも調べてみては!
  • 34.
  • 35.
    35©Gunosy Inc. 参考文献(1) 1. MeniRosenfeld: 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. IttayEyal 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 について