La matemática discreta proporciona estructuras para proteger información, verificar integridad, controlar accesos y modelar amenazas. La seguridad real combina esas bases con protocolos, bibliotecas auditadas, operaciones rigurosas y evaluación continua.
La ciberseguridad busca proteger sistemas, datos y servicios frente a errores, fallas y acciones no autorizadas. La criptografía es una parte central, pero no la única: también importan autenticación, autorización, validación de entradas, segmentación, monitoreo y respuesta ante incidentes.
Las congruencias, los números primos, los grafos, la lógica booleana, los autómatas y el principio del palomar aparecen en distintas capas de estas soluciones.
Un sistema puede necesitar proteger varias propiedades simultáneamente:
Un mecanismo puede cubrir una propiedad y dejar otras sin resolver. Cifrar datos no controla quién puede pedirlos; una firma no oculta su contenido; un registro de eventos no evita por sí mismo un incidente.
Las operaciones modulares permiten trabajar con potencias y productos dentro de conjuntos finitos. Sistemas de clave pública y acuerdos de claves usan estas operaciones con parámetros grandes y cuidadosamente seleccionados.
Los ejemplos numéricos pequeños de temas anteriores son didácticos. La seguridad depende de tamaños, parámetros, formatos y protocolos concretos, no solo de aplicar una fórmula modular.
Estos conceptos se confunden con facilidad, pero resuelven problemas distintos:
Convertir texto a Base64 no cifra el contenido. Aplicar un hash no permite recuperar el mensaje original y un hash público por sí solo no prueba quién produjo el dato.
Una función hash criptográfica transforma una entrada de longitud variable en un resumen de longitud fija. Sus propiedades deseables incluyen resistencia práctica a preimágenes, segundas preimágenes y colisiones.
Un hash sirve para verificar integridad cuando el resumen esperado proviene de una fuente confiable. Si un atacante puede cambiar el archivo y el hash publicado junto a él, la comparación no ofrece autenticidad.
async function sha256Hex(texto) {
const datos = new TextEncoder().encode(texto);
const resumen = await crypto.subtle.digest("SHA-256", datos);
return [...new Uint8Array(resumen)]
.map(byte => byte.toString(16).padStart(2, "0"))
.join("");
}
sha256Hex("mensaje").then(console.log);El ejemplo muestra el uso de una API criptográfica del navegador para una operación de resumen. No convierte un hash simple en un sistema de autenticación, almacenamiento de contraseñas o firma digital; cada objetivo requiere un esquema específico.
Las contraseñas no deben almacenarse en texto plano ni protegerse con un hash rápido genérico aplicado directamente. El almacenamiento seguro usa funciones de derivación de claves diseñadas para contraseñas, con sal única y parámetros de costo.
La implementación concreta debe delegarse a bibliotecas y plataformas mantenidas. También importan autenticación multifactor, recuperación de cuenta, límites de intentos y protección del canal de acceso.
El cifrado para datos reales debe proteger confidencialidad e integridad. Sin autenticación, un atacante puede modificar un texto cifrado y provocar cambios predecibles o errores al descifrar.
No se deben combinar manualmente un cifrador, un hash y una clave esperando obtener un protocolo seguro. Se usan modos y APIs de cifrado autenticado diseñados y revisados para ese propósito.
Una firma digital permite verificar que quien posee una clave privada autorizó un mensaje y que el mensaje no cambió desde la firma. La verificación se hace con la clave pública correspondiente.
Las firmas se usan para actualizaciones de software, documentos, artefactos de despliegue y mensajes. La seguridad incluye proteger la clave privada y verificar correctamente la cadena de confianza de la clave pública.
Un nonce es un valor que debe usarse una sola vez en el contexto definido por un protocolo. Puede evitar repeticiones y ayudar a distinguir mensajes o cifrados con el mismo contenido.
Reutilizar un nonce donde el algoritmo exige unicidad puede comprometer la seguridad. La generación y el almacenamiento de estos valores debe seguir estrictamente las reglas de la primitiva utilizada.
Autenticar es comprobar quién presenta una identidad; autorizar es decidir qué puede hacer esa identidad. Son procesos distintos.
Los modelos de roles, atributos o listas de control de acceso se expresan con conjuntos, relaciones y reglas booleanas. El principio de mínimo privilegio concede solo las capacidades necesarias.
Las relaciones entre identidades, grupos, roles y recursos forman un grafo dirigido. Una arista puede representar pertenencia, herencia, delegación o permiso.
Los grafos de permisos deben evitar herencias inesperadas y ciclos de delegación. Una relación aparentemente inocente puede abrir una ruta de privilegio no prevista, por lo que el modelo debe revisarse como parte de la seguridad.
Un protocolo seguro define mensajes, estados y transiciones permitidas. Un participante no debería aceptar un mensaje fuera de contexto ni repetir una transición ya cerrada.
Modelar protocolos como autómatas ayuda a detectar estados omitidos, reintentos ambiguos y secuencias que podrían permitir repetición o confusión de mensajes.
Las entradas externas son cadenas que deben respetar formatos, longitudes y reglas de negocio. Autómatas, gramáticas y expresiones regulares ayudan a describir la parte sintáctica de esas validaciones.
Una expresión regular debe ser simple, anclada cuando se valida una cadena completa y probada frente a entradas adversas. La validación es una capa, no la única defensa contra acciones no autorizadas.
Las sumas de comprobación, paridad y códigos de redundancia usan aritmética modular y operaciones sobre bits para detectar errores accidentales durante almacenamiento o transmisión.
Un atacante que puede modificar datos puede recalcular una suma de comprobación ordinaria. Para resistencia frente a manipulación intencional se usan MACs o firmas digitales con claves.
Una infraestructura se puede analizar como un grafo de dispositivos, servicios y enlaces. La segmentación limita qué caminos de red están permitidos entre componentes.
La segmentación no reemplaza autenticación ni actualizaciones, pero limita el alcance de un incidente. El diseño debe considerar dependencias legítimas para no bloquear operaciones esenciales.
Los registros de eventos forman secuencias y grafos de relaciones: una cuenta inicia sesión, accede a un recurso, modifica una configuración o llama a un servicio. Analizar patrones puede revelar desviaciones.
La observabilidad debe proteger la privacidad, restringir el acceso a registros y definir retención adecuada. Los datos de monitoreo también son información sensible.
El modelado de amenazas identifica activos, actores, fronteras de confianza, rutas de ataque y controles. Los diagramas de flujo y grafos ayudan a hacer visibles dependencias que no aparecen en un componente aislado.
El propósito no es adivinar cada ataque posible, sino razonar sistemáticamente sobre dónde aplicar defensas y cómo verificar que cubren los riesgos relevantes.
La mayoría de los fallos de seguridad no se resuelven inventando una primitiva criptográfica. Se reducen usando bibliotecas mantenidas, configuraciones seguras, actualizaciones, gestión de secretos y pruebas.
La matemática permite entender por qué funcionan los mecanismos, pero la seguridad de producción requiere ingeniería de software, operación y respuesta a incidentes.
La defensa en profundidad reconoce que ningún control es perfecto. Capas independientes reducen la probabilidad de que un único error se transforme en una brecha completa.
La matemática discreta permite razonar sobre las piezas que protegen un sistema; la ciberseguridad exige integrarlas correctamente. En el próximo tema aplicaremos los conceptos del curso en un proyecto integrador.