Homomorphic-Encryption

如何獲得 HElib 中的確切插槽數?如256、4096

  • May 6, 2021

在同態加密庫 HElib(https://github.com/homenc/HElib)中,我們在生成密文之前設置了一組參數。例如:

m = 20191, p = 47, phi(m) = 19800
 ord(p) = 66
 normBnd = 1.62077
 polyNormBnd = 4.92719
 factors = [61 331]
 generator 2 has order (== Z_m^*) of 60
 generator 985 has order (== Z_m^*) of 5
r = 1
nslots = 300
hwt = 0
ctxtPrimes = [6,7,8,9,10,11,12,13,14]
specialPrimes = [15,16,17,18,19]
number of bits = 778

security level = 77.9265

最後,我們得到了 300 個時隙的密文。但我想獲得 256 個插槽的密文。當我使用該函式findM(/*k=*/80, /*nBits=*/500, /*c=*/2, /*p=*/47, /*d=*/1, /*s=*/256, /*chosen_m=*/0, /*verbose=*/true);時,無法獲得正確的參數m來生成 256 個插槽。

那麼我應該如何選擇參數來獲得 80/120 位安全性,具有 256/4096 個插槽的密文。

插槽數為 $ \varphi(m)/\text{ord}(p) $ , 在哪裡 $ \varphi(m) $ 是全部 $ m $ 和 $ \text{ord}(p) $ 是乘法順序 $ p $ 反對 $ m $ (因此劃分 $ \varphi(m) $ ).

為了使槽數為 256,必須滿足以下條件: $ \varphi(m) $ 能被 256 整除。回想一下 $ \varphi(m) $ 是劃分的所有最大素數冪的乘積 $ m $ , IE, $ \varphi(m) = \prod_i (p_i-1)p_i^{e_i-1} $ 在哪裡 $ m=\prod p_i^{e_i} $ 是因式分解 $ m $ 成不同素數的冪 $ p_i $ .

做 $ \varphi(m) $ 可被 $ 256=2^8 $ ,觀察奇數 $ p_i $ , 對應項 $ (p_i-1) $ 在 $ \varphi(m) $ 可以被 2 的某個冪整除,並且這些冪在素數上結合。然而,這種素數的高次冪不會給我們任何 2 的高次冪(也不會造成傷害)。或者,如果其中一個 $ p_i=2 $ ,那麼它貢獻了一個因子 $ 2^{e_i-1} $ 到全部。作為一個極端的例子,我們可以採取 $ m=512 $ 並立即得到 $ \varphi(m)=256 $ .

可分條件是必要的,但不是充分的;我們還需要選擇一個素數模數 $ p $ 誰的順序是 $ \varphi(m)/256 $ ,即的循環子群 $ \mathbb{Z}_m^* $ 由產生 $ p $ 應該有那個順序。這有點微妙。一種可行的方法是使用中國剩餘定理:我們知道 $ \mathbb{Z}m^* $ 與群的乘積同構 $ \mathbb{Z}{p_i^{e_i}}^* $ ,因此我們可以在每個分量中找到一個合適的條件,然後使用 CRT 找到一個合適的素數 $ p $ .

一個極端的例子是當 $ m=512 $ (所以 $ \varphi(m)=256 $ )。那麼取素數是必要且充分的 $ p $ 1 階,即 $ p=1 \pmod m $ . 更一般地,對於奇數 $ p_i $ 組件 $ \mathbb{Z}_{p_i^{e_i}}^* $ 是循環的,所以我們可以找到一個元素 $ g_i $ 任何可以劃分組件順序的順序,我們想要這些順序的乘積( $ g_i $ ) 為 256。最後,我們可以求一個素數 $ p $ 那是一致的 $ g_i \pmod{p_i^{e_i}} $ 對所有人 $ i $ . 這可能會給我們我們想要的整體,但要注意順序 $ p $ 可能不是每個 CRT 組件中其訂單的產物,因此可能需要進行一些試驗和錯誤。

引用自:https://crypto.stackexchange.com/questions/89798