Procedure ottimali per l'identificazione dei dispositivi mobili

1

Quando l'app mobile si connette al back-end e richiede i dati, il back-end dovrebbe essere sicuro che il richiedente sia uno che finge di essere. Pertanto, abbiamo bisogno di un modo per identificare in modo sicuro l'app su un dispositivo.

Durante la ricerca delle migliori pratiche sull'identificazione dei dispositivi mobili contro il back-end mobile, ho trovato una serie di soluzioni, dall'identificazione per ID del dispositivo all'uso di token di vita relativamente brevi (token OAuth2, token JWT o solo ID di sessione)

Ma tutti i metodi che ho trovato includono il trasferimento di alcune stringhe riutilizzabili (token) vulnerabili all'interceprion. Riutilizzabile significa che se qualcuno ha la stringa, lui / lei può usarla per agire per conto del dispositivo.

Anche oltre https, quando l'utente si trova in un ambiente chiuso (ad esempio, rete aziendale), potrebbe essere richiesto di installare un certificato aggiuntivo e quella stringa potrebbe essere intercettata e utilizzata per l'accesso non autorizzato ai dati dell'utente ("attacco mitm" ).

Posso pensare ai seguenti methos per evitare questo attacco, mantenendo le cose ancora relativamente semplici:

  1. L'app mobile, su un dispositivo, durante la chiamata iniziale "registrazione" genera una coppia di chiavi pubblica / privata. La chiave privata viene conservata in modo sicuro su un dispositivo.
  2. La chiave pubblica viene inviata al back-end e archiviata accanto all'ID del dispositivo (chiarimento: viene eseguita una volta nella vita di un dispositivo identificato, prima di qualsiasi altra azione di autorizzazione che consente di agire per conto dell'utente)
  3. Su ogni richiesta, il dispositivo invia una breve stringa "casuale" (GUID o ora corrente o qualcosa ottenuto dal back-end) e questa stringa, crittografata con una chiave privata
  4. Il back-end verifica se la stringa "casuale" è abbastanza casuale (non utilizzata prima) e se i dati crittografati possono essere decifrati con la chiave pubblica in quella stringa "casuale". E, in caso affermativo, conferma l'identità del dispositivo.

Questo sembra abbastanza semplice (sia iOS che Android hanno un'infrastruttura per PKI).

E ancora sicuro (non vulnerabile all'attacco del mitm, impossibile da imitare).

La domanda è: perché non è ampiamente utilizzato (o almeno ampiamente discusso)?

È qualcosa di standard, che non so come nominare correttamente?

È noto che è una cattiva pratica per qualche motivo?

    
posta Dmitry Andrievsky 03.01.2018 - 11:24
fonte

0 risposte

Leggi altre domande sui tag