3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【図解あり】ブロックチェーン改ざん防止ロジック | Proof of Workを採用したパターンで解説

Last updated at Posted at 2022-07-12

ブロックチェーンの技術は、その構造上改ざんに強い性質があり、スマートコントラクトや仮想通貨に活用されています。本記事では、Proof of Workを採用したブロックチェーンの改ざん防止ロジックについて解説します。ブロックチェーンのセキュリティーに興味のある方は、ぜひ参考にしてください。

ブロックチェーンとは

ブロックチェーンは取引情報のデータベースです。複数の取引情報がブロックという単位でまとまっており、ブロックを連結させたチェーンを連想させることから、ブロックチェーンと呼ばれます。このチェーン構造によって、データの改ざんに強い特性を持ちます。データ改ざん防止のロジックについては、後述します。

image.png

ブロックチェーンの実際のデータ

ブロックチェーンのデータの実態を確認して、よりイメージを詳細につかみましょう。ブロックチェーン技術を利用した仮想通貨の一例として、ビットコインが挙げられます。ビットコインの実際のデータはBlockchain.comに公開されています。ブロック一覧と取引データ一覧が表示されており、各リンクを踏むことで詳細情報を閲覧できます。

image.png
引用:https://www.blockchain.com/explorer?view=btc

取引データの詳細を閲覧すると、誰が誰に何ビットコイン送付したかを確認できます。「誰が」と「誰に」は、重複のない不規則な文字列で表現されています。

image.png
引用:https://www.blockchain.com/explorer?view=btc

ブロックの詳細を閲覧すると、そのブロックにまとめられた取引データが表示されます。

image.png
引用:https://www.blockchain.com/explorer?view=btc

ブロックは取引データだけでなく、様々なパラメータも保持しています。後述するデータ改ざん防止ロジックでは、このうちHashとNonceというパラメータが関与します。

image.png
引用:https://www.blockchain.com/explorer?view=btc

データ改ざん防止ロジック

ブロックチェーンには様々なデータ改ざん防止策がありますが、ここではProof of Workというアルゴリズムを採用したブロックチェーンを例として、代表的な改ざん防止ロジックを解説します。

ブロックチェーンの前後関係

ブロックチェーンの各ブロックは、直前のブロック情報のhash値を保持しています。ビットコインの「Hash」パラメータに該当します。hash値とは、あるデータを一定のルールで不規則な文字列に変換した値のことです。直前のブロックのhash値を次のブロックが持つことによって、ブロックの並びに前後関係が生まれます。あるブロックの取引データを改ざんした場合、次のブロックのhash値と整合性が取れなくなります。

image.png

バレずに改ざんするには、改ざんしたブロックに加え、それより後ろのブロックすべてのhash値を書き換える必要があります。しかし後述する「ブロック生成における制約」によって、すべて書き換えることも現実的に不可能な仕組みとなっています。

ブロックのパラメータ間の制約

ブロックを生成する際、「Nonce」とよばれるパラメータも設定する必要があります。Nonceそのものは特別な意味をもちません。しかし、Transaction, Hash, Nonceの結合データのhash値がある制約を満たすというルール設定がなされています。

これは、hash値を書き換える場合、別のパラメータであるNonceの再設定も必要となることを意味します。詳細は後述しますが、Nonceの算出には多大な時間がかかります。したがって「後ろのブロックすべてのhash値を書き換える」ことは現実的に不可能となります。

Nonce算出の具体的なステップ

ブロック生成時のNonce算出の流れを知ることで、Nonce算出に多大な時間を要する理由を理解できます。ここでは、具体的なNonce算出ステップを解説します。

  1. ブロックに格納しようとしているTransactionsとHashとNonce(この際、Nonce=0)の結合データのhash値を算出する。
  2. hash値の頭X桁(この桁数はシステムによって異なる)が全て0ではない場合、次はNonce=1として、TransactionsとHashとNonceの結合データのhash値を算出する。
  3. hash値の頭X桁が全て0ではない場合、次はNonce=2として、TransactionsとHashとNonceの結合データのhash値を算出する。
  4. Nonceを1ずつ増やしながら、TransactionsとHashとNonceの結合データのhash値の頭X桁が全て0となるまで繰り返す。この時のNonceがブロックに格納される値となる。

image.png

hash値は、元のデータを逆算することが困難な数学的性質を持ちます。そのため、Nonceを少しずつ変えながらhash値の確認を繰り返す必要があります。このように意図的にブロックのパラメータ算出に時間がかかるような仕組みを「Proof of Work」と呼びます。

ブロックチェーンの前後関係と制約の検証

ブロックチェーンは多くの場合、複数の組織や個人が同一のブロックチェーンのデータを保持しています。データ通信によってすべてのブロックチェーンが同期しています。この同期の際に、データが改ざんされていないことを検証しています。

具体的には、同期時に受け入れようとするブロックチェーンの全ブロックに対して、Hashはとなりのブロックのhash値と一致しているか、NonceはProof of Workを満たしているかを確認しています。ひとつでも満たされない場合、同期が拒否される仕組みになっています。

まとめ

ブロックチェーンはブロック間の前後関係を持ち、またブロック生成における制約が存在します。これらの特徴を満たしているか検証することによって、データの改ざんを防止しています。本記事で解説した実際のデータや図解を参考に、ブロックチェーンのセキュリティー勉強に役立ててください。

「Pythonによるブロックチェーン開発教本」(私が制作したもの)はブロックチェーンをゼロからプログラミングする学習教材です。ブロックチェーン初学者向けに執筆されています。プログラミングを実際に行うことで、ブロックチェーンの仕組みをよりクリアに理解できるでしょう。興味のある方は、無料公開の部分からお試しください。

日本語版

英語版

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?