Scegliere il modo giusto per proteggere l'accesso al server tramite socket

0

Ho un'applicazione in esecuzione su un server, che ha un socket esposto a Internet per comunicare con il client che è / sono le applicazioni su un telefono. Come si fa a proteggere correttamente l'accesso al server, se non si è certi di poter fidarsi del client per memorizzare i segreti?

Ciò che intendo per non fidarsi è che, ad esempio, se non desidero memorizzare la chiave di crittografia simmetrica sul dispositivo, e non sono sicuro che la crittografia dei messaggi con la chiave pubblica RSA sia abbastanza buona dato che qualcuno potrebbe solo ripeti il messaggio al server ..

TSL d'altra parte sembra essere orientato verso il cliente che riconosce se può fidarsi di qualche server ..

Quale sarebbe un buon modo per iniziare a implementare un accesso sicuro dal client verso il server, e il server per poter autenticare il client?

    
posta julumme 14.08.2014 - 16:51
fonte

1 risposta

1

Autenticazione riguarda il riconoscimento affidabile di chi si trova all'altra estremità. Dal momento che, dal server, "vedi" il client solo attraverso i pacchetti di rete, e dato che tutti possono acquistare lo stesso tipo di hardware, potresti sperare di autenticare correttamente un client specifico solo se quel client è in grado di calcolare cose che altri sistemi avrebbero non. Ciò implica che il client deve conoscere alcuni "segreti". Non c'è da evitarlo. Se non è possibile memorizzare alcun segreto sul lato client, l'autenticazione dal server è senza speranza.

Ora, succede che nel caso di un telefono, il sistema client viene fornito con un'appendice solitamente definita "umana". Esiste una relazione one-to-one (liberamente mantenuta) tra un telefono e il suo proprietario. Ciò significa, nel tuo contesto, che il segreto lato client può essere memorizzato nel dispositivo stesso, ma anche nel cervello dell'utente umano. La chiamiamo, tecnicamente, una "password".

In alternativa, è un valore segreto memorizzato in modo affidabile memorizzato sul lato del telefono: è la chiave nella scheda SIM. Questo segreto specifico è quello che viene utilizzato dalle compagnie telefoniche per distinguere i telefoni l'uno dall'altro, e tutta la fatturazione è basata su di esso. potresti essere in grado di sfruttare tale autenticazione, ma solo integrando con le compagnie telefoniche; non lo fai con un semplice "server su Internet". Un'implementazione pratica sarebbe la seguente:

  • L'app client si collega al tuo server (con un protocollo appropriato, tipicamente SSL / TLS).
  • Il server invia un SMS all'utente, contenente un codice numerico casuale.
  • L'utente legge l'SMS e digita il codice nell'app.
  • L'app invia il codice al server.
  • Il server vede che il codice inviato dall'app corrisponde a quello appena inviato tramite SMS ed è felice.
risposta data 14.08.2014 - 17:00
fonte

Leggi altre domande sui tag