banner
Wind_Mask

Wind_Mask

Wind_Mask,technically me.
github
email

關於Secret的沉思(5):PGP安全

PGP 安全#

PGP 確實已經是個有點糟糕的東西了1,我不得不承認這一點。它高度地集成了太多不必要的功能(實際上是歷史包袱),兼容危險的密碼原語,過度的複雜度又阻止了實現以至於某些編程語言甚至無法提供充分的庫。

誠然,我並不希望 PGP 在沒有充分繼承其目標的實現出現前失敗,但是也是該考慮緩解這些問題了,如果讓我在此簡單討論一下對這些問題的緩解:

算法與兼容泥潭#

個人只能通過約定表示密鑰要向 Curve 25519 的轉移來緩解(事實上,最新的 gpg 默認設置已經在這樣做)——儘管軟體會接受,但是人不能,至少不應該。密鑰的算法本身就是其可信度的一部分,也許 gpg 繼續提供各種加密原語和曲線,但是應該盡可能擺脫它們的落後實現,比如說對於落後的實現提供警告(這一點還不夠)。

數據包的複雜度#

這個問題由於歷史包袱無解,但是考慮到網絡傳輸的發展,只要規範充分,這不是在安全性上致命的問題。

功能過多#

其實這不見得就是致命的,問題在於各功能的解耦與實現。由於各功能都綁定在一組密鑰對上,它提供了一種共有身份的加密簽名,這本身是有意義的。但是由於兼容性與統一規範的複雜度,這使得各功能相對於專用的系統存在更多的攻擊面。不可能完全寄希望於現有實現的完美,因此手動引入某種中間層可能是必要的。

也就是說,使用 pgp 的功能來引入其他工具,而實際工作由其他工具完成。舉例而言,使用 pgp 簽名作為分發 minsign 簽名公鑰的渠道之一。

最終目標當然是希望在規範上過渡到用引入的新層面取代舊有功能,當然大概是不會有這一天了……

用戶體驗#

得承認,PGP 在設計上提供了過多複雜使用方法,但是又沒有足夠簡化而全面的默認配置 。這很大程度上是為了 PGP 當初設想的身份驗證網絡(信任之網),密鑰對間的相互簽名和過多的元數據都是這一目的的遺留。

但是我們得說,PGP 從來都是一個額外的安全層。將它比對於某個通訊軟體,某個加密軟體是不合適的,因為它們的簡化建立在內置的安全上,但是它們不處理總體問題,也不提供通用功能(儘管通用和安全本身多少有些矛盾)。

命令行工具從來令人生畏,GUI 開發一直勉強(至少我還沒見到實現了 GPG 的命令行大部分功能的 gui),這方面我發現一個較新實現GpgFrontend,不幸,其熱度很能說明 PGP 面臨的處境。

就我所知的 gui 支持仍然存在著各種各樣的功能性不足,比如基本沒有支持編輯子密鑰的,生成密鑰功能也不完全,還有自定義 gpg 路徑,homedir,導出子密鑰等。

要想全面實現 gpg 提供的複雜功能又不失簡單的默認配置,這是個有待發展的方向。

長期的密鑰#

這並不是關鍵,或者說這是我們常見的安全思想中最無望的:人人都建議我們頻繁更換密碼,但這在用戶側根本沒有任何可能。任何用戶直接接觸使用記憶的秘密都不可能頻繁變化,這是人類的問題。

啟用新密鑰的成本應該盡可能降低,這是個分發信任問題,但它終究依賴用戶的習慣。因此我的建議是利用密鑰過期時間這一點,並不是說真的一定過期,而是假定它可能過期。然後在續期時評估風險。即使如此,要確保分發的同步,這不是某一種方法能做到的。

對應的,應該堅持清除過期密鑰。不保留對它們的所有信任。

不連貫的身份#

身份分發機制的單一可能是不存在的,這是一個事實。現在沒有人指望線下交換和原有的密鑰伺服器以及信任網能提供全部(甚至只是大部分的信任)。加密的身份方案只是一種底層 id:它不能證明自身。現在人們還需要更多貫穿各種網絡服務的身份證明,在這方面的選擇有Keyoxide,至少它提供的思想是一種可能,關鍵點是:

  1. 我們確實使用其他網絡服務,如果你只用郵箱交流就不需要真正的在線身份。

  2. 這些服務並不為我們所控,我們不能決定它們怎麼體現,只能具體的支持各種方式。

  3. 在線身份本身只能歸結為一種融貫的諸聯絡方式,不存在身份背後的真實。

當然,它也準備放棄原用的 pgp 方式了,這是對的,在公鑰的註釋裡放身份信息太滑稽了。但是身份分發系統無疑是沒有實現的,即使規範已經存在,但是生態上尚未接受。

泄露元數據#

PGP 本身的 uid 元數據是顯見的,但是這是其目的的一環,任何達成相應實現的方法都需要這樣一個標識符。但是密鑰伺服器獲取元數據,這是公開元數據信息只有唯一級別的結果。因此,更好的選擇是讓 PGP 密鑰攜帶盡可能少的公開信息,而是分散它們到其他渠道(如Keyoxide的思想)。

無前向保密性#

這是要注意的。使用 PGP 不應該直接交換消息,而應該交換一次性會話密鑰(當然要求用戶進行安全的交換是不現實的,應該有工具來實現這一點)。但是,作為更長久的固定加密沒有前向保密的加密也無法放棄:穿越時間的發送 (笑

笨拙的密鑰#

格式的歷史遺留,只能期待工具鏈的完善可以改善它。

協商#

如果我們在過去 20 年中學到了關於密碼學設計的 3 件重要的事情,其中至少 2 件是協商和兼容性是惡魔。密碼系統中的缺陷往往出現在細枝末節中,而不是主幹上,而廣泛的密碼兼容性增加了細節的數量。

必須堅決地棄用舊版本,儘管軟體會接受,但是人不能,至少不應該

簡陋的代碼#

GnuPG 也是 PGP 的有效參考實現,也是集成 PGP 加密的大多數其他工具的基礎。 它哪兒也不會去,依賴 PGP 就是依賴 GPG。

我們正在期待的是Sequoia-PGP,這可能也是上述各種問題的解決(至少是緩解)期望所在。

信任之網#

信任系統從來有兩種思想,我們有了基於權威的 CA 體系,但是也有基於 PGP 的信任之網。但是怎樣在現在的技術中搭建統一但可靠的信任網,這是個未解難題。在軟體包信任上,剛才我看見的有cargo-crev,但是至今即使只在開發者範疇這仍待考察,更勿論對於普通用戶要想像 CA 證書一樣的普遍(但是我們都知道,CA 證書的弊端:Last Chance to fix eIDAS: Secret EU law threatens Internet security)。

即使 PGP 有這種那種的不足,但是其思想卻不能棄用。如果失去了這種分散的信任,那麼 Last Chance 就不是只是歐洲,只是瀏覽器證書……

Footnotes#

  1. 「譯」PGP 的問題(上) - C 的博客 |UlyC

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。