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
- 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.
- 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).
- Algoritmo Criptográfico
- Algoritmo Criptográfico: Conjunto de reglas matemáticas utilizadas para realizar el cifrado y descifrado de datos.
Tipos de Criptografía
- 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.
- 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
- Genera una clave simétrica.
- Cifra un mensaje utilizando AES.
- 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
- Genera un par de claves RSA.
- Cifra un mensaje utilizando la clave pública.
- 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.
Curso de Ciberseguridad
Módulo 1: Introducción a la Ciberseguridad
- Conceptos Básicos de Ciberseguridad
- Tipos de Amenazas y Ataques
- Historia y Evolución de la Ciberseguridad
Módulo 2: Fundamentos de Seguridad de la Información
- Confidencialidad, Integridad y Disponibilidad (CIA)
- Autenticación y Autorización
- Criptografía Básica
Módulo 3: Seguridad en Redes
- Fundamentos de Redes
- Protocolos de Seguridad en Redes
- Firewalls y Sistemas de Detección de Intrusos (IDS/IPS)
Módulo 4: Seguridad en Sistemas y Aplicaciones
- Seguridad en Sistemas Operativos
- Seguridad en Aplicaciones Web
- Pruebas de Penetración y Evaluación de Vulnerabilidades
Módulo 5: Gestión de Incidentes y Respuesta a Incidentes
Módulo 6: Cumplimiento y Normativas
- Regulaciones y Estándares de Ciberseguridad
- Políticas de Seguridad y Gobernanza
- Auditorías y Evaluaciones de Cumplimiento
Módulo 7: Tecnologías Emergentes y Tendencias
- Inteligencia Artificial y Ciberseguridad
- Blockchain y Seguridad
- Internet de las Cosas (IoT) y Seguridad