Cifratura end to end con più utenti

4

Sto lavorando a un'app in cui desidero fornire la crittografia end-to-end sui file, in cui più utenti sono in grado di accedere a tali cartelle. Mi piacerebbe che la crittografia fosse il più trasparente e senza attrito possibile (non voglio che gli utenti debbano gestire le proprie chiavi), quindi ho preso in considerazione modi per farlo.

I requisiti per questo protocollo sono:

  1. Gli utenti non devono gestire la propria chiave
  2. Gli utenti devono poterlo utilizzare da più dispositivi
  3. Durante la modifica del dispositivo, gli utenti devono comunque avere accesso ai loro vecchi file

I miei pensieri correnti sono:

  1. Quando un utente si registra, genera una coppia di chiavi (lato client)
  2. Cripta la loro chiave privata con una chiave simmetrica derivata da salt + password (lato client)
  3. carica la chiave pubblica, la chiave privata crittografata, hash(salt + password) e sale sull'API
  4. Lato server, archivia la chiave pubblica e la chiave privata crittografata. Poiché la password dell'utente viene utilizzata per crittografare la propria chiave privata, non può mai essere trasmessa in chiaro al server. Se, invece, viene trasmesso un hash, la loro password non viene rivelata ma se un utente malintenzionato dovesse violare il database, sarebbe possibile utilizzare l'hash per accedere al proprio account, ma non decrittografare i file. Per risolvere questo problema, l'hash della password trasmessa viene rehashed lato server e memorizzato.
  5. Quando un utente crea una cartella, genera una nuova chiave simmetrica e cripta questi file usando quella chiave (lato client)
  6. Cifra questa chiave simmetrica usando la chiave pubblica degli utenti (lato client)
  7. Quando l'utente esegue l'accesso, scarica la sua chiave privata pubblica e crittografata
  8. Decrittografa la chiave privata, memorizza sul dispositivo
  9. Utilizza la chiave privata per decrittografare la chiave simmetrica, quindi decrittografare i file
  10. Per garantire l'accesso alla cartella di proprietà di A a un altro utente B, l'utente A recupera la chiave pubblica per l'utente B dall'API, decodifica la chiave simmetrica della cartella utilizzando la propria chiave privata, quindi crittografa nuovamente la chiave simmetrica utilizzando la chiave pubblica di B, prima di trasmetterlo all'API. L'utente B può quindi recuperare la chiave simmetrica crittografata, decodificarla utilizzando la sua chiave privata e decodificare il contenuto della cartella

Un approccio del genere ha senso (dal punto di vista della sicurezza e dell'usabilità)? Ci sono avvertenze o potenziali insidie?

Capisco che ci siano protocolli N volte per la crittografia asimmetrica multipartitativa, tuttavia poiché i file piuttosto che i messaggi memorizzati non è realistico dal punto di vista dell'ampiezza di banda.

    
posta Benedict Lewis 30.11.2017 - 12:12
fonte

2 risposte

0

Il tuo approccio ha senso per quanto riguarda l'utilizzo di una chiave simmetrica per crittografare i file e la condivisione di quella chiave tra gli utenti autorizzati che utilizzano le chiavi pubbliche per mantenerla segreta.

Per risolvere i problemi relativi all'archiviazione di chiavi private sul tuo server (anche se sarebbero state crittografate), potresti semplicemente inviare una nuova coppia di chiavi a un utente ogni volta che effettuano l'accesso da un nuovo dispositivo. Ciò consentirebbe agli utenti di dissociarsi da qualsiasi coppia di chiavi assegnata se un dispositivo viene perso, l'app viene cancellata, ecc. Ciò consentirebbe anche la flessibilità di rimuovere i singoli dispositivi in caso di furto, anche se ciò richiederebbe una nuova crittografia di tutti i file associati a quell'utente con una nuova chiave simmetrica.

    
risposta data 30.11.2017 - 21:00
fonte
0

Hai esaminato il Protocollo del segnale ( wikipedia ) e libreria libsignal per C, Java e Javascript?

Credo che soddisfi tutti e tre i tuoi requisiti, in più ha il vantaggio di essere molto ben costruito da un team di esperti di crittografia e, a meno che tu non sia un team di esperti, farai di criptare male.

    
risposta data 29.07.2018 - 03:09
fonte

Leggi altre domande sui tag