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 -