Sto sviluppando un programma che richiede agli utenti di accedere. Il traffico non è sensibile, ma deve viaggiare il più velocemente possibile, quindi non sto proteggendo la connessione tramite TLS o qualcosa del genere. L'unica cosa sensibile è la password e probabilmente il nome utente (che sarà l'indirizzo email). Ho pensato di eseguire il hashing della password sul client prima di trasferirlo o di crittografarlo con una chiave pubblica RSA, il problema è che se un hacker può ottenere questo hash o password crittografata, può facilmente accedere utilizzando questo hash direttamente se modifica il cliente, quindi ho bisogno di una sorta di salatura. Il problema è: il server memorizzerà la password salted + hash, quindi quando il client esegue l'hashing della password con un diverso salt ogni volta, produrrà un hash diverso. Con la crittografia il server può solo decifrare la password + sale e togliere il sale. Ora mi chiedo se c'è un modo senza crittografia, con solo hashing, che posso trasportare la mia password in modo sicuro sul server e proibire a un utente malintenzionato di riutilizzare la password con hash ?
I miei pensieri:
Il server salva la password salata con salt1
, hash. Il server invia salt1
e un random (ogni connessione un nuovo) salt2
al client. Il client salts e hash la password con salt1
, salts e hash l'hash del passaggio 1 di nuovo con salt2
, invia questo hash al server. Quindi per verificare la password il server deve salare e hash è memorizzato hash con salt2
e verificare l'uguaglianza. È sicuro?