Пытаясь реализовать схему BGV самостоятельно, я обнаружил, что действительно запутался в шифровании и дешифровании схемы. Вот мое понимание:
Позволять $р$ быть модулем открытого текста и $q$ быть модулем зашифрованного текста (они взаимно просты). Позволять $\mathbb{Z}_{m} = (-m/2, m/2] \cap \mathbb{Z}$ — фиксированное множество представителей по модулю $м$ и $[\cdot]_{m}: \mathbb{Z} \to \mathbb{Z}_{m}$ быть по модулю $м$ карта. Позволять $R = \mathbb{Z}[x] / (x^{n} + 1)$, $R_{m} = \mathbb{Z}_{m}[x]/(x^{n}+1)$ как обычно ($n$ является степенью числа 2). Я бы проигнорировал уровень и загрузку.
- $a \leftarrow U_{q}$, куда $U_{q}$ является равномерным распределением по $R_{q}$
- $s \leftarrow \{-1, 0, 1\}^{n}$
- $e \leftarrow GD(\sigma)^{n}$, куда $GD(\сигма)$ представляет собой (дискретное) распределение Гаусса со стандартным отклонением $\сигма$
- $b = [as + pe]_{q} \in R_{q}$ и $pk = (a, b) \in R_{q}^{2}$
- $r \leftarrow \{-1, 0, 1\}^{n}$, с $P(X=0) = 1/2$ и $P(X=-1) = P(X=1) = 1/4$.
- $e_0, e_1 \leftarrow GD(\sigma)^{n}$.
- сообщение $m \in R_{p}$
- $c_{0} = [br + pe_{0} + m]_{q} \in R_{q}$
- $c_{1} = [ar + pe_{1}]_{q} \in R_{q}$
- Шифровать $м$ как $\mathrm{Enc}(m) = (c_{0}, c_{1}) \in R_{q}^{2}$
- Для зашифрованного текста $(с_{0}, с_{1})$, расшифровать как $[[c_{0} - c_{1}s]_{q}]_{p}\in R_{p}$.
Я понимаю, как это задумано $\mathrm{Dec}(\mathrm{Enc}(m)) = m$, но когда я попытался сделать несколько примеров игрушек своими руками, я обнаружил, что мне сейчас чего-то не хватает.
Я думаю, что есть два модуля (открытый текст и зашифрованный текст), и использование обоих фактически приводит к сбою дешифрования. Это потому что $[[x]_{q} + [y]_{q}]_{p} \neq [[x+y]_{q}]_{p}$ и $[[x]_{q}[y]_{q}]_{p} \neq [[xy]_{q}]_{p}$ в общем. Особенно, если $x + pe \not\in \mathbb{Z}_{q}$, то уменьшая по модулю $q$ сделал бы $[[x+pe]_{q}]_{p} \neq [[x]_{q}]_{p}$ что приводит к сбою расшифровки.Я думаю, что мне не хватает чего-то очень простого, но я не могу понять.