¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cifrado simétrico con clave secreta

Después de esta lección: Puedo explicar cómo una clave compartida cifra y descifra un mensaje.

Lección de 55 min5 comandosLaboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

Una misma clave para cerrar y para abrir

El cifrado simétrico usa la misma clave secreta para cifrar un mensaje y para descifrarlo. Es lo que protege casi todo lo que viaja por internet, desde un chat hasta tu banco.

Dos tiendas de una misma cadena se mandan los pedidos por una red abierta. Si cifran cada pedido con una clave que solo ellas conocen, quien lo intercepte verá letras sin sentido.

Al final de esta lección

Nota

Puedo explicar cómo una clave compartida cifra y descifra un mensaje.

Palabras clave

PalabraQué significaEjemplo
Texto claroel mensaje antes de cifrarlo
Texto cifradoel mensaje después de cifrarlo
Claveel secreto que usa el cifrado
Cifrado simétricoun cifrado con la misma clave para cifrar y descifrar
Fuerza brutaprobar todas las claves posibles hasta acertar
Cifrado de bloqueun cifrado que trabaja con trozos de tamaño fijoAES

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cifrar es volver ilegible un mensaje

Para cifrar tomas el texto claro y la clave. El resultado es el texto cifrado. Para descifrar haces el camino contrario con la misma clave.

El método es público. Solo la clave es secreta. Si el secreto fuera el método, bastaría con que alguien lo descubriera una vez.

Ejemplo: desplazar cada letra tres puestos

LetraSe desplaza aPor qué
HKtres letras después de H
ORtres letras después de O
LOtres letras después de L
ADtres letras después de A
XAdespués de Z se vuelve a la A

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cifra HOLA con un desplazamiento de tres

Comando
echo 'HOLA' | tr 'A-Z' 'D-ZA-C'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Descífralo con la misma clave al revés

Comando
echo 'KROD' | tr 'D-ZA-C' 'A-Z'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que base64 cifra. No cifra: solo escribe bytes con letras y cifras. No hay clave, así que cualquiera lo deshace. Usa cifrado cuando el secreto importe.

Codifica hola en base64

Comando
printf 'hola' | base64

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Deshazlo sin ninguna clave

Comando
printf 'aG9sYQ==' | base64 -d

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Con pocas claves, la fuerza bruta lo rompe

El desplazamiento solo tiene 25 claves útiles. Un atacante prueba las 25 y lee la que tenga sentido. Eso es fuerza bruta.

La defensa es una clave con muchísimas posibilidades. Cada bit más duplica el trabajo del atacante.

Ejemplo: cuánto tarda probar todas las claves

Tamaño de claveClaves posiblesA mil millones por segundo
Desplazamiento de letras25Al instante
56 bitsunos 72 mil billonesUnos 2 años
128 bitsunos 3,4 por 10 elevado a 38Más años de los que tiene el universo
256 bitsunos 1,2 por 10 elevado a 77Mucho más todavía

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Calcula cuánto tarda una clave

Código: python
# Cuánto tarda probar todas las claves de un tamaño.
claves_por_segundo = 1000000000
bits = 56
segundos = 2 ** bits // claves_por_segundo
anios = segundos // (60 * 60 * 24 * 365)
print("Años aproximados:", anios)
# Cambia bits a 64 y pulsa Ejecutar. Después prueba con 80.

Cuenta las claves de 128 bits

Comando
python3 -c "print(2 ** 128)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Los cifrados modernos trabajan por bloques

Un cifrado de bloque corta el mensaje en trozos de tamaño fijo y mezcla cada trozo con la clave muchas veces. AES usa bloques de 128 bits y claves de 128 o de 256 bits.

No inventes tu propio cifrado. Usa siempre una biblioteca probada. Los cifrados caseros se rompen con facilidad.

Un cifrado de juguete con XOR

Código: python
# Un cifrado de juguete: XOR de cada byte con una clave.
mensaje = [72, 79, 76, 65]   # H O L A en ASCII
clave = 23

cifrado = []
for byte in mensaje:
    cifrado.append(byte ^ clave)
print("Cifrado:", cifrado)

# Aplicar la misma clave otra vez devuelve el mensaje.
original = []
for byte in cifrado:
    original.append(byte ^ clave)
print("Original:", original)
# Cambia clave a 24 al descifrar y mira qué pasa.

Esto es solo un juguete

Importante

El desplazamiento y el XOR sirven para entender la idea. Un atacante los rompe en segundos. Para proteger datos reales usa una biblioteca probada, nunca tu propio cifrado.

El problema es cómo compartir la clave

Con una sola clave para los dos extremos, ambos deben tenerla antes de empezar. Si la mandas por la misma red, un atacante la copia junto al mensaje.

Para resolverlo existen las claves públicas, que veremos en la lección 3.

Para ir más lejos

Cifra un mensaje tuyo con la orden tr y un desplazamiento distinto de tres. Pásaselo a un compañero sin decirle el número.

Pídele que lo rompa probando todas las claves. Cuenta cuánto tarda. Después explica por qué con AES no podría.

Sobre este laboratorio y su código: Laboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.