Sfondo:
Sto creando un'app Web sicura con lo scopo di fungere da archivio non di conoscenza per i dati di piccole dimensioni (stiamo parlando di pochi byte). Poiché tutta la crittografia e la decifrazione avvengono sul lato client, affinché l'utente sia in grado di gestire i propri segreti, i dati devono essere decifrati per essere ricercabili e così via.
Il server conosce un nome crittografato e un valore crittografato.
Tutti i dati vengono crittografati una volta dal client, quindi crittografati una volta utilizzando un segreto condiviso da SRP e quindi inviati tramite SSL.
Soluzioni / dubbi:
Ci sono due modi in cui ciò può essere fatto da quello che so.
A : invia sia il nome che il valore al client e gli consenta di memorizzarlo durante la sessione. I nomi vengono decodificati e mostrati, mentre i valori rimangono crittografati. A causa della natura non sicura di javascript e per ragioni di UX, ciò sarebbe altrettanto sicuro quanto la decifrazione di tutti i dati e la memorizzazione. Poiché l'utente riceve tutti i valori, c'è un rischio maggiore che si verifichi un attacco offline. Ciò rende inoltre difficile controllare che i valori non siano mai più lunghi della sessione (ad esempio, come iOS Safari memorizza le pagine Web in uno stato attivo anche quando l'app è disattivata).
B : invia solo il nome crittografato e un token. I nomi sono memorizzati e mostrati all'utente in un formato decrittografato. Ogni volta che l'utente desidera vedere il valore decodificato, viene inviata una richiesta al server che la invia. Il valore non viene mai memorizzato sul client. Questo limita il rischio con attacchi offline, poiché l'utente non avrà mai tutti i valori memorizzati contemporaneamente. Lo scenario peggiore sarebbe un valore memorizzato. Il problema che vedo con questo è che ci sarà una considerevole quantità crescente di dati inviati attraverso Internet - che potrebbe essere un rischio maggiore rispetto alla memorizzazione offline.
Chiarimento delle domande:
È più sicuro archiviare i dati sul dispositivo dell'utente senza poter revocare il loro accesso ai dati
o
Invia dati preziosi molte più volte tramite Internet?