Anonimato dei voti al voto con gli hash BCRYPT

0

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?

    
posta Robert 10.03.2017 - 11:58
fonte

2 risposte

2

Non dovresti rendere pubbliche le password con hash degli utenti, anche se sono state sottoposte a hash con un algoritmo strong come bcrypt. Un utente malintenzionato potrebbe facilmente scaricarli e aggiungerli a bruteforce e recuperare alcune password.

Il "seme" di bcrypt è il sale usato per proteggere dagli attacchi delle tavole arcobaleno. Un sale DEVE essere unico, quindi usare lo stesso sale per ogni hash è una pessima idea.

Dovresti esaminare questa domanda che ha lo stesso problema di te e ha già alcune risposte .

    
risposta data 10.03.2017 - 13:24
fonte
0

The backend creates a HASH value of the users password. And only that hash value is stored with the ballot.

Hai un problema XY . Quello che vuoi da chiedere è: Come può un utente controllare il proprio voto senza che io possa sapere a quale voto appartiene?

Quello che fai per te è fornire un nonce per loro nel momento in cui votano, che non è memorizzato con l'account. Registrano il loro nonce al momento del voto e possono usarlo per convalidare il voto.

    
risposta data 10.03.2017 - 22:02
fonte

Leggi altre domande sui tag