Best practice per il recupero di file crittografati (o password)

3

Sto scrivendo un'app (Java) che memorizza dati potenzialmente sensibili nel cloud utilizzando un provider scelto dall'utente. Quindi sto crittografando i file usando AES / EAX + PBKDF2. Questa è la parte facile, o almeno così sembra.

Vivo nella paura dell'inevitabile domanda: "Ho dimenticato la mia password, puoi aiutarmi?"

I pensieri finora sono:

  1. Non si può fare nulla: tutto ciò che faccio indebolisce la crittografia per tutti. Questa è la risposta che un purista darebbe, penso. Ma non è davvero un'opzione in quanto in realtà non affronta il problema della password o del recupero dei dati.

  2. Genera una password casuale reale e crittografala con la password degli utenti e una password di escrow casuale che invio al mio server. Questo non riduce le richieste di aiuto, ma fornisce una risoluzione ma indebolisce la sicurezza di tutti.

  3. Fai # 2, ma non inviare al server, archivia la password di deposito in garanzia con i dati e crittografala in base alle risposte a tre domande selezionate dall'utente. Potrebbe essere facoltativo.

Sono propenso verso 3. Essendo facoltativo, indebolisce la tua sicurezza solo se scegli di farlo.

Sarei davvero curioso di sapere se ci sono delle "migliori pratiche" conosciute per questo genere di cose. Tutto ciò che ho letto riguarda le reimpostazioni della password web / server.

    
posta RabidMutant 17.09.2016 - 10:21
fonte

2 risposte

4

Ho risposto su Stack Overflow, ma vedo che questo è pubblicato anche qui, quindi ripeto la mia risposta da lì:

Hai a che fare con un problema a cui fanno fronte molte aziende di sicurezza serie. In breve:

Hai ragione che # 1 è l'opzione più sicura. Alcune aziende, come ad esempio SpiderOak , sono orgogliose di mantenere i dati così sicuri che nemmeno loro potrebbero accedervi sotto qualsiasi circostanza.

Se fai # 2, allora qual è il punto di crittografia sul lato client in primo luogo? Avrebbe senso se tutto ciò che desideri sono i benefici in termini di prestazioni, non i benefici per la sicurezza.

Per n. 3: Domande segrete non funzionano .

Un'altra alternativa all'uso della condivisione segreta per consentire un certo tipo di recupero della password. La password dell'utente o la chiave che crittografa i dati dell'utente, viene suddivisa in un numero di condivisioni che vengono distribuite alle entità attendibili. Il recupero della password o della chiave richiede che queste entità lavorino insieme. Ciò impedisce a un singolo giocatore cattivo di accedere ai dati dell'utente. Generalmente, è meglio farlo con la chiave crittografica piuttosto che con la password (le password sono talvolta condivise tra sistemi diversi, quindi un utente non dovrebbe volere che qualcuno veda la sua password). Sfortunatamente, questa soluzione intermedia richiede molto pensiero e implementazione e comporta costi amministrativi costosi.

    
risposta data 17.09.2016 - 22:52
fonte
0

Il recupero chiave è una domanda molto vecchia e da un punto di vista concettuale non è cambiata da secoli:

  • se esiste una sola chiave (leggi: solo una persona conosce il segreto ), solo il proprietario della chiave può aprire la cassastrong, ma se la chiave viene distrutta o persa (leggi: l'utente dimentica la sua password), ciò che è nella cassastrong (leggi: dati crittografati) è perso (*) = > questo può essere usato per dati personali quando il rischio di compromissione è più grave del rischio di perdita
  • questo può essere mitigato creando una seconda chiave (leggi: una terza parte ha accesso al segreto). Se la chiave viene persa o distrutta, il proprietario della cassastrong chiede la copia e crea immediatamente una nuova copia = > questo viene utilizzato quando la perdita di dati è il rischio più elevato, quando i dati sono essenziali per più di una persona, ad esempio file sensibili di un'organizzazione.

In quest'ultimo caso, la parte difficile non è tecnica, ma è solo organizzativa: come può il proprietario della chiave avere fiducia nella terza parte? Per le reimpostazioni di password Web / server, gli amministratori possono sempre fare qualsiasi cosa per conto di un utente, quindi concettualmente tengono una chiave e possono dare una copia al proprietario. Nelle organizzazioni di medie e grandi dimensioni e nei dati altamente sensibili, un uso comune è avere un sicuro (fisico o numerico) che può essere sbloccato solo da due diversi tasti e nessuno dovrebbe tenere entrambi i tasti - nota: questo è più o meno come le casseforti personali nel lavoro di banca, la banca è responsabile per la chiave della camera di sicurezza e il proprietario ha la chiave della sua cassastrong personale. Per i dati meno sensibili, un responsabile della sicurezza può conservare le copie: questo è il modo in cui il ripristino delle chiavi funziona con la cartella crittografata microsoft: la chiave simmetrica viene criptata due volte, una volta con la chiave personale dell'utente e una volta con una chiave amministrativa per consentire all'amministratore di recuperare i dati.

Quindi la buona domanda è qual è il tuo vero requisito di sicurezza:

  • solo l'utente è responsabile dei propri dati
  • l'amministratore (o l'help-desk o ...) dovrebbe essere in grado di recuperare i dati se un utente dovesse perdere la sua password
  • hai davvero bisogno di collaborare con due persone diverse per recuperare i dati

Il terzo modo può essere semplicemente impostato codificando una chiave simmetrica in sequenza con due diverse chiavi pubbliche, ma il recupero sarà più complesso perché i proprietari delle chiavi private dovranno collaborare.

(*) puoi sempre provare a rompere una cassastrong fisica, ma alcuni possono essere appositamente progettati per distruggere il loro contenuto in quel caso

Parliamo ora del tuo problema reale. La 3 domanda gioco è una prova per un sistema di autenticazione a più fattori. Il problema è che qualcuno che conosce la persona può indovinare le risposte se sono vere (e molte persone sanno molte cose sulle celebrità) e l'uso può dimenticare quello che ha risposto che vuole che non sia immaginabile da nessuno. Il modo migliore per un utente di non dimenticare una password particolare è archiviarlo in una password sicura come l'eccellente keypass . L'analogia sarà: metto una copia di tutte le mie chiavi in una sola cassastrong e tengo la chiave attaccata alla mia collana. Per evitare la perdita del file delle password, è facile sincronizzare un keypass su un desktop con uno su uno smartphone. Sfortunatamente può essere utilizzato solo da utenti educabili.

Se ciò di cui hai bisogno è consentire agli utenti di recuperare la loro password, significa che devi creare una copia (sul tuo server o nel computer dell'utente) crittografata con una chiave pubblica di cui sei proprietario della parte privata . Se la copia è conservata dall'utente, dovrà inviarla a te in modo da decrittografarla e rispedirla. Questa parte è estremamente sensibile e potresti provare a configurare un'autenticazione a più fattori: ad esempio, un'autenticazione normale e un account di posta secondaria. Se la copia viene conservata da te, dovresti pensare alle conseguenze della tua chiave master compromessa = > rompe l'intera sicurezza del sistema.

    
risposta data 17.09.2016 - 11:21
fonte

Leggi altre domande sui tag