2014-04-21 14 views
9

Ich muss private Schlüssel für mehrere Benutzer speichern, damit meine Serveranwendung Dateien in ihrem Namen signieren kann.Speichern privater Schlüssel in der Datenbank

Ich möchte die privaten Schlüssel sicher speichern, aber ich konnte keine optimalen Vorgehensweisen finden. Wenn ich ein Passwort speichern würde, würde ich das Passwort salzen + hashen, um einen Hash zu erstellen, der nicht einfach in das Passwort zurückverwandelt werden kann. Mit einem privaten Schlüssel muss ich ihn jedoch so speichern, dass ich ihn später abrufen kann.

Ich dachte, ich würde den privaten Schlüssel verschlüsseln und dann in meiner Datenbank speichern. Ich dachte ursprünglich, jeder Schlüssel würde mit einem anderen Passwort verschlüsselt werden (basierend auf einigen Eigenschaften des Benutzers). Diese Eigenschaften würden jedoch höchstwahrscheinlich in der Datenbank gespeichert werden. Wenn also meine Datenbank durchgesickert ist, hat der Angreifer alles.

Ich könnte alle privaten Schlüssel mit einem einzigen Passwort verschlüsseln, das nur meiner Anwendung bekannt ist. Dann müsste ein Angreifer meine Datenbank und meine Anwendung stehlen, um Schaden anzurichten.

Gibt es eine Technik/Best Practice, die ich vermisse?

Antwort

9

Sie können den privaten Schlüssel mit einem symmetrischen Schlüssel basierend auf dem Benutzerkennwort verschlüsseln. Speichern Sie einfach ein zusätzliches Salz und führen Sie das Passwort "Hash" aus, um einen separaten Schlüssel zu erhalten. Verwenden Sie dann als Schlüssel zum Verschlüsseln des privaten Schlüssels. Beachten Sie, dass zur Erstellung eines sicheren Passwort-Hashs eine passwortbasierte Schlüssel- Derivierungsfunktion (PBKDF) wie PBKDF2, bcrypt oder scrypt verwendet wird.

Wenn der Benutzer zu dem Zeitpunkt nicht online ist, an dem eine Signatur generiert werden muss, sollten Sie die Kennwörter in der Weise schützen, dass nur Sie/unser Backoffice die Schlüssel entschlüsseln können. Sie können eine Benutzer-ID und Ihren eigenen geheimen Schlüssel verwenden, um einen Verschlüsselungs-/Entschlüsselungsschlüssel zu berechnen. Sie können sogar ein separates RSA-Schlüsselpaar generieren, um die Entschlüsselung der Verschlüsselung durchzuführen (mithilfe der Hybridverschlüsselung).

Das Speichern privater Schlüssel im Namen von Benutzern ist sehr gefährlich. Es gibt viele Möglichkeiten, die Daten zu verlieren oder den privaten Schlüssel freizulegen (z. B. Seitenkanalangriffe). Um es professionell zu machen, solltest du irgendwo ein HSM verwenden. Wenn dies für ernsthafte Daten erforderlich ist, konsultieren Sie bitte einen Fachmann und einen Anwalt.

Verwandte Themen