Anonimidad de las papeletas al votar con hashes BYCRYPT

0

¡Hola expertos en seguridad!

Estoy implementando una pequeña aplicación web donde los usuarios pueden emitir votos. Por un lado, quiero que las boletas sean anónimas. Así que el nombre de usuario no se almacena con la boleta. Pero, por otro lado, quiero que cada usuario pueda verificar por sí mismo, que su voto se haya tenido en cuenta. Así que pensé en este proceso:

Cuando un usuario emite un voto, debe ingresar su contraseña. (Por supuesto, su contraseña nunca se almacena directamente en ninguna parte). El backend crea un valor HASH de la contraseña del usuario. Y solo ese valor hash se almacena con la boleta. Todas las boletas están disponibles públicamente, incluidos sus hashes.

Entonces, cuando un usuario quiere verificar que su voto fue contabilizado, entonces simplemente puede recrear su valor hash y buscarlo en la lista de boletas públicas.

Inicialmente pensé en MD5 pero luego descubrí que hay un algoritmo Hash más fuerte y mejor. Ahora uso BCRYPT .

Pero la implementación Java de BCRYPT necesita un nuevo valor semilla cada vez que desee hash una contraseña. Descubrí que JBCRYPT almacena la semilla junto con la contraseña de hash.

= > ¿Eso esta bien? ¿Eso es normal? = > ¿Puedo crear una semilla inicial una vez, almacenar eso y luego reutilizar el mismo valor semilla cada vez que se emita un voto? O sería un riesgo de seguridad.

¿Por qué necesito eso? Mi requisito funcional es un poco diferente que con el hashing de contraseña normal. Cuando verifique una contraseña con hash, sabrá dónde buscar: ¿ese valor de hash específico (en ese usuario) se ajusta a la contraseña proporcionada? Mi requerimiento es diferente: el usuario tiene una contraseña. Cuando esta contraseña está en hash, es el valor de hash contenido en una lista de valores de hash.

¿Cómo puedo implementar esto?

    
pregunta Robert 10.03.2017 - 11:58
fuente

2 respuestas

2

No deberías hacer públicas las contraseñas de hash de tus usuarios, incluso si se hicieron con un algoritmo fuerte como bcrypt. Un atacante podría descargarlos fácilmente y aplicarles fuerza bruta, y recuperar algunas de las contraseñas.

La "semilla" de bcrypt es la sal que se usa para proteger contra los ataques de la mesa del arco iris. Una sal DEBE ser única, por lo que usar la misma sal para cada hash es una muy mala idea.

Debería consultar esta pregunta que enfrenta el mismo problema que usted y ya tiene algunas respuestas. .

    
respondido por el Benoit Esnard 10.03.2017 - 13:24
fuente
0
  

El backend crea un valor HASH de la contraseña del usuario. Y solo ese valor hash se almacena con la boleta.

Tienes un problema XY . Lo que quiere preguntar es: ¿Cómo puede un usuario verificar su voto sin que yo pueda decir qué voto les pertenece?

Lo que usted hace para eso es proporcionarles un nonce en el momento de la votación que no está almacenado con la cuenta. Registran su nonce al votar y pueden usarlo para validar el voto.

    
respondido por el Jeff Ferland 10.03.2017 - 22:02
fuente

Lea otras preguntas en las etiquetas