Estoy trabajando en una aplicación que se ejecutará en un televisor de usuarios y tiene una aplicación móvil complementaria.
Quería presentar un código QR a mis usuarios desde la aplicación de TV, que luego es escaneada por la cámara de la aplicación móvil complementaria. Originalmente, estaba pensando en codificar un UUID v4 en el código QR y usarlo como un secreto compartido entre las dos aplicaciones. Este valor identificará de forma única ese dispositivo de TV en particular.
Una vez que se hayan intercambiado los secretos compartidos, las aplicaciones se conectarán a mi servidor a través de sockets web y escucharán / emitirán eventos para ese UUID. No habría otras contraseñas o nombres de usuario. Esta comunicación de socket web se haría usando WSS / TLS.
Este servicio es un sistema de transporte de mensajes muy simple entre la aplicación móvil y la aplicación de TV. No hay una base de datos, ningún usuario, etc. Todos los mensajes son directos.
¿Qué tan mala es una idea? Si el secreto compartido es casi imposible de adivinar, a primera vista me parece bastante seguro. ¿Hay alguna forma de hacerlo más seguro?
Una de las ideas que tuve fue utilizar alguna forma de TOTP . Ese sistema también se basa en un secreto compartido, pero utiliza un componente basado en el tiempo para modificar el secreto antes de intercambiar / comparar. Esto evitaría la exposición de mi verdadero secreto y evitaría los ataques de repetición. Sin embargo, para mi aplicación, necesitaría una ventana de tiempo mucho más grande que el TOPT tradicional, ya que me gustaría que esta clave fuera válida por más de unos pocos segundos.