Sta usando l'offuscamento dinamico e i peppers per l'hashing della password una buona idea?

1

Ho letto tutto il giorno sull'assegnazione password e sull'autenticazione sicura e sebbene legga molto spesso che quasi tutti i nostri algoritmi rendono i metodi di hashing provati solo meno sicuri, ho appena avuto un'idea riguardo l'hashing della password, ad es. con scrypt, salando la password e usando un pepe:

  1. La modifica dell'hash della password originale prima potrebbe probabilmente migliorare la sicurezza se si utilizza una stringa casuale ogni volta e la si utilizza per oscurare la password. Obfuscare con lo schema specifico one da solo non migliorerebbe la sicurezza ma usando sempre una nuova stringa casuale (che deve essere il più casuale possibile) renderebbe impossibile per un hacker ottenere la password tanto a lungo poiché non ha quella stringa casuale.

  2. Come avresti bisogno di una stringa casuale per verificare la password, devi archiviarla e leggerla in qualche modo, il che rende ovviamente vulnerabili agli attacchi degli hacker. Vorrei salvare queste stringhe casuali con l'uuid dell'utente come chiave e crittografare il contenuto effettivo con una password usando openssl_encrypt (una funzione PHP) su un server diverso.

  3. Ora il problema sarebbe la password con cui vengono crittografate le password di offuscamento. Così sono arrivato all'idea di mostrare all'utente inizialmente dopo la registrazione una sequenza casuale di parole del dizionario che non sono state memorizzate e all'utente verrà richiesto di scriverlo. Come protezione aggiuntiva userei qui anche un pepe per rafforzare la passphrase del dizionario insicuro. Ora l'utente deve rispondere ad ogni login una risposta di sicurezza, che viene poi utilizzata per decodificare la stringa casuale dall'altro server necessario per verificare la normale password. Se perde questa passphrase di risposta di sicurezza, può reimpostare la sua password usando la sua email.

  4. Al momento della registrazione è possibile inserire solo password sicure e ogni password è memorizzata con hashing scrypt, sale e pepe (che si trova su un terzo server). Prima di sminuirlo, viene offuscato. Ora non userei un pepe statico che è di nuovo vulnerabile, ma dato che c'è un terzo server, comunque, genererei quel pepe in modo dinamico.

Che cosa pensi che questo metodo aumenterebbe la sicurezza o sarebbe anche meno sicuro? Non si tratta assolutamente di utilizzarlo nell'ambiente di produzione, ma di approfondire il mio interesse per l'argomento stesso e comprenderlo meglio.

    
posta hardking 08.06.2016 - 02:21
fonte

1 risposta

1

Quello che stai descrivendo è essenzialmente un sale extra crittografato con una chiave derivata da una password extra composta da parole del dizionario che non sono state scelte dall'utente.

So che questo sembrerà una critica piuttosto vaga e generale, ma vedo tre aspetti negativi di questo:

  • Stai rotolando per conto tuo. Inventare i propri sistemi per risolvere i problemi con soluzioni consolidate raramente migliora la sicurezza. Alla fine è più probabile che tu commetta un errore nell'implementazione e ti esponi piuttosto che migliorare la tua sicurezza. (Detto ciò, speculare sui nuovi sistemi può essere un'esperienza di apprendimento utile).
  • La complessità è il tuo nemico. Questo introduce molta complessità, ma non è chiaro quali problemi debba essere risolta la complessità extra.
  • L'usabilità è tua amica. Chi vuole ontop della tua password memorizza un'altra password che non ti è nemmeno permesso di scegliere da te? Come utente vorrei avere alcuni sostanziali vantaggi in termini di sicurezza per accettarlo.

Confrontalo con altre pratiche comuni per aumentare la sicurezza delle password e chiedi a te stesso che cosa il tuo sistema fornisce per offendere i costi in termini di complessità e usabilità che questi sistemi non offrono:

  • Cripta tutti gli hash di scrypt (con hash, sale e tutto) utilizzando un HSM in modo che un utente malintenzionato non possa ottenere la chiave di crittografia.
  • Utilizza l'autenticazione a due fattori (ad es. con un codice di accesso SMS).
risposta data 08.06.2016 - 10:54
fonte

Leggi altre domande sui tag