オープンタイムスタンプ

タイムスタンプ証明標準
オープンタイムスタンプ
原作者ピーター・トッド[1]
開発者開ける
安定版リリース
0.7.2 [2] / 2024年12月31日; 12か月前[2] (2024-12-31)
リポジトリgithub.com/opentimestamps/
書かれたPythonJavaJavaScriptRust
タイプ分散型タイムスタンプ
ライセンスLGPL3
Webサイトオープンタイムスタンプ

OpenTimestamps ( OTS )は、ブロックチェーンのタイムスタンプの標準フォーマットを提供することを目的としたオープンソース[3]プロジェクトです。 [4] Bitcoin のようなシステムの出現により、信頼できる第三者に頼ることなく、文書の存在証明(タイムスタンプ)を作成および検証することが可能になりました。これは、悪意のある(または不注意な)信頼できる第三者がタイムスタンプを侵害する可能性を排除するため、セキュリティの面で強化されています。[5]

OTSは、タイムスタンプを簡便に作成し、後から独立して検証するための一連のルールを定義します。現在、ビットコインによるタイムスタンプは完全にサポートされていますが、そのフォーマットは柔軟性が高く、様々な方法に対応できます。[a]

誰でもトランザクション手数料を支払うことで、許可のないブロックチェーンでタイムスタンプを作成できます。便宜上、OTSはユーザーからのタイムスタンプリクエストを集約し、パブリックカレンダーサーバーによって資金提供されるトランザクションにパックするインフラストラクチャを構築しました。その結果、ユーザーは信頼が最小限に抑えられた設定で、無料でタイムスタンプを作成できます。[b]

タイムスタンプとは何か

タイムスタンプは、ある時点より前に何らかのデータが存在していたことを証明するものです。 [1]

このような証明を作成するには、 dをブロックチェーン上に公開する必要はない(これはコストがかかる)が、 dをブロックチェーンにコミットするだけで十分であることが判明した。このコミットメントは、 dが特定のブロックより前に存在していたことを証明するものであり、 dが変更された場合、証明は無効になり、したがって役に立たなくなること を意味する。

証明は、、、などの一連のコミットメント操作で構成されますsha256[ c] これらの操作は、d が特定のブロックヘッダーにコミットしたことを証明する暗号化パスですappend言い換えると、dがブロックヘッダーの値を持つようにしたということです。実際、d が異なっていた場合、コミットメント操作の数学的特性により、ブロックヘッダーは異なるものになります。コミットメントを検証するために、操作をデータdに順番に適用し、その結果(トランザクションのマークルルートになるはず)がブロックチェーンで観測されたものと等しいかどうかを確認します。確認がうまくいけば、d はブロックより前に存在していたと断言できます。 prepend

タイムスタンプ付きファイルの場合hello.txt、OTS 証明は、次の内容を含む という名前のファイルにエンコードされますhello.txt.ots

  • タイムスタンプ付きファイルのハッシュ。
  • コミットメント操作。
  • ブロックチェーン上の1つ以上の証明。[d]

この情報により、挑戦者はhello.txt特定のブロックの前に存在していたものを独自に検証できます。

使用法

OTSは、ユーザーにタイムスタンプを作成し、独立して検証するための複数の簡単な方法を提供します。[6]

  • Python の opentimestamps-client を使用する場合;
  • java-opentimestamps を使用する場合;
  • javascript-opentimestamps を使用;
  • opentimestamps.orgにて[e]

次のセクションでは、Python クライアントの使用例を示します。

タイムスタンプの作成

スタンプ操作はタイムスタンプの最初のバージョンを作成します。これは、存在を証明したいファイル(元のファイル)に適用されます。

$ cat  hello.txt
 Hello World! 
$ ots  stamp  hello.txt
リモートカレンダー https://a.pool.opentimestamps.org に送信しています
リモートカレンダー https://b.pool.opentimestamps.org に送信しています
リモートカレンダー https://a.pool.eternitywall.com に送信しています

スタンプ操作は、元のファイルのSHA256ハッシュを計算しプライバシー保護のためにランダムな128ビットナンスを連結し、SHA256ハッシュを再計算して、この一意の値をカレンダーサーバーに送信します。各カレンダーサーバーは、受信したハッシュをそれぞれのマークルツリーに追加し、初期OTSファイルを生成するために必要なレスポンスを返します。このOTSファイルはまだブロックチェーンに記録されていないため、不完全です。[7]

適切な時間が経過したら、ユーザーは同じOTSファイルに対してアップグレード操作を実行します。これにより、カレンダーサーバーと通信し、OTSファイルをビットコインブロックヘッダーの認証情報で更新します。 [1]

$ ots アップグレード hello.txt.ots
成功!タイムスタンプが完了しました

複数の異なるファイルに同時にタイムスタンプを作成することも可能です。その場合、スタンプ操作は、元のファイルから導出されたMerkleルートを使用してカレンダーサーバーに単一のリクエストを送信し、その後、同じ操作でMerkleツリーパスを計算し、元のファイルごとにタイムスタンプを作成します。

タイムスタンプ検証

OTS証明の検証には、OTSファイルと元のファイルの両方が必要です。また、信頼できる第三者に依存せずに検証を実行するには、ユーザーは自身のマシン上に最新のビットコインノード[f]を保有している必要があります。 [8]

$ ots  verify  hello.txt.ots
対象ファイル名が「hello.txt」であると仮定
成功!Bitcoinは2018年4月16日月曜日 01:15:16 CEST時点でデータが存在することを証明します

タイムスタンプ情報を表示する

オープンタイムスタンプ
ファイル名拡張子
.ots
魔法の数字\x00 O p e n T i m e s t a m p s \x00 \x00 P r o o f \x00 \xbf \x89 \xe2 \xe8 \x84 \xe8 \x92 \x94
Webサイトオープンタイムスタンプ

タイムスタンプの基本構造は3つの主要なセクションに分かれています。[7]

  1. ファイルハッシュ
  2. マークルツリーの構築
  3. ビットコインのブロックヘッダー認証

タイムスタンプは、スペースを節約し、解釈、エンコード、システム間の互換性の問題を回避するためにバイナリファイルに保存されます。[7]通常、このファイルは.ots 拡張子であり、そのマジックナンバーは である\x00 O p e n T i m e s t a m p s \x00 \x00 P r o o f \x00 \xbf \x89 \xe2 \xe8 \x84 \xe8 \x92 \x94[9]

info操作はタイムスタンプの内容を人間が読める形式で提示します。この場合、こんにちは.txtファイルが表示され、ブロック 518387 の Bitcoin ブロック ヘッダーまでハッシュされます。

$ ots  info  hello.txt.ots
ファイル sha256 ハッシュ: 03ba204e50d126e4674c005e04d82e84c21366780af1f43bd54a37816b6ab340
タイムスタンプ: 
append 72d8a09f54b12580b48c2f7c7dea4ce0 
sha256 
-> append fe0d089c9bfe5289c3ee579904af3551 
sha256 
prepend 5ad3d92b 
append 8fefb42191040403 
verify PendingAttestation('https://alice.btc.calendar.opentimestamps.org') 
sha256 
prepend f0e8b62a519b0b8fad763c33c558e0179a43b8d89cb4130b6dbaa91e3d3252f6 
sha256
先頭に追加 beca183da3f86784a7d54778bc48e78c570245d51474f32475e6d1851989b140 
sha256
末尾に追加 a95879c35c15ace7dc5fd1d2cf0a7d9b0e4110b5b8a74da4c64082835f6f6a2e 
sha256
末尾に追加cf9b259e4506235f97225706f3a675f51ecf2657814639d87e4e6f42d8581ae7 
sha256
先頭に e3b7ff694e1b14b4420556ca77ea8e9509e44b7fbed0dc9a3b67c00fcf016ca2 
sha256
先頭に 01000000017230dffb1edd7cae0c8feb3fec7c91c34b33b22fdfac071b83e790ce34254b340000000017160014a4282cbf0f17fd6d51b61da f7cf4d56e32183b60fdffffff02d7c062000000000017a914365c46ff772b9f1da73efeb2c559777e1a2c33b48700000000000000000226a20
追加 f2e80700 
#ビットコイン 取引 ID  7e6e5aafa1fc9d933992621a7ac321dc7b9368d0e1baa72ff77665b07b75315f
 sha256 
sha256
追加d67f1615f986694d707d7d044883c7885f3dded2ac9df5f6b9270a5bdda38aa3 
sha256 
sha256
追加 e551a80b2bdd88f417fc95014662f7a65d8c0c4d833b6df034bc12f1af35b953 
sha256 
sha256
追加 0902830fc37fde4996c350de40c0ae621c739ce002a7be4b3725d7e281fc02a3 
sha256 
sha256
追加7ac1e262423598f1477825882f78ededc98b44bf0136f059e438391aa0e7a686 
sha256 
sha256
プリペンド9ee83975bef756160275a336203059109fd4336572e5e47e9a3edadb82a8934c 
sha256 
sha256
追加7a3229b63fc7a88d4edde4aa5b855416265842120fde246462271e5418f895bd 
sha256 
sha256
先頭に追加a4c712ca130f63862f329874f11466eb74ee7b505c191344ee11b30d14ca4946 
sha256 
sha256 
append 13bf98cdb708ed3321b8d48ff290c5bdbefa6fb9be34717e97a3f3cfa9b87994 
sha256 
sha256 
prepend d2aec8bd2edf2d6d10606df92f1b8b53a97362d7aba7d3fa15bf55c0aab94e35 
sha256 
sha256 
verify BitcoinBlockHeaderAttestation(518387) 
#ビットコイン ブロック マークル ルート b4f71191dc633cfb125543211022b1059d78b42a359408da5958fc15231ef6de

ユースケース

アプリケーションとしては、防御出版物[10]やデジタルマルチメディアファイルの整合性[11]などがある。

注記

  1. ^ 現時点では、検証はサポートされていませんが、 LitecoinEthereumでもタイムスタンプを付与できます。
  2. ^ カレンダーが起こす最悪の事態は、ユーザーのデータにタイムスタンプを付けないことです。そうなった場合、ユーザーは自分でタイムスタンプを付けることができます。
  3. ^これらのコミットメント操作をうまく組み合わせることで、 マークルツリーをトラバースできる点に注目してください。ビットコインと同様に、OTSはこのコミットメント構造を利用して、1つのトランザクションに複数のタイムスタンプを詰め込みます。
  4. ^ タイムスタンプはツリー構造をしており、開始ハッシュから複数のブランチがそれぞれ異なる認証へと繋がります。これにより、カレンダーがダウンした場合でもユーザーを保護する冗長性が確保されます。
  5. ^ ウェブサイトはタイムスタンプを作成および検証する最も簡単な方法ですが、安全性は低くなります。以前の方法とは異なり、検証は第三者によって行われるため、ユーザーはタイムスタンプを独自に検証することはできません。
  6. ^ 厳密にはフルノードである必要はありません。実際、アテステーションはブロックヘッダー上に保持されるため、プルーニングノードでタイムスタンプを検証できます。SPVノードはブロックヘッダーチェーン全体を保持しているため、理論的にはタイムスタンプを検証できますが、ブロックを検証しないため、プルーニングノードに比べてセキュリティははるかに低くなります。

参考文献

  1. ^ abc Todd, Peter (2016年9月15日). 「OpenTimestamps: スケーラブルで信頼性を最小限に抑えた分散型タイムスタンプをBitcoinで」 . 2018年5月5日閲覧
  2. ^ ab 「OpenTimestampsクライアント、最新バージョン」。GitHub 2024年12月31日閲覧
  3. ^ “OpenTimestamps コードリポジトリ”. GitHub . 2018年6月7日閲覧
  4. ^ 「OpenTimestampsウェブサイト」 。 2018年6月7日閲覧
  5. ^ Gao, Yuefei; Applications, Hajime (2017). 「ブロックチェーンに基づく分散型信頼タイムスタンプ」. IEEJ Journal of Industry Applications . 6 (4): 252– 257. doi : 10.1541/ieejjia.6.252 .
  6. ^ "opentimestamps-client · GitHub". GitHub . 2025年11月17日閲覧
  7. ^ abc Weilbach, William Thomas (2017年12月11日). 「デジタル証拠の完全性検証プロセスを支援する分散型台帳技術の実用化」(PDF) . 2018年4月18日時点のオリジナル(PDF)からアーカイブ。 2018年5月5日閲覧
  8. ^ 「OpenTimestampsクライアントリポジトリ」GitHub 。 2018年6月7日閲覧
  9. ^ 「python-opentimestampsのヘッダーマジック定義」GitHub 。 2018年6月7日閲覧
  10. ^ Douglas Heaven (2019年2月4日). Nature (ed.). 「生物学文献におけるビットコイン」. Nature . 566 (7742): 141– 142. Bibcode :2019Natur.566..141H. doi : 10.1038/d41586-019-00447-9 . PMID  30718888. S2CID  256769716.
  11. ^ Gipp, Bela; Kosti, Jagrut; Breitinger, Corinna. 「ビットコインブロックチェーンにおける分散型信頼タイムスタンプを用いたビデオの整合性の確保」(2016年). MCIS 2016 Proceedings .{{cite journal}}: CS1 maint: multiple names: authors list (link)
Retrieved from "https://en.wikipedia.org/w/index.php?title=OpenTimestamps&oldid=1329140785"