ブロックチェーンの技術は、その構造上改ざんに強い性質があり、スマートコントラクトや仮想通貨に活用されています。本記事では、Proof of Workを採用したブロックチェーンの改ざん防止ロジックについて解説します。ブロックチェーンのセキュリティーに興味のある方は、ぜひ参考にしてください。
ブロックチェーンとは
ブロックチェーンは取引情報のデータベースです。複数の取引情報がブロックという単位でまとまっており、ブロックを連結させたチェーンを連想させることから、ブロックチェーンと呼ばれます。このチェーン構造によって、データの改ざんに強い特性を持ちます。データ改ざん防止のロジックについては、後述します。
ブロックチェーンの実際のデータ
ブロックチェーンのデータの実態を確認して、よりイメージを詳細につかみましょう。ブロックチェーン技術を利用した仮想通貨の一例として、ビットコインが挙げられます。ビットコインの実際のデータはBlockchain.comに公開されています。ブロック一覧と取引データ一覧が表示されており、各リンクを踏むことで詳細情報を閲覧できます。
引用:https://www.blockchain.com/explorer?view=btc
取引データの詳細を閲覧すると、誰が誰に何ビットコイン送付したかを確認できます。「誰が」と「誰に」は、重複のない不規則な文字列で表現されています。
引用:https://www.blockchain.com/explorer?view=btc
ブロックの詳細を閲覧すると、そのブロックにまとめられた取引データが表示されます。
引用:https://www.blockchain.com/explorer?view=btc
ブロックは取引データだけでなく、様々なパラメータも保持しています。後述するデータ改ざん防止ロジックでは、このうちHashとNonceというパラメータが関与します。
引用:https://www.blockchain.com/explorer?view=btc
データ改ざん防止ロジック
ブロックチェーンには様々なデータ改ざん防止策がありますが、ここではProof of Workというアルゴリズムを採用したブロックチェーンを例として、代表的な改ざん防止ロジックを解説します。
ブロックチェーンの前後関係
ブロックチェーンの各ブロックは、直前のブロック情報のhash値を保持しています。ビットコインの「Hash」パラメータに該当します。hash値とは、あるデータを一定のルールで不規則な文字列に変換した値のことです。直前のブロックのhash値を次のブロックが持つことによって、ブロックの並びに前後関係が生まれます。あるブロックの取引データを改ざんした場合、次のブロックのhash値と整合性が取れなくなります。
バレずに改ざんするには、改ざんしたブロックに加え、それより後ろのブロックすべてのhash値を書き換える必要があります。しかし後述する「ブロック生成における制約」によって、すべて書き換えることも現実的に不可能な仕組みとなっています。
ブロックのパラメータ間の制約
ブロックを生成する際、「Nonce」とよばれるパラメータも設定する必要があります。Nonceそのものは特別な意味をもちません。しかし、Transaction, Hash, Nonceの結合データのhash値がある制約を満たすというルール設定がなされています。
これは、hash値を書き換える場合、別のパラメータであるNonceの再設定も必要となることを意味します。詳細は後述しますが、Nonceの算出には多大な時間がかかります。したがって「後ろのブロックすべてのhash値を書き換える」ことは現実的に不可能となります。
Nonce算出の具体的なステップ
ブロック生成時のNonce算出の流れを知ることで、Nonce算出に多大な時間を要する理由を理解できます。ここでは、具体的なNonce算出ステップを解説します。
- ブロックに格納しようとしているTransactionsとHashとNonce(この際、Nonce=0)の結合データのhash値を算出する。
- hash値の頭X桁(この桁数はシステムによって異なる)が全て0ではない場合、次はNonce=1として、TransactionsとHashとNonceの結合データのhash値を算出する。
- hash値の頭X桁が全て0ではない場合、次はNonce=2として、TransactionsとHashとNonceの結合データのhash値を算出する。
- Nonceを1ずつ増やしながら、TransactionsとHashとNonceの結合データのhash値の頭X桁が全て0となるまで繰り返す。この時のNonceがブロックに格納される値となる。
hash値は、元のデータを逆算することが困難な数学的性質を持ちます。そのため、Nonceを少しずつ変えながらhash値の確認を繰り返す必要があります。このように意図的にブロックのパラメータ算出に時間がかかるような仕組みを「Proof of Work」と呼びます。
ブロックチェーンの前後関係と制約の検証
ブロックチェーンは多くの場合、複数の組織や個人が同一のブロックチェーンのデータを保持しています。データ通信によってすべてのブロックチェーンが同期しています。この同期の際に、データが改ざんされていないことを検証しています。
具体的には、同期時に受け入れようとするブロックチェーンの全ブロックに対して、Hashはとなりのブロックのhash値と一致しているか、NonceはProof of Workを満たしているかを確認しています。ひとつでも満たされない場合、同期が拒否される仕組みになっています。
まとめ
ブロックチェーンはブロック間の前後関係を持ち、またブロック生成における制約が存在します。これらの特徴を満たしているか検証することによって、データの改ざんを防止しています。本記事で解説した実際のデータや図解を参考に、ブロックチェーンのセキュリティー勉強に役立ててください。
「Pythonによるブロックチェーン開発教本」(私が制作したもの)はブロックチェーンをゼロからプログラミングする学習教材です。ブロックチェーン初学者向けに執筆されています。プログラミングを実際に行うことで、ブロックチェーンの仕組みをよりクリアに理解できるでしょう。興味のある方は、無料公開の部分からお試しください。
日本語版
英語版