Acerca de password_hash () en PHP y almacenar (parte de) su sal fuera de la base de datos

1

Entonces, aprendí que lo nuevo en PHP 5.5 es password-hash () que funciona de manera muy parecida a crypt (). Lo que es más seguro (más lento) que md5 () o sha1 (). La cadena de resultados es algo + hash + salt, que se puede pasar como está a password-Verify () para verificar la contraseña. Hasta ahora entiendo cómo funciona.

Algunas preguntas del día del juicio final que quedan:

Q1) ¿Cuál es el nombre del formato de resultado / protocolo / convención?

P2) Sin embargo, lo que no obtengo es que toda la sal está incluida en la base de datos. Si es un badguy® donde obtener estos, tiene todas las partes del rompecabezas. En el pasado, aprendí a poner (parte de) la sal fuera de la base de datos: en la fuente, incluso basándola en los valores de RAM / sistema / hardware, por lo que ni siquiera está en el disco. ¿Por qué no se facilita esto, o cómo debo hacerlo? Por supuesto, podría hacer un hash doble con una sal diferente, ¿o hay una mejor manera?

P3) Además, en la mentalidad del día del juicio final que requiere la seguridad, creo que el único punto de falla password_hash () será un objetivo de alto valor, y podría facilitar los ataques MITM mucho más fácilmente que la cripta más autocontenida ( ). Me imagino que escribir un "mal" algo y establecerlo como PASSWORD_DEFAULT algo sería más fácil que alterar crypt (). Sin embargo, no he buscado en el código / módulos de back-end de PHP, solo estoy especulando.

Consideraciones bienvenidas. La respuesta aceptada será la que obtenga el mayor número de votos / censo para las preguntas 2/3 en un plazo máximo de una semana y tenga la pregunta 1 verificable correcta.

    
pregunta Barry Staes 04.02.2014 - 09:12
fuente

1 respuesta

6
  

¿Cuál es el nombre del formato de resultado / protocolo / convención?

password_hash() usa el algoritmo bcrypt .

  

PASSWORD_DEFAULT: use el algoritmo bcrypt (predeterminado a partir de PHP 5.5.0). Tenga en cuenta que esta constante está diseñada para cambiar con el tiempo a medida que se agregan algoritmos nuevos y más sólidos a PHP. Por esa razón, la longitud del resultado de usar este identificador puede cambiar con el tiempo. Por lo tanto, se recomienda almacenar el resultado en una columna de la base de datos que pueda expandirse más allá de 60 caracteres (255 caracteres sería una buena opción).

Fuente: enlace

  

P2) Sin embargo, lo que no obtengo es que toda la sal está incluida en la base de datos. Si es un badguy® donde obtener estos, él tiene todas las partes del rompecabezas. En el pasado, aprendí a poner (parte de) la sal fuera de la base de datos: en la fuente, incluso basándola en los valores de RAM / sistema / hardware, por lo que ni siquiera está en el disco. ¿Por qué no se facilita esto, o cómo debo hacerlo? Por supuesto, podría hacer un hash doble con una sal diferente, ¿o hay una mejor manera?

El único requisito para una sal es que sea globalmente único. No hay que mantenerlo en secreto. password_hash() lo cuida por ti. No hagas nada lujoso y estúpido. Consulte: ¿Cómo almacenar sal?

  

P3) Además, en la mentalidad del día del juicio final que requiere la seguridad, creo que el único punto de falla password_hash () será un objetivo de alto valor, y podría facilitar los ataques MITM mucho más fácilmente que la cripta más autocontenida ( ). Me imagino que escribir un "mal" algo y establecerlo como PASSWORD_DEFAULT algo sería más fácil que alterar crypt (). Sin embargo, no he buscado en el código / módulos de back-end de PHP, solo estoy especulando.

¿Qué? MITM tiene literalmente NADA que ver con esto. El hashing se debe hacer en el servidor. Si un atacante puede modificar archivos en su servidor, ya puede hacer lo que quiera.

    
respondido por el Ayrx 04.02.2014 - 09:19
fuente

Lea otras preguntas en las etiquetas