Ci sono alcuni modi in cui puoi ottenerlo. Spero che il tuo obiettivo sia accettare richieste solo da clienti conosciuti?
Chiave precondivisa
Un PSK nella sua forma più semplice è una chiave scambiata tra due parti fuori banda con il mittente che usa la chiave condivisa come è nei messaggi come credenziale. Per questo motivo, HTTPS è generalmente un must per i PSK. Senza aiuto
dalla sicurezza del trasporto, è più facile per un utente malintenzionato ottenere il PSK e utilizzarlo in una richiesta malevola, proprio come una richiesta legittima.
Time Stamp per impedire attacchi di riproduzione
Supponiamo di progettare il nostro meccanismo di sicurezza per trasmettere le credenziali non in testo semplice ma crittografate usando il PSK.
La credenziale crittografata viene inviata nel messaggio, in genere nell'intestazione della richiesta HTTP. Un utente malintenzionato non può decodificare
l'intestazione e estrarre le credenziali, ma può riprodurre la richiesta precedente così com'è. Peggio ancora, un utente malintenzionato può incorniciare un nuovo
richiedi e utilizza solo il valore dell'intestazione contenente le credenziali valide della precedente richiesta riuscita.
Un timestamp può essere aggiunto al messaggio e crittografato insieme al resto del contenuto del messaggio. Il servizio può
recuperare il timestamp dopo la decrittografia del messaggio e fallire la richiesta se il timestamp è troppo vecchio per la soglia
questo è già stato concordato. Questo riduce la finestra di opportunità per riprodurre una richiesta.
Il lato negativo è che sia il server che il client devono sincronizzarsi con il tempo.
Un'alternativa a un timestamp è un contatore come il contatore nonce che abbiamo visto con l'autenticazione digest. Con
un contatore, non abbiamo bisogno di essere preoccupati per l'inclinazione tra gli orologi. Tuttavia, i clienti devono implementare a
contatore per garantire che il conteggio inviato in una richiesta sia maggiore del conteggio nella richiesta precedente almeno di uno e il numero
il server deve conservare una registrazione dell'ultimo contatore ricevuto. Naturalmente, il messaggio deve essere firmato in modo che un utente malintenzionato
non incrementa il contatore e riproduce il resto della richiesta.
Impedisci l'uso improprio dell'identificatore
Nella sua forma più semplice, un PSK è sia l'identificativo dell'utente che le credenziali. Per questo motivo, le PSK devono essere uniche. Dato a
chiave, un'applicazione deve essere in grado di identificare l'utente corrispondente senza alcuna ambiguità. La premessa di base che noi
stanno lavorando è l'evitare di HTTPS. Per questo motivo, la PSK non può essere trasmessa così com'è. Abbiamo bisogno di avere due chiavi: una che agisce come identità dell'utente e l'altra che funge da credenziale.
Tuttavia, queste chiavi non sono collegate matematicamente. Inoltre, viene utilizzata la stessa chiave utilizzata per firmare sul lato del mittente
convalidare la firma sulla fine del destinatario; quindi, questa è solo una chiave condivisa simmetrica. Ma simile alla chiave pubblica
crittografia, solo la chiave privata deve essere protetta.
Impedisci attacchi MIM (per comunicazioni non HTTPS)
Senza HTTPS, un attacco man-in-the-middle (MITM) è una delle minacce più significative. Il meccanismo principale
per garantire l'integrità dei dati dei messaggi è un codice di autenticazione dei messaggi basato su hash (HMAC). HMAC è solo un pezzo
di dati creati tramite un algoritmo di hashing crittografico e una chiave segreta condivisa. In questa sezione, ti mostro come
per creare un HMAC usando l'algoritmo SHA256.
Tuttavia, se il messaggio deve essere crittografato per riservatezza, è possibile aggiungere facilmente tale funzionalità
utilizzando la stessa chiave privata che utilizziamo per HMAC o puoi introdurre una nuova chiave specifica per la crittografia.
La richiesta dovrebbe contenere i seguenti parametri
- La chiave pubblica, che è la chiave associata all'utente.
- Il contatore
- Il timestamp
Oltre ai parametri, la richiesta include una firma che garantisce che nessuno dei parametri sia
manomesso È possibile creare la firma basata non solo sui tre parametri ma anche sull'intero corpo
della richiesta se l'obiettivo è assicurarsi che nulla nella richiesta venga modificato.
Per assicurarci che nessuno manchi i parametri, possiamo includere un HMAC-SHA256 di tutti e tre i valori più il
richiede il metodo URI e HTTP. Il Listato 9-1 mostra una richiesta HTTP protetta dal meccanismo PSK. La figura 9-2 mostra
il design PSK.