Café y Código

1. Conceptos Básicos y Pilares de la Criptografía 🔐

Introducción y Motivación

En la era de la información, la seguridad de los datos ya no es una característica opcional; es la columna vertebral de cualquier aplicación confiable. Desde el almacenamiento de contraseñas de tus usuarios hasta la transmisión de transacciones bancarias, la criptografía es la ciencia que nos permite asegurar la confidencialidad, integridad y autenticidad de la información.

Antes de escribir complejas líneas de código en Python o Java, es fundamental entender los conceptos teóricos básicos. El error más común entre desarrolladores principiantes es aplicar algoritmos a ciegas, lo que genera sistemas con fallas estructurales graves.

¿Cifrado o Hashing? La diferencia crucial

Uno de los mayores dolores en el desarrollo de software es confundir estos dos procesos. Aunque ambos transforman el texto original, sus propósitos matemáticos son opuestos:

Característica Cifrado (Encryption) Hashing (Funciones Resumen)
Direccionalidad Bidireccional: El texto cifrado se puede descifrar para recuperar el original con la clave correcta. Unidireccional: Es matemáticamente imposible reconstruir el texto original a partir del hash.
Tamaño de Salida Variable (crece con el tamaño del mensaje). Fijo (ej. SHA-256 siempre genera una huella de 256 bits/64 caracteres).
Caso de Uso Común Envío de mensajes privados, almacenamiento de datos sensibles del cliente (ej. tarjetas de crédito). Verificación de integridad de archivos y almacenamiento seguro de contraseñas.

El Inicio de Todo: Cifrado Clásico (César)

Para entender cómo funciona el cifrado simétrico moderno, es útil repasar el Cifrado César. Es un método de sustitución donde cada letra del texto original se desplaza un número fijo de posiciones en el alfabeto.

Si nuestro desplazamiento (clave) es 3, la A se convierte en D, la B en E, y así sucesivamente.

cesar.py
PYTHON
1 def cifrado_cesar(texto, desplazamiento):
2 resultado = ""
3 for char in texto:
4 if char.isalpha():
5 # Determinar base ASCII (Mayúscula o Minúscula)
6 base = ord('A') if char.isupper() else ord('a')
7 # Aplicar desplazamiento cíclico en el alfabeto (26 letras)
8 cifrado = (ord(char) - base + desplazamiento) % 26 + base
9 resultado += chr(cifrado)
10 else:
11 resultado += char
12 return resultado
13
14 # Prueba de Cifrado
15 mensaje = "Aprende Criptografia"
16 mensaje_cifrado = cifrado_cesar(mensaje, 3)
17 print(f"Cifrado: {mensaje_cifrado}") # "Dsuhqgh Fulswrjudild"
18
19 # Descifrado usando el desplazamiento inverso (-3)
20 mensaje_descifrado = cifrado_cesar(mensaje_cifrado, -3)
21 print(f"Descifrado: {mensaje_descifrado}") # "Aprende Criptografia"

Los Dos Enfoques del Cifrado Moderno

Los algoritmos modernos se dividen en dos categorías principales según el manejo de claves:

  • Cifrado Simétrico: Usa la misma clave secreta para encriptar y desencriptar. Su analogía física es una caja fuerte con una única llave. Es extremadamente rápido pero presenta el problema de cómo compartir esa única llave de forma segura.
  • Cifrado Asimétrico: Usa un par de llaves vinculadas matemáticamente: una clave pública (que se puede compartir con todo el mundo para cifrar) y una clave privada (que solo el dueño posee y sirve para descifrar). Su analogía es un buzón de correo con ranura pública y llave privada para vaciarlo.

Ponte a prueba

Comprueba tus conocimientos sobre este tema realizando nuestro pequeño test (3 preguntas).

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.