Encryption

可以使用模乘逆來創建安全密碼嗎?

  • October 4, 2018

讓 $ N $ 是一個很大的數字;和 $ (e, d, N) $ 是密鑰;在哪裡 $ e $ 是一個一次性隨機因子,並且足夠大(比如說與 $ N $ ), 在哪裡 $ e < N $ 和 $ e * d \equiv 1\pmod N $

明文加密 $ m $ , 在哪裡 $ m < N $ , 如下:

$ c = m * e \bmod N $

解密密文 $ c $ 如下:

$ m = c * d \bmod N $

我們如何證明,如果上面定義的密碼在以下條件下是安全的(或不安全的)?

  1. 資訊 $ m $ 被隨機填充到 $ m_p $ 在加密之前,在哪裡 $ m_p < N $ ,匹配的位長 $ N $
  2. $ N $ 可以重複使用
  3. 秘密(和隨機)因素 $ (e, d) $ 僅使用一次(每次加密、會話、消息等……)

注意:我問這個是因為,對這個密碼的優化可以直接使用問題中定義的協議:Random Masking of Padded RSA Ciphertext through homomorphism


附加問題:是否選擇 $ e $ 和 $ N $ 影響這個密碼的安全性?

該問題以非標準方式使用術語“密碼”:在密碼學中,密碼的密鑰可用於多條消息,而這裡顯然不是這種情況。我們將把術語 cipher 擴展到具有密鑰組件限制的東西(這裡, $ e $ 和 $ d $ ) 用於單個消息。我們將假設提供不同的隨機秘密一次性密鑰組件 $ e $ 和 $ d $ 為加密和解密方所知。

詢問“密碼是否安全(或不安全)”。密碼安全性的最標準的現代定義是在選擇明文攻擊下無法區分。這定義了一個實驗,其中對手選擇兩個明文,將它們加密,並嘗試匹配密文和消息(我們將忽略該實驗通常使用在相同密鑰下獲得的密文)。


在本節中,我們假設沒有隨機填充(即 $ m_p $ 定義為 $ m $ ).

根據修改後的 CPA 定義,所述密碼不安全:對手可以送出 $ m=0 $ 和 $ m’=1 $ ,並且可以辨識密文 $ c $ 為了 $ m $ 從密文 $ c’ $ 為了 $ m’ $ , 因為 $ c=0 $ 和 $ c’\ne0 $ .

附加限制 $ 0<m<N $ 不足以保證安全:如果對手知道除數 $ d $ 的 $ N $ 和 $ 1<d<N $ ,那麼對手可以送出 $ m=d $ 和 $ m’=1 $ 並且可以辨識密文 $ c $ 為了 $ m $ 從密文 $ c’ $ 為了 $ m’ $ , 因為 $ c\bmod d=0 $ 和 $ c’\bmod d\ne0 $ .

但是,如果條件 $ \gcd(m,N)=1 $ 強加給對手,如果 $ e $ 在子集中均勻隨機選擇 $ \Bbb Z_N^* $ 中的整數 $ [0,N) $ 這樣 $ \gcd(e,N)=1 $ (這後面的條件等價於存在 $ d $ ),那麼密碼顯然不會洩露任何關於 $ m $ 並且是 CPA 安全的。校樣草圖:用於固定 $ m $ , 功能 $ e\mapsto c $ 在有限集上可逆 $ \Bbb Z_N^* $ ,因此是雙射,因此 $ e $ 均勻隨機意味著 $ c $ 均勻隨機,因此 $ c $ 沒有洩漏 $ m $ .

施加條件的方法 $ \gcd(m,N)=1 $ 對手包括要求 $ 0<m<N $ 並製作 $ N $ 要麼是對手未知的難以分解的 RSA 分解模數,要麼是素數。然而,在上下文中兩者都不可能(注意:其中 $ r $ 和 $ r^{-1} $ 是 $ e $ 和 $ d $ 的問題),因為對手是 RSA 私鑰的持有者 $ N $ ,這允許有效地獲得因式分解 $ N $ 並暗示 $ N $ 不是素數。


現在我們介紹填充。問題的加密和解密方程變為 $$ \begin{align} c&=m_pe\bmod N\ m_p&=cs\bmod N \end{align} $$ RSA 中使用的所有隨機填充(包括OAEP) $ \gcd(m_p,N)=1 $ 極有可能,包括對手知道因式分解 $ N $ 並且能夠選擇 $ m $ 在填充之前。因此,與 $ N $ RSA 模數,以及為該模數定制的安全 RSA 隨機填充,並使用不受對手控制的隨機數生成器,密碼是 CPA 安全的(根據我們對密碼和 CPA 安全的修改定義)。

的選擇 $ N $ 對安全性沒有影響,為了問題中密碼的安全性,它的因式分解不需要保密

如果我們不指定填充,安全性可能取決於 $ e $ 是均勻隨機的 $ \Bbb Z_N^* $ (可以通過取 $ e $ 均勻隨機 $ [0,N) $ 直到 $ \gcd(e,N)=1 $ , 這種後來的情況極有可能在 $ N $ 是 RSA 模數)。但是,使用 OAEP 填充,就足夠了 $ e $ 被選在 $ \Bbb Z_N^* $ 使用產生大熵的方法。

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