Algoritmi asimmetrici consigliati per JWT?

1

Sto implementando l'autenticazione JWT per un nuovo servizio web e sono incerto sull'algoritmo asimmetrico da scegliere. Ho cercato in giro e non ho trovato alcun consenso o raccomandazioni chiare. Secondo i documenti PyJWT ci sono alcuni algoritmi diversi tra cui scegliere.

Vorrei usare un algoritmo che è sicuro (ovviamente), ha un sovraccarico basso ed è a prova di futuro. Quale algoritmo si adatta alla fattura?

    
posta user3607758 01.10.2018 - 08:00
fonte

3 risposte

1

RFC7518 elenca gli algoritmi e se sono richiesti, consigliati o facoltativi per una libreria JWT. Questo può aiutarti a scegliere un algoritmo con implementazioni in altre librerie, a fini di interoperabilità.

Dal punto di vista della sicurezza, ci sono queste opzioni:

  • RSASSA vs. ECDSA. ECDSA usa le curve ellittiche e alcune persone pensano che siano più sicure di RSA. Sono anche più veloci e ti permettono di usare chiavi più piccole.
  • SHA256, SHA384, SHA512. Potresti dire di più è meglio, ma poiché SHA256 è già impossibile da forzare, non ha molto senso usare più bit.
  • PKCS1-v1_5 vs. PSS. PSS presenta alcuni vantaggi in termini di sicurezza, ma è più complesso di PKCS1, probabilmente rendendo più probabile errori di implementazione.

Tutte queste opzioni sono sicure e le differenze sono in gran parte teoriche. Probabilmente raccomanderei ECDSA usando P-256 e SHA-256, poiché

  • che è probabile che sia implementato in molte implementazioni di JWT, secondo la RFC,
  • utilizza curve ellittiche che presentano alcuni vantaggi in termini di sicurezza e prestazioni.

L'altra risposta menzionava i computer quantistici. Al momento non disponiamo di computer quantistici validi, ma se esistessero, potrebbero facilmente interrompere tutti i possibili algoritmi JWT. Quindi da un punto di vista post-quantico non importa quale scegli, poiché tutti sono ugualmente insicuri.

Vedi anche:

risposta data 01.10.2018 - 09:24
fonte
1

RSA è spesso l'algoritmo di scelta, in quanto ora è piuttosto vecchio e sopravvive attraverso un esame accurato. Non puoi sbagliare a sceglierlo. La 256 variante è abbastanza buona come SHA256 non è neanche lontanamente interrotta.

Se ti interessa la dimensione del messaggio, cosa che probabilmente fai in JWT, potresti voler usare ECC. Permette sigle significativamente più brevi pur essendo sicuro come RSA in teoria. In pratica, il problema è in fase di implementazione. Ci sono state curve a spillo in passato e un sacco di problemi con l'implementazione come gli attacchi fuori curva. È più probabile che ECC abbia errori nell'implementazione IMO.

Gli algoritmi PS sono basati su RSA ma apparentemente sono modificati per avere una prova di riduzione. Nella prova non darei molto spazio e dato che è relativamente nuovo e più complicato, le implementazioni potrebbero avere problemi. Non sceglierei questi.

Quindi alla fine, sceglierei uno di questi due a seconda del livello di sicurezza di cui hai bisogno. ES256 è probabilmente la scelta migliore per la maggior parte delle applicazioni web.

PS: Ad ogni modo, dovresti ovviamente assicurarti che la tua libreria jwt sia aggiornata in modo tempestivo nel caso ci siano correzioni di bug relative alla sicurezza.

    
risposta data 01.10.2018 - 09:15
fonte
-1

In questo modo dovresti implementare il tuo software, così potrai facilmente scambiare l'algoritmo di firma. Speriamo che pyjwt supporterà anche i nuovi algoritmi, quando ci sono circa.

Dato che molte persone hanno paura dei computer quantistici, che si dice siano in grado di rompere un RSA un giorno, dal momento che la generazione dei fattori primi può essere facilmente parallela si dovrebbe prendere in considerazione l'uso di un algoritmo di curva ellittica.

Tuttavia, come il paragrafo seguente indica ... utilizzando un L'algoritmo "buono" di solito è una cattiva idea, se viene usato nel modo sbagliato.

    
risposta data 01.10.2018 - 08:44
fonte

Leggi altre domande sui tag