Cryptographie symétrique et asymétrique

Dans ce chapitre, discutons en détail de la cryptographie symétrique et asymétrique.

Cryptographie symétrique

Dans ce type, le processus de chiffrement et de déchiffrement utilise la même clé. Il est également appelé commesecret key cryptography. Les principales caractéristiques de la cryptographie symétrique sont les suivantes -

  • C'est plus simple et plus rapide.
  • Les deux parties échangent la clé de manière sécurisée.

Inconvénient

L'inconvénient majeur de la cryptographie symétrique est que si la clé est divulguée à l'intrus, le message peut être facilement modifié et cela est considéré comme un facteur de risque.

Norme de chiffrement des données (DES)

L'algorithme de clé symétrique le plus populaire est Data Encryption Standard (DES) et Python comprend un package qui inclut la logique derrière l'algorithme DES.

Installation

La commande pour l'installation du package DES pyDES en Python est -

pip install pyDES

La mise en œuvre de programme simple de l'algorithme DES est la suivante -

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

Il appelle la variable padmode qui récupère tous les packages selon la mise en œuvre de l'algorithme DES et suit le cryptage et le décryptage d'une manière spécifiée.

Production

Vous pouvez voir la sortie suivante à la suite du code donné ci-dessus -

Cryptographie asymétrique

Il est également appelé comme public key cryptography.Cela fonctionne à l'inverse de la cryptographie symétrique. Cela implique qu'il nécessite deux clés: une pour le cryptage et l'autre pour le décryptage. La clé publique est utilisée pour le chiffrement et la clé privée est utilisée pour le déchiffrement.

Inconvénient

  • En raison de sa longueur de clé, il contribue à une vitesse de cryptage plus faible.
  • La gestion des clés est cruciale.

Le code de programme suivant en Python illustre le fonctionnement de la cryptographie asymétrique utilisant l'algorithme RSA et son implémentation -

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))

Production

Vous pouvez trouver la sortie suivante lorsque vous exécutez le code donné ci-dessus -