Revisione dell'approccio al solo hashing e crittografia lato client per l'applicazione web

0

Background: ho poca conoscenza dell'hashing e della crittografia, quindi per favore portami con me. Ho postato una domanda correlata qui: link per la prospettiva di programmazione, che può dare qualche background. Quella domanda riguardava la fattibilità generale del prodotto complessivo. In un certo senso, questa domanda è un follow-up, sull'attuazione reale, ma poiché è più tecnico dal punto di vista della sicurezza, ho pensato che sarebbe stato meglio pubblicato qui. Sentiti libero di postare su entrambe le domande / entrambe le domande, a seconda dei casi.

Sono stato incaricato di proteggere i dati locali per un'applicazione web che può essere utilizzata offline, quindi l'interazione con il server per l'autenticazione e la crittografia non è un'opzione. Questo sarebbe facoltativo, per gli utenti che desiderano un ulteriore livello di protezione oltre alla crittografia hardware.

L'applicazione sarà per un singolo utente per dispositivo. L'obiettivo è provare a ridurre il rischio di accesso non autorizzato a dati sensibili se un dispositivo viene perso o rubato.

Le mie idee iniziali su come potrei fare questo sono:

  • Richiede all'utente di inserire una password ogni volta che si avvia l'applicazione.
  • Hash la password utilizzando PBKDF2, memorizzando l'hash e il sale localmente, ad es. in WebSQL.
  • L'utente inserirà quindi la propria password, potrebbe essere re-hash utilizzando il sale caricato e confrontato con l'hash memorizzato.
  • Memorizza la password in una variabile JavaScript localmente, magari usando un metodo di hashing diverso da quello che viene usato per archiviare nel database?
  • Utilizzare questo come chiave per crittografare e decrittografare (utilizzando AES) i dati nel database.

I dati locali verranno crittografati, tuttavia la logica di crittografia / decrittografia sarà evidente dall'osservazione del codice sorgente JavaScript. Pertanto, la chiave utilizzata per crittografare / decodificare non può essere solo la password memorizzata, con hash, in quanto sarebbe ovvia.

D: In che modo questo approccio può essere migliorato? Sarebbe sufficiente inserire la password in due modi diversi, uno per la memorizzazione e uno per la crittografia / decrittografia? C'è qualcosa in più che potrei fare, tenendo presente i limiti del lavoro con lo storage web e senza un server / hardware esterno da assistere?

Inoltre - sebbene l'utente lavori offline con l'applicazione, quindi i dati devono essere locali e crittografati, ci sarà una connessione iniziale al server per scaricare effettivamente l'applicazione. Quindi, se c'è qualcosa che posso fare basandomi su quella connessione iniziale che potrebbe aiutarti, fammelo sapere.

    
posta Adam Marshall 18.03.2014 - 12:48
fonte

1 risposta

1

Stai sbagliando. Non vi è alcun punto per un autenticazione per l'autenticazione se i confronti vengono eseguiti localmente perché un utente malintenzionato può semplicemente iniettare il valore hash direttamente nella memoria e ignorare il controllo dell'autenticazione.

Per scopi locali, devi usare qualcosa come la tua seconda parte della tua idea, ma quella parte dovrebbe essere fatta usando gli standard esistenti. Ciò di cui hai bisogno è una funzione di derivazione della chiave. Una funzione di derivazione chiave è un algoritmo in grado di acquisire una password in modo sicuro e utilizzarla per formare una chiave di crittografia. Poiché le chiavi create sono spesso relativamente deboli, dovrebbero essere utilizzate per crittografare una chiave veramente casuale che viene poi utilizzata per la crittografia e la decrittazione effettive del DB.

Utilizzando un approccio basato sulla crittografia, diventa irrilevante se l'utente impone una chiave nella memoria perché non sarà in grado di accedere ai dati crittografati. La crittografia stessa funge sia da meccanismo di autenticazione che di protezione dei dati. (Se vuoi un modo per verificare la decrittazione corretta, puoi sempre criptare un valore conosciuto e verificare la decrittografia di quel valore.)

    
risposta data 18.03.2014 - 14:17
fonte

Leggi altre domande sui tag