Logo Studenta

Programación - CIBERSEGURIDAD criptografia -cifrado simetrico - asimetrico

¡Estudia con miles de materiales!

Vista previa del material en texto

Cifrado simétrico: El cifrado simétrico utiliza la misma clave tanto para el cifrado como para el descifrado de datos. Esto significa que el emisor y el receptor deben compartir la misma clave secreta de antemano. Es un proceso más rápido que el cifrado asimétrico, pero presenta el desafío de la distribución segura de la clave compartida.
Aquí tienes un ejemplo de cifrado simétrico utilizando el algoritmo AES (Advanced Encryption Standard) en Python utilizando la biblioteca cryptography:
 
En este ejemplo, se genera una clave secreta utilizando Fernet.generate_key(). Luego, se crea un objeto Fernet utilizando la clave generada. Este objeto se utiliza para cifrar y descifrar los datos.
El mensaje a cifrar se define como una secuencia de bytes (bytes), y se utiliza el método encrypt() del objeto Fernet para cifrar el mensaje. El resultado es el mensaje cifrado en forma de bytes.
Para descifrar el mensaje, se utiliza el método decrypt() del objeto Fernet, pasando como argumento el mensaje cifrado. El resultado es el mensaje original descifrado.
Cifrado asimétrico: 
El cifrado asimétrico utiliza un par de claves: una clave pública para cifrar los datos y una clave privada correspondiente para descifrarlos. Esto permite que cualquier persona pueda cifrar datos utilizando la clave pública, pero solo el propietario de la clave privada puede descifrarlos.
Aquí tienes un ejemplo de cifrado asimétrico utilizando el algoritmo RSA (Rivest-Shamir-Adleman) en Python utilizando la biblioteca cryptography:
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
# Generar un par de claves RSA
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
# Cifrar el mensaje con la clave pública
message = b"Este es el mensaje a cifrar"
encrypted_message = public_key.encrypt(
 message,
 padding.OAEP(
 mgf=padding.MGF1(algorithm=hashes.SHA256()),
 algorithm=hashes.SHA256(),
 label=None
 )
)
# Descifrar el mensaje con la clave privada
decrypted_message = private_key.decrypt(
 encrypted_message,
 padding.OAEP(
 mgf=padding.MGF1(algorithm=hashes.SHA256()),
 algorithm=hashes.SHA256(),
 label=None
 )
)
print("Mensaje cifrado:", encrypted_message)
print("Mensaje descifrado:", decrypted_message)
En este ejemplo, se genera un par de claves RSA utilizando rsa.generate_private_key(). A partir de la clave privada, se obtiene la clave pública correspondiente utilizando private_key.public_key().
El mensaje a cifrar se define como una secuencia de bytes (bytes), y se utiliza el método encrypt() de la clave pública para cifrar el mensaje. Se utiliza el esquema de relleno OAEP (Optimal Asymmetric Encryption Padding) junto con la función hash SHA256.
Para descifrar el mensaje, se utiliza el método decrypt() de la clave privada, pasando como argumento el mensaje cifrado. Se utiliza el mismo esquema de relleno y función hash utilizados para el cifrado.
Es importante destacar que estos ejemplos son simplificados y no incluyen consideraciones adicionales, como la gestión segura de claves, la generación de claves aleatorias y la protección de claves privadas. En un entorno de producción, se deben seguir mejores prácticas de seguridad para garantizar una protección adecuada de los datos cifrados.
 funciones hash
Las funciones hash criptográficas son algoritmos que toman una entrada de datos y generan una salida de longitud fija, conocida como el hash. Estas funciones tienen varias propiedades importantes:
Unidireccionalidad: Es computacionalmente difícil obtener el dato original a partir del hash. Es decir, dado un hash, es prácticamente imposible encontrar los datos originales que lo generaron.
Integridad: Cualquier cambio en los datos originales producirá un hash completamente diferente. Esto permite detectar si los datos se han alterado durante su transmisión o almacenamiento.
Resistencia a colisiones: Es muy improbable que dos conjuntos de datos diferentes generen el mismo hash. Esto evita que dos conjuntos de datos distintos se confundan debido a colisiones de hash.
Aquí tienes un ejemplo de cómo utilizar una función hash en Python utilizando la biblioteca hashlib:
 
En este ejemplo, se crea un objeto de función hash utilizando hashlib.sha256(), que utiliza el algoritmo SHA-256. A continuación, se alimentan los datos a hashear utilizando el método update() del objeto hash. Finalmente, se obtiene el hash resultante en formato hexadecimal utilizando el método hexdigest().
Es importante destacar que existen diferentes algoritmos de función hash criptográfica, como MD5, SHA-1, SHA-256, entre otros. Cada uno tiene diferentes propiedades y niveles de seguridad. En aplicaciones de seguridad, se recomienda utilizar algoritmos más fuertes, como SHA-256, debido a la mayor resistencia a ataques criptográficos.
a continuación te explico qué son los algoritmos MD5, SHA-1 y SHA-256, y te proporciono ejemplos de código en Python para cada uno de ellos.
MD5 (Message Digest Algorithm 5): MD5 es un algoritmo de función hash criptográfica que produce un hash de 128 bits. Sin embargo, debido a sus vulnerabilidades, se considera débil para aplicaciones de seguridad. Se utiliza principalmente en casos donde la integridad de los datos es más importante que la seguridad criptográfica.
Aquí tienes un ejemplo de cómo utilizar MD5 en Python utilizando la biblioteca hashlib:
 
SHA-1 (Secure Hash Algorithm 1): SHA-1 es otro algoritmo de función hash criptográfica que produce un hash de 160 bits. Aunque todavía se utiliza en algunas aplicaciones, también se considera débil debido a las vulnerabilidades conocidas y se recomienda su sustitución por algoritmos más fuertes.
Aquí tienes un ejemplo de cómo utilizar SHA-1 en Python utilizando la biblioteca hashlib:
 
SHA-256 (Secure Hash Algorithm 256): SHA-256 es un algoritmo más fuerte y seguro en comparación con MD5 y SHA-1. Produce un hash de 256 bits y se utiliza ampliamente en aplicaciones de seguridad, como autenticación de contraseñas, firmas digitales y validación de integridad de datos.
Aquí tienes un ejemplo de cómo utilizar SHA-256 en Python utilizando la biblioteca hashlib:
 
En estos ejemplos, se sigue el mismo patrón para crear el objeto de función hash, alimentar los datos y obtener el hash resultante en formato hexadecimal utilizando el método hexdigest(). Sin embargo, ten en cuenta que SHA-256 es más seguro y resistente a ataques criptográficos en comparación con MD5 y SHA-1.

Continuar navegando