非常非常快地生成 PGP 密鑰
有沒有辦法以非常快的速度生成數千個 PGP 密鑰?
我正在生成數千個 3072 位 PGP 密鑰,看起來像是個人研究項目的一部分。顯然,這是一個非常緩慢的 CPU 密集型活動。我已經用–debug-quick-random 關閉了強隨機化,正在使用–batch 生成它們並最大化我所有的個人CPU。但這還不夠快。
有沒有一種方法可以非常快速地生成數千個密鑰?我的目標是在 KeyID 上獲得 16 位雜湊衝突。我知道這對於真正的安全來說是完全不切實際的,這主要是出於研究目的。我還沒有查看 GnuPG 程式碼,但我正在努力避免編寫任何程式碼。
謝謝!
要比現在更快地生成密鑰,可能需要向系統添加更快的隨機數源。您可以查看 CPU 中可用的擴展,並檢查它們是否在您的系統上啟用。
如果您只對查找密鑰 ID 上的衝突感興趣,您可能會採取不同的方式。
指紋=雜湊(public_key)
public_key = 時間戳 + public_key_data
所以:
指紋 = 雜湊(時間戳 + public_key_data)
有一個腳本只操縱時間戳以尋找碰撞。 https://github.com/micahflee/trollwot
是的。
正如第一個答案中正確指出的那樣,我們可以製作具有相同公鑰參數但時間戳不同的密鑰,這使得計算指紋非常快。到目前為止,這似乎是最快/最好的創建碰撞。
我們創造 $ k\ge2 $ 密鑰(比如 16),計算具有不同時間戳的指紋,發現衝突,並檢查它們是否使用相同的密鑰(作為機率 $ 1/k $ )。我們可以使用 Paul C. van Oorschot 和 Michael J. Wiener, Parallel Collision Search with Cryptanalytic Applications , in Journal of Cryptology, 1999中的技術,只用很少的記憶體和幾個獨立的設備(或 SIMD 中的獨立數據流)進行搜尋/GPU 計算)。
回想起來,PGP/GPG 密鑰指紋應該故意使用慢散列而不是普通的 SHA-1。至少,像 PBKDF2 之類的東西;現在我們會使用Argon2(id?)或Balloon Hashing。
我之前提出了加速技術,這對手頭的任務沒有用。他們在那裡RIP 。