Qual è il modo migliore per crittografare un blob con una chiave pubblica?

1

Ho bisogno di crittografare i campi di blob di array di byte da circa 50k a 100k ciascuno in .net con una chiave pubblica e poi archiviarli in SQL / Server per distruggere i dati originali. Quando i dati vengono recuperati dal proprietario definitivo, sarà con una chiave che solo loro hanno (io non).

Il problema è che ho bisogno che tutti i record siano crittografati con la stessa chiave in modo che il proprietario possa decodificare i campi con la logica impostata (gruppo di record, non un record alla volta).

Sto leggendo RSA è troppo lento per essere pratico per dati così grandi e RSA viene in genere utilizzato solo per crittografare una chiave simmetrica. Questo funzionerebbe per me se decifrassi un disco alla volta, ma non è così e dove sono bloccato.

Quindi, se asimmetrico non funziona, qual è un altro / miglior modo per risolvere questo problema?

    
posta pghcpa 04.02.2014 - 21:58
fonte

2 risposte

1

Il modo migliore è: non farlo da solo. Usa un formato / protocollo con le librerie esistenti che fanno il lavoro. In effetti, come con tutte le cose crypto, realizzare un'implementazione working è facile, rendendo quasi impossibile un'implementazione secure , soprattutto perché non è possibile testare la sicurezza.

In questo caso, questo punta al formato OpenPGP e alla sua ben nota implementazione open source GnuPG (che è sia uno strumento da riga di comando che una libreria).

Internamente, OpenPGP utilizza crittografia ibrida : una chiave simmetrica viene generata e crittografata con il pubblico asimmetrico (ad esempio, RSA) chiave; e la chiave simmetrica viene utilizzata per elaborare la maggior parte dei dati con un algoritmo di crittografia simmetrica. Ma sebbene il concetto sia interessante da sapere, i dettagli sono meglio lasciati a un formato che è stato esaminato dai crittografi e un'implementazione che ha sostenuto l'implementazione in produzione per un decennio e per la quale si ritiene che la maggior parte degli errori sia stata trovata e rimosso.

    
risposta data 04.02.2014 - 22:32
fonte
0

Questo può essere ottenuto in modo simile al modo in cui eseguiamo la crittografia dei file di grandi dimensioni utilizzando la chiave pubblica.

Ogni volta che un blob di questo tipo deve essere crittografato:

  1. Genera una nuova chiave simmetrica (ad esempio AES).
  2. Utilizza la chiave simmetrica per crittografare il blob.
  3. Cripta la chiave simmetrica usando la tua chiave pubblica RSA.
  4. Archivia la chiave simmetrica crittografata e il blob crittografato.

Il proprietario quindi decrittografa la chiave simmetrica usando la sua chiave privata e quindi usa la chiave simmetrica per decifrare i blob.

Ecco un articolo che lo archivia in java. Il concetto è simile. link

    
risposta data 04.02.2014 - 22:14
fonte

Leggi altre domande sui tag