Şifreleme
Encryption
- İngilizcesi
- Encryption
- Okunuşu
- inkripşın
Kısaca
Şifreleme, veriyi bir anahtarla karıştırarak yalnızca doğru anahtara sahip olanın onu özgün ve okunabilir hâline geri çevirebilmesini sağlama işlemidir.
Şifreleme nedir?
Şifreleme, okunabilir veriyi (plaintext), bir algoritma ve anahtar kullanarak okunamaz bir şifreli metne (ciphertext) dönüştürür. Şifreli metni ele geçiren biri yalnızca rastgele görünen baytlar görür; doğru anahtara sahip biri ise onu orijinal hâline geri çözebilir. Güvenlik, algoritmanın gizli tutulmasına değil, anahtarın gizli tutulmasına bağlıdır.
İki ana türü vardır. AES gibi simetrik şifreleme, şifrelemek ve çözmek için aynı gizli anahtarı kullanır ve çok hızlıdır; bu yüzden büyük veri için tercih edilir. RSA veya eliptik eğri kriptografisi gibi asimetrik (açık anahtarlı) şifreleme ise bir anahtar çifti kullanır: herkes açık anahtarla şifreleyebilir, ancak yalnızca özel anahtarın sahibi çözebilir. TLS gibi protokoller ikisini birleştirir: ortak bir anahtar üzerinde anlaşmak için açık anahtarlı kriptografiyi, gerçek trafik için ise simetrik şifrelemeyi kullanır.
Geliştiriciler genellikle HTTPS trafiği gibi aktarım hâlindeki (in transit) veriyi ve veritabanları, yedekler ve diskler gibi beklemedeki (at rest) veriyi korur. Kilitli bir kutu iyi bir benzetmedir: kutuyu herkes görebilir veya taşıyabilir, ancak yalnızca anahtarı olan açabilir. Birçok mesajlaşma uygulamasında kullanılan uçtan uca şifreleme, anahtarların yalnızca gönderende ve alıcıda olması demektir; böylece servis sağlayıcı bile mesajları okuyamaz.
Şifreleme sıklıkla hashing ve kodlama (encoding) ile karıştırılır. Hashing tek yönlüdür ve parolalar ile bütünlük kontrolleri için kullanılır; Base64 gibi kodlama ise yalnızca biçimi değiştirir ve hiçbir gizlilik sağlamaz. Şifrelemeyi güvenle kullanmak için iyi test edilmiş kütüphanelere ve AES-GCM veya ChaCha20-Poly1305 gibi modern kimlik doğrulamalı modlara güvenin, asla kendi algoritmanızı icat etmeyin ve anahtarları kaynak kodda değil, bir anahtar yönetim servisinde ya da secrets manager'da tutun.
Bir bakışta
Önemli noktalar
- Şifreleme, plaintext'i yalnızca anahtar sahiplerinin okuyabileceği ciphertext'e dönüştürür.
- Simetrik şifreleme tek ortak anahtar kullanır; asimetrik şifreleme açık ve özel anahtar çifti kullanır.
- Veriyi hem aktarım sırasında (TLS) hem de beklemede (diskler, veritabanları, yedekler) koruyun.
- Şifreleme hashing'in aksine geri döndürülebilir; Base64 kodlaması ise şifreleme değildir.
- Denetlenmiş kütüphaneler ve kimlik doğrulamalı modlar kullanın, anahtarları koddan uzak tutun.
Örnek
import { randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
// A 256-bit key, loaded from a secrets manager in real apps
const key = Buffer.from(process.env.DATA_KEY, "base64");
const iv = randomBytes(12); // a new random IV for every message
// Encrypt with AES-256-GCM, an authenticated mode that detects tampering
const cipher = createCipheriv("aes-256-gcm", key, iv);
const ciphertext = Buffer.concat([cipher.update("my secret note", "utf8"), cipher.final()]);
const tag = cipher.getAuthTag();
// Decrypt: throws an error if the ciphertext or tag was modified
const decipher = createDecipheriv("aes-256-gcm", key, iv);
decipher.setAuthTag(tag);
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString("utf8");Sık sorulan sorular
Şifreleme ile hashing arasındaki fark nedir?
Şifreleme iki yönlüdür: bir anahtarla şifrelenen veri doğru anahtarla çözülebilir. Hashing tek yönlüdür; girdiye geri çevrilemeyen sabit bir parmak izi üretir. Parolaların şifrelenmek yerine hash'lenmesi gerekmesinin nedeni budur.
Simetrik ve asimetrik şifreleme arasındaki fark nedir?
Simetrik şifreleme hem şifrelemek hem çözmek için tek bir ortak anahtar kullanır ve hızlıdır. Asimetrik şifreleme şifrelemek için açık anahtar, çözmek için özel anahtar kullanır; bu, anahtar paylaşma sorununu çözer ancak daha yavaştır, bu yüzden gerçek sistemler genellikle ikisini birleştirir.
Base64 şifreleme midir?
Hayır. Base64, ikili veriyi metin karakterlerine dönüştüren bir kodlamadır ve herkes onu anahtar olmadan çözebilir. Sırlar için hiçbir koruma sağlamaz.
Sık karşılaştırılanlar
İlgili sayfalar
- HashingGüvenlik, s. 12Hashing, bir girdiyi tek yönlü bir fonksiyonla sabit uzunlukta bir değere dönüştürmektir; veri bütünlüğünü doğrulamaya ve parolaları güvenle saklamaya yarar.
- TLSGüvenlik, s. 44TLS, ağda gönderilen veriyi şifreleyen ve sunucunun kimliğini doğrulayan, HTTPS, e-posta ve birçok başka bağlantıyı güvenceye alan kriptografik protokoldür.
- HTTPSGüvenlik, s. 15HTTPS, tarayıcı ile web sitesi arasındaki trafiği TLS ile şifreleyen, verileri dinlemeye ve değiştirilmeye karşı koruyan HTTP'nin güvenli sürümüdür.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
- Ortam DeğişkeniDevOps ve Bulut, s. 36Ortam değişkeni, programın dışında işletim sistemi ya da çalışma zamanınca ayarlanan, programın davranışını yapılandırmak için okuduğu adlandırılmış değerdir.
- Simetrik ŞifrelemeGüvenlik, s. 37Simetrik şifreleme, şifrelemek ve çözmek için aynı gizli anahtarı kullanır; hızlı olduğundan saklanan ve aktarılan verinin çoğunu, genellikle AES ile korur.
- Uçtan Uca ŞifrelemeGüvenlik, s. 45Uçtan uca şifreleme (E2EE), mesajları gönderenin cihazında şifreler; yalnızca hedeflenen alıcılar çözebilir, mesajı taşıyan servis bile çözemez.
- Base64Programlamanın Temelleri, s. 3Base64, resim ya da anahtar gibi her tür ikili veriyi yalnızca 64 güvenli metin karakteriyle yazar; böylece veri metin için yapılmış sistemlerden geçebilir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin