タイムスタンプ API — クイックスタート
HTTP 1 回。鍵も、アカウントも、登録フォームもありません。ファイルはそのまま手元に残り、送られるのは SHA-256 だけです。
# 現在の世界共通時刻 curl https://beattime.live/api/now/ # ファイルを記録:ハッシュは手元で計算し、ハッシュだけを送る sha256sum contract.pdf curl -X POST https://beattime.live/api/proof/stamp \ -H 'Content-Type: application/json' \ -d '{"digest":"<64 hex characters>"}'
連携はこれで全部です。登録するものも、更新すべきトークンも、交渉する割り当ても存在しません。このサービスは無料で、これからも無料です。
返ってくるもの
記録はその時点の状態を返します。しばらくすると同じハッシュがより多くを返します。まず署名、次に外部のアンカーです。
- digest
- 送信した SHA-256(小文字)。あなたのファイルについて私たちが見るのは、これだけです。
- beat
- .beat 時間での時点。タイムゾーンのない、世界共通のひとつの読み値です。
- utc
- 同じ時点を UTC で、マイクロ秒まで。
- seq
- 追記専用ログでの位置。番号が重複することも、動くこともありません。
- week
- この記録が属するマークル木の ISO 週。
- chain_hash
- この記録を直前の記録に結び付けます。記録を削除すれば連鎖が目に見えて壊れます。
- week_root
- 週のマークル・ルート。週が締まるまでは暫定で、まだ動きます。
- inclusion_proof
- 兄弟ハッシュと、その位置(L か R)。これを使えばルートを自分で再計算できます。証明が私たちから独立するのは、この一点によります。
- root_signature
- 凍結された週のルートに対する Ed25519 署名。週が封印された時点で現れます。
- ots_status
- ビットコイン・アンカーの状態。確認待ちの間は pending、確定後は bitcoin とブロック高。
- anchors
- 週のルートを記録した銀行の参照番号。どのブロックチェーンにも依存しないアンカーです。
「週はまだ開いています」は正常な応答であり、エラーではありません。
新しい記録にはまだ署名もアンカーもありません。属する週がまだ封印されていないからです。封印は ISO 週の終わりに行われ、ビットコインの証明は一日ほど遅れて続きます。同じハッシュで後からもう一度問い合わせれば、欠けていた項目がそろいます。その間、記録された時刻は変わりません。
同じファイルを二度記録した場合
最初の記録が常に優先されます。同じハッシュをもう一度送れば、元の記録がそのまま返ります。時刻も連番も同じで、ステータスは 201 ではなく 200 です。ですから再送は安全です。応答が失われても、慌てたクライアントが再試行しても、時刻が後ろにずれることはありません。
201 Created → 初めて記録された 200 OK → すでに記録済み。元のタイムスタンプが返る 400 → ハッシュが 16 進 64 文字ではない 429 → 上限に達した。時間をおいて再試行
上限と CORS
上限は IP アドレスごとで、ひとりの利用者が他を締め出さないためにあります。通常の連携が行うことに対しては、意図的に余裕を持たせています。
| エンドポイント | 上限 |
|---|---|
| POST /api/proof/stamp | 20 / min |
| GET /api/proof/verify | 120 / min |
| GET /api/proof/cert/<digest> | 10 / min |
| その他(時刻・変換・同期) | 300 / min |
すべてのエンドポイントが Access-Control-Allow-Origin: * を返すので、ブラウザーから直接呼び出せます。Tor 経由の要求は上限が高めです。ひとつの出口ノードの背後に多くの人がいるからです。
用意済みのクライアント
単一ファイル、依存なし、Apache-2.0。Python、PHP、JavaScript、C#、C++17 に対応。ひとつをプロジェクトにコピーするか、完全なリファレンスをご覧ください。
これが何でないか
これを土台にする前に知っておくべきことです。レビューで気づくより、ここで申し上げたいと思います。
- eIDAS にいう適格トラストサービスではありません。したがって第 41 条の法的推定は生じません。これは証拠であって、判断ではありません。
- 証明するのは存在と同一性であり、著作者ではありません。 タイムスタンプは「このバイト列はその時点までに存在し、以後変わっていない」と述べるだけで、誰が作ったか、内容が真実かは語りません。
- RFC 3161 ではありません。 現時点でこのプロトコルには対応していないため、それを前提とする
openssl tsやsigntoolはこの API と話せません。 - 記録は公開され、消えません。 ハッシュは取り下げられないので、一覧に載ってほしくないものは記録しないでください。