我正在使用Botan库。

我想使用PKCS7填充模式使用AES / CBC模式加密我的文件。

当错误发生时,由Botan提供的AES / CBC解密将引发异常,并且我不确定它是否容易受到填充oracle攻击的影响。

那么,如何执行解密过程来防止攻击?

更新:

  • 即使我没有返回填充错误,文件也将保持不变,攻击者可以知道该文件。
  • 我的代码如下:(将对iv和key进行适当设置)
    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;
        }
    }
    
  • 最佳答案

    使用带有随机IV的CBC模式,只需将加密数据加上IV前缀即可用于解密,而无需保密。无需传递IV,让加密功能创建一个随机IV。

    10-07 14:16