OpenPGP-Verschlüsselung
In OpenPGP wird die Nachricht nicht direkt mit der Passphrase verschlüsselt. Stattdessen wird ein zufälliger Sitzungsschlüssel als Schlüssel für die symmetrische Verschlüsselung der Nachricht generiert.
Dieser Sitzungsschlüssel wird jetzt mit der Passphrase verschlüsselt. Durch Anwenden eines solchen zweistufigen Ansatzes ist es möglich, die Nachricht einmal zu verschlüsseln, die Entschlüsselung mit anderen privaten Schlüsseln oder Passphrasen durch einmaliges Hinzufügen einer verschlüsselten Kopie des Sitzungsschlüssels zuzulassen. Um zu verstehen, wie OpenPGP-Nachrichten aufgebaut sind, werfen Sie einen Blick auf RFC 4880, OpenPGP und die Ausgabe von gpg --list-packets
und pgpdump
für die verschlüsselte Nachricht (beide geben Informationen zu den OpenPGP-Paketen aus).
Darüber hinaus wird jede Nachricht mit einigen zufälligen Bytes aufgefüllt, was zu einer völlig anderen Nachricht führt. Schließlich speichert die verschlüsselte Nachricht den Verschlüsselungszeitstempel, der offensichtlich anders ist, wenn Sie nicht zweimal in derselben Sekunde verschlüsseln.
Eine unterschiedliche Ausgabe beim zweimaligen Verschlüsseln derselben Nachricht kann sehr wichtig sein: Die Information, dass zwei Nachrichten tatsächlich dieselbe Nachricht sind, ist oft schon ein Problem. Durch zufällige Sitzungsschlüssel und Auffüllen kann ein Angreifer keine Annahme des Nachrichteninhalts treffen, vorausgesetzt, er erhält mehrere Nachrichten.
Eindeutige Einschränkung für die verschlüsselte Ausgabe
Wenn Sie eine eindeutige Einschränkung für die Nachricht benötigen, berechnen Sie eine kryptografische Hashsumme (z. B. SHA-256) für die Nachricht und speichern Sie diese zusätzlich (und berechnen Sie die eindeutige Einschränkung für die Hashsumme anstelle der verschlüsselten Nachricht).