Sum-Check Protocol

본 글에서는 상호작용 증명(IP)의 예시, Sum-Check 프로토콜에 대해 알아보겠습니다.

Settings

유한체 F\mathbb F 위에서 정의된 vv-변수 다항식 g(x1,,xv)g(x_1,\dots, x_v) 를 생각해보겠습니다. 이 때 Sum-check 프로토콜은 증명자가 다음 함숫값들의 합을 검증자에게 증명하는 것입니다:

S:=b1{0,1}b2{0,1}bv{0,1}g(b1,,bv).S := \sum_{b_1 \in \{0,1\}} \sum_{b_2 \in \{0,1\}} \cdots \sum_{b_v \in \{0,1\}} g(b_1, \ldots, b_v).

해당 SS 값을 계산하는 데에는 O(2vT)O(2^v\cdot T) 시간이 소요됩니다 (gg의 함숫값을 구하는데 걸리는 시간을 TT라 하겠습니다.) 그러나 Sum-check 프로토콜을 이용하면, 해당 SS 값을 O(v+T)O(v+T) 정도 시간으로 검증 가능합니다!

Protocol

Sum-check 프로토콜은 다음과 같이 이루어집니다:

1

증명자 P\mathcal P가 검증자 V\mathcal V에게 C1C_1 (증명하고자 하는 SS) 값을 전송합니다.

2

First round

P\mathcal PV\mathcal V에게 일변수 다항식

g1(X1)=(x2,,xv){0,1}v1g(X1,x2,,xv)g_1(X_1)=\sum_{(x_2, \ldots, x_v) \in \{0,1\}^{v-1}} g(X_1, x_2, \ldots, x_v)

을 보냅니다.

V\mathcal Vg1(X1)g_1(X_1)이 차수가 최대 deg1(g)\deg_1(g) (= 다항식 gg의 변수 x1x_1에 대한 차수) 인 일변수 다항식이며

C1=g1(0)+g1(1)C_1=g_1(0)+g_1(1)

이 성립하는지 확인합니다. 그렇지 않을경우 reject 합니다.

이 때, g1(X1)g_1(X_1) 가 정의에 따라 계산되었다는 사실 또한 P\mathcal P의 주장이기에 이를 검증해야 합니다. 우리는 이를, x1=r1x_1=r_1 으로 고정한 뒤 (v1)(v-1)-변수 다항식 g(r1,x2,,xv)g(r_1,x_2,\ldots,x_v) 에 대해 재귀적으로 Sum-check 프로토콜을 돌리는 방식으로 해결합니다.

3

V\mathcal V 가 랜덤한 값 r1Fr_1\in\mathbb F 를 골라 P\mathcal P에게 전송합니다.

4

j-th round (1 < j < v)

P\mathcal PV\mathcal V에게 일변수 다항식

gj(Xj)=(xj+1,,xv){0,1}vjg(r1,,rj1,Xj,xj+1,,xv)g_j(X_j)=\sum_{(x_{j+1}, \ldots, x_v) \in \{0,1\}^{v-j}} g(r_1, \ldots, r_{j-1}, X_j, x_{j+1}, \ldots, x_v)

를 보냅니다. 마찬가지로 V\mathcal Vgj(Xj)g_j(X_j)이 차수가 최대 degj(g)\deg_j(g) 인 일변수 다항식이며

gj1(rj1)=gj(0)+gj(1)g_{j-1}(r_{j-1})=g_j(0)+g_j(1)

이 성립하는지 확인합니다. 그렇지 않을경우 reject 합니다.

5

V\mathcal V 가 랜덤한 값 rjFr_j\in\mathbb F 를 골라 P\mathcal P에게 전송합니다.

6

v-th round

P\mathcal PV\mathcal V에게 일변수 다항식

gv(Xv)=g(r1,,rv1,Xv)g_v(X_v)=g(r_1, \ldots, r_{v-1}, X_v)

를 보냅니다. V\mathcal Vgv(Xv)g_v(X_v)이 차수가 최대 degv(g)\deg_v(g) 인 일변수 다항식이며

gv1(rv1)=gv(0)+gv(1)g_{v-1}(r_{v-1})=g_v(0)+g_v(1)

이 성립하는지 확인합니다. 그렇지 않을경우 reject 합니다.

7

V\mathcal V 가 랜덤한 값 rvFr_v\in\mathbb F 를 골라, gg에 한번의 오라클로 g(r1,,rv)g(r_1,\ldots,r_v) 값을 구합니다. 그리고 gv(rv)=g(r1,,rv)g_v(r_v)=g(r_1,\ldots,r_v) 가 성립하는지 확인하고 아닐경우 reject 합니다.

8

만약 V\mathcal V가 한번도 reject 하지 않았다면, 프로토콜을 종료하고 accept 합니다.

Completeness & Soundness

명제 4.1. Sum-check 프로토콜은 완전성 오류 δc=0\delta_c=0 이고 건전성 오류 δsvd/F\delta_s\leq vd/|\mathbb F| 인 IP 시스템이다. (d=max1jvdegj(g)d=\max_{1\leq j\leq v}\deg_j(g))

Proof. 먼저 완전성은 자명합니다. jj-번째 라운드까지 증명자가 올바른 gj(Xj)g_j(X_j)를 보냈다면, gj(Xj)g_j(X_j)는 차수가 최대 degj(g)\deg_j(g) 이고 gj1(rj1)=gj(0)+gj(1)g_{j-1}(r_{j-1})=g_j(0)+g_j(1) 는 정의에 따라 성립합니다.

이제 건전성 오류 δsvd/F\delta_s\leq vd/|\mathbb F| 를 증명해보겠습니다. 이를 위해 C1SC_1\neq S에 대해서 위 프로토콜이 accept할 최대 확률을 계산하면 됩니다. 이 경우 적어도 하나의 라운드 jj에서 P\mathcal P가 전송한 gj(Xj)g_j(X_j) 가 실제 다항식

sj(Xj)=(xj+1,,xv){0,1}vjg(r1,,rj1,Xj,xj+1,,xv)s_j(X_j)=\sum_{(x_{j+1}, \ldots, x_v) \in \{0,1\}^{v-j}} g(r_1, \ldots, r_{j-1}, X_j, x_{j+1}, \ldots, x_v)

와 다르면서 (gjsjg_j\neq s_j), 랜덤한 rjFr_j\in\mathbb F에 대해 gj(rj)=sj(rj)g_j(r_j)=s_j(r_j) 가 성립해야합니다. 두 다항식의 차수는 최대 dd이므로, Schwartz-Zippel Lemma에 의해 그 확률은 최대 d/Fd/|\mathbb F| 입니다. 따라서 Union bound에 의해:

Pr[1jv (gjsjgj(rj)=sj(rj))]1jvPr[gjsjgj(rj)=sj(rj)]vdF.\Pr \left [\cup_{1\leq j\leq v}\ (g_j\neq s_j \land g_j(r_j)=s_j(r_j)) \right ] \leq \sum_{1\leq j\leq v} \Pr \left [g_j\neq s_j \land g_j(r_j)=s_j(r_j) \right ] \leq \frac{vd}{|\mathbb F|}.

Costs

Communication

Rounds

V\mathcal{V} time

P\mathcal{P} time

O(i=1vdegi(g))O(\sum_{i=1}^{v} \deg_i(g)) field elements

vv

O(v+i=1vdegi(g))+TO(v + \sum_{i=1}^{v} \deg_i(g)) + T

O(i=1vdegi(g)2viT)O(\sum_{i=1}^{v} \deg_i(g) \cdot 2^{v - i} \cdot T)

표 4.1. Sum-check 프로토콜의 costs.

각 라운드에서 P\mathcal PV\mathcal V 에게 전송하는 다항식 gj(Xj)g_j(X_j)는 계수 표현으로 1+degi(g)1+\deg_i (g) 개 field elements 입니다. 더 나아가 라그랑주 보간법을 활용하면 다항식을 계수 표현이 아니라 함숫값 1+degi(g)1+\deg_i (g) 개로도 나타낼 수 있습니다. 따라서 총 vv 라운드에 대해 i=1v(1+degi(g))=v+i=1vdegi(g)\sum_{i=1}^{v} (1+\deg_i(g))=v+\sum_{i=1}^{v} \deg_i(g) 개 원소가 커뮤니케이션에 사용됩니다.

V\mathcal V의 시간복잡도는 각 라운드에서 gi(ri)g_i(r_i) 값을 계산할 때 1+degi(g)1+\deg_i (g) 번 연산이 필요하고, 최종 라운드 vv에서 gg에 오라클할때 TT의 시간이 소요되므로 총 O(v+i=1vdegi(g))+TO(v + \sum_{i=1}^{v} \deg_i(g)) + T 입니다.

P\mathcal P의 시간복잡도는 각 라운드에서 다항식 gj(Xj)g_j(X_j) 를 계산하는 것이 전부인데, 이는 위에서 살펴보았듯 라그랑주 보간법을 사용하여 i=0,1,,degj(g)i=0,1,\ldots,\deg_j(g) 일 때 함숫값 gj(i)g_j(i)를 계산함으로써 가능합니다:

gj(i)=(xj+1,,xv){0,1}vjg(r1,,rj1,i,xj+1,,xv).g_j(i)=\sum_{(x_{j+1}, \ldots, x_v) \in \{0,1\}^{v-j}} g(r_1, \ldots, r_{j-1}, i, x_{j+1}, \ldots, x_v).

따라서 P\mathcal P의 시간복잡도는 O(i=1vdegi(g)2viT)O(\sum_{i=1}^{v} \deg_i(g) \cdot 2^{v-i} \cdot T) 입니다.

앞으로의 예시에서 어떤 함수 gg의 multilinear extension g~\tilde g 에 sum-check를 적용시키는 경우가 많은데, 이 경우 모든 라운드 ii에 대해 degi(g)=O(1)\deg_i(g)=O(1) 이므로 전체 시간복잡도는 다음과 같이 정리됩니다.

Communication

Rounds

V\mathcal{V} time

P\mathcal{P} time

O(v)O(v) field elements

vv

O(v+T)O(v + T)

O(2vT)O(2^{v} \cdot T)\quad

표 4.2. 모든 ii에 대해 degi(g)=O(1)\deg_i(g)=O(1) 인 경우 Sum-check 프로토콜의 costs.

Application 1: #SAT

변수 x1,,xnx_1,\dots,x_nBoolean formula 란 각 leaf node가 변수 xix_i나 그 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)S=\text{poly}(n) 인 Boolean formula ϕ\phi에 대해, ϕ(x):{0,1}n{0,1}\phi(x): \{0,1\}^n\to \{0,1\} 를 n개의 boolean 변수 값을 입력으로 받아 formula의 출력값을 반환하는 함수로 정의하겠습니다. #SAT\text{\#SAT} 문제란 ϕ(x)=1\phi(x)=1이 되도록 하는 입력 xx의 개수를 찾는 문제입니다. 현재까지 알려진 #SAT\text{\#SAT} 문제를 해결하는 가장 효율적인 알고리즘은 nn에 대한 지수 시간을 필요로 합니다. 그러나, 해당 문제를 검증하는 IP는 Sum-check 프로토콜을 적용하여 효율적으로 수행할 수 있습니다.

Protocol

우리가 계산하고자 하는 값은 다음과 같이 정의할 수 있습니다:

#(SAT)=x{0,1}nϕ(x).\#(\text{SAT})=\sum_{x \in \{0,1\}^n} \phi(x).

먼저, 다음과 같은 과정을 거쳐 boolean formula ϕ\phi를 arithmetic circuit ψ\psi로 전환시킵니다: (Arithmetic circuit이란 연산이 finite field F\mathbb F 위의 덧셈과 곱셈으로 이루어진 circuit을 말합니다.) ϕ\phi의 모든 AND 게이트를 곱셈 게이트로 변환하고 (AND(y,z)yz\text{AND}(y,z)\mapsto y\cdot z), 모든 OR 게이트는 다음 연산을 수행하는 3개의 게이트로 변환합니다 (OR(y,z)y+zyz\text{OR}(y,z)\mapsto y+z-y\cdot z). 변수의 negation은 yˉ1y\bar y\mapsto 1-y 게이트로 변환합니다.

이렇게 만든 ψ\psi는 모든 x{0,1}nx\in\{0,1\}^n에 대해 ψ(x)=ϕ(x)\psi(x)=\phi(x) 를 만족하며, circuit의 크기는 최대 3S3S 입니다. 뿐만아니라 모든 게이트가 arithmetic하므로 해당 ψ(x)\psi(x)를 변수 x1,,xnx_1,\ldots,x_n에 대한 nn-변수 다항식 gg로 표현할 수 있습니다. 여전히, x{0,1}nϕ(x)=x{0,1}ng(x)\sum_{x \in \{0,1\}^n} \phi(x)=\sum_{x \in \{0,1\}^n} g(x) 가 성립하므로 다항식 gg에 대해 sum-check 프로토콜을 수행하면 끝이 납니다.

Costs

한가지 주목할 부분은, i=1ndegi(g)S\sum_{i=1}^n\deg_i(g)\leq S 라는 것입니다. (이는 귀납법으로 증명할 수 있습니다. 자세한 증명은 연습문제로 해보시길 바랍니다.) 또한 임의의 g(r)g(r) (rFnr\in\mathbb F^n)을 계산하는 시간 TT는, circuit ψ\psi의 각 게이트를 따라 결과값을 계산하면 되므로 O(S)O(S) 입니다. 위 결과들을 앞서 정리한 sum-check의 cost에 적용시키면, 건전성 오류 δsS/F\delta_s\leq S/|\mathbb F|이며 총 cost는 다음과 같습니다:

Communication

Rounds

V\mathcal{V} time

P\mathcal{P} time

O(S)O(S) field elements

nn

O(S)O(S)

O(2nS2)O(2^{n} \cdot S^2)\quad

표 4.3. 변수 nn개, 크기 SS의 Boolean formula ϕ\phi에 대한 #SAT 프로토콜의 costs

Application 2: Counting Triangles in Graphs

nn개의 정점에서 정의된 (undirected) 그래프 G=(V,E)G=(V,E) 와 그 인접행렬 A{0,1}n×nA\in\{0,1\}^{n\times n} 를 고려하겠습니다. Counting triangles 문제는 (i,j),(j,k),(k,i)(i,j),(j,k),(k,i)가 edge로 연결된 세 쌍 i,j,kVi,j,k\in V의 개수를 세는 것입니다. 해당 문제 또한 Sum-check를 적용하여 검증할 수 있습니다.

Protocol

먼저, 인접행렬 AA를 행렬이 아니라 index (i,j){0,1}logn×{0,1}logn(i,j)\in\{0,1\}^{\log n}\times\{0,1\}^{\log n} 를 input으로 받아 Aij ({0,1})A_{ij}\ (\in\{0,1\}) 를 출력하는 함수 fA(i,j)f_A(i,j) 로 생각해보겠습니다. 그러면 우리가 구하고자 하는 값 Δ\Delta는 다음과 같이 계산할 수 있습니다 (중복 제거를 위해 1/61/6이 곱해짐에 유의하세요):

Δ=16x,y,z{0,1}lognfA(x,y)fA(y,z)fA(x,z).\Delta = \frac{1}{6} \sum_{x,y,z \in \{0,1\}^{\log n}} f_A(x,y) \cdot f_A(y,z) \cdot f_A(x,z).

이제 fAf_A의 multilinear extension f~A\tilde f_A에 대해, (3logn)(3\log n)-변수 다항식 gg를 다음과 같이 정의합니다:

g(X,Y,Z)=f~A(X,Y)f~A(Y,Z)f~A(X,Z).g(X,Y,Z) = \tilde{f}_A(X,Y) \cdot \tilde{f}_A(Y,Z) \cdot \tilde{f}_A(X,Z).

이렇게 하면 6Δ=x,y,z{0,1}logng(x,y,z)6\Delta = \sum_{x,y,z \in \{0,1\}^{\log n}} g(x,y,z) 이므로 6Δ6\Delta 값을 gg에 대한 Sum-check 프로토콜으로 검증할 수 있습니다. 해당 프로토콜의 cost를 살펴보면, 라운드는 총 3logn3\log n 개이고 P\mathcal PO(23logn)=O(n3)O(2^{3\log n})=O(n^3) 개 점에서 gg를 계산하면 됩니다. gg(2logn)(2\log n)-변수 MLE 다항식 3개의 곱이므로, MLE 함숫값 구하기 테크닉을 이용하면 O(n2)O(n^2)에 구할 수 있습니다. 따라서 V\mathcal VO(n2)O(n^2), P\mathcal PO(n3n2)=O(n5)O(n^3\cdot n^2)=O(n^5) 시간복잡도가 걸립니다.

Improvement

이 때 Δ\Delta를 다음과 같이 인접행렬을 이용하여 계산할 수도 있습니다:

Δ=16i,j{1,,n}(A2)ijAij.\Delta = \frac{1}{6}\sum_{i,j \in \{1, \ldots, n\}} (A^2)_{ij} \cdot A_{ij}.

마찬가지로 fA2,fAf_{A^2}, f_A를 구한뒤 g(X,Y)=f~A2(X,Y)f~A(X,Y)g(X,Y) = \tilde{f}_{A^2}(X,Y) \cdot \tilde{f}_A(X,Y) 에 대해 Sum-check 프로토콜을 적용하면 됩니다. 이 경우 커뮤니케이션과 V\mathcal V의 cost는 동일하나, 이후 살펴볼 MatMult의 Method 3를 이용하면 P\mathcal PO(n2)O(n^2) 까지 줄일 수 있습니다!

Application 3: Super-Efficient MatMult

MatMult 문제는 주어진 두 n×nn\times n 행렬 A,BA,B에 대해 둘의 곱 C=ABC=AB를 증명하는 것입니다. 우리는 2장에서 MatMult 문제를 효율적으로 증명하는 Freivalds' Algorithm을 살펴본 바 있습니다. 그러나 해당 알고리즘은 검증을 위해 곱셈 결과 행렬 CFn×nC\in\mathbb F^{n\times n} 전체를 전송했습니다. 이번 단원에서는 Sum-check 프로토콜을 활용하여 커뮤니케이션 cost를 O(logn)O(\log n)으로 줄여보겠습니다.

Protocol

앞서 살펴봤듯이 행렬 A,B,CA,B,C를 다음과 같은 fA,fB,fC:{0,1}logn×{0,1}lognFf_A,f_B,f_C: \{0,1\}^{\log n}\times\{0,1\}^{\log n}\to \mathbb F 함수로 해석할 수 있습니다:

fA(i1,,ilogn,j1,,jlogn)=Aij.f_A(i_1, \ldots, i_{\log n}, j_1, \ldots, j_{\log n}) = A_{ij}.

이제 f~A,f~B,f~C\tilde f_A,\tilde f_B,\tilde f_C 를 각 함수 fA,fB,fCf_A,f_B,f_C 의 MLE라고 하겠습니다. 행렬 곱의 정의에 의해, 다음이 성립합니다:

f~C(x,y)=b{0,1}lognf~A(x,b)f~B(b,y).\tilde{f}_C(x,y) = \sum_{b \in \{0,1\}^{\log n}} \tilde{f}_A(x,b) \cdot \tilde{f}_B(b,y).

이제 임의의 r1,r2Flognr_1,r_2\in\mathbb F^{\log n} 에 대해 f~C(r1,r2)\tilde{f}_C(r_1,r_2) 값을 확인함으로써 위 식이 제대로 계산되었는지 검증할 수 있습니다. (Schwartz-Zippel Lemma에 의해 이 방법은 sound합니다.) 따라서 r1,r2r_1,r_2를 고정한 뒤 (logn)(\log n)-변수 다항식 g(z):=f~A(r1,z)f~B(z,r2)g(z):=\tilde f_A(r_1,z)\cdot \tilde f_B(z,r_2)에 대해 Sum-check 프로토콜을 적용하여 f~C(r1,r2)\tilde f_C(r_1, r_2) 값을 검증합니다.

f~C(r1,r2)=z{0,1}logng(z).\tilde{f}_C(r_1,r_2) = \sum_{z \in \{0,1\}^{\log n}} g(z).

Costs

먼저 gg는 각 변수의 차수가 최대 2인 (logn)(\log n)-변수 다항식이므로, 라운드는 총 logn\log n 번이 필요하고, 총 커뮤니케이션은 O(logn)O(\log n) field elements가 들게됩니다.

V\mathcal V의 시간복잡도: 검증자 V\mathcal V가 할 일은 sum-check 프로토콜의 마지막에 g(r3)=f~A(r1,r3)f~B(r3,r2)g(r_3)=\tilde f_A(r_1,r_3)\cdot \tilde f_B(r_3,r_2) 값을 계산하는 것입니다. 이 때 각 함숫값 f~A(r1,r3)\tilde f_A(r_1,r_3)f~B(r3,r2)\tilde f_B(r_3,r_2) 을 계산하는 것은 지난 3장 MLE의 함숫값 구하기를 이용해 O(n2)O(n^2) 으로 가능합니다.

P\mathcal P의 시간복잡도:kk 라운드마다 P\mathcal P는 다항식

gk(Xk)=bk+1{0,1}blogn{0,1}g(s1,,sk1,Xi,bk+1,,blogn)g_k(X_k)= \sum_{b_{k+1} \in \{0,1\}} \cdots \sum_{b_{\log n} \in \{0,1\}} g(s_{1}, \ldots, s_{k-1}, X_i, b_{k+1}, \ldots, b_{\log n})

를 검증자 V\mathcal V 에게 보내야합니다 (s1,,sk1Fs_1,\dots,s_{k-1}\leftarrow \mathbb F는 고정). 이 때 g(z)=f~A(r1,z)f~B(z,r2)g(z)=\tilde f_A(r_1,z)\cdot \tilde f_B(z,r_2) 는 multilinear한 두 다항식의 곱이므로 각 변수의 최대 차수가 2이고, 따라서 gk(Xk)g_k(X_k)는 최대 2차 다항식입니다. 그러므로 다항식 전체를 보내는 대신, 세 개의 함숫값 gk(0),gk(1),gk(2)g_k(0),g_k(1),g_k(2)만 전송해도 검증자는 2차 다항식을 복구할 수 있습니다. 따라서, P\mathcal P

(s1,,sk1,{0,1,2},bk+1,,blogn):(bk+1,,blogn){0,1}lognk(s_{1}, \ldots, s_{k-1}, \{0,1,2\}, b_{k+1}, \ldots, b_{\log n}) : (b_{k+1}, \ldots, b_{\log n}) \in \{0,1\}^{\log n - k}

꼴의 모든 점에서 gg의 함숫값을 구해서 더하기만 하면 됩니다. 이러한 점의 개수는 32lognk=3n/2k3\cdot 2^{\log n-k}=3n/2^k 개 입니다. 이제 모든 라운드에서 해당 함숫값을 계산하는 3가지 알고리즘을 비교분석 해보겠습니다.

Method 1, O(n3)O(n^3)

각 라운드 kk에 대해 나이브하게 모든 3n/2k3n/2^k 점에서 gg를 계산해봅시다. 앞에서 gg 함숫값을 구하는데 O(n2)O(n^2)이 드는것을 확인했으므로 전체 시간복잡도는 다음과 같습니다:

O(k=1logn3nn22k)=O(n3).O(\sum_{k=1}^{\log n}\frac{3n\cdot n^2}{2^k}) =O(n^3).

Method 2, O(n2logn)O(n^2\log n)

두번째 방법에서는 한가지 관찰이 필요합니다. 행렬 AA의 각 원소 AijA_{ij}는 구하고자 하는 n/2kn/2^k개 점들 (일반성을 잃지 않고 Xk=0,1,2X_k=0,1,2인 경우 중 하나만 고려) 중 단 하나의 점에서만 gg 함숫값에 기여합니다. 따라서, 우리는 각 점들에 대해서 반복문을 돌리는 것이 아니라 각 인덱스 (i,j){0,1}logn×{0,1}logn(i,j)\in \{0,1\}^{\log n}\times\{0,1\}^{\log n} 에 대해 반복문을 수행할 수 있는것입니다.

그 방법을 조금 더 자세히 알아보겠습니다. 우리는 g(z)g(z)를 구하기 위해 f~A(r1,z)\tilde f_A(r_1,z)f~B(z,r2)\tilde f_B(z,r_2)를 계산했습니다. 이 때 MLE의 정의에 의해,

f~A(r1,z)=i,j{0,1}lognAijχ(i,j)(r1,z)\widetilde{f}_A(r_1, z) = \sum_{i,j \in \{0,1\}^{\log n}} A_{ij} \chi_{(i,j)}(r_1, z)

가 성립합니다. MLE 기저 다항식 χ\chi에서 다음을 관찰해보겠습니다. z=(s1,,sk1,0,bk+1,,blogn)z=(s_{1}, \ldots, s_{k-1}, 0, b_{k+1}, \ldots, b_{\log n}) 의 꼴일때, (앞서 zk=0,1,2z_k=0,1,200을 가정했습니다)

χ(i,j)(r1,z)=χi(r1)χj(z)=χi(r1)χ(j1,,jk1)(s1,,sk1)χjk(0)χ(jk+1,,jlogn)(bk+1,,blogn).\begin{align*} \chi_{(i,j)}(r_1, z) &= \chi_{i}(r_1)\chi_j(z) \\ &= \chi_{i}(r_1) \cdot \chi_{(j_1,\dots, j_{k-1})}(s_{1}, \dots, s_{k-1}) \\ & \qquad \cdot \chi_{j_k}(0) \\ & \qquad \cdot \chi_{(j_{k+1},\dots, j_{\log n})}(b_{k+1}, \dots, b_{\log n}). \end{align*}

이 때, (bk+1,,blogn){0,1}lognk(b_{k+1}, \ldots, b_{\log n}) \in \{0,1\}^{\log n - k} 임에 주목하면 마지막 항이

χ(jk+1,,jlogn)(bk+1,,blogn)={1if (jk+1,,jlogn)=(bk+1,,blogn)0otherwise\chi_{(j_{k+1},\cdots, j_{\log n})}(b_{k+1}, \cdots, b_{\log n}) =\begin{cases} 1 & \text{if}\ (j_{k+1},\cdots, j_{\log n})=(b_{k+1}, \cdots, b_{\log n}) \\ 0 & \text{otherwise} \end{cases}

임을 알 수 있습니다. 따라서 우리는 고정된 (i,j)(i,j)에 대해 AijA_{ij}가 오직 하나의 z=(s1,,sk1,0,jk+1,,jlogn)z=(s_{1}, \ldots, s_{k-1}, 0, j_{k+1}, \ldots, j_{\log n}) 의 함숫값에만 기여한다는 것을 확인했습니다. 이제 나머지 과정은 straightforward합니다. χi(r1)χ(j1,,jk1)(s1,,sk1)χjk(0)\chi_{i}(r_1)\cdot \chi_{(j_1,\cdots, j_{k-1})}(s_{1}, \cdots, s_{k-1})\cdot \chi_{j_k}(0) 항의 가능한 모든 값은 3장 MLE의 함숫값 계산 테크닉을 이용해 O(n2)O(n^2) 시간으로 pre-compute 해놓을 수 있습니다. 이제 모든 인덱스 (i,j)(i,j)에 대해 iterate하면서 대응되는 하나의 zz에 대해,

f~A(z)f~A(z)+Aijχi,j(z)\widetilde{f}_A(z) \leftarrow \widetilde{f}_A(z) + A_{ij} \chi_{i,j}(z)

로 업데이트 해주면 끝이납니다. 이 과정 또한 O(n2)O(n^2)이 소요되므로, 라운드 kk에 대해 총 O(n2)O(n^2) 시간이 걸립니다. 이를 logn\log n개 라운드에 대해 반복하므로, 총 시간복잡도는 O(n2logn)O(n^2\log n) 입니다.

Method 3, O(n2)O(n^2)

세번째 방법에서는 각 라운드에서 전 라운드에서 계산한 f~A(r1,z)\tilde f_A(r_1,z) 를 사용하는 메모이제이션 기법을 이용합니다. 우리는 각 라운드 k=1,2,,lognk=1,2,\dots,\log n 에서 z=(s1,,sk1,{0,1,2},bk+1,,blogn)z=(s_{1}, \ldots, s_{k-1}, \{0,1,2\}, b_{k+1}, \ldots, b_{\log n}) 일 때 함숫값 f~A(z)\tilde f_A(z) 를 모두 계산해야 합니다. 먼저, 모든 z{0,1}lognz \in \{0,1\}^{\log n} 에 대한 f~A(r1,z)\tilde f_A(r_1,z) 를 계산합니다 (이는 Method 2의 방법으로 O(n2)O(n^2) 시간에 가능합니다.)

이후 f~A(z)\tilde f_A(z) 가 multilinear 하다는 성질로부터 다음 점화식이 성립함을 관찰합니다:

f~A(x1,x2,,xlogn)=x1f~A(1,x2,,xlogn)+(1x1)f~A(0,x2,,xlogn)f~A(s1,,sk1,xk,,xlogn)=xkf~A(s1,,sk1,1,xk+1,,xlogn)+(1xk)f~A(s1,,sk1,0,xk+1,,xlogn).\begin{align*} \tilde f_A(x_1, x_2, \ldots, x_{\log n}) &= x_1 \cdot \tilde f_A(1, x_2, \ldots, x_{\log n}) + (1 - x_1) \cdot \tilde f_A(0, x_2, \ldots, x_{\log n})\\ &\vdots\\ \tilde f_A(s_{1}, \ldots, s_{k-1}, x_k, \ldots, x_{\log n}) &= x_k \cdot \tilde f_A(s_{1}, \ldots, s_{k-1}, 1, x_{k+1}, \ldots, x_{\log n}) \\ &\qquad + (1 - x_k) \cdot \tilde f_A(s_{1}, \ldots, s_{k-1}, 0, x_{k+1}, \ldots, x_{\log n}). \end{align*}

위 식을 이용하면, 라운드 kk 일 때 z=(s1,,sk1,{0,1,2},bk+1,,blogn):(bk+1,,blogn){0,1}lognkz=(s_{1}, \ldots, s_{k-1}, \{0,1,2\}, b_{k+1}, \ldots, b_{\log n}) : (b_{k+1}, \ldots, b_{\log n}) \in \{0,1\}^{\log n - k}에 대한 f~A(z)\tilde f_A(z) 를 다음과 같이 계산할 수 있습니다.

f~A(s1,,sk1,{0,1},xk+1,,xlogn)=sk1f~A(s1,,sk2,1,{0,1},xk+1,,xlogn)+(1sk1)f~A(s1,,sk2,0,{0,1},xk+1,,xlogn)f~A(s1,,sk1,2,xk+1,,xlogn)=2f~A(s1,,sk1,1,xk+1,,xlogn)1f~A(s1,,sk1,0,xk+1,,xlogn).\begin{align*} \tilde f_A(s_{1}, \ldots, s_{k-1}, \{0,1\}, x_{k+1}, \ldots, x_{\log n}) &= s_{k-1} \cdot \tilde f_A(s_{1}, \ldots, s_{k-2}, 1, \{0,1\}, x_{k+1}, \ldots, x_{\log n}) \\ &\qquad + (1 - s_{k-1}) \cdot \tilde f_A(s_{1}, \ldots, s_{k-2}, 0, \{0,1\}, x_{k+1}, \ldots, x_{\log n}) \\ \\ \tilde f_A(s_{1}, \ldots, s_{k-1}, 2, x_{k+1}, \ldots, x_{\log n}) &= 2 \cdot \tilde f_A(s_{1}, \ldots, s_{k-1}, 1, x_{k+1}, \ldots, x_{\log n}) \\ &\qquad - 1 \cdot \tilde f_A(s_{1}, \ldots, s_{k-1}, 0, x_{k+1}, \ldots, x_{\log n}). \end{align*}

따라서 라운드 k1k-1 까지 f~A(z)\tilde f_A(z) 가 모두 계산되어 있다면 라운드 kk에서는 O(2lognk)=O(n/2k)O(2^{\log n-k})=O(n/2^k) 시간과 공간복잡도로 f~A(z)\tilde f_A(z) 를 계산할 수 있습니다. 이 과정을 라운드 k=lognk=\log n 까지 반복하면 총 시간복잡도는 O(k=1lognn/2k)=O(n)O(\sum_{k=1}^{\log n} n/2^k)=O(n) 입니다.

종합하면, 초기값을 계산하는데 O(n2)O(n^2) 이 걸리고 이를 이용해 O(n)O(n) 시간으로 나머지 값들을 계산할 수 있으므로 총 시간복잡도는 O(n2)O(n^2) 입니다.

Communication

Rounds

V\mathcal{V} time

P\mathcal{P} time

O(logn)O(\log n) field elements

logn\log n

O(n2)O(n^2)

T+O(n2)T + O(n^2)

표 4.4. Super-Efficient MatMult 프로토콜의 costs. TT는 행렬곱 C=ABC=AB를 계산하는데 걸리는 시간.

Conclusion

다음 글에서는 유용한 IP 시스템인 GKR 프로토콜에 대해 다뤄보겠습니다. 긴 글 읽어주셔서 감사합니다.

Last updated