不能信任 1024 bit 的 DH 質數
阿恆
Diffie-Hellman 密鑰交換算法,簡稱 DH 算法,是整個互聯網安全性最重要的基石,無數通訊協定,包括 VPN、SSH、HTTPS 等等依賴它建立加密通道,DH 算法需要一些質數作為運算基礎,有研究人員發現,部份使用特定程序產生的 1024 bit 質數具有數學上的弱點,使用這些質數建立的加密通訊,比使用真正隨機產生的質數建立的加密通訊,容易破解一萬倍。
具體需要多少運算能力才能破解?研究人員使用 2000-3000 個處理器核心,花了大約兩個月時間,成功破解了由這種質數建立的通訊,2000-3000 個處理器核心對普通人來說可能是遙不可及的事,但是對於得到國家支持的黑客團隊,這根本就是小菜一碟。更令人憂慮的是,隨意給定一個 DH 質數,我們根本沒有辦法判斷它是否一個「弱化」了的數字。換句話說,即使在安裝和設定伺服器的時候,你使用了安全可靠、真正隨機產生的 DH 質數,日後是否有黑客修改了它們,或者加入一些「弱化」了的數字,根本無從判斷。
所以研究人員建議從這一刻開始,DH 密鑰交換算法不應該再使用 1024 bit 質數了。那麼 2048 bit 的質數安全嗎?研究人員表示那安全得多,即使是「弱化」了的 2048 bit DH 質數,也比「弱化」了的 1024 bit DH 質數複雜 1600 萬倍,要破解由這些質數建立的通訊,大約需要 6.4 x 109 核心-年,比 1024 bit 的 400 核心-年安全得多。對安全性要求高的人,甚至可以使用 4096 bit 或更長的質數。
可惜現實世界可不是說改便改,總會有些不長腦袋的傢伙跑出來說:兼容!兼容!兼容!的確,Java 8 的 DH 和 DSA 函式只支援 1024 bit 或以下的質數,用來保障域名系統的 DNSSEC 也不容許 DH 質數的長度超過 1024 bit。Apache 網站伺服器甚至把 DH 質數寫在程式碼中,除非你懂的自行產生 DH 質數,然後修改 Apache 程式碼,跟著重新編譯,否則你根本無法使用長過 1024 bit 的 DH 質數。