Screenshot from 2017-04-07 16-21-48

ASIC BOOSTの手法と対策について

レポート「ビットコインキャッシュの取り出し方&送金方法」を配信。画面付きで丁寧に解説

レポート「アルトコイン図鑑」では30種類以上のコインの概要と見通しを解説レポート内容へ

昨日からASIC BOOSTについての話題でビットコイン界はもちきりである。

ASIC BOOSTは、ビットコインの仕様と、SHA-256関数のアルゴリズムの特徴を上手く使うことにより、計算コストを20−30%節約することができるという手法である。

以下、ASIC BOOSTとその対策について、できるだけ簡単かつ簡便に解説する。

G.Maxwellの指摘

G.Maxwellは、一部のマイニングチップをリバースエンジニアリングすることで、ASIC BOOSTの手法が組み込まれていることを明らかにしたという。

マイナーがSegwitに反対していた真の理由は、Segwitが導入されると、この手法が使えなくなるため、一部のマイナーの優位性が崩れるということだという指摘がなされた。

G.Maxwellは、Segwitがアクティベートするかいなかにかかわらず、ASIC BOOST手法が使えなくするためのソフトフォークを提案している。

ASIC BOOSTの手法

この手法の内容について、テクニカルな面を説明する。

ビットコインでは、新しいブロックを発見するためには、SHA256関数を用いて、ハッシュ値を得ることを繰り返すというのはご存知のとおりだろう。

このSHA256関数には計算の特徴がある。データを64バイトごとに区切って、別々に計算したものを組み合わせることを繰り返す。この特徴をハックすると、計算量を削減できる場合がある。

具体的に、説明する。ビットコインのブロックのヘッダは合計80バイトで、次のような構造をしている。

Screenshot from 2017-04-07 17-36-28

頭から、バージョン番号の4バイト、前ブロックのハッシュ値32バイト、トランザクションのマークルルート32バイト、タイムスタンプ4バイト、ビッツ(難易度)4バイト、ナンス4バイトである。

このうち、ピンクで示した部分はマイニング中に値が変わらないもの。青色の部分が、通常では値が変わるものである。

SHA256では、64ビットごとにデータを区切って計算すると言った。そこで、ビットコインのブロックヘッダを64バイトで、前半と後半に区切ってみよう。

このとき、前後半の境目に注目する。

境目にはマークルルートというデータが存在する。このデータはブロックに含まれる全トランザクションをハッシュしたものであるが、マイニング中に値が変わる(変える)。この値が、前半と後半の両方にまたがって存在しているため、ハッシュ値を得る際には、前半・後半ともに再計算するのが通常だ。

しかしながら、何かの方法で、この後半の部分をいつも一定の値にすることができたらどうだろうか?そのようなことができれば、後半16バイトの計算を省略することができる。

Screenshot from 2017-04-07 16-53-46

上記がその概念図である。マークルルート(32バイト)のうち、末尾4バイトを常に同じ値になるようなものだけを利用してマイニングを行う。これができれば、後半の16バイトがすべてピンク(固定値)になる。

マークルルートの衝突

マークルルートの末尾の4バイトを同じにするにはどうすれば良いだろうか。実際には、大量のマークルルートを作成し、末尾4バイトが一致しているものを探してそれを利用する。この手のものを一般には衝突(コリジョン)攻撃という。

Screenshot from 2017-04-07 16-26-52

マークルルートは、ブロックに含まれるすべてのトランザクションのハッシュであるが、とりわけコインベーストランザクションというものの内容を調整することで、非常に少ない計算量で、多量のマークルルートを作成することができる。

コインベーストランザクションとは、マイナーがは自己宛に新規の発行のビットコインを送るという特殊なトランザクションで、マイニングの際にだけ付け加えることができるものだ。このトランザクションはマイナーが任意に設定できるパラメータが含まれるため、調整弁として都合が良い。

ウィットネス・コミットメントの追加

G.Mawellが提案した対策は、コインベーストランザクション内にウィットネス・コミットメントという値を付け加える。この変更は、マイナーがコリジョンを含んだマークルルートを作成する計算量を大幅に増加させる。これにより、ASIC BOOSTの効果を事実上無効にすることができる。

ただし、この変更はソフトフォークを伴う。従来の方法ではマイナーの95%の賛成が必要となるため、自己に不利益な変更に賛成するマイナーは少ないと考えられる。

そのため、期日を決めて移行を行うUASF(ユーザー・アクティベート・ソフトフォーク)などの手法と組み合わせることになり、実際に実行できるかは、まだ未知数である。

(追記)なおASIC BOOSTに対しては、攻撃ではなく最適化であり、ASIC BOOSTに否はないとする主張もみられる。私の個人的な意見を述べると、技術的な見地からみた場合これはマイニングアルゴリズムへのハックであり、セキュリティホールの類であると考えている。つまり、このホールは早急に塞がれるべきであると考える。

(参考)

https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-April/013996.html

https://medium.com/@jimmysong/eli5-gregory-maxwells-inhibition-proposal-884f11652b89

https://www.asicboost.com/

詳細日本語マニュアル付きTrezorの購入は

初心者向け「使って勉強!ビットコイン」