¿Está eliminando / agregando caracteres de la contraseña de usuario antes de hash para ocultarlo para siempre?

1

Tuve la idea de ocultar permanentemente la contraseña del usuario al exigir una longitud mínima y luego eliminar ciertos caracteres. Por ejemplo, si la contraseña de usuario es secret123 , el sistema la reducirá a ecrt12 , le agregará caracteres aleatorios como ecrt12!@#$%^&* antes de realizar hashing, agregar sal, etc. y luego se almacenará en la base de datos.

La concesión de todas las prácticas comunes también se usó como:

  • sal única por usuario
  • sistema de pimienta
  • bcrypt / scrypt o lo que sea lo último, el mejor crypto algo disponible

Para resumir en código:

$hash = hash($modifiedpassword.$uniquesalt.$systempepper) // iterado a 1000s.

En el caso de que un atacante logre revertir todos los hashes, la mejor información que podrían recuperar es ecrt12!@#$%^&* y no el secret123 original. Incluso si piratean el código del sistema, nunca sabrán qué caracteres fueron eliminados.

Mi pregunta ahora es como expertos en seguridad, ¿recomendaría esta práctica de eliminar / agregar la contraseña de usuario original?

    
pregunta IMB 29.04.2012 - 11:57
fuente

1 respuesta

5

¿Cómo garantizaría que se usen los "mismos" caracteres aleatorios cada vez que el mismo usuario ingrese su contraseña? Solo puede garantizar que si los escribe (o si los genera de manera determinista), por lo que "! @ # $% ^ & *" en su "contraseña" es en realidad otra parte de la sal.

Esto lo deja en una situación en la que convirtió la contraseña del usuario de "secret123" a la expresión regular "^ .ecret12. $", lo que reduce la complejidad efectiva de la contraseña de 9 caracteres a 7 caracteres. Se permitirá el ingreso de un atacante que intente "pecret129".

Para responder la pregunta directamente y pedir prestada una cita de ewanm89 a continuación: no. No recomiendo hacer eso.

    
respondido por el user185 29.04.2012 - 12:16
fuente

Lea otras preguntas en las etiquetas