encryption - password - hash contraseñas php
Frase de contraseña, sal y IV, ¿necesito todos estos? (3)
Lo primero es lo primero: Rijndael no tiene una "contraseña" en el modo CBC. Rijndael en modo CBC toma un búfer para cifrar o descifrar, una clave y un IV.
Una "sal" se usa generalmente para encriptar contraseñas. La sal se agrega a la contraseña cifrada y almacenada con el valor encriptado. Esto evita que alguien construya un diccionario de cómo cifran todas las contraseñas, necesita construir un diccionario de cómo cifran todas las contraseñas para todas las sales. Eso fue realmente posible con el viejo algoritmo de encriptación de contraseña de Unix, que solo usaba una sal de 12 bits. (Aumentó el factor de trabajo en 4096). Con una sal de 128 bits no es posible.
Alguien puede hacer un ataque de fuerza bruta contra una contraseña específica, por supuesto, siempre que puedan recuperar la contraseña encriptada.
Sin embargo, tiene una vía intravenosa, que hace más o menos lo mismo que una sal. No necesitas ambos. O, mejor dicho, el IV es tu sal.
Por cierto, en estos días llamamos "Rijndael" AES.
Si estoy usando el modo CBC de Rijndael, no tengo idea de por qué necesitaríamos sal. Mi comprensión es incluso si las personas conocen la contraseña, pero él no puede obtener los datos sin IV. Entonces, desde mi punto de vista, la contraseña + IV parece ser lo suficientemente segura.
¿Me sale algo mal?
Sí, necesitas todas estas cosas.
Salt (y un "recuento de iteraciones") se utiliza para derivar una clave de la contraseña. Consulte PKCS # 5 para más información. El recuento de sal e iteración utilizado para la derivación de clave no tiene que ser secreto. La sal debe ser impredecible, sin embargo, y se elige mejor al azar.
El modo CBC requiere un vector de inicialización. Este es un bloque de datos aleatorios producidos para cada mensaje por un generador de números aleatorios criptográficos. Sirve como el bloque inicial ficticio de texto cifrado. Al igual que la sal de derivación de clave, no tiene que mantenerse en secreto, y generalmente se transmite junto con el texto de cifrado.
La contraseña y las claves derivadas de ella deben mantenerse en secreto. Incluso si un atacante tiene los parámetros para la derivación de claves y el cifrado, y el texto cifrado, no puede hacer nada sin la clave.
Actualizar:
Las contraseñas no se seleccionan al azar; algunas contraseñas son mucho más probables que otras. Por lo tanto, en lugar de generar todas las contraseñas posibles de una longitud determinada (búsqueda exhaustiva de fuerza bruta), los atacantes mantienen una lista de contraseñas, ordenadas por una probabilidad decreciente.
Derivar una clave de cifrado de una contraseña es relativamente lento (debido a la iteración del algoritmo de derivación de clave). Derivar claves para unos pocos millones de contraseñas podría llevar meses. Esto motivaría a un atacante a obtener las claves de su lista de contraseñas más probables una vez y almacenar los resultados. Con esa lista, puede rápidamente descifrar con cada clave de su lista, en lugar de pasar meses de tiempo de cálculo para derivar las claves de nuevo.
Sin embargo, cada pedacito de sal duplica el espacio requerido para almacenar la clave derivada, y el tiempo que toma derivar claves para cada una de sus contraseñas probables. Algunos bytes de sal, y rápidamente se vuelve inviable crear y almacenar dicha lista.
La sal es necesaria para evitar ataques de pre-cálculo.
Un IV (o nonce con modos de contador) hace que el mismo texto simple produzca diferentes textos de cifrado. Evita que un atacante explote patrones en el texto plano para obtener información de un conjunto de mensajes cifrados.
Se necesita un vector de inicialización para ocultar patrones en los mensajes.
Una sirve para mejorar la seguridad de la clave, la otra mejora la seguridad de cada mensaje cifrado con esa clave. Ambos son necesarios juntos.
Una salt generalmente se usa cuando se usa un algoritmo hash . Rijndael no es un hash, sino un algoritmo de encriptación bidireccional. Ergo, una sal no es necesariamente necesaria para encriptar los datos. Dicho esto, un hash salado de una contraseña puede usarse como clave para encriptar datos. Para lo que está buscando, es posible que desee ver criptosistemas híbridos .
La clave se debe considerar privada y no se debe transmitir con sus datos encriptados mientras que la IV se puede transmitir con los datos encriptados.