Alcuni computer della mia università bloccano l'applicazione keepass che uso come gestore di password. Sto pensando di creare una piccola applicazione web + app per Android che mi consenta di copiare in modo sicuro una stringa dal mio telefono al mio computer. Dal momento che più persone avranno questo problema, mi piacerebbe che sia l'applicazione web che l'app fosse disponibile per tutti. Ecco perché dovrò stabilire un qualche tipo di collegamento tra una sessione sull'applicazione web e un'istanza dell'app per Android. Ho pensato a quanto segue, ispirato al sistema di Firefox Sync:
- L'utente accede all'app Web e ottiene un codice pin univoco N A che è collegato al suo ID di sessione
- L'utente inserisce N A nell'app e ottiene un nuovo codice pin casuale N B (l'app invia N A al server e riceve N B )
- L'utente inserisce N B nell'applicazione web
- Il server verifica che N B immesso nell'applicazione Web sia il nonce che è stato inviato all'app che ha inviato N A . Sto anche pensando di verificare che l'app Web e l'app stiano utilizzando lo stesso indirizzo IP, sebbene ciò possa causare problemi con le reti cellulari.
Sia l'app sia l'app Web sono identificate in modo univoco da un ID di sessione che viene inviato insieme a ogni richiesta.
Dopo questo schema di autenticazione, viene stabilito un collegamento valido per così tanto tempo. Ovviamente anche i nonces utilizzati nello schema vengono tenuti sotto controllo dal server e hanno una scadenza. Naturalmente, tutte le comunicazioni (app - server, server - web app) vengono eseguite su un canale criptato.
Ora l'app può inviare una stringa al server, che quindi la comunica all'app Web a cui è collegata. L'app web non mostrerebbe la stringa, ovviamente, ma semplicemente la copierà negli appunti quando l'utente lo chiederà. Ciò riduce il rischio che le persone guardino da dietro le spalle.
Questo schema è sicuro? Ciò di cui sono principalmente preoccupato / mi chiedo:
-
Session rubare: questo sarebbe naturalmente più difficile quando anche IP viene controllato, ma potrebbe comunque succedere. Quando utilizzo HTTPS, correggo che l'unico modo in cui la sessione potrebbe essere rubata potrebbe essere l'utilizzo di un uomo nel browser o di un operatore telefonico? Questo sarebbe accettabile.
-
Come faccio a scegliere una lunghezza di bit per i nonces? Mi è sempre venuto in mente che Firefox utilizza codici pin incredibilmente brevi. La lunghezza del bit necessaria dipende dal numero di utenti che l'applicazione avrebbe (ad esempio, con 10.000 open nonces alla volta nel database, potrei immaginare che la lunghezza del bit debba essere maggiore di 10 open nonces, per rendere la forza bruta attacca più duramente).
-
Anche l'utilizzo di un'app Web sul telefono (sia che si effettui una versione di invio o di ricezione dell'applicazione Web, sia che si effettui questa comunicazione bidirezionale) introduce ulteriori vulnerabilità di sicurezza (ad eccezione di man nel browser al telefono)?
-
Cose che non ho visto, ovviamente.
-
Sto reinventando la ruota?
Nota il requisito di non dover installare nulla sul computer; dovrebbe essere eseguito nel browser. Inoltre, preferirei non avere le mie password nel cloud come con LastPass. Le stringhe che vengono comunicate con la mia app verranno eliminate dopo che l'app web le avrà ricevute.