日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう⑤ ~ 改竄検出編 ~
前回までのおさらい
2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」
前回は太字の部分のみを説明しました。ハッシュポインタとは、ハッシュ関数から得られるハッシュ値を隣のブロックのポインタとして使うことで、ブロック(データ)ごとの繋がりを作っています。そのために以下のような要件を満たす、暗号学的ハッシュ関数も含めて説明しました。
- どんな入力にも固定長の値を出力
- 同じ入力には同じ出力
- 一方向性(原像計算困難性)
- 第2原像計算困難性
- 衝突困難性
これにより、ハッシュ値は少しでも入力が違うと出力結果が全く違うものになる&どんな入力を入れても固定長の出力が得られことになります。
そして、このような特性を持つハッシュ関数を用いることで隣のブロックを指し示す(=ポインタ)ことをしていますと説明しました。
そのうえでまた一つ読み進めていきたいと思います。
2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」
ということで今回は太字の部分ですね。今日は前回、前々回と違い、ちゃっちゃっと進みます!...たぶん
みんながみんなのデータを持っている
このブログで口うるさいほど言っているセリフがあります。それが「みんながみんなのデータを持っている」というものです。これを小難し言葉で表現しているのが「当該データをネットワーク上に分散する多数のノードに保持させる」というものです。
当該データはブロックチェーンに保存している何等かのデータになります。仮想通貨のような金銭データかもしれないし、公文章や生体データかもしれません。データの種類はここでは説いていません。また、ノードは連載一回目の記事で軽く説明しましたが、ネットワークに参加しているコンピューターやプログラムをさします。ここではネットワーク=ブロックチェーンになりますね。
改竄検出
以上のものが成り立つ理由も説明してきたのでここではあえて触れません。前回、前々回は少し技術的な話だったのでどうしても小難しい感じになりましたが、それは「改竄検出」を説明するためにしました。
電子署名は、署名者が間違いなく署名したことを証明する技術でした。ハッシュポインタは、隣のブロックを繋げる役割として働いていました。署名者しか知らない秘密鍵を用いることでデータの正当性を証明し、少しでも入力が違うと出力結果が全く違うものになる&どんな入力を入れても固定長の出力が得られるというハッシュ関数の特性を活かしたものでした。
これにより、みんなが好き勝手にみんなのデータを持っていたり、好き勝手に改竄することを防いでいます。もちろんそんな無法状態だったら、そもそも一つに合意できません。ただこれがもし改竄された時、分かりづらくては困ります。なぜなら改竄検出を何度も何度もチェックするのは大変ですよね。刻一刻とブロックが積みあがっていく中で、チェックにそう時間をかけられません。
なので出来るだけ簡単にチェックできなければなりません。それを実現するために外せない技術が電子署名とハッシュポインタ(もちろんこれだけではない)になるということです。
ただブロックに取り組む前に正当なデータであるかをチェックしてブロックに取り込んでいます。ですので、ブロックに取り込む(=データの合意)後ではなく、前に行われる場合の方が多いかもしれません。ただし、現在はブロックに取り組まれた後に改竄 or 不正なデータが発覚した場合にも対処できるようにしようという動きもあります。
まとめ
2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」
電子署名もハッシュポインタも、数学的に逆算が非常に大変という特性を持つことで改竄を防ぎ、もし起きても検出が用意になるように設計されています。さらに、多くのノードで成り立つ(具体的な数値は不明)ネットワーク状態だということですね。
今回もここまでお読みいただきありがとうございます!何かご意見ご指摘等ありましたらコメントいただけると幸いです。
参考資料