Проблема встречного блока с использованием дешифрования aes-ctr из pycryptodome - PullRequest
0 голосов
/ 16 мая 2019

Итак, я пытаюсь расшифровать соединение через SSH, используя pycryptodome.У меня есть ключ и 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)  

Проблема заключается в том, что счетчик слишком велик (32 байта) для размера блока, равного 16 байтам в AES.Тем не менее, я обнаружил, что вам нужен IV как префикс в вашем счетчике, если вы хотите расшифровать AES-CTR плюс initial_value, установленный в 0. Поэтому у меня уже есть 16 байт только с префиксом.Когда я знаю, хотите установить первое значение в объекте счетчика на 0, это не работает.Можно ли даже дешифровать AES-CTR с помощью 16-байтового IV с использованием пикриптодома?Или, может быть, кто-то из вас видит мою ошибку.Любая помощь приветствуется.Заранее спасибо!

Редактировать: Благодаря SquareRootOfTwentyThree я решил проблему с pycryptodome.К сожалению, расшифровка все еще не работает, поэтому я открыл новую тему. openssh / opensshportable, какой ключ я должен извлечь из памяти?

1 Ответ

0 голосов
/ 19 мая 2019

Согласно главе 4 в RFC4344 , SSH использует режим SDCTR (режим CTR с расшифровкой с сохранением состояния), что означает, что блок счетчика является 128-разрядным счетчиком, начиная со значения, представленного в IV какзакодированы в сетевом порядке и без фиксированных частей (в отличие от режима NIST CTR).

В PyCryptodome вы можете сделать это с помощью:

aes = AES.new(key_hex, AES.MODE_CTR, initial_value=iv_hex, nonce=b'')

Примечание.ошибка в вашем коде - вы инициализируете шифр с key (шестнадцатеричная строка), а не key_hex (байты).

...