Crittografia simmetrica per la protezione dei dati

3

Il mio team sta lavorando a una soluzione per archiviare informazioni sensibili su una soluzione di archiviazione remota. Sto proponendo di utilizzare la crittografia simmetrica dei dati in cui esiste una chiave univoca per documento. Le chiavi per questo saranno memorizzate in modo tale da essere accessibili dove i dati saranno usati ma separati dai dati crittografati. I dati crittografati verranno scritti e letti dalla memoria. Anche se questo è probabilmente eccessivo, penso che allevierà alcune delle preoccupazioni che stanno ostacolando l'adozione di questa tecnologia. L'idea è che anche se qualcosa va storto e qualcuno accede alla memoria del documento, i dati non saranno utili senza l'accesso alle chiavi. Nel caso in cui qualcuno abbia accesso a queste chiavi, questi documenti saranno l'ultima delle nostre preoccupazioni.

In poche parole, la preoccupazione è che qualcuno possa accedere a questi dati praticamente da qualsiasi luogo e recuperare i documenti attraverso le interazioni con il solo provider di archiviazione. La soluzione proposta ha lo scopo di rendere tale che, anche se un utente malintenzionato dovesse ottenere un accesso completo e autenticato all'archivio documenti, non disporrebbe di informazioni sufficienti per ottenere il contenuto dei documenti. Avrebbe bisogno di accedere alle informazioni che non sono disponibili in quel provider di archiviazione. Questo (in teoria) rende la sicurezza di questi dati fondamentalmente non peggiore della situazione attuale. Questo potrebbe essere un obiettivo discutibile ma il problema che ho è in gran parte politico.

Devo anche aggiungere che questo non è destinato a essere l'unica sicurezza per questi documenti. Questo sarebbe ausiliario per le protezioni pronte all'uso. Una domanda a parte sarebbe se ci fosse qualcosa che potesse indebolire quegli approcci standard.

Dopo aver fatto qualche lettura, penso che usare 256 AES dovrebbe essere adeguato. È questo il caso e per quanto tempo dovremmo aspettarci che questo sia abbastanza buono?

Comprendo inoltre che utilizzare un MAC è standard per garantire che i dati non siano stati danneggiati. Dopo aver letto la pagina wiki qui e poi approfondire maggiori dettagli e un po 'di dibattito , sto faticando a dare un senso a questo in questo caso d'uso. La corruzione dei dati non è una preoccupazione primaria qui, ma non credo che faccia male. Ma se tutto ciò che voglio è verificare che il messaggio non sia stato corrotto, c'è qualche ragione per cui un hash (ad esempio, SHA-256) memorizzato con la mia chiave non soddisfa il mio requisito? Probabilmente mi manca qualcosa qui.

L'approccio generale e l'algoritmo sembrano legittimi? Qualsiasi aiuto con le cose MAC / hash è apprezzato.

    
posta JimmyJames 13.02.2018 - 16:59
fonte

2 risposte

3

After doing some reading, I think using 256 AES should be adequate. Is this the case and for how long should we expect this to be good enough?

Sì! AES-256 è un algoritmo ampiamente utilizzato e standardizzato. L'uno cavaet è AES-256 non è in sé, l'intero algoritmo. L'algoritmo richiede di specificare una modalità di cifratura a blocchi che è il meccanismo con cui distorce i blocchi di dati prima della crittografia per evitare l'emergere di schemi. Ti consiglio di dare un'occhiata a questa immagine . La modalità di cifratura a blocchi più comune è CBC ed è ideale per la crittografia di dati con più di un blocco di lunghezza (più di 128 bit che, a quanto mi risulta, i dati saranno).

AES-256 correttamente configurato dovrebbe essere sicuro per il futuro dell'informatica. La crittografia simmetrica è attualmente ritenuta sicura anche in un mondo post-quantistico (a differenza della crittografia asimmetrica come RSA che molto probabilmente si sgretolerà) quindi dovresti dormire bene la notte sapendo che i tuoi dati sono al sicuro anche in futuro.

But if all I want to do is verify the message has not been corrupted, is there any reason a hash (e.g. SHA-256) stored with my key wouldn't meet my requirement? I'm probably missing something here.

La differenza chiave tra le tradizionali funzioni hash crittografiche (resistenti alle collisioni) come le funzioni SHA-256 e HMAC è che le funzioni hash HMAC sono "keyed", nel senso che richiedono una chiave segreta. HMAC-SHA256 (ad esempio) viene spesso utilizzato nei casi in cui è ragionevole ritenere che un utente malintenzionato possa tentare di manipolare i dati e ricalcolare l'hash per rendere il sistema non modificato.

Diciamo che ho un file di testo che contiene le istruzioni su quando lanciare un attacco e un secondo file per contenere l'hash SHA-256 del primo. Scrivo sul file "attacco all'alba" e lo ho cancellato con SHA-256 e disconnesso. L'hacker ora effettua l'accesso (tramite mezzi fuori dal campo di applicazione per discutere di come qui, questo è un semplice esempio) e l'attaccante modifica il file di testo per dire "Non attaccare!". Ma ora l'hash SHA-256 non corrisponde, quindi l'utente malintenzionato ricalcola l'hash SHA-256 del file che ha modificato e sostituisce il mio vecchio hash. Ora invio questo file e il suo hash ai miei generali. Hanno cancellato il file e visto corrispondere (e quindi fidarsi di esso) e vedere "Non attaccare!".

Entra nella famiglia HMAC. Nello stesso esempio se ho usato HMAC-SHA256 per hash il mio file, richiederebbe la mia chiave segreta per completare l'operazione. Pertanto, quando l'autore dell'attacco modifica il mio file di testo non conosce la mia chiave segreta e non riesce a generare un HMAC-SHA256 valido del file modificato. Quando viene inviato ai generali (anch'essi hanno la mia chiave segreta, tramite la pre-distribuzione o PKI), generano l'hash con HMAC-SHA256 e non corrispondono. Sanno che il messaggio è stato manomesso.

Per farla breve: SHA-256 è un ottimo modo per convalidare il danneggiamento dei dati non dannosi non si verifica in quanto è resistente alla collisione, ma chiunque può calcolare un hash SHA-256. Se il tuo modello di minaccia include la possibilità di manomissioni dannose da parte di un utente malintenzionato, l'hash HMAC-SHA256 con una chiave segreta può garantire che l'autore dell'attacco non possa manipolare i dati e ricreare l'hash per farlo sembrare non alterato.

    
risposta data 13.02.2018 - 17:41
fonte
0

I am proposing that we use symmetric encryption of the data where there is a unique key per document. The keys for this will be stored such that it is accessible to where the data will be used but separate from the encrypted data. Encrypted data will be written to and read from the storage. While this is possibly overkill, I think it will ease some of the concerns that are hampering the adoption of this technology. The idea is that even if something goes wrong and someone gains access to the document storage, the data will not be useful without access to the keys. In the event someone has access to these keys, these documents will be the least of our concerns.

Questa è un'approssimazione fatta in casa ad alcuni approcci standard alla gestione delle chiavi . Le tue chiavi per documento sono una versione di ciò che viene comunemente chiamato chiave di crittografia dei dati (DEK). Perché vengono chiamati con questo nome apparentemente ridondante? Perché esiste anche un concetto chiamato chiave di crittografia chiave (KEK), un insieme di chiavi (spesso chiamate "chiavi principali") che vengono utilizzate per crittografare i DEK. Questo approccio ha alcuni vantaggi significativi:

  • I DEK crittografati possono essere archiviati insieme ai documenti che crittografano. Solo i KEK devono essere archiviati separatamente e il volume è molto più piccolo.
  • È possibile progettare il sistema in modo che le applicazioni front-line non vedano mai i KEK. Il KEK può risiedere su un modulo dedicato di sicurezza di servizio / hardware che le applicazioni client devono inviare loro i DEK crittografati e il servizio risponderà con il DEK decifrato (su una connessione crittografata, ovviamente).

After doing some reading, I think using 256 AES should be adequate. Is this the case and for how long should we expect this to be good enough?

C'è un detto che dice qualcosa del tipo: "Se stai digitando le lettere A-E-S nel tuo codice, stai sbagliando". La crittografia è molto più complicata rispetto all'utilizzo di AES. Ad esempio, si parla di utilizzare un MAC per proteggere i dati, uno sforzo che le persone si sbagliano di routine.

Penso che dovresti portare un aiuto esterno per fare tutto questo. Non sembra che la tua squadra abbia le conoscenze e l'esperienza per farlo in modo affidabile. Se non sono un consulente esterno, ho avuto esperienze positive utilizzando elementi come la gestione delle chiavi di Amazon Web Services e le funzionalità di archiviazione crittografate. Ad esempio, crittografia AWS lato client AWS con gestione AWS KMS i tasti sono un'ottima soluzione che è ragionevolmente facile da usare. Alcuni link informativi:

Non so quali caratteristiche comparabili possono fornire altri fornitori di servizi cloud.

    
risposta data 13.02.2018 - 23:54
fonte

Leggi altre domande sui tag