Google 今天宣布 PSP(PSP Security Protocol 的簡寫)協議開源。該協議旨在處理數據中心規模的加密硬件 offloading,目前該協議已經部署到 Google 的生產中。
為了更好地保護用戶隱私,Google 早在十多年前就對數據中心之間的流量進行加密。在隨後的發展中,幾乎所有 Google 傳輸的數據都進行了加密。雖然這項工作提供了寶貴的隱私和安全優勢,但軟件加密付出了巨大的代價:加密和解密 RPC 需要大約 0.7% 的 Google 處理能力,以及相應的內存量。
這些成本促使 Google 使用 PSP(PSP Security Protocol 的簡寫)將加密 Offload 到網絡接口卡(NIC)上。所謂的 Offload 就是將本來該操作系統進行的一些數據包處理(如 TCP 分段、IP分片、重組、checksum、TCP協議處理等)放到網卡硬件中去做, 降低系統 CPU 消耗的同時,提高處理的性能。
鑒於 TLS 不夠友好,缺乏對 UDP 的支持,同時在 IPsec 上也存在一些缺陷,因此 Google 自主研發了自己的 Offload 友好協議。PSP 作為他們的解決方案被描述為一種類似 TLS 的、獨立於傳輸的協議,用於每個連接的安全性和 Offload 友好。
對於 PSP,Google Cloud 團隊的 Amin Vahdat 解釋道
PSP 旨在滿足大規模數據中心流量的要求。它不強制要求特定的密鑰交換協議,並且為數據包格式和加密算法提供了很少的選擇。它通過允許每個第 4 層連接(例如 TCP 連接)使用加密密鑰來實現每個連接的安全性。
它支持無狀態操作,因為加密狀態可以在傳輸數據包時通過數據包描述符傳遞給設備,並且可以在使用安全參數索引 (SPI) 和設備上的主密鑰接收數據包。這使我們能夠在硬件中保持最小狀態,與維護大型設備表的典型狀態加密技術相比,避免了硬件狀態爆炸。
PSP 使用帶有自定義標頭和尾標的用戶數據報協議 (UDP) 封裝。一個 PSP 數據包以原始 IP 頭開始,然後是預先指定的目標端口上的 UDP 頭,然後是包含 PSP 信息的 PSP 頭,然後是原始 TCP/UDP 數據包(包括頭和有效負載),並以包含完整性校驗和值 (ICV) 的 PSP 預告片。
第 4 層數據包(標頭和有效負載)可以根據用戶提供的稱為 Crypt Offset 的偏移量進行加密或驗證。例如,此字段可用於保留部分 TCP 標頭在傳輸過程中經過身份驗證但未加密,同時保持數據包的其餘部分加密以支持網絡中的數據包採樣和檢查(如有必要)。
Google 將 PSP 修補到他們的生產 Linux 內核、他們的 Andromeda 網絡虛擬化堆棧和他們的 Snap 網絡系統中。據報道,PSP 加密卸載可節省約 0.5% 的 Google 整體處理能力。今天,他們將 PSP 安全協議開源,以鼓勵其進一步採用。他們已經發布了他們的架構規範、參考軟件實現和一套測試用例。