Sistema di autenticazione utente personalizzato in stile EC2: quanto è sicuro?

4

Al lavoro sto provando a progettare un sistema di autenticazione utente privo di sessioni (inclusi token basati su sessioni come quelli utilizzati in OAuth2) a causa dei requisiti del software client. I servizi sono REST e stiamo cercando di progettare un sistema di autenticazione che possa utilizzare le intestazioni HTTP per comunicare i dati di autenticazione al server.

Ho già utilizzato l'autenticazione di firma delle richieste di Amazon EC2 [1] e l'ho trovato adatto ai nostri requisiti, tranne nel caso in cui avremmo a che fare con singoli utenti (che avranno una password) anziché script pianificati / automatici sistemi utilizzati per connettersi a EC2. Il sistema che ho creato funziona esattamente come EC2, con una differenza: invece del client dell'utente che memorizza una chiave API privata (la chiave di accesso AWS descritta nei documenti di EC2), memorizzerà una password (per esecuzione del software) che verrà quindi sottoposto a hash come è sul server e utilizzato per firmare la richiesta.

Per riepilogare come funzioneranno le richieste:

  1. L'utente inserisce la password nel software client
  2. Password software di hashing unidirezionale (whirlpool)
  3. Il software crea un digest (HMAC) della richiesta utilizzando la password con hash
  4. Il software effettua una chiamata al server Web, firmandola con il digest
  5. Ripeti il passaggio 4 fino all'uscita del software

Sul server:

  1. Il server riceve la richiesta, recupera la password con hash dalla tabella utente
  2. Il server crea il digest della richiesta con la password con hash e verifica che corrisponda a
  3. Se verificato, l'utente è autenticato e la richiesta viene eseguita

Prenderemo in considerazione anche le richieste restrittive per impedire attacchi ripetuti contro il server e preservare l'idempotenza del servizio e utilizzare HTTPS laddove possibile per fornire un ulteriore livello di sicurezza (questo potrebbe non essere sempre possibile tuttavia, a causa delle restrizioni del software).

Questo sistema è sicuro?

[1] link

    
posta Dave Clayton 10.07.2012 - 10:13
fonte

1 risposta

3

Prima di tutto non dovresti usare whirlpool, invece dovresti usare funzione Hash approvata dal NIST come SHA-256 o un altro membro della famiglia SHA-2. SHA-1, MD4 e MD5 sarebbero scelte sbagliate.

La password e l'hash della password non devono mai essere inviati sul filo in testo normale.

La tua attuale implementazione del protocollo è vulnerabile a un Replay Attack . Sebbene un avversario che annusa il filo non possa modificare la richiesta a meno che non conosca l'hash della password o la password, può comunque riprodurre qualsiasi gruppo di richieste. Esistono numerose contromisure. Uno è quello di inviare un timestamp con ogni richiesta HMAC. Non hai davvero bisogno di sapere l'ora esatta del cliente, ma applica solo che un timestamp non viene mai ripetuto o inferiore alla richiesta precedente.

    
risposta data 11.07.2012 - 01:56
fonte

Leggi altre domande sui tag