Blog'a Dön

RSA'dan Ed25519'a Neden Geçtik (ve Siz de Geçmelisiniz)

Self-hosted TLS için 4096 bit RSA anahtarlara gerek yok. Bedrud'un Ed25519'a geçiş yapma nedenini ve bunun self-signed sertifikalarınız için ne anlama geldiğini açıklıyoruz.

12 Mayıs 2026 Bedrud Ekibi engineering, security, self-hosting

Tarayıcı uyarısını görmüşsünüzdür. “Bağlantınız güvenli değil.” Self-hosting yaparken self-signed sertifikalar kaçınılmaz bir gerçekliktir. Ama o sertifikanın içindeki anahtar, düşündüğünüzden daha önemli — ve çoğu rehber hâlâ yanlış varsayılanı öneriyor.

RSA Alışkanlığı

İnternetteki her self-hosting rehberi aynı şeyi söylüyor:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

RSA 4096. Çünkü daha büyük rakamlar daha fazla güvenlik demek, değil mi? Artık değil. RSA 4096 anahtarlar 3,2 KB. 5$‘lık bir VPS’de saniyeler sürüyor. Ve sağladığı güvenlik seviyesi, 256 bitlik bir eliptik eğri anahtarıyla yaklaşık olarak aynı.

RSA varsayılan olmak için teknik bir nedeni olmaktan ziyade tarihsel bir atalet. Her yerde çalışıyor ve kamu CA tarafından verilen sertifikalarda bu evrensel uyumluluk hâlâ önemli. Ama kontrol ettiğiniz bir yığındaki self-signed sertifikalar için? İhtiyacınız olmayan bir uyumluluk için performans vergisi ödüyorsunuz.

Ed25519 Nedir?

Ed25519, Curve25519 üzerine kurulmuş bir EdDSA imza şemasıdır. Sabit boyutlu, 256 bitlik kompakt anahtarlar üretir. Özel olarak dijital imzalar için tasarlanmıştır — şifreleme yok, anahtar değişimi yok, sadece imzalama. Bu odaklanma onu daha basit, daha hızlı ve yanlış yapılandırılması daha zor hale getirir.

Go’da birinci sınıf vatandaş. crypto/ed25519 paketi Go 1.13’ten beri standart kütüphanede. Anahtar üretimi iki satır. Serileştirme standart x509.MarshalPKCS8PrivateKey kullanıyor. Harici bağımlılık yok, CGo yok, özel build etiketi yok.

Karşılaştırma

ÖzellikRSA 4096 / 2048ECDSA P-256Ed25519
Güvenlik~112–128 bit. Olgun, iyi çalışılmış.~128 bit. NIST eğrisi.~128 bit. Yan kanal saldırılarına karşı dirençli tasarım.
PerformansEn yavaş. Büyük sayı işlemleri.Doğrulama RSA’dan ~10x hızlı.En hızlı. Go’da 30k+ imza/saniye. Küçük anahtarlar.
Anahtar Boyutu2048 veya 4096 bit. Diskte büyük.256 bit. Kompakt.256 bit sabit. En küçük ayak izi.
UyumlulukEvrensel. Her yerde çalışır.İyi. Tüm modern tarayıcılar/istemciler.Büyüyen. Go, SSH, modern TLS’de tam destek.
FormatPKCS#8 standardı.PKCS#8 over SEC1.PKCS#8 yerel.
Anahtar ÖmrüDaha sık rotasyon gerekir.Daha uzun süre kabul edilebilir.Diğer EC eğrileriyle aynı.
Go KolaylığıTam x509 desteği.KeyEncipherment hata riski (aşağıya bakın).Saf. Şifreleme seçeneği yok.

Kaynaklar: anahtar türleri açıklandı, Go benchmarkları: RSA vs ECDSA vs Ed25519, SSH anahtar algoritması karşılaştırması

ECDSA KeyUsage Tuzağı

RSA’dan ECDSA’ya geçen neredeyse herkesin düştüğü bir hata var. Go’nun crypto/x509 paketinde, RSA anahtarları sertifika şablonunda hem KeyUsageDigitalSignature hem de KeyUsageKeyEncipherment gerektirir. Bu kalıbı ECDSA’ya kopyalarsanız — EC anahtarına KeyUsageKeyEncipherment eklerseniz — bazı TLS istemcileri sertifikayı reddeder. EC anahtarları anahtar şifrelemesi yapmaz. Bu uzantı anlamsız ve zararlıdır.

Bedrud’un sertifika üretimindeki (server/internal/utils/tls.go) düzeltme şöyle:

func keyUsageForAlgo(algo KeyAlgorithm) x509.KeyUsage {
    switch algo {
    case KeyRSA2048, KeyRSA4096:
        return x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment
    default:
        return x509.KeyUsageDigitalSignature
    }
}

Ed25519 default dalına düşer. Saf dijital imza. Yanlış yapılandırılabilecek KeyEncipherment seçeneği yok. Bir tuzak daha az.

5$‘lık VPS’te Ne Anlama Geliyor

Hetzner CX22 (2 vCPU, 4 GB RAM) üzerinde fark ölçülebilir:

  • Anahtar üretimi: RSA 4096 ~1–2 saniye sürüyor. Ed25519 1 ms’den kısa sürüyor. Sunucunuz ilk açılışta self-signed sertifika üretiyorsa, bu önemli.
  • TLS el sıkışması: Ed25519 daha hızlı imzalar ve doğrular, el sıkışma gecikmesini azaltır. Düzinelerce WebRTC bağlantısını işleyen yoğun bir sunucuda bu milisaniyeler birikir.
  • Disk ayak izi: Ed25519 özel anahtarı PEM kodlamada 48 bayt. RSA 4096 anahtar 3,2 KB. Tek sertifika için büyük fark değil ama hesaplama ağırlığındaki farkı yansıtıyor.

Bedrud Ne Yapıyor

Bedrud varsayılan olarak Ed25519 self-signed sertifikalar üretir. GenerateSelfSignedCert fonksiyonu, aksi belirtilmedikçe KeyEd25519 kullanır.

Farklı bir algoritmaya ihtiyacınız varsa — eski istemci uyumluluğu veya iç politika için — --key-algorithm bayrağını kullanın:

bedrud run --key-algorithm rsa4096
bedrud run --key-algorithm ecdsa256

Desteklenen değerler: ed25519 (varsayılan), ecdsa256, rsa2048, rsa4096.

RSA’ya Ne Zaman Sadık Kalmalı

RSA ölmedi. Şunlar için hâlâ gerekli:

  • Eski Java istemcileri Ed25519 TLS el sıkışmasını desteklemeyen
  • Android 7.0 öncesi cihazlar (Nougat), TLS yığınlarında Ed25519 desteği olmayan
  • Gömülü cihazlar eski OpenSSL veya mbedTLS yapılarına sahip
  • Kurumsal ortamlar yalnızca RSA’yı anlayan TLS denetim middlebox’ları kullanan

Yığınınız modernse — Go arka ucu, Chromium tabanlı tarayıcılar, güncel mobil uygulamalar — Ed25519 önemli her yerde çalışır.

Sonuç

Self-hosted altyapı, 2013 tarihli bir rehber öyle dedi diye 4096 bit RSA anahtarları taşımamalı. Ed25519 daha hızlı, daha küçük ve hataya daha az açık. Go’nun standart kütüphanesi bunun için optimize edilmiş. Kontrol edilen bir yığındaki self-signed sertifikalar için RSA’nın uyumluluk argümanı geçerli değil.

Daha iyi varsayılanlarla self-hosting yapın. Bedrud’u kurun ve kendiniz deneyin.