Ho una tabella in cui tutte le colonne devono essere crittografate (a parte il PK). Ciò sarà realizzato utilizzando AES a livello di applicazione. Tuttavia c'è un campo particolare che deve rimanere ricercabile.
Ad esempio una tabella dei messaggi ha:
- MessageTitle (crittografato)
- MessageBody (crittografato)
- SenderID (crittografato ma abbinabile)
Dato un SimpleSender SenderID dovrei essere in grado di selezionare tutti i messaggi correlati.
Alcuni vincoli / decisioni:
- Ho bisogno di crittografare i dati a riposo, inclusa questa colonna. Non ho scelta.
- Il SenderID è di un formato fisso, quindi se ho cancellato il valore non sarebbe difficile forzare la forza
- Ho scelto di crittografare campi specifici piuttosto che l'intero database (TDE) per mitigare le minacce diverse dai soli furti di dischi.
Attualmente la mia soluzione preferita è crittografare il SenderID (e solo il SenderID) con un IV fisso. In questo modo i dati rimangono crittografati, ma possiamo ancora abbinarli nelle query.
Uno svantaggio di questo approccio è che potrebbero verificarsi attacchi di testo in chiaro sui dati; Gli amministratori di database possono creare record con diversi SenderID e provare a trovare un record corrispondente. Tuttavia ritengo che questo possa essere mitigato dal servizio di crittografia con controllo e monitoraggio degli accessi adeguati.
Questa sembra una soluzione valida?