Scrivo un'applicazione mobile e ho bisogno di autenticare gli utenti contro il server. Il lato del server è scritto in PHP. Non posso usare i cookie per memorizzare SID (Session ID), quindi ho deciso di inviarlo ad ogni richiesta usando il metodo GET.
In seguito, ho deciso che l'invio dello stesso SID ogni volta non è abbastanza sicuro, quindi ho deciso di utilizzare una nuova stringa ad ogni richiesta. Server e Client mobile hanno memorizzato la stessa stringa casuale (chiamiamola salt ). Alla fine di ogni richiesta, il server invia una stringa casuale al client mobile e alla richiesta successiva, il client mobile invia al server la versione con hash di salt + stringa casuale . Il server crea l'hash da salt + stringa casuale e lo confronta con quello ricevuto dal client mobile per autorizzarlo.
Ora la mia domanda è:
-
Se ci sarebbe un attacco man-in-the-middle, quanto sarebbe difficile spezzare l'hash e trovare la porzione salata di hash?
-
Come potrei renderlo più difficile? (ad esempio, non utilizzando la formula salt + stringa casuale , ma salt_1st_half + stringa casuale + salt_2nd_half o stringa di hashing più volte in base alla lunghezza del nome utente o di altri "trucchi")
PS: ho intenzione di utilizzare la funzione crypt di php con l'algoritmo blowfish sul server
Modifica
I decided that sending the same SID everytime is not secure enough
Perché? Perché trasferirò alcuni dati utente sensibili (posizione effettiva, ..), e chiunque vorrebbe catturare SID potrebbe cambiare questi dati, o usare il SID corrente per fingere di essere qualcun altro e potrebbe ottenere altri dati sensibili dall'applicazione (e non sarebbe Non ci sono errori di bug o di applicazione, perché un utente regolare con quel SID avrebbe accesso a questi dati). Questo è il motivo per cui ho deciso di cambiare SID dopo ogni richiesta e aggiungere alcuni calcoli e la convalida di SID.