今日,Google宣布PSP(PSP Security Protocol的缩写)协议开源。该协议旨在处理数据中心规模的加密硬件offloading,目前已部署到了Google的生产中。
图源:Google Cloud官网截图
为了保护用户隐私,Google大约在十年前就对数据中心之间的流量进行加密。从那时起,几乎所有Google传输的数据都进行了加密。
虽然这项工作提供了宝贵的隐私和安全优势,但软件加密付出了巨大的代价:加密和解密RPC需要花费Google约0.7%的处理能力,以及相应的内存量。
这些成本促使Google使用PSP将加密offload到网络接口卡(NIC)上。而offload是将本来该操作系统进行的一些数据包处理(如TCP分段、IP分片、重组、checksum、TCP协议处理等)放到网卡硬件中去做, 降低系统CPU消耗的同时,提高处理的性能。
由于TLS对offload不够友好、缺乏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加密offload可以节省Google约0.5%的整体处理能力。 今天,Google正在将PSP安全协议开源,以鼓励其进一步采用。他们已经发布PSP架构规范、一个参考软件实现和一套测试案例。更多关于PSP开源项目的信息,可以通过Google Cloud博客或者GitHub去了解。
参考链接:
1.网卡offload功能介绍_hello_courage的博客-CSDN博客_offload
3.Google Makes Public Their Open-Source PSP Security Protocol - Phoronix