Kriptografi Simetris dan Asimetris

Pada bab ini, mari kita bahas secara detail tentang kriptografi simetris dan asimetris.

Kriptografi Simetris

Pada tipe ini, proses enkripsi dan dekripsi menggunakan kunci yang sama. Itu juga disebut sebagaisecret key cryptography. Fitur utama dari kriptografi simetris adalah sebagai berikut -

  • Ini lebih sederhana dan lebih cepat.
  • Kedua pihak bertukar kunci dengan cara yang aman.

Kekurangan

Kelemahan utama dari kriptografi simetris adalah jika kunci bocor ke penyusup, pesan dapat dengan mudah diubah dan ini dianggap sebagai faktor risiko.

Standar Enkripsi Data (DES)

Algoritme kunci simetris paling populer adalah Data Encryption Standard (DES) dan Python menyertakan paket yang menyertakan logika di balik algoritme DES.

Instalasi

Perintah untuk instalasi paket DES pyDES dengan Python adalah -

pip install pyDES

Implementasi program sederhana dari algoritma DES adalah sebagai berikut -

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

Itu memanggil variabel padmode yang mengambil semua paket sesuai implementasi algoritma DES dan mengikuti enkripsi dan dekripsi dengan cara tertentu.

Keluaran

Anda dapat melihat output berikut sebagai hasil dari kode yang diberikan di atas -

Kriptografi Asimetris

Itu juga disebut sebagai public key cryptography.Ia bekerja dengan cara kebalikan dari kriptografi simetris. Ini menyiratkan bahwa itu membutuhkan dua kunci: satu untuk enkripsi dan lainnya untuk dekripsi. Kunci publik digunakan untuk mengenkripsi dan kunci privat digunakan untuk mendekripsi.

Kekurangan

  • Karena panjang kuncinya, ini berkontribusi pada kecepatan enkripsi yang lebih rendah.
  • Manajemen kunci sangat penting.

Kode program berikut dengan Python menggambarkan cara kerja kriptografi asimetris menggunakan algoritma RSA dan implementasinya -

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

Keluaran

Anda dapat menemukan output berikut ketika Anda menjalankan kode yang diberikan di atas -