
La seguridad moderna no se basa únicamente en tener contraseñas largas o firewalls bien configurados. Uno de los pilares fundamentales para proteger información sensible es el uso correcto de la criptografía. Sin embargo, “usar criptografía” no significa simplemente cifrar datos al azar o aplicar cualquier algoritmo disponible: significa comprender qué datos deben protegerse, elegir mecanismos robustos y gestionarlos adecuadamente durante todo su ciclo de vida.
Este artículo profundiza en cómo aplicar criptografía de manera segura para proteger datos en tránsito y en reposo, evitar vulnerabilidades comunes, manejar contraseñas correctamente, prevenir filtraciones de secretos y fortalecer la arquitectura de aplicaciones desde el diseño.
Antes de hablar de algoritmos y claves, el primer paso esencial es la clasificación de los datos. No toda la información necesita el mismo nivel de protección, pero toda organización necesita saber qué maneja.
Es habitual clasificar los datos en categorías como:
Público
Interno
Confidencial
Regulado (por ejemplo, información financiera o sanitaria)
Clasificar sirve para:
identificar qué debe cifrarse
asignar controles adecuados
evitar sobreprotección que encarece y complejiza sistemas
evitar una falsa sensación de seguridad
Por ejemplo:
una entrada de blog pública no requiere cifrado
una contraseña o un número de tarjeta sí requieren mecanismos criptográficos robustos
un correo electrónico puede ser sensible según el contexto
Sin esta clasificación, los sistemas terminan cifrando lo irrelevante y dejando expuesto lo crítico.
Aplicar criptografía débil o mal implementada abre la puerta a incidentes graves, entre ellos:
robo de bases de datos con datos legibles
interceptación de comunicaciones
manipulación de información cifrada sin detección
uso de claves expuestas en repositorios
ataques de downgrade a protocolos antiguos
recuperación de contraseñas almacenadas de forma insegura
Muchos incidentes no ocurren por falta total de cifrado, sino por:
algoritmos obsoletos
claves cortas
modos de operación incorrectos
reutilización de nonces o IVs
gestión deficiente de secretos
En la práctica moderna, los más utilizados y recomendados incluyen:
Cifrado simétrico
AES-GCM (128 o 256 bits)
ChaCha20-Poly1305
Cifrado asimétrico
RSA 2048/3072 bits o superior
curvas elípticas modernas como Curve25519
Hash criptográfico general
SHA-256, SHA-384, SHA-512
SHA-3
Hash para contraseñas
Argon2id
bcrypt
scrypt
PBKDF2 (con parámetros fuertes)
Un principio clave: los modos autenticados (AEAD) como GCM o Poly1305 permiten garantizar confidencialidad e integridad al mismo tiempo, reduciendo riesgos de manipulación silenciosa del texto cifrado.
Entre los mecanismos considerados débiles se encuentran:
MD5 y SHA-1 (colisiones prácticas)
DES y 3DES
RC4
RSA menor a 2048 bits
AES en modo ECB
TLS 1.0 y 1.1
certificados autofirmados en entornos productivos
El problema de estos algoritmos no es teórico: atacantes pueden realmente romperlos hoy con herramientas accesibles y capacidad de cómputo moderada.
El primer principio es claro: si no necesitas almacenar un dato sensible, no lo guardes. Cada dato almacenado es un activo y, al mismo tiempo, un riesgo.
Cuando los datos deben almacenarse:
usa cifrado robusto (AES-256 o ChaCha20)
emplea modos autenticados (GCM, Poly1305)
separa las claves del código y los repositorios
cifra también los respaldos
restringe el acceso a claves según rol
utiliza servicios de gestión de claves o cofres de secretos
Ejemplos de buenas prácticas incluyen:
discos de servidores cifrados
bases de datos con cifrado transparente
claves guardadas en sistemas de gestión de secretos en lugar de archivos de configuración
Una base de datos cifrada no sirve de mucho si la contraseña de desencriptado está escrita en el mismo servidor en texto plano.
Toda comunicación que transporte información sensible debe viajar por canales cifrados. Esto significa utilizar versiones modernas de TLS y habilitar únicamente conjuntos criptográficos seguros.
Buenas prácticas clave:
usar TLS 1.2 o 1.3
deshabilitar SSL, TLS 1.0 y 1.1
evitar renegociación insegura
aplicar HSTS
utilizar certificados válidos emitidos por CA confiables
Además, es conveniente auditar periódicamente las configuraciones criptográficas con herramientas especializadas para identificar suites débiles o protocolos obsoletos.
Uno de los errores más frecuentes y devastadores es el manejo inseguro de contraseñas. Prácticas incorrectas habituales incluyen:
almacenarlas en texto plano
cifrarlas en lugar de hashearlas
usar funciones rápidas como SHA-256 o MD5
reutilizar salts
compartir credenciales en repositorios o documentos
no rotar contraseñas en caso de incidente
Las contraseñas nunca deben ser recuperables. Por ello no se cifran, se hashean con funciones lentas y adaptativas como:
Argon2id (preferida actualmente)
bcrypt
scrypt
PBKDF2 con alto número de iteraciones
Buenas prácticas incluyen:
un salt único y aleatorio por contraseña
pepper del lado del servidor guardado en HSM o KMS
límites de intentos de login
protección frente a fuerza bruta
procesos seguros de recuperación basados en tokens únicos y expirables
Incorrecto:
almacenar la contraseña cifrada con AES
usar SHA-256 directamente sobre la contraseña
Correcto:
aplicar Argon2id con parámetros de memoria, tiempo e hilos adecuados
añadir salt único por usuario
mantener un pepper en hardware seguro
Un sistema puede tener cifrado impecable y aun así filtrar información sensible por culpa de errores mal gestionados.
Errores típicos:
mostrar stacktraces al usuario
exponer rutas internas
escribir tokens y claves en logs
incluir datos personales en registros
volcar memoria en texto claro
La regla general es:
mensajes genéricos para usuarios
detalles técnicos solo en registros internos
sin información sensible en logs
Una API de pagos recibe datos mal formados:
Incorrecto:
devolver stacktrace completo
mostrar clases, rutas internas y campos del objeto de pago
Correcto:
mostrar “Error al procesar el pago”
registrar internamente un identificador del incidente
omitir números de tarjeta, tokens o claves en el log
Muchos sistemas heredados utilizan algoritmos o modos antiguos que ya no son seguros. Migrar es imprescindible para reducir riesgo.
Algunos pasos generales incluyen:
inventariar algoritmos en uso
identificar claves cortas o protocolos viejos
planificar rotación de claves
probar compatibilidad con servicios dependientes
desplegar de forma progresiva
Ejemplos de migración:
de AES-CBC a AES-GCM
de RSA 1024 a RSA 3072
de SHA-1 a SHA-256
de TLS 1.0 a TLS 1.3
La criptografía es tan fuerte como la protección de sus claves. Una práctica insegura muy común es almacenar secretos en:
repositorios Git
archivos .env sin protección
scripts
documentación compartida
Los secretos incluyen:
claves de cifrado
claves privadas
tokens de API
credenciales de bases de datos
certificados
Los tres pilares de la gestión segura de secretos son:
centralización
usar servicios dedicados a secretos, no archivos sueltos
control de acceso
aplicar principio de mínimo privilegio
rotación periódica
reducir el impacto en caso de filtración
Un pipeline de despliegue necesita una clave:
Incorrecto:
escribirla en el archivo del pipeline
subirla al repositorio
Correcto:
almacenarla en un gestor de secretos
inyectarla dinámicamente en tiempo de ejecución
evitar que aparezca en logs
En los últimos años, gran cantidad de brechas comenzaron por claves publicadas accidentalmente en repositorios. Para prevenir esto, es fundamental incorporar escaneos automáticos en CI/CD que detecten:
claves API
tokens
contraseñas
certificados
claves privadas
Buenas prácticas incluyen:
escanear todo el historial antes de publicar
bloquear commits con secretos
rotar inmediatamente cualquier secreto encontrado
limpiar el historial cuando sea necesario
educar a los equipos de desarrollo
Los asistentes basados en modelos de lenguaje pueden ayudar a:
revisar fragmentos de código
detectar algoritmos obsoletos
identificar malas prácticas con salts o IVs
analizar configuraciones TLS
proponer alternativas seguras
No sustituyen auditorías formales, pero son excelentes para:
revisiones iniciales
checklist automatizados
análisis de configuraciones complejas
La criptografía no es un accesorio técnico: es el núcleo que sostiene la confidencialidad, integridad y autenticidad de los sistemas modernos. Su correcta aplicación implica mucho más que elegir algoritmos fuertes; exige:
clasificar datos correctamente
proteger información en tránsito y en reposo
gestionar errores con criterio de seguridad
almacenar contraseñas con funciones adecuadas
evitar algoritmos débiles y claves cortas
gestionar secretos de manera centralizada y controlada
auditar e implementar rotación periódica
Un diseño seguro asume que los datos podrán ser interceptados o robados. La diferencia entre incidente y resiliencia está en si esos datos están protegidos por criptografía moderna, bien implementada y correctamente gestionada a lo largo de todo su ciclo de vida.