我想在OpenNebula等虚拟环境中解密ssh流量。 为此,我从openssh / opensshportable代码的功能key_derive_keys中提取了六个ssh密钥(IV,加密密钥和完整性密钥)。 如果随后我跟踪服务器与客户端之间的ssh连接,并且当双方使用AES-CBC模式时,我可以解密流量。 但是当各方使用AES-CTR时,从相同方法派生的密钥将不再起作用。 所以我的问题是:我可能提取错误的IV吗?那么,我是否必须跟踪其他函数/结构? 我的AES-CTR代码是:
key="1A0A3EBF96277C6109632C5D96AC5AF890693AC829552F33769D6B1A4275EAE2"
iv="EB6444718D73887B1DF8E1D5E6C3ECFC"
key_hex=binascii_a2b_hex(key)
iv_hex=binascii_a2b_hex(iv)
aes = AES.new(key_hex, AES.MODE_CTR, initial_value = iv_hex, nonce=b' ')
decrypted = aes.decrypt(binascii.a2b_hex(cipher).rstrip())
print(decrypted)
编辑:为相关但又类似的问题创建了一个新线程问题在这里:Get the counter value after decrypt finished 也许有人有主意?
编辑:我同时解决了这个问题。问题在于,计数器已在身份验证步骤中递增,这意味着在加密开始时,计数器比IV高一点。 这意味着我拥有正确的钥匙,但计数器是错误的。我让任何感兴趣的人都可以打开该线程。