有關帶後門的 RSA 密鑰對生成的資訊?
幾天前有人在Reddit上發了一篇文章,除了返回同一頁面的連結外,我沒有找到太多關於它的內容。
簡要總結一下,本質上,可以在 RSA 密鑰生成期間引入後門。例如,生成後門 RSA-1024 密鑰。(假設 $ \text{getPrime}(x) $ 將返回一個隨機 $ x $ -位素數)
$$ \begin{align} A &= \text{genPrime}(384)\ P^\prime &= \text{genPrime}(128)\ Q^\prime &= \text{genPrime}(128)\ P &= Ak_1 + P^\prime \end{align} $$ 在哪裡 $ k_1 $ 遞增直到 $ P $ 是素數,從 $ k_1 = P^\prime $ .
$$ \begin{align} Q = Ak_2 + Q^\prime \end{align} $$ $ k_2 $ 是類似地計算為 $ Q^\prime $ .
$ P $ 和 $ Q $ 然後用作其餘密鑰生成算法的素數,並且 $ A $ 保留為後門密鑰。 $ A $ 可以基於可預測的每使用者值生成,例如 MAC 地址或使用者 ID。
為了使用後門,攻擊者(或者在這種情況下,開發者)重新計算 $ A $ 以最初計算的相同方式(或只是在數據庫中查找)然後計算 $ N^\prime = N \mod A $ 然後是因素 $ N^\prime $ 進入 $ P^\prime $ 和 $ Q^\prime $ . 這將考慮分解 256 位數字的複雜性,這對於大多數關注實施後門的組織來說是觸手可及的。 $ P^\prime $ 和 $ Q^\prime $ 然後可以用來計算 $ P $ 和 $ Q $ 以與上述相同的方式,從而生成整個私鑰。
有更多關於此的資訊嗎?可能的攻擊?(除了顯而易見的情況之外 $ A $ 已洩露)看起來很直覺,這會降低 RSA 的安全性,考慮到它將密鑰空間從 1024 位降低到 256 位,但我不知道它是如何在不知道的情況下被破壞的 $ A $ .
實際上,如果 RSA 密鑰生成是惡意的,那麼還有更微妙的方式可以讓某人洩露密鑰。
我見過的最聰明的方法是這樣工作的(假設我們正在生成一個 RSA-1024 密鑰;對於 RSA-2048,我們只使用更大的曲線):
- 攻擊者生成EC公鑰/私鑰對;對 RSA-1024 使用 192 位曲線很好。他對 EC 私鑰保密;他會將 EC 公鑰安裝到下面的程序中。
- 為了生成密鑰,程序選擇一個隨機的 192 位種子 $ R $ .
- 它使用該種子來查看選擇隨機 512 位素數的程序 $ P $ .
- 它加密種子 $ R $ 使用 EC 公共值(可能使用 EC-ElGamal),產生 384 位值 $ E $ .
- 然後它選擇一個 512 位素數 $ Q $ 具有以下約束 $ Q \equiv P^{-1}(2E+1) \pmod{2^{385}} $
- 產品 $ PQ $ 是 RSA 模數(其餘的 RSA 密鑰對是正常生成的)
然後,攻擊者可以很容易地分解這個 RSA 密鑰(通過提取 $ E $ 直接從 RSA 模數的位模式,使用 EC 私鑰對其進行解密,導致 $ R $ , 然後用 R 恢復 $ P $ . 而且,沒有 EC 私鑰的人沒有任何優勢來考慮這一點,即使他們知道用於生成 RSA 密鑰的確切程序;兩個都 $ P $ 和 $ Q $ 被公平地選擇,並且額外的限制 $ Q $ 根本不幫助攻擊者。
這個故事的寓意:如果攻擊者可以控制你的 RSA 密鑰生成過程,你可能沒有安全性。
您正在尋找的密碼學領域稱為Kleptography。在盜竊術中,我們正在處理執行加密任務的設備可能是惡意的設置。現在,該設備試圖將資訊洩露給某個攻擊者,從而使該攻擊者能夠破解所使用的密碼方案。如果我沒記錯的話,這個方案是在 Young 和 Yung 的原作中提出的。我沒有檢查這一點,但這篇論文絕對是獲取更多資訊的一個很好的起點,並且至少包含兩個關於“RSA 後門”的建議。