はじめに
昔から暗号通貨や、ブロックチェーンの勉強をしていて、なんとなく技術は知っていたが、実際に暗号通貨をいじったことはなかった。
最近、「さすがにやらなきゃな」と思って、暗号通貨を触り始めた。
送金とかを試してみようと思ったが、ビットコインは、マイニングの手数料が高いし、送金も遅いとのこと。そこで、ライトコインという別のコインを使って送金を試してみたりした。
ライトコインでも、送金には10分程度かかる。ビットコインは少なくとも倍以上はかかるっぽい。
調べてみると、ビットコインの送金に時間がかかるのはビットコインの不正防止に重要なことだという。どういうことだろうか。
ブロクチェーンの改ざん防止技術
ブロックとハッシュ
ブロックチェーンはブロックが連結した構造になっています。
ブロック1 -> ブロック2 -> ブロック3
ブロックの中には、取引内容とハッシュが入っています
ここで重要なのは、各ブロックがハッシュを持っているという点です。
ハッシュの計算には、前のブロックのハッシュが用いられています。
hash(前のブロックのハッシュ + 今のブロックの取引内容)
このため、例えば、ブロック1の取引内容が改ざんされた場合、ブロック2、ブロック3のハッシュが合わなくなり改ざんに気づきやすい仕組みとなっています。
nonce
しかし、ブロック1から3までをすべて改ざんしてしまえば、改ざんは成功します。そこで、改ざんを難しくする仕組みとして、 nonce があります。
各ブロックには、取引内容、ハッシュに加えて、nonce というものを持ちます。
ある整数 n に対して、 hash(今のブロックのハッシュ + nonce)
によって生成されたハッシュの上から n 桁が 0 になるような nonce を見つけて、ブロックに埋め込む必要があります。
どのような nonce が当てはまるかは、総当たりで計算していくしかありません。
この nonce を探すのにめちゃくちゃ時間がかかるので、取引に時間がかかるのです。そして、この nonce を探す作業を「マイニング」といいます。
nonce 探しの難易度は、整数 n 、つまり、桁数を調整することで調整できます。
ビットコインでは、 nonce 探しに最低 10分かかるように設計されています。もし、ブロック1, 2, 3を全部改ざんしようとすると、nonce 探しで30分かかることになり、改ざんの難易度を上げています。
多数のサーバーの監視による改ざん防止
当然、こちらも改ざん防止として機能している。
ブロックチェーンのデータは多数のサーバーで管理・共有されている。
かりに、100台のサーバーにデータが入っていたとして、そのうち1台のデータが改ざんされていたとしても、残り99台のデータのほうが多数なので、そちらを採用するようになっている。
このように、ブロックチェーンには様々な改ざん防止技術が施されており、改ざんができないようになっている。
参考ページ
ブロックチェーンの簡単な実装を Python でやってみる例
この記事によると、ブロックの作成を confirmation 、多数決による正当性確認は verification と言うらしい。