Seguridad de las claves de cifrado

0

Estoy tratando de descubrir la mejor manera de cifrar las contraseñas para un sitio de foros en el que estoy trabajando.

Decidí usar un cifrado como el pez globo. Según tengo entendido, tiene una clave y el texto que desea cifrar. El cifrado luego usa la clave para cifrar el texto. Cuando un usuario crea una cuenta, planeo generar un UUID para ellos. Esa será la clave principal cuando se coloquen en la base de datos con su contraseña cifrada.

Ahora, no pienso permitir que los usuarios puedan averiguar su UUID, ya que solo se almacenará en las sesiones de PHP. Pero, digamos, de alguna manera alguien descubre el UUID del usuario.

¿Entonces sería posible descifrar su contraseña? ¿Podrían incluso encontrar el UUID de una sesión php? Si hay un problema con este concepto, ¿debo generar una clave para usarla y almacenarla en la base de datos con su UUID y contraseña?

Lo siento si la pregunta es confusa, no soy muy bueno para poner mis pensamientos en palabras. Gracias de antemano.

    
pregunta bcxavier92 28.07.2015 - 21:49
fuente

2 respuestas

5

Bueno, entonces usemos la terminología apropiada.

No quieres cifrar las contraseñas. Desea la contraseña hash . Esto es algo completamente diferente. Lea esto . Hay una buena función de hashing de contraseña llamada "bcrypt" que se deriva internamente de un algoritmo de cifrado llamado "Blowfish"; de donde surgió mucha confusión con algunas plataformas de software que dicen hacer "cifrado de contraseña con Blowfish", cuando realmente significan "hashing de contraseña con bcrypt".

Ahora hay también una sobrecarga en el significado de clave . En la criptografía, una "clave" es una pieza de datos secretos que se utiliza como parte de un algoritmo criptográfico. El hash de contraseña no utiliza ninguna clave (precisamente porque no es encriptación , a pesar del uso indebido de la terminología). En las bases de datos, una "clave" es un valor que se usa para hacer referencia a una fila en alguna tabla. Esto no es en absoluto el mismo tipo de clave.

UUID son valores que deben ser únicos (en todo el mundo), pero eso no significa que no puedan ser adivinados. Solo que cuando genera UUID "correctamente", no obtendrá el mismo valor UUID que cualquier otra persona en el mundo que también genere UUID correctamente. Por lo tanto, UUID puede ser bueno para las claves de la base de datos (aunque la singularidad de mundial es algo excesivo), pero no para las claves de cifrado (pero el hashing de contraseñas no necesita clave). UUID puede ser bueno para sales , un componente del hashing de contraseñas.

    
respondido por el Thomas Pornin 28.07.2015 - 22:02
fuente
1

No desea cifrar las contraseñas, ya que con el cifrado, la clave de cifrado y los datos cifrados pueden producir los datos no cifrados. Si alguien obtiene acceso a su almacén de datos, puede volver a crear la contraseña original. Con un hash, no almacena suficiente información para recrear los datos originales. Todo lo que puede hacer es verificar que los datos de entrada produzcan el mismo valor hash.

    
respondido por el Philip Tinney 28.07.2015 - 22:55
fuente

Lea otras preguntas en las etiquetas