Crittografia con due chiavi

4

Il caso d'uso è analogo all'accesso a una cassastrong in una banca. C'è una chiave per utente, unica per ogni utente, generata dal sistema o cancellata dalla password dell'utente. E c'è una chiave master a livello di sistema per tutti gli utenti. Entrambe le chiavi devono essere in grado di decodificare i dati. Qual è il modo migliore per implementarlo?

  1. Crittografia multipla . Sembra che io possa seguire la raccomandazione sulla pagina Wiki e utilizzare il metodo descritto da Bruce Schneier.

  2. Cripta la chiave per utente con la chiave principale. Utilizza la chiave crittografata per crittografare e decrittografare.

  3. Concatena la chiave per utente con la chiave principale. Utilizza la chiave concatenata per crittografare e decrittografare.

Specialmente 2 e 3 sarebbero più semplici di 1. Ma sono privi di difetti? Non sono riuscito a trovarne esempi.

    
posta neurite 26.10.2014 - 18:53
fonte

2 risposte

8

Il punto importante è capire chi dovrebbe gestire le chiavi. Senza crittografia multipla, quindi ci deve essere, su crittografia e decrittografia, un sistema che apprende almeno provvisoriamente tutte le chiavi. Ad esempio, se la "chiave master" e la "chiave utente" sono concatenate (il tuo "metodo 3"), allora entrambe le chiavi sono presenti contemporaneamente nella RAM del computer che usa la concatenazione per crittografare o decifrare.

Se questo non è un problema, il caso generale è La condivisione segreta di Shamir : il valore segreto (il vera chiave di crittografia) è divisa in azioni n , in modo tale che qualsiasi azione t sia sufficiente per ricostruire il segreto, ma le azioni t-1 non producono informazione di sorta. Nella tua situazione, n = t = 2; l'algoritmo di condivisione è quindi principalmente un XOR delle due condivisioni (la chiave utente e la chiave principale), che corrisponde a ciò che @rossum ha suggerito come commento.

D'altro canto, se si desidera evitare che qualsiasi sistema apprenda entrambi i tasti in qualsiasi momento, sarà necessario utilizzare la crittografia multipla. Se i dati vengono prima crittografati dall'utente, quindi dalla banca, la decrittografia verrà eseguita in ordine inverso; l'utente non impara il codice bancario, la banca non impara la chiave utente e la banca non apprenderà neanche i dati in chiaro.

    
risposta data 31.10.2014 - 12:22
fonte
4

Nessuna delle precedenti. È necessario creare una chiave messaggio per voce e crittografare quella chiave messaggio con la chiave utente e la chiave back-office. Quindi utilizzare la chiave del messaggio per crittografare / decrittografare i dati dell'utente. In questo modo le chiavi possono rimanere indipendenti e puoi usare sia per crittografare / decifrare. Potresti considerare l'utilizzo di una coppia di chiavi pubblica / privata asimmetrica per l'utente e / o le chiavi del back-office.

Quindi memorizzeresti:

E(K_b, K_d) | E(K_u, K_d) | E(K_m, M)

dove E è la crittografia, il primo argomento è la chiave, K_m è la chiave del backoffice (o, K_u è la chiave dell'utente e K_m è la chiave casuale generata per crittografare il messaggio.

Memorizza sempre alcuni identificatori di protocollo (ad es. byte iniziale) in modo da poter aggiornare il protocollo in un secondo momento.

    
risposta data 26.10.2014 - 20:59
fonte

Leggi altre domande sui tag