Wie kann ich Benutzerinhalte auf meiner Website verschlüsseln, sodass nicht einmal ich auf den Inhalt zugreifen kann?

8

Ich muss Inhalte in meiner Webanwendung auf Benutzerbasis verschlüsseln.

Ich, der root-Benutzer, möchte keinen Zugriff auf den Inhalt der Benutzer haben, Punkt.

Wie kann ich es so einrichten, dass Nutzer als einzige Zugriff auf ihre Inhalte haben? Vielleicht kann ich es so machen, dass ein Hash ihres Login-Passworts als Verschlüsselungs- und Entschlüsselungsschlüssel fungiert (dann wird ihr Passwort in meiner Datenbank unidirektional gespeichert und der Verschlüsselungs- / Entschlüsselungs-Hash wird aus ihrem rohen Passwort beim Login generiert und gespeichert ein lokales Cookie)? Was aber, wenn sie ihr Passwort ändern? Dann muss ich alle ihre Inhalte aktualisieren, die eine Menge Rechenleistung benötigen.

Gibt es eine Verschlüsselungsmethode, die dies bietet, ohne ihren Inhalt neu verschlüsseln zu müssen, wenn sich ihr Passwort ändert? Etwas ähnliches wie ecryptfs auf Linux, vielleicht? Ist die Erforschung von ecryptfs ein guter Anfang?

Macht es so, dass nur der Benutzer auf seine Inhalte auf meinen Servern (und nicht einmal ich) zugreifen kann?

    
Chad Johnson 07.10.2011, 16:47
quelle

2 Antworten

11

Prozess:

  1. Erzeuge ein zufälliges Geheimnis, um ihren Inhalt zu verschlüsseln.
  2. Unter Verwendung des von Ihnen angegebenen Passworts verschlüsseln Sie das zufällige Geheimnis von # 1.
  3. Speichern Sie ihr Passwort als Einweg-Hash (mit Salz, vielleicht Multi-Hash).

Bei Änderung des Passworts:

  1. Generiere den Wert aus Schritt 2 erneut.
  2. Erneutes Generieren des Hash-Caches aus Schritt # 3.

Bei der Anmeldung:

  1. Hash-Passwort und überprüfen Sie den Hash-Wert, der in Schritt 3 generiert wurde.
  2. Wenn das Passwort übereinstimmt - verwenden Sie das tatsächlich bereitgestellte Passwort , um das zufällige Geheimnis von # 2 zu entschlüsseln.
  3. Verwenden Sie ein zufälliges Geheimnis aus # 2, um in # 1 verschlüsselte Daten zu entsperren.

Hinweise:

  • Niemand kann die Daten dekodieren, ohne das zufällige Geheimnis zu kennen (# 1). Zufälliges Geheimnis kann nur mit dem tatsächlichen Passwort des Benutzers (# 2) (kurz vor Brute-Force) entsperrt werden. Das tatsächliche Passwort des Benutzers ist nur in einer unidirektionalen Hash-Form (# 3) bekannt, so dass Sie bestätigen können, dass es dasselbe ist, aber es nicht entschlüsseln und # 2 wiederherstellen kann.
  • Ein vergessener Passwort-Prozess ist nicht möglich (Sie können # 3 neu generieren, aber zufälliger Schlüssel in # 2 ist jetzt verloren, da alles in seinem Tresor gesperrt ist).
  • Sie müssen nicht alles in Schritt 1 jedes Mal neu verschlüsseln, wenn sie ihr Passwort ändern, nur das (einfache / schnelle) zufällige Geheimnis von # 2.
  • Wenn Sie das von Ihnen bereitgestellte Kennwort oder das in Schritt 1 generierte Zufallsgeheimnis oder deren (entschlüsselten) Inhalt zwischenspeichern, können Sie Datenlecks verursachen.
Rudu 07.10.2011, 17:00
quelle
-1

Sie müssen darauf achten, dass Sie ihr Passwort als Schlüssel verwenden müssen.

Ich würde mich nicht mit ecryptfs herumschlagen, weil ein verschlüsseltes Dateisystem nicht die beste Lösung ist. Sie möchten nicht, dass die Daten eines Benutzers mit demselben Schlüssel verschlüsselt werden, den ein anderer Benutzer verwendet hat.

Wenn Sie die Daten verschlüsseln, sollten Sie eine zufällige Zeichenfolge generieren, die als Salz verwendet wird. Dies verhindert, dass jemand eine vorgenerierte Liste von Hashes verwendet, um Ihre Daten zu entschlüsseln. Es ändert auch den Hash von zwei Personen, die möglicherweise das gleiche Passwort verwenden.

Wenn ein Benutzer sein Passwort ändert, müssen Sie die Daten erneut verschlüsseln und einen neuen Salt-Wert generieren. Dies ist das Sicherheitsniveau, das ich als Kunde erwarte. Ich weiß, dass ich alle meine Daten neu verschlüssle, wenn ich mein Passwort ändere, um zu verhindern, dass jemand versucht, meinen Schlüssel brutal zu erzwingen.

Sie können den Salt-Wert unverschlüsselt in Ihrer Datenbank speichern.

    
GregB 07.10.2011 17:07
quelle

Tags und Links