Dati: alcuni dati ( D ) crittografati con la chiave ( K ), che risulta nel carico utile crittografato ( E ). È possibile inviare E (insieme a qualsiasi altra cosa necessaria) a un server da memorizzare e successivamente verificare che K sia stato utilizzato per crittografare i dati originali risultanti in E , senza inviare K in formato testo semplice?
Lo scopo di questo è che un utente che non conosce i dati originali vuole avere accesso ad esso e conosce solo K (gli è stato fornito). Devono mostrare al server che sanno che K è stato utilizzato per crittografare i dati prima che il server restituisca E a questi ultimi per la decrittografia effettiva. Ovviamente l'intero processo non dovrebbe rivelare il testo semplice K al server o essere inviato attraverso la rete. In modo che chiunque guardi la rete o stia seduto sul server non ottiene l'accesso gratuito a K .
Una possibile soluzione che ho trovato è di inviare una versione localmente hash di K con E per l'archiviazione sul server che può essere verificata con un'altra versione localmente con hash di K più tardi. Se i due valori hash di K (quello inviato nella richiesta e quello memorizzato sul server) corrispondono, allora K era corretto per quanto riguarda il server .
Riesci a vedere qualche problema con la soluzione di cui sopra o puoi suggerire un approccio più sicuro?
Modifica: in questo ipotetico sistema, gli utenti sono anonimi, quindi l'autenticazione dell'utente non può far parte della soluzione. Un utente dovrà semplicemente fornire al server una qualche forma di token che mostri di essere a conoscenza di ciò che K è. Se corretto, il server risponderà con E , se non è corretto, non restituirà nulla.