Por favor, avíseme si alguna de mis suposiciones es incorrecta.
Supongamos que tengo una base de datos, en la que todas las filas de una columna de base de datos se cifran en el nivel de la aplicación mediante una única frase de contraseña, "SECRETO", utilizando una derivación de clave basada en contraseña:
TantoelsaltaleatoriocomoelIVaseguranquecifrarlosmismosdatosparadosfilasdiferentesproducirádiferentesvalorescifrados.Sinembargo,siunatacantetieneaccesodelecturaamibasededatosypuedeforzarelcifradodeunasolafila,entoncessabríamifrasedecontraseña"SECRETO" y podría descifrar todas las filas cifradas.
¿Esto significa que el principal beneficio de usar un salt aleatorio y IV para cada fila es que oculta la frecuencia de los valores de mis datos cifrados? Por ejemplo, la desventaja de no usar un salt aleatorio e IV sería que un atacante podría mirar mi base de datos y ver "50 filas tienen un valor X, 49 filas tienen un valor Y, y una fila tiene un valor Z", pero no sabría qué ¿X, Y y Z en realidad lo son a menos que también puedan descifrar el cifrado? ¿Hay más razones para usar un salt / IV aleatorio por fila?
Digamos que necesitaba consultar mi base de datos para los valores que están cifrados. ¿El uso de un salt aleatorio e IV hace que la consulta "Dame las filas que tienen valor N" sea imposible? ¿Cómo puedo proteger mis datos con encriptación y seguir siendo capaz de consultarlos, y a qué tipo de amenazas comunes sería vulnerable?