• トップ
  • ブログ一覧
  • ブロックチェーンとコンセンサスアルゴリズム
  • ブロックチェーンとコンセンサスアルゴリズム

    メディアチームメディアチーム
    2019.06.10

    IT技術

    そもそもブロックチェーンとは?

    ブロックチェーンとはなんでしょう?

    データベースを開発している人であれば「トランザクション」については知っているかと思います。

    トランザクションを記録するための分散元帳

    ブロックチェーンとは、トランザクションを記録するための分散元帳のことです。

    この元帳は、サーバーを必要としないP2Pによって記録されています。

    P2Pに参加するすべてのノード(コンピュータ)は、ブロックチェーンに新たに追加されるトランザクションを検証して、コンセンサス(合意)プロトコルによって「確実だと思われる」トランザクションを新たなブロックとして追加します。

    コンセンサスプロトコル

    そこで1つの疑問。

    「確実だと思われる」とはどういうことでしょうか?

    そのような表現で書かれると、「ブロックチェーンって信用できないんじゃない?」って思いますよね。

    そうなのです。

    合意を確実にするアルゴリズムは存在しません。

    「合意が分かっている範囲」で確実になるような仕組み(プロトコル)があるだけです。

    だから、コンセンサスプロトコルは、「できるだけ確実」になるようなプロトコルが提案されています。

    例えば

    あなたは、とあるSNSのグループに参加しているとしましょう。

    このSNSグループにあなたが勧誘されるまでには、こんなプロセスを辿ります。

    1. あなたが信用できる人かどうかをグループ内で話し合う
    2. あなたなら信用できるとみんなで合意
    3. あなたを勧誘する

    そのグループでは、「必ず儲かるビジネス」について話し合いが行われていて、あなたはそれを外部に話してはいけません。

    でも、あなたが外部に話すことで、あなたは「巨万の富」を得ることができるとします。

    その場合、あなたはどうしますか?

    グループを裏切りますか?

    裏切り者が出ない仕組み作りが必要

    世の中には、人を裏切ったほうが「自分の得」になるといった状況は、実はたくさんありますよね。

    そうなると、「あなたが裏切らないように何とかグループに留まってもらうための仕組み」が必要になります。

    コンセンサスプロトコルとは、ここであなたが裏切らないように何とかグループに留まってもらうための仕組みなのです。

    コンセンサスプロトコルは大きく分けて二種類ある

    コンセンサスプロトコルは、大きく分けて二種類あります。

    ひとつはProofofWork(PoW)で、もうひとつは、ProofofStake(PoS)です。

    さきほどのSNSのグループを例にします。

    PoW(プルーフ・オブ・ワーク)

    グループ内で「一番たくさん作業した人」に「ご褒美をあげる」という仕組みで裏切り者が出にくくします。

    仮想通貨でいうと「Bitcoin(ビットコイン)」等で利用。

    PoS(プルーフ・オブ・ステーク)

    グループ内で「作業の依頼を快く答える人」に「ご褒美がたくさんもらえる」という仕組みで裏切り者を出しにくくしています。

    仮想通貨でいうと「Ethereum(イーサリアム)」等で利用。

    ビザンチン将軍問題とは?

    よくブロックチェーンは、「ビザンチン将軍問題」と関連付けられて出てきます。

    しかし、ビザンチン将軍問題とブロックチェーンは本質的には関係していません。

    どのように関係していないのかを説明する前に、「ビザンチン将軍問題」について一度解説しておきたいと思います。

    敵を倒すには、9つの部隊の結束が必要

    ビザンチン帝国軍の9名の将軍が、あるとき別の都市を攻め落とすために、それぞれ部隊を率いて包囲していました。

    各将軍に属する9つの部隊はそれぞれ離れて包囲網を敷いています。

    相手を攻め落とすには戦況が拮抗しており、9つの部隊全てが協力する必要があります。

    つまり全軍に一⻫に攻撃するのか、一度全軍で撤退するかを合意して決めなければなりません。

    「攻撃」か「撤退」かを多数決で決める

    9名の将軍は、多数決でこれを決めることにしました。

    SNSなどありませんから、離れた場所で意思疎通をするには、伝令を飛ばす必要があります。

    そこで各部隊の将軍は部下の伝令を他の部隊へ送り、攻撃か撤退かの自軍の意思表示を伝えることになりました。

    将軍は全部で9名と奇数なため、皆が正しく多数決に参加すれば全軍の意思統一が多数決により決まることになります。

    実は1人の将軍が悪意を持っていた

    しかし、最後に投票する将軍が、実はビザンチン帝国に以前から恨みをもっていた将軍でした。

    その将軍は自分が投票する前の他の将軍の投票結果が、ちょうど攻撃4票、撤退4票と半分ずつに分かれたことを伝令から聞きました。

    将軍は、またとないこのチャンスを利用して、なんとかビザンチン帝国軍を敗北するようにしようという企みを思いつきました。

    1人の悪意によりビザンチン軍は敗北

    将軍は、撤退意思のある4人の将軍には撤退を伝え、攻撃意思のある残りの4人の将軍には攻撃を伝えました。

    そのため、攻撃を信じた4人の将軍が自分の軍を動かしても、戦力が拮抗しているため人数に欠けるビザンチン軍は敗北してしまいます。

    分散システムのコンセンサス

    ネットワークでのビザンチン将軍問題は、1980年、分散システムの研究者であるランポート氏らが提唱した問題です。

    ブロックチェーンも、ビザンチン将軍問題と同様、全体を監視して皆の意思統一をはかることができません。

    誰か嘘の情報を伝達する裏切り者がいると全体で正しく合意できません。

    ネットワーク上のビザンチン将軍問題

    これを喩えて、「複数の平等なノードによって作られたグループで意思決定をしようとしたときに、ある参加者が裏切り不正行為をしたりエラーを引き起こしたとしても、正しく合意できるのか?」という問いかけのことをいうようになりました。

    ブロックチェーンのビザンチン問題は、ビザンチン帝国の将軍が9名であったように、参加者であるノードの総数をあらかじめ特定することができません。

    ここが本質的にブロックチェーンとビザンチン将軍問題の違うところです。

    そこで、先ほど述べたようなPoWやPoSが近似解として使われるのです。

    こちらの記事もオススメ!

    featureImg2020.08.14ブロックチェーン特集知識編ブロックチェーンとコンセンサスアルゴリズム実装編【Blockchain Data Managerを使ってみたEt...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background