Chiave di decrittografia in scadenza

1

Quindi, sono solo un programmatore - non conosco molto della crittografia così nuda con me e della mia mancanza di conoscenza in questo ambito. In sostanza, sto cercando di memorizzare nella cache i dati che potrebbero essere potenzialmente volatili (ad esempio, cambiare o eliminare nel tempo). Una soluzione che ho pensato sarebbe quella di crittografare i dati (lato server) e amministrare la chiave per il client - ecco il trucco: scade entro un dato periodo di tempo (cioè, due o tre giorni). Può essere aggiornato o rinnovato, ad ogni connessione al server, ma se la chiave non viene aggiornata, alla fine mi piacerebbe che non funzionasse. Ciò significherebbe che il metodo di crittografia avrebbe bisogno di utilizzare il tempo come fattore (quindi forse utilizzando un modulo / operatore floor / round basato sull'ora corrente per fornire i dati / le informazioni crittografati effettivi necessari per decrittografare completamente i dati). La mia unica preoccupazione, naturalmente, è che i clienti possano modificare l'ora corrente sul loro sistema. Forse posso trovare una fonte attendibile per il momento attuale.

(Inoltre, comprendo che è fondamentalmente sciocco dare dati a un cliente quando è previsto che venga portato via, ma sono comunque interessato a trovare una soluzione a questo problema.)

Qualcuno sa qualcosa o c'è qualcosa che può guidarmi nella direzione giusta / ottenere effetti simili a quello che cerco?

    
posta Full Metal 13.10.2013 - 06:38
fonte

1 risposta

1

I dati (inclusa la chiave in qualsiasi forma) sono passivi e non possono verificare l'ora corrente. Quindi deve essere uno strumento di decodifica che verificherà l'ora. Con questo in mente puoi mettere il tempo giusto nella chiave (e avvolgerlo con un tasto statico per una maggiore sicurezza).

Il software di decifrazione che risiede sul lato client diventerà tuttavia un punto debole. L'utente può modificare il tempo, ma non è un problema: è possibile utilizzare il protocollo TSP (RFC 3161) per ottenere l'ora corrente dal server TSP affidabile. Tuttavia, la parte che decrittografa la chiave, estrae il tempo e verifica che diventi il collegamento più debole. Dovrai proteggerlo seriamente per prevenire la deobfuscazione, la decompilazione e le conseguenti modifiche. Anche se non esiste una soluzione universale a questa attività, strumenti come VMProtect (ne cito perché utilizza la virtualizzazione integrata) rendono gli hacker un po 'più difficili e ti salveranno dai trucchi dell'utente medio.

Proviamo a inventare lo schema chiave ora.

La chiave di crittografia K1 viene utilizzata per crittografare i dati. Questa è la chiave di sessione casuale, probabilmente diversa per ogni installazione client.

La chiave K2 viene utilizzata per crittografare K1. K2 è costruito come "random_part_X + f (random_part_X + year + day_of_year mod 3), dove f può essere un HMAC o solo un hash (che richiede un pensiero aggiuntivo). Encrypted_K1 e random_part_X vengono spediti dal tuo server ogni 2-3 giorni. è crittografato con la chiave K3 "statica" memorizzata nel software di decrittografia.

Quando il software lato client deve usare la chiave K2, decrittografa K2 e ha random_part_X. Quindi richiede tempo dalla fonte attendibile ed esegue f (random_part_X + year + day_of_year mod 3) ricostruendo così K2. Ora K2 è usato per decifrare il criptato_k1 ricevuto e ottenere K1 stesso. Infine, K1 viene utilizzato per decrittografare i dati.

Se l'attaccante ottiene K1, sarà in grado di decrittografare tutti i dati. Quindi lo schema (a) deve essere ulteriormente complicato, e (b) potresti voler cifrare pezzi diversi di dati con chiavi K1 differenti. E poi di nuovo devi preoccuparti della possibile de-offuscamento, decompilazione e debug del codice che ottiene K1.

    
risposta data 13.10.2013 - 20:41
fonte

Leggi altre domande sui tag