2016-02-12 8 views
1

Как вы обнаруживаете дешифрование? У меня есть следующий код теста:Как обнаружить дешифрование с помощью 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 будет пустым или исключение будет поднято, поскольку дешифрование гарантированно завершится неудачей. Вместо этого я получаю мусор в беспорядках и не исключение.

Как обнаружить дешифрование не удалось? Я должен быть в состоянии обнаружить плохие пароли или испорченные входные данные. Что мне не хватает?

ответ

2

Шифрование - это просто трансформация, сама по себе она не имеет понятия правильного расшифровки.

Одним из способов является создание HMAC зашифрованных данных и добавление к зашифрованным данным и дешифрование HMAC зашифрованных данных и сравнение HMAC. Будьте осторожны с использованием функции сравнения HMAC, которая принимает одинаковое количество времени для совпадений и несоответствий.

+0

Я надеялся, что это не так. Где-то на веб-страницах библиотеки я читал «упрощает обнаружение ошибок дешифрования» или что-то в этом влиянии. Я думал, что это означало, что был построен HMAC. Я также прочитал ответ автора на его форумах относительно RSA, в котором говорилось: «заверните дешифрование в блок try/except, чтобы обнаружить неправильный ключ». Я думаю, это работает только для RSA, а не AES , Я буду использовать свой собственный HMAC, как вы предлагаете. Спасибо за быстрый ответ. – Mike

+0

Примечание. Иногда разработчики считают, что проверка правильности четности - это решение, но оно не совсем корректно и возвращает ошибку дополнения, позволяя вредоносному клиенту получать зашифрованные данные без ключа, см. Атаку оскорбительной атаки. Кроме того, AED GCM имеет аутентификацию, но поддержка по-прежнему низкая. – zaph

+0

Взгляните на [формат RNCryptor] (https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md), это хорошая схема. – zaph