Hyperledger SawtoothのコンセンサスアルゴリズムPoETをお勉強
みなさん初詣の願いごとは「Netflixが水曜どうでしょうクラシックのアーカイブを増やしてくれますように」でいきましょう
なんの話
- Hyperledger SawtoothのコンセンサスアルゴリズムPoETの概要
内容
IBMとIntelとの間でHyperledger内での主導権争いが!という記事が出ていました。
- 日本語:ブロックチェーン業界での競争|IBMとIntelが主導権求める
- その元ネタっぽい英語(こっちのほうが詳しい):IBM and Intel's Blockchain Tug of War - CoinDesk
まあ記事についてはそうですか、、、仲良くしようぜ、、、という感じなんですが、Hyperledgerの中でFabricに次いで勢いのあるプロジェクトであるっぽいSawtoothが気になってきたのでちょっとお勉強してみています。
Hyperledger Sawtoothとは
Hyperledger Sawtoothの概要について、日本語で読めるものではこちら↓のエントリの前半部分がとてもよくまとまっています。
なお、
ちなみに「Sawtooth」は「ノコギリ」ですが、何故このネーミングになったのかについては調べてもよく分かりませんでした。
この点については、もともとIntelからHyperledgerに移管された段階ではSawtooth Lakeという名前だったはずがいつの間にかSawtoothになっていたという経緯があります。これはおそらくは正式プロジェクトに昇格するにあたってHyperledger Hogehogeというネーミングに合わせる必要があったからでしょう。じゃあなんでもともとSawtooth Lakeだったのか?というのはググったけどわからない、気になる
PoET(Proof of Elapsed Time)とは
Sawtoothの特徴といえばやはりその独自のコンセンサスアルゴリズムPoET(Proof of Elapsed Time)です。公式によればこれはNakamoto-Style Consensusの一種であり、Proof of Workにおけるマイニングによる作業証明の代わりに、その名が示すところの通り消費した時間の証明が採用されています。
Voting vs Lottery
PBFTやRAFTなどに代表される参加ノードによるVoting(投票)によりコンセンサスを形成するアルゴリズム*1に対して、PoWやPoSなどはコンセンサスの中になんらかのかたちで確率によるランダム性が持ち込まれているという意味でLottery(抽選)によるコンセンサスアルゴリズムと呼ばれます。
このLottery系のアルゴリズムが互いに完全には信頼していない複数の組織の所持するノードのなかでコンセンサスを取ることに用いられる場合に備えているべき要素として以下が挙げられています*2。
- 公正:リーダーの選出が参加者の間で分散されているべきである
- 投資:リーダー選出のプロセスにかかるコストと、そこから得られる価値が釣り合っているべきである
- 検証:正しく選出されたリーダーかどうかの検証が参加者によって比較的容易に行えるべきである
PoETの概要
- ブロックの承認にあたり、各参加者ノードはランダムな待機時間を生成する
- 待機時間が完了したノードはブロックを承認することができ、待機時間が完了したという証明とともにネットワークにブロードキャストする
- ブロックを受け取った他のノードは待機時間完了証明を検証したうえで、ブロックをチェーンに加える
ということで、PoWにおいてはマイニングしなければならない代わりにPoETでは待機するだけでよいということになっています。また、タイミングによってブロックチェーンがforkする場合があり、確率的なfinalityということになります。
PoETにおける正統性の担保
ここでポイントとなるのは、以下をどのように担保するかです。
- 各ノードが生成する待機時間が正統にランダムなものか(不正に短い待機時間を生成していないか)を検証可能である
- 各ノードは生成した待機時間を本当に完了しているか(待機時間を完了したと偽っていないか)を検証可能である
PoWでは確率でしか解けず、しかし容易に検証可能であるハッシュアルゴリズムによるNonceの発見という問題を持ち込むことでこうした正統性にかかわるポイントをクリアしていましたが、PoETではIntel SGX内での信頼されたコード実行により待機時間の生成、待機時間完了証明の生成、およびその検証を行わせることにより、不正が起きないようにしています。
Intel SGX
Intel SGX(Software Guard Extensions)はIntelにより製造されるCPUに設けられた機能です。
Software Guard Extensions - Wikipedia
SGXを用いることにより、ユーザーコードをEnclaveと呼ばれる保護されたメモリ空間で実行することができます。さらに、あるコードがこの保護されたメモリ空間で適切に構成され、実行されていることの証明書を作成することができます。この証明書を必須とすることによって、PoETでの上述の処理は不正なく実行されるということになっています。
補足&感想
- Voting系のコンセンサスは結局のところn/m数決的なやり方である以上、投票権のあるノードが際限なく増やせる状態では機能しない(悪意の参加者がめちゃめちゃノード立てて多数派になれると困るから)のでPermissionedのブロックチェーンでしか使えないです。が、PoETはLottery系なのでPermission-lessでも使えるかも、ただコスト-インセンティブ設計を追加しないとworkしないのでいまはムリ、コンソーシアム利用してね、と公式は言っています
- SGXは非常に危険な脆弱性が複数問題になったのがまだ記憶に新しいですね、PoETの利用範囲では大丈夫なのかはわからない
お勉強リソース
- 公式ドキュメント:Overview — Sawtooth v1.1.2 documentation
- gitHub:GitHub - hyperledger/sawtooth-core: Core repository for Sawtooth Distributed Ledger
- JIRA:Hyperledger Sawtooth - Hyperledger JIRA
*1:FabricのEndorsement、Ordering、ValidationもVotingの一種です
*2:https://sawtooth.hyperledger.org/docs/core/nightly/0-8/introduction.html#proof-of-elapsed-time-poet