Immagina le app web che dovrebbero funzionare con o senza poche interazioni con il server web, ad esempio:
- un gioco browser in cui il livello e il progresso del giocatore devono essere salvati localmente.
- un gioco, un'app progressiva o un'estensione del browser con la possibilità di acquisti in-app in cui le funzioni sbloccate e a pagamento devono essere salvate localmente.
In ogni caso, la manomissione di quei dati critici sul lato client deve essere esclusa. Ad esempio, l'utente deve essere impedito di "barare" accedendo e manipolando l'archivio dati locale, che si tratti della memoria locale o di un IndexedDB, attraverso la console dello sviluppatore.
Capisco che con l'API Web Crypto la chiave di dire, una crittografia AES-GCM, può essere salvata come un tipo di chiave crittografica speciale in IndexedDB ed è quindi ancora utilizzabile localmente, ma non può essere vista a causa della sua opacità . Tuttavia, uno schema ingenuo consistente nell'app Web che salva la chiave crittografica, il vettore di inizializzazione e gli acquisti di progresso / in-app del lettore crittografato in IndexedDB potrebbe essere facilmente compromesso in quanto l'utente potrebbe semplicemente utilizzare la chiave e iv per decrittografare e quindi crittografare nuovamente la chiave. i dati.
Le cose potrebbero migliorare se la chiave è stata memorizzata sul server, ma ciò vanificherebbe l'obiettivo di ridurre l'interazione con il server e avremmo bisogno di uno schema che impedisca all'utente di richiedere quella chiave dal server come l'app web.
Mi piacerebbe riprenderci il cervello. Pensi che ciò che ho deciso di fare sia per niente fattibile, e sì, come sarebbe una soluzione?