Kriptografi
Node.js’de kriptografi, verilerin güvenliğini sağlamak için kullanılan temel bir teknolojidir. Kriptografi, veri gizliliğini, bütünlüğünü ve doğruluğunu garanti eder ve Node.js’in crypto
modülü bu işlemleri yüksek performanslı ve etkin bir şekilde gerçekleştirmek için entegre edilmiştir. Özellikle web uygulamaları, mikro servisler ve dağıtık sistemlerde güvenli veri iletimi, parola koruması ve API güvenliği için kriptografi kritik bir rol oynar.
Node.js geliştiricileri, kriptografiyi şifreleme, çözme, hashing, dijital imza ve anahtar yönetimi gibi işlemlerde kullanabilir. Bu süreçte Node.js’in sözdizimi, veri yapıları, algoritmalar ve nesne yönelimli programlama prensipleri devreye girer. Bu eğitimde okuyucu, simetrik (AES) ve asimetrik (RSA) algoritmaların nasıl uygulanacağını, güvenli anahtar yönetimini, veri bütünlüğü doğrulamasını ve modern güvenlik standartlarını öğrenecek.
Öğrenci, kriptografiyi Node.js projelerinde gerçek dünyada nasıl uygulayacağını, performans optimizasyonunu ve hatasız kod yazma tekniklerini öğrenerek güvenli, ölçeklenebilir ve bakımı kolay uygulamalar geliştirmeyi hedefleyecek. Bu bağlamda kriptografi, yazılım geliştirme ve sistem mimarisi içerisinde güvenlik katmanı olarak konumlanır ve ileri düzey Node.js uygulamalarında kritik bir yetkinlik sağlar.
Temel Örnek
textconst crypto = require('crypto');
const mesaj = 'Node.js Kriptografi Örneği';
const anahtar = crypto.randomBytes(32); // 256 bit
const iv = crypto.randomBytes(16); // Initialization Vector
function sifrele(metin) {
const cipher = crypto.createCipheriv('aes-256-cbc', anahtar, iv);
let sifrelenmis = cipher.update(metin, 'utf8', 'hex');
sifrelenmis += cipher.final('hex');
return sifrelenmis;
}
function cozumle(sifrelenmisMetin) {
const decipher = crypto.createDecipheriv('aes-256-cbc', anahtar, iv);
let cozulen = decipher.update(sifrelenmisMetin, 'hex', 'utf8');
cozulen += decipher.final('utf8');
return cozulen;
}
const sifreliMesaj = sifrele(mesaj);
const cozulenMesaj = cozumle(sifreliMesaj);
console.log('Orijinal Mesaj:', mesaj);
console.log('Şifreli Mesaj:', sifreliMesaj);
console.log('Çözülen Mesaj:', cozulenMesaj);
Bu temel örnekte Node.js’in crypto
modülü kullanılarak AES-256-CBC algoritmasıyla simetrik şifreleme uygulanmıştır. crypto.randomBytes()
fonksiyonu, rastgele ve güvenli bir anahtar ve IV üretmek için kullanılır. createCipheriv
ve createDecipheriv
fonksiyonları şifreleme ve çözme işlemlerini blok blok gerçekleştirir.
Şifreleme sürecinde metin önce UTF-8 formatından HEX formatına dönüştürülür, çözme sırasında ise tam tersi işlem yapılır. Bu örnek, Node.js’in buffer yönetimini ve veri kodlama yöntemlerini etkin bir şekilde kullanmayı gösterir. Gerçek dünya uygulamalarında bu yöntem, kullanıcı parolalarını veya hassas API verilerini güvenli bir şekilde saklamak için uygundur. Anahtar ve IV’in güvenli bir şekilde saklanması kritik öneme sahiptir; üretim ortamında bunun için güvenli anahtar yönetim sistemleri tercih edilmelidir.
Pratik Örnek
textconst crypto = require('crypto');
class GuvenliDepo {
constructor(sifre) {
this.algoritma = 'aes-256-gcm';
this.anahtar = crypto.scryptSync(sifre, 'tuz', 32);
}
sifrele(veri) {
const iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv(this.algoritma, this.anahtar, iv);
let sifrelenmis = cipher.update(JSON.stringify(veri), 'utf8', 'hex');
sifrelenmis += cipher.final('hex');
const tag = cipher.getAuthTag().toString('hex');
return { iv: iv.toString('hex'), sifrelenmis, tag };
}
cozumle(obj) {
const decipher = crypto.createDecipheriv(
this.algoritma,
this.anahtar,
Buffer.from(obj.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(obj.tag, 'hex'));
let cozulen = decipher.update(obj.sifrelenmis, 'hex', 'utf8');
cozulen += decipher.final('utf8');
return JSON.parse(cozulen);
}
}
// Kullanım
const depo = new GuvenliDepo('GucluParola123!');
const kullaniciVeri = { id: 1, isim: 'admin', rol: 'yönetici' };
const sifreli = depo.sifrele(kullaniciVeri);
const cozulen = depo.cozumle(sifreli);
console.log('Şifreli Veri:', sifreli);
console.log('Çözülen Veri:', cozulen);
Bu pratik örnek, nesne yönelimli programlama kullanarak kriptografiyi uygulamayı gösterir. GuvenliDepo
sınıfı şifreleme ve çözme işlemlerini kapsüller ve AES-256-GCM algoritması ile verinin bütünlüğünü Auth Tag
ile doğrular. crypto.scryptSync()
fonksiyonu güvenli bir anahtar türetir. Her şifreleme işlemi rastgele IV üretir; bu sayede tekrar kullanım durumları güvenlik riskini azaltır.
Bu model, mikro servisler ve API güvenliği için ideal bir yaklaşımdır. Tamamen modüler yapısı sayesinde kod bakımı kolaydır ve hata yönetimi try/catch
ile güvenli şekilde yapılabilir. Performans açısından yoğun işlemler için crypto.promises
kullanımı tavsiye edilir.
Node.js Kriptografi için en iyi uygulamalar ve yaygın hatalar:
- Rastgele değerler için
crypto.randomBytes()
kullanın,Math.random()
kullanmayın. - IV ve anahtarları tekrar kullanmaktan kaçının; her işlem için benzersiz olmalıdır.
- Anahtar türetiminde
scrypt
veyapbkdf2
gibi güvenli fonksiyonlar kullanın. - Veri bütünlüğü doğrulaması için
Auth Tag
veya dijital imza kullanın. - Modern algoritmalar tercih edin: AES-256-GCM, RSA-2048, SHA-256; MD5 ve SHA-1 kaçının.
Yaygın hatalar arasında buffer sızıntıları, hatalı çözme işlemleri ve anahtarların güvenli olmayan biçimde saklanması vardır. Debug için işlemleri sınıflara kapsüller vetry/catch
kullanın. Performans için asenkron yöntemler (crypto.promises
) ve veri akışlarını (streams
) tercih edin.
📊 Referans Tablosu
Node.js Element/Concept | Description | Usage Example |
---|---|---|
crypto.createCipheriv | Şifreleme nesnesi oluşturur | crypto.createCipheriv('aes-256-cbc', key, iv) |
crypto.createDecipheriv | Çözme nesnesi oluşturur | crypto.createDecipheriv('aes-256-cbc', key, iv) |
crypto.scryptSync | Paroladan güvenli anahtar türetir | const key = crypto.scryptSync('parola', 'tuz', 32) |
crypto.randomBytes | Güvenli rastgele byte üretir | const iv = crypto.randomBytes(16) |
cipher.getAuthTag | GCM doğrulama etiketi alır | const tag = cipher.getAuthTag() |
crypto.createHash | Veri doğrulama için hash oluşturur | crypto.createHash('sha256').update(data).digest('hex') |
Kriptografi öğrenimi sonunda Node.js projelerinde veri güvenliğini sağlamak, bütünlük kontrolü yapmak ve güvenli anahtar yönetimi uygulamak mümkün hale gelir. Bu beceriler, web uygulamaları ve mikro servis mimarilerinde kritik güvenlik katmanları oluşturur.
Bir sonraki adım, dijital imzalar (RSA, ECDSA), JWT token oluşturma/validasyonu ve asimetrik şifreleme ile anahtar değişimi gibi ileri konulara odaklanmaktır. Üretim ortamlarında, AWS KMS veya HashiCorp Vault gibi güvenli anahtar yönetim sistemlerini kullanmak önerilir. Node.js kriptografi yetenekleri, güvenli ve ölçeklenebilir uygulamalar geliştirmek için temel bir araçtır.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek