0
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?

ブロックチェーンを参考にコミットチェーンというものを実装してみた

Last updated at Posted at 2025-04-03

コミットチェーン

コミットがノードとして連なっていて、各ノードは前のノードの属性値から得られたハッシュ値を、ノードハッシュとして持つ。
この構造はブロックチェーンに似ている。

{ Commit chain

  { Node        -> { Node        -> { Node        -> ...
   @Data            @Data            @Data
    @NodeHash }      @NodeHash }      @NodeHash }
                                                          }

ノードにはデータを持たせる。ハッシュ値はそのデータを全部くっつけて計算する。
ノードは1つ前のノードのデータ列のハッシュ値を@NodeHashとしてもっているので、コミットチェーンの改ざんが難しくなる。

たとえば、コミットチェーンのノードを1つ改ざんしたとする。データやハッシュ値を。

だが、コミットチェーンを走査してノードのハッシュ値がちゃんと前のノードのデータ列のハッシュになっているかチェックすれば、改ざんは検出できる。
なぜならデータなどを改ざんすると計算されるハッシュ値も変わるからである。1つ先のノードは1つ前のノードのハッシュ値を記憶していて、それが再帰的に連なっているので、1つの改ざんによってチェイン全体のハッシュ値が変わる。

だがこの設計だと、コミット列の末尾ノードの改ざんは検出できないことになる。
ブロックチェーンはこの辺どうしてるんだろう?

蓋ノードを末尾にコミットする

末尾ノードの改ざんを検出できないのは仕方ないとして、では末尾ノードのデータを意味がないものにしたらどうだろうか。
つまりデータのコミットがあるたびにチェーンの末尾に蓋となるコミットを追加する。

[ Data commit ] -> [ Cap commit ] -> [ Data commit ] -> [ Cap commit ] -> ...

こうすれば末尾ノード(蓋)の改ざんは検出できないが、改ざんされても問題がないデータとなるので、チェーンの堅朗性が増すと思われる。
デメリットとしてデータ容量が倍になるということがある。

だが100000コミットで20MBなので、それが40MBになるぐらいであれば、十分許容範囲と言えるだろう。

何に使うのか?

このコミットチェーンを自作のCMSに実装してみた。

CMSの悩み事にコンテンツの改ざんチェックというのがある。悪意のあるログインによってコンテンツが勝手に投稿されたり更新されたりするという事態を想定するわけである。
コミットチェーンがあればノードに記事編集者のIPアドレスを持たせればコミッターのIPアドレスを検出できるし、記事編集の履歴はコミットとして残るので、調べることができる。また、記事のデータ列のハッシュ値もノードに持たせれば、コミットされていない記事の検出を行うこともできる。

記事の更新処理で自動でコミットをするようにすれば、少なくともログインのレイヤーでの操作は追跡できるようになる、という論理。

実装してみたところ・・・

PHPで実装してみたところ、20MBぐらい(100000コミット)のコミットチェーン・ファイルでもちゃんと動作するので、たぶんコンテンツが増えても動くと思う。

おわり。

0
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
0
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?