Autenticazione password tramite DynamoDB

2

Sto lavorando su un'app per Mac. Ho gli utenti archiviati usando DynamoDB. È necessaria l'autenticazione per imporre il controllo degli accessi sulle operazioni interne al sistema, come il caricamento di file su Amazon S3. Certo, vorrei un meccanismo di autenticazione sicuro.

Ho pensato agli hash unidirezionali. La password hash verrà archiviata in DynamoDB. Per l'autenticazione, farei una richiesta, poi cancellerò la password inserita dall'utente e confronterò l'hash memorizzato e trasferito. Con uno sniffer di rete, un avversario sarebbe in grado di vedere la password con hash.

Come ho detto, l'autenticazione è necessaria solo internamente, quindi non c'è altro modo per ottenere le credenziali rispetto all'app.

Potrebbero esserci problemi di sicurezza con questo approccio? Inoltre, quale funzione di hash consiglia?

    
posta NSAddict 19.10.2012 - 15:23
fonte

1 risposta

3

Modifica: Questo non è rilevante per questa particolare domanda , ma un consiglio sull'argomento in generale.

Sembra che quello che vuoi veramente sia un meccanismo di autenticazione appropriato. Non dovresti provare a tirare il tuo , poiché è considerato una cattiva pratica. Un meccanismo di autenticazione sicuro e affidabile è HTTP Digest Access Authentication, che è profondamente ancorato nel framework HTTP. Si tratta di un protocollo di risposta alle sfide, il che significa che qualcosa in questo senso si verifica quando un utente tenta di accedere al meccanismo di "caricamento dei file":

  1. L'utente passa al link
  2. Il server nota che la directory / protected / o il file upload.html è protetto dall'autenticazione del digest e risponde con un codice di errore Autorizzazione richiesta . In esso è una sfida per l'agente utente (il browser Web) a cui rispondere. La risposta viene calcolata utilizzando la sfida, le credenziali dell'utente (nome utente e password) insieme ad altre informazioni.
  3. L'utente inserisce la password, portando l'agente utente a fornire al server un'intestazione Autorizzazione , contenente la risposta alla sfida

  4. Il server, utilizzando le credenziali che ha memorizzato sull'utente, calcola lo stesso valore di risposta utilizzando gli stessi dati che ha inviato all'utente.

  5. Il server confronta il valore di risposta ricevuto e generato localmente e, se sono uguali, concede l'accesso al realm

  6. protetto

Tutto questo viene fatto usando l'hashing MD5 come standard. L'applicazione e i server possono essere configurati per utilizzare MD5, SHA-X o qualsiasi algoritmo di hashing - anche hashing iterato, purché la stessa procedura venga seguita su ciascun lato della comunicazione.

MD5 è considerato rotto , nel senso che è abbastanza facile trovare collisioni . Questo non è un problema per questo processo di autenticazione, poiché richiede una forma di attacco preimage per raccogliere correttamente la password. Questo è possibile solo teoricamente con una complessità computazionale di 2 123.4 .

Se sei intimidito da questo, o lo schema non si adatta a ciò di cui hai veramente bisogno, almeno memorizza la tua password in un modo salato, con hash, cioè il database contiene:

nome utente | hash_function (password + ":" + salt) | sale

Qui, SHA-256 dovrebbe essere a posto.

Chiedi maggiori dettagli su Auth HTTP Digest. se interessato. Inoltre, considera la possibilità di aggiungere il tuo tipo di applicazione server (Apache?) Alla domanda.

    
risposta data 19.10.2012 - 17:27
fonte

Leggi altre domande sui tag