it-swarm.dev

Dove archiviare una chiave di crittografia lato server?

Ho alcuni dati crittografati simmetricamente con una singola chiave nel mio database. Invece di codificarlo nel mio codice, sto cercando un modo più sicuro per memorizzare la chiave di crittografia. Dove posso conservarlo in sicurezza?

129
Radek

Ecco le tue possibilità, all'incirca in ordine decrescente di raffinatezza.

  1. Utilizza un modulo di sicurezza hardware esterno. Esiste un intero settore dei prodotti progettato per scaricare operazioni sensibili alla sicurezza su dispositivi esterni. Questo non risolve il problema tanto quanto riposiziona esso, ma lo trasferisce su un dispositivo molto più sicuro, quindi nel complesso è una vittoria della sicurezza. Se stai facendo qualcosa di high-stakes, allora questo sicuramente contribuirà alla tua soluzione.

  2. Lega la crittografia al tuo hardware. In teoria gli HSM fanno esattamente questo, solo noi tendiamo ad aspettarci un po 'più di sofisticazione da un HSM rispetto alla semplice crittografia supportata dall'hardware . Ma ci sono opzioni più economiche disponibili se non hai bisogno del throughput e della conformità che un vero HSM porta sul tavolo. I chip TPM sono stati inventati in parte per questo scopo e esistono molti esempi che mostrano come integrarsi con essi. Inoltre, l'hardware crittografico dedicato è diventato abbastanza economico e rielaborando dispositivi come Open-Source U2F Keys per questo è più semplice di quanto sembri.

  3. Lega la chiave di crittografia al tuo login admin (ad es. Crittografa la chiave di crittografia con il tuo login admin). Questo è solo marginalmente utile in quanto richiede di aver effettuato l'accesso per crittografare/decrittografare qualsiasi cosa. Ma il lato positivo, nessuno può crittografare/decrittografare nulla a meno che tu non abbia effettuato l'accesso (ovvero un maggiore controllo). Gran parte dell'archiviazione sicura in Windows funziona in questo modo.

  4. Digita la chiave di crittografia all'avvio, salvala in memoria. Protegge dagli attacchi offline (a meno che non catturino la chiave dalla RAM, che è più difficile da fare). Simile all'opzione sopra, ma anche diverso. Tuttavia, il server si avvia in uno stato non utilizzabile, che richiede di fornire manualmente la chiave prima di poter eseguire il lavoro.

  5. Memorizza la chiave su un altro server. Ad es. inserire la chiave sul server Web e i dati crittografati sul server di database. Questo ti protegge in una certa misura perché qualcuno dovrebbe sapere di afferrare la chiave e il database e dovrebbe anche avere accesso a entrambi i server. Non sorprendentemente sicuro, ma comunque un'opzione estremamente popolare. La maggior parte delle persone che pensano di farlo giusto lo fanno in questo modo. Se stai pensando di farlo, prendi in considerazione anche una delle prime due opzioni sopra menzionate.

  6. Memorizza la chiave altrove sullo stesso server. Aggiunge sicurezza marginale, ma non molto. La maggior parte delle operazioni più piccole lo fanno - non dovrebbero, ma lo fanno. In genere perché hanno un solo server e viene eseguito in qualche cloud da qualche parte. È come toccare una chiave della porta invece di lasciarla nella serratura; garantito per fermare il più incompetente degli attaccanti.

  7. Memorizza la chiave nel database. Ora non ci stai nemmeno provando. Tuttavia, un'opzione deprimente popolare.

Molte soluzioni KMS basate su cloud (ad es .: AWS , GCP , Azure ) se utilizzato nel modo più efficace vincolerà la crittografia alle VM o all'ambiente cloud. L'identità univoca di VM è facile da stabilire e affermare per l'hypervisor e il KMS utilizza la combinazione di tale identità e le autorizzazioni assegnate per consentire l'accesso a un HSM gestito chiave di crittografia, simile a una combinazione di opzioni 1 e 2, modulata per tenere conto della natura effimera delle macchine virtuali cloud. Queste soluzioni KMS sono generalmente compatibili anche con altri meccanismi di identità della piattaforma, legando efficacemente le chiavi di crittografia alle chiavi di accesso; opzione 3.

145
tylerl

Mi rendo conto che è stata data risposta qualche tempo fa, ma per dare un paio di esempi alla buona risposta di Tyler:

  • Ho intenzione di usare il suo # per legare una password a un account di servizio e usare un cmdlet Powershell per afferrarlo. In questo modo gli script non devono essere modificati in modo così pesante. La password dell'account del servizio è in Active Directory e dovrebbe essere prima compromessa. Questo funziona per me da quando l'ho usato su due server.

  • Per i suoi # 5, per soddisfare la nostra conformità siamo stati in grado di memorizzare una chiave in testo normale su un altro server con memoria esterna perché tale memoria era essa stessa crittografata e l'accesso ad essa limitato. Come menziona Tyler, quest'ultimo non sembra così sicuro, ma è stato abbastanza buono anche per un duro valutatore.

5
Mike

È possibile creare un'architettura a due livelli per la gestione delle chiavi.

  1. Una chiave per crittografare i tuoi dati a riposo crittografando i tablespace o basati su colonne.
  2. Chiave master per sbloccare 1.

per le tue chiavi master usa una delle soluzioni di gestione delle chiavi stabilite come:

  • Amazon AWS KMS
  • Oracle Vault
  • Microsoft MKS.
  • o quelli open source.

Tieni solo presente che il gestore delle chiavi deve supportare una disponibilità uguale o superiore rispetto alla tua infrastruttura in cui viene utilizzata la chiave gestita.

2
Hugo R