TL; DR:
- Un database / file crittografato con una password specifica dell'utente come chiave di crittografia.
- Generalmente sì (a seconda della sicurezza dell'app);
Versione più lunga: quando rispondi a una domanda del genere, devi prendere in considerazione:
- Di chi stai proteggendo;
- I rischi di rottura;
- Questo problema è già stato risolto da altri;
Non penso che tu stia proteggendo l'utente da solo (come altri sembrano presumere). Stai proteggendo da non-legittimi, abusatori dell'applicazione con intenti malevoli.
Rischi: beh, se le chiavi vengono rubate, l'abusatore può prendere i dati, rubare gli account, compromettere i dati o persino l'immagine pubblica dell'utente.
Il modo classico per risolverlo è autenticazione / autorizzazione (basato su stringhe di dati memorizzate ("Cosa l'utente conosce") o biometrica ("Proprietà dell'utente") o proprietà ("che utente ha ", la seconda parte di 2FA)) con cui differenzia gli utenti legittimi da quelli illegittimi.
Per quanto riguarda questo problema è già stato risolto da altri - come pensi che password manager come keepassX lo facciano? KeepassX è un database locale di password, file chiave, altre stringhe di dati sensibili, in sostanza il tuo problema.
Utilizzano 3 modi (e combinazioni di alcuni di essi): password, chiave o legame con le misure di autenticazione esistenti (come l'account Windows). A seconda di quanto vuoi che la tua implementazione sia sicura - scegli e scegli. Se scegli solo la password (che farei nella maggior parte dei casi), hash con una funzione crittografica ha, come sha512 + salt o bcrypt quindi, anche se un attore malintenzionato conosce l'hash, deve lavorare per indovinare la stringa originale. L'utilizzo di questa password per crittografare la chiave fornirà la protezione necessaria.
Non consiglio di usare solo le credenziali di Windows, dal momento che non è una buona idea non chiedere al cliente una password quando si avvia l'app se si tratta di un'app di sicurezza (di nuovo, come fa keepassX).