Я хочу расшифровать трафик ssh в виртуальной среде, такой как OpenNebula.
Для этого я извлек шесть ключей ssh (IV, ключи шифрования и ключи целостности) из функции key_derive_keys из кода openssh / opensshportable.
Если я затем отследю 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)
Редактировать: создал новый поток для связанной, но очень похожей проблемы. Проблема здесь: Получить значение счетчика после завершения расшифровки
Может быть, у кого-то есть идея?
Edit: я тем временем исправил проблему. Проблема заключалась в том, что счетчик уже увеличивается на этапе аутентификации, что означает, что при запуске шифрования счетчик немного выше, чем IV.
Это означает, что у меня были правильные ключи, но счетчик был не прав. Я позволил этой теме открыться для любого заинтересованного.