Sto lavorando a un'app che verrà eseguita su una TV degli utenti e con un'app mobile companion.
Volevo presentare un codice QR ai miei utenti dall'app TV, che viene poi scansionata dalla videocamera dell'app compagno. Inizialmente pensavo di codificare un UUID v4 nel codice QR e usarlo come segreto condiviso tra le due app. Questo valore identifica in modo univoco quel particolare dispositivo TV.
Una volta che i segreti condivisi sono stati scambiati, le app si collegano al mio server tramite prese web e ascoltano / emettono eventi per quell'UUID. Non ci sarebbero altre password o nomi utente. Questa comunicazione sul socket Web verrebbe eseguita utilizzando WSS / TLS.
Questo servizio è un sistema di trasporto di messaggi molto semplice tra l'app mobile e l'app TV. Non ci sono database, nessun utente, ecc. Tutti i messaggi passano direttamente.
Quanto pessima idea è questa? Se il segreto condiviso è quasi impossibile da indovinare, mi sembra abbastanza sicuro a prima vista. C'è comunque potrei renderlo più sicuro?
Un'idea che avevo era di usare qualche forma di TOTP . Quel sistema si basa anche su un segreto condiviso, ma usa un componente basato sul tempo per modificare il segreto prima di scambiare / confrontare. Ciò impedirebbe l'esposizione del mio vero segreto e impedirebbe attacchi di replay. Tuttavia, per la mia applicazione, avrei bisogno di una finestra temporale molto più ampia del tradizionale TOPT, in quanto vorrei che questa chiave fosse valida per più di qualche secondo.