零知識證明

一階約束系統

一階約束系統(R1CS)是把算術電路轉成「一串 SNARK 能消化之簡單方程式」的標準中間格式。每一條約束都恰好含一次乘法,寫成 (A · s) × (B · s) = (C · s) 的形式,其中 s 是解向量,內含常數 1、公開輸入、以及所有私密見證值,而 A、B、C 則是挑選 s 之線性組合的係數向量。「一階(rank-1)」之名指的就是每條約束只有這一個乘積:每一列把兩個線性組合相乘,再令結果等於第三個。

把計算編碼成 R1CS,意味著把它一次拆成一個乘法。要證明你知道某個 x 滿足 x^3 + x + 5 = 35,你引入中間導線——令 v1 = x·x,再令 v2 = v1·x——把每一步各自寫成一條一階約束,再加上一條最終的線性約束,強制 v2 + x + 5 = 35。整個電路就成了這樣一組列;一組見證滿足整個系統,當且僅當每一列的乘積方程式都成立。加法與常數倍會免費地被吸收進 A/B/C 的線性組合裡,這正是 R1CS 以乘法約束來計成本的原因。

R1CS 是 Groth16 與其他以 QAP 為基礎之 SNARK 所吃進的輸入:那三個係數矩陣被內插成多項式,而「同時滿足所有約束」便化為單一一個多項式整除性檢查。PLONK 這類較新的系統改用更靈活的「PLONK 式」算術化,搭配自訂閘與查表,而非純粹的 R1CS,但 R1CS 仍是經典的教學模型,也是 Circom 與 snarkjs 等廣泛使用之工具鏈的原生格式。

// witness s = [1, x, v1, v2]
// C1:  x  * x   = v1        (so v1 = x^2)
// C2:  v1 * x   = v2        (so v2 = x^3)
// C3:  (v2 + x + 5) * 1 = 35   (final linear check)

R1CS 以乘法、而非加法來計成本:線性組合是免費的,但每一次乘法都是一條約束,因而直接等於證明時間。把邏輯改寫成用更少的乘法,正是 SNARK 最佳化的第一根槓桿。

又称
R1CS