Lab 10: ️ Digital Signatures - Menandatangani & Memverifikasi
Target: Membuat dan memverifikasi tanda tangan digital dengan RSA
Tools:openssl,python3
Konsep
Digital signature memberikan integritas + autentikasi:
- Sign dengan private key - hanya pemilik yang bisa sign
- Verify dengan public key - semua orang bisa verify
- Jika dokumen diubah, signature jadi invalid
Praktikum
cd ~ && mkdir crypto-lab10 && cd crypto-lab10
# 1. Sign & verify dengan OpenSSL
echo "=== OpenSSL Digital Signature ==*"
# Generate key
openssl genrsa -out key.pem 2048 2>/dev/null
# Buat dokumen
echo "Kontrak: A setuju membayar B Rp 1.000.000" > contract.txt
# Sign
openssl dgst -sha256 -sign key.pem -out contract.sig contract.txt
# Verify
openssl dgst -sha256 -verify <(openssl rsa -in key.pem -pubout 2>/dev/null) \
-signature contract.sig contract.txt 2>/dev/null
echo "✅ Signature valid!"
echo ""
# 2. Demonstrasi: dokumen diubah
echo "Kontrak: A setuju membayar B Rp 10.000.000" > contract_modified.txt
openssl dgst -sha256 -verify <(openssl rsa -in key.pem -pubout 2>/dev/null) \
-signature contract.sig contract_modified.txt 2>/dev/null
echo "❌ Signature INVALID - dokumen telah diubah!"
echo ""
# 3. Python implementation
python3 << 'PYEOF'
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
# Load key
key = RSA.generate(2048)
# Sign
doc = b"Laporan keuangan Q2 2026: Laba bersih Rp 5M"
h = SHA256.new(doc)
signature = pkcs1_15.new(key).sign(h)
print(f"Document: {doc}")
print(f"Signature (hex): {signature.hex()[:40]}...")
# Verify
try:
pkcs1_15.new(key.publickey()).verify(h, signature)
print("✅ Signature VALID - dokumen asli & tidak diubah")
except (ValueError, TypeError):
print("❌ Signature INVALID - dokumen dipalsukan!")
PYEOF
️ Analisis
| Konsep | Arti |
|---|---|
| Sign | Hash dokumen → encrypt hash dengan private key |
| Verify | Decrypt signature dengan public key → bandingkan hash |
| Integritas | Jika dokumen berubah, hash berbeda → signature invalid |
| Non-repudiation | Penandatangan tidak bisa menyangkal |
Refleksi: Digital signature = tanda tangan elektronik yang tidak bisa dipalsukan. Inilah dasar dari kontrak digital, software signing, dan sertifikat SSL/TLS. Lebih kuat dari tanda tangan basah!
Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy