プログラミング
Show HN: レビュアーに再実行させることなく、コードが主張した内容を生成したことを証明する
Show HN: Prove your code produced your claims without making reviewers rerun it (github.com)
要約
K-Veritas Goは、計算実験のための改ざん防止検証ツールです。公開された結果を、それを生成した正確なコード、ハードウェア、および時間に、暗号署名付きPDFで結びつけます。このPDFは誰でも検証可能です。あらゆる言語で動作し、ランタイム依存性はゼロで、単一の静的バイナリです。Linuxではファイル/サブプロセスのアクティビティマップやハードウェア属性も提供し、実行の一貫性を検証します。
全文翻訳
K-Veritas Go
計算実験のための改ざん防止検証。
公開された結果を、それを生成した正確なコード、ハードウェア、および時間に、誰でも検証できる暗号署名付きPDFで結びつけます。
あらゆる言語で動作し、ランタイム依存性はゼロで、単一の静的バイナリです。
プラットフォーム。
検証、シール、証明、チェックアウト、ベンチマーク成果物、来歴、開示レベルはクロスプラットフォームです。
ファイル/サブプロセスのアクティビティマップとプロセスごとのハードウェア属性は、現在Linuxのみです。それ以外の場合は、システム全体の読み取りにフォールバックします。
インストール
プリビルドバイナリ: curl -fsSL https://github.com/27-GROUP/kveritas-releases/raw/main/bin/kveritas-linux-amd64 -o kveritas
chmod +x kveritas && sudo mv kveritas /usr/local/bin/
バイナリ: kveritas-{linux,darwin,windows}-{amd64,arm64}。
またはソースからビルドします(Go 1.22+): make build。
クイックスタート
kveritas init # セッションを開始します(デフォルトで編集済み)
kveritas run -- python train.py --epochs 90 # kveritas(任意のコマンド)の下で実行します
kveritas run -- python evaluate.py
kveritas seal --output report.pdf # 署名付きPDF(開示レベルでバンドル)
kveritas verify report.pdf # 検証します(サーバーをスキップするには--offlineを追加)
プロトコル行
これらを任意の言語で標準出力に印刷します。キャプチャされたすべてが署名付きレコードにバインドされます。
行
目的
KVERITAS_METRIC
name=<id> value=<float> [step=<label>]
メトリックを記録します。
KVERITAS_PHASE
name=<phase>
フェーズの境界(ハードウェアスナップショット)をマークします。
KVERITAS_CLAIM
metric=<id> value=<float>
ヘッドラインの主張をコミットします。
KVERITAS_INPUT
src=seed:<value>
乱数シードをコミットします。
KVERITAS_MODEL
params=<int> arch=<name> precision=<fp16|bf16|fp32>
モデルカード(計算コストにフィードします)。
KVERITAS_WORKLOAD
dataset_size=<int> epochs=<float> batch_size=<int> [seq_len=<int>]
ワークロードカード。
KVERITAS_ARTIFACT
role=model|dataset [name=<ref>] path=<file> visibility=public|private
モデルまたはデータセットを証明します。
一般的なメトリックも自動検出されるため(Keras履歴、sklearn CV、メトリックライクなローカル変数)、単純な実行では行は不要です。
HMCA(実行コヒーレンス)
メトリックに依存しません。報告された結果を見ません。
実行中、バックグラウンドサンプラーはプロセスごとのテレメトリ(CPU、メモリ、コンテキストスイッチ、ページフォールト、CPU周波数、I/O、およびGPUが使用されている場合はその使用率、メモリ、電力、温度)を約10 Hzで記録します。
シール時に、HMCAはそれらのチャネルが単一のプロセスの影として共変動するかどうかをスコアリングします。
実際の実行はすべてを1つのアクティビティから駆動しますが、偽造または再生されたトレースはそうしません。
結果はPASS(コヒーレント)、WARN、FAIL(非コヒーレント)、またはN/A(判断するにはテレメトリが少なすぎる)です。
軽い実行は、そのアクティビティに基づいて判断され、軽いことを理由にペナルティを受けることはありません。
Web検証者はチャネルを時間とともにレンダリングします。
計算コストの証明
実行がモデルカードを宣言すると、シールは宣言されたFLOPsをハードウェアが物理的に提供できたものと比較する証明書を生成します。
バウンド
時間
宣言されたFLOPsがGPUピークx GPUアクティブ秒数プラスCPUピークx CPUコア秒数を超える場合、不可能。
エネルギー
宣言されたFLOPsが測定されたGPUジュールを最小エネルギー/ FLOPsで割った値を超える場合。
メモリ
宣言された重みが観測されたGPUメモリを超える場合(ソフト)。
時間バウンドはすべてのデバイスを合計するため、作業がGPU、CPU、またはその両方で実行されたかどうかに関わらずトリガーされます(アイドルCPUで宣言された175Bモデルは捕捉されます)。
バウンドは寛大なので、正直な実行はパスします。
カードがない、またはテレメトリがない場合はN/Aです。
ハード違反はFABRICATION-IMPOSSIBLEであり、署名にバインドされます。
来歴と開示
各実行は、コンテンツアドレス指定されたスナップショット(実行開始時のソース状態、各フェーズ、実行終了時、および変更されたもの)の署名付きタイムラインです。
Merkleリンクされ、署名にバインドされます。
セッションごとに、どの程度公開するかを選択できます。これは開示のみを制御し、整合性は常にコミットされます。
レベル
フラグ
レポート
編集済み(デフォルト)
kveritas init
仮名、名前なし、コンテンツ名なし
--show-names
実際のファイル名、コンテンツなし
open
--disclosure open
実際の名前 + チェックアウトバンドル(コード)
編集済みのレポートは機密性の高いものは何も公開しません(コード、名前、データ、重み、コマンドライン、またはソルトなし)。
サーバーはハッシュのみを受信します。
.kveritasignore のパターンは、バンドルにファイルを含めないようにします。
保留中のファイルはハッシュのみのリーフとしてコミットされ、保留中としてリストされるため、サイレントにドロップされることはありません。
選択的開示証明
他のファイルを表示せずに、署名付きスナップショットにファイルが存在したことを証明します。
kveritas prove report.pdf src/train.py
kveritas verify-proof kveritas-proof-train.py.json
エージェントセッションの場合、記録されたプロンプトまたは出力をコミットされたハッシュに対して証明し、他のすべてのエントリをハッシュのままにします。
kveritas harness-prove session.json 1 --input prompt.txt -o proof.json
kveritas verify-harness-proof proof.json
エントリをインデックスまたは--tool-use-idで選択します。
--inputでプロンプトを表示するか、--output-contentで応答を表示します。
チェックアウトバンドル
--disclosure open でのシールは report.pdf.kvbundle.zip を書き込みます。
これにはソースコンテンツ(コンテンツアドレス指定、重複排除)と各スナップショットのマニフェストが含まれます。
データセットや重みは含まれません。
そのハッシュはレポートにバインドされ、各ファイルはチェックアウト時に再ハッシュされます。
kveritas checkout report.pdf.kvbundle.zip run_end /tmp/out --report report.pdf
ベンチマーク成果物
モデルやデータを公開せずにベンチマークスコアを証明します。
公開成果物はコンテンツハッシュ(公開された参照と一致可能)を記録します。
プライベートなものはソルト付きのコミットメントのみを記録します。
計算コストのクロスチェックは、評価が実際のフォワードパスに必要な計算を消費したことを確認します。
エージェントセッション
kveritas init --harness は、指定されたエージェントアクション(Claude Codeフックのインストール)のハッシュチェーンログを記録します。
各エントリは、アクションを実行したエージェント、入出力コンテンツ(ハッシュ)、およびその位置をバインドし、存在、コンテンツ、順序を提供します。
サーバーはジェネシスとシールに署名します。
kveritas verify session.json はチェーンを再計算し、改ざんを正確なエントリにローカライズします。
各エージェントの属性ツリーがあります。
暗号プロトコル
canonical_json = sorted-keys compact JSON of the signing data
data_hash = SHA-256(canonical_json)
payload = "{data_hash}:{nonce}:{signed_at}"
signature = RSA-PSS-SHA256(payload, key=4096-bit)
visual_pdf_hash = SHA-256(visual PDF pages before the seal marker)
seal_block_hash = SHA-256(seal JSON before its own hash is inserted)
すべての値、公開鍵、およびcanonical JSONバイトは、%%EOFの後に%%KVERITAS_SEAL_BEGIN%%と%%KVERITAS_SEAL_END%%の間に埋め込まれます。
検証者は格納されているcanonical_jsonを直接ハッシュするため、検証は将来のフィールド追加に影響されません。
コマンド
コマンド
説明
init [--local] [--harness] [--disclosure redacted|names|open] [--show-names]
セッションを開始します。
run -- <cmd>
kveritasの下でコマンドを実行し、テレメトリとプロトコル行をキャプチャします。
seal [-o path] [--local-key pem]
セッションをPDFに署名します(開示レベルでバンドル)。
verify <report.pdf | session.json | proof.json> [--offline] [--bundle z] [--paper pdf]
ローカルチェックと完全なサーバー監査。
prove <report.pdf> <file...> / verify-proof <proof.json>
ファイルに対する選択的開示証明。
harness-prove <session.json> <index|--tool-use-id ID> / verify-harness-proof <proof.json>
記録されたプロンプト/出力の証明。
checkout <bundle.zip> <[run:]snapshot> <dir> [--report r.pdf]
スナップショットのファイルを再構築します。
check --claims c.json --report r.pdf / generate-claims --report r.pdf
ペーパークレームをチェックまたは派生させます。
status / update / clean
セッション状態、自己更新、セッションディレクトリの削除。
Web検証
kveritas.org/verify でレポートPDF(オプションでチェックアウトバンドルと原稿PDF)をアップロードすると、暗号署名、実行コヒーレンステレメトリグラフ、来歴、メトリック、AIコード監査、およびペーパークロスチェックが行われます。
アカウントは不要です。
リポジトリ構造
cmd/kveritas/
CLIエントリポイント
server/
アテステーションサーバー
internal/
セッション/
データモデル、.kveritas/
I/O
runner/
サブプロセスラッパー、テレメトリサンプラー
crypto/
RSA-PSS、SHA-256、canonical JSON
pdf/
自己完結型PDFライター
client/
アテステーションサーバークライアント
hardware/
ハードウェアスナップショット + プロセスごとのサンプリング(Linux)
provenance/
Merkleスナップショット、開示、証明、チェックアウト
tracer/
ファイル/サブプロセス