2016-06-06 1 views
0

Je souhaite utiliser OpenSSL pour la transmission de données entre le serveur et le client. Je veux le faire en utilisant EVP avec AES en mode CBC. Mais quand j'essaye de décoder le deuxième message sur le client, EVP_EncryptFinal_ex renvoie 0. Le schéma my est montré sur l'image.Transmission de données OpenSSL en utilisant AES

Approximated scheme

Je pense, ce comportement parce que j'appelle EVP_EncryptFinal_ex (et EVP_DecryptFinal_ex) deux fois pour un contexte de vice-président exécutif. Comment le faire correctement?

+0

Sûrement, vous pouvez initier le contexte avant de déchiffrer le second message. C'est déjà mieux de le faire, car alors vous pouvez utiliser le IV (généré aléatoirement par message) de l'expéditeur. –

Répondre

1

Vous ne pouvez pas appeler EVP_EncryptUpdate() après avoir appelé EVP_EncryptFinal_ex() conformément au EVP docs.

Si le remplissage est activée (par défaut), puis EVP_EncryptFinal_ex() crypte les données « finales », qui est des données qui reste dans un bloc partiel. Il utilise un remplissage de bloc standard (également connu sous le nom de remplissage PKCS) tel que décrit dans la section NOTES, ci-dessous: . Les données finales cryptées sont écrites à , ce qui devrait avoir suffisamment d'espace pour un bloc de chiffrement. Le nombre d'octets écrits est placé dans outl. Après cette fonction est appelé l'opération de chiffrement est terminée et aucun autre appel à EVP_EncryptUpdate() doit être effectué.

Au lieu de cela, vous devez configurer à nouveau le chiffre de CTX pour le chiffrement en appelant EVP_EncryptInit_ex(). Notez que contrairement à EVP_EncryptInit(), avec EVP_EncryptInit_ex(), vous pouvez continuer à réutiliser un contexte existant sans l'allouer et le libérer pour chaque appel.

+0

Je ne veux pas envoyer le vecteur d'initialisation avec chaque message. C'est pourquoi je ne veux pas réinitialiser le contexte. Je veux configurer OpenSSL de manière à ce qu'il reprenne le cryptage et le décryptage de mes messages en mode CBC. C'est à dire. ce dernier bloc du message précédent devient IV pour le message suivant. Il est possible de faire nativement avec OpenSSL? –

+0

Si vous n'envoyez pas une IV unique avec chaque message, vous pourriez être sensible à l'attaque BEAST http://www.educatedguesswork.org/2011/09/security_impact_of_the_rizzodu.html – Rahul