Techhack for life

テクノロジー関連で学んだことを書いていきます。

Kaleidoプラットフォームとは

Kaleido

"Kaleido"はビジネス領域での使用を可能にした、SaaSプラットフォームです。
どれも、Ethereumブロックチェーンをビジネスユースに特化するように修正したものです。 その中で、今回は各コンセンサスアルゴリズムの特徴をまとめました。

f:id:hmt-fukuda:20180914194426j:plain

コンセンサスアルゴリズムについて

Kaleidoでは、2種類のノードと2種類のアルゴリズムを利用できます。

ノード

  1. Geth
  2. Quarum

コンセンサスアルゴリズム

  1. IBFT
  2. RAFT
  3. PoA

背景

Geth

Kaleidoプラットフォームで用いているGethはCliqueと呼ばれるPoAを用いています。
Cliqueは、Ethereumのテストネットにも使われており、RinkebyがGeth実装のClique、KovanがParity実装のCliqueになっています。

Quorum

Quorumは、プライベート・コンソーシアムのブロックチェーンの用途のためにデザインされました。 Quorumの主な特徴は以下のようになっています。

  • 参加するメンバーは、特定のノードにのみプライベートなトランザクションを送信できます。
  • 許可モードで起動でき、許可されたノードのみネットワークに参加できるように設定できます。
  • Quorumは、RaftとIBFTという2種類のコンセンサスアルゴリズムをサポートします。これらはトランザクションのファイナリティとPoWより短いブロック生成間隔を提供します。

Clique(Proof-of-Authority)

Cliqueは、"Authorities"という信頼されたノードに依存します。

特徴1:パフォーマンス

PBFTのメッセージ交換が3ラウンドで行われるのに対して、PoAは1ラウンドで行われます。
そのため、PoAはPBFTに比べてパフォーマンスが良い点が特徴です。

PoAネットワークは、N/2+1以上のノードが正直であれば正常に機能します。
PBFTに比べて、可用性(速いブロック生成間隔)を向上させるために一貫性(フォークは起きる)を犠牲にしています。
ただ、フォークが起きたとしても、GHOSTプロトコルの機能によって1つのチェーンに収束します。
PoAはブロック生成間隔を変更可能で、Kaleidoは5秒に設定しています。

Cliqueが適した条件

PoAは、お互いに信頼していない集まりを含んだネットワークでは有効な選択肢となります。
このアルゴリズムを用いた場合、4つより多い"Validator"でネットワークが構成されると、フォークが起こる可能性があります。
6ノードがネットワークに存在した場合、2つのAuthorityまでがブロックを提案できます。
公式:N-(N/2+1)

特徴2:署名方法

もう一つのCliqueの特徴は、各ブロックは1つのproposerの署名のみ含まれる点です。
PBFTでは、大多数のValidatorの署名が各ブロックに含まれます。
そのため、データの不変性の保証はPBFTに比べて強くありません。

ただし、各ProposerはN/2+1ブロックに一度だけ署名することを許されます。
そのため、1つのチェーン内においては、強力な保証を提供します。
ブロックチェーン自体に強力な改ざん耐性があるため、攻撃者がブロックを攻撃するためには、ほぼ全てのAuthorityノードを説得しなければなりません。

Istanbul Byzantine Fault Tolerance(IBFT)

Quorumは、ビザンチンフォールトトレラントアルゴリズムを採用しています。
これは相互に信頼していないノードが、いかなる場合でも大多数のノードが正しいと思うネットワークを形成します。
これは多くの現実世界のシナリオに対するQuorumの利用範囲の拡大に重大な影響を及ぼします。

RAFT vs IBFT

  • RAFT
    • フォロワーはリーダーを盲目的に信じる必要があります
  • IBFT
    • 各ブロックを作成する際に、相互に合意するためには、複数回数に渡ってバリデーターのセットによる投票を行う必要があります。そして、その署名のまとまりをブロックに記録します。
    • 各バリデーターは、"リーダー"や"ブロック提案者"を正しい あるいは 正直であるとは思いません。
    • その代わり、PoWなど、お互いに信頼のない環境で動作する他のコンセンサスアルゴリズムのように、提案されたブロックを検証します。

IBFTによる不正の防止

IBFTは、ノードが不誠実で、特定のパーティにのみ利益がいくような不正なブロックを提案しようとする場合でも稼働し続けるように設計されています。
IBFTは、3f+1のノードの内fまでのノードが不誠実でも問題ありません。
シンプルにいうと、1/3までは耐えることができます。
これは"大多数のルール"アルゴリズムと呼びます。

IBFTが適した条件

IBFTを考える際、ノードの特性を理解しておくことは重要です。 以下の条件の場合、IBFTが適しています。

  • もっとも激しい競合のように、不正を常にする可能性のあるグループに所属している場合
  • 理想的でないセキュリティ環境に設置されていて、妥協の影響を受けやすい状態の場合

IBFTのブロック生成間隔

IBFTでは、トランザクションの数に関係なく、一定の間隔でブロックが作成されます。
Kileidoにおいては、10秒に1回作成されます。

改ざん耐性

IBFTでは、プロポーザーと投票するバリデーターの署名コレクションにより強く保護されています。
ブロックを書き換えるためには、全てのプロポーザーとバリデータのプライベートキーが必要です。
パリデーターの数はブロック生成の都度変動します。新しいバリデーターを追加する場合、参加しているバリデーターを追放する場合は、どちらも2/3以上のバリデーターの承認が必要です。

RAFT

RAFTは、Crash Fault Tolerant(CFT)コンセンサスエンジンを提供するた目に、"etcd"内にRAFTを実装しています。
RAFTはスタンフォード大学の研究者たちによって開発された、よく知られたコンセンサスアルゴリズムです。

CFTとBFTの違い

CFTコンセンサスではBFTと異なり、リーダーノードは常に正であると仮定されます。
その他のノードはリーダーが提案したブロックをただ複製することしかできません。 もしリーダーのノードが故障しオフラインになったら、一定期間後に自動的に別のノードが選ばれ、リーダーノードになります。
以前のリーダーノードがオンラインになり復活したら、これはただのフォロワーとして振る舞います。

RAFTのブロック改ざん耐性

RAFTはPoWでのユニークハッシュや、BFTの署名群などによって守られていません。
よって、簡単に書き換えが可能です。
他のデータ保護の手段を考える必要があります。

RAFTの効率

ペンディングトランザクションがない限り、ブロックを作成しません。
トランザクションが含まれないブロックを作詞しないことで、ストレージの大幅な節約になります。

RAFTのブロック生成間隔

RAFTのブロック生成間隔はIBFTより高速です。
トランザクションを受け取ってから50ms以内にブロックを作成します。この期間は設定によります。
そのブロックをRAFTクラスターに流し、大多数の承認を得ます。
平均ブロック生成時間は一般的に1秒以内です。

まとめ

Ethereumのプラットフォームをビジネスユースに適用したKaleidoプラットフォームをご紹介しました。
今後は、パブリックなブロックチェーンだけでなく、プライベート・コンソーシアム領域に特化したブロックチェーンもより注目されていくと思います。
群雄割拠のこの業界、どのブロックチェーンが台頭してくるか、とても楽しみです。

参考資料

Kaleidoプラットフォームのウェブサイト
Kaleido コンセンサスアルゴリズムについて