【10分で知る】ビットコイン:最低限知っておくべき3つの仕組み
こんにちは、ハラヒデです!
ビットコインなどの暗号資産の高騰で、新たにブロックチェーンに興味を持った方も多いかと思います。そこで最低限知っておくべきビットコインの仕組みを、全く用語がわからない方でも理解できるようにまとめました。
Twitterでも書いてみたのですが、私の能力が足りず140文字では限界を感じたのでnoteの方にまとめます。
今回の記事は仕組み側にフォーカスしてまとめているので、誕生の経緯、事例、詳しい特徴等は省きます。分かりやすく表現するために簡略化するため、細かい所はスルーして頂けると幸いです。
ココがわからない、もっと詳しく知りたい、などあれば、Twitter(@harahidey) にご連絡ください。
(ついでにフォローいただけると嬉しいです!)
ブロックチェーンで出来ること
ブロックチェーンはビットコインをデジタル上の通貨として成立させるために考案された技術です。
色々なところで言及されてますが、わたし的に超簡単に表現する下記のようになります。
「デジタル上の不正(コピーや改ざん)を難しくし、取引の詳細な履歴を記録に残すことが可能な技術」で、「コピーできない有限資産」を取り扱う上で役立ちます。
ビットコインはどうやって不正(コピーや改ざん)を難しくしているのか
まずは全体像から見ていきましょう。
【Step:1】データのやり取り
【Step:2】データのやり取りをブロックに格納してチェーン状につなぐ
【Step:3】ひとつなぎになったデータを、全員で共有し、みんなで管理する
この3つの流れで「デジタル上の不正(コピーや改ざん)を難しくする仕組み」が出来上がります。
【STEP:1】 データのやり取り
ーートランザクションとアドレスーー
ビットコインでいうデータのやり取りの多くは「取引データ」を扱っていることが多いです。
取引データとは、
AさんからBさんへ、1000円送金する
CさんからAさんへ、3500円送金する
XさんからYさんへ、1.5BTC送金する
というようなやり取りのことです。(BTCはビットコインの単位)
この取引のことを”トランザクション”と呼び、”TX”と略して表現されることがあります。
ビットコインの取引は、全世界に公開されており、こちらのサイトで実際に見ることができます。ちなみに、こちらのbitflyerさんの方はビジュアル化されていて、見ていて楽しいかと思います。
もう少し詳しく見てみましょう。
取引データの中には、何やら良くわからない文字の羅列が書いてあります。
あの文字の羅列は”アドレス”と呼ばれ、銀行の口座番号のようなものと思ってください。そして、そのアドレスをまとめて管理するものをウォレットと言います。
アドレスの生成過程では、
▶ 本人であることの証明
▶ セキュリティの担保
を実現するために、暗号を利用しています。
ーー公開鍵暗号と電子署名ーー
ビットコインの送金時「これは自分のデータで間違いありません」という証明のため、電子上で署名を行います。この署名を行わない限りは、送金が出来ない仕組みになっています。
この電子署名は、公開鍵暗号という暗号方式よって行われ、ビットコインのアドレスもこの公開鍵暗号を利用して作られます。
公開鍵暗号は、「秘密鍵」と「公開鍵」のペアで成り立っており、公開鍵に特殊な関数を通すことでアドレスを作っています。
秘密鍵は、暗証番号のようなもので、もし他人に知られてしまうと、自身のコインを自由に送金されてしまう可能性が出てくるので、絶対に他人に知られないようにしましょう。
ーーハッシュ関数ーー
先ほど、公開鍵からアドレスをつくるのに、関数を通す、とありましたがこの関数のことをハッシュ関数と呼びます。
ハッシュ関数は大きく3つの特徴を備えています。
▶関数を通したあとのデータからは、もとのデータが何か分からない。
▶どんなデータをハッシュ化しても、同じ長さのハッシュ値になる。
▶同じデータを何度ハッシュ化しても、常に同じハッシュ値になる。
このハッシュ関数は非常に重要ですので、是非とも特徴を抑えておいてください。
下記のサイトでハッシュ化の動きが確認できます。
https://tool-taro.com/hash/
【STEP:2】 データ構造
ーーブロックチェーンの構造ーー
ブロックチェーンのデータは、下の図のように、各ブロックがチェーン状に連なっている状態が特徴的です。 お察しの通り、この形こそがブロックチェーンの名前の由来になっています。
各ブロックには順番が決められており、データが増えていくに従って、ブロックも新たに追加されていきます。
ちなみに一番最初のブロックのことを”ジェネシスブロック”と呼びます。
※余談ですが、ビットコインのジェネシスブロックにはサトシナカモトによる50BTCの取引が記録されています。こちらで見れます。
このデータの形こそが「改ざんを難しくする」ために必要不可欠な要素です。理解を深めるため、まずはブロックの中身に注目してきましょう。
ーーブロックの中身ーー
ブロックの中身の主要なものは、以下になります。
▶ 取引データ
▶ nonce(ナンス/ノンス)
▶ 前のブロックのハッシュ値
ここで”nonce (ノンス)”というワードが初めて登場します。nonceとは、number used onceの略で、1回だけ使われる番号という意味です。
これはブロックを追加していくルールで最も重要になってくるので、後ほど詳しく解説します。
(ここでは、ハッシュ値に影響を与えるための数字、と思ってくれればOKです。)
ブロックの中には、常に 「一つ前のブロックのハッシュ値」 が含まれているのですが、これこそが ブロックの前後の関係を示すための 重要な要素です。
ちなみにブロックのハッシュ値は
「取引データのまとまり+NONCE+前のブロックのハッシュ値」
この3つを合わせたものをハッシュ化することで割り出すことができます。
※正確には、もっと別の要素もありますが簡略化のため、このように表現しています。
ーーブロック追加のための条件ーー
ブロックがチェーンに追加されるのには、いくつか条件をクリアしなければなりません。
その条件の一つが追加するブロックのハッシュ値が 「先頭に0がたくさん並んだ値」になるように計算するというものです。
ハッシュ値の特徴を思い出してください。先頭に”0”がたくさん並ぶハッシュ値を出すために、どんなデータを入力すればよいのかは、答えからは逆算できません。なので、元のデータを変化させながら条件を満たすものを探していく必要があります。
ーー単一ブロックのハッシュ化デモーー
少し分かりづらいかと思い、GIFを用意しました。
ブロックのハッシュ値の条件は、先頭に”0”という数字がいくつも並んでいる必要があります。ハッシュの特徴で、ハッシュ値からは元のデータを割り出すことができません。
「0000118bce4f...」 というハッシュ値からでは、元のデータをどのような値にすればよいのかわかりません。
なので、一回一回データをハッシュ化させて、”0”が並んでいるかどうかを確認する必要があります。そこでNONCE(ナンス)という値を変動させて条件を満たすハッシュ値を探していきます。
【確認すべきポイント】
▶データを書き換えるとHash値が変わる
▶Hash値が書き換わった状態で、マイニングボタンを押すと、Nonceの値が変わる(マイニングについては後述)
※上記GIFのデータ入力欄にあるのは、簡略化のための文字列で、実際のデータは異なります。
ーー複数のブロックのハッシュ化ーー
今度は複数のブロックが並んでいる状態を見てみましょう。
自身のブロックには、一つ前のブロックのハッシュ値が含まれています。
もし過去のブロックを改ざんしようとすると、そのブロックのハッシュ値が変わってしまいます。
すると、一つあとのブロックに含まれる、一つ前のハッシュ値も変わってしまいます。
【確認すべきポイント】
▶ Block#が若いブロックのデータを書き換えると、その後のブロックのHash値が書き換わる
▶ すべてのブロックの値の整合性をとろうとすると、書き換えたブロック以降のすべてのブロックをマイニングしていく必要がある
【Step:3】 ひとつなぎになったデータを、全員で共有し、みんなで管理する
いよいよ最後のステップです。
ーーみんなで共有し管理するーー
みんなで共有し、みんなで管理するという点について、今までの管理方法とどう違うのかを見てみましょう。
▼中央集権
今までは、データのやり取りを行う場合、間の中間に入る組織などが管理していました。この状態を、データの管理と所有が一箇所に集中していることから”中央集権 (Centralized)”と呼びます。
▼非中央集権
ブロックチェーンでは、ユーザー自身がデータを管理しているので、ユーザーそれぞれが 同じ取引データをもっています。この状態を、データの管理と所有が一箇所に集中していないことから、”非中央集権(Decentralized)”と呼びます。
一般的にブロックチェーンは 「分散型台帳」と呼ばれるのですが、このようにデータの所有が分散しているのが理由になります。
ーーP2P, ノードーー
この分散型を実現する技術は、実はかなり古くからある技術を利用しています。
その技術はPeer to Peerを略して”P2P”と呼ばれています。Peerとは”仲間”という意味で、Peer to Peerは”仲間から仲間へ”という意味になります。 この場合の仲間とは、システムに参加する人の事を指します。
これは中間地点を通さずに、仲間同士で直接つながるための技術なのです。
またブロックチェーンは、電子上の世界ですので、実際につながるのは、ユーザーが操作する端末(PCやスマホ)になります。その端末のことを”ノード”と呼びます。
ーー非中央集権の特徴ーー
仲間同士で直接やり取りをするP2Pの仕組みは、システムを一箇所でなく分散しているので、サービスが停止しにくいというメリットを持っています。このメリットのことを”ゼロダウンタイム”と呼びます。
ーーどうやってみんなで管理するかーー
たくさんの人が参加する中で、ブロックを追加するときはどのように行うのでしょうか。
みんなが勝手にブロックを追加していってはシステムとして破綻をきたします。なので、みんなで管理を行うためには みんなの”合意”が必要です。
このブロックを追加するまでの合意プロセスを”コンセンサスアルゴリズム” と呼び、実はブロックチェーンごとに異なってきます。
※もっと正確にいうと特定のブロックチェーンでは複数のコンセンサスアルゴリズムの中から一つを選ぶ、というのも存在します。
ーーProof of Work(PoW)ーー
ビットコインにおいて、ブロックを追加できるのは各ブロックごとに1人だけです。みんなの合意を得ながら代表者を決めるためにレースを行い、代表者を決めます。
最初に条件を満たすハッシュ値を見つけたノード(端末)がブロックを追加するための代表権を得ます。
ブロックに追加できる条件:頭に”0”がたくさん並んでいるハッシュ値
その後、みんなで答え合わせを行い、過半数の合意をもって、初めて正式にブロックが追加され、ブロックを追加した本人は報奨としてBTCを獲得します。
レースに参加して報奨を得ることをマイニングと呼び、 この一連の流れを、Proof of Work(PoW)と言います。
ーーマイニングのデモーー
こちらも少しイメージがしにくいかと思い、マイニングを超簡略化したGIFを用意しました。
マイニングは実際のところ世界中の人が高速で計算できるマシンを使ってマイニングを行っています。高速で計算を行うには、非常に大きい電力を必要とするので、高額な電気代がかかります。
そして多くの人が参加すればするほど、一人の人がチェーンを承認するのが難しくなります。結果、ブロックチェーンの堅牢性が増し、改ざんが難しくなっていきます。
【確認すべきポイント】
▶1人のPeerがデータを改ざんし、ハッシュ値を正常にしても、他のPeerとハッシュ値が異っている
▶実際にチェーンを改ざんしようとすると、1人ではなく複数のPeerのデータを書き換える必要がある
ーー産地偽装などでイメージしてみるーー
実際のサービスを構築する場合、もっと複雑になりますが、応用例として産地偽装の防止を考えた場合、どのようなイメージになるか見てみましょう。
Block#233まで、シリアルNo.1111の肉の産地はアメリカになっていました。しかしBlock#234で同じシリアルNo.1111の産地が北海道になっています。
シリアル番号で検索をかけてみると、どこで産地の偽装があったか一目瞭然になります。
産地の偽装を正当化しようとした場合、No.232、No.233のブロックの産地を書き換え、さらにNonceの値を変えてブロックが整合性を取るように変えねばなりません。
最後に
以上が仕組みの解説になります。何度か見返していただくと理解がいっそう深まるかと思いますので、よければブックマーク代わりにスキ and フォローを押して貰えると嬉しいです。
ここまで読み進めていただき、ありがとうございます。
ここまではブロックチェーンの入り口部分にあたる部分で、実際の仕組みはもっと複雑です。
弊社(digglue)は、企業向けブロックチェーンを利用して業務改善の課題解決を行う会社です。コンサルティング、開発、教育等、もっともっと深いレベルでサービスをご提供しています。企業のブロックチェーン利用を考えている方、実際に開発をどうやって進めていけばよいかわからない方、是非ご相談ください。
また、2月25日にセミナーを行います。
良ければ、下記からご参加ください!
最後に、告知が多くてホント恐縮ですが、Twitterフォロー(@harahidey)いただけましたら嬉しいです。リクエストあれば、もっと深いレベルの記事書きます。
ではまた!
※今回ご紹介したのは、弊社が無料で提供するEnterChainというサービスの1コースを要約したものです。本サービスでは進捗に合わせて理解度をチェックするクイズ、本記事のGIFで紹介しているデモを直接触れたり、仕組みをJavaScriptに落としてブラウザ上でコーディングできるコースをご用意しています。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?