La criptografía es una herramienta fundamental en la seguridad informática, utilizada para proteger la confidencialidad, integridad y autenticidad de la información. En este módulo, exploraremos diversas aplicaciones prácticas de la criptografía en el mundo real.

  1. Cifrado de Datos

Concepto

El cifrado de datos es el proceso de convertir información legible (texto plano) en un formato codificado (texto cifrado) que solo puede ser leído por alguien que posea la clave de descifrado adecuada.

Ejemplo

Un ejemplo común es el cifrado de archivos en un disco duro para proteger información sensible. Herramientas como BitLocker (Windows) y FileVault (macOS) utilizan criptografía para cifrar datos almacenados en dispositivos.

Ejercicio Práctico

Objetivo: Cifrar y descifrar un mensaje utilizando una clave simétrica.

from cryptography.fernet import Fernet

# Generar una clave
key = Fernet.generate_key()
cipher_suite = Fernet(key)

# Mensaje a cifrar
message = b"Este es un mensaje secreto"
cipher_text = cipher_suite.encrypt(message)
print(f"Texto cifrado: {cipher_text}")

# Descifrar el mensaje
plain_text = cipher_suite.decrypt(cipher_text)
print(f"Texto descifrado: {plain_text.decode()}")

Explicación:

  1. Generamos una clave simétrica utilizando Fernet.
  2. Ciframos el mensaje.
  3. Desciframos el mensaje para obtener el texto original.

  1. Firmas Digitales

Concepto

Las firmas digitales proporcionan autenticidad y no repudio, asegurando que un mensaje o documento proviene de una fuente legítima y no ha sido alterado.

Ejemplo

Las firmas digitales se utilizan comúnmente en correos electrónicos, contratos electrónicos y software distribuido para verificar la identidad del remitente y la integridad del contenido.

Ejercicio Práctico

Objetivo: Crear y verificar una firma digital utilizando criptografía asimétrica.

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding

# Generar claves pública y privada
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()

# Mensaje a firmar
message = b"Este es un mensaje importante"

# Firmar el mensaje
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)

# Verificar la firma
try:
    public_key.verify(
        signature,
        message,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("La firma es válida.")
except:
    print("La firma no es válida.")

Explicación:

  1. Generamos un par de claves pública y privada.
  2. Firmamos el mensaje con la clave privada.
  3. Verificamos la firma con la clave pública.

  1. Autenticación y Control de Acceso

Concepto

La criptografía se utiliza en sistemas de autenticación para verificar la identidad de usuarios y controlar el acceso a recursos.

Ejemplo

Los sistemas de autenticación multifactor (MFA) combinan algo que el usuario sabe (contraseña), algo que el usuario tiene (token) y algo que el usuario es (biometría) para proporcionar una autenticación más segura.

Ejercicio Práctico

Objetivo: Implementar una autenticación básica con hash de contraseñas.

import hashlib

# Función para hashear una contraseña
def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()

# Almacenar la contraseña hasheada
stored_password_hash = hash_password("mi_contraseña_segura")

# Verificar la contraseña
def verify_password(stored_hash, provided_password):
    return stored_hash == hash_password(provided_password)

# Ejemplo de verificación
print(verify_password(stored_password_hash, "mi_contraseña_segura"))  # True
print(verify_password(stored_password_hash, "contraseña_incorrecta"))  # False

Explicación:

  1. Hasheamos una contraseña utilizando SHA-256.
  2. Almacenamos el hash de la contraseña.
  3. Verificamos si una contraseña proporcionada coincide con el hash almacenado.

  1. Comunicaciones Seguras

Concepto

La criptografía asegura la confidencialidad e integridad de las comunicaciones a través de redes inseguras.

Ejemplo

El protocolo HTTPS utiliza criptografía para proteger la comunicación entre navegadores web y servidores, asegurando que los datos transmitidos no puedan ser interceptados o alterados.

Ejercicio Práctico

Objetivo: Configurar una conexión HTTPS básica utilizando Python y http.server.

import http.server
import ssl

# Configurar el servidor HTTP
server_address = ('localhost', 4443)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)

# Envolver el servidor con SSL
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='path/to/cert.pem', keyfile='path/to/key.pem', server_side=True)

print("Servidor HTTPS corriendo en https://localhost:4443")
httpd.serve_forever()

Explicación:

  1. Configuramos un servidor HTTP básico.
  2. Envolvemos el servidor con SSL utilizando un certificado y una clave privada.
  3. Iniciamos el servidor HTTPS.

Conclusión

En esta sección, hemos explorado diversas aplicaciones de la criptografía, incluyendo el cifrado de datos, firmas digitales, autenticación y control de acceso, y comunicaciones seguras. Estos ejemplos prácticos ilustran cómo la criptografía se utiliza en la vida cotidiana para proteger la información y asegurar la integridad y autenticidad de los datos.

Resumen

  • Cifrado de Datos: Protege la confidencialidad de la información.
  • Firmas Digitales: Garantizan la autenticidad y no repudio.
  • Autenticación y Control de Acceso: Verifican la identidad de usuarios y controlan el acceso a recursos.
  • Comunicaciones Seguras: Aseguran la confidencialidad e integridad de las comunicaciones.

Preparación para el Siguiente Tema

En el próximo módulo, nos adentraremos en la Gestión de Riesgos y Medidas de Protección, donde aprenderemos a evaluar riesgos, implementar políticas de seguridad y desarrollar planes de respuesta a incidentes.

© Copyright 2024. Todos los derechos reservados