Crittografia in due passaggi

4

Considera il seguente caso utente:

  1. Ho alcuni dati sensibili (es: numero di carta di credito)
  2. Cifrò questi dati e li memorizzerò nel database
  3. Ora voglio inviare questi dati a un utente X, ma io non voglio:

    1. Decifra questi dati prima di inviare
    2. Fornisci all'utente X la mia chiave utilizzata per decodificare i dati memorizzati

Vorrei dare all'utente X la sua chiave privata e utilizzare un altro giro di crittografia sui dati crittografati prima di inviarlo a lui.

Esiste un algoritmo di crittografia che modifica la chiave di decodifica con ogni successivo ciclo di crittografia? Qualcosa che assomiglia a questo:

Ct = Encrypt(KeyA, Pt)   # I store Ct in the database

CtB = Encrypt(KeyB, Ct)  # I now encrypt it with different key and 
                         # send CtB along with a private key KeyC to the user
                         # KeyC is derived from KeyB

Pt = Decrypt(KeyC, CtB)  # the user can now use this KeyC to get the original data

Con questo, posso creare diversi ciphertexts per ogni utente, impedendogli di condividere le chiavi. Ciò significa anche che i dati non saranno mai in formato testo normale sul server.

Il caso d'uso è solo teorico e so che ci sono diverse soluzioni appropriate per tale situazione.

    
posta onlineapplab.com 03.12.2012 - 23:02
fonte

3 risposte

1

Sembra che quello che stai chiedendo sia probabilmente matematicamente possibile, ma sarebbe probabilmente difficile (e forse impossibile) trovare un modo per farlo in modo tale che sia matematicamente vero e difficile da indovinare. Sospetto che sia improbabile trovare un sistema esistente che soddisfi le specifiche esatte in quanto non riesco a pensare a casi d'uso che non potrebbero essere gestiti in modo più efficace utilizzando applicazioni molto più semplici di algoritmi crittografici comuni.

Se hai un caso particolare che ti viene in mente che pensi che questo gestisca quello che altrimenti non potrebbe essere gestito, allora forse postare lo scenario caso d'uso (anche se teorico) ti aiuterà a rispondere meglio alla tua domanda. Potrebbe anche valere la pena di portare l'idea sulla Crittografia o addirittura sulla Matematica poiché tendono ad occuparsi maggiormente del lato matematico teorico delle cose se è qui che si trovano i tuoi interessi.

    
risposta data 04.12.2012 - 19:18
fonte
2

@AJ Henderson include una risposta ragionevole; Cercherò di spiegare più chiaramente.

1) La tua domanda mescola ciò che vuoi (memorizzazione sicura e trasmissione) con il modo in cui vuoi farlo (crittografia in due fasi).

2) Se si desidera archiviare le informazioni in modo sicuro, crittografarle con una chiave simmetrica (scegliere una nuova chiave simmetrica per ogni "cosa" che si desidera memorizzare). Ora crittografare la chiave simmetrica con una chiave pubblica e memorizzarla.

3) se vuoi condividere le informazioni: 3a) Decifrare la chiave simmetrica e crittografarla con la chiave pubblica dei destinatari. 3b) Invia i dati crittografati insieme alla chiave simmetrica crittografata dalla chiave pubblica dei destinatari.

Il destinatario (e solo il destinatario) può utilizzare la propria chiave privata per decrittografare le informazioni. In nessun momento i dati vengono trasmessi in chiaro.

I pensa che risponde che vuoi fare, sebbene come sia diverso.

    
risposta data 04.12.2012 - 14:26
fonte
0

In primo luogo, non si dovrebbero mai archiviare dati crittografati con un sistema di chiavi pubblico / privato. La crittografia a chiave pubblica / privata è significativamente più costosa da utilizzare e, in generale, fornisce molta meno sicurezza per la lunghezza della chiave utilizzata e richiede un processore molto più intenso. La soluzione migliore è crittografare una chiave di archiviazione dati utilizzando un sistema di chiavi pubblica / privata e utilizzare la chiave di archiviazione dati simmetrica per la tua archiviazione crittografata. È quindi possibile fare ciò che stai cercando.

Crittografia, il server genera una nuova chiave di archiviazione dei dati e crittografa il numero CC. La chiave di archiviazione dei dati è crittografata con la chiave pubblica del server e archiviata. Quando si desidera inviare i dati all'utente X, si utilizza la chiave privata del server per decodificare la chiave di archiviazione dei dati e crittografare nuovamente la chiave di archiviazione dei dati con la chiave pubblica dell'utente X. L'utente X può ora accedere alla chiave di archiviazione dati simmetrica in uno stato crittografato e quindi decrittografarlo localmente per poter decodificare i dati crittografati simmetricamente.

    
risposta data 03.12.2012 - 23:36
fonte

Leggi altre domande sui tag