使用 aes-ctr decrypt from pycryptodome 的计数器块问题
Counter block problem using aes-ctr decrypt from pycryptodome
所以我正在尝试使用 pycryptodome 通过 SSH 解密连接。
我有从内存中提取的密钥和 IV(我在虚拟环境中工作),它们 100% 正确,用于加密数据。
现在我想事后解密这些东西。
我的代码如下所示:
key="1A0A3EBF96277C6109632C5D96AC5AF890693AC829552F33769D6B1A4275EAE2"
iv="EB6444718D73887B1DF8E1D5E6C3ECFC"
key_hex=binascii_a2b_hex(key)
iv_hex=binascii_a2b_hex(iv)
ctr = Counter.new(128, prefix=iv_hex, initial_value = 0)
aes = AES.new(key, AES.MODE_CTR, counter = ctr)
decrypted = aes.decrypt(binascii.a2b_hex(cipher).rstrip())
print(decrypted)
现在的问题是对于 AES 中 16 字节的块大小,计数器太大(32 字节)。但是,我发现如果要解密 AES-CTR 加上 initial_value 设置为 0,则需要 IV 作为计数器的前缀。
因此,我已经有 16 个字节,只有前缀。当我知道要将计数器对象中的第一个值设置为 0 时,它不起作用。
是否有可能使用 pycryptodome 用 16 字节 IV 解密 AES-CTR?或者也许你们中有人看到了我的错误。
任何帮助将非常感激。
提前致谢!
编辑:感谢 SquareRootOfTwentyThree,我解决了 pycryptodome 问题。不幸的是,解密仍然无法正常工作,所以我打开了一个新线程。 openssh/opensshportable, which key should I extract from memory?
根据Chapter 4 in RFC4344,SSH 使用 SDCTR 模式(stateful-decryption CTR 模式),这意味着计数器块是一个 128 位计数器,以 IV 中表示的编码值开始按网络顺序排列,没有固定部分(与 NIST CTR 模式不同)。
使用 PyCryptodome,您可以使用:
aes = AES.new(key_hex, AES.MODE_CTR, initial_value=iv_hex, nonce=b'')
注意:您的代码中似乎有错误 - 您使用 key
(十六进制字符串)而不是 key_hex
(字节)初始化密码。
所以我正在尝试使用 pycryptodome 通过 SSH 解密连接。 我有从内存中提取的密钥和 IV(我在虚拟环境中工作),它们 100% 正确,用于加密数据。 现在我想事后解密这些东西。 我的代码如下所示:
key="1A0A3EBF96277C6109632C5D96AC5AF890693AC829552F33769D6B1A4275EAE2"
iv="EB6444718D73887B1DF8E1D5E6C3ECFC"
key_hex=binascii_a2b_hex(key)
iv_hex=binascii_a2b_hex(iv)
ctr = Counter.new(128, prefix=iv_hex, initial_value = 0)
aes = AES.new(key, AES.MODE_CTR, counter = ctr)
decrypted = aes.decrypt(binascii.a2b_hex(cipher).rstrip())
print(decrypted)
现在的问题是对于 AES 中 16 字节的块大小,计数器太大(32 字节)。但是,我发现如果要解密 AES-CTR 加上 initial_value 设置为 0,则需要 IV 作为计数器的前缀。 因此,我已经有 16 个字节,只有前缀。当我知道要将计数器对象中的第一个值设置为 0 时,它不起作用。 是否有可能使用 pycryptodome 用 16 字节 IV 解密 AES-CTR?或者也许你们中有人看到了我的错误。 任何帮助将非常感激。 提前致谢!
编辑:感谢 SquareRootOfTwentyThree,我解决了 pycryptodome 问题。不幸的是,解密仍然无法正常工作,所以我打开了一个新线程。 openssh/opensshportable, which key should I extract from memory?
根据Chapter 4 in RFC4344,SSH 使用 SDCTR 模式(stateful-decryption CTR 模式),这意味着计数器块是一个 128 位计数器,以 IV 中表示的编码值开始按网络顺序排列,没有固定部分(与 NIST CTR 模式不同)。
使用 PyCryptodome,您可以使用:
aes = AES.new(key_hex, AES.MODE_CTR, initial_value=iv_hex, nonce=b'')
注意:您的代码中似乎有错误 - 您使用 key
(十六进制字符串)而不是 key_hex
(字节)初始化密码。