2012-09-18 2 views
10

Quali misure di sicurezza dovrei adottare per garantire che, se il mio database fosse compromesso, i token di accesso di lunga durata non potrebbero essere rubati?Memorizzazione sicura di un token di accesso

Un token di accesso di lunga durata è buono come un nome utente e una password per un particolare servizio, ma dal parlare con gli altri sembra che la maggior parte (me stesso inclusa) memorizzi i token di accesso in testo normale. Questo sembra essere altrettanto brutto di memorizzare una password in testo normale. Ovviamente non si può salare l'hash &.

Idealmente, avrei bisogno di crittografarli, ma non sono sicuro del modo migliore per farlo, specialmente su un progetto open source.

Immagino che la risposta a questa domanda sia simile a quella relativa alla memorizzazione delle informazioni di pagamento e della conformità PCI, ma vorrei anche chiedere perché non c'è più discussione su questo? Forse mi manca qualcosa.

+0

Cosa intendi "soprattutto in un progetto open source"? Cosa stai pensando che rende la tua decisione di andare con uno specifico tipo di schema di crittografia diverso perché il tuo progetto non è chiuso? –

risposta

7

Vuoi solo verificare un token fornito da altri? Se è così, trattalo come se fosse una password. Utilizzare un algoritmo di derivazione di byte come Password Based Key Derivation Function 2 (PBKDF2) (anche descritto in RFC 2898) con 10.000 iterazioni e memorizzare i primi 20 byte o così. Quando il token è ricevuto. Non è praticamente reversibile.

Si desidera presentare il token ad altri per l'autenticazione? Se è così, questa è una sfida perché, se la tua applicazione può decodificare o accedere in altro modo al token, così può fare un attaccante. Pensa a Maxim di Shannon, l'hacker conosce il sistema, specialmente per un progetto open source.

In questo caso, l'approccio migliore consiste nel crittografare i token con un algoritmo forte (ad es. AES256), generare chiavi utilizzando un potente generatore di numeri casuali standard crittografico e archiviare le chiavi in ​​modo sicuro in una posizione diversa rispetto ai dati , ad esempio in un file protetto dalle autorizzazioni al di fuori del database nell'esempio sopra. Quest'ultimo significa che gli attacchi di SQL injection non rivelano le chiavi.

+0

Grazie - Mi riferisco più a quest'ultimo dei casi d'uso, in cui devo essere in grado di utilizzare il token in un secondo momento quando l'utente non è presente. –

+0

@akton ma perché trattare il token come una password? (testo normale) le password sono informazioni che non vogliamo che un aggressore b/c lui/lei potrebbe provare e usarlo per accedere a un servizio diverso con lo stesso pwd. ma un token è valido solo per il tuo servizio - quindi se l'attaccante ha messo le mani sul token/db lui/lei potrebbe fare più danni che usare il token per accedere al tuo account ... cosa non vedo ? – pkyeck

+0

Supponendo che la domanda sia corretta, il token è una prova per utente, a lunga vita, che può autenticare un utente. In altre parole, è una password. – akton