前号: No 234 / 次号: No 236 / 一覧に戻る

メールマガジン「がんばりすぎないセキュリティ」No235 (21/11/22)

No235 ブロックチェーンで安全を確保する技術


今回はブロックチェーンによって安全な取引が行えるのか?という
点について解説をします。

これはブロックチェーンの価値の源となる話です。その実現のため
にかなり複雑なことを行っています。

今回からブロックチェーンのコアな部分に入っていきます。


1. 「安全な取引」が必要な理由

前回のおさらいになりますが、ブロックチェーンという仕組みは 信頼のおける中心的なサーバがない状態でも安全な取引が行える 方法として考案されました。 一般的なネットワークでは、利用者は相手のサーバを信用して通信 を行います。例えば楽天で買いものをする時は楽天というサービス を信用し、そのサービス会社が運営しているサーバを信用するから、 住所氏名やクレジットカード情報も安心して教えるのです。 こういった信用に足るサーバを運用するのは大変です。データ盗難 や、データの書き換え(注文内容の書き換え)が発生しないように 常に監視を行う必要があります。 つまり、信頼できるサーバの運営にはコストがかかるということです。 一方のP2Pネットワークでは、参加者全員が同じ権限を持ちますから 誰も監視コストを負担しません。そのため、信頼できるサーバが存在 しないネットワークと言えます。 逆に言えば、P2Pネットワークで安全な取引ができれば、極めてロー コストで、取引が行えるということです。 これを実現するのがブロックチェーンという仕組みです。

2. ブロックチェーンが満たすべき要件

これも前回書きましたが、以下の二つの要件を満たすことで、安全 な取引が行えるようになります。  1)双方の合意を証明できること  2)以前の取引を確認できること 前回、安全な取引の条件は3つと書きました。 ですが、第3項(作成したデータが消失しないこと)はブロック チェーンの機能ではなく、P2Pネットワークの機能の範囲である ため、ここでは省略しています。 今回は、この二つについて解説をします。

3. 双方の合意の証明

これは双方の当事者が電子署名を互いに行うことで証明ができます。 例えばアリスがボブに1万円を譲るというデータの証明を考えます。 1)取引内容のデータを作ります。   ここでは「アリス→ボブ(1万円)」という文(データ)とします。 2)このデータに対し、ボブは自分の秘密鍵で電子署名を付けます。   この署名は「アリス→ボブ(1万円)」のデータをボブが承認   したという意味を持ちます。   この結果、取引データには三つのデータから構成されます。   ・「アリス→ボブ(1万円)」の文   ・「アリス→ボブ(1万円)」をボブが承認した電子署名 3)次に、アリスも自分の秘密鍵で電子署名を付けます。   この署名は「「アリス→ボブ(1万円)」の文をボブが承認した」   というデータをアリスが承認したという意味を持ちます。   この結果、取引データには三つのデータから構成されます。   ・「アリス→ボブ(1万円)」の文   ・「アリス→ボブ(1万円)」をボブが承認した電子署名   ・ボブが承認した電子署名をアリスが承認した電子署名 最後のデータを作るには、ボブの秘密鍵とアリスの秘密鍵の両方 が必要となります。双方が電子署名を付けているということは両者 がその取引を承認していることの証拠となります。 これだけガッチリした証拠があれば、取引はキチンと成立し、後に なってアリスが「譲ってない」などと言うことは防げます。 ですが、双方の合意の証明だけでは二重譲渡(同じ資産を2名に 同時に譲り渡すこと)を防ぐことができません。 アリスがお金を持っていないのに「譲るよ」と言ったとしても、それ をチェックすることはできません。 例えば、銀行で送金をする時には銀行側が現在の預金高を確認します から、それを越える送金は行えません。ですが、上で述べた双方の 合意だけでは、アリスの残高が確認できません。 これを防ぐには、現在のアリスの残額を何らかの方法で確認できる 必要があります。

4. 以前の取引を確認できること

ここからがブロックチェーンのコアな仕組みの話となります。 ブロックチェーンでは、全ての取引データがブロックという単位に まとめられます。通常、1ブロックには複数(数千件程度)の取引 データを含みます。 一つのブロックがいっぱいになれば、別のブロックを生成して、 そこに取引データを格納します。ですので取引データはたくさんの ブロックに分割して記録されることになります。 取引データを格納するために生成した全てのブロックを時系列に チェーンのように繋いで長いデータ構造とする方式をブロックチェーン と呼びます。 データを繋ぐという表現がわかりにくいと思うのですが、これには ハッシュ関数が活躍します。 ハッシュ関数というのは、与えられたデータをルールに従って加工 し、コンパクトなデータを得る計算方法のことです。 データが違っていると、ハッシュ値もそれぞれ違ったものになり ますので、データの特徴を示す指紋みたいなもの、とも言えます。 なお、以降では説明しやすいように1ブロック=1つの取引で記載 していますが、実際には1ブロックに数千件の取引データが格納 されます。 1つのブロックには以下のデータを格納します。  ・一つ古い(直前)ブロック(のハッシュ)値  ・ノンス値 ※  ・取引データ ※ノンス値については次回解説しますので今回は「そんなものが  ある」ものと考えてください。 この直前ブロックのハッシュ値によってブロックの前後関係がわかる というわけです。 以下の3つの取引があるとします。  取引A:アリスがマイニングで1万円を取得  取引B:アリスがボブに1万円を譲る  取引C:ボブがチャーリーに5千円を譲る 各ブロックの内容は次のようになります。 第1ブロック:  ・直前ブロック値:0  ・ノンス値   :※省略(次回解説します)  ・取引データ  :取引A 第2ブロック:  ・直前ブロック値:第1ブロックのハッシュ値  ・ノンス値   :※省略  ・取引データ  :取引B 第3ブロック:  ・直前ブロック値:第2ブロックのハッシュ値  ・ノンス値   :※省略  ・取引データ  :取引C 各ブロックに直前のブロックのハッシュ値を入れることでブロック の前後関係を明らかになります。 ブロックチェーンでは、全てのブロックがチェーンのどこかに含まれ ますので、どのブロックが先頭(一番古い)でどのブロックが末尾 (一番新しい)かもわかりますから、それを追跡すれば、誰がどれ だけの資産を持っているかが正確にわかります。 このようにブロックチェーンを使うことで取引データが作成された 順序保証ができるのです。 ですが、これだけではブロックチェーンに不正なブロックを追加し たり、正しい取引データを無視させたりすることが簡単にできて しまいます。 それを防ぐための仕組みがブロックチェーンには用意されています。 次回はそのような不正を防ぐ仕組みを解説します。 次回もお楽しみに。 (本稿は 2021年11月に作成しました)

前号: No 234 / 次号: No 236 / 一覧に戻る