Lo que este artículo podría haber significado es que poner la sal en algún lugar en el medio de la contraseña supuestamente aumenta la posibilidad de ser descifrado por un ataque de diccionario o por fuerza bruta, porque las reglas para componer realmente el mismo hash no se pudieron implementar en su contraseña cracker de elección. En realidad, esto probablemente sea un completo disparate.
¿Cómo funciona esto?
Si toma un programa como John the Ripper , aliméntelo con su archivo de contraseña como tal (no la sintaxis exacta ):
username:password:salt
Luego pasas el formato como un parámetro con el que crees que se genera el hash. Esto puede ser:
md5(pass + salt)
md5(salt + pass)
md5(md5(pass) + md5(salt))
md5(pass + md5(salt))
md5(md5(...(salt + pass + salt)...))
...
and whatnot.
John the Ripper viene con un conjunto prefabricado de aproximadamente 16 subformatos que puedes elegir.
Probablemente, poner la sal en algún lugar de la contraseña se vería así:
md5(password.substring(0,4) + salt + password.substring(4,end))
Entonces, usar una técnica como esta requiere que escribas un pequeño plugin para John al principio, antes de que puedas comenzar a descifrar (lo que no debería ser un problema).
Además, usted, como atacante, puede tener una lista de hashes + sales de origen desconocido y no tiene conocimiento de la forma en que se compone un hash. Esto es raramente el caso. Si usted, como atacante, logra extraer hashes y sales de una base de datos, probablemente encuentre la forma de extraer el algoritmo de hashing de contraseñas del sitio web o simplemente cree una nueva cuenta con una contraseña conocida, extraiga el hash y la sal para y fuerza bruta el algoritmo que se utilizó para componer el hash final (que puede ser más o menos desafiante).
En general, es casi completamente arbitrario dónde se pone la sal y si se repite o no el algoritmo hash diez mil veces o no. Esto NO proporciona una cantidad significativa de seguridad.
Si desea seguridad, puede hacerlo mejor utilizando un mejor algoritmo de hash o bcrypt o algo más que sea computacionalmente costoso.