兩名GnuPG的開發人員Robert Hansen與Daniel Kahn Gillmor用於OpenPGP的公開憑證(Public Certificate),在上周傳出遭到垃圾簽章的攻擊,造成任何企圖匯入這兩個憑證的OpenPGP/GnuPG安裝都會失效,而且受害憑證已被上傳到SKS金鑰伺服器網路(SKS Keyserver Network)。

自「優良保密協定」(Pretty Good Privacy,PGP)衍生而來的OpenPGP,為一採用公鑰密碼學的開源加密通訊協定,定義了加密訊息、簽章或交換公開憑證的標準格式,而GnuPG則是用來實現OpenPGP的工具。

根據Hansen的說明,此一攻擊開採了OpenPGP協定的缺陷,才能淹沒他與Gillmor的OpenPGP憑證。OpenPGP是基於公鑰與私鑰的非對稱加密技術,其中的私鑰由使用者自行保管,公鑰(公開憑證)則被置放在金鑰伺服器上,當A要與B進行私密通訊時,可先到金鑰伺服器上搜尋B的公開憑證,以該憑證將訊息/郵件加密,再寄給B,B即可以自己的私鑰解密。

然而,金鑰伺服器上原本設計的功能卻受到有心人士的利用。例如它透過他人的憑證簽章來替特定憑證背書,假設A認識C,B也認識C,於是當A在B的公開憑證上看到C的憑證簽章時,就比較相信該憑證是屬於B的。又例如為了避免極權政府竄改伺服器上的憑證,金鑰伺服器禁止刪除任何的憑證或替該憑證背書的所有憑證簽章,還可定期與其它金鑰伺服器同步。

於是憑證上來自他人的簽章只會愈積愈多而永遠無法刪減,攻擊者便是利用上述功能,以數萬個或數十萬個憑證簽章淹沒了Hansen與Gillmor的公開憑證。其中,Gillmor公開憑證上的憑證簽章在上周激增到5.5萬個,Hansen公開憑證上的憑證簽章數量則接近15萬個,Hansen以「中毒」(Poisoned)來形容被攻擊的憑證。

OpenPGP並沒有限制單一憑證的簽章數量,GnuPG也沒有;因此當GnuPG必須處理此一含有如此龐大資料量的憑證時,就卡住了。

Hansen認為,現在似乎沒有修補上述問題的辦法,因為目前金鑰伺服器所使用的標準軟體「同步金鑰伺服器」(Synchronizing Key Server,SKS)是以特殊的OCaml語言所撰寫,且是Yaron Minsky個人理論的概念性驗證,很難找到能快速理解Minsky的理論、邏輯或熟悉OCaml語言的開發人員,來負責更新或維護SKS金鑰伺服器網路,且分散的金鑰伺服器網路還缺乏中央管理組織來推動全面的升級。

不過,Hansen與Gillmor還是提出了緩解措施,包括不要自SKS金鑰伺服器網路刷新他們的憑證,使用其它限制較多的金鑰伺服器以找出他們的原始憑證,Hansen則直接建議高風險的用戶不要再使用SKS金鑰伺服器網路。

Hansen還警告,中毒的憑證無法自SKS金鑰伺服器網路上刪除,也不確定攻擊者是否會鎖定其它憑證發動攻擊,任何時候都可能有憑證遭到類似的攻擊,甚至無從估計受災範圍,可能要等到OpenPGP安裝失敗的時候才會知道。


Advertisement

更多 iThome相關內容