Nella nostra app Web utilizziamo i token monouso. Ad esempio, quando qualcuno crea uno dei tre "account", reimposta la password o qualsiasi altro numero di elementi che richiedono token casuali monouso, noi:
- Genera 32 byte casuali dal CSPRNG del SO
- Base-64 URL lo codifica
- Archivia l'hash nel nostro database (Scrittura con N = 2 ^ 15, r = 8, P = 1)
- Assegna all'utente il token monouso (in genere sotto forma di URL)
Tutto funziona bene. Tuttavia, attraverso il profiling abbiamo notato che alcune delle nostre chiamate API possono richiedere un paio di secondi perché devono verificare e creare token. Alcune chiamate API useranno Scrypt tre o più volte.
Anche se non è terribile, vorremmo velocizzare le chiamate API se possibile.
Mi è venuta l'idea di pre-generare alcuni token casuali, ma mi piacerebbe un secondo parere prima di andare avanti e iniziare da questo.
Ci sono due modi in cui penso che potremmo fare questo. Per prima cosa, dovremmo semplicemente creare (triple, hash, sale) le triple e memorizzarle nella memoria. Il lato negativo di questo è che avremmo i token non criptati seduti lì e che un attaccante potrebbe prenderli e usarli. Tuttavia, ciò richiederebbe l'accesso all'istanza AWS specifica e i token monouso sarebbero l'ultima delle nostre preoccupazioni in quella situazione.
Il secondo sarebbe utilizzare un vault di qualche tipo, quindi le tuple sono ancora in memoria, ma sono criptate. Questo sembra più sicuro, ma richiede ancora la password al vault di stare seduto da qualche parte e quindi l'attaccante avrebbe comunque accesso ad esso se avesse accesso all'istanza di AWS.
Pensieri? Sono un po 'diffidente nei confronti di questa idea, ma mi piacerebbe davvero ridurre alcune chiamate API da tre secondi a meno di un secondo.