web-dev-qa-db-de.com

So verschlüsseln Sie Benutzerdaten in Firebase

Ich verwende die E-Mail/Passwort-Anmeldemethode für Firebase. Ich möchte die Daten verschlüsseln, die Benutzer in der Echtzeitdatenbank gespeichert haben, bevor sie an die Datenbank gesendet werden. Firebase behandelt das Benutzerpasswort bereits, aber kann ich es irgendwie verwenden, um Daten zu verschlüsseln, die nur vom Client entschlüsselt werden können? Es wäre schön, wenn ich es mit dem Client sdk erreichen könnte.

Mein Flow würde also ungefähr so ​​aussehen:

  1. Der Benutzer meldet sich mit seinen Anmeldeinformationen an (die von firebase selbst verwaltet werden).
  2. Benutzer verschlüsseln einige Daten mit einem eindeutigen Schlüssel, der nur aus den Anmeldeinformationen oder aus einigen Daten generiert werden kann, die nur für den Benutzer verfügbar sind, nicht für mich. (Dieser Schlüssel muss zwischen den Sitzungen bestehen bleiben oder nachdem der Benutzer sein Kennwort geändert hat.)
  3. Daten werden in der Datenbank gespeichert (ich kann sie nicht lesen, da sie mit den Benutzeranmeldeinformationen verschlüsselt sind)
  4. Benutzer melden sich auf einem anderen Gerät an (der Entschlüsselungsschlüssel kann sofort generiert und die Daten können entschlüsselt werden.)
23
NoNameProvided

Sie können dies einfach auf folgende Weise tun:

  1. Nach der Anmeldung von Benutzer A wird auf seinem Telefon ein zufälliges öffentlich-privates Schlüsselpaar generiert. Bsp .: benutze Ecc Curve25519
  2. Der private Schlüssel von A ist sicher auf seinem Telefon gespeichert
  3. Der öffentliche Schlüssel von A wird in der Firebase gespeichert und ist für jeden zugänglich, der mit A chattet.
  4. Wenn X eine Nachricht an A sendet, ruft er den öffentlichen Schlüssel von A aus der Firebase ab, verschlüsselt die Nachricht für A lokal und speichert die verschlüsselte Nachricht in der Firebase im Posteingang von A
  5. A lädt die verschlüsselte Nachricht von firebase herunter und entschlüsselt sie mit seinem privaten Schlüssel, der auf seinem Telefon gespeichert ist

(umgekehrt für A bis X)

Wenn A zu einem anderen Telefon wechseln oder mehrere Telefone verwenden möchte, können Sie dies folgendermaßen tun:

  1. Bitten Sie A, ein sicheres Kennwort für die Verschlüsselung seines lokal gespeicherten privaten Schlüssels festzulegen. (oder erstellen Sie eine zufällige Passphrase und verwenden Sie QR-Codes für den Schlüsselaustausch)
  2. Verschlüsseln Sie den privaten Schlüssel lokal (z. B. mit AES256) auf seinem Telefon mit dem Passwort aus Schritt 1 und laden Sie es auf firebase hoch. (optional mit seinem privaten Schlüssel unterschreiben)
  3. Laden Sie den verschlüsselten privaten Schlüssel vom zweiten Gerät von A herunter
  4. Fragen Sie nach der Passphrase auf dem zweiten Gerät von A und bewahren Sie den privaten Schlüssel sicher auf (optional können Sie die Signatur mit dem öffentlichen Schlüssel von A prüfen).
  5. Löschen Sie den verschlüsselten privaten Schlüssel von der Firebase, wenn keine Sicherung gewünscht wird
20
Hollerweger