Contoh Penggunaan Tanda Tangan Digital Menggunakan Python

Pada contoh ini, akan digunakan library kode kriptografi primitif PyCryptodome (link ke PyPI). Sistem manajemen paket Python yang digunakan adalah pip.

Hash diciptakan menggunakan SHA3-256 (bukan SHA-256) sesuai standar FIPS 202. Skema tanda tangan digital yang digunakan adalah RSASSA-PSS berbasis RSA. Skema ini adalah probabilistik (probabilistic signature scheme), dimaksudkan untuk menggantikan skema RSA-PKCS#1 v1.5.

PyCryptodome dapat diinstal pada environment dengan perintah pip install pycryptodome.

from Crypto.Signature import pss
from Crypto.Hash import SHA3_256
from Crypto.PublicKey import RSA
from Crypto import Random

# Membuat pasangan kunci publik - privat
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()

# Membuat variabel bernilai string sebagai pesan
message = 'Nobody inspects the spammish repetition'

# Tiga baris kode di bawah dijalankan oleh pihak pengirim
key = RSA.import_key(private_key)
h = SHA3_256.new(message.encode('utf-8'))
signature = pss.new(key).sign(h) # membuat tanda tangan

# Pada tahap ini, pesan dikirimkan ke penerima
# Tanda tangan bisa saja ditambahkan (append) pada pesan

# Verifikasi tanda tangan (untuk pihak penerima)
key = RSA.import_key(public_key)
h = SHA3_256.new(message.encode('utf-8'))
verifier = pss.new(key)
try:
    verifier.verify(h, signature)
    print("Tanda tangan OK.")
except (ValueError, TypeError):
    print("Gagal: Tanda tangan tidak otentik.")

Kunci RSA dapat juga disimpan sebagai file, contohnya (untuk private key):

file_out = open("private.pem", "wb")
file_out.write(private_key)
file_out.close()