Public-Key

我在 Paillier 加密中獲得了一個非整數(浮點)私鑰

  • May 8, 2018

我正在嘗試使用此處提供的密鑰生成指南在 Matlab 中實現 Paillier 密碼系統:https ://en.wikipedia.org/wiki/Paillier_cryptosystem#Key_generation ,但問題是我嘗試使用任何素數組合,我獲取mu私鑰所需的浮點數。

第一步是:

選擇兩個大素數 p 和 q

我選擇的只是一個起點p = 17 and q = 19

計算 $ {\displaystyle n=pq} $ 和 $ {\displaystyle \lambda =\operatorname {lcm} (p-1,q-1)} $ .

我在 Matlab 中使用:

n = p*q;
lambda = lcm((p - 1), (q - 1));

這給了我n = 323lambda = 144

第三步:

選擇隨機整數 $ {\displaystyle g} $ 在哪裡 $ g\in {\mathbb Z}_{{n^{{2}}}}^{{*}} $

我讀到它g = n + 1滿足所有要求的條件,所以我選擇了它,這給了我一個g = 324.

第四步,計算 $ {\displaystyle \mu} $ 使用:

$ {\displaystyle \mu =(L(g^{\lambda }{\bmod {n}}^{2}))^{-1}{\bmod {n}}} $

在哪裡, $ {\displaystyle L} $ 定義為 $ {\displaystyle L(x)={\frac {x-1}{n}}} $

我使用以下方法實現了這一點:

a = (powermod(g, lambda, n*n) - 1) / n;

gMu = mod(inv(a),n);

所以在這個階段,公鑰應該是(n,g) = (323,324),而私鑰應該是(lambda,mu)我的情況(144,0.0069)

為什麼我得到一個浮點值,gMu而我在網上看到的所有實現都提供了一個整數值的私鑰。

我在哪裡弄錯了?

看起來你錯過了維基百科上的註釋:

請注意,符號 $ {\frac {a}{b}} $ 不表示模乘 $ a $ 乘以的模乘逆 $ b $ 而是商 $ a $ 除以 $ b $ ,即最大整數值 $ v\geq 0 $ 滿足關係 $ a\geq vb $ .

作為旁注,為了使密鑰生成更加簡單,您可能對 wikipedia 上的另一個註釋感興趣:

如果使用 $ p,q $ 等長,上述密鑰生成步驟的一個更簡單的變體是設置 $ g=n+1,\lambda =\varphi (n) $ , 和 $ \mu =\varphi (n)^{{-1}}{\bmod n} $ , 在哪裡 $ \varphi (n)=(p-1)(q-1) $ .

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