Sum-Check Protocol
By Youngwan Kwon
2025.10.27
본 글에서는 상호작용 증명(IP)의 예시, Sum-Check 프로토콜에 대해 알아보겠습니다.
Settings
유한체 F 위에서 정의된 v-변수 다항식 g(x1,…,xv) 를 생각해보겠습니다. 이 때 Sum-check 프로토콜은 증명자가 다음 함숫값들의 합을 검증자에게 증명하는 것입니다:
해당 S 값을 계산하는 데에는 O(2v⋅T) 시간이 소요됩니다 (g의 함숫값을 구하는데 걸리는 시간을 T라 하겠습니다.) 그러나 Sum-check 프로토콜을 이용하면, 해당 S 값을 O(v+T) 정도 시간으로 검증 가능합니다!
Protocol
Sum-check 프로토콜은 다음과 같이 이루어집니다:
증명자 P가 검증자 V에게 C1 (증명하고자 하는 S) 값을 전송합니다.
First round
P가 V에게 일변수 다항식
을 보냅니다.
V는 g1(X1)이 차수가 최대 deg1(g) (= 다항식 g의 변수 x1에 대한 차수) 인 일변수 다항식이며
이 성립하는지 확인합니다. 그렇지 않을경우 reject 합니다.
이 때, g1(X1) 가 정의에 따라 계산되었다는 사실 또한 P의 주장이기에 이를 검증해야 합니다. 우리는 이를, x1=r1 으로 고정한 뒤 (v−1)-변수 다항식 g(r1,x2,…,xv) 에 대해 재귀적으로 Sum-check 프로토콜을 돌리는 방식으로 해결합니다.
V 가 랜덤한 값 r1∈F 를 골라 P에게 전송합니다.
V 가 랜덤한 값 rj∈F 를 골라 P에게 전송합니다.
V 가 랜덤한 값 rv∈F 를 골라, g에 한번의 오라클로 g(r1,…,rv) 값을 구합니다. 그리고 gv(rv)=g(r1,…,rv) 가 성립하는지 확인하고 아닐경우 reject 합니다.
만약 V가 한번도 reject 하지 않았다면, 프로토콜을 종료하고 accept 합니다.
Completeness & Soundness
명제 4.1. Sum-check 프로토콜은 완전성 오류 δc=0 이고 건전성 오류 δs≤vd/∣F∣ 인 IP 시스템이다. (d=max1≤j≤vdegj(g))
Proof. 먼저 완전성은 자명합니다. j-번째 라운드까지 증명자가 올바른 gj(Xj)를 보냈다면, gj(Xj)는 차수가 최대 degj(g) 이고 gj−1(rj−1)=gj(0)+gj(1) 는 정의에 따라 성립합니다.
이제 건전성 오류 δs≤vd/∣F∣ 를 증명해보겠습니다. 이를 위해 C1=S에 대해서 위 프로토콜이 accept할 최대 확률을 계산하면 됩니다. 이 경우 적어도 하나의 라운드 j에서 P가 전송한 gj(Xj) 가 실제 다항식
와 다르면서 (gj=sj), 랜덤한 rj∈F에 대해 gj(rj)=sj(rj) 가 성립해야합니다. 두 다항식의 차수는 최대 d이므로, Schwartz-Zippel Lemma에 의해 그 확률은 최대 d/∣F∣ 입니다. 따라서 Union bound에 의해:
Costs
Communication
Rounds
V time
P time
O(∑i=1vdegi(g)) field elements
v
O(v+∑i=1vdegi(g))+T
O(∑i=1vdegi(g)⋅2v−i⋅T)
표 4.1. Sum-check 프로토콜의 costs.
각 라운드에서 P 가 V 에게 전송하는 다항식 gj(Xj)는 계수 표현으로 1+degi(g) 개 field elements 입니다. 더 나아가 라그랑주 보간법을 활용하면 다항식을 계수 표현이 아니라 함숫값 1+degi(g) 개로도 나타낼 수 있습니다. 따라서 총 v 라운드에 대해 ∑i=1v(1+degi(g))=v+∑i=1vdegi(g) 개 원소가 커뮤니케이션에 사용됩니다.
V의 시간복잡도는 각 라운드에서 gi(ri) 값을 계산할 때 1+degi(g) 번 연산이 필요하고, 최종 라운드 v에서 g에 오라클할때 T의 시간이 소요되므로 총 O(v+∑i=1vdegi(g))+T 입니다.
P의 시간복잡도는 각 라운드에서 다항식 gj(Xj) 를 계산하는 것이 전부인데, 이는 위에서 살펴보았듯 라그랑주 보간법을 사용하여 i=0,1,…,degj(g) 일 때 함숫값 gj(i)를 계산함으로써 가능합니다:
따라서 P의 시간복잡도는 O(∑i=1vdegi(g)⋅2v−i⋅T) 입니다.
앞으로의 예시에서 어떤 함수 g의 multilinear extension g~ 에 sum-check를 적용시키는 경우가 많은데, 이 경우 모든 라운드 i에 대해 degi(g)=O(1) 이므로 전체 시간복잡도는 다음과 같이 정리됩니다.
Communication
Rounds
V time
P time
O(v) field elements
v
O(v+T)
O(2v⋅T)
표 4.2. 모든 i에 대해 degi(g)=O(1) 인 경우 Sum-check 프로토콜의 costs.
Application 1: #SAT
변수 x1,…,xn의 Boolean formula 란 각 leaf node가 변수 xi나 그 negation을 라벨로 가지며, 각 internal node 는 두 자식 노드의 AND나 OR 을 취한 결과를 가지는 binary tree 입니다. 이 때 트리의 각 노드를 gate라고 부르며, 트리의 root는 해당 formula의 출력값입니다.
이 때 (Boolean) formula에서 이진 트리 조건을 없애고, 각 노드의 결과값을 재사용할 수 있게 한 것 (각 노드의 in-degree (fan-in)는 2이나 out-degree (fan-out)에 제한이 없음) 이 (Boolean) circuit 입니다.
#SAT problem

사진 4.1. 4개 변수에 대한 크기가 8인 Boolean formula.
크기 S=poly(n) 인 Boolean formula ϕ에 대해, ϕ(x):{0,1}n→{0,1} 를 n개의 boolean 변수 값을 입력으로 받아 formula의 출력값을 반환하는 함수로 정의하겠습니다. #SAT 문제란 ϕ(x)=1이 되도록 하는 입력 x의 개수를 찾는 문제입니다. 현재까지 알려진 #SAT 문제를 해결하는 가장 효율적인 알고리즘은 n에 대한 지수 시간을 필요로 합니다. 그러나, 해당 문제를 검증하는 IP는 Sum-check 프로토콜을 적용하여 효율적으로 수행할 수 있습니다.
Protocol
우리가 계산하고자 하는 값은 다음과 같이 정의할 수 있습니다:
먼저, 다음과 같은 과정을 거쳐 boolean formula ϕ를 arithmetic circuit ψ로 전환시킵니다: (Arithmetic circuit이란 연산이 finite field F 위의 덧셈과 곱셈으로 이루어진 circuit을 말합니다.) ϕ의 모든 AND 게이트를 곱셈 게이트로 변환하고 (AND(y,z)↦y⋅z), 모든 OR 게이트는 다음 연산을 수행하는 3개의 게이트로 변환합니다 (OR(y,z)↦y+z−y⋅z). 변수의 negation은 yˉ↦1−y 게이트로 변환합니다.
이렇게 만든 ψ는 모든 x∈{0,1}n에 대해 ψ(x)=ϕ(x) 를 만족하며, circuit의 크기는 최대 3S 입니다. 뿐만아니라 모든 게이트가 arithmetic하므로 해당 ψ(x)를 변수 x1,…,xn에 대한 n-변수 다항식 g로 표현할 수 있습니다. 여전히, ∑x∈{0,1}nϕ(x)=∑x∈{0,1}ng(x) 가 성립하므로 다항식 g에 대해 sum-check 프로토콜을 수행하면 끝이 납니다.
Costs
한가지 주목할 부분은, ∑i=1ndegi(g)≤S 라는 것입니다. (이는 귀납법으로 증명할 수 있습니다. 자세한 증명은 연습문제로 해보시길 바랍니다.) 또한 임의의 g(r) (r∈Fn)을 계산하는 시간 T는, circuit ψ의 각 게이트를 따라 결과값을 계산하면 되므로 O(S) 입니다. 위 결과들을 앞서 정리한 sum-check의 cost에 적용시키면, 건전성 오류 δs≤S/∣F∣이며 총 cost는 다음과 같습니다:
Communication
Rounds
V time
P time
O(S) field elements
n
O(S)
O(2n⋅S2)
표 4.3. 변수 n개, 크기 S의 Boolean formula ϕ에 대한 #SAT 프로토콜의 costs
Application 2: Counting Triangles in Graphs
n개의 정점에서 정의된 (undirected) 그래프 G=(V,E) 와 그 인접행렬 A∈{0,1}n×n 를 고려하겠습니다. Counting triangles 문제는 (i,j),(j,k),(k,i)가 edge로 연결된 세 쌍 i,j,k∈V의 개수를 세는 것입니다. 해당 문제 또한 Sum-check를 적용하여 검증할 수 있습니다.
Protocol
먼저, 인접행렬 A를 행렬이 아니라 index (i,j)∈{0,1}logn×{0,1}logn 를 input으로 받아 Aij (∈{0,1}) 를 출력하는 함수 fA(i,j) 로 생각해보겠습니다. 그러면 우리가 구하고자 하는 값 Δ는 다음과 같이 계산할 수 있습니다 (중복 제거를 위해 1/6이 곱해짐에 유의하세요):
이제 fA의 multilinear extension f~A에 대해, (3logn)-변수 다항식 g를 다음과 같이 정의합니다:
이렇게 하면 6Δ=∑x,y,z∈{0,1}logng(x,y,z) 이므로 6Δ 값을 g에 대한 Sum-check 프로토콜으로 검증할 수 있습니다. 해당 프로토콜의 cost를 살펴보면, 라운드는 총 3logn 개이고 P는 O(23logn)=O(n3) 개 점에서 g를 계산하면 됩니다. g는 (2logn)-변수 MLE 다항식 3개의 곱이므로, MLE 함숫값 구하기 테크닉을 이용하면 O(n2)에 구할 수 있습니다. 따라서 V는 O(n2), P는 O(n3⋅n2)=O(n5) 시간복잡도가 걸립니다.
Improvement
이 때 Δ를 다음과 같이 인접행렬을 이용하여 계산할 수도 있습니다:
마찬가지로 fA2,fA를 구한뒤 g(X,Y)=f~A2(X,Y)⋅f~A(X,Y) 에 대해 Sum-check 프로토콜을 적용하면 됩니다. 이 경우 커뮤니케이션과 V의 cost는 동일하나, 이후 살펴볼 MatMult의 Method 3를 이용하면 P를 O(n2) 까지 줄일 수 있습니다!
Application 3: Super-Efficient MatMult
MatMult 문제는 주어진 두 n×n 행렬 A,B에 대해 둘의 곱 C=AB를 증명하는 것입니다. 우리는 2장에서 MatMult 문제를 효율적으로 증명하는 Freivalds' Algorithm을 살펴본 바 있습니다. 그러나 해당 알고리즘은 검증을 위해 곱셈 결과 행렬 C∈Fn×n 전체를 전송했습니다. 이번 단원에서는 Sum-check 프로토콜을 활용하여 커뮤니케이션 cost를 O(logn)으로 줄여보겠습니다.
Protocol
앞서 살펴봤듯이 행렬 A,B,C를 다음과 같은 fA,fB,fC:{0,1}logn×{0,1}logn→F 함수로 해석할 수 있습니다:
이제 f~A,f~B,f~C 를 각 함수 fA,fB,fC 의 MLE라고 하겠습니다. 행렬 곱의 정의에 의해, 다음이 성립합니다:
이제 임의의 r1,r2∈Flogn 에 대해 f~C(r1,r2) 값을 확인함으로써 위 식이 제대로 계산되었는지 검증할 수 있습니다. (Schwartz-Zippel Lemma에 의해 이 방법은 sound합니다.) 따라서 r1,r2를 고정한 뒤 (logn)-변수 다항식 g(z):=f~A(r1,z)⋅f~B(z,r2)에 대해 Sum-check 프로토콜을 적용하여 f~C(r1,r2) 값을 검증합니다.
Costs
먼저 g는 각 변수의 차수가 최대 2인 (logn)-변수 다항식이므로, 라운드는 총 logn 번이 필요하고, 총 커뮤니케이션은 O(logn) field elements가 들게됩니다.
V의 시간복잡도: 검증자 V가 할 일은 sum-check 프로토콜의 마지막에 g(r3)=f~A(r1,r3)⋅f~B(r3,r2) 값을 계산하는 것입니다. 이 때 각 함숫값 f~A(r1,r3) 와 f~B(r3,r2) 을 계산하는 것은 지난 3장 MLE의 함숫값 구하기를 이용해 O(n2) 으로 가능합니다.
P의 시간복잡도: 매 k 라운드마다 P는 다항식
를 검증자 V 에게 보내야합니다 (s1,…,sk−1←F는 고정). 이 때 g(z)=f~A(r1,z)⋅f~B(z,r2) 는 multilinear한 두 다항식의 곱이므로 각 변수의 최대 차수가 2이고, 따라서 gk(Xk)는 최대 2차 다항식입니다. 그러므로 다항식 전체를 보내는 대신, 세 개의 함숫값 gk(0),gk(1),gk(2)만 전송해도 검증자는 2차 다항식을 복구할 수 있습니다. 따라서, P는
꼴의 모든 점에서 g의 함숫값을 구해서 더하기만 하면 됩니다. 이러한 점의 개수는 3⋅2logn−k=3n/2k 개 입니다. 이제 모든 라운드에서 해당 함숫값을 계산하는 3가지 알고리즘을 비교분석 해보겠습니다.
Method 1, O(n3)
각 라운드 k에 대해 나이브하게 모든 3n/2k 점에서 g를 계산해봅시다. 앞에서 g 함숫값을 구하는데 O(n2)이 드는것을 확인했으므로 전체 시간복잡도는 다음과 같습니다:
Method 2, O(n2logn)
두번째 방법에서는 한가지 관찰이 필요합니다. 행렬 A의 각 원소 Aij는 구하고자 하는 n/2k개 점들 (일반성을 잃지 않고 Xk=0,1,2인 경우 중 하나만 고려) 중 단 하나의 점에서만 g 함숫값에 기여합니다. 따라서, 우리는 각 점들에 대해서 반복문을 돌리는 것이 아니라 각 인덱스 (i,j)∈{0,1}logn×{0,1}logn 에 대해 반복문을 수행할 수 있는것입니다.
그 방법을 조금 더 자세히 알아보겠습니다. 우리는 g(z)를 구하기 위해 f~A(r1,z) 와 f~B(z,r2)를 계산했습니다. 이 때 MLE의 정의에 의해,
가 성립합니다. MLE 기저 다항식 χ에서 다음을 관찰해보겠습니다. z=(s1,…,sk−1,0,bk+1,…,blogn) 의 꼴일때, (앞서 zk=0,1,2 중 0을 가정했습니다)
이 때, (bk+1,…,blogn)∈{0,1}logn−k 임에 주목하면 마지막 항이
임을 알 수 있습니다. 따라서 우리는 고정된 (i,j)에 대해 Aij가 오직 하나의 z=(s1,…,sk−1,0,jk+1,…,jlogn) 의 함숫값에만 기여한다는 것을 확인했습니다. 이제 나머지 과정은 straightforward합니다. χi(r1)⋅χ(j1,⋯,jk−1)(s1,⋯,sk−1)⋅χjk(0) 항의 가능한 모든 값은 3장 MLE의 함숫값 계산 테크닉을 이용해 O(n2) 시간으로 pre-compute 해놓을 수 있습니다. 이제 모든 인덱스 (i,j)에 대해 iterate하면서 대응되는 하나의 z에 대해,
로 업데이트 해주면 끝이납니다. 이 과정 또한 O(n2)이 소요되므로, 라운드 k에 대해 총 O(n2) 시간이 걸립니다. 이를 logn개 라운드에 대해 반복하므로, 총 시간복잡도는 O(n2logn) 입니다.
Method 3, O(n2)
세번째 방법에서는 각 라운드에서 전 라운드에서 계산한 f~A(r1,z) 를 사용하는 메모이제이션 기법을 이용합니다. 우리는 각 라운드 k=1,2,…,logn 에서 z=(s1,…,sk−1,{0,1,2},bk+1,…,blogn) 일 때 함숫값 f~A(z) 를 모두 계산해야 합니다. 먼저, 모든 z∈{0,1}logn 에 대한 f~A(r1,z) 를 계산합니다 (이는 Method 2의 방법으로 O(n2) 시간에 가능합니다.)
이후 f~A(z) 가 multilinear 하다는 성질로부터 다음 점화식이 성립함을 관찰합니다:
위 식을 이용하면, 라운드 k 일 때 z=(s1,…,sk−1,{0,1,2},bk+1,…,blogn):(bk+1,…,blogn)∈{0,1}logn−k에 대한 f~A(z) 를 다음과 같이 계산할 수 있습니다.
따라서 라운드 k−1 까지 f~A(z) 가 모두 계산되어 있다면 라운드 k에서는 O(2logn−k)=O(n/2k) 시간과 공간복잡도로 f~A(z) 를 계산할 수 있습니다. 이 과정을 라운드 k=logn 까지 반복하면 총 시간복잡도는 O(∑k=1lognn/2k)=O(n) 입니다.
종합하면, 초기값을 계산하는데 O(n2) 이 걸리고 이를 이용해 O(n) 시간으로 나머지 값들을 계산할 수 있으므로 총 시간복잡도는 O(n2) 입니다.
Communication
Rounds
V time
P time
O(logn) field elements
logn
O(n2)
T+O(n2)
표 4.4. Super-Efficient MatMult 프로토콜의 costs. T는 행렬곱 C=AB를 계산하는데 걸리는 시간.
Conclusion
다음 글에서는 유용한 IP 시스템인 GKR 프로토콜에 대해 다뤄보겠습니다. 긴 글 읽어주셔서 감사합니다.
Last updated
