この研究の進め方
このスタックは、標準的な暗号部品の組み合わせである。特徴があるのは暗号そのものではなく、各リポジトリが自らに課している規律の方である。主張を評価する読者は、その規則を知っておいてほしい。このサイトの数値に読む価値があるのは、その規則があるからである。
数値は手で書かない
報告する数値にはすべて、artifacts/ 配下の artifact(計測結果のファイル)と、それを書き出した Rust バイナリがある。DeFMI 論文や監査論文などの文書は、その JSON から make で生成する。だから本文中の数字が、元の計測からずれることはない。計測に、同梱していないもの(MP-SPDZ、2 台目のホスト、市場データの配信)が必要な場合、バイナリはその旨を出力して失敗する。既定値で代用はしない。ホストには host-a、host-b、host-c のラベルを付け、較正値(スカラー乗算 1 回と範囲証明 1 回の所要時間)を数値の脇に書く。同じ機械でも、別の時刻には 1.5 倍遅かったことがあるからである。
予測は実行前に書き、外れは残す
各計測文書は表で終わる。何を予測し、何を計測し、外れがどちらの方向だったかの表である。当たった予測だけを見せる文書は、規律を報告しているのではなく宣伝している。設計変更の大半は、外れから生まれた。net-net ネッティングは gross の 8 分の 1 と予測したが、計測では 1.62× だった。サイクル単位の attestation(署名付きの証明書)があるのはそのためである。審査証明(vetting)の検証は、群(crowd)の大きさが倍になるごとに倍になると予測したが、1.4× にとどまった。既定の群が 16 ではなく 128 なのはそのためである。頑健な復元は 1.4× のコスト増と予測したが、計測では 1.4× から 6.4× の節約だった。
最悪の外れは、最初の教訓として残している。MPC の体を commitment の群に合わせるコストが 7 倍だという数値を、三つのリポジトリとスライド一式に載せ、四つの決定の前提にした。その間、ツールは実行のたびに本当の理由(コンパイルフラグ)を出力していた。算術と計測が食い違うとき、その食い違いこそが所見である。なぜかを問わずに計測の側を採った代償は、四つの節の書き直しだった。
主張の撤回は公開で行う
初期稿にあった三つの主張を、撤回済みとして一覧にしている。それぞれに、対応する先行論文を添えてある。一つ目は、本研究が MPC を公開監査可能にしたという主張(Baum–Damgård–Orlandi 2014)。二つ目は、VOLE-in-the-Head commitment が耐量子の監査可能 MPC への新しい経路だという主張(Baum–Zok 2026)。三つ目は、これが金融に配備された最初の秘密計算だという主張(Prime Match 2023)。最も近い五つの論文のうち二つは、自分たちの検索ではなく、第三の論文の関連研究の節を通じて見つけた。同じことが二度起きたので、そのことも書き残している。
レビューの所見は記録に残す
二回のレビューを、所見ごとに記録している。何を確認して健全と判断したか、何を受け入れなかったかも含む。レビューが見つけた健全性の欠陥は、再現できる詳しさで書いてある。例を挙げる。積の証明は 2 × 3 = 8 を受理した。検証器が重み 1 を渡し、二つの等式を足し合わせていたためである。one-of-many 証明では、チャレンジが対象の集合を覆っておらず、要素の間で量を移せた。範囲証明は、公開された帯 [1, 200] の上で 256 を受理した。幅を 2 の冪に丸めていたためである。回路のフラグが、メイカーが有効かどうかを判定する部分(active gate)を落としていたため、撤回したメイカーが勝ち得た。いずれも修正済みで、修正の内容も書いてある。コードを信頼できるかを知りたい読者は、仕組みより先にレビューを読むべきである。
すべての文書は、それがしないことで終わる
決済論文は、まだ欠けているものの一覧で終わる。規制の対応表は、主張してよいことといけないことの一覧で終わる。脅威モデルは、防御していないものを列挙する。現状文書は、実装済み・受入済み・本番を区別する。このサイトでは、それらの一覧を弱めずにそのまま載せている。システムが何をするかという主張は、何をしないかという主張と並べて初めて意味を持つからである。
異常時は止める、平文へ切り替えない
MPC エンジンが無いとき、あるいは参加者が落ちたとき、市場は止まる。平文の計算には切り替えない。依頼は、都合のよい場所で再計算するのではなく、暗号化した永続キューに残す。そこで再送を待つ。再送は冪等で、同じ依頼を何度送っても結果は変わらない。検証できない検証器は「受理した」とは言わず、「構文は通った」とだけ言う。one-of-many の復号器は、容量を超えたら推測せずに拒否する。容量の外で誰かを名指しするのは、沈黙より悪いからである。健全に再開封できない commitment 方式は、制約を文書に書いて済ませるのではなく、誤りを返す。
TEE は信頼境界の外
ここにある設計はどれも TEE(信頼実行環境)に依拠しない。CPU 製造者の attestation(正当性の証明)鍵、エンクレーブの実装、マイクロアーキテクチャのサイドチャネルを、信頼境界に加えない。TEE を使う競合の方が速いところでは、比較の中でそう書き、その速さと引き換えに何を信頼しているかも書く。
回数は回数、時間は時間
ラウンド数とバイト数は、ホストが違っても小数第 4 位まで一致する。だから直接比べる。時間は同じホストの上でだけ比べる。ホストをまたぐ比率には、ホストの差を含むと明記する。間違った結果を計算した実行の時間は、時間として扱わない。どの実験条件も、時計を読む前に、平文の参照実装と結果を照合する。
どの段階の数値かを書く
この研究の予測のうち三つは、量を挙げながら、それがどの段階(前処理か実行時か)の量かを言わなかったために外れた。前処理を、段階を分けないハーネスで計測した結果は 2 桁ずれた。コンパイルフラグの件では、コンパイル時の体の選択と実行時の選択を混同した。頑健性の予測は、オンライン段階の数値に対しては正しく、合計に対しては誤っていた。このサイトでは、乗算 1 回あたりのコストにはすべて、どの段階のものかを明記している。
文章は性質を守らない、コードが守る
「handle(口座の識別子)は市場ごとに別になる」という性質は、コードになる前に文章として書かれていた。ライブラリには handle を導出する手段がなく、素直に統合するとこの性質は完全に失われた。しかも、性質は保たれていると信じられていた。いまはコードになっている。呼び出し側に任せるのではなく、使われる場所で強制する。最初に思いつく方式を実際に動かし、それでは連結できてしまうことを示すテストも付いている。同じ規則から、「受付、担保の差入、限度、支払は一つの事象であるべき」という文も、できているように匂わせる一文ではなく、未実装の印を付けた明文の要件になった。