Bitcon2.0系サービス「Proof of Existence」の存在証明について調べてみたこと

2015年4月2日

Proof of Existence

 

 

以下はドキュメントの存在を証明することができる「Proof of Existence 」サービスの仕組みについて調べてみた記録。

 

「Proof of Existence 」はドキュメントがある日時に存在していたということを証明するために作られたサービスだ。ビットコインのブロックチェーンを利用した仕組みなのでBitcoin2.0の部類に入る。

 

 

 

使い方


 

使い方はいたって簡単。トップ画面を開いたら、自分の持っているドキュメントを点線枠内にドラッグ&ドロップする。すると下に「Please send 5 mBTC or more」と表示されるので、ビットコイン0.005BTC以上を指定されたビットコインアドレスに送信する。

 

Proof of Existence 2

 

ビットコインを送信すると「Payment being processed〜」と表示された画面に遷移するので少し待つ。しばらくすると「Document proof embedded in the Bitcoin blockchain!」と表示され無事完了となる。これでビットコインのブロックチェーン上に永遠に残るような「ドキュメント証明の印」が刻まれる。その印が何かはこれから述べる。

 

Proof of Existence 3

 

 

 

大まかな仕組み


 

ドキュメントのハッシュ値をビットコインのトランザクション生成時に埋め込む。そのトランザクションをブロードキャストしてブロックチェーンに認証されれば完了だ。つまりそのトランザクションIDの内容を見れば、いつでもその文書のハッシュ値とそれがブロックチェーンに取り込まれた日付(タイムスタンプ)を知ることができる。それがドキュメント証明の印である。

 

 

 

ハッシュ関数とハッシュ値


 

このサービスはもちろん文書ファイルそのものが保存されるのではなく、そのドキュメントのハッシュ値がブロックチェーンに埋め込まれる仕組みだ。ハッシュ値はハッシュ関数によって生成される。

 

ハッシュ関数は、あるデータを固定長の値(ハッシュ値)に圧縮する関数で、例えばある二つのデータの内容が一致しているかを調べたい時などに使われる(パスワード認証等)。それぞれのデータのハッシュ値を計算しておけば比較が用意となる。また特徴として挙げられるのは、ハッシュ値からデータを復元することは事実上不可能であるということだ。

 

「Proof of Existence 」ではファイルをドラッグ&ドロップするとまずクライアント側(ブラウザ上)でそのファイルのハッシュ値が導きだされる。その時に利用されるハッシュ関数はSHA-256である。SHA-256は256bit長(256桁)の数値を生成しそれを16進数の文字列に変換する。つまり全部で64文字のハッシュ値を生成する。

 

例えば「これはテストです」というテキストをSHA-256によってハッシュ値を求めると
ce3ff6d5b06b19343aa08422948a56ecf631d4e10474c9bf35e70903bea68272
という64文字の文字列に変換される。

※以下のようなサイトでも変換できる。
http://www.convertstring.com/ja/Hash/SHA256

 

 

 

ドキュメントのハッシュ値はどう埋め込まれるか?


 

ビットコインのトランザクションは取引データをまとめたものだ。トランザクションのデータ構造は主に入力(Inputs)と出力(Outputs)※1で構成されているが、出力には「scriptPubKey」と呼ばれるスクリプト(Script※2が含まれている。そしてそのscriptPubKeyには「OP_RETURN」※3(スクリプトの演算子のひとつ)として任意のデータを入れることができる。そこにハッシュ値を埋め込むというわけだ。つまり「Proof of Existence 」はOP_RETURNを埋め込んだトランザクションを生成し、ブロックチェーンへブロードキャストしている

 

「Proof of Existence 」ではドキュメントのハッシュ値の先頭に、独自のマーカー「444f4350524f4f46」を付けて「OP_RETURN」に格納している。

 

ちなみに「444f4350524f4f46」は文字列「DOCPROOF」(Document Proofの略だろう)を16進数に変換したものだ。(サイトの説明では444f4350524f4f46の前に0xが付いているが、これは16進数を表す接頭辞である。このようなサイトで文字列「DOCPROOF」を16進数に変換してみよう。)

 

※1
入力(Inputs)と出力(Outputs)
出力には「scriptPubKey」が含まれるが、入力側には「scriptSig」と呼ばれるスクリプトが含まれる。

 

※2
スクリプト(Script)
演算子を被演算子の後ろにおく後置記法の形式をもつ簡易なプログラミング言語。OP_はoperator(演算子)の略。

 

※3

OP_RETURNの参照ページ
http://btcnews.jp/the-shared-data-layer-of-the-blockchain/
https://en.bitcoin.it/wiki/Script#Provably_Unspendable.2FPrunable_Outputs
↓のおおよその訳
http://qiita.com/hshimo/items/9506931790dfc2d424d8

 

 

 

実際の記録


 

試しに「これはテストです」と書かれた文章をテキストデータとして保存し(ファイル名は何でもよい)、実際に「Proof of Existence 」の点線枠内に作成したファイルをドラッグ&ドロップしてみよう。ハッシュ値が表示され「Document proof embedded in the Bitcoin blockchain!」と表示されるはずだ。承認された日付は2015-03-23 10:13:36となっているのが分かる。これはあらかじめ私がサービスに登録しておいたものである。

 

これはテストです」のハッシュ値は以下であり、

ce3ff6d5b06b19343aa08422948a56ecf631d4e10474c9bf35e70903bea68272

トランザクションは
51595fbf021280f8db107455f7f6c9dee85df77b9c03595bdaea0579cdfa50c5
上記のように表示される。

 

そのトランザクションIDのリンクをクリックすればその詳細画面に遷移する。その詳細画面下方のDetails欄の+をクリックしてみるとscriptPubKeyの欄にOP_RETURN(444f4350524f4f46+ハッシュ値)が表示されているはずだ。

 

またBLOCKCHAIN infoでも上記トランザクションのOP_RETURNを確認することができる。

Output Scriptsのデコード済み欄に「Proof of Existence 」独自のマーカーDOCPROOFの文字もうかがえる。

 

 

同様のサービスとして日本では「PROOF OF ME」がある。
以下参照
ビットコイン型証明サービス「PROOF OF ME」

 

以上

 

 

 

参照ページ


 

Proof of Existence の仕組み
http://www.slideshare.net/tyk97/proof-of-existence

 

JNSA Bitcoin 勉強会 佐藤 20140602
http://www.slideshare.net/MasashiSatoJP/jnsa-bitcoin-20140602

 

WIDE Technical-Report in 2014
ビットコインにおけるトランザクション、その展性と影響
http://member.wide.ad.jp/tr/wide-tr-ideon-bitcoin-transaction2014-00.pdf

 

Copyright © 2018 アクト・オブ・リーディング All Rights Reserved.  プライバシーポリシー