Modo corretto per eseguire la crittografia sicura bidirezionale su un sito web

5

Attualmente sto lavorando a un progetto che richiede di memorizzare informazioni sensibili (principalmente password e altre informazioni) su un server web tramite un sito web standard python / fiaschetta. Questa informazione deve essere condivisa con il numero x di altre persone nel sistema in cui possono decifrare e vedere le informazioni.

Idealmente mi piacerebbe eseguire tutta la crittografia sul lato client e mantenere il server che memorizza i dati crittografati in un modo che significa che il server non è mai in grado di decodificare questi dati.

Originariamente pensavo a un sistema simile a quello di lastpass, ma con la possibilità di condividere gli stessi dati con altri utenti per essere decodificati e visualizzati da loro non posso pensare a un modo per farlo funzionare.

È possibile?

[modificato per aggiungere ulteriori informazioni]

Il progetto su cui sto lavorando è in realtà una password / gestione delle informazioni app principalmente rivolta alle aziende che vogliono gestire le loro password / informazioni interne per dire accesso al server o sistemi software con account singoli. Non penso sia possibile fornire agli utenti le chiavi da usare al di fuori del sistema. Speravo che la password degli utenti o forse una singola chiave di qualche tipo sarebbe stata sufficiente per decifrare i dati conservati nel sistema, ma essere in grado di crittografare i dati in modo che qualsiasi chiave degli utenti possa decrittografarli mi elude. Penso che potrebbe non essere possibile.

    
posta nullabletype 09.08.2014 - 16:41
fonte

1 risposta

6

Fondamentalmente, è necessario crittografare i dati che si desidera proteggere utilizzando una chiave simmetrica (ad esempio, la chiave AES). Questa chiave è nota solo al gruppo di utenti cui è consentito accedere ai dati crittografati sul server.

La chiave che hai usato per crittografare i dati non deve essere archiviata sul server. La crittografia e la decifrazione avvengono sul lato client all'interno del browser Web del client, ci sono molte librerie JavaScript che implementano l'algoritmo AES.

La parte più difficile è come condividere la chiave di crittografia tra gli utenti. Inoltre, se lo stesso utente condivide parte dei suoi dati con due diversi gruppi di utenti, potrebbe dover utilizzare diverse chiavi di crittografia per ciascun gruppo. Si noti che non si desidera che la chiave sia nota al server

Quindi come possiamo farlo. Ci sono due opzioni per la distribuzione delle chiavi:

  1. Utilizza la presa Web per condividere la chiave tra il gruppo di utenti che utilizza la connessione P2P. Le chiavi possono essere archiviate crittografate utilizzando la memoria Web HTML5 su ciascun browser utente.
  2. Ogni utente ha una coppia di chiavi RSA in cui la sua chiave pubblica è memorizzata sul server. Quindi per l'utente A condividere una chiave AES con l'utente B. Utente A scaricare la chiave pubblica dell'utente B e crittografare la chiave AES utilizzando la chiave pubblica uesr B. Quindi carica la chiave crittografata AES sul server. Gli utenti B scaricano la chiave crittografata AES e la decrittano con la sua chiave privata. Quindi può utilizzare la chiave crittografata AES per accedere ai dati dell'utente A.

Vedi, la sfida tecnica nel tuo sistema è come gestire le chiavi di crittografia e come gestisci i gruppi di utenti.

Dovresti sfruttare i vantaggi dell'archiviazione web HTML5 per memorizzare le chiavi AES, semplicemente assegnare per ogni utente una passphrase e utilizzare questa passphrase per generare una chiave AES master che puoi usare per crittografare tutte le chiavi nella memoria web e altre informazioni sensibili dati sul lato client.

Nota: il problema principale qui se l'utente perde la chiave di crittografia. In questo caso è possibile che non sia in grado di recuperare i dati crittografati sul server.

Se pubblichi più dettagli sui requisiti del tuo progetto, potremmo essere in grado di darti una soluzione migliore e magari una soluzione più semplice.

    
risposta data 09.08.2014 - 20:10
fonte