¿Suena esta idea de TOTP de PHP (contraseña de una sola vez basada en el tiempo)?

2

Descargo de responsabilidad: no estoy muy familiarizado con las técnicas de seguridad en general.

El problema: cree rápidamente muchos archivos pequeños en el servidor desde un script de bash.

Solía usar scp (copia segura) para crear esos archivos, pero me resultó extremadamente lento con la operación de inicio de sesión necesaria, incluso cuando utilizo una clave compartida a través de SSH.

Así que pensé crear un script bash y un script php que compartan una clave para acelerar la operación haciendo solo lo esencial.

Bash del cliente envía una contraseña final, el nombre del archivo a crear, el contenido de ese archivo y el segundo UTC actual.

En el cliente, la contraseña final se calcula de la siguiente manera:

#pseudocode
final password = sha256( ${currentDateTime}${sharedKey}${remoteFilename}${content} )

La solicitud se publica en el servidor mediante el comando CURL.

El PHP del servidor ahora tiene la contraseña del cliente, el nombre de archivo para crear, el contenido y el segundo UTC a partir del cual comenzó la solicitud. El servidor calcula la hora UTC completa yendo al segundo más cercano al pasado que coincide con el segundo UTC enviado por el cliente. Por ejemplo, si el segundo envío por el cliente = 12 y la hora UTC del servidor es 13:42:25, entonces el servidor utiliza 13:42:12.

El servidor php genera su propia contraseña "real" (también conocida como la contraseña que el cliente DEBE usar para esa hora UTC (13:42:12 en este ejemplo), ese nombre de archivo y contenido, basado en esa clave compartida:

$realPasswd = hash('sha256', $timeString.$sharedKey.$filename.$content);

Luego, el servidor verifica $realPasswd contra la contraseña enviada por el cliente (la llamada contraseña final a la que me referí anteriormente)

En mi entendimiento noobish, esta técnica debería ser bastante segura, ya que, aunque un atacante haya olfateado toda la solicitud, solo podrá enviar exactamente la misma solicitud y solo durante 1 minuto (porque la contraseña final cambiará para el siguiente minuto UTC).

No podrá modificar el nombre de archivo remoto o el contenido y podrá crear solicitudes aceptables por parte del servidor solo durante 1 minuto.

¿Cuál es tu opinión sobre esto?

    
pregunta hytromo 06.12.2014 - 11:31
fuente

1 respuesta

2

No está claro si el servidor ya conoce tanto el nombre del archivo como el contenido del archivo que se crea a una hora UTC determinada.

  1. Si estos datos ya son conocidos, un atacante podría adivinarlos o recuperarlos, y luego construir un ataque probando las 60 "contraseñas finales" posibles.
  2. Si estos datos aún no se conocen y se envían dentro de la misma solicitud, un atacante podría crear un archivo arbitrario en el servidor creando una nueva solicitud, que contenga nombre de archivo, contenido, segundo UTC (que puede forzarse brutalmente en menos). más de 60 intentos) y la contraseña correspondiente.
respondido por el A. Darwin 22.02.2016 - 20:29
fuente

Lea otras preguntas en las etiquetas