ITの教科書検索

ブロックチェーンとは:記録をハッシュでつなぎ、参加者で持ち合う台帳

Bitcoinなどの暗号資産は、銀行のような管理者を置かずに、誰が誰にいくら渡したかを記録しています。その記録に使う台帳がブロックチェーンです。取引などの記録をブロックという単位にまとめ、鎖のようにつなぎます。多くの参加者が、同じ写しを持ち合います。

管理者がいなくても記録を信用できる理由の1つは、書き換えるとすぐに食い違いが出ることです。各ブロックが、1つ前のブロックのハッシュ値を持っているからです。ハッシュ値はデータから計算した決まった長さの値で、データが変わると値も変わります。また、取引には、渡す側が公開鍵暗号のデジタル署名を付けます。

報告書IR 8202は、アメリカの国立標準技術研究所(NIST)がまとめたものです。この報告書によると、ブロックチェーンは、データを中央の1か所に保管しない台帳です。多くの場合、銀行や企業のような中央の管理者もいません。改ざんが見つけやすく、改ざんしにくい点が特徴です。

2008年にSatoshi Nakamotoの名で公開された論文は、この仕組みを電子的な現金の記録に使う方法を示しました。2009年に、この論文にもとづくBitcoinのネットワークが動き始めました。NIST IR 8202によると、暗号資産以外のさまざまな分野でも使い道が調べられています。

P2Pのネットワークで台帳を持ち合う

ブロックチェーンの参加者は、中央のサーバを通さずに、参加者どうしで直接やり取りします。この形をP2Pと呼びます。NIST IR 8202も、ブロックチェーンのネットワークはP2Pで動くとしています。

Bitcoinの論文によると、新しい取引はすべての参加者へ送られます。次のブロックを作った参加者も、そのブロックをすべての参加者へ送ります。こうして、各参加者の手元の台帳が同じ内容にそろっていきます。

台帳を丸ごと持つ参加者が新しく加わると、ほかの参加者を見つけて、台帳の写しをすべて受け取ります。写しが多くの場所にあるため、台帳はなくなりにくくなります。NIST IR 8202によると、参加者が世界の各地に散らばっていれば、どの参加者が抜けても台帳は失われません。ある地域の参加者がまとめて抜けても同じです。

ブロックの中身と、ハッシュでつながる仕組み

NIST IR 8202によると、ブロックはヘッダとデータの2つの部分からできています。データの部分には、取引の一覧が入ります。ヘッダには、ブロックの番号や作られた時刻のほか、1つ前のブロックのヘッダのハッシュ値が入ります。

ブロック1前のハッシュ000000…データ農場→倉庫 20箱ハッシュ値d2307e…ブロック2前のハッシュd2307e…データ倉庫→店 20箱ハッシュ値8c9a5b…ブロック3前のハッシュ8c9a5b…データ店で入荷 20箱ハッシュ値5d669d…写す写すブロック1前のハッシュ000000…データ農場→倉庫 20箱ハッシュ値d2307e…ブロック2前のハッシュd2307e…データ倉庫→店 20箱ハッシュ値8c9a5b…ブロック3前のハッシュ8c9a5b…データ店で入荷 20箱ハッシュ値5d669d…写す写す
どのブロックも、1つ前のブロックのハッシュ値を「前のハッシュ」の欄に持ちます。最初のブロックには前が無いので、この欄を0で埋めています。

最初のブロックには前のブロックが無いので、前のハッシュの欄は通常すべて0にします。2つ目からのブロックは、1つ前のブロックのハッシュ値を写して持ちます。この値を順にたどると、最後のブロックから最初のブロックまでが1本の鎖でつながります。

ブロックに入る取引には、資産を渡す側がデジタル署名を付けます。ほかの参加者は、渡す側の公開鍵で署名を検証し、本人が出した取引かを確かめます。署名を作れるのは、秘密鍵を持つ本人だけです。詳しくはMACとデジタル署名の違いの記事で説明しています。不正な取引を含むブロックは、ほかの参加者が受け入れません。

改ざんが見つかる理由:後ろのブロックと合わなくなる

ブロック1の「20箱」を「25箱」に書き換えたとします。ハッシュ関数は、入力が1文字でも変わると、まったく違うハッシュ値を返します。ブロック2の「前のハッシュ」の欄は元の値のままなので、ブロック1の新しいハッシュ値と合わなくなります。

書き換えを隠すには、ブロック2の「前のハッシュ」の欄も書き直す必要があります。するとブロック2のハッシュ値が変わり、今度はブロック3と合わなくなります。NIST IR 8202も、前のブロックを変えると後ろのブロックもすべて違うハッシュ値になると説明しています。

最後まで書き直しても、それで終わりではありません。同じ台帳は、ほかの多くの参加者も持っています。自分の台帳だけを書き直しても、ほかの参加者の台帳と食い違います。さらに、後で説明するPoWでは、ブロックごとに重い計算をやり直す必要もあります。

このため、ブロックチェーンの記録は書き換えが見つけやすく、書き換えにくくなっています。ただし、NIST IR 8202は、完全に変えられないわけではないとしています。どんなときに書き換えが通るかは、51%攻撃の節で説明します。

動かして確かめる:途中のブロックを書き換える

次の図は、3つのブロックのハッシュ値をブラウザの中で実際に計算しています。使うハッシュ関数はSHA-256です。データの欄を書き換えるか、ボタンでブロック1を書き換えて、どの欄が合わなくなるかを確かめます。

  1. ブロック1
    前のハッシュ
    0000000000000000000000000000000000000000000000000000000000000000
    最初のブロックなので0で埋める
    このブロックのハッシュ値
    d2307eb5961d71fe80ec22a11cfd921d96f774cff3d76c69828a50123a62ffeb
  2. ブロック2
    前のハッシュ
    d2307eb5961d71fe80ec22a11cfd921d96f774cff3d76c69828a50123a62ffeb
    ブロック1のハッシュ値と一致
    このブロックのハッシュ値
    8c9a5bd8ec805aeb77dcb4ffb33c4fffe0a484067382a4fc29f4ab2f8a154a89
  3. ブロック3
    前のハッシュ
    8c9a5bd8ec805aeb77dcb4ffb33c4fffe0a484067382a4fc29f4ab2f8a154a89
    ブロック2のハッシュ値と一致
    このブロックのハッシュ値
    5d669dc91508b9100030092d52bd366b522eee2011d82c268ff9082446158ccc
書き換えはありません。どのブロックも、前のハッシュが1つ前のブロックのハッシュ値と一致しています。
データの欄は自由に書き換えられます。この図のハッシュ値は、ブロック番号・前のハッシュ・データを改行でつないだ文字列から計算したSHA-256です。

ブロック1を書き換えると、ブロック2の前のハッシュの欄が赤く光ります。前のハッシュを書き直すボタンを押すたびに、合わない欄が1つ後ろへ移ります。全部を合わせ終えると、ブロック1から後ろのハッシュ値がすべて元の記録と違う値になります。

管理者を置かずに合意する:PoWとPoS

管理者がいないので、次のブロックを誰が追加するかを、参加者どうしの決まりで決めます。この決まりをコンセンサスアルゴリズムと呼びます。NIST IR 8202によると、正しい鎖が2つ示されたときは、長い方を正しいものとして採用する場合が多いです。

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

PoWでは、計算に手間のかかるパズルを最初に解いた参加者が、次のブロックを追加します。よく使われるパズルでは、ヘッダのハッシュ値が目標の値より小さくなる数を探します。この数をナンスと呼び、値を変えながら探します。正しい答えは、何度も計算しないと見つかりません。一方、答えが合っているかは1回のハッシュ計算で確かめられます。

Bitcoinは、2016ブロックごとにパズルの難しさを調整します。こうして、ブロックの追加がおよそ10分に1回になるようにしています。ブロックを書き換えるには、そのブロックと後ろのすべてのブロックで、この計算をやり直すことになります。一方で、PoWは計算のために多くの電力を使います。

マイニング

PoWのパズルを解く作業を、マイニングと呼びます。NIST IR 8202の用語集も、マイニングをPoWのパズルを解く行為と定義しています。Bitcoinでは、新しいブロックを追加する参加者をマイナーと呼びます。

Bitcoinでは、ブロックの最初の取引で新しいコインが生まれます。このコインは、そのブロックを作った参加者のものになります。この取引は、ネットワークを支える参加者への報酬です。論文はこの参加者を、資源を使って金を掘り出す採掘者になぞらえています。使う資源は、CPUの時間と電力です。

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

PoSでは、参加者が仕組みに預けた暗号資産の量に応じて、次のブロックを追加する役を選びます。預けた量が全体に占める割合が大きい参加者ほど、選ばれやすくなります。PoWのような、時間と電力を使う重い計算はいりません。

51%攻撃:書き換えが通ってしまう条件

51%攻撃は、ブロックを作るための資源の過半を攻撃者が持ち、記録を置き換える攻撃です。攻撃者は、ほかの参加者全体より速くブロックを作れるので、自分に都合のよい別の鎖を長く伸ばせます。長い鎖を採用する決まりなので、攻撃者の鎖が正しいものとして扱われます。

ここでいう資源は、PoWなら計算能力、PoSなら預けた資金です。NIST IR 8202によると、大きなネットワークでは、この攻撃の費用は非常に高くなります。遡って書き換えるブロックが多いほど、費用も増えます。

最後の方のブロックは、別の長い鎖に置き換わることがあります。そのため、利用者は後ろにいくつかのブロックが続くのを待ち、それから取引を確かなものとみなします。

パブリック・プライベート・コンソーシアム型の違い

ブロックチェーンは、誰がブロックを追加できるかで分けられます。NIST IR 8202は、これを2つの型に分けています。許可が要らず誰でも追加できる型と、許可された参加者だけが追加できる型です。

日本語の解説では、前者をパブリック型と呼ぶことが多いです。後者は、運用する組織が1つならプライベート型、複数ならコンソーシアム型と呼び分けることが多いです。ただし、呼び方は資料によって分かれます。

型ブロックを追加できる人読める人合意のしかた
パブリック型誰でも追加できる誰でも読めるPoW・PoSなど、資源を使わせて不正を防ぐ
プライベート型1つの組織が許可した参加者だけ組織が決めた範囲参加者の身元が分かるので、速く軽いことが多い
コンソーシアム型複数の組織が許可した参加者だけ組織どうしで決めた範囲参加者の身元が分かるので、速く軽いことが多い

パブリック型は誰でも参加できるので、悪意のある参加者が混じる前提で作ります。PoWやPoSは、ブロックの追加に計算や資金を使わせます。こうして、悪意のある参加者が簡単に記録を乗っ取れないようにしています。

プライベート型とコンソーシアム型では、参加者の身元が分かり、不正をすれば参加の許可を外せます。このため、合意のしかたは速く、計算も軽いことが多くなります。一方で、許可を出す組織を信頼する必要があります。その組織は、正当な手順でブロックを置き換えることもできます。

使い道と弱点:トレーサビリティとスマートコントラクト

トレーサビリティの確保

トレーサビリティとは、物や資産がどこを通ったかを後からたどれることです。ブロックチェーンには、記録が時刻の順につながり、過去の記録を書き換えると見つかる性質があります。このため、産地から店までの出荷の記録のように、複数の会社にまたがる流れの記録に使えます。

スマートコントラクト

スマートコントラクトは、ブロックチェーンの上に置いたプログラムとデータのまとまりです。参加者のノードがこのプログラムを実行します。どのノードも同じ結果を出したうえで、結果をブロックチェーンに記録します。条件を満たしたら、決めておいた処理を自動で進められます。

スマートコントラクトは、1994年にNick Szaboが定義した語です。Szaboは、信頼できる仲介者が要る場面を減らすことを、目的の1つに挙げています。NIST IR 8202は、すべてのブロックチェーンでスマートコントラクトを動かせるわけではないとしています。

弱点

  • 記録を消せない:できる操作は作成と読み取りだけなので、誤った記録も残ります。直すときは、訂正する取引を後から足します。
  • 処理が遅い:パブリック型の多くは、ブロックの追加に時間がかかります。そのため、取引の処理が他の仕組みより遅くなります。
  • 入力の正しさは保証しない:外から入れたデータが偽物かどうかを、ブロックチェーンの仕組みだけで確かめるのは難しいです。
  • プログラムの欠陥:2016年には、スマートコントラクトの欠陥を突かれる事件が起きました。

分散して記録を持ち合う点は、分散データベースの複製と似ています。違いは、どの記録が正しいかの決め方です。パブリック型なら、互いを信頼しない参加者どうしでも、合意の決まりで決められます。

ブロックチェーンとデータベースの違い

ブロックチェーンとデータベースの違いの1つは、記録の直し方です。データベースでは、問い合わせと更新の命令で、データそのものを書き換えられます。ブロックチェーンでは過去の取引を上書きせず、記録は後ろに足していくだけです。

NIST IR 8202によると、アプリケーションの側は、後から足した取引を前の取引の更新として扱います。今の値を変えたいときも、元の取引は残したまま、変更を表す取引を足します。このため、すべての履歴が台帳に残ります。

台帳を誰が持つかも違います。NIST IR 8202によると、従来の台帳は信頼される第三者が持ちます。その第三者が運用するデータベースに置くことが多いです。その場合、利用者は、持ち主が過去の取引を書き換えていないと信じるしかありません。

比べる点中央で管理するデータベースブロックチェーン
記録を直すときデータそのものを書き換える訂正の取引を後ろに足す
過去の記録更新すると上書きされるすべての履歴が残る
台帳を持つ人中央の管理者が持つことが多い参加者がそれぞれ写しを持つ
書き換えの見つけ方持ち主を信じるしかないハッシュと署名で見つけられる

練習問題(全5問)

Q1ブロックチェーンで、各ブロックが1つ前のブロックとつながっている仕組みとして正しいものは?
Q2途中のブロックのデータだけを書き換えたとき、最初に起きることは?
Q3PoW(プルーフ・オブ・ワーク)の説明として正しいものは?
Q451%攻撃の説明として正しいものは?
Q5スマートコントラクトの説明として正しいものは?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

参考にした資料

関連記事

おすすめの本 PR

セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

目的別の本の選び方を見る

セキュリティの記事を続けて読む

セキュリティ 全37本中18本目