Copia-incolla sicura dal telefono al computer

3

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:

  1. L'utente accede all'app Web e ottiene un codice pin univoco N A che è collegato al suo ID di sessione
  2. 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 )
  3. L'utente inserisce N B nell'applicazione web
  4. 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.

posta Keelan 03.02.2015 - 19:19
fonte

2 risposte

2

So che questa non è una risposta diretta, ma secondo la tua richiesta nei commenti, la invio.

Invece di stampare il tuo protocollo, approfitta dei protocolli esistenti per fare ciò che ti serve. Le specifiche descrivono un protocollo basato sul web con crittografia e accesso limitato ai dati trasmessi da telefono a PC. Questo servizio web richiede disponibilità elevata e uptime.

Twitter può adattarsi al tuo conto. Configurare un account Twitter separato per questo scopo e comporre tweet protetti che contengano la password che si desidera passare dal telefono al punto finale. L'unica cosa che devi introdurre (forse! **) è una semplice crittografia simmetrica della password. Quindi, il tuo compito operativo è semplice:

  1. copia la password dal Keepass del telefono
  2. elaborare la password tramite crittografia
  3. invia il testo cifrato come tweet protetto a te stesso
  4. sul PC, cattura il testo cifrato e lo decrittografa
  5. incollare nell'applicazione finale come password

Con l'API di Twitter disponibile pubblicamente, puoi realizzare tutto questo in poche righe di codice Python.

** Tutta questa complessità dipende dalla necessità che la password venga trasmessa crittografata. Se utilizzi Twitter, il canale è crittografato (TLS) e se utilizzi tweet protetti, nessun altro può vedere il testo. Si potrebbe semplicemente inviare la password come testo in chiaro SE si determina che il rischio è accettabile. Se segui il percorso non crittografato, potrei suggerire che la tua password sia la più casuale possibile in modo che se il testo in chiaro fosse fuoriuscita, non sarebbe ovvio che ti stavi inviando le tue password (ad esempio non "thisIsMyBankPassword1!").

    
risposta data 03.02.2015 - 23:00
fonte
0

Ecco come lo farei. Fai in modo che l'app Web generi una coppia pubblica / privata (ad esempio DH). Mostra la chiave pubblica sullo schermo come codice QR, l'utente lo scansiona con il telefono. Da questo punto in poi, il telefono può inviare qualsiasi cosa all'app Web in modo sicuro.

    
risposta data 03.05.2016 - 04:11
fonte