Ciao esperti di sicurezza!
Sto implementando una piccola applicazione web in cui gli utenti possono esprimere voti. Da un lato, voglio i voti anonimi. Quindi il nome utente non viene memorizzato con il voto. Ma d'altra parte voglio che ogni utente possa verificare da solo, che il suo voto sia stato preso in considerazione. Così ho pensato a questo processo:
Quando un utente esegue un voto, deve inserire la sua password. (Ovviamente la sua password non viene mai memorizzata direttamente da nessuna parte!) Il backend crea un valore HASH della password dell'utente. E solo il valore di hash è memorizzato con il voto. Tutti i voti sono pubblicamente disponibili, compresi i loro hash.
Quindi, quando un utente vuole verificare che il suo voto è stato contabilizzato, allora può semplicemente ricreare il suo valore di hash e cercarlo nell'elenco delle schede pubbliche.
Inizialmente pensavo a MD5 ma poi ho scoperto che esistono algoritmi Hash più forti e migliori. Ora utilizzo BCRYPT .
Tuttavia la implementazione di Java di BCRYPT richiede un nuovo valore seme ogni volta che vuoi hash una password. Ho scoperto che JBCRYPT memorizza i seed insieme alla password hash.
= > È ok? È normale? = > Potrei creare un seme iniziale una volta, memorizzarlo e quindi riutilizzare lo stesso valore di seme ogni volta che viene votato un voto? O sarebbe un rischio per la sicurezza.
Perché ne ho bisogno? Il mio requisito funzionale è leggermente diverso rispetto al normale hashing della password. Quando si controlla una password con hash, si sa dove cercare: lo specifico valore hash (a quell'utente) corrisponde alla password fornita. Il mio requisito è diverso: l'utente ha una password. Quando questa password è hash, il valore hash è contenuto in un elenco di valori hash.
Come posso implementarlo?