Come generare un superkey per decifrare le stringhe

1

Sto lavorando a un'applicazione in cui gli utenti hanno una chiave o una password generata da me che viene utilizzata per crittografare una stringa. Ogni utente ha la propria chiave personale e nessun utente dovrebbe essere in grado di decifrare la stringa di un altro utente.

Come generare un "superkey", che potrebbe decodificare le stringhe cifrate da tutti gli utenti chiave? Sono nuovo nella crittografia, quindi se potessi avere un piccolo aiuto.

EDIT: per essere più chiaro:

  • Alice crittografa una stringa con la sua chiave: Ka
  • Bob crittografa una stringa con la sua chiave: Kb
  • Alice dovrebbe essere in grado di decrittografare la sua stringa
  • Bob dovrebbe essere in grado di decodificare la sua stringa
  • John, il supersore, dovrebbe essere in grado di decifrare Alice e Bob's String
posta Stéphane GROSSMANN 25.07.2014 - 11:36
fonte

2 risposte

4

Poiché generi le chiavi specifiche dell'utente, puoi anche tenere una copia di queste chiavi da qualche parte (preferibilmente sicuro ) e usarle quando necessario.

In alternativa, è possibile generare le chiavi con un sistema di derivazione crittografica che utilizza una "superkey" e l'identità dell'utente. Ad esempio, considera quanto segue:

  • Il superkey è K .
  • Un utente è identificato dal suo nome / login / email u .
  • La chiave per l'utente u è calcolata come: K u = HMAC K ( U )

vale a dire. usi HMAC , usando K come chiave, per calcolare la chiave specifica dell'utente. Poiché HMAC è deterministico, puoi sempre eseguire lo stesso calcolo, purché tu conosca il "superkey".

Naturalmente , il "superkey" è sensibile; non deve mai essere conosciuto da nessun altro oltre al superadmin. In particolare, NON DEVE "nascondere" la super-chiave all'interno di qualche codice applicativo che va alla macchina dell'utente. Questo può essere un problema se la generazione della chiave dell'utente deve avvenire sulla macchina dell'utente (cioè, viene eseguita da "tu" nel senso che è "la tua applicazione", ma comunque sul computer o sullo smartphone dell'utente, quindi nel raggio di reverse engineering ).

Questo meccanismo basato su HMAC è, in realtà, una sorta di metodo di compressione efficiente per lo stesso modello iniziale, ovvero si mantiene una copia delle chiavi degli utenti. (Se questa frase ti sembra oscura, allora non ne sai abbastanza (ancora) per trattare in modo sicuro la crittografia.)

    
risposta data 25.07.2014 - 14:29
fonte
-1

L'unico modo che posso pensare è usare le chiavi asimmetriche.

  1. Genera una coppia di chiavi asimmetriche K S sul server. Conserva la chiave privata da questa coppia e consegna la chiave pubblica a ogni singolo utente.
  2. Genera una coppia di chiavi asimmetriche K C per ogni singolo utente. Consenti all'utente di conservare le chiavi private dalle loro coppie e di inviare le chiavi pubbliche al server.
  3. Ogni volta che il server deve inviare qualcosa a un utente specifico, lo crittografa utilizzando prima la sua chiave privata e poi con la chiave pubblica dell'utente. L'utente quindi decrittografa i dati prima con la propria chiave privata e poi con la chiave pubblica del server.
  4. Ogni volta che un utente deve inviare qualcosa al server, lo crittografano utilizzando prima la propria chiave privata e poi la chiave pubblica del server. Il server quindi decrittografa i dati con la sua chiave privata, seguita dalla chiave pubblica dell'utente.

Dovrai assicurarti che le chiavi pubbliche degli utenti siano ben protette sul server. Se c'è una violazione del server e le chiavi (la chiave privata del server e le chiavi pubbliche degli utenti) sono fuoriuscite, chiunque sarà in grado di leggere i dati di chiunque.

Se desideri cambiare la coppia di chiavi del tuo server, puoi generare una nuova coppia di chiavi e distribuire la sua chiave pubblica agli utenti. Dovrai gestire le versioni chiave (quali dati sono stati crittografati con quale chiave). Allo stesso modo, gli utenti possono cambiare la loro coppia di chiavi e inviare chiavi pubbliche aggiornate al server.

    
risposta data 25.07.2014 - 12:14
fonte

Leggi altre domande sui tag