En SQL Server, el cifrado a nivel de columna (o celda) protege los datos mediante cifrado simétrico. Se crea una clave maestra de base de datos, un certificado protegido por ella y, a continuación, una clave simétrica protegida por dicho certificado. Los datos se cifran con la función EncryptByKey y se descifran con DecryptByKey, utilizando en ambos casos la clave simétrica y el certificado.
SQL Server cifra los datos de las tablas a nivel de columna mediante cifrado simétrico , protegido por una jerarquía de claves en capas. Primero se crea una clave maestra de base de datos, luego un certificado autofirmado protegido por dicha clave maestra y, finalmente, una clave simétrica protegida por el certificado. Los datos se cifran con la función EncryptByKey y se descifran con DecryptByKey, ambas haciendo referencia a la clave simétrica y al certificado. SQL Server también ofrece TDE y Always Encrypted.
Puntos Clave
- El cifrado a nivel de columna (o a nivel de celda) de SQL Server utiliza cifrado simétrico, protegido por una jerarquía de claves y un certificado.
- La jerarquía de claves es la siguiente: la clave maestra de la base de datos protege un certificado, que a su vez protege la clave simétrica que realmente cifra los datos.
- Los datos se cifran con EncryptByKey y se descifran con DecryptByKey, utilizando en ambos casos la clave simétrica y el nombre del certificado.
- SQL Server ofrece tres opciones principales de cifrado: cifrado a nivel de celda, cifrado transparente de datos (TDE) y Always Encrypted.
- TDE cifra de forma transparente toda la base de datos en reposo; Always Encrypted protege los datos de extremo a extremo, de modo que ni siquiera el servidor ve el texto sin cifrar.
Cómo funciona el cifrado a nivel de columna en SQL Server
El cifrado de datos de una tabla en SQL Server se realiza a nivel de columna, columna por columna, utilizando cifrado simétrico (la misma clave cifra y descifra). Esto se conoce comúnmente como cifrado a nivel de celda . Se basa en una jerarquía de claves en capas, donde cada clave está protegida por la que está por encima. El proceso es el siguiente:
- Cree una clave maestra de base de datos: Se crea una clave maestra de base de datos para anclar la jerarquía. Esta clave está protegida por una contraseña y por la clave maestra de servicio a nivel de servidor.
- Crear un certificado: Una firmada por él mismo certificado Se crea, protegido por la clave maestra de la base de datos.
- Crear una clave simétrica: Mediante el certificado se crea y protege una clave simétrica, utilizada para el cifrado propiamente dicho a nivel de columna.
- Encriptar los datos: La columna se cifra con la función EncryptByKey, proporcionando la clave simétrica y el nombre del certificado.
Para descifrar, se llama a la función DecryptByKey , que también requiere la clave simétrica y el certificado. Dado que el cifrado es simétrico, la misma clave sirve tanto para cifrar como para descifrar, y dicha clave se mantiene segura gracias al certificado y la clave maestra.
La jerarquía de claves de cifrado de SQL Server
Cada capa protege a la inferior, por lo que comprometer los datos requiere remontarse por toda la cadena:
- Clave maestra de servicio (SMK): se crea a nivel de servidor cuando se instala SQL Server; protege la clave maestra de la base de datos.
- Clave maestra de base de datos (DMK): protege los certificados y las claves asimétricas dentro de una base de datos.
- Certificado: protege la clave simétrica.
- Clave simétrica: cifra y descifra los datos reales de la columna.
Las tres opciones de cifrado en SQL Server
El cifrado a nivel de celda es una de las tres principales formas en que SQL Server puede cifrar datos. La opción más adecuada depende de si necesita proteger columnas específicas, toda la base de datos en reposo o los datos hasta el cliente.
| Opción | Lo que cifra | Ideal para |
| Cifrado a nivel de celda (columna) | Columnas específicas, mediante EncryptByKey/DecryptByKey. | Proteger unos pocos campos sensibles con un control granular. |
| Cifrado transparente de datos (TDE) | La base de datos completa en reposo (archivos de datos y de registro). | Proteger los datos en reposo sin cambios en la aplicación. |
| Siempre encriptado | Columnas específicas, cifradas y descifradas en el cliente. | Mantener el texto plano oculto incluso para el propio SQL Server. |
Cifrado a nivel de celda (columna)
El método descrito anteriormente permite un control preciso sobre columnas individuales y utiliza las funciones EncryptByKey y DecryptByKey, pero la aplicación debe cifrar y descifrar explícitamente, y las columnas cifradas no se pueden indexar ni buscar de forma normal.
Cifrado transparente de datos (TDE)
TDE cifra de forma transparente toda la base de datos en reposo, tanto los archivos de datos como los de registro. Utiliza una clave de cifrado de base de datos protegida por un certificado en la base de datos maestra y no requiere cambios en las aplicaciones. TDE protege contra el robo de archivos físicos o copias de seguridad, pero no protege los datos en uso ni en tránsito, y no ofrece granularidad a nivel de columna. Se basa en el mismo tipo de protección de certificado y clave que el cifrado a nivel de celda.
Siempre encriptado
Always Encrypted cifra columnas específicas en el lado del cliente, de modo que los datos se cifran antes de llegar a SQL Server y el motor de base de datos solo ve el texto cifrado . Esto protege los datos confidenciales incluso de los administradores de la base de datos y de cualquier persona con acceso al servidor, lo que lo hace ideal para datos altamente sensibles y para la separación de funciones. La contrapartida es una funcionalidad de consulta más limitada en las columnas cifradas.
Cómo ayuda la consultoría de cifrado
Los servicios de asesoramiento en cifrado de Encryption Consulting le ayudan a elegir el método de cifrado adecuado para SQL Server (a nivel de celda, TDE o Always Encrypted) y a gestionar de forma segura las claves y los certificados subyacentes. Analizamos dónde se almacenan los datos confidenciales, recomendamos el modelo de cifrado que mejor se adapte a sus necesidades de cumplimiento y rendimiento, y diseñamos una gestión de claves sólida (incluida la protección de claves mediante HSM) conforme a estándares como NIST y PCI DSS . Todo ello respaldado por las prácticas certificadas ISO/IEC 27001:2022 y SOC 2.
Preguntas frecuentes
¿Cómo se realiza el cifrado en SQL Server?
SQL Server suele cifrar los datos a nivel de columna mediante cifrado simétrico. Se crea una clave maestra de base de datos, luego un certificado protegido por dicha clave maestra y, finalmente, una clave simétrica protegida por el certificado. Los datos se cifran con la función EncryptByKey, que proporciona la clave simétrica y el certificado. Esta jerarquía de claves en capas implica que cada clave está protegida por la que se encuentra encima. SQL Server también ofrece cifrado transparente de datos y Always Encrypted para otros escenarios.
¿Cómo se descifran los datos en SQL Server?
Para descifrar datos cifrados a nivel de columna, se abre la clave simétrica (lo que requiere acceso al certificado de protección y a la clave maestra), y luego se llama a la función DecryptByKey en la columna cifrada, proporcionando la clave simétrica y el certificado. DecryptByKey devuelve el valor original en texto plano, que normalmente se convierte de nuevo a su tipo de dato original. Solo las sesiones con permiso para abrir la clave simétrica pueden descifrar los datos, por lo que permanecen protegidos de usuarios no autorizados.
¿Qué son EncryptByKey y DecryptByKey?
EncryptByKey y DecryptByKey son las funciones integradas de SQL Server para el cifrado a nivel de celda (columna). EncryptByKey recibe una clave simétrica y un valor de texto plano, y devuelve datos varbinary cifrados, mientras que DecryptByKey revierte el proceso para devolver el valor original. Ambas requieren que la clave simétrica correspondiente esté abierta en la sesión, y dicha clave está protegida por un certificado y la clave maestra de la base de datos, conformando así la jerarquía de claves de cifrado de SQL Server.
¿Cuál es la diferencia entre TDE y el cifrado a nivel de celda en SQL Server?
El cifrado a nivel de celda (columna) protege columnas específicas mediante EncryptByKey y DecryptByKey, lo que proporciona un control preciso, pero requiere que la aplicación cifre y descifre explícitamente. El cifrado transparente de datos (TDE) cifra toda la base de datos en reposo, incluidos los archivos de datos y de registro, de forma transparente y sin necesidad de cambios en la aplicación. El cifrado a nivel de celda es adecuado para algunos campos altamente sensibles; TDE es ideal para proteger toda la base de datos contra el robo de archivos o copias de seguridad. Muchas organizaciones utilizan ambos métodos conjuntamente.
¿Qué significa Always Encrypted en SQL Server?
Always Encrypted es una función de SQL Server que cifra columnas específicas en el cliente, antes de que los datos lleguen al servidor, de modo que el motor de base de datos solo ve el texto cifrado. Esto significa que los datos confidenciales están protegidos incluso de los administradores de la base de datos y de cualquier persona con acceso al servidor, lo que facilita la separación de funciones y el cumplimiento normativo. La desventaja es una funcionalidad de consulta reducida en las columnas cifradas. Se diferencia del cifrado a nivel de celda, donde el servidor realiza el cifrado y el descifrado.
¿Qué tipo de cifrado debo usar en SQL Server?
Depende de lo que necesites proteger. Usa el cifrado a nivel de celda para un control preciso sobre algunas columnas sensibles. Usa el cifrado transparente de datos (TDE) para proteger toda la base de datos en reposo sin cambios en la aplicación, protegiéndola contra el robo de archivos o copias de seguridad. Usa Always Encrypted cuando el texto sin cifrar deba permanecer oculto incluso para SQL Server y sus administradores. Muchos entornos combinan ambas opciones, y la combinación adecuada depende de la sensibilidad de tus datos, el rendimiento y los requisitos de cumplimiento normativo.
Encripta tus bases de datos de la manera correcta
SQL Server ofrece diversas opciones de cifrado, y la elección correcta (junto con una gestión de claves adecuada) es fundamental para proteger los datos confidenciales sin afectar el funcionamiento de sus aplicaciones. Explore los Servicios de Asesoramiento en Cifrado de Encryption Consulting para diseñar e implementar un cifrado de bases de datos que se adapte a su entorno.
