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

  1. Clave Secreta: La misma clave es utilizada para cifrar y descifrar los datos.
  2. Algoritmo de Cifrado: Procedimiento matemático que transforma el texto plano en texto cifrado.
  3. Texto Plano: Información original que se desea proteger.
  4. 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

  1. 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.
  2. 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.
  3. 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

  1. Objetivo: Implementar el cifrado y descifrado de un mensaje utilizando el algoritmo DES en Python.
  2. Instrucciones:
    • Utiliza la biblioteca pycryptodome para implementar el cifrado y descifrado.
    • Asegúrate de manejar el padding del texto adecuadamente.

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

  1. Padding: La función pad asegura que el texto tenga una longitud múltiplo de 8 bytes, necesario para DES.
  2. 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.
  3. 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.

© Copyright 2024. Todos los derechos reservados