Saltar al contenido principal

Cifrado del lado del servidor

El cifrado del lado del servidor proporciona una capa adicional de protección de datos. Todos los datos se cifran en el servidor antes de escribirse en la base de datos, independientemente del estado del cifrado del lado del cliente.

Descripción general

Propósito

EscenarioProtección
Filtración de la base de datosDatos cifrados con la clave del servidor
Copias de seguridadLas copias de seguridad contienen solo texto cifrado
Acceso físico al servidorLos datos no son legibles sin la clave
CSE deshabilitadoEl cifrado del servidor siempre funciona

Cómo funciona

Data from client

[Server encryption AES-256-CFB]

Database (ciphertext)

Algoritmo de cifrado

Parámetros

ParámetroValor
AlgoritmoAES-256-CFB
Longitud de clave256 bits
ModoCFB (Cipher Feedback)
IV128 bits, aleatorio por cifrado
BibliotecaOpenSSL (vía PHP)

Modo CFB

Características del modo CFB (Cipher Feedback):

  • Convierte el cifrado por bloques en cifrado de flujo
  • No requiere relleno
  • Cada bloque depende del anterior
  • El IV debe ser único para cada cifrado

Estructura de datos cifrados

[IV (128 bits)] + [Ciphertext]

El IV se almacena en texto plano junto con el texto cifrado y se utiliza para el descifrado.


Clave de cifrado del servidor

Generación de la clave

La clave se genera una vez durante la instalación del sistema:

ParámetroValor
Tamaño256 bits
FuenteGenerador criptográficamente seguro
Entropía256 bits
Formato de almacenamientobase64:{base64_encoded_key}

Almacenamiento de la clave

La clave se puede almacenar de dos formas:

Método 1: En archivo (predeterminado)

ParámetroValor
Ruta predeterminada{PROJECT_DIR}/init/encryption_key
Ruta alternativaVariable de entorno ENCRYPTION_KEY_PATH
Formatobase64:{base64_encoded_key}

Método 2: En variable de entorno

La clave se puede pasar directamente mediante una variable de entorno, sin necesidad de archivo.

Configuración de permisos de acceso

Al almacenar la clave en un archivo, es obligatorio configurar los permisos de acceso:

# Owner — application user (e.g., www-data)
chown www-data:www-data /path/to/encryption_key

# Read-only for owner
chmod 400 /path/to/encryption_key
Requisitos de almacenamiento elevados

Si su organización tiene políticas de seguridad estrictas o requisitos regulatorios para el almacenamiento de claves criptográficas (HSM, almacenes de secretos externos, soluciones certificadas), contacte con el soporte técnico de Passwork para analizar las opciones de integración.

Verificación de integridad de la clave

La integridad de la clave se verifica al iniciar la aplicación:

  1. Cargar la clave desde el archivo
  2. Calcular el hash SHA-512 de la clave
  3. Comparar con el hash almacenado en la base de datos
  4. En caso de discrepancia — error de inicio

Esto previene el uso de una clave incorrecta y la corrupción de datos.


Qué se cifra en el servidor

La clave del servidor cifra los siguientes datos:

  • Datos de registros (contraseñas, campos personalizados, archivos adjuntos)
  • Claves de bóveda
  • Claves de registro
  • Datos de enlaces externos
  • Contraseñas de integración LDAP
  • Contraseñas del servidor SMTP

El cifrado se realiza automáticamente antes de guardar en la base de datos, y el descifrado al leer.


Configuración

Variables de entorno

VariableDescripciónValor predeterminado
ENCRYPTION_KEY_PATHRuta al archivo de la clave%init_dir%/encryption_key
ENCRYPTION_CIPHERAlgoritmo de cifradoAES-256-CFB

Configuración del cifrado

Algoritmos compatibles

El sistema admite cualquier algoritmo de cifrado disponible en OpenSSL en el servidor. Esto permite elegir un algoritmo según los requisitos de su organización o normativa.

Ejemplos de algoritmos compatibles:

TipoAlgoritmos
AES (256 bits)AES-256-CFB (predeterminado), AES-256-GCM, AES-256-CBC, AES-256-CTR
AES (128 bits)AES-128-GCM, AES-128-CBC, AES-128-CTR
ChaCha20ChaCha20-Poly1305
Estándares nacionalesCamellia, ARIA, GOST (si lo admite OpenSSL)

La lista completa de algoritmos disponibles depende de la versión de OpenSSL instalada en el servidor.

Visualización de algoritmos disponibles

Para ver todos los algoritmos disponibles en el servidor:

php bin/console app:cipher-methods:list

El comando muestra la lista de todos los métodos de cifrado compatibles y sus alias de OpenSSL.

Cambio de algoritmo

Método 1: Mediante archivo de configuración

Cree o edite init/config.env:

ENCRYPTION_CIPHER=AES-256-GCM

Método 2: Mediante variable de entorno

export ENCRYPTION_CIPHER="AES-256-GCM"
Cambio de algoritmo
  • El cambio de algoritmo requiere recifrar todos los datos (similar a la rotación de claves)
  • Cree una copia de seguridad antes del cambio
  • Planifique una ventana de mantenimiento para bases de datos grandes

Validación del algoritmo

El sistema valida la corrección del algoritmo en el primer cifrado. Si se especifica un algoritmo no compatible, la operación falla con un error.

Para verificar la disponibilidad del algoritmo:

// Check algorithm support
in_array('AES-256-GCM', openssl_get_cipher_methods())

Interacción con el cifrado del lado del cliente

Modelo de dos niveles

Flujo de datos con CSE habilitado:

  1. El usuario introduce la contraseña
  2. El cliente (navegador) cifra los datos con la clave de registro (AES-256-CBC) — Nivel 1 (CSE)
  3. El servidor recibe datos ya cifrados
  4. El servidor cifra con la clave del servidor (OpenSSL AES-256-CFB) — Nivel 2 (Lado del servidor)
  5. La base de datos almacena un doble texto cifrado

Con CSE deshabilitado:

  • Los datos llegan en texto plano
  • Solo se aplica el cifrado del servidor
  • La base de datos almacena un nivel de cifrado

Garantías de seguridad

EscenarioCSE habilitadoCSE deshabilitado
Filtración de la base de datosDos niveles de protecciónCifrado del servidor
Compromiso del servidorCSE protege los datos⚠️ Datos accesibles
Administrador de la base de datosNo puede leerVe texto cifrado