Pasangan Kunci RSA & ECDSA dalam Python
Bangkitkan, serialisasikan, dan gunakan kunci RSA serta EC untuk penandatanganan dan enkripsi.
Pasangan Kunci RSA & ECDSA dalam Python adalah pelajaran Cryptology Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Cryptology Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cryptology Academy mencakup 4 pelajaran total.
Gambaran Umum Operasi Pasangan Kunci
Pustaka cryptography Python mendukung RSA dan ECDSA untuk membuat kunci, menandatangani, memverifikasi, melakukan serialisasi, dan memuat kunci. Semua ini merupakan blok pembangun untuk sertifikat TLS, penandatanganan kode, dan JWT.
Membuat Pasangan Kunci RSA
Rekomendasi minimum: 2048-bit untuk kompatibilitas, 4096-bit untuk kunci yang digunakan dalam jangka panjang:
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
print("RSA key generated, size:", private_key.key_size, "bits")Penandatanganan RSA dengan PSS
Selalu gunakan padding PSS untuk tanda tangan (bukan PKCS#1 v1.5):
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
message = b"document to sign"
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("RSA-PSS signature:", signature.hex()[:32], "...")Verifikasi Tanda Tangan RSA
Verifikasi memunculkan InvalidSignature saat gagal:
from cryptography.exceptions import InvalidSignature
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Signature valid!")
except InvalidSignature:
print("Signature INVALID")Membuat Pasangan Kunci ECDSA
ECDSA dengan NIST P-256 (secp256r1) memberikan keamanan 128-bit dengan kunci yang jauh lebih kecil daripada RSA-3072:
from cryptography.hazmat.primitives.asymmetric import ec
private_key = ec.generate_private_key(ec.SECP256R1())
public_key = private_key.public_key()
print("EC private key generated on curve:", private_key.curve.name)Penandatanganan dan Verifikasi ECDSA
ECDSA menggunakan tanda tangan yang dikodekan dalam DER secara default:
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
from cryptography.exceptions import InvalidSignature
# Sign
sig = private_key.sign(b"my data", ec.ECDSA(hashes.SHA256()))
print("ECDSA signature bytes:", len(sig))
# Verify
try:
public_key.verify(sig, b"my data", ec.ECDSA(hashes.SHA256()))
print("ECDSA signature valid")
except InvalidSignature:
print("Invalid")Melakukan Serialisasi Kunci ke PEM
Simpan kunci ke berkas PEM untuk penyimpanan atau distribusi:
from cryptography.hazmat.primitives import serialization
# Private key — encrypted with passphrase
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.BestAvailableEncryption(b"strong-passphrase")
)
# Public key — no encryption
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
print(public_pem.decode()[:64])Memuat Kunci dari PEM
Muat kembali kunci yang telah disimpan ke dalam objek:
from cryptography.hazmat.primitives.serialization import (
load_pem_private_key, load_pem_public_key
)
with open("ec_private.pem", "rb") as f:
priv = load_pem_private_key(f.read(), password=b"strong-passphrase")
with open("ec_public.pem", "rb") as f:
pub = load_pem_public_key(f.read())
print("Loaded EC key curve:", priv.curve.name)Kesepakatan Kunci ECDH
Gunakan ECDH untuk menurunkan rahasia bersama bagi enkripsi simetris:
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
alice_priv = ec.generate_private_key(ec.SECP256R1())
bob_priv = ec.generate_private_key(ec.SECP256R1())
# Alice computes shared secret
shared = alice_priv.exchange(ec.ECDH(), bob_priv.public_key())
aes_key = HKDF(hashes.SHA256(), 32, None, b"app-context").derive(shared)
print("Derived AES key:", aes_key.hex())Enkripsi RSA dengan OAEP
Untuk mengenkripsi payload kecil (misalnya DEK) dengan RSA — selalu gunakan OAEP:
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# Encrypt with public key
ciphertext = public_key.encrypt(
b"small secret",
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Decrypt with private key
plaintext = private_key.decrypt(ciphertext, padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(), label=None
))
print("Decrypted:", plaintext)Memilih RSA atau ECDSA
ECDSA: tanda tangan lebih kecil (~71 byte untuk P-256 dibandingkan ~256 byte untuk RSA-2048), penandatanganan lebih cepat, dengan tingkat keamanan yang sama. RSA: dukungan warisan yang lebih luas, model mental yang lebih sederhana. Gunakan ECDSA P-256 atau Ed25519 untuk sistem baru.
Pemeriksaan Pengetahuan
Mengapa RSA-PSS sebaiknya diutamakan daripada PKCS#1 v1.5 untuk tanda tangan digital?
Ringkasan Pelajaran
Gunakan rsa.generate_private_key untuk RSA dan ec.generate_private_key untuk ECDSA. Tanda tangani dengan PSS (RSA) atau ECDSA + SHA-256. Serialisasikan ke PEM dengan format PKCS8 dan enkripsi menggunakan frasa sandi. Gunakan ECDH untuk kesepakatan kunci. Utamakan ECDSA P-256 atau Ed25519 untuk sistem baru.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pasangan Kunci RSA & ECDSA dalam Python” gratis?
Ya — teks lengkap “Pasangan Kunci RSA & ECDSA dalam Python” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cryptology Academy, upgrade ke CoddyKit PRO. Kursus Cryptology Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pasangan Kunci RSA & ECDSA dalam Python”?
Bangkitkan, serialisasikan, dan gunakan kunci RSA serta EC untuk penandatanganan dan enkripsi. Kamu berlatih Cryptology Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Cryptology Academy?
Tidak diperlukan pengalaman sebelumnya. Cryptology Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pasangan Kunci RSA & ECDSA dalam Python” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Cryptology Academy ini?
Ya. Setiap pelajaran Cryptology Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Ikhtisar Pustaka Kriptografi Python
- Enkripsi & Dekripsi AES-GCM dalam Python
- Pasangan Kunci RSA & ECDSA dalam Python
- Kesalahan Umum Kripto Python & Pola Aman