Specifica la chiave pubblica in un'intestazione JWT?

1

C'è una serie di parti, ognuna delle quali ha una chiave pubblica / privata. Ho la chiave pubblica per ognuno di essi.

Queste parti mi invieranno i JWT firmati con la loro chiave privata. Non so quale parte abbia inviato il JWT, quindi devo controllare il JWT. Se la firma corrisponde alla chiave pubblica n. 1, so che proviene dalla prima parte.

Voglio un modo per identificare in modo sicuro la parte che ha inviato il JWT.

Il modo più semplice ma più lento per farlo è quello di controllare ogni chiave pubblica fino a quando non corrisponde.

La soluzione che ho in mente consiste nell'abbinare la chiave pubblica al campo iss del JWT. Posso dare un'occhiata al JWT, senza verificare la firma, estrarre la dichiarazione di iss , usarla per decidere quale chiave pubblica usare e usarla per verificare la firma.

Non riesco a vedere buchi di sicurezza in questo approccio, ma il bisogno di due passaggi è sbagliato. C'è un modo standard per farlo?

    
posta Joe 16.01.2017 - 16:41
fonte

2 risposte

0

Ci sono intestazioni esplicitamente definite per questo genere di cose negli standard JOSE. Puoi usare

  • JWK che è la vera chiave pubblica: devi solo assicurarti che corrisponda a ciò che hai localmente.
  • KID che è solo un identificatore arbitrario della chiave: potresti utilizzare una identificazione personale della chiave pubblica e solo eseguire una ricerca locale.

Nel primo caso si vuole fare attenzione e non basarsi solo sulla chiave presentata, ma piuttosto usarla per cercare una chiave locale.

    
risposta data 16.02.2017 - 18:12
fonte
0

These parties will send me JWTs signed with their public key.

Le JWT sono firmate da chiavi private o sono HMAC usando una chiave condivisa. Spero sia un errore di battitura.

Inoltre, le librerie JWT esistono in quasi tutti i linguaggi / framework, dovresti stare meglio usando uno di quelli dato che sono controllati correttamente.

Detto questo, il tuo approccio sembra buono. Ci sono vari scenari:

  • Non c'è stata alcuna manomissione del campo iss . In tal caso, dovrai cercare la chiave pubblica corrispondente in O (1) e dovrebbe essere in grado di verificare il token.
  • Un utente malintenzionato MITM modifica il campo iss , nel qual caso verrà caricata una chiave errata o non verrà trovata alcuna chiave a seconda che il campo iss sia valido o meno. La firma non verrà verificata in entrambi i casi e dovresti scartare il JWT a quel punto.
  • Elimina anche il token JWT se il parametro alg è impostato su none . Mentre è un vero costrutto JWT, è insicuro come non firmato. link
  • Elimina anche qualsiasi trucco in cui il token JWT ha una chiave pubblica incorporata che dovresti usare per verificare il token. Un utente malintenzionato può sostituire il segno e sostituire la chiave pubblica in modo che la verifica abbia esito positivo. La chiave pubblica (o la chiave simmetrica in caso di HMAC) deve sempre essere cercata dall'archivio dati del destinatario.
risposta data 16.01.2017 - 22:00
fonte

Leggi altre domande sui tag