12

Sto utilizzando il metodo di accesso e-mail/password per Firebase. Vorrei crittografare i dati salvati dagli utenti nel database in tempo reale prima di inviarli al database. Firebase gestisce già la password dell'utente, ma posso in qualche modo usarlo per crittografare i dati che non possono essere decifrati da me solo il client? Sarebbe bello se potessi realizzarlo con il client sdk.Come crittografare i dati utente in Firebase

Quindi il mio flusso sarebbe qualcosa di simile: Segno

  1. utente in con il suo credenziali (che è gestito da Firebase stesso)
  2. cifrare User alcuni dati con una certa chiave unica, che può essere generato solo dalle credenziali o da alcuni dati disponibili solo per l'utente, ma non da me. (questa chiave deve essere persistente tra le sessioni o dopo che l'utente ha cambiato la password.)
  3. I dati vengono salvati nel database (non posso leggerlo poiché è crittografato con le credenziali dell'utente)
  4. Accesso utente su un altro dispositivo (la chiave di decrittazione può essere generato subito e dati possono essere decifrati.)
+0

È necessario memorizzare la chiave di decodifica da qualche parte. Se è nel database, puoi usarlo. Se si trova nel dispositivo client, non è possibile migrarlo su un altro dispositivo. A meno che l'utente non abbia una parte da giocare nel ricordare o trasferire questo tasto, non vedo come puoi farlo senza coinvolgere l'utente –

+0

Sì, ma se la chiave può essere generata forma qualche valore univoco dell'oggetto auth dell'utente che è caricato solo dopo che l'utente ha effettuato l'accesso con le sue credenziali, allora funzionerebbe. Purtroppo non so di una tale proprietà sull'oggetto auth. – NoNameProvided

+0

È un requisito così fondamentale che mi chiedo come altri hanno affrontato questo problema. – NoNameProvided

risposta

10

Si può facilmente farlo nel modo seguente:

  1. dopo che l'utente a accede a una coppia di chiavi privata pubblica casuale è generato sul suo telefono. ad es .: utilizzare Ecc Curve25519
  2. La chiave privata da A è immagazzinato in modo sicuro sul suo telefono
  3. La chiave pubblica da A è memorizzato in Firebase ed è accessibile a chiunque che chiacchiera con A.
  4. Se X invia un messaggio a A recupera la chiave pubblica da A da Firebase crittografa il messaggio per A localmente e memorizza il messaggio crittografato su firebase nella posta in arrivo da A
  5. A scarica il messaggio crittografato da Firebase e lo decrittografa con la sua chiave privata memorizzata sul suo telefono

(viceversa da A a X)

Se A voler di per passare a un altro telefono o vuole utilizzare più telefoni si può fare questo in questo modo:

  1. chiedere a un per definire una password per crittografare la chiave privata memorizzata in locale. (o creare una passphrase casuale e utilizzare i codici QR per lo scambio di chiavi)
  2. Criptare la chiave privata localmente (ad es .: utilizzare AES256) sul proprio telefono con la password dal passaggio 1 e caricarla su Firebase. (facoltativo firmarlo con la sua chiave privata)
  3. Scaricare la chiave privata crittografata dal secondo dispositivo da A
  4. Chiedere la passphrase sul secondo dispositivo da A e memorizzare la chiave privata in modo sicuro (facoltativo controllare la firma con il pubblico chiave dalla a)
  5. Elimina la chiave privata crittografata da Firebase se non di backup è voluto
+0

Il criterio n. 4 era che l'utente potesse accedere con un altro telefono e poter accedere ai suoi dati. Quindi questo non funziona. Tuttavia, potrebbe funzionare se nella generazione della chiave è stata utilizzata una password utente o un altro segreto fornito dall'utente. Quando si accede al nuovo telefono, l'utente deve aggiungere nuovamente il proprio segreto per sbloccare i propri dati. – Aftermathew

+0

è descritto nella seconda parte della risposta – Hollerweger

+0

Ah sì. Certo che lo è. Mi dispiace, mi sono perso. – Aftermathew

Problemi correlati