2017-05-12 2 views
1

J'utilise maintenant la bibliothèque Botan. Je souhaite crypter mes fichiers en utilisant le mode AES/CBC en utilisant le mode de remplissage PKCS7. Le décryptage AES/CBC fourni par Botan lèvera une exception lorsqu'une erreur se produit et je ne suis pas sûr qu'il soit vulnérable à l'attaque oracle de remplissage.Cryptage et décryptage de Botan AES CBC PKCS7

Alors, comment dois-je effectuer le processus de décryptage pour empêcher l'attaque?

Mise à jour:

  1. Même si je ne retourne pas l'erreur de remplissage, le fichier sera laissé inchangé, ce qui peut être connu par l'attaquant.

  2. Mes codes sont les suivants: (IVes et la clé seront définies de manière appropriée)

    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; 
        } 
    } 
    
+0

1. Pour éviter une attaque d'oracle de remplissage, ne renvoyez pas les erreurs de remplissage. 2. Vous n'avez pas indiqué comment vous utilisez le cryptage et cela affecte si une attaque oracle de remplissage est possible ou non. – zaph

+0

@zaph Merci pour votre réponse. J'ai mis à jour ma question. –

+0

Non 1 n'est pas clair, un fichier crypté sans clé est sûr. – zaph

Répondre

0

Utilisez le mode CBC avec un IV aléatoire, préfixe uniquement les données cryptées avec le IV pour une utilisation dans décryptage, il n'a pas besoin d'être secret. Pas besoin de passer dans un IV, laissez la fonction de cryptage Créer un IV aléatoire.

+0

Cela signifie-t-il que j'ai la responsabilité de protéger le fichier contre toute tentative d'altération? –

+0

Vous devez fournir le IV aléatoire. Si vous êtes concerné par la falsification, vous devez ajouter une authentification, vous devez fournir un cas d'utilisation et une évaluation des menaces, c'est à dire qui vous protégez, quelles sont leurs capacités et ce qui est évalué en unités monétaires ou en réputation: 100% sûr mais peut être très proche. – zaph