Tema 11

11. Protección de datos sensibles, cifrado y almacenamiento seguro

Toda aplicación web termina procesando información que puede ser privada, confidencial, financiera, médica, comercial o estratégica. Proteger esos datos no consiste solo en controlar accesos: también implica decidir qué guardar, cómo cifrarlo, dónde almacenarlo y cómo evitar exponerlo innecesariamente.

Objetivo Proteger la información más valiosa de la aplicación
Enfoque Minimización, cifrado y almacenamiento responsable
Resultado Reducir impacto ante fallas o compromisos

11.1 Introducción

En muchas aplicaciones el valor principal está en los datos: identidad de usuarios, historiales, transacciones, documentos, información médica, registros internos, preferencias, números de contacto o credenciales. Si esa información se expone o altera, el impacto puede ser técnico, legal, reputacional y económico al mismo tiempo.

Por eso la seguridad de datos no se reduce a “poner contraseña al sistema”. Una aplicación madura necesita saber qué datos maneja, cuál es su sensibilidad, qué protección requiere cada tipo y por cuánto tiempo es realmente necesario conservarlo.

La mejor protección muchas veces empieza antes del cifrado: empieza cuando se cuestiona si ese dato debería existir en el sistema.

11.2 Qué son datos sensibles

Se consideran sensibles aquellos datos cuyo acceso, exposición o alteración puede causar daño relevante a personas, organizaciones o procesos. La sensibilidad no depende solo del formato técnico, sino del contexto de negocio y del impacto de una filtración.

Ejemplos frecuentes:

  • Contraseñas y credenciales.
  • Información personal identificable.
  • Datos financieros o de pago.
  • Información médica.
  • Documentos internos o contratos.
  • Tokens, claves API, secretos y certificados.

11.3 Clasificar la información

No todos los datos necesitan el mismo nivel de protección. Una práctica útil es clasificarlos según sensibilidad y criticidad. Esto ayuda a decidir:

  • Quién debería poder acceder.
  • Cómo deben almacenarse.
  • Si deben cifrarse.
  • Cuánto tiempo deben conservarse.
  • Cómo deberían mostrarse en pantalla o exportarse.
Si una aplicación no sabe qué datos son más sensibles, terminará tratando todo igual o, peor aún, dejando sin protección justamente lo más crítico.

11.4 Minimización de datos

Uno de los principios más efectivos de protección es la minimización: recolectar, guardar y exponer solo lo estrictamente necesario para la finalidad del sistema.

Esto implica preguntarse:

  • ¿Realmente necesito este dato?
  • ¿Necesito guardarlo completo o alcanza con una versión reducida?
  • ¿Necesito conservarlo por tanto tiempo?
  • ¿Todos los usuarios necesitan verlo?

Cuantos menos datos sensibles existan, menor será el impacto ante una brecha.

11.5 Exposición excesiva de datos

Muchas aplicaciones no “filtran” datos por una intrusión compleja, sino porque devuelven más información de la necesaria en respuestas, APIs, paneles o logs. Esta exposición excesiva es un error muy frecuente.

Algunos ejemplos:

  • APIs que devuelven campos sensibles que el frontend no necesitaba.
  • Paneles que muestran documentos completos cuando bastaría con un resumen.
  • Logs que incluyen tokens, correos o datos personales.
  • Exportaciones sin control fino de contenido.

11.6 Cifrado en tránsito

El cifrado en tránsito protege los datos mientras viajan entre cliente y servidor o entre componentes del sistema. En la web, esto se logra principalmente con HTTPS y TLS.

Su función es reducir la posibilidad de que un tercero observe o modifique el contenido durante la comunicación. Es esencial para credenciales, sesiones, formularios, APIs y cualquier información sensible que se transmita.

Sin cifrado en tránsito, incluso una buena autenticación o una sesión segura pueden quedar expuestas al interceptarse el tráfico.

11.7 Cifrado en reposo

El cifrado en reposo protege datos almacenados en discos, bases de datos, backups o repositorios persistentes. Su objetivo es dificultar el acceso a la información si el medio es robado, copiado o expuesto indebidamente.

Es importante entender que no reemplaza el control de acceso de la aplicación. Ambos se complementan: uno protege el almacenamiento, el otro protege el uso legítimo del dato.

11.8 Cifrado no significa lo mismo que hashing

Estos conceptos suelen confundirse, pero sirven para propósitos distintos:

  • Cifrado: transforma un dato y permite recuperarlo con la clave adecuada.
  • Hashing: genera una representación no reversible útil para verificar, no para recuperar el original.

Por ejemplo, una contraseña no debería cifrarse para luego descifrarla, sino almacenarse mediante mecanismos de hashing diseñados para credenciales.

11.9 Contraseñas: caso especial

Las contraseñas merecen un tratamiento distinto del resto de los datos. No deberían guardarse de forma recuperable. La aplicación no necesita conocer la contraseña original, solo verificar que la proporcionada por el usuario coincida con la representación segura almacenada.

Esto implica usar funciones de hashing adecuadas para contraseñas, con costo apropiado y salt. Guardarlas en texto plano o cifradas de forma reversible es una práctica grave.

11.10 Claves, secretos y configuración sensible

Además de datos de usuario, una aplicación también necesita proteger secretos internos: claves API, credenciales de base de datos, secretos de firma, tokens de integración, certificados o configuraciones críticas.

Errores comunes incluyen:

  • Guardar secretos en código fuente.
  • Subirlos a repositorios o backups sin protección.
  • Reutilizar la misma clave en múltiples entornos.
  • No rotarlos cuando ocurre un incidente.

11.11 Gestión de claves

El cifrado es tan fuerte como la protección de sus claves. Si la clave está expuesta junto con los datos, el beneficio práctico cae drásticamente. Por eso la gestión de claves debe considerarse parte central del diseño de seguridad.

Algunos principios útiles:

  • Separar datos cifrados de las claves que los protegen.
  • Restringir quién puede acceder a cada secreto.
  • Rotar claves cuando corresponde.
  • Evitar distribuir secretos innecesariamente.

11.12 Máscaras, truncado y exposición parcial

No siempre hace falta mostrar un dato completo. En muchos casos es preferible aplicar técnicas de minimización visual, como truncar, enmascarar o mostrar solo partes relevantes.

Ejemplos:

  • Mostrar solo parte de un documento o identificador.
  • Ocultar segmentos de un número sensible.
  • Exponer resúmenes en lugar de contenido completo.

Esto reduce exposición innecesaria sin impedir la operación legítima.

11.13 Logs y monitoreo: cuidado con los datos

Los logs son fundamentales para detectar incidentes, pero si se diseñan mal pueden convertirse en una fuente de filtración. Registrar cuerpos completos, tokens, cookies, claves o datos personales innecesarios crea nuevos riesgos.

Una estrategia madura busca registrar suficiente contexto para operar y auditar, pero evitando volcar información más sensible de la necesaria.

11.14 Backups y copias de seguridad

Las copias de seguridad también contienen información sensible. Muchas veces se protegen menos que el sistema principal y, sin embargo, concentran grandes volúmenes de datos históricos.

Por eso los backups deben considerarse parte del mismo problema de seguridad:

  • Control de acceso.
  • Cifrado adecuado.
  • Retención limitada.
  • Pruebas de restauración seguras.

11.15 Eliminación y retención

Guardar datos indefinidamente “por las dudas” incrementa riesgo y complejidad. Una política madura define cuánto tiempo se conserva cada tipo de información y cómo se elimina de manera consistente cuando ya no hace falta.

Esto reduce superficie y también ayuda en cumplimiento normativo y en gestión de incidentes.

11.16 Errores frecuentes en protección de datos

  • Recolectar más información de la necesaria.
  • Guardar contraseñas de forma reversible o insegura.
  • Exponer datos sensibles en APIs, logs o exportaciones.
  • Confiar en el cifrado sin proteger adecuadamente las claves.
  • No tratar backups y entornos de prueba con el mismo nivel de cuidado.
  • Usar datos reales en entornos donde no hacen falta.
Muchas filtraciones no aparecen porque el atacante “rompe el cifrado”. Aparecen porque el dato estaba de más, se expuso innecesariamente o la clave estaba mal protegida.

11.17 Ejemplo conceptual

Imaginemos una plataforma de salud que devuelve en una API todos los campos del paciente, aunque la pantalla solo use nombre y próxima cita. Si un usuario logra un acceso indebido por un error de autorización, la exposición será mucho mayor de la necesaria porque la aplicación ya estaba devolviendo datos médicos completos sin necesidad funcional.

Este ejemplo muestra que proteger datos también implica diseñar respuestas mínimas y no solo “cerrar bien” la base de datos.

11.18 Defensa en profundidad para datos sensibles

Una estrategia madura suele combinar varias capas:

  • Clasificación y minimización de datos.
  • Control de acceso adecuado.
  • Cifrado en tránsito y, cuando corresponde, en reposo.
  • Hashing seguro para credenciales.
  • Gestión responsable de secretos y claves.
  • Limitación de exposición en APIs, logs y paneles.
  • Políticas de retención, backup y eliminación.

11.19 Qué debes recordar de este tema

  • No todos los datos tienen la misma sensibilidad y conviene clasificarlos.
  • La mejor protección empieza por no recolectar ni exponer datos innecesarios.
  • Cifrado, hashing y gestión de claves cumplen funciones distintas y complementarias.
  • Los secretos internos de la aplicación también son datos sensibles.
  • Backups, logs y entornos secundarios deben recibir el mismo criterio de protección.

11.20 Conclusión

La protección de datos sensibles no depende de una única tecnología, sino de una cadena de decisiones responsables sobre qué información existe, cómo circula y cómo se conserva. Cuanto mejor diseñada esté esa cadena, menor será el impacto si falla otra capa como autenticación, autorización o sesión.

En el próximo tema veremos configuración segura, cabeceras HTTP y hardening de la aplicación, para seguir reforzando la superficie de defensa desde el despliegue y la respuesta del servidor.