È possibile l'autenticazione off-line sicura per l'app web?

5

Attualmente sto pensando a un'app web che può andare offline (dopo essere online) e che è ancora in grado di fornire l'autenticazione in modo sicuro all'utente. (Ad esempio, in un ambiente multiutente, è essenziale impedire l'accesso di altri utenti.)

In questo momento, stavo considerando un'autenticazione password-hash con un po 'di sale, e ho appena visto questa domanda SO: link

Ma dal momento che questo è un ambiente web, devo supporre che altri abbiano accesso al codice sorgente dell'app, e quindi il sale stesso sia trapelato. (Inoltre, l'autore dell'attacco potrebbe utilizzare l'hash stesso per rinforzare la password stessa.)

Quindi ... per riassumere, le mie 2 domande sono:

  1. La salatura è efficace anche quando è trapelata? Sto indovinando no alla domanda, dal momento che ci vuole O (X ^ (m + n)) per rinforzare l'ignoto ...  e peggiora quando l'hacker utilizza l'hash della password per rinforzare il passwd ..
  2. Esistono modi efficaci (sicuri) per autenticare l'utente?
  3. Un buon modo per generare un tasto DES per la crittografia dei dati dell'utente  (e fornire un modo per il server di distinguere tra dati alterati e quelli reali?)
posta user7832 30.07.2013 - 11:18
fonte

2 risposte

2

Risponderò alle tue "2" domande di seguito:

  1. Per quanto riguarda il sale: un sale dovrebbe essere pubblico. A volte viene utilizzato un valore extra segreto (ad es. In attesa della password). Questo è spesso definito "pepe".

  2. Prova TLS con l'autenticazione del client. Utilizzare le credenziali all'interno del certificato client (dopo aver completato con successo l'autenticazione e la sessione) per fornire il controllo degli accessi.

  3. Sì, è possibile derivare un tasto DES "in senso buono"; utilizzare PBKDF2 con un numero di ripetizioni elevato e sale casuale di grandi dimensioni. Tuttavia, il tasto DES non è più sicuro una volta utilizzato per la crittografia a causa di attacchi di forza bruta.

risposta data 30.07.2013 - 14:17
fonte
2

Risposta generica: se l'autenticazione basata su password può essere eseguita offline, l'app necessariamente contiene tutto ciò che è necessario per decidere se una determinata password è corretta o meno. Ciò implica inevitabilmente che scaricando l'intero codice e il contenuto dell'app, l'utente malintenzionato può "emulare" il server offline sul proprio computer e provare le password a suo piacimento, limitate solo dalla potenza di calcolo che può raccogliere (quanti PC comprerà o affitto) e il costo computazionale inerente alla verifica di ogni singola password. Questa è chiamata attacco dizionario offline situazione.

Nella migliore delle ipotesi , in tal caso, puoi aumentare il costo utilizzando l'hashing lento (molte iterazioni di una funzione hash sottostante o qualcosa di simile) e i sali (per prevenire attacchi paralleli, condivisione dei costi , tabelle precalcolate ...). Vedi questa risposta per un trattamento completo.

Gli attacchi al dizionario offline sono una preoccupazione. Essere in una situazione del genere non è comodo. Se gli utenti accettano un'attesa di 1 secondo per l'autenticazione sul proprio smartphone, la CPU dello smartphone deve essere necessariamente in grado di verificare una password entro un secondo. Un aggressore con un buon PC sarà quindi in grado di "provare" almeno una dozzina di password al secondo; fare in modo che alcune centinaia se l'algoritmo di hash si adatta bene a quello che può fare la GPU off-the-shelf, alcune migliaia di volte l'attaccante è industrioso e va dritto a qualche FPGA . Inoltre, l'aggressore è spesso paziente e può permettersi di aspettare una o due settimane prima di ottenere una password utente. Ciò equivale, molto approssimativamente, a un miliardo di tentativi di password per l'autore dell'attacco.

Allenare gli utenti medi a scegliere password che resisteranno a un attacco di forza bruta di un miliardo di potenziali password, è difficile. Vedi questa domanda per qualche discussione sul soggetto. D'altra parte, se tu devi scegliere la password (non l'utente), seleziona una sequenza di 15 lettere casuali: sono 70 bit di entropia, e questo resisterà abbastanza a lungo per scoraggiare gli attaccanti ( uno spazio per le password di dimensioni 2 70 è enorme ).

Nota che i sali non sono intesi per essere segreti, e sono efficaci anche se conosciuti dall'attaccante. Un sale segreto non è un sale, ma un tasto . Non puoi averlo nella tua situazione: si deve presumere che l'attaccante abbia scaricato e decodificato il codice completo dell'app. In larga misura, il tuo contesto è simile a quello della crittografia basata su password: proteggere la riservatezza di un dato, per quanto riguarda una password segreta, senza hardware specifico.

    
risposta data 31.07.2013 - 18:49
fonte

Leggi altre domande sui tag