Devo utilizzare una firma per un JWT che deve essere creato o verificato su 12 server diversi in esecuzione in un ambiente con bilanciamento del carico. Hanno già la stessa coppia di chiavi RSA memorizzata nell'archivio certificati di Windows utilizzato per servire l'applicazione su HTTPS.
Questa domanda è già stata posta essenzialmente qui: Il parametro D della RSA è abbastanza strong da essere usato come segreto per il calcolo dell'HMAC? ma l'attenzione è concentrata sulla forza e / o sullo scopo della crittografia.
Inizialmente intendevo firmare il JWT usando RS256, e ho scritto il codice e tutto andava bene .... fino a quando ho controllato l'output. Ovviamente (dopo il fatto) la firma è piuttosto lunga ... 2048 bit anziché 256. La dimensione totale del JWT senza la firma è probabilmente solo di 2000 bit da dare o da prendere, quindi è sostanzialmente il raddoppio la dimensione del token finale. Il token verrà utilizzato su più richieste per i servizi downstream, alcuni dei quali con corpi di messaggi molto piccoli, quindi sono poco riluttante a farlo.
Ho esaminato varie soluzioni DPAPI, .Net Protection e manualmente mantenendo un segreto crittografato con la chiave pubblica. Ho bisogno che la soluzione funzioni in .Net e in. Net Core. Tutti loro presentano problemi relativi alla creazione e alla gestione delle chiavi in più ambienti che sono totalmente presi in considerazione dalla configurazione esistente se io uso solo il valore D come segreto. Quindi ...
Perché NON dovrei usare il valore D come mio segreto HMAC?