Nel caso in cui hai descritto che stai memorizzando informazioni per conto dell'utente, e non lo stai utilizzando per autenticare l'utente. Quindi, mentre il contenuto di ciò che si sta memorizzando include password (quasi esclusivamente), non si veramente "memorizzare le password" nel senso tradizionale. Stai memorizzando segreti .
Adegua la tua strategia di conseguenza.
Entrambi questi problemi sono risolti; hai solo bisogno di applicare la soluzione corretta. Quando si "memorizza le password" (ovvero, l'autenticazione dell'utente), si passa attraverso l'hashing, il sale, la chiave che si estende, ecc., Che si ha familiarità con. Ma per quanto riguarda la memorizzazione dei segreti .
Prima di tutto, evita se possibile il problema . Questo è il motivo per cui esistono concetti come i token di accesso all'API. Non hai bisogno della mia password di Facebook perché non puoi usarla. Hai bisogno di un token di accesso che Facebook è disposto a darti con il mio permesso.
La prossima soluzione migliore è quella di legare l'accesso all'accesso utente . Le informazioni vengono crittografate utilizzando una chiave derivata dalla password che utilizzi per accedere - che non conosco e non memorizzo. Quindi io (il proprietario del server) non posso accedere ai tuoi dati se non inserisci la tua password.
Questo è popolare perché è potente. In effetti, Windows lo ha fatto per molto tempo, motivo per cui la modifica della password può rendere inaccessibile i file crittografati. È anche il motivo per cui la tua password di Windows è memorizzata in testo normale nella memoria mentre sei loggato. Un accorgimento di implementazione che ti consiglierei di evitare.
Avanti sulla nostra lista, puoi separare i tuoi processi in modo tale che i dati non crittografati non siano mai disponibili su macchine rivolte all'esterno. Punti bonus se è coinvolto un HSM. L'essenza qui è che l'utente fornisce i suoi segreti al server web, che vengono rapidamente crittografati usando la chiave pubblica per qualche dispositivo crittografico segreto che è totalmente inaccessibile perché non è connesso. I semplici segreti vengono immediatamente dimenticati e i dati crittografati vengono poi spediti in un magazzino freddo da qualche parte.
Alla fine i segreti verranno decifrati da qualche altra parte con l'assistenza di quel criptico coso e abituarsi. Solo, il punto in cui questo accade non ha accesso a Internet. O almeno nessun percorso dall'esterno in.
Infine, puoi provare la soluzione di cui sopra, ma fallire miseramente. Dico solo questo perché in realtà tutte le altre soluzioni sono solo variazioni schifose su quelle precedenti: crittografia nel database, utilizzando una password dell'applicazione , memorizzando la password su un altro server, memorizzando i dati su un altro server, salendo la tua chiave di crittografia con [ idea stupida qui ], e così via.
E infine, il mio avvertimento standard per domande come questa si applica. Lo scriverò davvero grande:
The fact that you're asking this question means that you shouldn't do it
Scherzi a parte. Memorizzazione delle credenziali bancarie della gente? Se non capisci in che tipo di problemi ti stai prendendo, se stai chiedendo a Internet suggerimenti su come farlo, se tutte le soluzioni che ho menzionato non erano GIÀ innanzitutto per le opzioni valide solo , quindi non dovresti implementare questo .
Le persone si fidano di te per farlo bene. E non hai intenzione di farlo bene. Non perché non hai fatto le domande giuste, ma perché non hai risolto questo problema abbastanza spesso per capire quali insidie nascoste avrai trascurato. Questa è una cosa difficile: non è difficile fare , ma è difficile non commettere errori.
Non tradire la fiducia dei tuoi clienti mettendoti in testa.