Parametri nell'output della funzione di hashing della password

1

Un numero di funzioni di crittografia include i loro parametri di ottimizzazione nell'output. Ad esempio, SCrypt, che ho preso in considerazione per un'applicazione che sto costruendo, produce nel seguente formato:

$<version>$<params>$<salt>$<hash>

Mi sembra che se un utente malintenzionato non conoscesse questi valori, renderebbe la vita più difficile per loro ... ma se la mia app non conosce i valori, allora rende le cose difficili per me e per i miei utenti . Capisco che molte implementazioni proseguono con l'hash di questo output per oscurare i parametri; Presumo che ci sia quindi un modo per farlo che non indebolisca lo schema generale o aumenti la possibilità di collisioni. Tuttavia, a mio avviso, se questo secondo passaggio di hashing è reversibile, allora è di uso limitato perché un hacker può invertire il più facilmente possibile e ottenere i parametri che stavamo cercando di nascondere da loro - e se non è reversibile, allora abbiamo ancora il problema di essere inaccessibili anche ai parametri, quindi non vedo come sia diverso dal solo tagliare i parametri. Potrei sempre avere i parametri come costanti nel codice dell'app, ovviamente, ma questo dipende dalla qualità del mio codice di offuscamento, che è qualcosa di cui non sono mai stato troppo sicuro (chiamalo paranoia salutare). Significa anche che non è possibile migrare gli utenti dalle vecchie versioni senza perdere le loro password e qualsiasi altra cosa ho crittografato, e impostare la logica per usare i vecchi e nuovi metodi in parallelo mi sembra di avere due porte invece di una, che si sente meno sicuro.

Questi parametri hanno davvero bisogno di protezione dagli aggressori e, in tal caso, qual è il modo più sicuro per farlo?

    
posta anaximander 25.03.2013 - 18:16
fonte

1 risposta

1

I "parametri" non devono essere segreti. Non sono significa essere segreti. È difficile tenerli segreti. Quindi, risposta breve: non preoccuparti.

In generale, non vuoi mostrare l'output dell'hash a chiunque. Ecco perché, su sistemi Linux, /etc/shadow non è leggibile da tutto il mondo. Allo stesso modo, non si dà una copia del database del proprio sito Web a chiunque. Tuttavia, ci possono essere incidenti occasionali, in cui l'utente malintenzionato può imparare parte o tutti i dati del sistema. Mantieni la password hash , anziché solo le password, proprio per questo motivo. L'hashing della password è una cosa di "difesa in profondità". Separare, ad esempio, il sale dall'hash è quindi una "difesa in profondità": ha senso solo se si assume che l'attaccante abbia violato le difese esterne (potrebbe dare un'occhiata al database del proprio sito, ad esempio con un'iniezione SQL attacco) ma non è riuscito a violarli completamente (in qualche modo ha ottenuto un dump di database parziale , che include i valori hash ma non i sali, o viceversa). Questo non è uno scenario molto probabile, quindi raramente vale la pena.

Vedi questa risposta per una discussione dettagliata (in particolare le sezioni sul "segreto del sale" e "pepe" ).

    
risposta data 25.03.2013 - 18:32
fonte

Leggi altre domande sui tag