Always Encrypted SQL Server
Always Encrypted es una característica de seguridad en SQL Server diseñada para proteger datos confidenciales, como números de tarjetas de crédito o números de seguro social, almacenados en bases de datos SQL Server. Always Encrypted garantiza que los datos confidenciales estén cifrados tanto en reposo como en tránsito y que las claves de cifrado no se revelen a SQL Server. Esto permite que los datos se mantengan seguros incluso si el entorno de la base de datos está comprometido.
Principales Características de Always Encrypted
- Cifrado de Datos en el Cliente:
- Los datos se cifran en el lado del cliente, no en el servidor. Esto significa que los datos están cifrados antes de que lleguen a SQL Server y solo se descifran en el cliente.
- Separación de Roles:
- Always Encrypted permite la separación de roles entre los administradores de la base de datos y los administradores de la seguridad de los datos. Los administradores de la base de datos no tienen acceso a los datos en texto claro.
- Transparencia para las Aplicaciones:
- Las aplicaciones pueden trabajar con datos cifrados de manera transparente, sin necesidad de cambios significativos en el código. Esto es posible gracias a los controladores compatibles con Always Encrypted que manejan el cifrado y el descifrado.
Componentes Clave
- Column Encryption Key (CEK):
- Esta es la clave que realmente cifra los datos en las columnas. Cada columna cifrada tiene una CEK asociada.
- Column Master Key (CMK):
- Esta es la clave que cifra las CEK. Las CMK se almacenan fuera de la base de datos, en un almacén de claves seguro, como Azure Key Vault, un módulo de seguridad de hardware (HSM) o en el sistema de archivos de Windows.
- Tipos de Cifrado:
- Deterministic Encryption: Cifra los valores de la misma manera cada vez que se aplica al mismo texto sin formato. Esto permite realizar operaciones de igualdad en las columnas cifradas, pero puede ser susceptible a ataques de análisis de patrones.
- Randomized Encryption: Usa un método de cifrado más seguro que produce diferentes resultados cifrados cada vez que se aplica al mismo texto sin formato. No permite operaciones de igualdad o búsqueda.
Configuración y Uso
- Configuración de Claves:
- Configura la CMK y la CEK usando SQL Server Management Studio (SSMS) o scripts de T-SQL.
- Cifrado de Columnas:
- Define qué columnas de las tablas deben estar cifradas utilizando las claves configuradas.
- Configuración del Cliente:
- Configura la cadena de conexión de la aplicación para habilitar Always Encrypted, asegurándose de que el cliente puede acceder a las CMK necesarias para cifrar y descifrar los datos.
Ejemplo de Configuración
Creación de la Column Master Key y la Column Encryption Key:
— Crear una Column Master Key
CREATE COLUMN MASTER KEY CMK1
WITH (
KEY_STORE_PROVIDER_NAME = ‘MSSQL_CERTIFICATE_STORE’,
KEY_PATH = ‘CurrentUser/My/CertificadoCMK’
);
— Crear una Column Encryption Key
CREATE COLUMN ENCRYPTION KEY CEK1
WITH VALUES (
COLUMN MASTER KEY = CMK1,
ALGORITHM = ‘RSA_OAEP’,
ENCRYPTED_VALUE = 0x… — Valor cifrado de la CEK
);
Creación de una Tabla con una Columna Cifrada:
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY,
Nombre NVARCHAR(50),
NumeroTarjetaCredito NVARCHAR(50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = CEK1,
ENCRYPTION_TYPE = Deterministic,
ALGORITHM = ‘AEAD_AES_256_CBC_HMAC_SHA_256’
)
);
Uso en la Aplicación
Al configurar la cadena de conexión en la aplicación, se debe incluir el parámetro Column Encryption Setting=Enabled
para habilitar Always Encrypted:
string connectionString = «Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Column Encryption Setting=Enabled;»;
Ventajas de Always Encrypted
- Protección de Datos Sensibles: Garantiza que los datos sensibles estén protegidos incluso si el entorno de la base de datos está comprometido.
- Transparencia: Las aplicaciones pueden trabajar con datos cifrados sin cambios significativos en el código.
- Cumplimiento Normativo: Ayuda a cumplir con requisitos normativos y de cumplimiento que exigen la protección de datos sensibles.
Desventajas
- Rendimiento: Puede afectar el rendimiento debido al cifrado y descifrado de datos en el lado del cliente.
- Limitaciones de Funcionalidad: No todas las operaciones SQL son compatibles con columnas cifradas, especialmente con el cifrado aleatorio.
Always Encrypted es una poderosa característica para asegurar datos sensibles en SQL Server, proporcionando un fuerte mecanismo de seguridad que protege los datos en todo momento.