python - 有没有办法在使用 scapy(python) 时找到 AES-GCM 的键值?
问题描述
当我使用 scapy 创建 sa(ipsec) 时,我收到“ValueError: Invalid key size (96) for AES” 创建 sa 时接受提供的值,但在我申请加密时失败。(其他算法没有错误,如AES-CBC),scapy 支持 AES-GCM
使用的代码:
>>> sa = SecurityAssociation(ESP,spi=10,crypt_algo='AES-GCM',crypt_key=b'aaaaaaabbbbbaaaa',auth_algo='NULL',auth_key=b'NULL',tunnel_header=ip_tunnel)
>>> sa
<scapy.layers.ipsec.SecurityAssociation object at 0x7f055f6dd5b0>
>>> e = sa.encrypt(plain_txt)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/scapy/layers/ipsec.py", line 998, in encrypt
return self._encrypt_esp(pkt, seq_num=seq_num,
File "/usr/lib/python3/dist-packages/scapy/layers/ipsec.py", line 898, in _encrypt_esp
esp = self.crypt_algo.encrypt(self, esp, self.crypt_key,
File "/usr/lib/python3/dist-packages/scapy/layers/ipsec.py", line 358, in encrypt
cipher = self.new_cipher(key, mode_iv)
File "/usr/lib/python3/dist-packages/scapy/config.py", line 681, in func_in
return func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/scapy/layers/ipsec.py", line 301, in new_cipher
self.cipher(key),
File "/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/algorithms.py", line 35, in __init__
self.key = _verify_key_size(self, key)
File "/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/algorithms.py", line 20, in _verify_key_size
raise ValueError("Invalid key size ({}) for {}.".format(
ValueError: Invalid key size (96) for AES.
解决方案
虽然具有 IPsec 的 AES-GCM 的 AES 密钥可以是 128、192 或 256 位(16、24 或 32 字节),但需要将额外的 4 字节(32 位)盐值添加到每个数据包的 IV 中。因此,必须提供的密钥材料实际上是 160、224 或 288 位(20、28 或 36 字节),请参阅RFC 4106,第 8.1 节。
您可以在此处的错误中看到:
ValueError: Invalid key size (96) for AES
从您提供的 128 位密钥aaaaaaabbbbbaaaa
中,内部删除了 32 位盐,因此 AES 的密钥减少到 96 位,这还不够。要解决此问题,请在您的密钥中添加四个额外的字符。
推荐阅读
- c++ - 如何声明和定义将返回编译时未知的少数自定义类之一的函数?
- java - Spring验证器Validator的目标无效
- kotlin - Android LiveData Room 引用的实体实体在活动转换后未更新
- python - 詹金斯:如何在构建中获取当前时间并将其传递给构建后
- java - Java servlet 重定向
- javascript - 如何根据开关滑块位置更改不透明度?
- laravel - 名称、地址和图像等数据字段正在插入到数据库中,但问题是图像没有存储到文件夹中
- neural-network - 精确检测物体边界
- javascript - 无法在节点上使用 Noble => 错误:EAFNOSUPPORT,协议不支持地址系列
- bash - 如何在bash中用转义的星号替换星号?