在特定的 Paillier 實現中,為什麼 r 是素數?
我對Paillier 密碼系統的實現有疑問。
在上面 Paillier 的描述中,明文消息的加密 $ m $ 上 $ \mathbb {Z}_{n^{2}} $ , $ 0\leq m<n $ , 通過選擇一個隨機數繼續 $ r $ 這樣 $ 0 < r < n $ 並將密文計算為 $ c=g^{m}\cdot r^{n}{\bmod n}^{2} $ 用於發電機 $ g $ .
然而,在 Python 的一個開源Paillier 實現中,加密函式創建 $ r $ 作為素數,用於慢速加密。
我很好奇為什麼 $ r $ 當公共算法描述中不存在這樣的限制時,在該實現中被設為素數。可能是它是一個數學捷徑,或者是對其他捷徑的補償,也許因為生成器 g 被“硬編碼”到 $ n+1 $ ,而不是通過隨機/試驗測試選擇?
更改實施是否有任何風險 $ r $ 隨機但不一定是素數?
我的意思是不要詆毀程式碼的作者。它是健壯的程式碼,對我很有幫助。我想了解限制的原因。謝謝!
更改實施是否有任何風險 $ r $ 隨機但不一定是素數?
沒有任何
$$ 1 $$. 考慮加密兩個值,形成密文的情況 $ g^m r^n $ 和 $ g^{m’} {r’}^n $ ,然後你將它們同質相加(通過將兩個密文相乘)。 這導緻密文 $ g^{m + m’} (r \cdot r’)^n $ .
因此, $ r \cdot r’ $ 可能不是素數
$$ 2 $$; 如果這是一個安全風險,那意味著你真的不能使用同態加法(或者,實際上,Paillier 根本無法使用,因為攻擊者可以獲取你的密文,添加一個加密的 0,並生成另一個加密相同明文的密文,但可能是複合材料 $ r $ ). 因此,選擇複合材料沒有缺點 $ r $
$$ 1 $$:除了修改任何加密軟體和意外破壞您不想要的東西所固有的風險…… $$ 2 $$: 實際上,它可能恰好是,因為它實際上是 $ r \cdot r’ \bmod n $ ,並且該值可能恰好是內的素數 $ \mathbb{Z} $