Вы должны аутентифицировать вектор инициализации в ipsec?
Я пытаюсь реализовать IPSEC в форме ESP в транспортном режиме с использованием aes в режиме galois/counter, согласно RFC4106.
Я должен поместить вектор инициализации непосредственно перед зашифрованным текстом в преобразованном пакете.
Должно ли оно быть частью аутентифицированных (но не зашифрованных) данных? (Я предполагаю, что вы не шифруете это...)
Я не могу видеть, где RFC указывает это. Должно ли это быть очевидно, и если да, то почему?
4 ответа
Видимо оба очевидных ответа верны.
В соответствии с RFC 4543, который определяет ENCR_NULL_AUTH_AES_GMAC (аутентификация без шифрования), вы включаете IV.
Однако тот же RFC говорит, что для AES-GCM-ESP (шифрование и аутентификация) вы этого не делаете.
Вооружившись этой информацией, теперь стало ясно, что именно об этом говорит RFC 4106 (который на самом деле определяет AES-GCM-ESP), хотя вначале я интерпретировал это не так.
Насколько я понимаю определение GCM, нет необходимости включать вектор инициализации в связанные данные - использование разных векторов инициализации даст как разные результаты шифрования, так и разное значение проверки целостности в любом случае.
Это преимущество использования комбинированного режима аутентифицированного шифрования, вам не нужно заботиться о включении векторов инициализации в MAC.
Итак, чтобы кодировать пакет для ESP с помощью GCM, вы делаете это:
- получить ключ
- генерировать IV
- рассчитать связанные данные (из SPI и порядкового номера)
- получить открытый текст
- пройти IV, связанные данные, ключ, открытый текст для алгоритма GCM
- получить зашифрованный текст и ICV из алгоритма GCM
- отправить IV, шифротекст и ICV
Нет, ты не должен
Должно ли это быть очевидно? Обычно да. Многие из других RFC для механизмов ESP включают в себя тестовые векторы, чтобы рассеять подобные вопросы. RFC4106 нет. Это было замечено во время обсуждения, но они не добрались до текста: https://www.ietf.org/mail-archive/text/ipsec/2005-08.mail
Тем не менее, есть черновик документа с тестовыми векторами: https://tools.ietf.org/html/draft-mcgrew-gcm-test-01. Вы заметите, что IV (байты 4-11 "nonce", 4956ed...
в первом примере) включаются открытый текст в пакет данных. Они не включены ни в "открытый текст", ни в "aad", что представляет собой сумму данных, аутентифицированных шифром GCM.
Учтите также, что IV к самому шифру GCM является объединением соли и ESP IV - так называемым "nonce", чтобы избежать двусмысленности. Соль получается из ключевого материала, согласованного во время IKE, поэтому она согласована между конечными точками и константой в течение срока службы SA.
Для AES-GCM-ESP IV (esp iv из 8 байтов) не является частью AAD. AAD - это просто заголовок ESP. Обратите внимание, что IV, который передается AES_GCM, представляет собой конкатенацию соли (четыре байта) + iv(esp iv из 8 байтов). Некоторые криптографические движки hw принимают IV как 16 байтов, и в этом случае вам нужно заполнить последние четыре байта 0x0.
Посмотрите этот документ, он довольно аккуратный http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf