01 / SIGNED RECORDS
署名された記録
一件ごとの署名は確かめられる。しかし、このままでは前後のつながりは分からない。
OPEN SOURCE / SELF-HOSTED
データが通った道を、検証できる形で残す。
誰が何を受け取り何を出したかを署名付きで記録し、処理の経路としてつなぐ。
受け手が、自分の環境でその経路を確かめられる。
— 主張は、読むものではなく実行して確かめるもの。
TAMPER DEMO
3 組織を起動し、途中で payload を偽造する。下流には届かない。以下は実行の実出力。
手元で再現するのに要るのは Docker だけ:
git clone https://github.com/provin-line/e2e
cd e2e
make demo
初回はイメージのビルドを含めて数分、以降はおよそ 20 秒で完走する。assertion 付きの全量は scenarios/supplychain にある。
MANIFESTO
これは技術の未熟ではなく限界そのものである。
AI の台頭は、この限界を例外から常態に変えた。
検証不能な処理段 — AI 推論、人間の判断 — がパイプラインの標準部品になり、 同時に、もっともらしい成果物の偽造コストがゼロに近づいたことで、 「内容の出来栄えから信頼を推定する」という従来の経路が閉じた。
内容を保証できないなら、残る手段はひとつしかない。嘘の事後コストを上げることである。 事後コストは帰属なしには発生しない — 誰の嘘か特定できないものは、罰することも、 訴えることも、評判を下げることもできない。そして組織間で、単一の運営者を置かずに 帰属を成立させる方法は、境界ごとの署名の連鎖しかない。
この抑止には成立条件がある。守る価値のあるアイデンティティを持ち、帰結が届く相手にしか効かない。 だが、この条件は企業社会ではすでに満たされている。企業とは、失えば存続できない信用を 積み上げた主体であり、組織間の経済はもともと「名前を賭けた約束」で回ってきた。 契約も、監査も、簿記も、内容の真実を保証する装置ではない。嘘を帰属可能にする装置である。
ゆえに、AI 時代の信頼とは「内容が正しいことの証明」ではなく、 「すべての主張が、失うものを持つ主体に、否認不能に帰属していること」 である。 provin は、その帰属をデータパイプラインを用いて、組織間で、運営者なしに、 暗号的に成立させる選択である。
— 帰属は、意思決定の道具になる — 入口では断り、事後では辿る。
WHAT YOU CAN DO
入口の判断と、あとからの追跡。どちらにも同じ来歴記録を使う。
— 「含まれ得ない」と言えるのは、誰かが「これで全部だ」と保証したときだけ。
CLAIM SEMANTICS
すべての記録には、処理が何であったかの宣言 — transformationClaim — が乗る。その宣言が何を保証するかを確定させるのが、provin wire profile の仕事。
検証で本当に知りたいのは、しばしば「含まれているか」ではなく「含まれ得ないか」 — このロットは、あの出力に使われ得たか。この排除の推論を成立させるのは、署名でもハッシュ連鎖でもない。発行者が「宣言した入力が、この出力の情報源のすべてだ」と保証したこと — クレームの閉世界性である。
| ラベル | 閉世界性 |
|---|---|
provin:filter | closed — 宣言した入力が情報源のすべて |
provin:convert | closed |
provin:filter-convert | closed |
provin:aggregate | closed fold — 宣言した入力集合の畳み込み |
provin:enrich | conformant-closed — 排除推論は適合フローに限る |
provin:generate | open — 宣言した入力の外に情報源を認める |
provin:sink-receipt | identity — 変換ではなく受領 |
provin:enrich と provin:aggregate は同じ N:1 の形。しかし enrich はチェーンが覆わない外部データを結合するため、排除推論は適合フローに限って成立する。形では区別できないものを、クレームが区別する。provin:generate の支配的な情報源はモデルの重み、すなわち学習コーパス。これを aggregate と宣言すれば、何も閉じていない出力に閉世界の読みを偽って許可することになる。検証不能な処理段を、来歴の語彙として正しく扱う — マニフェストが立てた問題への、語彙のレベルでの答え。supplychain は、線形プロファイルに加えて入力集合の束縛(SOURCE_SET_BINDING)まで要求する厳格プロファイルと、検証済み evidence view に束縛された exact-view 配送を 3 組織構成で確認済み。 — 嘘のコストは、具体的な現場でだけ発生する。
USE CASES
provin が役に立つのは、データが組織やシステムの境界を越え、誰が扱い、何が入り、何が出たのかを受け手が確かめられなくなったとき。
受け渡しごとに「どの入力からどの出力を作ったと誰が主張しているか」を署名付き credential として記録し、受け手はその証拠を自分の環境と方針で確かめられる。 今あるリネージュ管理や業界システムを置き換えるのではなく、その管理が切れる受け渡し部分に、あとから検証できる記録を残す。
不具合の影響範囲をたどる
製造業のリコールや複数サービスをまたぐ ETL/ELT では、問題のある入力がどの出力まで使われたかを追う必要がある。
処理ごとの記録をつなぎ、問題のある入力からその先の出力までをたどる。
※ 公開 E2E のrecall で署名された入力から宣言された派生先(線形連鎖)への追跡を、branching で分岐・フィルタ配送を確認済み。
組織間で受け渡したデータを照合する
サプライチェーンや企業間 API では、どのデータを受け取り、何を返したのかを双方で照合できる記録が必要になる。
署名付き記録を受け手の環境へ持ち込み、その場で検証する。
※ 公開 E2E のsupplychain で、3組織を模したデータの受け渡しと検証を確認済み。
元のシステムがなくなったあとも検証する
監査の時点で、元のサービスや鍵の提供先が残っているとは限らない。それでも、当時の処理経路を確かめられる状態を保つ必要がある。
検証に必要な記録をまとめて保存し、稼働中のシステムから切り離した環境でも再検証する。
※ 公開 E2E のarchiveverify と aggregatebundle でオフライン検証を、auditsurvival で再起動後の永続性を確認済み。
処理の成功と配送の失敗を分けて残す
処理が終わったことと、次のシステムへ届いたことは同じではない。IoT やイベント処理では、この差をあとから判別できる記録が必要になる。
処理と送信の記録を分けて残し、「処理は成功したが届かなかった」状態を追う。
※ 公開 E2E のlosswindow で、配送ロスが送信記録に残ることを確認済み。
集約に使った入力を確かめる
集約値だけが残っていても、どのセンサ値や特徴量が使われたのかは分からない。出力と入力の組み合わせを残す必要がある。
入力の集合への署名付きコミットメントを記録し、特定の入力がその集合に含まれていたかを検証する。
※ 公開 E2E のsensoraggregate と aggregatebundle で、入力集合への署名付きコミットメントと包含照合を確認済み。
— 署名の連鎖は、データが動くその瞬間にしか作れない。
HOW IT WORKS
データが流れる、その場で来歴をつなぐ。
01
入力と直前の記録を受け取る
02
署名と連続性を確かめる
03
評価・変換を実行する
04
入出力を新しい記録に束ねる
05
データと来歴を次へ渡す
処理を始める前に、受け取ったデータと来歴記録を照合する。 処理が終わったら、生成側のプロセスが入力・宣言した処理・出力を署名付きで記録し、次へ渡す。 署名が証明するのは記録の帰属で、宣言された処理内容そのものの正しさではない。
あとからログを集めて推測するのではなく、データが動いた時点で来歴を残す。 受け手が証拠一式 — 記録に加えて、検証に要る鍵・コントローラ文書 — を保管しておけば、 発行元のデータベースが変わったあとでも同じ内容を検証できる。
CURRENT INTERFACES
現在の 0.x 実装で使える接続方法と実行構成。予定中のアダプタは含まない。
dPLaaX は、データを引き渡す境界で何を記録し、その記録をどうつなぎ、検証するかを定めるプロトコル。provin はその参照実装として、通信仕様(wire profile)、実行環境、各種サービス、運用者向け CLI を提供する。did:dplaax と dplaax.*.v1 は、このプロトコルで使う識別子と API の名前空間になる。
cmd/network(管理系)と cmd/pipeline(データ処理系)の 2 バイナリ構成。同一ホストでも別ホストでも動き、連携は wire 経由のみ。証拠保存はファイルベースで、現在の参照用ストアは YAML とファイル。provin node 自体は、データベースなしでも動作する。ストレージと PDP はインターフェースで差し替えられるが、データベースを使うレジストリや、特定のデータベース連携は同梱していない。選択する認証プロバイダー、PDP、アダプターによっては、別途データベースや外部サービスが必要。
— 一つの証明では、嘘は帰属できない。
WHY THE COMBINATION
署名が示すのは、一件の記録。前後の記録とログを重ね、処理の流れとして検証する。
検証結果
一件ずつの署名を一本の線につなぎ、どこへでも持ち出せる記録にする。これが provin の基本。
— 検証とは、他人の主張を自分の環境で再演すること。
VERIFICATION
最終出力だけを見ても、どの入力と処理からできたのかは分からない。前後の記録を照合し、その経路を追う。
EVIDENCE
すべての数字は公開 commit に固定されたスナップショット上で測定され、独立に監査できる。
改竄停止(公開 E2E)
0
改竄ペイロードの下流配送
三組織構成の E2E(単一ホスト・プロセス分離)で改竄を注入 — 中継は停止し、受信側の配送記録は増加しなかった
性能(bench)
~123 µs
クレデンシャルあたりの受理経路コスト
連鎖深さに線形 — メモリ内解決で深さ 512 まで実測
186 ms → 45 ms
解決キャッシュの効果(深さ 32 の配送)
1 ms/呼の解決遅延を課した条件で実測 — TTL・バイト数で有界なオプトイン実装
トランスポートをインプロセスのストアに置換して測定した値 — ネットワーク配備における下界。各ベンチマークは模していない要素を明記している。
— 何を保証しないかを言えることも、帰属の一部である。
SCOPE
確かめるのは、記録されたデータの受け渡しと、そのつながり。
GET STARTED
Go 1.25 でビルドできる。まずはテストを実行し、技術仕様ページのサンプルで署名付き記録と検証結果を確かめる。
git clone https://github.com/provin-line/oss
cd oss
make build
make test
認証を含む E2E 構成、CLI、設定例もリポジトリに入っている。固定した入力を使った検証サンプルは、技術仕様ページで確認できる。
STATUS
現在は 0.x の PoC。実装と E2E は公開済みで、手元でも動かして確かめられる。これは本番運用の認証ではなく、公開した試験条件での挙動を再現できる形で示すスナップショット。
現在の公開スナップショットは実証論文の評価ライン — provin OSS v0.3.0、provin e2e v0.2.0、provin auth v0.2.1、dPLaaX spec v0.1(draft)。公開 E2E は process 版と Docker Compose 版の両方で 11 シナリオ — 3 組織間の受け渡し、分岐、集約、リコール、再起動、配送ロス、オフライン検証 — を完走している。
認証(provin auth)の既定は LEGACY_DID_LOGIN@1 — DID Document の関係(authentication / assertionMethod)は検証しない。OWNER 契約(関係検証・三者 kid 一致・audience 必須)は main で配線済みで次リリースに乗る。現行リリース v0.2.1 は LEGACY のみ。
provin は 0.x の PoC。詳しい検証条件と対象範囲は、公開 E2E・技術仕様・実証論文(近日公開)に記載。