この記事は 2023年四半期カレンダー(3月版) の6日目の記事です.
CKKSの第2回です.
| 何回目 | 内容 |
|---|---|
| 1 | CKKSの一般論, 前提知識 |
| 2 | vanila encoding, full encoding |
| 3 | encrypt, 暗号文の足し算・スカラー倍 |
| 4 | 暗号文の掛け算 |
| 5 | Rescaling |
今回は,encoding, decoding の話がメインで
・vanila encoding
・full encoding
の2つを解説していきます.
vanila encoding
本節は以下の内容に対応します:
https://blog.openmined.org/ckks-explained-part-1-simple-encoding-and-decoding/
イントロ
まず,CKKSは次の流れで encode, 暗号化が行われます
つまり,$m \in \mathbb{C}^{N / 2}$ なるメッセージ(cleartext)を取って,それを $p(X) \in \mathbb{Z}[X] / (X^N + 1)$ なる平文にエンコードし,更に $c = (c_0(X), c_1(X)) \in (\mathbb{Z} / q \mathbb{Z})[X] / (X^N + 1)^2$ なる暗号文へ暗号化するわけです.
以下では,$N$ を2べきとして,$M = 2 N$ とします.このとき,命題0.15から $\Phi_M(X) = X^N + 1$ です.
1の $M$ 乗根を $\displaystyle \zeta_M = e^{\frac{2 \pi \sqrt{-1}}{M}}$ で表すことにします.
いきなり,encodeの方法を考えるのは難しいので,まずは,複素ベクトル $z \in \mathbb{C}^N$ を多項式 $\mathbb{Z}[X] / (X^N + 1)$ へと
エンコードする方法を考えていきます.
vanila encoding
具体例
*コードはブログの方を参照してください,ここでは理論的に計算をします
full encoding
本節は以下の内容に対応します:
https://blog.openmined.org/ckks-explained-part-2-ckks-encoding-and-decoding/
CKKS encoding
まとめとか感想とか
前置きが随分と長いなぁという印象ですが,次回から暗号化とか暗号文に対する演算の話になります
実は「イデアル格子暗号入門」の内容をご存知の方なら,そんなに苦労せずにこの後を読めるのかなと・・・
今回の内容はここまでです.ここまでご覧になってくださった方々ありがとうございます!










