根據 FIPS 186-4 在 openssl v1 中生成 RSA 私有指數
我想這更像是密碼學上下文中的一個數學問題,所以如果這不是正確的提問地方,我會事先道歉。基本上我必須檢查 RSA 密鑰對生成的某個實現是否符合 FIPS 186-4。更具體地說,附錄 B-3-1。FIPS 186-4 要求 $ d $ (私有指數)像這樣創建:
$ d = (e^{-1})\bmod(\text{LCM}(p-1, \space q-1)) $
有問題的庫(openssl v1.0.1)計算 $ d $ 像這樣:
$ d = (e^{-1})\bmod((p-1)(q-1)) $
我無法證明或反駁這兩個是否為 $ d $ .
生成條件 $ p $ 和 $ q $ 就是它 $ (p-1) $ 和 $ (q-1) $ 都是相對質數 $ e $ (公共指數)所以兩個公式都有答案。
也因為 $ p $ 和 $ q $ 都是素數, $ (p-1) $ 和 $ (q-1) $ 都將是偶數和從 $ a \times b=\text{GDC}(a, \space b) \times \text{LCM}(a, \space b) $ 我們知道 $ \text{GCD}(p-1, \space q-1) \geq 2 $ 所以 $ \text{LCM}(p-1, \space q-1) \neq (p-1)(q-1) $ .
我的問題是它們是相同的還是不同的?
如果您能在數學方面為我指出正確的方向,我也將不勝感激,這樣我就可以自己解決這個問題。
PS:我了解 openssl v1 有一個 FIPS 模組,而且 openssl v3.0 將嘗試申請 FIPS 140-2 證書。不幸的是,我堅持使用我提到的版本,我無法改變它(這不取決於我)。
FIPS 186-4 的 $ d_1=e^{-1}\bmod m_1 $ 和 $ m_1=\operatorname{lcm}(p-1,q-1) $ , 和 OpenSSL 的 $ d_2=e^{-1}\bmod m_2 $ 和 $ m_2=(p-1)(q-1) $ , 與機率不同 $ >1/2 $ 用於隨機選擇 $ p $ 和 $ q $ 並且要麼固定 $ e $ 進一步限制 $ p $ 和 $ q $ (如常見),或 $ e $ 之後有些隨機選擇 $ p $ 和 $ q $ .
理由:它成立 $ m_2=g,m_1 $ 對於整數 $ g=\gcd(p-1,q-1) $ . 那 $ g $ 至少是一個整數 $ 2 $ (並且通常是更大的偶數)。它遵循 $ d_2\bmod m_1=d_1 $ . 已充分驗證 $ d_2 $ 大致均勻分佈在區間上 $ [0,m_2) $ 在互質的約束下 $ m_2 $ . 因此,從模組化減少 $ d_2 $ 至 $ d_1 $ 導致機率發生變化 $ 1-1/g $ ,這總是至少 $ 1/2 $ . 很容易舉一個發生這種情況的例子。界 $ 1/2 $ 因為機率 $ d_1\ne d_2 $ 可以改進(增加,有點過 $ 2/3 $ 實際上)通過考慮分佈 $ g $ .
如此頻繁的差異並不像聽起來那麼糟糕,因為
- 真正需要什麼 $ d $ 工作(何時以及是否用作 RSA 私有指數,或計算或檢查 $ d_p $ 和 $ d_q $ ) 就是它 $ e,d\equiv1\pmod{\operatorname{lcm}(p-1,q-1)} $ (假設 $ p $ 和 $ q $ 是不同的素數)。兩個都 $ d_1 $ 和 $ d_2 $ 匹配這個,並符合另外需要的PKCS#1 $ 0<d<n $ (從 $ d_1<m_1<m_2<n $ 和 $ d_2<m_2<n $ ).
- 在實踐中 $ d $ 很少使用,因為使用中國剩餘定理,私鑰運算更快,通常只使用 $ (n,e,p,q,d_p,d_q,q_\text{inv}) $ 或其中的一個子集,在這種情況下,唯一可能的問題是 $ d_1 $ 或者 $ d_2 $ 是它第一次檢查的時候,這必然會通過密鑰導入和單次使用來檢測。
- 任何版本的 OpenSSL 都接受任何 FIPS 186-4 RSA 密鑰。我不會在另一個方向打賭,但是很少將密鑰從 OpenSSL 導入 FIPS 140 設備。這甚至可能在 FIPS 模式下被禁止,並且 FIPS 設備(至少在非 FIPS 模式下)將被允許接受任何數學上有效的 $ d $ 包含 $ d_2 $ ,或忽略給定的 $ d $ .