La criptografía es una disciplina fundamental en la ciberseguridad que se encarga de proteger la información mediante técnicas de cifrado y descifrado. En esta sección, exploraremos los conceptos básicos de la criptografía, sus tipos y algunos algoritmos comunes.

Conceptos Clave

  1. Cifrado y Descifrado

  • Cifrado: Proceso de convertir información legible (texto plano) en un formato ilegible (texto cifrado) usando un algoritmo y una clave.
  • Descifrado: Proceso inverso al cifrado, donde el texto cifrado se convierte nuevamente en texto plano usando un algoritmo y una clave.

  1. Clave

  • Clave: Información secreta utilizada en los procesos de cifrado y descifrado. Puede ser simétrica (misma clave para cifrar y descifrar) o asimétrica (claves diferentes para cifrar y descifrar).

  1. Algoritmo Criptográfico

  • Algoritmo Criptográfico: Conjunto de reglas matemáticas utilizadas para realizar el cifrado y descifrado de datos.

Tipos de Criptografía

  1. Criptografía Simétrica

  • Definición: Utiliza la misma clave para cifrar y descifrar la información.
  • Ventajas: Rápida y eficiente para grandes volúmenes de datos.
  • Desventajas: Problema de distribución de claves; si la clave es comprometida, toda la comunicación está en riesgo.

Ejemplo de Algoritmo Simétrico: AES (Advanced Encryption Standard)

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# Generar una clave de 16 bytes
key = get_random_bytes(16)

# Crear un objeto de cifrado AES
cipher = AES.new(key, AES.MODE_EAX)

# Cifrar un mensaje
plaintext = b'Este es un mensaje secreto'
ciphertext, tag = cipher.encrypt_and_digest(plaintext)

print("Texto cifrado:", ciphertext)

Explicación:

  • AES.new(key, AES.MODE_EAX): Crea un objeto de cifrado AES en modo EAX.
  • cipher.encrypt_and_digest(plaintext): Cifra el texto plano y genera un tag de autenticación.

  1. Criptografía Asimétrica

  • Definición: Utiliza un par de claves, una pública para cifrar y una privada para descifrar.
  • Ventajas: Mejora la seguridad en la distribución de claves.
  • Desventajas: Más lenta y menos eficiente para grandes volúmenes de datos.

Ejemplo de Algoritmo Asimétrico: RSA (Rivest-Shamir-Adleman)

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Generar un par de claves RSA
key = RSA.generate(2048)
public_key = key.publickey()

# Crear un objeto de cifrado RSA con la clave pública
cipher = PKCS1_OAEP.new(public_key)

# Cifrar un mensaje
plaintext = b'Este es un mensaje secreto'
ciphertext = cipher.encrypt(plaintext)

print("Texto cifrado:", ciphertext)

Explicación:

  • RSA.generate(2048): Genera un par de claves RSA de 2048 bits.
  • PKCS1_OAEP.new(public_key): Crea un objeto de cifrado RSA con la clave pública.
  • cipher.encrypt(plaintext): Cifra el texto plano.

Ejercicios Prácticos

Ejercicio 1: Cifrado y Descifrado Simétrico

  1. Genera una clave simétrica.
  2. Cifra un mensaje utilizando AES.
  3. Descifra el mensaje cifrado.

Solución:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# Generar una clave de 16 bytes
key = get_random_bytes(16)

# Crear un objeto de cifrado AES
cipher = AES.new(key, AES.MODE_EAX)

# Cifrar un mensaje
plaintext = b'Este es un mensaje secreto'
ciphertext, tag = cipher.encrypt_and_digest(plaintext)

# Crear un objeto de descifrado AES
cipher_dec = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)

# Descifrar el mensaje
plaintext_dec = cipher_dec.decrypt_and_verify(ciphertext, tag)

print("Texto descifrado:", plaintext_dec)

Ejercicio 2: Cifrado y Descifrado Asimétrico

  1. Genera un par de claves RSA.
  2. Cifra un mensaje utilizando la clave pública.
  3. Descifra el mensaje cifrado utilizando la clave privada.

Solución:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Generar un par de claves RSA
key = RSA.generate(2048)
public_key = key.publickey()

# Crear un objeto de cifrado RSA con la clave pública
cipher = PKCS1_OAEP.new(public_key)

# Cifrar un mensaje
plaintext = b'Este es un mensaje secreto'
ciphertext = cipher.encrypt(plaintext)

# Crear un objeto de descifrado RSA con la clave privada
cipher_dec = PKCS1_OAEP.new(key)

# Descifrar el mensaje
plaintext_dec = cipher_dec.decrypt(ciphertext)

print("Texto descifrado:", plaintext_dec)

Resumen

En esta sección, hemos cubierto los conceptos básicos de la criptografía, incluyendo el cifrado y descifrado, las claves y los algoritmos criptográficos. Hemos explorado dos tipos principales de criptografía: simétrica y asimétrica, y hemos visto ejemplos prácticos de cómo funcionan estos algoritmos. Los ejercicios prácticos proporcionados ayudan a reforzar estos conceptos y a familiarizarse con las implementaciones en Python.

En la siguiente sección, profundizaremos en la Seguridad en Redes, donde aprenderemos sobre los fundamentos de las redes y los protocolos de seguridad.

© Copyright 2024. Todos los derechos reservados