翻訳記事

Ethereum勉強メモ~懲罰的なProof-of-StakeアルゴリズムSlasher

  • このエントリーをはてなブックマークに追加

「Ethereum勉強メモ」シリーズは、管理人が勉強のために読んだ
Ethereumの海外の記事を日本語に翻訳した記事です。
内容は個人で残したメモレベルなので、
読みづらいところもあると思いますがご了承ください。
Proof of Workの代わりにProof of Stakeを採用すると、
フォークが起こったとき、正しいチェーンではなく、
いずれかのチェーンをマイニングするのが得です。
これでチェーンが1つにならないという問題が起こります。
そこで、正しくないチェーンをマイニングしたら
罰を与えるアルゴリズムがSlasherアルゴリズムです。
今回はEthereum創始者のVitalik ButerinがSlasherについて綴った記事を紹介します。
Slasher: A Punitive Proof-of-Stake Algorithm

はじめに

このポストの目的はイーサリアムがマイニングシステムをDaggerからSlasherに変えることを示唆するものではない。
将来的にProof of Stakeが大きく普及したり、イーサリアムがPoSに切り替えるだけの十分納な理由が提案ときにslasherは使える道具である。もしかしたら、イーサリアムとは独立を望むほかの暗号通貨がSlasherの恩恵をうけるかもしれない。
いくつインスピレーションをくれたtacotimeと改善案を提供してくれたJack Walkerに感謝する。

Proof of stakeの魅力

Proof of stakeは長い間、暗号通貨コミュニティでは大きな関心を集めている。
最初にProof of stakeを採用したPPCoinはSunny King によって2012リリースされ
アルトコインの時価総額5位を維持している。(2014年1月時点)
Proof of stakeはProof of workに比べて多くのメリットがある。
第1にProof of stakeはとても環境にやさしい。
一方、Proof of walkでは安全性を保証するためにマイナーは無駄な計算にエネルギーを燃やさないといけない。
Proof of stakeは効果的に計算量を使うので、現実のエネルギーや資源が無駄になることはありません。
第2にProof of workは集権化が問題となっている。
Proof of workは本質的にASICsなどの特殊な機器の支配を受けやすく、
半導体メーカーや銀行など、ひとつの組織に独占される危険性がある。
Scryptや現在採用されているDaggerのようなMemory-hardなマイニングアルゴリズム
を採用することで、この問題を大幅に緩和しますが完璧ではない。
Proof of Workにもどると、これが上手くいけば、根本的な問題解決になる。

Proof of stakeの問題

しかし、Proof of stakeが近々、暗号通貨に実装された場合、一つ本質的な欠陥が存在する。
それは、ビットコインの開発者が提起したNothing at stakeという問題である。
これの意図することは、51%攻撃に対する分析を試みたときに明らかになる。
この問題はProof of workを用いた仕組みでは対策が施されている。
攻撃者AはBにコインを支払って、取引がKブロック上でK1ブロックで承認されたとする。
この取引でAはコインの対価としてBから商品を受け取る。
その後、すぐにAは自分自身にコインを支払うK2ブロックをKブロック上で生成する。
このとき、2つの全く異なるK1,K2ブロックチェーンが存在する。
もし、AがK2上に正当なネットワークよりもブロックを早く生成できた場合、
K1よりもK2の取引が優先されて、AがBに支払いをしなかったことになります。
Proof of workでは、K2をK1よりも優先されるには、Bは正当なセットワーク全体
よりも大きな計算量が必要である。
Proof of stakeはブロックを生成するためにコンピューターの計算の代わりにお金をつかう。
PPCoinの場合、すべてのコインが毎秒ごとに有効なブロックを生成する権利になることがある。
なので、多くのコインを持っている人が早くブロックを生成し続けることができる。
51%攻撃は理論的にはコンピューター計算量が正当なネットワークを超える必要があるが、
PoSでは多くのお金が必要だ。ここでPoWとPoSとの差を説明する。
PoWの場合マイナーたちはフォークが生まれたとき、正当なネットワークのほうを優先してマイニングする。
しかし、PoSの場合、マイナーたちは2つのフォークをマイニングすることになる。
なぜなら、不正なフォークが採用される可能性がたとえ低くても、
マイニングするだけの価値がマイナーにとってあるからである。
もし、マイナーが多くのコインを保持している場合、自分のコインの価値を守るため攻撃に対抗する。
しかし、マイナーが少ないシステムでは、利己的なマイナーの存在によってセキュリティが崩壊するリスクを抱えている。

問題の解決

上記の問題はProof of Stakeの致命的な問題ではない。
そして、全てのチェーンがそれ自身に依存してることは疑いようのない事実だ。
しかし、実際に問題を回避するための巧妙な方法としてこれまでには過小評価されている方法がある。
それは正当なチェーンが他のチェーンを利用することだ。
もし、2つのチェーンをマイナーがマイニングした場合、マイナーを罰する。
しかし、それはPPCoinようなやり方をした場合、不明瞭である。
その理由はマイニングがランダムなプロセスだからである。
すなわち、0.1%のコインを保有している場合、有効なK1のブロックを0.1%で生成するチャンスがあり
有効なK2のブロックを0.1%で生成するチャンスがある。しかし、K1,K2を同時に生成できる可能性は0.0001%に過ぎない。
この場合、2番目のブロックを生成することになる。なぜなら、99.9%の確率でマイニングの報酬を受け取ることができるからである。
しかし、この問題を避けるための以下の提案は、
厳しく処罰を下すと言う意味でSlasherアルゴリズムと呼ぶ。
ここで示すSlasherの説明では話を簡単ににするために保有残高を用いて議論するが、
未使用のコイン保有量やほかの似たような概念へ簡単に拡張できる。

  1. ブロック生成はProof of Workによるマイニングも利用する。
    しかし、我々は1つの修正を加える。
    ブロックKを作ったとき、マイナーはランダムな数nを生成し、
    そのハッシュ値H(n)を計算してブロックKに埋め込む。
    マイナーは、ブロックK + 100とK + 900との間でnを明らかにする取引を公開することによって、報酬を請求しなければならない。
    Proof of Workの報酬は非常に低く、理想的にはBitcoinのエネルギー使用量の約1%に等しいエネルギー使用量を推奨する。
    目標とするブロック生成にかかる時間は30秒である。
  2. コインの供給量をMとし、n[i]をブロックiのnの値とする。
    ブロックK+1000の時点で保有量BのAはブロックに「署名する権利」を
    sha256(n[K] + n[K+1] + … + n[K+99] + A) < 2^256 * 64 * B / Mを計算できたときに得る。 本質的にマイナーは、自身のコインの保有量に比例して署名する機会を得られる。 そして、各ブロックに対して平均64の署名が割り当てられる。
  3. ブロックK + 2000の時点では、ブロックKからの権利を有するマイナーがブロックに署名する機会を有する。
    署名の数は、すべてチェーンの長さの合計によって決まる。
    署名は署名者がProof of Workによる報酬よりも実質的に大きい報酬を保証し、
    この報酬はブロックK + 3000に達したときに支払われる。
  4. もし、K+2000番目の2つの枝分かれしたブロック両方にAの署名が発見されたとする。
    発見者はそれら2つの署名を含むトランザクションを公開することができ、
    そのトランザクションがブロックK+3000の前に含まれてる場合、
    その署名に対する報酬を棄却し、不正を指摘したユーザーに報酬の33%を送信する。

このやり方のかぎは、署名する権利をどのように配分するかである。
署名する権利が前のブロックのランダム性に基づいているのではなく、
署名特権は2千ブロック前のブロックに基づい点がポイントである。
これによって、フォークが起こったときにマイナーが2つのチェーンから
報酬を得ようとする、PPCoinでは可能であるデュアルマイニング攻撃を完全に排除することができる。
それを確認できるもう一つの理由を説明する。
Slasherは現在のブロックの代わりに2000個まえのブロックを利用する。
フォークしたチェーンは確実に2000個のブロックを維持し続けることがほとんどできなくなる。
本当に何かを積み上げてるかのように、マイナーは通貨を得るために1つのチェーンを伸ばし続ける。
ブロック報酬損失のペナルティによって、マイナーが各ブロック番号で1つのチェーンのみに署名することを保証する。
100個前の乱数を使うアイデアは、公平なギャンブルプロトコルから得た。
そのアイデアは強力なマイナーが多くのブロックを作り続け、
ただ一つのチェーンだけに証明する以外に方法がないことである。
なぜなら、マイナーはステークホルダーを決定するために使用された他のランダムデータの値を知らないからだ。
このシステムはProof of Workをブロックの間に少しだけ用いるので純粋なProof-of-stakeではない。
しかし、51%攻撃は本質的には問題とならない。
なぜなら、Proof of Stakeではチェーンが勝利するための条件が
ブロックに署名することだからだ。
もっというと、エネルギー消費量はproof of workの95%から99%まで減少する、
これはproof of workの環境問題への懸念を解決した。

  • このエントリーをはてなブックマークに追加