Actualizado

Cifrado del lado del servidor vs. del lado del cliente: ¿en qué modelo deberías confiar?

Por

El cifrado del lado del servidor cifra los datos en el servidor después de recibir el texto plano, lo que requiere confiar en el proveedor del servicio. El cifrado del lado del cliente cifra los datos en tu navegador antes de enviarlos, de modo que el servidor nunca ve el texto plano. Para compartir secretos, el cifrado del lado del cliente es más seguro porque elimina al servicio como punto de confianza: incluso un servidor comprometido no puede leer tus datos.

Esta publicación compara ambos enfoques: cómo funcionan, qué te pide confiar cada uno y dónde están las verdaderas compensaciones. No es un argumento a favor de un lado: es un marco para evaluar qué modelo se ajusta a tu modelo de amenazas.

Para un resumen rápido de por qué importa el cifrado del lado del cliente, consulta nuestra publicación anterior. Para un vistazo detallado a la implementación específica de Vaulted, consulta nuestro análisis a fondo del conocimiento cero.

Cómo funciona el cifrado del lado del servidor

En el modelo del lado del servidor, el servicio se encarga del cifrado en tu nombre. El flujo típico:

  1. Introduces un secreto en el navegador
  2. Tu navegador envía el texto plano al servidor a través de TLS
  3. El servidor cifra los datos usando una clave que él gestiona
  4. El texto cifrado se almacena en la base de datos
  5. Cuando el destinatario solicita el secreto, el servidor lo descifra y devuelve el texto plano

La clave de cifrado nunca abandona el servidor. Podría residir en un módulo de seguridad de hardware (HSM), un servicio de gestión de claves en la nube (KMS) o un archivo de configuración, pero el servidor la controla por completo.

El modelo de confianza del lado del servidor

Con el cifrado del lado del servidor, estás confiando en:

  • El operador del servicio para que no lea tus datos (tiene la clave y el texto plano en memoria durante el cifrado/descifrado)
  • La infraestructura para que no sea vulnerada (un servidor comprometido expone tanto las claves como los datos)
  • Los empleados del operador para que no abusen del acceso (cualquiera con acceso al servidor puede leer secretos potencialmente)
  • La jurisdicción legal para que no obligue a la divulgación (se puede forzar al operador a entregar los datos porque posee las claves)
  • Los registros y la monitorización del servidor para que no capturen texto plano (los marcos de registro pueden grabar datos sensibles de forma involuntaria)

Este no es necesariamente un mal modelo. Muchos servicios lo usan con éxito: el almacenamiento en la nube, los proveedores de correo electrónico y los servicios de bases de datos se apoyan en el cifrado del lado del servidor. La cuestión es si la compensación se ajusta a tu caso de uso.

Cómo funciona el cifrado del lado del cliente

En el modelo del lado del cliente, el cifrado ocurre en el navegador antes de que ningún dato llegue al servidor. El flujo es diferente:

  1. Introduces un secreto en el navegador
  2. El navegador genera una clave de cifrado y cifra los datos localmente
  3. Solo se envía el texto cifrado al servidor
  4. La clave de cifrado se entrega al destinatario a través de un canal independiente (normalmente el fragmento de la URL)
  5. El navegador del destinatario descifra el texto cifrado localmente

El servidor nunca ve el texto plano y nunca posee la clave de cifrado. Almacena y recupera bloques cifrados, nada más.

Vaulted usa este modelo. Cada secreto recibe una clave AES-256-GCM nueva. La clave se coloca en el fragmento de la URL (#), que los navegadores nunca incluyen en las solicitudes HTTP según el RFC 3986. El servidor recibe el texto cifrado y un IV aleatorio de 12 bytes para almacenarlo, pero la clave permanece por completo en el enlace compartido entre el remitente y el destinatario.

El modelo de confianza del lado del cliente

Con el cifrado del lado del cliente, estás confiando en:

  • El navegador para que implemente la criptografía correctamente (la Web Crypto API delega en motores criptográficos nativos como BoringSSL o NSS)
  • El código de la aplicación para que realmente realice el cifrado del lado del cliente (puedes verificarlo inspeccionando las solicitudes de red)
  • El canal de entrega del enlace para que sea seguro (cualquiera que tenga la URL completa, incluido el fragmento, puede descifrar el secreto)
  • El dispositivo del destinatario para que no esté comprometido (tras el descifrado, el malware o la captura de pantalla pueden acceder al texto plano)

No estás confiando en el servidor, el operador del servicio, sus empleados ni su jurisdicción legal. El servidor es un relé de almacenamiento para datos cifrados que no puede leer.

Comparación de las compensaciones

Ningún modelo es universalmente mejor. Cada uno establece compensaciones diferentes entre seguridad, usabilidad y riqueza de funciones.

Propiedades de seguridad

PropiedadLado del servidorLado del cliente
Exposición ante una brecha del servidorClaves + texto cifrado expuestosSolo el texto cifrado expuesto (inútil sin las claves)
El operador puede leer los datosSí (posee las claves)No (nunca tiene las claves)
Riesgo de coacción legalEl operador puede cumplir (tiene acceso)El operador no puede cumplir (no tiene acceso)
Riesgo de interceptación del enlaceNo aplica (no hay clave en el enlace)URL completa = acceso completo (mitigado por la frase de contraseña)
Hombre en el medioTLS protege el tránsito; el servidor ve el texto planoTLS protege el texto cifrado; la clave en el fragmento nunca se envía

Propiedades de usabilidad

PropiedadLado del servidorLado del cliente
Carga de gestión de clavesNinguna para el usuario (el servidor se encarga)El usuario debe compartir el enlace de forma segura
Recuperación de contraseñaPosible (el servidor posee las claves)No es posible (las claves solo están en el enlace)
Búsqueda e indexaciónEl servidor puede buscar el texto planoNo es posible sin descifrar
Flexibilidad para compartirEl servidor puede recifrar para nuevos destinatariosRequiere un enlace nuevo por destinatario
Acceso sin conexiónRequiere conexión al servidor para descifrarPosible si el texto cifrado y la clave se almacenan localmente

Compensaciones de funciones

FunciónLado del servidorLado del cliente
Registro de auditoría del contenidoPosibleNo es posible (el servidor no puede leer el contenido)
Políticas basadas en el contenidoPosible (DLP, escaneo de cumplimiento)No es posible sin descifrar
Rotación de clavesEl servidor puede recifrar con claves nuevasRequiere regenerar y volver a compartir los enlaces
Control de acceso multiparteEl servidor puede gestionar claves por usuarioCada destinatario necesita la clave directamente
Garantía de conocimiento ceroNo

Cuándo es aceptable el cifrado del lado del servidor

El cifrado del lado del servidor es una opción razonable cuando:

  • Confías en el operador del servicio y en sus prácticas de seguridad
  • Necesitas funciones que requieren acceso del servidor a los datos (búsqueda, compartir, escaneo de cumplimiento)
  • La sensibilidad de los datos no justifica el coste de usabilidad del cifrado del lado del cliente
  • Operas en un entorno regulado donde las certificaciones de cumplimiento del operador importan más que las garantías de conocimiento cero
  • La complejidad de la gestión de claves debe ser manejada por el servicio, no por el usuario

Los servicios de almacenamiento en la nube, el correo electrónico empresarial y el cifrado de bases de datos gestionadas usan este modelo de forma eficaz.

Cuándo es necesario el cifrado del lado del cliente

El cifrado del lado del cliente se vuelve necesario cuando:

  • No puedes o no deberías confiar tus datos al operador del servicio
  • Los datos son lo bastante sensibles como para que una brecha del servidor no deba exponer el texto plano
  • Necesitas una garantía de conocimiento cero: una prueba matemática de que el servidor no puede leer tus datos
  • Los requisitos legales o de cumplimiento exigen que el operador del servicio no tenga acceso al contenido
  • Quieres protección contra amenazas internas en el proveedor del servicio

Compartir secretos es uno de los casos de uso más sólidos para el cifrado del lado del cliente. Los datos son inherentemente sensibles (contraseñas, claves de API, credenciales), el intercambio es transitorio (con límite de vistas y límite de tiempo) y la relación de confianza es mínima (puede que no conozcas ni confíes en el operador del servicio).

Cómo aborda esto Vaulted

Vaulted usa exclusivamente el cifrado del lado del cliente. Cada secreto se cifra en el navegador con una clave AES-GCM nueva antes de que ningún dato llegue al servidor. La clave viaja únicamente en el fragmento de la URL, y la protección opcional con frase de contraseña añade una segunda capa mediante la derivación de claves PBKDF2 y el encapsulado de la clave AES-KW.

El servidor almacena el texto cifrado con un tiempo de vida y un contador de vistas. No puede descifrar, buscar ni inspeccionar el contenido. Una brecha completa de la base de datos solo produce bloques cifrados, computacionalmente inútiles sin las claves que existen únicamente en los enlaces compartidos.

Para los detalles criptográficos completos —generación de claves, manejo del IV, encapsulado con frase de contraseña y las llamadas exactas a la Web Crypto API— consulta nuestro análisis a fondo del cifrado de conocimiento cero.

Cómo tomar tu decisión

El modelo de cifrado adecuado depende de qué estés protegiendo y en quién estés dispuesto a confiar.

Si necesitas funciones como búsqueda, recuperación o gestión centralizada de claves, el cifrado del lado del servidor es la opción práctica. Si necesitas una garantía de que nadie —ni el servicio, ni sus empleados, ni una orden judicial— pueda leer tus datos, el cifrado del lado del cliente es el único modelo que la ofrece.

Para compartir secretos, la respuesta es sencilla: los datos son sensibles, la interacción es breve y cuantas menos partes puedan acceder al texto plano, mejor.


¿Listo para compartir un secreto con cifrado de conocimiento cero? Crea un secreto en Vaulted: tus datos nunca salen de tu navegador sin cifrar.


Relacionado