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?