Memoria del client della chiave segreta HMAC

5

Ho letto numerosi articoli sull'utilizzo di HMAC e la chiave segreta per l'autenticazione del client in un'applicazione client RESTful (Javascript) oggi. Tuttavia, non trovo una singola fonte che sia in grado di spiegarmi in modo trasparente un processo che colma le lacune di sicurezza nella teoria.

La chiave segreta dovrebbe essere segreta, il che significa che solo il client e il server specifici dovrebbero conoscere la chiave. Poiché la chiave segreta non deve essere trasferita sulla rete, deve essere inviata su un supporto sicuro come la posta elettronica. Non userò SSL / TLS, quindi l'invio della chiave segreta come risposta dal server all'accesso non è un'opzione.

Quando si mette in discussione la sicurezza, non ha senso per me. L'unico motivo per cui l'utente accederà alla sua email per la mia domanda, sarebbe la registrazione (per attivare l'account).

  • Il mio primo pensiero è che un cookie non sia sicuro, ma esiste un altro modo per memorizzare la chiave segreta sul client?
  • Quando l'utente cancella i suoi cookie, la chiave segreta viene persa. Non è logico inviare un'altra e-mail con una nuova chiave segreta ogni volta che i cookie spariscono, che non avrebbe alcun senso per l'utente.
  • L'utente utilizzerà più client e dovrebbe essere generata una chiave segreta separata per ogni cliente. L'impostazione della chiave durante la registrazione non sembra un'opzione.

L'unica cosa che avrebbe senso per me è che il client mette le mani sulla chiave segreta quando l'utente esegue il login, poiché non c'è motivo di tenere la chiave quando l'utente si disconnette (o dopo un certo tempo di scadenza ).

Quindi la domanda è semplice:

How does the user get the secret key at login, and where is it stored at the client so that it is safe?

Mi sento un po 'sorpreso dal fatto che non riesco a capirlo. Molte risposte sulla stessa domanda sembrano battere in continuazione, ma non colpiscono mai il punto debole che mi fa capire.

Modifica Dopo un altro giorno di ricerche, posso solo concludere che è necessaria una connessione SSL. Non riesco a vederlo in nessun altro modo.
Ad ogni modo lo metti, il segreto deve arrivare sia al client che al server.
Se questo è vero, non vedo perché tanti siti Web e blog che ho letto puntino a utilizzare HMAC come alternativa per Basic Auth + SSL. Se non esiste un modo trasparente per condividere la chiave segreta tra il server e il client @ tempo di accesso, allora per me non è affatto utile utilizzare HMAC.

Trovo che sia un peccato, come nell'ambiente RESTful, ogni richiesta inviata al server deve essere autenticata individualmente.
La mia applicazione dovrebbe inviare molte richieste al server per un'ipotetica quantità di persone, temo per il sovraccarico che causerà SSL.
Correggi se lo vedo male.

    
posta Trace 30.05.2014 - 14:07
fonte

1 risposta

1

Sì, SSL è richiesto, per lo meno per trasferire il "codice" al client, cioè tutto il codice HTML e JavaScript. È possibile trasferire la chiave utilizzando SSL quando il client esegue l'accesso, utilizzando un cookie sicuro, e quindi il codice JavaScript sul lato client effettua richieste HTTP non SSL utilizzando la chiave contenuta in tale cookie sicuro. Tuttavia, ciò aggiunge molta complessità e SSL sarebbe più semplice, meno soggetto a errori e probabilmente più veloce in ogni caso, dal momento che la crittografia in JavaScript rischia di essere più lenta dell'implementazione SSL nel browser web e nel server web. Inoltre, a meno che i dati non siano estremamente sensibili, è necessario crittografare le richieste e le risposte, nel qual caso sarebbe comunque necessario l'uso di SSL (non ci sarebbe alcun vantaggio nel provare a fare la crittografia in JavaScript).

    
risposta data 30.05.2014 - 20:23
fonte

Leggi altre domande sui tag