本章導言#
網路協定在參與者之間傳遞資訊,而這些資訊很可能是敏感的,從信用卡卡號到政府機密系統的資料都算在內。工程師在設計協定之初就會考量安全需求,但當協定被放到任何人都能監聽流量的公開網路上時,漏洞往往才逐漸浮現。本章聚焦於協定安全的基礎理論:密碼學(cryptography)如何滿足安全需求,實作上常見的錯誤,以及這些概念如何體現在真實世界的安全協定中。
所有安全協定都應該達成以下四項要求:
- 維持資料機密性(data confidentiality):保護資料不被讀取。
- 維持資料完整性(data integrity):保護資料不被竄改。
- 實作伺服器身分驗證(server authentication):防止攻擊者冒充伺服器。
- 實作用戶端身分驗證(client authentication):防止攻擊者冒充用戶端。
密碼學提供兩項關鍵技術來滿足這些要求:加密(encryption)提供資料機密性,簽章(signing)提供資料完整性與身分驗證。
密碼學很難正確實作。實作與設計上的錯誤極為常見,而這些錯誤足以摧毀整個協定的安全性。分析協定時,你必須對其中的技術與演算法有紮實的理解,才能發現甚至利用這些嚴重弱點。