Criptografia Simétrica e Assimétrica
Neste capítulo, vamos discutir em detalhes sobre criptografia simétrica e assimétrica.
Criptografia Simétrica
Nesse tipo, o processo de criptografia e descriptografia usa a mesma chave. Também é chamado desecret key cryptography. As principais características da criptografia simétrica são as seguintes -
- É mais simples e rápido.
- As duas partes trocam a chave de forma segura.
Recua
A principal desvantagem da criptografia simétrica é que, se a chave vazar para o intruso, a mensagem pode ser facilmente alterada e isso é considerado um fator de risco.
Padrão de criptografia de dados (DES)
O algoritmo de chave simétrica mais popular é o Data Encryption Standard (DES) e o Python inclui um pacote que inclui a lógica por trás do algoritmo DES.
Instalação
O comando para instalação do pacote DES pyDES em Python é -
pip install pyDES
A implementação simples do programa do algoritmo DES é a seguinte -
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
Requer a variável padmode que busca todos os pacotes de acordo com a implementação do algoritmo DES e segue a criptografia e descriptografia de uma maneira especificada.
Resultado
Você pode ver a seguinte saída como resultado do código fornecido acima -
Criptografia Assimétrica
Também é chamado de public key cryptography.Funciona na forma inversa da criptografia simétrica. Isso implica que são necessárias duas chaves: uma para criptografar e outra para descriptografar. A chave pública é usada para criptografar e a chave privada é usada para descriptografar.
Recua
- Devido ao seu comprimento de chave, ele contribui com menor velocidade de criptografia.
- O gerenciamento de chaves é crucial.
O código do programa a seguir em Python ilustra o funcionamento da criptografia assimétrica usando o algoritmo RSA e sua implementação -
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))
Resultado
Você pode encontrar a seguinte saída ao executar o código fornecido acima -