Archivia in modo sicuro i dati di sessione nei cookie

5

Sto provando a creare un'architettura di server delle applicazioni stateless e vorrei memorizzare i dati di sessione nei cookie. Tutte le pagine che utilizzano la sessione verranno pubblicate su HTTPS. Stavo pensando di utilizzare AES256 per garantire che il client non possa modificare il valore del cookie.

Quindi il flusso sarebbe simile a questo:

  1. Il server riceve la richiesta e decrittografa il cookie di sessione utilizzando la chiave AES che verrebbe archiviata sul server.
  2. Se la sessione viene modificata, la nuova sessione viene crittografata utilizzando AES e la chiave segreta. Il nuovo valore viene quindi inviato con la risposta.

Esistono gravi difetti con questo approccio? Vorrei avere altre opinioni prima di implementarla.

    
posta Brian D. 08.08.2015 - 05:51
fonte

2 risposte

3

I was planning on user AES256 to ensure the client can't change the value of the cookie.

La crittografia fornisce riservatezza, non fornisce l'autenticazione.

Se non vuoi che gli utenti vedano un valore di dati di sessione, allora devi crittografare quindi autenticare il valore. Ciò impedisce a un bit di lanciare l'attacco di modificare il valore all'interno del token crittografato perché l'hash con chiave non corrisponderà più se vengono scambiati bit.

Se la riservatezza non è richiesta, puoi semplicemente autenticarti. Ad esempio, potresti utilizzare un HMAC su SHA-256 . Questo mostrerà all'utente finale quale sia il valore in chiaro, tuttavia non sarà in grado di modificare il valore perché non sarà in grado di ricalcolare il valore dell'hash con chiave senza la chiave.

es. Il tuo cookie sarà impostato come segue:

Set-Cookie: Session=Username=admin&expires=20150809104100&hash=7C2CD7DB7DF4055E782E3A5F70487FEB9A5CABEED3FB70F5D8772586FD8B2759

Scade impedisce a un utente di salvare i cookie offline per un uso futuro quando non sono un amministratore perché l'hash è calcolato anche oltre la scadenza:

Username=admin&expires=20150809104100

Puoi utilizzare questo sito per verificarlo (la chiave utilizzata era stackexchange , tuttavia dovresti usare uno pseudo crittograficamente sicuro a caso generato una chiave a 128 bit).

Tuttavia, esiste una tecnologia Internet standard per fare ciò già denominata Token Web JSON . L'algoritmo HS256 genererà il valore del token sul lato client calcolato da HMAC su SHA-256.

Se vuoi anche la crittografia scegli A128GCM - nota che una chiave a 128 bit è sufficiente per i tuoi dati - una chiave a 256 bit che utilizza AES-256 è più lenta e inutile. potrebbe essere anche meno sicuro in quanto vi sono differenze significative su come AES elabora una chiave a 128 e 256 bit.

Poiché JSON Web Encryption supporta solo algoritmi di crittografia autenticati, ciò impedirebbe anche il bit-flipping.

    
risposta data 09.08.2015 - 13:15
fonte
2

La crittografia da sola non è sufficiente perché fornisce solo riservatezza e questa attività richiede anche autenticità.

Se il testo in chiaro nel cookie dell'aggressore contiene qualcosa come L'utente numero 9 è autenticato allora l'attaccante può cambiare bit nel testo cifrato che quando viene decodificato sul server dirà Numero utente 1 è autenticato e viene autenticato come utente numero 1. Ciò avviene modificando progressivamente i bit nel testo cifrato dei cookie e inviandolo al server.

Per impedire tale manomissione, devi implementare la crittografia autenticata che rileverà (sul server) modifiche indesiderate nel ciphertext (sul client).

    
risposta data 09.08.2015 - 00:02
fonte

Leggi altre domande sui tag