Quale libreria / librerie di crittografia lato client dovrei usare per rendere più semplice la sincronizzazione?

0

Voglio creare una webapp e un'app mobile sorella (usando react native) che usi la crittografia lato client. La crittografia sarebbe per le voci di testo scritte su base giornaliera che l'utente poteva creare e modificare. Se l'utente si disconnette, desidero che siano ancora in grado di modificare le voci attualmente sul proprio dispositivo e di creare nuove voci e voglio che quelle modifiche vengano trasferite sul server quando l'utente torna online.

Se l'utente inserisce il testo offline per un determinato giorno su un dispositivo, quindi dimentica e immette testo diverso offline su un altro dispositivo per lo stesso giorno, mi piacerebbe che le due voci fossero unite in un'unica voce quando i dispositivi tornano indietro in linea. C'è qualche tipo di magia che mi permetterebbe di farlo sul server con i file crittografati?

In caso contrario, avrei i dispositivi inviare un hash del testo crittografato come era prima delle modifiche. Quando il testo aggiornato colpisce il server, invierei l'hash e confrontarlo con l'hash del testo crittografato che era attualmente memorizzato. Quando arriva il secondo aggiornamento, l'hash non corrisponde al testo memorizzato e il testo memorizzato verrebbe inviato al client per essere riconciliato. Esistono protocolli / librerie esistenti là fuori per questo genere di cose? Preferirei non reinventare la ruota.

    
posta Loktopus 21.05.2018 - 05:28
fonte

1 risposta

1

Lascia che riformuli le tue precondizioni:

  • Tutti i dati memorizzati sul server o trasferiti al server sono crittografati.
  • La chiave di crittografia è nota solo ai client.
  • Possono esserci più client, tutti utilizzano la stessa chiave di crittografia o una chiave derivata da un segreto condiviso. Come questa chiave / segreto è condivisa tra i clienti è al di fuori della tua domanda.

Quindi supponi che due client possano modificare gli stessi dati e chiedere un modo per unire queste modifiche sul lato server.

In primo luogo, non è chiaro quale sarà il risultato di questa unione secondo te anche se i dati non sono crittografati. Quindi sto semplicemente supponendo che tu possa in qualche modo suddividere i dati in parti indipendenti (come frasi o paragrafi) e trattare queste parti come entità completamente indipendenti durante la fusione, cioè:

  • Se entrambi i client hanno modificato parti diverse, fai in modo che ogni cliente sostituisca solo questa parte. Allo stesso modo è possibile rilevare e risolvere se entrambi i client hanno aggiunto nuove parti in luoghi diversi o se è stata rimossa una parte che l'altra non ha toccato.
  • Se entrambi i client hanno modifiche in conflitto sulla stessa parte, qualcuno dovrebbe risolvere il conflitto. Questo può essere fatto per il fatto che la prima modifica vince (cioè hai bisogno di data / ora) o che chiedi la risoluzione dei conflitti manuale.

Si noti che con l'algoritmo di fusione sopra non è necessario esaminare effettivamente il contenuto delle parti, cioè l'algoritmo potrebbe essere eseguito su testo semplice, su hash delle parti e anche su parti crittografate se tutte le parti sono state crittografate indipendentemente da l'un l'altro. Solo la risoluzione del conflitto manuale dovrebbe in qualche modo presentare i contenuti all'utente in modo che sia in grado di vedere cosa sta effettivamente risolvendo. Ma poiché tutti i client condividono la stessa chiave / segreto, ogni client può anche decrittografare qualsiasi parte crittografata dall'altro client e visualizzarla all'interno della risoluzione dei conflitti manuale.

In altre parole: il modo in cui viene eseguita l'unione può essere reso indipendente dai dati crittografati semplicemente suddividendo i dati in parti indipendenti (che sarebbe comunque necessario per la fusione) e quindi crittografando ciascuna parte singolarmente e indipendentemente dalle altre. L'implementazione esatta, le librerie ecc. Per fare l'unione non sono quindi più un problema di sicurezza delle informazioni e quindi sarebbero fuori tema qui.

    
risposta data 21.05.2018 - 07:27
fonte

Leggi altre domande sui tag