我在Linux下使用ip xfrm在系统模式下将带有AES的IPsec SA添加到系统中。
我正在使用的命令是这样的:
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密钥是128b,如上所示,IV长度是96b。如果我延长或缩短键不起作用,那么显然预期输入是(sizeof(AES)= 128b)(当然,它也可以使用256b)+ 32b长。
为什么会这样?我知道在这个上下文中唯一的4B是unsigned int,它是IV-length变量的数据类型,但这与密钥无关。 键加IV不应该长224b(IV + 128 + 96)?
答案 0 :(得分:2)
命令中的96值是身份验证标记的大小。身份验证标记是会话中消息的一部分,它不是您必须指定的内容。 IV也是如此,它是由每个消息的协议生成的。
密钥材料由16字节(128位)AES密钥和16字节(16位)十六进制格式的盐组成,每个字节使用2个字符。
每个AES-GCM密钥请求的KEYMAT是20个八位字节。首先 16个八位字节是128位AES密钥,其余四个八位字节 用作nonce中的salt值。
来源:RFC 4106。