In unserem Projekt gibt es mehrere Orte, an denen wir mit Hashing hätten davonkommen können. Zum Beispiel speichern wir eine verschlüsselte Referenz zwischen einer Lizenz und dem lizenzierten Objekt in der Datenbank zusammen mit der unverschlüsselten Referenz. Dies stellt sicher, dass der Benutzer die Entität, die er lizenziert hat, nicht ändern kann, indem er mit der Datenbank muckt.
Der Hauptgrund, warum wir überall Verschlüsselung verwenden, ist, dass wir bereits eine gute Verschlüsselungsbibliothek und einen Systemschlüssel hatten. Es schien nicht wirklich Zeit zu sein, eine Hashing-Bibliothek zusätzlich zu entwickeln.
Gibt es ein Sicherheitsrisiko, das wir durch Verschlüsselung statt durch Hashing erzeugen?
Indem Sie den Klartext zusammen mit dem Geheimtext speichern, erstellen Sie ein nettes Repository mit Testzeichenfolgen, wenn jemand Ihren Schlüssel herausfinden möchte. Da Sie den Schlüssel offenbar zum Verschlüsseln von alles verwenden, würde ich sagen, dass ein Risiko darstellt.
Denken Sie daran, das Schöne an zentralen Datenbanken ist, dass eines Tages jemand die Daten bekommen wird. Wenn Geschichte eine Lektion ist, zumindest.
Wenn es sich um eine symmetrische Chiffre handelt und das System in der "feindlichen" Umgebung eingesetzt wird, ist es eine Frage der Zeit, bis eine motivierte Person den Schlüssel isolieren und ihre eigenen (oder andere) Lizenzdaten signieren kann .
In diesen Fällen benötigen Sie eine asymmetrische Chiffre, um die Lizenz mit Ihrem privaten Schlüssel zu "signieren", der sicher auf einem Computer in einem Tresor gespeichert ist und keine Verbindung zur Außenwelt hat. Ok, leichte Übertreibung, aber in einer sicheren Umgebung.
Ein einfacher Hash wird in diesem Fall nicht helfen, da er zum Signieren gefälschter Lizenzen verwendet werden kann. Wenn Sie sicher sein möchten, dass nur Sie Lizenzänderungen genehmigen können, ist die Verwendung einer asymmetrischen Chiffre zum Verschlüsseln der Lizenz (oder eines Hashs der Lizenz) der einfachste Weg.
Nun, Verschlüsselung ist ein Zwei-Wege-Prozess. Vorausgesetzt, Sie verwenden eine schlüsselbasierte Verschlüsselung, sind Sie sicher, solange der Verschlüsselungsschlüssel sicher ist und Sie einen modernen Algorithmus (z. B. AES) verwenden. Hashing ist im Gegensatz dazu ein einseitiger Prozess, bei dem es praktisch unmöglich sein sollte, die Hash-Eingabe aus dem Hashwert zu rekonstruieren. Ohne einen Schlüssel zu haben, kann Hashing als sicherer angesehen werden. Es kann auch weniger rechenintensiv sein.
Alle Daten, die verschlüsselt werden können, können auch entschlüsselt werden.
Hashing ist ein einseitiger Prozess, insbesondere wenn Sie die neuen SHA2-Methoden verwenden.
Nach meinem Verständnis möchten Sie die Integrität Ihrer Daten erreichen (d. h. Sie möchten erreichen, dass niemand Ihre Daten unbemerkt verändern kann). Dies kann erreicht werden, indem eine digitale Signatur (z. B. RSA, DSA) oder ein MAC (Nachrichtenauthentifizierungscode) verwendet wird. Ein Mac ist das symmetrische Äquivalent einer digitalen Signatur, die normalerweise ein asymmetrisches Schema ist.
In Ihrem Fall sollte ein MAC (wie zum Beispiel HMAC) eine gute Wahl sein!
Sie haben die Geheimhaltung des Schlüssels als einen schwachen Punkt eingeführt, ich würde sagen, dass es ein Risiko ist, obwohl die Beurteilung des Schweregrades mehr Details erfordern würde.
Hashing dagegen würde sich nur auf die Schwierigkeit verlassen, Kollisionen zu finden, was wahrscheinlich ein sichereres Szenario ist, als diesen Schlüssel geheim zu halten.
Tags und Links security encryption hash