Bases de datos

Proteja sus datos con Actian Vector, Parte 2

Martin Fuerderer

13 de enero de 2025

Proteja sus datos con Actian Vector hero image

Como continuación de mi primera entrada de blog sobre las capacidades de cifrado de bases de datos de Actian Vector, la siguiente entrada de blog de la serie sobre seguridad de datos explica el cifrado basado en funciones en Actian Vector.

Cifrado basado en funciones en el vector Actian

El cifrado completamente controlado por una aplicación de base de datos se denomina cifrado basado en funciones en Actian Vector. La aplicación utiliza un par de funciones SQL integradas para cifrar y descifrar valores de datos individuales en columnas de tablas. Aparte de aplicar estas funciones a los datos según lo indicado por las sentencias SQL, el servidor de la base de datos no maneja los datos cifrados de ninguna manera específica. En concreto, el servidor de bases de datos no es capaz de descifrar los datos cifrados por sí mismo.

La aplicación especifica una frase de contraseña con la función de cifrado y necesita especificar la misma frase de contraseña de nuevo con la función de descifrado. El servidor de bases de datos obtiene una clave de cifrado simétrica a partir de la frase de contraseña y la utiliza para cifrar o descifrar los datos. Ni la frase de contraseña ni la clave de cifrado derivada se almacenan en ningún lugar del servidor de bases de datos. La aplicación siempre es responsable de proporcionar la frase de contraseña correcta a la función de cifrado y descifrado.

Normalmente, la aplicación elige una frase de contraseña y utiliza la función de cifrado cuando inserta valores de datos en una tabla. Los datos se cifran en función de la frase de contraseña elegida y, a continuación, se almacenan. Cuando se accede a los datos almacenados, ya sea durante la selección o la actualización, la aplicación utiliza la función de descifrado con la misma frase de contraseña elegida para obtener los datos en texto claro. El acceso a los datos cifrados sin la función de descifrado simplemente recupera los datos cifrados, lo que normalmente no es muy útil.

La aplicación puede especificar distintas frases de contraseña con invocaciones individuales de las funciones de cifrado y descifrado. Por ejemplo, distintos usuarios de una base de datos pueden utilizar cada uno su propia frase de contraseña para insertar datos cifrados en la misma tabla. Los usuarios pueden estar seguros de que ningún otro usuario puede ver el texto en claro de sus propios datos. O bien, una aplicación puede cifrar los datos de distintas columnas de la tabla con distintas frases de contraseña y proporcionarlas a distintos grupos de usuarios. De esta manera, un grupo de usuarios puede ver los datos en texto claro sólo en una columna, mientras que otro grupo de usuarios puede ver el texto claro de los datos en la otra columna.

La función de cifrado puede aplicarse varias veces con distintas frases de contraseña a los mismos datos. Para acceder a los datos en texto claro, deben utilizarse las mismas frases de contraseña en orden inverso para descifrarlos. Cuando se actualizan datos cifrados, primero se aplica la función de descifrado, se actualiza el valor en texto claro y, a continuación, se utiliza la función de cifrado para volver a cifrar los datos actualizados. Estos son sólo algunos ejemplos de las infinitas posibilidades de combinar el uso de las funciones de cifrado y descifrado, todo controlado por la aplicación.

Todo el cifrado basado en funciones se realiza utilizando las funciones criptográficas en sentencias SQL normales. Esto también significa que las frases de contraseña en texto claro se proporcionan a las funciones criptográficas en las sentencias SQL. Por lo tanto, el uso adecuado del cifrado basado en funciones debe tener en cuenta que las sentencias SQL se mantengan suficientemente seguras, por ejemplo, que no se rastreen ni se hagan visibles en el historial de comandos SQL.

Además, la comunicación entre la aplicación y el servidor de la base de datos debe ser segura para evitar que se filtren las contraseñas. En este sentido, la utilidad "sql" del Monitor de Terminal no es realmente un ejemplo seguro de aplicación, ya que las contraseñas en texto claro introducidas en las sentencias SQL se repiten visiblemente en la ventana del terminal.

Ejemplos de cifrado basado en funciones:

  • Definición de la tabla utilizada en los siguientes ejemplos:

CREAR TABLA t1 (nombre CHAR(20), salario VARCHAR(50)); \g

Aunque el salario es un valor numérico, la columna "salario" se define como una columna de caracteres suffficientemente grande para acomodar los bytes del valor cifrado.

  • Insertar datos cifrados en una tabla:

INSERT INTO t1 values ('Joe', AES_ENCRYPT_IV(40000, 'Contraseña secreta'); \g
INSERT INTO t1 values ('Adam', AES_ENCRYPT_IV(38000, 'Contraseña secreta')); \g
INSERT INTO t1 values ('CEO', AES_ENCRYPT_IV(350000, 'Super passphrase')); \g

Las dos primeras sentencias cifran el valor del salario basándose en la frase de contraseña "Frase de contraseña secreta", mientras que la tercera sentencia utiliza una frase de contraseña diferente "Frase de contraseña súper".

  • Selección de datos encriptados:

    1. Seleccionar sin utilizar la función de descifrado:
SELECT nombre, salario FROM t1; \g
nombre salario
Joe XnE_msRe1?Uh]!cUUerQn4opT(C[!)O~yTrzE%JS
Adam lyr*M%o53]O(5d$2`!3a:Bg$zW40wMySO5[-E7+u
CEO a*#eE!~p(1-euLx?K$w(2)@FHk+dzM`5}Q#=lD@g
(3 filas)

Los datos cifrados de la columna "salario" se muestran cifrados y, por tanto, sin sentido. La longitud de la salida de la columna "salario" demuestra que los datos cifrados suelen ocupar más espacio que los correspondientes valores en texto claro.

    1. Seleccione utilizar la función de descifrado con la primera frase de contraseña:
SELECT name, AES_DECRYPT_IV(salary, 'Secret passphrase') FROM t1; \g

nombre col2
Joe 40000
Adam 38000
CEO \020���x���
(3 filas)

Los valores cifrados con la primera frase de contraseña se descifran correctamente. El valor cifrado con una frase de contraseña diferente no se muestra en texto claro.

    1. Seleccione un registro de datos específico utilizando su frase de contraseña correcta:
SELECT nombre, AES_DECRYPT_IV(salario, 'Super passphrase')
  FROM t1 WHERE name = 'CEO'; \g

nombre col2
CEO 350000
(1 fila)

El valor encriptado se muestra en texto claro.

Al seleccionar datos cifrados, la función de descifrado necesita la frase de contraseña correcta para mostrar el texto en claro. Si se utilizan distintas frases de contraseña para distintos registros de datos, es mejor utilizar una cláusula WHERE que restrinja el resultado a los registros de datos cifrados con la frase de contraseña especificada en SELECT.

  • Actualización de datos encriptados:

Cuando se actualizan datos cifrados, es necesario descifrarlos y, por lo general, volver a cifrarlos después de la actualización. Para ello, se utilizan ambas funciones, desencriptar y encriptar, en la misma sentencia UPDATE. Al mismo tiempo, también es posible cambiar la frase de contraseña.

UPDATE t1 SET salario = AES_ENCRYPT_IV(
AES_DECRYPT_IV(salario, 'Super frase de contraseña') + 20000,
'Contraseña secreta' ) WHERE name = 'CEO'; \g

El enunciado añade 20000 al salario de "CEO" y al mismo tiempo cambia la frase de contraseña a "Frase de contraseña secreta". La función de descifrado necesita la frase de contraseña original y a la función de cifrado se le proporciona la nueva frase de contraseña. Como la nueva frase de contraseña es la misma que se utilizó para cifrar el salario de los otros dos registros de datos, un SELECT que utilice esta frase de contraseña puede mostrar ahora el texto en claro de todos los registros:

SELECT name, AES_DECRYPT_IV(salary, 'Secret passphrase') FROM t1; \g

nombre col2
Joe 40000
Adán 38000
CEO 370000
(3 filas)

La próxima entrada del blog de esta serie explicará cómo se utilizan las claves de cifrado para el cifrado de la base de datos en Actian Vector.

Fotografía de Martin Fuerderer

Sobre Martin Fuerderer

Martin Fuerderer es ingeniero de software principal de HCLSoftware. Ha trabajado en muchas áreas diferentes del desarrollo de servidores de bases de datos durante los últimos 25 años. En los últimos años, se ha sumergido en el tema de la seguridad en servidores de bases de datos.