Come sincronizzare la modifica della password nella mia app con il server?

0

Ho già terminato un'applicazione web con un back-end sicuro e password hash e ora sto lavorando su una versione Android. Conservo tutti i dati cruciali in un database crittografato utilizzando SQLCipher e utilizzo la password dell'utente per crittografarlo. E proverò a mostrarti dov'è il mio problema:

  1. L'utente accede all'app Web
  2. Cambia password utente
  3. USer accede all'app per Android
  4. Ora che la password è stata cambiata, non ho modo di decodificare il mio database perché non ho più accesso alla password che è stata utilizzata per crittografarlo.

Non voglio memorizzare la password dell'utente in testo normale e l'invio dal server non è un'opzione. Come risolvo questo problema?

    
posta Ernest Zamelczyk 24.03.2017 - 09:45
fonte

2 risposte

0

Funzionerebbe per consentire all'utente di selezionare un elenco di dispositivi da aggiornare quando cambiano la password sul sito Web?

In tal caso, l'app potrebbe generare una coppia di chiavi e pubblicare la chiave pubblica sul server una volta che si sono connessi / autenticati (è necessario farlo solo una volta / raramente). Quando si modifica la password, si crittografa la nuova password con la chiave pubblica e la si memorizza da qualche parte per l'app Android per verificare il prossimo avvio. Nessuno sarà in grado di decifrare la nuova password oltre a quel particolare dispositivo.

(Se il dispositivo Android viene compromesso e le chiavi private vengono lette, presumibilmente la stessa cosa succederebbe a qualsiasi password ruotata. Forse è per questo che l'utente sta cambiando la password, a quel punto "seleziona i dispositivi da aggiornare" è un passo importante.)

    
risposta data 24.03.2017 - 12:01
fonte
0

Dovresti utilizzare un'API Web per consentire una modifica della password sul server e attivare tale API dall'app. In questo modo, l'utente dovrebbe essere in grado di cambiare la propria password dall'app e mentre è connesso al server. Ma la password dell'utente non deve essere utilizzata per crittografare direttamente il database ma solo per crittografare una chiave (grande e casuale). Il flusso di lavoro generale potrebbe essere:

  • l'utente chiede una modifica della password sull'app
  • l'app chiede la vecchia e la nuova password
  • L'app
  • conferma la vecchia password con il server tramite una connessione sicura (SSL crittografata) - opzionale
  • app chiede al server di cambiare la password assegnando i vecchi e i nuovi su una connessione sicura
  • l'app decodifica la chiave del database con la vecchia password
  • L'app
  • codifica la chiave del database con la nuova password e la salva nella memoria permanente

In questo modo l'esperienza utente è corretta perché ha dichiarato la sua password una sola volta e l'app e il server sono ancora sincronizzati.

Sfortunatamente, questo è solo un flusso di lavoro generale, perché anche se è immune da un errore di connessione iniziale (semplicemente mantenendo la vecchia password se il server non può cambiarlo), il caso peggiore sarebbe se il server potesse cambiare la sua password ma perdere la connessione prima di riconoscerla all'app. Come al solito, il diavolo è nascosto nei dettagli del caso peggiore e il protocollo effettivo dovrebbe garantire che entrambi i lati tornino allo stato precedente se si verifica un problema prima della fine.

    
risposta data 22.06.2017 - 15:55
fonte

Leggi altre domande sui tag