C'è un modo in cui la mia password è stata sottoposta a hash, se mi è mai stato chiesto di fornire solo 5 caratteri? [duplicare]

68

Esiste un sistema che, in un modulo di accesso, presenta circa 40 caselle per le lettere della password (per nascondere la lunghezza effettiva della password) e solo quelle casuali (la stessa quantità ogni volta) sono modificabili. La spiegazione è - per proteggermi dai keylogger. Sembra legit. Ma significa che la mia password è mantenuta in chiaro? O c'è qualche algoritmo di hash noto che permetterebbe questo?

Nota: non sto chiedendo se è una buona o cattiva pratica, chiedo informazioni sulla possibilità / fattibilità / metodo dell'hashing.

    
posta Mołot 23.09.2015 - 12:17
fonte

11 risposte

61

No - in questo caso non esiste un modo pratico per cancellare la tua password.

Affinché il sito web funzioni in questo modo, l'hash dovrebbe consentire all'utente di verificare che un sottoinsieme di 5 caratteri della password corrisponda a un determinato valore. Ciò significa che puoi forzare brutalmente quei 5 personaggi da soli, che è prontamente pratico, e una volta che conosci 5 caratteri, è facile forzare il resto. Questo è in qualche modo simile alla debolezza delle password LANMAN.

Le password parziali hanno vantaggi in termini di sicurezza, in particolare contro i logger principali. Le app bancarie a volte hanno una password normale che viene sottoposta a hash sul server e un codice di autenticazione aggiuntivo, che viene inserito solo parzialmente e NON è sottoposto a hashing sul server. Questo è considerato completamente accettabile, ma sta diventando meno comune in quanto l'autenticazione a più fattori è una soluzione migliore.

In questo caso particolare, non è chiaro che questa sia una cattiva idea. È necessario valutare il rischio di compromissione del server contro il rischio di keylogger sul lato client. Infatti, è il client che è maggiore rischio . Quindi, nonostante le normali migliori pratiche, questo sito non è poi così stupido.

    
risposta data 23.09.2015 - 12:38
fonte
53

Come altri hanno affermato, qualsiasi tentativo di risolvere questo problema con algoritmi di hashing è destinato a fallire.

Tuttavia, penso che valga la pena di parlare di come ING probabilmente risolva questo problema. (Disclaimer: non ho mai lavorato per ING, ma ho lavorato per altre grandi banche).

È probabile che ING memorizzi la tua password in un modulo di sicurezza hardware . Si tratta di un componente hardware resistente alle manomissioni, progettato in modo che nemmeno l'operatore del sistema possa estrarre gli hash delle password. Internamente, probabilmente memorizza la tua password in testo normale (o qualcosa di simile al testo normale), ma comunica solo con il mondo esterno tramite le operazioni "inserisci i caratteri x, y e z" e limita il numero di tentativi consentiti.

In questo scenario, la sicurezza della password dipende dal fatto che HSM sia resistente alla manomissione. Ci sono stati attacchi pubblicati su HSM , ma la superficie di attacco è ridotta, rispetto agli hash archiviati in un RDBMS.

    
risposta data 24.09.2015 - 11:12
fonte
13

Un modo in cui questo potrebbe essere implementato è di memorizzare un centinaio di hash delle password parziali. Ogni volta che l'utente accede con una password parziale, verrà contrassegnato come usato. L'elenco degli hash può essere rigenerato ogni volta che è necessario inserire una password completa.

Questo schema indebolisce la sicurezza contro la forza bruta o la crittanalisi, ma può proteggersi dal registratore di chiavi se spesso si deve effettuare il login da macchine non affidabili.

Avevo visto questo schema utilizzato su una carta di denaro di viaggio, in quanto i viaggiatori potrebbero spesso aver bisogno di utilizzare l'account da computer pubblici. Per i normali servizi bancari, penso che ciò indebolisca solo la sicurezza. Se il tuo normale computer è infetto da un keylogger, ci vorranno solo alcuni accessi per raccogliere la password completa dalle password parziali.

Per rafforzare questo schema dalla crittoanalisi e dall'attacco a forza bruta, le password parziali dovrebbero essere archiviate con un hash molto lento, come PBKDF2 con molti round. E per ostacolare la capacità dell'aggressore di eseguire la forza bruta degli hash in parallelo tutto in una volta, è necessario forzare la password parziale da utilizzare nell'ordine specifico in cui sono stati creati. Ad esempio, utilizzando l'n'a password parziale per crittografare la lista numerica e il sale per la n + 1a password parziale costringerebbe l'utente malintenzionato a risolvere la n ° password parziale prima di poter iniziare a lavorare su n + 1 ' esimo.

    
risposta data 23.09.2015 - 16:14
fonte
8

- È possibile che semplicemente cancellino tutte le combinazioni che stanno per mostrarti.

Anche se penserei che non l'abbiano implementato e stiano memorizzando la tua password, probabilmente crittografata, ma non con hash.

Una migliore combinazione di sicurezza con questo metodo pur essendo consapevole dello spazio di archiviazione:

  1. Cripta la password in chiaro e inseriscila in una sorta di cella frigorifera.
  2. Decodifica periodicamente la password per creare nuove combo e cancellarle.

In questo modo lo spazio di archiviazione è mantenuto ragionevole. E la tua password unhashed dovrebbe trovarsi in un livello più sicuro del sistema.

    
risposta data 24.09.2015 - 11:20
fonte
5

Potrebbe non essere sottoposto a hash ma potrebbe essere archiviato crittografato. Teoricamente avrebbero potuto usare Schema soglia con caratteri ASCII consentiti come chiavi, quindi verificare se il risultato si adatta al risultato. In questo modo (teoreticamente) non dovresti aver bisogno di memorizzare una password solo una soluzione.

PS. Per esempio vedi link

    
risposta data 27.09.2015 - 00:16
fonte
4

Supponiamo che la password sia lunga 40 caratteri. Supponiamo che i caratteri possano essere interpretati come i numeri c_1, c_2, ... c_40 di un campo finito adatto F ( Galois Field ) . Supponiamo anche che F abbia almeno 40 elementi.

Supponiamo di calcolare il polinomio p di interpolazione per 40 elementi zero nessuno predefiniti di F tale che p (a_j) == c_j. Ora memorizziamo 35 coefficienti di questo polinomio più un hash (salato) degli altri 5.

Ogni volta che l'utente ci dà 5 dei personaggi possiamo sfruttare i noti 35 coefficienti per recuperare i 5 coefficienti mancanti e quindi calcolare l'hash. Se uno qualsiasi dei 5 caratteri è sbagliato ci ritroveremo con un polinomio diverso e quindi un diverso hash. Quindi potresti voler memorizzare l'hash in qualche modulo di sicurezza hardware dedicato come già indicato da James_plc.

Quindi sì, questo è possibile. Tuttavia, se il tuo negozio sicuro viene compromesso, è altrettanto semplice craccare come un bruto che impone una password di 5 lettere.

Per altri algoritmi in questa direzione potresti voler saperne di più sulla condivisione segreta

    
risposta data 27.09.2015 - 09:47
fonte
2

Does it means my password is kept in plain text?

È molto probabile che sia in testo normale o crittografato, ma non è sicuro.

Ad esempio, quando inizialmente invii la tua password potrebbero fare hash e salvare diverse combinazioni di 5 caratteri della tua password e gli indici dei caratteri a cui si applicano.

Tuttavia, chiunque abbia accesso a tali informazioni e l'algoritmo di hashing potrebbe facilmente crackare gli hash di 5 caratteri e riassemblarli per ottenere la password originale, quindi anche se è con hash è un modello debole.

    
risposta data 24.09.2015 - 17:49
fonte
2

Suppongo che tu possa memorizzare un elenco di hash di tutte le combinazioni di qualsiasi carattere X, dove X è il numero di caratteri che devi fornire.

Questo non sarebbe un hash molto strong se il resto dell'hash fosse formato da personaggi noti. Sarebbe possibile ricavare il resto dei caratteri indesiderati da un utente salt o derivare in qualche modo dai caratteri X forniti, ma questo non è ancora l'hash più strong.

    
risposta data 24.09.2015 - 20:22
fonte
1

Non vedo perché l'algoritmo di autenticazione non possa memorizzare tutte le combinazioni delle sottostringhe della tua password come hash rispetto all'elenco delle posizioni dei caratteri, quindi se la tua password è stata:

Password

quindi ci sarebbe una tabella di (chiave, hash) in cui le chiavi erano ad es.

'1' solo per la prima lettera '1,2' solo per la prima e la seconda lettera "4,5,6" solo per la quarta, la quinta e la sesta lettera

e memorizza su quelle chiavi l'hash di una stringa delle lettere indicate, quindi contro

'4,5,6' sarebbe l'hash ('swo') della password di esempio.

Il problema con questo è ovviamente che l'inversione degli hash sarebbe semplice a meno che non fossero salati con un sale per utente, e anche allora sarebbe relativamente semplice forzare gli hash di sequenze brevi per ovvi motivi se la vendita fosse compromesso (mantenere il segreto del sale sarebbe una soluzione a questo).

Non so in quale altro modo lo farebbero però ...

Domanda interessante.

    
risposta data 23.09.2015 - 12:30
fonte
1

La risposta è che per quanto riguarda la sicurezza è una cattiva idea, ma è tecnicamente possibile che sia un hash.

Se è un sottoinsieme casuale della tua password completa che stai immettendo (come prima, seconda, quinta, sesta e ultimi caratteri una volta, e una diversa selezione casuale la prossima volta) potresti ottenere questo risultato (al salvataggio iniziale ) rompere la password in sottoinsiemi predeterminati e poi hashing.

Essenzialmente questo è solo un modo elegante per far inserire gli utenti in più password senza sapere che è ciò che stanno facendo. L'utente quindi sa quale password immettere in base a quali caselle sono disponibili.

Mentre ci sono cose che potresti fare per controbilanciarlo (applicare password iniziali molto più lunghe, rigorosi 3 tentativi di accesso / giorno, aumentare il numero di password multiple salvate e passare a una nuova dopo ogni tentativo di accesso e non permettere la ripetizione fino a un login riuscito, ecc.), questo in genere renderebbe le tue password più corte (nel tuo caso di 5 caratteri) e quindi più debole.

Per inciso, la protezione che otterresti dai keylogger in ogni caso sarebbe minima. Richiederebbe semplicemente al keylogger di esaminare effettivamente molti dei tuoi accessi e capire quale sia la tua password completa. Una migliore protezione della registrazione delle chiavi sarebbe quella di utilizzare l'autenticazione a due fattori, che non deve essere complicata o costosa. Quando l'utente effettua il login, presenta loro un codice che possono scrivere e accedere per accedere la prossima volta.

    
risposta data 24.09.2015 - 19:54
fonte
-1

yes Mi ricorda il protocollo a prova di conoscenza zero. La password non può essere intercettata perché non viene mai trasmessa o nemmeno completamente inserita dall'utente. (Non puoi imparare la password dal protocollo.) Ma il segreto dovrebbe essere abbastanza strong. Se chiedi a un personaggio, ovviamente dopo aver visto ogni posizione, conosci la password. Lo stesso vale per l'hashing. Se l'hash è debole, può essere rotto.

Modifica: penso che l'hashing in questo caso non sia un hash md5 o simile, in questo caso con l'hash si intende il segreto che contiene la password. Nella documentazione di conoscenza zero c'è spesso un grafico colorato o un grande polinomio. Non ricordo i dettagli.

Forse pensarlo come una fattorizzazione primaria. Supponiamo che tu abbia una lista di numeri primi e store (Product: i: p [i] ^ i) (es. 504) nel database e ti chiedo il 3 ° fattore principale ... nel caso tu risponda a 2 puoi facilmente verificare che è il terzo numero ... come 504 == 7 * 3 * 3 * 2 * 2 * 2 ora si spostano su numeri primi grandi come nella crittografia avanzata.

    
risposta data 23.09.2015 - 23:24
fonte

Leggi altre domande sui tag