Sum-Check Protocol
본 글에서는 상호작용 증명(IP)의 예시, Sum-Check 프로토콜에 대해 알아보겠습니다.
Settings
유한체 위에서 정의된 -변수 다항식 를 생각해보겠습니다. 이 때 Sum-check 프로토콜은 증명자가 다음 함숫값들의 합을 검증자에게 증명하는 것입니다:
해당 값을 계산하는 데에는 시간이 소요됩니다 (의 함숫값을 구하는데 걸리는 시간을 라 하겠습니다.) 그러나 Sum-check 프로토콜을 이용하면, 해당 값을 정도 시간으로 검증 가능합니다!
Protocol
Sum-check 프로토콜은 다음과 같이 이루어집니다:
증명자 가 검증자 에게 (증명하고자 하는 ) 값을 전송합니다.
가 랜덤한 값 를 골라 에게 전송합니다.
가 랜덤한 값 를 골라 에게 전송합니다.
가 랜덤한 값 를 골라, 에 한번의 오라클로 값을 구합니다. 그리고 가 성립하는지 확인하고 아닐경우 reject 합니다.
만약 가 한번도 reject 하지 않았다면, 프로토콜을 종료하고 accept 합니다.
Completeness & Soundness
명제 4.1. Sum-check 프로토콜은 완전성 오류 이고 건전성 오류 인 IP 시스템이다. ()
Proof. 먼저 완전성은 자명합니다. -번째 라운드까지 증명자가 올바른 를 보냈다면, 는 차수가 최대 이고 는 정의에 따라 성립합니다.
이제 건전성 오류 를 증명해보겠습니다. 이를 위해 에 대해서 위 프로토콜이 accept할 최대 확률을 계산하면 됩니다. 이 경우 적어도 하나의 라운드 에서 가 전송한 가 실제 다항식
와 다르면서 (), 랜덤한 에 대해 가 성립해야합니다. 두 다항식의 차수는 최대 이므로, Schwartz-Zippel Lemma에 의해 그 확률은 최대 입니다. 따라서 Union bound에 의해:
Costs
Communication
Rounds
time
time
field elements
표 4.1. Sum-check 프로토콜의 costs.
각 라운드에서 가 에게 전송하는 다항식 는 계수 표현으로 개 field elements 입니다. 더 나아가 라그랑주 보간법을 활용하면 다항식을 계수 표현이 아니라 함숫값 개로도 나타낼 수 있습니다. 따라서 총 라운드에 대해 개 원소가 커뮤니케이션에 사용됩니다.
의 시간복잡도는 각 라운드에서 값을 계산할 때 번 연산이 필요하고, 최종 라운드 에서 에 오라클할때 의 시간이 소요되므로 총 입니다.
의 시간복잡도는 각 라운드에서 다항식 를 계산하는 것이 전부인데, 이는 위에서 살펴보았듯 라그랑주 보간법을 사용하여 일 때 함숫값 를 계산함으로써 가능합니다:
따라서 의 시간복잡도는 입니다.
앞으로의 예시에서 어떤 함수 의 multilinear extension 에 sum-check를 적용시키는 경우가 많은데, 이 경우 모든 라운드 에 대해 이므로 전체 시간복잡도는 다음과 같이 정리됩니다.
Communication
Rounds
time
time
field elements
표 4.2. 모든 에 대해 인 경우 Sum-check 프로토콜의 costs.
Application 1: #SAT
변수 의 Boolean formula 란 각 leaf node가 변수 나 그 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.
크기 인 Boolean formula 에 대해, 를 n개의 boolean 변수 값을 입력으로 받아 formula의 출력값을 반환하는 함수로 정의하겠습니다. 문제란 이 되도록 하는 입력 의 개수를 찾는 문제입니다. 현재까지 알려진 문제를 해결하는 가장 효율적인 알고리즘은 에 대한 지수 시간을 필요로 합니다. 그러나, 해당 문제를 검증하는 IP는 Sum-check 프로토콜을 적용하여 효율적으로 수행할 수 있습니다.
Protocol
우리가 계산하고자 하는 값은 다음과 같이 정의할 수 있습니다:
먼저, 다음과 같은 과정을 거쳐 boolean formula 를 arithmetic circuit 로 전환시킵니다: (Arithmetic circuit이란 연산이 finite field 위의 덧셈과 곱셈으로 이루어진 circuit을 말합니다.) 의 모든 AND 게이트를 곱셈 게이트로 변환하고 (), 모든 OR 게이트는 다음 연산을 수행하는 3개의 게이트로 변환합니다 (). 변수의 negation은 게이트로 변환합니다.
이렇게 만든 는 모든 에 대해 를 만족하며, circuit의 크기는 최대 입니다. 뿐만아니라 모든 게이트가 arithmetic하므로 해당 를 변수 에 대한 -변수 다항식 로 표현할 수 있습니다. 여전히, 가 성립하므로 다항식 에 대해 sum-check 프로토콜을 수행하면 끝이 납니다.
Costs
한가지 주목할 부분은, 라는 것입니다. (이는 귀납법으로 증명할 수 있습니다. 자세한 증명은 연습문제로 해보시길 바랍니다.) 또한 임의의 ()을 계산하는 시간 는, circuit 의 각 게이트를 따라 결과값을 계산하면 되므로 입니다. 위 결과들을 앞서 정리한 sum-check의 cost에 적용시키면, 건전성 오류 이며 총 cost는 다음과 같습니다:
Communication
Rounds
time
time
field elements
표 4.3. 변수 개, 크기 의 Boolean formula 에 대한 #SAT 프로토콜의 costs
Application 2: Counting Triangles in Graphs
개의 정점에서 정의된 (undirected) 그래프 와 그 인접행렬 를 고려하겠습니다. Counting triangles 문제는 가 edge로 연결된 세 쌍 의 개수를 세는 것입니다. 해당 문제 또한 Sum-check를 적용하여 검증할 수 있습니다.
Protocol
먼저, 인접행렬 를 행렬이 아니라 index 를 input으로 받아 를 출력하는 함수 로 생각해보겠습니다. 그러면 우리가 구하고자 하는 값 는 다음과 같이 계산할 수 있습니다 (중복 제거를 위해 이 곱해짐에 유의하세요):
이제 의 multilinear extension 에 대해, -변수 다항식 를 다음과 같이 정의합니다:
이렇게 하면 이므로 값을 에 대한 Sum-check 프로토콜으로 검증할 수 있습니다. 해당 프로토콜의 cost를 살펴보면, 라운드는 총 개이고 는 개 점에서 를 계산하면 됩니다. 는 -변수 MLE 다항식 3개의 곱이므로, MLE 함숫값 구하기 테크닉을 이용하면 에 구할 수 있습니다. 따라서 는 , 는 시간복잡도가 걸립니다.
Improvement
이 때 를 다음과 같이 인접행렬을 이용하여 계산할 수도 있습니다:
마찬가지로 를 구한뒤 에 대해 Sum-check 프로토콜을 적용하면 됩니다. 이 경우 커뮤니케이션과 의 cost는 동일하나, 이후 살펴볼 MatMult의 Method 3를 이용하면 를 까지 줄일 수 있습니다!
Application 3: Super-Efficient MatMult
MatMult 문제는 주어진 두 행렬 에 대해 둘의 곱 를 증명하는 것입니다. 우리는 2장에서 MatMult 문제를 효율적으로 증명하는 Freivalds' Algorithm을 살펴본 바 있습니다. 그러나 해당 알고리즘은 검증을 위해 곱셈 결과 행렬 전체를 전송했습니다. 이번 단원에서는 Sum-check 프로토콜을 활용하여 커뮤니케이션 cost를 으로 줄여보겠습니다.
Protocol
앞서 살펴봤듯이 행렬 를 다음과 같은 함수로 해석할 수 있습니다:
이제 를 각 함수 의 MLE라고 하겠습니다. 행렬 곱의 정의에 의해, 다음이 성립합니다:
이제 임의의 에 대해 값을 확인함으로써 위 식이 제대로 계산되었는지 검증할 수 있습니다. (Schwartz-Zippel Lemma에 의해 이 방법은 sound합니다.) 따라서 를 고정한 뒤 -변수 다항식 에 대해 Sum-check 프로토콜을 적용하여 값을 검증합니다.
Costs
먼저 는 각 변수의 차수가 최대 2인 -변수 다항식이므로, 라운드는 총 번이 필요하고, 총 커뮤니케이션은 field elements가 들게됩니다.
의 시간복잡도: 검증자 가 할 일은 sum-check 프로토콜의 마지막에 값을 계산하는 것입니다. 이 때 각 함숫값 와 을 계산하는 것은 지난 3장 MLE의 함숫값 구하기를 이용해 으로 가능합니다.
의 시간복잡도: 매 라운드마다 는 다항식
를 검증자 에게 보내야합니다 (는 고정). 이 때 는 multilinear한 두 다항식의 곱이므로 각 변수의 최대 차수가 2이고, 따라서 는 최대 2차 다항식입니다. 그러므로 다항식 전체를 보내는 대신, 세 개의 함숫값 만 전송해도 검증자는 2차 다항식을 복구할 수 있습니다. 따라서, 는
꼴의 모든 점에서 의 함숫값을 구해서 더하기만 하면 됩니다. 이러한 점의 개수는 개 입니다. 이제 모든 라운드에서 해당 함숫값을 계산하는 3가지 알고리즘을 비교분석 해보겠습니다.
Method 1,
각 라운드 에 대해 나이브하게 모든 점에서 를 계산해봅시다. 앞에서 함숫값을 구하는데 이 드는것을 확인했으므로 전체 시간복잡도는 다음과 같습니다:
Method 2,
두번째 방법에서는 한가지 관찰이 필요합니다. 행렬 의 각 원소 는 구하고자 하는 개 점들 (일반성을 잃지 않고 인 경우 중 하나만 고려) 중 단 하나의 점에서만 함숫값에 기여합니다. 따라서, 우리는 각 점들에 대해서 반복문을 돌리는 것이 아니라 각 인덱스 에 대해 반복문을 수행할 수 있는것입니다.
그 방법을 조금 더 자세히 알아보겠습니다. 우리는 를 구하기 위해 와 를 계산했습니다. 이 때 MLE의 정의에 의해,
가 성립합니다. MLE 기저 다항식 에서 다음을 관찰해보겠습니다. 의 꼴일때, (앞서 중 을 가정했습니다)
이 때, 임에 주목하면 마지막 항이
임을 알 수 있습니다. 따라서 우리는 고정된 에 대해 가 오직 하나의 의 함숫값에만 기여한다는 것을 확인했습니다. 이제 나머지 과정은 straightforward합니다. 항의 가능한 모든 값은 3장 MLE의 함숫값 계산 테크닉을 이용해 시간으로 pre-compute 해놓을 수 있습니다. 이제 모든 인덱스 에 대해 iterate하면서 대응되는 하나의 에 대해,
로 업데이트 해주면 끝이납니다. 이 과정 또한 이 소요되므로, 라운드 에 대해 총 시간이 걸립니다. 이를 개 라운드에 대해 반복하므로, 총 시간복잡도는 입니다.
Method 3,
세번째 방법에서는 각 라운드에서 전 라운드에서 계산한 를 사용하는 메모이제이션 기법을 이용합니다. 우리는 각 라운드 에서 일 때 함숫값 를 모두 계산해야 합니다. 먼저, 모든 에 대한 를 계산합니다 (이는 Method 2의 방법으로 시간에 가능합니다.)
이후 가 multilinear 하다는 성질로부터 다음 점화식이 성립함을 관찰합니다:
위 식을 이용하면, 라운드 일 때 에 대한 를 다음과 같이 계산할 수 있습니다.
따라서 라운드 까지 가 모두 계산되어 있다면 라운드 에서는 시간과 공간복잡도로 를 계산할 수 있습니다. 이 과정을 라운드 까지 반복하면 총 시간복잡도는 입니다.
종합하면, 초기값을 계산하는데 이 걸리고 이를 이용해 시간으로 나머지 값들을 계산할 수 있으므로 총 시간복잡도는 입니다.
Communication
Rounds
time
time
field elements
표 4.4. Super-Efficient MatMult 프로토콜의 costs. 는 행렬곱 를 계산하는데 걸리는 시간.
Conclusion
다음 글에서는 유용한 IP 시스템인 GKR 프로토콜에 대해 다뤄보겠습니다. 긴 글 읽어주셔서 감사합니다.
Last updated