ブロックチェーンとは
- #Security
 - #Encryption
 - #Architecture
 
- 2019/11/09
 
昨今話題となっているブロックチェーンについて、プログラマ目線ではなく、一般向けに簡単に書いていきたいと思います。
ブロックチェーンとは
ブロックチェーン(Blockchain)と聞いて、最初に連想されるのはやはり「Bitcoin」でしょうか。 一時期、とんでもない話題性を持っていましたが、最近はNEWSとかでも取り上げられることが少なくなってしまったように感じます。
AI(Artificial Intelligence)とかも最近はめっきり特集とかが少なくなったように感じます。
ブロックチェーン = Bitcoinではなく、ブロックチェーンは技術の名前、Bitcoinはたくさんある仮想通貨(CryptoCurrency)の1つです。
ブロックチェーンを漢字で表すならば、分散型台帳管理システムとなります。
そして、ブロックチェーンは新しい技術ではなく、今まであった技術を組み合わせた技術です。
大きく4つのテクノロジーから成り立っています。
- P2P (Peer to Peer)
 - 暗号化
 - コンセンサスアルゴリズム
 - スマートコントラクト
 
すべて説明すると長々としてしまうため、重要な部分だけ、かいつまんで説明していきます。
では、よく聞く、改竄できないの話から。 これに関しては、上に挙げた技術すべてが関係してきますが、重要なポイントは暗号化(ハッシュ化)とコンセンサスアルゴリズムです。
先ず、ハッシュ化とコンセンサスアルゴリズムについて解説します。
ハッシュ化 = SHA256やRIPEMD160のようなハッシュ関数を用いて、不可逆的に値を出力するもの
ハッシュ化に関しては、通常のWebアプリケーション等にも利用されていて、例えば、SNSなどでIDはとパスワードで認証するサイトって結構あると思います。 このときのパスワードに関しては平文(PlaneText)でデータベース(DB)に保存されていません。 ハッシュ化した値をDBに入れることで、もしDBに侵入された際でもパスワードがわからないようにしています。
不可逆的というのは
○ : password -> ハッシュ関数 -> ハッシュ値
× : ハッシュ値 -> 何か -> password
というものです。
ハッシュ値から平文を解読することはできないという前提の上、ブロックチェーンは成り立っているということですね。
(公開鍵暗号方式も署名において利用されています。公開鍵は一般に公開しても問題はないもの、秘密鍵は絶対に公開してはいけないものです。尚、秘密鍵から公開鍵を作成することは可能となります。詳しくは「楕円曲線暗号」でググりましょう。)
コンセンサスアルゴリズム = 分散ネットワークのノード(PCなど)が単一の結果について合意を形成するにあたって生じる問題を解決するアルゴリズム
なかなか難しいですね。 まず、P2Pが何なのかについてわからないと、こちらの話ができないので、P2Pについて簡単に書きたいと思います。
Peer to PeerとはPeerとPeerつまり、対等な者同士が通信することを前提とした接続方式のことを指します。
即ち、簡単にいうとブロックチェーンシステム上のPC同士の接続のことを指します。
これを前提とした上で、コンセンサスアルゴリズムについて説明すると、 たとえば、ビットコインで説明すると、AさんがBさんに1bitcoinを送信したとします。 そのやり取り(トランザクションといいます)は隣接するノード(他のユーザーのPC)によってそのやり取りが正しいものかを検証します。
検証がただしければ、そのまた隣接するノードに伝播していきます。 個々人のノード(PC)が、1つのやり取りについて検証し、合意を形成していく、そのアルゴリズムがコンセンサスアルゴリズムといいます。
※若干語弊がありますが、ニュアンスとしてはそんな感じです。
では、ハッシュ化とコンセンサスアルゴリズムでなぜ、改竄を防ぐことができるかについて説明します。
ブロックチェーンは名前の通り、ブロックが鎖状に繋がっていることに由来しています。 ブロックとはトランザクション(やり取り)の固まりで、複数のトランザクションが集まってブロックを形成しています。
鎖状につながるときに前のブロックの情報を含むというルールにそってブロックは連結されていきます。
ここが肝となってきます。
あるやり取りを改竄しようとするとき、もちろんやり取りを改竄したいので、ブロック情報を操作することになります。 ブロックはどんどん積み重なっていきますので、あるブロックを改竄しようとすると、そのブロックより上位のブロックもすべて改竄しないといけないことになります。
また、改竄する際にハッシュ値を探索する必要があり、このハッシュ値を探し求める行為は総当りで行うしかないため、かなりのマシンパワーと時間が必要となります。 その際にもどんどんブロックは積み上がっていきますので、現実的に改竄は不可能ということになっています。
と、かなり端折って説明をしましたが、重要な部分は
- 技術的には新しいものではなく、発想が新しい技術である。
 - 分散型を取っているため、1つがだめになってもシステム的に死なない(ノードで繋がっている)
 - また、分散化しているため、中央集権化しない
 - 改竄は理論的に不可能
 
といったところでしょうか?
個人的な見解としては、
- 堅牢なシステムを構築することができる
 - ブロックチェーンの上にシステムを構築することが現段階でコストが高い
 - 仮想通貨がブームになりすぎて、現段階で他への利用がオープンになっていない(使用している企業さんはたくさんありますが、オープンになっておらず、なかなか情報が手に入りにくい)
 - 英語でドキュメントを読む必要がある
 
ブロックチェーン技術で仮想通貨以外に何ができるかは世界中で模索されている段階だと思います。 たまたま、仮想通貨がヒットしただけで、それ以外にも応用可能なポテンシャルをもっている技術だと思います。
これからの動向に期待です!!
今度はEthereumに代表される、スマートコントラクトについてGeth + Solidityでのプログラムの実行とか書こうかなと思っています。