Criptografía simétrica y asimétrica

En este capítulo, analicemos en detalle la criptografía simétrica y asimétrica.

Criptografía simétrica

En este tipo, el proceso de cifrado y descifrado utiliza la misma clave. También se llama comosecret key cryptography. Las principales características de la criptografía simétrica son las siguientes:

  • Es más sencillo y rápido.
  • Las dos partes intercambian la clave de forma segura.

Retirarse

El principal inconveniente de la criptografía simétrica es que si la clave se filtra al intruso, el mensaje se puede cambiar fácilmente y esto se considera un factor de riesgo.

Estándar de cifrado de datos (DES)

El algoritmo de clave simétrica más popular es el estándar de cifrado de datos (DES) y Python incluye un paquete que incluye la lógica detrás del algoritmo DES.

Instalación

El comando para la instalación del paquete DES pyDES en Python es -

pip install pyDES

La implementación simple del programa del algoritmo DES es la siguiente:

import pyDes

data = "DES Algorithm Implementation"
k = pyDes.des("DESCRYPT", pyDes.CBC, "\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
d = k.encrypt(data)

print "Encrypted: %r" % d
print "Decrypted: %r" % k.decrypt(d)
assert k.decrypt(d) == data

Requiere la variable padmode que obtiene todos los paquetes según la implementación del algoritmo DES y sigue el cifrado y el descifrado de una manera específica.

Salida

Puede ver el siguiente resultado como resultado del código proporcionado anteriormente:

Criptografía asimétrica

También se llama como public key cryptography.Funciona a la inversa de la criptografía simétrica. Esto implica que requiere dos claves: una para el cifrado y otra para el descifrado. La clave pública se utiliza para cifrar y la clave privada se utiliza para descifrar.

Retirarse

  • Debido a su longitud de clave, contribuye a una menor velocidad de cifrado.
  • La gestión de claves es fundamental.

El siguiente código de programa en Python ilustra el funcionamiento de la criptografía asimétrica utilizando el algoritmo RSA y su implementación:

from Crypto import Random
from Crypto.PublicKey import RSA
import base64

def generate_keys():
   # key length must be a multiple of 256 and >= 1024
   modulus_length = 256*4
   privatekey = RSA.generate(modulus_length, Random.new().read)
   publickey = privatekey.publickey()
   return privatekey, publickey

def encrypt_message(a_message , publickey):
   encrypted_msg = publickey.encrypt(a_message, 32)[0]
   encoded_encrypted_msg = base64.b64encode(encrypted_msg)
   return encoded_encrypted_msg

def decrypt_message(encoded_encrypted_msg, privatekey):
   decoded_encrypted_msg = base64.b64decode(encoded_encrypted_msg)
   decoded_decrypted_msg = privatekey.decrypt(decoded_encrypted_msg)
   return decoded_decrypted_msg

a_message = "This is the illustration of RSA algorithm of asymmetric cryptography"
privatekey , publickey = generate_keys()
encrypted_msg = encrypt_message(a_message , publickey)
decrypted_msg = decrypt_message(encrypted_msg, privatekey)

print "%s - (%d)" % (privatekey.exportKey() , len(privatekey.exportKey()))
print "%s - (%d)" % (publickey.exportKey() , len(publickey.exportKey()))
print " Original content: %s - (%d)" % (a_message, len(a_message))
print "Encrypted message: %s - (%d)" % (encrypted_msg, len(encrypted_msg))
print "Decrypted message: %s - (%d)" % (decrypted_msg, len(decrypted_msg))

Salida

Puede encontrar la siguiente salida cuando ejecuta el código dado anteriormente: