Come dovrei affrontare eticamente l'archiviazione della password dell'utente per il successivo recupero del testo in chiaro?


1344

Mentre continuo a creare sempre più siti Web e applicazioni Web, mi viene spesso chiesto di archiviare le password degli utenti in modo tale che possano essere recuperate se / quando l'utente ha un problema (inviare tramite e-mail un collegamento con password dimenticata, passarle attraverso il telefono, ecc.) Quando posso lottare amaramente contro questa pratica e faccio molta programmazione "extra" per rendere possibili la reimpostazione della password e l'assistenza amministrativa senza memorizzare la password effettiva.

Quando non riesco a combatterlo (o non riesco a vincere) allora codifico sempre la password in qualche modo in modo che, almeno, non sia memorizzata come testo normale nel database, anche se sono consapevole che se il mio DB viene violato non ci vorrebbe molto perché il colpevole decifrasse le password, quindi questo mi mette a disagio.

In un mondo perfetto, le persone aggiornano le password frequentemente e non le duplicano su molti siti diversi, sfortunatamente conosco MOLTE persone che hanno la stessa password lavoro / casa / e-mail / banca e me l'hanno persino dato liberamente quando hanno bisogno di assistenza. Non voglio essere il responsabile della loro crisi finanziaria se le mie procedure di sicurezza del DB falliscono per qualche motivo.

Moralmente ed eticamente mi sento responsabile della protezione di ciò che può essere, per alcuni utenti, il loro sostentamento anche se lo stanno trattando con molto meno rispetto. Sono certo che ci sono molte strade da avvicinare e argomenti da fare per salare gli hash e le diverse opzioni di codifica, ma c'è una sola "best practice" quando devi memorizzarli? In quasi tutti i casi sto usando PHP e MySQL se questo fa la differenza nel modo in cui dovrei gestire le specifiche.

Informazioni aggiuntive per Bounty

Voglio chiarire che so che questo non è qualcosa che vuoi fare e che nella maggior parte dei casi il rifiuto di farlo è meglio. Tuttavia, non sto cercando una lezione sul merito di adottare questo approccio. Sto cercando i passi migliori da seguire se segui questo approccio.

In una nota che segue ho sottolineato che i siti Web orientati in gran parte verso gli anziani, i disabili mentali o i giovani possono diventare fonte di confusione per le persone quando viene loro chiesto di eseguire una routine di recupero della password sicura. Sebbene possiamo trovarlo semplice e banale in quei casi, alcuni utenti hanno bisogno dell'assistenza extra di avere una tecnologia di servizio che li aiuti nel sistema o di averlo inviato via email / visualizzato direttamente a loro.

In tali sistemi il tasso di attrito da questi dati demografici potrebbe ostacolare l'applicazione se agli utenti non fosse fornito questo livello di assistenza per l'accesso, quindi si prega di rispondere con una tale impostazione in mente.

Grazie a tutti

Questa è stata una domanda divertente con molti dibattiti e mi è piaciuto. Alla fine ho selezionato una risposta che mantiene sia la sicurezza della password (non dovrò mantenere il testo semplice né le password recuperabili), ma rende anche possibile per la base di utenti che ho specificato accedere a un sistema senza i principali inconvenienti da cui ho trovato normale recupero della password.

Come sempre c'erano circa 5 risposte che avrei voluto contrassegnare come corrette per diversi motivi, ma ho dovuto scegliere la migliore - tutto il resto ha ottenuto un +1. Grazie a tutti!

Inoltre, grazie a tutti i membri della comunità Stack che hanno votato per questa domanda e / o contrassegnata come preferita. Prendo il 100% dei voti come complimento e spero che questa discussione abbia aiutato qualcun altro con la stessa preoccupazione che avevo.


155
Penso che sappia che non va bene. Sta ancora cercando la migliore soluzione secondo i requisiti dichiarati.
Stefanw,

33
Alla fine, tutto ciò che farai è attuare con attenzione una vulnerabilità evitabile.
torre

20
@Michael Brooks - Voglio che tu sappia che sono assolutamente d'accordo con CWE-257 e che mi piacerebbe solo citare letteralmente ogni volta che mi viene chiesto di rendere le password recuperabili come testo normale. Tuttavia, in realtà, i clienti e gli utenti sono raramente interessati alle normative NIST e vogliono solo che lo faccia comunque. Il 90% delle volte posso convincerli altrimenti, ma in quel 10% delle volte in cui non riesco sto cercando di determinare il miglior modo di agire - in quei casi CWE-257 è cenere nella mia mano (purtroppo).
Shane,

81
@AviD: il "valore basso" del sistema non ha assolutamente alcuna attinenza con questo problema perché le persone riutilizzano le loro password . Perché le persone non possono capire questo semplice fatto? Se decifri le password su un sistema di "basso valore", probabilmente avrai diverse password valide per altri sistemi di "alto valore".
Aaronaught,

20
Un altro punto è stato chiarito, che ho appena citato nel flusso di commenti alla mia risposta: come fai a sapere che la persona che richiede questi requisiti è degna di fiducia? E se la scusa dell '"usabilità" fosse solo una facciata che nasconde un vero intento di rubare le password ad un certo punto in futuro? La tua ingenuità potrebbe costare solo milioni di clienti e azionisti. Quante volte gli esperti di sicurezza devono ripeterlo prima che finisca per affondare: le minacce alla sicurezza più comuni e più serie sono sempre INTERNE.
Aaronaught,

Risposte:


1037

Che ne dite di adottare un altro approccio o angolo a questo problema? Chiedi perché la password deve essere in testo normale: se è così che l'utente può recuperare la password, quindi a rigor di termini non è necessario recuperare la password impostata (non si ricordano comunque di cosa si tratta), tu devono essere in grado di fornire loro una password che possono usare .

Pensaci: se l'utente deve recuperare la password, è perché l'hanno dimenticata. Nel qual caso una nuova password è valida quanto la vecchia. Ma uno degli svantaggi dei comuni meccanismi di reimpostazione della password utilizzati oggi è che le password generate prodotte in un'operazione di reimpostazione sono generalmente un gruppo di caratteri casuali, quindi sono difficili per l'utente semplicemente digitare correttamente se non copiano-n- incolla. Questo può essere un problema per gli utenti di computer meno esperti.

Un modo per aggirare questo problema è fornire password generate automaticamente che sono più o meno testi in linguaggio naturale. Mentre le stringhe di linguaggio naturale potrebbero non avere l'entropia di una stringa di caratteri casuali della stessa lunghezza, non c'è nulla che dica che la password generata automaticamente deve contenere solo 8 (o 10 o 12) caratteri. Ottieni una passphrase generata automaticamente ad alta entropia mettendo insieme più parole casuali (lascia uno spazio tra loro, quindi sono ancora riconoscibili e tipizzabili da chiunque sia in grado di leggere). Sei parole casuali di diversa lunghezza sono probabilmente più facili da digitare correttamente e con sicurezza rispetto a 10 caratteri casuali e possono anche avere un'entropia più elevata. Ad esempio, l'entropia di una password di 10 caratteri disegnata casualmente da lettere maiuscole, minuscole, cifre e 10 simboli di punteggiatura (per un totale di 72 simboli validi) avrebbero un'entropia di 61,7 bit. Usando un dizionario di 7776 parole (come usa Diceware) che potrebbe essere selezionato in modo casuale per una passphrase di sei parole, la passphrase avrebbe un'entropia di 77,4 bit. Vedi ilDomande frequenti sul Diceware per maggiori informazioni.

  • una passphrase con circa 77 bit di entropia: "ammettere flauto acuto da tavolo svasato prosa"

  • una password con circa 74 bit di entropia: "K: & $ R ^ tt ~ qkD"

So che preferirei digitare la frase, e con copy-n-paste, la frase non è meno facile da usare della password, quindi nessuna perdita lì. Naturalmente se il tuo sito Web (o qualunque sia la risorsa protetta) non necessita di 77 bit di entropia per una passphrase generata automaticamente, genera meno parole (che sono sicuro che i tuoi utenti apprezzerebbero).

Comprendo gli argomenti secondo cui esistono risorse protette da password che in realtà non hanno un alto livello di valore, quindi la violazione di una password potrebbe non essere la fine del mondo. Ad esempio, probabilmente non mi importerebbe se l'80% delle password che utilizzo su vari siti Web fosse stato violato: tutto ciò che potrebbe accadere è che qualcuno invii spam o invii messaggi a mio nome per un po '. Non sarebbe grandioso, ma non è come se si fossero introdotti nel mio conto bancario. Tuttavia, dato che molte persone usano la stessa password per i loro siti di forum Web come fanno per i loro conti bancari (e probabilmente database di sicurezza nazionali), penso che sarebbe meglio gestire anche quelle password di "basso valore" come non -recuperabile.


93
+1 per le passphrase, che al momento sembrano offrire il miglior equilibrio tra robustezza della password e richiamo dell'utente.
Aaronaught,

197
Inoltre è possibile creare una frase completa, ad es. <Aggettivo> <noun> è <verb> <avverbio>. Il gatto verde sta saltando selvaggiamente. avere elenchi per le categorie. con 1024 scelte per ognuna hai 40 bit di entropia.
Dominik Weber,

28
+1 per considerare il riutilizzo della password come un problema critico per evitarlo
lurscher,

57
"Pensaci - se l'utente ha bisogno di recuperare la password, è perché l'hanno dimenticata" - non necessariamente vero! Spesso voglio ottenere la mia password perché sono sul portatile e CONOSCO che la mia macchina a casa ha la mia password memorizzata, o è scritta in un posto sicuro, e non voglio romperla venendo emessa con una nuova .
Joachim,

5
La domanda con il punteggio più alto nel nuovo sito IT Security SE riguarda la validità di questo calcolo dell'entropia. (Beh, tecnicamente, si tratta del xkcd che @Pieter legato.)
Pops

592

Immagina che qualcuno abbia commissionato la costruzione di un grande edificio - un bar, diciamo - e che abbia luogo la seguente conversazione:

Architetto: per un edificio di queste dimensioni e capacità, avrai bisogno di uscite di sicurezza qui, qui e qui.
Cliente: No, è troppo complicato e costoso da mantenere, non voglio porte laterali o porte posteriori.
Architetto: signore, le uscite antincendio non sono opzionali, sono richieste secondo il codice antincendio della città.
Cliente: Non ti pago per discutere. Fai solo quello che ti ho chiesto.

L'architetto chiede quindi come costruire eticamente questo edificio senza uscite antincendio?

Nel settore dell'edilizia e dell'ingegneria, è molto probabile che la conversazione finisca in questo modo:

Architetto: questo edificio non può essere costruito senza uscite antincendio. Puoi andare da qualsiasi altro professionista autorizzato e ti dirà la stessa cosa. Me ne sto andando adesso; richiamami quando sei pronto a collaborare.

La programmazione informatica potrebbe non essere una professione autorizzata , ma le persone spesso sembrano chiedersi perché la nostra professione non abbia lo stesso rispetto di un ingegnere civile o meccanico - beh, non cercate oltre. Quelle professioni, quando vengono consegnate spazzatura (o requisiti assolutamente pericolosi), semplicemente rifiuteranno. Sanno che non è una scusa per dire "beh, ho fatto del mio meglio, ma ha insistito e devo fare quello che dice". Potrebbero perdere la licenza per quella scusa.

Non so se tu o i tuoi clienti fate parte di qualsiasi società quotata in borsa, ma la memorizzazione di password in qualsiasi forma recuperabile causerebbe il fallimento di diversi tipi di audit di sicurezza. Il problema non è quanto sarebbe difficile per alcuni "hacker" che hanno avuto accesso al tuo database per recuperare le password. La stragrande maggioranza delle minacce alla sicurezza sono interne. Ciò di cui hai bisogno per proteggere è un dipendente scontento che se ne va con tutte le password e le vende al miglior offerente. L'uso della crittografia asimmetrica e l'archiviazione della chiave privata in un database separato non fa assolutamente nulla per prevenire questo scenario; ci sarà sempre qualcuno con accesso al database privato, e questo è un grave rischio per la sicurezza.

Non esiste un modo etico o responsabile per archiviare le password in una forma recuperabile. Periodo.


124
@Aaronaught - Penso che sia un punto giusto e valido, ma lascia che ti stravolga. Stai lavorando a un progetto per un'azienda come dipendente e il tuo capo dice "questo è un requisito del nostro sistema" (per qualsiasi motivo). Abbandoni il lavoro pieno di giusta indignazione? So che quando sono in pieno controllo ho l'obbligo di essere responsabile, ma se un'azienda sceglie di rischiare il fallimento di audit o responsabilità, è mio dovere sacrificare il mio lavoro per dimostrare un punto o cerco il MEGLIO e il modo più sicuro per fare quello che dicono? Sto solo giocando l'avvocato del diavolo ..
Shane,

44
Non sono un avvocato, ma considera questo. Se il tuo supervisore ti ordina di fare qualcosa contro gli interessi dell'azienda, ad esempio esponendoli a una responsabilità facilmente evitabile, è tuo compito obbedire o rifiutare educatamente? Sì, sono il tuo capo, ma hanno un capo tutto loro, anche se sono gli investitori. Se non vai oltre le loro teste, la cui testa rotolerà quando la tua falla di sicurezza viene sfruttata? Solo qualcosa da considerare.
Steven Sudit,

68
Gli sviluppatori cercano sempre di dire come i nostri lavori siano molto più difficili di altri perché riceviamo requisiti di immondizia che cambiano continuamente. Bene, questo è un perfetto esempio del perché; la nostra professione ha un disperato bisogno di una spina dorsale. La nostra professione deve disperatamente essere in grado di dire "no, questo non è un requisito accettabile, questo non è qualcosa che posso sviluppare in buona fede, potresti essere il mio cliente / datore di lavoro ma ho responsabilità professionali nei confronti dei tuoi clienti e del pubblico, e se vuoi che sia fatto, dovrai cercare altrove. "
Aaronaught,

36
@sfussenegger: non è necessario conoscere lo sfondo. È inaccettabile Stai supponendo che il cliente sia affidabile al 100% - e se chiedesse specificamente questo requisito in modo da poter recuperare le password in un secondo momento? La sicurezza è uno dei pochi elementi in fase di sviluppo, che sono scolpite nella pietra. Ci sono alcune cose che semplicemente non fai e la memorizzazione di password recuperabili è dieci.
Aaronaught,

37
OK, facciamo una valutazione del rischio, proprio qui e ora. "Se memorizzi le password in una forma recuperabile, stai creando un rischio non banale di rubare le password. È anche probabile che almeno alcuni utenti utilizzino le stesse password per i loro account di posta elettronica e bancari. Se le password vengono rubate e i conti bancari sono prosciugati, probabilmente farà notizia, nessuno potrà mai più fare affari con te e verrai probabilmente citato in giudizio ". Possiamo tagliare la merda ora? Il fatto che tu abbia portato la parola "nazisti" in questo dimostra chiaramente che non hai senso della ragione.
Aaronaught,

206

È possibile crittografare la password + un salt con una chiave pubblica. Per gli accessi basta verificare se il valore memorizzato è uguale al valore calcolato dall'input dell'utente + salt. Se arriva un momento, quando è necessario ripristinare la password in testo normale, è possibile decrittografare manualmente o semi-automaticamente con la chiave privata. La chiave privata può essere memorizzata altrove e può inoltre essere crittografata simmetricamente (che quindi avrà bisogno di un'interazione umana per decrittografare la password).

Penso che questo sia in realtà un po 'simile al modo in cui funziona l' agente di recupero di Windows .

  • Le password sono memorizzate crittografate
  • Le persone possono accedere senza decodificare in testo semplice
  • Le password possono essere ripristinate in testo semplice, ma solo con una chiave privata, che può essere memorizzata al di fuori del sistema (in una banca sicura, se si desidera).

34
-1 le password non devono mai essere "crittografate" È una violazione di CWE-257 cwe.mitre.org/data/definitions/257.html
torre

100
1. La domanda affermava che la password doveva essere ripristinabile in testo normale, quindi questo è un requisito. 2. Qui sto usando la crittografia asimmetrica e non la crittografia simmetrica. La chiave per decrittografare non è necessaria per le operazioni quotidiane e può essere conservata in una banca sicura. L'argomentazione nel collegamento è valida, ma non si applica a questa situazione.
Stefanw,

57
È vero, ma potresti essere d'accordo sul fatto che, visti i requisiti, questo è il modo più responsabile di farlo? Puoi colpirmi tutto il giorno con il tuo CWE-257, non cambierà l'interessante problema di archiviare e lavorare in modo sicuro con le credenziali e, se necessario, di ripristinarle nella loro forma originale.
Stefanw,

10
Anche qui Windows Recovery Agent è un cattivo esempio, poiché si occupa della crittografia effettiva, non della gestione delle password. Una chiave di crittografia non è la stessa di una password; le regole e le pratiche che circondano ciascuna sono completamente diverse. La crittografia e l'autenticazione non sono uguali. La crittografia è per la privacy : una chiave viene utilizzata per proteggere i dati . L'autenticazione è per l' identità , dove la chiave sono i dati (è un fattore nel processo di autenticazione). Quindi ripeto, la crittografia e l'autenticazione non sono la stessa cosa. Non è possibile applicare validamente i principi dell'uno all'altro.
Aaronaught

16
+1 Dov'è il punto di insistere ossessivamente su CWE-257? È una debolezza (CWE), non una vulnerabilità (CVE). Il confronto tra password recuperabili e buffer overflow sta confrontando mele e arance. Assicurati semplicemente che il cliente capisca il problema (lascia che firmi qualcosa che lo dice - altrimenti potrebbe non ricordare nulla se in questione) e andare avanti. Inoltre, le misure di sicurezza richieste dipendono dal valore del sistema e dal potenziale rischio di un attacco. Se un utente malintenzionato di successo riesce a cancellare solo alcuni abbonamenti alla newsletter, non c'è motivo di discutere su eventuali problemi.
sfussenegger,

133

Non mollare. L'arma che puoi usare per convincere i tuoi clienti è la non ripudio. Se puoi ricostruire le password degli utenti tramite qualsiasi meccanismo, hai fornito ai loro clienti un meccanismo legale di non ripudio e possono ripudiare qualsiasi transazione che dipende da quella password, perché non è possibile che il fornitore possa dimostrare di non aver ricostruito la password e mettere la transazione attraverso se stessi. Se le password sono correttamente memorizzate come digest piuttosto che come testo cifrato, questo è impossibile, ergo o il cliente finale ha eseguito la transazione da solo o ha violato il suo dovere di diligenza con la password. In entrambi i casi questo lascia la responsabilità esattamente con lui. Ho lavorato su casi in cui ciò ammonterebbe a centinaia di milioni di dollari. Non qualcosa che vuoi sbagliare.


2
I registri del server web non contano in un tribunale? O in questo caso verrebbero anche considerati falsi?
Vinko Vrsalovic

10
@Vinko Vrsalovic, i registri dei server Web DOVREBBERO contare in tribunale, per fare ciò è necessario dimostrare non ripudio, prova di autenticità, catena di prove, ecc. Che i registri del server web non sono chiaramente.
AviD

7
Esattamente. Il fornitore deve dimostrare che solo il cliente avrebbe potuto eseguire quella transazione. Un registro del server Web non lo fa.
Marchese di Lorne,

Non tutte le password sono effettivamente necessarie per le "transazioni", per così dire. Supponiamo che il sito Web sia destinato allo sviluppo di un elenco di segnalibri di pagine Web. In questo caso, il limite di responsabilità (che di solito è indicato nei T&C al momento della registrazione al sito Web) è zero, perché non vi è alcuna transazione finanziaria. Se il sito Web non ha azioni che interessano al massimo gli altri, i dati vengono persi per l'utente compromesso. La società è protetta dai Termini e Condizioni.
Sablefoste,

1
@Sablefoste Su quel sito web. Se l'utente utilizza la stessa password altrove, stai creando il rischio di perdere le sue credenziali private. Se non ti impegni mai nella pratica, non puoi causare il problema.
Marchese di Lorne,

94

Non è possibile archiviare eticamente le password per il successivo recupero del testo in chiaro. E 'così semplice. Persino Jon Skeet non può eticamente archiviare le password per il successivo recupero del testo in chiaro. Se i tuoi utenti possono recuperare le password in testo normale in un modo o nell'altro, anche potenzialmente un hacker può trovare una vulnerabilità di sicurezza nel tuo codice. E questa non è solo la password di un utente compromessa, ma tutte.

Se i tuoi clienti hanno un problema, dì loro che archiviare le password in modo recuperabile è contro la legge. Qui nel Regno Unito in ogni caso, il Data Protection Act 1998 (in particolare, Allegato 1, Parte II, Paragrafo 9) impone ai responsabili del trattamento dei dati di utilizzare le misure tecniche appropriate per proteggere i dati personali, tenendo conto, tra l'altro, del danno che potrebbe essere causato se i dati fossero compromessi, il che potrebbe essere considerevole per gli utenti che condividono le password tra i siti. Se hanno ancora problemi a capire il fatto che si tratta di un problema, indicali ad alcuni esempi del mondo reale, come questo .

Il modo più semplice per consentire agli utenti di recuperare un accesso è inviare loro via e-mail un collegamento singolo che li accede automaticamente e li porta direttamente a una pagina in cui possono scegliere una nuova password. Crea un prototipo e mostralo in azione.

Ecco un paio di post sul blog che ho scritto sull'argomento:

Aggiornamento: ora stiamo iniziando a vedere azioni legali e azioni penali contro le aziende che non riescono a proteggere correttamente le password dei loro utenti. Esempio: LinkedIn schiaffeggiato con una causa legale di 5 milioni di dollari ; Sony ha multato £ 250.000 per l'hacking di dati PlayStation . Se ricordo bene, LinkedIn stava effettivamente crittografando le password dei suoi utenti, ma la crittografia che stava usando era troppo debole per essere efficace.


8
@jimmycakes - Questa è una buona cosa da fare su un sistema a bassa sicurezza, ma se stai memorizzando dati di alto valore, devi presumere che l'e-mail delle persone sia già compromessa e che l'invio di un link di accesso diretto comprometta il tuo sistema. +1 per aver risposto alla mia domanda con un'alternativa fattibile, ma sottolineando un difetto nella logica nel suo insieme. Non voglio che Payppal invii MAI un link di accesso diretto. Può sembrare paranoico ma presumo sempre che il mio account e-mail sia corrotto, mi rende onesto. ;)
Shane

Assolutamente: mi aspetto che la mia banca mi dia almeno una telefonata e verifichi la mia identità prima di farmi ripristinare ( non recuperare) la mia password. Quello che ho delineato qui è lo standard minimo assoluto di sicurezza delle password che mi aspetterei da qualsiasi sito Web, ovunque.
Jammycakes,

1
Ignorando la banca o paypal che non avrebbero comunque la limitazione impostata; Se ritieni che la loro e-mail sia compromessa, come è possibile un metodo online? Se invii un'email con una password generata, come è più sicura?
Peter Coulton,

Non sto parlando di ottenere la password di un singolo individuo, sto parlando di ottenere più password da un database. Se un sistema memorizza le password in modo recuperabile in testo semplice, un hacker può potenzialmente scrivere uno script per estrarre tutte le password dal database.
Jammycakes,

Mi chiedo di inviare link / password via e-mail, passare attraverso la rete in forma semplice attraverso nodi di rete sconosciuti ...
Jakub,

55

Dopo aver letto questa parte:

In una nota che segue ho sottolineato che i siti Web orientati in gran parte verso gli anziani, i disabili mentali o i giovani possono diventare fonte di confusione per le persone quando viene loro chiesto di eseguire una routine di recupero della password sicura. Sebbene possiamo trovarlo semplice e banale in quei casi, alcuni utenti hanno bisogno dell'assistenza extra di avere una tecnologia di servizio che li aiuti nel sistema o di averlo inviato via email / visualizzato direttamente a loro.

In tali sistemi il tasso di attrito da questi dati demografici potrebbe ostacolare l'applicazione se agli utenti non fosse fornito questo livello di assistenza per l'accesso, quindi si prega di rispondere con una tale impostazione in mente.

Mi chiedo se qualcuno di questi requisiti imponga un sistema di password recuperabile. Ad esempio: zia Mabel chiama e dice "Il tuo programma Internet non funziona, non conosco la mia password". "OK" dice il drone del servizio clienti "fammi controllare alcuni dettagli e poi ti darò una nuova password . Al tuo prossimo accesso ti chiederà se vuoi conservare quella password o cambiarla in qualcosa che ricordi più facilmente."

Quindi il sistema è impostato per sapere quando è avvenuta la reimpostazione della password e visualizzare un messaggio "vuoi conservare la nuova password o sceglierne una nuova".

In che modo è peggio per i meno esperti di PC che ricevere la loro vecchia password? E mentre il servizio clienti può mettersi al riparo, il database stesso è molto più sicuro in caso di violazione.

Commenta ciò che è male sul mio suggerimento e suggerirò una soluzione che fa effettivamente ciò che inizialmente volevi.


4
@john - Penso che sia una soluzione perfettamente praticabile. Preparati a essere infiammato dalle minacce interne! Sai, se dovessi farlo con un ripristino della password intermedio (la tecnologia imposta manualmente la password come misura temporanea e dice a Mabel di digitare 1234 come password), probabilmente funzionerebbe bene su un sistema che non contiene dati importanti. Se si trattasse di un ambiente ad alta sicurezza, tuttavia avremmo un problema in cui il servizio clienti può impostare la password del CEO su 1234 e accedere direttamente. Non esiste una soluzione perfetta, ma questa funziona in molti casi. (+1)
Shane,

5
Ho appena notato questa risposta. @Shane, non capisco il motivo per cui hai previsto fiammeggiante sulle "minacce interne". La possibilità di modificare una password non è un notevole punto debole; il problema è la capacità di scoprire una password che potrebbe essere utilizzata per altri servizi: la sua e-mail, la sua banca, i suoi siti di shopping online in cui sono archiviate le informazioni CC. Quella debolezza non si manifesta qui; se Bob reimposta la password di Mabel e glielo dice al telefono, ciò non gli dà accesso a nessuno degli altri suoi account. Vorrei, tuttavia, forzare piuttosto che "suggerire" una reimpostazione della password all'accesso.
Aaronaught,

@Aaronaught - Capisco il tuo punto, ma quello che sto pensando sono le volte in cui anche le persone del servizio clienti sono bloccate fuori da determinate aree di un sistema (come libro paga, contabilità, ecc.) E permettendo loro di impostare direttamente una password è un problema di sicurezza in sé e per sé. Vedo il tuo punto però che il tipo di sistema sul quale ho posto questa domanda differisce ampiamente da un sistema contabile interno. Probabilmente potremmo avere una discussione completamente diversa sui sistemi interni proprietari e sulla sicurezza delle password al loro interno.
Shane

1
@Shane: Quindi la domanda ha ancora meno senso. Supponevo che tu volessi che qualcuno leggesse loro una password per telefono. Se si desidera inviare agli utenti tramite e-mail le loro password tramite un sistema self-service automatico, è possibile che si debba rinunciare completamente alla password perché viene "protetta" con qualcosa di molto più debole. Forse devi essere molto più specifico su quale tipo di scenari di usabilità stai cercando di supportare. Forse quell'analisi ti mostrerà successivamente che le password recuperabili non sono nemmeno necessarie.
Aaronaught

4
Il codice fornito dalla persona di supporto non deve letteralmente essere la nuova password. Può essere solo un codice unico che sblocca la funzione di reimpostazione della password.
kgilpin,

42

Michael Brooks è stato piuttosto vocale su CWE-257 - il fatto che qualunque metodo tu usi, tu (l'amministratore) puoi ancora recuperare la password. Che ne dici di queste opzioni:

  1. Crittografa la password con la chiave pubblica di qualcun altro - un'autorità esterna. In questo modo non è possibile ricostruirlo personalmente e l'utente dovrà rivolgersi a tale autorità esterna e chiedere il recupero della password.
  2. Crittografa la password utilizzando una chiave generata da una seconda passphrase. Esegui questa crittografia lato client e non trasmetterla mai in chiaro al server. Quindi, per ripristinare, eseguire di nuovo la decrittografia lato client rigenerando la chiave dal loro input. Certo, questo approccio utilizza fondamentalmente una seconda password, ma puoi sempre dire loro di scriverla o utilizzare il vecchio approccio alla domanda di sicurezza.

Penso che 1. sia la scelta migliore, perché ti consente di designare qualcuno all'interno dell'azienda del cliente per detenere la chiave privata. Assicurati che generino loro stessi la chiave e la memorizzino con le istruzioni in una cassetta di sicurezza ecc. Potresti persino aggiungere sicurezza scegliendo di crittografare e fornire solo determinati caratteri dalla password alla terza parte interna in modo che debbano decifrare la password per indovinare esso. Fornendo questi personaggi all'utente, probabilmente ricorderanno di cosa si trattava!


8
E, naturalmente, potresti usare qualsiasi tecnica di divisione segreta per richiedere più qualcuno della tua azienda per la decrittazione. Ma nulla di tutto ciò soddisfa i requisiti originali di poter inviare a un utente le proprie password o fare in modo che alcuni sostenitori telefonici di primo livello che
scappano di casa li guidino

27

Si è discusso molto dei problemi di sicurezza dell'utente in risposta a questa domanda, ma vorrei aggiungere una menzione dei vantaggi. Finora, non ho visto un vantaggio legittimo menzionato per avere una password recuperabile memorizzata sul sistema. Considera questo:

  • L'utente trae vantaggio dall'invio della password tramite e-mail? No. Essi ricevono più benefici da un one-time-use link di reimpostazione della password, che si spera permetterà loro di scegliere una password che si ricordi.
  • L'utente beneficia della visualizzazione della password sullo schermo? No, per lo stesso motivo di cui sopra; dovrebbero scegliere una nuova password.
  • L'utente trae vantaggio dall'avere un tecnico dell'assistenza che comunica la password all'utente? No; di nuovo, se la persona dell'assistenza ritiene che la richiesta dell'utente per la propria password sia autenticata correttamente, è più vantaggioso per l'utente ricevere una nuova password e l'opportunità di cambiarla. Inoltre, l'assistenza telefonica è più costosa dei ripristini automatici delle password, quindi anche l'azienda non ne beneficia.

Sembra che le uniche che possano beneficiare di password recuperabili siano quelle con intenzioni dannose o i sostenitori di API scadenti che richiedono lo scambio di password di terze parti (per favore non usare mai tali API!). Forse puoi vincere la tua argomentazione affermando sinceramente ai tuoi clienti che la società non ottiene alcun vantaggio e solo responsabilità archiviando le password recuperabili .

Leggendo tra le righe di questi tipi di richieste, vedrai che i tuoi clienti probabilmente non capiscono o addirittura si preoccupano del modo in cui vengono gestite le password. Quello che vogliono veramente è un sistema di autenticazione che non sia così difficile per i loro utenti. Quindi, oltre a dire loro come in realtà non vogliono password recuperabili, dovresti offrire loro i modi per rendere il processo di autenticazione meno doloroso, soprattutto se non hai bisogno dei pesanti livelli di sicurezza di una banca:

  • Consentire all'utente di utilizzare il proprio indirizzo e-mail per il proprio nome utente. Ho visto innumerevoli casi in cui l'utente dimentica il proprio nome utente, ma pochi dimenticano il loro indirizzo e-mail.
  • Offri OpenID e consenti a terzi di pagare i costi dell'oblio dell'utente.
  • Semplifica le restrizioni sulla password. Sono sicuro che siamo stati tutti incredibilmente infastiditi quando alcuni siti web non consentono la tua password preferita a causa di requisiti inutili come "non puoi usare caratteri speciali" o "la tua password è troppo lunga" o "la tua password deve iniziare con una lettera ". Inoltre, se la facilità d'uso è una preoccupazione maggiore rispetto alla sicurezza delle password, è possibile allentare anche i requisiti non stupidi consentendo password più brevi o non richiedendo una combinazione di classi di caratteri. Con restrizioni allentate, gli utenti avranno maggiori probabilità di utilizzare una password che non dimenticheranno.
  • Non scadere le password.
  • Consenti all'utente di riutilizzare una vecchia password.
  • Consenti all'utente di scegliere la propria domanda di reimpostazione della password.

Ma se tu, per qualche motivo (e per favore, dicci il motivo) , davvero, davvero , devi davvero essere in grado di avere una password recuperabile, potresti proteggere l'utente dal potenzialmente compromettere gli altri suoi account online dando loro una non password- sistema di autenticazione basato. Poiché le persone hanno già familiarità con i sistemi nome utente / password e sono una soluzione ben esercitata, questa sarebbe l'ultima risorsa, ma ci sono sicuramente molte alternative creative alle password:

  • Consentire all'utente di scegliere un pin numerico, preferibilmente non a 4 cifre, e preferibilmente solo se i tentativi di forza bruta sono protetti contro.
  • Chiedi all'utente di scegliere una domanda con una breve risposta alla quale solo loro conoscono la risposta, che non cambierà mai, che ricorderanno sempre e che non gli dispiace che gli altri lo scoprano.
  • Chiedi all'utente di inserire un nome utente e quindi disegna una forma facile da ricordare con permutazioni sufficienti per proteggerti dalle ipotesi (vedi questa elegante foto di come il G1 fa questo per sbloccare il telefono).
  • Per un sito Web per bambini, potresti generare automaticamente una creatura fuzzy in base al nome dell'utente (una specie di identicon) e chiedere all'utente di dare alla creatura un nome segreto. A loro può quindi essere richiesto di inserire il nome segreto della creatura per accedere.

Ho risposto ai commenti qui, giù nella mia risposta, dal momento che era piuttosto lungo - penso che sia importante rivedere l'analisi e la discussione delle questioni sollevate. stackoverflow.com/questions/2283937/...
Avid

L'utente beneficia della visualizzazione della password sullo schermo? Secondo me - sicuramente sì! Ogni volta che ricevo una password oscura da Internet, ringrazio Apple che posso renderlo visibile in modo da non doverlo digitare nuovamente 100 volte per il dolore. Posso immaginare come si sentirebbe la persona disabile.
Dmitri Zaitsev,

1
Perché visualizzare una password oscura è meglio che lasciarti scegliere una nuova password che ricordi?
Jacob,

@Jacob: più entropia?
Alexander Shcheblikin l'

25

In base al commento che ho fatto sulla domanda:
un punto importante è stato chiarito da quasi tutti ... La mia reazione iniziale è stata molto simile a @Michael Brooks, fino a quando ho capito, come @stefanw, che il problema qui è rotto , ma questi sono quelli che sono.
Ma poi mi è venuto in mente che potrebbe non essere nemmeno il caso! Il punto mancante qui è il valore non dichiarato delle risorse dell'applicazione. In parole povere, per un sistema di basso valore, un meccanismo di autenticazione completamente sicuro, con tutto il processo coinvolto, sarebbe eccessivo e la scelta di sicurezza sbagliata .
Ovviamente, per una banca, le "migliori pratiche" sono un must e non c'è modo di violare eticamente CWE-257. Ma è facile pensare a sistemi di basso valore in cui non ne vale la pena (ma è ancora necessaria una semplice password).

È importante ricordare che la vera competenza in materia di sicurezza consiste nel trovare opportuni compromessi, NON nel diffondere dogmaticamente le "Best Practices" che chiunque può leggere online.

Come tale, suggerisco un'altra soluzione: a
seconda del valore del sistema e SOLO SE il sistema ha un valore adeguatamente basso senza risorse "costose" (l'identità stessa, inclusa) E ci sono requisiti aziendali validi che rendono il processo corretto impossibile (o sufficientemente difficile / costoso), E il cliente è a conoscenza di tutti gli avvertimenti ...
Quindi potrebbe essere appropriato consentire semplicemente la crittografia reversibile, senza che siano presenti cerchi speciali.
Mi sto fermando poco prima di dire di non disturbare affatto con la crittografia, perché è molto semplice / economico da implementare (anche considerando la gestione di chiavi passabili) e fornisce QUALCHE protezione (oltre al costo di implementazione). Inoltre, vale la pena guardare a come fornire all'utente la password originale, sia via e-mail, visualizzazione sullo schermo, ecc.
Poiché il presupposto qui è che il valore della password rubata (anche in aggregato) è piuttosto basso, nessuno dei queste soluzioni possono essere valide.


Dato che è in corso una vivace discussione, in realtà TANTE discussioni vivaci, nei diversi post e thread di commenti separati, aggiungerò alcuni chiarimenti e risponderò ad alcuni degli ottimi punti che sono stati sollevati altrove qui.

Per iniziare, penso che sia chiaro a tutti qui che consentire il recupero della password originale dell'utente, è una cattiva pratica e generalmente non è una buona idea. Questo non è affatto in discussione ...
Inoltre, sottolineo che in molte, anzi MOLTO, situazioni - è davvero sbagliato, persino disgustoso, cattivo e brutto .

Tuttavia, il nocciolo della questione è attorno al principio , esiste una situazione in cui potrebbe non essere necessario vietarlo e, in tal caso, come farlo nel modo più corretto appropriato alla situazione .

Ora, come hanno menzionato @Thomas, @sfussenegger e pochi altri, l'unico modo corretto per rispondere a questa domanda è fare un'analisi approfondita del rischio di qualsiasi situazione (o ipotetica) data, per capire cosa è in gioco, quanto vale proteggere e quali altre mitigazioni sono in gioco per garantire tale protezione.
No, NON è una parola d'ordine, questo è uno degli strumenti di base e più importanti per un professionista della sicurezza reale. Le migliori pratiche sono buone fino a un certo punto (di solito come linee guida per gli inesperti e gli hack), dopo che ha preso il sopravvento un'analisi ponderata del rischio.

Sai, è divertente - mi sono sempre considerato uno dei fanatici della sicurezza, e in qualche modo sono dalla parte opposta di quei cosiddetti "Esperti di sicurezza" ... Beh, la verità è - perché sono un fanatico, e un vero esperto di sicurezza nella vita reale - Non credo nel gettare dogma "Best Practice" (o CWE) SENZA quell'importantissima analisi del rischio .
"Attenti al fanatico della sicurezza che è rapido ad applicare tutto nella propria cintura degli strumenti senza sapere quale sia il vero problema contro cui stanno difendendo. Più sicurezza non equivale necessariamente a una buona sicurezza."
L'analisi del rischio e i veri fanatici della sicurezza indicherebbero un compromesso più intelligente, basato sul valore / basato sul rischio, basato su rischio, perdita potenziale, possibili minacce, mitigazioni complementari, ecc. Qualsiasi "Esperto della sicurezza" che non può indicare un'analisi del rischio come la base per le loro raccomandazioni o il supporto di compromessi logici, ma preferirebbe invece spargere dogma e CWE senza nemmeno capire come eseguire un'analisi del rischio, non sono altro che Security Hacks e la loro competenza non vale la carta igienica su cui l'hanno stampata.

In effetti, è così che otteniamo il ridicolo che è la sicurezza aeroportuale.

Ma prima di parlare dei compromessi appropriati da effettuare in QUESTA SITUAZIONE, diamo un'occhiata ai rischi apparenti (apparente, perché non abbiamo tutte le informazioni di base su questa situazione, stiamo tutti ipotizzando - poiché la domanda è quale ipotetico potrebbe esserci una situazione ...)
Supponiamo che un sistema a BASSO VALORE, ma non così trivalente da renderlo pubblico - il proprietario del sistema vuole impedire la rappresentazione casuale, ma la sicurezza "alta" non è così semplice come la facilità d'uso. (Sì, è un compromesso legittimo ACCETTARE il rischio che qualsiasi esperto script-kiddie possa hackerare il sito ... Aspetta, APT non è in voga ora ...?)
Ad esempio, supponiamo che sto organizzando un sito semplice per una riunione di famiglia numerosa, consentendo a tutti di fare brainstorming su dove vogliamo andare in campeggio quest'anno. Sono meno preoccupato per un hacker anonimo, o anche per il cugino Fred che spinge in ripetuti suggerimenti per tornare al lago Wantanamanabikiliki, poiché sono zia Erma che non è in grado di accedere quando è necessario. Ora, la zia Erma, essendo un fisico nucleare, non è molto brava a ricordare le password, o persino a usare i computer ... Quindi voglio rimuovere ogni attrito possibile per lei. Ancora una volta, NON sono preoccupato per gli hack, non voglio solo sciocchi errori di accesso errato - voglio sapere chi sta arrivando e cosa vogliono.

Comunque.
Quindi quali sono i nostri principali rischi qui, se crittografiamo simmetricamente le password, invece di utilizzare un hash unidirezionale?

  • Impersonare gli utenti? No, ho già accettato quel rischio, non interessante.
  • Amministratore malvagio? Beh, forse ... Ma ancora una volta, non mi interessa se qualcuno può impersonare un altro utente, INTERNO o no ... e comunque un amministratore malintenzionato otterrà la tua password, qualunque cosa accada - se il tuo amministratore è andato male, il suo gioco comunque.
  • Un altro problema che è stato sollevato è che l'identità è effettivamente condivisa tra diversi sistemi. Ah! Questo è un rischio molto interessante, che richiede uno sguardo più attento.
    Vorrei iniziare affermando che non è l' identità reale condivisa, piuttosto la prova o le credenziali di autenticazione. Va bene, poiché una password condivisa mi consentirà di accedere a un altro sistema (ad esempio, il mio conto bancario o Gmail), questa è effettivamente la stessa identità, quindi è solo una semantica ... Tranne che non lo è . L'identità è gestita separatamente da ciascun sistema, in questo scenario (anche se potrebbero esserci sistemi ID di terze parti, come OAuth - ancora, è separato dall'identità in questo sistema - ne parleremo più avanti).
    Pertanto, il punto centrale del rischio qui è che l'utente inserirà volentieri la sua (stessa) password in diversi sistemi - e ora io (l'amministratore) o qualsiasi altro hacker del mio sito avremo accesso alle password di zia Erma per il sito missilistico nucleare.

Hmmm.

Ti sembra qualcosa qui?

Dovrebbe.

Cominciamo dal fatto che proteggere il sistema missilistico nucleare non è una mia responsabilità , sto solo costruendo un sito di uscite per la famiglia di frakkin (per la MIA famiglia). Quindi di chi è la responsabilità? Umm ... E il sistema missilistico nucleare? Duh.
In secondo luogo, se volessi rubare la password di qualcuno (qualcuno che è noto per utilizzare ripetutamente la stessa password tra siti sicuri e siti non così sicuri), perché dovrei preoccuparmi di hackerare il tuo sito? O alle prese con la tua crittografia simmetrica? Accidenti, posso semplicemente creare il mio semplice sito Web , fare iscrivere gli utenti per ricevere NOTIZIE MOLTO IMPORTANTI su tutto ciò che vogliono ... Puffo Presto, ho "rubato" le loro password.

Sì, l'educazione degli utenti torna sempre a morderci nella hienie, vero?
E non c'è niente che tu possa fare al riguardo ... Anche se FAREI inserire le loro password sul tuo sito e fare tutto il resto che la TSA può pensare, hai aggiunto protezione alla loro password NON UNO , se vogliono inserire le loro password in modo promiscuo in ogni sito in cui si imbattono. Non preoccuparti ANCHE di provare.

In altre parole , non possiedi le loro password , quindi smetti di provare ad agire come fai tu.

Quindi, miei cari esperti di sicurezza, come una vecchia signora era solita chiedere a Wendy, "Dov'è il rischio?"

Altri pochi punti, in risposta ad alcune questioni sollevate sopra:

  • Il CWE non è una legge, un regolamento o uno standard. È una raccolta di debolezze comuni , vale a dire l'inverso delle "Best Practices".
  • Il problema dell'identità condivisa è un problema reale, ma frainteso (o travisato) dai negligenti qui. Si tratta di condividere l'identità in sé e per sé (!), NON di decifrare le password su sistemi di basso valore. Se stai condividendo una password tra un sistema di basso valore e un valore elevato, il problema è già lì!
  • A proposito, il punto precedente indicherebbe effettivamente CONTRO l' utilizzo di OAuth e simili sia per questi sistemi di basso valore, sia per i sistemi bancari di alto valore.
  • So che era solo un esempio, ma (purtroppo) i sistemi dell'FBI non sono davvero i più sicuri in circolazione. Non proprio come i server del tuo gatto, ma non superano alcune delle banche più sicure.
  • La conoscenza divisa, o il doppio controllo, delle chiavi di crittografia NON avviene solo nell'esercito, infatti PCI-DSS ora lo richiede praticamente da tutti i commercianti, quindi non è più così lontano (se il valore lo giustifica).
  • A tutti coloro che si lamentano del fatto che domande come queste sono ciò che rende la professione degli sviluppatori così brutta: sono le risposte come quelle che rendono la professione della sicurezza ancora peggiore. Ancora una volta, l'analisi del rischio incentrata sul business è ciò che è richiesto, altrimenti ti rendi inutile. Oltre ad avere torto.
  • Immagino che questo sia il motivo per cui non è una buona idea assumere semplicemente uno sviluppatore regolare e lasciargli più responsabilità sulla sicurezza, senza formazione per pensare in modo diverso e cercare i giusti compromessi. Senza offesa, per quelli di voi qui, sono tutto per questo - ma è necessario un maggiore addestramento.

Accidenti. Che post lungo ...
Ma per rispondere alla tua domanda originale, @Shane:

  • Spiegare al cliente il modo corretto di fare le cose.
  • Se insiste ancora, spiegane ancora un po ', insisti, discuti. Fai un capriccio, se necessario.
  • Spiegagli il RISCHIO DI AFFARI per lui. I dettagli sono buoni, le cifre sono migliori, una demo live è di solito la migliore.
  • SE ANCORA insiste E presenta valide ragioni commerciali - è tempo che tu faccia una chiamata di giudizio:
    questo sito è basso o senza valore? È davvero un caso aziendale valido? È abbastanza buono per te? Non ci sono altri rischi che puoi prendere in considerazione e che supererebbero validi motivi commerciali? (E ovviamente, il client NON è un sito dannoso, ma questo è duh).
    Se è così, vai avanti. Non vale la pena, l'attrito e l'uso perduto (in questa ipotetica situazione) per mettere in atto il processo necessario. Qualsiasi altra decisione (di nuovo, in questa situazione) è un cattivo compromesso.

Quindi, linea di fondo e una risposta effettiva: crittografala con un semplice algoritmo simmetrico, proteggi la chiave di crittografia con ACL forti e preferibilmente DPAPI o simili, documentala e fai firmare il client (qualcuno abbastanza esperto da prendere quella decisione) esso.


5
Le password condivise tra il tuo sito di basso valore con "no" beni costosi e Facebook / GMail / la tua banca sono un bene costoso, anche su siti di basso valore.
Jammycakes,

3
Penso che il problema qui sia che i gruppi di utenti sopra menzionati tendano a usare la stessa password per tutte le applicazioni da diversi livelli di sicurezza (dal banking ai blog di ricette). Quindi la domanda è: se è responsabilità dello sviluppatore proteggere gli utenti anche da loro stessi. Direi sicuramente di si!
ercan,

7
Mi dispiace, ma l'identità stessa è una risorsa di alto valore, punto. Nessuna eccezione, nessuna scusa. Non importa quanto piccolo e insignificante pensi che sia il tuo sito. E una password condivisa è l'identità se consente all'hacker di accedere agli account Facebook, agli account Gmail, agli account bancari degli utenti, ecc. Non ha nulla a che fare con la semantica, ma ha tutto a che fare con le conseguenze. Basta chiedere a chiunque sia stato colpito da un attacco di un hacker come questo: theregister.co.uk/2009/08/24/4chan_pwns_christians
jammycakes

2
@Jacob, in quale mondo il tuo cliente sarebbe stato citato in giudizio perché gli account di Erma su altri sistemi sono stati compromessi? Anche data la negligenza grave da parte del tuo cliente (che NON è un dato, come ho elaborato), e PRENDE il fatto che NON c'è MODO per dimostrare che l'altro sistema è stato violato a causa del tuo, non c'è alcuna possibilità legale di richiedere qualsiasi forma di danno da un sistema all'altro. Sarebbe gettato fuori dal campo con pregiudizio e trovando l'attore nel disprezzo. Tuttavia, Erma potrebbe essere in colpa per aver violato numerosi Termini di servizio ...
AviD

5
@Jacob, è così sbagliato. Solo perché la password sembra essere la stessa (che violerebbe chiaramente il tuo ToS e la loro politica di sicurezza), la loro non è una posizione legale per corrompere i due. Questo è anche il fatto che PROVARE sarebbe dannatamente impossibile. A parte ciò, sottolineo anche che NON esiste UNA LEGGE che imponga a una società casuale di non avere pratiche di sicurezza lassiste, a meno che non siano pertinenti normative specifiche. E per di più, le password SONO criptate (!), Quindi il lassismo è tutt'altro che una conclusione dimenticata.
AviD

21

Che ne dici di una casa a metà strada?

Archivia le password con una crittografia avanzata e non abilitare i ripristini.

Invece di reimpostare le password, consentire l'invio di una password singola (che deve essere modificata non appena si verifica il primo accesso). Consentire quindi all'utente di cambiare la password desiderata (la precedente, se lo desidera).

Puoi "venderlo" come meccanismo sicuro per reimpostare le password.


Sai, l'ho usato in diverse situazioni (di solito questa è la mia via di mezzo), ma ho avuto persone che mi dicevano che l'utente finale non avrebbe avuto l'interazione e che il supporto deve essere in grado di 'dire loro password "a causa di circostanze nel modello aziendale". Concordo però che, quando possibile, è preferibile.
Shane,

Puoi sempre dire al tuo cliente il rischio che il suo DB cada in mani malvagie e che ottenga la pubblicità delle password rubate ... Ci sono molti esempi in giro.
Oded,

6
Chiedi loro di firmare il "disegno", con una clausola aggiunta che non possono farti causa se ciò di cui li hai avvertiti accade davvero ... Almeno allora ti copri.
Oded,

4
-1 le password non dovrebbero mai essere "crittografate" È una violazione di CWE-257 cwe.mitre.org/data/definitions/257.html
torre

34
@Michael Brooks: non è necessario ridimensionare e copiare e incollare lo stesso commento più e più volte; siamo tutti consapevoli che è una cattiva pratica. Shane ha dichiarato che gli manca la leva in materia, e quindi le prossime cose migliori vengono proposte.
Johannes Gorset,

13

L'unico modo per consentire a un utente di recuperare la propria password originale è crittografarlo con la chiave pubblica dell'utente. Solo quell'utente può quindi decodificare la propria password.

Quindi i passaggi sarebbero:

  1. L'utente si registra sul tuo sito (ovviamente su SSL) senza ancora impostare una password. Accedere automaticamente o fornire una password temporanea.
  2. Offri di memorizzare la loro chiave PGP pubblica per il futuro recupero della password.
  3. Caricano la loro chiave PGP pubblica.
  4. Chiedi loro di impostare una nuova password.
  5. Presentano la loro password.
  6. È possibile eseguire l'hashing della password utilizzando il miglior algoritmo di hashing della password disponibile (ad es. Bcrypt). Usalo per convalidare il prossimo accesso.
  7. Si crittografa la password con la chiave pubblica e la si memorizza separatamente.

Se l'utente chiede la propria password, l'utente risponde con la password crittografata (non con hash). Se l'utente non desidera essere in grado di recuperare la propria password in futuro (sarebbe solo in grado di reimpostarla su una generata dal servizio), i passaggi 3 e 7 possono essere saltati.


5
La maggior parte degli utenti non ha una chiave PGP (non ne ho ancora una; dopo 20 anni nel settore, non ne ho mai sentito il bisogno), e non è un processo senza attriti ottenerne una. Inoltre, una chiave privata è in realtà solo un proxy per una password effettiva. È una password per una password, in altre parole; sono le tartarughe fino in fondo.
Robert Harvey,

1
@RobertHarvey L'obiettivo è consentire a un utente di recuperare la propria password senza consentire ai dipendenti del sito o agli hacker di accedervi. Richiedendo che il processo di recupero avvenga sul computer dell'utente, lo imponi. Potrebbero esserci alternative al PGP che potrebbero ottenere lo stesso. Le tartarughe possono essere fino in fondo (forse alcuni elefanti lungo la strada), ma non vedo nessun altro modo. Per la popolazione generale (che probabilmente non sarà presa di mira individualmente) avere le tue password su un po 'di carta e non essere in grado di recuperarle dal servizio, sarebbe più sicuro di quanto siamo attualmente
Nicholas Shanks,

Mi piace perché costringe tutti ad avere una chiave pubblica PGP, che è stranamente una cosa molto etica da fare.
Lodewijk,

potresti semplicemente generarne uno e darlo all'utente.
My1

@RobertHarvey Forse hai ragione che questo "non è un processo privo di attriti", ma potrebbe essere un servizio extra per utenti esperti, che gli utenti normali possono ignorare. Per quanto riguarda l'argomento che un PK sia "una password per una password", ricorda che in teoria può essere così per molte password; potresti utilizzare password diverse per servizi diversi e crittografarle tutte utilizzando la stessa chiave. Quindi il PK sarà più prezioso di una sola password. Forse è in modo astratto paragonabile a un gestore di password (?). Non mi è subito chiaro quali conseguenze ciò potrebbe avere però ...
Kjartan,

12

Penso che la vera domanda da porsi sia: "Come posso essere migliore nel convincere le persone?"


4
@sneg - Beh, sono un ragazzo furiosamente convincente, ma a volte è un capo e talvolta un cliente, quindi non ho sempre la leva di cui ho bisogno per convincerli in un modo o nell'altro. Mi eserciterò allo specchio un po 'di più però ...;)
Shane,

Per essere convincente non hai davvero bisogno di alcun effetto leva oltre alla tua competenza e abilità comunicativa. Se conosci un modo migliore di fare qualcosa ma la gente non ascolta ... Pensaci.
z-boss,

7
@ z-boss - Apparentemente non hai lavorato con / per alcune delle teste difficili con cui ho avuto il piacere di lavorare. A volte non importa se la tua lingua è placcata in oro e potresti riprogrammare Google Chrome in un giorno (che probabilmente potrebbe effettivamente renderlo utile) non si muoveranno comunque.
Shane,

11

Ho lo stesso problema. E allo stesso modo penso sempre che qualcuno abbia hackerato il mio sistema non è una questione di "se" ma di "quando".

Quindi, quando devo fare un sito Web che deve archiviare informazioni riservate recuperabili, come una carta di credito o una password, quello che faccio è:

  • crittografare con: openssl_encrypt (string $ data, string $ method, string $ password)
  • dati arg :
    • le informazioni sensibili (ad es. la password dell'utente)
    • serializzare se necessario, ad esempio se l'informazione è una matrice di dati come più informazioni sensibili
  • password arg : usa un'informazione che solo l'utente conosce come:
    • la targa dell'utente
    • numero di Social Security
    • numero di telefono dell'utente
    • il nome della madre dell'utente
    • una stringa casuale inviata via e-mail e / o sms al momento della registrazione
  • metodo arg :
    • scegli un metodo di cifratura, come "aes-256-cbc"
  • Non memorizzare MAI le informazioni utilizzate nell'argomento "password" nel database (o in qualsiasi altra posizione nel sistema)

Se necessario per recuperare questi dati, basta usare la funzione "openssl_decrypt ()" e chiedere la risposta all'utente. Ad esempio: "Per ricevere la password rispondi alla domanda: qual è il tuo numero di cellulare?"

PS 1 : non utilizzare mai come password i dati memorizzati nel database. Se è necessario memorizzare il numero di cellulare dell'utente, non utilizzare mai queste informazioni per codificare i dati. Usa sempre un'informazione che solo l'utente conosce o che è difficile per qualcuno che non conosce.

PS 2 : per informazioni sulla carta di credito, ad esempio "acquisto con un clic", utilizzo la password di accesso. Questa password è sottoposta a hash nel database (sha1, md5, ecc.), Ma al momento del login memorizzo la password di testo normale in sessione o in un cookie sicuro non persistente (cioè in memoria). Questa semplice password non rimane mai nel database, anzi rimane sempre nella memoria, distrutta alla fine della sezione. Quando l'utente fa clic sul pulsante "acquisto con un clic", il sistema utilizza questa password. Se l'utente ha effettuato l'accesso con un servizio come Facebook, Twitter, ecc., Al momento dell'acquisto richiedo nuovamente la password (ok, non è un "clic" completo) oppure uso alcuni dati del servizio utilizzato dall'utente per accedere (come l'id di Facebook).


9

La protezione delle credenziali non è un'operazione binaria: sicura / non sicura. La sicurezza si basa sulla valutazione del rischio ed è misurata su un continuum. I fanatici della sicurezza odiano pensare in questo modo, ma la brutta verità è che nulla è perfettamente sicuro. Le password tratteggiate con requisiti rigorosi di password, campioni di DNA e scansioni della retina sono più sicure ma a costo di sviluppo ed esperienza dell'utente. Le password in testo normale sono molto meno sicure ma sono più economiche da implementare (ma dovrebbero essere evitate). Alla fine, si tratta di un'analisi costi / benefici di una violazione. L'implementazione della sicurezza si basa sul valore dei dati da proteggere e sul suo valore temporale.

Qual è il costo della password di qualcuno che esce in libertà? Qual è il costo della rappresentazione in un determinato sistema? Per i computer dell'FBI, il costo potrebbe essere enorme. Per il sito Web unico di cinque pagine di Bob, il costo potrebbe essere trascurabile. Un professionista offre opzioni ai propri clienti e, quando si tratta di sicurezza, espone i vantaggi e i rischi di qualsiasi implementazione. Questo è doppiamente così se il cliente richiede qualcosa che potrebbe metterli a rischio a causa del mancato rispetto degli standard del settore. Se un cliente richiede specificamente la crittografia bidirezionale, ti assicurerei di documentare le tue obiezioni, ma ciò non dovrebbe impedirti di implementare nel miglior modo che conosci. Alla fine della giornata, sono i soldi del cliente. Sì,

Se si memorizzano le password con la crittografia bidirezionale, la sicurezza dipende dalla gestione delle chiavi. Windows fornisce meccanismi per limitare l'accesso alle chiavi private dei certificati agli account amministrativi e con password. Se stai ospitando su altre piattaforme, dovresti vedere quali opzioni hai disponibili su quelle. Come altri hanno suggerito, è possibile utilizzare la crittografia asimmetrica.

Non esiste una legge (né il Data Protection Act nel Regno Unito) di cui sono consapevole che afferma in particolare che le password devono essere archiviate utilizzando hash unidirezionali. L'unico requisito in una di queste leggi è semplicemente che vengano prese misure ragionevoli per la sicurezza. Se l'accesso al database è limitato, anche le password in chiaro possono qualificarsi legalmente in base a tale limitazione.

Tuttavia, questo mette in luce un altro aspetto: la precedenza legale. Se la precedenza legale suggerisce che è necessario utilizzare gli hash unidirezionali in base al settore in cui viene costruito il sistema, questo è completamente diverso. Queste sono le munizioni che usi per convincere il tuo cliente. A parte questo, il miglior suggerimento per fornire una ragionevole valutazione del rischio, documentare le obiezioni e implementare il sistema nel modo più sicuro possibile per soddisfare le esigenze del cliente.


10
La tua risposta ignora completamente che le password vengono riutilizzate su più siti / servizi, il che è centrale in questo argomento e il motivo per cui le password recuperabili sono considerate una grave debolezza. Un professionista della sicurezza non delega le decisioni di sicurezza al cliente non tecnico; un professionista sa che le sue responsabilità vanno oltre il cliente pagante e non offre opzioni con rischio elevato e ricompensa zero . -1 per un rant pesante di retorica ed estremamente leggero sui fatti - e per non aver nemmeno veramente risposto alla domanda.
Aaronaught,

4
Ancora una volta, stai completamente trascurando la valutazione del rischio. Per usare il tuo argomento, non puoi fermarti solo con hash a 1 via. È inoltre necessario includere requisiti di complessità, lunghezza della password, restrizioni sul riutilizzo della password e così via. Sostenere che gli utenti useranno password stupide o riutilizzeranno le password non è una giustificazione aziendale sufficiente se il sistema è irrilevante e, francamente, ho risposto alla domanda. La risposta breve: spingere per l'utilizzo di un'implementazione standard, documentare le obiezioni in caso di annullamento e andare avanti.
Thomas,

7
E ancora una volta ripeti il ​​canard che nulla di tutto ciò conta per un sistema di basso valore! Il valore della password di un utente non ha nulla a che fare con il valore dell'account di un utente sul tuo sistema. È un segreto e uno che devi sempre mantenere. Vorrei poter dare un altro -1 per il commento che dimostra che ancora non si capisce i problemi qui.
Aaronaught,

5
La valutazione del rischio è il problema principale. Il riutilizzo della password è solo un potenziale problema in una serie molto più ampia di problemi. Perché non richiedere le mutande? Perché non richiedere che la persona guidi nel tuo ufficio per accedere? Senza una valutazione ragionevole dei rischi, non c'è modo di rispondere a queste domande. Nel tuo mondo, tutto è un rischio, quindi ogni sistema richiede sicurezza di accesso a livello di FBI. Semplicemente non è così che funziona il mondo reale.
Thomas,

7
L'unica cosa che è chiara qui è che il tuo intero argomento non è altro che un errore di Slope Slope e che stai cercando di steamroll lettori con parole d'ordine come "valutazione del rischio" al fine di coprire questo fatto. Siate certi che qualsiasi sistema utilizzato dall'FBI sarà molto più sicuro di un hash bcrypt e di una lunghezza minima della password. Se richiedere sistemi di autenticazione standard del settore mi rende un "fanatico della sicurezza", allora credo di essere un fanatico; personalmente, mi fa male sapere che ci sono persone disposte a sacrificare la MIA sicurezza per soldi. Questo non è etico .
Aaronaught,

8

Rendi la risposta alla domanda di sicurezza dell'utente una parte della chiave di crittografia e non archiviare la risposta alla domanda di sicurezza come testo normale (l'hash invece)


L'utente può rispondere in modo diverso anche alla domanda. Alcune domande richiedono risposte più lunghe che sono facili da riformulare in seguito.
Monoman,

5
Le domande di sicurezza sono una cattiva idea. Come fai a tua madre a cambiare il suo nome da nubile una volta che le informazioni sono state violate? Vedi anche Ingegneria della sicurezza di Peter Gutmann .
1313

7

Implemento sistemi di autenticazione a più fattori per vivere, quindi per me è naturale pensare che sia possibile ripristinare o ricostruire la password, utilizzando temporaneamente un fattore in meno per autenticare l'utente solo per il flusso di lavoro di ripristino / ricreazione. In particolare l'uso di OTP (password monouso) come alcuni dei fattori aggiuntivi, mitiga gran parte del rischio se la finestra temporale è breve per il flusso di lavoro suggerito. Abbiamo implementato generatori software OTP per smartphone (che la maggior parte degli utenti porta già con sé tutto il giorno) con grande successo. Prima che compaiano le lamentele di una spina commerciale, ciò che sto dicendo è che possiamo ridurre i rischi insiti nel mantenere le password facilmente recuperabili o ripristinabili quando non sono l'unico fattore utilizzato per autenticare un utente.


La rimozione temporanea di un fattore da un sistema di autenticazione a più fattori è in effetti un mezzo molto più sicuro per reimpostare una password rispetto ai sistemi di "domande segrete" esasperanti visti su così tanti siti. Ma per quanto riguarda l'archiviazione delle password in un formato recuperabile, non sono sicuro di come aiuti, a meno che tu non stia usando in qualche modo il secondo fattore per crittografare o offuscare il primo, e non sono sicuro di come sia possibile con qualcosa come un SecurID. Puoi spiegare?
Aaronaught,

@Aaronaught Quello che ho detto è, se ti viene richiesto di avere password recuperabili, il rischio intrinseco è inferiore se non è l'unico fattore di autenticazione ed è anche più facile per l'utente finale, se i flussi di lavoro riutilizzano fattori che possiede già e ha accesso corrente a, piuttosto che cercare di ricordare probabilmente anche "risposte segrete" dimenticate o utilizzare collegamenti a tempo limitato o password temporanee, entrambi inviati tramite canali non sicuri (a meno che non si stia utilizzando S-MIME con certificati client, oppure PGP, entrambi sostenendo costi specifici per la gestione della corretta associazione e scadenza / sostituzione)
Monoman,

1
Suppongo che sia tutto vero, ma il rischio di un compromesso pubblico è minimo all'inizio; il problema più serio con le password recuperabili è la sicurezza interna e potenzialmente consente a un dipendente scontento di abbandonare le password e-mail di migliaia di clienti o un CEO storto per venderlo a phisher e spammer. L'autenticazione a due fattori è eccezionale nella lotta contro il furto di identità e l'individuazione della password, ma in realtà non porta molto al tavolo per quanto riguarda la sicurezza del database di password effettivo.
Aaronaught,

5

Siamo spiacenti, ma finché hai qualche modo per decodificare la loro password, non c'è modo che sia sicuro. Combatti amaramente, e se perdi, CYA.


5

Ho appena incontrato questa discussione interessante e accesa. Ciò che mi ha sorpreso di più è stato, quanto poca attenzione è stata prestata alla seguente domanda di base:

  • Q1. Quali sono i motivi reali per cui l'utente insiste sull'accesso alla password memorizzata in testo normale? Perché ha così tanto valore?

Le informazioni secondo cui gli utenti sono anziani o giovani non rispondono realmente a questa domanda. Ma come si può prendere una decisione aziendale senza comprendere adeguatamente l'interesse del cliente?

Ora perché è importante? Perché se la vera causa della richiesta dei clienti è il sistema che è dolorosamente difficile da usare, forse affrontare la causa esatta risolverebbe il problema reale?

Dato che non ho queste informazioni e non posso parlare con quei clienti, posso solo immaginare: si tratta di usabilità, vedi sopra.

Un'altra domanda che ho visto è stata posta:

  • Q2. Se l'utente non ricorda la password al primo posto, perché è importante la vecchia password?

E qui è possibile la risposta. Se hai un gatto chiamato "miaumiau" e hai usato il suo nome come password ma hai dimenticato di farlo, preferiresti che ti venisse ricordato di cosa si trattava o piuttosto che ti venisse inviato qualcosa come "# zy * RW (ew"?

Un altro possibile motivo è che l'utente considera difficile elaborare una nuova password! Quindi avere la vecchia password restituita dà l'illusione di salvarla di nuovo da quel lavoro doloroso.

Sto solo cercando di capire il motivo. Ma qualunque sia la ragione, non è la causa che deve essere affrontata.

Come utente, voglio cose semplici! Non voglio lavorare sodo!

Se accedo a un sito di notizie per leggere i giornali, voglio digitare 1111 come password e passare attraverso !!!

So che è insicuro, ma cosa mi importa di qualcuno che accede al mio "account"? Sì, può leggere anche le notizie!

Il sito memorizza le mie informazioni "private"? Le notizie che ho letto oggi? Quindi è il problema del sito, non mio! Il sito mostra informazioni private all'utente autenticato? Quindi non mostrarlo al primo posto!

Questo è solo per dimostrare l'atteggiamento dell'utente nei confronti del problema.

Quindi, per riassumere, non credo che sia un problema di come archiviare "in modo sicuro" password di testo semplice (che sappiamo essere impossibile), ma piuttosto come affrontare le preoccupazioni reali dei clienti.


4

Gestione delle password perse / dimenticate:

Nessuno dovrebbe mai essere in grado di recuperare le password.

Se gli utenti hanno dimenticato le loro password, devono almeno conoscere i loro nomi utente o indirizzi e-mail. Su richiesta, generare un GUID nella tabella Users e inviare un messaggio di posta elettronica contenente un collegamento contenente il guid come parametro all'indirizzo di posta elettronica dell'utente.

La pagina dietro il collegamento verifica l'esistenza del parametro guid (probabilmente con una logica di timeout) e chiede all'utente una nuova password.

Se è necessario che gli utenti della hotline aiutino gli utenti, aggiungere alcuni ruoli al modello delle sovvenzioni e consentire al ruolo della hotline di accedere temporaneamente come utente identificato. Accedi a tutti questi accessi alla hotline. Ad esempio, Bugzilla offre agli amministratori una tale funzione di rappresentazione.


Il GUID è una cattiva idea, non abbastanza casuale e facile da potenziare. ci sono altri problemi con questo, vedere stackoverflow.com/questions/664673/...
Avid

3

Che ne dici di inviare via e-mail la password in chiaro al momento della registrazione, prima che venga crittografata e persa? Ho visto molti siti Web farlo e ottenere quella password dall'email dell'utente è più sicuro che lasciarla in giro sul tuo server / comp.


Non presumo che l'e-mail sia più sicura di qualsiasi altro sistema. Anche se questo mi toglie di mano la preoccupazione legale, c'è ancora il problema di qualcuno che perde / cancella la propria e-mail e ora sono tornato al punto di partenza.
Shane,

Fornire sia una reimpostazione della password sia un'e-mail con la password in chiaro. Penso che sia il massimo che puoi fare sull'argomento, senza tenere una copia della password da solo.
Casraf,

Questa è un'idea assolutamente orribile. È inefficace (molti utenti eliminano effettivamente le e-mail dopo aver letto) e peggio di ciò che stai cercando di proteggere (poiché l'e-mail non è crittografata per impostazione predefinita e passa attraverso reti inaffidabili). Meglio suggerire all'utente di prendere nota della password stessa, almeno inviandosi un'e-mail le informazioni non vanno mai più lontano del server di posta elettronica, non attraverso l'intera Internet!
Ben Voigt,

3

Se non puoi semplicemente rifiutare l'obbligo di archiviare le password recuperabili, che ne dici di questo come argomento contrario.

Possiamo eseguire correttamente l'hash delle password e creare un meccanismo di reimpostazione per gli utenti oppure rimuovere dal sistema tutte le informazioni di identificazione personale. È possibile utilizzare un indirizzo e-mail per impostare le preferenze dell'utente, ma questo è tutto. Utilizzare un cookie per estrarre automaticamente le preferenze nelle visite future e eliminare i dati dopo un periodo ragionevole.

L'unica opzione che viene spesso trascurata dalla politica delle password è se una password è davvero necessaria. Se l'unica cosa che fa la tua politica di password è causare chiamate al servizio clienti, forse puoi liberartene.


Finché si dispone di un indirizzo e-mail associato a una password e tale password è recuperabile, è possibile che sia trapelata la password per quell'indirizzo e-mail a causa del riutilizzo della password. Questa è in realtà la preoccupazione principale qui. Non ci sono davvero altre informazioni identificabili personalmente che contano.
Aaronaught,

1
Mi sei completamente perso il punto. Se non hai davvero bisogno di una password, non raccoglierne una. Gli sviluppatori spesso rimangono bloccati nella modalità di pensiero "è così che facciamo". A volte aiuta a scartare nozioni preconcette.
Anopres,

2

Gli utenti hanno davvero bisogno di recuperare (ad esempio, dire) la password che hanno dimenticato o devono semplicemente essere in grado di accedere al sistema? Se ciò che vogliono veramente è una password per accedere, perché non avere una routine che cambia semplicemente la vecchia password (qualunque essa sia) in una nuova password che la persona di supporto può dare alla persona che ha perso la password?

Ho lavorato con sistemi che fanno esattamente questo. La persona di supporto non ha modo di sapere quale sia la password corrente, ma può reimpostarla su un nuovo valore. Ovviamente tutti questi ripristini dovrebbero essere registrati da qualche parte e la buona pratica sarebbe quella di generare una e-mail per l'utente che gli dice che la password è stata ripristinata.

Un'altra possibilità è avere due password simultanee che consentano l'accesso a un account. Una è la password "normale" gestita dall'utente e l'altra è come una chiave scheletro / master che è nota solo al personale di supporto ed è la stessa per tutti gli utenti. In questo modo, quando un utente ha un problema, la persona di supporto può accedere all'account con la chiave master e aiutare l'utente a cambiare la propria password in qualunque cosa. Inutile dire che anche tutti gli accessi con la chiave master devono essere registrati dal sistema. Come misura aggiuntiva, ogni volta che viene utilizzata la chiave master è possibile convalidare anche le credenziali delle persone di supporto.

-EDIT- In risposta ai commenti sul fatto di non avere una chiave master: sono d'accordo che è un male, così come credo che sia male consentire a chiunque altro che l'utente di avere accesso all'account dell'utente. Se si guarda alla domanda, l'intera premessa è che il cliente ha imposto un ambiente di sicurezza altamente compromesso.

Una chiave master non deve essere così male come sembrerebbe inizialmente. Lavoravo in un impianto di difesa in cui percepivano la necessità per l'operatore di computer mainframe di avere "accesso speciale" in determinate occasioni. Hanno semplicemente messo la password speciale in una busta sigillata e l'hanno registrata sulla scrivania dell'operatore. Per usare la password (che l'operatore non conosceva) ha dovuto aprire la busta. Ad ogni cambio di turno uno dei compiti del supervisore del turno era vedere se la busta era stata aperta e in tal caso immediatamente la password veniva cambiata (da un altro dipartimento) e la nuova password veniva inserita in una nuova busta e il processo iniziava tutto di nuovo. L'operatore sarebbe stato interrogato sul perché lo avesse aperto e l'incidente sarebbe stato documentato per la cronaca.

Sebbene questa non sia una procedura che vorrei progettare, ha funzionato e fornito un'eccellente responsabilità. Tutto è stato registrato e rivisto, inoltre tutti gli operatori disponevano di autorizzazioni segrete DOD e non abbiamo mai avuto abusi.

A causa della revisione e della supervisione, tutti gli operatori sapevano che se avessero abusato del privilegio di aprire la busta sarebbero stati immediatamente licenziati e avrebbero potuto essere perseguiti penalmente.

Quindi immagino che la vera risposta sia se si vogliono fare le cose nel modo giusto si assumono persone di cui si possono fidare, fare controlli di fondo ed esercitare un'adeguata supervisione e responsabilità della direzione.

Ma poi di nuovo se il cliente di questo poveretto avesse una buona gestione, non avrebbe mai richiesto una soluzione così comprensiva di sicurezza, adesso?


Una chiave master sarebbe terribilmente rischiosa, il personale di supporto avrebbe accesso a tutti gli account e, una volta consegnata quella chiave a un utente, avrebbe la chiave master e l'accesso a tutto.
Carson Myers,

Una chiave principale è un'idea terribile, poiché se qualcuno la scopre (o se l'ha divulgata per caso), può sfruttarla. Come meccanismo di reimpostazione della password per account è di gran lunga preferibile.
Phil Miller,

Sono curioso, pensavo che Linux di default avesse un account super user con accesso a livello root? Non è una "chiave master" per accedere a tutti i file sul sistema?
JonnyBoats

@JonnyBoats Sì, lo è. Ecco perché i moderni Unix come Mac OS X disabilitano l'account root.
Nicholas Shanks,

@ NicholasShanks: disabilitare l'account root o disabilitare l'accesso interattivo sull'account root? C'è ancora molto codice in esecuzione con autorizzazioni illimitate.
Ben Voigt,

2

Dal poco che capisco su questo argomento, credo che se stai costruendo un sito Web con un accesso / password, non dovresti nemmeno vedere la password in chiaro sul tuo server. La password deve essere sottoposta a hash, e probabilmente salata, prima ancora di lasciare il client.

Se non vedi mai la password in chiaro, non sorge la domanda di recupero.

Inoltre, ritengo (dal web) che (presumibilmente) alcuni algoritmi come MD5 non siano più considerati sicuri. Non ho modo di giudicarlo da solo, ma è qualcosa da considerare.


1

aprire un DB su un server autonomo e fornire una connessione remota crittografata a ciascun server Web che richiede questa funzionalità.
non deve essere un DB relazionale, può essere un file system con accesso FTP, utilizzando cartelle e file anziché tabelle e righe.
concedere ai server Web autorizzazioni di sola scrittura, se possibile.

Memorizza la crittografia non recuperabile della password nel DB del sito (chiamiamola "pass-a") come fanno le persone normali :)
su ogni nuovo utente (o modifica della password) archivia una copia semplice della password nel DB remoto. usa l'id del server, l'ID dell'utente e "pass-a" come chiave composita per questa password. puoi persino usare una crittografia bidirezionale sulla password per dormire meglio di notte.

ora, affinché qualcuno ottenga sia la password sia il suo contesto (ID sito + ID utente + "pass-a"), deve:

  1. hackerare il DB del sito Web per ottenere una coppia o coppie ("pass-a", id utente).
  2. ottenere l'ID del sito Web da un file di configurazione
  3. trovare e hackerare il database delle password remote.

puoi controllare l'accessibilità del servizio di recupero password (esponilo solo come servizio Web sicuro, consenti solo un certo numero di recuperi di password al giorno, eseguilo manualmente, ecc.) e persino addebitare un costo aggiuntivo per questo "speciale accordo di sicurezza".
Il server DB per il recupero delle password è piuttosto nascosto in quanto non svolge molte funzioni e può essere meglio protetto (è possibile personalizzare le autorizzazioni, i processi e i servizi).

tutto sommato, rendi il lavoro più difficile per l'hacker. la possibilità di una violazione della sicurezza su un singolo server è sempre la stessa, ma i dati significativi (una corrispondenza di account e password) saranno difficili da assemblare.


3
Se il server delle app può accedervi, lo stesso può fare chiunque abbia accesso al server delle app (sia esso un hacker o un insider malintenzionato). Questo offre zero sicurezza aggiuntiva.
molf

1
La sicurezza aggiuntiva qui è che il DB del server delle applicazioni non contiene password (quindi è necessario un secondo hack - al DB delle password), e il DB delle password può essere protetto meglio dalle attività irregolari, mentre si controlla l'accessibilità del servizio di recupero password. in questo modo è possibile rilevare il recupero di dati in blocco, modificare la chiave SSH di recupero su base settimanale o addirittura non consentire il recupero automatico dei passaggi ed eseguire tutto manualmente. Questa soluzione si adatta anche a qualsiasi altro schema di crittografia interno (come le chiavi pubblica + privata, salt, ecc.) Per il DB delle password.
Amir Arad,

1

Un'altra opzione che potresti non aver considerato è quella di consentire le azioni via e-mail. È un po 'complicato, ma l'ho implementato per un client che necessitava di utenti "esterni" al proprio sistema per visualizzare (solo lettura) determinate parti del sistema. Per esempio:

  1. Una volta che un utente è registrato, ha pieno accesso (come un normale sito Web). La registrazione deve includere un'e-mail.
  2. Se sono necessari dati o un'azione e l'utente non ricorda la propria password, possono ancora eseguire l'azione cliccando su un apposito " email me per il permesso pulsante", proprio accanto al regolare " submit pulsante".
  3. La richiesta viene quindi inviata al messaggio di posta elettronica con un collegamento ipertestuale che chiede se si desidera che l'azione venga eseguita. Questo è simile a un collegamento e-mail per reimpostare la password, ma invece di reimpostare la password esegue l' azione singola .
  4. L'utente quindi fa clic su "Sì" e conferma che i dati devono essere mostrati o l'azione deve essere eseguita, i dati rivelati, ecc.

Come menzionato nei commenti, questo non funzionerà se l'e-mail è compromessa, ma risolve il commento di @joachim sul non voler reimpostare la password. Alla fine, dovrebbero utilizzare la reimpostazione della password, ma potrebbero farlo in un momento più conveniente o con l'assistenza di un amministratore o di un amico, se necessario.

Una svolta a questa soluzione sarebbe quella di inviare la richiesta di azione a un amministratore fidato di terze parti. Funzionerebbe meglio nei casi con utenti anziani, con problemi mentali, molto giovani o altrimenti confusi. Naturalmente questo richiede un amministratore di fiducia per queste persone per supportare le loro azioni.


1

Saltare e hash la password dell'utente normalmente. Quando si accede l'utente, consentire sia la password dell'utente (dopo la salatura / hashing), ma consentire anche ciò che l'utente ha letteralmente inserito per corrispondere.

Ciò consente all'utente di immettere la propria password segreta, ma consente anche di immettere la versione salata / con hash della propria password, che è ciò che qualcuno leggerebbe dal database.

Fondamentalmente, rendere la password salata / hash anche una password "in chiaro".


Perché pensi che sia necessario confrontare ciò che l'utente ha inserito direttamente con la password con hash memorizzata nel database? Che tipo di funzionalità ti dà? Inoltre, nel fare ciò è estremamente importante applicare la funzione di confronto a tempo costante tra la password immessa dall'utente e la password con hash dal database. Altrimenti, è quasi banalmente possibile determinare la password con hash in base alle differenze di temporizzazione.
Artjom B.

1
@ArtjomB. La domanda chiede come proteggere la password dell'utente e allo stesso tempo consentire all'assistenza clienti (CS) di parlare / inviare e-mail a un utente inserendo la password dimenticata. Rendendo la versione con hash utilizzabile come password in chiaro, CS può leggerla e fare in modo che l'utente la utilizzi al posto della password dimenticata. CS può anche usarlo per accedere come utente e aiutarli attraverso un'attività. Ciò consente inoltre agli utenti che si sentono a proprio agio con i sistemi automatizzati di password dimenticata di essere protetti, poiché la password che inseriscono e utilizzano viene l'hash.
Eliott,

Vedo. Non ho letto la domanda nella sua interezza. L'uso di un confronto a tempo costante è ancora necessario per prevenire una banale rottura dell'intero sistema.
Artjom B.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.