見出し画像

ブロックチェーンの優位性②改ざん耐性

Immutability

ブロックチェーンは改ざん(改竄)不可能であると言われています。これはImmutabilityとも呼ばれています。mutable(変わり安い)の否定形です。

どうして、通常のシステムであっても書き換え不可能にすることができるのに、なぜブロックチェーンではわざわざ改ざん耐性(改ざん不可能性)があると言われているのでしょうか?


改ざんとは、第三者が他者のコンピュータにアクセスし、コンピュータの管理者に無断でデータを書き換える行為のことである。


通常のシステムではどうやってるか?

通常のデータベース(RDBMS等のブロックチェーンではないデータベースシステム)やファイルシステム(OSでデータを格納する仕組み:Windowsでいうとエクスプローラーがでファイル操作ができますが、データを格納する方式と実装)においてデータの書き換えを不可能にする方法で一般的なのは権限設定によるものです。

管理者が、ユーザーごとに書き換え可能か、不可能かを設定できます。エクセルはデフォルトでは書き換え可能ですが、パスワードでロックすることで第三者による書き換えを不可能にすることもできます。それは共通鍵暗号方式と呼ばれるもので、パスワードを知っていれば暗号が解けるという、おそらく一般にイメージされる暗号方式です。Windowsでも管理者権限とか一般ユーザーとか決めますよね?アプリをインストールをするのは危ないので管理者しかできないようにしたりできます。その時には、管理権限のテーブル(エクセルの表のようなもの)というのがあり、そこに誰が何の権限を持っているのかを記録しておきます。これをアクセス制御を呼んでいます。

RDB(一般的であるリレーショナル・データベース)も同様に各ユーザーの権限は権限テーブルで管理されています。

画像1


では、この権限テーブルを書き換えたらどうなるのでしょうか?当然ですが、そのテーブルに記載のような権限が反映されます。一般的なデータを格納するテーブルと同じように、権限設定自体もテーブルで表現されています。そうなると、権限テーブルが悪意を持って書き換えられたら、すべての一般的なテーブル、つまりすべてのデータが改ざんできてしまいます。これが銀行の預金であったら大問題ですね。もちろん、そうならないように、データベースの権限管理は厳重になされています。DBA(Database Admin)というチームが特権権限を管理しており、一般の開発者は一切触れないようにします。ではDBAのID/Passが漏れたらどうなるでしょうか?バックドア(不正にコンピュータにアクセスするためのソフト)でキーロガー(キーボードとマウスの動きを記録するソフト)を仕掛けられ、タイプしている情報を第三者(ハッカー)に転送していたら?

そうならないようにファイヤーウォールやら、VLANでDBAを隔離する等など(書ききれませんが)一般的なセキュリティー対応を何重にも施してハッキングのリスクを減らすというのが従来の考え方です。


公開鍵暗号方式での署名

さて、ここで公開鍵暗号方式をおさらいしましょう。☆公開鍵と★秘密鍵が登場します。公開鍵がID秘密鍵をパスワードと考えることもできます。☆公開鍵は誰にでも見せて良いので、★秘密鍵を持ってる人は☆公開鍵であなたの文書を暗号化してよ、と相手に頼みます。そして暗号化して送った文書は自分の★秘密鍵で解読できます。これが文書の暗号化で使用した場合です。

公開鍵暗号のミソは、☆公開鍵で暗号化したら★秘密鍵で復号。★秘密鍵で暗号化したら☆公開鍵で復号ができることです。常に相手の鍵が必要です。

さて、ビットコインの場合は署名として公開鍵暗号を使用します。★秘密鍵はパスワードなので自分しか知らない前提です。★秘密鍵でも暗号化できます。例えば以下の文章に署名してみましょう!

私のアドレスAから友達のアドレスBに100BTCを送付します

この文字列を★秘密鍵で暗号化します。

53616c7465645f5f8555b79e315daacc956d6ad57a4070a4530568a87f61b6fc750b179e15c86b767bd69120f14d1b49b323331adc487be992760ab37f2c22ce3

こんな感じになります。それを受け取った人(ビットコインではマイニングをしている人達=マイナー)が☆公開鍵(~=アドレス)で復号します。復号できたら、その文字列は★秘密鍵を持っている人が署名したというのが証明できます。なので本人の所有するBTCをアドレスBに送付するので問題ありません。

※今回は説明を容易にするために、RSA暗号を例にしました。ビットコインのブロックチェーンでは楕円曲線暗号を利用した署名(ECDSA)を使用しているので、この例のように署名をするのに暗号化をしていません。


トランザクションとは?

ブロックチェーンの仕組みが面白いのは、アドレスAは公開鍵そのものです。(少し加工してありますが)よってマイナーがアドレスAを使って復号します。

私のアドレスAから友達のアドレスBに100BTCを送付します

と、元に戻り、マイナーは確かに「私」=「アドレスAの所有者」ということが確認できたので、これを実行します。このように(電子)署名をしてブロックチェーンに書き込みます。秘密鍵を持っている人なら誰でもブロックチェーンに書き込むことが可能です。このように”アドレスAからアドレスBに○○BTC送る”と書いた文章をトランザクション(TX)と呼びます。トランザクションは非常に重要な概念なので覚えておいてください。

画像2


公開鍵暗号方式

公開鍵暗号とは、対になる 2 つの鍵を利用してデータの暗号化、復号(元のデータに戻すこと)を行う暗号方式です。鍵は第三者に公開する「公開鍵」、自分しか知らない「秘密鍵」の 2 種類です。
公開鍵暗号の主な使用方法は「データの暗号化」と「署名」の二つがあり、ビットコインにおいては「署名」しか用いません。
ビットコインの取引はコインの所有者(アドレスの秘密鍵を持っている)が秘密鍵を用いて署名します。ほかの人はその署名と公開鍵により、秘密鍵を持った人がその署名を行ったこと、署名された後に本文が改ざんされていないことを確認することができます。



ブロックチェーンは構造的に書き換え不可能

一方で、ブロックチェーンは権限テーブルがありません。ブロックチェーンというとビットコインを連想しますが、ビットコインとはブロックチェーンという構造的に書き換え不可能なデータベースに数字を書き込んで、それをBTCと呼ぶことで成立している仮想通貨です。もっというとBTCとすらシステムには書いていません。何か数字、例えば100000000とデータベースに書いてあったら、データを表示するときに1BTCと表示して、使う人が1BTCと書かれたデータに価値があると考える。という論理です。

構造的に書き換え不可能なデータベースとは何でしょうか?

まず権限テーブルは存在しません。先程の例のように秘密鍵の保有者のみがブロックチェーン(のデータベース)に追記できます。そして、データをチェーンのようにつなぎます。専門用語でHashチェーンと呼んでいます。


ハッシュとは?

ハッシュ(Hash)とは一方向関数と呼ばれています。y=f(x)という方程式を考えます。xを与えるとyが求められます。しかしyを与えた時にxが求められるとは限りません。

割り算の余りを求めるMOD(モジュラス)関数を考えてみます。

y = Mod(8,3)

8を3で割った余りは2ですね。でも2から8は計算で戻せません。序数3で余りが2となる整数は、5、8,11、14…と無限にあります。でもMod(8,3)は必ず2になります。これは以下のようにも考えられます。

Input->Hash->Output(ただし逆向きは不可能)

これがハッシュです。非常に重要な概念です。ブロックチェーンではむしろ暗号のことは忘れてもいいくらい、ハッシュが頻発します。

次にチェーンですね。先程のトランザクション=TXを繋げてチェーンにしてみましょう。

TX1を作ります。

アドレスAからアドレスBに100BTCを送付します

TX2には、TX1のハッシュを追記します。

53616c7465645f5f8555b79e315daacc956d6ad57a4070a4530568a87f61b6fc750b179e15c86b767bd69120f14d1b49b323331adc487be992760ab37f2c22ce3アドレスBからアドレスCに25BTCを送付します

これがTX2の元データとなり秘密鍵で暗号化(署名)します。

53616c7465645f5f50908ad73a7843127071b97edb77436b69a9915a239a7e6a88c243988787fc9c7a04728ebff0e7ae47806de681f9fc9104706fd0be56eb59acd98eb2d9f4fe32c1d5c8e68a3467416d08e96507712233776dd803732c246cfef08cb8f6b626527b04c583f8896450bdad6c33a224d5fc356ad09ad95d9f6cdc915647bf631c971812f9e7bb6c9dcb03356fafc19f6b9977083ad3c4bfc16809cd0ab2c5bda9c2b343127533f86840b299ebde62deede2b7265eece7be6c69122ba49dc6cc52740113563e6d7d5c05

TX2を署名したものは、アドレスBで復号できます。復号できることが確認できたら、本人の証明ができたことになります。

もしハッカーが何らかの方法でブロックチェーンのデータを改ざんしたとしても、すべてのハッシュを計算し直すと格納されているデータと辻褄が合わないことが検証できます。それで改ざん検知が可能です。改ざん検知ができるのであれば、それ以降のデータはハッキングされたとして無効とすることができます。よって改ざんされた状態のデータは存在しない。これを改ざんできないと表現しています。


改ざん耐性は2つの要素技術で達成

①トランザクションへの署名
②トランザクションの繋がりをチェーンにする

纏めると、このように①トランザクションへの署名と②トランザクションをつなげることで改ざんできないことの2つの要素技術で改ざん耐性を実現しています。

①は署名が不正であれば、ブロックには取り込まれません。データを追記するためには本人の秘密鍵による署名が必須となっています。

②はTXがチェーンになっているので過去に作ったTXを書き換えるためには、それ以降のすべてのTXを不正に書き換えなければなりません。これはハッカーが該当する全ての秘密鍵をハックする必要があるということです。ビットコインは色々な人に送られています。バラバラの人がTXを作っているので、秘密鍵もバラバラに所有されており、これを全てハッキングするのは非常に困難です。

おっと、ブロックがまだ登場してませんね?実はブロックチェーンにおけるブロックはさほど重要な役割を担っていません。簡単に言うと複数のトランザクションを格納する単なるフォルダでしかないです。「ブロックチェーン」の名称にも使われているのに可愛そうですね。

そして、実際には②はトランザクションのチェーンではなく、複数のトランザクションを格納したブロックの全てのDataのハッシュを次のハッシュにつなげています。簡便化のためにハッシュの繋がりと説明しましたが、前のブロックハッシュを次のブロックに格納しています。

今回でブロックチェーンならではの改ざん耐性をご理解いただけたと思います。この構造的に書き換え不可能な特徴はブロックチェーンを利用する優位性だと考えています。


画像3



※前回の疎結合に関するブログはこちら(コレ自体がハッシュチェーンか?)


最後に、bitFlyer Blockchainではエンジニア、事業戦略とコンサルタントを募集してます。ハッシュで僕らと繋がりたい人は、ぜひご応募ください!



この記事が気に入ったらサポートをしてみませんか?