Domanda:
Qual è una buona analogia per spiegare a un profano perché le password dovrebbero essere hash?
Nzall
2014-07-18 16:29:51 UTC
view on stackexchange narkive permalink

Nota: questa non è una situazione reale in cui mi trovo attualmente.

Supponi che il tuo capo sia uno di quei gestori analfabeti di computer all'antica e voglia memorizzare le password in chiaro per semplificare lo sviluppo. Hai 5 minuti per spiegare il motivo dell'hashing delle password. Sai anche per esperienza che il tuo capo può essere influenzato da una buona analogia. Quale analogia useresti per spiegare al tuo capo che le password dovrebbero essere sottoposte ad hashing?

Quando i colloqui tecnici cadono definitivamente, potrebbe essere il momento di iniziare a parlare di responsabilità.
@DavidHoude Sono d'accordo, ma il tuo capo potrebbe dire "discutiamone quando si arriva a quel punto", a quel punto è troppo tardi. la responsabilità è una buona ragione in sé e per sé, ma non a tutti interessa allo stesso modo. Supponi di doverlo spiegare a uno stagista, a cui non interessa davvero la responsabilità perché probabilmente non lavorerà più con te una volta che si è verificato l'hack.
@Nate: A quei capi, spieghi che ** loro ** potrebbero sentirsi bene nell'accettare la responsabilità, ma che ** tu ** no, quindi se potessero per favore firmare una rinuncia che accetta per conto dell'azienda ogni responsabilità per il decisione tecnica (cioè non hashing) che hanno preso e tu hai eseguito. Questo spinge in avanti il ​​momento in cui devono pensare.
Ecco un'analogia: una volta c'era un re che non voleva sapere cosa stava succedendo nel suo regno. Era una persona molto importante che non aveva tempo per riflettere. Ma poiché era in carica, ha dovuto prendere molte decisioni. Non sarebbe un gran re se lasciasse che i suoi consiglieri facessero ciò che ritengono meglio! Così ha ordinato ai suoi consiglieri di raccontargli storie inventate e poi di chiedergli cosa avrebbe fatto nella storia. Naturalmente il suo regno fu invaso, fu ucciso e il suo castello rase al suolo. Ma almeno non doveva pensarci, e le storie gli piacevano.
L'analogia che userei è la cassetta di sicurezza. La cassetta di sicurezza ha due serrature con chiavi separate. La banca ha una chiave (chiamiamola chiave userid) e tu hai l'altra (chiamiamola chiave password). Cosa penseresti se scoprissi che la banca ha segretamente conservato una copia della chiave della password?
Non c'è bisogno di un'analogia, basta capovolgere la situazione e chiedergli di darti una buona ragione per cui ** non dovresti ** hash le password.
"Perché se non lo fai, la prima volta che mi fai arrabbiare, userò la tua password per registrarti come te e trasferire alcuni dei beni dell'azienda a tuo nome."
pfft. a quanto pare non mi è permesso pubblicare una risposta con 101 reputazione ... ecco un'altra analogia che trovo molto più appropriata di qualsiasi esempio di cassetta di sicurezza ecc. Immagina di voler entrare in un bar molto esclusivo per psichici. Il buttafuori solleva una carta in modo che solo lui possa vederla e ti chiede quale immagine è raffigurata su di essa. Se puoi rispondere correttamente - così il presupposto - sei psichico e puoi quindi entrare. Questa è la password in testo normale. Finché tutto va secondo i piani va bene.
Ma ora immagina di aver comprato la porta del bar dal venditore sbagliato e ci sono piccoli specchi che la ricoprono o il buttafuori ha deciso di indossare occhiali da sole a specchio un giorno. All'improvviso queste immagini che non avrebbero mai dovuto essere viste dalle persone esterne sono visibili a chiunque si sforzi abbastanza. L'hashing della password è come mettere la carta in una busta. Anche guardando dall'interno (direttamente o tramite specchi installati in modo errato) l'immagine non può essere indovinata fino a quando non è stata nominata una password e il buttafuori apre la busta per controllare. (quest'ultima parte è tecnicamente sbagliata ma dovrebbe far capire il punto).
Perché * tu * sei lo sviluppatore, ed è il tuo lavoro creare software sicuro - il tuo capo ti ha assunto perché conosci i computer e lui no - e hai l'obbligo etico e professionale di farlo.
Apparentemente la rete di 101 rappresentanti non è abbastanza buona, quindi ecco qui ... Ok, diciamo che il tuo cliente ti dà un sacchetto di miscela per dolci con un set preciso di ingredienti. Cuoci la torta e assaggiala. Ora, dato che hai una lingua fantastica, puoi capire la differenza tra le torte di due miscele per dolci. Conservare la miscela per dolci è come memorizzare una password. Se viene rubato, possono riutilizzarlo. Nel frattempo, se cuoci la torta e la conservi, anche se rubano la torta, non riescono a capire l'esatta composizione degli ingredienti. La torta è come una password e la torta è l'hash.
Le password non modificate sono come lasciare una pila di 20 sul sedile dell'auto. Certo, la tua macchina è chiusa ...
Perche 'non li tolga comunque? Voglio dire, so che probabilmente ti licenzierà, ma ... Vuoi davvero essere conosciuto come quel tecnico che lavorava per quella compagnia che non proteggeva le loro password?
@SteveJessop Non è un'analogia. È letteralmente come alcuni manager che ho visto vedevano il mondo. Non peggioriamo le cose "ricordando" loro che sono dei re?
@corsiKa: beh, forse la risposta alla mia "analogia" potrebbe essere usata per distinguere tra manager che permetteranno che "non vogliono sapere cosa sta succedendo e non hanno tempo per pensarci ma non delegano" isn sta facendo un ottimo lavoro, contro i manager contro i quali dovremmo compensare la nostra minaccia sottilmente velata di radere al suolo il loro castello.
[L'ultimo paragrafo di questo articolo è piuttosto carino.] (Http://blog.codinghorror.com/rainbow-hash-cracking/) Ricordati solo di iniziare con `Salare un hashish sembra complicato (e vagamente delizioso), ma è abbastanza semplice
Un hash funziona come una password per la tua password.Se qualcuno ottiene la password per il tuo database non sottoposto ad hashing, ha accesso a tutte le password dei tuoi utenti.Ma se ogni password richiede una password stessa per essere utilizzata, allora ogni password dovrebbe essere incrinato anche individualmente, il che è un problema non banale.
L'hashing è come avere un poeta perfettamente coerente che scrive una poesia per ogni password.Non è possibile ricavare la password dalla poesia, ma il poeta comporrà sempre la stessa poesia per una determinata password.Le poesie hanno valore solo se hai accesso al poeta, quindi non c'è nulla di male nel salvare le poesie nel db nel caso in cui vengano rubate.
Diciotto risposte:
tylerl
2014-07-18 21:56:01 UTC
view on stackexchange narkive permalink

La risposta breve

La risposta breve è: "Così non sarai colpito da una azione legale collettiva da $ 5 milioni." Questo dovrebbe essere un motivo sufficiente per la maggior parte dei CEO. L'hashing delle password è molto più economico.

Ma ancora più importante: il semplice hashing delle password come suggerito nella tua domanda non è sufficiente. Avrai comunque la causa. Devi fare di più.

Perché devi fare di più richiede un po 'più di tempo per spiegarlo. Quindi prendiamo per un momento la strada più lunga in modo che tu capisca cosa stai spiegando, quindi faremo il giro per la sinossi di 5 minuti.

L'hashing è solo l'inizio

Ma iniziamo con quello. Supponiamo che tu memorizzi le password dei tuoi utenti in questo modo:

  # id: user: password1: alice: pizza2: bob: passw0rd3: carol: baseball  

Adesso , supponiamo che un utente malintenzionato riesca a ottenere più accesso al tuo sistema di quanto desideri. È lì solo per 35 secondi prima di rilevare il problema e chiudere il buco. Ma in quei 35 secondi è riuscito a impossessarsi del database delle password. Sì, hai commesso un errore di sicurezza, ma ora lo hai risolto. Hai corretto il buco, corretto il codice, aggiornato il tuo firewall, qualunque esso fosse. Quindi va tutto bene, ora, giusto?

Beh, no, ha il tuo database di password.

Ciò significa che ora può impersonare ogni utente sul tuo sistema. La sicurezza del tuo sistema è distrutta. L'unico modo per recuperare è ricominciare da capo con un NUOVO database di password, costringendo tutti a cambiare la propria password senza utilizzare la password esistente come una valida forma di identificazione. Devi contattarli fuori banda attraverso un altro metodo (telefono, e-mail o qualcosa del genere) per verificare la loro identità per ricreare le loro password e, nel frattempo, l'intera tua operazione è morta nell'acqua.

E se non lo vedessi rubare il database delle password? In retrospettiva, è abbastanza improbabile che tu lo veda effettivamente accadere. Il modo in cui probabilmente lo scoprirai è notando attività insolite sugli account di più utenti. Forse per mesi è come se il tuo sistema non avesse alcuna sicurezza e non puoi capire perché. Questo potrebbe rovinare il tuo business.

Quindi abbiamo hash

Invece di memorizzare la password, memorizziamo un hash della password. Il tuo database ora è simile a questo:

  # id: user: sha11: alice: 1f6ccd2be75f1cc94a22a773eea8f8aeb5c682172: bob: 7c6a61c68ef8b9b6b061b28c348bc1ed7921cb533eea8f8aeb5c682172: bob: 7c6a61c68ef8b9b6b061b28c348bc1ed7921cb533eea8f8aeb5c682172: bob: 7c6a61c68ef8b9b6b061b28c348bc1ed7921cb533eea8f8aeb5c682172: bob: 7c6a61c68ef8b9b6b061b28c348bc1ed7921cb533d si memorizza è un token opaco che può essere utilizzato per  verificare  se una password è corretta, ma non può essere utilizzato per  recuperare  la password corretta.  

Bene, quasi. Google quegli hash, ti sfido.

Quindi ora siamo passati alla tecnologia degli anni '70. Congratulazioni. Possiamo fare di meglio.

Quindi saliamo

Ho passato molto tempo a rispondere alla domanda sul perché salare gli hash, inclusi esempi e dimostrazioni di come funziona nel mondo reale. Non ripeterò la discussione sull'hash qui, quindi vai avanti e leggi l'originale:

Perché gli hash salati sono più sicuri?

Piuttosto divertente , eh? OK, quindi ora sappiamo che dobbiamo salare i nostri hash o potremmo anche non aver mai hash le password per cominciare. Ora siamo alla tecnologia degli anni '90. Possiamo ancora fare di meglio.

Quindi iteriamo

Hai notato quel bit in fondo alla risposta che ho collegato sopra, giusto? Qualcosa su bcrypt e PBKDF2? Sì, si scopre che è davvero importante. Con la velocità con cui l'hardware può eseguire i calcoli di hashing oggi ( grazie, bitcoin!), un utente malintenzionato con hardware pronto all'uso può far saltare in aria l'intero file di password con hash in poche ore , calcolando miliardi o addirittura trilioni di hash al secondo. Devi rallentarli.

Il modo più semplice per rallentarli è semplicemente fargli lavorare di più. Invece di calcolare un hash per controllare una password, devi calcolare 1000. O 100.000. O qualunque numero si adatti alla tua fantasia. Puoi anche usare scrypt ("ess-crypt"), che non solo richiede molta potenza della CPU, ma anche molta RAM per fare il calcolo, rendendo l'hardware dedicato che ho collegato sopra in gran parte inutile .

Questo è lo stato dell'arte attuale. Congratulazioni e benvenuto nella tecnologia odierna .

Abbiamo finito?

Quindi ora cosa succede quando l'aggressore prende il tuo file di password. Bene, ora può batterlo offline invece di fare tentativi online contro il tuo servizio. Purtroppo, una buona parte dei tuoi utenti (dal 4% al 12%) avrà utilizzato la password "123456" o "password" a meno che tu non glielo impedisca attivamente e l'aggressore proverà a indovinarle prima.

Se vuoi mantenere gli utenti al sicuro, non lasciare che utilizzino "password" come password. O uno qualsiasi degli altri primi 500, se è per questo. È disponibile un software per rendere facile (e gratuito) il calcolo accurato della sicurezza della password.

Ma anche l'autenticazione a più fattori non è mai una cattiva idea. È facile da aggiungere a qualsiasi progetto. Quindi potresti farlo anche tu.

Ora, i tuoi 5 minuti di gloria

Sei di fronte al tuo capo, ti chiede perché devi usare PBKDF2 o simili per sottoporre ad hashing le tue password. Citi la class action di LinkedIn e dici: "Questo è il livello minimo di sicurezza legalmente previsto nel settore. Qualcosa di meno è letteralmente negligenza". Questo dovrebbe richiedere molto meno di 5 minuti e, se il tuo capo non è convinto, non stava ascoltando.

Ma potresti continuare: "Il costo di implementazione della tecnologia di hashing è trascurabile, mentre il costo di non implementazione potrebbe essere di milioni o superiore". e "In caso di violazione, un database con hash adeguato consente di posizionarsi come un'organizzazione ben gestita e attenta alla sicurezza, mentre un database sottoposto ad hashing in modo improprio è un imbarazzo molto pubblico che, come la storia ha dimostrato molte volte, non essere ignorato o trascurato minimamente dai media. "

Se vuoi essere tecnico, puoi ri-modificare quanto sopra. Ma se stai parlando con il tuo capo, dovresti saperlo meglio di così. E le analogie sono molto meno efficaci del semplice mostrare gli effetti della vita reale che sono perfettamente visibili senza il rivestimento di zucchero necessario.

Non si fa in modo che le persone indossino guanti protettivi raccontando una buona analogia . Invece metti un po 'di carne per il pranzo nel becher e quando esplode in fiamme verdi e blu dici "è quello che succederà al tuo dito".

Usa lo stesso principio qui.

Spiegarlo in cinque minuti è la sfida qui (o trovare un'analogia che funzioni, a seconda che ti concentri maggiormente sul titolo o sul contenuto della domanda), e non penso che questa risposta funzionerebbe. Solo * leggendo * questo e la tua risposta collegata da sola probabilmente richiederà alla maggior parte delle persone cinque minuti.
+1 per nessuna necessità di analogia, ci sono esempi di vita reale, e hanno molto più senso di "un gigantesco ostacolo".
Un commento: ho cercato quella causa su Linkedin, ed è stata archiviata (anche se il motivo del licenziamento non era perché le password erano scarsamente hash). Lo mostrerò ai miei colleghi però, perché mostra le potenziali conseguenze dell'utilizzo di SHA-1. Ho anche trovato un sito web con 15 miliardi di hash SHA-1 che userò come ulteriore prova.
«Non si riesce a convincere la gente a indossare guanti protettivi raccontando una buona analogia. Invece metti un po 'di carne per il pranzo nel becher e quando esplode in fiamme verdi e blu dici "è quello che succederà al tuo dito". 'Usare qualcosa di vagamente simile a un dito per dimostrare cosa accadrà al dito reale di qualcuno è * letteralmente * un'analogia.
Dalla mia comprensione, scrypt o bcrypt sono preferiti rispetto a PBKDF2 in quanto sono significativamente più resistenti all'accelerazione dell'hardware.
2FA / MFA può * a volte * essere "una cattiva chiamata". Se costringi ogni utente a usarlo sempre in circostanze di bassa sicurezza, puoi creare molto rapidamente * problemi di sicurezza *. Non voglio dover inviare una scansione dell'iride e un campione di feci ogni volta che accedo a Facebook. Se i tuoi dati non sono * così * rischiosi, ** rendi 2FA / MFA facoltativo **. Renderai felici gli utenti paranoici della sicurezza senza esaurire i pigrizia, inoltre potrai trasferire * alcune * responsabilità sulle persone che rinunciano.
L '* unica * parte di questa risposta che conta è la primissima frase: dal punto di vista di un manager è tutta una questione di responsabilità. Se non lo capiscono, non sono in grado di gestirlo.
Nel collegamento alla causa che hai citato ho notato questo: "La pratica più comune è di salare le password prima di inserirle in una funzione hash, poi di salare il valore hash risultante, e di nuovo eseguire il valore hash attraverso una funzione di hashing". Capisco che lo scopo dell'hashing ripetuto sia quello di impiegare molto tempo per l'hashing delle password. E il punto fondamentale è assicurarsi di dover eseguire l'hashing di ogni password individualmente (invece di indovinare, eseguire l'hashing e confrontare l'intero database). Ma non vedo alcun vantaggio nel salare più volte. Mi sto perdendo qualcosa?
Ti stavo seguendo fino a "Quindi iteriamo". Mi sono perso le specifiche su come implementare qualunque cosa significhi, quindi non sto usando la tecnologia degli anni '90 per semplicemente salare le password con hash. :)
@NateKerkhofs potresti indicare quel sito?
Le funzioni di derivazione della chiave iterativa di @HC_ come pbkdf2 e scrypt fanno sì che il passaggio di hashing richieda più tempo eseguendolo molte volte. L'idea è che se ci vuole più tempo per indovinare, un aggressore non può fare tanti tentativi. Ci sono molte più informazioni là fuori sull'argomento, Google ti guiderà ad esso.
Ho cercato su Google il primo hash. Il primo risultato è stato "Come si dice 1f6ccd2be75f1cc94a22a773eea8f8aeb5c68217 in tedesco?"
@woliveirajr https: // crackstation.net / ha un database da 190 GB con 15 miliardi di password e hash per MD5 e SHA-1. Hanno anche un database da 19 GB con 1,5 miliardi di hash per una serie di altri algoritmi di hashing .. L'ho testato per gli hash di esempio e funziona.
"ri-hash quanto sopra" guarda cosa hai fatto :)
Bene, ma, hmm. Questo non risponde davvero alla domanda. La domanda non era: "Come posso convincere un profano che questa è una buona cosa da fare?" ma "Come posso spiegarlo a un profano in modo che possa capire il concetto tecnico?" Affermare semplicemente che un giudice è d'accordo con me sul fatto che questa è una buona idea non spiega PERCHÉ è una buona idea. E spiegare altre cose che si potrebbero fare per renderlo ancora migliore non fa nulla per spiegare perché il primo passo sia stato una buona idea per cominciare. Non che la risposta non includa informazioni preziose. È solo la risposta a una domanda diversa.
Questa risposta è corretta al 100% quando si tratta di fatti, ma non è una risposta alla domanda posta. La domanda non era * "perché l'hashing è utile" * o * "quali sono le attuali aspettative di sicurezza nel settore" *. La domanda era * "quale ** analogia ** può essere usata per descrivere l'hashing" * e questa risposta sembra non correlata (e ridondante, considerando che probabilmente ci sono dozzine di risposte esistenti in questo stesso sito sul perché viene usato hash + salting). Penso che se ti capita di non essere d'accordo con la premessa della domanda, dovresti lasciare un commento e chiedere che venga riformulato, non rispondere a un'altra domanda.
Penso che questa risposta accenni a implicazioni legali e non sia proprio appropriata. Una società probabilmente deve solo dimostrare che sta seguendo le "pratiche standard del settore" per essere coperta, e anche l'hashing di base potrebbe adattarsi a questo. Ma non lo scopriresti con certezza fino a quando non sei in un'aula di tribunale, e tribunali diversi potrebbero trovarlo in modo diverso e probabilmente dipenderebbe dalla testimonianza di esperti, ecc.
aaaaaaaaaaaa
2014-07-19 12:56:25 UTC
view on stackexchange narkive permalink

Questo thread è un po 'corto di analogie, quindi ecco qui:

Una password senza hash è come un lucchetto trasparente, chiunque la esamini adeguatamente può progettare la chiave di corrispondenza.

Andrei con unhashed = confronto delle chiavi e unsalted = blocco trasparente
@Bergi Non posso trarre una frase scattante da questo, e dato il modo in cui stai offrendo il suggerimento, immagino che non potresti neanche.
Forse non così scattante come la tua, ma ci proverò: una password senza hash è come una chiave di riserva, che viene confrontata per corrispondere a quella dell'utente. Chiunque abbia accesso alla stanza delle chiavi potrebbe comunque farne delle copie. Quindi non memorizziamo le chiavi, ma memorizziamo i lucchetti che devono essere aperti dalla rispettiva chiave dell'utente. Tuttavia, con l'accesso allo spogliatoio si potrebbero scassinare le serrature, e poiché sono tutte trasparenti e dello stesso produttore è abbastanza facile trovare un plettro che ne apra alcune. Quindi, saliamo i nostri hash, che è come usare molti modelli di lucchetti diversi, quindi devono essere selezionati individualmente.
Sfortunatamente [non posso postarlo come risposta] (http://meta.stackexchange.com/q/170937/183280), anche se ha quasi superato il limite di lunghezza del commento :-)
@Bergi Punti per provare, ma quella spiegazione finisce per essere complicata quasi quanto la semplice spiegazione degli hash delle password. Il punto dell'analogia non è sostituire la spiegazione reale, è più simile a una scialuppa di salvataggio decisionale per coloro che non riescono a cogliere la vera spiegazione. A tal fine, essere semplici e facili da ricordare è una caratteristica estremamente importante.
Sì, è vero, e "lucchetto trasparente" è una frase concisa che tutti possono immaginare (hai comunque il mio voto positivo). Tuttavia penso che un'analogia non debba sostituire una spiegazione, ma dovrebbe / potrebbe affiancarla e aiutare a comprenderla in termini non / meno tecnici seguendo la stessa linea di pensiero. Usare serrature non trasparenti suona troppo come la sicurezza per oscurità :-)
No, una password senza hash è come una chiave? Puoi usarlo per sbloccare il loro account? E se è così - o se la tua risposta è il caso - allora che diamine è una password * con hash *? È molto più simile a un lucchetto, uno in cui puoi bloccare le chiavi a forza bruta finché non si apre.
Nzall
2014-07-18 16:29:51 UTC
view on stackexchange narkive permalink

Per iniziare, ne fornirò uno con cui iniziare:

Immagina di gestire una banca. Non vuoi consentire ai tuoi clienti l'accesso diretto al denaro. Quindi hai un cassiere che ha solo un computer e una piccola somma di denaro per gestire prelievi e depositi quotidiani. Non può accedere a tutto, né può passare segreti al cliente, perché non ha accesso a questi segreti.

Un cassiere va tutto bene e dandy, ma a volte c'è una persona che lo vuole rapina la banca e non verrà fermato dal cassiere. Per contrastare questo problema, hai una cassaforte davvero grande nel seminterrato che contiene tutti i soldi veri dei tuoi clienti. questa cassaforte ha un sacco di sicurezza, come uno scanner di impronte digitali, riconoscimento vocale, pressostati, serrature a tre chiavi e una serratura temporizzata. è progettato per tenere fuori tutti coloro che non dovrebbero essere presenti e che non sanno come superare i controlli di sicurezza.

Questa cassaforte fermerà il 99% dei ladri, ma c'è sempre quell'1% che riesce a superare tutta quella sicurezza, aggirandola o brutalizzandola. Nel caso in cui ciò accada, una banca immagazzina i propri soldi in contenitori con trappole esplosive, che li rendono inutilizzabili, attraverso mezzi come farli saltare in aria o spruzzare vernice dappertutto. In questo modo, il ladro non può utilizzare il denaro o deve impiegare molto tempo per renderlo nuovamente utilizzabile.

Anche un'applicazione software ha questi sistemi: il programma che l'utente usa è il cassiere: non può fargli fare quello che vuole a meno che non trovi un modo per parlarne dolcemente in cooperazione. la configurazione hardware e software che protegge il programma e il database è il caveau della banca: tiene lontane le persone che non sanno quali sono i punti deboli della configurazione di sicurezza utilizzata. Memorizzare la password in chiaro significa che se qualcuno supera il programma e la configurazione di sicurezza, ha libero accesso alle password. Proprio come una banca conserva il denaro in un contenitore che rende l'accesso al denaro molto più difficile, l'hashing della password offre alla persona che compromette le tue password un enorme ostacolo che deve superare. Significa anche che i dipendenti (sia la banca, il software e quelli della nostra stessa azienda) non possono essere messi sotto pressione, costretti o chiacchierati con dolcezza per aggirare la sicurezza per un truffatore, perché nemmeno loro possono accedere direttamente ai soldi / password. Possono accedere solo ai contenitori / hash.

mi hai perso a `l'hashing della password (è) un ostacolo enorme` (che è in genere il motivo per cui non mi piacciono le analogie)
@njzk2 "X è un ostacolo" è una frase così comune che è a malapena un'analogia. È solo un modo idiomatico per dire "X rende il compito difficile".
GdD
2014-07-18 17:49:36 UTC
view on stackexchange narkive permalink

Mi piace l'analogia come un modo per spiegare la tecnologia, tuttavia in questo caso probabilmente non è realizzabile in quanto l'analogia sarebbe troppo complessa.

La maggior parte dei manager è più motivata a evitare rischi personali per la propria posizione piuttosto che a fare la cosa giusta, quindi piuttosto che un'analogia utilizzerei esempi in cui la memorizzazione delle password in testo normale si è riflessa negativamente su un'azienda. Direi solo qualcosa come

"Memorizzare le password in testo normale ci farebbe sembrare molto cattivi, rischiando la nostra reputazione e possibilmente aprendoci a contenzioso. È considerata una pessima pratica in qualsiasi settore e lì sono siti web dedicati a nominare e svergognare le aziende che memorizzano le password in chiaro. Personalmente, non mi piacerebbe essere quello in piedi di fronte al consiglio / capo / CTO a spiegare perché non abbiamo messo in atto un controllo di sicurezza di base. Se eseguiamo l'hashing delle password dei nostri clienti, una violazione dei dati non provocherebbe una fuga immediata di password che gli hacker potrebbero utilizzare e si vedrebbe che stiamo proteggendo le informazioni dei nostri clienti. L'hashing delle password mitiga un grosso rischio con poco sforzo. "

Includere link a trasgressori di testo normale, quindi inviare Mi piace ad alcune notizie come Cupid Media, Microsoft India Store, ecc. .

+1 per i trasgressori di testo normale: mostrare al tuo capo che l'azienda verrebbe ridicolizzata in pubblico, da un sito che fa un ottimo lavoro nello spiegare e difendere il motivo per cui lo fanno, sembra abbastanza facile. Soprattutto perché è così facile implementare buone pratiche
brokethebuildagain
2014-07-18 22:21:18 UTC
view on stackexchange narkive permalink

Usare le analogie può essere potente, ma in questo caso, penso che sarebbe molto più semplice spiegare con un linguaggio semplice cosa sta succedendo. Qualcosa di simile dovrebbe essere efficace, ma probabilmente dovrebbe includere diapositive powerpoint con illustrazioni e caratteri aziendali di grandi dimensioni.

Come sai, richiediamo alle persone di utilizzare le password in modo da sapere chi sono quando sono utilizzando il nostro prodotto. Dobbiamo tenere traccia di queste password per consentire alle persone di accedere. Il problema è che non possiamo memorizzare le password esattamente come vengono inserite, perché gli aggressori hanno trovato il modo di vederle e rubarle.

Inoltre, non possiamo semplicemente riscrivere le password in un codice intelligente e credere che saremo gli unici a saper tradurre il codice, perché questo ancora non lo garantisce gli aggressori determinati non riescono a capire il codice e inoltre non protegge dagli attacchi dall'interno della nostra organizzazione, come ex dipendenti disonesti.

Per risolvere questo problema, noi deve utilizzare un hash della password unidirezionale . Un hash della password è come usare un codice, tranne per il fatto che è impossibile decodificarlo. * In questo modo, solo l'utente conosce la propria password. Memorizziamo solo l'hash della password e lo controlliamo quando l'utente effettua il login. Ciò mantiene i nostri utenti al sicuro e riduce la nostra responsabilità in caso di violazione dei dati, che può avere gravi ripercussioni. [Includi esempi di aziende che sono state citate in giudizio per archiviazione insicura delle password]

* [So che non è impossibile, ma probabilmente il profano non ha bisogno di così tanto dettaglio.]

Perché questo non ha più voti? Inoltre, dovresti probabilmente aggiungere che, se le password sono archiviate in testo non crittografato, un utente malintenzionato interno (diciamo quel tizio dall'aspetto ambiguo in fondo al corridoio) potrebbe accedervi e quindi usarle - o peggio, venderle -.
Ho provato a usare questo semplice linguaggio per spiegare l'hashing delle password a mia moglie. È rimasta bloccata sul concetto di una funzione unidirezionale. Qualche idea su un linguaggio semplice per spiegarlo?
@Nomic Una funzione unidirezionale può essere spiegata come la funzione che genera l'ombra di una persona da 1000 angoli, utilizzando l'intero aspetto di quella persona come input. Puoi determinare completamente come apparirà l'ombra di una persona in base all'aspetto delle persone, ma il contrario è più difficile. La generazione di una forma 3D che crea le stesse esatte ombre da più direzioni richiederebbe sicuramente tonnellate di scultping e revisione (anche se un ritaglio 2d funzionerebbe per un singolo angolo.) Per accedere, dobbiamo calcolare la forma 3D, poiché solo una forma 3D è accettato come input. Conoscere tutte le ombre non è sufficiente.
@Nomic Provarlo è un'idea eccellente! L'analogia di Allen è davvero buona; Lo consiglierei a un linguaggio semplice per elaborare l'hash unidirezionale, ma per il gusto di farlo, ecco il mio tentativo di un linguaggio semplice: un hash della password unidirezionale prende del testo e fa calcoli intelligenti su di esso in modo che si trasformi in un lunghissimo e incomprensibile miscuglio di lettere e numeri. È diverso dall'utilizzo di un codice perché non può essere ripristinato nell'input originale.
@Allen Mi è piaciuta la semplicità del tuo primo commento, ma in ogni caso l'ombra è una grande analogia
Dennis Jaheruddin
2014-07-18 19:29:17 UTC
view on stackexchange narkive permalink

Tutte le spiegazioni finora sono un po 'lunghe, eccone una breve:

Alcune persone che non riescono a ricordare il loro spillo bancario, tengono una nota nel portafoglio.

Se un ladro o un conoscente riuscissero a guardare dentro il portafoglio, avrebbero un problema, A MENO CHE il pin non sia scritto in un modo che non possono leggerlo.

L'hashing è fondamentalmente scrivere del testo in un modo che nessun altro può leggerlo.

Potrebbe essere ampliato per rendere più tangibile il modo in cui scriveresti uno spillo in un modo che nessun altro potrebbe capire.
Voto positivo perché è una bella e rapida analogia che trasmette l'importanza, ma l'implicazione è che puoi recuperare il PIN dalla nota se conosci il "modo in cui il proprietario può leggerlo", il che implica la crittografia piuttosto che l'hashing.
Per quanto mi piaccia la semplicità, questa analogia non riesce a catturare l'idea che l'hashing sia un processo a senso unico, quindi dipende da quanto pensi che il profano abbia bisogno di capirlo.
Stai confondendo l'hashing con la crittografia. Se riesci a leggere la password, non sei riuscito a proteggere le informazioni private dei tuoi utenti e ti sei messo a grande rischio legale.
@nealmcb Mi rendo conto che questo non spiega effettivamente l'hashing, ma spiega il punto dell'hashing. In quanto tale, credo che risponda alla domanda.
La differenza tra hashing e crittografia è fondamentale qui. La crittografia ti aiuta a proteggere le informazioni e ti consente di recuperarle in un secondo momento, ed è un errore enorme per i siti web. Crittografare il tuo pin nel tuo portafoglio ha senso (supponendo che tu abbia un computer o uno schema di crittografia del cervello). L'hashing del tuo pin è inutile: mettere l'hash nel tuo portafoglio non ti aiuterà a ricordare il tuo pin in quel modo. E l'hashing di un pin della banca non lo protegge nemmeno dal momento che i pin sono così corti: l'attaccante deve solo hash tutti i possibili numeri a 4 cifre e confrontarli con l'hash (che è veloce anche se è salato).
Tim S.
2014-07-18 23:06:52 UTC
view on stackexchange narkive permalink

Immagina di essere il buttafuori di un club. Per sapere se far entrare le persone, hai un codebook di nomi / alias delle persone (alcune persone preferiscono essere discrete e sono conosciute solo da un alias) e le proprie password private; non puoi riconoscere che le persone sono o non sono chi dicono di essere dalla loro voce o aspetto (ci sono troppe persone e, a causa degli pseudonimi, i controlli d'identità sono un no-go), quindi devi solo andare fuori dal libro (il server web non può dirti guardandoti che sei la persona sbagliata) . Le persone devono dirti sia il loro nome che la password per entrare e, se non corrisponde al tuo libro, vengono respinti.

Se qualcuno ottiene una foto del tuo libro dei codici (il tuo DB è trapelato) , possono impersonare chiunque voglia , senza che tu sia in grado di dire che stanno mentendo. Alcuni dei tuoi clienti usano lo stesso nome e la stessa password anche presso la loro banca (che hanno cassieri che lavorano con codebook proprio come te), e quindi avrebbero rubato soldi in quel modo. Saresti quindi licenziato per aver consentito una violazione così grave, facendo sembrare il club molto brutto e costato loro denaro.

Fortunatamente, puoi acquistare una scatola nera (funzione hash) che prende il loro nome (salt) e la password e ti dà un lungo numero dall'aspetto casuale (hash) che sarà sempre lo stesso per un determinato nome e password e diverso per qualsiasi altra combinazione di nome e password. Quindi ora invece del tuo codebook contenente [nome e password], puoi farlo contenere solo [nome e numero]! Quando una persona vuole entrare, ti dice il suo nome e la password, li inserisci nella tua scatola nera e cerchi il suo nome nel tuo codebook per verificare che il numero che la tua scatola nera ti ha dato corrisponda a quello registrato.

Ora, se qualcuno ottiene una foto del tuo codebook, non sarà ancora in grado di entrare! Non sarà nemmeno in grado di dire se metà delle tue persone usa la stessa password, perché ogni combinazione [nome e password] inserita nella scatola nera era unica. Hanno una scatola nera proprio come la tua e possono inserire un certo nome e password casuali fino a quando non trovano il numero giusto, ma devono farlo individualmente per ogni persona.

Se scopri che era trapelato, dovresti comunque chiedere ai tuoi clienti di cambiare le loro password per la massima sicurezza, ma gli aggressori non avranno un momento facile per entrare.

Questo codebook è scritto in Braille?
Sì. ;) In realtà ho pensato di inserirlo, ma fa male all'analogia con lo snooping "qualcuno dà una sbirciatina / immagine del tuo libro dei codici". Se aiuta, il libro è scritto in braille, ma con punti ben visibili, ed è tutto su un foglio di carta. (Codice QR braille?)
Oppure, se vuoi, puoi vedere, ma il club è un club in maschera, dove tutti indossano maschere quando entrano. E..masquerade..banks esistono in questo universo. Smettila di fare domande! ;)
@PaŭloEbermann Ho rimosso la parte cieca. Alla fine, ho deciso che non aggiungeva molto all'analogia e la indebolisce.
The Spooniest
2014-07-20 04:40:27 UTC
view on stackexchange narkive permalink

Spiegalo in termini di linee di difesa.

Ovviamente, farai tutto il possibile per assicurarti che il tuo codice sia sicuro. Ma il fatto è che il tuo server non eseguirà solo il codice che hai scritto e non hai alcun controllo sul codice scritto da altre persone. Anche se tutto il resto del codice sulla macchina è open-source, dovresti assumere altri 2-3 sviluppatori a tempo pieno per assumerti la responsabilità dei tuoi rami di tutto. Dal momento che -non ci prendiamo in giro- si suppone che l'intera faccenda sia una misura di riduzione dei costi, non è fattibile.

Quindi, anche se avessi assoluta fiducia nel tuo codice, ci sarebbe c'è ancora molto spazio perché le cose vadano male. È quindi necessario un modo per garantire che anche se un utente malintenzionato entra nella macchina, le tue password siano comunque al sicuro. È qui che entra in gioco l '"hashing" (tra virgolette perché gli algoritmi corretti da usare al giorno d'oggi non sono realmente algoritmi di hashing , ma è comunque un termine utile e generico) .

In termini militari, questo è essenzialmente come (e perché) imposti più linee di difesa. Nessun generale mette l'intero esercito nello stesso punto, perché devi tenere conto della possibilità che qualcosa che non avevi previsto permetta di sconfiggere o aggirare le tue linee del fronte. L'hashing è la tua guardia di casa: la cosa che proteggerà le tue password quando tutto il resto ha fallito. Speri che questo non sia mai necessario, ma il costo di non averlo quando ne hai bisogno è semplicemente troppo alto: le cause multimilionarie sono solo l'inizio.

Aki
2014-07-18 17:14:33 UTC
view on stackexchange narkive permalink

Come spiegare.

  • Gli esseri umani sono umani, non importa quanto siano modernizzati; lì le password saranno qualcosa come la data di nascita o il nome della ragazza / fidanzato / animali da compagnia ecc. ecc.

Quindi, è una minaccia salvare la password in chiaro. Chiunque può leggerlo.

  • L'hashing aiuta a renderli illeggibili per gli esseri umani (incluso il fedele amministratore di sistema).

Una volta che una password è stata sottoposta ad hashing, è praticamente impossibile recuperare indietro. quindi, non c'è paura che la tua password venga rubata da qualcuno. Anche se qualcuno ottiene l'hash, è inutile.

  • Possiamo dire che se la password è un "frutto", l'hashing sarà "succo". quindi, il succo è sufficiente per verificare la password dell'utente quando prova ad accedere.

Lo svantaggio dell'hashing della password è : nessuno può recuperare il pass originale. In tal caso, il sistema deve richiedere all'utente di inserire Nuova password

.

Il che, imo, non è affatto un inconveniente. Questo dovrebbe essere standard.
Penso che non ci sia bisogno di un'analogia. Spiegare quali sono realmente i vantaggi dell'hash è l'unico modo: è facile hash della password e vedere se qualche hash corrisponde. È quasi impossibile utilizzare l'hash per trovare la password. E agli utenti viene richiesta la password, non l'hash.
@Martijn È uno svantaggio per l'utente.
Sono ancora in disaccordo. Dovrebbe diventare risaputo che non puoi recuperare la tua password, mai. In questo modo, quando recuperi la password, dovresti preoccuparti.
@BrianOrtiz Perché un utente dovrebbe preoccuparsi se la password che gli dai è nuova o vecchia? Chiaramente non ricordano cosa fosse prima e non l'hanno memorizzato da nessuna parte, quindi per quanto ne sanno la nuova password che hanno appena scelto è identica a quella vecchia.
Ken Clubb
2014-07-18 23:23:37 UTC
view on stackexchange narkive permalink
  1. Spiega che le password vengono sempre rubate e, quando accade, le aziende sono VERAMENTE imbarazzate e aperte a cause legali se le password sono in chiaro.
  2. Spiega che l'hashing è davvero facile da fallo oggi.
  3. Ora per l'analogia:

La migliore analogia di una funzione hash unidirezionale con i non esperti è semplicemente usare una ricerca numerica analogia: dimentica la complessa crittografia. Quando un utente ti fornisce originariamente la password, assegni un numero univoco alla password utilizzando una scatola nera e memorizzi il numero come password dell'utente invece della password originale.

Quando l'utente ti dà di nuovo una password in seguito per l'autenticazione, passi la password fornita nella scatola nera e ottieni un numero. Ora puoi confrontare quel numero con il numero che hai salvato in precedenza: se i due numeri corrispondono, le password sono le stesse, se i due numeri non corrispondono, le password non sono le stesse.

Ogni password univoca passato nella casella ottiene il suo numero univoco e ogni volta che la stessa password viene passata nella casella nera esce lo stesso numero.

Il modo in cui la casella nera esegue la ricerca del numero è molto noto e qualsiasi problema con la scatola nera viene risolto dal settore - tutte le vulnerabilità vengono risolte dal settore - LA TUA azienda non è responsabile se c'è un problema con la scatola nera.

Infine, se il il numero viene rubato dal database dell'azienda, la scatola nera ben nota non funziona al contrario: non puoi prendere un numero rubato e recuperare la password (supponendo che la password originale fosse forte).

supercat
2014-07-19 22:44:51 UTC
view on stackexchange narkive permalink

La risposta fondamentale, che non ho ancora visto affermare direttamente da nessuno, è che le azioni di chiunque sia in grado di scoprire una password non possono essere distinte in modo affidabile dalle azioni del suo legittimo proprietario. Se si vuole essere in grado di dimostrare che il legittimo proprietario ha eseguito un'azione o tramite la propria azione ha esposto la password a una persona non autorizzata, è necessario assicurarsi che il legittimo proprietario non sia mai tenuto a fare qualcosa che consentirebbe a qualcun altro di determinare la password.

Se la password di Fred è memorizzata in un database in un modo che non è codificato oltre il recupero, allora Fred potrebbe contrastare qualsiasi accusa di illecito affermando che la sua password potrebbe essere stata utilizzata o trapelata da qualcuno con accesso al database delle password. A meno che non venga utilizzato hardware specializzato per memorizzare le password , non ci sarebbe modo di confutare la contro-affermazione di Fred.

Nota che per una sicurezza reale, Fred non dovrebbe mai esporre la sua password a nient'altro rispetto alle apparecchiature antimanomissione di cui ha motivo di fidarsi. Altrimenti, ci sarebbe il rischio che l'attrezzatura in cui Fred digita la sua password venga manomessa in modo tale da far trapelare la password senza hash ad un avversario.

Sì, questa è la risposta fondamentale. Tuttavia, questa non è un'analogia e non è molto utile per spiegare a qualcuno che già non lo sapeva.
Forse la mia risposta è stata un po 'prolissa, ma l'idea di "Se il tuo amministratore di sistema può accedere alle password delle persone, allora qualsiasi accusa di comportamento scorretto contro qualcun altro sarà un" ha detto che ha detto con l'amministratore "dovrebbe essere abbastanza comprensibile.
Malcolm
2014-07-18 23:34:21 UTC
view on stackexchange narkive permalink

Immagina di essere Scrooge McDuck. È da un po 'che tieni le tue pile di soldi in un caveau gigante, ma c'è un problema con questo: se un ladro riesce ad accedere al caveau, tutti i tuoi soldi andranno persi in una volta! Non va bene. Quindi, anatra intelligente che sei, decidi di dividere i tuoi soldi in tante pile più piccole e metterle ognuna nella sua cassaforte separata. Ora, se il ladro riesce mai ad accedere a un caveau, andrà perso solo una piccola quantità del tuo denaro e potrai facilmente sostituire il caveau compromesso. Molto meglio! Tranne che ora hai un nuovo problema: come ricordare le combinazioni di tutte quelle diverse volte? Non puoi usare la stessa combinazione per ognuna, perché se il ladro ci mettesse le mani sopra avrebbe accesso a tutti i tuoi soldi e non staresti meglio che se lo avessi lasciato in un gigante mucchio!

Decidi di scrivere tutte le combinazioni (insieme al caveau a cui vanno a finire ognuna) su un foglietto di carta, e poi metti quel foglio nel suo caveau separato. Ora devi solo ricordare una combinazione, ma i tuoi soldi sono comunque tenuti separati. Questo è un miglioramento, ma è comunque problematico, perché se un ladro riuscisse a trovare e aprire la cassaforte con dentro la carta, sarebbe ancora in grado di prendere tutti i tuoi soldi. Non vuoi che ciò accada mai!

Allora cosa fai? Ebbene, la soluzione ideale sarebbe scrivere le combinazioni in una sorta di codice. Vorresti un codice che un ladro non può utilizzare per recuperare tutte le combinazioni originali, ma che puoi comunque utilizzare per accedere ai tuoi soldi. Sfortunatamente, non c'è davvero un modo per farlo per soldi nei caveau. Fortunatamente, è possibile per gli account utente protetti da password, perché in realtà non abbiamo bisogno di conoscere le password dei nostri utenti, dobbiamo solo sapere che loro le conoscono.

Tenere i tuoi soldi in una gigantesca cassaforte è come avere un'unica password principale per l'intero sistema. Tenere i soldi in diverse casseforti e annotare tutte le combinazioni è come tenere separati i dati dei tuoi utenti in account protetti da password, ma poi mantenere tutte le loro password in chiaro in un'unica posizione: fintanto che un utente malintenzionato conosce o può indovinare dove quella posizione è, non è davvero diverso dall'avere un'unica password principale. Hai bisogno di un modo per codificare il tuo elenco di password in modo tale da poterlo ancora utilizzare per verificare che un utente abbia la password corretta , assicurandoti che un utente malintenzionato non possa utilizzare il list per recuperare le password stesse . In poche parole, questo è ciò che fa l'hashing.

Stranamente, in alcuni episodi viene mostrato che il cestino di Paperone ha una password banale.
Briguy37
2014-07-21 21:43:01 UTC
view on stackexchange narkive permalink

Supponiamo che il tuo database con le password sia trapelato o rubato:

Se le password sono in testo normale, tutte le tue password appartengono a noi.

Se le password sono sottoposte ad hashing, tutte le password sono ancora in un caveau di una banca condiviso che deve essere violato.

Se le password vengono sottoposte ad hashing e salate, ciascuna password si trova nel proprio caveau di una banca privato.

Tranne che, quando ogni password è il proprio vault, una password debole è un vault debole.Con il "caveau della banca condiviso", almeno la banca applica un elevato standard di sicurezza a tutte le password.La cosa migliore è applicare entrambi: quindi le password deboli hanno la protezione comune e le password complesse hanno una protezione aggiuntiva.
otus
2014-07-22 15:59:41 UTC
view on stackexchange narkive permalink

Ora dell'analogia:

  1. Memorizzare password in chiaro è come lasciare la casa sbloccata.
  2. Crittografare il database delle password è come conservare la chiave sotto lo zerbino.
  3. L'hashing delle password è come usare un blocco numerico a 3 cifre condiviso da tutti gli utenti.
  4. Salare gli hash delle password fornisce a ogni utente il proprio blocco numerico.
  5. PBKDF fornisce quei blocchi numerici più cifre.

Nessuno dovrebbe effettivamente decidere questioni di sicurezza sulla base di un'analogia, ma queste potrebbero aiutare a spiegare a un profano perché è importante prendere precauzioni.

Kaz
2014-07-24 02:41:18 UTC
view on stackexchange narkive permalink

Per le funzioni di hashing, nessuna analogia pronta si trova nella sfera del calcio o delle automobili. Il meglio che possiamo fare è svelare i fatti reali.

Caro capo,

In un mondo perfetto, gli utenti dovrebbero essere attenti alla sicurezza e non userebbero mai lo stesso (o anche un simile ) password per due o più siti o servizi diversi. In quel mondo perfetto, una password avrebbe poco valore per un aggressore. Dopo aver compromesso il database degli utenti e aver appreso le password, quelle password non sarebbero utili per ottenere l'accesso ad altri sistemi.

Nel mondo reale, gli utenti riutilizzano le password, quindi la segretezza delle password deve continuare ad essere sorvegliato anche quando un sistema è stato violato, al fine di limitare i danni.

L'hashing aiuta a proteggere le password, perché l'unico modo per ottenere una password dall'hash è un calcolo di forza bruta che richiede tempo. Quel calcolo prima romperà le password deboli che sono brevi o basate su parole del dizionario e frasi comuni. Ci vuole molto più tempo per violare password complesse, ma dato abbastanza tempo, anche quelle cadranno.

Tuttavia, poiché ci vuole tempo per decifrare le password con hash, gli utenti del sistema compromesso che tendono a riutilizzarli le password, o utilizzare password simili, potrebbero avere tempo sufficiente per essere avvisate e modificare le proprie password su altri sistemi, prima che l'aggressore tenti di accedere ai propri account. (Quelli con password molto deboli avranno poco o nessun tempo, sfortunatamente, perché le password deboli possono essere "violate" dagli hash molto rapidamente. La difesa contro sono le protezioni nel sistema che impediscono agli utenti di utilizzare password deboli.)

Senza hashing, l'attaccante può passare immediatamente ad accedere ad altri sistemi dopo aver rubato le password dal sistema compromesso. Quando gli amministratori vengono a conoscenza della violazione, è già stato eseguito l'accesso ad altri sistemi, almeno per quegli utenti che riutilizzano le password.

Esiste una seconda minaccia: quella dell'accesso surrettizio. Ciò riguarda anche quegli utenti che non riutilizzano le password. Supponiamo che il database delle password di un sistema sia trapelato, ma questo evento non venga rilevato. L'autore dell'attacco può utilizzare le password per accedere di nascosto al sistema per mesi o anni dopo la violazione. Non solo l'aggressore ha rubato informazioni che erano attuali al momento dell'incidente, ma può continuare a rubare informazioni semplicemente accedendo a quegli account per i quali ha password, fintanto che queste non cambiano.

Le password con hash aiutano a proteggersi da questa minaccia, in particolare se combinate con una politica di modifiche regolari delle password e password complesse. Le password con hash che sono forti assicurano che l'attaccante debba eseguire un lungo calcolo per scoprire una password dall'hash. La politica di modifica della password aiuta a garantire che, al termine di questo calcolo, la password scoperta sia probabilmente inutile perché è stata modificata.

keshlam
2014-07-25 10:48:00 UTC
view on stackexchange narkive permalink

Analogia: in qualità di fabbro, posso (con il permesso dei clienti) tenere traccia di ciò che ho fatto per loro, inclusi i dettagli delle loro chiavi. Ma questo mi mette a rischio che il mio negozio venga irrotto e l'elenco rubato (o che un dipendente malvagio lo faccia) - nel qual caso il truffatore potrebbe creare le chiavi di molte case, e sarei responsabile di non averlo protetto informazioni migliori.

La soluzione per le chiavi è di non memorizzare MAI le informazioni sulla chiave in testo normale. Memorizzalo crittografato e non annotare mai le informazioni necessarie per decodificare questi dati. Se qualcuno ruba l'elenco crittografato, non può danneggiarlo.

Ovviamente, per un computer, "non scrivere mai" significherebbe che non può decodificare le password. Ma possiamo risolvere questo problema creando un sistema in cui non dobbiamo effettivamente decodificarli. Invece, prendiamo la password digitata dall'utente, la codifichiamo e confrontiamo la versione codificata con la password codificata che abbiamo memorizzato. Se corrispondono, l'utente ha digitato la password corretta. Esistono "codici" (hash crittografici) che consentono la codifica ma non la decodifica, quindi questo può essere reso rispettabilmente sicuro.

Gli elenchi di password con hash a volte possono ancora essere violati, ma è TREMENDO più costoso farlo - e, cosa più importante, puoi dimostrare di aver compiuto uno sforzo ragionevole per proteggere i dati degli utenti, quindi la tua responsabilità è molto inferiore.

paj28
2014-07-22 13:04:11 UTC
view on stackexchange narkive permalink

L'importanza tecnica dell'hashing è ampiamente sopravvalutata.

La ragione pratica per cui hai bisogno dell'hash è perché lo fanno tutti gli altri; è considerata "best practice". Se hai una violazione, è molto più facile difendere una posizione in cui stai facendo lo stesso dei tuoi colleghi. Fare qualcosa di diverso, anche se è la cosa giusta, è molto più difficile da difendere. Quindi consiglio sempre ai siti web di seguire il metodo di hashing standard, anche se penso che sia sciocco.

Allora perché l'importanza dell'hashing è enormemente sopravvalutata? Iniziamo pensando a un sito Web con password senza hash. Le password verrebbero archiviate in testo normale nel database. Il database è protetto: su un server fisicamente sicuro, crittografia completa del disco, firewall, amministrazione sicura ed è protetto dalla logica dell'applicazione sul server web. Quelle password sono fondamentalmente sicure.

Perché eseguiamo l'hash? Fornisce un'ultima linea di difesa. Supponiamo che tutte quelle difese siano state ostacolate. Forse la NSA ha utilizzato un exploit del browser zero-day per ottenere malware sulla workstation di sys-admin, ha aspettato che accedesse al database e da lì ha preso il controllo remoto ed estratto tutti i dati. In tal caso, la NSA ottiene tutte le password in chiaro. Ed è qui che l'hashing aiuta: se usi l'hashing, l'NSA ottiene solo gli hash e dovrebbe condurre un attacco di forza bruta per ottenere le password.

Ed è per questo che le persone consigliano l'hashing. Ma questo è difettoso per tre motivi:

  1. Dati personali : il sito web conserva le tue password e contiene anche dati personali. Che si tratti di messaggi, foto, cronologia degli acquisti. Il motivo per cui hai una password in primo luogo è proteggere i tuoi dati personali. L'hashing può proteggere la password, ma non fa nulla per proteggere i tuoi dati personali.

  2. Acquisizione dal vivo : sebbene nel database siano archiviati solo hash, ogni volta che qualcuno accede, la sua password viene inviata al server web. L'NSA può rimanere in silenzio sul server catturando la password di tutti. L'hashing non fa nulla per impedirlo.

  3. Riutilizzo della password : è importante evitare il riutilizzo della password per altri motivi. Quindi, quando LinkedIn viene violato, non importa se ottengono la mia password o meno. Gli hacker hanno già i miei dati personali da LinkedIn. E se recuperano la mia password, ottengono l'accesso solo a LinkedIn e hanno già quei dati.

Considerato tutto ciò, i vantaggi dell'hashing della password sono marginali. Non so perché la comunità di InfoSec continui a parlare di hashing delle password, sarebbe molto più sensato concentrarsi sulla prevenzione delle violazioni del database in primo luogo. In generale, i costi dell'hashing sono relativamente bassi, ma c'è un'eccezione: gli hash fortemente iterati. Il costo tecnico di questo è alto e il vantaggio è basso, quindi questo consiglio è piuttosto male interpretato. Tuttavia, devo consigliare alle persone di seguirlo, perché è "best practice".

Sbagliato, sbagliato, sbagliato. Il motivo per cui hai una password è proteggere la capacità di * controllare * i tuoi dati. Un dump del database consente a un utente malintenzionato di accedere alle informazioni che hai ora. Le credenziali di accesso con testo in chiaro danno a un utente malintenzionato la possibilità di agire per tuo conto per modificare i dati a piacimento. Il semplice hashing di una password non è sufficiente, tuttavia il double hashing non è inaudito (e la capacità della NSA di intercettare il traffico crittografato è * altamente * esagerata). E puoi dire alle persone di non riutilizzare le password quanto vuoi; lo faranno ancora, ed è ancora colpa di IT se è stato compromesso.
@KeithS - disponi di dati per sostenere la tua affermazione secondo cui la maggior parte delle violazioni sono violazioni di sola lettura? Inoltre, sembra che tu non capisca la differenza tra lo sniffing del traffico crittografato e lo sniffing locale da un host compromesso. Non che mi sorprenda, quando il tuo commento inizia con tre parole condiscendenti che appartengono al cortile.
Affermi tu stesso che se l'aggressore ottiene una copia del database, avrà i tuoi dati personali indipendentemente dal fatto che abbia o meno le tue credenziali. L'implicazione che * tu * sembri ignorare riguardo alla tua dichiarazione è che ne faranno una copia sul proprio sistema per analizzarla offline. Senza avere già le credenziali di qualcuno, o almeno una buona idea, la violazione dei dati iniziale è * sempre * di sola lettura; o si annusa il flusso di dati o si solleva l'archivio dati, dato un tempo sufficiente sono identici, quindi si analizzano i dati per le credenziali per entrare e causare danni * reali *.
E capisco la differenza tra lo sniffing del traffico crittografato e l'ascolto su un host compromesso. Ecco perché le notizie che volano intorno agli algoritmi di crittografia del cracking della NSA sono esagerate; non è quello che stanno facendo. Tuttavia, se l'aggressore ha una presenza fisica o elettronica sul tuo computer, perdi. Questo è il giorno 1. La maggior parte degli aggressori non ha questo tipo di accesso, quindi non proteggere le password memorizzate solo perché un ente governativo ha la possibilità di vederle trasmesse è come non chiudere la porta di casa perché esistono i fabbri.
@KeithS - Sebbene i dettagli siano difficili da ottenere, capisco che la maggior parte delle violazioni siano dovute a un database o un server app compromesso e l'autore dell'attacco ha accesso in lettura / scrittura. Le violazioni di sola lettura, come alcune SQLi, si verificano, ma sono casi rari. La maggior parte delle volte, gli hacker sono interessati solo alla lettura dei dati (ad esempio i numeri delle carte di credito), sebbene sia diverso per i sistemi bancari. Comunque, hash away, non sono infastidito, ma uso password site-specific ad alta entropia (con un gestore pw) quindi non mi interessa se non lo fai neanche tu.
Indipendentemente dall'accesso in lettura rispetto a quello in lettura / scrittura ... se qualcuno ha accesso solo al database delle password, non ha davvero molta motivazione per `` scrivere '': potrebbe bloccarti (a cosa serve come?) O semplicemente leggilo. Quindi possono effettuare il login e ottenere l'accesso al resto del tuo account.Se la tua password è hash, allora devono calcolare un'altra password che genera lo stesso valore hash prima di poter accedere e ottenere l'accesso ad altri bit di dati. È molto faticoso ottenere informazioni da un utente (anche se, se le password non sono salate, è molto faticoso ottenere molte informazioni sugli utenti, più utile)
@Allen: l'attaccante può sovrascrivere l'hash e quindi eseguire il login
gnasher729
2014-07-19 00:58:29 UTC
view on stackexchange narkive permalink

Cosa dire al capo: "Ecco il problema. Sono uno sviluppatore di software esperto e ti sto dicendo che archiviare password non crittografate è rischioso a un livello di assoluta stupidità imperdonabile. Anche archiviare password non salate è rischioso a livello di grave incompetenza. E te l'ho appena detto. Puoi ordinarmi di memorizzare le password non crittografate e lo farò, ma se dovessimo mai incontrare problemi dirò a chiunque voglia sentire che non è perché sono incompetente , ma perché mi hai ordinato di farlo contro un serio consiglio. A quel punto, ti prometto che sarai ritenuto personalmente responsabile e avrai avvocati dopo di te che vogliono ogni singolo centesimo che personalmente proprio.

È più probabile che ti venga rimproverato o licenziato piuttosto che farti capire e risolvere il problema. Questo sarebbe un approccio terribilmente disfunzionale.
Oh, e devo sottolineare che è anche completamente sbagliato. C'è una probabilità dello 0% circa che un middle manager possa mai essere ritenuto personalmente responsabile della perdita di dati in caso di violazione. Licenziato, forse. Non probabile, ma possibile. Personalmente finanziariamente responsabile? Non una possibilità.
Beh, il luogo in cui vivo, essere licenziato per questo mi procurerebbe un accordo piuttosto accogliente.
Questo è completamente irrilevante. La domanda riguarda come convincere un capo non tecnico a comprendere l'importanza dell'hashing delle password. Non come farti licenziare da un capo non tecnico. Questa è una non risposta.
@gnasher729 dove vivi? Non ho mai sentito parlare di una giurisdizione in cui gli sviluppatori non possano essere licenziati per competenza


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...