zkFMI
English

QOMM: 依頼を見ない見積市場

依頼も、値付け規則も、市場の様子も明かさずに見積を出す。16 社のメイカーの値付け規則を、誰も見ない依頼に対して適用する。それを行うのは、honest majority(過半数は正直)を仮定する 7 ノードの秘密計算である。開かれるのはキー(比較に使う値)一つだけ、つまり勝者とその commitment 済みの価格である。それが提示された中の最小値だったことは、あとから誰でも検証できる。

出典: qomm/README.md, AUDIT.md, DEPLOYMENT.md, BINDING.md, POSITION.md · MP-SPDZ malicious-shamir, N=7, T=2

取り除く問題

ある投資家が 1 万株を売りたくて、16 社のマーケットメイカーに価格を尋ねる。15 社は負ける。しかし負けた 15 社も、誰が、何を、どちら向きに、どれだけ、いつ欲しがったかを知ってしまう。これは実装の欠陥ではない。尋ねることが教えることになる仕組みでは、価格を尋ねるだけでこの代価を払う。QOMM では、尋ねても教えることにならない。

何をするか

flowchart TB
    U["利用者の依頼
銘柄、数量、売買の向き"] subgraph transport["一定間隔、加法シェア、中継段"] REL["全利用者が毎スロット同じバイト列を送る
依頼の有無にかかわらず"] end subgraph mpc["計算ノード 7 台、malicious 安全な Shamir"] direction TB PRICE["全メイカーの値付けを同時に行う
回路の幅で済み、追加コストはない"] GATE["資格判定
比較 1 層"] TOUR["二分トーナメント
比較 log2(M) 層"] PRICE --> GATE --> TOUR end OUT["開かれるキーは一つ:
勝った価格と勝者"] U --> REL --> PRICE TOUR --> OUT NOTE["痕跡は同一
誰かが依頼したかどうかにかかわらず"] REL -.- NOTE mpc -.- NOTE classDef secret stroke:#f2b880,stroke-width:2px classDef mech stroke:#9bb0ff,stroke-width:2px classDef ok stroke:#5ee0c1,stroke-width:2px class U,REL secret class PRICE,GATE,TOUR mech class OUT ok

転送

注文があってもなくても、毎スロット、各ノードへ同じ長さのメッセージを一通送る。必要なときだけ発言する設計では、発言そのものが「依頼があった」という告知になるからである。依頼は端末を出る前に、ノードごとの加法シェアに分割される。シェア一つだけを見ても、一様な雑音にしか見えない。中継段はスロットの境界まで保持してから順序を混ぜる。回路の中では秘密の is_real ビットが、メイカーの状態を動かすかどうかだけを決める。実際の依頼があるスロットと、見せかけのスロットは、ラウンド数(286)も参加者あたりのバイト数(22.2045 MB)も同一である。壁時計時間の差は 0.01 s で、繰り返し計測のばらつき 0.085 s の内側にある。

値付け規則

メイカーの規則は小さな式言語で書く。検査器はその規則から、回路に必要なビット幅、出力範囲が有界であること、監査上の義務を、証明なしに導く。その上で MP-SPDZ コンパイラ向けの .mpc プログラムを生成する。qomm-mpc crate はエンジンをリンクし、自身のカウンタを読む。だからラウンド数は推定ではなく、通信チャネルごとの内訳として得られる。

監査

quote proof(qomm-proofs/src/quote_proof.rs)は、Baum–Damgård–Orlandi の構成を具体化したものである。入力を提供する者は Pedersen commitment を公開する。SPDZ のオンライン段階は線形演算だけなので、監査人はそれを commitment の上で再生できる。監査するのは「回路が正しく評価された」ことではなく、市場についての言明である。すなわち、各メイカー i について key_i は commitment 済みの規則を commitment 済みの依頼に適用した値であり、開かれた勝者はそれらのキーの最小値である。最小であることと、その中の一つであることが合わされば、それが最良執行である。メイカー 4 社で証明 152 ms、検証 173 ms。8 社で 307 と 350。

2026-09-07 まで、開かれた勝者の値をその commitment に結び付ける段では、一般の開封証明を検査していた。これでは、公開された値は commitment された値に束縛されない。現在は C_winner − g·value について、値が 0 であることを固定した開封証明を検査する。詳細は暗号技術の使い方現状ページにある。

ノードの不正は受領証で捕まえる。各ノードは毎スロット一通の受領証を出すので、「応答しなかった」ことを第三者に示せる。7 ノード、6 スロットにわたる障害注入では、二重の発言(equivocation)、メイカーの脱落、古い状態、受領証の欠落を捕捉した。取り逃がしはゼロ、正直なノードへの誤った告発もゼロだった。罰として没収する預り金は、障害の性質に応じて決めた。二重署名はそれ自体で証拠として完結するので最も重い。受領証の欠落は正直なノードにも起こるので最も軽い。

監査可能にするコスト

この系統の研究はどれも、結果を検証できるようにするために何かを払っている。それを計測したのは 6 件のうち 2 件だけである。

得られるもの計測したコスト
Rivinius et al. 2022公開検証可能性 + 説明責任 + 頑健性素の SPDZ に対してオンライン段階が 11× から 20×
QOMM公開検証可能性壁時計時間 1.07×、通信量 2.00×、ラウンド 1.00×
計算を検証可能にする代償、素のプロトコル比 0 5 10 15 20 25 倍率 Rivinius 2022|検証可能 + 責任特定 + 頑健: 20× 20× Rivinius 2022 検証可能 + 責任特定 + 頑健 Rivinius 2022|(RTT 100 ms): 11× 11× Rivinius 2022 (RTT 100 ms) zkFMI|検証可能、通信量: 2× zkFMI 検証可能、通信量 zkFMI|検証可能、壁時計時間: 1.07× 1.07× zkFMI 検証可能、壁時計時間
前提が異なることを両方向から述べる。彼らの構成は責任特定と頑健性を与え、こちらは与えない。彼らの負荷はすべての乗算の内側にあり、こちらは体を広げることによる。artifact: binding_chain.json、matched_field.json。

差が出るのは、監査をどこに取り付けるかである。Rivinius はすべてのワイヤのすべてのシェアに commitment を置く。だから commitment の方式が乗算の内側に入る。ここでは commitment をメイカーの規則に対して置き、機構がその規則に適用されたことを事後に一つの証明で示す。だから MPC はより大きい体で走らせるだけでよい。16 バイトの要素が 32 バイトになり、それが 2.00× のすべてである。Rivinius の構成は責任の特定と頑健性も提供する。こちらは配備しているエンジンではどちらも提供しない。比較にはこの両面を含めるべきである。

ノードをどこに置くかが暗号より大きく効く

ラウンド数は 70 で一定で、メイカー数にも銘柄数にも依存しない。したがって壁時計時間には、最も遅いリンクでの 70 × RTT 分の純粋な待ち時間が含まれる。

ノード配置(M=16、31 ビット)片方向遅延見積 1 件
同一ラック0 ms0.166 s
同一都市圏1 ms0.617 s
国内広域5 ms1.619 s
東京・シンガポール間15 ms3.876 s
近接 6 台、遠隔 1 台(120 ms)120 ms22.998 s
全台遠隔(120 ms)120 ms26.148 s

artifact(計測の出力ファイル): placement.json, sites.json · 1 台の機械上での遅延の模擬。往復時間は再現するが、ジッタ、損失、クロックのずれは再現しない

見積 1 件、メイカー 16 社、ノード配置別 0.1 1 10 100 秒(対数目盛) 同一ラック|0 ms: 0.17 s 0.17 s 同一ラック 0 ms 同一都市圏|1 ms: 0.62 s 0.62 s 同一都市圏 1 ms 国内|5 ms: 1.62 s 1.62 s 国内 5 ms 東京–シンガポール|15 ms: 3.88 s 3.88 s 東京–シンガポール 15 ms 6 台が近く|1 台が 120 ms: 23.0 s 23.0 s 6 台が近く 1 台が 120 ms 全台が遠い|120 ms: 26.1 s 26.1 s 全台が遠い 120 ms
70 ラウンドでメイカー数・資産数に依存しないため、壁時計時間は最も遅い経路の RTT × 70。遠いノードが 1 台あるだけで、7 台すべてを遠くへ移した場合の 86% のコストになる。artifact: placement.json、sites.json(1 台のホスト上で遅延を模擬)。

7 ノードを一つの都市圏に置くことは、暗号面の改良をどれだけ積み重ねるより 6 倍効く。その一方で共謀の相関を高めるが、これは技術ではなく統治の問題である。妥当に見える妥協案として、近接 6 台と遠隔 1 台がある。しかしこの配置には、7 台すべてを遠隔に置く場合の 86% のコストがかかる。委員会の中で、独立性を 1 台ずつ買い足すことはできない。線形モデルは 120 ms で 18 s と予測したが、実測は 23 s だった。検証済みの距離の 8 倍の地点で、28% の過小予測である。この外れは記録してある。

26 s が問題になるかどうかは別の問いで、UniswapX の約定に照らして答えた。Ethereum の 2 ブロックにまたがる価格の変動(3.6 から 8.6 bp)は、単一ブロックの中で市場が示すばらつき(4.8 から 7.5 bp)と同じ大きさである。26 s かかった見積は、瞬時の見積と区別できない。価格がそこまで精密に定まったことが、そもそもないからである。これは入手できる中で最も厳しい比較対象である。

公開する値には雑音を乗せる

市場が勝った見積を正確な値で公開すると、繰り返しを通じて値付け規則が漏れる。そのため見積は差分プライバシーの予算の下で開示する。本番用の公開経路は、7 つの MP-SPDZ プロセスの中で雑音を引く。そして結果、法人単位の予算の遷移、3-of-7 の証明書を、一つの不可分な操作で束縛する。この機構の雑音は、取りうる値の範囲(support)が有限である。だから自らを純粋な DP と言い換えず、計測した (ε, δ) を明示する(範囲 8 で δ 2.5e-4)。雑音がラウンドの 92.9% を占める。機構なしでは 2 ラウンドと 0.0022 MB、機構ありでは 28 ラウンドと 63.9 MB である。より安い構成も知られている(各参加者が手元で Pólya 分布のシェアを引く。2 ラウンド、標準偏差 1.18×)。これは意図して実装していない。

雑音を乗せないのは、決済済み取引の件数である。これはチェーン上で既に正確に公開されている。秘密なのは依頼の件数である。何も決済しなかった依頼は痕跡を残さない。そしてこの件数は、メイカーが他の手段では得られない分母である。BlockRangeQuery は、ブロック範囲の中の法人の異なり数を、感度 1 で売る。150,000 件の UniswapX 約定では、公開されている約定件数がその R² 0.95 から 0.97 を説明する。残差、つまり注文の流れの集中度こそが、ε で実際に買えるものである。活動量は無料で、集中度が売り物である。

まだ開いている隙間

メイカーは自分の規則を 7 ノードに配るが、自身はその一つではない。転送層は、ノードが commitment 済みのシェアを受け取ったことを証明する。しかしそのシェアをノードが MP-SPDZ に投入したことは、何も証明しない。参加者ごとの入力検査は今では、配られた値と異なる値を投入したノードを、回路の中で名指しする。コストは追加 1 ラウンドと通信量 0.39% 増、健全性は 2⁻²⁴⁵ である。この検査の以前の版は、その証明を書いている途中で健全でないことが分かった。ノードが、自分に読める係数の核の中から誤差を選べたのである。チャレンジは今では入力段階の後に引く。判定は修復ではない。どちらの機構も名指しはするが、防ぐことはしない。安全性のページが、各機構を説明責任の段階の上に位置づけている。

デモは席で分ける

すべてを一画面に映す見せ方では、誰が何を知っているかについて何も主張できない。そこでデモは席を配る。ブラウザ一つが一つの役割を受け持ち、その役割が見るはずのものだけが送られる。開発者コンソールに映るのも、席を持たない人に見えるものと同じである。価格を受け取るのはテイカーの席だけである。メイカーの席は注文を見ることがなく、約定後に自分の約定分だけを受け取る。ノードの席はシェアを持ち、不正もできる。不正したときに何が起きるかは三通りに分かれる。観察者の席はすべてを映すが、これはどの配備にも存在しない眺めであることを毎フレーム表示する。

cargo run -j 4 --release --manifest-path rust/Cargo.toml -p qomm-harness --bin serve_demo
http://<host>:8800/?seat=node:3&label=Rin
http://<host>:8800/?seat=maker:1&label=Ann
http://<host>:8800/?seat=observer

QOMM が主張しないこと

  • Prime Match より速いとは言わない。見積 1 件は RTT 15 ms で 3.6 s、大陸間では 23 s(メイカー 16 社、4 銘柄)。Prime Match は J.P. Morgan で 30 分ごとに動き、semi-honest(手順は守るが中身は覗く)なハブを持つ。単位が異なるので、比を一つの数字に縮めるべきではない。しかしどう読んでも、ここに速いものはない。
  • MPC を公開監査可能にしたのは QOMM ではない。Baum、Damgård、Orlandi が 2014 年に行った。ここでは彼らの構成を具体化している。
  • プライバシーは 3 ノードの共謀に耐えない。quote proof の正しさは、7 ノードすべてが共謀しても保たれる。
  • 7 拠点での配備は一度も行っていない。地域間の数値は、1 台の機械上で遅延を模擬したものである。
  • 古さ(staleness)の計測には選択の偏りがある。UniswapX の約定は、成立した取引だけを含むからである。

仕組みの詳細は監査のページ、体の問題は束縛のページ、何を選ぶかは配置のページにある。

技術スライドから実装へ

37項目の暗号技術カタログで用途・数式・証明者・制約を確認し、予約から決済・回収までで状態遷移をたどれます。暫定結果とchallengeは、両デモの検証方式とnative決済の境界を説明します。