Il modo ideale per gestire scenari in cui è necessaria l'autorizzazione di un utente sarebbe utilizzare qualcosa come Oauth, ma dato che OAuth non si applica per SFTP, si, si vorrebbe archiviarli in un formato crittografato, e li ha decrittografati in fase di runtime. La crittografia è incredibilmente difficile da eseguire correttamente. Molti esperti che lo hanno fatto per anni commettono ancora errori. Anche se non riesco a spiegare esplicitamente come dovrebbe funzionare la tua applicazione, posso dare alcune linee guida.
- Assicurati di seguire i protocolli crittografici appropriati. Questa sarà la parte più difficile. Dovrai studiare per questo.
- Assicurati di utilizzare una libreria ben nota come NaCl o BouncyCastle. Sono belle librerie di alto livello che rendono più difficile fare errori.
- Scegli l'algoritmo corretto. Dovrai scegliere un codice a blocchi simmetrico come AES-256. La crittografia asimmetrica o i codici di flusso non sono pensati per l'attività che si sta tentando di realizzare.
- Archivia le chiavi di crittografia in un datastore separato dai dati crittografati. Se il tuo database contenente i tuoi testi cifrati viene violato da un attacco SQL injection, non vuoi che la chiave di decrittografia sia inclusa con quella.
- Assicurati di tenere conto delle persone che hanno password duplicate. La crittografia è deterministica, nel senso che se si utilizza la stessa chiave di crittografia e lo stesso testo in chiaro, si otterrà lo stesso risultato. Questo può essere risolto in due modi diversi: utilizzando una chiave di crittografia univoca per ciascun client (probabilmente non pratico), assicurandosi di utilizzare un IV univoco (e scegliendo una modalità di funzionamento che supporti IV) o aggiungendo un valore univoco nella parte anteriore del testo normale (di nuovo, assicurandosi di scegliere la modalità operativa corretta.
Questo non vuole essere un elenco completo di come implementare la crittografia in modo sicuro, ma può almeno farti puntare nella giusta direzione.