Cryptology Academy · Ders

Python'da RSA ve ECDSA Anahtar Çiftleri

İmzalama ve şifreleme için RSA ve EC anahtarları üretin, serileştirin ve kullanın.

3. ders / 413 adım

Python'da RSA ve ECDSA Anahtar Çiftleri, CoddyKit'te ücretsiz bir Cryptology Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cryptology Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cryptology Academy kursu toplamda 4 dersten oluşur.

Anahtar Çifti İşlemlerine Genel Bakış

Python'un cryptography kitaplığı; anahtar oluşturma, imzalama, doğrulama, serileştirme ve yükleme işlemleri için RSA ve ECDSA'yı destekler. Bunlar TLS sertifikalarının, kod imzalamanın ve JWT'lerin temel yapıtaşlarıdır.

RSA Anahtar Çifti Oluşturma

Önerilen en düşük değer: uyumluluk için 2048 bit, uzun ömürlü anahtarlar için 4096 bit:

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

PSS ile RSA İmzalama

İmzalar için her zaman PSS dolgusu kullanın (PKCS#1 v1.5 kullanmayın):

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], "...")

RSA İmzasını Doğrulama

Doğrulama başarısız olduğunda InvalidSignature oluşturur:

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

ECDSA Anahtar Çifti Oluşturma

NIST P-256 (secp256r1) kullanan ECDSA, RSA-3072'den çok daha küçük anahtarlarla 128 bitlik güvenlik sağlar:

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)

ECDSA ile İmzalama ve Doğrulama

ECDSA, varsayılan olarak DER ile kodlanmış imzaları kullanır:

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

Anahtarları PEM'e Serileştirme

Saklama veya dağıtım için anahtarları PEM dosyalarına kaydedin:

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

PEM'den Anahtar Yükleme

Saklanmış anahtarları yeniden nesnelere yükleyin:

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)

ECDH Anahtar Anlaşması

Simetrik şifreleme için paylaşılan bir sır türetmek üzere ECDH kullanın:

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

OAEP ile RSA Şifreleme

RSA ile küçük veri yüklerini (örneğin bir DEK) şifrelemek için her zaman OAEP kullanın:

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)

RSA mı, ECDSA mı Seçilmeli?

ECDSA: daha küçük imzalar (P-256 için yaklaşık 71 bayt, RSA-2048 için yaklaşık 256 bayt), daha hızlı imzalama ve aynı güvenlik düzeyi. RSA: daha geniş eski sistem desteği ve daha basit bir zihinsel model. Yeni sistemler için ECDSA P-256 veya Ed25519 kullanın.

Bilgi Kontrolü

Sayısal imzalarda RSA-PSS neden PKCS#1 v1.5'e tercih edilmelidir?

Ders Özeti

RSA için rsa.generate_private_key, ECDSA için ec.generate_private_key kullanın. RSA için PSS veya ECDSA + SHA-256 ile imzalayın. PKCS8 biçimini ve parola şifrelemesini kullanarak PEM'e serileştirin. Anahtar anlaşması için ECDH kullanın. Yeni sistemler için ECDSA P-256 veya Ed25519'u tercih edin.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Cryptology Academy öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
67
Dersler
261

Sıkça Sorulan Sorular

“Python'da RSA ve ECDSA Anahtar Çiftleri” dersi ücretsiz mi?

Evet — “Python'da RSA ve ECDSA Anahtar Çiftleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cryptology Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cryptology Academy kursu toplamda 4 dersten oluşur.

“Python'da RSA ve ECDSA Anahtar Çiftleri” dersinde ne öğreneceğim?

İmzalama ve şifreleme için RSA ve EC anahtarları üretin, serileştirin ve kullanın. Cryptology Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Cryptology Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Cryptology Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Python'da RSA ve ECDSA Anahtar Çiftleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Cryptology Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Cryptology Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Python kriptografi Kütüphanesine Genel Bakış
  2. Python'da AES-GCM ile Şifreleme ve Şifre Çözme
  3. Python'da RSA ve ECDSA Anahtar Çiftleri
  4. Yaygın Python Kripto Hataları ve Güvenli Kalıplar
← Cryptology Academy Sayfasına Dön