Voglio autenticare un client di una pagina web e assicurarmi che sia un particolare utente.
Diciamo che abbiamo già concordato un hash particolare ( SHA256
, in realtà, che ritengo sia abbastanza sicuro per questo) e che entrambi abbiamo già scambiato un key
in un file tramite un mezzo attendibile.
Questo key
è praticamente un file di testo con 2K di lettere casuali. Lo ho memorizzato nel mio server, lo hanno memorizzato da qualche parte nel loro computer.
Questi sono i passi studiati per autenticare il client:
- Il server genera un
challenge
, una stringa casuale di 128 lettere. - Il server invia
challenge
al browser del client. - Il client ha accesso a un campo di input dove caricano il loro file
key
. - Il client calcola un
answer
aggiungendokey
al loro contenutochallenge
e calcolando il suo hash. - Il client restituisce solo
answer
per questo particolarechallenge
. - Il server confronta il
answer
ricevuto con uno generato localmente e, se corrispondono, posso supporre che il client sia la persona che penso che sia.
Assunzione finale, lo scambio di challenge
e answer
attraverso il web può avvenire attraverso un canale non sicuro. In realtà, supponiamo che accadrà attraverso un canale non sicuro, cioè HTTP.
Questo schema è sicuro?
In caso negativo, quali sono le sue insidie?
Nel passaggio 4, fa la differenza se computo l'hash come challenge + key
invece di key + challenge
. Immagino che questo abbia a che fare con l'algoritmo di hash che ho scelto, e penso che lo SHA256 gestisca bene quelle cose, ma non sono esperto.
Importa molto se aumento / diminuisci la lunghezza di key
e challenge
?