Solo una idea que tuve, y estoy seguro de que hay mucho material sobre este tema, así que estoy buscando un indicador de dónde puedo encontrar más información.
Mi idea es esta ...
Al almacenar una contraseña en una base de datos, es común almacenarla como un hash. Esto es débil contra las tablas del arco iris, que se mitiga agregando sal, y también es débil contra los ataques de fuerza bruta.
Estoy pensando que es posible almacenar el hash, modificado con una pequeña cadena aleatoria ...
Usando md5
mypass -> 2b643a4d56186389d84dbb3a9a483e99
Si tiene el hash, la contraseña se puede encontrar simplemente copiando todas las contraseñas posibles y comparando el hash, así que ...
// append a random 3 character string of a-z characters, we can use "xth" for this example
mypassxth -> 02a2247c788681af6ce1bb5fa66dd4c0
La cadena aleatoria nunca se almacena, nunca se comparte y solo reside en la memoria del servidor en el momento de almacenar el hash.
Esto hace que la búsqueda de contraseñas sea menos eficiente, ya que el servidor debe verificar cualquier solicitud entrante mediante el proceso de forzado de la entrada parcialmente completa contra el hash almacenado, lo que en este caso significaría un límite superior de 17576 (26 ^ 3) controles para validar la contraseña.
También haría que el ataque de fuerza bruta sea mucho más difícil en este caso, un límite superior (suponiendo solo a-z) de 5429503678976 (26 ^ 9) en lugar de 308915776 (26 ^ 6).
Supongo que es como usar una sal muy pequeña, que no se almacena en ningún lugar, lo que requiere un forzamiento brutal durante las operaciones de búsqueda.
Suponiendo que no me esté perdiendo por completo algo obvio que haga que esto no funcione, ¿puede alguien decirme cómo se llama este concepto o señalarme algún lugar donde pueda leer sobre él?