Я сейчас использую библиотеку Botan.
Я хотел бы зашифровать свои файлы, используя режим AES / CBC, используя режим заполнения PKCS7.
Расшифровка AES / CBC, предоставляемая Botan, выдаст исключение при возникновении ошибки, и я не уверен, уязвима ли она для атаки оракула-отступа.
Так как же мне выполнить процесс расшифровки, чтобы предотвратить атаку?
Обновлено:
Даже если я не верну ошибку заполнения, файл останется без изменений, что может быть известно злоумышленнику.
Мои коды следующие: (iv и ключ будут установлены соответственно)
void encrypt(std::istream &in, std::ostream &out)
{
try
{
Botan::SymmetricKey key_t(key);
Botan::InitializationVector iv_t(iv);
Botan::Pipe encryptor(Botan::get_cipher(cipher_mode, key_t, iv_t, Botan::ENCRYPTION), new Botan::DataSink_Stream(out));
encryptor.start_msg();
in >> encryptor;
encryptor.end_msg(); // flush buffers, complete computations
}
catch(...)
{
throw;
}
}
void decrypt(std::istream &in, std::ostream &out)
{
try
{
Botan::SymmetricKey key_t(key);
Botan::InitializationVector iv_t(iv);
Botan::Pipe decryptor(Botan::get_cipher(cipher_mode, key_t, iv_t, Botan::DECRYPTION), new Botan::DataSink_Stream(out));
decryptor.start_msg();
in >> decryptor;
decryptor.end_msg(); // flush buffers, complete computations
}
catch(...)
{
throw;
}
}
Используйте режим CBC со случайным IV, просто префикс зашифрованных данных с IV для использования в расшифровке, это не должно быть секретным. Не нужно передавать в IV, пусть функция шифрования Создать случайный IV.
Других решений пока нет …