¿Qué es la Criptografía?

La criptografía es la disciplina que estudia técnicas para proteger la información mediante el uso de algoritmos matemáticos que convierten los datos en un formato ilegible sin la clave adecuada.

Principales Técnicas de Criptografía

  • Cifrado Simétrico: Utiliza la misma clave para cifrar y descifrar los datos. Ejemplo: AES.
  • Cifrado Asimétrico: Usa un par de claves (pública y privada) para cifrar y descifrar. Ejemplo: RSA.
  • Hashing: Convierte los datos en un valor único e irrepetible. Ejemplo: SHA-256.
  • Firmas Digitales: Permiten verificar la autenticidad de un mensaje o documento.

Ejemplo de Cifrado Simétrico con AES en Python

Este código muestra cómo cifrar y descifrar un mensaje usando la biblioteca `pycryptodome`:

from Crypto.Cipher import AES
import base64

# Clave y texto a cifrar (la clave debe ser de 16, 24 o 32 bytes)
clave = b'esta_es_una_clave_segura!'
texto = b'Mensaje secreto'

# Cifrado con AES en modo ECB
cipher = AES.new(clave[:16], AES.MODE_ECB)
texto_cifrado = cipher.encrypt(texto.ljust(16))  # Padding
texto_cifrado_b64 = base64.b64encode(texto_cifrado).decode()

print(f"Texto cifrado: {texto_cifrado_b64}")

En este ejemplo, se usa el algoritmo AES en modo ECB para cifrar un mensaje de manera segura.

Ejemplo de Cifrado Asimétrico con RSA en Python

Este código muestra cómo cifrar y descifrar un mensaje usando la biblioteca `pycryptodome` con el algoritmo RSA:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes
import base64

# Generación de claves RSA
clave_privada = RSA.generate(2048)
clave_publica = clave_privada.publickey()

# Exportar las claves
clave_privada_pem = clave_privada.export_key()
clave_publica_pem = clave_publica.export_key()

# Cifrado del mensaje con la clave pública
mensaje = b'Mensaje secreto para cifrado asimétrico'
cipher = PKCS1_OAEP.new(clave_publica)
mensaje_cifrado = cipher.encrypt(mensaje)

# Codificación base64 del mensaje cifrado
mensaje_cifrado_b64 = base64.b64encode(mensaje_cifrado).decode()

# Descifrado del mensaje con la clave privada
cipher_privada = PKCS1_OAEP.new(clave_privada)
mensaje_descifrado = cipher_privada.decrypt(base64.b64decode(mensaje_cifrado_b64))

print(f"Texto cifrado: {mensaje_cifrado_b64}")
print(f"Texto descifrado: {mensaje_descifrado.decode()}")

En este ejemplo, se utiliza el algoritmo RSA para cifrar y descifrar un mensaje de manera segura mediante el uso de claves pública y privada.

Ejemplo de Hashing con SHA-256

Este código muestra cómo generar un hash seguro utilizando el algoritmo SHA-256:

import hashlib

mensaje = "Mensaje seguro"
hash_sha256 = hashlib.sha256(mensaje.encode()).hexdigest()

print(f"Hash SHA-256: {hash_sha256}")

El hashing permite almacenar contraseñas y verificar la integridad de los datos sin necesidad de descifrarlos.

Conclusión

La criptografía es un pilar fundamental en la seguridad del software, protegiendo los datos contra accesos no autorizados y garantizando la privacidad de la información.