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.