Factoring

如何創建一個沒有人知道因素的 RSA 模數?

  • October 1, 2017

創建一個幾乎沒有人知道因素的 RSA 模數很容易:例如,我可以生成兩個 1024 位素數 $ p $ 和 $ q $ 並設置 $ n=pq $ . 如果我發布 $ n $ , 我將是世界上唯一知道或能夠知道的人, $ p $ 和 $ q $ .

(現已失效的)RSA Factoring Challenge 數字是這樣生成的:

  1. 首先,使用連接到筆記型電腦並行埠的 ComScire QNG 硬體隨機數生成器生成 30,000 個隨機字節。
  2. 在 RSA BSAFE 庫的 4.0 版中,隨機字節被用作 B_GenerateKeyPair 函式的種子值。生成的密鑰對的私有部分被丟棄。公共部分以 DER 格式導出到磁碟文件。
  3. 從 DER 文件中提取模數並轉換為十進制以發佈在網頁上。
  4. 筆記型電腦的硬碟被破壞了。

但所有這一切都讓我感到不滿意,因為——儘管聲稱筆記型電腦的硬碟被毀——我仍然擔心知道這些因素的內部人士。

有沒有一種方法可以生成 RSA 模數,這樣沒人知道這些因素?這似乎是一個荒謬的問題,但我們確實知道未知因式分解的**複合物。**例如,許多最大的 Mersenne 複合材料具有未知的因式分解(維基百科)

我會接受多方算法和玩家不合作的假設。

一種實用的方法:使用Java Card Smart Card。載入一個簡單的 Java 小程序,使用免費的Java Card Classic Development Kit製作,生成一個 RSA 密鑰,並輸出公共模數。然後要麼銷毀智能卡,要麼將其歸零。

小程序將非常簡單,可以令人信服地對其進行審計,無論是從原始碼還是從記錄良好的微小 Java Card 字節碼(RSA 密鑰生成本身就是其中的幾個字節,呼叫內置於 Java Card 執行時的方法,由卡/微模組製造商,可能呼叫晶片製造商提供的庫)。一些 Java Card 模型經過安全認證,考慮到類似的使用和安全展示(儘管可能很難少量購買這些認證模型,並且幾乎不可能獲得它們的完整文件)。

一個難題:說服自己/觀眾相信載入在 Java Card 中的確實是經過審計的小程序,更一般地說是處理 Java Card 的設備的完整性及其產生的結果。在智能卡的關鍵儀式中,設備的完整性至關重要,通常會將裸作業系統安裝到原始 PC 上,而無需從客戶面前的原始光學介質進行網路訪問,但智能卡讀卡器可能不會受到審查,即使這同樣重要。

此外,卡開發人員在編寫 RSA 密鑰生成器時仍然存在失誤的風險。有先例:

啊,當然,你展示的數字是這樣產生的,很難讓別人相信。不是很好的答案。。

這可能……很難。

為此制定一個算法:

以偽隨機數生成器為例。

要求電腦獲取 $ 2^n $ 這樣的數字, $ a_1,a_2,…,a_{2^n} $ 在哪裡 $ n $ 也是一個隨機數,有 $ 2\leq n \leq10 $ 和 $ \log{a_i}=\log{a_j} $ .

將這些數字分成兩半,每半都有 $ 2^{n-1} $ 元素。

將每一半的所有數字相加。

將兩個數相乘得到 $ n $ .

這非常笨重,但很安全。我認為。

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