IPsec Error ESP_INTEGRITY_CHECK_FAILED: ошибка проверки HMAC-SHA/MD5
При попытке передачи полезной нагрузки через IPsec туннель наблюдается следующее поведение:
- Фазы 1 и 2 успешно устанавливаются, туннель отображается в статусе
UP/ESTABLISHED. - В логах ядра шлюза фиксируются критические ошибки:
ESP_INTEGRITY_CHECK_FAILED: HMAC-SHA/MD5 verification error,integrity check failed for SPI 0x...,ICV mismatchилиXfrmInHdrError / XfrmInStateInvalid. - Трафик малого размера (ICMP ping 64 байта) проходит успешно, но любая передача файлов (HTTP, SSH, SMB) зависает.
- Счетчики входящих ошибок ICV (Integrity Check Value) на принимающей стороне стремительно растут.
1. Принцип работы проверки целостности ICV (RFC 4303)
При использовании алгоритмов аутентификации (HMAC-SHA256, HMAC-SHA1) передающая сторона вычисляет контрольное значение хеша (ICV) по всей полезной нагрузке ESP и помещает его в трейлер пакета. Принимающий шлюз заново рассчитывает HMAC с использованием симметричного сессионного ключа Фазы 2. Если рассчитанный хеш отличается от переданного хотя бы на 1 бит, пакет немедленно уничтожается для защиты от искажения данных или повреждения транзитной средой.
2. Проверка статистики ошибок XFRM в Linux
# Просмотр ошибок контрольных сумм и заголовков ESP
cat /proc/net/xfrm_stat | grep -E 'XfrmInHdrError|XfrmInStateProtoError|XfrmInStateInvalid'
# Мониторинг отбрасываемых пакетов через dropwatch
apt-get install -y dropwatch
dropwatch -l kas
# Выполните в консоли: start3. Диагностика фрагментации пакетов и несовпадения MTU/MSS
Самая распространенная причина ошибки ICV — промежуточная фрагментация пакета после вычисления контрольной суммы или повреждение битов заголовка маршрутизатором NAT.
# Проверка пути методом отправки нефрагментируемых пакетов с DF-битом
ping -M do -s 1422 -c 4 <IP_УДАЛЕННОГО_УЗЛА>
# Настройка принудительного занижения TCP MSS в iptables
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Либо установка фиксированного MSS (например, 1360 байт)
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 13604. Отключение сбоящей аппаратной акселерации (Hardware Crypto Offload)
Баги в драйверах сетевых карт с аппаратной разгрузкой шифрования (Intel QAT, Broadcom, Realtek) часто приводят к повреждению ICV трейлера:
# Отключение аппаратной разгрузки контрольных сумм и шифрования
ethtool -K eth0 tx off rx off
ethtool -K eth0 tso off gso off gro off
ethtool -K eth0 esp-hw-offload off
# Проверка текущего состояния аппаратных фич
ethtool -k eth0 | grep -E 'checksum|offload'5. Проверка симметричности алгоритмов и пересоздание SA
В случае сбоя синхронизации сессионных ключей (Rekeying race condition), принудительно сбросьте ассоциации безопасности:
# strongSwan: очистка и переинициализация соединений
swanctl --terminate --ike <имя_соединения>
swanctl --initiate --ike <имя_соединения>
# Cisco ASA
clear crypto ipsec sa peer <IP_АДРЕС> Частые вопросы (FAQ)
Что такое ICV (Integrity Check Value) в протоколе ESP?
ICV — это поле переменной длины в конце пакета ESP, содержащее криптографический хеш (HMAC), рассчитанный по заголовку ESP, полезной нагрузке и трейлеру. Оно гарантирует, что данные не были модифицированы злоумышленником или повреждены сетью при транзите.
Почему ICMP Ping работает, а трафик по HTTPS или RDP падает с ошибкой ICV?
Пакеты Ping имеют малый размер и не подвергаются фрагментации. Пакеты HTTPS/RDP достигают размера MTU (1500 байт), фрагментируются на внешнем интерфейсе, а при некорректной сборке фрагментов на шлюзе проверка контрольной суммы ICV завершается провалом.
Может ли неправильный Pre-Shared Key (PSK) вызывать ошибку ESP Integrity Check?
Нет. Ошибка PSK приводит к сбою на этапе Фазы 1 (IKE_AUTH / Authentication Failed). Если дело дошло до ошибок ESP ICV, значит Фаза 1 завершилась успешно, а сбой происходит на уровне ключей шифрования Фазы 2 или целостности L2/L3 среды.
Решает ли проблему переход на AEAD-шифрование (AES-GCM)?
Да, переход на AES-GCM (например, aes256gcm128) заменяет связку алгоритмов 'AES-CBC + HMAC-SHA' на единый механизм комбинированного шифрования с аутентификацией (AEAD), который работает быстрее и исключает многие ошибки рассинхронизации проверки хеша.