Estoy buscando aplicar el cifrado de nivel de columna SQL utilizando claves simétricas. Los pasos iniciales necesarios para crear la clave maestra de la base de datos, certificados y claves simétricas parece sencillo y he probado con éxito el cifrado/descifrado de datos utilizando claves simétricas.Columnas SQL cifradas en WHERE Cláusula
Sin embargo, una vez que los datos están encriptados, no sé cuál es la mejor manera de consultarlos. P.ej.
SELECT PlainTextA, PlainTextB, PlainTextC
WHERE CONVERT(varchar, DECRYPTBYKEY(EncyptedColumn)) = @SearchTerm
seguramente resultaría en una exploración de tabla completa?
Otra opción que pensé que podría funcionar es encriptar los criterios de búsqueda primero, p. Ej.
SELECT PlainTextA, PlainTextB, PlainTextC
WHERE EncyptedColumn = ENCRYPTBYKEY(KEY_GUID('KeyName'), @SearchTerm)
pero esto no funciona, ya que el valor cifrado generado siempre es diferente.
Cualquier sugerencia sería muy apreciada.
Por cierto, la única cosa que no debes hacer ** es salar el hash con un valor específico de fila (PK): estarías exactamente de vuelta en el cuadrado 1, sin saber qué buscar. Para estos escenarios, * puede * eliminar el hash con un * valor global * del sitio. Esto es suficiente para evitar los ataques de tablas del arco iris, pero mantiene los datos explorables. Sin embargo, tenga en cuenta que dos filas distintas con contenido idéntico * tendrán * el mismo hash, por lo que está exponiendo cierta información, pero esta es la definición de tener los datos buscables. –
"Tenga en cuenta que dos filas distintas con contenido idéntico tendrán el mismo hash": esta fue mi principal preocupación con el uso de hash, ya que reduce el nivel de seguridad; sin embargo, la tabla en la que estoy trabajando tendrá de 4 a 5 columnas encriptadas y Solo agrego una columna hash correspondiente para una de esas, entonces puede ser accecible. –
Tenga en cuenta que la colisión hash en la tabla está sujeta al ataque de cumpleaños (meet-in-the-middle) por lo que es significativamente más alta de lo que la intuición lo pondría. Todavía SHA1 tiene un espacio de direcciones bastante grande a 20 bytes. –