hashing key con una marca de tiempo?

1

Estoy trabajando en un proyecto en el que el desarrollador inicial decidió que sería una buena idea disfrazar las claves de API mediante la combinación de ellas junto con el minuto actual, y otorgarles a los clientes tres ventana de minutos para enviar ese valor.

Así lo hace el cliente:

headers.authKey = md5(ACTUAL_API_KEY + current_minute())

Y el servidor hace:

// allow for one-minute-late and one-minute-early hashes
for (i in [-1, 0, 1]) :
  if headers.authKey == md5(ACTUAL_API_KEY + (current_minute()+i))
    valid = true

Esto me parece un teatro de seguridad. Supongo que podría considerar la idea de que disfrazar el valor "por el cable" podría ser una buena idea, pero no estoy seguro de que exista un beneficio práctico real para eso, y parece que podría estar complicando las cosas más que necesitan ser También ... md5.

    
pregunta throwawayyyyyyyyyyyy 14.02.2018 - 22:11
fuente

2 respuestas

3

Esto no es completamente inútil. Proporciona un poco de protección: un atacante que roba el valor de authKey para alguna sesión solo puede explotarlo en una ventana de tiempo muy estrecha. De hecho, lo que su compañero de trabajo está haciendo se parece mucho a TOTP : el sistema familiar de seis Códigos de dígitos utilizados como segundo factor de autenticación.

Aquí hay un escenario: un atacante logra robar archivos de registro que revelan los valores de authKey . Sin la marca de tiempo introducida en la mezcla, solo podrían reutilizar ese valor, posiblemente de forma indefinida.

    
respondido por el Luis Casillas 15.02.2018 - 01:36
fuente
0

El teatro de seguridad es correcto. Si necesita ocultarse "por el cable", debe comunicarse a través de https o un túnel cifrado estándar similar. Cualquiera que pueda olfatear la "clave" md5 sobre el cable puede enviarla dentro de la ventana de los minutos.

Y si bien es razonable desestimar a md5 por varias razones, si asumes que hubo una razón legítima para hacer lo que hizo el desarrollador, md5 no es el problema. La debilidad de md5 es la capacidad de generar colisiones en hashes. Como un hash para ocultar algunos datos, está bien. Pero como ha señalado, ocultar datos no le compra nada en este caso.

La respuesta correcta es comunicar la clave api a través de un canal seguro (por ejemplo, TLS). Si necesita el factor de límite de tiempo, deberá invalidar y volver a emitir nuevas claves de API, solo válidas durante un período de tiempo fijo.

    
respondido por el JesseM 14.02.2018 - 23:22
fuente

Lea otras preguntas en las etiquetas