Rsa
使用具有相同種子的 PRNG 生成 RSA 密鑰對
我看到很多 Q/A,人們試圖使用靜態數據(例如密碼)生成特定的密鑰對。現在假設我們使用已知的 PRNG(危險假設),將數據作為靜態種子播種,這是否總是會生成相同的密鑰對?
我認為如果您使用完全相同的生成方法,它將生成相同的密鑰對 - 應用程序將是確定性的。但是,我希望實現之間存在差異。隨機數據的使用方式可能不同,p 和 q 的大小可能不同,並且在選擇素數本身時可能存在細微差別。
首先,我們必須假設您的確定性隨機位生成器足以在給定單個種子的情況下生成幾乎不定的位序列,並且您的素數生成算法使得它最終總是輸出素數,給定任何此類不確定的偽隨機位順序。
顯然,2048 位雙素數 RSA 模數與 1024 位雙素數 RSA 模數沒有任何共同因素,因此,是的,更改參數可能需要不同的輸出。鑑於我最初的假設,您將在兩種情況下都得到輸出,並且由於純粹的算術原因,它們不可能相同。
實現細節也是如此:例如,使用篩子或隨機生成每個候選者也會(可能)導致不同的輸出,即使 DRBG 序列相同。
因此,如果您詢問例如因為您想要一種以壓縮格式儲存 RSA 私鑰的方法,那麼您的壓縮格式必須包含要生成的素數數量、這些素數的位大小、要使用的算法的明確指示用於生成它們,以及可能影響輸出的算法的任何其他參數。
OTOH,如果問題在於您正在尋找方法來判斷給定的實現是否遭受 RNG 失敗並且歷史上生成了可預測的 RSA 私鑰,那麼恐怕這個答案不一定有多大幫助。在這種情況下,結論是,不,你不能推斷你的 RNG 是安全的,因為你的 RSA 私鑰生成過程在歷史上沒有產生任何質數衝突。