¿La combinación de una contraseña con hash aumenta su seguridad?

1

Estoy creando una aplicación web y ahora estoy atascado para que el inicio de sesión sea seguro. Estoy pensando en agregar un salt a una contraseña ingresada por el usuario y luego hash. (md5 o sha por ejemplo) y luego reorganizaré los resultados.

por ejemplo:

$salt = "hello";
$password = "password";
$newpassword = md5($salt.$password); //lets assume the result is 1234567890

Reordenaré el orden del hash como intercambiar el primer y último carácter y luego el tercero y el tercero hasta el último.

el resultado se verá como:

0284567391

¿Esto hace que la contraseña sea más segura? Por favor, no sugiera algunas cosas de cifrado hardcore. Solo necesito algo que haga que las contraseñas sean seguras en lugar de tenerlas cifradas usando un algoritmo hash descifrado.

    
pregunta 29.11.2012 - 02:11
fuente

5 respuestas

11

La "combinación aleatoria" que pretende es conceptualmente un tipo de cifrado: aplica una convención secreta sobre el resultado. Esto cambia cualquier cosa a la seguridad solo si la convención se mantiene alejada de las miradas indiscretas del atacante: el atacante que acaba de saquear la base de datos de contraseñas con hash, y por lo tanto tuvo un amplio acceso a las partes internas de su servidor. Pero el servidor debe saber de la barajadura (ya que lo aplica). Por lo tanto, parece bastante improbable que tu barajador sea desconocido para el atacante. Conclusión: tu barajado probablemente no sea útil.

Lo que aumentaría la seguridad sería utilizar una función de hashing de contraseñas adecuada, que incluye una sal de forma criptográfica sana, y es adecuadamente lenta (es decir, se hace muy lenta a través de miles o incluso millones de iteraciones). Esto se llama bcrypt . Este tipo de cosas no deben ser improvisadas; los esquemas de cosecha propia rara vez son seguros (la mayoría son considerados seguros por su inventor, pero la realidad tiende a ser poco amable con los sueños de los inventores hechos a sí mismos, especialmente en áreas altamente técnicas donde no se puede probar el éxito, en particular la criptografía). / p>     

respondido por el Thomas Pornin 29.11.2012 - 02:50
fuente
5

Para hacer que el almacenamiento de su contraseña sea seguro, no debe usar MD5 ni ningún otro algoritmo hash rápido, en su lugar use una función de derivación de claves como BCrypt .

El problema con los algoritmos rápidos es que puede calcular 8 hash de Giga MD5 por segundo con hardware común ( en 2012 ). ¡Eso hace posible la fuerza bruta de un diccionario de inglés completo con aproximadamente 500000 palabras, en menos de un milisegundo!

Al barajar el valor hash resultante, agregas un secreto adicional al hash. Este secreto aumentará la seguridad todo el tiempo, ya que permanece en secreto. Mientras el atacante solo tenga acceso a la base de datos (inyección de SQL) puede ayudar, tan pronto como el atacante obtiene el control sobre el servidor (y su código), no hay ningún beneficio. Podría lograr lo mismo más fácilmente si agrega un pimiento a la contraseña antes de realizar el hashing.

BCrypt fue diseñado especialmente para hash de contraseñas, y por lo tanto es lento (necesita algo de tiempo de computación). Con un factor de costo, puede adaptar el tiempo necesario para el hardware futuro (y, por lo tanto, más rápido).

Usar BCrypt puede ser tan fácil como usar la función hash MD5. PHP 5.5 tendrá sus propias funciones password_hash() y password_verify() listas para simplificar esta tarea. También hay un paquete de compatibilidad para PHP 5.3 / 5.4 disponible, que se puede descargar en password_compat .

    
respondido por el martinstoeckli 29.11.2012 - 08:51
fuente
2

Si está buscando "más seguro", debe usar Blowfish o similar con la cripta (); función.

El intercambio de valores debería hacer que un hash simple como md5 sea más seguro, pero suponiendo que alguien ya haya robado sus hashes, ¿quién puede decir que aún no sabe que su aplicación intercambia caracteres en el hash? Luego, podrían desordenar sus hashes y romperlos fácilmente (asumiendo un hash como sha1 o md5) con una herramienta en línea.

tl; dr, use crypt (); en su lugar y recoger buenos algo y sales.

    
respondido por el Andrew Templeton 29.11.2012 - 02:16
fuente
1

Voy a hacer esto corto y dulce.

Primero, revisa este enlace: enlace

En segundo lugar, solo use PBKDF2 / bcrypt y una sal larga. Estarás a salvo con eso. Diseñar su propio tipo de manipulación, cifrado o hash casi nunca es una buena idea.

    
respondido por el JZeolla 29.11.2012 - 20:35
fuente
-4

¿Por qué no solo usar SHA1 o SHA255?

    
respondido por el Ian Atkin 29.11.2012 - 02:15
fuente

Lea otras preguntas en las etiquetas