Ich muss Sicherheit für die Client-Server-Kommunikation implementieren. Ich habe das folgende Hybrid-Kryptosystem
implementiertUm eine an Alice gerichtete Nachricht in einem hybriden Kryptosystem zu verschlüsseln, macht Bob folgendes:
Um diesen hybriden Geheimtext zu entschlüsseln, macht Alice folgendes:
Ich verwende RSA für ein Kryptosystem mit öffentlichem Schlüssel und AES für Kryptosystem mit symmetrischem Schlüssel. Alles funktioniert gut, aber ich bin mir nicht sicher, wie man den AES-Initialisierungsvektor behandelt. Momentan verkette ich den AES-Schlüssel und den Initialisierungsvektor mit dem öffentlichen Schlüssel und sende ihn an den Server.
Ich wollte nur ein paar Meinungen zu diesem Ansatz bekommen. Wie dieses Problem von anderen Kommunikationsprotokollen SSL etc gelöst wird.
Danke.
Sie verschlüsseln die IV nicht. Bündeln Sie es mit dem verschlüsselten Schlüssel und senden Sie es (im Klartext) an den Empfänger.
Standards dafür existieren. Dieses Schema wird im CMS "KeyTransRecipientInfo" genannt (auf dem S / MIME basiert), und PGP bietet einen ähnlichen Modus. TLS enthält auch den Initialisierungsvektor als Parameter in der Schlüsselverschlüsselungsalgorithmus-ID, wobei dieselbe ASN.1-Syntax wie CMS verwendet wird. Eine robuste Open-Source-Bibliothek für diese Operation ist für viele, viele Plattformen verfügbar.
Zumindest könnte das Studium der CMS-Spezifikation dazu beitragen, einige der vielen Fallstricke bei einer hausgemachten Umsetzung zu vermeiden. Siehe §6.1 und §6.2.1 von RFC 3369.
Ich habe das gleiche getan, und ich habe es auf die gleiche Weise gehandhabt - verkette den AES-Schlüssel mit dem IV und verschlüssele sie beide.
Sie können auch einfach den Schlüssel senden und den Schlüssel selbst verwenden, um eine IV zu generieren - zum Beispiel indem Sie die ersten 128 Bits eines Hashs des Schlüssels als IV verwenden. Das sollte in Bezug auf die Sicherheit OK sein, solange Sie einen neuen AES-Schlüssel für jede Sitzung generieren und nicht denselben AES-Schlüssel immer wieder mit demselben IV verwenden.
Es gibt keinen Grund, die IV zu verschlüsseln - Sie können das im Klartext senden. Stellen Sie sicher, dass Sie jedes Mal ein neues auswählen (genauso wie Sie den AES-Schlüssel verwenden).
Das heißt, es ist oft praktisch, den AES-Schlüssel und IV zusammen zu verpacken. Die Verschlüsselung von 16 Bytes ist nicht so teuer.
Tags und Links encryption rsa public-key aes private-key