Come funziona la firma AWS in profondità

8

Sto cercando di capire come funziona la firma AWS 4. Ho letto i documenti e ho trovato un esempio di Python dove la firma è calcolata. Ho anche eseguito questa risposta che spiega HMAC a po.

Sono curioso di capire cosa AWS fa sul lato server a "credere" nella richiesta.

Stanno eseguendo lo stesso codice dell'esempio ma impostando la data con il parametro passato dalla richiesta e quindi facendo corrispondere i due hash (HMAC sembra funzionare in questo modo)? In tal caso, perché ci sono così tanti valori e hash in due passaggi nella richiesta (la mia ipotesi è che si tratti di un problema di hash)?.

PS: poiché l'approccio (HMAC) utilizza le chiavi ACCESS e SECRET come chiavi (è la chiave simmetrica) può essere implementato solo da un lato server. Questo non può essere fatto in modo sicuro in un'app mobile poiché le chiavi possono essere facilmente accessibili. C'è un modo per farlo in un ambiente "meno chiuso" (rispetto al server) come un'app client / mobile / ecc. app?

    
posta EsseTi 13.10.2015 - 12:21
fonte

2 risposte

1

Il modello generale di Amazon API prevede i seguenti passaggi

  1. Costruisci la tua richiesta API con tutti gli elementi (all'interno di una struttura del programma come un array)
  2. Ordina e formatta gli elementi della richiesta
  3. Calcola l'HMAC della richiesta formattata
  4. Invia la richiesta completa ad Amazon, con HMAC

Amazon quindi accetta la richiesta, genera il proprio HMAC e, se corrisponde, convalida la richiesta (a condizione che anche i token di autenticazione corrispondano).

Non è possibile garantire la sicurezza se si inseriscono le chiavi in un'app. Dovresti forzare qualsiasi client compilato a contattare il tuo server e fare lì la richiesta dell'API.

    
risposta data 29.06.2016 - 02:21
fonte
1

Il lato server passa attraverso lo stesso processo del client per convalidare la richiesta (+ un paio di altre cose, ad esempio controllando l'ora / data entro 15 minuti in tempo reale). Il vantaggio di creare la chiave di firma derivata come descritto è che ora questa chiave può essere utilizzata più volte, a condizione che la data corrisponda, per firmare le richieste alla stessa regione e servizio. Questo può essere utile per risparmiare qualche calcolo o per un uso temporaneo in un altro componente. Ovviamente, si desidera comunque adottare misure per proteggere la chiave derivata, ma la sua perdita ha un impatto minore rispetto alla perdita delle chiavi "reali".

Se l'app deve caricare oggetti su S3, potresti essere in grado di utilizzare URL pre-firmati per evitare di comunicare la chiave segreta al client: link

Altrimenti probabilmente vorrai mantenere segrete le chiavi di accesso su un server e implementare qualche altra sicurezza tra i tuoi client e server.

    
risposta data 28.08.2016 - 05:40
fonte

Leggi altre domande sui tag