È sicuro dire ai tuoi utenti che tipo di algoritmo di hash usi?

46

Ad esempio, nella pagina di registrazione dell'utente, è sicuro dire alle persone "La tua password verrà memorizzata come un hash unidirezionale usando l'algoritmo (qualunque)."

    
posta user49637 20.06.2014 - 16:23
fonte

5 risposte

74

Se non è sicuro, la tua funzione di hash è pura spazzatura e non dovresti usarla.

In qualsiasi analisi di sicurezza decente, si presume che l'utente malintenzionato conosca già tutto il software che si sta utilizzando, perché:

  • Non ci sono molte possibilità.
  • Un sacco può essere indovinato in base al comportamento e all'output dell'applicazione.
  • Un utente malintenzionato che potrebbe dare un'occhiata al tuo database potrebbe anche avere una copia dei tuoi script PHP, e quindi conosce .
  • Anche nei casi in cui l'attaccante non conosca la tua funzione di hash, è molto difficile quantificare tale mancanza di conoscenza: a in che misura l'hacker non lo sa?
  • In particolare, l'attaccante può anche registrarsi come utente, con una password che sceglie, e quindi osservare l'hash risultante, permettendogli di testare rapidamente qualsiasi potenziale funzione di hash.

D'altra parte, rendere esplicita la funzione hash utilizzata può darti una reputazione di "proprietario del sito competente" che potrebbe portare fiducia ai clienti inclini alla tecnologia.

    
risposta data 20.06.2014 - 16:37
fonte
15

In senso puramente tecnico, sì, è sicuro dire ai tuoi utenti quale algoritmo usi - purché l'algoritmo sia valido. Non si tratta di informazioni segrete e cercare di nasconderlo sarebbe piuttosto sciocco.

Tuttavia, se fai un grande annuncio che usi, per esempio, bcrypt, questo potrebbe ritorcersi contro. I tuoi utenti potrebbero essere tentati di scegliere anche password più deboli, partendo dal presupposto che il tuo magico algoritmo di hash le mantiene sicure in entrambi i modi. In realtà, ci sono state diverse domande su questo sito in cui le persone credevano effettivamente che l'uso di bcrypt rendesse la resistenza delle password completamente irrilevante. Questo è certamente non il caso. Quindi devi stare molto attento a non dare ai tuoi utenti un falso senso di sicurezza.

Per farla breve: è bello dire a chiunque sia interessato e (si spera) capisca che hanno ancora bisogno di una buona password. Ma non vorrei mettere un grande messaggio nel modulo di registrazione. Le persone possono trarre conclusioni sbagliate da esso.

    
risposta data 21.06.2014 - 11:51
fonte
6

Direi che è sicuro finché l'algoritmo di hash che usi è sicuro. Altrimenti, potrebbe dare un incentivo a perseguire il tuo database.

Come utente, devo ammettere che non mi dispiacerebbe più trasparenza dai siti su cui registro, riguardo a come sono archiviate le credenziali. Ma gli utenti meno orientati alla tecnica possono essere colti alla sprovvista e / o perdere il tuo punto, quindi assicurati che il tuo pubblico di destinazione si preoccupi di queste informazioni.

In ogni caso, la forza del tuo schema di password non dipende affatto dal fatto che sia segreta: si basa sulla crittografia sottoposta a peer-review. Pertanto, rivelare quale algoritmo si utilizza non dovrebbe importare.

    
risposta data 20.06.2014 - 16:32
fonte
1

È sicuro che gli algoritmi di hash / key stretching siano sicuri, ma non è necessario e probabilmente non è una buona idea. Vorrei suggerire agli utenti vagamente come sono memorizzate le tue password (ad esempio "allungamento dei tasti, che include diverse iterazioni di una funzione unidirezionale" ), ma non menzionare il algoritmo esatto.

Mantenere il metodo di hashing (o anche l'intero metodo di autenticazione) segreto è un'istanza di sicurezza attraverso l'oscurità , che di solito è disapprovato. Tuttavia, la maggior parte delle volte, questo cipiglio deriva da un malinteso, proprio come le persone spesso interpretano erroneamente la citazione di Hoare sull'ottimizzazione prematura come "non ottimizzare".
La sicurezza non deve dipendere dall'oscurità da solo , tuttavia, l'oscurità nel posto giusto può sicuramente aumentare la sicurezza.

Un algoritmo crittografico deve funzionare in modo affidabile anche se l'hacker conosce tutti i dettagli dell'algoritmo e si presume che lo faccia. Per questo motivo, gli algoritmi crittografici sono di solito completamente divulgati e nessuno si fiderà di un algoritmo crittografico "segreto".

La tua strategia di sicurezza deve anche assumere la divulgazione completa come scenario peggiore, e il tuo sistema deve comunque funzionare in modo affidabile in quel caso.
Ma questo non significa che devi assolutamente rivelare ogni dettaglio.

Raccontando vagamente ai tuoi utenti, ad alto livello, quale strategia di archiviazione delle password è in grado di dare una buona impressione all'utente, ma non ti inchioda a qualcosa in particolare (compresi i possibili problemi di responsabilità come sottolineato da schroeder in un commento sopra). L'oscurità può essere sia un modo di scoraggiare e ritardare un aggressore.

Un po 'di oscurità sull'algoritmo esatto è entrambi simile a mettere un grosso e prominente chiavistello sulla tua porta con un fessura di blocco nascosta e protetta e mettere i tuoi soldi nella cassastrong prima di lasciare la tua camera d'albergo.
Un grosso bullone con una fessura nascosta e protetta probabilmente non è molto più sicuro di un lucchetto economico perché puoi semplicemente colpire la porta con un martello o lanciare un masso attraverso la porta del giardino. Tuttavia, dice a un potenziale ladro che sei diffidente e che altre misure di sicurezza di cui non sa sono probabili, ed è probabilmente meno problematico entrare in un'altra casa. Potrebbe non esserci nemmeno un fulmine sotto quel blocco protetto, e continuerà a funzionare come server.
Normalmente una cassetta di sicurezza accetta 4 numeri (e occasionalmente il gestore dell'hotel ha dimenticato di cambiare il codice di emergenza anche da 0000 ). Le impronte digitali consentono banalmente ad un ladro di aprire la cassastrong in meno di 3 minuti, quindi non è molto sicuro. Tuttavia, 3 minuti sono un'eternità per un ladro in una stanza d'albergo, ogni minuto in più rischia di essere catturato - raramente rimangono in una stanza per più di 3 minuti. Ciò significa che la cassastrong non sicura è letteralmente sicura rispetto al fatto che i tuoi soldi e il tuo rolex sono sul tavolo, semplicemente perché gli oggetti sono in qualche modo oscurati e trattenuti.

È più o meno lo stesso con un attaccante online. Anche se è improbabile che scopriate l'intrusione mentre sta accadendo, l'intruso ha comunque meno tempo a disposizione prima di voi, dal momento che non solo ha bisogno di scaricare il database delle password, ma ha anche bisogno di capire l'algoritmo hashing "segreto" e i sali . Potrebbe non essere molto tempo, ma è qualcosa che non ti costa nulla. Perché darlo via?

Se comunichi a un utente malintenzionato di utilizzare MD5 per eseguire l'hash delle tue password, allora saprà immediatamente che può violare l'intero database utente in meno di 2 secondi e molto probabilmente non sono molto aggiornato con la sicurezza tutto sommato, il che significa che sei un obiettivo molto attraente. Se si dice a un utente malintenzionato che si utilizza un "sistema di allungamento chiave con molte iterazioni", può capire che probabilmente è una notevole quantità di lavoro per decifrare anche una singola password. Inoltre, è un lavoro extra per capire quale algoritmo usi esattamente.
Se il tuo sito è solo uno su un elenco di 20 obiettivi interessanti da attaccare, è appena stato spostato in fondo all'elenco.

    
risposta data 22.06.2014 - 14:05
fonte
0

Se l'hash è sicuro e, ancora più importante, il modo in cui è utilizzato nel sito / applicazione è sicuro, dovresti essere in grado di aprire l'intero codice che esegue il sito / app e non dovresti essere meno sicuro.

Quindi, sì, SE l'implementazione è sicura, la divulgazione è sicura. È un grande IF .

    
risposta data 21.06.2014 - 15:29
fonte

Leggi altre domande sui tag