Особенностью PSP является оптимизация протокола для ускорения вычислений и снижения нагрузки на центральный процессор через вынос операций шифрования и расшифровки на сторону сетевых карт (offload). Для применения аппаратного ускорения требуется наличие специальных сетевых карт, совместимых с PSP. Для систем с сетевыми картами, не поддерживающими PSP, предложена программная реализация SoftPSP.
В качестве транспорта для передачи данных используется протокол UDP. Пакет PSP начинается с заголовка IP, после которого следует заголовок UDP и затем собственный заголовок PSP с информацией о шифровании и аутентификации. Далее прикрепляется содержимое оригинального пакета TCP/UDP, которое завершается финальным блоком PSP с контрольной суммой для подтверждения целостности. Заголовок PSP, а также заголовок и данные инкапсулируемого пакета всегда аутентифицированы для подтверждения подлинности пакета. Данные инкапсулируемого пакета могут могут быть зашифрованы, при этом допускается возможность выборочного применения шифрования с оставлением части TCP-заголовка в открытом виде (при сохранении контроля подлинности), например, для предоставления возможности инспектирования пакетов на транзитном сетевом оборудовании.
PSP не привязывается к какому-то определённому протоколу обмена ключами, предлагает несколько вариантов формата пакетов и поддерживает использование разных криптоалгоритмов. Например, предоставляется поддержка алгоритма AES-GCM для шифрования и проверки подлинности (аутентификации) и AES-GMAC для проверки подлинности без шифрования непосредственных данных, например когда данные не представляют ценности, но нужно гарантировать, что они не были подменены во время передачи и именно те, что были отправлены изначально.
В отличие от типовых VPN-протоколов в PSP применяется шифрование на уровне отдельных сетевых соединений, а не всего канала связи, т.е. PSP использует отдельные ключи шифрования для разных туннелируемых UDP- и TCP-соединений. Подобный подход даёт возможность добиться более строгой изоляции трафика от разных приложений и обработчиков, что актуально при выполнении на одном сервере приложений и сервисов разных пользователей.
В Google протокол PSP применяется как для защиты собственных внутренних коммуникаций, так и для защиты трафика клиентов Google Cloud. Протокол изначально рассчитан на эффективную работу в инфраструктурах уровня Google и должен обеспечивать аппаратное ускорение шифрования в условиях наличия миллионов активных сетевых соединений и установки сотен тысяч новых соединений в секунду.
Поддерживается два режима работы — «stateful» и «stateless». В режиме «stateless» ключи для шифрования передаются сетевой карте в дескрипторе пакета, а для расшифровки извлекаются из присутствующего в пакете поля SPI (Security Parameter Index) при помощи мастер-ключа (256-bit AES, хранится в памяти сетевой карты и заменяется каждые 24 часа), что позволяет экономить память сетевой карты и минимизировать информацию о состоянии шифрованных соединений, хранимую на стороне оборудования. В режиме «stateful» ключи для каждого соединения хранятся на сетевой карте в специальной таблице, по аналогии тем как реализовано аппаратное ускорение в IPsec.
PSP предоставляет своеобразную комбинацию возможностей протоколов TLS и IPsec/VPN. TLS подходил Google с точки зрения защиты на уровне отдельных соединений, но не устраивал из-за недостаточной гибкости для аппаратного ускорения и отсутствия поддержки UDP. IPsec обеспечивал независимость от протоколов и хорошо поддерживал аппаратное ускорения, но не поддерживал привязку ключей к отдельным соединениям, был рассчитан лишь на небольшое число создаваемых туннелей и имел проблемы с масштабированием аппаратного ускорения из-за хранения полного состояния шифрования в таблицах, размещаемых в памяти сетевой карты (например, для обработки 10 млн соединений требуется 5 ГБ памяти).
В случае PSP информация о состоянии шифрования (ключи, векторы инициализации, порядковые номера и т.п.) может передаваться в TX-дескрипторе пакета или в форме указателя на память хост-системы, не занимая память сетевой карты. По данным Google ранее на шифрование RPC-трафика в инфраструктуре компании тратилось примерно 0.7% вычислительной мощности и большой объём памяти. Внедрение PSP за счёт привлечения средств аппаратного ускорения позволило снизить этот показатель до 0.2%.
Источник: http://www.opennet.ru/opennews/art.shtml?num=57220