Condivisione di una JWT tra dispositivi vicini l'uno all'altro

1

Configurazione:

  • iPhone (assumiamo 6 e più recenti per questa domanda)
  • Raspberry Pi 2.

Il Raspberry esegue un servizio web REST che viene interrogato dall'iPhone. Il servizio Web utilizza token Web JSON per l'autenticazione e l'autorizzazione. Sto cercando di trovare un modo più sicuro possibile per l'iPhone per ottenere un JWT dal Raspberry senza troppi problemi per l'utente, ma la sicurezza è più importante della facilità d'uso.

I due dispositivi opereranno in stretta prossimità l'uno dell'altro, quindi lo scambio di token su un canale fisicamente vincolato sembra una buona soluzione in quanto un attaccante deve essere fisicamente presente prima (ad esempio, lasciando dietro di sé un dispositivo che può annusare e trasmettere le informazioni utilizzando un canale diverso) o durante lo scambio di token.

Poiché l'iPhone non offre agli sviluppatori l'accesso al chip NFC, questa non è un'opzione (ho anche letto altrove che è vulnerabile agli attacchi MITM fino a un raggio di 10 metri).

Il confronto numerico Bluetooth sembra un'opzione possibile in quanto è stato sicuro e sicuro (almeno per la versione 2.1).

Q1: è ancora valido? Il confronto numerico Bluetooth può essere considerato sicuro in Bluetooth 4.x?

Dover accoppiare i dispositivi non è l'ideale, perché un iPhone interagirà solo con il Raspberry per alcuni giorni e sarà sostituito da un nuovo iPhone che interagisce con lo stesso Raspberry Pi. Vorrei evitare di dover pulire quotidianamente l'elenco dei dispositivi associati di Raspberry.

Ho pensato a una soluzione personalizzata in cui avrei generato un valore casuale (sicuro) che sarebbe stato visualizzato su un display collegato al Raspberry Pi. Questo sarebbe un token di breve durata che l'utente di iPhone inserirà manualmente e l'applicazione invierà una richiesta di autorizzazione al servizio web utilizzando questo valore. Il servizio web manterrebbe un timer per assicurarsi che il token di breve durata potesse essere scambiato per un JWT effettivo entro un breve lasso di tempo (diciamo 5-10 minuti) per prevenire attacchi di forza bruta. Possiamo supporre che un PKI possa essere utilizzato per impostare una connessione SSL tra Raspberry Pi e iPhone in modo tale che lo scambio del token di breve durata per un JWT di lunga durata venga eseguito in modo sicuro.

Q2: So che progettare soluzioni di sicurezza personalizzate è un'idea orribile e dovrebbe essere lasciata agli esperti di sicurezza. Tuttavia, la strategia proposta sembra molto semplice, ma deve essere imperfetta e vorrei sapere perché è difettosa.

    
posta Janus Varmarken 22.09.2016 - 20:33
fonte

1 risposta

2

Rispondi a Q2:

Non stai davvero inventando qualcosa qui per quanto posso vedere. Stai utilizzando un generatore di codici temporali molto semplice.

Generare il codice localmente sul Pi, mantenerlo valido per un periodo di tempo limitato (alcuni secondi forse), richiedere che venga immesso nel telefono e una volta utilizzato lo annulla immediatamente.

Usa il Pi come un AP Wi-Fi locale con la sicurezza appropriata e dovrebbe essere più che sufficiente per l'ingresso e l'uscita rapida di cui hai bisogno. Anche se qualcuno accede al Wi-Fi, purché il resto sia protetto con HTTPS e OTP, dovrebbe andare bene.

Per risparmiarti un carico di lavoro ed evitare il problema dell'invenzione locale, usa un set standard di librerie sul Pi. Node.JS con ExpressJS e moduli standard come Passport, Casco, Lusca o simili possono gestire la sicurezza di login e app. Un certificato generato localmente dovrebbe essere sufficiente per HTTPS.

Sembra un approccio semplice, standard e ragionevolmente sicuro.

    
risposta data 22.09.2016 - 21:33
fonte

Leggi altre domande sui tag