Ricerca di dati crittografati dal database

Oct 15 2020

Supponiamo di avere una tabella con la posta elettronica memorizzata in una tabella. L'ho crittografato utilizzando AES-256 e ho memorizzato il risultato nella colonna DB.

Diciamo che ho un messaggio di posta elettronica di input e voglio cercare se questo messaggio di posta elettronica esiste o meno in DB: ora vedo due approcci ad esso

  • Crittografa l'input e cerca il valore crittografato.
  • Usa il concetto di Blind Index (usando HMAC SHA-256) e memorizzalo, quindi per l'input crea anche questo HMAC e cercalo.

Quale approccio è migliore e perché? Per la crittografia stiamo usando la libreria Inhouse che fa AES-256 usando Secret Key / Salt. La chiave segreta viene recuperata da AWS KMS (fondamentalmente decrittografata da AWS KMS)

Risposte

4 ManRow Oct 15 2020 at 12:51

Forse qui potrebbe essere applicabile l'approccio comune a due colonne utilizzato per gli scenari di accesso.

Questo è spesso il luogo in cui gli utenti devono accedere con la loro e-mail (o perché hanno dimenticato il proprio nome utente o perché il sito non li utilizza), ma il loro indirizzo e-mail è considerato un dato confidenziale che non deve essere archiviato in chiaro.

In questo scenario, il database ha due colonne:

  • Una colonna contenente un hash pepato degli indirizzi email (ad esempio SHA-256 (email + pepper), dove "pepe" sono solo alcuni byte segreti memorizzati sul server o HSM. Il termine è preso da come viene usato un "pepe" per proteggere le password)
  • Una colonna contenente gli indirizzi e-mail crittografati (spesso crittografati da una DEK standard (chiave di crittografia dei dati) tramite AES-256 con un IV casuale per voce )

La prima colonna viene utilizzata per cercare rapidamente le informazioni dell'utente per scopi di accesso, mentre la seconda colonna può essere utilizzata per recuperare l'effettivo indirizzo e-mail quando necessario (ad esempio, per scopi di corrispondenza).