Ho un'applicazione Web e ho il compito di aggiungere l'accesso sicuro per rafforzare la sicurezza, simile a ciò che Google ha aggiunto agli account Google.Autorizzazione a un computer per accedere a un'applicazione Web
Use Case
In sostanza, quando un utente accede a, vogliamo rilevare se l'utente ha precedentemente autorizzato questo computer. Se il computer non è stato autorizzato, all'utente viene inviata una password monouso (tramite e-mail, SMS o telefonata) che deve immettere, in cui l'utente può scegliere di ricordare questo computer. Nell'applicazione web, monitoreremo i dispositivi autorizzati, consentendo agli utenti di vedere quando/dove hanno effettuato l'accesso da quel dispositivo per ultimi e rimuovere l'autorizzazione di qualsiasi dispositivo, se lo desiderano.
Abbiamo bisogno di una soluzione molto leggera (che non richiede l'installazione di software sul lato client) e funziona con Safari, Chrome, Firefox e IE 7+ (sfortunatamente). Offriremo la sicurezza x509, che fornisce una sicurezza adeguata, ma abbiamo ancora bisogno di una soluzione per i clienti che non possono o non vogliono usare x509.
La mia intenzione è quella di memorizzare le informazioni di autorizzazione utilizzando i cookie (o, potenzialmente, utilizzando la memoria locale, degradando ai cookie flash e quindi i cookie normali).
a prima vista
pista due valori distinti (dati locali o biscotti): un hash che rappresenta un sign-on di token, oltre a un gettone dispositivo sicuro. Entrambi i valori sono guidati (e registrati) dall'applicazione Web e dettati al client. Il token SSO dipende dal dispositivo e da un numero di sequenza. Ciò consente di rimuovere i dispositivi in modo efficace (tutti i token SSO non sono più validi) e attenua il replay (non efficacemente, tuttavia, ecco perché sto facendo questa domanda) attraverso l'uso di un numero di sequenza, e utilizza un nonce.
Problema
Con questa soluzione, è possibile che qualcuno di copiare solo i token SSO e dei dispositivi e l'uso in un'altra richiesta. Mentre il numero di sequenza mi aiuterà a rilevare un tale abuso e quindi a rimuovere l'autorizzazione del dispositivo, il rilevamento e la risposta possono avvenire solo dopo che il dispositivo valido e la richiesta malevola hanno tentato l'accesso, il che comporta un tempo sufficiente per il danneggiamento.
Mi sento di usare HMAC sarebbe meglio. Traccia il dispositivo, la sequenza, crea un nonce, timestamp e hash con una chiave privata, quindi invia l'hash più quei valori come testo normale. Il server fa lo stesso (oltre a convalidare il dispositivo e la sequenza) e lo confronta. Ciò sembra molto più semplice e molto più affidabile ... supponendo che possiamo negoziare, scambiare e archiviare in modo sicuro le chiavi private.
Domanda
Allora, come posso negoziare in modo sicuro una chiave privata per il dispositivo autorizzato, e quindi archiviare in modo sicuro la chiave? È più possibile, almeno, se mi accontento di memorizzare la chiave privata usando i cookie di archiviazione locale o flash e dico solo che è "abbastanza buono"? O c'è qualcosa che posso fare alla mia bozza originale per mitigare la vulnerabilità che descrivo?
Utilizzeremo una password una tantum per macchine "non riconosciute" o per quelle le cui affermazioni non hanno esito positivo. Per quanto riguarda gli altri suggerimenti, come ho menzionato nella domanda, devo attuare un "tocco leggero" (il che significa che non richiede software aggiuntivo), altrimenti avrei percorso quella via. La mia soluzione originale propone un "miglior sforzo" alla luce del fatto che, come hai detto, non posso controllare il cliente dati i vincoli che mi vengono dati, dove se tutto il resto fallisce, segnaliamo l'account e richiediamo la verifica 1TP. – HackedByChinese
Tuttavia, si cita il rilevamento quando il sistema si è spostato. Avevo pensato di utilizzare un'API geo IP per registrare la città approssimativa di un utente. Espandendomi, forse posso usare l'euristica sull'indirizzo IP del client per provare a rilevare un comportamento strano, ricadendo sulla verifica 1TP quando viene rilevato qualcosa di diverso. Per i clienti veramente mobili, potremmo semplicemente richiedere l'autorizzazione x509 o l'installazione del software client. Comunque, grazie per aver dedicato del tempo a questo. – HackedByChinese
Felice di aiutare. Ho appena trovato altre due domande SO pertinenti che potrebbero darti alcune idee: [identificando un computer in modo univoco] (http://stackoverflow.com/questions/671876/whats-a-good-way-to-uniquely-identify-a- computer/671914 # 671914) e [impronta digitale del dispositivo per l'accesso client sicuro su una rete] (http://stackoverflow.com/questions/7649074/device-fingerprint-for-secure-client-access-over-tls-network). –