Come crittografare e decodificare in sicurezza i file tra un server e un PC client [chiuso]

-1

Sto costruendo un'applicazione in cui gli utenti inviano file con una password per la crittografia a un server tramite ssl. Possono quindi condividere i file di crittografia con le persone

Creerò quindi un'applicazione desktop in C ++ in cui un utente può selezionare il file e decrittografarlo localmente sul desktop con una password

Option1: PGP Il mio primo pensiero è stato quello di usare pgp, ora se ho archiviato in modo sicuro una coppia di chiavi privata e pubblica sul server, tutti i file degli utenti potrebbero essere enceypted abbastanza facilmente sul server con la password degli utenti. Ma la mia applicazione desktop non sarà in grado di decrittografare il file con una sola password che avrei dovuto inserire la chiave privata nella mia applicazione desktop

Domanda 1: se la mia applicazione desktop è compilata, un utente malintenzionato può decompilare l'applicazione e ottenere la chiave privata, esiste un modo per archiviare in modo sicuro i dati in un programma compilato per prevenire tale violazione.

Opzione2: AES Un altro metodo che pensavo era che io uso un algoritmo di hashing per cancellare la password degli utenti e quindi usare quell'hash come chiave per crittografare il file usando la crittografia AES. Quindi sulla mia applicazione desktop utilizzo lo stesso algoritmo di hash per ricreare la chiave quando il destinatario del file inserisce la password per decodificare il file

Domanda2: lo stesso problema, se un attaker decompila il mio programma e vedere quale algoritmo di hashing viene usato per tornare al punto di partenza, ora possono solo generare hash e forzare il file aperto

Domanda 3: qualcuno sa come implementare meglio questo

    
posta Dr Manhattan 20.08.2016 - 04:17
fonte

2 risposte

1

Supponete che la vostra applicazione client possa e venga decompilata e non andare con la prima opzione di memorizzare la chiave privata. Ignorando il potenziale di decompilazione, sarebbe comunque una cattiva pratica dato che useresti la stessa chiave per ogni file.

Utilizzare invece un algoritmo di crittografia solido come AES e una funzione di derivazione della chiave basata su password lenta (ad esempio PBKDF2). Se si implementa questo bene (fare qualche ricerca su modalità di cifratura a blocchi, Vettori di inizializzazione, Sali e iterazioni), non importa se un hacker conosce l'algoritmo. La forza risiederà nella password che non è (o almeno non dovrebbe essere) memorizzata ovunque. Implementa criteri per password complesse (ad esempio non consentire password brevi e semplici). Buona fortuna!

    
risposta data 20.08.2016 - 08:04
fonte
1

Non sono sicuro di aver compreso abbastanza bene il caso d'uso, ma hai considerato di utilizzare semplicemente GPG (o simili) in modalità simmetrica? Non scherza con le coppie di chiavi, solo passphrase. Per il manuale GPG , il comando per crittografare utilizzando la crittografia simmetrica è solo --symmetric o solo -c e ti chiederà la passphrase. È anche possibile specificare di utilizzare l'armatura ASCII, se ciò sarebbe utile. Decifrare il blob risultante come al solito (basta passarlo a gpg senza altri argomenti) e ti chiederà nuovamente di decrittografare la passphrase.

Ci sono molti altri strumenti che crittograferanno simmetricamente e decodificheranno i file, anche se alcuni di essi sono progettati in modo molto scadente. In realtà non ho esaminato in modo specifico quanto sia buono il GPG qui, perché chiunque io voglia inviare un file crittografato a chi possiede GPG, io uso solo la crittografia asimmetrica. Tuttavia, se per qualche ragione desideri utilizzare la crittografia simmetrica, utilizzare un programma multipiattaforma già esistente e affidabile come GPG sembra una buona idea.

    
risposta data 20.08.2016 - 06:54
fonte

Leggi altre domande sui tag