Public-Key
發送方如何獲得接收方的公鑰?
密碼學過程包括加密和解密過程。在公鑰加密中,接收者的公鑰被用於加密。
我想知道接收者的公鑰是如何發送給發送者的?
發送者通過其他(安全)通道接收公鑰。
公鑰加密的整個安全性正是依賴於這個“小細節”:發送者必須有一種方法可以通過其他一些安全通道獲取接收者的公鑰。“渠道”的定義在這裡實際上非常廣泛,僅表示一種傳遞資訊的方式。
僅舉幾個可用於交換密鑰的真實世界範例:
- 受信任的密鑰伺服器或儲存庫,例如 sks-keyservers.net 等 OpenPGP 公鑰伺服器。
- 從可信網站下載的文件屬於您希望獲取其公鑰的人,並且與該網站的連接是安全的並經過適當的身份驗證(即使用 HTTPS)。
- 接收者在與它打算接收消息的通道相同的通道上發送公鑰,但密鑰的真實性可以由受信任的外部方(例如 PKI(公鑰基礎設施))驗證。
- 親自傳遞的 U 盤、磁碟、一張紙或其他類型的媒體。
- 一個電話(!)。
當然,人們不應該忘記,也可以在這些通道上執行無數攻擊,例如使用流氓 CA 頒發的假證書來繞過 HTTPS,或者還使用假 PGP 密鑰淹沒公鑰伺服器。畢竟,加密協議的安全性取決於其安全性較低的部分。
如果沒有關於對方的已知資訊並且沒有受信任的第三方(或任何類型的信任鏈),那麼就不可能進行加密通信。
密碼學總是需要建立一些東西,沒有假設就無法工作:您無法驗證其他人的身份,您無法驗證任何聲明,並且您無法知道該公鑰是否實際上不屬於一個中間人。
解決這個問題的最常見方法是說所有公共價值觀都是眾所周知的。或者,有人實際上以某種方式發布了所有公共價值,但當然必須以某種方式確保沒有人可以操縱它。更複雜的是,您假設一個公鑰基礎設施,您在根處有一個證書頒發機構,然後有一條信任鏈一直通向該根 CA。為此,您需要的不僅僅是加密,因為您需要數字簽名來顯示證書的真實性,例如每個參與者都知道根 CA 的驗證密鑰。