使用Python Scapy配置IPsec SA时AES-GCM加密出现密钥长度错误如何解决?
问题原因及解决方法
错误根因
你遇到的ValueError: Invalid key size (96) for AES报错,核心是两个配置问题:
- AES算法本身仅支持固定长度的密钥:128位(16字节)、192位(24字节)、256位(32字节),你当前传入的
crypt_key长度为96位(12字节),不符合AES的基础要求。 - Scapy的IPsec实现中,AES-GCM作为带认证的加密(AEAD)算法,密钥需要包含基础AES密钥+4字节Salt,总长度对应为20字节(AES-128-GCM)、28字节(AES-192-GCM)、36字节(AES-256-GCM)。
正确配置步骤
- 若使用AES-128-GCM:生成16字节的AES密钥+4字节随机salt,拼接后作为
crypt_key传入 - 若使用AES-256-GCM:生成32字节的AES密钥+4字节随机salt,拼接后作为
crypt_key传入 auth_algo保持设为NULL即可,因为AES-GCM自带完整性校验能力
示例代码
# AES-128-GCM示例:16字节密钥 + 4字节salt,总长度20字节 crypt_key = b'aaaaaaaabbbbbbbb' + b'1234' sa = SecurityAssociation(ESP, spi=10, crypt_algo='AES-GCM', crypt_key=crypt_key, auth_algo='NULL', auth_key=b'NULL', tunnel_header=ip_tunnel) # 调用加密方法即可正常运行 e = sa.encrypt(plain_txt)
内容的提问来源于stack exchange,提问作者Premkumar S
相关产品推荐
相关产品推荐

