Как вы обнаруживаете дешифрование? У меня есть следующий код теста:Как обнаружить дешифрование с помощью TurboPower Lockbox 3.5
procedure TForm1.Button1Click(Sender: TObject);
var
plainms, cipherms: TMemoryStream;
tempstr: string;
begin
plainms := TMemoryStream.Create;
cipherms := TMemoryStream.Create;
try
cipherms.LoadFromFile('rwcx.ini');
Codec1.Password := '122rkdkdk';
try
Codec1.DecryptStream(plainms, cipherms);
except on E: Exception do
showmessage(e.Message);
end;
plainms.Position := 0;
SetLength(tempstr, plainms.Size * 2);
BinToHex(plainms.Memory, PChar(tempstr), plainms.Size);
showmessage(tempstr);
finally
plainms.Free;
cipherms.Free;
end;
end;
Файл «rwcx.ini» это обычный текстовый файл, который не содержит зашифрованные данные. Я использую AES 256 с CBC и версию 3.5 Lockbox, установленную с помощью «GetIt». Я ожидал, что поток памяти plainms будет пустым или исключение будет поднято, поскольку дешифрование гарантированно завершится неудачей. Вместо этого я получаю мусор в беспорядках и не исключение.
Как обнаружить дешифрование не удалось? Я должен быть в состоянии обнаружить плохие пароли или испорченные входные данные. Что мне не хватает?
Я надеялся, что это не так. Где-то на веб-страницах библиотеки я читал «упрощает обнаружение ошибок дешифрования» или что-то в этом влиянии. Я думал, что это означало, что был построен HMAC. Я также прочитал ответ автора на его форумах относительно RSA, в котором говорилось: «заверните дешифрование в блок try/except, чтобы обнаружить неправильный ключ». Я думаю, это работает только для RSA, а не AES , Я буду использовать свой собственный HMAC, как вы предлагаете. Спасибо за быстрый ответ. – Mike
Примечание. Иногда разработчики считают, что проверка правильности четности - это решение, но оно не совсем корректно и возвращает ошибку дополнения, позволяя вредоносному клиенту получать зашифрованные данные без ключа, см. Атаку оскорбительной атаки. Кроме того, AED GCM имеет аутентификацию, но поддержка по-прежнему низкая. – zaph
Взгляните на [формат RNCryptor] (https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md), это хорошая схема. – zaph