
Fri Sep 25 2026

Merhaba! 👋
Bugün RSA’nın günlük hayatımızda ne kadar sık göründüğünden ve yeni çıkan bir faktörizasyon yönteminin gerçekten ne kadar ciddi bir tehdit oluşturduğundan bahsedeceğiz.
Kısacası, internetin güvenliği’nin belkemiği RSA’dır.
Son aylarda akademik çevrelerde “daha hızlı faktörizasyon” iddiasıyla yeni bir algoritma paylaşıldı.
Başlıklar “RSA kırıldı!” diye çığlık atıyor, ama durum öyle basit değil.
Gerçekten panik mi yapmalıyız?
Bu yazıda şunları öğreneceksiniz:
Hazırsan detaylara dalalım! 🚀
Hadi RSA’nın kalbinde ne olduğunu, benimle bir kahve içermiş gibi konuşarak anlayalım ☕️.
p ve q.n = p × q elde ederiz.n herkese açık (public key), ama p ve q gizli kalır.φ(n) = (p‑1) × (q‑1) hesaplanır.d ile genel anahtar e arasındaki matematiksel bağı kurar.e (genel) ve d (özel) şu denklemi sağlar:
e × d ≡ 1 (mod φ(n))
Yani d, e’nin φ(n) modülündeki modüler tersidir.
Bu ilişki sayesinde:
c = m^e mod nm = c^d mod nNe oluyor burada?
Herkes n ve e’yi bilir, ama d’yi bulmak için φ(n)’i bilmek gerekir. φ(n)’i bulmak ise p ve q’yı bilmeyi gerektirir — yani n’i faktörize etmek.
| Neden | Açıklama |
|---|---|
| Sayı boyutu | 2048‑bit n ≈ 617 ondalık basamak. 4096‑bit ise ≈ 1234 basamak. |
| En iyi bilinen algoritma | GNFS (General Number Field Sieve) – alt‑üstel ama hâlâ süper‑polinomiyal zaman. |
| Klasik bilgisayar sınırları | 2048‑bit faktörizasyon için yıllar hatta yüzyıllar harcanır (mevcut donanımla). |
| Kuantum tehdidi | Shor algoritması polinomiyal zamanlı çözer, ama büyük ölçekli kuantum bilgisayar henüz yok. |
Özetle:
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
# 2048-bit anahtar çifti üret
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
public_key = private_key.public_key()
# Modül (n) boyutunu bit cinsinden al
n = public_key.public_numbers().n
bit_length = n.bit_length()
print(f"Modül (n) bit uzunluğu: {bit_length} bit")
# Beklenen çıktı: 2048 bit (veya 2047/2048 arası küçük fark olabilir)
# İsteğe bağlı: PEM formatında dışa aktar
pem_private = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption(),
)
pem_public = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo,
)
print("\n--- Özel Anahtar (PEM) ---")
print(pem_private.decode())
print("--- Genel Anahtar (PEM) ---")
print(pem_public.decode())
Bu kod ne yapıyor?
cryptography kütüphanesiyle 2048‑bit RSA anahtar çifti oluşturur.n’i alır ve bit_length() ile kaç bit olduğunu yazdırır.✅ Sonuç: Modül boyutu beklenenden (≈2048 bit) çıktığı için anahtarımız standartlarda.
Kısa hatırlatma: RSA’nın gücü, büyük sayıları faktörize etmenin zorluğundan gelir. Klasik bilgisayarlar GNFS ile bile bu işi makul sürede yapamaz; bu yüzden 2048‑bit ve üzeri anahtarlar hâlâ güvenli bir liman sayılır ⛵️.
Yakın zamanda GNFS (General Number Field Sieve)’in bir varyantı üzerine kurulu, makine öğrenmesi destekli polinom seçimi yapan bir çalışma dikkat çekti 🎯
L_n[1/3, (64/9)^{1/3}]Özet: Yöntem teorik olarak GNFS’i biraz daha hızlı hale getiriyor, ancak bellek ve önişleme maliyetleri günümüz donanımlarında hâlâ ciddi bir engel.
Hayır, ama marjı daralıyor ✅
openssl rsa -in key.pem -text -noout
Bu komut anahtar uzunluğunu, modülüs, public exponent ve diğer parametreleri terminalde gösterir. Key.pem dosyanızı değiştirerek kendi anahtarlarınızı kontrol edebilirsiniz.
Hazırsanız, somut sayıları masaya koyalım ve yeni yöntemin RSA anahtarlarımızı ne kadar zorladığını görelim 🎯
| Anahtar boyutu | GNFS tahmini güvenlik (bit) | ECRYPT‑II / NIST referansı |
|---|---|---|
| 1024‑bit | ~80 bit | Kırılabilir (2020’lerde) |
| 2048‑bit | ≈112 bit | 2030’a kadar “kabul edilebilir” |
| 3072‑bit | ≈128 bit | Uzun vadeli güvenli |
| 4096‑bit | ≈144 bit | Çok yüksek güvenlik |
Not: Bu sayılar asemptotik tahminlerdir; gerçek kırma süresi donanım, paralellik ve algoritma iyileştirmelerine göre değişir.
Yeni sayı teorisi tabanlı iyileştirme (ör. batch‑GNFS + verbesserte polinom seçimi) GNFS’in sabit katsayısını c = (64/9)^{1/3} ≈ 1.923 yerine c' ≈ 1.5 seviyesine indiriyor.
| Anahtar boyutu | GNFS (c=1.923) | Yeni yöntem (c'=1.5) | Güvenlik kaybı |
|---|---|---|---|
| 2048‑bit | 112 bit | ≈84 bit | ~28 bit |
| 3072‑bit | 128 bit | ≈101 bit | ~27 bit |
| 4096‑bit | 144 bit | ≈115 bit | ~29 bit |
Ne anlama geliyor?
| Yıl | 2048‑bit risk seviyesi | 4096‑bit risk seviyesi | Öneri |
|---|---|---|---|
| 2025 | Düşük (klasik GNFS) | Çok düşük | Mevcut anahtarları koruyun |
| 2030 | Orta‑Yüksek (yeni yöntem) | Düşük‑Orta | 2048‑bit → 3072/4096‑bit geçiş planı yapın |
| 2035 | Yüksek (özel donanım) | Orta | 4096‑bit bile riskli olabilir; post‑quantum planlamaya başlayın |
| 2040 | Kritik | Yüksek | Tamamen PQC (Kyber, Dilithium vb.) geçişi zorunlu |
Kural basit: Eğer 2030’da 2048‑bit anahtarlarınız hala üretimdeyse, risk kabul edilemez seviyededir.
| Varlık türü | Mevcut anahtar | Yeni yöntem güvenlik (bit) | Risk skoru (1‑5) | Aksiyon |
|---|---|---|---|---|
| VPN / TLS sertifikaları | 2048‑bit RSA | 84 | 4 | 2025 Q2’ye kadar 3072/4096‑bit’e yükselt |
| İmza / Kod imzalama | 3072‑bit RSA | 101 | 3 | 2027’ye kadar 4096‑bit veya PQC denemeleri |
| Uzun ömürlü veri şifreleme (arşiv) | 4096‑bit RSA | 115 | 2 | 2030’a kadar PQC (Kyber‑1024) migrasyon planı |
| IoT cihazları (kısıtlı CPU) | 1024‑bit RSA | 55 | 5 | Acil değiştir; ECC (Curve25519) veya PQC kullanın |
Kısaca: Risk skoru 4‑5 ise “Hemen harekete geç”, 2‑3 ise “Planla ve takip et”, 1 ise “İzle”.
Aşağıdaki betik, L‑notasyonu üzerinden tahmini karmaşıklığı hesaplar ve log‑log grafiği çizer. Kendi ortamınızda çalıştırıp eğrileri kıyaslayabilirsiniz 🛠
import math
import matplotlib.pyplot as plt
# -------------------------------------------------
# L-notasyonu yardımcı fonksiyon
# L_n[1/3, c] ≈ exp( c * (ln n)^{1/3} * (ln ln n)^{2/3} )
# Güvenlik biti ≈ log2(L_n)
# -------------------------------------------------
def security_bits(key_bits: int, c: float) -> float:
"""RSA modülü bit uzunluğuna göre tahmini güvenlik bitini döndürür."""
# n ≈ 2^key_bits → ln n = key_bits * ln 2
ln_n = key_bits * math.log(2)
ln_ln_n = math.log(ln_n)
# L-notasyonu üs kısmı
exponent = c * (ln_n ** (1/3)) * (ln_ln_n ** (2/3))
# log2(exp(exponent)) = exponent / ln 2
return exponent / math.log(2)
# Anahtar boyutları
key_sizes = [1024, 2048, 3072, 4096]
# GNFS sabiti
c_gnfs = (64/9) ** (1/3) # ≈ 1.923
# Yeni yöntem sabiti (varsayımsal iyileştirme)
c_new = 1.5
gnfs_bits = [security_bits(k, c_gnfs) for k in key_sizes]
new_bits = [security_bits(k, c_new) for k in key_sizes]
# -------------------------------------------------
# Log‑log grafik
# -------------------------------------------------
plt.figure(figsize=(8,5))
plt.loglog(key_sizes, gnfs_bits, 'o-', label='GNFS (c≈1.923)', linewidth=2)
plt.loglog(key_sizes, new_bits, 's--', label='Yeni yöntem (c≈1.5)', linewidth=2)
plt.title('RSA Anahtar Boyutuna Göre Tahmini Güvenlik (bit) – Log‑Log')
plt.xlabel('Anahtar boyutu (bit)')
plt.ylabel('Güvenlik biti (log₂ karmaşıklık)')
plt.grid(which='both', ls=':', alpha=0.7)
plt.legend()
plt.tight_layout()
plt.show()
Bu betik ne yapıyor?
security_bits fonksiyonu L‑notasyonu formülünü uygular ve sonucu bit cinsinden döndürür.c_gnfs klasik GNFS sabiti, c_new ise yeni yöntemin sunduğu iyileştirmeyi simüle eder.loglog grafiği sayesinde büyüme oranlarını gözlemlersiniz: yeni yöntem eğrisi sol‑alta kayar → aynı anahtar boyutu için daha az güvenlik betek eder.İpucu: Gerçek dünyada
c_newdeğeri akademik makalelerde (ör. Boudot et al., 2023) 1.4‑1.6 aralığında raporlanıyor. Kendi tehdit modelinize göre bu sabiti güncelleyebilirsiniz.
c_new’ı güncelleyip grafiği yeniden oluşturun 📈.Hadi, aksiyon planını bugün yazmaya başlayalım — gelecekte “neden erken almadı?” diye pişman olmak istemeyiz 😉
Hazırsan başlayalım – kuantum bilgisayarlar henüz kapımızda değil, ama “bugün hazırlanmazsan yarın acı çekersin” mantığıyla küçük adımlarla büyük bir fark yaratabiliriz. Aşağıda ekibimiz şu an uyguladığı yol haritasını paylaşıyorum. Her adımda “Benim ekibim şunu yaptı” tonunda pratik bir ipucu bulacaksınız 🚀
Benim ekibim şunu yaptı:
grep -R "RSA" . ve openssl x509 -in *.crt -text -noout | grep "Public Key Algorithm" ile tüm sertifika ve anahtar dosyalarını taradık.| Veri Türü | Örnek | Risk Seviyesi | Öncelik |
|---|---|---|---|
| Uzun ömürlü | Mali kayıtlar, sağlık verileri, yasal belgeler | ⚠️ Yüksek | İlk |
| Kısa ömürlü | Oturum anahtarları, geçici JWT, cache token | ℹ️ Düşük | Sonra |
Benim ekibim şunu yaptı:
Benim ekibim şunu yaptı:
Benim ekibim şunu yaptı:
provider mekanizmasıyla hibrit KEM’i etkinleştirdik (openssl.cnf’de provider=oqsprovider).crypto/tls (Go) ya da ssl (Java) ayarlarını CurvePreferences / NamedGroups ekleyerek hibrit yaptık.Benim ekibim şunu yaptı:
pqc-test job’ı ekledik; her PR’de liboqs derlemesi ve openssl s_client -groups X25519Kyber768 çalıştırıyoruz.VirtualService weight = 5 ayarladık; Grafana dashboards’ta tls_handshake_duration_seconds takip ediyoruz.| Kütüphane | Versiyon | PQC Desteği | Not |
|---|---|---|---|
| OpenSSL | 3.2+ | Kyber, Dilithium (via OQS provider) | provider=oqsprovider |
| BoringSSL | Chrome 119+ | Hybrid KEM (X25519Kyber768) | Chrome/Edge otomatik |
| liboqs | 0.11+ | Tüm NIST finalists | Statik linkleme önerilir |
| cert‑manager | 1.14+ | privateKey.algorithm: Kyber |
ClusterIssuer’da belirtilebilir |
Benim ekibim şunu yaptı:
openssl, liboqs, cert-manager güncellemelerini otomatik PR olarak alıyoruz.Aşağıdaki YAML ile ClusterIssuer ve Certificate kaynaklarını tanımlayıp Kyber‑768 anahtar çifti üreten bir TLS sertifikası alabilirsiniz. cert‑manager ≥ 1.14 ve OQS‑OpenSSL sağlayıcısı kurulu olmalıdır.
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-pqc
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: security@example.com
privateKeySecretRef:
name: letsencrypt-pqc-account-key
solvers:
- http01:
ingress:
class: nginx
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app-tls-pqc
namespace: production
spec:
secretName: app-tls-pqc-secret
dnsNames:
- app.example.com
issuerRef:
name: letsencrypt-pqc
kind: ClusterIssuer
privateKey:
algorithm: Kyber
size: 768 # Kyber-768
# İsteğe bağlı: hibrit KEM için X25519Kyber768 kullanmak isterseniz
# privateKey:
# algorithm: X25519Kyber768
# size: 0
Bu sayede ne oluyor?
ClusterIssuer Let’s Encrypt ACME sunucusuna kayıt olur.Certificate kaynağı Kyber‑768 özel anahtarı üretir ve ACME challenge’ı geçtikten sonra PQC‑destekli TLS sertifikasını app-tls-pqc-secret adlı Secret’a yazar.Sonuç: Bu altı adımı bugün başlatırsanız, kuantum çağında “şifreleme kırıldı” haberlerini sakin izlersiniz 😎. Küçük adımlar, büyük güvenlik. Hadi ilk envanteri çıkarıp başlayalım!
Hazırsanız bu kontrol listesini kopyalayıp Jira / GitHub Issue’a yapıştırın. Her madde işlenebilir ve doğrulanabilir 🎯
RSA‑2048 (veya daha zayıf) anahtar kullanımı var mı?
Nasıl kontrol ederim?
# Sunucudaki TLS sertifikalarını tarayıp RSA‑2048 ve altını listele
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -text \
| grep -A1 "Public-Key:" | grep -E "rsaEncryption|2048|1024"
HSM / Token tabanlı anahtar yönetimi aktif mi?
Nasıl kontrol ederim?
# PKCS#11 modülü yüklü mü ve slotlarda anahtar var mı?
pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so -L
Kullandığımız kütüphaneler / framework’ler PQC (Post‑Quantum Cryptography) hazır mı?
Nasıl kontrol ederim?
# Python örneği: cryptography sürümünü ve PQC desteğini kontrol et
python - <<'PY'
import cryptography, sys
print("cryptography:", cryptography.__version__)
# PQC algoritmaları (Kyber, Dilithium) 41.0.0+ da eklendi
has_pqc = hasattr(cryptography.hazmat.primitives, "kem")
print("PQC desteği:", has_pqc)
PY
Monitoring / Alert: Sertifika süresi, anahtar boyutu, HSM durumu izleniyor mu?
Nasıl kontrol ederim?
# Prometheus exporter örneği: cert_exporter metriklerini sorgula
curl -s http://localhost:9115/metrics | grep -E 'cert_exporter_(not_after|public_key_algorithm|key_size)'
Tedarikçi / SLA sözleşmeleri PQC geçişini kapsıyor mu?
Nasıl kontrol ederim?
# SLA belgelerinde "post‑quantum", "PQC", "quantum‑safe" anahtar kelimelerini ara
grep -Ri -E "post.?quantum|PQC|quantum.safe" /path/to/vendor-contracts/
Bu listeyi sprint planlamanıza ekleyin, her maddeyi bir görev olarak açın ve Doğrulama sütununa yukarıdaki komutları yapıştırın. Böylece ekip her gün ne yapması gerektiğini net görür 🚀
Arkadaşlar, kısaca özetlemek gerekirse: kriptografi bir yarış, bitiş çizgisi yok 🏁
Bugün "güvenli" diye bildiğimiz her şey, yarın kırılabilir hale gelebilir. Kuantum bilgisayarlar kapıda, NIST PQC standartlaştırma süreci hâlâ devam ediyor, IETF RFC'leri güncelleniyor, Google–Cloudflare–AWS gibi devler PQC deneyleri yapıyor.
Peki biz ne yapmalıyız? 🤔
Şimdi küçük bir adım (envanter), yarın büyük bir felaketi önler. ⛔️➡️✅
Hazırlıklı ekipler her zaman kazanır. Siz de onlardan biriniz olun. 💪
Görüşmek üzere, güvenli kodlarla kalın! 👋🔐
Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.
All rights reserved