ビットコインの心臓部にあたるマイニング!透明性に必要な要素とは? 2019/10/11 19:00 10/25 16:49 CoinPost 2019年6月8日から9日にかけて、アムステルダムでBreaking Bitcoinというカンファレンスが行われました。 本コラムは、公開された動画や書きおこしをもとに、その発表内容を追いかけ、ビットコインのセキュリティに関する取り組みの最先端を知ろうという試みです。発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様がビットコインの仕組みや最新の研究について詳しくなるための一助になれることを願います。 6回目は、Alexei Zamyatin氏の、”Security and Attacks on Decentralized Mining Pools”という講演について、前後半でお送りいたします。 マイニングの仕組みに必要なバランスとは? ビットコインをマイニングするマイナーは、皆さんもご存じのように、ほとんどの場合マイニングプールでマイニングを行います。以前は単独でもマイニングを行うことが可能でしたが、現在では競争が激化しているため非効率です。 マイニングの難易度は、砂漠の広さに例えるとわかりやすいかもしれません。その砂漠の広さは、難易度が上がるとさらに広くなっていきます。まさにマイニングは砂漠で砂金の一粒を見つけるような作業です。そういった途方もない作業で得られる報酬を、結託して分担し、少しずつ分け合うという仕組みは極めて合理的なものと言えるでしょう。 しかし一方で、マイナーが便利に利用するマイニングプールですが、マイニングパワーが集中することは必ずしも良いことではありません。もともと銀行や政府といった権力の集中を避けるという性質を持っているビットコインですが、マイニングパワーが集中してしまうと、特定の人間あるいは事業者に大きな力を与えてしまうことを意味します。 例えばハードフォークです。ハードフォークを行うためには、大きなマイニングパワーを持つ人間や事業者の同意が必要不可欠です。方針が異なる派閥が分離してしまうことも、ままあります。 さらにこの問題はビットコインよりもアルトコインで、より大きくなります。例えばnamecoinでは、単一ユーザが長期間にわたってハッシュレートの大部分を確保していました。こういった状況は望ましくないため、うまく分散されるよう、仕組みを考える必要があります。 推奨される分散マイニングプールの開発 分散化による検閲への抵抗も、重要な要素と言われています。 例えば、全部がプール管理者任せになっている場合、その管理者が特定のトランザクションを差別化するといった行為がありえるため、プール内のマイナーがトランザクションを処理できる仕組みが望ましいでしょう。さらに言えば、ネットワーク全体で見たときにはプールの数も多数存在し、それぞれに一定数のマイナーが参加している必要があります。 報酬の支払いが公平に行われていること、どのマイナーも悪意ある行為を行っていないことを、確認できる仕組みも必要です。こういった作業にはどうしても時間や負担が生じるため、オーバーヘッドを最小化したいというのは、当然の帰結でしょう。 p2poolは2011年に提案された最初の分散マイニングプールです。チェーン化されたビットコインブロックとは別の共有チェーン(FIFOキュー)を用いています。ここでの共有チェーンとは、30秒に一回ブロックが見つかるようなブロックチェーンを用意し、これを10分間続ければ、20回に1回の割合でビットコイン獲得に必要なマイニング結果が得られるはず、という考え方です。 例えば20億回のマイニング作業を行なった場合、1億回で得られるはずの結果を各マイナーに報告させ、それに基づいて支払いを行うということです。 マイニングされたブロックには、大量のコインベーストランザクション(ビットコインが生成されたトランザクション)が含まれます。これがマイナーへの支払いにあたります。期間に関して言えば、3日間(PPLNS)なので、過去3日分のブロック(共有チェーンとしては8640)に基づきます。 難易度の調整も苦労する点ですが、良い点もあり、p2poolではスマートコントラクトを考慮する必要がありません。 p2pool:https://en.bitcoin.it/wiki/P2Pool FIFO:https://ja.wikipedia.org/wiki/FIFO 分散マイニングプールp2poolの今後の課題 共有チェーンを考えるときには、難易度を調整できなければなりません。 シンプルな実装にしてしまうと、マイナーが勝手に簡単な難易度でマイニングを行って報告し、たくさんの偽の結果を報告できてしまうからです。ブロックごとに重みづけをする案も考えられますが、ブロックチェーンの分岐や再処理が必要になることを考えると、望ましくありません。 また、ビットコインの難易度として統計的な値(直近数日間の平均など)を取っても良いのですが、プールの参加マイナー数が変動する可能性や、難易度が激変する可能性もあります。 そこでp2poolでは、動的な難易度調整を実装しています。採掘されたブロックの数を見て、予想される結果に基づいて調整します。興味深い事実として、中央集権型のマイナープールでは、大規模なマイナーが参加するほど報酬が安定します。マイニング確率が上がり、報酬が得やすくなるからです。 一方、p2poolでは大規模なマイナーが参加すると難易度が大幅に上がるため、シェアチェーンにおけるブロックの発見が難しくなります。このことから、p2poolではむしろ、大規模向け、中規模向け、小規模向けといった形でプールを分離する必要が生じます。 小規模ユーザーでは30秒に一回という間隔について、ネットワーク帯域やレイテンシの観点から問題になることもあり、以前のp2poolにはトランザクションサイズの制限がありました。 まとめ ここまで、Alexei Zamyatin氏の、”Security and Attacks on Decentralized Mining Pools”について前半をまとめました。次回は後半として、マイニングプールへの実際の攻撃について見ていきたいと思います。 なお、記事中の表現については講演資料を筆者なりに読み解きつつ、前後で独自の解説を加えておりますが、なにぶん新しい技術に関する内容ですので、もしも間違いなどございましたらお気軽にご指摘くださいませ。(特に技術的な指摘は大歓迎です) 元記事:http://diyhpl.us/wiki/transcripts/breaking-bitcoin/2019/security-attacks-decentralized-mining-pools/ 前回の記事はこちら 前回のコラムでは、ビットコインユーザーへの攻撃の手法とその対策について紹介しました。最近では手口も巧妙になっていますので、ぜひビットコインユーザー、または関心のある方はご覧ください。 ビットコインユーザーなら抑えておきたい!ビルドシステムへの攻撃とその対策
ビットコインの心臓部にあたるマイニング!透明性に必要な要素とは?
10/25 16:49 CoinPost
2019年6月8日から9日にかけて、アムステルダムでBreaking Bitcoinというカンファレンスが行われました。
本コラムは、公開された動画や書きおこしをもとに、その発表内容を追いかけ、ビットコインのセキュリティに関する取り組みの最先端を知ろうという試みです。発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様がビットコインの仕組みや最新の研究について詳しくなるための一助になれることを願います。
6回目は、Alexei Zamyatin氏の、”Security and Attacks on Decentralized Mining Pools”という講演について、前後半でお送りいたします。
マイニングの仕組みに必要なバランスとは?
ビットコインをマイニングするマイナーは、皆さんもご存じのように、ほとんどの場合マイニングプールでマイニングを行います。以前は単独でもマイニングを行うことが可能でしたが、現在では競争が激化しているため非効率です。
マイニングの難易度は、砂漠の広さに例えるとわかりやすいかもしれません。その砂漠の広さは、難易度が上がるとさらに広くなっていきます。まさにマイニングは砂漠で砂金の一粒を見つけるような作業です。そういった途方もない作業で得られる報酬を、結託して分担し、少しずつ分け合うという仕組みは極めて合理的なものと言えるでしょう。
しかし一方で、マイナーが便利に利用するマイニングプールですが、マイニングパワーが集中することは必ずしも良いことではありません。もともと銀行や政府といった権力の集中を避けるという性質を持っているビットコインですが、マイニングパワーが集中してしまうと、特定の人間あるいは事業者に大きな力を与えてしまうことを意味します。
例えばハードフォークです。ハードフォークを行うためには、大きなマイニングパワーを持つ人間や事業者の同意が必要不可欠です。方針が異なる派閥が分離してしまうことも、ままあります。
さらにこの問題はビットコインよりもアルトコインで、より大きくなります。例えばnamecoinでは、単一ユーザが長期間にわたってハッシュレートの大部分を確保していました。こういった状況は望ましくないため、うまく分散されるよう、仕組みを考える必要があります。
推奨される分散マイニングプールの開発
分散化による検閲への抵抗も、重要な要素と言われています。
例えば、全部がプール管理者任せになっている場合、その管理者が特定のトランザクションを差別化するといった行為がありえるため、プール内のマイナーがトランザクションを処理できる仕組みが望ましいでしょう。さらに言えば、ネットワーク全体で見たときにはプールの数も多数存在し、それぞれに一定数のマイナーが参加している必要があります。
報酬の支払いが公平に行われていること、どのマイナーも悪意ある行為を行っていないことを、確認できる仕組みも必要です。こういった作業にはどうしても時間や負担が生じるため、オーバーヘッドを最小化したいというのは、当然の帰結でしょう。
p2poolは2011年に提案された最初の分散マイニングプールです。チェーン化されたビットコインブロックとは別の共有チェーン(FIFOキュー)を用いています。ここでの共有チェーンとは、30秒に一回ブロックが見つかるようなブロックチェーンを用意し、これを10分間続ければ、20回に1回の割合でビットコイン獲得に必要なマイニング結果が得られるはず、という考え方です。
例えば20億回のマイニング作業を行なった場合、1億回で得られるはずの結果を各マイナーに報告させ、それに基づいて支払いを行うということです。
マイニングされたブロックには、大量のコインベーストランザクション(ビットコインが生成されたトランザクション)が含まれます。これがマイナーへの支払いにあたります。期間に関して言えば、3日間(PPLNS)なので、過去3日分のブロック(共有チェーンとしては8640)に基づきます。
難易度の調整も苦労する点ですが、良い点もあり、p2poolではスマートコントラクトを考慮する必要がありません。
p2pool:https://en.bitcoin.it/wiki/P2Pool
FIFO:https://ja.wikipedia.org/wiki/FIFO
分散マイニングプールp2poolの今後の課題
共有チェーンを考えるときには、難易度を調整できなければなりません。
シンプルな実装にしてしまうと、マイナーが勝手に簡単な難易度でマイニングを行って報告し、たくさんの偽の結果を報告できてしまうからです。ブロックごとに重みづけをする案も考えられますが、ブロックチェーンの分岐や再処理が必要になることを考えると、望ましくありません。
また、ビットコインの難易度として統計的な値(直近数日間の平均など)を取っても良いのですが、プールの参加マイナー数が変動する可能性や、難易度が激変する可能性もあります。
そこでp2poolでは、動的な難易度調整を実装しています。採掘されたブロックの数を見て、予想される結果に基づいて調整します。興味深い事実として、中央集権型のマイナープールでは、大規模なマイナーが参加するほど報酬が安定します。マイニング確率が上がり、報酬が得やすくなるからです。
一方、p2poolでは大規模なマイナーが参加すると難易度が大幅に上がるため、シェアチェーンにおけるブロックの発見が難しくなります。このことから、p2poolではむしろ、大規模向け、中規模向け、小規模向けといった形でプールを分離する必要が生じます。
小規模ユーザーでは30秒に一回という間隔について、ネットワーク帯域やレイテンシの観点から問題になることもあり、以前のp2poolにはトランザクションサイズの制限がありました。
まとめ
ここまで、Alexei Zamyatin氏の、”Security and Attacks on Decentralized Mining Pools”について前半をまとめました。次回は後半として、マイニングプールへの実際の攻撃について見ていきたいと思います。
なお、記事中の表現については講演資料を筆者なりに読み解きつつ、前後で独自の解説を加えておりますが、なにぶん新しい技術に関する内容ですので、もしも間違いなどございましたらお気軽にご指摘くださいませ。(特に技術的な指摘は大歓迎です)
元記事:http://diyhpl.us/wiki/transcripts/breaking-bitcoin/2019/security-attacks-decentralized-mining-pools/