Criptazione end-to-end per i file

0

Ho bisogno di sviluppare un sistema in cui un utente possa caricare un file tramite browser che crittografa il file e lo memorizza sul mio server. Dopo che il file è stato caricato, un altro utente può scaricare il file con un'app per iOS o Android e decrittografarlo per vederlo. Il problema è che non dovrei essere in grado di decifrare il file sul mio server, perché i file sono potenzialmente molto sensibili. Ora, non ho alcuna conoscenza reale sulla crittografia e non so da dove iniziare. Hai qualche suggerimento su quale sia la migliore pratica per questo tipo di crittografia end-to-end?

Mi è venuta un'idea di come dovrebbe essere il mio schema di sicurezza.

  1. Il client CMS effettua l'accesso e la sua password viene utilizzata da ora in poi come chiave di caricamento (utilizzata in seguito)
  2. Sul lato CMS, vengono creati utenti di app successivi (potenziale ricevitore di file), con una password di accesso (per l'app) e una chiave di download (utilizzata in seguito) per decrittografare i file scaricati.
  3. Il client CMS invia agli utenti dell'app la loro password di accesso e la chiave di download in una posta separata (nessuna email)
  4. Il client CMS carica un file che viene crittografato con una chiave casuale (utilizzata in seguito) nel browser e memorizzato sul server 1. La chiave casuale e il riferimento al file vengono crittografati con la chiave di caricamento e memorizzati sul server 2 .
  5. Il client CMS seleziona l'utente dell'app (una o più) per visualizzare i file caricati. In questo momento, la chiave casuale e il riferimento al file (dal passaggio 3.) vengono decodificati con la chiave di caricamento. Questo pacchetto decrittato viene duplicato e crittografato con la chiave di download dell'utente dell'app selezionata (questo passaggio viene eseguito per ogni utente di app selezionato, quindi avremo più pacchetti per ogni utente dell'app)

Questo approccio è vicino o sto andando nella direzione sbagliata?

    
posta Philipp Mainz 13.11.2016 - 17:30
fonte

2 risposte

1

I need to develop a system where a user can upload a file via browser which encrypts the file and stores it on my server. After the file is uploaded other user can download the file with an iOS or android app and decrypt it to view it. The problem is I shouldn't be able to decrypt the file on my server, because the files are potentially very sensitive.

Le persone lo fanno spesso con i sistemi di cloud storage come Dropbox: crittografano un file, lo memorizzano sull'host, quindi lo decodificano altrove. È possibile riutilizzare qualsiasi sistema di crittografia comune e collaudato (GPG, TrueCrypt, ecc.) E all'host è solo un blob crittografato.

Se si fornisce questo prodotto come prodotto, è necessario riutilizzare il software di crittografia file esistente e riutilizzare i sistemi di archiviazione cloud esistenti (S3, ad esempio, è abbastanza economico e offre un'eccellente disponibilità e garanzie di durata); l'unico bit che devi fare è UX in cima a loro.

    
risposta data 14.11.2016 - 23:14
fonte
0

Vorresti la crittografia autenticata. AES-GCM con una chiave derivata da qualcosa come PBKDF2 è probabilmente la soluzione migliore.

Il problema qui è che se non conosci bene la cripto è facile spararti ai piedi. AES-GCM aiuta un po 'ma non è a prova di proiettile.

Pubblica il tuo schema di crittografia in modo che altri possano riesaminarlo e confermare che è sicuro.

    
risposta data 13.11.2016 - 18:44
fonte