SlideShare una empresa de Scribd logo
1 de 36
マイニングプールの収益配分と攻撃手法
@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 について

Más contenido relacionado

La actualidad más candente

心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of VeinTokoroten Nakayama
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用Akinori SAKATA
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
UXデザインワークショップ資料 by ATOMOS DESIGN
UXデザインワークショップ資料 by ATOMOS DESIGNUXデザインワークショップ資料 by ATOMOS DESIGN
UXデザインワークショップ資料 by ATOMOS DESIGNAkihiko Kodama
 
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組みJumpei Miyata
 
心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話Yusuke Hisatsu
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanItsuki Kuroda
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)Amazon Web Services Japan
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計sairoutine
 
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)mosa siru
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveTokoroten Nakayama
 
コミュニティと人の縁
コミュニティと人の縁コミュニティと人の縁
コミュニティと人の縁Takuya Okamoto
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーンメトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーンHiroyuki Ito
 
小さく始める大規模スクラム
小さく始める大規模スクラム小さく始める大規模スクラム
小さく始める大規模スクラムKeisuke Tsukagoshi
 

La actualidad más candente (20)

心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
UXデザインワークショップ資料 by ATOMOS DESIGN
UXデザインワークショップ資料 by ATOMOS DESIGNUXデザインワークショップ資料 by ATOMOS DESIGN
UXデザインワークショップ資料 by ATOMOS DESIGN
 
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
 
心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話心理的安全性を 0から80ぐらいに上げた話
心理的安全性を 0から80ぐらいに上げた話
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
コミュニティと人の縁
コミュニティと人の縁コミュニティと人の縁
コミュニティと人の縁
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーンメトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
 
小さく始める大規模スクラム
小さく始める大規模スクラム小さく始める大規模スクラム
小さく始める大規模スクラム
 

Más de mosa siru

KYC and identity on blockchain
KYC and identity on blockchainKYC and identity on blockchain
KYC and identity on blockchainmosa siru
 
Payment Channel Introduction
Payment Channel IntroductionPayment Channel Introduction
Payment Channel Introductionmosa siru
 
Go, memcached, microservices
Go, memcached, microservicesGo, memcached, microservices
Go, memcached, microservicesmosa siru
 
ニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービスニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービスmosa siru
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
lua_nginx_module JSON-RPC 2.0 Batch Request
lua_nginx_module JSON-RPC 2.0 Batch Requestlua_nginx_module JSON-RPC 2.0 Batch Request
lua_nginx_module JSON-RPC 2.0 Batch Requestmosa siru
 
Elasticsearch for Hackadoll
Elasticsearch for HackadollElasticsearch for Hackadoll
Elasticsearch for Hackadollmosa siru
 
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)mosa siru
 
Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)mosa siru
 
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用mosa siru
 
how to make twitter list automatically
how to make twitter list automaticallyhow to make twitter list automatically
how to make twitter list automaticallymosa siru
 

Más de mosa siru (11)

KYC and identity on blockchain
KYC and identity on blockchainKYC and identity on blockchain
KYC and identity on blockchain
 
Payment Channel Introduction
Payment Channel IntroductionPayment Channel Introduction
Payment Channel Introduction
 
Go, memcached, microservices
Go, memcached, microservicesGo, memcached, microservices
Go, memcached, microservices
 
ニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービスニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービス
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
lua_nginx_module JSON-RPC 2.0 Batch Request
lua_nginx_module JSON-RPC 2.0 Batch Requestlua_nginx_module JSON-RPC 2.0 Batch Request
lua_nginx_module JSON-RPC 2.0 Batch Request
 
Elasticsearch for Hackadoll
Elasticsearch for HackadollElasticsearch for Hackadoll
Elasticsearch for Hackadoll
 
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
 
Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)
 
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
 
how to make twitter list automatically
how to make twitter list automaticallyhow to make twitter list automatically
how to make twitter list automatically
 

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

  • 2. 2©Gunosy Inc. 自己紹介  DeNA – ハッカドール立ち上げ  Gunosy – 新規事業開発室マネージャー  業務 – 新規事業の少人数立ち上げ – ニュースパス – バザリー – ブロックチェーン領域の研究開発  担当 – サーバーサイド, インフラ  DBスキーマにうるさい – 時々iOS, 時々PO 榎本 悠介 @mosa_siru (ボンバーマンの人)
  • 3. 3©Gunosy Inc. アジェンダ マイニングの収益性を不当に高める攻撃について、 理論的なところを深掘りします! 1. マイニングプールの基礎 2. 収益配分の仕組み 3. プール参加者の攻撃手法 4. プール管理者の攻撃手法 ビットコインのような、PoWを採用した パブリックブロックチェーンを前提とします
  • 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値の探索を行い、 計算回数に応じて収益を分配 – プール手数料だけ少し期待値はさがるが 、分散を大幅に抑えられる – 個人でのマイニングも現実的になる マイニングプール
  • 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. 攻撃手法: 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獲得のたびに報酬付与。 手数料は高いが、収益が安定する。
  • 20. 20©Gunosy Inc. Sabotage attack マイニングプールの収益性を故意に悪化させる攻撃。  プールにshareは送信し収益を得るが、完全 なブロックを採掘できた場合は送信せずに捨 てる。 – PPS(マイニング成功によらず収益が得 られる)なら攻撃者の収益に影響無し  2014/06 に、Eligiusプールに対して行われ 、300BTCの損失が出た  ある程度のプール内シェアがないとできない Pool share block 攻撃者の収益性はあがらないが、嫌がらせが可能。
  • 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 について