PHP e Amazon KMS per la crittografia

0

Ho un progetto di portale medico di auto accesso per i pazienti per visualizzare la cronologia delle visite e le informazioni di consultazione.

Alcuni campi nel database devono essere crittografati. Il motivo è nel caso in cui il DB ottenga l'accesso non autorizzato, non dovrebbero vedere i dati in chiaro.

Useremo PHP 7 per il progetto. Ho letto che è consigliato l'uso nelle funzioni di decifrare e decifrare di openssl.

Per la chiave di crittografia stavo pensando di utilizzare Amazon KMS per gestire le chiavi.

Per i server abbiamo intenzione di avere tutto pronto su Amazon. Credo che possiamo impostare i ruoli IAM in modo che il servizio KMS di accesso EC2 sia sicuro.

Gli utenti accederanno al sito usando https. Ogni volta che vengono interrogati dati sensibili o prima che vengano salvati nel database, lo script php cripterà e decodificherà utilizzando le funzioni kms e openssl.

Mi chiedo se questa configurazione sia abbastanza sicura da crittografare i dati? Altre preoccupazioni farebbero una query sql per cercare dati. Con i dati crittografati, le ricerche con LIKE% pippo% non sembrano possibili.

C'è un modo migliore per farlo?

    
posta darnpunk 04.03.2017 - 02:20
fonte

1 risposta

1

La configurazione può essere considerata sicura. Tenete i dati decrittografati solo in memoria. In genere si utilizzerà una chiave per riga per crittografare i dati sensibili. Tuttavia non è possibile cercare i dati nel database (come indicato). Dipende dal caso d'uso che potresti essere in grado di risolvere il problema tagliando i dati sensibili. Quando si desidera cercare un valore particolare, è possibile eseguire l'hash del valore prima di cercarlo. Tuttavia puoi realizzare solo una ricerca di corrispondenze esatte e non una con caratteri jolly (l'operatore "mi piace" non funzionerà!).

Un approccio completamente diverso sarebbe quello di crittografare l'intero database. I dati vengono memorizzati crittografati sul disco rigido. Quando usi AWS con RDS puoi implementare facilmente questa strategia: link

Tutti i backup sono crittografati e anche i dati stessi vengono archiviati crittografati. Tuttavia, se qualcuno accede al database quando è in esecuzione, i dati non vengono crittografati per questo particolare utente. Significa che quando si concede a qualcuno il permesso di accedere ai dati verrà decifrato. Tuttavia alla fine si tratta comunque di come hai impostato i tuoi ruoli IAM. O fai affidamento sui ruoli IAM per il KMS o per l'RDS. Quindi, se imposti correttamente i ruoli IAM, tutto andrà bene. AWS supporta da qualche settimana anche la replica cross-region di tali istanze di database crittografate.

Normalmente per PCI DSS e per conformità HIPAA sono accettati entrambi gli approcci. Mentre stai cercando un modo per cercare i dati, ti consiglio il secondo approccio.

Crittografia disco con RDS

RDS utilizza un volume EBS per archiviare i dati. I dati sul volume EBS possono essere crittografati (vedi link ). Significa che quando l'istanza RDS accede al volume EBS, i dati vengono crittografati. decrittografato in modo trasparente. Significa la lettura resp. operazione di scrittura innesca una decrittazione resp. una crittografia dei dati. Qui trovi i dettagli su come impostare RDS con volumi EBS crittografati: link In sostanza, durante la creazione dell'istanza devi specificare se deve essere crittografato o meno.

Dopo averlo configurato, devi configurare un utente con il database che consente di accedere al database. Alla fine è necessario anche un ruolo IAM che consente di modificare l'istanza del database tramite l'applicazione. Non so se ti servirà il dopo. Dipende molto dal tuo caso d'uso.

L'ultima cosa che consiglio è di crittografare la comunicazione tra l'applicazione e l'istanza RDS.

Riassunto i dati non vengono mai memorizzati in modo non criptato. I dati vengono sempre decodificati quando vengono utilizzati e i dati non crittografati vengono conservati solo nella memoria (RAM).

    
risposta data 04.03.2017 - 21:51
fonte

Leggi altre domande sui tag