Я использую ip xfrm под Linux, чтобы добавить в систему IPsec SA с AES в режиме GCM.
Команда, которую я использую, выглядит так:
ip xfrm state add src 10.66.21.164 dst 10.66.21.166 proto esp spi 0x201 mode transport aead "rfc4106(gcm(aes))" 0x010203047aeaca3f87d060a12f4a4487d5a5c335 96
Теперь мне интересно: ключ имеет длину 20B = 160b. Обычный ключ AES имеет длину 128 бит, и, как видно выше, длина IV составляет 96 бит. Если я удлиняю или укорачиваю ключ, он не работает, поэтому очевидно, что ожидаемый ввод равен (sizeof(AES)=128b) (конечно, он работает и с 256b) + 32b в длину.
Почему это так? Единственное, что я знаю, имеет длину 4 байта в этом контексте — это unsigned int, который является типом данных переменной IV-длины, но это не имеет ничего общего с ключом. Разве ключ плюс IV не должен быть длиной 224b (128 + 96 для IV)?