Qstamp / 仕組み
アーキテクチャ

記録から、量子コンピュータの登場後も有効なレシートへ。

Qstamp は、すべての記録を非公開に保ち、証明のみを検証可能にします。記録、そのフィンガープリント及びそのレシートは運用者の手元にとどまります。Quantova Virtual Machine 上の Quanta コントラクトを通じてアンカーされるのは、ソルト付きの単一のコミットメントのみであり、耐量子のバリデーター委員会がこれを確定させます。

運用者システム QSTAMP SDK · ローカル QUANTOVA VIRTUAL MACHINE バリデーター委員会 記録アクション、ファイル ダイジェストSHA3 256ビット ソルト付きリーフ0x00 · タグ · alg · ソルト ハッシュツリーRFC 9162 ルート コミットメント0x02 · コンテキスト · ルート 署名済みトランザクションML DSA 65 · 手数料上限 Quanta コントラクトStamped イベント発行 ブロックとイベントルートコミットメントを格納 ファイナリティ証明書ML DSA 65 委員会 レシート返却記録ごとに1件 · JSON アーカイブ記録と共に保管 運用者システム QSTAMP SDK · ローカル QUANTOVA VIRTUAL MACHINE バリデーター委員会 記録アクション、ファイル ダイジェストSHA3 256ビット ソルト付きリーフ0x00 · タグ · alg · ソルト ハッシュツリーRFC 9162 ルート コミットメント0x02 · コンテキスト · ルート 署名済みトランザクションML DSA 65 · 手数料上限 Quanta コントラクトStamped イベント発行 ブロックとイベントルートコミットメントを格納 ファイナリティ証明書ML DSA 65 委員会 レシート返却記録ごとに1件 · JSON アーカイブ記録と共に保管
図1 · スタンプ処理。運用者境界を越えるのは32バイトのコミットメントのみです。破線はネットワーク操作を表します。
実例

SI 企業が Qstamp を導入する方法。インストールから、裁判所が検証できるフィンガープリントまで。

4つのフェーズ、すなわちセットアップ、統合、運用及び証明からなる13の手順です。表示されるすべての値は Quantova Virtual Machine 上での Qstamp の実際のデプロイから取得したものであり、Qstamp を統合するすべての企業が同じ手順に従います。

qstamp · 導入及び証跡
セットアップ統合運用証明
セットアップ

SDK をインストールする

SI 企業は、エージェントを実行するサービスにオープンソースの Qstamp SDK を追加する。依存関係は、耐量子署名のための QCore の1つのみである。

$ npm install @quantovainc/qstamp
added 2 packages

$ npx @quantovainc/qstamp --version
0.1.4
パッケージ@quantovainc/qstamp 0.1.4
署名ライブラリ@quantovainc/qcore 0.4.2
ライセンスApache 2.0 又は MIT · 著作権 2026 Quantova Inc
セットアップ

署名アカウントを作成する

署名鍵は、運用者自身のサーバー又はハードウェアセキュリティモジュール上で作成される。そのアカウントには資金が供給され、Quantova ネットワークに一度だけ登録される。

$ openssl rand -hex 32 > signer.key && chmod 600 signer.key
$ node account.js
address  Q1NUR6ETECQXEVE77TJ9YPZ6WAWYMT45WCJANV5J43X93SF79DWE0S0D572X
status   registered, ready to stamp
アカウント署名ML DSA 65 · FIPS 204
鍵の保管運用者のみが保持し、Quantova には一切送信されない
セットアップ

コントラクトを選択又はデプロイする

企業は、公式の Qstamp コントラクトを通じてスタンプするか、Quanta テンプレートから独自の発行者コントラクトをデプロイする。独自のコントラクトは、qdock.io の QIDE において証明済みの Quanta コンパイラによりコンパイルされ、QMask ウォレットでデプロイされる。

公式コントラクトQ1D6TZFRL203P3DFAFVUPZUHGUCM4EWGH6063XNS42VA5235RNQWXS7FXEWX
機関コントラクトQ1DAJ3TZ7AN8JVY2MUCWYUWVPXEJSHH53JNDZ48L07RT6948J2N5QSNF3787
コンパイル済みコンテナ監査済みハッシュ 7cd509e2d21bc4a3 と一致
展開ドメイン署名済みのすべてのオーダーに結び付けられる、新たに生成されたランダムな64ビット値
統合

モデルを登録する

モデルの使用が承認されると、そのパスポートが記録種別 ai_model でスタンプされる。これにより、以後のすべての判断を、その判断を行った正確なモデルに結び付けることができる。

model-passport.jsonモデル登録簿
{
  "evaluation": {"approved_by": "Model Risk Committee", "auc": 0.871},
  "model": "risk-model 3.2.1",
  "time": "2026-10-09T09:39:27.273Z",
  "training_data": "dataset manifest 2026-09-30",
  "weights_sha3": "f01483b8e6269760c5c2e2025875b6e5d1b16402443e9a98d73e0a43156bf17b"
}
記録種別4 · ai_model
フィンガープリント1b15118c7e2f1e482f87821a43d8062585b85e93d061bef1f6d429f621cfc850
トランザクションQTX19P000T7X6TPFPG8XMXV2GPU0XAR94H36LF7TKP6GGTXN2NQPWLZQ8PZJFY
ブロック2,011,764
統合

エージェントランタイムを接続する

エージェントランタイムは、すべてのツール呼び出し及び判断を正規化された記録として書き出し、企業自身のログに保管し、1分ごとにバッチをアンカーする。レシートはアクションとともに保存される。

agent-runtime.js運用者のシステム
const qstamp = require('@quantovainc/qstamp');
const batch = [];

agent.on('action', (action) => {
  const bytes = Buffer.from(canonicalJson(action));
  log.write(bytes);
  batch.push({ digest: qstamp.digestBytes(bytes) });
});

setInterval(async () => {
  const records = batch.splice(0);
  if (records.length === 0) return;
  const receipts = await qstamp.stamp({
    seed, index: 0, kind: 'ai_agent_action', records,
    onPending: savePending,
  });
  receipts.forEach(storeBesideAction);
}, 60000);
運用

エージェントが行動する

銀行の与信判断エージェントが融資を承認する。そのアクションは、エージェント、モデル、ポリシー、ツール、判断及び時刻を含む正規化された JSON 記録として書き出される。

credit-batch-1/action-04.json運用者のシステム
{
  "agent": "credit-decision-agent-07",
  "amount_usd": 125000,
  "applicant": "APP-54a49c823275",
  "decision": "approve",
  "human_review": false,
  "model": "risk-model 3.2.1",
  "operator": "Example Bank plc",
  "policy": "retail-lending-policy 2026-10",
  "reasons": ["score_above_threshold"],
  "risk_score": 645,
  "time": "2026-10-09T09:39:25.132Z",
  "tool": "credit_bureau.lookup"
}
運用

SDK がフィンガープリントを生成する

運用者自身のシステム上で、SDK は当該記録の SHA3 256 ビットのフィンガープリントを計算する。記録そのものが銀行の外部に出ることはない。

$ npx @quantovainc/qstamp hash action-04.json
  action-04.json
アルゴリズムSHA3 256 · FIPS 202
フィンガープリントefb393903da28c2a6221179be662a2bbe2be06dfbd1acdee26bb057b6d2fb11f
運用

ソルト付与とバッチ化

フィンガープリントは新たに生成されたランダムなソルトと結び付けられ、同一バッチの他のアクションとともにハッシュツリーに格納される。6件のアクションが1つのツリールートを共有する。

リーフH(0x00 ‖ QSTAMP/LEAF/V1 ‖ alg ‖ digest ‖ salt)
ソルトd275e738d46530b36f2c90e48a16bcd6e37fa9480378eb253c4e7a66a6a6b710
バッチサイズ6件のアクション
ツリールート34f64b12e5b363f1add6c48c0f85ebd60e4c2d421e5559f5d7b88717db205c54
運用

1つのコミットメント

ルートは、チェーン、公式コントラクト、署名アカウント、記録種別及びバッチサイズに結び付けられる。その結果が1つの32バイトのコミットメントである。

コミットメントH(0x02 ‖ QSTAMP/ROOT/V1 ‖ genesis ‖ contract ‖ sender ‖ kind ‖ size ‖ root)
記録種別6 · ai_agent_action
値6068a3e9625471530eda32f3292a9ac667c4f543281d62b12c62ad3481f07e0a
運用

ML DSA 65 による署名

SDK は、Quantova 仮想マシン上の Qstamp Quanta コントラクトを呼び出す1件のトランザクションを送信する。このトランザクションには、耐量子署名である ML DSA 65 で署名される。

トランザクションQTX1V53JW528S64SZYD6EDZ563N0PUUA2ARGNQHV4LTJMNH24PQS5VPQTAH8RQ
署名者Q1NUR6ETECQXEVE77TJ9YPZ6WAWYMT45WCJANV5J43X93SF79DWE0S0D572X
コントラクトQ1D6TZFRL203P3DFAFVUPZUHGUCM4EWGH6063XNS42VA5235RNQWXS7FXEWX
署名ML DSA 65 · FIPS 204
手数料バッチ全体で 0.005 TQTOV
運用

オンチェーンで確定

バリデーターは耐量子署名によりブロックを確定する。コントラクトは、コミットメントを Stamped イベントに記録する。スタンプは1秒未満で確定した。

ブロック2,011,753
時刻2026-10-09 09:39:25 UTC
イベントStamped · selector 5a110849
イベントデータsigner ‖ commitment ‖ kind
✓ 確定済み · 公式コントラクトにより記録
運用

エクスプローラーで閲覧可能

誰でも、Quantova の公開エクスプローラーである QVMScan でトランザクションを開き、コミットメント、署名者、記録種別及びブロックを確認することができる。

qvmscan.io/tx/QTX1V53JW5…PQTAH8RQ
ステータスSuccess
ブロック2,011,753
送信元Q1NUR6ETECQXEVE77TJ9YPZ6WAWYMT45WCJANV5J43X93SF79DWE0S0D572X
送信先Q1D6TZFRL203P3DFAFVUPZUHGUCM4EWGH6063XNS42VA5235RNQWXS7FXEWX
Qstamp の証跡Stamped · Official Qstamp contract · ai_agent_action
コミットメント6068a3e9625471530eda32f3292a9ac667c4f543281d62b12c62ad3481f07e0a
実際のトランザクションを開く
証明

裁判所がエージェントの行為を問う

銀行は記録とそのレシートを提出する。検証者は、フィンガープリント、ツリールート及びコミットメントを再計算し、同一のコミットメントがオンチェーンに存在することを確認する。1桁でも変更すれば、検査は失敗する。

$ npx @quantovainc/qstamp verify action-04.json.qstamp.json --file action-04.json
pass format · pass contract · pass content · pass inclusion
pass chain · pass transaction · pass event · pass block
VALID  stamped no later than 2026-10-09T09:39:25Z in block 2011753

$ npx @quantovainc/qstamp verify action-04.json.qstamp.json --file altered.json
FAIL content  the content does not match the fingerprint in the receipt
INVALID
元のフィンガープリントefb393903da28c2a6221179be662a2bbe2be06dfbd1acdee26bb057b6d2fb11f
改変後のフィンガープリント93b2b98383cd8fc1d71c9727c358b077149123050b4e1ac78654e1889f37c086
スタンプの手順

7つの定められた手順。

各記録のフィンガープリントを計算

SDK は、出力256ビットの SHA3、又は既存システムがすでに使用している場合には出力256ビットの SHA2 を計算します。

各リーフへのソルトとラベルの付与

オペレーティングシステムの乱数生成器から得た新規の32バイトのソルトを、ドメインラベル QSTAMP/LEAF/V1 及びアルゴリズム識別子とともにダイジェストに束縛します。

バッチツリーの構築

リーフは RFC 9162 に従って結合されます。リーフとノードのハッシュには異なるプレフィックスを使用し、第二原像に関する曖昧性を排除します。

コミットメントの導出

ルートを、ジェネシスハッシュ、コントラクト、署名者、記録種別及びバッチサイズと束縛して、1つの32バイト値にします。

署名と送信

コミットメントは、ML DSA 65 で署名されたトランザクションで送信されます。手数料には署名前に上限が設定され、計量された手数料のうち使用されなかった部分は返金されます。

記録と確定

Quanta コントラクトが Stamped イベントを発行します。バリデーター委員会は約0.2秒でブロックを確定させます。

レシートの発行

各記録は、ソルト、包含パス及びアンカーを保持するレシートを受け取ります。非公開の復旧ファイルにより、処理の中断に備えます。

レシートの構造

小さく、自己記述的で、検証可能。

contract.pdf.qstamp.jsonqstamp receipt 1
{ "format": "qstamp-receipt/1", "chain": { "id": "Q-test-net-1", "genesis": "ca91e093…" }, "contract": "Q1D6TZFRL203…", "kind": "6", "record": { "alg": "sha3-256", "digest": "9f07acaf…", "salt": "5e1c02d4…" }, "proof": { "index": 2, "size": 8, "path": [ … ] }, "root": "b3f1…", "anchor": { "tx": "QTX1TYDCHMSD…", "height": 1506979, "block": "QBK1…", "time": 1791430364, "sender": "Q1NUR6ETECQX…" } }

レシートには記録のいかなる部分も含まれません。ただしダイジェストとソルトを保持するため、対象となる記録と同等の注意をもって取り扱われます。

バッチ処理

対数サイズの証明、一定のコスト。

任意のサイズのバッチが1件のトランザクションでアンカーされます。各記録は、バッチサイズの対数に比例してのみ長さが増加するパスによって、バッチへの所属を証明します。

リーフ 0リーフ 1リーフ 2リーフ 3リーフ 4リーフ 5リーフ 6リーフ 7ノードノードノードノードノードノードルート強調表示 · リーフ 2 と、そのハッシュが入力されるノード。包含パスは各階層の兄弟、すなわちリーフ 3、ノード(0,1) 及びノード(4..7) であり、8リーフに対して3ハッシュ。 ルート ノード ノード ノード ノード ノード ノード リーフ 0 リーフ 1 リーフ 2 リーフ 3 リーフ 4 リーフ 5 リーフ 6 リーフ 7
図3 · 包含パスはバッチサイズの対数に比例して増加します。100万件の記録に必要な兄弟ハッシュは20個です。
検証

発行者ではなく、数学を信頼する。

検証は3つの結果のいずれかを返します。「有効」は、すべてのリンクが成立していることを意味します。「無効」は、少なくとも1つのリンクが成立しないことを意味します。「判定不能」は、ネットワークを参照できなかったことを意味します。判定不能の結果が有効として報告されることはありません。

ローカル検査 · ネットワーク不要 · 信頼不要 アンカー検査 · QVM 1 · 内容ダイジェスト再計算 2 · リーフダイジェスト · ソルト · alg 3 · 包含ルートへのパス 4 · コミットメント全コンテキストを束縛 5 · トランザクション確定 · 署名者 · データ 6 · イベント公式コントラクト 7 · ブロック識別子 · 時刻 判定3つの結果のいずれか ローカル検査 · ネットワーク不要 · 信頼不要 アンカー検査 · QVM 1 · 内容ダイジェスト再計算 2 · リーフダイジェスト · ソルト · alg 3 · 包含ルートへのパス 4 · コミットメント全コンテキストを束縛 5 · トランザクション確定 · 署名者 · データ 6 · イベント公式コントラクト 7 · ブロック識別子 · 時刻 判定3つの結果のいずれか
図2 · 検証。手順1から4は、すべて検証者のマシン上で実行されます。手順5から7は、Quantova ネットワーク上のアンカーを確認します。

フェイルクローズ

到達不能なエンドポイント、途中で切れた応答又は不正な形式のデータによって、有効との判定が生じることは決してありません。

固定された公式コントラクト

カスタムデプロイが明示的に信頼されていない限り、レシートはそのネットワークの公式コントラクトに対してのみ検証されます。

正確な時刻

ブロック時刻は減少することがなく、バリデーターの時計との差が15秒以内である場合にのみ受け入れられます。