cs71107's profile image

cs71107

August 20, 2023 19:00

Multi Key Homomorphic Encryption - 1

cryptography

Introduction

저번 에서, Multi Party HE에 대해 간단하게 설명을 했습니다. 이번 글에서는 Multi Key HE에 대해서 간단히 설명하는 글을 쓰려고 합니다.

이번에 기준으로 한 논문은 여기에서 보실 수 있으며, 저자들의 이름을 따서 CDKS scheme이라고도 불립니다. 논문에서는 기본적인 Multi Key HE에 대한 설계를 바탕으로, BFV, CKKS에 적용시켜 Multi Key BFV, Multi Key CKKS 역시 설명하고 있으나, 이번 글에서는 아직 CKKS를 자세히 설명한 적도 없고, 적용도 그렇게 어렵지 않으므로, Multi Key HE의 구조에 대해서만 설명하려고 합니다.

저번 글의 introduction에서도 설명했지만, remind를 위해서 다시 쓰자면, 기존 HE에는 큰 drawback이 있는데, 그것은 secret key가 하나로 고정돼 있고, 그렇기 위해서 여러 party가 초기에 secret key를 어떻게든 안전하게 ‘잘’ 공유해야 한다는 것입니다. 이것은 매우 어려운 문제입니다.

이런 문제를 해결하기 위해서, HE는 크게 두 가지 방향으로 발전하게 됩니다.

첫 번째 방향은 Multi Party HE (Threshold) 방식으로, 시작할 때 Party들의 set이 있으면 secret key를 나누어 가지는 방식입니다. 하나의 secret key에 대해 public key를 생성하여 open하며, 따라서 사실상 key generation 이후에는 하나의 key에 대한 scheme처럼 동작합니다. 저번 글에서 설명한 방식이 바로 이 방식입니다.

두 번째는 방향은 Multi Key HE 방식으로, 각각의 Party가 고유의 secret key를 생성하고, 그에 대응되는 public key를 open 합니다. evaluation이 진행됨에 따라서, ciphertext의 길이가 달라지며, decrypt를 하기 위해 ciphertext와 associate된 모든 party의 secret key가 필요합니다.

두 번째 방향이 이 글에서 설명할 Multi Key HE 방식입니다. 앞으론 간단하게 MKHE로 줄여 쓰겠습니다.

Backgrounds

Notation

이 글에서는 논문에서 사용한 Notation을 사용합니다. 이 글에 관련된 것들을 정리하면 다음과 같습니다.

  • 먼저, $\textbf{u}, \textbf{v}$처럼 굵은 소문자들은 vector를 나타냅니다.
  • 그리고, $\langle \textbf{u} , \textbf{v} \rangle$는 vector의 innner product를 나타냅니다.
  • real number $r$에 대해, $\lfloor r \rceil$은 가장 가까운 integer를 가리킵니다.
  • $x \leftarrow D$는 distribution $D$에 따라 $x$를 추출했음을 나타냅니다.
  • finite set $S$에 대해서, $U(S)$는 $S$의 각 원소를 uniform하게 추출하는 분포를 나타냅니다.
  • 미리 정해진 $n$은 power of 2로써, $R = \mathbb{Z} [ X ] / (X^{n} + 1)$ 입니다.
  • $R_q = R / (q \cdot R)$ 입니다.
  • $\chi$는 $R_q$위의 secret key를 추출하는 distribution입니다.
  • $\psi$는 $R$위의 error를 추출하는 distribution입니다.
  • $d$는 gadget decomposition에 의해 decompose될 때, gadget vector의 차원입니다.

LWE, RLWE problem

LWE, RLWE problem은 BFV, CKKS등의 scheme이 기반하고 있는 problem입니다. 지금까지 글에서 설명한 적이 없는 것 같아서, 이 글에서 간단하게나마 풀어서 설명하도록 하겠습니다. 아래의 문제들은 모두 적절한 parameter에 따라 적절하게 선택할 경우 어렵다는 것이 알려져 있습니다.

LWE - search problem

$U( \mathbb{Z}^{n}_q )$에서 추출한 vector $\textbf{a}$에 대해서, 적절한 distribution에서 추출한 $\textbf{s}$와 small error $e$에 대해서, $b = \langle \textbf{a} , \textbf{s} \rangle + e$라고 합시다.

search LWE problem은, $b, \textbf{a}$가 주어졌을 때, $\textbf{s}$를 복원하는 문제입니다.

LWE - decision problem

어떤 $\textbf{a} \in \mathbb{Z}^{n}_q$, $b \in \mathbb{Z}_q$인 pair $(\textbf{a}, b)$가 주어졌을 때 $b$가 uniformly random하게 추출된 것인지, 아니면 위의 seacrh problem에 나왔던 것처럼 적절한 $\textbf{s}$와 small error $e$에 의해 생성된 것인지를 distinguish하는 문제입니다.

RLWE problem

RLWE problem은 위의 LWE를 Polynomial Ring에서 한다고 생각하면 됩니다. (아주 정확하진 않지만) 위의 seacrh LWE 문제를 기준으로 설명하면, $a \in R_q$이고, $s , e \in R_q$ 에 대해, $b = a \cdot s + e$라고 한 뒤, $a, b$가 주어졌을 때, $s$를 찾는 것이 RLWE problem이 됩니다.

위의 식을 보면 알겠지만, $b$가 LWE에서는 $\mathbb{Z}_q$안에 있지만, RLWE에서는 $R_q$에 있는 것을 볼 수 있습니다. 보통의 scheme들은 RLWE problem을 기준으로 합니다.

Gadget Decomposition

$\textbf{g} = (g_{i}) \in \mathbb{Z}^d$를 gadget vector라고 합시다.

decomposition $\textbf{g}^{-1} : R_{q} \rightarrow R^{d}$가 있어서, 각 $a \in R_q$에 대해, $\textbf{g}^{-1}(a) = \textbf{u}$라고 합시다. 이때, vector $\textbf{u} = (u_{i})$에 대해, 각 $u_i$는 작은 다항식입니다. 그리고, $a = \sum^{d-1}{i = 0} g{i} \cdot u_{i}$ 가 성립해야 합니다.

gadget decomposition은 noise 관리를 용이하게 해주기 때문에, HE에서 굉장히 폭넓게 쓰입니다. 다양한 gadget vector가 존재하는데, RNS system에 기반한 것들도 있고, digit decomposition에 기반한 것들도 있습니다.

MKHE Process

MKHE와 MPHE의 가장 큰 차이점은, MKHE에서는 각 party가 각자의 고유한 secret key를 가지고 있고, 각자 secret key를 생성한다는 것입니다. 그리고, 그 secret key에 대응되는 public key를 생성하여 공개합니다.

그리고, MKHE에서는 연산을 진행함에 따라, ciphertext의 크기가 점점 커집니다.

Multi-key 방식을 적용한 것이 BFV냐, CKKS냐에 따라 다르겠지만, 어떤 ciphertext $ct = (c_{0}, c_{1})$를 decrypt하기 위해서, 기본적으로 (party 하나 기준) 대응되는 secret key $s$에 대해, $c_{0} + c_{1} \cdot s$를 하면 원하는 plaintext를 얻는다고 합시다.

현재 연산에 1번 party와 2번 party가 있다고 합시다. 1번 party에서 어떤 message $m_{1}$을 encrypt해서 ciphertext $ct_1 = (c_{1,0}, c_{1,1})$을, 2번 party에서 어떤 message $m_{2}$를 encrypt해서 ciphertext $ct_2 = (c_{2,0}, c_{2,1})$을, 생성했다고 합시다.

1번 party에서 생성한 secret key를 $s_{1}$라고 하고, 2번 party에서 생성한 secret key를 $s_{2}$라고 합시다. 그럼

$ct_1$을 decrypt하기 위해서는 어떻게 해야 할까요? 위의 방식대로 $c_{1,0} + c_{1,1} \cdot s_{1}$을 하면 될 것이고, $ct_2$도 비슷할 것입니다.

그럼, $ct_1 + ct_2$를 decrypt하기 위해선 어떻게 해야 할까요? 우선 $s_1, s_2$가 모두 필요함은 분명해보입니다.

하지만, $ct_1 + ct_2$가 여전히 두 다항식의 pair 형태라면, 어떤 식으로 결과를 구성해야 할지 쉬운 방법이 떠오르지 않습니다.

그렇지만 $ct_1 + ct_2$가 두 다항식의 pair 형태가 아니라면, 어떨까요? $ct_1 + ct_2 = (c_0, c_1, c_2)$이라고 합시다. 그리고, $c_0 = c_{1,0} + c_{2,0}, c_1 = c_{1,1}, c_2 = c_{2,1}$와 같이 정합시다.

그럼 $c_0 + c_1 \cdot s_1 + c_2 \cdot s_2 = c_{1,0} + c_{2,0} + c_{1,1} \cdot s_1 + c_{2,1} \cdot s_2 = (c_{1,0} + c_{1,1} \cdot s_{1}) + (c_{2,0} + c_{2,1} \cdot s_{2})$ 와 같이 되므로, decrypt한 결과가 plaintext를 더한 결과와 같아질 것입니다.

multiplication의 경우 좀 더 복잡한 logic을 따르지만, 비슷하게 ciphertext의 크기가 늘어납니다.

좀 더 정확히 표현하면, evaluation circuit에 involving한 party가 $k$개가 있다면, 그 결과인 $\overline{ct}$에 대해 $\overline{ct} \in R^{k+1}_q$입니다.

자세한 logic은 사정상 다음 글로 넘기도록 하겠습니다.

Conclusion

이글에서는 MKHE에 필요한 background와, 대략적인 process를 설명했습니다.

process를 보신 분들이라면 대충 눈치채셨겠지만, MPHE에 비해서 MKHE는 느리다는 단점이 있습니다. 연산을 할 때마다 ciphertext 크기가 늘어나니까요.

하지만, secret key를 독립적으로 생성하므로, key의 생성이 다른 party에 대해 dependent하지 않아서, 새로운 party의 추가가 자유롭습니다. 그냥 secret key를 생성하고, 그에 대응되는 public key를 공개하면 되니까요.

이런 flexibity가 MKHE의 장점이라고 할 수 있습니다.

다음 글에서는 MKHE의 연산들에 대해서 좀 더 자세히 알아보도록 하겠습니다. 부족한 글 읽어주셔서 감사합니다.

Reference

  • https://eprint.iacr.org/2019/524