Sto lavorando su un'app che memorizza i dati sensibili (pensiamo che sia un locker delle password) per l'UWP (Universal Windows Platform).
Il requisito più importante è la possibilità di effettuare il roaming dei dati tra i dispositivi dell'utente, in modo che l'utente possa aggiungere la sua password sul desktop e averla sincronizzata automaticamente sul cellulare.
Ovviamente ciò si apre a potenziali problemi, poiché i dati devono essere crittografati prima di memorizzarli e sincronizzarli.
Per rendere le cose più difficili, vorrei anche consentire all'utente di accedere all'app utilizzando un PIN breve o Windows Hello (biometrico o PIN).
L'intero scenario richiede molta attenzione su cose diverse:
- Per evitare di chiedere la password ogni volta che l'utente aggiunge / cancella i dati, ho bisogno di tenerlo in qualche modo in memoria per l'intera sessione, in modo da poter cifrare e salvare i dati ogni volta che si verifica un cambiamento. Mantenerlo in memoria non mi sembra la scelta migliore, dato che la memoria può essere letta da potenziali aggressori, ma non riesco a pensare a qualcosa di meglio.
- Se l'utente sceglie di utilizzare un PIN come password sostitutiva, è necessario conoscere la password per poter crittografare / decodificare i dati, quindi ho pensato che potrei usare questo PIN per crittografare la password principale e sincronizzare la password crittografata accanto ai dati crittografati (e forse il PIN con hash, in modo che lo stesso PIN possa essere utilizzato su un altro dispositivo). È una buona idea?
- Se l'utente sceglie di utilizzare Windows Hello, le cose sono un po 'più difficili: Hello genera una chiave che dipende sia dall'app che dal dispositivo corrente, quindi la stessa app avrà chiavi diverse su dispositivi diversi, e questo vanifica lo scopo di usando Hello nel mio caso, dato che non sarò in grado di criptare la master password con Hello key e usarla su un altro dispositivo. La mia idea, per ora, è quella di utilizzare i dati dell'utente (ad esempio l'e-mail o un ID account) per crittografare la password principale e utilizzare Hello solo come gateway per l'app, ma ciò richiederà che la mia app chieda le autorizzazioni per ogni dispositivo, il che significa che l'utente dovrà eseguire la configurazione iniziale su ciascun dispositivo (e vorrei evitarlo). Ciò significa anche che l'e-mail o l'ID dell'account devono essere sincronizzati con il resto dei dati delle app, potenzialmente dando via sia la password crittografata che la sua chiave. Cosa faresti in questo caso?
Sono a conoscenza dell'esistenza di un PasswordVault che potrei usare per memorizzare la password principale, in modo da poter usare solo il PIN o Hello per accedere a Vault, ma la mia precedente esperienza è stata terribile, poiché la sincronizzazione dei dati dell'utente era più veloce di quello di Password Valut, lasciando l'app in uno stato incoerente (ad esempio con i dati dell'utente sul nuovo dispositivo ma senza chiave per decrittografarli).
Comprendo che la domanda potrebbe essere troppo ampia e che posso ridurre le mie richieste, ma mi piacerebbe fare le cose nel modo migliore possibile.