Utilizzo dell'indice di caratteri in una domanda di sicurezza [duplicato]

1

Vedo molti siti che offrono una o due "domande di sicurezza" a cui è necessario rispondere scegliendo caratteri con indici specifici, oltre a nome utente + password. Ad esempio:

"Qual è il nome da nubile di tua madre?
1:[] 5:[] 8:[]

E devi inserire il primo, il quinto e l'ottavo carattere della risposta che hai impostato.

Ora ignorando il fatto che non aggiunge realmente un altro fattore (è ancora quello che sai, non quello che hai ecc.), e l'ingegneria sociale, ecc., c'è un modo per archiviare in modo sicuro il lato del server di informazioni in un hash formattare e fornire ancora la funzionalità?

In altre parole, diciamo che una risposta di sicurezza è "fabbro". Voglio essere in grado di archiviarlo in un formato hash, in modo che quando l'utente inserisce il suo 1 °, 3 ° e 4 ° carattere, potrò verificare se corrisponde. Non voglio memorizzare "smith" crittografato - voglio essere in grado di prendere il valore hash di "smith" e l'input dell'utente e dire "sì, va bene" o "no, hai sbagliato". È possibile? Quale algoritmo (i) funziona bene per questo?

Chiedo, perché l'app mobile della mia banca ha iniziato a utilizzarla per il login e non riesco a capire come questo possa essere ottenuto senza poter recuperare "smith" dal valore memorizzato.

    
posta ashic 23.07.2015 - 19:14
fonte

1 risposta

3

In generale, no, non è possibile utilizzare uno schema di questo tipo con uno storage basato su hashing e aspettarsi lo stesso tipo di sicurezza con l'hashing con password completa, come è normalmente praticato.

Ecco la dimostrazione: il punto in cui si memorizza la password hash , e non la password in chiaro, è che si presume che gli autori di attacchi possano ottenere una visione (possibilmente di sola lettura) dei contenuti del server (ad esempio con un nastro di backup rubato). Con quella copia, l'attaccante può emulare il comportamento del server sulle proprie macchine.

In particolare, l'attaccante può:

  1. Avvia la sua emulazione del server.
  2. Inizia una procedura di autenticazione con quel server emulato. Il server richiede, ad esempio, le lettere 1a, 5a e 8a della password dell'utente.
  3. L'autore dell'attacco snapshot sul tutto lo stato del server emulato in quel punto.
  4. Per ogni combinazione possibile di tre lettere, l'attaccante riavvia il server emulato nel punto di snapshot, inserisci le tre lettere e verifica se il server emulato è felice o meno.
  5. Una volta che l'attaccante ha trovato la giusta combinazione di tre lettere (ci sono solo 26 × 26 × 26 = 17576 combinazioni di tre lettere, che sono davvero poche per un attaccante automatico che può fare le cose a milioni - ricorda che tutto di ciò accade sul server emulato , sulle macchine dello stesso autore dell'attacco), può ricominciare dal punto 1 per indovinare altre lettere. Dopo alcune iterazioni, l'utente malintenzionato ha la password dell'utente completa e può accedere con sicurezza al server reale .

In pratica, l'utente malintenzionato non ha davvero bisogno di creare una macchina virtuale completa con istantanee; può concentrarsi solo sui pochi kilobyte di codice che gestiscono il processo di autenticazione. Ma basare la descrizione su istantanee e emulazione server mostra che questo tipo di attacco è generico e non c'è nulla che possa essere fatto per proteggerlo fino a quando il modello di attacco è valido.

Per ottenere nuovamente la sicurezza, quindi, il modello deve essere fatto per non applicare. Nella discussione sopra, suppongo che l'autore dell'attacco possa ottenere una copia dello stato del server. Quindi, per prevenire quell'attacco, dobbiamo fare in modo che ci sia almeno una parte dello stato del server che l'attaccante non può saccheggiare. In tal caso, è sufficiente memorizzare una chiave simmetrica K in quella parte priva di attacchi del server e utilizzare la crittografia simmetrica per memorizzare le password.

Mi aspetto che la maggior parte dei siti che richiedono combinazioni di lettere all'interno della password dell'utente utilizzino tale crittografia reversibile. Questo può essere considerato "sicuro" se la chiave K è effettivamente tenuta fuori dalla portata degli attaccanti, il che è difficile a meno che tu fallo seriamente (e in modo esaustivo).

Ancora in tutta la generalità, chiedere tre lettere significa concedere l'accesso agli attaccanti casuali con probabilità 1/17576, che è, a mio parere, un po 'troppo alto per il comfort, considerando che stiamo parlando di un server raggiungibile pubblicamente . L'intero concetto di chiedere solo alcune lettere è pensato per essere "più sicuro", ma in realtà si tratta di spargere alcuni elementi rituali odiosi in modo che tu possa sentirti più sicuro, possibilmente a spese dell'attuale la sicurezza.

    
risposta data 23.07.2015 - 20:14
fonte

Leggi altre domande sui tag