Leí esta interesante pregunta en por qué improvisar tu propia función Hash a partir de las funciones hash existentes es malo . Sin embargo, esto se centra específicamente en "mezclar" funciones de hash existentes. ¿Qué pasa si, por ejemplo, modifico los turnos por turno de la función hash MD5? Ejemplo:
Cambia las rondas a partir de ahora
s[ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 }
s[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 }
s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 }
s[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 }
Mis propias rondas de turnos ligeramente ajustadas
s[ 0..15] := { 5, 14, 19, 22, 5, 14, 19, 22, 5, 14, 19, 22, 5, 14, 19, 22 }
s[16..31] := { 6, 12, 14, 21, 6, 12, 14, 21, 6, 12, 14, 21, 6, 12, 14, 21 }
s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 }
s[48..63] := { 7, 9, 11, 17, 7, 9, 11, 17, 7, 9, 11, 17, 7, 9, 11, 17 }
Estos cambios cambian drásticamente el resultado de mi 'propia' función hash. Este es solo un pequeño ejemplo para cambiar. Mi razonamiento detrás de esto es que temporalmente evita los ataques de Rainbow. Si tengo algunos usuarios descuidados con contraseñas como thisisnopassword
, pandabear
& 12346
estarían ligeramente más seguros después de que mi base de datos fuera hackeada ya que no existen tablas Rainbow para "mi" hash.
Por cierto, elegí las cantidades de turno por turno porque no pude encontrar una razón clara sobre por qué se eligieron específicamente, consulte this question.