Sono piuttosto un principiante dell'architettura e della sicurezza dei sistemi, quindi voglio solo verificare che questo piano abbia senso. Sto creando un'app Web e ho bisogno di memorizzare una password per ogni utente. Ho già letto molto su algoritmi di hashing, sale e così via. Userò Argon2 poiché sembra essere la raccomandazione corrente. La mia domanda riguarda il modo in cui gli hash vengono archiviati e controllati in termini di architettura generale.
Poiché hashing con Argon2 è intenzionalmente piuttosto costoso, voglio creare un servizio in un modulo / processo separato in modo che possa essere facilmente spostato su una o più macchine separate, se necessario. Anche se vivesse sulla stessa macchina del server principale delle app, sarebbe banale monitorare l'utilizzo della CPU e della memoria per ottimizzare i fattori di costo dell'algoritmo di hashing.
La mia app invierà al servizio richieste HTTPS POST per creare, aggiornare, eliminare o verificare una password. Tutti i dettagli saranno nel corpo della richiesta, inclusa la password in testo normale. La connessione verrà crittografata. La risposta sarà semplicemente un'indicazione di successo o fallimento.
Il servizio gestirà la logica delle operazioni del database, le password di hashing e il confronto degli hash per l'uguaglianza. Le password vivranno in un database separato dagli utenti, in modo che anche se un utente malintenzionato scarica l'intero database delle password, non conosce ancora la password di nessuno e viceversa. Inoltre, se dovessi migrare a una diversa soluzione di archiviazione per i miei altri dati, c'è meno migrazione da fare poiché le password possono rimanere come sono.
Suona bene? O in qualche modo apre più punti deboli di cui non sono a conoscenza?