https://www.secmem.org/blog/2022/06/13/Caulk/

StarkWare 쪽 논문이라 일단 Cryptography. PS를 깊게 한 분들이라면 재밌게 읽을만 합니다.

https://www.math.toronto.edu/swastik/ECFFT1.pdf

 

논문 설명을 여기가 아니라 다른 커뮤니티에서 했는데, 캡쳐해서 가져왔습니다.

예시 구현체는 (제가 작성한 것이 아닙니다) https://solvable.group/posts/ecfft/ 에 있습니다.

 

https://www.secmem.org/blog/2022/05/15/KZG-ASVC/

https://github.com/rkm0959/rkm0959_presents/blob/main/TornadoCash.pdf

https://www.youtube.com/watch?v=8gRkCVy8he8  

https://github.com/rkm0959/rkm0959_presents/blob/main/lattice_survey.pdf  

 

'Cryptography' 카테고리의 다른 글

KZG, ASVC, Stateless Cryptocurrencies  (0) 2022.05.20
Groth16 + Powers of Tau + Tornado Cash  (0) 2022.03.14
Inequality Solving with CVP  (0) 2021.03.26
Sigma Protocol  (0) 2021.02.15
Schnorr's Protocol & Signature  (0) 2021.02.13

www.secmem.org/blog/2021/03/15/Inequality_Solving_with_CVP/

'Cryptography' 카테고리의 다른 글

Groth16 + Powers of Tau + Tornado Cash  (0) 2022.03.14
Lattice Attacks Introductory Survey  (0) 2021.07.22
Sigma Protocol  (0) 2021.02.15
Schnorr's Protocol & Signature  (0) 2021.02.13
Diophantine Argument of Knowledge  (4) 2021.01.20

저번 글에 이어서, 이번에는 19장의 내용을 끝까지 정리한다. 본격적으로 최적화 공부를 하기 위해서 이거 읽는 건 잠시 중단.

 

이번 글에서는 Schnorr's Protocol을 일반화한 Sigma Protocol에 대해서 다룬다. 이전 글을 읽고 왔다고 가정한다.

이 블로그에 있는 글인 Diophantine Argument of Knowledge와 같이 읽으면 좋을 것 같다. 내용이 꽤 많이 겹친다.

이 글에서도 모든 random은 uniform random이다. 이전 글의 앞부분에서 말한 모든 내용이 그대로 적용된다.

 

이 글의 내용은 다음과 같다.

  • Schnorr's Protocol을 일반화하여 Sigma Protocol을 얻고, 비슷하게 Signature Scheme도 얻는다. 이들에 대한 구체적인 정의와 사례들을 살펴보고, 그 안전성을 증명한다. Schnorr's Protocol을 다룰 때 사용되었던 방법들이 거의 그대로 등장하지만, 일반적인 상황을 다루기 위해 준비가 필요하다.
  • Sigma Protocol을 통해서 더욱 강력한 adversary의 공격에도 안전한 Protocol을 만드는 방법을 살펴본다. 우리는 지금까지 adversary가 Eavesdrop 하거나 Malicious Prover가 되는 경우만을 고려하였다. 이번에는 adversary가 Malicious Verifier의 역할을 하더라도 깨지지 않는 Protocol을 만든다.

 

1. Sigma Protcols : A Generalization of Schnorr's Protocol

Definitions

정의 : Effective Relation이란 binary relation $\mathcal{R} \subset \mathcal{X} \times \mathcal{Y}$로, 이때 $\mathcal{X}, \mathcal{Y}, \mathcal{R}$은 모두 efficiently recognizable set이다. (즉, 어떤 값이 집합의 원소인지를 쉽게 판별할 수 있다) $\mathcal{Y}$의 원소를 statement라고 하고, $(x, y) \in \mathcal{R}$이면 $x$를 $y$의 witness라고 정의한다. 

 

 

정의 : Sigma Protocol을 정의하기 위해서는 Effective Relation $\mathcal{R} \subset \mathcal{X} \times \mathcal{Y}$와 Prover, Verifier가 필요하다. 두 사람은 모두 $y \in \mathcal{Y}$를 갖고 있으며, Prover는 $y$에 대한 witness $x \in \mathcal{X}$에 대한 지식을 증명하려고 한다. 이들은 다음 구조를 갖는 대화를 통해서 Prover의 증명을 검토한다.

  • Prover는 commitment라고 불리는 값 $t$를 하나 계산해서 Verifier에게 전달한다.
  • Verifier는 challenge라고 불리는 값 $c$를 challenge space $\mathcal{C}$에서 random하게 골라 Prover에게 전달한다.
  • Prover는 response라고 불리는 값 $z$를 계산하여 Verifier에게 전달한다. 
  • 이제 Verifier는 conversation $(t, c, z)$를 이용하여 증명을 accept/reject 한다. 
  • Accept를 받는 conversation을 accepting conversation이라고 부른다. challenge space는 super-poly임을 가정한다.
  • 이미 Schnorr's Protocol에서 알고 있는 사실이지만, accepting conversation의 집합은 $y$에 dependent 함에 유의하라.

독자들은 Schnorr's Protocol이 Sigma Protocol의 한 경우임을 파악할 수 있을 것이다. 특히, 이 경우 $\mathcal{R}$은 결국 $(x, y)$ such that $g^x = y$이다.

 

 

우리가 이전에 사용했던 표현인 Completeness, Soundness와 HVZK의 정의를 다시 살펴보자. Completeness는 그대로 가져와도 된다.

 

정의 : Knowledge Soundness란, $y \in \mathcal{Y}$에 대한 accepting conversation $(t, c, z)$와 $(t, c', z')$이 주어졌고, $c \neq c'$일 때, $y$에 대한 witness $x$를 효율적으로 계산하는 알고리즘이 존재한다는 것이다. 이러한 알고리즘을 Witness Extractor라고 부르기도 한다.

 

Schnorr's Protocol이 Knowledge Soundness를 가짐은 이미 알고 있는 사실이다. 이는 우리의 기존 Soundness에 대한 정의보다 더욱 강력하다.

이렇게 강력한 조건을 주는 이유는, 역시 Schnorr's Protocol에서 사용했던 증명을 그대로 쓰고 싶기 때문이다.

생각해보면, Witness Extractor가 존재해야 Rewinding Lemma를 사용하는 증명을 할 수 있다. Rewinding Lemma가 해주는 것은 $(t, c, z)$와 $(t, c', z')$를 얻어주는 것이고, 그 뒤의 일은 Witness Extractor의 몫이다. Schnorr's Protocol에서는 "연립일차방정식을 푸는 것"이라고 불렀다. 

 

 

정의 : Special HVZK란, $(y, c) \in \mathcal{Y} \times \mathcal{C}$를 input으로 받아 다음을 output으로 내는 효율적인 Simulator가 존재한다는 것이다.

  • 모든 $(y, c) \in \mathcal{Y} \times \mathcal{C}$에 대하여, Simulator의 output이 $(t, z)$일 때, $(t, c, z)$는 무조건 accepting conversation for $y$이다.
  • $(x, y) \in \mathcal{R}$이라고 하자. 이제 $c$를 $\mathcal{C}$에서 random하게 고른 후, $(t, z)$를 $(y, c)$에 대해 Simulator를 돌려서 얻은 값이라고 하자.
  • 이때, $(t, c, z)$는 $x$를 갖고 있는 Prover와 Verifier 사이의 conversation과 동일한 분포를 갖는다.

여기서 HVZK와 Special HVZK를 비교하면서 강조할 점은 다음 두 가지다.

  • $y$가 witness가 애초에 없는 원소여도, Simulator는 accepting conversation for $y$를 만들어야 한다.
  • Simulator는 $x$를 모르지만, $x$를 갖고 있는 Prover가 만들어내는 증명과 같은 분포를 뽑아내야 한다. 
  • $y$에 대한 witness $x$가 여러 개 있을 수 있음에 주목하라. 이러면 Special HVZK의 의미를 다음과 같이 생각할 수 있다.
  • Accepting Conversation으로는 $x$가 witness인 것 외에는 아무 정보도 얻을 수 없다. 특히, $x$가 witness 중에 어떤 witness인지도 알 수 없다.

 

Sigma Protocol for Pre-Image of a Homomorphism

이제 Sigma Protocol의 큰 family 하나를 소개하고, 그 구체적인 사례를 매우 간단하게만 나열한다.

 

$H_1, H_2$가 finite abelian group of known order라고 하고, $\phi : H_1 \rightarrow H_2$를 group homomorphism이라 하자. Schnorr's Protocol과 notation을 맞추기 위해서, $H_1$에서의 이항연산은 덧셈으로, $H_2$에서의 이항연산은 곱셈으로 표기하도록 한다. 이제, Effective Relation은 $$(\alpha, u) \in H_1 \times H_2 : \quad \phi(\alpha) = u$$이다. 즉, Prover는 $u$에 대한 $\phi$의 preimage를 알고 있음을 Verifier에게 증명하려고 한다. 이때, challenge space 적당한 자연수 $N$에 대하여 $\mathcal{C} = \{0, 1, \cdots, N-1\}$이다. 이제 Prover와 Verifier는 Schnorr's Protocol처럼 다음 과정을 거친다.

  • Prover는 $\alpha_t$를 $H_1$에서 랜덤하게 고르고, $u_t = \phi(\alpha_t)$를 Verifier에게 보낸다.
  • Verifier는 $\mathcal{C}$에서 challenge $c$를 랜덤하게 고르고, Prover에게 보낸다.
  • Prover는 $\alpha_z = \alpha_t + \alpha \cdot c \in H_1$을 계산하고, Verifier에게 보낸다.
  • Verifier는 $\phi(\alpha_z) = u_t \cdot u^c$인지 확인하고, 이를 기반으로 accept/reject.

정리 : 위 Protocol은 Sigma Protocol이며, Special HVZK이다. $|H_1| \times |H_2|$의 최소 소인수가 $|\mathcal{C}|= N$ 이상이면, Knowledge Soundness를 갖는다.

  • Effective Relation이 정말 Effective Relation인 것은 자명하다. 이 Protocol이 Sigma Protocol임도 자명하다.
  • Special HVZK임은 Schnorr's Protocol과 같은 방식으로 Simulator를 만들어주면 된다. 증명은 연습으로 남긴다.
  • Knowledge Soundness로 Schnorr's Protocol과 같은 방식으로 하면 된다. 이때, modular inverse를 취하기 위하여 소인수 조건이 필요하다.

이제 구체적인 사례를 몇 가지 제시한다. 

  • Okamoto's Protocol : $H_1 = \mathbb{Z}_q \times \mathbb{Z}_q$, $H_2 = \mathbb{G}$, $\phi(x, y) = g^x h^y$. 
  • Chaum-Petersen Protocol : $H_1= \mathbb{Z}_q$, $H_2 = \mathbb{G} \times \mathbb{G}$, $\phi(x) = (g^x, u^x)$. (Diffie-Hellman Context)
  • General Linear Protocol : $H_1 = \mathbb{Z}_q^n$, $H_2 = \mathbb{G}^m$, $\displaystyle \phi(x_1, \cdots,  x_n) = \left(\prod_{i=1}^n g_{1i}^{x_i}, \cdots , \prod_{i=1}^n g_{mi}^{x_i} \right)$.
  • GQ Protocol : $H_1 = \mathbb{Z}_n^{*}$, $H_2 = \mathbb{Z}_n^{*}$, $\phi(x) = x^e$. (RSA Context)

GQ Protocol에서는 사실 $H_1, H_2$의 group order를 모른다. 그래서 따로 증명을 해줘야 한다. 여기서 $(n, e)$는 RSA 공개키이며, $e$는 큰 소수라고 가정한다. 또한, challenge space는 $\{0, 1, \cdots, e-1\}$으로 설정한다. 말이 따로 증명이지, 사실 기존 증명 방식을 그대로 적용하면 증명이 된다.

자신있게 말할 수는 없으나, 내 생각에는 아마 $\mathbb{Z}_n^{*}$에서 random한 원소를 뽑는 것이 어렵지 않기 때문에 가능한 증명일 것이다. Simulator를 만들거나 아니면 단순히 Protocol을 따를 때, group의 random element를 뽑는 과정이 필수적이다. 그런데 group order를 모른다면 이걸 하기가 상당히 난감할 것이다.

하지만 $\mathbb{Z}_n^{*}$에서는 단순히 $\mathbb{Z}_n$의 원소를 하나 뽑은 다음 GCD를 계산해, $1$이 나오면 그 값을 그대로 제출하면 되므로 문제가 없다.

 

Sigma Protocol : Security Analysis

이제 다양한 Sigma Protocol들의 안전성을 분석해보자. 이를 위해서는 Schnorr's Protocol의 안전성 증명을 복습할 필요가 있다.

  • HVZK (Special HVZK) : accepting conversation을 엿듣는 것이 의미가 없다는 것을 증명한다. (Eavesdrop = Direct Attack)
  • Soundness (Knowledge Soundness) : 증명을 만들 수 있다면 $sk$를 복원하는 것이 (Schnorr에서는 DL을 해결) 가능함을 증명한다. 

여기서 우리가 바꿔야 할 부분은 "Schnorr에서는 DL을 해결" 부분이다. 그러니, 다음 정의는 자연스럽다.

 

정의 (One-Way KeyGen) : $G$는 $(sk, pk) = (x, y) \in \mathcal{R}$을 생성하는 알고리즘이다. adversary가 $y$를 받았을 때, 효율적인 알고리즘으로 $y$에 대한 witness를 계산하는 게임을 생각하자. 이 게임에 대한 adversary의 advantage가 negligible이라면, 이 KeyGen 알고리즘을 one way라고 부른다. 

 

이제 앞선 Schnorr's Protocol에 대한 증명에서 Discrete Logarithm에 대한 advantage를 위 게임에 대한 advantage로 바꾸면, 모든 증명을 그대로 할 수 있다. 즉, KeyGen 자체가 one way라면 이 Sigma Protocol도 안전함을 증명할 수 있다. 결국 $sk$를 $pk$를 통해서 계산하기 어렵다는 가정만 있으면 된다.

 

다시 한 번 강조하지만 구체적인 advantage에 대한 식들은 이전 글과 동일하므로, 여기서는 생략한다. 

 

Signatures from Sigma Protocol : Security Analysis

Fiat-Shamir Heuristic을 적용하면, Schnorr's Signature와 같은 방식으로 Sigma Protocol에서도 Signature를 만들 수 있다. 

이제 이 Signature의 안전성을 분석해보자. 이를 위해서는, 역시 Schnorr's Signature의 안전성 증명을 복습할 필요가 있다.

  • $r$-impersonation에 대한 분석은 여전히 유효하다. Discrete Logarithm을 위에서 정의한 One-Way KeyGen으로 바꾸면 된다.
  • Signature Scheme에 대한 분석을 보자. 여기서 핵심은 signing query에서 random oracle access가 겹치는 경우를 전부 제거하기 위해 Union Bound + Difference Lemma를 사용한 것이다. 특히, 우리는 random oracle access가 겹치는 확률에 대한 upper bound를 구하기 위해서 $u_{ti}$에 대한 분포를 사용하였다. Schnorr's Signature에서는 $u_{ti}$가 $\mathbb{G}$ 위에서 uniform random이었으므로, 각 원소가 될 확률이 $1/q$라고 결론낼 수 있었다. 그러나 지금의 우리는 commitment $t$의 값이 어떤 분포를 따르는지 강제하지 않았다. 이 부분을 해소해야 한다. 이제 다음 정의는 자연스럽다. 

정의 (Unpredictable Commitments) : conversation $(t, c, z)$가 집합 $\mathcal{T} \times \mathcal{C} \times \mathcal{Z}$에 속한다고 하자. 각 $(x, y) \in \mathcal{R}$과 $\hat{t} \in \mathcal{T}$에 대하여, $y$에 대한 witness $x$를 증명하고자 하는 Prover와 이를 인증하는 Verifier가 conversation $(t, c, z)$를 만들었을 때, $t = \hat{t}$가 성립할 확률이 최대 $\delta$인 경우, 이를 $\delta$-unpredictable commitment를 가지는 Sigma Protocol이라 한다. 특히, $\delta$가 negligible이면 단순히 unpredictable commitment를 가진다고 한다.

 

결국에는 Signature Scheme의 안전성 증명의 context에서 각 원소에서 겹칠 확률이 $\delta$ 이하라는 것이다.

즉, Schnorr's Signature의 안전성 증명에서 $1/q$ 부분을 전부 $\delta$로 바꾸기만 하면 모든 결과가 그대로 적용된다.

 

2. Actively Secure Identification Protocols with Sigma Protocols

Actively Secure하다는 것은, 앞에서 예고했듯이 adversary가 Malicious Verifier의 역할을 할 수 있는 경우까지 고려했을 때도 안전하다는 것이다. 즉, 우리가 상대할 adversary는 Verifier 행세를 하면서 Honest Prover와 대화할 수 있는데, challenge를 자기 마음대로 (즉, uniform random이 아니어도 된다) 고를 수 있다는 것이다. 이러한 Protocol을 만들려면 재료가 필요하다. AND/OR-proofWitness Independence가 그 재료들이다. 

 

AND/OR-proof 

이제부터 두 개의 Efficient Relation $\mathcal{R}_0 \subset \mathcal{X}_0 \times \mathcal{Y}_0$와 $\mathcal{R}_1 \subset \mathcal{X}_1 \times \mathcal{Y}_1$이 있다고 하자. 또한, 각각에 대한 Sigma Protocol이 있다고 가정한다. 특히, 이 Sigma Protocol들이 Special HVZK와 Knowledge Soundness를 보장한다고 가정하겠다. 또한, OR-proof을 위하여 $\mathcal{C} = \{0,1\}^n$ 형태를 가정하겠다. (다르게 표현하면, $\mathcal{C}$는 $2^n$ 미만의 음이 아닌 정수들의 집합이다) 이제 이 Sigma Protocol의 AND/OR을 생각해보자. 

 

AND-proof : 두 Relation에 대한 witness가 전부 있음을 증명한다. 즉, 목표는 $$\mathcal{R}_{AND} = \{ ((x_0, x_1), (y_0, y_1)) : (x_0, y_0) \in \mathcal{R}_0, (x_1, y_1) \in \mathcal{R}_1 \}$$을 생각하고, 이 새로운 Efficient Relation에 대한 Sigma Protocol을 만드는 것이다. 이는 어렵지 않은 게, 그냥 $\mathcal{R}_0$와 $\mathcal{R}_1$에 대한 Sigma Protocol을 동시에 돌리면 된다. 한 가지 차이는 Verifier가 두 Protocol에 대한 challenge를 같은 값 $c$로 준다는 것인데, 그래도 Special HVZK와 Knowledge Soundness는 여전히 가져올 수 있다. 증명은 자명하고 직관적이므로 생략한다. Proof Sketch는 책의 Theorem 19.18에 설명되어 있으니 필요하면 참고하자.

 

OR-proof : 두 Relation 중 적어도 하나에 대한 witness가 있음을 증명한다. 중요한 것은, 어느 것에 대한 witness인지는 밝히면 안된다는 것이다. 목표는 $$ \mathcal{R}_{OR} = \{ ((b,x),(y_0, y_1)) : (x, y_b) \in \mathcal{R}_b \} $$에 대한 Special HVZK, Knowledge Soundness를 갖는 Sigma Protocol이다. 이를 위해서, 다음과 같은 과정을 설계한다.

  • Prover가 $\mathcal{R}_b$에서 $y_b$에 대한 witness $x$를 갖고 있다고 가정하자. $d = 1-b$라 하자.
  • 먼저 Prover는 $c_d$를 $\mathcal{C}$에서 random하게 고르고, $(t_d, z_d)$를 $\mathcal{R}_d$에 대한 Simulator에 $(y_d, c_d)$를 넣어서 계산하자.
  • 또한, $(x, y_b) \in \mathcal{R}_b$를 알고 있으니 $\mathcal{R}_b$에 대한 Sigma Protocol을 돌려서 commitment $t_b$를 구한다. 이제 $(t_0, t_1)$을 Verifier에게 보낸다.
  • Verifier는 역시 challenge $c$를 $\mathcal{C}$에서 random하게 고르고, 이를 Prover에게 전달한다.
  • Prover는 $c_b = c \oplus c_d$를 계산하고, $c_b$를 $\mathcal{R}_b$에 대한 Sigma Protocol의 commitment 값으로 둔다.
  • 이제 $t_b, c_b$를 사용하여 response $z_b$를 계산한다. 그 후, $(c_0, z_0, z_1)$을 Verifier에게 보낸다.
  • Verifier는 $c_1 = c \oplus c_0$를 계산하고, $(t_0, c_0, z_0)$와 $(t_1, c_1, z_1)$이 accepting conversation인지 확인하고 accept/reject.

이제 이 Protocol의 다양한 성질들을 증명하자. Completeness는 자명하다. 

  • Knowledge Soundness : 여기서 중요한 점은 $c$의 값이 $c'$으로 달라지면, $c_0$의 값이 달라지거나 $c_1$의 값이 달라지거나 둘 중 하나는 일어난다는 것이다. 이는 $c_0 \oplus c_1 = c$이기 때문이다. 그러니 결국 $\mathcal{R}_0$ 또는 $\mathcal{R}_1$에서 Witness Extractor를 사용할 수 있고, 증명 끝.
  • Special HVZK : $y_0, y_1, c$를 input으로 받으면 $c_0$를 $\mathcal{C}$에서 random하게 고르고, $c_1$을 $c_0 \oplus c$로 둔 다음, $(y_0, c_0)$와 $(y_1, c_1)$ 각각에 대하여 Simulator를 돌려주면 된다. 분포가 같음은 직관적으로 자명하고 직접 보이기도 어렵지 않다. 이러면 증명 끝.

 

Witness Independence

앞에서 우리는 Special HVZK면 accepting conversation을 보는 것으로는 verifying key/public key에서 얻을 수 있는 정보 외에는 얻을 수 있는 것이 없다고 했고, 특히 Prover가 어떤 witness를 사용하고 있는지에 대한 정보가 없다고 말했다. 이에 대한 엄밀한 설명이 필요하다.

 

정의 : Sigma Protocol을 갖는 Efficient Relation $\mathcal{R}$이 있고, $(x, y) \in \mathcal{R}$이 있다. 우리의 adversary는 $y$의 값을 알고 있으며, [자신이 $y$에 대한 witness $x$를 알고 있음을 증명하려고 하는 Prover 여러 명]과 동시에 대화할 수 있다. 즉, 이들을 상대로 Verifier 행세를 할 수 있으며, 이때 꼭 Verifier의 Protocol을 정직하게 따를 필요는 없다. 이제 adversary는 output space $\mathcal{S}$에 속하는 output $s$를 낸다. $\theta (x, y, s)$를 adversary가 $s$를 output으로 낼 확률이라 하자. 

 

정의 : Witness Independence란, 모든 adversary $\mathcal{A}$에 대해서, 각 $y \in \mathcal{Y}$와 $x, x' \in \mathcal{X}$, $s \in \mathcal{S}$에 대하여, $(x, y), (x', y) \in \mathcal{R}$이라면, $$ \theta (x, y, s) = \theta(x',y,s)$$라는 것이다. 특히, adversary는 efficient 하지 않아도 된다. 결국 output과 witness는 완전히 독립적이라는 뜻.

 

이제 Special HVZK면 Witness Independent함을 보일 수 있다. 증명은 책의 Theorem 19.21에 나와있으나, 여기서는 생략한다. 

핵심은 어쨌든 어떤 witness $x$를 사용했냐와 무관하게 accepting conversation의 분포가 (Simulator의 그것과) 같다는 것이다.

우리의 adversary가 바라보는 정보가 $x$와 아예 독립적인데 그것에서 $x$에 대한 정보를 뽑아낼 수는 없을 것이다.

 

이제 준비가 끝났으니, 우리의 목표인 Actively Secure Identification Protocol에 대하여 알아보자.

 

Actively Secure Identification Protocol

아이디어는 Eavesdrop/Direct에 안전한 Sigma Protocol을 두 개 가져와서 OR-proof를 만드는 것이다.

 

즉, $\mathcal{R} \subset \mathcal{X} \times \mathcal{Y}$가 있고, 이에 대한 Special HVZK, Knowledge Soundness를 가지는 Sigma Protocol이 있다고 가정하자. 또한, 이 $\mathcal{Y}$의 임의의 원소에 대해서 witness를 찾는 것이 어렵다고 가정하자. 즉, one-way임을 가정하자. 이제 $\mathcal{R}$과 $\mathcal{R}$을 가지고 OR-proof에 대응되는 Sigma Protocol을 만들자.

이제부터 이 Protocol이 Actively Secure함을 증명할 것이다. 

 

정리 : 위 context에서, 새로운 Protocol을 Active Attack으로 (즉, Malicious Verifier 행세) advantage $\epsilon$으로 깨는 efficient adversary $\mathcal{A}$가 있다고 가정하자. 이때, $\mathcal{R}$의 one-way 게임을 (즉, witness를 찾는 게임을) advantage $\epsilon'$으로 이기는 efficient adversary $\mathcal{B}$가 있으며, 특히 $$\epsilon' \ge \frac{1}{2} (\epsilon^2 - \epsilon / N)$$

증명을 위해서는 $\mathcal{B}$를 하나 만들어주면 된다. 이제 $y' \in \mathcal{Y}$를 하나 받고, $\mathcal{A}$를 활용하여 $y'$의 witness를 하나 구해주는 알고리즘을 설계해보자.

이를 위해서, 우리는 먼저 $(x, y) \in \mathcal{R}$을 하나 random하게 생성하고, (KeyGen) $b \in \{0, 1\}$을 하나 random하게 고른다.

만약 $b=0$이라면, $Y = (y, y')$를, $b=1$이라면, $Y = (y', y)$를 $\mathcal{A}$가 증명을 시도할 대상으로 선정한다. 이제 $X = (b,x)$라 하자.

이때, $(X, Y)$의 분포가 $\mathcal{R}$ 두 개를 OR해서 얻은 Relation의 원소의 분포와 동일함에 주목하라. 

  • $\mathcal{A}$가 Malicious Verifier 행세를 하기를 원한다면, 우리는 $X = (b, x)$가 witness임을 이미 알고 있으니 이를 이용하여 Sigma Protocol에 따라주면 된다. 물론, $\mathcal{A}$가 어떻게 challenge를 고르는지에 대해서는 신경쓰지 않는다. 알아서 자기 할 일 하게 두면 된다...

이제 $\mathcal{A}$가 $Y$의 witness를 안다는 것을 보이기 위해서 증명을 시도할 것이다. 우리는 이때 정직하게 challenge를 random하게 주면 된다. $\mathcal{A}$가 이 증명에 성공할 확률은 정의상 $\epsilon$이다. 그러니 Rewinding Lemma를 이용하면 우리는 $\epsilon^2 - \epsilon / N$의 확률로 증명에 두 번 성공하는 사례를 찾을 수 있고, Witness Extractor를 이용하여 $Y$의 witness를 하나 얻을 수 있다. 그런데, Witness Independence에 의하여 이 witness가 $y'$의 witness를 포함할 확률은 정확히 $1/2$이다. 그러니 우리가 여기서 $y'$의 witness를 얻을 advantage는 $$\epsilon' \ge \frac{1}{2} (\epsilon^2 - \epsilon / N)$$

 

OR-proof를 꺼내지 않더라도 Active Attack을 막을 수 있다. 주어진 $y$에 대한 witness 2개를 찾기가 힘든 Protocol을 이용하면 된다. 대충 이런 방식.

  • 주어진 $y$에 대한 witness가 정말 많으나, 서로 다른 witness 2개를 찾기가 어렵다고 가정하자.
  • $(x, y) \in \mathcal{R}$을 하나 갖고, adversary에게 Active Attack으로 $y$의 witness를 찾아보라고 하자.
  • 특히, 우리가 이미 $(x, y) \in \mathcal{R}$을 하나 알고 있으니, 마음껏 증명을 제공할 수 있다.
  • adversary가 성공하고 witness $x'$을 찾았다고 가정하자. $x' \neq x$이면 witness 2개를 찾았으니 가정을 깼다.
  • 특히 Witness Independence가 있으니 $x' \neq x$일 확률은 (가능한 witness가 많다면) 매우 높다.

그 예시가 Okamoto's Identification Protocol이다. Finite Abelian Group of (Known) Prime Order $q$인 $\mathbb{G}$를 잡자. 또한, $g, h$를 $\mathbb{G}$의 두 원소라고 하자. Okamoto's Protocol에서는 $u \in \mathbb{G}$가 있을 때, $g^\alpha h^\beta = u$인 $(\alpha, \beta)$를 알고 있는지 물어본다. 이는 앞에서도 언급했듯이 Homomorphism의 Pre-Image를 물어보는 것과 같으며, Special HVZK와 (Witness Independence) Knowledge Soundness를 가진다. 또한, $u$의 서로 다른 witness를 두 개 알고 있다면, 이를 이용해 $h$의 $g$에 대한 이산로그를 계산할 수 있다. 또한, witness의 개수는 항상 ($g, h$가 identitiy인 경우는 제외하자) $q$개다. 이제 준비가 끝났다.

 

정리 : Okamoto's Protocol을 Active Attack으로 advantage $\epsilon$으로 깰 수 있는 efficient adversary $\mathcal{A}$가 있다고 하자. 이때, $\mathbb{G}$ 위에서의 Discrete Logarithm 문제를 advantage $\epsilon'$으로 해결할 수 있는 efficient adversary $\mathcal{B}$가 존재한다. 이때, $$\epsilon' \ge (1-1/q) (\epsilon^2 - \epsilon / N)$$

증명은 위에서 말한대로 하면 된다. $\mathcal{B}$가 $g, h$를 갖고 있고, $h$의 $g$에 대한 이산로그를 구하려고 한다고 하자.

이제 $\alpha, \beta$를 $\mathbb{Z}_q$에서 각각 random하게 고르고, $u = g^{\alpha} h^{\beta}$를 구한다.

그 후, $\mathcal{A}$에게 $g, h, u$를 주면서 witness를 찾아보라고 하자. 증명은 우리가 이미 $(\alpha, \beta)$를 알고 있으니 시키는대로 전달하자.

만약 $\mathcal{A}$가 Verifier에게서 accept를 얻는 것에 성공했다면, Rewinding Lemma를 적용하여 $u$에 대한 witness를 복구하자.

이때, Witness Independence 성질에서 이 witness가 $(\alpha, \beta)$와 다를 확률은 $1-1/q$가 된다.

이 경우, 우리는 서로 다른 두 witness를 얻는 것에 성공하고, 이를 통해 Discrete Logarithm을 계산할 수 있다. 증명 끝.

 

'Cryptography' 카테고리의 다른 글

Lattice Attacks Introductory Survey  (0) 2021.07.22
Inequality Solving with CVP  (0) 2021.03.26
Schnorr's Protocol & Signature  (0) 2021.02.13
Diophantine Argument of Knowledge  (4) 2021.01.20
Leftover Hash Lemma and its Applications  (0) 2020.10.18

Dan Boneh와 Victor Shoup의 암호학 책 toc.cryptobook.us/book.pdf의 19장의 첫 부분을 정리한다. 어느 정도 사전지식을 가정한다.

글을 읽기 전에, 이 블로그에 있는 이 글의 앞부분과 Matthew Green의 이 글을 읽고 오는 것을 추천한다. 

이 글의 목표는 다음 내용들을 어느 정도 완전하게 정리하는 것이다. 직관만으로 넘기지 않고 formal 하게 다 증명하는 것이 목표.

가장 대표적이고 기초적인 zero-knowlege proof 중 하나지만 이 글의 포인트는 ZK와 거리가 있다. 

Schnorr's Protocol의 HVZK는 보이는 것이 어렵지 않기 때문인데, HVZK 대신 아예 ZK로 넘어가면 더욱 난이도가 있을 것 같다.

 

이 글의 모든 random은 uniform random이다. 이 글의 목표는 다음과 같다.

  • Schnorr's Protocol의 안전성과 HVZK, Rewinding Lemma
  • Schnorr's Signature와 그 안전성, Fiat-Shamir Heuristic

 

1. Schnorr's Protocol의 안전성과 HVZK, Rewinding Lemma

기본적인 context를 위하여, Identification Protocol을 생각해보자. 이 Protocol에서는 기본적으로 두 사람, Prover와 Verifier가 있다.

Prover는 자신이 비밀키 $sk$를 가지고 있음을 인증키 $vk$를 소유하고 있는 Verifier에게 증명하려고 한다.

이 둘은 서로 대화를 하면서 정보를 교환하고, 최종적으로는 Verifier가 Prover의 증명을 accept 하거나 reject 한다.

 

이 Protocol이 유용하고 안전하려면, 여러 가지 시나리오를 고려해야 한다.

  • $sk$를 가지고 있는 Honest Prover는 Verifier가 accept 하는 증명을 만들 수 있어야 한다.
  • $sk$를 가지고 있지 않은 Malicious Prover가 Verifier가 accept 하는 증명을 만들 수 있으면 안된다.
  • Prover와 Verifier의 대화를 엿듣는 Eavesdropper가 $sk$에 대한 추가적인 정보를 복원할 수 있으면 안된다.

물론, ~~를 할 수 있다는 것은 모두 효율적인 시간 내에 가능하다는 것이다. 위 성질들을 순서대로 Completeness, Soundness, Zero-Knowledge라고 한다. 특히, 세 번째 성질은 Verifier도 $sk$에 대한 정보를 얻을 수 없다는 것을 의미한다. 이들을 어떻게 formalize 하는지는 Schnorr's Protocol을 보며 설명한다.

 

Schnorr's Protocol

Cyclic Group $\mathbb{G} = \langle g \rangle$ of prime order $q$를 하나 준비한다. Prover의 비밀키는 $sk = \alpha \in \mathbb{Z}_q$, Verifier의 공개 인증키는 $vk = u = g^\alpha \in \mathbb{G}$이다.

이제 증명을 위해서 Prover와 Verifier는 다음과 같은 과정을 거친다. $\mathcal{C}$를 $\mathbb{Z}_q$의 subset이라 하자.

  • 1. Prover는 random $\alpha_t \in \mathbb{Z}_q$를 고르고, $u_t = g^{\alpha_t}$를 계산한다. $u_t$를 Verifier에게 보낸다.
  • 2. Verifier는 random $c \in \mathcal{C}$를 고르고, 이를 Prover에게 보낸다. 이 값을 Challenge라고 한다.
  • 3. Prover는 $\alpha_z = \alpha_t + \alpha c \in \mathbb{Z}_q$를 계산하고, Verifier에게 보낸다.
  • 4. Verifier는 $g^{\alpha_z} = u_t \cdot u^c \in \mathbb{G}$인지 확인하고, 그에 맞춰 accept/reject.

이들이 서로에게 보내는 값인 $(u_t, c, \alpha_z) \in \mathbb{G} \times \mathcal{C} \times \mathbb{Z}_q$를 conversation이라 한다.

특히, 그 중 Verifier가 accept 하도록 하는, 즉 $g^{\alpha_z} = u_t \cdot u^c$인 conversation을 accepting conversation (for $u$)이라 한다.

 

Completeness는 자명하다. 말 그대로 대입만 해서 Honest Prover의 proof가 accept가 되는지만 보면 되기 때문이다.

이제 Soundness와 Zero-Knowledge를 (정확하게는 HVZK를) 보면 된다. 둘 다 상당히 재밌는 아이디어를 사용한다.

 

Soundness 증명 : 직관편

$\alpha$를 모르는 Malicious Prover가 증명을 시도한다고 하자. 그러면 Step 2에서 Verifier가 challenge $c$를 보내면, Malicious Prover는 $\alpha_t + \alpha c$의 값을 정확하게 반환해야 한다. 만약 Malicious Prover의 성공 확률이 높다면, Verifier가 다른 challenge $c'$을 보냈더라도 $\alpha_t + \alpha c'$의 값을 정확하게 반환할 수 있을 것이다. 그런데 애초에 $\alpha_t + \alpha c$와 $\alpha_t + \alpha c'$을 맞춘 시점에서 Malicious Prover는 간단한 연립방정식을 통해서 $\alpha$를 복원할 수 있다.

이는 결국, 직관적으로, "두 번 연속해서 증명에 성공할 수 있다면 Discrete Logarithm을 깰 수 있다"는 의미가 된다.

Discrete Logarithm이 어려운 문제라는 것은 우리의 기본적인 가정이다. 그러니 증명을 한 번 성공할 확률도 낮다는 것이 결론이고 직관적인 증명 끝.

 

Soundness 증명 : formal

빠르게 advantage라는 표현을 정립하고 가자. advantage란, 대강 "문제 효율적인 시간 안에 해결할 확률"이다.

예를 들어서, Discrete Logarithm 문제에 대한 advantage는 효율적인 시간 내에 DL을 구해낼 확률이다.

즉, Discrete Logarithm이 어렵다는 말은 사실 advantage가 negligible 하다는 말과 같다. 이 advantage로 많은 암호학 증명이 이루어진다.

 

정리 : $\mathbb{G}$ 위에서의 Discrete Logarithm이 어렵고, $N = |\mathcal{C}|$가 super-poly라면 이 Protocol은 Soundness를 갖는다.

특히, efficient adversary $\mathcal{A}$가 $sk$ 없이 Verifier가 accept 하는 증명을 만드는 문제에 대한 advantage를 $\epsilon$이라 한다면, $\mathbb{G}$ 위의 Discrete Logarithm을 advantage $\epsilon'$으로 해결하는 efficient adversary $\mathcal{B}$가 존재하여, $\epsilon' \ge \epsilon^2 - \epsilon / N$이 성립한다. 이를 정리하면, $$\epsilon \le \frac{1}{N} + \sqrt{\epsilon'}$$

직관적으로 말하면, [Protocol을 "직접 공격"으로 깰 수 있다면 Discrete Logarithm 문제도 풀 수 있다]는 의미가 되겠다. 

 

증명을 위해서는 위의 직관적인 증명을 엄밀하게 바꿔야 한다. 우리의 궁극적인 목표는 efficient adversary $\mathcal{B}$를 $\mathcal{A}$를 이용해서 만드는 것이다. 

이제부터 $\mathcal{B}$의 입장에서 설명을 한다. 우리는 $\mathcal{A}$의 알고리즘을 모르지만 알고 있다. 이게 무슨 뜻이냐면,

  • 애초에 $\mathcal{A}$의 존재 자체가 증명을 위한 하나의 가정이니, $\mathcal{A}$의 알고리즘은 모른다.
  • 하지만 $\mathcal{B}$를 construct 하는 입장에서, 우리는 $\mathcal{A}$의 알고리즘을 적극적으로 사용할 수 있다.

이제 다음과 같은 과정을 거치자.

  • 우리는 $\mathcal{A}$를 위한 Verifier 행세를 할 것이다. 첫 단계처럼, $\mathcal{A}$에게 $u_t$를 받는다.
  • 이제 우리가 Challenge를 줄 차례다. 그러니 $c_1 \in \mathbb{Z}_q$를 하나 전달하자. $\mathcal{A}$가 $\alpha_{z_1}$을 줄 것이다. 이게 맞는지 판단하자.
  • 이제 $\mathcal{A}$의 내부 상태를 Challenge를 주기 전 상태로 Rewind 하자. 이 부분이 핵심인데, 이게 가능한 이유는 우리가 $\mathcal{A}$의 알고리즘을 알고 있기 때문이다. $\mathcal{B}$와 $\mathcal{A}$가 서로 "싸우고 있는" 두 사람인 게 아니라, Protocol을 깨기 위해서 서로 역할극을 하고 있는 기계임에 집중하자. 이렇게 생각하면 앞선 직관적인 증명에서 우리가 사용한 일종의 시간여행과 what if 형태의 증명이 더욱 이해가 잘 되고 엄밀해진다. 최소한 나한테는 그랬다 ㅋㅋ
  • 다시 Challenge를 줄 차례다. 그러니 $c_2 \in \mathbb{Z}_q$를 하나 전달하자. $\mathcal{A}$가 $\alpha_{z_2}$를 줄 것이다. 이게 맞는지 판단하자.
  • 직관적인 증명에서도 언급했지만, 두 번 연속 accept가 뜨고 $c_1 \neq c_2$면 Discrete Logarithm이 깨진다.

그러니, 우리가 볼 확률은 "두 번 연속 accept가 뜨고 $c_1 \neq c_2$일 확률"이다. 이 확률의 lower bound를 구하면 되겠다.

 

이를 위해서 사용하는 정리가 Rewinding Lemma다. 사실 이거 보고 싶어서 책을 읽기 시작한 것이다 ㅎㅎ..

 

정리 (Rewinding Lemma) : $S, T$는 finite nonempty set이고 $f : S \times T \rightarrow \{0, 1\}$은 random function이다. 즉, $S \times T$의 원소가 input으로 들어오면 $0$ 또는 $1$을 그 원소에 대해 정해진 확률로 뽑아내는 함수이다. 이제 $X, Y, Y'$가 mutually independent random variable이고 $X$는 $S$ 위의 random variable, $Y, Y'$은 $T$ 위의 uniform random variable이라 하자. 이때, $\epsilon = P(f(X, Y) = 1)$이라 하고, $N = |T|$라 하자. 그러면 $$P(f(X, Y) = f(X, Y') = 1, Y \neq Y') \ge \epsilon^2 - \epsilon / N$$

 

첨언하자면, 원래 책에서는 $f$를 random function이 아니라 그냥 function으로 둔다. 하지만 개인적인 생각으로 이 context에서 $f$를 그냥 function으로 두면 안된다고 생각한다. adversary $\mathcal{A}$가 challenge $c$를 받은 뒤에도 확률적인 알고리즘을 사용할 수 있기 때문이다. 하지만 증명은 책처럼 그냥 계산이다.

 

정리 증명 : $p_x$를 $P(X = x)$라고 하고, $p_{xy}$를 $f(x, y) = 1$일 확률이라고 하자. (기존 증명에서는 $p_{xy}$가 0 or 1)

먼저 $s_x = \sum_{y \in T} p_{xy}$라 정의하면, $\epsilon N = \sum_{x \in S} p_x s_x$이 성립함은 정의상 자명하다. 이제 $$ P(f(X, Y) = f(X, Y') = 1, Y \neq Y') \ge \frac{1}{N^2} \sum_{x \in S} p_x (s_x^2 - s_x) \ge \frac{1}{N^2}((\epsilon N)^2 - \epsilon N) = \epsilon^2 - \epsilon / N$$을 얻는다. 첫 부등식은 단순 식 전개와 $0 \le p_{xy} \le 1$이므로 $p_{xy}^2 \le p_{xy}$가 성립함에서 얻어진다. 두 번째 부등식은 Cauchy-Schwarz에서 얻어진다.

 

이제 $S$를 $\alpha, u, u_t$ 등의 선택을 이루는 집합, $T$를 challenge space라고 하고, $f$값이 $1$이 나오는 것을 accept에 대응시키자.

그러면 모든 context가 정확하게 일치하고, 결국 $\epsilon' \ge \epsilon^2 - \epsilon / N$을 얻는다. 여기서 $\epsilon \le 1/N + \sqrt{\epsilon'}$을 얻는 것은 단순 식 조작. 증명 끝.

 

Honest Verifier Zero-Knowledge

정의 : Protocol이 Honest Verifier Zero-Knowledge라는 (HVZK) 것은, $vk$를 input으로 받고 Honest Prover와 Honest Verifier이 만드는 accepting conversation의 분포를 정확히 따르는 output을 뽑아내는 효율적인 Simulator가 존재한다는 것이다. 이는 모든 정당한 $(vk, sk)$ 쌍에 대해 성립해야 한다. 

 

정의 자체가 formal 하니, 이 정의가 우리의 직관과 맞는 이유를 설명해야 한다.

이 정의의 의미는, accepting conversation처럼 보이는 걸 만들기 위해서 $vk$만 알아도 충분하다는 것이다.

이는 역으로 생각하면, accepting conversation을 보는 것으로는 $vk$를 넘어서는 다른 정보를 뽑기가 불가능하다는 것이다.

만약 가능하다면, $vk$로 accepting conversation을 simulate 한 후, 그 결과를 그대로 사용해서 정보를 뽑으면 된다.

그러니 "accepting conversation을 활용해서 뽑을 수 있는 정보는 $vk$로도 그대로 뽑을 수 있다". 우리가 원하는 것이다. 

 

결론 : 공격자 또는 Verifier가 accepting conversation을 듣더라도 $sk$에 대한 추가적인 정보를 얻을 수 없다.

 

결국 Schnorr's Protocol에서 우리가 필요한 것은 $g^{\alpha_z} = u_t \cdot u^c$이다.

Protocol 자체에서는 $u_t$를 고르고, $c$를 받은 다음 $\alpha_z$를 제출해야 했고, 이 순서 때문에 Discrete Logarithm의 지식이 필요했다.

그러나 accepting conversation을 뽑아내기 위해서는, 순서를 바꿔서 $\alpha_z$와 $c$를 고른 다음 $u_t$를 계산하면 된다.

이 두 방법이 뽑아내는 결과가 같은 확률분포를 따름은 자명하고, 결국 Schnorr's Protocol이 HVZK임을 얻는다.

이와 같이, Simulator를 하나 설계하는 방식으로 HVZK를 증명한다. 비슷한 컨셉으로 Statistical ZK도 존재한다.

이 경우는, Simulator가 뽑아내는 분포가 Prover-Verifier가 뽑는 분포와 "가까우면" (Statistical Distance) 된다.

 

 

2. Schnorr's Signature와 그 안전성, 그리고 Fiat-Shamir Heuristic

이제 우리는 Schnorr's Protocol을 Signature Scheme으로 바꾸는 작업을 할 것이다. 이를 위해서, Fiat-Shamir Heuristic을 동원한다.

나중에 보면 알겠지만, 이는 interactive한 Schnorr's Protocol을 non-interactive 하게 바꾸는 역할도 할 수 있다.

 

Schnorr's Signature

그대로 비밀키는 $sk = \alpha$, 공개키는 $pk = u = g^{\alpha} \in \mathbb{G}$다. 해시 함수 $H : \mathcal{M} \times \mathbb{G} \rightarrow \mathcal{C}$를 하나 준비한다.

메시지 $m \in \mathcal{M}$을 서명하고 싶다면, 랜덤한 $\alpha_t \in \mathbb{Z}_q$를 고르고, $u_t = g^{\alpha_t}$를 계산한다.

그 후, $c = H(m, u_t)$를 계산한 다음, $\alpha_z = \alpha_t + \alpha c \in \mathbb{Z}_q$를 계산한다. 최종 서명은 $(u_t, \alpha_z)$가 된다. 

 

이제 이 서명을 Verify하려면, $m$과 그 서명 $(u_t, \alpha_z)$를 받고 $c = H(m, u_t)$을 계산한 다음, $g^{\alpha_z} = u_t \cdot u^c$인지 확인하면 된다.

이 과정은 공개키를 알고 있는 사람이면 할 수 있다. 핵심은 challenge를 해시 함수로 고른다는 것이다. 그리고 이게 Fiat-Shamir Heuristic이다.

 

Schnorr Signature's Security, Fiat-Shamir Heuristic : 직관

직관적으로는 해시 함수가 나오면 "아무것도 못하기 때문에", challenge를 해시로 잡나 완전히 랜덤으로 잡나 별 차이가 없을 것이다.

challenge가 정말 랜덤이면 서명을 만들기가 어렵다는 것을 이미 증명했으니, 해시를 어떻게 잘 비벼먹지 못한다면 이 서명 알고리즘도 안전할 것이다. 

암호학에서는 이처럼 "해시 함수가 나오면 아무것도 못한다"는 말을 formalize 하고, 하나의 model로 만들었다. 이를 Random Oracle Model이라고 한다.

상당히 사기같은 가정을 하나 깔고 가는데, 힘이 굉장히 강력하다. Random Oracle Model에 대한 고찰은 Matthew Green의 이 글 참고.

 

Random Oracle Model이란, 최소한 지금의 context에서는, 해시 함수 $H$를 하나의 Random Oracle로 보자는 것이다.

Random Oracle이란, 각 input에 대해서 output을 uniform random하게 뽑아내는 black-box이다.

단, 동일한 input이 이전에 들어왔다면, 이전에 뱉은 output을 그대로 뱉는다. 함수를 input을 받아가면서 uniform random하게 제작한다고 생각하자.

 

이렇게 생각하면, 해시 함수가 정말 "나오면 아무것도 못하는" 대상이 된다. 이 가정을 깔아야 안전성을 증명할 수 있다.

 

Schnorr Signature's Security, Fiat-Shamir Heuristic  : formal proof

이제 엄밀한 증명을 시작하기 전에, Signature Scheme이 안전하다는 것이 무엇인지를 정의할 필요가 있다.

 

Signature Security Game : 우리의 adversary $\mathcal{A}$는

  • $Q_s$개의 signing query를 보낼 수 있다. 즉, $m \in \mathcal{M}$을 보내서 그에 대한 정당한 서명을 얻는다.
  • $Q_{ro}$개의 random oracle query를 보낼 수 있다. 즉, $H$에 대한 input을 보내서 그에 대한 output을 얻는다.

목표는 메시지 하나에 대한 정당한 서명을 만들어 내는 것이다. 단, signing query에서 보냈던 메시지와 달라야 한다.

이 문제에 대한 advantage가 작다는 것을 보이는 것이 우리의 목표가 되겠다. 증명을 위해서, 하나의 게임을 더 정의해야 한다.

 

$r$-impersonation Game : 다시 Identification Protocol로 돌아오자. 우리의 adversary $\mathcal{A}$는

  • $r$명의 독립적인 Verifier와 동시에 대화할 수 있다. 그 중 아무 한 명에게 accept를 받는 증명을 만들면 성공. 

 

또한, 확률 계산을 편하게 하기 위해서 사용하는 보조정리를 몇 개 소개한다.

 

Difference Lemma : 사건 $W_0$와 $W_1$가 있다. 이때, 사건 $Z$가 있어 $W_0 \cap Z^C$가 발생하는 것이 $W_1 \cap Z^C$가 발생하는 것과 동치라면, $$ |P(W_0) - P(W_1)| \le P(Z)$$가 성립한다. 증명은 간단하다. $P(W_0 \cap Z^C) = P(W_1 \cap Z^C)$이므로, 결국 $$ |P(W_0) - P(W_1)| = |P(W_0 \cap Z) - P(W_1 \cap Z)| \le P(Z)$$

 

Union Bound : $P(A_1 \cup A_2 \cup \cdots \cup A_n) \le \sum_{i=1}^n P(A_i)$. 증명은 자명하므로 생략.

 

이제 본격적으로 증명을 하자. Singature Security => $r$-impersonation => Discrete Logarithm 순으로 증명을 한다.

 

Step 1 : $r$-impersonation에 대한 advantage의 upper bound를 구하자.

정리 (Forking Lemma) : $|\mathcal{C}| = N$이라 하자. efficient adversary $\mathcal{A}$가 $r$-impersonation을 advantage $\epsilon$으로 공격할 수 있다면, efficient adversary $\mathcal{B}$가 있어 $\mathbb{G}$ 위에서의 Discrete Logarithm 문제를 advantage $\epsilon'$으로 해결할 수 있다. 이때, $\epsilon' \ge \epsilon^2 / r - \epsilon / N$이 성립하고, 이를 정리하면 $$\epsilon \le r/N + \sqrt{r \epsilon'}$$

 

증명은 Schnorr's Protocol의 Soundness 증명과 크게 다르지 않다. $\mathcal{A}$가 승리하려면, 결국 $r$개의 Verifier 중 하나에게 accept를 얻어내야 한다.

이제 $i$번째 Verifier에게 accept를 얻어낼 확률을 $\epsilon_i$라 하면, 정의상 $\epsilon = \sum_{i=1}^r \epsilon_i$임이 자명하다. 이제 $\mathcal{A}$를 활용해서, $\mathcal{B}$를 제작해보자.

Soundness를 증명할 때와 같은 마음가짐으로 생각하자. 이제부터 우리는 $\mathcal{B}$의 입장에서 생각한다. 

  • 우리는 우선 $\mathcal{A}$를 위해서 $r$개의 Verifier 역할을 모두 해줘야 한다. 
  • $\mathcal{A}$ 역시 공개키 $u$는 알고 있는 상태다. $\mathcal{A}$에게 $u_t$들을 받자.
  • 이제 $r$개의 challenge $c_1, c_2, \cdots , c_r$을 $\mathcal{A}$에게 순서대로 주자. 
  • 그러면 $\mathcal{A}$가 그 $r$개의 challenge 중 하나에 대한 답을 줄 것이다. 이게 정당한지 확인을 하자.
  • $\mathcal{A}$가 $i$번째 challenge에 대한 답을 줬다고 하자. "$i$번째 challenge $c_i$를 주기 전"으로 $\mathcal{A}$를 Rewind 하자.
  • 우리는 $\mathcal{A}$에게 $i$번째 challenge로 $c_i$ 대신 새로운 random challenge $c'$을 준다.
  • 그 후, $i+1, i+2, \cdots, r$번째 challenge는 기존의 challenge $c_{i+1}, \cdots , c_r$을 그대로 준다.
  • 이제 다시 $\mathcal{A}$에게 $r$개의 challenge 중 하나에 대한 답을 받자. 이게 정당한지 확인을 하자.
  • $\mathcal{A}$가 $i'$번째 challenge에 대한 답을 줬다고 하자. 이제 알고리즘 종료.

만약 $i = i'$이고 $c_i \neq c'$이라면, 연립방정식을 통해서 $\alpha$를 계산할 수 있을 것이다. 

이제 index $i$를 통해서 $\alpha$를 계산하는 것에 성공할 확률을 (얻는 advantage를) $\epsilon'$이라 하자. 그러면 Rewinding Lemma에 의해서 $$\epsilon'_i \ge \epsilon_i^2 - \epsilon_i / N$$이 성립한다. 자세하게 설명하자면, Rewinding Lemma에서 $T$를 $i$번째 challenge로 놓고, $S$를 나머지 선택 모두라고 설정한다.

또한, $f$ 값이 $1$인 것을 "$i$번째 challenge에서 accept가 나왔다"라는 것으로 둔다. 그러면 모든 context가 맞고 Rewinding Lemma를 적용할 수 있다.

 

이제 남은 것은 마무리다. $\epsilon' = \sum_{i=1}^r \epsilon'_i$임은 자명하므로, Cauchy-Schwarz 부등식에서 $$\epsilon' = \sum_{i=1}^r \epsilon'_i \ge \sum_{i=1}^r \epsilon_i^2 - \epsilon_i / N \ge \epsilon^2 / r - \epsilon / N$$이며, 간단한 식 조작으로 $\epsilon \le r/N + \sqrt{r\epsilon'}$을 얻을 수 있다. 증명 끝.

 

Step 2 : Signature Scheme을 깨는 것에 대한 advantage의 upper bound를 구하자.

정리 : $Q_s$개의 signing query와 $Q_{ro}$개의 random oracle query를 날릴 수 있는 efficient adversary $\mathcal{A}$가 Signature Scheme을 advantage $\epsilon$으로 깰 수 있다고 하자. 그러면, efficient adversary $\mathcal{B}$가 존재하여 $Q_{ro}+1$-impersonation을 advantage $\epsilon'$으로 성공할 수 있으며, 이때 $$\epsilon \le Q_s(Q_s + Q_{ro} + 1) / q + \epsilon'$$

 

증명의 핵심 아이디어는 "signing query는 Simulator로 대답해도 된다"와 "Verifier의 challenge를 그냥 random oracle의 결과값으로 넣어도 된다".

 

기본 가정을 하나 가져간다. 만약 adversary $\mathcal{A}$가 최종적으로 제출하는 서명이 $(m, u_t, \alpha_z)$라면, $(m, u_t)$에 대한 random oracle query를 이미 한 것으로 간주한다. random oracle query를 날려서 $\mathcal{A}$가 볼 수 있는 손해는 query 개수가 하나 줄어든다는 것 외에는 없다는 것은 자명하다. 그러니, adversary가 사용할 수 있는 random oracle query의 개수를 $Q_{ro} + 1$로 늘려주는 것으로 이 가정에 대한 보상을 해주도록 한다.

 

notation이 몇 개 필요하다. random oracle의 함수를 저장하기 위한 $Map : \mathcal{M} \times \mathbb{G} \rightarrow \mathcal{C}$와, random oracle query를 저장하기 위한 $Explicit : \mathcal{M} \times \mathbb{G} \rightarrow \mathbb{N}$을 정의한다. 이들의 구체적인 정의는 뒤에서 할 것이다. 이제 본격적으로 증명을 하자.

 

$\mathcal{A}$가 $\epsilon$ 이상의 advantage로 다음 게임을 이길 수 있음은 자명하다.

 

Detail 1 : Signing Query

  • $i$번째 signing query로 메시지 $m_i$를 날리는 경우, 다음과 같은 알고리즘으로 생성된 대답을 받는다.
  • $\alpha_{ti}$를 $\mathbb{Z}_q$에서 랜덤하게 고르고, $u_{ti} = g^{\alpha_{ti}}$를 계산한다. $c_i$ 역시 $\mathcal{C}$에서 랜덤하게 고른다.
  • 만약 $(m_i, u_{ti})$가 Map의 domain에 있다면, $c_i = Map(m_i, u_{ti})$로 교체한다. - (*)
  • $Map(m_i, u_{ti})$의 값을 $c_i$로 설정한다. 이제 $\alpha_{zi} = \alpha_{ti} + \alpha c_i \in \mathbb{Z}_q$를 계산하고, $(u_{ti}, \alpha_{zi})$를 반환.

Detail 2 : Random Oracle Query

  • $j$번째 random oracle query로 $(\hat{m_j}, \hat{u_j})$를 날리는 경우, 다음과 같은 알고리즘으로 생성된 대답을 받는다.
  • 만약 $(\hat{m_j}, \hat{u_j})$가 Map의 domain에 있다면, $Map(\hat{m_j}, \hat{u_j})$를 반환한다.
  • 그렇지 않다면, $Explicit(\hat{m_j}, \hat{u_j}) = j$라고 하고 (받은 random oracle query의 index를 저장한다)
  • $Map(\hat{m_j}, \hat{u_j})$의 값을 $\mathcal{C}$에서 random하게 고른 뒤, 이 값을 반환한다.

$\mathcal{A}$가 서명을 하나 제출한다. 이때 $(m, u_t)$는 Explicit의 domain에 속한다고 가정한다. 이게 정당한 서명이면 승리.

 

$\mathcal{A}$가 제출하는 최종 서명의 $(m, u_t)$ 값이 Explicit 배열의 domain에 속해야 한다는 것에 대한 보충설명을 한다. random oracle query에 $(m, u_t)$를 보내야 함은 이미 가정을 통해서, (그리고 $Q_{ro}$를 $Q_{ro}+1$로 대체하는 것으로) 알고 있는 사실이다. 그런데 이미 이 순서쌍이 Map의 domain에 있다면 문제가 생긴다. 하지만, Map의 domain에 속하려면 애초에 Explicit 배열 안에 들어있거나 (즉, 이전 random oracle query에서 $(m, u_t)$가 이미 들어왔다) signing query에서 Map의 domain에 $(m, u_t)$가 들어와야 한다. 그런데 signing query에서 $(m, u_t)$가 Map의 domain에 들어왔다는 것은 사실 $m$에 대한 signing query가 들어왔다는 것이다. 우리는 이미 signing query를 제출한 메시지들에 대한 서명 제작은 공격으로 간주하지 않으므로, 이 경우는 일어날 수 없다. 

 

이제 굵은 글씨로 쓴 (*) 부분을 생각하자. 여기서 $(m_i, u_{ti})$가 겹칠 확률은, 즉 (*) 부분에 도달할 확률을 얼마일까?

겹치려면 기본적으로 $\alpha_{ti}$의 값이 겹쳐야 한다. random oracle을 access 하는 총 횟수가 최대 $Q_s + Q_{ro} + 1$번이므로, 임의의 signing query에서 겹칠 확률은 $(Q_s+Q_{ro}+1)/q$ 이하이다. 또한, signing query가 총 $Q_s$번 있으니, Union Bound에 의하여 한 번이라도 (*)에 도달할 확률은 최대 $Q_s(Q_s+Q_{ro}+1)/q$가 된다. 여기서 Difference Lemma를 사용하면, (*) 부분의 알고리즘을 지워도 $\mathcal{A}$가 이 게임을 이길 확률이 (advantage) 최소 $$\epsilon - Q_s(Q_s+Q_{ro}+1)/q$$ 이상이 된다는 것을 얻는다. 이제부터 (*) 부분의 알고리즘을 지운 상태에서 생각한다.

 

중간 점검을 하자. $\mathcal{A}$는 다음 게임을 $\epsilon - Q_s(Q_s+Q_{ro}+1)/q$ 이상의 advantage로 이긴다.

 

Detail 1 : Signing Query

  • $i$번째 signing query로 메시지 $m_i$를 날리는 경우, 다음과 같은 알고리즘으로 생성된 대답을 받는다.
  • $\alpha_{ti}$를 $\mathbb{Z}_q$에서 랜덤하게 고르고, $u_{ti} = g^{\alpha_{ti}}$를 계산한다. $c_i$ 역시 $\mathcal{C}$에서 랜덤하게 고른다. 
  • $Map(m_i, u_{ti})$의 값을 $c_i$로 설정한다. 이제 $\alpha_{zi} = \alpha_{ti} + \alpha c_i \in \mathbb{Z}_q$를 계산하고, $(u_{ti}, \alpha_{zi})$를 반환.

Detail 2 : Random Oracle Query

  • $j$번째 random oracle query로 $(\hat{m_j}, \hat{u_j})$를 날리는 경우, 다음과 같은 알고리즘으로 생성된 대답을 받는다.
  • 만약 $(\hat{m_j}, \hat{u_j})$가 Map의 domain에 있다면, $Map(\hat{m_j}, \hat{u_j})$를 반환한다.
  • 그렇지 않다면, $Explicit(\hat{m_j}, \hat{u_j}) = j$라고 하고 (받은 random oracle query의 index를 저장한다)
  • $Map(\hat{m_j}, \hat{u_j})$의 값을 $\mathcal{C}$에서 random하게 고른 뒤, 이 값을 반환한다.

이제 이 $\mathcal{A}$를 이용하여, $Q_{ro}+1$-impersonation을 성공시키는 $\mathcal{B}$를 제작하자.

$\mathcal{B}$는 $\mathcal{A}$를 위하여 두 종류의 쿼리를 답해야 하고, 동시에 $Q_{ro}+1$-impersonation도 진행해야 한다.

이제부터 우리는 $\mathcal{B}$ 입장에서 모든 것을 설명한다. 이제 이러한 사고방식이 익숙해졌을 것이라고 믿는다.

 

Detail 1 : Signing Query 대답하기

  • $i$번째 signing query로 메시지 $m_i$를 받은 경우, 다음과 같은 알고리즘으로 생성된 대답을 보낸다.
  • 이제 $(u_{ti}, c_i, \alpha_{zi})$를 accepting conversation에서 랜덤하게 뽑아도 된다. 이는 HVZK 성질에서 $\alpha$가 없어도 할 수 있다.
  • $Map(m_i, u_{ti})$의 값을 $c_i$로 설정하고, $(u_{ti}, \alpha_{zi})$를 보낸다. 다시 한 번 강조하지만, 우리는 $\alpha$의 값이 필요가 없었다.
  • 이렇게 해도 기존의 Signing Query의 대답 방식과 동일하다. 이것을 위해서 우리가 (*) 부분을 날린 것이다. 

Detail 2 : Random Oracle Query 대답하기

  • $j$번째 random oracle query로 $(\hat{m_j}, \hat{u_j})$를 받은 경우, 다음과 같은 알고리즘으로 생성된 대답을 보낸다.
  • 일단 $(\hat{m_j}, \hat{u_j})$가 이미 Map의 domain에 있다면, $Map(\hat{m_j}, \hat{u_j})$를 보내면 된다.
  • 아이디어는, 여기서 Explicit하게 대답한 결과를 challenge로, (즉 해시 결과로) 하는 서명이 $\mathcal{A}$에게 나온다는 것이다.
  • 그러니 $\mathcal{B}$는 새로운 Verifier $V_j$를 하나 불러서, $\hat{u_j}$를 보내고 challenge 값 $c_j$를 받는다. 
  • 이제 Random Oracle 값을 $c_j$로 돌려준다. 즉, $Map(\hat{m_j}, \hat{u_j}) = c_j$라 한다. $c_j$ 역시 random이니 문제 없다.
  • 만약 $\mathcal{A}$가 이에 대한 대답에 성공하면 그대로 $V_j$에게 제출하면 된다!!

즉, $(m, u_t, \alpha_z)$가 새로운 서명이라면, $(\hat{m_j}, \hat{u_j}) = (m, u_t)$인 $j$가 있을 것이고, $V_j$에 $\alpha_z$를 제출하면 성공.

 

그러니 $\epsilon' \ge \epsilon - Q_s(Q_s + Q_{ro} + 1)/q$로 성공하는 $r$-impersonation adversary를 제작하는 것에 성공했다.

 

즉, Signature를 깨는 adversary => $r$-impersonation을 깨는 adversary => Discrete Logarithm을 깨는 adversary를 차례대로 제작했다.

위 결과들을 전부 합치는 것으로 Discrete Logarithm이 어렵다는 가정 + Random Oracle Model에서 Schnorr's Signature의 안전성을 얻는다.

 

정리 : 이전 정리들의 notation을 그대로 가져온다. Signature Scheme을 $\epsilon$의 advantage로 깨는 efficient adversary $\mathcal{A}$가 있다면, Discrete Logarithm을 $\epsilon'$의 advantage로 해결하는 efficient adversary $\mathcal{B}$가 존재한다. 이때, 다음 식이 성립한다. (즉, DL이 어려우면 Signature를 깨는 것도 어렵다) $$\epsilon \le Q_s(Q_s+Q_{ro}+1)/q + (Q_{ro} + 1)/N + \sqrt{(Q_{ro}+1) \epsilon'}$$