Linux 为什么gcm模式下的AES密钥长4字节?

Linux 为什么gcm模式下的AES密钥长4字节?,linux,aes,ipsec,Linux,Aes,Ipsec,我正在Linux下使用IPXFRM向系统添加一个IPSecSA,其中AES处于GCM模式 我使用的命令如下所示: ip xfrm状态添加src 10.66.21.164 dst 10.66.21.166协议esp spi 0x201模式传输aead“rfc4106(gcm(aes))”0x010203047aeaca3f87d060a12f4a4487d5a5c335 96 现在我想知道: 键的长度似乎是20B=160b。正常AES密钥为128b,如上所述,IV长度为96b。如果我加长或缩短键,

我正在Linux下使用IPXFRM向系统添加一个IPSecSA,其中AES处于GCM模式

我使用的命令如下所示:

ip xfrm状态添加src 10.66.21.164 dst 10.66.21.166协议esp spi 0x201模式传输aead“rfc4106(gcm(aes))”0x010203047aeaca3f87d060a12f4a4487d5a5c335 96

现在我想知道: 键的长度似乎是20B=160b。正常AES密钥为128b,如上所述,IV长度为96b。如果我加长或缩短键,它就不起作用了,所以很明显,预期的输入是(sizeof(AES)=128b)(当然,它也可以使用256b)+32b长

为什么会这样?在这个上下文中,我只知道4B长的是unsigned int,它是IV length变量的数据类型,但这与键无关。
key plus IV不应该是224b长(对于IV是128+96)吗?

命令中的96值是身份验证标签的大小。身份验证标记是会话中消息的一部分,您不必指定它。对于IV也是一样,它是由每个消息的协议生成的

密钥材料由一个16字节(128位)的AES密钥和一个4字节(16位)的十六进制salt组成,每个字节使用2个字符

每个AES-GCM密钥请求的密钥为20个八位字节。第一 16个八位字节是128位AES密钥,其余四个八位字节 在当前值中用作盐值


资料来源:。

哦,你当然是对的。我不小心复制了AES-128。无论如何,这个键是128b(16B)长+4B额外的,我相应地编辑了文本。我也无法想象这些4B是IV长度的单位。但我就是想不起来是什么。这一定和强制静脉注射有关。不,是盐,看我的答案。但实际上是在结尾。如果不确定,请阅读标准。我也不是在开玩笑;RFC对所有内容都进行了详细说明,并且易于阅读。我看到人们在我介入并简单引用标准之前,就一个解释争论了好几个小时。