2016-06-06 15 views
0

Ich möchte OpenSSL für die Datenübertragung zwischen Server und Client verwenden. Ich möchte es mit EVP mit AES im CBC-Modus tun. Aber wenn ich versuche, zweite Nachricht auf dem Client zu entschlüsseln, gibt EVP_EncryptFinal_ex 0 zurück. Mein Schema ist auf Bild gezeigt.OpenSSL-Datenübertragung mit AES

Approximated scheme

denke ich, dieses Verhalten, weil ich EVP_EncryptFinal_ex nennen (und EVP_DecryptFinal_ex) zweimal für einen EVP-Kontext. Wie mache ich das richtig?

+0

Sicherlich können Sie den Kontext initiieren, bevor Sie die zweite Nachricht entschlüsseln. Es ist schon besser, das zu tun, denn dann können Sie die IV (zufällig pro Nachricht generiert) vom Absender verwenden. –

Antwort

1

Sie können EVP_EncryptUpdate() nach dem Aufruf EVP_EncryptFinal_ex() nach der EVP docs nicht aufrufen.

Wenn padding aktiviert ist (der Standard) dann EVP_EncryptFinal_ex() verschlüsselt die „endgültige“ Daten, dass alle Daten, die in einem Teilblock bleibt. Es verwendet Standard-Block-Padding (aka PKCS-Padding) wie beschrieben im NOTES-Abschnitt unten. Die verschlüsselten Enddaten werden in geschrieben, die ausreichend Platz für einen Chiffrierblock haben sollten. Die Anzahl der geschriebenen Bytes wird in outl platziert. Nachdem diese Funktion aufgerufen ist, ist der Verschlüsselungsvorgang beendet und sind keine weiteren Aufrufe an EVP_EncryptUpdate() vorzunehmen.

Stattdessen sollten Sie Setup die Chiffre ctx für die Verschlüsselung wieder durch EVP_EncryptInit_ex() aufrufen. Beachten Sie, dass Sie im Gegensatz zu EVP_EncryptInit() mit EVP_EncryptInit_ex() die Wiederverwendung eines vorhandenen Kontexts fortsetzen können, ohne ihn bei jedem Aufruf zuzuweisen und freizugeben.

+0

Ich möchte Initialisierungsvektor nicht mit jeder Nachricht senden. Deshalb möchte ich den Kontext nicht reinitialisieren. Ich möchte OpenSSL so einrichten, dass es meine Nachrichten im CBC-Modus weiterverschlüsselt und entschlüsselt. I. e. Der letzte Block der vorherigen Nachricht wird IV für die nächste Nachricht. Ist es möglich, nativ mit OpenSSL zu arbeiten? –

+0

Wenn Sie keine eindeutige IV mit jeder Nachricht senden, sind Sie möglicherweise anfällig für den BEAST-Angriff http://www.educatedguesswork.org/2011/09/security_impact_of_the_rizzodu.html – Rahul