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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Texto claro | el mensaje antes de cifrarlo | |
| Texto cifrado | el mensaje después de cifrarlo | |
| Clave | el secreto que usa el cifrado | |
| Cifrado simétrico | un cifrado con la misma clave para cifrar y descifrar | |
| Fuerza bruta | probar todas las claves posibles hasta acertar | |
| Cifrado de bloque | un cifrado que trabaja con trozos de tamaño fijo | AES |
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
| Letra | Se desplaza a | Por qué |
|---|---|---|
| H | K | tres letras después de H |
| O | R | tres letras después de O |
| L | O | tres letras después de L |
| A | D | tres letras después de A |
| X | A | despué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
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
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
printf 'hola' | base64Se 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
printf 'aG9sYQ==' | base64 -dSe 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 clave | Claves posibles | A mil millones por segundo |
|---|---|---|
| Desplazamiento de letras | 25 | Al instante |
| 56 bits | unos 72 mil billones | Unos 2 años |
| 128 bits | unos 3,4 por 10 elevado a 38 | Más años de los que tiene el universo |
| 256 bits | unos 1,2 por 10 elevado a 77 | Mucho más todavía |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Calcula cuánto tarda una clave
# 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
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
# 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.