暗号通貨のマイニングのハッシュアルゴリズムについて調べてみた

AbemaTV Advent Calendar 2017 の16日目の記事です。

AbemaTV Advent Calendar 2017 - Adventar

暗号通貨で使われるPoWの暗号化アルゴリズムについて書きたいと思います。

まず簡単にマイニングの説明。 ビットコインを通じた取引はビットコインネットワーク(P2Pに参加しているクライアント)に承認されはじめて有効になります。 取引の内容をトランザクションと呼び、インプットとアウトプットと言う形で誰のウォレットから何BTC誰に支払われれるという内容です(前のトランザクションハッシュ値や新しい所有者の公開鍵などを含む)。この未承認のトランザクションをマイナーが見つけ出し、ブロックチェーンに書き込む。

マイナーがトランザクションを見つけ、記載するまでがマイナーの仕事で、ブロックチェーンに記載されるということは、ネットワーク全体に承認されたということになるが、全体に承認するためにProof Of Workという作業がある。

CPUの計算の速さを競わせ、ブロックが有効だという一番近い解を最初に見つけたマイナーを勝者とし、そのブロックをブロックチェーンに組み込み、報酬が貰えるという仕組み。ビットコインではそのアルゴリズムにSHA256という暗号化アルゴリズムが使われていて、提案しようとするブロックのヘッダにnonceを加えてシリアライズしたバイト列をSHA256でハッシュ化し、答えが最小になるまで反復的に計算し続ける。10分以内に計算が終わるように難易度調整されている。

はやく計算を行ったマイナーが報酬を得ることができるため、どのハッシュアルゴリズムで計算を行うかも重要になってきます。電力消費量、一般人でも収益化できるのか、専用の高価な機器を用意しないとマイニングできないかなどに関わってくるので、敢えてASIC(高価な専用な採掘機)でマイニングできないような複雑なアルゴリズムを採用しているアルトコインも存在する。

ビットコインは計算が信用を作り出す仕組みで、善の心を持ったマイナーの計算能力が過半数を割らない限り、健全なネットワークでいられる。そのため51%攻撃やシビルアタックといった悪意のあるユーザーの攻撃などを防ぐ必要がある。 Sybil attack - Wikipedia

blockchain.info https://i.gyazo.com/4fbc2568a4f16453c0e31604273f7e26.png ただ、この分布を見る通り寡占状態になっていて、分散型信用ネットワークとはなんだったのか?という状態になっている。 既に個人でビットコインマイニングは難しく、マイニングプールに参加して貢献度により報酬をもらうという形が一般的。

SHA-256、RIPEND-160

2つを組み合わせることで強固なハッシュを作る。ビットコインビットコインキャッシュなどで使われている。GPUやASICでの計算に向いている。AntMinerというASIC採掘機が数10万から100万円以上で売られている。

ブロック増えていくほど、計算量が増えるため電力消費が増え続ける。ビットコインマイニングで年間28TWh消費しており、環境問題に発展しそう。実際に取引が行われているというより、投機目的が多いため、資源の無駄遣いという現状もある。 5 Best Bitcoin Mining Hardware ASICs 2017 / 2018 (Comparison)

Equihash

ZcashのPoWで使われている。(ビットコインゴールドもSHA-256からEquihashに移行?) メモリ指向型PoW。効率のいい専用のASIC機を作ることを難しくしている。

GitHub - khovratovich/equihash: Equihash: memory-hard PoW with fast verification

論文: https://eprint.iacr.org/2015/946.pdf 人生で一番やる気あるときに読む

他にもxkSNARKSというスマートコントラストの認証コストを抑える技術もあってZCash面白い。 Zcash - イーサリアム上のzkSNARKs

Ethash

イーサリアムのPoWで使われている。 こちらもマイナーの寡占を防ぐためにASICのマイニングが難しくされている。

https://ethereum-japan.net/wp-content/uploads/2017/06/bfnEB.png

Directed acyclic graph - Wikipedia

DAGというグラフの計算をメモリで行うため最適化が難しいということらしい。ビットコインブロックチェーンはブロックが一本でつながっているが、DAGは複数のブロックが同時につながっている。 なんでそうなっているかというと、Ethereumには、Ghost Protocolという技術があり、ハッシュレートが低いマイナーの無駄になってしまう(orphan block)をuncle blockと呼び、報酬を与え、そのブロックはチェーンにぶら下がる。それによって重くなるチェーンをメインチェーンとする仕組みなよう。それによって短い時間でもセキュリティの高いブロックの生成を可能にしている。

ブロック生成時間が15秒、DAGにおいて30,000ブロックごとに1Epochという単位でわけられていいて、1Epoch毎にDAGファイルが増加する問題もある。 Radeon RXにおいて長時間マイニングするとハッシュレートが低下してしまうため、コスパが悪い。

そもそもイーサリアムは、Proof Of WorkからProof of Stakeへの変更を予定(Casperと呼ばれるアルゴリズム)していて、大型アップデートと謳っている「セレニティー」で実装されるらしい。PoSはPoWの欠点を克服したもので、これはこれで説明が長くなるから割愛。

ビットコインは単純がゆえに問題もあるが、イーサリアムは複雑なため難しい。。

scrypt

litecoinなどで採用。メモリ消費が激しい。 litecoinもASIC耐性のあるコインとして開発されたが、現在scrypt用の採掘機が流通している。 AntMiner L3+ Buy The Powerful Antminer L3+ ASIC Litecoin Miner - Bitmain

yescrypt

BitZenyで採用。ASIC耐性あり。CPUのみ対応。 SHA-256が使われている様子。 bitzeny/hash.h at new-bitzeny · onokatio/bitzeny · GitHub

価格が上昇した影響でマイニングプールも賑わっていて、掘るのが難しくなってきている。。

Lyra2REv2

Monacoinで採用。litecoinからフォークされたMonacoinはASIC対策のためLyra2REに変更。 変更後のスレ

Lyra2REv2のASIC - Ask Mona 【マイナー必見】Lyra2REv2を高速化したよ - Ask Mona

CryptoNote

匿名通貨Monero(Cryptnight)で採用。消費電力が少ない。MinergateというプールはCryptnote系のコインが掘れる。

終わり

どの通貨でどのアルゴリズムが使われているか調べてみました。ブロックチェーンや、ビットコインのネットワークアーキテクチャ、暗号化などまだわからないところがたくさんあるので、また記事を書こうと思います。 個人的に来年はプログラマとして暗号通貨に投資しようと思ってます。マイニングに関しては僕は自作PC作ったり、パーツとか調べるのも好きなので、割りと向いてる方かなと思います。 Radeonのドライバーも仮想通貨向けの機能を追加していたり、しばらく自作PC界隈も盛り上がりそうで楽しいです。 ゲーム内オーバーレイ表示やスマホ連携を搭載した新ドライバ「Radeon Software Adrenalin Edition」 - PC Watch

社内で簡単にビットコインの仕組みについて説明したときのスライドです

www.slideshare.net