Undecrypt mit der OpenSSL EVP API?

  • Ich schreibe ein Client-Server-Verschlüsselungsschema für Hausaufgaben, und ich bin über den möglichen Schlag meiner aktuellen Implementierung gestolpert.

    Bei der Verwendung von AES-256-CBC auf beiden Seiten ist es wichtig, dass der Verschlüsselungskontext des Clients und der Entschlüsselungskontext des Servers synchron bleiben. Mein Protokoll erlaubt jedoch die Ablehnung von Nachrichten, wenn sie einen HMAC-Test nicht bestehen.

    Wenn eine Nachricht den HMAC-Test nicht bestehen sollte, sind die beiden Kontexte nicht synchron, da der Zustand des Kontexts durch den Müll-Chiffretext verschmutzt wurde. Alle nachfolgenden Entschlüsselungen schlagen fehl. Gibt es eine Möglichkeit, eine Entschlüsselung rückgängig zu machen, d. H. Sie in den Zustand zurückzubringen, in dem sie vor dem Entschlüsseln war? Gibt es eine Möglichkeit, einen Entschlüsselungskontext zu kopieren?

    Dasselbe gilt für den Client, wenn er eine Meldung über den Fehler erhält. Es wird die Verschlüsselung zurücksetzen wollen.

    Soll ich etwas anderes als den CBC-Modus verwenden?

    13 February 2012
    Coincoin
1 answer
  • Sie sollten die Nachrichten in diskreten Einheiten mit einer für Ihr Protokoll angemessenen Größe paketieren oder aufzeichnen. Jeder Datensatz sollte unabhängig mit einer eigenen IV verschlüsselt werden. Sehen Sie sich als Beispiel TLS 1.2-Datensatz oder IPsec-ESP-Pakete an. Wenn ein Datensatz beschädigt ist, kann er gelöscht werden, ohne dass dies Auswirkungen auf andere Datensätze hat.

    BEARBEITEN:

    Wie von @poncho TLS hervorgehoben enthält eine implizite Sequenznummer in der MAC-Berechnung. Daher ist dies möglicherweise kein gutes Beispiel. Er weist auch darauf hin, dass DTLS eine explizite Sequenznummer enthält und daher ein besseres Beispiel sein kann.

    13 February 2012
    Marcel LevyPrashanth