La empresa Google ha anunciado la apertura de las especificaciones y la implementación de referencia del protocolo PSP (Protocolo de Seguridad PSP), utilizado para cifrar el tráfico entre centros de datos. El protocolo utiliza una arquitectura de encapsulación de tráfico similar a IPsec ESP (Payloads de Seguridad Encapsulados) sobre IP, proporcionando cifrado, control criptográfico de integridad y autenticación de origen. El código de implementación de PSP está escrito en lenguaje C y se distribuye bajo la licencia Apache 2.0.
Una característica del PSP es la optimización del protocolo para acelerar los cálculos y reducir la carga en el procesador central mediante el desvío de las operaciones de cifrado y descifrado a las tarjetas de red (offload). Para aplicar la aceleración de hardware se requiere la existencia de tarjetas de red especiales, compatibles con PSP. Para sistemas con tarjetas de red que no soportan PSP, se ha propuesto una implementación de software llamada SoftPSP.
El protocolo UDP se utiliza como transporte para la transmisión de datos. Un paquete PSP comienza con un encabezado IP, seguido de un encabezado UDP y luego el propio encabezado PSP con información de cifrado y autenticación. A continuación, se adjunta el contenido del paquete TCP/UDP original, que se finaliza con un bloque PSP con una suma de verificación para confirmar la integridad. El encabezado PSP, así como el encabezado y los datos del paquete encapsulado, siempre están autenticados para confirmar la autenticidad del paquete. Los datos del paquete encapsulado pueden ser cifrados, permitiéndose la aplicación selectiva del cifrado, dejando parte del encabezado TCP en texto claro (manteniendo el control de autenticidad), por ejemplo, para permitir la inspección de paquetes en el equipo de red de tránsito.

PSP no se vincula a ningún protocolo específico de intercambio de claves, ofrece varias opciones de formato de paquete y admite el uso de diferentes algoritmos criptográficos. Por ejemplo, se proporciona soporte para el algoritmo AES-GCM para cifrado y verificación de autenticidad (autenticación) y AES-GMAC para verificación de autenticidad sin cifrado de los datos inmediatos, por ejemplo, cuando los datos no tienen valor, pero es necesario garantizar que no hayan sido alterados durante la transmisión y que son exactamente lo que se envió originalmente.
A diferencia de los típicos VPN-en los protocolos PSP se aplica cifrado a nivel de conexiones de red individuales, y no de todo el canal de comunicación, es decir, PSP utiliza claves de cifrado separadas para diferentes conexiones UDP y TCP en túneles. Este enfoque permite lograr un aislamiento más estricto del tráfico entre diferentes aplicaciones y procesadores, lo cual es relevante al ejecutar en uno servidor de aplicaciones y servicios de diferentes usuarios.
En Google, el protocolo PSP se utiliza tanto para proteger las comunicaciones internas como para proteger el tráfico de los clientes de Google Cloud. El protocolo está diseñado inicialmente para funcionar eficientemente en infraestructuras de nivel Google y debe proporcionar aceleración de hardware para el cifrado en condiciones de millones de conexiones de red activas y centenas de miles de nuevas conexiones por segundo.
Se soportan dos modos de operación: 'stateful' y 'stateless'. En el modo 'stateless', las claves de cifrado se transfieren a la tarjeta de red en el descriptor del paquete, y para la descifrado se extraen del campo presente en el paquete SPI (Security Parameter Index) utilizando una clave maestra (AES de 256 bits, almacenada en la memoria de la tarjeta de red y que se reemplaza cada 24 horas), lo que permite ahorrar memoria en la tarjeta de red y minimizar la información sobre el estado de las conexiones cifradas almacenada en el hardware. En el modo 'stateful', las claves para cada conexión se almacenan en la tarjeta de red en una tabla especial, de manera similar a cómo se implementa la aceleración de hardware en IPsec.

PSP ofrece una combinación única de las capacidades de los protocolos TLS e IPsec/VPN. TLS fue adecuado para Google en términos de protección a nivel de conexiones individuales, pero no satisfizo debido a su falta de flexibilidad para la aceleración de hardware y su falta de soporte para UDP. IPsec proporcionaba independencia de protocolos y soportaba bien la aceleración de hardware, pero no soportaba la vinculación de claves a conexiones individuales, estaba diseñado solo para un número reducido de túneles creados y tenía problemas de escalabilidad en la aceleración de hardware debido al almacenamiento del estado completo del cifrado en tablas alojadas en la memoria de la tarjeta de red (por ejemplo, para manejar 10 millones de conexiones se requieren 5 GB de memoria).
En el caso de PSP, la información sobre el estado de cifrado (claves, vectores de inicialización, números de secuencia, etc.) puede transmitirse en el descriptor TX del paquete o en forma de un puntero a la memoria del sistema host, sin ocupar memoria de la tarjeta de red. Según Google, anteriormente, el cifrado del tráfico RPC en la infraestructura de la empresa consumía aproximadamente el 0.7% de la capacidad de cálculo y una gran cantidad de memoria. La implementación de PSP a través de la utilización de hardware acelerado permitió reducir este indicador al 0.2%.
Fuente: opennet.ru
