Stiamo pianificando di utilizzare JSON Web Tokens (JWT) per il nostro server di autenticazione e sto valutando l'approccio di crittografia da adottare per il token JWE.
Sembra che ci siano due opzioni per la gestione della chiave di crittografia simmetrica:
- L'emittente / destinatario pre-condivide una chiave simmetrica e crittografa tutti i token che lo utilizzano; la chiave simmetrica non è inclusa nel messaggio.
- L'emittente genera una chiave simmetrica per token, quindi crittografa il token utilizzando la chiave pubblica del destinatario e lo include nel messaggio.
Non mi sembra che ci siano vantaggi intrinseci per la sicurezza di entrambi, a patto che vengano utilizzati algoritmi sufficientemente potenti e dimensioni chiave abbastanza grandi.
Sembra che la differenza principale sia che nel primo caso il destinatario deve fidarsi dell'emittente per non perdere la chiave pre-condivisa, mentre nel secondo caso solo il destinatario ha la chiave di decrittazione necessaria. Tuttavia, dato che il payload di questo token JWE sarà un token JWS firmato, il destinatario deve anche avere una strong relazione di fiducia con l'emittente e deve fidarsi di loro per non far trapelare la propria chiave privata di firma, quindi questo non sembra un grande problema.
Dato che l'opzione 1 produce un token molto più piccolo (non avendo una chiave simmetrica crittografata in esso incorporata) c'è una buona ragione per preferire l'opzione 2?