Rehashing un hash debole con un algoritmo strong lo rende strong?

22

Immagina la seguente situazione. Stiamo creando un'applicazione web che dovrebbe essere veramente sicura

Ora gli account / utenti non vengono aggiunti direttamente da noi ma ricevono una lettera con un logode. Ogni tanto riceviamo un file contenente un hash SHA-1 non salato di questo log-code e alcune altre informazioni di base.

Considerando che SHA-1 è ora un giorno considerato come una responsabilità, e il software che genera questi hash non è sotto il nostro controllo (probabilmente è anche un vecchio software che non è in grado di effettuare hash migliori)

Sarebbe una soluzione per cancellare l'hash ricevuto usando Bcrypt. Questo dovrebbe risolvere il problema di non essere sicuro / troppo veloce se sono corretto? Dovrei aggiungere anche un peperoncino?

Ci sono altri problemi che potrei aver perso? O dovremmo respingere il problema e chiedere loro di riparare il loro software per funzioni di hashing migliori?

Chiarimento:

Il nostro cliente è un dipendente di un'azienda e ha bisogno di approvazione per questo progetto.

La terza parte ha creato un sistema per la società del nostro cliente che gestisce informazioni sensibili sui clienti della società dei nostri clienti. Vogliono dare ad alcuni dei loro clienti la possibilità di accedere alla nostra applicazione, questo deve accadere attraverso il loro sistema perché è quello che sanno i dipendenti dei nostri clienti e se dovessero aggiungere utenti manualmente nella nostra applicazione il nostro cliente non otterrebbe l'approvazione .

Inoltre, se c'è qualche perdita o violazione (anche se tecnicamente abbiamo accesso a qualsiasi informazione sensibile, anche nella nostra applicazione non c'è un nome o alcuna informazione identificativa sull'utente) questo potrebbe ancora attirare un'attenzione negativa indesiderata che ferire sia il cliente che noi.

Il problema è che il sistema creato da terzi può solo eseguire hash SHA-1 non salati. Quindi la mia domanda è di provare e vedere se possiamo aggirare questo. O se siamo costretti a dire al mio cliente di costringere la terza parte a implementare un sistema migliore di hashing, che potrebbero semplicemente rispondere con no e non vogliamo. O potrebbe costare molto più denaro.

Spero di averlo spiegato un po 'meglio pur rimanendo vago. :)

    
posta Jester 28.11.2016 - 11:53
fonte

4 risposte

15

Sì, l'hashing di nuovo con bcrypt è una buona idea. Si noti, tuttavia, che non darà al vostro codice di accesso più entropia, ma ci vorrà più tempo per craccare. Quindi, se l'entropia è veramente bassa, potrebbe essere necessario un fattore di costo molto elevato per renderlo irrealizzabile.

Da una nota a margine, in generale è meglio solo un hash con una buona funzione di hash che giocare con molti, come spiegato nelle risposte a questa domanda . Ma non hai questa opzione, quindi gli argomenti non sono realmente validi per il tuo caso.

Per quanto riguarda l'utilizzo di un pepe, ti consiglio di crittografare gli hash. Offre lo stesso tipo di protezione, ma offre maggiore flessibilità. Ma non è un sostituto per la salatura.

Questo e questo potrebbe essere una lettura interessante per te. Inoltre, Roshan Bhumbra ha un suggerimento interessante sul riutilizzo con una sola funzione dopo il primo accesso.

    
risposta data 28.11.2016 - 12:56
fonte
5

Crittografia in transito

Nel tuo sistema attuale sembra che la password di fatto sia l '"hash SHA-1 di questo loginode" poiché il possesso di un hash di corrispondenza è sufficiente per creare un file valido, anche se non è chiaro se consente all'attaccante di sfruttare qualcosa direttamente Tuttavia, a questo proposito, non è meno sicuro del semplice invio di una password in chiaro - che è appropriata finché si "ottiene un file" attraverso un canale sicuro e crittografato, ovvero https / sftp / etc.

Crittografia in memoria

Un rischio con questo sistema è che se un utente malintenzionato può ottenere una copia di quel file, può ottenere le password complete degli utenti. SE hai bisogno di memorizzare questi hash, allora hai ragione che sarebbe ragionevole cancellarli con bcrypt per l'archiviazione, con il problema principale che devi essere sicuro di cancellare immediatamente lo SHA ricevuto -1 hash e nessuna copia di esso (ad esempio file temporanei, backup, cache, ecc.) Rimane in memoria.

    
risposta data 28.11.2016 - 12:49
fonte
2

Vedo un'altra opzione che non sembra essere stata menzionata, anche se funzionerebbe meglio se il sistema che genera l'hash potesse usare un Bcrypt.

Devi solo aggiornare l'hash quando l'utente esegue il login. Anche se questo significa che avrai due diversi algoritmi di hashing in uso allo stesso tempo, si aggira il 'problema' menzionato da @Anders sull'utilizzo di due algoritmi su un valore.

È possibile memorizzare un valore accanto all'hash per indicare all'applicazione quale tipo è, e se si tratta dell'hash SHA-1, è possibile inserire la password appena inserita (a condizione che fosse corretta) e memorizzarla.

    
risposta data 28.11.2016 - 21:11
fonte
2

Se gli hash originali non sono salati, puoi semplicemente applicare qualsiasi algoritmo di hash salato all'hash non salato originale che hai ricevuto.

È comunque importante che nel tuo database sia chiaramente indicato che questi hash utilizzano l'algoritmo di hash combinato. Non è del tutto improbabile che in un secondo momento si avranno diversi utenti nel proprio database protetti con diversi algoritmi di hash. In quel momento è importante conoscere la funzione corretta da utilizzare per ciascun utente nel database.

È possibile aggiornare gli hash memorizzati nel tuo database al prossimo accesso dell'utente. Anche se potrebbe non essere importante perché bcrypt è solo marginalmente più sicuro di SHA1 seguito da bcrypt.

Se gli hash originali sono salati diventa più difficile. In questo caso puoi ancora applicare due livelli di hashing, ma in questo caso è molto importante memorizzare tutti i sali e solo l'ultimo valore hash.

    
risposta data 28.11.2016 - 22:20
fonte

Leggi altre domande sui tag