Richiesta firmata e autenticazione digest HTTP per l'autenticazione API?

3

Per richiesta firmata intendo qualcosa di simile a questo (esempio semplificato):

Il cliente crea un sig nella sua richiesta: $sig = hash('sha256', $api_key.$data); che genera 7409ur0k0asidjko2j per esempio. Quindi invia questo alla sua richiesta: example.com/api/7409ur0k0asidjko2j

Ora, il server ricevente esegue quindi il processo esatto per eseguire una corrispondenza per il sig.

Quale è generalmente più sicuro, una richiesta firmata come questa o un'autenticazione del digest HTTP allo scopo di autenticare le richieste su un server API? Nota supponiamo che SSL non sia installato.

    
posta IMB 12.08.2012 - 19:24
fonte

2 risposte

3

Se la firma copre l'intera richiesta, l'integrità è garantita. La richiesta di replay è ancora una potenziale minaccia (pensa: abuso di risorse).

Con l'autenticazione digest di HTTP, la richiesta potrebbe essere modificata durante il transito. Sei in balia di un attacco MITM (Man In The Middle).

Ad ogni modo, dovresti davvero usare TLS fornisce sicurezza del livello di trasporto :

  • garanzia di confidenzialmente del payload , non solo di password o autenticatore (ma non dimensioni del payload! fai attenzione se le dimensioni del payload possono rivelare informazioni utili)
  • garanzia di integrità del payload (ma no garanzia indirizzo IP del client WRT!)
risposta data 12.08.2012 - 20:26
fonte
2

La firma della richiesta potrebbe essere migliore, ma dovresti implementarla correttamente. La costruzione dell'hash (chiave || data) è vulnerabile all'attacco dell'estensione di lunghezza hash e non dovrebbe mai essere utilizzata. Ecco una buona spiegazione di questo argomento: Hash Length Extension Attacks . Dovresti usare HMAC per l'autenticazione dei messaggi.

La firma della richiesta è migliore dell'autore digest HTTP, perché potrebbe anche proteggere l'integrità dei dati inviati nella richiesta.

    
risposta data 12.08.2012 - 20:23
fonte