| share(シェア) | 秘密 w を 2 つの数に分けて、足すと w に戻るようにしたもの(w = s₁ + s₂ mod p)。片方だけ見ても w は分からない — ドリル A の 4 行目で、同じ share 1 から 3 通りの秘密が出る | share = 分け前。秘密の「分け前」を 1 人 1 つ持つ | ドリル A、スライド 24 |
| Beaver triple | 秘密と無関係な乱数 a, b とその積 c = ab の 3 つ組。share 同士は掛けられないので、前もって配った (a, b, c) の share を使い、d = A − a と e = B − b だけ公開して積の share を作る | Donald Beaver(1991)の手法。3 つ組なので triple | ドリル A 9〜12 行目、スライド 24 |
| co-SNARK | witness を秘密分散したまま、複数の証明者が協力して 1 つの SNARK を作る。出来上がる proof は 1 人で作ったものと byte 単位で同じ | collaborative(協調)SNARK | スライド 24、宿題 co-snark-prove |
| witness / public input | witness = 証明者だけが知る秘密の入力。public input = 検証者にも見せる入力。「∃w. C(x, w) = 1」の w と x | witness = 証人。「私はこれを知っている」の「これ」 | スライド 7、ドリル B 10〜13 行目 |
| zkVM | 回路を手で書く代わりに、「CPU の 1 ステップが正しい」制約を 1 回だけ書いた仮想計算機。上で走らせたどんなプログラムの実行も証明できる | zero-knowledge Virtual Machine | スライド 16〜17、宿題 zkvm-exploit |
| guest プログラム | zkVM の中で走るプログラム。宿題の guest_main。外側(host)が証明を作る | host(主人)の家に泊まる guest(客)。実行環境の内と外 | 宿題 zkvm-exploit |
| trace(実行トレース) | プログラムの実行を、1 ステップ = 1 行で並べた表。列は pc・レジスタ・メモリ操作など。ドリル B では「16 ビットの合計」1 列だけ | trace = 足跡。実行が残した足跡の一覧 | スライド 17、ドリル B 6 行目 |
| AIR / 隣接行制約 | 「i 行目と i+1 行目の関係はこうでなければならない」を式にしたもの。全行で 0 なら正しい実行。表を 1 か所いじると 0 でなくなる | Algebraic Intermediate Representation。代数(式)で書いた中間表現 | スライド 17、ドリル B 7〜8 行目 |
| 境界制約 | 表の最初と最後の行に課す条件。「最初は 0 から始まる」「最後の値が出力 y に等しい」 | boundary(境界)= 表の端 | スライド 17、ドリル B 9 行目 |
| soundness / zero-knowledge | soundness = 偽の主張が通らないこと。zero-knowledge = 証明から秘密が漏れないこと。別々の性質で、片方だけ壊れることがある(Zcash で壊れたのは soundness) | sound = 健全。「健全性」と「零知識性」 | スライド 31・33、ドリル C 9 行目 |
| commitment(預かり証) | 秘密を決めた、という証拠を先に出しておく値。C = H(k, r)。後で k, r を明かせば「あのとき決めていた」が示せるが、C から k, r は逆算できない | commit = 約束する。値を約束しておく | スライド 13、ドリル C 2 行目 |
| nullifier(使用済み札) | 引き出すときに公開する H(r)。同じ r からは同じ値が出るので、2 回目は「既出」で拒否される。しかし C = H(k, r) とは結びつけられないので、どの預入かは漏れない | nullify = 無効にする。使った札を無効化する | スライド 13・23、ドリル C 6〜8 行目 |
| Merkle membership | ハッシュを 2 つずつ束ねて木にし、根 1 つで全部の葉を代表させる。「私の葉は木にある」を、根と兄弟ハッシュの列(path)だけで示せる | Ralph Merkle の木。membership = 所属 | スライド 12〜13、ドリル C 3〜5 行目 |
| Verifiable FHE | FHE(暗号文のまま計算)に、「本当にその関数を計算した」証明を添えたもの。ユーザは暗号文の well-formedness を ZK で、サーバは評価の正しさを succinct な証明で示す | verifiable = 検証できる FHE | スライド 25〜27・41 |
| threshold FHE | FHE の復号鍵を 1 人が持たず、MPC で分散して持つ。t 人以上が集まらないと復号できない | threshold = しきい値。t 人というしきい値 | スライド 8・30 |
| PIR | データベースから「何番目を読んだか」をサーバに知られずに読む。FHE で「何番目か」を暗号化したまま取り出す | Private Information Retrieval(秘匿情報検索) | スライド 21 |
| zkTLS | Web サーバとの TLS 通信の中身を、MPC で分散したまま処理して「このサーバがこう返した」を第三者に証明する | zero-knowledge + TLS(HTTPS の暗号層) | スライド 21 |
| Semaphore | 「検証済みの集合に所属している」を匿名で証明し、nullifier で二重使用を防ぐ zk-SNARK の仕組み。Tornado Cash と同じ 3 点セット | semaphore = 手旗信号。身元を言わずに合図だけ送る | スライド 12・23 |
| program binding(プログラム束縛) | 証明を「どのプログラムの実行か」に結びつけること。プログラムのハッシュを公開入力に入れる。ドリル B の program_id | bind = 結びつける | ドリル B 10〜11 行目 |
| succinct(簡潔) | 証明の検証が、計算をやり直すよりずっと安いこと。π_eval に要るのはこれで、zero-knowledge は要らない | succinct = 簡潔な。短くて速い | スライド 27 |