İçeriğe atla
HexaTransfer
Bloga dön
Sifreleme ve guvenlik

Şifreleme anahtarları nasıl çalışır: dosya güvenliğinin temeli

Şifreleme anahtarlarının nasıl çalıştığını basit terimlerle anlayın. Anahtar oluşturma, değişim ve yönetimini öğrenin.

Şifreleme anahtarı, verileri kilitleyen ve açan rastgele bit dizisidir. Modern dosya aktarımında bu genellikle 256 bitlik AES anahtarı anlamına gelir; kriptografik olarak güvenli rastgele sayı üreteci (CSPRNG) tarafından oluşturulan 32 bayt rastgele veri. 10 GB'lık bir videoyu şifreli metne dönüştüren aynı algoritma, yalnızca birebir aynı anahtara sahipse onu geri çözebilir. Anahtar güvenliği, şifrelemenin ayakta durduğu ya da çöktüğü noktadır: mükemmel bir AES-256 şifresi, anahtar zayıf, tahmin edilebilir ya da ifşa olursa işe yaramaz. Bu yazı, HexaTransfer, Tresorit ve Proton Drive gibi gerçek hizmetlerde anahtarların nasıl oluşturulduğunu, paylaşıldığını, saklandığını ve imha edildiğini aktarır.

Anahtarlar yalnızca rastgele sayılardır

256 bitlik anahtar 32 bayttır. Tarayıcıda oluşturursanız şöyle görünür:

const key = crypto.getRandomValues(new Uint8Array(32));
// Uint8Array(32) [183, 45, 201, 77, ...]

Onu "anahtar" yapan, bir algoritmanın onu nasıl kullandığıdır. AES-256-GCM, 256 bitlik anahtarı bir anahtar programı aracılığıyla 15 tur anahtara genişletir ve bunları 128 bitlik blokları 14 tur boyunca karıştırmak için kullanır. Matematik, bitlerin nereden geldiğini umursamaz; yalnızca gizli ve tahmin edilemez olmalarını gerektirir.

"Tahmin edilemez" olmak daha zor olan yarıdır. Bir saldırgan RNG'nizin durumunu tahmin edebilirse anahtarınızı yeniden oluşturabilir. 2006 Debian OpenSSL hatası, iki yıl boyunca anahtar entropisiyle 15 bite düşürdü; bu, rastgelelik başarısız olduğunda ne olduğunun ders kitabı örneğidir.

Kriptografik olarak güvenli rastgelelik

Tarayıcılar, işletim sisteminin CSPRNG'sinden yararlanan crypto.getRandomValues() sağlar: Linux'ta /dev/urandom, Windows'ta BCryptGenRandom, macOS'ta SecRandomCopyBytes. Bunlar sırasıyla birden fazla entropi kaynağını karıştırır; kesme zamanlamaları, disk arama süreleri, Intel'in RDRAND'ı gibi donanım RNG çipleri.

Anahtarlar için Math.random() kullanmayın. Bu, tahmin edilebilir bir Mersenne Twister olup durumu çoğunlukla birkaç çıktıdan kurtarılabilir.

Sunucu tarafında, Node.js'deki crypto.randomBytes() ve Python'daki secrets.token_bytes() işletim sisteminin CSPRNG'sini sarmaladığından güvenlidir. NIST SP 800-90A ve SP 800-90B standartları CSPRNG gereksinimlerini tanımlar; Linux kernel 5.17+ bu gereksinimleri karşılayan BLAKE2s tabanlı bir tasarım kullanır.

Simetrik anahtarlar: tek anahtar, iki yön

AES gibi simetrik algoritmalar hem şifreleme hem de şifre çözme için tek anahtar kullanır. Anahtar boyutu seçenekleri:

  • 128 bit — 2^128 olası değer, çoğu amaç için güvenli, NSA CNSSP-15 tarafından GİZLİ için onaylı.
  • 192 bit — nadir, bazı hükümet bağlamlarında kullanılır.
  • 256 bit — 2^256 değer, ÇOK GİZLİ için onaylı, dosya aktarım hizmetleri için güncel varsayılan.

Anahtar boyutunu iki katına çıkarmak, kaba kuvvet güçlüğünü iki katına çıkarmaz; onu kareleştirmez (üste değil). 2^128, erişim dışında (evrenin yaşı çarpı Dünya'daki tüm bilgisayarlarla 10 milyar). 256 bit, Grover algoritmasının simetrik anahtar gücünü etkin olarak yarıya indirdiği kuantum bilgisayarlarına karşı bir önlemdir.

Simetrik anahtarlarla zor sorun: aynı anahtarı hiç kimse araya girmeden her iki tarafa da nasıl ulaştırırsınız.

Asimetrik anahtarlar: çift hile

Açık anahtar kriptografisi, anahtar dağıtımını çözer. Her taraf matematiksel olarak bağlantılı bir anahtar çifti oluşturur: açıkça paylaşılan açık anahtar ve gizli tutulan özel anahtar. Açık anahtarla şifrelenmiş her şey yalnızca özel anahtarla şifresi çözülebilir.

Yaygın asimetrik anahtar türleri:

  • RSA-2048 — 2048 bitlik modül, yaygın destekli, yavaş. TLS sertifikalarında kullanılır.
  • RSA-4096 — daha güçlü, daha da yavaş.
  • Curve25519 (X25519) — 256 bitlik eliptik eğri anahtarı, hızlı; Signal ve WireGuard tarafından kullanılır.
  • Ed25519 — 256 bitlik imzalama anahtarı; SSH ve Git commit imzalaması tarafından kullanılır.

Özel anahtar, algoritmaya bağlı olarak 32-512 bayt arasındadır. RSA özel anahtarları daha büyüktür çünkü birden fazla asal sayı içerir; Curve25519 özel anahtarları yalnızca 32 rastgele bayttır.

Hibrit: gerçek sistemler için ikisini birleştirmek

Hiçbir pratik sistem büyük dosyaları doğrudan RSA ile şifrelemez. Bunun yerine TLS, PGP, Age, Signal ve her ciddi dosya aktarım hizmeti hibrit şifreleme kullanır:

  1. Rastgele 256 bitlik AES anahtarı oluşturun ("oturum anahtarı" veya "dosya anahtarı").
  2. Dosyayı AES-256-GCM ile şifreleyin.
  3. Oturum anahtarını alıcının açık anahtarıyla şifreleyin.
  4. Her ikisini de gönderin.

Alıcı, oturum anahtarının şifresini özel anahtarıyla çözer, ardından dosyayı çözmek için kullanır. Simetrik şifrelemenin hızını ve asimetriğin anahtar dağıtım kolaylığını elde edersiniz.

Tarayıcı tabanlı dosya aktarımında "açık anahtar" genellikle URL parçasıyla değiştirilir: gönderici bir oturum anahtarı oluşturur, # işaretinden sonra URL'ye gömer ve alıcının tarayıcısı bunu yerel olarak okur. Daha basit; alıcıların bir anahtar çiftine sahip olmasını gerektirmez.

Parolalardan anahtar türetme

Kullanıcılar parola yazar; algoritmalar düzgün rastgele bit ister. Anahtar türetme fonksiyonu (KDF) aralarında köprü kurar:

  • PBKDF2-HMAC-SHA-256 — bir karma fonksiyonunu yineler. OWASP 2023, 600.000 iterasyon önerir. Web Crypto API'de mevcuttur.
  • scrypt — bellek sertliği; GPU saldırılarına direnir. Parametreler: N=2^17, r=8, p=1.
  • Argon2id — 2015 Parola Karma Yarışması'nın galibi olan güncel en iyi uygulama. Parametreler: bellek=64 MB, iterasyon=3, paralellik=4.

KDF, kaba kuvveti yavaşlatmak için tuz (rastgele, şifreli metnin yanında saklanır) ve iş faktörü (iterasyonlar) ekler. 64 MB bellekli Argon2id ile işlenmiş 12 karakterlik rastgele parola, GPU çiftliğinin tükenmesi için binlerce yıl alır. yaz2024 gibi zayıf parola ise KDF ne olursa olsun saniyeler içinde çözülür; KDF, orada olmayan entropi ekleyemez.

Anahtar depolama: anahtarlar nerede bulunur

Anahtarların bir yerde var olması gerekir ve bu yer, güvenlik açısından kritik bir karardır:

  • Tarayıcı belleği (yalnızca oturum). Geçici dosya aktarımları için varsayılan. Anahtar oluşturulur, kullanılır ve sayfa yükleme içinde atılır.
  • URL parçası. Link aracılığıyla paylaşılır, alıcının tarayıcı geçmişinde saklanır. Sınırlı ömür önemlidir.
  • Yerel depolama / IndexedDB. Kalıcı ama kaynaktaki tüm JavaScript'e erişilebilir. Başka bir anahtarla şifreli değilse risklidir.
  • İşletim sistemi anahtarlığı — macOS Keychain, Windows DPAPI, Linux libsecret. Bazı platformlarda donanım desteklidir.
  • Donanım Güvenlik Modülü (HSM) — YubiKey, bulut HSM (AWS CloudHSM, Azure Dedicated HSM). Anahtarlar hiçbir zaman donanımı terk etmez.
  • Anahtar Yönetim Hizmeti (KMS) — AWS KMS, Google Cloud KMS, HashiCorp Vault. Merkezi, denetlenebilir; anahtar başına ayda yaklaşık 1 dolar.

Sıfır bilgili dosya aktarımında anahtar, URL parçasında ve gönderenin tarayıcısında bulunur. Sunucu onu hiçbir zaman saklamaz.

Anahtar rotasyonu ve imhası

Uzun ömürlü anahtarlar risk biriktirir. En iyi uygulama rotasyondur:

  • TLS sertifikaları: 90 günlük rotasyon (Let's Encrypt varsayılanı), 2020 itibarıyla genel CA'lar için maksimum 398 gün.
  • Veri şifreleme anahtarları: uyumlu sistemlerde genellikle her 90 günde bir yıla kadar döndürülür (PCI DSS 4.0 Gereksinim 3.6).
  • Ana anahtarlar: yıllık veya personel değişikliklerinde döndürülür.

İmha da önemlidir. Anahtar dosyalarını diskten silmek yeterli değildir; SSD'ler aşınma dengeleme alanlarında veri tutabilir. Güvenli imha, üzerine yazma veya özel HSM silme komutları gerektirir. Kriptografik silme; anahtarı atarak şifreli verinin kalıcı olarak okunamaz hale getirilmesi; toplu veriler için çoğunlukla en temiz yaklaşımdır.

Dosya aktarım hizmetleri genellikle yalnızca aktarımın ömrü boyunca (24 saat ila 7 gün) var olan ve süre sonunda şifreli metinle birlikte atılan dosya başına anahtarlar kullanır.

Zayıf anahtar uygulamalarını tanımak

Dikkat edilmesi gereken üç yaygın başarısızlık modu:

  • İstemci kodunda sabit kodlanmış anahtarlar. Anahtar her kullanıcı için aynıysa bu bir anahtar değil; gizlemedir.
  • Aynı sunucu veya veritabanında şifreli metinle birlikte saklanan anahtarlar. İhlal her ikisini de ortaya çıkarır.
  • Anahtar rotasyonu yok. On yıllık şifreleme anahtarlarına sahip eski sistemlerde yaklaşık on yıllık birikmiş ihlal riski vardır.

Güvenilir bir hizmet, anahtar oluşturma, depolama, rotasyon ve imhayı kapsayan kriptografik bir teknik belge yayımlar ve Cure53 veya Trail of Bits gibi firmalar tarafından üçüncü taraf denetimlere tabi olur.

Bakış açısına oturtmak

Hassas dosya paylaşımı için: crypto.getRandomValues() aracılığıyla istemci tarafında 256 bitlik anahtarlar oluşturan, bunları yalnızca URL parçasına gömen (sunucuya hiçbir zaman gönderilmez), PBKDF2 veya Argon2id aracılığıyla parola türetimli anahtarları destekleyen ve hem anahtarı hem de şifreli metni 24 saat içinde otomatik sona erdiren bir hizmet seçin.

hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, 10 GB'a kadar.

Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin

Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.

Dosya gönder