本章導覽#

安全是本書討論的最後一個分散式系統原理——絕非最不重要,反而可說是最困難的原理之一。本章聚焦於分散式系統中一般會納入、用以支援安全的各種機制。

安全必須遍及整個系統:任何一個安全上的設計缺陷,都可能讓所有安全措施形同虛設。

在打造各種安全機制之前,必須先知道這些機制要如何使用、防範什麼——這就需要了解要施行的安全政策(security policy)。本章從安全的基本議題開場:安全政策的概念、落實政策之機制的一般設計議題,以及必要的密碼學基礎。

分散式系統的安全大致可分為兩部分:

  • 通訊安全:使用者或行程(可能位於不同機器)之間的通訊。核心機制是安全通道(secure channel),具體包括身分驗證、訊息完整性與機密性。
  • 授權:確保行程只獲得它有權取得的資源存取權。這在存取控制一節討論,除了傳統的存取控制機制,也涵蓋行動程式碼(如代理程式)情境下的存取控制。

安全通道與存取控制都需要發配密碼金鑰的機制,也需要在系統中新增、移除使用者的機制——這些屬於安全管理:密碼金鑰的管理、安全群組管理,以及核發「持有者有權存取特定資源」證明的憑證。

本章重點#

  • 分散式系統應提供足以施行多種安全政策的機制;開發並正確運用這些機制,使安全成為一項困難的工程課題。
  • 安全通道提供通訊雙方的相互驗證,保護訊息在傳輸中不被竄改,通常也提供機密性。重要的設計抉擇是只用對稱密碼系統(共享秘密金鑰),還是與公鑰系統併用——目前的實務是用公鑰密碼學來發配短期的共享秘密金鑰,即會談金鑰(session key)
  • 存取控制(授權)保護資源,使只有具備適當存取權的行程能實際存取與使用資源;它一律發生在行程通過身分驗證之後。相關的難題是防範阻斷服務(DoS)——對經由網際網路開放的系統而言尤其棘手。
  • 存取控制有兩種實作方式:每個資源維護存取控制清單(ACL),精確列出每個使用者或行程的存取權;或讓行程攜帶憑證,精確聲明它對特定資源集合的權利。憑證的主要優點是行程可以輕易把票證轉交給其他行程(即委派存取權);缺點是通常難以撤銷。
  • 行動程式碼的存取控制需要特別處理:保護行動程式碼不受惡意主機侵害之外,更重要的通常是保護主機不受惡意行動程式碼侵害。諸多提案中以**沙箱(sandbox)**應用最廣,但沙箱限制較多,也已發展出基於真正保護網域的更彈性做法。
  • 安全管理有兩個重要子題:金鑰管理(密碼金鑰的發配,可信第三方簽發的憑證扮演要角)與授權管理(重點是屬性憑證與委派)。