Introducción
La criptografía simétrica es una técnica de cifrado en la que se utiliza la misma clave tanto para cifrar como para descifrar la información. Este método es conocido por su eficiencia y velocidad, pero también presenta desafíos en la gestión y distribución de claves.
Conceptos Clave
- Clave Secreta: La misma clave es utilizada para cifrar y descifrar los datos.
- Algoritmo de Cifrado: Procedimiento matemático que transforma el texto plano en texto cifrado.
- Texto Plano: Información original que se desea proteger.
- Texto Cifrado: Información cifrada que resulta del proceso de cifrado.
Algoritmos de Criptografía Simétrica
Existen varios algoritmos de criptografía simétrica, cada uno con sus propias características y niveles de seguridad. A continuación, se describen algunos de los más comunes:
DES (Data Encryption Standard)
- Longitud de Clave: 56 bits
- Bloque de Datos: 64 bits
- Seguridad: Considerado inseguro para la mayoría de las aplicaciones modernas debido a su corta longitud de clave.
AES (Advanced Encryption Standard)
- Longitud de Clave: 128, 192, o 256 bits
- Bloque de Datos: 128 bits
- Seguridad: Altamente seguro y ampliamente utilizado en aplicaciones modernas.
3DES (Triple DES)
- Longitud de Clave: 168 bits (tres claves de 56 bits)
- Bloque de Datos: 64 bits
- Seguridad: Más seguro que DES, pero más lento que AES.
Blowfish
- Longitud de Clave: Variable (32 a 448 bits)
- Bloque de Datos: 64 bits
- Seguridad: Considerado seguro y eficiente para muchas aplicaciones.
Ejemplo Práctico: Cifrado y Descifrado con AES
A continuación, se presenta un ejemplo práctico de cómo cifrar y descifrar un mensaje utilizando el algoritmo AES en Python.
Código de Ejemplo
from Crypto.Cipher import AES from Crypto.Random import get_random_bytes import base64 # Función para agregar padding al texto def pad(text): while len(text) % 16 != 0: text += ' ' return text # Función para cifrar el texto def encrypt(plain_text, key): cipher = AES.new(key, AES.MODE_ECB) padded_text = pad(plain_text) encrypted_text = cipher.encrypt(padded_text.encode('utf-8')) return base64.b64encode(encrypted_text).decode('utf-8') # Función para descifrar el texto def decrypt(encrypted_text, key): cipher = AES.new(key, AES.MODE_ECB) decoded_encrypted_text = base64.b64decode(encrypted_text) decrypted_text = cipher.decrypt(decoded_encrypted_text).decode('utf-8').strip() return decrypted_text # Clave de 16 bytes (128 bits) key = get_random_bytes(16) # Texto a cifrar plain_text = "Este es un mensaje secreto" # Cifrado encrypted_text = encrypt(plain_text, key) print(f"Texto Cifrado: {encrypted_text}") # Descifrado decrypted_text = decrypt(encrypted_text, key) print(f"Texto Descifrado: {decrypted_text}")
Explicación del Código
- Padding: AES requiere que el texto tenga una longitud múltiplo de 16 bytes. La función
pad
agrega espacios al final del texto para cumplir con esta condición. - Cifrado: La función
encrypt
crea un objeto de cifrado AES en modo ECB (Electronic Codebook) y cifra el texto después de agregarle padding. El texto cifrado se codifica en base64 para facilitar su manejo. - Descifrado: La función
decrypt
decodifica el texto cifrado de base64 y luego lo descifra utilizando la misma clave.
Ejercicio Práctico
Ejercicio 1: Cifrado y Descifrado con DES
- Objetivo: Implementar el cifrado y descifrado de un mensaje utilizando el algoritmo DES en Python.
- Instrucciones:
- Utiliza la biblioteca
pycryptodome
para implementar el cifrado y descifrado. - Asegúrate de manejar el padding del texto adecuadamente.
- Utiliza la biblioteca
Solución
from Crypto.Cipher import DES from Crypto.Random import get_random_bytes import base64 # Función para agregar padding al texto def pad(text): while len(text) % 8 != 0: text += ' ' return text # Función para cifrar el texto def encrypt(plain_text, key): cipher = DES.new(key, DES.MODE_ECB) padded_text = pad(plain_text) encrypted_text = cipher.encrypt(padded_text.encode('utf-8')) return base64.b64encode(encrypted_text).decode('utf-8') # Función para descifrar el texto def decrypt(encrypted_text, key): cipher = DES.new(key, DES.MODE_ECB) decoded_encrypted_text = base64.b64decode(encrypted_text) decrypted_text = cipher.decrypt(decoded_encrypted_text).decode('utf-8').strip() return decrypted_text # Clave de 8 bytes (64 bits) key = get_random_bytes(8) # Texto a cifrar plain_text = "Mensaje secreto" # Cifrado encrypted_text = encrypt(plain_text, key) print(f"Texto Cifrado: {encrypted_text}") # Descifrado decrypted_text = decrypt(encrypted_text, key) print(f"Texto Descifrado: {decrypted_text}")
Explicación del Código
- Padding: La función
pad
asegura que el texto tenga una longitud múltiplo de 8 bytes, necesario para DES. - Cifrado: La función
encrypt
crea un objeto de cifrado DES en modo ECB y cifra el texto después de agregarle padding. El texto cifrado se codifica en base64. - Descifrado: La función
decrypt
decodifica el texto cifrado de base64 y luego lo descifra utilizando la misma clave.
Conclusión
La criptografía simétrica es una técnica fundamental en la seguridad informática, utilizada para proteger la confidencialidad de la información. Aunque es eficiente y rápida, presenta desafíos en la gestión de claves. En este módulo, hemos explorado los conceptos básicos, los algoritmos más comunes y hemos implementado ejemplos prácticos de cifrado y descifrado utilizando AES y DES.
Próximos Pasos
En el siguiente tema, exploraremos la Criptografía Asimétrica, que utiliza un par de claves (pública y privada) para cifrar y descifrar la información, resolviendo algunos de los desafíos de la criptografía simétrica.
Fundamentos de Seguridad Informática
Módulo 1: Introducción a la Seguridad Informática
- Conceptos Básicos de Seguridad Informática
- Tipos de Amenazas y Vulnerabilidades
- Principios de la Seguridad Informática
Módulo 2: Ciberseguridad
- Definición y Alcance de la Ciberseguridad
- Tipos de Ataques Cibernéticos
- Medidas de Protección en Ciberseguridad
- Casos de Estudio de Incidentes de Ciberseguridad
Módulo 3: Criptografía
- Introducción a la Criptografía
- Criptografía Simétrica
- Criptografía Asimétrica
- Protocolos Criptográficos
- Aplicaciones de la Criptografía
Módulo 4: Gestión de Riesgos y Medidas de Protección
- Evaluación de Riesgos
- Políticas de Seguridad
- Controles de Seguridad
- Plan de Respuesta a Incidentes
- Recuperación ante Desastres
Módulo 5: Herramientas y Técnicas de Seguridad
- Herramientas de Análisis de Vulnerabilidades
- Técnicas de Monitoreo y Detección
- Pruebas de Penetración
- Seguridad en Redes
- Seguridad en Aplicaciones
Módulo 6: Buenas Prácticas y Normativas
- Buenas Prácticas en Seguridad Informática
- Normativas y Estándares de Seguridad
- Cumplimiento y Auditoría
- Formación y Concienciación