Come fornire l'opzione "Password dimenticata" per un file crittografato con password?

3

Ho creato un'utilità che crittografa un file (.txt, .dox, così via ...). L'utilità richiede una password da parte dell'utente al momento della crittografia dei file.

problema

Supponiamo che un utente abbia creato 1000 file crittografati con password diverse e dimentichi la sua password di alcuni file. Come lo recupererà?

I miei pensieri

Dovrei registrare ogni password (crittografata) da qualche parte e con il nome e la dimensione del file possiamo trovare la password del file che può essere fornita all'utente, ma qui ci sono alcune catture:

  1. Possono esserci molti file con lo stesso nome e dimensioni
  2. L'utente può rinominare il file, quindi qui ti aiuteremo di meno
  3. Se proviamo a trovare la password in base alla dimensione, ci possono essere molti file con le stesse dimensioni, quindi non sarà un buon modo per fornire all'utente la password esatta.

Ho anche pensato di inviare l'intero registro delle password all'utente sulla sua e-mail registrata, ma poi ho trovato questo LINK e ho cambiato idea.

Richiesta

Quale sarà il modo migliore per fornire agli utenti la password esatta del file crittografato?

P.S: l'utility è costruita usando Objective-c, Cocoa per OSX

    
posta Vikas Bansal 12.10.2015 - 18:44
fonte

2 risposte

4

Sembra che la tua domanda principale riguardi come essere in grado di abbinare i file crittografati con la password in chiaro per quel file nel tuo database. Puoi utilizzare una funzione di hash sicura, ad esempio SHA-256 per risolvere questo problema. L'algoritmo è

  1. Ottieni file e password dall'utente.
  2. Crittografa il file utilizzando la password.
  3. Genera SHA-256 del file crittografato.
  4. Memorizza la password nel tuo database usando SHA-256 come chiave. Si noti che questo è dove risiede il rischio. Assicurati di crittografare la password con una chiave che memorizzi in una posizione separata. Dovrai anche registrare quale utente ha crittografato il file in quanto non vuoi permettere a Bob di ottenere la password di testo chiaro del file crittografato di Alice.

Quando un utente richiede la versione in chiaro della sua password, tu:

  1. Calcola SHA-256 del file.
  2. Trova l'hash corrispondente nel tuo database.
  3. Esegui i controlli di accesso appropriati per assicurarti che questo sia il loro file crittografato.
  4. Restituisce la password di testo non crittografato all'utente
risposta data 13.10.2015 - 07:53
fonte
2

Permettetemi innanzitutto di chiarire alcuni dei vostri pensieri:

  • Non puoi avere due file con lo stesso nome e tipo esatti. Avrai file con lo stesso nome ma con un'estensione diversa. Se intendi memorizzare i nomi dei file e le relative password crittografate, utilizza il nome file completo per es. abc.txt / abc.pdf ecc.

  • Devi costruire il tuo programma in modo tale che senza decifrare il file non puoi rinominarlo. Se si consente la ridenominazione senza privilegi viola il principio di integrità e non è raccomandato. Se desideri ancora farlo, aggiorna anche il nome del file nel file memorizzato.

  • Non importa. La ricerca del nome file completo (abc.txt) ti fornirà la chiave primaria di cui hai bisogno.

La tua necessità di fornire una funzione Recupera password avrà una certa complessità, dal momento che richiederà la progettazione di un sistema di autenticazione per assicurarsi che la persona che recupera la password sia la stessa che la persona che la recupera .

  1. Potresti utilizzare un sistema di recupero password basato su e-mail, che è quello che viene eseguito dalla maggior parte delle app e dei siti web. (Sarà necessario memorizzare le credenziali di accesso)

  2. È possibile utilizzare un sistema basato su OTP. Anche in questo caso sarà necessario memorizzare le credenziali di accesso e il numero di cellulare o qualcosa del genere.

  3. Non implementare la funzione. Attenersi ad un avviso che attesti l'importanza di ricordare la password e le conseguenze nel caso in cui la perdano. Avere una casella di controllo con un messaggio I Accept. : D

Spero di aver dato qualche intuizione. :)

    
risposta data 12.10.2015 - 20:25
fonte

Leggi altre domande sui tag